From 4a7d84ccaea61d5750ac114eee0068c4ce44157c Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Wed, 18 Oct 2023 18:39:04 +0400 Subject: [PATCH 01/69] GH-53: Collect countries' metadata Signed-off-by: Artyom Vancyan --- src/legacy/countries.json | 2742 +++++++++++++++++++++++++++++++++++++ 1 file changed, 2742 insertions(+) create mode 100644 src/legacy/countries.json diff --git a/src/legacy/countries.json b/src/legacy/countries.json new file mode 100644 index 0000000..efb44bf --- /dev/null +++ b/src/legacy/countries.json @@ -0,0 +1,2742 @@ +[ + [ + "ad", + "376", + "Andorra" + ], + [ + "ae", + "971", + "United Arab Emirates" + ], + [ + "af", + "93", + "Afghanistan" + ], + [ + "ag", + "1268", + "Antigua and Barbuda" + ], + [ + "al", + "355", + "Albania" + ], + [ + "am", + "374", + "Armenia" + ], + [ + "ao", + "244", + "Angola" + ], + [ + "ar", + "54", + "Argentina" + ], + [ + "ar", + "5411", + "Argentina" + ], + [ + "ar", + "54221", + "Argentina" + ], + [ + "ar", + "54223", + "Argentina" + ], + [ + "ar", + "54261", + "Argentina" + ], + [ + "ar", + "54264", + "Argentina" + ], + [ + "ar", + "542652", + "Argentina" + ], + [ + "ar", + "54280", + "Argentina" + ], + [ + "ar", + "542905", + "Argentina" + ], + [ + "ar", + "54291", + "Argentina" + ], + [ + "ar", + "542920", + "Argentina" + ], + [ + "ar", + "542966", + "Argentina" + ], + [ + "ar", + "54299", + "Argentina" + ], + [ + "ar", + "54341", + "Argentina" + ], + [ + "ar", + "54342", + "Argentina" + ], + [ + "ar", + "54343", + "Argentina" + ], + [ + "ar", + "54351", + "Argentina" + ], + [ + "ar", + "54376", + "Argentina" + ], + [ + "ar", + "54379", + "Argentina" + ], + [ + "ar", + "54381", + "Argentina" + ], + [ + "ar", + "543833", + "Argentina" + ], + [ + "ar", + "54385", + "Argentina" + ], + [ + "ar", + "54387", + "Argentina" + ], + [ + "ar", + "54388", + "Argentina" + ], + [ + "at", + "43", + "Austria" + ], + [ + "au", + "61", + "Australia" + ], + [ + "au", + "612", + "Australia" + ], + [ + "au", + "613", + "Australia" + ], + [ + "au", + "614", + "Australia" + ], + [ + "au", + "617", + "Australia" + ], + [ + "au", + "618", + "Australia" + ], + [ + "au", + "6102", + "Australia" + ], + [ + "au", + "6103", + "Australia" + ], + [ + "au", + "6104", + "Australia" + ], + [ + "au", + "6107", + "Australia" + ], + [ + "au", + "6108", + "Australia" + ], + [ + "aw", + "297", + "Aruba" + ], + [ + "az", + "994", + "Azerbaijan" + ], + [ + "ba", + "387", + "Bosnia and Herzegovina" + ], + [ + "bb", + "1246", + "Barbados" + ], + [ + "bd", + "880", + "Bangladesh" + ], + [ + "be", + "32", + "Belgium" + ], + [ + "bf", + "226", + "Burkina Faso" + ], + [ + "bg", + "359", + "Bulgaria" + ], + [ + "bh", + "973", + "Bahrain" + ], + [ + "bi", + "257", + "Burundi" + ], + [ + "bj", + "229", + "Benin" + ], + [ + "bn", + "673", + "Brunei" + ], + [ + "bo", + "591", + "Bolivia" + ], + [ + "br", + "55", + "Brazil" + ], + [ + "bs", + "1242", + "Bahamas" + ], + [ + "bt", + "975", + "Bhutan" + ], + [ + "bw", + "267", + "Botswana" + ], + [ + "by", + "375", + "Belarus" + ], + [ + "bz", + "501", + "Belize" + ], + [ + "ca", + "1204", + "Canada" + ], + [ + "ca", + "1226", + "Canada" + ], + [ + "ca", + "1236", + "Canada" + ], + [ + "ca", + "1249", + "Canada" + ], + [ + "ca", + "1250", + "Canada" + ], + [ + "ca", + "1289", + "Canada" + ], + [ + "ca", + "1306", + "Canada" + ], + [ + "ca", + "1343", + "Canada" + ], + [ + "ca", + "1365", + "Canada" + ], + [ + "ca", + "1387", + "Canada" + ], + [ + "ca", + "1403", + "Canada" + ], + [ + "ca", + "1416", + "Canada" + ], + [ + "ca", + "1418", + "Canada" + ], + [ + "ca", + "1431", + "Canada" + ], + [ + "ca", + "1437", + "Canada" + ], + [ + "ca", + "1438", + "Canada" + ], + [ + "ca", + "1450", + "Canada" + ], + [ + "ca", + "1506", + "Canada" + ], + [ + "ca", + "1514", + "Canada" + ], + [ + "ca", + "1519", + "Canada" + ], + [ + "ca", + "1548", + "Canada" + ], + [ + "ca", + "1579", + "Canada" + ], + [ + "ca", + "1581", + "Canada" + ], + [ + "ca", + "1587", + "Canada" + ], + [ + "ca", + "1604", + "Canada" + ], + [ + "ca", + "1613", + "Canada" + ], + [ + "ca", + "1639", + "Canada" + ], + [ + "ca", + "1647", + "Canada" + ], + [ + "ca", + "1672", + "Canada" + ], + [ + "ca", + "1705", + "Canada" + ], + [ + "ca", + "1709", + "Canada" + ], + [ + "ca", + "1742", + "Canada" + ], + [ + "ca", + "1778", + "Canada" + ], + [ + "ca", + "1780", + "Canada" + ], + [ + "ca", + "1782", + "Canada" + ], + [ + "ca", + "1807", + "Canada" + ], + [ + "ca", + "1819", + "Canada" + ], + [ + "ca", + "1825", + "Canada" + ], + [ + "ca", + "1867", + "Canada" + ], + [ + "ca", + "1873", + "Canada" + ], + [ + "ca", + "1902", + "Canada" + ], + [ + "ca", + "1905", + "Canada" + ], + [ + "cd", + "243", + "Congo" + ], + [ + "cf", + "236", + "Central African Republic" + ], + [ + "cg", + "242", + "Congo" + ], + [ + "ch", + "41", + "Switzerland" + ], + [ + "ci", + "225", + "C\u00f4te d\u2019Ivoire" + ], + [ + "cl", + "56", + "Chile" + ], + [ + "cm", + "237", + "Cameroon" + ], + [ + "cn", + "86", + "China" + ], + [ + "co", + "57", + "Colombia" + ], + [ + "cr", + "506", + "Costa Rica" + ], + [ + "cu", + "53", + "Cuba" + ], + [ + "cv", + "238", + "Cape Verde" + ], + [ + "cw", + "599", + "Cura\u00e7ao" + ], + [ + "cy", + "357", + "Cyprus" + ], + [ + "cz", + "420", + "Czech Republic" + ], + [ + "de", + "49", + "Germany" + ], + [ + "dj", + "253", + "Djibouti" + ], + [ + "dk", + "45", + "Denmark" + ], + [ + "dm", + "1767", + "Dominica" + ], + [ + "do", + "1809", + "Dominican Republic" + ], + [ + "do", + "1829", + "Dominican Republic" + ], + [ + "do", + "1849", + "Dominican Republic" + ], + [ + "dz", + "213", + "Algeria" + ], + [ + "ec", + "593", + "Ecuador" + ], + [ + "ee", + "372", + "Estonia" + ], + [ + "eg", + "20", + "Egypt" + ], + [ + "er", + "291", + "Eritrea" + ], + [ + "es", + "34", + "Spain" + ], + [ + "et", + "251", + "Ethiopia" + ], + [ + "fi", + "358", + "Finland" + ], + [ + "fj", + "679", + "Fiji" + ], + [ + "fm", + "691", + "Micronesia" + ], + [ + "fr", + "33", + "France" + ], + [ + "ga", + "241", + "Gabon" + ], + [ + "gb", + "44", + "United Kingdom" + ], + [ + "gd", + "1473", + "Grenada" + ], + [ + "ge", + "995", + "Georgia" + ], + [ + "gf", + "594", + "French Guiana" + ], + [ + "gh", + "233", + "Ghana" + ], + [ + "gm", + "220", + "Gambia" + ], + [ + "gn", + "224", + "Guinea" + ], + [ + "gp", + "590", + "Guadeloupe" + ], + [ + "gq", + "240", + "Equatorial Guinea" + ], + [ + "gr", + "30", + "Greece" + ], + [ + "gt", + "502", + "Guatemala" + ], + [ + "gu", + "1671", + "Guam" + ], + [ + "gw", + "245", + "Guinea-Bissau" + ], + [ + "gy", + "592", + "Guyana" + ], + [ + "hk", + "852", + "Hong Kong" + ], + [ + "hn", + "504", + "Honduras" + ], + [ + "hr", + "385", + "Croatia" + ], + [ + "ht", + "509", + "Haiti" + ], + [ + "hu", + "36", + "Hungary" + ], + [ + "id", + "62", + "Indonesia" + ], + [ + "ie", + "353", + "Ireland" + ], + [ + "il", + "972", + "Israel" + ], + [ + "in", + "91", + "India" + ], + [ + "io", + "246", + "British Indian Ocean Territory" + ], + [ + "iq", + "964", + "Iraq" + ], + [ + "ir", + "98", + "Iran" + ], + [ + "is", + "354", + "Iceland" + ], + [ + "jm", + "1876", + "Jamaica" + ], + [ + "jo", + "962", + "Jordan" + ], + [ + "jp", + "81", + "Japan" + ], + [ + "ke", + "254", + "Kenya" + ], + [ + "kg", + "996", + "Kyrgyzstan" + ], + [ + "kh", + "855", + "Cambodia" + ], + [ + "ki", + "686", + "Kiribati" + ], + [ + "km", + "269", + "Comoros" + ], + [ + "kn", + "1869", + "Saint Kitts and Nevis" + ], + [ + "kp", + "850", + "North Korea" + ], + [ + "kr", + "82", + "South Korea" + ], + [ + "kw", + "965", + "Kuwait" + ], + [ + "kz", + "7310", + "Kazakhstan" + ], + [ + "kz", + "7311", + "Kazakhstan" + ], + [ + "kz", + "7312", + "Kazakhstan" + ], + [ + "kz", + "7313", + "Kazakhstan" + ], + [ + "kz", + "7315", + "Kazakhstan" + ], + [ + "kz", + "7318", + "Kazakhstan" + ], + [ + "kz", + "7321", + "Kazakhstan" + ], + [ + "kz", + "7324", + "Kazakhstan" + ], + [ + "kz", + "7325", + "Kazakhstan" + ], + [ + "kz", + "7326", + "Kazakhstan" + ], + [ + "kz", + "7327", + "Kazakhstan" + ], + [ + "kz", + "7336", + "Kazakhstan" + ], + [ + "kz", + "77172", + "Kazakhstan" + ], + [ + "kz", + "773622", + "Kazakhstan" + ], + [ + "la", + "856", + "Laos" + ], + [ + "lb", + "961", + "Lebanon" + ], + [ + "lc", + "1758", + "Saint Lucia" + ], + [ + "li", + "423", + "Liechtenstein" + ], + [ + "lk", + "94", + "Sri Lanka" + ], + [ + "lr", + "231", + "Liberia" + ], + [ + "ls", + "266", + "Lesotho" + ], + [ + "lt", + "370", + "Lithuania" + ], + [ + "lu", + "352", + "Luxembourg" + ], + [ + "lv", + "371", + "Latvia" + ], + [ + "ly", + "218", + "Libya" + ], + [ + "ma", + "212", + "Morocco" + ], + [ + "mc", + "377", + "Monaco" + ], + [ + "md", + "373", + "Moldova" + ], + [ + "me", + "382", + "Montenegro" + ], + [ + "mg", + "261", + "Madagascar" + ], + [ + "mh", + "692", + "Marshall Islands" + ], + [ + "mk", + "389", + "Macedonia" + ], + [ + "ml", + "223", + "Mali" + ], + [ + "mm", + "95", + "Myanmar" + ], + [ + "mn", + "976", + "Mongolia" + ], + [ + "mo", + "853", + "Macau" + ], + [ + "mq", + "596", + "Martinique" + ], + [ + "mr", + "222", + "Mauritania" + ], + [ + "mt", + "356", + "Malta" + ], + [ + "mu", + "230", + "Mauritius" + ], + [ + "mv", + "960", + "Maldives" + ], + [ + "mw", + "265", + "Malawi" + ], + [ + "mx", + "52", + "Mexico" + ], + [ + "mx", + "5255", + "Mexico" + ], + [ + "mx", + "5281", + "Mexico" + ], + [ + "mx", + "5233", + "Mexico" + ], + [ + "mx", + "52656", + "Mexico" + ], + [ + "mx", + "52664", + "Mexico" + ], + [ + "mx", + "52998", + "Mexico" + ], + [ + "mx", + "52774", + "Mexico" + ], + [ + "mx", + "52229", + "Mexico" + ], + [ + "my", + "60", + "Malaysia" + ], + [ + "mz", + "258", + "Mozambique" + ], + [ + "na", + "264", + "Namibia" + ], + [ + "nc", + "687", + "New Caledonia" + ], + [ + "ne", + "227", + "Niger" + ], + [ + "ng", + "234", + "Nigeria" + ], + [ + "ni", + "505", + "Nicaragua" + ], + [ + "nl", + "31", + "Netherlands" + ], + [ + "no", + "47", + "Norway" + ], + [ + "np", + "977", + "Nepal" + ], + [ + "nr", + "674", + "Nauru" + ], + [ + "nz", + "64", + "New Zealand" + ], + [ + "om", + "968", + "Oman" + ], + [ + "pa", + "507", + "Panama" + ], + [ + "pe", + "51", + "Peru" + ], + [ + "pf", + "689", + "French Polynesia" + ], + [ + "pg", + "675", + "Papua New Guinea" + ], + [ + "ph", + "63", + "Philippines" + ], + [ + "pk", + "92", + "Pakistan" + ], + [ + "pl", + "48", + "Poland" + ], + [ + "pr", + "1787", + "Puerto Rico" + ], + [ + "pr", + "1939", + "Puerto Rico" + ], + [ + "ps", + "970", + "Palestine" + ], + [ + "pt", + "351", + "Portugal" + ], + [ + "pw", + "680", + "Palau" + ], + [ + "py", + "595", + "Paraguay" + ], + [ + "qa", + "974", + "Qatar" + ], + [ + "re", + "262", + "R\u00e9union" + ], + [ + "ro", + "40", + "Romania" + ], + [ + "rs", + "381", + "Serbia" + ], + [ + "ru", + "7", + "Russia" + ], + [ + "rw", + "250", + "Rwanda" + ], + [ + "sa", + "966", + "Saudi Arabia" + ], + [ + "sb", + "677", + "Solomon Islands" + ], + [ + "sc", + "248", + "Seychelles" + ], + [ + "sd", + "249", + "Sudan" + ], + [ + "se", + "46", + "Sweden" + ], + [ + "sg", + "65", + "Singapore" + ], + [ + "si", + "386", + "Slovenia" + ], + [ + "sk", + "421", + "Slovakia" + ], + [ + "sl", + "232", + "Sierra Leone" + ], + [ + "sm", + "378", + "San Marino" + ], + [ + "sn", + "221", + "Senegal" + ], + [ + "so", + "252", + "Somalia" + ], + [ + "sr", + "597", + "Suriname" + ], + [ + "ss", + "211", + "South Sudan" + ], + [ + "st", + "239", + "S\u00e3o Tom\u00e9 and Pr\u00edncipe" + ], + [ + "sv", + "503", + "El Salvador" + ], + [ + "sy", + "963", + "Syria" + ], + [ + "sz", + "268", + "Swaziland" + ], + [ + "td", + "235", + "Chad" + ], + [ + "tg", + "228", + "Togo" + ], + [ + "th", + "66", + "Thailand" + ], + [ + "tj", + "992", + "Tajikistan" + ], + [ + "tl", + "670", + "Timor-Leste" + ], + [ + "tm", + "993", + "Turkmenistan" + ], + [ + "tn", + "216", + "Tunisia" + ], + [ + "to", + "676", + "Tonga" + ], + [ + "tr", + "90", + "Turkey" + ], + [ + "tt", + "1868", + "Trinidad and Tobago" + ], + [ + "tv", + "688", + "Tuvalu" + ], + [ + "tw", + "886", + "Taiwan" + ], + [ + "tz", + "255", + "Tanzania" + ], + [ + "ua", + "380", + "Ukraine" + ], + [ + "ug", + "256", + "Uganda" + ], + [ + "us", + "1", + "United States" + ], + [ + "us", + "1907", + "United States" + ], + [ + "us", + "1205", + "United States" + ], + [ + "us", + "1251", + "United States" + ], + [ + "us", + "1256", + "United States" + ], + [ + "us", + "1334", + "United States" + ], + [ + "us", + "1479", + "United States" + ], + [ + "us", + "1501", + "United States" + ], + [ + "us", + "1870", + "United States" + ], + [ + "us", + "1480", + "United States" + ], + [ + "us", + "1520", + "United States" + ], + [ + "us", + "1602", + "United States" + ], + [ + "us", + "1623", + "United States" + ], + [ + "us", + "1928", + "United States" + ], + [ + "us", + "1209", + "United States" + ], + [ + "us", + "1213", + "United States" + ], + [ + "us", + "1310", + "United States" + ], + [ + "us", + "1323", + "United States" + ], + [ + "us", + "1408", + "United States" + ], + [ + "us", + "1415", + "United States" + ], + [ + "us", + "1510", + "United States" + ], + [ + "us", + "1530", + "United States" + ], + [ + "us", + "1559", + "United States" + ], + [ + "us", + "1562", + "United States" + ], + [ + "us", + "1619", + "United States" + ], + [ + "us", + "1626", + "United States" + ], + [ + "us", + "1650", + "United States" + ], + [ + "us", + "1661", + "United States" + ], + [ + "us", + "1707", + "United States" + ], + [ + "us", + "1714", + "United States" + ], + [ + "us", + "1760", + "United States" + ], + [ + "us", + "1805", + "United States" + ], + [ + "us", + "1818", + "United States" + ], + [ + "us", + "1831", + "United States" + ], + [ + "us", + "1858", + "United States" + ], + [ + "us", + "1909", + "United States" + ], + [ + "us", + "1916", + "United States" + ], + [ + "us", + "1925", + "United States" + ], + [ + "us", + "1949", + "United States" + ], + [ + "us", + "1951", + "United States" + ], + [ + "us", + "1303", + "United States" + ], + [ + "us", + "1719", + "United States" + ], + [ + "us", + "1970", + "United States" + ], + [ + "us", + "1203", + "United States" + ], + [ + "us", + "1860", + "United States" + ], + [ + "us", + "1202", + "United States" + ], + [ + "us", + "1302", + "United States" + ], + [ + "us", + "1239", + "United States" + ], + [ + "us", + "1305", + "United States" + ], + [ + "us", + "1321", + "United States" + ], + [ + "us", + "1352", + "United States" + ], + [ + "us", + "1386", + "United States" + ], + [ + "us", + "1407", + "United States" + ], + [ + "us", + "1561", + "United States" + ], + [ + "us", + "1727", + "United States" + ], + [ + "us", + "1772", + "United States" + ], + [ + "us", + "1813", + "United States" + ], + [ + "us", + "1850", + "United States" + ], + [ + "us", + "1863", + "United States" + ], + [ + "us", + "1904", + "United States" + ], + [ + "us", + "1941", + "United States" + ], + [ + "us", + "1954", + "United States" + ], + [ + "us", + "1229", + "United States" + ], + [ + "us", + "1404", + "United States" + ], + [ + "us", + "1478", + "United States" + ], + [ + "us", + "1706", + "United States" + ], + [ + "us", + "1770", + "United States" + ], + [ + "us", + "1912", + "United States" + ], + [ + "us", + "1808", + "United States" + ], + [ + "us", + "1319", + "United States" + ], + [ + "us", + "1515", + "United States" + ], + [ + "us", + "1563", + "United States" + ], + [ + "us", + "1641", + "United States" + ], + [ + "us", + "1712", + "United States" + ], + [ + "us", + "1208", + "United States" + ], + [ + "us", + "1217", + "United States" + ], + [ + "us", + "1309", + "United States" + ], + [ + "us", + "1312", + "United States" + ], + [ + "us", + "1618", + "United States" + ], + [ + "us", + "1630", + "United States" + ], + [ + "us", + "1708", + "United States" + ], + [ + "us", + "1773", + "United States" + ], + [ + "us", + "1815", + "United States" + ], + [ + "us", + "1847", + "United States" + ], + [ + "us", + "1219", + "United States" + ], + [ + "us", + "1260", + "United States" + ], + [ + "us", + "1317", + "United States" + ], + [ + "us", + "1574", + "United States" + ], + [ + "us", + "1765", + "United States" + ], + [ + "us", + "1812", + "United States" + ], + [ + "us", + "1316", + "United States" + ], + [ + "us", + "1620", + "United States" + ], + [ + "us", + "1785", + "United States" + ], + [ + "us", + "1913", + "United States" + ], + [ + "us", + "1270", + "United States" + ], + [ + "us", + "1502", + "United States" + ], + [ + "us", + "1606", + "United States" + ], + [ + "us", + "1859", + "United States" + ], + [ + "us", + "1225", + "United States" + ], + [ + "us", + "1318", + "United States" + ], + [ + "us", + "1337", + "United States" + ], + [ + "us", + "1504", + "United States" + ], + [ + "us", + "1985", + "United States" + ], + [ + "us", + "1413", + "United States" + ], + [ + "us", + "1508", + "United States" + ], + [ + "us", + "1617", + "United States" + ], + [ + "us", + "1781", + "United States" + ], + [ + "us", + "1978", + "United States" + ], + [ + "us", + "1301", + "United States" + ], + [ + "us", + "1410", + "United States" + ], + [ + "us", + "1207", + "United States" + ], + [ + "us", + "1231", + "United States" + ], + [ + "us", + "1248", + "United States" + ], + [ + "us", + "1269", + "United States" + ], + [ + "us", + "1313", + "United States" + ], + [ + "us", + "1517", + "United States" + ], + [ + "us", + "1586", + "United States" + ], + [ + "us", + "1616", + "United States" + ], + [ + "us", + "1734", + "United States" + ], + [ + "us", + "1810", + "United States" + ], + [ + "us", + "1906", + "United States" + ], + [ + "us", + "1989", + "United States" + ], + [ + "us", + "1218", + "United States" + ], + [ + "us", + "1320", + "United States" + ], + [ + "us", + "1507", + "United States" + ], + [ + "us", + "1612", + "United States" + ], + [ + "us", + "1651", + "United States" + ], + [ + "us", + "1763", + "United States" + ], + [ + "us", + "1952", + "United States" + ], + [ + "us", + "1314", + "United States" + ], + [ + "us", + "1417", + "United States" + ], + [ + "us", + "1573", + "United States" + ], + [ + "us", + "1636", + "United States" + ], + [ + "us", + "1660", + "United States" + ], + [ + "us", + "1816", + "United States" + ], + [ + "us", + "1228", + "United States" + ], + [ + "us", + "1601", + "United States" + ], + [ + "us", + "1662", + "United States" + ], + [ + "us", + "1406", + "United States" + ], + [ + "us", + "1252", + "United States" + ], + [ + "us", + "1336", + "United States" + ], + [ + "us", + "1704", + "United States" + ], + [ + "us", + "1828", + "United States" + ], + [ + "us", + "1910", + "United States" + ], + [ + "us", + "1919", + "United States" + ], + [ + "us", + "1701", + "United States" + ], + [ + "us", + "1308", + "United States" + ], + [ + "us", + "1402", + "United States" + ], + [ + "us", + "1603", + "United States" + ], + [ + "us", + "1201", + "United States" + ], + [ + "us", + "1609", + "United States" + ], + [ + "us", + "1732", + "United States" + ], + [ + "us", + "1856", + "United States" + ], + [ + "us", + "1908", + "United States" + ], + [ + "us", + "1973", + "United States" + ], + [ + "us", + "1505", + "United States" + ], + [ + "us", + "1575", + "United States" + ], + [ + "us", + "1702", + "United States" + ], + [ + "us", + "1775", + "United States" + ], + [ + "us", + "1212", + "United States" + ], + [ + "us", + "1315", + "United States" + ], + [ + "us", + "1516", + "United States" + ], + [ + "us", + "1518", + "United States" + ], + [ + "us", + "1585", + "United States" + ], + [ + "us", + "1607", + "United States" + ], + [ + "us", + "1631", + "United States" + ], + [ + "us", + "1716", + "United States" + ], + [ + "us", + "1718", + "United States" + ], + [ + "us", + "1845", + "United States" + ], + [ + "us", + "1914", + "United States" + ], + [ + "us", + "1216", + "United States" + ], + [ + "us", + "1330", + "United States" + ], + [ + "us", + "1419", + "United States" + ], + [ + "us", + "1440", + "United States" + ], + [ + "us", + "1513", + "United States" + ], + [ + "us", + "1614", + "United States" + ], + [ + "us", + "1740", + "United States" + ], + [ + "us", + "1937", + "United States" + ], + [ + "us", + "1405", + "United States" + ], + [ + "us", + "1580", + "United States" + ], + [ + "us", + "1918", + "United States" + ], + [ + "us", + "1503", + "United States" + ], + [ + "us", + "1541", + "United States" + ], + [ + "us", + "1215", + "United States" + ], + [ + "us", + "1412", + "United States" + ], + [ + "us", + "1570", + "United States" + ], + [ + "us", + "1610", + "United States" + ], + [ + "us", + "1717", + "United States" + ], + [ + "us", + "1724", + "United States" + ], + [ + "us", + "1814", + "United States" + ], + [ + "us", + "1401", + "United States" + ], + [ + "us", + "1803", + "United States" + ], + [ + "us", + "1843", + "United States" + ], + [ + "us", + "1864", + "United States" + ], + [ + "us", + "1605", + "United States" + ], + [ + "us", + "1423", + "United States" + ], + [ + "us", + "1615", + "United States" + ], + [ + "us", + "1731", + "United States" + ], + [ + "us", + "1865", + "United States" + ], + [ + "us", + "1901", + "United States" + ], + [ + "us", + "1931", + "United States" + ], + [ + "us", + "1210", + "United States" + ], + [ + "us", + "1214", + "United States" + ], + [ + "us", + "1254", + "United States" + ], + [ + "us", + "1281", + "United States" + ], + [ + "us", + "1325", + "United States" + ], + [ + "us", + "1361", + "United States" + ], + [ + "us", + "1409", + "United States" + ], + [ + "us", + "1432", + "United States" + ], + [ + "us", + "1512", + "United States" + ], + [ + "us", + "1713", + "United States" + ], + [ + "us", + "1806", + "United States" + ], + [ + "us", + "1817", + "United States" + ], + [ + "us", + "1830", + "United States" + ], + [ + "us", + "1903", + "United States" + ], + [ + "us", + "1915", + "United States" + ], + [ + "us", + "1936", + "United States" + ], + [ + "us", + "1940", + "United States" + ], + [ + "us", + "1956", + "United States" + ], + [ + "us", + "1972", + "United States" + ], + [ + "us", + "1979", + "United States" + ], + [ + "us", + "1435", + "United States" + ], + [ + "us", + "1801", + "United States" + ], + [ + "us", + "1276", + "United States" + ], + [ + "us", + "1434", + "United States" + ], + [ + "us", + "1540", + "United States" + ], + [ + "us", + "1703", + "United States" + ], + [ + "us", + "1757", + "United States" + ], + [ + "us", + "1804", + "United States" + ], + [ + "us", + "1802", + "United States" + ], + [ + "us", + "1206", + "United States" + ], + [ + "us", + "1253", + "United States" + ], + [ + "us", + "1360", + "United States" + ], + [ + "us", + "1425", + "United States" + ], + [ + "us", + "1509", + "United States" + ], + [ + "us", + "1262", + "United States" + ], + [ + "us", + "1414", + "United States" + ], + [ + "us", + "1608", + "United States" + ], + [ + "us", + "1715", + "United States" + ], + [ + "us", + "1920", + "United States" + ], + [ + "us", + "1304", + "United States" + ], + [ + "us", + "1307", + "United States" + ], + [ + "uy", + "598", + "Uruguay" + ], + [ + "uz", + "998", + "Uzbekistan" + ], + [ + "va", + "39", + "Vatican City" + ], + [ + "vc", + "1784", + "Saint Vincent and the Grenadines" + ], + [ + "ve", + "58", + "Venezuela" + ], + [ + "vn", + "84", + "Vietnam" + ], + [ + "vu", + "678", + "Vanuatu" + ], + [ + "ws", + "685", + "Samoa" + ], + [ + "xk", + "383", + "Kosovo" + ], + [ + "ye", + "967", + "Yemen" + ], + [ + "za", + "27", + "South Africa" + ], + [ + "zm", + "260", + "Zambia" + ], + [ + "zw", + "263", + "Zimbabwe" + ] +] \ No newline at end of file From 8ce17d7ea888a76f533cbfe6cdbe624a61573e74 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Wed, 18 Oct 2023 18:39:52 +0400 Subject: [PATCH 02/69] GH-53: Get rid of `react-phone-input-2` related styles Signed-off-by: Artyom Vancyan --- src/legacy/style.less | 83 ------------------------------------------- src/legacy/style.ts | 15 -------- src/style.ts | 28 --------------- 3 files changed, 126 deletions(-) delete mode 100644 src/legacy/style.less delete mode 100644 src/style.ts diff --git a/src/legacy/style.less b/src/legacy/style.less deleted file mode 100644 index dcb8e2c..0000000 --- a/src/legacy/style.less +++ /dev/null @@ -1,83 +0,0 @@ -.ant-form-item { - &.ant-form-item-has-error { - .react-tel-input { - .form-control { - border-color: @error-color; - - &:hover { - border-color: @error-color; - } - - &:focus { - border-color: @error-color; - box-shadow: 0 0 0 2px @error-color-outline; - } - } - } - } -} - -.react-tel-input { - .form-control { - .ant-input(); - z-index: 3; - height: inherit; - padding-left: 48px; - - &.open { - z-index: 6 !important; - } - } - - .country-list { - width: 100%; - margin: 3px 0; - box-shadow: @box-shadow-base; - border-radius: @border-radius-base; - background-color: @select-dropdown-bg; - - .country { - &:hover { - background-color: @select-item-active-bg; - } - - &.highlight { - background-color: @select-item-selected-bg; - } - } - - .search { - padding: 10px; - background-color: @select-dropdown-bg; - - .search-box { - .ant-input(); - } - } - } - - .flag-dropdown, - .flag-dropdown.open { - width: 100%; - border: none; - background-color: transparent; - border-radius: @border-radius-base; - - .arrow { - display: none; - } - - .selected-flag { - z-index: 4; - padding: 0; - display: flex; - justify-content: center; - background-color: transparent; - border-right: @border-width-base @border-style-base @border-color-base; - } - - &.open { - z-index: 6 !important; - } - } -} diff --git a/src/legacy/style.ts b/src/legacy/style.ts index 4ef3b4a..25f1ba6 100644 --- a/src/legacy/style.ts +++ b/src/legacy/style.ts @@ -1,19 +1,4 @@ export default (cssText: string) => { - /** Resolve the overlap issue of the CSS rules when using Bootstrap */ - for (const styleSheet of Array.from(document.styleSheets)) { - try { - for (const rule of Array.from(styleSheet.cssRules || styleSheet.rules)) { - if (rule instanceof CSSStyleRule) { - rule.selectorText = rule.selectorText.replace( - /^\.form-control(?=:|$)/, - ".form-control:not(.ant-input)", - ) - } - } - } catch (e) { - } - } - /** Inject the given `cssText` in the document head */ const style = document.createElement("style"); style.setAttribute("type", "text/css"); diff --git a/src/style.ts b/src/style.ts deleted file mode 100644 index 61256ba..0000000 --- a/src/style.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {mergeToken} from "antd/lib/theme/internal"; -import * as inputHelper from "antd/lib/input/style"; - -const inputStyle = inputHelper as any; - -export default (token: any) => ({ - ".react-tel-input": { - ".country-list": { - boxShadow: token.boxShadow, - backgroundColor: token.colorBgElevated, - ".country-name": {color: token.colorText}, - ".search": {backgroundColor: token.colorBgElevated}, - ".search-box": inputHelper.genBasicInputStyle( - mergeToken( - ("initInputToken" in inputStyle ? inputStyle.initInputToken : (() => ({})))(token), - ("initComponentToken" in inputStyle ? inputStyle.initComponentToken : (() => ({})))(token), - ) - ), - ".country": { - borderRadius: token.borderRadiusOuter, - ".dial-code": {color: token.colorTextDescription}, - "&:hover": {backgroundColor: token.colorBgTextHover}, - "&.highlight": {backgroundColor: token.colorPrimaryBg}, - }, - }, - ".selected-flag": {borderColor: token.colorBorder}, - } -}) \ No newline at end of file From 747fa648667bde2ead53297447f39e73c92759c9 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Wed, 18 Oct 2023 18:43:48 +0400 Subject: [PATCH 03/69] GH-53: Implement the initial version of new input Signed-off-by: Artyom Vancyan --- src/legacy/index.tsx | 268 +++++++++++++++++++++++-------------------- 1 file changed, 142 insertions(+), 126 deletions(-) diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx index 7a0f510..63739e4 100644 --- a/src/legacy/index.tsx +++ b/src/legacy/index.tsx @@ -1,145 +1,161 @@ -import {useCallback, useEffect, useMemo, useRef, useState} from "react"; -import ReactPhoneInput from "react-phone-input-2"; +import {useMemo, useState} from "react"; +import Select from "antd/es/select"; +import Input from "antd/es/input"; -import {CountryData, PhoneInputProps, PhoneNumber, ReactPhoneOnChange, ReactPhoneOnMount} from "../types"; +import {PhoneInputProps, PhoneNumber} from "../types"; -import styleInject from "./style"; -import masks from "./phoneMasks.json"; +// import masks from "./phoneMasks.json"; import timezones from "./timezones.json"; -import validations from "./validations.json"; +import countries from "./countries.json"; +// import validations from "./validations.json"; +import "./style5.css"; -styleInject("style5.css"); - -let browserLoaded = true; - -type ISO2Code = keyof typeof masks; +// type ISO2Code = keyof typeof masks; type Timezone = keyof typeof timezones; -const getDefaultISO2Code = () => { - /** Returns the default ISO2 code based on the user's timezone */ - const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone as Timezone; - return (timezones[timezone] || "").toLowerCase() || "us"; +const format = (value: PhoneNumber | string) => { + if (typeof value !== "string") { + const {countryCode, areaCode, phoneNumber} = {...value}; + value = [countryCode, areaCode, phoneNumber].filter(Boolean).join(""); + } + return value.replace(/^(?=\d)/, "+"); } -const parsePhoneNumber = (value: string, data: CountryData, formattedNumber: string): PhoneNumber => { - const isoCode = data?.countryCode; - const countryCodePattern = /\+\d+/; - const areaCodePattern = /\((\d+)\)/; - const dialCodePattern = /^\+[\d\s]+\([\d\s]+\)/; - - /** Parses the matching partials of the phone number by predefined regex patterns */ - const countryCodeMatch = formattedNumber ? (formattedNumber.match(countryCodePattern) || []) : []; - const areaCodeMatch = formattedNumber ? (formattedNumber.match(areaCodePattern) || []) : []; - const dialCodeMatch = formattedNumber ? (formattedNumber.match(dialCodePattern) || []) : []; - - /** Converts the parsed values of the country and area codes to integers if values present */ - const countryCode = countryCodeMatch.length > 0 ? parseInt(countryCodeMatch[0]) : null; - const areaCode = areaCodeMatch.length > 1 ? parseInt(areaCodeMatch[1]) : null; - - /** Obtaining the dial code for comparing to the existing one - if the country mask contains an area code */ - const dialCode = dialCodeMatch.length > 0 ? dialCodeMatch[0].replaceAll(/[+\s()]/g, "") : null; - const dialChanged = dialCode !== data?.dialCode; - - /** Parses the phone number by removing the country and area codes from the formatted value */ - const phoneNumberPattern = new RegExp(`^${countryCode}${(areaCode || "")}(\\d+)`); - const phoneNumberMatch = value ? (value.match(phoneNumberPattern) || []) : []; - const phoneNumber = phoneNumberMatch.length > 1 ? phoneNumberMatch[1] : null; - - return {countryCode, areaCode, phoneNumber, isoCode, dialChanged}; +const getDefaultISO2Code = () => { + /** Returns the default ISO2 code, based on the user's timezone */ + return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as Timezone] || "") || "us"; } +// const parsePhoneNumber = (value: string, data: CountryData, formattedNumber: string): PhoneNumber => { +// const isoCode = data?.countryCode; +// const countryCodePattern = /\+\d+/; +// const areaCodePattern = /\((\d+)\)/; +// const dialCodePattern = /^\+[\d\s]+\([\d\s]+\)/; +// +// /** Parses the matching partials of the phone number by predefined regex patterns */ +// const countryCodeMatch = formattedNumber ? (formattedNumber.match(countryCodePattern) || []) : []; +// const areaCodeMatch = formattedNumber ? (formattedNumber.match(areaCodePattern) || []) : []; +// const dialCodeMatch = formattedNumber ? (formattedNumber.match(dialCodePattern) || []) : []; +// +// /** Converts the parsed values of the country and area codes to integers if values present */ +// const countryCode = countryCodeMatch.length > 0 ? parseInt(countryCodeMatch[0]) : null; +// const areaCode = areaCodeMatch.length > 1 ? parseInt(areaCodeMatch[1]) : null; +// +// /** Obtaining the dial code for comparing to the existing one - if the country mask contains an area code */ +// const dialCode = dialCodeMatch.length > 0 ? dialCodeMatch[0].replaceAll(/[+\s()]/g, "") : null; +// const dialChanged = dialCode !== data?.dialCode; +// +// /** Parses the phone number by removing the country and area codes from the formatted value */ +// const phoneNumberPattern = new RegExp(`^${countryCode}${(areaCode || "")}(\\d+)`); +// const phoneNumberMatch = value ? (value.match(phoneNumberPattern) || []) : []; +// const phoneNumber = phoneNumberMatch.length > 1 ? phoneNumberMatch[1] : null; +// +// return {countryCode, areaCode, phoneNumber, isoCode, dialChanged}; +// } + const PhoneInput = ({ value, - style, + // style, country, - className, - size = "middle", - onPressEnter = () => null, - onMount: handleMount = () => null, - onChange: handleChange = () => null, - inputClass: inputClassProxy, - ...reactPhoneInputProps + // className, + // size = "middle", + // onPressEnter = () => null, + // onMount: handleMount = () => null, + // onChange: handleChange = () => null, + // inputClass: inputClassProxy, + // ...reactPhoneInputProps }: PhoneInputProps) => { - const loaded = useRef(browserLoaded); - const reset = useRef(false); - const initialized = useRef(false); - const [currentCode, setCurrentCode] = useState(""); - - const countryCode = useMemo(() => country || getDefaultISO2Code(), [country]); - - const rawPhone = useMemo(() => { - if (typeof value === "string") return value; - const {countryCode, areaCode, phoneNumber} = {...value}; - return [countryCode, areaCode, phoneNumber].filter(Boolean).join(""); - }, [value]); - - const inputClass = useMemo(() => { - const suffix = {small: "sm", middle: "", large: "lg"}[size]; - const className = "ant-input" + (suffix ? " ant-input-" + suffix : ""); - return inputClassProxy ? `${className} ${inputClassProxy}` : className; - }, [inputClassProxy, size]); - - const checkValidity = (metadata: PhoneNumber) => { - /** Checks if both the area code and phone number match the validation pattern */ - const pattern = new RegExp((validations as any)[metadata.isoCode as ISO2Code]); - const isValid = reset.current || ((loaded.current || initialized.current) ? pattern.test([ - metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")) : !initialized.current); - initialized.current = true; - loaded.current = false; - reset.current = false; - return isValid; - } - - const onChange: ReactPhoneOnChange = useCallback((value, data, event, formattedNumber) => { - const {dialChanged, ...metadata} = parsePhoneNumber(value, data, formattedNumber); - const code = metadata.isoCode as ISO2Code; - - if (code !== currentCode) { - /** Clears phone number when the country is selected manually */ - metadata.areaCode = dialChanged ? null : metadata.areaCode; - metadata.phoneNumber = null; - setCurrentCode(code); - } - - handleChange({...metadata, valid: () => checkValidity(metadata)}, event); - }, [currentCode, handleChange]); - - const onMount: ReactPhoneOnMount = useCallback((rawValue, {countryCode, ...event}, formattedNumber) => { - const {dialChanged, ...metadata} = parsePhoneNumber(rawValue, {countryCode}, formattedNumber); - /** Initializes the existing value */ - handleChange({...metadata, valid: () => checkValidity(metadata)}, event); - handleMount({...metadata, valid: () => checkValidity(metadata)}); - /** Sets the current country code to the code of the initial value */ - setCurrentCode(metadata.isoCode as ISO2Code); - if (loaded.current && !initialized.current) reset.current = true; - initialized.current = false; - }, [handleChange, handleMount]); - - useEffect(() => { - reset.current = !browserLoaded; - return () => { - browserLoaded = false; - } - }, []); + const defaultCountry = country || getDefaultISO2Code(); + const defaultDialCode = countries.find(([isoCode]) => isoCode === defaultCountry)?.[1]; + + const [minWidth, setMinWidth] = useState(0); + const [rawValue, setRawValue] = useState(format(value as any)); + const [dialCode, setDialCode] = useState(defaultDialCode); + + const countryCode = useMemo(() => { + return countries.find(([_, dial]) => dialCode === dial)?.[0]; + }, [dialCode]) + + console.log(countryCode); + + // const checkValidity = (metadata: PhoneNumber) => { + // // TODO: Update masks - create a script for preparing the masks (like it is done for validations) + // /** Checks if both the area code and phone number match the validation pattern */ + // const pattern = new RegExp((validations as any)[metadata.isoCode as ISO2Code]); + // const isValid = reset.current || ((loaded.current || initialized.current) ? pattern.test([ + // metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")) : !initialized.current); + // initialized.current = true; + // loaded.current = false; + // reset.current = false; + // return isValid; + // } + + // const onChange: ReactPhoneOnChange = useCallback((value, data, event, formattedNumber) => { + // const {dialChanged, ...metadata} = parsePhoneNumber(value, data, formattedNumber); + // const code = metadata.isoCode as ISO2Code; + // + // if (code !== currentCode) { + // /** Clears phone number when the country is selected manually */ + // metadata.areaCode = dialChanged ? null : metadata.areaCode; + // metadata.phoneNumber = null; + // setCurrentCode(code); + // } + // + // handleChange({...metadata, valid: () => checkValidity(metadata)}, event); + // }, [currentCode, handleChange]); + + // const onMount: ReactPhoneOnMount = useCallback((rawValue, {countryCode, ...event}, formattedNumber) => { + // const {dialChanged, ...metadata} = parsePhoneNumber(rawValue, {countryCode}, formattedNumber); + // /** Initializes the existing value */ + // handleChange({...metadata, valid: () => checkValidity(metadata)}, event); + // handleMount({...metadata, valid: () => checkValidity(metadata)}); + // /** Sets the current country code to the code of the initial value */ + // setCurrentCode(metadata.isoCode as ISO2Code); + // if (loaded.current && !initialized.current) reset.current = true; + // initialized.current = false; + // }, [handleChange, handleMount]); + + const countriesSelect = useMemo(() => ( + + ), [dialCode, minWidth]) return ( - +
setMinWidth(node?.offsetWidth || 0)}> + { + setRawValue(format(e.target.value)); + }} + // country={countryCode} + // inputClass={inputClass} + /** Dynamic properties for customization */ + // {...reactPhoneInputProps} + // containerStyle={style} + // containerClass={className} + // onEnterKeyPress={onPressEnter} + /> +
) } From 1e1a1914815eab310b3508d450a86c308ed045af Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 19 Oct 2023 20:05:24 +0400 Subject: [PATCH 04/69] GH-53: Remove the low-level class calculations Signed-off-by: Artyom Vancyan --- src/index.tsx | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index efac6b6..884470e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,42 +1,9 @@ -import {useContext, useMemo} from "react"; -import genComponentStyleHook from "antd/lib/input/style"; -import {ConfigContext} from "antd/lib/config-provider"; -import {FormItemInputContext} from "antd/lib/form/context"; -import {getStatusClassNames} from "antd/lib/_util/statusUtils"; -import {useStyleRegister, useToken} from "antd/lib/theme/internal"; - import InputLegacy from "./legacy"; -import genPhoneInputStyle from "./style"; import {PhoneInputProps} from "./types"; const PhoneInput = (inputLegacyProps: PhoneInputProps) => { - const {getPrefixCls} = useContext(ConfigContext); - const {status}: any = useContext(FormItemInputContext); - const inputPrefixCls = getPrefixCls("input"); - const dropdownPrefixCls = getPrefixCls("dropdown"); - const [_1, inputCls] = genComponentStyleHook(inputPrefixCls); - const [_2, dropdownCls] = genComponentStyleHook(dropdownPrefixCls); - const [theme, token] = useToken(); - - const inputClass = useMemo(() => { - return `${inputCls} ` + getStatusClassNames(inputPrefixCls, status); - }, [inputPrefixCls, inputCls, status]); - - const dropdownClass = useMemo(() => "ant-dropdown " + dropdownCls, [dropdownCls]); - - useStyleRegister({ - theme, - token, - hashId: "react-tel-input", - path: ["antd-phone-input"], - }, () => [genPhoneInputStyle(token)]); - return ( - + ) } From 7299bec8567325b4384411081d5239fca586338f Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 19 Oct 2023 20:06:07 +0400 Subject: [PATCH 05/69] GH-53: Lowercase the country codes Signed-off-by: Artyom Vancyan --- src/legacy/timezones.json | 884 +++++++++++++++++++------------------- 1 file changed, 442 insertions(+), 442 deletions(-) diff --git a/src/legacy/timezones.json b/src/legacy/timezones.json index 1d4fdf5..f3c7ca1 100644 --- a/src/legacy/timezones.json +++ b/src/legacy/timezones.json @@ -1,444 +1,444 @@ { - "Africa/Abidjan": "CI", - "Africa/Accra": "GH", - "Africa/Addis_Ababa": "ET", - "Africa/Algiers": "DZ", - "Africa/Asmara": "ER", - "Africa/Asmera": "ER", - "Africa/Bamako": "ML", - "Africa/Bangui": "CF", - "Africa/Banjul": "GM", - "Africa/Bissau": "GW", - "Africa/Blantyre": "MW", - "Africa/Brazzaville": "CG", - "Africa/Bujumbura": "BI", - "Africa/Cairo": "EG", - "Africa/Casablanca": "MA", - "Africa/Ceuta": "ES", - "Africa/Conakry": "GN", - "Africa/Dakar": "SN", - "Africa/Dar_es_Salaam": "TZ", - "Africa/Djibouti": "DJ", - "Africa/Douala": "CM", - "Africa/El_Aaiun": "MA", - "Africa/Freetown": "SL", - "Africa/Gaborone": "BW", - "Africa/Harare": "ZW", - "Africa/Johannesburg": "ZA", - "Africa/Juba": "SS", - "Africa/Kampala": "UG", - "Africa/Khartoum": "SD", - "Africa/Kigali": "RW", - "Africa/Kinshasa": "CD", - "Africa/Lagos": "NG", - "Africa/Libreville": "GA", - "Africa/Lome": "TG", - "Africa/Luanda": "AO", - "Africa/Lubumbashi": "CD", - "Africa/Lusaka": "ZM", - "Africa/Malabo": "GQ", - "Africa/Maputo": "MZ", - "Africa/Maseru": "LS", - "Africa/Mbabane": "SZ", - "Africa/Mogadishu": "SO", - "Africa/Monrovia": "LR", - "Africa/Nairobi": "KE", - "Africa/Ndjamena": "TD", - "Africa/Niamey": "NE", - "Africa/Nouakchott": "MR", - "Africa/Ouagadougou": "BF", - "Africa/Porto-Novo": "BJ", - "Africa/Sao_Tome": "ST", - "Africa/Timbuktu": "ML", - "Africa/Tripoli": "LY", - "Africa/Tunis": "TN", - "Africa/Windhoek": "NA", - "America/Adak": "US", - "America/Anchorage": "US", - "America/Anguilla": "AI", - "America/Antigua": "AG", - "America/Araguaina": "BR", - "America/Argentina/Buenos_Aires": "AR", - "America/Argentina/Catamarca": "AR", - "America/Argentina/Cordoba": "AR", - "America/Argentina/Jujuy": "AR", - "America/Argentina/La_Rioja": "AR", - "America/Argentina/Mendoza": "AR", - "America/Argentina/Rio_Gallegos": "AR", - "America/Argentina/Salta": "AR", - "America/Argentina/San_Juan": "AR", - "America/Argentina/San_Luis": "AR", - "America/Argentina/Tucuman": "AR", - "America/Argentina/Ushuaia": "AR", - "America/Aruba": "AW", - "America/Asuncion": "PY", - "America/Atikokan": "CA", - "America/Bahia": "BR", - "America/Bahia_Banderas": "MX", - "America/Barbados": "BB", - "America/Belem": "BR", - "America/Belize": "BZ", - "America/Blanc-Sablon": "CA", - "America/Boa_Vista": "BR", - "America/Bogota": "CO", - "America/Boise": "US", - "America/Cambridge_Bay": "CA", - "America/Campo_Grande": "BR", - "America/Cancun": "MX", - "America/Caracas": "VE", - "America/Cayenne": "GF", - "America/Cayman": "KY", - "America/Chicago": "US", - "America/Chihuahua": "MX", - "America/Coral_Harbour": "CA", - "America/Costa_Rica": "CR", - "America/Creston": "CA", - "America/Cuiaba": "BR", - "America/Curacao": "CW", - "America/Danmarkshavn": "GL", - "America/Dawson": "CA", - "America/Dawson_Creek": "CA", - "America/Denver": "US", - "America/Detroit": "US", - "America/Dominica": "DM", - "America/Edmonton": "CA", - "America/Eirunepe": "BR", - "America/El_Salvador": "SV", - "America/Fort_Nelson": "CA", - "America/Fortaleza": "BR", - "America/Glace_Bay": "CA", - "America/Goose_Bay": "CA", - "America/Grand_Turk": "TC", - "America/Grenada": "GD", - "America/Guadeloupe": "GP", - "America/Guatemala": "GT", - "America/Guayaquil": "EC", - "America/Guyana": "GY", - "America/Halifax": "CA", - "America/Havana": "CU", - "America/Hermosillo": "MX", - "America/Indiana/Indianapolis": "US", - "America/Indiana/Knox": "US", - "America/Indiana/Marengo": "US", - "America/Indiana/Petersburg": "US", - "America/Indiana/Tell_City": "US", - "America/Indiana/Vevay": "US", - "America/Indiana/Vincennes": "US", - "America/Indiana/Winamac": "US", - "America/Inuvik": "CA", - "America/Iqaluit": "CA", - "America/Jamaica": "JM", - "America/Juneau": "US", - "America/Kentucky/Louisville": "US", - "America/Kentucky/Monticello": "US", - "America/Kralendijk": "BQ", - "America/La_Paz": "BO", - "America/Lima": "PE", - "America/Los_Angeles": "US", - "America/Lower_Princes": "SX", - "America/Maceio": "BR", - "America/Managua": "NI", - "America/Manaus": "BR", - "America/Marigot": "MF", - "America/Martinique": "MQ", - "America/Matamoros": "MX", - "America/Mazatlan": "MX", - "America/Menominee": "US", - "America/Merida": "MX", - "America/Metlakatla": "US", - "America/Mexico_City": "MX", - "America/Miquelon": "PM", - "America/Moncton": "CA", - "America/Monterrey": "MX", - "America/Montevideo": "UY", - "America/Montreal": "CA", - "America/Montserrat": "MS", - "America/Nassau": "BS", - "America/New_York": "US", - "America/Nipigon": "CA", - "America/Nome": "US", - "America/Noronha": "BR", - "America/North_Dakota/Beulah": "US", - "America/North_Dakota/Center": "US", - "America/North_Dakota/New_Salem": "US", - "America/Nuuk": "GL", - "America/Ojinaga": "MX", - "America/Panama": "PA", - "America/Pangnirtung": "CA", - "America/Paramaribo": "SR", - "America/Phoenix": "US", - "America/Port-au-Prince": "HT", - "America/Port_of_Spain": "TT", - "America/Porto_Velho": "BR", - "America/Puerto_Rico": "PR", - "America/Punta_Arenas": "CL", - "America/Rainy_River": "CA", - "America/Rankin_Inlet": "CA", - "America/Recife": "BR", - "America/Regina": "CA", - "America/Resolute": "CA", - "America/Rio_Branco": "BR", - "America/Santarem": "BR", - "America/Santiago": "CL", - "America/Santo_Domingo": "DO", - "America/Sao_Paulo": "BR", - "America/Scoresbysund": "GL", - "America/Sitka": "US", - "America/St_Barthelemy": "BL", - "America/St_Johns": "CA", - "America/St_Kitts": "KN", - "America/St_Lucia": "LC", - "America/St_Thomas": "VI", - "America/St_Vincent": "VC", - "America/Swift_Current": "CA", - "America/Tegucigalpa": "HN", - "America/Thule": "GL", - "America/Thunder_Bay": "CA", - "America/Tijuana": "MX", - "America/Toronto": "CA", - "America/Tortola": "VG", - "America/Vancouver": "CA", - "America/Virgin": "VI", - "America/Whitehorse": "CA", - "America/Winnipeg": "CA", - "America/Yakutat": "US", - "America/Yellowknife": "CA", - "Antarctica/Casey": "AQ", - "Antarctica/Davis": "AQ", - "Antarctica/DumontDUrville": "AQ", - "Antarctica/Macquarie": "AU", - "Antarctica/Mawson": "AQ", - "Antarctica/McMurdo": "AQ", - "Antarctica/Palmer": "AQ", - "Antarctica/Rothera": "AQ", - "Antarctica/South_Pole": "AQ", - "Antarctica/Syowa": "AQ", - "Antarctica/Troll": "AQ", - "Antarctica/Vostok": "AQ", - "Arctic/Longyearbyen": "NO", - "Asia/Aden": "YE", - "Asia/Almaty": "KZ", - "Asia/Amman": "JO", - "Asia/Anadyr": "RU", - "Asia/Aqtau": "KZ", - "Asia/Aqtobe": "KZ", - "Asia/Ashgabat": "TM", - "Asia/Atyrau": "KZ", - "Asia/Baghdad": "IQ", - "Asia/Bahrain": "BH", - "Asia/Baku": "AZ", - "Asia/Bangkok": "TH", - "Asia/Barnaul": "RU", - "Asia/Beirut": "LB", - "Asia/Bishkek": "KG", - "Asia/Brunei": "BN", - "Asia/Chita": "RU", - "Asia/Choibalsan": "MN", - "Asia/Colombo": "LK", - "Asia/Damascus": "SY", - "Asia/Dhaka": "BD", - "Asia/Dili": "TL", - "Asia/Dubai": "AE", - "Asia/Dushanbe": "TJ", - "Asia/Famagusta": "CY", - "Asia/Gaza": "PS", - "Asia/Hebron": "PS", - "Asia/Ho_Chi_Minh": "VN", - "Asia/Hong_Kong": "HK", - "Asia/Hovd": "MN", - "Asia/Irkutsk": "RU", - "Asia/Jakarta": "ID", - "Asia/Jayapura": "ID", - "Asia/Jerusalem": "IL", - "Asia/Kabul": "AF", - "Asia/Kamchatka": "RU", - "Asia/Karachi": "PK", - "Asia/Kathmandu": "NP", - "Asia/Khandyga": "RU", - "Asia/Kolkata": "IN", - "Asia/Krasnoyarsk": "RU", - "Asia/Kuala_Lumpur": "MY", - "Asia/Kuching": "MY", - "Asia/Kuwait": "KW", - "Asia/Macau": "MO", - "Asia/Magadan": "RU", - "Asia/Makassar": "ID", - "Asia/Manila": "PH", - "Asia/Muscat": "OM", - "Asia/Nicosia": "CY", - "Asia/Novokuznetsk": "RU", - "Asia/Novosibirsk": "RU", - "Asia/Omsk": "RU", - "Asia/Oral": "KZ", - "Asia/Phnom_Penh": "KH", - "Asia/Pontianak": "ID", - "Asia/Pyongyang": "KP", - "Asia/Qatar": "QA", - "Asia/Qostanay": "KZ", - "Asia/Qyzylorda": "KZ", - "Asia/Riyadh": "SA", - "Asia/Sakhalin": "RU", - "Asia/Samarkand": "UZ", - "Asia/Seoul": "KR", - "Asia/Shanghai": "CN", - "Asia/Singapore": "SG", - "Asia/Srednekolymsk": "RU", - "Asia/Taipei": "TW", - "Asia/Tashkent": "UZ", - "Asia/Tbilisi": "GE", - "Asia/Tehran": "IR", - "Asia/Thimphu": "BT", - "Asia/Tokyo": "JP", - "Asia/Tomsk": "RU", - "Asia/Ulaanbaatar": "MN", - "Asia/Urumqi": "CN", - "Asia/Ust-Nera": "RU", - "Asia/Vientiane": "LA", - "Asia/Vladivostok": "RU", - "Asia/Yakutsk": "RU", - "Asia/Yangon": "MM", - "Asia/Yekaterinburg": "RU", - "Asia/Yerevan": "AM", - "Atlantic/Azores": "PT", - "Atlantic/Bermuda": "BM", - "Atlantic/Canary": "ES", - "Atlantic/Cape_Verde": "CV", - "Atlantic/Faroe": "FO", - "Atlantic/Jan_Mayen": "NO", - "Atlantic/Madeira": "PT", - "Atlantic/Reykjavik": "IS", - "Atlantic/South_Georgia": "NI", - "Atlantic/St_Helena": "SH", - "Atlantic/Stanley": "FK", - "Australia/Adelaide": "AU", - "Australia/Brisbane": "AU", - "Australia/Broken_Hill": "AU", - "Australia/Darwin": "AU", - "Australia/Eucla": "AU", - "Australia/Hobart": "AU", - "Australia/Lindeman": "AU", - "Australia/Lord_Howe": "AU", - "Australia/Melbourne": "AU", - "Australia/Perth": "AU", - "Australia/Sydney": "AU", - "Canada/Eastern": "CA", - "Europe/Amsterdam": "NL", - "Europe/Andorra": "AD", - "Europe/Astrakhan": "RU", - "Europe/Athens": "GR", - "Europe/Belfast": "GB", - "Europe/Belgrade": "RS", - "Europe/Berlin": "DE", - "Europe/Bratislava": "SK", - "Europe/Brussels": "BE", - "Europe/Bucharest": "RO", - "Europe/Budapest": "HU", - "Europe/Busingen": "DE", - "Europe/Chisinau": "MD", - "Europe/Copenhagen": "DK", - "Europe/Dublin": "IE", - "Europe/Gibraltar": "GI", - "Europe/Guernsey": "GB", - "Europe/Helsinki": "FI", - "Europe/Isle_of_Man": "GB", - "Europe/Istanbul": "TR", - "Europe/Jersey": "JE", - "Europe/Kaliningrad": "RU", - "Europe/Kiev": "UA", - "Europe/Kirov": "RU", - "Europe/Lisbon": "PT", - "Europe/Ljubljana": "SI", - "Europe/London": "GB", - "Europe/Luxembourg": "LU", - "Europe/Madrid": "ES", - "Europe/Malta": "MT", - "Europe/Mariehamn": "SC", - "Europe/Minsk": "BY", - "Europe/Monaco": "MC", - "Europe/Moscow": "RU", - "Europe/Oslo": "NO", - "Europe/Paris": "FR", - "Europe/Podgorica": "ME", - "Europe/Prague": "CZ", - "Europe/Riga": "LV", - "Europe/Rome": "IT", - "Europe/Samara": "RU", - "Europe/San_Marino": "SM", - "Europe/Sarajevo": "BA", - "Europe/Saratov": "RU", - "Europe/Simferopol": "RU", - "Europe/Skopje": "MK", - "Europe/Sofia": "BG", - "Europe/Stockholm": "SE", - "Europe/Tallinn": "EE", - "Europe/Tirane": "AL", - "Europe/Ulyanovsk": "RU", - "Europe/Uzhgorod": "UA", - "Europe/Vaduz": "LI", - "Europe/Vatican": "VA", - "Europe/Vienna": "AT", - "Europe/Vilnius": "LT", - "Europe/Volgograd": "RU", - "Europe/Warsaw": "PL", - "Europe/Zagreb": "HR", - "Europe/Zaporozhye": "UA", - "Europe/Zurich": "CH", - "GB": "GB", - "GB-Eire": "GB", - "Indian/Antananarivo": "MG", - "Indian/Chagos": "IO", - "Indian/Christmas": "AU", - "Indian/Cocos": "AU", - "Indian/Comoro": "KM", - "Indian/Kerguelen": "ZM", - "Indian/Mahe": "SC", - "Indian/Maldives": "MV", - "Indian/Mauritius": "MU", - "Indian/Mayotte": "RE", - "Indian/Reunion": "RE", - "NZ": "NZ", - "Pacific/Apia": "WS", - "Pacific/Auckland": "NZ", - "Pacific/Bougainville": "PG", - "Pacific/Chatham": "NZ", - "Pacific/Chuuk": "FM", - "Pacific/Easter": "CL", - "Pacific/Efate": "VU", - "Pacific/Fakaofo": "TK", - "Pacific/Fiji": "FJ", - "Pacific/Funafuti": "TV", - "Pacific/Galapagos": "EC", - "Pacific/Gambier": "PF", - "Pacific/Guadalcanal": "SB", - "Pacific/Guam": "GU", - "Pacific/Honolulu": "US", - "Pacific/Johnston": "US", - "Pacific/Kanton": "KI", - "Pacific/Kiritimati": "KI", - "Pacific/Kosrae": "FM", - "Pacific/Kwajalein": "MH", - "Pacific/Majuro": "MH", - "Pacific/Marquesas": "PF", - "Pacific/Midway": "US", - "Pacific/Nauru": "NR", - "Pacific/Niue": "NU", - "Pacific/Norfolk": "NF", - "Pacific/Noumea": "NC", - "Pacific/Pago_Pago": "AS", - "Pacific/Palau": "PW", - "Pacific/Pitcairn": "NZ", - "Pacific/Pohnpei": "FM", - "Pacific/Port_Moresby": "PG", - "Pacific/Rarotonga": "CK", - "Pacific/Saipan": "MP", - "Pacific/Samoa": "WS", - "Pacific/Tahiti": "PF", - "Pacific/Tarawa": "KI", - "Pacific/Tongatapu": "TO", - "Pacific/Wake": "US", - "Pacific/Wallis": "WF", - "Singapore": "SG", - "US/Arizona": "US", - "US/Hawaii": "US", - "US/Samoa": "WS" + "Africa/Abidjan": "ci", + "Africa/Accra": "gh", + "Africa/Addis_Ababa": "et", + "Africa/Algiers": "dz", + "Africa/Asmara": "er", + "Africa/Asmera": "er", + "Africa/Bamako": "ml", + "Africa/Bangui": "cf", + "Africa/Banjul": "gm", + "Africa/Bissau": "gw", + "Africa/Blantyre": "mw", + "Africa/Brazzaville": "cg", + "Africa/Bujumbura": "bi", + "Africa/Cairo": "eg", + "Africa/Casablanca": "ma", + "Africa/Ceuta": "es", + "Africa/Conakry": "gn", + "Africa/Dakar": "sn", + "Africa/Dar_es_Salaam": "tz", + "Africa/Djibouti": "dj", + "Africa/Douala": "cm", + "Africa/El_Aaiun": "ma", + "Africa/Freetown": "sl", + "Africa/Gaborone": "bw", + "Africa/Harare": "zw", + "Africa/Johannesburg": "za", + "Africa/Juba": "ss", + "Africa/Kampala": "ug", + "Africa/Khartoum": "sd", + "Africa/Kigali": "rw", + "Africa/Kinshasa": "cd", + "Africa/Lagos": "ng", + "Africa/Libreville": "ga", + "Africa/Lome": "tg", + "Africa/Luanda": "ao", + "Africa/Lubumbashi": "cd", + "Africa/Lusaka": "zm", + "Africa/Malabo": "gq", + "Africa/Maputo": "mz", + "Africa/Maseru": "ls", + "Africa/Mbabane": "sz", + "Africa/Mogadishu": "so", + "Africa/Monrovia": "lr", + "Africa/Nairobi": "ke", + "Africa/Ndjamena": "td", + "Africa/Niamey": "ne", + "Africa/Nouakchott": "mr", + "Africa/Ouagadougou": "bf", + "Africa/Porto-Novo": "bj", + "Africa/Sao_Tome": "st", + "Africa/Timbuktu": "ml", + "Africa/Tripoli": "ly", + "Africa/Tunis": "tn", + "Africa/Windhoek": "na", + "America/Adak": "us", + "America/Anchorage": "us", + "America/Anguilla": "ai", + "America/Antigua": "ag", + "America/Araguaina": "br", + "America/Argentina/Buenos_Aires": "ar", + "America/Argentina/Catamarca": "ar", + "America/Argentina/Cordoba": "ar", + "America/Argentina/Jujuy": "ar", + "America/Argentina/La_Rioja": "ar", + "America/Argentina/Mendoza": "ar", + "America/Argentina/Rio_Gallegos": "ar", + "America/Argentina/Salta": "ar", + "America/Argentina/San_Juan": "ar", + "America/Argentina/San_Luis": "ar", + "America/Argentina/Tucuman": "ar", + "America/Argentina/Ushuaia": "ar", + "America/Aruba": "aw", + "America/Asuncion": "py", + "America/Atikokan": "ca", + "America/Bahia": "br", + "America/Bahia_Banderas": "mx", + "America/Barbados": "bb", + "America/Belem": "br", + "America/Belize": "bz", + "America/Blanc-Sablon": "ca", + "America/Boa_Vista": "br", + "America/Bogota": "co", + "America/Boise": "us", + "America/Cambridge_Bay": "ca", + "America/Campo_Grande": "br", + "America/Cancun": "mx", + "America/Caracas": "ve", + "America/Cayenne": "gf", + "America/Cayman": "ky", + "America/Chicago": "us", + "America/Chihuahua": "mx", + "America/Coral_Harbour": "ca", + "America/Costa_Rica": "cr", + "America/Creston": "ca", + "America/Cuiaba": "br", + "America/Curacao": "cw", + "America/Danmarkshavn": "gl", + "America/Dawson": "ca", + "America/Dawson_Creek": "ca", + "America/Denver": "us", + "America/Detroit": "us", + "America/Dominica": "dm", + "America/Edmonton": "ca", + "America/Eirunepe": "br", + "America/El_Salvador": "sv", + "America/Fort_Nelson": "ca", + "America/Fortaleza": "br", + "America/Glace_Bay": "ca", + "America/Goose_Bay": "ca", + "America/Grand_Turk": "tc", + "America/Grenada": "gd", + "America/Guadeloupe": "gp", + "America/Guatemala": "gt", + "America/Guayaquil": "ec", + "America/Guyana": "gy", + "America/Halifax": "ca", + "America/Havana": "cu", + "America/Hermosillo": "mx", + "America/Indiana/Indianapolis": "us", + "America/Indiana/Knox": "us", + "America/Indiana/Marengo": "us", + "America/Indiana/Petersburg": "us", + "America/Indiana/Tell_City": "us", + "America/Indiana/Vevay": "us", + "America/Indiana/Vincennes": "us", + "America/Indiana/Winamac": "us", + "America/Inuvik": "ca", + "America/Iqaluit": "ca", + "America/Jamaica": "jm", + "America/Juneau": "us", + "America/Kentucky/Louisville": "us", + "America/Kentucky/Monticello": "us", + "America/Kralendijk": "bq", + "America/La_Paz": "bo", + "America/Lima": "pe", + "America/Los_Angeles": "us", + "America/Lower_Princes": "sx", + "America/Maceio": "br", + "America/Managua": "ni", + "America/Manaus": "br", + "America/Marigot": "mf", + "America/Martinique": "mq", + "America/Matamoros": "mx", + "America/Mazatlan": "mx", + "America/Menominee": "us", + "America/Merida": "mx", + "America/Metlakatla": "us", + "America/Mexico_City": "mx", + "America/Miquelon": "pm", + "America/Moncton": "ca", + "America/Monterrey": "mx", + "America/Montevideo": "uy", + "America/Montreal": "ca", + "America/Montserrat": "ms", + "America/Nassau": "bs", + "America/New_York": "us", + "America/Nipigon": "ca", + "America/Nome": "us", + "America/Noronha": "br", + "America/North_Dakota/Beulah": "us", + "America/North_Dakota/Center": "us", + "America/North_Dakota/New_Salem": "us", + "America/Nuuk": "gl", + "America/Ojinaga": "mx", + "America/Panama": "pa", + "America/Pangnirtung": "ca", + "America/Paramaribo": "sr", + "America/Phoenix": "us", + "America/Port-au-Prince": "ht", + "America/Port_of_Spain": "tt", + "America/Porto_Velho": "br", + "America/Puerto_Rico": "pr", + "America/Punta_Arenas": "cl", + "America/Rainy_River": "ca", + "America/Rankin_Inlet": "ca", + "America/Recife": "br", + "America/Regina": "ca", + "America/Resolute": "ca", + "America/Rio_Branco": "br", + "America/Santarem": "br", + "America/Santiago": "cl", + "America/Santo_Domingo": "do", + "America/Sao_Paulo": "br", + "America/Scoresbysund": "gl", + "America/Sitka": "us", + "America/St_Barthelemy": "bl", + "America/St_Johns": "ca", + "America/St_Kitts": "kn", + "America/St_Lucia": "lc", + "America/St_Thomas": "vi", + "America/St_Vincent": "vc", + "America/Swift_Current": "ca", + "America/Tegucigalpa": "hn", + "America/Thule": "gl", + "America/Thunder_Bay": "ca", + "America/Tijuana": "mx", + "America/Toronto": "ca", + "America/Tortola": "vg", + "America/Vancouver": "ca", + "America/Virgin": "vi", + "America/Whitehorse": "ca", + "America/Winnipeg": "ca", + "America/Yakutat": "us", + "America/Yellowknife": "ca", + "Antarctica/Casey": "aq", + "Antarctica/Davis": "aq", + "Antarctica/DumontDUrville": "aq", + "Antarctica/Macquarie": "au", + "Antarctica/Mawson": "aq", + "Antarctica/McMurdo": "aq", + "Antarctica/Palmer": "aq", + "Antarctica/Rothera": "aq", + "Antarctica/South_Pole": "aq", + "Antarctica/Syowa": "aq", + "Antarctica/Troll": "aq", + "Antarctica/Vostok": "aq", + "Arctic/Longyearbyen": "no", + "Asia/Aden": "ye", + "Asia/Almaty": "kz", + "Asia/Amman": "jo", + "Asia/Anadyr": "ru", + "Asia/Aqtau": "kz", + "Asia/Aqtobe": "kz", + "Asia/Ashgabat": "tm", + "Asia/Atyrau": "kz", + "Asia/Baghdad": "iq", + "Asia/Bahrain": "bh", + "Asia/Baku": "az", + "Asia/Bangkok": "th", + "Asia/Barnaul": "ru", + "Asia/Beirut": "lb", + "Asia/Bishkek": "kg", + "Asia/Brunei": "bn", + "Asia/Chita": "ru", + "Asia/Choibalsan": "mn", + "Asia/Colombo": "lk", + "Asia/Damascus": "sy", + "Asia/Dhaka": "bd", + "Asia/Dili": "tl", + "Asia/Dubai": "ae", + "Asia/Dushanbe": "tj", + "Asia/Famagusta": "cy", + "Asia/Gaza": "ps", + "Asia/Hebron": "ps", + "Asia/Ho_Chi_Minh": "vn", + "Asia/Hong_Kong": "hk", + "Asia/Hovd": "mn", + "Asia/Irkutsk": "ru", + "Asia/Jakarta": "id", + "Asia/Jayapura": "id", + "Asia/Jerusalem": "il", + "Asia/Kabul": "af", + "Asia/Kamchatka": "ru", + "Asia/Karachi": "pk", + "Asia/Kathmandu": "np", + "Asia/Khandyga": "ru", + "Asia/Kolkata": "in", + "Asia/Krasnoyarsk": "ru", + "Asia/Kuala_Lumpur": "my", + "Asia/Kuching": "my", + "Asia/Kuwait": "kw", + "Asia/Macau": "mo", + "Asia/Magadan": "ru", + "Asia/Makassar": "id", + "Asia/Manila": "ph", + "Asia/Muscat": "om", + "Asia/Nicosia": "cy", + "Asia/Novokuznetsk": "ru", + "Asia/Novosibirsk": "ru", + "Asia/Omsk": "ru", + "Asia/Oral": "kz", + "Asia/Phnom_Penh": "kh", + "Asia/Pontianak": "id", + "Asia/Pyongyang": "kp", + "Asia/Qatar": "qa", + "Asia/Qostanay": "kz", + "Asia/Qyzylorda": "kz", + "Asia/Riyadh": "sa", + "Asia/Sakhalin": "ru", + "Asia/Samarkand": "uz", + "Asia/Seoul": "kr", + "Asia/Shanghai": "cn", + "Asia/Singapore": "sg", + "Asia/Srednekolymsk": "ru", + "Asia/Taipei": "tw", + "Asia/Tashkent": "uz", + "Asia/Tbilisi": "ge", + "Asia/Tehran": "ir", + "Asia/Thimphu": "bt", + "Asia/Tokyo": "jp", + "Asia/Tomsk": "ru", + "Asia/Ulaanbaatar": "mn", + "Asia/Urumqi": "cn", + "Asia/Ust-Nera": "ru", + "Asia/Vientiane": "la", + "Asia/Vladivostok": "ru", + "Asia/Yakutsk": "ru", + "Asia/Yangon": "mm", + "Asia/Yekaterinburg": "ru", + "Asia/Yerevan": "am", + "Atlantic/Azores": "pt", + "Atlantic/Bermuda": "bm", + "Atlantic/Canary": "es", + "Atlantic/Cape_Verde": "cv", + "Atlantic/Faroe": "fo", + "Atlantic/Jan_Mayen": "no", + "Atlantic/Madeira": "pt", + "Atlantic/Reykjavik": "is", + "Atlantic/South_Georgia": "ni", + "Atlantic/St_Helena": "sh", + "Atlantic/Stanley": "fk", + "Australia/Adelaide": "au", + "Australia/Brisbane": "au", + "Australia/Broken_Hill": "au", + "Australia/Darwin": "au", + "Australia/Eucla": "au", + "Australia/Hobart": "au", + "Australia/Lindeman": "au", + "Australia/Lord_Howe": "au", + "Australia/Melbourne": "au", + "Australia/Perth": "au", + "Australia/Sydney": "au", + "Canada/Eastern": "ca", + "Europe/Amsterdam": "nl", + "Europe/Andorra": "ad", + "Europe/Astrakhan": "ru", + "Europe/Athens": "gr", + "Europe/Belfast": "gb", + "Europe/Belgrade": "rs", + "Europe/Berlin": "de", + "Europe/Bratislava": "sk", + "Europe/Brussels": "be", + "Europe/Bucharest": "ro", + "Europe/Budapest": "hu", + "Europe/Busingen": "de", + "Europe/Chisinau": "md", + "Europe/Copenhagen": "dk", + "Europe/Dublin": "ie", + "Europe/Gibraltar": "gi", + "Europe/Guernsey": "gb", + "Europe/Helsinki": "fi", + "Europe/Isle_of_Man": "gb", + "Europe/Istanbul": "tr", + "Europe/Jersey": "je", + "Europe/Kaliningrad": "ru", + "Europe/Kiev": "ua", + "Europe/Kirov": "ru", + "Europe/Lisbon": "pt", + "Europe/Ljubljana": "si", + "Europe/London": "gb", + "Europe/Luxembourg": "lu", + "Europe/Madrid": "es", + "Europe/Malta": "mt", + "Europe/Mariehamn": "sc", + "Europe/Minsk": "by", + "Europe/Monaco": "mc", + "Europe/Moscow": "ru", + "Europe/Oslo": "no", + "Europe/Paris": "fr", + "Europe/Podgorica": "me", + "Europe/Prague": "cz", + "Europe/Riga": "lv", + "Europe/Rome": "it", + "Europe/Samara": "ru", + "Europe/San_Marino": "sm", + "Europe/Sarajevo": "ba", + "Europe/Saratov": "ru", + "Europe/Simferopol": "ru", + "Europe/Skopje": "mk", + "Europe/Sofia": "bg", + "Europe/Stockholm": "se", + "Europe/Tallinn": "ee", + "Europe/Tirane": "al", + "Europe/Ulyanovsk": "ru", + "Europe/Uzhgorod": "ua", + "Europe/Vaduz": "li", + "Europe/Vatican": "va", + "Europe/Vienna": "at", + "Europe/Vilnius": "lt", + "Europe/Volgograd": "ru", + "Europe/Warsaw": "pl", + "Europe/Zagreb": "hr", + "Europe/Zaporozhye": "ua", + "Europe/Zurich": "ch", + "GB": "gb", + "GB-Eire": "gb", + "Indian/Antananarivo": "mg", + "Indian/Chagos": "io", + "Indian/Christmas": "au", + "Indian/Cocos": "au", + "Indian/Comoro": "km", + "Indian/Kerguelen": "zm", + "Indian/Mahe": "sc", + "Indian/Maldives": "mv", + "Indian/Mauritius": "mu", + "Indian/Mayotte": "re", + "Indian/Reunion": "re", + "NZ": "nz", + "Pacific/Apia": "ws", + "Pacific/Auckland": "nz", + "Pacific/Bougainville": "pg", + "Pacific/Chatham": "nz", + "Pacific/Chuuk": "fm", + "Pacific/Easter": "cl", + "Pacific/Efate": "vu", + "Pacific/Fakaofo": "tk", + "Pacific/Fiji": "fj", + "Pacific/Funafuti": "tv", + "Pacific/Galapagos": "ec", + "Pacific/Gambier": "pf", + "Pacific/Guadalcanal": "sb", + "Pacific/Guam": "gu", + "Pacific/Honolulu": "us", + "Pacific/Johnston": "us", + "Pacific/Kanton": "ki", + "Pacific/Kiritimati": "ki", + "Pacific/Kosrae": "fm", + "Pacific/Kwajalein": "mh", + "Pacific/Majuro": "mh", + "Pacific/Marquesas": "pf", + "Pacific/Midway": "us", + "Pacific/Nauru": "nr", + "Pacific/Niue": "nu", + "Pacific/Norfolk": "nf", + "Pacific/Noumea": "nc", + "Pacific/Pago_Pago": "as", + "Pacific/Palau": "pw", + "Pacific/Pitcairn": "nz", + "Pacific/Pohnpei": "fm", + "Pacific/Port_Moresby": "pg", + "Pacific/Rarotonga": "ck", + "Pacific/Saipan": "mp", + "Pacific/Samoa": "ws", + "Pacific/Tahiti": "pf", + "Pacific/Tarawa": "ki", + "Pacific/Tongatapu": "to", + "Pacific/Wake": "us", + "Pacific/Wallis": "wf", + "Singapore": "sg", + "US/Arizona": "us", + "US/Hawaii": "us", + "US/Samoa": "ws" } From dae80009ec6f28d7d27d9a3247844fb5ee560778 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 19 Oct 2023 20:08:16 +0400 Subject: [PATCH 06/69] GH-53: Implement the initial styles Signed-off-by: Artyom Vancyan --- src/legacy/style5.css | 986 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 898 insertions(+), 88 deletions(-) diff --git a/src/legacy/style5.css b/src/legacy/style5.css index be48a63..9617069 100644 --- a/src/legacy/style5.css +++ b/src/legacy/style5.css @@ -1,136 +1,946 @@ -/** Distributed to make compatible with antd v5.x: react-phone-input-2/lib/style.css - * Copyright (c) 2017-2020 Nick Reiley (https://github.com/bl00mber) - * Copyright (c) 2015-2017 Raza Gill (https://github.com/razagill) - */ +.ant-select-item .ant-phone-input-select-item { + display: flex; + column-gap: 10px; + align-items: center; +} -.react-tel-input { - width: 100%; - position: relative; +.ant-input-group-addon * { + display: flex; + align-items: center; + justify-content: center; } -.react-tel-input:disabled { - cursor: not-allowed; +.flag { + width: 16px; + height: 11px; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAACmCAMAAAACnqETAAADAFBMVEUAAAD30gQCKn0GJJ4MP4kMlD43WGf9/f329vcBAQHhAADx8vHvAwL8AQL7UlL4RUUzqDP2MjLp6un2Jyj0Ghn2PTr9fHvi5OJYuln7Xl75+UPpNzXUAQH29jH6cXC+AAIAJwBNtE/23Ff5aGdDr0TJAQHsZV3qR0IAOQB3x3fdRD/Z2NvuWFLkcG7fVlH4kI4AAlXO0M8BATsdS6MCagIBfQEASgPoKSc4VKL442q4xeQAigD46eetAABYd9jvf3nZMiwAAoD30zz55X5ng9tPbKZnwGXz8x77+lY7OTjzzikABGsenh72pKNPldEAWgHgGBgAACH88/Gqt95JR0OWAwP3uLd/qdr53kMBBJJ3d3XMPTpWer8NnAwABKPH1O1VVFIuLSz13NtZnlf2kEh9keLn7vfZ4vNkZGHzvwJIXZRfZLuDwfv4y8tvk79LlUblzsxorGcCBusFKuYCCcdmfq5jqvlxt/tzktEABLb8/HL2tlTAw8SLlMFpj/ZlpNhBZ81BYbQcGxuToN9SYdjXY2Lz7lD0dCQ6S9Dm0EUCYPdDlvWWvd2AnviXqc11eMZTqPc3cPMCRev16ZrRUE0Hf/tNT7HIJyTptDVTffSsTkvhtgQ0T4jigoFUx/g+hsX9/QUHzQY1dbJ7sHV02Pduvd0leiK1XmaTrfpCQPgELrrdsrY1NamgyPrh03iPxosvX92ysbCgoZzk5kP1YD7t6AILnu+45LykNS40qvXDdHnR6tBennz6u3TSxU1Or9Swz6wqzCsPZKzglJbIqEY8hDhyAgFzbJxuOC+Li4d9sJLFsnhwbvH2d1A3kzAqPZQITsN76nq2dzaZdKJf4F6RJkb078YFiM+tnWZGh2F+dDibykYoMcsnekdI1UhCAwWb25qVkEq43km9yBrclQMGwfyZ3/zZ2QK9gJxsJWCBUk32QwqOSYKRxh6Xdm3B4oMW22EPZzawnR72kgZltCqPxrdH1dkBkqDdWwwMwMO9O2sqKXHvipPGJkzlRVLhJjVIs9KrAAAAB3RSTlMA/v3+/Pn9Fk05qAAAUU9JREFUeNp0nAlYVNcVxzHazoroGBkXhAgCCjMsroDoKIgKdFABBwQUnSAoCqLRFBfcCBIM4kbqShO1hlSrCJqQQmNssVFqjBarsdjFJWlMTOLXJDZt8/X7+j/n3pk3vNq/bb8+3nbP79137/+dd954qTVt8uTJL73OMhqNer03ady4cWOhWbNmjV+0FfKGjMb36Y9/1fXUst9cb2y8/lpb797z5k2dOjXVD9Ljn59fcHBwQEDAgGch3l9on6feeeedn0r9kvT222+/sErRgvcDArwV8f5tN/rcvPnMZ22pqVFRSVGjR38k9Rsp9fLql/MXLj20VGjt2rVeak2Og/auI/kHBQ3We/tCo0ZNhwYNGj58/NaWlpbOyMhIX1//2/jTrICvckhXruQsWbJw4cL3tzhPORynSk5lZWVtglL9IkmdDQ05NqvVGhLwbKSUL+Tvb9yH/2sj+eN0IZZ3fvq3Hnp71ZtCOyofdnTYSzq9xX7UtsF9+/Y1FpeZT54sc2aUlq6Jy89YM/qj2oZaoeOkMR8dV/Tee++NWb04rrA5MRYKDAyc/NKCpwDIyKhE9LEzZ/r4DLQAAE6EyEeM6AcNH7m1pTMnB+fHX7tG9Bs0Xt+GwM/frqm5tz950aKDk6rsiA0xbUrbRAii/BDeV9bGhQsPRlyOCAuZ9GykZwT++n2RHPnVYQU+oaFDPQD8jEQAPiDdaLPaHGVXbn/O7YHQuIH9B/gYgzts1iqrtSopKWlNRkzS6I8arFaOFvTfew8AfiYil/rN6sWTKwtbArOzExISUl7+vwCuQNt8Bg71AQCcTwNpWeFbW3IIQEmJr08XgIzX2xDcvZrs7Jru5EWXwwKSwh2RkQ77w7Q0bXp6YRoDaKO+kZl8MCwsYpJ3pEf8liAAoPhDhqUMQ/wAkF+oqKiosJYA7HxotdnTtVe6Pr/S0h+AI90QffU3T9obGuwdD5PqkmJiMtbM+ajWI/60TX0COhoarAAE1dfXV80FgMmLi1oSKP7/B6ASAGyBV4YM7D/Bx8/bF7g5fgmgEwCCSiJtJQRgxEi9zZqVdYUu9pW0tLCIgOvxdR0dpxx5aWl7EzV7CYDV+tXnCzMzkzMvE4AFlTuhZaSf/OQny1L32RC+JcHikzJ06NAJoe+YNKRbsbG3xPlWZTxssNmdOP/J27ffudLJ60V7DAaT1lxRVvfwYe3Jlrq4uJiKjAwAcIWP+BkAhV/i7HA0uAG8BAIUf8qfzvwvgJcQf+XMK4GWi8OGTpgQ6uftzwC0LIM2WgcASwaXOBwlA7v6/YgAhFRt2pRGeu0/UyImbal77eHDo2kVAJAeKwE0fl6P63/5nSlTAKBCiR8AovbZEL9lf8I5AMD5booAE7OzY8X5fhGJi0/nTzTcMh+80iIBaF0APqvIu3EjqfRGcV3S4aSKYk8AaW4ADU4gOFlfn8sAXnoJBDpTCMDL87zU2kwATl+x1Nw+P2HChKHBBMDHFT8DwGjX11FSYu/f/aMf9XtOjwAacf2hmxRg7ywXDrr30kb7NVhDquo/z0y+nJs7ZUoYA5DxM4BFmcnJyV93PzjbvQhK3urqAYF7xflWVT5ssDaU4Ox7T9+6Ei4BaN0AUkvXJEExMTGHD9cdFgA2yfgZQAP1f0dJw0lrfS4BmIb4z5yZBgL/H8DibbehGROenQ0AQRhvZPwQAGDQ8wlqsFkmdP9ofr/n/OgK2ml1xxQECAAy/tdee++91wCA1mfWJy/KXUTr536T+O67764X2r9//T+3JkPdDx50f7qItDXfff+zeAxY1lYV0VCmPV1Ts5fGAGUYDbHpo0qT6vKTignAtWvXiuf0StwGZZPQybMPAYC8/xF/bj0AUPwvvzytKCdl6dMAvJxRuXjxkCHnL86YMXs2A8B4m4yWQTrdIp0uByMajcATJrwzXwCIiIjAFSrbJwGI+FlH00YH8/rQy5enQPsYgBK/BLCI1c0Afonhn/XjH8MNLP9o1Y4Pfg795N9hYQ23bt1q4fb07z+A/ITR2J8AFJnqOP7iuj7Fc35TK+9/bkPaM+NGiSnsB6wRIwGA4n/5T5Pzc5aeeAqAP1VCM4niWRqVgr1p1sEYlskNJQC4BQZbLJi0MAgCgBUKqYo3VEVEhIWFTZqXtYmVxiIAtB4QeDUAvMuSFBgAJCkwAKHlLAKw4wMIFG5URVgdLdwedEq6BuCgj1qzpi4uiVScYa6I0fWKJQVC2aRDY0eNWrlyECwMMIDDc2vZ6UF0F7z8tB5w4kTvtZ+ygklGkk4lvZ6sne45SDg8aJIQ2z+4Mmg0qcfauXPnfvPNN9XV/1S0VSWyf1Ls4FZ5aIHu/blGKb2UOM0ckq4PmsZ2b8yYMb2l4FbhX8ePHwmhuSPXkhaQ5q0tXzBvntdUUq9eSyFu9njXxpA74Leg198yktRWVI4OkAkymw2Q3WO90+nnN3u2H0QkHI6JpHHj2GvTYdsupd68GfVZ4yTJqJeUaNKhQ+rzCUvOMXEr//4vD3333XdLe+rRJx4iqumDnT2O5zW1HII1hPLy8pJGjz9GWgk9D61Al4fWkWay9VRbUa1GEVCYDRoonu0dr++n0ZQ0dMCNdDRYHVrtuImjWHQ80lvfl4WfhJetw1CFm6h+rkazd28iJHvyIe/IHt7ZOBY7o4GPH4smPqf7nRwz/sH6bmmi2HtvYiBUYPxEcZakt701PdsPAIhb3DBbYmIIAOK+F9HXJ6z7t799AwDI48+cOQRi66m2ogoAYVwIQEkQb8DrJza1azRWq9NpjUjXtg+aNXHU9EEQHW/YsGFD3toHMFZbgzUsDNPkPgAgpScG1vA4TgB8PZATAAoc6IasWPHhhwCQkyNCdwMIJCVqDabA8+cAAJFLYVD92dvpjvQe7ZcA7p0/350dEzNmy+iRAHBPrO9+AwB41Of4h2HoFdZYhsfL7ej7QmbSBdED/GkDXv+ju9Pv4i9mM+g09Rs1duKoQSQR/4whb7msbFhufHy8M2xup6AZ3sHzWOChaveIWQCtn00A7s/84MDuD4bd+fBDcYEukrVna5fwMQPAsqnQZOqqLtBzezysvHd6z/YLANndUELMGAmgXqzPfeON3+IE8PHbuL2YegYCAO+/fz/io2VMM+5HpR/BGXIPGCzix3oAaBo13aApK9Mahg8fNAo9ANsPGi7iB4BLZRUPH9advJGb6zx+3Jk7FwFtCNekNzQUabW3cAv0Ek9uUA0U+PGsY4NmzrxQVBS3e82wGQDA7bvI8SsAsgNP7y26HV4GALyeJzGaY5J18fZ4GT+3DwBK8/K2ZF/s7v46ZYwEsMJHrJ/gApBJ8QPAs9gh2BYBnT077OwUnvcBwB0/nCEAQPFBdADefv5dPEu3p2u18e39Bg2aPou2h9wNmP3wi7bGL9qsuVOcizoBgM/X0BBtamggK2wGABn+WSLw8awm9P4Du3ecys+aMWPGt6J9medF/EsBIBbxJxSFm4vM5moJAOGL+AHAO90jfglgy5bshO7uFAIQM2fkyhUr6sX6fW+MJQDYX1wvWI/+uOIc79mziJec4ESxDPGy6AF9RfzYHgBw02s7yswNhf1GDJ8+lvcfPgKrxfoAa0S9uP9HTV95LHdur8TzuF7W5OSqDdEGAFiaiIjk9U8hAMdw+1Ts3r37VPOMGR/K9l3k+CUA9P9b4c6y8LKC6upqAiDj3wpxD1Dix/m9Uku3KAD6xMx5DgC6xfrLYwnAEuw/jOJnAMHjpnvECwA8aK5YseK3EA2aogf0pQNIAIOaXI8S0/sBAPaHaLUEIOJHPmjUsWACACN7/qLVmoz2Zjabv3x8X+oBdP/DWeih94d9sHv3BzO+fOOND6l9C93xL00BgOy97dHo/ZHm6EcAwM8OHlZ+YLpFtF9eQAGA9+81pg8DQCzdU3D9Ef/YN3AC8OP4Z5D1DBg7XYmfAKitqYl7AA8AvDxxVLtGW1VVVhYRZjC0jhg/Tuzv3j6gCuEjfghGYd/cXrFk5BNqai4K633k938h/Zp15C8Tx68E7X7Dtm2b8QZEAH743j8gYQQwC8TGlp08Z7ZWC+k/4eFf6pc//Sje3+TZ/pFeqXkQ7hoIhhoAnve8ogRgCQZBMQsgTgBgXykpAoDKmpoIuJP/wMvzwaOKHkisVfUnDYZZ2J/k3n4ST/94UiHt2/d+Lx7yttFAXnP+60W6+X9ggQFzGDdeOJT791fQNAgAv/qHFFMAAJou7AWQBCAkKXzknW71bD96APnWQ4c+hthRsv1Ty2WNA4InwYYpzhJSW1MT+lmkxx9awyfNhQVmvf9+c9M4kVt1by8tsmuLub3I/in6er7URGkh1SZ1znfk/xR9o2oP7F8Pax1vbO8RgJcwhYp8BvpMcD1t+0GffPJ7xUo+CA54Yc+DPXv2vGA0vkBavfqIW+xeH3kr8iJ9QxJegQNpu/TMzZupnzXOkQ7+OkumeCCOU+Si2Sr7kR6RkQZ/iA0y62PWVKlUiLy8fsz1MSd6s+YhLz1vu0t7ILS4T1Rqn2cU9fF6YQdpMZIAG6dNmzZ5bX+7PZKGsXi0CM9xwZ+0DmuVnejxsHMDJu3Zu24vkrT+QTtYq4/8nvWHPzyeCa2HUySRbzMKAO9CGhZ15Pku67uGlaS7frzoeFat26uY2CpzijiIrbKfLdH2buy7eKLkR8oAaXWhQNLH8+qEKirKy0tLS6O8bXVZQpvg8dPmbV/O+jH0IvRClLY06hkPAcBGqLa19ckBzC0HVg+0R9rQFpqFtWER1oBPhr3+eutPocevPzIaBwTseTORAu/rQ7sd2AgA4g69T1PlfmGVsX9fn8ESALk4ER5Gsb/Mny2tbzGkPQwASH1s2iTDBwC2yhYeVdgq+yXODAwpCCzAozT7Dml12fqR8VGcOMtk9A0pkUvsI7YvR+DQrl2vQLtWpdbFPAVAq8lgMrcygKEEoKQsJKTMYQgLDQn4ZN3r60T43ngSrH5g1rBcWaINAoCMX1plXq8GoBUAXNYX4RcfPqzVXa8tqk3bpATAVtnCVpytsp8tsCBifcJVil8BoFhfu7OE5RCyGn0HWxweQLYvf/HF2tp1T568IgD0Gf2MJilKBSCrPf5Cc3h76e4zuwmAv8ZqQ5cLMwwNA4DWn+IfwoeqX3/8kQvAQC2rGQCU+NkqywuiAqAVACa6rO/hYsR/uBi3wKZd7wGA1gPAcEvfhAQAmEEA4DwLEgo4/tmzwyYdYqurWF+9zWKxhCKlTjnV2WEBxkhHX5/G8jSZEZoKALWJWbuyYgWBVRgA6vqk9hgDNh54YtI2t2jbn5wBgAl2m1XTYAmxhFoNU5DG/uRnHuG/d/yjEa0X7kID+99tgu6OxTytxK8A0KoAaCGexz+rWHPpUtKaG4e1hwnAhhNZlLtMhwyG+HhDGVvl0PXZ2fv7w3oMe8vPijuf4of2AQCyutDmzWdI1zcv0Psr8SOFF2As0Th8Qr84CiEzcjSKni09b4l5C+al4r9uAcCBA1nthuYKc3spA4i0hWgNdFazgbK8n3iEjzct380S1rd/f+mkAECJH87O21/2v76eALQM4MiRX0+MKqXsFXSYAei8/d3WXLHaoQNTUga4AYSGiesPTSEASvwEwCrin4D4GYAv4m9MS5M5yalGX1uixccntCDwKqf5n5FSboGNBw4caG03m1tbz5zZs3v1bAAAKvtJDAuzAeD1c0r4DEBY4f4DKH4C8AclfgYQxFl0etRWAAj+RwjA6DUyfuoC3xt02F6JnwDQ8UNpeQAB+DTY6op/HxJLU+au3jj5JYRPwvR5ZoFN3v12oVxjkE+oXbG+4o71WH5dJa9VALD7wBPMArvP7AEAfaTVgm3NZkzcszHoBCvhM4BvhTcfMOCB8OZH/sDxp0hrCwA8PvKjNqkaAPaL80sAyvU3fF+sU1tptspDaRkA3gKAEIoforwaAPhZ3f2de4RWeUvAARqDKH65ZDKE7/nxriexm17ZtO0JxvhXX1n1Q5UAYCMQTCsvn7ybEuYL9JE2q9jfZJoSBgADEP5xt757MJM0xMcHUUOfzr9Pywlua+vtThhJAOvdPYDc/LjRayC+CxiDTm2l2SpbeJmPHywzyhLDXH1ICI96wEAcAlIr4ABKSThuXt4c75ByyJ2Zj9qDWbD2SSJmAdaqBSp5CdPoB5frx9LDdEVDG6C5cKnB/xz1kdB3rAcP2Bb7+X0q9GtOXirWU7HGEgBSwI/CoehosrIT2f7pFKmtNFvlYF4W/jvAI6kMoX2y1kBIZKBHu1PDwfNI7A1ZbP+UIgPMAn08hFnAIOROal3P6pnlzSQlK8pHf4F2s+AwjSRNvDsCadl76bQif9tbqDBdNvzPfxcy8+nCw1OULDDrOukEi7PXnngo+IDLY8UZZMmGOmsMn09yPTI8VwjhWEUkXIY4mYVu2/7qq9tJXuqsLoxJj+XMZqEWUmdnskabf8olWOI9Rl9Ik07vqeh1id/EpqZRUGKOhksqxveuZGm0Idx3g//+BPrd734n793wXnuFEoUOXc+ClJcrC4wiI8rv0On4GNUbbh8TBRtwDOPVWerxv2P9SuiPukKcBwd0xRPusuLSH+/xUmd1r9dm5XsuZzZ35kBLxCt+ANBoihA5CY6YAODEmnS8KRpIr7cBgJp2uyDkahcmi+EAUE7SpvPQFRrw9yfcvk5nPHUyApDokQWPBQCOXN7DafPo+ABH1RN8fL0t6OrVq1X3eC7C8dVZ6vHu2P/4xz//WQDAQ44rnmhXFlrYYxeAW+mJ6bcSEyUAEFCyqJdPfkX6HLp8+fJXBEBTyAR2uAD0tWjSfbh9BGAUxX/1zi8HVXcpAHZq03m9BNBptXY4ET8DUOKXANJk/AxAFETYbO/ayJ3aACAwcH3gep/Qru4PUZ8w/nW8X9gWOMSdZR7bRG81jkOU1XjeDUArFOey4i++WFW1vr4NAMTLaFjLvekuAJvylYKIXIcvFcQItzLB9o5G44CzylcA+Pe1+GjS+fojwGDO4hbcOfuXX35bnZ0deIgB7Nyp1QqrygB+1Wb9lbOBAUQTAOV1XuwhdRZXI7Q3UVplfSKS45aEc0MH9p/yTveKkQCw7WrIXneWmYDMrD3++Mnx47x8Iqt8GiTs4+bJ8y6V3Xj4sOLkjV27qjA9AYCBvGJsQkLgXraKBAAEOsCdZPfLdbjjRwQAUOJvxy7t/BK+NKuPhqVYTX6PEHJ101+qq8MWLcrUqdf/ne5Pa+OvMLPRPB3dBw+ychaDSkers7gaFiAliv31sSHr14euv0o8n322XoeAHXhwOyuydsMYwJDax0+ePD5OywCA8NM4fAIwdWfdtIqKvKyMXbuKDPWFRS8wAG3r3lvtF0RBAveANuqv7K2Dc+3K9Z/g7gGtlKRja9sjPjSQF6/eqc7+9ttztKz3Z6uarl22BcqL+jvdo1URvyqzGbSUpOTX6XlkW0mvpaqzuBLA6dOxOD4DKMA7koRzaMyUf3+xczUCvlVgic+m+CWAIUNqjz95vEkBwJdfAniVhj6+/xuRjGyTAO42XRjVxJMfACjxE4CuveRlC2SO7d13NJD59yJFSQD0QRj+tPHu7flhpqv6y+pv/9lF7wn0QexZ4g1bBIBZBCAnIsJaEm+QAJT4f/Naqrmndd2wCFMPhuHTp3OWQDk6vS1hfcL+6v6I/iU8vgPAkAs1+5vPIn62zt6+56AsdNChjx49OqcvwsEQPx2OjwcAIv5d+YW5hfkSgNZ814wNGADHP0HEo58Q8PXe2Fjx/JkCxd7T8uXn+CUA3P4AILcPFu8NuqrDziF+lND4hfCjigAQsywKozQN0Esc8eJ89LTHLk8+7ZmV+LnBnJX2KNAA8KvVQ//9xWTYkDNnJq9VW2m5XF8vl2lSx/X3AMDhU35kee7yXS94mfh8St78RNZDOetAEwBAmaRjoS6t4a7M0TKFcWxNtfE+cvvgsWKCjs3U8jwFAGxd0w150DIAkHO0QSjaSPM3Pa6BI+RnVtojAPAErBRo6AeHtN1YDP8uRra1aiutXgYALTZ1H287pn+SxAAA0pFB0aQT7wuzKbOQwV93kfC/Qt13j/TI0k5kg2Yqox1YY0VBwlKdWXgx6VvLzKlRrPEjRU53Q7QQdpenE/bW7G7JBpZOpUmfLVi9arXQWkhtpdXLZP8WzFsQFx3Hh2vm/CjrBZaX9UbvmzenotZWWmpZ3AOJUgvCtkq/2u2Vy0lmbiOfZhxLqSWuyC/FpS5qbCyiW/6LUm/om2rv6mrvR9VGyCRkNErs6uOprS2bcpaZ91Bbd0CTmsTiPd/i8gtuzxGVPpoIebTY61qJ+aT9pJOytEnQ6NfiSBlxcbWsMTRG7LBtdFvJ8nxI9FAyKEhgkJRa4jqHpigjQxMZqamry/fV1Hk3eWRx198zmjTpmEZovSbe7tRGq4+ntraGnlY9nJfT47Wu5YAGVIKSZIEF7y8KOrg9R5C++r2iI6/W9myvF2p3/YNwyqQYcl/Fc14TkcNAk+r60AkPhBzg0wkA4GNi2fyDCMAg5VURKkfz4uwOzWJN0GBNuR0Qrnk3jTrrqlh68O1wvDlyNCBp6R+k0Tqq7ACgOp7K2koA6b7xSgFGeuTgvkElWBYAEDgidxVY8P5c0DGMrbLTgx908tVTPdo73uumw+4baW94WByTlp+fFuMCkJGhBqD1ACCeFP2pTg/WVzkgTpiXUV6GtCCeD4Li82N29vYGoDs1/Lrvy379ngcADaWtg0JwMAe8ufp46gIM+brdYnEKL4/lSF5fItqjFE6ms6/g/UVBB18Qb1xgeno4x7qqf/XUKdr81i2ZIfJaU1LR0YEsbUxMWmnFUQEgP5/sYFxceXlWn1XIGR6w0JzDWosGZ2SIBgeFwJvDeBBvtxWVz5Ior2Xle486i4KIO1fP3aEXkiv0QQ47pa9CQoTTnP304227d08ejwMsszRaylwAZIGDvwCw/RQ8ObRRaBUXcIiCDpwPAN6NvQoN5vgHngOA5XT7NDVJa+31WUXSjRsxa27EXEuLawGAo3HU/+OysnBjlpdmPeNnExkYV16+HO3NEKMQJjgrGizjl1a0MTLI4xL2vek9KrBg+IiuhBRUFhMAfrojiae74Kcf715m8j0+ngDgj/vBR9QOAyArUmj2njc5cJmkOLCKa5u5PTO4YMM7cR0REPELAMtxxA0bpDX3SsXYFwNdu5bWmZN0bc7RjNraOMSPHpBRCgCrKWcYKq//njNrp4kGmyCQCQlGg5X40WDZA3z6u3vAnUEjRtw5d+5LAJi/Qm9xcOstFht9JxHp9/TjDeteKJyd7AFhuVPKhFX39vcXXd4hssjbuQO4IGxkAD6iPZy1Rg9Yj/g5/IGPAGD58kJ42Q0bwnE8AUDG39mZl5eToyMAiL62Fok2AkD34O7QM26jlIcG14oui6sYEjymrpxeyuUJlaZuqViWnz5Y0x8AQpt7J6V6Hxs+4k4N2chD386f/6EeRseB9lso89oBY6I+3lhVAQYDSHfud5qEkUEWGftj574ii2xWUqJyPTqfKOjg/WlQ5P7v4wJwSguhoJEV7hW1huOHKO1xDQD45aJWWyoAUAPOhBEAgwtAbZ2YhC2haDA/bbkfNvKmxmRobJF5mgEDNL/Q2EPKU72nD7rPPhq5rwf9CIDdageAUK2hod4GAKrj/U8BRiQ/ju8/R/7UJ4Ssbl9HutbpL63uUws2RH/k5bKe1vrKq8td1nsflDsXAES5OXQY9da639SS6uQswAC0ByyTlR6QAQkbEgIBQNbicggY8qCpdRpb3M6dNAguS4rTWC4ZjwVCXIABCitgdZ2RGNBDMAs4bSUAoDre/xRgsCFYvx5hkbkVVjfIv6/L6j61YIMLOs7ysuvttdSRV+vcnqEecycAiFpbFtUbiEpbzpiy6NKsDlhL/pS1ZQuq6TZwkjCYJOtuSVNJpZ8nIQeaf/NmPlKyz9R+b4T++cj46JF+9iM9JK2un5+0uurjkX2T5Qsso5Df/7O6smCj5/a93oI+5eUjKu0JVpLMJK/r18PDZRaWq4i3k0ykcHbLKmcqaoVlCvcQtGjEjyZ6emF1Fre3CpDa6vKZhbHn8wdLueytnqU8n7CTFSllugeMik0WaJd6CrUZDTfmwep/cY3S5M/hmqjP73V9Mj0uKjnA7ZQtFebiRWiVt8x/yrHW6GE1SYf8Hraa2psUa2m0QWRlQ0QWd8FiUrkrL5XK+ytm13iiUog3mzZtQbANsrpL7CfpySCz+G8BXEChYRVAxj1vSsmCDVUBxTfFTq3zpDO+Li5/Q9OFlrg6tdX2MovZCn6MtXM7PS8LAPQ+HQA48IcPeardqFesJtf6HvL2bby97tat9unCCQIAz/ORkWKeBwB3PgafKWxOFVYXCYvjwuqe4NAlnpcIgIhcFkQAAAfOfwwNIwAALR4IkKEpMJp6ZrWj1QUUgx2Yde32G/hIB+VVx6LUVlsCcF2Dyt4MQBzvFQgAKP62pvA2CUBaTZmF/RjLEV+dn7nuVvuo4fQRFQBYoHRH31DKAgdX5EMSb0ZGXIy0uiU+JcLqEoBprvgZgBK/BKDEHxYBAIMEAG16NQDoJYAdO7QCQAKnL043N5+mbpB4qNEZ77CXlFRk5FMJfFOd/OyOxJ/deZ1A99+8Weue5gjALphFLL+yezcB2AhZmy5Y2Wnh9feSCGE1ET8DAM2D3WeHDKFuMGi80R/hl+CjqvgSBsBlc5V0vMpCqigRF4viN7AVXV252B3+S8jaKtdTZoH5q7IIaUUjJnEBhYHWxysA3ty4482Nb2r5+KyMuvw64fQqnBknT2aU7aQe0PX8MqoXaKUsaCvivWvQmiQA7qHQ5t7bkSt5RctWYzcD2MEAwsNDJICvFi7sewf6knRnIltPn8vdxGNYvGkcAPj42OPt9hJfTqpyAws1GRnaImRBXQAQf4mBG7i2snwnaxlp51R1FjnEYRfqgBo69nHO0YD1ngAKNxbiP7S9BFAXV1EhnN7D8KLw5riiirq4lXUHK47VIf6mC63tTU3trU3T78IJilJSpQcAwK5XeLlQAXCg6oMbVYife8DCep8RSqkpACD+e0hL70UPGD5S70/pLXQ6pyhY4BzfYi20uNDgBoD4Bxi4gQyQZnVZPK3OMquXOecIdgQA0vMGuPwbD+yg9RIA4o8T20+tAFvxlV59Te6y0Vh5wWQytLYaTOgBAFCp3KNiEPzxrldUADD8VV06/wUWfw4AZDUVqzoSy2GXHwyZiTGgHwGhLHGoj7Mk0jmUAVS4D54BxcVcr90E5fUfkJTGb36ox4gSDwg9hkthP4RQCDtu3Ic6dYEDF1CYPAHweowBwgqPbVoJyXJXfFCxrCgjDv8Jr4urO51bk1GBLDOUQ+IssxesKKlSqveeH7+iBnAAqo/YTTogsq49rOfB7m23brUOp2UGQNH4DJ1gEVnledP47pKvfLdEqd/9occo8TMAJX4CoFXilwBg+lQA5HoFAIcvviiZWsHXH4q5nVDzk9HqLLNXUaFLJlORqahuz4uQOCDPAkblUYvkx1bTw3oGt3Xi4ivLsoDBnVWeygNc3mYSsoQA4PnyFwDIMCglD8EjXc3/kAQAPbPE4Wx9PW6BF6RDkW1ci2+K+JsngQE9AB2QOwEudGNdRoU6y+zl/ohMmjWyf6uiyfduWEVSnJ0wZLw4UvkMTaebCCuqLOtVFQxKGasQdwSYZdcZPWweSykFFuKwlZxoOBdQXIiGmvUkVxJ5g5TaSivnHs3SqeQ1UZUl7Q1p9Bp3kQWvFicXNvvQfGX7cR8fmqs6oPozOp1KAqgClSyw1AKSnqVA/PbTXj3E7RWnn/81jrcb4loHme7+n/Pz5krWuu3GM5+hVnmOfAICAFVWtzdVE9g05VApHvNTPawnW8fLiYmPeXvofmCNztv2lRxRuG/p1AUXOl6rrDd6WFGyyqsXQ4oXnKe3sRIT2f5YAsY2PV4nNJPUS2nv/a9wQJ3yewPiW2OcP3wDN8LQvIHP3zO+7/kXJ8IvrYGuJBUDgEhqyruaAJSXa0I0eaSjRwGA1otw2DrqOs8HBt6hzb+tSbi4RAdn17jE/UI7UwJw+Po6xLOFjmsroj//fEMmr+eCCovl6lUfeqHu47d2scsG0WA5eSqMj1AovM/QiAB8JXZnnRvBul6u9k4/v9Ccmbzwn8ZIgROwwDPET6sxdeaEa5xOTfiSnHA+//OeWetce0cDVAzl5BwGgNb29lb570L73fZ+AFCqsWg4fgCIYuspLidbVxzwNgggzZOQ0o2AyNpG2JWHKQZgJ6sdycvR3CGdDbYyE6kFABD/+uyEgoFcUBHQEAHVV1XxZyNhcwUAy/r1FP+UiIBZo0zmY+2etcQc//3uzE5T54P1evSokvj4SB/w7I/jAUB4Z3N6ZF8f3/TmJRsYwMILraQLUOvwz8ocHR2ODlSo5V65sg8ANKx0B7IsJGGtLaraXXF+Nir0/r77fPb58wkXM1HAAACUpbZjvQJAfJY00EnLRt8gdPXPIyIuiwoRLqi4mlBQkFI9gQFQUWpDhNNZbwWAXADg+AMD9w8dOmVKaMAsg2FQ+3BYFs/2TL+/EIN4Z8qjgXqjf4kdpoP7kwCgMWkdMGNDI03hOD+11+xhrWWt8uHiwyfbGk+6AdjtjkhhPV3Fx2F0/tnyszixP9cCy8/UshP2y8/Q7Brg9sHeImvLX42JlLADy+E4HrxxZlhY8gSuEGGrjOrnagAg4wMA9RH4lCu+w5lLADpQ+mlxxm8LvFUytKTEcnCWofV5fOVzzAmVlDk7yAneP4/4M79GcSoBcJb4l8SHIH4+Hj8oNoeGLtv8kNojASjWGlnwS5eK16BMM6eidMlhFwBtpK/Bw3qGqqyn2J+SkASAPtM6fz7l62QG4O8RvwQQL95qOGnZDeCyLGaGVeYesL8ayxKANl6Lt125+/DV2CVTZZGzcrHZPDmvbPLm8O/RA4a39+uux+WQF2T6/ZZMxJ/yDbcHPcBGPYDjFwBM2lPL8jafyTCF4/zUXrOHlY7iStXDEDlUAPCNdzgdeHqz8z9Hwzx8SQoAR4/S6/yYo1FsPbUKADipewnZeMvxZcrS7q2LuNY3TMYPAQAUSfHbeDma/1xmtdIYYMYYQE5yYEFKyjdoLwMIC4sHAPzHSQAqKovi8L5w2uT8yrz8uPLiWStN7Su60COnkADg8fkWU2dmZkr/ZwWAoCCMAUEU/7M4np9BE57TrM3avLm8sHnhBkM0ffbX4S4mdoSNXiPiv3b7ypIlt2/rvNjaYnwXFQb99QRAO5QB4Fvio6PZeor4OAury7mYXfMtWeFvD/X6OpNqfbtkXpYLIkTBhX1w30gDA6D9Mfp2d/cTn6kZg7gQoLpaFlQsKH/J9Sj6p1/8Yktq76LFIDAtP39yXn5dXv4zs5DFqFB06Us8jYZn7v/GVRCBW4qrC4aKMQA9wJyzJFqbn2+IXrgkmgHkDqRV8nwE4DDU53DO7dt0C6gLCqZi+tdatHlyGhjN1lPL4vVbAwPvu2aVOyn7dd4h92ReVhREqAsuxk6XqyFplT0LMILXyklQUpiaVJlfWRkXt7g8P6M8I2Na1KyVpTt2vPjiRgjO/MAq3RKopsDd3lNFbuVDWTj/hmYTj3ctzQYCEIFRVzkfirUheRdcAwB1lpXsnyHAFOVyj2w9hdPk9UsPjVM+Oxv/9cdzx49VliF1wcVY1S84eBg9JavMLlyqeOrhw6mpl4qjooqfiSruM+sErLmHYP7++sijvduVYgfa7gX1+XV6Y48TzoF6WOFPDilfxZHUWWB1VlY+Fe12qTe0wCOIQKkE+SaAQcp6E1JvlZRSYaH+AyCPn1sTnxMqmq2SOsurXl5L6vUWnYFb4KXWJ3v39viFBXXWVFpT/EFY0wOiSjg//03Wmd5ZdRcSL9SJdyN4MRK4cuX69bHvtjWyLn4claHNqFCssfN/ACSSlF+MGKC8+fSFjHPbWOJ4Bw/+1VsldXvVy2sXQ+ug2Fgy108DwIHXPr4gfmHhs4fQDegL0g2dPhI20/2ISwA4B52fv5EeQncAwGk0/HReHj/u5qUGrny+oCBWNPhg48GuKK3GcMkKcR2DddI8IfQYIffvA8hfjEDBBklG4A8AHDj0DnTwr656mAApdZZXvcxWe+bM27e3bQujn/J6CoDH/FFkQs1dBnCiklL4izERbebSUmEMTE3HzOIzOQaw42+dnX/bCBGAFjS/heNXADQ27u+6eLHrIABkGOouKVmdsgyhiooMoU/58/ga1vnzNV/j9beUqB94v02JnwDopFxPzOqCCvUyAZi8rQa/d5f9fwAkcg/APXteApgGFWq0hZM9ANx9fkWTJ4CizOQiAWDBYnR8cf1BYHNq4PMAEAgACfsPgkBXVMWlS+gBso6lapJGqKVFI6T+BQpTz6ywuSzeKVVG6tCxtrZsdQPgeLu65C9W8LLyCxEAgFlm2+2IiHsAMOWpAKgHXKAe8AQE3j5BxMrp/NO4tJQBtFOKpp2sJAPYsTwuOTnuRQbwfcWNG5eEMLdc0kkABxMu7t+f0nWzK75nlrdMxpe8SAGgxA8fYVJlhf+nFpkVvUSn6RQAOCtd39WVi3gJQKS4f0R9bxAATAaAewUFADDlqQD+W9y1hkVRRmGyy+6ygrYleMVCM4sQoRvQKiFSBlG56CZiYYigEIgFlcJWhIJ0YUuUCLMbT1mhS4ClaRJPEQRElhbhpRD1qSyhInvq6f6e832zMzta/arebm4zOzvnnW9n3j3fOe9H8f/gev6HH57vpPZyMAbK0pESpAfz/YKA5YuWvb9skdnMBGCq6PO2lpbMz6l19pWhUZdg8h1ljvLHSOCiZUxASxyw/eM9F7Cbn1LHNGWugYHyv3pJgIcDhSRAla5B/zQCZNvdnj2y7U73/lAiYFVJ3/33980jJXkqAsDA84e+aaorq5MEYCaLlBjiVwgw73z//eadZgAEIAV3O6YB9qN4CASQ1t/KMkP82BEE4Mu/5+ieoyDA6pnVzd3G6Ni3r0P8aVqwNA94nJDcetfnWyRuB7Z80rqDvv8MPA+36y1M9W13escIEACVNW9eX9+8vyIghr0Fnq/r/IEdFnq/xP1fwbHjprFqZyYCvHDaYzRXGBkHJAoCArby5qtJa4KAGctAwIzqTR9/vP3j7Xu20whQ69gwAs7UgbPIfGyRRUYxs1LMCzy6tnWTGj8R8CkDnUfyDyc5WOiyxCtmQmTOGxcXd20cm7mdTIALI4DwvHBYGOopjceO9czaggDcA0TBA+4BIGCSsp1mr8YIAgKrqqs/BrbvOWr1lMa5egJ0WWQQAIhqXgAEqE9BQu+3OuilvL7W+FZKOAmHvYuBkwl4rV81WCB4CmNtgncag+XfKyr0bWyiq7kK2MDQdb2dPALUtzPWywznWolWoFcD/fv1Ul6pE1DKjVmkiloGPgMvPTh/qpGOWjsGoPeZUlF9+ypv//pVTspyLe5S3n/paR5YynvfweDt+qzzEAn5CWhkdySGR2NKMD4+1oH/c5WAsv9lO9qSqJZ5k5LbNgukKuerrxUmKrSXzyTQ2moSuJEgiiouIKBfAPBTpWO0IzJS9rAsWNAWPLR0ZQw9VyIisH1UQcnXnJVdSYjg/U/Twcdvl5/fewzejv0ZSlZ2SDmhsLs7t5w+I2yIozwjwwGxjFcZkflh+iz1L7VBtW+jzc3pzM8CwoyGUM7hBcjz5YIKqTSBaWrWWbTxcVZ6IHhgYNMAZ6Vv7ADEk4J9jgUBE1TpiConQzls5WJji2IHStN+8vErCEzzpSqlEVtnVG0dylnZEioQmMf7y7jnzXMTEDjBF/aHAG/n/YHD54us8xDE7WjurLVXuPDDlAjIiUzPyTcY8ImRKSBAZH0PHJAFF4+/jfDwd2wl5c5jw8xB9cSAzVeeL0tleZ8gpYik6yRlQp0KMSkrXb3uq2EXvpv8LmWluWNFEIAqBDcBqnSMTiQCEH7R/D2lu1ItkJZdBWm+aWkj0qq2YjtnZbkKawbvf4TQ39/d3d/Pf/TZFVjg+xID22l/jv6aiyYOP4DECBNQX9HgKMx3VRAB0Q5k9nNiiYCUICaA4p84ejTCp/25zQ21zCCgvHxmJUZAoYEJkOcLLzQMDE5fsRcaLDQ+BA5to8IwImCA4qcn7cePX6cSAG8zI0nj8WJ6fJQqHeMdiZH5dPk3IXyjOf/rkC5fhF9QUFp69jkoNOSsLBdIzOD9ScGcf+gio/GiQ+dfjxcYMV2SAN6O/YGJzcaJQuoSARXfFDkiwztiYjPzw8opNZcSaTBGRpYnwhwT+59/WEijfux/heI4URk+8+aamZWzzTKNPUyebxKZwRURwskLbSqatCj+nTsPCQJ8/Dyn35kAY27nV7VaAiZdDAjT03gUfdLl79rVbcxw5M+mvjykMEePSyutikPpKkvXEtkxzwQA2wzANv6jT0RBYJcggLfT/ofroKK2NSOi4ZOHOEBAaE650VEUkwkC+LGNf5SkJRFwzWiaGm08QbW+xxxZe/dWOvdmhs901EzP1BAgpO9UR74U4sBZbSYm4KNtOz8iIAlLSlGVSgoB/vUDQWb+bSAIGMnnTlL0ivgcXP62Tbu6zZE54bDW+toPI6CrNC6utPQcGgEsXRE/CGDlxe1Tt8Ay8NAtz9KffWBmtpXCv/NO1RFip9G80+hfh+MTAfmFFbGO0AUdMZnhsbPLUzLSMQjQ05kY5J8YGUv7L2scfaB/XOMLtH+8MysWU9tAT0tfX7gkwGgdIaWvvlZZEPAhj4DPQIDOoYIJ2GdsQFkiDDLcBJyvFjzE5+Dmtys7qDwW1ZIgAFJza0HaCIRf+v3XisMD1+IKAoRIsaRmp2/nP/pEzPAkgM3TcAecOFwc35Gf73C5CuubY9rDQQCMkVPgCms04kVkfvhs3v/9/nHj+hE/E1CE+LmYt69vtyQAOWSY1UkCZPyybQ7KkupCP9yG+ImAG2vUyXYyiLyCCfBvaPDXEGA8Xy14iM9v67Tj4u++dPduJiCgYF7p2WdXVZ177tenfT9CODzw58Wx9OQMlq/9ppvsvufSn/EVmAECKEGnOkIMP7TN/9A1fHwiIL+jor4+ph7FuUxAeUo+EwBvcBDA+7//Pp8PEyDiZ4AAPl8iQErfE4cPc8GSBNr4hDK/Wrb9ieOp8YGAffvEF078NmDpeI1a4DC1vjYxJ5YQDuArMCuwC4MItjaY7Kq6lmtz5VOApScr2DE3QcvjP4APPZ9fYpyyljdetMkWFnJ2lghIsVgc+UYjnoL+QeGz9ftP5cd/bCxYIJhk1tn6F7XC+qzzeP32K94ABAEXAyCApOONkwGRtT1rSLxaPQzAP4qwdKk34wvOEn/xKnDUmzBGB9477w4gj7frfX01hg8MvMbfYRZLmHAX4/35DfyOydjbo5pZJn1zvSXUUmEBVb4L6D+f/yMKQKYRvPKSBgeTUKp7gdT0c3XSNSlaZqzjo4upse0DAVFcDHytgmt3rwDqLNQXbekwAaLAwky1x3w8ofRVua/P4iImwwcGNQ198OBBLy2mMlQSnQGLF/vOnD5scyCjTPEpVnZhFjRtdkrbHX8U4JVUUVFfUeF4z2wjWHN9NtZ5SNFop8PBZXzF6dmjID0/ePjh4vLyYsXn4davd0mI/uKh8CWm2Wwz5uN2ki8xS1tRsMDHQy2ytnfzTn3tMLLQhocNAcETpOPEwaHeBz0IQLM5Q5ixzX4iIzVjZUZ2yr0ls8gQvEw6RNCdZm8+vmLjbXZjsGfbnTGdunBEgYa31/6KehdKS9dMkVlfH79JfdousCSnK7ANPviRlgBIz4TmDx7+xlUyq6T+vpkzUeM0EwSkKSil2l2y2AQBNTWoxiSLTZa2ggA+HipRAf65DxABOBN3HpMImGS42cClc+w4sXmoNfVlDwI4cDm7Ezt7UmpMQkRIRMLqEkYZHCJYOmeGH99xfDcISDWkTvHwPU7npplhskADBDhcaE5fY7EycimrmqvxCU5yBoIAZ0YqbEKH5W678VgFcsz7R4/u3MsIy7ZZFaQCtZMFAYsWGY3bXmACRgoCjGaWtg8h06Ma3N3+4Dlau/xRAd6CAJmCIQJsqanW0zUE5GjihxvdsOyYkEC/iLensB98SZl0iNiLG+bx3cczZ4832g1TZPxyBKRsYTM04XiBr0CM0+VyrrmYSwKmjB+6o2CS77qFC5WSl2hnW1tloiUE99yQoIuoDW3WrP19eAYMGwY16uuN2IDsXbtkSQwREGrYtuydDiLgHZNa22tmKawYQsRUiIIFs2cWOMgA3Ky+tuy2W63eY4d4jgCKX5qxPZFhD5oVaX9xeiPiBwGKQ0T4pszdxzcdnz0+WG2rpPoD5fMofiYgz4HLDygjYKhrfqDvsGTFwQEEVGbh8o84e5h950RuQ5vVtx8MjEP8RIA4YEJX6S7hQEG+xKGGmnfeWW5sJgLU2l4LZX0VApo3SkcIszZ+aeCw+D5gJq8Qcesv3t6bdyN9oBCwocKloKmpyTW4KmHx4mGLnVOyED9QdmxvZlvbk20gYNPu3cfDmQAZPxOwfosYfTTbRZ4kXhdQ/z6AEUfCYLz3QGDwsGS+/A8IAootCfh2+gUdIqlMI2B0H+KfQfFTZ6c6AjgLS77Eoc3L33lnUUcz+RKrtb0Wer86AmKE9jfrsrj06j5NQcMvYzdu5OsvQStKuGd3z8g0Bc7CzY/RyASobYAQckPCTdK3mJukqP6A70G4Aymf52W1EZRvsTWXtHM20hUSndEZVrQt4vKPFFJ58jdNfXPm9I07wZnJfaZt8maxU6D5PCKgbhkufkcz+RKTtJUE8PvlPeD55/kxcPfa0++RM/EA2d9ByRnuY8cV4RU2NSo1dcpULQHlhoxYEf4ZggAZ/jyE31g1NV+N/9iQ3aZp5Fs8nCDOn9sBRDl0SBSyxl5jgy/RZnWnQfunwdWcgPRG3NEgKviZkNs8XErJyW8coJo4jh+pWZNH29pVw88jX2I00eBGENRMvsQsRQUB/H4qxmasB2BuFp0jg+dmrefCxk4iAjhLTO5x08JgTD9pWpibAHiRWSIRvyDgSRDA8SN8ip8IcMdfXX0MBJBvscZHGN5iiJ8IyL5wTDYISLUB6n28FtpftrkxC0d98JCy+9e5peR57FEk8SkI0ElN8iVGaVxNjdFcCF9isV0QwNvXqklvgAjIkUOAAQImGW82KlVaIOACOKmOBwMqATnKUwA8yBEgKWACshQdn3kcbYDsW6w5v7UYeQSaqU6lEUBunLUCbxOGfr90A5qtjiqAYuqsu0yVkqjj9YBeatLmGmRlC4NCF7m3hwbR/zmPtq8FtPZm0bpaXsg/88sWNcuJ/81QGFCW01DA8k+iCsD+HrtwOhonqIh9pZgCYpghfIXF1RcNegLu1rVeb0+p2pDkmTcmWenO4QI2BXJIXRYVdUWS5h1508aqWXZAX2sszNDUz1uvgvXzKZf40MwX6R0puCXvVeC009T0uSZGL5aimlrgsbq2NdPARqFSAgp4++juYqdmsawwesRrpbPNs1Y4NcpiycbuLqcLv7OzKqfe8d6XG0UWF4Djg77WGFIaULPU6kQJpm0efXTtqZf4GFD8vkx6RwquRdYsEeI9aRSyppw2JYwHATiQphZ4rK5tDVnV6kt8gbQZcVuxHQEmInBgMyAIuIZqd6Ujg00bPhPgb8/KaiqrbGrLbNkNApAvp/dI5OprjSGllx9oKiiQWV8QgMB/+OabH14ngIBTLfGB0IXXGQjQOVLk0WSvcJTg/b1HjRmT3NWVfDWDCcDxNLXAcqkrV0y3UGKUVv4KS06k4a5IvsFGg82W4pTxny4IQPzI+E1sngil5yZABvhCtr2msrKsrL2sJbNpSWwYCHjpvQx1u77WGAQ0lXVtLaiSWV8i4BCmYcYJBtby8ckugn1ozf5iBHD8TIDekSKPJns1S4SMRU3pxStXagkAnZpaYNGuHjElLcIqCVhY2DCnetjWrajuRUbI2L1ypc3s3Mzxn75ZElDnP3L4yJ3NUHoKAcoVDsKZVFa2tcMvP65lScvUOx5JwdpRe1ezozwmS30CRslaY5WArtTcLrmEBxMw7hmgkVYgen2tCDg1JCRVU5w9wPEzAXpHCnah1SwRMgQP3ITkZDseusBz8V6cNVVrgQUBFYGrdwRWSHO0woVz6ue8m3z2OaVLUZxs6541q9uwsuH4McJxk5l+506sI9P+kcNJKofILyjPWI7CXB0IaI/tmUEE7G8JuyPSkIFs0XEpTVuJAG2tsSAgI7iKs54gAN/9ZwjjBAHpQnnWObOF9BZKEvFLAvSOFAoBSOLheIIAFDFnX6olQK4mp86vm8v37i2HYwET0DBnznx8P7efc24ptmMEVNhsIe4sKxFw/sSLzIdkgYM+CxtKBLS0NM3vw11uMBNfgUhaNkuugLYaI0CNX0rpAy1dUWVx4v0g4NFHrxUj4DUQcKcgIDUqCgSYFQIGZPyt75r0jhRUIHF/ibpECBEA45mNl3KPPAgQq8npCDBmwARItKlRre2cBvpl0Ps4B2zrtmVPkPFJApBTbTbX1TWPBAH6goWhWI+wMhMFUC0tRwaXbAYBuP4Z6nS5rtaYf0scaKqqKsX7FQLoHnBtx2uCAGVPbvNKZwKMRhl+77smvSPFipmo9OD4BQFGIDk7N5mPgQssaoU1tcB6H18QUN9O8QNzh3LACcPUggQmgB4AdTv9rxl+1clLbnh3pq3bvHl+S8sgsGTzbBCwyuJu6zHX6muNJ9MSH+/jAPx+IgC3vh8OH0b8TADf1QFaLg1marcyAQNMQG8rCNA7UqygUieO/1U+Ht+YduzINQv4i1phtRYYBEzx8PFFbW77EqXN7N2rva/tDtEvqWH+uyU3QMDqrErG5vDNRMBe7ZoarfpaY7HEh/r+9fT4B15nEAGA6LYGmACcungMAia9IwXXInMWex4fz6wWTwgChhJyGd6EC7QqDTB5ojVNV5BAVN+od3AANJP0c8NUeTo7r3U8jqsuqaGrNZZaW33/ep37WR5B02amb03TO1LQXis2cIGEPF8mxw0vo4TSO6lRngycm8f6c3mL895Tz2D7IGRuUvQR8i6Tvr46qXoGgAINLomYCgz19qw/GeMMv2l8uPNxxQhZ3/ZmtCkwQ1pbLM+6cQvDKODuHLuccBrjlFL6KkDbR6f3Fc5YzwVaAi7X3WshTRmyE9NUbFxsSHwPwJewweXaHw2dW78SSBPS9Ko6T6l6BrLHqATOEXg6zDvbZseyvAEy6zu2MiElISTFnuh0kt1g1lSeKFXPx6Jvw4MpitYW5Rb9+bO5GytfIX3VeISPsFqwIXyJ9b7C/kgZKVnrzrIyFwhwNyPj7rTMlFecQrGvATrLmpYhY5SV5YLUTGNpSgURNVqpCgJycvCDTVr0gQCbPcAOF6ULpZMUChsnTAAdYoa/CATgt4Z6PhabgWtm+bUgQLPuDlas0J0/CEBgmtXx1HiEj7BnBsq80+slt0cwrW35yB14g7L/fU1N5SBgUd225prmZvzT8QIIWJyBq4/w9zaVHXiBCWgX8Z+tFEQs12QYckHADcgv5CN+SUDqJVi2WcQPAi5IwHjxi9pRVNQCFE2FoUIGtxKuIkxPeiUxalSq36jixYziFZ9tOwQoo+DDZyUBLpdRIQAXViN9RTx3bdnyKKUh7lrrE8J1pAUFUqh54bHEEBO6L92xXsaP3ekNdxIBzc11zXUdy5mANcZVxmJx+V9A3osIcLnjv8SeS1ng5WrbSOhS/ZIYdlsCHtDSIv/C8UUJiVEbEzc6isKZgLAVM+1m+xrCQWBNdN4jAci8+zqJEJTu3qp+PTRSuK4C+dHl/BoE0Fp2Bw4I6QsCEM2WlIwMUPDoQyCACyZm4IRYamsJoCzFS3dgvh1QZpxLvkCWt3lnc0dH3aLlNcsQcF7kquJVuPxNB16QBLTL+M+eYIew4CzwIqVSDwREqPETAUNxBTTl9xfMjSzescNZviM8fMCR4ggHAZhtUOJ/GQQsDh6VGuI7cxURsMZNgHL8IL5gD3f+8ENPA7JMd93Jnz8aNSaHxep44oLiB3IK4gcBomAibdy4UsSvJ+AOEKAvOJisLqbGAa/A+HfSt5/iv4wIcHH8IwKy3W12y/3l+TEBFL+6GpzNMwucixHEX38QMLBsERGAG4wHAaHOmc7a6Rw/E6B9vyRgeWddTc+yh4gAWcDR3y+lr/ARvj09/faHeLuQ3jNQyS1Xm5u28WfCbwI/t+oLDkiaNjMKmwUBaxo6cfk5fiKggeIfRj/OcEtpvhxZ4EWaR23hkJynn0b80qP0uTAmQOMHEO1E/JVU4VS0bFlReNjcL38W+Jjwc+/4jW/nTg/FuuF8fuvmHpSOQwC7zrBP8H03d7bcdwNPtbEZm0b6Ch9h3Ai2KFNxbqXGaX0vvXRFAB7L0REBYt21ukV0xfPqcfkXyfiR9Y12pQ3zTbCiBubQRcOx/+XXLJqjdWgAAc/h+iN+JmC2TY2fgBGgVHjtxlK54WGn8AkOsEepr1es4tEB5AEHo0Wef0ts7O0iQM5Sq6vjgQB1KpK2mw3ysy2M0JPa5k7K8roNKd4hmOZ0lnVqV6ML2+Vn99/ZXDdyotj/suWeDg1UEIG7AB4CjNlmXe1wvJPL3ABRkPFPPsG3riIo3xEQIGcZRZhEgPoUoP312y93t/HJ1eZOMifTFRwAJi2ODr7g8frdd9+/6jLs7y5AMHmC5B+yzO4SB5Jz0gwil0ACkHPCEv/kE6zvslOFsgCXVyAHitU5dFJabscO2iy211kmT4zXFUioApyxoiF4UrCKKVfrs7TwRvFwJt7Rdvqxj4cc26Skvrm0gl0hNrAWlu+9SpGm+uONB7T11nkEFvj4B2jV7T958uPT5k4+7zvluumPZxZQzdSefEVncRHlKRXvhLXMI8WPKHeeFfWpU66+2I2bxuuztDeopjkPA2+dIWt9xSIwsWFsniYW1SA5PFYWSLg/T18wofcN5l+D5JPlqidtkGTq3OXx+ZM7MLkB++7QDp7BMZ3sU5zqB6td5TUIeH29RyelT9QkjfEuCPDw+gIBWEYZi2lLPL5dn6X9vkK7uvqun0St78bg2KL89vZYIgB5e9EoCCFABCRkB4waFSgelWVy9ThVCut9gykfkJ7TiQVPmnqK1tyfZJrfE9ilfj4I2LFxdce+jn3+b/ASG3x+2Zj/svtJn+JRtByesj8IwK+kyFSLgoU+fl1pJcDoRrqTNvanpKutuUBxvXVXdwgYUAjQL2xMxcvrqhcutNqruc3tmFzSIraoKbCqpWg2ETBTNEqyEPLB9Ugd5et2f6tkSyMH4AQc0eK5H1NREWHj43OOL316J9DUfpAIWNJXUqDWOk/uwFjZV7gv1PLGp5IAX7vdzzfAHjJB+BRnj4Kxsbrw8hkPbXvo0ewQBe9CKnaljR5dMoj4B68dfcTgqbUt9fVL2g3Z5yhfKzYsMDaT+dghiyQgrQWPgVBrbkvuu9W9+bLWt6ioottNADu9BUIOEwF2q93X94QEapI4feLOOhs5/u6KCmuMQkBDw/T0+9e0d7b3HLw/2tQQtHB/ybw0WTsMAlZvWr3vDf+gjn1MAElfu1+C1c8vdQJtlxdMXXj5jIefKXxw/c8+Er1QSl1bYex73eC4/bcNjpMEpNTUpIiChvr65x21BssxBXRArK6N+M+/iKRv647OzoUNDXMKl7TX7tmDEeBYwKvLhYe3NLWAAG7MdHG36BgmIISywr7utrloJ8evpt0pfuSpkaN2kfSFUnQ1dC5Ys6aop70FvxVMFqyEg4qVNFkLfB4TsG/fGxQ/pu9J+dl9rX7D7NZRtF1XOwwCHq149MEv8UoABPAIaBwcd+2rg9cyAXyNm2XBQkPnlztiUqBZBIbwCGCLjzp/MxPgKK+GCij0r9/elrO9N56qLlnptBw4MBg+m5e8cFH8IECt5j7BGH7iininev1PT9osa4PxiypGSGsQ0NlQ1g4CsEY6pDKPgMZ5aUoW+rw3Vg+sw7y1nL4XBASEWBP8Un1puz5r7XXWaw8+mNJtVbDQZ8LWNEUJv/pqY3+k+v0X94DumApHtLpiob5NjdvcPr7utsJaavOSBIQTAZktLWeFzz6dZmpcFH8ZF0EtjaCeYVmQgIWTk4o1M4+VWVPNuuODgPbOpibcAfct20cEzJ+zv0TMoigEVK/m+CUByDonJEwYAWfJS2i7LmsNAh5c/60GV/gEY4EkjVsc33SgvbDEHdTXqlvxFFgQPUSF3pzse9z+GVWEgp9AgIj/0ieBcNPp90xfsMDF/cJXEgEbIsoA8l0mxA3qzdN4Ieh3VOmNLG9WT1N7T0/PvmUvEwFL+maUqtIZBLy9eqMIXxKAeO2pVmvCKN6ul9pev6z/9lktAd471BwtcF6e6vIEHkBAyu54TfzxenMyOFMzygWGTOXHP0HU+t56j3ITdF0IoJbX8/N88MiWE0sEb/1C0LfiPJwNrsCypvY3yHHC1FMwSiOVQQAeg7J8AzD9g7TGCPiOcYWCabqCB9XxVqAt3mPR1l9MOkD+aZ2Jz9CW+tL205OAQV43mBPQemmql776haClFI6Pjxbo1e1vMs31qDn4J2ntpZeKVgzkB6y+7tetEr2M7b0vM2B6JrerWdbLTxzBB+qzynqCshT4BfAMvX7JjPjElKypUxMdiZI3xV3CIrPEdDlOkyDmXj1yhMsfFOxou/XYx0mQ3sBUQH98fbxeeql4jq1h/vwGm1153bpDwaZO16ae3pdp4QG4aSvb3W1uFzWW9KHAAQUNgFrQYFINHAmmLMMW+sv4ovimN5htFVjj62HCzcDp8UYkiOm2K+6Cs3k1OpRVKlnhvPe43oHTvlSQ8X7UykPyNWFpkpDexe4CjgqrrbvCUIG/u7u7K1z6eEWBREKC6sBgt7UvXDjfliBf66XpyzcXw4UX5dlyu2JudrgR1lq37R+k6WwOXRY0cIpN9SF+NWuLdCDBrDD8xqZYUHpbwfe8dEJkfEa6IyMyIzIofDM1SIAAIRttstY3773pq5TjkTna+4unf6M5/lLZZrfaXcBRERGD6CNKbLaIwLLGTindu7oUKcxS0Wq1qw4MCWBgznxriHgNy1as2vQmgMLNuI4hgoDp0y9Us8Bk7tXYuB/3wMHGfhCgncpae5pYKFlK3XlHs7YYHzM+Zn5sPY3LWeZCEFCyEi1jW7bwyh5vtX6ptAF+DFSblMXYbObuzs5uKwhYtQrF2qNJqpOP8WlEsOpzvEFI7417Kzcvwn0QBEBDlJQsdux9zzXuSFl3EMULFMxQpDCEiJ/Nb1jACOswxYEhwTZ/DjHAr/F+Q4qM/+mON0EA1ieFR+aFQkoyAbj8TXPQlHek8dAHTMBTMn5MZgqhk91gtIv9s7Y8Rlj/li8oP8dvndkaE2M1SpdReIzqsr6FICCCYMzo6Ww6UiEIOHzg8OETh6+l2uM8nqVIxwDiLHJSFknv4tq9mzfvq2letjnMaQx1BZY4sVNZo6sisZDPZ96M0aPj4s5mKQxlZLdhPCOppUhFMICCgCXWEHptaG7GIBDxPx3XEX36zewRugBnL9vi6PL34RnY19j45utrP3n4ecKbEpdCGAHGhiVGaoDfjnsALr/lQf8P+L6UXm+hiSCcvkShrna4cKkwWcFPIXNPj9koCDgwsbFxeP+1JJ3xGvEXrzlYnIEs2ZqkY85KVHdnEQF1ze+AgIxIgyHCFpy7uqy5OAMEsI0vjZcROH8mAPEGQCj5ZZ/rlooh1iW33bbEGoXXMRUx3Rkcf08cLWV98kLJB+jyX4fLX0fT16d5ZpVp/UASxsaL68XqcTwCHnzrg5eZQb/qG1J4+Ct4K10bv4YAY4WrtrY+NHSFGAEnTvQfuZZylnjN8R8EA5QjjHZL6X3LQMDs4sgUw7JAIqAx0uEPAvj8S5EWl1KYpKEd9Xw0Ia9KRTDwwAMLU6PO9jZ0d3P4lOmJewME6KTkVa6SPmigvsbDb74mCFDjJwIGXU3AEQX70Umi+qQGpba/fLNqsksE97KUdsO0IUa47GCuqbbWbAmlgFHwcWI4jk6lt71uvwdRshOfpfyU6Ozra9rMXWaNByqaWppccUGQ0uL8x20dgaSxJIDiDaH4tVIxxLrwgQfmpIZ466WpXkp+4VooLj8qWCQBavyvjtvwjOfrL/yy/ahVW3yDfAKqM/j+z4Crr6VQ5yvMBAQCZloMGgFQVrgEXYX9OBoRoD8fECB/SvUAggBzs6UszlVcaGYCeK0KavbD/kzAqaUixsB1ty1J9e5Vbsp7qvYgw3GStCQp3NdY8vzrDBCgPvUIG3y6BLYKeAepbFrS/f27XlZshm9gRF/h6SsMAuRTgN7DBOArII7feKqCjHihH+QwYAL487qRpmMC9FL4r6Virgmo7WVAYP7Ue0ppif+1/4sTH7izrm5jsA0C+v2nELhEpJrhr1teTilEUCCOcvRortxpxYqkJOXopyrI0LflWdxrTwicJIUf2GCaq5WGSTC4nzZtndvyIgzgo2G7B2SNw1VXjQw9R/N+/epzQZM1OWZgnhszGJfq8MckTbGtbdIfXv82TD0xAzs00jDJiaxncIIsY1s3Nyy/PMgRCTsouR0ODVF+qpPt2P66ukOWBPX9l9cp6CkoaEk7z2io+YaADlfCVaNHqEBKqErGHa4QkD3l92xeZZWqAX+fku31b8M0vy8QpbCKFGYCVq97e906tvYhAiLb2spRmy+2gwBEfoni4njJ2MGYi5ZftDNhgnw/CLhIunuPXJ6WVjMZN9FOrRSeN8LdIgkwAUVFOQtynAvuKSrCC4Ph1z9+tRm6ugw2/MFg8Pq3QVnVsq+q3VlSImAdCEhel2tMTU5uRYNCZnkbehPk9pBsuwLy6LzQ1BlxzfKROy3yfweDAMR/jSwrWT7ZuDLBMCBvgj/9tHU8CKDoq6q8CRczAU6MAAyBBQvwgi/879lRUfRvw39BgCuwqa9MWeh4jkkSkJycm1yLv0BAZmI59WZI6asvUKC8PFWLi6zGyCtAgDR3H3PObQ+keUfFzAqJql5XnZzMbnCt80Yg/LRzq6puSsPEEAgQGOjJFH8wEH4dExx8MS7/f0JA55KyOftlv8WGsj3JYi2L5GRj7eNvm0FAW2Ybxf+LlL46qUq+vX2B15xPFilw9Zl43uV1irm9IMAeMmuW3Sj5hRIUBFS99VZV2lg3AZkopJQMSJ/jm25KMPxHBPS0NO0vk+eHE5wWLK29UpPffhwjQC999W1uuIeU1cD1REwlnT8ZBMjhf+W5D4AAc8isAnM1H5L79ogA79KqHxdV/aQSgPjBQLgkgG8D+Ps/ImAJrv+c990LKU9bLU82udZci2puvfRtL9Sux19/namzERUFO/3FdGBklljiYqRKAHyWv8Is4k8//cQNGCDAG6iqajmGphVJQHgPCBhQRkAqf/v/s3vAEjV+QQDHT0DG7vFWvdTEkFduGDxiBiOoXWLxGqVgQV3i4qZzHzCVggBzzziNFJ43huMvrfqpCk07IICR2TMwHwNAfQoA/9VToM+15HzNQspz8fgHkiUNraeQvu48MGDqp6fgYnfFQrS6xMWFY667rdTbaK45wBBGF5fNGKN1uU0GAYz5bh1wCS484T/TAUdNk7ULKSuFvK0SJ0lfHS677MzyFZrV1NQlLi6Aj9dYb3+T55IXM9CxogAcV/3vSvC/Bj1utPD6n/EnnaQbrf6BCX0AAAAASUVORK5CYII=) } -.react-tel-input * { - box-sizing: border-box; - -moz-box-sizing: border-box; +.flag.ad { + background-position: -16px 0 } -.react-tel-input .v-hide { - visibility: hidden; +.flag.ae { + background-position: -32px 0 } -.react-tel-input .form-control { - position: relative; - padding-left: 48px; +.flag.af { + background-position: -48px 0 } -.react-tel-input .flag-dropdown { - position: absolute; - top: 0; - bottom: 0; - padding: 0; - width: 100%; - cursor: pointer; - background: transparent; +.flag.ag { + background-position: -64px 0 } -.react-tel-input .flag-dropdown.open { - z-index: 3; - border: none; - background-color: transparent; +.flag.ai { + background-position: -80px 0 } -.react-tel-input input { - z-index: 1; +.flag.al { + background-position: -96px 0 } -.react-tel-input input[disabled] + .flag-dropdown:hover { - cursor: default; +.flag.am { + background-position: -112px 0 } -.react-tel-input input[disabled] + .flag-dropdown:hover .selected-flag { - background-color: transparent; +.flag.ao { + background-position: -128px 0 } -.react-tel-input .selected-flag { - outline: none; - position: relative; - width: 38px; - height: 100%; - padding: 0; - z-index: 2; - display: flex; - justify-content: center; - border-radius: 3px 0 0 3px; - border-right-width: 1px; - border-right-style: solid; +.flag.ar { + background-position: -144px 0 +} + +.flag.as { + background-position: -160px 0 +} + +.flag.at { + background-position: -176px 0 +} + +.flag.au { + background-position: -192px 0 +} + +.flag.aw { + background-position: -208px 0 +} + +.flag.az { + background-position: -224px 0 +} + +.flag.ba { + background-position: -240px 0 +} + +.flag.bb { + background-position: 0 -11px +} + +.flag.bd { + background-position: -16px -11px +} + +.flag.be { + background-position: -32px -11px +} + +.flag.bf { + background-position: -48px -11px +} + +.flag.bg { + background-position: -64px -11px +} + +.flag.bh { + background-position: -80px -11px +} + +.flag.bi { + background-position: -96px -11px +} + +.flag.bj { + background-position: -112px -11px +} + +.flag.bm { + background-position: -128px -11px +} + +.flag.bn { + background-position: -144px -11px +} + +.flag.bo { + background-position: -160px -11px +} + +.flag.br { + background-position: -176px -11px +} + +.flag.bs { + background-position: -192px -11px +} + +.flag.bt { + background-position: -208px -11px +} + +.flag.bw { + background-position: -224px -11px +} + +.flag.by { + background-position: -240px -11px +} + +.flag.bz { + background-position: 0 -22px +} + +.flag.ca { + background-position: -16px -22px } -.react-tel-input .selected-flag .flag { - position: absolute; - margin-top: -5px; - top: 50%; +.flag.cd { + background-position: -32px -22px } -.react-tel-input .selected-flag .arrow, -.react-tel-input .special-label, -.react-tel-input .hide { - display: none; +.flag.cf { + background-position: -48px -22px } -.react-tel-input .country-list { - outline: none; - z-index: 1; - list-style: none; - position: absolute; - margin-top: 3px; - padding: 0; - max-height: 200px; - overflow-y: scroll; - border: none; +.flag.cg { + background-position: -64px -22px } -.react-tel-input .country-list .flag { - display: inline-block; - margin-right: 7px; - margin-top: 2px; +.flag.ch { + background-position: -80px -22px } -.react-tel-input .country-list .country { - margin: 0 4px; - padding: 7px 9px; +.flag.ci { + background-position: -96px -22px } -.react-tel-input .country-list .country-name { - margin-right: 6px; +.flag.ck { + background-position: -112px -22px } -.react-tel-input .country-list .country .dial-code { +.flag.cl { + background-position: -128px -22px } -.react-tel-input .country-list .country:hover { +.flag.cm { + background-position: -144px -22px } -.react-tel-input .country-list .country.highlight { +.flag.cn { + background-position: -160px -22px } -.react-tel-input .country-list .country.highlight .country-name { - font-weight: bold; +.flag.co { + background-position: -176px -22px } -.react-tel-input .country-list .search { - top: 0; - padding: 8px; - position: sticky; +.flag.cr { + background-position: -192px -22px } -.react-tel-input .country-list .search-box { - outline: none; +.flag.cu { + background-position: -208px -22px } -.react-tel-input .country-list .no-entries-message { - padding: 7px 10px 11px; - opacity: .7; +.flag.cv { + background-position: -224px -22px } + +.flag.cw { + background-position: -240px -22px +} + +.flag.cy { + background-position: 0 -33px +} + +.flag.cz { + background-position: -16px -33px +} + +.flag.de { + background-position: -32px -33px +} + +.flag.dj { + background-position: -48px -33px +} + +.flag.dk { + background-position: -64px -33px +} + +.flag.dm { + background-position: -80px -33px +} + +.flag.do { + background-position: -96px -33px +} + +.flag.dz { + background-position: -112px -33px +} + +.flag.ec { + background-position: -128px -33px +} + +.flag.ee { + background-position: -144px -33px +} + +.flag.eg { + background-position: -160px -33px +} + +.flag.er { + background-position: -176px -33px +} + +.flag.es { + background-position: -192px -33px +} + +.flag.et { + background-position: -208px -33px +} + +.flag.fi { + background-position: -224px -33px +} + +.flag.fj { + background-position: -240px -33px +} + +.flag.fk { + background-position: 0 -44px +} + +.flag.fm { + background-position: -16px -44px +} + +.flag.fo { + background-position: -32px -44px +} + +.flag.fr, .flag.bl, .flag.mf { + background-position: -48px -44px +} + +.flag.ga { + background-position: -64px -44px +} + +.flag.gb { + background-position: -80px -44px +} + +.flag.gd { + background-position: -96px -44px +} + +.flag.ge { + background-position: -112px -44px +} + +.flag.gf { + background-position: -128px -44px +} + +.flag.gh { + background-position: -144px -44px +} + +.flag.gi { + background-position: -160px -44px +} + +.flag.gl { + background-position: -176px -44px +} + +.flag.gm { + background-position: -192px -44px +} + +.flag.gn { + background-position: -208px -44px +} + +.flag.gp { + background-position: -224px -44px +} + +.flag.gq { + background-position: -240px -44px +} + +.flag.gr { + background-position: 0 -55px +} + +.flag.gt { + background-position: -16px -55px +} + +.flag.gu { + background-position: -32px -55px +} + +.flag.gw { + background-position: -48px -55px +} + +.flag.gy { + background-position: -64px -55px +} + +.flag.hk { + background-position: -80px -55px +} + +.flag.hn { + background-position: -96px -55px +} + +.flag.hr { + background-position: -112px -55px +} + +.flag.ht { + background-position: -128px -55px +} + +.flag.hu { + background-position: -144px -55px +} + +.flag.id { + background-position: -160px -55px +} + +.flag.ie { + background-position: -176px -55px +} + +.flag.il { + background-position: -192px -55px +} + +.flag.in { + background-position: -208px -55px +} + +.flag.io { + background-position: -224px -55px +} + +.flag.iq { + background-position: -240px -55px +} + +.flag.ir { + background-position: 0 -66px +} + +.flag.is { + background-position: -16px -66px +} + +.flag.it { + background-position: -32px -66px +} + +.flag.je { + background-position: -144px -154px +} + +.flag.jm { + background-position: -48px -66px +} + +.flag.jo { + background-position: -64px -66px +} + +.flag.jp { + background-position: -80px -66px +} + +.flag.ke { + background-position: -96px -66px +} + +.flag.kg { + background-position: -112px -66px +} + +.flag.kh { + background-position: -128px -66px +} + +.flag.ki { + background-position: -144px -66px +} + +.flag.xk { + background-position: -128px -154px +} + +.flag.km { + background-position: -160px -66px +} + +.flag.kn { + background-position: -176px -66px +} + +.flag.kp { + background-position: -192px -66px +} + +.flag.kr { + background-position: -208px -66px +} + +.flag.kw { + background-position: -224px -66px +} + +.flag.ky { + background-position: -240px -66px +} + +.flag.kz { + background-position: 0 -77px +} + +.flag.la { + background-position: -16px -77px +} + +.flag.lb { + background-position: -32px -77px +} + +.flag.lc { + background-position: -48px -77px +} + +.flag.li { + background-position: -64px -77px +} + +.flag.lk { + background-position: -80px -77px +} + +.flag.lr { + background-position: -96px -77px +} + +.flag.ls { + background-position: -112px -77px +} + +.flag.lt { + background-position: -128px -77px +} + +.flag.lu { + background-position: -144px -77px +} + +.flag.lv { + background-position: -160px -77px +} + +.flag.ly { + background-position: -176px -77px +} + +.flag.ma { + background-position: -192px -77px +} + +.flag.mc { + background-position: -208px -77px +} + +.flag.md { + background-position: -224px -77px +} + +.flag.me { + background-position: -112px -154px; + height: 12px +} + +.flag.mg { + background-position: 0 -88px +} + +.flag.mh { + background-position: -16px -88px +} + +.flag.mk { + background-position: -32px -88px +} + +.flag.ml { + background-position: -48px -88px +} + +.flag.mm { + background-position: -64px -88px +} + +.flag.mn { + background-position: -80px -88px +} + +.flag.mo { + background-position: -96px -88px +} + +.flag.mp { + background-position: -112px -88px +} + +.flag.mq { + background-position: -128px -88px +} + +.flag.mr { + background-position: -144px -88px +} + +.flag.ms { + background-position: -160px -88px +} + +.flag.mt { + background-position: -176px -88px +} + +.flag.mu { + background-position: -192px -88px +} + +.flag.mv { + background-position: -208px -88px +} + +.flag.mw { + background-position: -224px -88px +} + +.flag.mx { + background-position: -240px -88px +} + +.flag.my { + background-position: 0 -99px +} + +.flag.mz { + background-position: -16px -99px +} + +.flag.na { + background-position: -32px -99px +} + +.flag.nc { + background-position: -48px -99px +} + +.flag.ne { + background-position: -64px -99px +} + +.flag.nf { + background-position: -80px -99px +} + +.flag.ng { + background-position: -96px -99px +} + +.flag.ni { + background-position: -112px -99px +} + +.flag.nl, .flag.bq { + background-position: -128px -99px +} + +.flag.no { + background-position: -144px -99px +} + +.flag.np { + background-position: -160px -99px +} + +.flag.nr { + background-position: -176px -99px +} + +.flag.nu { + background-position: -192px -99px +} + +.flag.nz { + background-position: -208px -99px +} + +.flag.om { + background-position: -224px -99px +} + +.flag.pa { + background-position: -240px -99px +} + +.flag.pe { + background-position: 0 -110px +} + +.flag.pf { + background-position: -16px -110px +} + +.flag.pg { + background-position: -32px -110px +} + +.flag.ph { + background-position: -48px -110px +} + +.flag.pk { + background-position: -64px -110px +} + +.flag.pl { + background-position: -80px -110px +} + +.flag.pm { + background-position: -96px -110px +} + +.flag.pr { + background-position: -112px -110px +} + +.flag.ps { + background-position: -128px -110px +} + +.flag.pt { + background-position: -144px -110px +} + +.flag.pw { + background-position: -160px -110px +} + +.flag.py { + background-position: -176px -110px +} + +.flag.qa { + background-position: -192px -110px +} + +.flag.re { + background-position: -208px -110px +} + +.flag.ro { + background-position: -224px -110px +} + +.flag.rs { + background-position: -240px -110px +} + +.flag.ru { + background-position: 0 -121px +} + +.flag.rw { + background-position: -16px -121px +} + +.flag.sa { + background-position: -32px -121px +} + +.flag.sb { + background-position: -48px -121px +} + +.flag.sc { + background-position: -64px -121px +} + +.flag.sd { + background-position: -80px -121px +} + +.flag.se { + background-position: -96px -121px +} + +.flag.sg { + background-position: -112px -121px +} + +.flag.sh { + background-position: -128px -121px +} + +.flag.si { + background-position: -144px -121px +} + +.flag.sk { + background-position: -160px -121px +} + +.flag.sl { + background-position: -176px -121px +} + +.flag.sm { + background-position: -192px -121px +} + +.flag.sn { + background-position: -208px -121px +} + +.flag.so { + background-position: -224px -121px +} + +.flag.sr { + background-position: -240px -121px +} + +.flag.ss { + background-position: 0 -132px +} + +.flag.st { + background-position: -16px -132px +} + +.flag.sv { + background-position: -32px -132px +} + +.flag.sx { + background-position: -48px -132px +} + +.flag.sy { + background-position: -64px -132px +} + +.flag.sz { + background-position: -80px -132px +} + +.flag.tc { + background-position: -96px -132px +} + +.flag.td { + background-position: -112px -132px +} + +.flag.tg { + background-position: -128px -132px +} + +.flag.th { + background-position: -144px -132px +} + +.flag.tj { + background-position: -160px -132px +} + +.flag.tk { + background-position: -176px -132px +} + +.flag.tl { + background-position: -192px -132px +} + +.flag.tm { + background-position: -208px -132px +} + +.flag.tn { + background-position: -224px -132px +} + +.flag.to { + background-position: -240px -132px +} + +.flag.tr { + background-position: 0 -143px +} + +.flag.tt { + background-position: -16px -143px +} + +.flag.tv { + background-position: -32px -143px +} + +.flag.tw { + background-position: -48px -143px +} + +.flag.tz { + background-position: -64px -143px +} + +.flag.ua { + background-position: -80px -143px +} + +.flag.ug { + background-position: -96px -143px +} + +.flag.us { + background-position: -112px -143px +} + +.flag.uy { + background-position: -128px -143px +} + +.flag.uz { + background-position: -144px -143px +} + +.flag.va { + background-position: -160px -143px +} + +.flag.vc { + background-position: -176px -143px +} + +.flag.ve { + background-position: -192px -143px +} + +.flag.vg { + background-position: -208px -143px +} + +.flag.vi { + background-position: -224px -143px +} + +.flag.vn { + background-position: -240px -143px +} + +.flag.vu { + background-position: 0 -154px +} + +.flag.wf { + background-position: -16px -154px +} + +.flag.ws { + background-position: -32px -154px +} + +.flag.ye { + background-position: -48px -154px +} + +.flag.za { + background-position: -64px -154px +} + +.flag.zm { + background-position: -80px -154px +} + +.flag.zw { + background-position: -96px -154px +} \ No newline at end of file From 82391e8e155861695ed23761f410602475772296 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sat, 21 Oct 2023 21:27:04 +0400 Subject: [PATCH 07/69] GH-53: Update country codes Signed-off-by: Artyom Vancyan --- scripts/prepare-metadata/__main__.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/scripts/prepare-metadata/__main__.py b/scripts/prepare-metadata/__main__.py index 7768f88..561219f 100644 --- a/scripts/prepare-metadata/__main__.py +++ b/scripts/prepare-metadata/__main__.py @@ -8,19 +8,19 @@ patterns_path = project_root / "src" / "legacy" / "validations.json" country_codes = [ - "ad", "ae", "af", "ag", "ai", "al", "am", "an", "ao", "aq", "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", - "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm", "bn", "bo", "br", "bs", "bt", "bw", "by", "bz", "ca", "cc", - "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz", "de", "dj", - "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "eu", "fi", "fj", "fk", "fm", "fo", "fr", "ga", - "gb", "gd", "ge", "gh", "gi", "gl", "gm", "gn", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hn", "hr", "ht", - "hu", "ic", "id", "ie", "il", "im", "in", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", - "xk", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", - "ma", "mc", "md", "me", "mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", - "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", - "pf", "pg", "ph", "pk", "pl", "pn", "pr", "ps", "pt", "pw", "py", "qa", "ro", "rs", "ru", "rw", "sa", "sb", "sc", - "sd", "se", "sg", "sh", "si", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sy", "sz", "tc", "td", "tf", - "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "us", "uy", "uz", "va", - "vc", "ve", "vg", "vi", "vn", "vu", "ws", "ye", "za", "zm", "zw" + "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "as", "at", "au", "aw", "az", "ba", "bb", "bd", "be", "bf", + "bg", "bh", "bi", "bj", "bm", "bn", "bo", "br", "bs", "bt", "bw", "by", "bz", "ca", "cd", "cf", "cg", "ch", "ci", + "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "ee", + "eg", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "bl", "mf", "ga", "gb", "gd", "ge", "gf", "gh", "gi", + "gl", "gm", "gn", "gp", "gq", "gr", "gt", "gu", "gw", "gy", "hk", "hn", "hr", "ht", "hu", "id", "ie", "il", "in", + "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "xk", "km", "kn", "kp", "kr", "kw", + "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", + "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", + "nf", "ng", "ni", "nl", "bq", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", + "pr", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", + "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tg", "th", "tj", "tk", "tl", + "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", + "vu", "wf", "ws", "ye", "za", "zm", "zw" ] tree = ElementTree.parse(metadata_path) From e4895e40290c030041e1b3a9f0f8bafa2788b229 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sat, 21 Oct 2023 21:28:28 +0400 Subject: [PATCH 08/69] GH-53: Remove ones with non-existing iso codes Signed-off-by: Artyom Vancyan --- src/legacy/phoneMasks.json | 6 +----- src/legacy/timezones.json | 2 +- src/legacy/validations.json | 10 ---------- 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/legacy/phoneMasks.json b/src/legacy/phoneMasks.json index 527de62..7eeb6f2 100644 --- a/src/legacy/phoneMasks.json +++ b/src/legacy/phoneMasks.json @@ -1,5 +1,4 @@ { - "ac": "....", "ad": "(...) ...", "ae": "(..) ... ....", "af": "(..) ... ....", @@ -7,7 +6,6 @@ "ai": "(...) ....", "al": "(...) ... ...", "am": "(..) ... ...", - "an": "(...) ....", "ao": "(...) ... ...", "je": "(..) .... ....", "gb": "(..) .... ....", @@ -18,7 +16,6 @@ "pm": "(...) ... ...", "bq": "(...) .... ....", "xk": "(...) .... ....", - "aq": "(..) ...", "ar": "(...) ... ....", "as": "(...) ....", "at": "(...) ... ....", @@ -221,7 +218,6 @@ "tz": "(..) ... ....", "ua": "(..) ... .. ..", "ug": "(...) ... ...", - "uk": "(..) .... ....", "us": "(...) ... ....", "uy": "(.) ... .. ..", "uz": "(..) ... ....", @@ -238,4 +234,4 @@ "za": "(..) ... ....", "zm": "(..) ... ....", "zw": "(.) ......" -} +} \ No newline at end of file diff --git a/src/legacy/timezones.json b/src/legacy/timezones.json index f3c7ca1..a9d6f72 100644 --- a/src/legacy/timezones.json +++ b/src/legacy/timezones.json @@ -441,4 +441,4 @@ "US/Arizona": "us", "US/Hawaii": "us", "US/Samoa": "ws" -} +} \ No newline at end of file diff --git a/src/legacy/validations.json b/src/legacy/validations.json index 22c49c4..d28eaf6 100644 --- a/src/legacy/validations.json +++ b/src/legacy/validations.json @@ -1,5 +1,4 @@ { - "ac": "^(?:[01589]\\d|[46])\\d{4}$", "ad": "^(?:1|6\\d)\\d{7}|[135-9]\\d{5}$", "ae": "^(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}$", "af": "^[2-7]\\d{8}$", @@ -13,7 +12,6 @@ "at": "^1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}$", "au": "^1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}$", "aw": "^(?:[25-79]\\d\\d|800)\\d{4}$", - "ax": "^2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}$", "az": "^365\\d{6}|(?:[124579]\\d|60|88)\\d{7}$", "ba": "^6\\d{8}|(?:[35689]\\d|49|70)\\d{6}$", "bb": "^(?:246|[58]\\d\\d|900)\\d{7}$", @@ -36,7 +34,6 @@ "by": "^(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}$", "bz": "^(?:0800\\d|[2-8])\\d{6}$", "ca": "^(?:[2-8]\\d|90)\\d{8}|3\\d{6}$", - "cc": "^1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}$", "cd": "^[189]\\d{8}|[1-68]\\d{6}$", "cf": "^(?:[27]\\d{3}|8776)\\d{4}$", "cg": "^222\\d{6}|(?:0\\d|80)\\d{7}$", @@ -51,7 +48,6 @@ "cu": "^[27]\\d{6,7}|[34]\\d{5,7}|63\\d{6}|(?:5|8\\d\\d)\\d{7}$", "cv": "^(?:[2-59]\\d\\d|800)\\d{4}$", "cw": "^(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}$", - "cx": "^1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}$", "cy": "^(?:[279]\\d|[58]0)\\d{6}$", "cz": "^(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}$", "de": "^[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}$", @@ -63,7 +59,6 @@ "ec": "^1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}$", "ee": "^8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}$", "eg": "^[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}$", - "eh": "^[5-8]\\d{8}$", "er": "^[178]\\d{6}$", "es": "^[5-9]\\d{8}$", "et": "^(?:11|[2-579]\\d)\\d{7}$", @@ -78,7 +73,6 @@ "gd": "^(?:473|[58]\\d\\d|900)\\d{7}$", "ge": "^(?:[3-57]\\d\\d|800)\\d{6}$", "gf": "^[56]94\\d{6}|(?:80|9\\d)\\d{7}$", - "gg": "^(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?$", "gh": "^(?:[235]\\d{3}|800)\\d{5}$", "gi": "^(?:[25]\\d|60)\\d{6}$", "gl": "^(?:19|[2-689]\\d|70)\\d{4}$", @@ -99,7 +93,6 @@ "id": "^(?:(?:00[1-9]|8\\d)\\d{4}|[1-36])\\d{6}|00\\d{10}|[1-9]\\d{8,10}|[2-9]\\d{7}$", "ie": "^(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}$", "il": "^1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}$", - "im": "^1624\\d{6}|(?:[3578]\\d|90)\\d{8}$", "in": "^(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}$", "io": "^3\\d{6}$", "iq": "^(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}$", @@ -195,7 +188,6 @@ "sg": "^(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}$", "sh": "^(?:[256]\\d|8)\\d{3}$", "si": "^[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}$", - "sj": "^0\\d{4}|(?:[489]\\d|79)\\d{6}$", "sk": "^[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}$", "sl": "^(?:[237-9]\\d|66)\\d{6}$", "sm": "^(?:0549|[5-7]\\d)\\d{6}$", @@ -208,7 +200,6 @@ "sx": "^7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}$", "sy": "^[1-39]\\d{8}|[1-5]\\d{7}$", "sz": "^0800\\d{4}|(?:[237]\\d|900)\\d{6}$", - "ta": "^8\\d{3}$", "tc": "^(?:[58]\\d\\d|649|900)\\d{7}$", "td": "^(?:22|[69]\\d|77)\\d{6}$", "tg": "^[279]\\d{7}$", @@ -240,7 +231,6 @@ "ws": "^(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}$", "xk": "^[23]\\d{7,8}|(?:4\\d\\d|[89]00)\\d{5}$", "ye": "^(?:1|7\\d)\\d{7}|[1-7]\\d{6}$", - "yt": "^(?:80|9\\d)\\d{7}|(?:26|63)9\\d{6}$", "za": "^[1-79]\\d{8}|8\\d{4,9}$", "zm": "^800\\d{6}|(?:21|63|[79]\\d)\\d{7}$", "zw": "^2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}$" From 933fe52b84e5a6872254efa7cc3e33e0246b9b19 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 22 Oct 2023 20:14:35 +0400 Subject: [PATCH 09/69] GH-53: Remove old references of Less files Signed-off-by: Artyom Vancyan --- package.json | 3 --- scripts/prepare-styles.ts | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/package.json b/package.json index e41fc36..3e75a39 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,6 @@ "default": "./types.d.ts" } }, - "./legacy/style": { - "default": "./legacy/style.less" - }, "./package.json": "./package.json" }, "files": [ diff --git a/scripts/prepare-styles.ts b/scripts/prepare-styles.ts index 2315151..66c33c2 100644 --- a/scripts/prepare-styles.ts +++ b/scripts/prepare-styles.ts @@ -5,7 +5,7 @@ import process from "node:child_process"; const exec = (command: string) => util.promisify(process.exec)(command); (async () => { - await exec("bash -c 'cp src/legacy/*.{le,c}ss legacy'"); + await exec("bash -c 'cp src/legacy/*.css legacy'"); const style = fs.readFileSync("node_modules/react-phone-input-2/lib/style.css"); const regex = /(\.react-tel-input)\s\.flag.+\1\s*\.\w{2}\b\s*\{[^{}]*}/; From fe64081582dab0ea0f016d51e47227d7776efeb2 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 22 Oct 2023 20:16:05 +0400 Subject: [PATCH 10/69] GH-53: Remove countries with overlapping masks Signed-off-by: Artyom Vancyan --- scripts/prepare-metadata/__main__.py | 20 +- src/legacy/style5.css | 468 +++++++++++++-------------- src/legacy/validations.json | 2 - 3 files changed, 244 insertions(+), 246 deletions(-) diff --git a/scripts/prepare-metadata/__main__.py b/scripts/prepare-metadata/__main__.py index 561219f..7b0b28a 100644 --- a/scripts/prepare-metadata/__main__.py +++ b/scripts/prepare-metadata/__main__.py @@ -11,16 +11,16 @@ "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "as", "at", "au", "aw", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo", "br", "bs", "bt", "bw", "by", "bz", "ca", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "ee", - "eg", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "bl", "mf", "ga", "gb", "gd", "ge", "gf", "gh", "gi", - "gl", "gm", "gn", "gp", "gq", "gr", "gt", "gu", "gw", "gy", "hk", "hn", "hr", "ht", "hu", "id", "ie", "il", "in", - "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "xk", "km", "kn", "kp", "kr", "kw", - "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", - "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", - "nf", "ng", "ni", "nl", "bq", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", - "pr", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", - "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tg", "th", "tj", "tk", "tl", - "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", - "vu", "wf", "ws", "ye", "za", "zm", "zw" + "eg", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gh", "gi", "gl", "gm", + "gn", "gp", "gq", "gr", "gt", "gu", "gw", "gy", "hk", "hn", "hr", "ht", "hu", "id", "ie", "il", "in", "io", "iq", + "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "xk", "km", "kn", "kp", "kr", "kw", "ky", "kz", + "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mk", "ml", + "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", + "ni", "nl", "bq", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pr", "ps", + "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sk", "sl", + "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tg", "th", "tj", "tk", "tl", "tm", "tn", + "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", + "ws", "ye", "za", "zm", "zw" ] tree = ElementTree.parse(metadata_path) diff --git a/src/legacy/style5.css b/src/legacy/style5.css index 9617069..d530267 100644 --- a/src/legacy/style5.css +++ b/src/legacy/style5.css @@ -13,934 +13,934 @@ .flag { width: 16px; height: 11px; - background-image: url(data:image/png;base64,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) + background-image: url(data:image/png;base64,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); } .flag.ad { - background-position: -16px 0 + background-position: -16px 0; } .flag.ae { - background-position: -32px 0 + background-position: -32px 0; } .flag.af { - background-position: -48px 0 + background-position: -48px 0; } .flag.ag { - background-position: -64px 0 + background-position: -64px 0; } .flag.ai { - background-position: -80px 0 + background-position: -80px 0; } .flag.al { - background-position: -96px 0 + background-position: -96px 0; } .flag.am { - background-position: -112px 0 + background-position: -112px 0; } .flag.ao { - background-position: -128px 0 + background-position: -128px 0; } .flag.ar { - background-position: -144px 0 + background-position: -144px 0; } .flag.as { - background-position: -160px 0 + background-position: -160px 0; } .flag.at { - background-position: -176px 0 + background-position: -176px 0; } .flag.au { - background-position: -192px 0 + background-position: -192px 0; } .flag.aw { - background-position: -208px 0 + background-position: -208px 0; } .flag.az { - background-position: -224px 0 + background-position: -224px 0; } .flag.ba { - background-position: -240px 0 + background-position: -240px 0; } .flag.bb { - background-position: 0 -11px + background-position: 0 -11px; } .flag.bd { - background-position: -16px -11px + background-position: -16px -11px; } .flag.be { - background-position: -32px -11px + background-position: -32px -11px; } .flag.bf { - background-position: -48px -11px + background-position: -48px -11px; } .flag.bg { - background-position: -64px -11px + background-position: -64px -11px; } .flag.bh { - background-position: -80px -11px + background-position: -80px -11px; } .flag.bi { - background-position: -96px -11px + background-position: -96px -11px; } .flag.bj { - background-position: -112px -11px + background-position: -112px -11px; } .flag.bm { - background-position: -128px -11px + background-position: -128px -11px; } .flag.bn { - background-position: -144px -11px + background-position: -144px -11px; } .flag.bo { - background-position: -160px -11px + background-position: -160px -11px; } .flag.br { - background-position: -176px -11px + background-position: -176px -11px; } .flag.bs { - background-position: -192px -11px + background-position: -192px -11px; } .flag.bt { - background-position: -208px -11px + background-position: -208px -11px; } .flag.bw { - background-position: -224px -11px + background-position: -224px -11px; } .flag.by { - background-position: -240px -11px + background-position: -240px -11px; } .flag.bz { - background-position: 0 -22px + background-position: 0 -22px; } .flag.ca { - background-position: -16px -22px + background-position: -16px -22px; } .flag.cd { - background-position: -32px -22px + background-position: -32px -22px; } .flag.cf { - background-position: -48px -22px + background-position: -48px -22px; } .flag.cg { - background-position: -64px -22px + background-position: -64px -22px; } .flag.ch { - background-position: -80px -22px + background-position: -80px -22px; } .flag.ci { - background-position: -96px -22px + background-position: -96px -22px; } .flag.ck { - background-position: -112px -22px + background-position: -112px -22px; } .flag.cl { - background-position: -128px -22px + background-position: -128px -22px; } .flag.cm { - background-position: -144px -22px + background-position: -144px -22px; } .flag.cn { - background-position: -160px -22px + background-position: -160px -22px; } .flag.co { - background-position: -176px -22px + background-position: -176px -22px; } .flag.cr { - background-position: -192px -22px + background-position: -192px -22px; } .flag.cu { - background-position: -208px -22px + background-position: -208px -22px; } .flag.cv { - background-position: -224px -22px + background-position: -224px -22px; } .flag.cw { - background-position: -240px -22px + background-position: -240px -22px; } .flag.cy { - background-position: 0 -33px + background-position: 0 -33px; } .flag.cz { - background-position: -16px -33px + background-position: -16px -33px; } .flag.de { - background-position: -32px -33px + background-position: -32px -33px; } .flag.dj { - background-position: -48px -33px + background-position: -48px -33px; } .flag.dk { - background-position: -64px -33px + background-position: -64px -33px; } .flag.dm { - background-position: -80px -33px + background-position: -80px -33px; } .flag.do { - background-position: -96px -33px + background-position: -96px -33px; } .flag.dz { - background-position: -112px -33px + background-position: -112px -33px; } .flag.ec { - background-position: -128px -33px + background-position: -128px -33px; } .flag.ee { - background-position: -144px -33px + background-position: -144px -33px; } .flag.eg { - background-position: -160px -33px + background-position: -160px -33px; } .flag.er { - background-position: -176px -33px + background-position: -176px -33px; } .flag.es { - background-position: -192px -33px + background-position: -192px -33px; } .flag.et { - background-position: -208px -33px + background-position: -208px -33px; } .flag.fi { - background-position: -224px -33px + background-position: -224px -33px; } .flag.fj { - background-position: -240px -33px + background-position: -240px -33px; } .flag.fk { - background-position: 0 -44px + background-position: 0 -44px; } .flag.fm { - background-position: -16px -44px + background-position: -16px -44px; } .flag.fo { - background-position: -32px -44px + background-position: -32px -44px; } -.flag.fr, .flag.bl, .flag.mf { - background-position: -48px -44px +.flag.fr { + background-position: -48px -44px; } .flag.ga { - background-position: -64px -44px + background-position: -64px -44px; } .flag.gb { - background-position: -80px -44px + background-position: -80px -44px; } .flag.gd { - background-position: -96px -44px + background-position: -96px -44px; } .flag.ge { - background-position: -112px -44px + background-position: -112px -44px; } .flag.gf { - background-position: -128px -44px + background-position: -128px -44px; } .flag.gh { - background-position: -144px -44px + background-position: -144px -44px; } .flag.gi { - background-position: -160px -44px + background-position: -160px -44px; } .flag.gl { - background-position: -176px -44px + background-position: -176px -44px; } .flag.gm { - background-position: -192px -44px + background-position: -192px -44px; } .flag.gn { - background-position: -208px -44px + background-position: -208px -44px; } .flag.gp { - background-position: -224px -44px + background-position: -224px -44px; } .flag.gq { - background-position: -240px -44px + background-position: -240px -44px; } .flag.gr { - background-position: 0 -55px + background-position: 0 -55px; } .flag.gt { - background-position: -16px -55px + background-position: -16px -55px; } .flag.gu { - background-position: -32px -55px + background-position: -32px -55px; } .flag.gw { - background-position: -48px -55px + background-position: -48px -55px; } .flag.gy { - background-position: -64px -55px + background-position: -64px -55px; } .flag.hk { - background-position: -80px -55px + background-position: -80px -55px; } .flag.hn { - background-position: -96px -55px + background-position: -96px -55px; } .flag.hr { - background-position: -112px -55px + background-position: -112px -55px; } .flag.ht { - background-position: -128px -55px + background-position: -128px -55px; } .flag.hu { - background-position: -144px -55px + background-position: -144px -55px; } .flag.id { - background-position: -160px -55px + background-position: -160px -55px; } .flag.ie { - background-position: -176px -55px + background-position: -176px -55px; } .flag.il { - background-position: -192px -55px + background-position: -192px -55px; } .flag.in { - background-position: -208px -55px + background-position: -208px -55px; } .flag.io { - background-position: -224px -55px + background-position: -224px -55px; } .flag.iq { - background-position: -240px -55px + background-position: -240px -55px; } .flag.ir { - background-position: 0 -66px + background-position: 0 -66px; } .flag.is { - background-position: -16px -66px + background-position: -16px -66px; } .flag.it { - background-position: -32px -66px + background-position: -32px -66px; } .flag.je { - background-position: -144px -154px + background-position: -144px -154px; } .flag.jm { - background-position: -48px -66px + background-position: -48px -66px; } .flag.jo { - background-position: -64px -66px + background-position: -64px -66px; } .flag.jp { - background-position: -80px -66px + background-position: -80px -66px; } .flag.ke { - background-position: -96px -66px + background-position: -96px -66px; } .flag.kg { - background-position: -112px -66px + background-position: -112px -66px; } .flag.kh { - background-position: -128px -66px + background-position: -128px -66px; } .flag.ki { - background-position: -144px -66px + background-position: -144px -66px; } .flag.xk { - background-position: -128px -154px + background-position: -128px -154px; } .flag.km { - background-position: -160px -66px + background-position: -160px -66px; } .flag.kn { - background-position: -176px -66px + background-position: -176px -66px; } .flag.kp { - background-position: -192px -66px + background-position: -192px -66px; } .flag.kr { - background-position: -208px -66px + background-position: -208px -66px; } .flag.kw { - background-position: -224px -66px + background-position: -224px -66px; } .flag.ky { - background-position: -240px -66px + background-position: -240px -66px; } .flag.kz { - background-position: 0 -77px + background-position: 0 -77px; } .flag.la { - background-position: -16px -77px + background-position: -16px -77px; } .flag.lb { - background-position: -32px -77px + background-position: -32px -77px; } .flag.lc { - background-position: -48px -77px + background-position: -48px -77px; } .flag.li { - background-position: -64px -77px + background-position: -64px -77px; } .flag.lk { - background-position: -80px -77px + background-position: -80px -77px; } .flag.lr { - background-position: -96px -77px + background-position: -96px -77px; } .flag.ls { - background-position: -112px -77px + background-position: -112px -77px; } .flag.lt { - background-position: -128px -77px + background-position: -128px -77px; } .flag.lu { - background-position: -144px -77px + background-position: -144px -77px; } .flag.lv { - background-position: -160px -77px + background-position: -160px -77px; } .flag.ly { - background-position: -176px -77px + background-position: -176px -77px; } .flag.ma { - background-position: -192px -77px + background-position: -192px -77px; } .flag.mc { - background-position: -208px -77px + background-position: -208px -77px; } .flag.md { - background-position: -224px -77px + background-position: -224px -77px; } .flag.me { background-position: -112px -154px; - height: 12px + height: 12px; } .flag.mg { - background-position: 0 -88px + background-position: 0 -88px; } .flag.mh { - background-position: -16px -88px + background-position: -16px -88px; } .flag.mk { - background-position: -32px -88px + background-position: -32px -88px; } .flag.ml { - background-position: -48px -88px + background-position: -48px -88px; } .flag.mm { - background-position: -64px -88px + background-position: -64px -88px; } .flag.mn { - background-position: -80px -88px + background-position: -80px -88px; } .flag.mo { - background-position: -96px -88px + background-position: -96px -88px; } .flag.mp { - background-position: -112px -88px + background-position: -112px -88px; } .flag.mq { - background-position: -128px -88px + background-position: -128px -88px; } .flag.mr { - background-position: -144px -88px + background-position: -144px -88px; } .flag.ms { - background-position: -160px -88px + background-position: -160px -88px; } .flag.mt { - background-position: -176px -88px + background-position: -176px -88px; } .flag.mu { - background-position: -192px -88px + background-position: -192px -88px; } .flag.mv { - background-position: -208px -88px + background-position: -208px -88px; } .flag.mw { - background-position: -224px -88px + background-position: -224px -88px; } .flag.mx { - background-position: -240px -88px + background-position: -240px -88px; } .flag.my { - background-position: 0 -99px + background-position: 0 -99px; } .flag.mz { - background-position: -16px -99px + background-position: -16px -99px; } .flag.na { - background-position: -32px -99px + background-position: -32px -99px; } .flag.nc { - background-position: -48px -99px + background-position: -48px -99px; } .flag.ne { - background-position: -64px -99px + background-position: -64px -99px; } .flag.nf { - background-position: -80px -99px + background-position: -80px -99px; } .flag.ng { - background-position: -96px -99px + background-position: -96px -99px; } .flag.ni { - background-position: -112px -99px + background-position: -112px -99px; } .flag.nl, .flag.bq { - background-position: -128px -99px + background-position: -128px -99px; } .flag.no { - background-position: -144px -99px + background-position: -144px -99px; } .flag.np { - background-position: -160px -99px + background-position: -160px -99px; } .flag.nr { - background-position: -176px -99px + background-position: -176px -99px; } .flag.nu { - background-position: -192px -99px + background-position: -192px -99px; } .flag.nz { - background-position: -208px -99px + background-position: -208px -99px; } .flag.om { - background-position: -224px -99px + background-position: -224px -99px; } .flag.pa { - background-position: -240px -99px + background-position: -240px -99px; } .flag.pe { - background-position: 0 -110px + background-position: 0 -110px; } .flag.pf { - background-position: -16px -110px + background-position: -16px -110px; } .flag.pg { - background-position: -32px -110px + background-position: -32px -110px; } .flag.ph { - background-position: -48px -110px + background-position: -48px -110px; } .flag.pk { - background-position: -64px -110px + background-position: -64px -110px; } .flag.pl { - background-position: -80px -110px + background-position: -80px -110px; } .flag.pm { - background-position: -96px -110px + background-position: -96px -110px; } .flag.pr { - background-position: -112px -110px + background-position: -112px -110px; } .flag.ps { - background-position: -128px -110px + background-position: -128px -110px; } .flag.pt { - background-position: -144px -110px + background-position: -144px -110px; } .flag.pw { - background-position: -160px -110px + background-position: -160px -110px; } .flag.py { - background-position: -176px -110px + background-position: -176px -110px; } .flag.qa { - background-position: -192px -110px + background-position: -192px -110px; } .flag.re { - background-position: -208px -110px + background-position: -208px -110px; } .flag.ro { - background-position: -224px -110px + background-position: -224px -110px; } .flag.rs { - background-position: -240px -110px + background-position: -240px -110px; } .flag.ru { - background-position: 0 -121px + background-position: 0 -121px; } .flag.rw { - background-position: -16px -121px + background-position: -16px -121px; } .flag.sa { - background-position: -32px -121px + background-position: -32px -121px; } .flag.sb { - background-position: -48px -121px + background-position: -48px -121px; } .flag.sc { - background-position: -64px -121px + background-position: -64px -121px; } .flag.sd { - background-position: -80px -121px + background-position: -80px -121px; } .flag.se { - background-position: -96px -121px + background-position: -96px -121px; } .flag.sg { - background-position: -112px -121px + background-position: -112px -121px; } .flag.sh { - background-position: -128px -121px + background-position: -128px -121px; } .flag.si { - background-position: -144px -121px + background-position: -144px -121px; } .flag.sk { - background-position: -160px -121px + background-position: -160px -121px; } .flag.sl { - background-position: -176px -121px + background-position: -176px -121px; } .flag.sm { - background-position: -192px -121px + background-position: -192px -121px; } .flag.sn { - background-position: -208px -121px + background-position: -208px -121px; } .flag.so { - background-position: -224px -121px + background-position: -224px -121px; } .flag.sr { - background-position: -240px -121px + background-position: -240px -121px; } .flag.ss { - background-position: 0 -132px + background-position: 0 -132px; } .flag.st { - background-position: -16px -132px + background-position: -16px -132px; } .flag.sv { - background-position: -32px -132px + background-position: -32px -132px; } .flag.sx { - background-position: -48px -132px + background-position: -48px -132px; } .flag.sy { - background-position: -64px -132px + background-position: -64px -132px; } .flag.sz { - background-position: -80px -132px + background-position: -80px -132px; } .flag.tc { - background-position: -96px -132px + background-position: -96px -132px; } .flag.td { - background-position: -112px -132px + background-position: -112px -132px; } .flag.tg { - background-position: -128px -132px + background-position: -128px -132px; } .flag.th { - background-position: -144px -132px + background-position: -144px -132px; } .flag.tj { - background-position: -160px -132px + background-position: -160px -132px; } .flag.tk { - background-position: -176px -132px + background-position: -176px -132px; } .flag.tl { - background-position: -192px -132px + background-position: -192px -132px; } .flag.tm { - background-position: -208px -132px + background-position: -208px -132px; } .flag.tn { - background-position: -224px -132px + background-position: -224px -132px; } .flag.to { - background-position: -240px -132px + background-position: -240px -132px; } .flag.tr { - background-position: 0 -143px + background-position: 0 -143px; } .flag.tt { - background-position: -16px -143px + background-position: -16px -143px; } .flag.tv { - background-position: -32px -143px + background-position: -32px -143px; } .flag.tw { - background-position: -48px -143px + background-position: -48px -143px; } .flag.tz { - background-position: -64px -143px + background-position: -64px -143px; } .flag.ua { - background-position: -80px -143px + background-position: -80px -143px; } .flag.ug { - background-position: -96px -143px + background-position: -96px -143px; } .flag.us { - background-position: -112px -143px + background-position: -112px -143px; } .flag.uy { - background-position: -128px -143px + background-position: -128px -143px; } .flag.uz { - background-position: -144px -143px + background-position: -144px -143px; } .flag.va { - background-position: -160px -143px + background-position: -160px -143px; } .flag.vc { - background-position: -176px -143px + background-position: -176px -143px; } .flag.ve { - background-position: -192px -143px + background-position: -192px -143px; } .flag.vg { - background-position: -208px -143px + background-position: -208px -143px; } .flag.vi { - background-position: -224px -143px + background-position: -224px -143px; } .flag.vn { - background-position: -240px -143px + background-position: -240px -143px; } .flag.vu { - background-position: 0 -154px + background-position: 0 -154px; } .flag.wf { - background-position: -16px -154px + background-position: -16px -154px; } .flag.ws { - background-position: -32px -154px + background-position: -32px -154px; } .flag.ye { - background-position: -48px -154px + background-position: -48px -154px; } .flag.za { - background-position: -64px -154px + background-position: -64px -154px; } .flag.zm { - background-position: -80px -154px + background-position: -80px -154px; } .flag.zw { - background-position: -96px -154px + background-position: -96px -154px; } \ No newline at end of file diff --git a/src/legacy/validations.json b/src/legacy/validations.json index d28eaf6..be7dec7 100644 --- a/src/legacy/validations.json +++ b/src/legacy/validations.json @@ -22,7 +22,6 @@ "bh": "^[136-9]\\d{7}$", "bi": "^(?:[267]\\d|31)\\d{6}$", "bj": "^[24-689]\\d{7}$", - "bl": "^590\\d{6}|(?:69|80|9\\d)\\d{7}$", "bm": "^(?:441|[58]\\d\\d|900)\\d{7}$", "bn": "^[2-578]\\d{6}$", "bo": "^(?:[2-467]\\d\\d|8001)\\d{5}$", @@ -129,7 +128,6 @@ "mc": "^(?:[3489]|6\\d)\\d{7}$", "md": "^(?:[235-7]\\d|[89]0)\\d{6}$", "me": "^(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}$", - "mf": "^590\\d{6}|(?:69|80|9\\d)\\d{7}$", "mg": "^[23]\\d{8}$", "mh": "^329\\d{4}|(?:[256]\\d|45)\\d{5}$", "mk": "^[2-578]\\d{7}$", From 852c25a5b6c13a6502fe6537a71820863158c68e Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 22 Oct 2023 20:17:03 +0400 Subject: [PATCH 11/69] GH-53: Merge phone masks into countries JSON Signed-off-by: Artyom Vancyan --- src/legacy/countries.json | 3002 +++++++++++++++++++++++++----------- src/legacy/phoneMasks.json | 237 --- 2 files changed, 2119 insertions(+), 1120 deletions(-) delete mode 100644 src/legacy/phoneMasks.json diff --git a/src/legacy/countries.json b/src/legacy/countries.json index efb44bf..3898da9 100644 --- a/src/legacy/countries.json +++ b/src/legacy/countries.json @@ -1,2742 +1,3978 @@ [ - [ - "ad", - "376", - "Andorra" - ], - [ - "ae", - "971", - "United Arab Emirates" - ], [ "af", + "Afghanistan", "93", - "Afghanistan" - ], - [ - "ag", - "1268", - "Antigua and Barbuda" + "93", + "+93 (..) ... ...." ], [ "al", + "Albania", + "355", "355", - "Albania" + "+355 (...) ... ..." ], [ - "am", - "374", - "Armenia" + "dz", + "Algeria", + "213", + "213", + "+213 (..) ... ...." + ], + [ + "as", + "American Samoa", + "1684", + "1684", + "+1 (684) ...." + ], + [ + "ad", + "Andorra", + "376", + "376", + "+376 (...) ..." ], [ "ao", + "Angola", "244", - "Angola" + "244", + "+244 (...) ... ..." ], [ - "ar", - "54", - "Argentina" + "ai", + "Anguilla", + "1264", + "1264", + "+1 (264) ...." + ], + [ + "ag", + "Antigua and Barbuda", + "1268", + "1268", + "+1 (268) ...." ], [ "ar", + "Argentina", + "54", "5411", - "Argentina" + "+54 (11.) ... ...." ], [ "ar", + "Argentina", + "54", "54221", - "Argentina" + "+54 (221) ... ...." ], [ "ar", + "Argentina", + "54", "54223", - "Argentina" + "+54 (223) ... ...." ], [ "ar", + "Argentina", + "54", "54261", - "Argentina" + "+54 (261) ... ...." ], [ "ar", + "Argentina", + "54", "54264", - "Argentina" + "+54 (264) ... ...." ], [ "ar", + "Argentina", + "54", "542652", - "Argentina" + "+54 (265) 2.. ...." ], [ "ar", + "Argentina", + "54", "54280", - "Argentina" + "+54 (280) ... ...." ], [ "ar", + "Argentina", + "54", "542905", - "Argentina" + "+54 (290) 5.. ...." ], [ "ar", + "Argentina", + "54", "54291", - "Argentina" + "+54 (291) ... ...." ], [ "ar", + "Argentina", + "54", "542920", - "Argentina" + "+54 (292) 0.. ...." ], [ "ar", + "Argentina", + "54", "542966", - "Argentina" + "+54 (296) 6.. ...." ], [ "ar", + "Argentina", + "54", "54299", - "Argentina" + "+54 (299) ... ...." ], [ "ar", + "Argentina", + "54", "54341", - "Argentina" + "+54 (341) ... ...." ], [ "ar", + "Argentina", + "54", "54342", - "Argentina" + "+54 (342) ... ...." ], [ "ar", + "Argentina", + "54", "54343", - "Argentina" + "+54 (343) ... ...." ], [ "ar", + "Argentina", + "54", "54351", - "Argentina" + "+54 (351) ... ...." ], [ "ar", + "Argentina", + "54", "54376", - "Argentina" + "+54 (376) ... ...." ], [ "ar", + "Argentina", + "54", "54379", - "Argentina" + "+54 (379) ... ...." ], [ "ar", + "Argentina", + "54", "54381", - "Argentina" + "+54 (381) ... ...." ], [ "ar", + "Argentina", + "54", "543833", - "Argentina" + "+54 (383) 3.. ...." ], [ "ar", + "Argentina", + "54", "54385", - "Argentina" + "+54 (385) ... ...." ], [ "ar", + "Argentina", + "54", "54387", - "Argentina" + "+54 (387) ... ...." ], [ "ar", + "Argentina", + "54", "54388", - "Argentina" + "+54 (388) ... ...." ], [ - "at", - "43", - "Austria" + "am", + "Armenia", + "374", + "374", + "+374 (..) ... ..." ], [ - "au", - "61", - "Australia" + "aw", + "Aruba", + "297", + "297", + "+297 (...) ...." ], [ "au", + "Australia", + "61", "612", - "Australia" + "+61 (2) .... ...." ], [ "au", + "Australia", + "61", "613", - "Australia" + "+61 (3) .... ...." ], [ "au", + "Australia", + "61", "614", - "Australia" + "+61 (4) .... ...." ], [ "au", + "Australia", + "61", "617", - "Australia" + "+61 (7) .... ...." ], [ "au", + "Australia", + "61", "618", - "Australia" + "+61 (8) .... ...." ], [ "au", + "Australia", + "61", "6102", - "Australia" + "+61 (0) 2... ...." ], [ "au", + "Australia", + "61", "6103", - "Australia" + "+61 (0) 3... ...." ], [ "au", + "Australia", + "61", "6104", - "Australia" + "+61 (0) 4... ...." ], [ "au", + "Australia", + "61", "6107", - "Australia" + "+61 (0) 7... ...." ], [ "au", + "Australia", + "61", "6108", - "Australia" + "+61 (0) 8... ...." ], [ - "aw", - "297", - "Aruba" + "at", + "Austria", + "43", + "43", + "+43 (...) ... ...." ], [ "az", + "Azerbaijan", "994", - "Azerbaijan" + "994", + "+994 (..) ... .. .." ], [ - "ba", - "387", - "Bosnia and Herzegovina" + "bs", + "Bahamas", + "1242", + "1242", + "+1 (242) ...." ], [ - "bb", - "1246", - "Barbados" + "bh", + "Bahrain", + "973", + "973", + "+973 (....) ...." ], [ "bd", + "Bangladesh", "880", - "Bangladesh" - ], - [ - "be", - "32", - "Belgium" + "880", + "+880 (..) ... ..." ], [ - "bf", - "226", - "Burkina Faso" + "bb", + "Barbados", + "1246", + "1246", + "+1 (246) ...." ], [ - "bg", - "359", - "Bulgaria" + "by", + "Belarus", + "375", + "375", + "+375 (..) ... .. .." ], [ - "bh", - "973", - "Bahrain" + "be", + "Belgium", + "32", + "32", + "+32 (...) ... ..." ], [ - "bi", - "257", - "Burundi" + "bz", + "Belize", + "501", + "501", + "+501 (...) ...." ], [ "bj", + "Benin", "229", - "Benin" + "229", + "+229 (..) .. ...." ], [ - "bn", - "673", - "Brunei" + "bm", + "Bermuda", + "1441", + "1441", + "+1 (441) ...." + ], + [ + "bt", + "Bhutan", + "975", + "975", + "+975 (.) ... ..." ], [ "bo", + "Bolivia", "591", - "Bolivia" + "591", + "+591 (.) ... ...." + ], + [ + "ba", + "Bosnia and Herzegovina", + "387", + "387", + "+387 (..) ....." + ], + [ + "bw", + "Botswana", + "267", + "267", + "+267 (..) ... ..." ], [ "br", + "Brazil", + "55", "55", - "Brazil" + "+55 (..) .... ...." ], [ - "bs", - "1242", - "Bahamas" + "io", + "British Indian Ocean Territory", + "246", + "246", + "+246 (...) ...." ], [ - "bt", - "975", - "Bhutan" + "vg", + "British Virgin Islands", + "1284", + "1284", + "+1 (284) ...." ], [ - "bw", - "267", - "Botswana" + "bn", + "Brunei", + "673", + "673", + "+673 (...) ...." ], [ - "by", - "375", - "Belarus" + "bg", + "Bulgaria", + "359", + "359", + "+359 (...) ... ..." ], [ - "bz", - "501", - "Belize" + "bf", + "Burkina Faso", + "226", + "226", + "+226 (..) .. ...." + ], + [ + "bi", + "Burundi", + "257", + "257", + "+257 (..) .. ...." + ], + [ + "kh", + "Cambodia", + "855", + "855", + "+855 (..) ... ..." + ], + [ + "cm", + "Cameroon", + "237", + "237", + "+237 (....) ...." ], [ "ca", + "Canada", + "1204", "1204", - "Canada" + "+1 (204) ... ...." ], [ "ca", + "Canada", "1226", - "Canada" + "1226", + "+1 (226) ... ...." ], [ "ca", + "Canada", + "1236", "1236", - "Canada" + "+1 (236) ... ...." ], [ "ca", + "Canada", "1249", - "Canada" + "1249", + "+1 (249) ... ...." ], [ "ca", + "Canada", + "1250", "1250", - "Canada" + "+1 (250) ... ...." ], [ "ca", + "Canada", "1289", - "Canada" + "1289", + "+1 (289) ... ...." ], [ "ca", + "Canada", + "1306", "1306", - "Canada" + "+1 (306) ... ...." ], [ "ca", + "Canada", "1343", - "Canada" + "1343", + "+1 (343) ... ...." ], [ "ca", + "Canada", + "1365", "1365", - "Canada" + "+1 (365) ... ...." ], [ "ca", + "Canada", "1387", - "Canada" + "1387", + "+1 (387) ... ...." ], [ "ca", + "Canada", + "1403", "1403", - "Canada" + "+1 (403) ... ...." ], [ "ca", + "Canada", "1416", - "Canada" + "1416", + "+1 (416) ... ...." ], [ "ca", + "Canada", + "1418", "1418", - "Canada" + "+1 (418) ... ...." ], [ "ca", + "Canada", "1431", - "Canada" + "1431", + "+1 (431) ... ...." ], [ "ca", + "Canada", + "1437", "1437", - "Canada" + "+1 (437) ... ...." ], [ "ca", + "Canada", "1438", - "Canada" + "1438", + "+1 (438) ... ...." ], [ "ca", + "Canada", + "1450", "1450", - "Canada" + "+1 (450) ... ...." ], [ "ca", + "Canada", "1506", - "Canada" + "1506", + "+1 (506) ... ...." ], [ "ca", + "Canada", + "1514", "1514", - "Canada" + "+1 (514) ... ...." ], [ "ca", + "Canada", "1519", - "Canada" + "1519", + "+1 (519) ... ...." ], [ "ca", + "Canada", + "1548", "1548", - "Canada" + "+1 (548) ... ...." ], [ "ca", + "Canada", "1579", - "Canada" + "1579", + "+1 (579) ... ...." ], [ "ca", + "Canada", + "1581", "1581", - "Canada" + "+1 (581) ... ...." ], [ "ca", + "Canada", "1587", - "Canada" + "1587", + "+1 (587) ... ...." ], [ "ca", + "Canada", + "1604", "1604", - "Canada" + "+1 (604) ... ...." ], [ "ca", + "Canada", "1613", - "Canada" + "1613", + "+1 (613) ... ...." ], [ "ca", + "Canada", + "1639", "1639", - "Canada" + "+1 (639) ... ...." ], [ "ca", + "Canada", "1647", - "Canada" + "1647", + "+1 (647) ... ...." ], [ "ca", + "Canada", + "1672", "1672", - "Canada" + "+1 (672) ... ...." ], [ "ca", + "Canada", "1705", - "Canada" + "1705", + "+1 (705) ... ...." ], [ "ca", + "Canada", + "1709", "1709", - "Canada" + "+1 (709) ... ...." ], [ "ca", + "Canada", "1742", - "Canada" + "1742", + "+1 (742) ... ...." ], [ "ca", + "Canada", + "1778", "1778", - "Canada" + "+1 (778) ... ...." ], [ "ca", + "Canada", "1780", - "Canada" + "1780", + "+1 (780) ... ...." ], [ "ca", + "Canada", + "1782", "1782", - "Canada" + "+1 (782) ... ...." ], [ "ca", + "Canada", "1807", - "Canada" + "1807", + "+1 (807) ... ...." ], [ "ca", + "Canada", + "1819", "1819", - "Canada" + "+1 (819) ... ...." ], [ "ca", + "Canada", "1825", - "Canada" + "1825", + "+1 (825) ... ...." ], [ "ca", + "Canada", + "1867", "1867", - "Canada" + "+1 (867) ... ...." ], [ "ca", + "Canada", "1873", - "Canada" + "1873", + "+1 (873) ... ...." ], [ "ca", + "Canada", + "1902", "1902", - "Canada" + "+1 (902) ... ...." ], [ "ca", + "Canada", "1905", - "Canada" + "1905", + "+1 (905) ... ...." ], [ - "cd", - "243", - "Congo" + "cv", + "Cape Verde", + "238", + "238", + "+238 (...) .. .." ], [ - "cf", - "236", - "Central African Republic" + "bq", + "Caribbean Netherlands", + "599", + "599", + "+599 (...) .... ...." ], [ - "cg", - "242", - "Congo" + "ky", + "Cayman Islands", + "1345", + "1345", + "+1 (345) ...." ], [ - "ch", - "41", - "Switzerland" + "cf", + "Central African Republic", + "236", + "236", + "+236 (..) .. ...." ], [ - "ci", - "225", - "C\u00f4te d\u2019Ivoire" + "td", + "Chad", + "235", + "235", + "+235 (..) .. .. .." ], [ "cl", + "Chile", "56", - "Chile" - ], - [ - "cm", - "237", - "Cameroon" + "56", + "+56 (.) .... ...." ], [ "cn", + "China", + "86", "86", - "China" + "+86 (..) ..... ....." ], [ "co", + "Colombia", "57", - "Colombia" + "57", + "+57 (...) ... ...." ], [ - "cr", - "506", - "Costa Rica" + "km", + "Comoros", + "269", + "269", + "+269 (..) ....." ], [ - "cu", - "53", - "Cuba" + "cd", + "Congo", + "243", + "243", + "+243 (...) ... ..." ], [ - "cv", - "238", - "Cape Verde" + "cg", + "Congo", + "242", + "242", + "+242 (..) ... ...." + ], + [ + "ck", + "Cook Islands", + "682", + "682", + "+682 (..) ..." + ], + [ + "cr", + "Costa Rica", + "506", + "506", + "+506 (....) ...." + ], + [ + "hr", + "Croatia", + "385", + "385", + "+385 (..) ... ..." + ], + [ + "cu", + "Cuba", + "53", + "53", + "+53 (.) ... ...." ], [ "cw", + "Cura\u00e7ao", + "599", "599", - "Cura\u00e7ao" + "+599 (...) ...." ], [ "cy", + "Cyprus", "357", - "Cyprus" + "357", + "+357 (..) ... ..." ], [ "cz", + "Czech Republic", "420", - "Czech Republic" - ], - [ - "de", - "49", - "Germany" + "420", + "+420 (...) ... ..." ], [ - "dj", - "253", - "Djibouti" + "ci", + "C\u00f4te d\u2019Ivoire", + "225", + "225", + "+225 (..) ... ..." ], [ "dk", + "Denmark", + "45", "45", - "Denmark" + "+45 (..) .. .. .." + ], + [ + "dj", + "Djibouti", + "253", + "253", + "+253 (..) .. .. .." ], [ "dm", + "Dominica", + "1767", "1767", - "Dominica" + "+1 (767) ...." ], [ "do", + "Dominican Republic", "1809", - "Dominican Republic" + "1809", + "+1 (809) ...." ], [ "do", + "Dominican Republic", + "1829", "1829", - "Dominican Republic" + "+1 (829) ...." ], [ "do", + "Dominican Republic", "1849", - "Dominican Republic" - ], - [ - "dz", - "213", - "Algeria" + "1849", + "+1 (849) ...." ], [ "ec", + "Ecuador", "593", - "Ecuador" - ], - [ - "ee", - "372", - "Estonia" + "593", + "+593 (..) ... ...." ], [ "eg", + "Egypt", "20", - "Egypt" + "20", + "+20 (...) ... ...." + ], + [ + "sv", + "El Salvador", + "503", + "503", + "+503 (..) .. ...." + ], + [ + "gq", + "Equatorial Guinea", + "240", + "240", + "+240 (..) ... ...." ], [ "er", + "Eritrea", + "291", "291", - "Eritrea" + "+291 (.) ... ..." ], [ - "es", - "34", - "Spain" + "ee", + "Estonia", + "372", + "372", + "+372 (....) ...." ], [ "et", + "Ethiopia", + "251", "251", - "Ethiopia" + "+251 (..) ... ...." ], [ - "fi", - "358", - "Finland" + "fk", + "Falkland Islands", + "500", + "500", + "+500 ....." + ], + [ + "fo", + "Faroe Islands", + "298", + "298", + "+298 (...) ..." ], [ "fj", + "Fiji", "679", - "Fiji" + "679", + "+679 (..) ....." ], [ - "fm", - "691", - "Micronesia" + "fi", + "Finland", + "358", + "358", + "+358 (...) ... .. .." ], [ "fr", + "France", "33", - "France" + "33", + "+33 (...) ... ...." ], [ - "ga", - "241", - "Gabon" + "gf", + "French Guiana", + "594", + "594", + "+594 (.....) ...." ], [ - "gb", - "44", - "United Kingdom" + "pf", + "French Polynesia", + "689", + "689", + "+689 (..) .. .." ], [ - "gd", - "1473", - "Grenada" + "ga", + "Gabon", + "241", + "241", + "+241 (.) .. .. .." + ], + [ + "gm", + "Gambia", + "220", + "220", + "+220 (...) .. .." ], [ "ge", + "Georgia", + "995", "995", - "Georgia" + "+995 (...) ... ..." ], [ - "gf", - "594", - "French Guiana" + "de", + "Germany", + "49", + "49", + "+49 (....) ... ...." ], [ "gh", + "Ghana", + "233", "233", - "Ghana" + "+233 (...) ... ..." ], [ - "gm", - "220", - "Gambia" + "gi", + "Gibraltar", + "350", + "350", + "+350 (...) ....." ], [ - "gn", - "224", - "Guinea" + "gr", + "Greece", + "30", + "30", + "+30 (...) ... ...." ], [ - "gp", - "590", - "Guadeloupe" + "gl", + "Greenland", + "299", + "299", + "+299 (..) .. .." ], [ - "gq", - "240", - "Equatorial Guinea" + "gd", + "Grenada", + "1473", + "1473", + "+1 (473) ...." ], [ - "gr", - "30", - "Greece" + "gp", + "Guadeloupe", + "590", + "590", + "+590 (...) ... ...." + ], + [ + "gu", + "Guam", + "1671", + "1671", + "+1 (671) ...." ], [ "gt", + "Guatemala", "502", - "Guatemala" + "502", + "+502 (.) ... ...." ], [ - "gu", - "1671", - "Guam" + "gn", + "Guinea", + "224", + "224", + "+224 (..) ... ..." ], [ "gw", + "Guinea-Bissau", "245", - "Guinea-Bissau" + "245", + "+245 (.) ......" ], [ "gy", + "Guyana", + "592", "592", - "Guyana" + "+592 (...) ...." ], [ - "hk", - "852", - "Hong Kong" + "ht", + "Haiti", + "509", + "509", + "+509 (..) .. ...." ], [ "hn", + "Honduras", "504", - "Honduras" - ], - [ - "hr", - "385", - "Croatia" + "504", + "+504 (....) ...." ], [ - "ht", - "509", - "Haiti" + "hk", + "Hong Kong", + "852", + "852", + "+852 (....) ...." ], [ "hu", + "Hungary", "36", - "Hungary" - ], - [ - "id", - "62", - "Indonesia" - ], - [ - "ie", - "353", - "Ireland" + "36", + "+36 (...) ... ..." ], [ - "il", - "972", - "Israel" + "is", + "Iceland", + "354", + "354", + "+354 (...) ...." ], [ "in", + "India", "91", - "India" - ], - [ - "io", - "246", - "British Indian Ocean Territory" + "91", + "+91 (....) ... ..." ], [ - "iq", - "964", - "Iraq" + "id", + "Indonesia", + "62", + "62", + "+62 (..) ... ...." ], [ "ir", + "Iran", "98", - "Iran" - ], - [ - "is", - "354", - "Iceland" - ], - [ - "jm", - "1876", - "Jamaica" - ], - [ - "jo", - "962", - "Jordan" - ], - [ - "jp", - "81", - "Japan" - ], - [ - "ke", - "254", - "Kenya" + "98", + "+98 (...) ... ...." ], [ - "kg", - "996", - "Kyrgyzstan" + "iq", + "Iraq", + "964", + "964", + "+964 (...) ... ...." ], [ - "kh", - "855", - "Cambodia" + "ie", + "Ireland", + "353", + "353", + "+353 (...) ... ..." ], [ - "ki", - "686", - "Kiribati" + "il", + "Israel", + "972", + "972", + "+972 (..) ... ...." ], [ - "km", - "269", - "Comoros" + "it", + "Italy", + "39", + "39", + "+39 (...) .... ..." ], [ - "kn", - "1869", - "Saint Kitts and Nevis" + "jm", + "Jamaica", + "1876", + "1876", + "+1 (876) ...." ], [ - "kp", - "850", - "North Korea" + "jp", + "Japan", + "81", + "81", + "+81 (..) .... ...." ], [ - "kr", - "82", - "South Korea" + "je", + "Jersey", + "44", + "44", + "+44 (..) .... ...." ], [ - "kw", - "965", - "Kuwait" + "jo", + "Jordan", + "962", + "962", + "+962 (.) .... ...." ], [ "kz", + "Kazakhstan", "7310", - "Kazakhstan" + "7310", + "+7 (310) ... .. .." ], [ "kz", + "Kazakhstan", + "7311", "7311", - "Kazakhstan" + "+7 (311) ... .. .." ], [ "kz", + "Kazakhstan", "7312", - "Kazakhstan" + "7312", + "+7 (312) ... .. .." ], [ "kz", + "Kazakhstan", + "7313", "7313", - "Kazakhstan" + "+7 (313) ... .. .." ], [ "kz", + "Kazakhstan", "7315", - "Kazakhstan" + "7315", + "+7 (315) ... .. .." ], [ "kz", + "Kazakhstan", + "7318", "7318", - "Kazakhstan" + "+7 (318) ... .. .." ], [ "kz", + "Kazakhstan", "7321", - "Kazakhstan" + "7321", + "+7 (321) ... .. .." ], [ "kz", + "Kazakhstan", + "7324", "7324", - "Kazakhstan" + "+7 (324) ... .. .." ], [ "kz", + "Kazakhstan", "7325", - "Kazakhstan" + "7325", + "+7 (325) ... .. .." ], [ "kz", + "Kazakhstan", + "7326", "7326", - "Kazakhstan" + "+7 (326) ... .. .." ], [ "kz", + "Kazakhstan", "7327", - "Kazakhstan" + "7327", + "+7 (327) ... .. .." ], [ "kz", + "Kazakhstan", + "7336", "7336", - "Kazakhstan" + "+7 (336) ... .. .." ], [ "kz", + "Kazakhstan", "77172", - "Kazakhstan" + "77172", + "+7 (717) 2.. .. .." ], [ "kz", + "Kazakhstan", "773622", - "Kazakhstan" - ], - [ - "la", - "856", - "Laos" + "773622", + "+7 (736) 22. .. .." ], [ - "lb", - "961", - "Lebanon" + "ke", + "Kenya", + "254", + "254", + "+254 (...) ......" ], [ - "lc", - "1758", - "Saint Lucia" + "ki", + "Kiribati", + "686", + "686", + "+686 (..) ..." ], [ - "li", - "423", - "Liechtenstein" + "xk", + "Kosovo", + "383", + "383", + "+383 (...) .... ...." ], [ - "lk", - "94", - "Sri Lanka" + "kw", + "Kuwait", + "965", + "965", + "+965 (....) ...." ], [ - "lr", - "231", - "Liberia" + "kg", + "Kyrgyzstan", + "996", + "996", + "+996 (...) ... ..." ], [ - "ls", - "266", - "Lesotho" + "la", + "Laos", + "856", + "856", + "+856 (..) ... ..." ], [ - "lt", - "370", - "Lithuania" + "lv", + "Latvia", + "371", + "371", + "+371 (..) ... ..." ], [ - "lu", - "352", - "Luxembourg" + "lb", + "Lebanon", + "961", + "961", + "+961 (..) ... ..." ], [ - "lv", - "371", - "Latvia" + "ls", + "Lesotho", + "266", + "266", + "+266 (.) ... ...." + ], + [ + "lr", + "Liberia", + "231", + "231", + "+231 (..) ... ..." ], [ "ly", + "Libya", "218", - "Libya" + "218", + "+218 (..) ... ...." ], [ - "ma", - "212", - "Morocco" + "li", + "Liechtenstein", + "423", + "423", + "+423 (...) ... ...." ], [ - "mc", - "377", - "Monaco" + "lt", + "Lithuania", + "370", + "370", + "+370 (...) .. ..." ], [ - "md", - "373", - "Moldova" + "lu", + "Luxembourg", + "352", + "352", + "+352 (...) ... ..." ], [ - "me", - "382", - "Montenegro" + "mo", + "Macau", + "853", + "853", + "+853 (....) ...." + ], + [ + "mk", + "Macedonia", + "389", + "389", + "+389 (..) ... ..." ], [ "mg", + "Madagascar", "261", - "Madagascar" + "261", + "+261 (..) .. ....." ], [ - "mh", - "692", - "Marshall Islands" + "mw", + "Malawi", + "265", + "265", + "+265 (.) .... ...." ], [ - "mk", - "389", - "Macedonia" + "my", + "Malaysia", + "60", + "60", + "+60 (...) ... ...." ], [ - "ml", - "223", - "Mali" + "mv", + "Maldives", + "960", + "960", + "+960 (...) ...." ], [ - "mm", - "95", - "Myanmar" + "ml", + "Mali", + "223", + "223", + "+223 (..) .. ...." ], [ - "mn", - "976", - "Mongolia" + "mt", + "Malta", + "356", + "356", + "+356 (....) ...." ], [ - "mo", - "853", - "Macau" + "mh", + "Marshall Islands", + "692", + "692", + "+692 (...) ...." ], [ "mq", + "Martinique", + "596", "596", - "Martinique" + "+596 (...) .. .. .." ], [ "mr", + "Mauritania", "222", - "Mauritania" - ], - [ - "mt", - "356", - "Malta" + "222", + "+222 (..) .. ...." ], [ "mu", + "Mauritius", "230", - "Mauritius" - ], - [ - "mv", - "960", - "Maldives" - ], - [ - "mw", - "265", - "Malawi" + "230", + "+230 (...) ...." ], [ "mx", + "Mexico", "52", - "Mexico" - ], - [ - "mx", "5255", - "Mexico" + "+52 (55.) ... ...." ], [ "mx", + "Mexico", + "52", "5281", - "Mexico" + "+52 (81.) ... ...." ], [ "mx", + "Mexico", + "52", "5233", - "Mexico" + "+52 (33.) ... ...." ], [ "mx", + "Mexico", + "52", "52656", - "Mexico" + "+52 (656) ... ...." ], [ "mx", + "Mexico", + "52", "52664", - "Mexico" + "+52 (664) ... ...." ], [ "mx", + "Mexico", + "52", "52998", - "Mexico" + "+52 (998) ... ...." ], [ "mx", + "Mexico", + "52", "52774", - "Mexico" + "+52 (774) ... ...." ], [ "mx", + "Mexico", + "52", "52229", - "Mexico" + "+52 (229) ... ...." ], [ - "my", - "60", - "Malaysia" + "fm", + "Micronesia", + "691", + "691", + "+691 (...) ...." + ], + [ + "md", + "Moldova", + "373", + "373", + "+373 (....) ...." + ], + [ + "mc", + "Monaco", + "377", + "377", + "+377 (...) ... ..." + ], + [ + "mn", + "Mongolia", + "976", + "976", + "+976 (..) .. ...." + ], + [ + "me", + "Montenegro", + "382", + "382", + "+382 (..) ... ..." + ], + [ + "ms", + "Montserrat", + "1664", + "1664", + "+1 (664) ...." + ], + [ + "ma", + "Morocco", + "212", + "212", + "+212 (..) .... ..." ], [ "mz", + "Mozambique", "258", - "Mozambique" + "258", + "+258 (..) ... ...." + ], + [ + "mm", + "Myanmar", + "95", + "95", + "+95 (..) ... ..." ], [ "na", + "Namibia", + "264", "264", - "Namibia" + "+264 (..) ... ...." + ], + [ + "nr", + "Nauru", + "674", + "674", + "+674 (...) ...." + ], + [ + "np", + "Nepal", + "977", + "977", + "+977 (..) ... ..." + ], + [ + "nl", + "Netherlands", + "31", + "31", + "+31 (..) ... ...." ], [ "nc", + "New Caledonia", "687", - "New Caledonia" + "687", + "+687 (..) ...." + ], + [ + "nz", + "New Zealand", + "64", + "64", + "+64 (...) ... ...." + ], + [ + "ni", + "Nicaragua", + "505", + "505", + "+505 (....) ...." ], [ "ne", + "Niger", "227", - "Niger" + "227", + "+227 (..) .. ...." ], [ "ng", + "Nigeria", + "234", "234", - "Nigeria" + "+234 (...) ... ...." ], [ - "ni", - "505", - "Nicaragua" + "nu", + "Niue", + "683", + "683", + "+683 ...." ], [ - "nl", - "31", - "Netherlands" + "nf", + "Norfolk Island", + "672", + "672", + "+672 (..) ..." + ], + [ + "kp", + "North Korea", + "850", + "850", + "+850 (...) .... ........" + ], + [ + "mp", + "Northern Mariana Islands", + "1670", + "1670", + "+1 (670) ...." ], [ "no", + "Norway", + "47", "47", - "Norway" + "+47 (...) .. ..." ], [ - "np", - "977", - "Nepal" + "om", + "Oman", + "968", + "968", + "+968 (..) ... ..." ], [ - "nr", - "674", - "Nauru" + "pk", + "Pakistan", + "92", + "92", + "+92 (...) ... ...." ], [ - "nz", - "64", - "New Zealand" + "pw", + "Palau", + "680", + "680", + "+680 (...) ...." ], [ - "om", - "968", - "Oman" + "ps", + "Palestine", + "970", + "970", + "+970 (..) ... ...." ], [ "pa", + "Panama", "507", - "Panama" + "507", + "+507 (...) ...." ], [ - "pe", - "51", - "Peru" + "pg", + "Papua New Guinea", + "675", + "675", + "+675 (...) .. ..." ], [ - "pf", - "689", - "French Polynesia" + "py", + "Paraguay", + "595", + "595", + "+595 (...) ... ..." ], [ - "pg", - "675", - "Papua New Guinea" + "pe", + "Peru", + "51", + "51", + "+51 (...) ... ..." ], [ "ph", + "Philippines", "63", - "Philippines" - ], - [ - "pk", - "92", - "Pakistan" + "63", + "+63 (...) ... ...." ], [ "pl", + "Poland", "48", - "Poland" + "48", + "+48 (...) ... ..." + ], + [ + "pt", + "Portugal", + "351", + "351", + "+351 (..) ... ...." ], [ "pr", + "Puerto Rico", "1787", - "Puerto Rico" + "1787", + "+1 (787) ... ...." ], [ "pr", + "Puerto Rico", "1939", - "Puerto Rico" - ], - [ - "ps", - "970", - "Palestine" + "1939", + "+1 (939) ... ...." ], [ - "pt", - "351", - "Portugal" + "qa", + "Qatar", + "974", + "974", + "+974 (....) ...." ], [ - "pw", - "680", - "Palau" + "ro", + "Romania", + "40", + "40", + "+40 (..) ... ...." ], [ - "py", - "595", - "Paraguay" + "ru", + "Russia", + "7", + "7", + "+7 (...) ... .. .." ], [ - "qa", - "974", - "Qatar" + "rw", + "Rwanda", + "250", + "250", + "+250 (...) ... ..." ], [ "re", + "R\u00e9union", + "262", "262", - "R\u00e9union" + "+262 (.....) ...." ], [ - "ro", - "40", - "Romania" + "kn", + "Saint Kitts and Nevis", + "1869", + "1869", + "+1 (869) ...." ], [ - "rs", - "381", - "Serbia" + "lc", + "Saint Lucia", + "1758", + "1758", + "+1 (758) ...." ], [ - "ru", - "7", - "Russia" + "vc", + "Saint Vincent and the Grenadines", + "1784", + "1784", + "+1 (784) ...." ], [ - "rw", - "250", - "Rwanda" + "ws", + "Samoa", + "685", + "685", + "+685 (..) ...." + ], + [ + "sm", + "San Marino", + "378", + "378", + "+378 (....) ......" ], [ "sa", + "Saudi Arabia", + "966", "966", - "Saudi Arabia" + "+966 (.) .... ...." ], [ - "sb", - "677", - "Solomon Islands" + "sn", + "Senegal", + "221", + "221", + "+221 (..) ... ...." ], [ - "sc", - "248", - "Seychelles" + "rs", + "Serbia", + "381", + "381", + "+381 (..) ... ...." ], [ - "sd", - "249", - "Sudan" + "sc", + "Seychelles", + "248", + "248", + "+248 (.) ... ..." ], [ - "se", - "46", - "Sweden" + "sl", + "Sierra Leone", + "232", + "232", + "+232 (..) ......" ], [ "sg", + "Singapore", + "65", "65", - "Singapore" + "+65 (....) ...." ], [ - "si", - "386", - "Slovenia" + "sx", + "Sint Maarten", + "1721", + "1721", + "+1 (721) ...." ], [ "sk", + "Slovakia", "421", - "Slovakia" - ], - [ - "sl", - "232", - "Sierra Leone" + "421", + "+421 (...) ... ..." ], [ - "sm", - "378", - "San Marino" + "si", + "Slovenia", + "386", + "386", + "+386 (..) ... ..." ], [ - "sn", - "221", - "Senegal" + "sb", + "Solomon Islands", + "677", + "677", + "+677 (...) ...." ], [ "so", + "Somalia", + "252", "252", - "Somalia" + "+252 (..) ... ..." ], [ - "sr", - "597", - "Suriname" + "za", + "South Africa", + "27", + "27", + "+27 (..) ... ...." + ], + [ + "kr", + "South Korea", + "82", + "82", + "+82 (..) .... ....." ], [ "ss", + "South Sudan", "211", - "South Sudan" + "211", + "+211 (..) ... ...." ], [ - "st", - "239", - "S\u00e3o Tom\u00e9 and Pr\u00edncipe" + "es", + "Spain", + "34", + "34", + "+34 (...) ... ..." ], [ - "sv", - "503", - "El Salvador" + "lk", + "Sri Lanka", + "94", + "94", + "+94 (..) ... ...." ], [ - "sy", - "963", - "Syria" + "sh", + "St. Helena", + "290", + "290", + "+290 ...." + ], + [ + "pm", + "St. Pierre & Miquelon", + "508", + "508", + "+508 (...) ... ..." + ], + [ + "sd", + "Sudan", + "249", + "249", + "+249 (..) ... ...." + ], + [ + "sr", + "Suriname", + "597", + "597", + "+597 (...) ...." ], [ "sz", + "Swaziland", "268", - "Swaziland" + "268", + "+268 (..) .. ...." ], [ - "td", - "235", - "Chad" + "se", + "Sweden", + "46", + "46", + "+46 (..) ... ...." ], [ - "tg", - "228", - "Togo" + "ch", + "Switzerland", + "41", + "41", + "+41 (..) ... ...." ], [ - "th", - "66", - "Thailand" + "sy", + "Syria", + "963", + "963", + "+963 (..) .... ..." + ], + [ + "st", + "S\u00e3o Tom\u00e9 and Pr\u00edncipe", + "239", + "239", + "+239 (..) ....." + ], + [ + "tw", + "Taiwan", + "886", + "886", + "+886 (.) .... ...." ], [ "tj", + "Tajikistan", "992", - "Tajikistan" + "992", + "+992 (..) ... ...." + ], + [ + "tz", + "Tanzania", + "255", + "255", + "+255 (..) ... ...." + ], + [ + "th", + "Thailand", + "66", + "66", + "+66 (..) ... ...." ], [ "tl", + "Timor-Leste", + "670", "670", - "Timor-Leste" + "+670 (...) ....." ], [ - "tm", - "993", - "Turkmenistan" + "tg", + "Togo", + "228", + "228", + "+228 (..) ... ..." ], [ - "tn", - "216", - "Tunisia" + "tk", + "Tokelau", + "690", + "690", + "+690 ...." ], [ "to", + "Tonga", "676", - "Tonga" + "676", + "+676 ....." + ], + [ + "tt", + "Trinidad and Tobago", + "1868", + "1868", + "+1 (868) ...." + ], + [ + "tn", + "Tunisia", + "216", + "216", + "+216 (..) ... ..." ], [ "tr", + "Turkey", "90", - "Turkey" + "90", + "+90 (...) ... ...." ], [ - "tt", - "1868", - "Trinidad and Tobago" + "tm", + "Turkmenistan", + "993", + "993", + "+993 (.) ... ...." + ], + [ + "tc", + "Turks & Caicos Islands", + "1649", + "1649", + "+1 (649) ...." ], [ "tv", + "Tuvalu", "688", - "Tuvalu" + "688", + "+688 ......" ], [ - "tw", - "886", - "Taiwan" + "vi", + "U.S. Virgin Islands", + "1340", + "1340", + "+1 (340) ...." ], [ - "tz", - "255", - "Tanzania" + "ug", + "Uganda", + "256", + "256", + "+256 (...) ... ..." ], [ "ua", + "Ukraine", + "380", "380", - "Ukraine" + "+380 (..) ... .. .." ], [ - "ug", - "256", - "Uganda" + "ae", + "United Arab Emirates", + "971", + "971", + "+971 (..) ... ...." ], [ - "us", - "1", - "United States" + "gb", + "United Kingdom", + "44", + "44", + "+44 (..) .... ...." ], [ "us", + "United States", + "1", "1907", - "United States" + "+1 (907) ... ...." ], [ "us", + "United States", + "1", "1205", - "United States" + "+1 (205) ... ...." ], [ "us", + "United States", + "1", "1251", - "United States" + "+1 (251) ... ...." ], [ "us", + "United States", + "1", "1256", - "United States" + "+1 (256) ... ...." ], [ "us", + "United States", + "1", "1334", - "United States" + "+1 (334) ... ...." ], [ "us", + "United States", + "1", "1479", - "United States" + "+1 (479) ... ...." ], [ "us", + "United States", + "1", "1501", - "United States" + "+1 (501) ... ...." ], [ "us", + "United States", + "1", "1870", - "United States" + "+1 (870) ... ...." ], [ "us", + "United States", + "1", "1480", - "United States" + "+1 (480) ... ...." ], [ "us", + "United States", + "1", "1520", - "United States" + "+1 (520) ... ...." ], [ "us", + "United States", + "1", "1602", - "United States" + "+1 (602) ... ...." ], [ "us", + "United States", + "1", "1623", - "United States" + "+1 (623) ... ...." ], [ "us", + "United States", + "1", "1928", - "United States" + "+1 (928) ... ...." ], [ "us", + "United States", + "1", "1209", - "United States" + "+1 (209) ... ...." ], [ "us", + "United States", + "1", "1213", - "United States" + "+1 (213) ... ...." ], [ "us", + "United States", + "1", "1310", - "United States" + "+1 (310) ... ...." ], [ "us", + "United States", + "1", "1323", - "United States" + "+1 (323) ... ...." ], [ "us", + "United States", + "1", "1408", - "United States" + "+1 (408) ... ...." ], [ "us", + "United States", + "1", "1415", - "United States" + "+1 (415) ... ...." ], [ "us", + "United States", + "1", "1510", - "United States" + "+1 (510) ... ...." ], [ "us", + "United States", + "1", "1530", - "United States" + "+1 (530) ... ...." ], [ "us", + "United States", + "1", "1559", - "United States" + "+1 (559) ... ...." ], [ "us", + "United States", + "1", "1562", - "United States" + "+1 (562) ... ...." ], [ "us", + "United States", + "1", "1619", - "United States" + "+1 (619) ... ...." ], [ "us", + "United States", + "1", "1626", - "United States" + "+1 (626) ... ...." ], [ "us", + "United States", + "1", "1650", - "United States" + "+1 (650) ... ...." ], [ "us", + "United States", + "1", "1661", - "United States" + "+1 (661) ... ...." ], [ "us", + "United States", + "1", "1707", - "United States" + "+1 (707) ... ...." ], [ "us", + "United States", + "1", "1714", - "United States" + "+1 (714) ... ...." ], [ "us", + "United States", + "1", "1760", - "United States" + "+1 (760) ... ...." ], [ "us", + "United States", + "1", "1805", - "United States" + "+1 (805) ... ...." ], [ "us", + "United States", + "1", "1818", - "United States" + "+1 (818) ... ...." ], [ "us", + "United States", + "1", "1831", - "United States" + "+1 (831) ... ...." ], [ "us", + "United States", + "1", "1858", - "United States" + "+1 (858) ... ...." ], [ "us", + "United States", + "1", "1909", - "United States" + "+1 (909) ... ...." ], [ "us", + "United States", + "1", "1916", - "United States" + "+1 (916) ... ...." ], [ "us", + "United States", + "1", "1925", - "United States" + "+1 (925) ... ...." ], [ "us", + "United States", + "1", "1949", - "United States" + "+1 (949) ... ...." ], [ "us", + "United States", + "1", "1951", - "United States" + "+1 (951) ... ...." ], [ "us", + "United States", + "1", "1303", - "United States" + "+1 (303) ... ...." ], [ "us", + "United States", + "1", "1719", - "United States" + "+1 (719) ... ...." ], [ "us", + "United States", + "1", "1970", - "United States" + "+1 (970) ... ...." ], [ "us", + "United States", + "1", "1203", - "United States" + "+1 (203) ... ...." ], [ "us", + "United States", + "1", "1860", - "United States" + "+1 (860) ... ...." ], [ "us", + "United States", + "1", "1202", - "United States" + "+1 (202) ... ...." ], [ "us", + "United States", + "1", "1302", - "United States" + "+1 (302) ... ...." ], [ "us", + "United States", + "1", "1239", - "United States" + "+1 (239) ... ...." ], [ "us", + "United States", + "1", "1305", - "United States" + "+1 (305) ... ...." ], [ "us", + "United States", + "1", "1321", - "United States" + "+1 (321) ... ...." ], [ "us", + "United States", + "1", "1352", - "United States" + "+1 (352) ... ...." ], [ "us", + "United States", + "1", "1386", - "United States" + "+1 (386) ... ...." ], [ "us", + "United States", + "1", "1407", - "United States" + "+1 (407) ... ...." ], [ "us", + "United States", + "1", "1561", - "United States" + "+1 (561) ... ...." ], [ "us", + "United States", + "1", "1727", - "United States" + "+1 (727) ... ...." ], [ "us", + "United States", + "1", "1772", - "United States" + "+1 (772) ... ...." ], [ "us", + "United States", + "1", "1813", - "United States" + "+1 (813) ... ...." ], [ "us", + "United States", + "1", "1850", - "United States" + "+1 (850) ... ...." ], [ "us", + "United States", + "1", "1863", - "United States" + "+1 (863) ... ...." ], [ "us", + "United States", + "1", "1904", - "United States" + "+1 (904) ... ...." ], [ "us", + "United States", + "1", "1941", - "United States" + "+1 (941) ... ...." ], [ "us", + "United States", + "1", "1954", - "United States" + "+1 (954) ... ...." ], [ "us", + "United States", + "1", "1229", - "United States" + "+1 (229) ... ...." ], [ "us", + "United States", + "1", "1404", - "United States" + "+1 (404) ... ...." ], [ "us", + "United States", + "1", "1478", - "United States" + "+1 (478) ... ...." ], [ "us", + "United States", + "1", "1706", - "United States" + "+1 (706) ... ...." ], [ "us", + "United States", + "1", "1770", - "United States" + "+1 (770) ... ...." ], [ "us", + "United States", + "1", "1912", - "United States" + "+1 (912) ... ...." ], [ "us", + "United States", + "1", "1808", - "United States" + "+1 (808) ... ...." ], [ "us", + "United States", + "1", "1319", - "United States" + "+1 (319) ... ...." ], [ "us", + "United States", + "1", "1515", - "United States" + "+1 (515) ... ...." ], [ "us", + "United States", + "1", "1563", - "United States" + "+1 (563) ... ...." ], [ "us", + "United States", + "1", "1641", - "United States" + "+1 (641) ... ...." ], [ "us", + "United States", + "1", "1712", - "United States" + "+1 (712) ... ...." ], [ "us", + "United States", + "1", "1208", - "United States" + "+1 (208) ... ...." ], [ "us", + "United States", + "1", "1217", - "United States" + "+1 (217) ... ...." ], [ "us", + "United States", + "1", "1309", - "United States" + "+1 (309) ... ...." ], [ "us", + "United States", + "1", "1312", - "United States" + "+1 (312) ... ...." ], [ "us", + "United States", + "1", "1618", - "United States" + "+1 (618) ... ...." ], [ "us", + "United States", + "1", "1630", - "United States" + "+1 (630) ... ...." ], [ "us", + "United States", + "1", "1708", - "United States" + "+1 (708) ... ...." ], [ "us", + "United States", + "1", "1773", - "United States" + "+1 (773) ... ...." ], [ "us", + "United States", + "1", "1815", - "United States" + "+1 (815) ... ...." ], [ "us", + "United States", + "1", "1847", - "United States" + "+1 (847) ... ...." ], [ "us", + "United States", + "1", "1219", - "United States" + "+1 (219) ... ...." ], [ "us", + "United States", + "1", "1260", - "United States" + "+1 (260) ... ...." ], [ "us", + "United States", + "1", "1317", - "United States" + "+1 (317) ... ...." ], [ "us", + "United States", + "1", "1574", - "United States" + "+1 (574) ... ...." ], [ "us", + "United States", + "1", "1765", - "United States" + "+1 (765) ... ...." ], [ "us", + "United States", + "1", "1812", - "United States" + "+1 (812) ... ...." ], [ "us", + "United States", + "1", "1316", - "United States" + "+1 (316) ... ...." ], [ "us", + "United States", + "1", "1620", - "United States" + "+1 (620) ... ...." ], [ "us", + "United States", + "1", "1785", - "United States" + "+1 (785) ... ...." ], [ "us", + "United States", + "1", "1913", - "United States" + "+1 (913) ... ...." ], [ "us", + "United States", + "1", "1270", - "United States" + "+1 (270) ... ...." ], [ "us", + "United States", + "1", "1502", - "United States" + "+1 (502) ... ...." ], [ "us", + "United States", + "1", "1606", - "United States" + "+1 (606) ... ...." ], [ "us", + "United States", + "1", "1859", - "United States" + "+1 (859) ... ...." ], [ "us", + "United States", + "1", "1225", - "United States" + "+1 (225) ... ...." ], [ "us", + "United States", + "1", "1318", - "United States" + "+1 (318) ... ...." ], [ "us", + "United States", + "1", "1337", - "United States" + "+1 (337) ... ...." ], [ "us", + "United States", + "1", "1504", - "United States" + "+1 (504) ... ...." ], [ "us", + "United States", + "1", "1985", - "United States" + "+1 (985) ... ...." ], [ "us", + "United States", + "1", "1413", - "United States" + "+1 (413) ... ...." ], [ "us", + "United States", + "1", "1508", - "United States" + "+1 (508) ... ...." ], [ "us", + "United States", + "1", "1617", - "United States" + "+1 (617) ... ...." ], [ "us", + "United States", + "1", "1781", - "United States" + "+1 (781) ... ...." ], [ "us", + "United States", + "1", "1978", - "United States" + "+1 (978) ... ...." ], [ "us", + "United States", + "1", "1301", - "United States" + "+1 (301) ... ...." ], [ "us", + "United States", + "1", "1410", - "United States" + "+1 (410) ... ...." ], [ "us", + "United States", + "1", "1207", - "United States" + "+1 (207) ... ...." ], [ "us", + "United States", + "1", "1231", - "United States" + "+1 (231) ... ...." ], [ "us", + "United States", + "1", "1248", - "United States" + "+1 (248) ... ...." ], [ "us", + "United States", + "1", "1269", - "United States" + "+1 (269) ... ...." ], [ "us", + "United States", + "1", "1313", - "United States" + "+1 (313) ... ...." ], [ "us", + "United States", + "1", "1517", - "United States" + "+1 (517) ... ...." ], [ "us", + "United States", + "1", "1586", - "United States" + "+1 (586) ... ...." ], [ "us", + "United States", + "1", "1616", - "United States" + "+1 (616) ... ...." ], [ "us", + "United States", + "1", "1734", - "United States" + "+1 (734) ... ...." ], [ "us", + "United States", + "1", "1810", - "United States" + "+1 (810) ... ...." ], [ "us", + "United States", + "1", "1906", - "United States" + "+1 (906) ... ...." ], [ "us", + "United States", + "1", "1989", - "United States" + "+1 (989) ... ...." ], [ "us", + "United States", + "1", "1218", - "United States" + "+1 (218) ... ...." ], [ "us", + "United States", + "1", "1320", - "United States" + "+1 (320) ... ...." ], [ "us", + "United States", + "1", "1507", - "United States" + "+1 (507) ... ...." ], [ "us", + "United States", + "1", "1612", - "United States" + "+1 (612) ... ...." ], [ "us", + "United States", + "1", "1651", - "United States" + "+1 (651) ... ...." ], [ "us", + "United States", + "1", "1763", - "United States" + "+1 (763) ... ...." ], [ "us", + "United States", + "1", "1952", - "United States" + "+1 (952) ... ...." ], [ "us", + "United States", + "1", "1314", - "United States" + "+1 (314) ... ...." ], [ "us", + "United States", + "1", "1417", - "United States" + "+1 (417) ... ...." ], [ "us", + "United States", + "1", "1573", - "United States" + "+1 (573) ... ...." ], [ "us", + "United States", + "1", "1636", - "United States" + "+1 (636) ... ...." ], [ "us", + "United States", + "1", "1660", - "United States" + "+1 (660) ... ...." ], [ "us", + "United States", + "1", "1816", - "United States" + "+1 (816) ... ...." ], [ "us", + "United States", + "1", "1228", - "United States" + "+1 (228) ... ...." ], [ "us", + "United States", + "1", "1601", - "United States" + "+1 (601) ... ...." ], [ "us", + "United States", + "1", "1662", - "United States" + "+1 (662) ... ...." ], [ "us", + "United States", + "1", "1406", - "United States" + "+1 (406) ... ...." ], [ "us", + "United States", + "1", "1252", - "United States" + "+1 (252) ... ...." ], [ "us", + "United States", + "1", "1336", - "United States" + "+1 (336) ... ...." ], [ "us", + "United States", + "1", "1704", - "United States" + "+1 (704) ... ...." ], [ "us", + "United States", + "1", "1828", - "United States" + "+1 (828) ... ...." ], [ "us", + "United States", + "1", "1910", - "United States" + "+1 (910) ... ...." ], [ "us", + "United States", + "1", "1919", - "United States" + "+1 (919) ... ...." ], [ "us", + "United States", + "1", "1701", - "United States" + "+1 (701) ... ...." ], [ "us", + "United States", + "1", "1308", - "United States" + "+1 (308) ... ...." ], [ "us", + "United States", + "1", "1402", - "United States" + "+1 (402) ... ...." ], [ "us", + "United States", + "1", "1603", - "United States" + "+1 (603) ... ...." ], [ "us", + "United States", + "1", "1201", - "United States" + "+1 (201) ... ...." ], [ "us", + "United States", + "1", "1609", - "United States" + "+1 (609) ... ...." ], [ "us", + "United States", + "1", "1732", - "United States" + "+1 (732) ... ...." ], [ "us", + "United States", + "1", "1856", - "United States" + "+1 (856) ... ...." ], [ "us", + "United States", + "1", "1908", - "United States" + "+1 (908) ... ...." ], [ "us", + "United States", + "1", "1973", - "United States" + "+1 (973) ... ...." ], [ "us", + "United States", + "1", "1505", - "United States" + "+1 (505) ... ...." ], [ "us", + "United States", + "1", "1575", - "United States" + "+1 (575) ... ...." ], [ "us", + "United States", + "1", "1702", - "United States" + "+1 (702) ... ...." ], [ "us", + "United States", + "1", "1775", - "United States" + "+1 (775) ... ...." ], [ "us", + "United States", + "1", "1212", - "United States" + "+1 (212) ... ...." ], [ "us", + "United States", + "1", "1315", - "United States" + "+1 (315) ... ...." ], [ "us", + "United States", + "1", "1516", - "United States" + "+1 (516) ... ...." ], [ "us", + "United States", + "1", "1518", - "United States" + "+1 (518) ... ...." ], [ "us", + "United States", + "1", "1585", - "United States" + "+1 (585) ... ...." ], [ "us", + "United States", + "1", "1607", - "United States" + "+1 (607) ... ...." ], [ "us", + "United States", + "1", "1631", - "United States" + "+1 (631) ... ...." ], [ "us", + "United States", + "1", "1716", - "United States" + "+1 (716) ... ...." ], [ "us", + "United States", + "1", "1718", - "United States" + "+1 (718) ... ...." ], [ "us", + "United States", + "1", "1845", - "United States" + "+1 (845) ... ...." ], [ "us", + "United States", + "1", "1914", - "United States" + "+1 (914) ... ...." ], [ "us", + "United States", + "1", "1216", - "United States" + "+1 (216) ... ...." ], [ "us", + "United States", + "1", "1330", - "United States" + "+1 (330) ... ...." ], [ "us", + "United States", + "1", "1419", - "United States" + "+1 (419) ... ...." ], [ "us", + "United States", + "1", "1440", - "United States" + "+1 (440) ... ...." ], [ "us", + "United States", + "1", "1513", - "United States" + "+1 (513) ... ...." ], [ "us", + "United States", + "1", "1614", - "United States" + "+1 (614) ... ...." ], [ "us", + "United States", + "1", "1740", - "United States" + "+1 (740) ... ...." ], [ "us", + "United States", + "1", "1937", - "United States" + "+1 (937) ... ...." ], [ "us", + "United States", + "1", "1405", - "United States" + "+1 (405) ... ...." ], [ "us", + "United States", + "1", "1580", - "United States" + "+1 (580) ... ...." ], [ "us", + "United States", + "1", "1918", - "United States" + "+1 (918) ... ...." ], [ "us", + "United States", + "1", "1503", - "United States" + "+1 (503) ... ...." ], [ "us", + "United States", + "1", "1541", - "United States" + "+1 (541) ... ...." ], [ "us", + "United States", + "1", "1215", - "United States" + "+1 (215) ... ...." ], [ "us", + "United States", + "1", "1412", - "United States" + "+1 (412) ... ...." ], [ "us", + "United States", + "1", "1570", - "United States" + "+1 (570) ... ...." ], [ "us", + "United States", + "1", "1610", - "United States" + "+1 (610) ... ...." ], [ "us", + "United States", + "1", "1717", - "United States" + "+1 (717) ... ...." ], [ "us", + "United States", + "1", "1724", - "United States" + "+1 (724) ... ...." ], [ "us", + "United States", + "1", "1814", - "United States" + "+1 (814) ... ...." ], [ "us", + "United States", + "1", "1401", - "United States" + "+1 (401) ... ...." ], [ "us", + "United States", + "1", "1803", - "United States" + "+1 (803) ... ...." ], [ "us", + "United States", + "1", "1843", - "United States" + "+1 (843) ... ...." ], [ "us", + "United States", + "1", "1864", - "United States" + "+1 (864) ... ...." ], [ "us", + "United States", + "1", "1605", - "United States" + "+1 (605) ... ...." ], [ "us", + "United States", + "1", "1423", - "United States" + "+1 (423) ... ...." ], [ "us", + "United States", + "1", "1615", - "United States" + "+1 (615) ... ...." ], [ "us", + "United States", + "1", "1731", - "United States" + "+1 (731) ... ...." ], [ "us", + "United States", + "1", "1865", - "United States" + "+1 (865) ... ...." ], [ "us", + "United States", + "1", "1901", - "United States" + "+1 (901) ... ...." ], [ "us", + "United States", + "1", "1931", - "United States" + "+1 (931) ... ...." ], [ "us", + "United States", + "1", "1210", - "United States" + "+1 (210) ... ...." ], [ "us", + "United States", + "1", "1214", - "United States" + "+1 (214) ... ...." ], [ "us", + "United States", + "1", "1254", - "United States" + "+1 (254) ... ...." ], [ "us", + "United States", + "1", "1281", - "United States" + "+1 (281) ... ...." ], [ "us", + "United States", + "1", "1325", - "United States" + "+1 (325) ... ...." ], [ "us", + "United States", + "1", "1361", - "United States" + "+1 (361) ... ...." ], [ "us", + "United States", + "1", "1409", - "United States" + "+1 (409) ... ...." ], [ "us", + "United States", + "1", "1432", - "United States" + "+1 (432) ... ...." ], [ "us", + "United States", + "1", "1512", - "United States" + "+1 (512) ... ...." ], [ "us", + "United States", + "1", "1713", - "United States" + "+1 (713) ... ...." ], [ "us", + "United States", + "1", "1806", - "United States" + "+1 (806) ... ...." ], [ "us", + "United States", + "1", "1817", - "United States" + "+1 (817) ... ...." ], [ "us", + "United States", + "1", "1830", - "United States" + "+1 (830) ... ...." ], [ "us", + "United States", + "1", "1903", - "United States" + "+1 (903) ... ...." ], [ "us", + "United States", + "1", "1915", - "United States" + "+1 (915) ... ...." ], [ "us", + "United States", + "1", "1936", - "United States" + "+1 (936) ... ...." ], [ "us", + "United States", + "1", "1940", - "United States" + "+1 (940) ... ...." ], [ "us", + "United States", + "1", "1956", - "United States" + "+1 (956) ... ...." ], [ "us", + "United States", + "1", "1972", - "United States" + "+1 (972) ... ...." ], [ "us", + "United States", + "1", "1979", - "United States" + "+1 (979) ... ...." ], [ "us", + "United States", + "1", "1435", - "United States" + "+1 (435) ... ...." ], [ "us", + "United States", + "1", "1801", - "United States" + "+1 (801) ... ...." ], [ "us", + "United States", + "1", "1276", - "United States" + "+1 (276) ... ...." ], [ "us", + "United States", + "1", "1434", - "United States" + "+1 (434) ... ...." ], [ "us", + "United States", + "1", "1540", - "United States" + "+1 (540) ... ...." ], [ "us", + "United States", + "1", "1703", - "United States" + "+1 (703) ... ...." ], [ "us", + "United States", + "1", "1757", - "United States" + "+1 (757) ... ...." ], [ "us", + "United States", + "1", "1804", - "United States" + "+1 (804) ... ...." ], [ "us", + "United States", + "1", "1802", - "United States" + "+1 (802) ... ...." ], [ "us", + "United States", + "1", "1206", - "United States" + "+1 (206) ... ...." ], [ "us", + "United States", + "1", "1253", - "United States" + "+1 (253) ... ...." ], [ "us", + "United States", + "1", "1360", - "United States" + "+1 (360) ... ...." ], [ "us", + "United States", + "1", "1425", - "United States" + "+1 (425) ... ...." ], [ "us", + "United States", + "1", "1509", - "United States" + "+1 (509) ... ...." ], [ "us", + "United States", + "1", "1262", - "United States" + "+1 (262) ... ...." ], [ "us", + "United States", + "1", "1414", - "United States" + "+1 (414) ... ...." ], [ "us", + "United States", + "1", "1608", - "United States" + "+1 (608) ... ...." ], [ "us", + "United States", + "1", "1715", - "United States" + "+1 (715) ... ...." ], [ "us", + "United States", + "1", "1920", - "United States" + "+1 (920) ... ...." ], [ "us", + "United States", + "1", "1304", - "United States" + "+1 (304) ... ...." ], [ "us", + "United States", + "1", "1307", - "United States" + "+1 (307) ... ...." ], [ "uy", + "Uruguay", + "598", "598", - "Uruguay" + "+598 (.) ... .. .." ], [ "uz", + "Uzbekistan", "998", - "Uzbekistan" + "998", + "+998 (..) ... ...." ], [ - "va", - "39", - "Vatican City" + "vu", + "Vanuatu", + "678", + "678", + "+678 (..) ....." ], [ - "vc", - "1784", - "Saint Vincent and the Grenadines" + "va", + "Vatican City", + "39", + "39", + "+39 (.) ... ....." ], [ "ve", + "Venezuela", + "58", "58", - "Venezuela" + "+58 (...) ... ...." ], [ "vn", + "Vietnam", "84", - "Vietnam" - ], - [ - "vu", - "678", - "Vanuatu" - ], - [ - "ws", - "685", - "Samoa" + "84", + "+84 (...) .... ..." ], [ - "xk", - "383", - "Kosovo" + "wf", + "Wallis & Futuna", + "681", + "681", + "+681 (..) ...." ], [ "ye", + "Yemen", "967", - "Yemen" - ], - [ - "za", - "27", - "South Africa" + "967", + "+967 (...) ... ..." ], [ "zm", + "Zambia", "260", - "Zambia" + "260", + "+260 (..) ... ...." ], [ "zw", + "Zimbabwe", + "263", "263", - "Zimbabwe" + "+263 (.) ......" ] ] \ No newline at end of file diff --git a/src/legacy/phoneMasks.json b/src/legacy/phoneMasks.json deleted file mode 100644 index 7eeb6f2..0000000 --- a/src/legacy/phoneMasks.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "ad": "(...) ...", - "ae": "(..) ... ....", - "af": "(..) ... ....", - "ag": "(...) ....", - "ai": "(...) ....", - "al": "(...) ... ...", - "am": "(..) ... ...", - "ao": "(...) ... ...", - "je": "(..) .... ....", - "gb": "(..) .... ....", - "bl": "(...) ... ....", - "mf": "(...) ... ....", - "gp": "(...) ... ....", - "pr": "(...) ... ....", - "pm": "(...) ... ...", - "bq": "(...) .... ....", - "xk": "(...) .... ....", - "ar": "(...) ... ....", - "as": "(...) ....", - "at": "(...) ... ....", - "au": "(.) .... ....", - "aw": "(...) ....", - "az": "(..) ... .. ..", - "ba": "(..) .....", - "bb": "(...) ....", - "bd": "(..) ... ...", - "be": "(...) ... ...", - "bf": "(..) .. ....", - "bg": "(...) ... ...", - "bh": "(....) ....", - "bi": "(..) .. ....", - "bj": "(..) .. ....", - "bm": "(...) ....", - "bn": "(...) ....", - "bo": "(.) ... ....", - "br": "(..) .... ....", - "bs": "(...) ....", - "bt": "(.) ... ...", - "bw": "(..) ... ...", - "by": "(..) ... .. ..", - "bz": "(...) ....", - "ca": "(...) ... ....", - "cd": "(...) ... ...", - "cf": "(..) .. ....", - "cg": "(..) ... ....", - "ch": "(..) ... ....", - "ci": "(..) ... ...", - "ck": "(..) ...", - "cl": "(.) .... ....", - "cm": "(....) ....", - "cn": "(..) ..... .....", - "co": "(...) ... ....", - "cr": "(....) ....", - "cu": "(.) ... ....", - "cv": "(...) .. ..", - "cw": "(...) ....", - "cy": "(..) ... ...", - "cz": "(...) ... ...", - "de": "(....) ... ....", - "dj": "(..) .. .. ..", - "dk": "(..) .. .. ..", - "dm": "(...) ....", - "do": "(...) ....", - "dz": "(..) ... ....", - "ec": "(..) ... ....", - "ee": "(....) ....", - "eg": "(...) ... ....", - "er": "(.) ... ...", - "es": "(...) ... ...", - "et": "(..) ... ....", - "fi": "(...) ... .. ..", - "fj": "(..) .....", - "fk": ".....", - "fm": "(...) ....", - "fo": "(...) ...", - "fr": "(...) ... ....", - "ga": "(.) .. .. ..", - "gd": "(...) ....", - "ge": "(...) ... ...", - "gf": "(.....) ....", - "gh": "(...) ... ...", - "gi": "(...) .....", - "gl": "(..) .. ..", - "gm": "(...) .. ..", - "gn": "(..) ... ...", - "gq": "(..) ... ....", - "gr": "(...) ... ....", - "gt": "(.) ... ....", - "gu": "(...) ....", - "gw": "(.) ......", - "gy": "(...) ....", - "hk": "(....) ....", - "hn": "(....) ....", - "hr": "(..) ... ...", - "ht": "(..) .. ....", - "hu": "(...) ... ...", - "id": "(..) ... ....", - "ie": "(...) ... ...", - "il": "(..) ... ....", - "in": "(....) ... ...", - "io": "(...) ....", - "iq": "(...) ... ....", - "ir": "(...) ... ....", - "is": "(...) ....", - "it": "(...) .... ...", - "jm": "(...) ....", - "jo": "(.) .... ....", - "jp": "(..) .... ....", - "ke": "(...) ......", - "kg": "(...) ... ...", - "kh": "(..) ... ...", - "ki": "(..) ...", - "km": "(..) .....", - "kn": "(...) ....", - "kp": "(...) .... ........", - "kr": "(..) .... .....", - "kw": "(....) ....", - "ky": "(...) ....", - "kz": "(...) ... .. ..", - "la": "(..) ... ...", - "lb": "(..) ... ...", - "lc": "(...) ....", - "li": "(...) ... ....", - "lk": "(..) ... ....", - "lr": "(..) ... ...", - "ls": "(.) ... ....", - "lt": "(...) .. ...", - "lu": "(...) ... ...", - "lv": "(..) ... ...", - "ly": "(..) ... ....", - "ma": "(..) .... ...", - "mc": "(...) ... ...", - "md": "(....) ....", - "me": "(..) ... ...", - "mg": "(..) .. .....", - "mh": "(...) ....", - "mk": "(..) ... ...", - "ml": "(..) .. ....", - "mm": "(..) ... ...", - "mn": "(..) .. ....", - "mo": "(....) ....", - "mp": "(...) ....", - "mq": "(...) .. .. ..", - "mr": "(..) .. ....", - "ms": "(...) ....", - "mt": "(....) ....", - "mu": "(...) ....", - "mv": "(...) ....", - "mw": "(.) .... ....", - "mx": "(...) ... ....", - "my": "(...) ... ....", - "mz": "(..) ... ....", - "na": "(..) ... ....", - "nc": "(..) ....", - "ne": "(..) .. ....", - "nf": "(..) ...", - "ng": "(...) ... ....", - "ni": "(....) ....", - "nl": "(..) ... ....", - "no": "(...) .. ...", - "np": "(..) ... ...", - "nr": "(...) ....", - "nu": "....", - "nz": "(...) ... ....", - "om": "(..) ... ...", - "pa": "(...) ....", - "pe": "(...) ... ...", - "pf": "(..) .. ..", - "pg": "(...) .. ...", - "ph": "(...) ... ....", - "pk": "(...) ... ....", - "pl": "(...) ... ...", - "ps": "(..) ... ....", - "pt": "(..) ... ....", - "pw": "(...) ....", - "py": "(...) ... ...", - "qa": "(....) ....", - "re": "(.....) ....", - "ro": "(..) ... ....", - "rs": "(..) ... ....", - "ru": "(...) ... .. ..", - "rw": "(...) ... ...", - "sa": "(.) .... ....", - "sb": "(...) ....", - "sc": "(.) ... ...", - "sd": "(..) ... ....", - "se": "(..) ... ....", - "sg": "(....) ....", - "sh": "....", - "si": "(..) ... ...", - "sk": "(...) ... ...", - "sl": "(..) ......", - "sm": "(....) ......", - "sn": "(..) ... ....", - "so": "(..) ... ...", - "sr": "(...) ....", - "ss": "(..) ... ....", - "st": "(..) .....", - "sv": "(..) .. ....", - "sx": "(...) ....", - "sy": "(..) .... ...", - "sz": "(..) .. ....", - "tc": "(...) ....", - "td": "(..) .. .. ..", - "tg": "(..) ... ...", - "th": "(..) ... ....", - "tj": "(..) ... ....", - "tk": "....", - "tl": "(...) .....", - "tm": "(.) ... ....", - "tn": "(..) ... ...", - "to": ".....", - "tr": "(...) ... ....", - "tt": "(...) ....", - "tv": "......", - "tw": "(.) .... ....", - "tz": "(..) ... ....", - "ua": "(..) ... .. ..", - "ug": "(...) ... ...", - "us": "(...) ... ....", - "uy": "(.) ... .. ..", - "uz": "(..) ... ....", - "va": "(.) ... .....", - "vc": "(...) ....", - "ve": "(...) ... ....", - "vg": "(...) ....", - "vi": "(...) ....", - "vn": "(...) .... ...", - "vu": "(..) .....", - "wf": "(..) ....", - "ws": "(..) ....", - "ye": "(...) ... ...", - "za": "(..) ... ....", - "zm": "(..) ... ....", - "zw": "(.) ......" -} \ No newline at end of file From 881da3c9b5e7048a9460582cfc5119f16eb2e181 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 22 Oct 2023 20:17:56 +0400 Subject: [PATCH 12/69] GH-53: Implement the input mask formatting Signed-off-by: Artyom Vancyan --- src/legacy/index.tsx | 94 +++++++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 32 deletions(-) diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx index 63739e4..a9e237d 100644 --- a/src/legacy/index.tsx +++ b/src/legacy/index.tsx @@ -1,29 +1,23 @@ -import {useMemo, useState} from "react"; -import Select from "antd/es/select"; -import Input from "antd/es/input"; +import {useCallback, useMemo, useState} from "react"; +import Select from "antd/lib/select"; +import Input from "antd/lib/input"; -import {PhoneInputProps, PhoneNumber} from "../types"; - -// import masks from "./phoneMasks.json"; +import styleInject from "./style"; import timezones from "./timezones.json"; import countries from "./countries.json"; -// import validations from "./validations.json"; -import "./style5.css"; +import {PhoneInputProps} from "../types"; -// type ISO2Code = keyof typeof masks; -type Timezone = keyof typeof timezones; +styleInject("style5.css"); -const format = (value: PhoneNumber | string) => { - if (typeof value !== "string") { - const {countryCode, areaCode, phoneNumber} = {...value}; - value = [countryCode, areaCode, phoneNumber].filter(Boolean).join(""); - } - return value.replace(/^(?=\d)/, "+"); +const slots = new Set("."); + +const displayFormat = (value: string) => { + return value.replace(/[.\s\D]+$/, "").replace(/(\(\d+)$/, "$1)"); } const getDefaultISO2Code = () => { /** Returns the default ISO2 code, based on the user's timezone */ - return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as Timezone] || "") || "us"; + return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as keyof typeof timezones] || "") || "us"; } // const parsePhoneNumber = (value: string, data: CountryData, formattedNumber: string): PhoneNumber => { @@ -54,7 +48,7 @@ const getDefaultISO2Code = () => { // } const PhoneInput = ({ - value, + value: defaultValue, // style, country, // className, @@ -66,17 +60,43 @@ const PhoneInput = ({ // ...reactPhoneInputProps }: PhoneInputProps) => { const defaultCountry = country || getDefaultISO2Code(); - const defaultDialCode = countries.find(([isoCode]) => isoCode === defaultCountry)?.[1]; + const defaultDialCode = countries.find(([isoCode]) => isoCode === defaultCountry)?.[3]; + let back = false; + const [value, setValue] = useState(defaultValue as string); const [minWidth, setMinWidth] = useState(0); - const [rawValue, setRawValue] = useState(format(value as any)); const [dialCode, setDialCode] = useState(defaultDialCode); + const [pattern, setPattern] = useState("+. (...) ... ...."); + + const prev = useMemo(() => (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0), [pattern]) + + const first = useMemo(() => [...pattern].findIndex(c => slots.has(c)), [pattern]) - const countryCode = useMemo(() => { - return countries.find(([_, dial]) => dialCode === dial)?.[0]; - }, [dialCode]) + const clean = useCallback((input: any) => { + input = input.match(/\d/g) || []; + return Array.from(pattern, c => input[0] === c || slots.has(c) ? input.shift() || c : c); + }, [pattern]) - console.log(countryCode); + const onBlur = useCallback(({target}: any) => target.value === pattern && setValue(""), [pattern]) + + const onKeyDown = (e: any) => back = e.key === "Backspace" + + const format = ({target}: any) => { + const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { + i = clean(target.value.slice(0, i)).findIndex(c => slots.has(c)); + return i < 0 ? prev[prev.length - 1] : back ? prev[i - 1] || first : i; + }); + target.value = displayFormat(clean(target.value).join("")); + setValue(target.value); + target.setSelectionRange(i, j); + back = false; + } + + // const countryCode = useMemo(() => { + // return countries.find(([_, dial]) => dialCode === dial)?.[0]; + // }, [dialCode]) + // + // console.log(countryCode); // const checkValidity = (metadata: PhoneNumber) => { // // TODO: Update masks - create a script for preparing the masks (like it is done for validations) @@ -119,18 +139,22 @@ const PhoneInput = ({ @@ -140,13 +164,19 @@ const PhoneInput = ({
setMinWidth(node?.offsetWidth || 0)}> { - setRawValue(format(e.target.value)); - }} + // onChange={(e) => { + // console.log(e.target.value); + // setValue(e.target.value); + // }} // country={countryCode} // inputClass={inputClass} /** Dynamic properties for customization */ From 72c9c79c32d60b5647570db8985fae6438944cbb Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Mon, 23 Oct 2023 22:30:14 +0400 Subject: [PATCH 13/69] GH-53: Implement calculations of defaults and initiation with formatting Signed-off-by: Artyom Vancyan --- src/legacy/index.tsx | 68 ++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx index a9e237d..25fe3a7 100644 --- a/src/legacy/index.tsx +++ b/src/legacy/index.tsx @@ -1,11 +1,12 @@ -import {useCallback, useMemo, useState} from "react"; +import {useCallback, useEffect, useMemo, useState} from "react"; import Select from "antd/lib/select"; import Input from "antd/lib/input"; +import {PhoneInputProps} from "../types"; + import styleInject from "./style"; import timezones from "./timezones.json"; import countries from "./countries.json"; -import {PhoneInputProps} from "../types"; styleInject("style5.css"); @@ -48,25 +49,39 @@ const getDefaultISO2Code = () => { // } const PhoneInput = ({ - value: defaultValue, + value: initialValue = "", // style, - country, + country = getDefaultISO2Code(), // className, // size = "middle", - // onPressEnter = () => null, + onPressEnter = () => null, // onMount: handleMount = () => null, // onChange: handleChange = () => null, // inputClass: inputClassProxy, // ...reactPhoneInputProps }: PhoneInputProps) => { - const defaultCountry = country || getDefaultISO2Code(); - const defaultDialCode = countries.find(([isoCode]) => isoCode === defaultCountry)?.[3]; + const defaultValue = typeof initialValue === "string" ? initialValue.replaceAll(/\D/g, "") : [initialValue?.countryCode, initialValue?.areaCode, initialValue?.phoneNumber].filter(Boolean).join(""); + const defaultMetadata = countries.find(([_1, _2, _3, dial]) => defaultValue.startsWith(dial)) || countries.find(([iso]) => iso === country); + // const defaultCountry = defaultMetadata?.[0]; + const defaultDialCode = defaultMetadata?.[3]; + const defaultPhoneMask = defaultMetadata?.[4]; + + // console.log(defaultCountry, country) let back = false; + const [initiated, setInitiated] = useState(false); const [value, setValue] = useState(defaultValue as string); const [minWidth, setMinWidth] = useState(0); - const [dialCode, setDialCode] = useState(defaultDialCode); - const [pattern, setPattern] = useState("+. (...) ... ...."); + const [pattern, setPattern] = useState(defaultPhoneMask || ""); + + const metadata = useMemo(() => { + const rawValue = value.replaceAll(/\D/g, ""); + return countries.find(([_1, _2, _3, dial]) => rawValue.startsWith(dial)); + }, [value]) + + const selectValue = useMemo(() => { + return metadata ? metadata[0] + metadata[3] : defaultDialCode; + }, [defaultDialCode, metadata]) const prev = useMemo(() => (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0), [pattern]) @@ -79,7 +94,10 @@ const PhoneInput = ({ const onBlur = useCallback(({target}: any) => target.value === pattern && setValue(""), [pattern]) - const onKeyDown = (e: any) => back = e.key === "Backspace" + const onKeyDown = (e: any) => { + if (e.key === "Enter") onPressEnter(e); + else back = e.key === "Backspace"; + } const format = ({target}: any) => { const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { @@ -92,6 +110,12 @@ const PhoneInput = ({ back = false; } + useEffect(() => { + if (initiated) return; + setValue(displayFormat(clean(value).join(""))); + setInitiated(true); + }, [clean, initiated, value]) + // const countryCode = useMemo(() => { // return countries.find(([_, dial]) => dialCode === dial)?.[0]; // }, [dialCode]) @@ -137,28 +161,29 @@ const PhoneInput = ({ const countriesSelect = useMemo(() => ( - ), [dialCode, minWidth]) + ), [selectValue, minWidth]) return (
setMinWidth(node?.offsetWidth || 0)}> @@ -177,12 +202,7 @@ const PhoneInput = ({ // console.log(e.target.value); // setValue(e.target.value); // }} - // country={countryCode} - // inputClass={inputClass} /** Dynamic properties for customization */ - // {...reactPhoneInputProps} - // containerStyle={style} - // containerClass={className} // onEnterKeyPress={onPressEnter} />
From 69016665707e24a63b3fd6f12609f97eedecee2b Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Mon, 23 Oct 2023 23:34:42 +0400 Subject: [PATCH 14/69] GH-53: Implement onChange and onMount with old interfaces Signed-off-by: Artyom Vancyan --- src/legacy/index.tsx | 129 +++++++++++++++++++------------------------ 1 file changed, 56 insertions(+), 73 deletions(-) diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx index 25fe3a7..8cebda6 100644 --- a/src/legacy/index.tsx +++ b/src/legacy/index.tsx @@ -1,12 +1,13 @@ -import {useCallback, useEffect, useMemo, useState} from "react"; +import {ChangeEvent, useCallback, useEffect, useMemo, useState} from "react"; import Select from "antd/lib/select"; import Input from "antd/lib/input"; -import {PhoneInputProps} from "../types"; +import {PhoneInputProps, PhoneNumber} from "../types"; import styleInject from "./style"; import timezones from "./timezones.json"; import countries from "./countries.json"; +import validations from "./validations.json"; styleInject("style5.css"); @@ -16,37 +17,44 @@ const displayFormat = (value: string) => { return value.replace(/[.\s\D]+$/, "").replace(/(\(\d+)$/, "$1)"); } +const cleanInput = (input: any, pattern: string) => { + input = input.match(/\d/g) || []; + return Array.from(pattern, c => input[0] === c || slots.has(c) ? input.shift() || c : c); +} + +const checkValidity = (metadata: PhoneNumber) => { + // TODO: Update masks - create a script for preparing the masks (like it is done for validations) + /** Checks if both the area code and phone number match the validation pattern */ + const pattern = new RegExp((validations as any)[metadata.isoCode as keyof typeof validations]); + return pattern.test([metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")); +} + const getDefaultISO2Code = () => { /** Returns the default ISO2 code, based on the user's timezone */ return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as keyof typeof timezones] || "") || "us"; } -// const parsePhoneNumber = (value: string, data: CountryData, formattedNumber: string): PhoneNumber => { -// const isoCode = data?.countryCode; -// const countryCodePattern = /\+\d+/; -// const areaCodePattern = /\((\d+)\)/; -// const dialCodePattern = /^\+[\d\s]+\([\d\s]+\)/; -// -// /** Parses the matching partials of the phone number by predefined regex patterns */ -// const countryCodeMatch = formattedNumber ? (formattedNumber.match(countryCodePattern) || []) : []; -// const areaCodeMatch = formattedNumber ? (formattedNumber.match(areaCodePattern) || []) : []; -// const dialCodeMatch = formattedNumber ? (formattedNumber.match(dialCodePattern) || []) : []; -// -// /** Converts the parsed values of the country and area codes to integers if values present */ -// const countryCode = countryCodeMatch.length > 0 ? parseInt(countryCodeMatch[0]) : null; -// const areaCode = areaCodeMatch.length > 1 ? parseInt(areaCodeMatch[1]) : null; -// -// /** Obtaining the dial code for comparing to the existing one - if the country mask contains an area code */ -// const dialCode = dialCodeMatch.length > 0 ? dialCodeMatch[0].replaceAll(/[+\s()]/g, "") : null; -// const dialChanged = dialCode !== data?.dialCode; -// -// /** Parses the phone number by removing the country and area codes from the formatted value */ -// const phoneNumberPattern = new RegExp(`^${countryCode}${(areaCode || "")}(\\d+)`); -// const phoneNumberMatch = value ? (value.match(phoneNumberPattern) || []) : []; -// const phoneNumber = phoneNumberMatch.length > 1 ? phoneNumberMatch[1] : null; -// -// return {countryCode, areaCode, phoneNumber, isoCode, dialChanged}; -// } +const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { + const value = formattedNumber.replaceAll(/\D/g, ""); + const isoCode = countries.find((country) => value.startsWith(country[3]))?.[0]; + const countryCodePattern = /\+\d+/; + const areaCodePattern = /\((\d+)\)/; + + /** Parses the matching partials of the phone number by predefined regex patterns */ + const countryCodeMatch = formattedNumber ? (formattedNumber.match(countryCodePattern) || []) : []; + const areaCodeMatch = formattedNumber ? (formattedNumber.match(areaCodePattern) || []) : []; + + /** Converts the parsed values of the country and area codes to integers if values present */ + const countryCode = countryCodeMatch.length > 0 ? parseInt(countryCodeMatch[0]) : null; + const areaCode = areaCodeMatch.length > 1 ? parseInt(areaCodeMatch[1]) : null; + + /** Parses the phone number by removing the country and area codes from the formatted value */ + const phoneNumberPattern = new RegExp(`^${countryCode}${(areaCode || "")}(\\d+)`); + const phoneNumberMatch = value ? (value.match(phoneNumberPattern) || []) : []; + const phoneNumber = phoneNumberMatch.length > 1 ? phoneNumberMatch[1] : null; + + return {countryCode, areaCode, phoneNumber, isoCode}; +} const PhoneInput = ({ value: initialValue = "", @@ -55,19 +63,16 @@ const PhoneInput = ({ // className, // size = "middle", onPressEnter = () => null, - // onMount: handleMount = () => null, - // onChange: handleChange = () => null, + onMount: handleMount = () => null, + onChange: handleChange = () => null, // inputClass: inputClassProxy, // ...reactPhoneInputProps }: PhoneInputProps) => { const defaultValue = typeof initialValue === "string" ? initialValue.replaceAll(/\D/g, "") : [initialValue?.countryCode, initialValue?.areaCode, initialValue?.phoneNumber].filter(Boolean).join(""); const defaultMetadata = countries.find(([_1, _2, _3, dial]) => defaultValue.startsWith(dial)) || countries.find(([iso]) => iso === country); - // const defaultCountry = defaultMetadata?.[0]; const defaultDialCode = defaultMetadata?.[3]; const defaultPhoneMask = defaultMetadata?.[4]; - // console.log(defaultCountry, country) - let back = false; const [initiated, setInitiated] = useState(false); const [value, setValue] = useState(defaultValue as string); @@ -87,10 +92,7 @@ const PhoneInput = ({ const first = useMemo(() => [...pattern].findIndex(c => slots.has(c)), [pattern]) - const clean = useCallback((input: any) => { - input = input.match(/\d/g) || []; - return Array.from(pattern, c => input[0] === c || slots.has(c) ? input.shift() || c : c); - }, [pattern]) + const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) const onBlur = useCallback(({target}: any) => target.value === pattern && setValue(""), [pattern]) @@ -112,41 +114,22 @@ const PhoneInput = ({ useEffect(() => { if (initiated) return; - setValue(displayFormat(clean(value).join(""))); setInitiated(true); - }, [clean, initiated, value]) - - // const countryCode = useMemo(() => { - // return countries.find(([_, dial]) => dialCode === dial)?.[0]; - // }, [dialCode]) - // - // console.log(countryCode); - - // const checkValidity = (metadata: PhoneNumber) => { - // // TODO: Update masks - create a script for preparing the masks (like it is done for validations) - // /** Checks if both the area code and phone number match the validation pattern */ - // const pattern = new RegExp((validations as any)[metadata.isoCode as ISO2Code]); - // const isValid = reset.current || ((loaded.current || initialized.current) ? pattern.test([ - // metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")) : !initialized.current); - // initialized.current = true; - // loaded.current = false; - // reset.current = false; - // return isValid; - // } - - // const onChange: ReactPhoneOnChange = useCallback((value, data, event, formattedNumber) => { - // const {dialChanged, ...metadata} = parsePhoneNumber(value, data, formattedNumber); - // const code = metadata.isoCode as ISO2Code; - // - // if (code !== currentCode) { - // /** Clears phone number when the country is selected manually */ - // metadata.areaCode = dialChanged ? null : metadata.areaCode; - // metadata.phoneNumber = null; - // setCurrentCode(code); - // } - // - // handleChange({...metadata, valid: () => checkValidity(metadata)}, event); - // }, [currentCode, handleChange]); + const formattedNumber = displayFormat(clean(value).join("")); + const phoneMetadata = parsePhoneNumber(formattedNumber); + handleMount({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}); + handleChange({ + ...phoneMetadata, + valid: () => checkValidity(phoneMetadata) + }, {} as ChangeEvent); + setValue(formattedNumber); + }, [clean, handleChange, handleMount, initiated, value]) + + const onChange = useCallback((event: ChangeEvent) => { + const formattedNumber = displayFormat(clean(value).join("")); + const phoneMetadata = parsePhoneNumber(formattedNumber); + handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); + }, [clean, handleChange, value]); // const onMount: ReactPhoneOnMount = useCallback((rawValue, {countryCode, ...event}, formattedNumber) => { // const {dialChanged, ...metadata} = parsePhoneNumber(rawValue, {countryCode}, formattedNumber); @@ -164,9 +147,8 @@ const PhoneInput = ({ value={selectValue} suffixIcon={null} onSelect={(_, {key: mask}) => { - setInitiated(false); + setValue(displayFormat(cleanInput(mask, mask).join(""))); setPattern(mask); - setValue(""); }} optionLabelProp="label" dropdownStyle={{minWidth}} @@ -194,6 +176,7 @@ const PhoneInput = ({ onBlur={onBlur} onInput={format} onFocus={format} + onChange={onChange} onKeyDown={onKeyDown} addonBefore={countriesSelect} /** Static properties providing dynamic behavior */ From 73c661f4276573f9a787baf4cb44cf6a3f2ac491 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Mon, 23 Oct 2023 23:36:54 +0400 Subject: [PATCH 15/69] GH-53: Fix test-cases for new input Signed-off-by: Artyom Vancyan --- tests/common.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/common.tsx b/tests/common.tsx index 92fff85..0545db0 100644 --- a/tests/common.tsx +++ b/tests/common.tsx @@ -59,15 +59,15 @@ export default function commonTests(PhoneInput: any, Form: any, FormItem: any, B }} country="us" />); - const input = screen.getByDisplayValue("+1"); - await userEvent.type(input, "702123456789"); - assert(input.getAttribute("value") === "+1 (702) 123 4567"); + const input = screen.getByDisplayValue("+1 (907)"); + await userEvent.type(input, "123456789"); + assert(input.getAttribute("value") === "+1 (907) 123 4567"); }) it("Using the input with FormItem", async () => { render(
{ assert(phone.countryCode === 1); - assert(phone.areaCode === 702); + assert(phone.areaCode === 907); assert(phone.phoneNumber === "1234567"); assert(phone.isoCode === "us"); }}> @@ -76,9 +76,9 @@ export default function commonTests(PhoneInput: any, Form: any, FormItem: any, B
); - const input = screen.getByDisplayValue("+1"); - await userEvent.type(input, "702123456789"); - assert(input.getAttribute("value") === "+1 (702) 123 4567"); + const input = screen.getByDisplayValue("+1 (907)"); + await userEvent.type(input, "123456789"); + assert(input.getAttribute("value") === "+1 (907) 123 4567"); screen.getByTestId("button").click(); }) From ae29c4a453857d8b889909e26987a8b7d0cfc3af Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Wed, 25 Oct 2023 20:33:31 +0400 Subject: [PATCH 16/69] GH-53: Clean the `PhoneInputProps` interface Signed-off-by: Artyom Vancyan --- src/legacy/index.tsx | 38 ++++----------------------- src/types.ts | 61 +++++++++++--------------------------------- 2 files changed, 20 insertions(+), 79 deletions(-) diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx index 8cebda6..bdc5a95 100644 --- a/src/legacy/index.tsx +++ b/src/legacy/index.tsx @@ -23,7 +23,6 @@ const cleanInput = (input: any, pattern: string) => { } const checkValidity = (metadata: PhoneNumber) => { - // TODO: Update masks - create a script for preparing the masks (like it is done for validations) /** Checks if both the area code and phone number match the validation pattern */ const pattern = new RegExp((validations as any)[metadata.isoCode as keyof typeof validations]); return pattern.test([metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")); @@ -58,15 +57,10 @@ const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { const PhoneInput = ({ value: initialValue = "", - // style, country = getDefaultISO2Code(), - // className, - // size = "middle", - onPressEnter = () => null, onMount: handleMount = () => null, onChange: handleChange = () => null, - // inputClass: inputClassProxy, - // ...reactPhoneInputProps + ...antInputProps }: PhoneInputProps) => { const defaultValue = typeof initialValue === "string" ? initialValue.replaceAll(/\D/g, "") : [initialValue?.countryCode, initialValue?.areaCode, initialValue?.phoneNumber].filter(Boolean).join(""); const defaultMetadata = countries.find(([_1, _2, _3, dial]) => defaultValue.startsWith(dial)) || countries.find(([iso]) => iso === country); @@ -96,10 +90,7 @@ const PhoneInput = ({ const onBlur = useCallback(({target}: any) => target.value === pattern && setValue(""), [pattern]) - const onKeyDown = (e: any) => { - if (e.key === "Enter") onPressEnter(e); - else back = e.key === "Backspace"; - } + const onKeyDown = (e: any) => back = e.key === "Backspace"; const format = ({target}: any) => { const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { @@ -126,21 +117,10 @@ const PhoneInput = ({ }, [clean, handleChange, handleMount, initiated, value]) const onChange = useCallback((event: ChangeEvent) => { - const formattedNumber = displayFormat(clean(value).join("")); + const formattedNumber = displayFormat(clean(event.target.value).join("")); const phoneMetadata = parsePhoneNumber(formattedNumber); handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); - }, [clean, handleChange, value]); - - // const onMount: ReactPhoneOnMount = useCallback((rawValue, {countryCode, ...event}, formattedNumber) => { - // const {dialChanged, ...metadata} = parsePhoneNumber(rawValue, {countryCode}, formattedNumber); - // /** Initializes the existing value */ - // handleChange({...metadata, valid: () => checkValidity(metadata)}, event); - // handleMount({...metadata, valid: () => checkValidity(metadata)}); - // /** Sets the current country code to the code of the initial value */ - // setCurrentCode(metadata.isoCode as ISO2Code); - // if (loaded.current && !initialized.current) reset.current = true; - // initialized.current = false; - // }, [handleChange, handleMount]); + }, [clean, handleChange]); const countriesSelect = useMemo(() => ( { - // console.log(e.target.value); - // setValue(e.target.value); - // }} - /** Dynamic properties for customization */ - // onEnterKeyPress={onPressEnter} + {...antInputProps} />
) diff --git a/src/types.ts b/src/types.ts index 59a49dc..4905db5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,30 +1,13 @@ -import {ChangeEvent, CSSProperties, FocusEvent, InputHTMLAttributes, KeyboardEvent, MouseEvent} from "react"; - -export interface CountryData { - countryCode: string, - dialCode?: string, -} +import {ChangeEvent, InputHTMLAttributes} from "react"; +import {InputProps} from "antd/lib/input"; export interface PhoneNumber { - countryCode?: number | null, - areaCode?: number | null, - phoneNumber?: string | null, - isoCode?: string, - dialChanged?: boolean, + countryCode?: number | null; + areaCode?: number | null; + phoneNumber?: string | null; + isoCode?: string; - valid?(): boolean, -} - -export interface AntInputProps { - size?: "small" | "middle" | "large", - value?: PhoneNumber | string, - style?: CSSProperties, - className?: string, - disabled?: boolean, - - onChange?(value: PhoneNumber, event: ChangeEvent): void; - - onPressEnter?(event: KeyboardEvent): void; + valid?(): boolean; } export interface ReactPhoneInputProps { @@ -32,38 +15,24 @@ export interface ReactPhoneInputProps { searchPlaceholder?: string, searchNotFound?: string, dropdownClass?: string, - inputClass?: string, - placeholder?: string, enableSearch?: boolean, disableDropdown?: boolean, country?: string, - regions?: string[], onlyCountries?: string[], excludeCountries?: string[], preferredCountries?: string[], - - onFocus?(event: FocusEvent, value: PhoneNumber): void; - - onClick?(event: MouseEvent, value: PhoneNumber): void; - - onBlur?(event: FocusEvent, value: PhoneNumber): void; - - onKeyDown?(event: KeyboardEvent): void; - - onMount?(value: PhoneNumber): void; -} - -export interface ReactPhoneOnChange { - (value: string, data: CountryData, event: ChangeEvent, formattedNumber: string): void; -} - -export interface ReactPhoneOnMount { - (value: string, event: ChangeEvent & CountryData, formattedNumber: string): void; } -export interface PhoneInputProps extends AntInputProps, ReactPhoneInputProps { +export interface PhoneInputProps extends Omit { /** * NOTE: Interfaces of events may differ from the original interfaces * of dependencies, so be careful and follow the linked documentation. */ + + value?: PhoneNumber | string; + country?: string; + + onChange?(value: PhoneNumber, event: ChangeEvent): void; + + onMount?(value: PhoneNumber): void; } From bd09cab10380eae901135f07b7094c3606bf07cc Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Wed, 25 Oct 2023 20:34:52 +0400 Subject: [PATCH 17/69] GH-53: Fix query select of input Signed-off-by: Artyom Vancyan --- tests/common.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/common.tsx b/tests/common.tsx index 0545db0..ff2c227 100644 --- a/tests/common.tsx +++ b/tests/common.tsx @@ -168,11 +168,11 @@ export default function commonTests(PhoneInput: any, Form: any, FormItem: any, B ); const form = screen.getByTestId("form"); - const input = screen.getByDisplayValue("+1"); + const input = screen.getByDisplayValue("+1 (907)"); const submit = screen.getByTestId("submit"); const reset = screen.getByTestId("reset"); - await userEvent.type(input, "70212345"); + await userEvent.type(input, "12345"); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) From 2d18fd5bf1a37000a0becbc4f20eba5a0d1706fa Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Wed, 25 Oct 2023 21:26:56 +0400 Subject: [PATCH 18/69] GH-53: Make compatible with both 4.x and 5.x versions Signed-off-by: Artyom Vancyan --- src/legacy/style5.css | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/legacy/style5.css b/src/legacy/style5.css index d530267..3906406 100644 --- a/src/legacy/style5.css +++ b/src/legacy/style5.css @@ -4,7 +4,15 @@ align-items: center; } -.ant-input-group-addon * { +.ant-phone-input-wrapper .ant-select-selector { + border: none !important; +} + +.ant-phone-input-wrapper .ant-select-selection-item { + padding: 0 !important; +} + +.ant-phone-input-wrapper .ant-input-group-addon * { display: flex; align-items: center; justify-content: center; From fe9f558ec16e7bf8791120151a45a89df6741257 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 26 Oct 2023 12:46:02 +0400 Subject: [PATCH 19/69] GH-53: Remove old references of `react-phone-input-2` Signed-off-by: Artyom Vancyan --- README.md | 3 --- examples/antd4.x/package.json | 1 - package.json | 3 --- scripts/prepare-styles.ts | 6 +----- 4 files changed, 1 insertion(+), 12 deletions(-) diff --git a/README.md b/README.md index a8c5a6c..f05e028 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,6 @@ return ( | searchNotFound | The value is shown if `enableSearch` is `true` and the query does not match any country. Default value is `No entries to show`. | string | | placeholder | Custom placeholder. Default placeholder is `1 (702) 123-4567`. | string | | country | Country code to be selected by default. By default, it will show the flag of the user's country. | string | -| regions | Show only the countries of the specified regions. See the list of [available regions][reactPhoneRegions]. | string[] | | onlyCountries | Country codes to be included in the list. E.g. `onlyCountries={['us', 'ca', 'uk']}`. | string[] | | excludeCountries | Country codes to be excluded from the list of countries. E.g. `excludeCountries={['us', 'ca', 'uk']}`. | string[] | | preferredCountries | Country codes to be at the top of the list. E.g. `preferredCountries={['us', 'ca', 'uk']}`. | string[] | @@ -138,6 +137,4 @@ Copyright (C) 2023 Artyom Vancyan. [MIT](LICENSE) [antInputProps]:https://ant.design/components/input#input -[reactPhoneRegions]:https://github.com/bl00mber/react-phone-input-2#regions - [htmlInputProps]:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attributes diff --git a/examples/antd4.x/package.json b/examples/antd4.x/package.json index b5cf4ee..dcbacad 100644 --- a/examples/antd4.x/package.json +++ b/examples/antd4.x/package.json @@ -11,7 +11,6 @@ "craco-less": "^2.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-phone-input-2": "^2.15.1", "react-scripts": "^5.0.1", "typescript": "^4.9.5" }, diff --git a/package.json b/package.json index 3e75a39..b90ee1e 100644 --- a/package.json +++ b/package.json @@ -83,8 +83,5 @@ "tslib": "^2.6.2", "tsx": "^3.12.10", "typescript": "^5.2.2" - }, - "dependencies": { - "react-phone-input-2": "^2.15.1" } } diff --git a/scripts/prepare-styles.ts b/scripts/prepare-styles.ts index 66c33c2..8972977 100644 --- a/scripts/prepare-styles.ts +++ b/scripts/prepare-styles.ts @@ -7,11 +7,7 @@ const exec = (command: string) => util.promisify(process.exec)(command); (async () => { await exec("bash -c 'cp src/legacy/*.css legacy'"); - const style = fs.readFileSync("node_modules/react-phone-input-2/lib/style.css"); - const regex = /(\.react-tel-input)\s\.flag.+\1\s*\.\w{2}\b\s*\{[^{}]*}/; - const flags = "\n" + (style.toString().match(regex) || [""])[0]; - - let styles = fs.readFileSync("./legacy/style5.css", "utf8") + flags; + let styles = fs.readFileSync("./legacy/style5.css", "utf8"); styles = styles.replaceAll(/\/\*\*.*?\*\/[\n\s]*/gs, ""); styles = styles.replaceAll(/\B[^{}]*?\{[\s\n]}/g, ""); styles = styles.replaceAll(/\//g, "\\\/"); From 28c2a6833f3acc0adec396d1f748e2050243dbc5 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 26 Oct 2023 12:48:34 +0400 Subject: [PATCH 20/69] GH-53: Handle the overriden methods Signed-off-by: Artyom Vancyan --- src/legacy/index.tsx | 86 ++++++++++++++++++++++++++++++-------------- src/types.ts | 14 ++++++-- 2 files changed, 71 insertions(+), 29 deletions(-) diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx index bdc5a95..db92cfd 100644 --- a/src/legacy/index.tsx +++ b/src/legacy/index.tsx @@ -1,4 +1,4 @@ -import {ChangeEvent, useCallback, useEffect, useMemo, useState} from "react"; +import {ChangeEvent, KeyboardEvent, useCallback, useEffect, useMemo, useState} from "react"; import Select from "antd/lib/select"; import Input from "antd/lib/input"; @@ -13,6 +13,17 @@ styleInject("style5.css"); const slots = new Set("."); +const getMetadata = (rawValue: string) => { + return countries.find((country) => rawValue.startsWith(country[3])); +} + +const getRawValue = (value: PhoneNumber | string) => { + if (typeof value === "string") { + return value.replaceAll(/\D/g, ""); + } + return [value?.countryCode, value?.areaCode, value?.phoneNumber].filter(Boolean).join(""); +} + const displayFormat = (value: string) => { return value.replace(/[.\s\D]+$/, "").replace(/(\(\d+)$/, "$1)"); } @@ -34,8 +45,8 @@ const getDefaultISO2Code = () => { } const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { - const value = formattedNumber.replaceAll(/\D/g, ""); - const isoCode = countries.find((country) => value.startsWith(country[3]))?.[0]; + const value = getRawValue(formattedNumber); + const isoCode = getMetadata(value)?.[0]; const countryCodePattern = /\+\d+/; const areaCodePattern = /\((\d+)\)/; @@ -58,12 +69,16 @@ const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { const PhoneInput = ({ value: initialValue = "", country = getDefaultISO2Code(), + onBlur: handleBlur = () => null, onMount: handleMount = () => null, + onInput: handleInput = () => null, + onFocus: handleFocus = () => null, onChange: handleChange = () => null, + onKeyDown: handleKeyDown = () => null, ...antInputProps }: PhoneInputProps) => { - const defaultValue = typeof initialValue === "string" ? initialValue.replaceAll(/\D/g, "") : [initialValue?.countryCode, initialValue?.areaCode, initialValue?.phoneNumber].filter(Boolean).join(""); - const defaultMetadata = countries.find(([_1, _2, _3, dial]) => defaultValue.startsWith(dial)) || countries.find(([iso]) => iso === country); + const defaultValue = getRawValue(initialValue); + const defaultMetadata = getMetadata(defaultValue) || countries.find(([iso]) => iso === country); const defaultDialCode = defaultMetadata?.[3]; const defaultPhoneMask = defaultMetadata?.[4]; @@ -74,35 +89,59 @@ const PhoneInput = ({ const [pattern, setPattern] = useState(defaultPhoneMask || ""); const metadata = useMemo(() => { - const rawValue = value.replaceAll(/\D/g, ""); - return countries.find(([_1, _2, _3, dial]) => rawValue.startsWith(dial)); + return getMetadata(getRawValue(value)); }, [value]) + const first = useMemo(() => { + return [...pattern].findIndex(c => slots.has(c)); + }, [pattern]) + + const prev = useMemo(() => { + return (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0); + }, [pattern]) + const selectValue = useMemo(() => { return metadata ? metadata[0] + metadata[3] : defaultDialCode; }, [defaultDialCode, metadata]) - const prev = useMemo(() => (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0), [pattern]) - - const first = useMemo(() => [...pattern].findIndex(c => slots.has(c)), [pattern]) - const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) - const onBlur = useCallback(({target}: any) => target.value === pattern && setValue(""), [pattern]) - - const onKeyDown = (e: any) => back = e.key === "Backspace"; - - const format = ({target}: any) => { + const format = ({target}: ChangeEvent) => { const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { i = clean(target.value.slice(0, i)).findIndex(c => slots.has(c)); return i < 0 ? prev[prev.length - 1] : back ? prev[i - 1] || first : i; }); target.value = displayFormat(clean(target.value).join("")); - setValue(target.value); target.setSelectionRange(i, j); + setValue(target.value); back = false; } + const onChange = (event: ChangeEvent) => { + const phoneMetadata = parsePhoneNumber(displayFormat(clean(event.target.value).join(""))); + handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); + } + + const onKeyDown = (event: KeyboardEvent) => { + back = event.key === "Backspace"; + handleKeyDown(event); + } + + const onBlur = (event: ChangeEvent) => { + if (event.target.value === pattern) setValue(""); + handleBlur(event); + } + + const onInput = (event: ChangeEvent) => { + handleInput(event); + format(event); + } + + const onFocus = (event: ChangeEvent) => { + handleFocus(event); + format(event); + } + useEffect(() => { if (initiated) return; setInitiated(true); @@ -116,12 +155,6 @@ const PhoneInput = ({ setValue(formattedNumber); }, [clean, handleChange, handleMount, initiated, value]) - const onChange = useCallback((event: ChangeEvent) => { - const formattedNumber = displayFormat(clean(event.target.value).join("")); - const phoneMetadata = parsePhoneNumber(formattedNumber); - handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); - }, [clean, handleChange]); - const countriesSelect = useMemo(() => ( value?: PhoneNumber | string; country?: string; - onChange?(value: PhoneNumber, event: ChangeEvent): void; - onMount?(value: PhoneNumber): void; + + onBlur?(event: ChangeEvent): void; + + onFocus?(event: ChangeEvent): void; + + onInput?(event: ChangeEvent): void; + + onKeyDown?(event: KeyboardEvent): void; + + onChange?(value: PhoneNumber, event: ChangeEvent): void; } From a27f7ffedfe95a827e153c73da4c02c2077b27d6 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 26 Oct 2023 15:53:37 +0400 Subject: [PATCH 21/69] GH-53: Rearrange the modules and components Signed-off-by: Artyom Vancyan --- src/index.tsx | 199 +- src/metadata/countries.json | 3978 +++++++++++++++++++++++++++++++++ src/metadata/timezones.json | 444 ++++ src/metadata/validations.json | 235 ++ src/styles.css | 954 ++++++++ src/styles.ts | 13 + tests/antd4.test.tsx | 3 +- tests/antd5.test.tsx | 3 +- tests/common.tsx | 4 +- 9 files changed, 5824 insertions(+), 9 deletions(-) create mode 100644 src/metadata/countries.json create mode 100644 src/metadata/timezones.json create mode 100644 src/metadata/validations.json create mode 100644 src/styles.css create mode 100644 src/styles.ts diff --git a/src/index.tsx b/src/index.tsx index 884470e..81e9623 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,9 +1,200 @@ -import InputLegacy from "./legacy"; -import {PhoneInputProps} from "./types"; +import {ChangeEvent, KeyboardEvent, useCallback, useEffect, useMemo, useState} from "react"; +import Select from "antd/lib/select"; +import Input from "antd/lib/input"; + +import {PhoneInputProps, PhoneNumber} from "./types"; + +import styleInject from "./styles"; +import timezones from "./metadata/timezones.json"; +import countries from "./metadata/countries.json"; +import validations from "./metadata/validations.json"; + +styleInject("styles.css"); + +const slots = new Set("."); + +const getMetadata = (rawValue: string) => { + return countries.find((country) => rawValue.startsWith(country[3])); +} + +const getRawValue = (value: PhoneNumber | string) => { + if (typeof value === "string") { + return value.replaceAll(/\D/g, ""); + } + return [value?.countryCode, value?.areaCode, value?.phoneNumber].filter(Boolean).join(""); +} + +const displayFormat = (value: string) => { + return value.replace(/[.\s\D]+$/, "").replace(/(\(\d+)$/, "$1)"); +} + +const cleanInput = (input: any, pattern: string) => { + input = input.match(/\d/g) || []; + return Array.from(pattern, c => input[0] === c || slots.has(c) ? input.shift() || c : c); +} + +const checkValidity = (metadata: PhoneNumber) => { + /** Checks if both the area code and phone number match the validation pattern */ + const pattern = new RegExp((validations as any)[metadata.isoCode as keyof typeof validations]); + return pattern.test([metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")); +} + +const getDefaultISO2Code = () => { + /** Returns the default ISO2 code, based on the user's timezone */ + return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as keyof typeof timezones] || "") || "us"; +} + +const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { + const value = getRawValue(formattedNumber); + const isoCode = getMetadata(value)?.[0]; + const countryCodePattern = /\+\d+/; + const areaCodePattern = /\((\d+)\)/; + + /** Parses the matching partials of the phone number by predefined regex patterns */ + const countryCodeMatch = formattedNumber ? (formattedNumber.match(countryCodePattern) || []) : []; + const areaCodeMatch = formattedNumber ? (formattedNumber.match(areaCodePattern) || []) : []; + + /** Converts the parsed values of the country and area codes to integers if values present */ + const countryCode = countryCodeMatch.length > 0 ? parseInt(countryCodeMatch[0]) : null; + const areaCode = areaCodeMatch.length > 1 ? parseInt(areaCodeMatch[1]) : null; + + /** Parses the phone number by removing the country and area codes from the formatted value */ + const phoneNumberPattern = new RegExp(`^${countryCode}${(areaCode || "")}(\\d+)`); + const phoneNumberMatch = value ? (value.match(phoneNumberPattern) || []) : []; + const phoneNumber = phoneNumberMatch.length > 1 ? phoneNumberMatch[1] : null; + + return {countryCode, areaCode, phoneNumber, isoCode}; +} + +const PhoneInput = ({ + value: initialValue = "", + country = getDefaultISO2Code(), + onBlur: handleBlur = () => null, + onMount: handleMount = () => null, + onInput: handleInput = () => null, + onFocus: handleFocus = () => null, + onChange: handleChange = () => null, + onKeyDown: handleKeyDown = () => null, + ...antInputProps + }: PhoneInputProps) => { + const defaultValue = getRawValue(initialValue); + const defaultMetadata = getMetadata(defaultValue) || countries.find(([iso]) => iso === country); + const defaultDialCode = defaultMetadata?.[3]; + const defaultPhoneMask = defaultMetadata?.[4]; + + let back = false; + const [initiated, setInitiated] = useState(false); + const [value, setValue] = useState(defaultValue as string); + const [minWidth, setMinWidth] = useState(0); + const [pattern, setPattern] = useState(defaultPhoneMask || ""); + + const metadata = useMemo(() => { + return getMetadata(getRawValue(value)); + }, [value]) + + const first = useMemo(() => { + return [...pattern].findIndex(c => slots.has(c)); + }, [pattern]) + + const prev = useMemo(() => { + return (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0); + }, [pattern]) + + const selectValue = useMemo(() => { + return metadata ? metadata[0] + metadata[3] : defaultDialCode; + }, [defaultDialCode, metadata]) + + const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) + + const format = ({target}: ChangeEvent) => { + const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { + i = clean(target.value.slice(0, i)).findIndex(c => slots.has(c)); + return i < 0 ? prev[prev.length - 1] : back ? prev[i - 1] || first : i; + }); + target.value = displayFormat(clean(target.value).join("")); + target.setSelectionRange(i, j); + setValue(target.value); + back = false; + } + + const onChange = (event: ChangeEvent) => { + const phoneMetadata = parsePhoneNumber(displayFormat(clean(event.target.value).join(""))); + handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); + } + + const onKeyDown = (event: KeyboardEvent) => { + back = event.key === "Backspace"; + handleKeyDown(event); + } + + const onBlur = (event: ChangeEvent) => { + if (event.target.value === pattern) setValue(""); + handleBlur(event); + } + + const onInput = (event: ChangeEvent) => { + handleInput(event); + format(event); + } + + const onFocus = (event: ChangeEvent) => { + handleFocus(event); + format(event); + } + + useEffect(() => { + if (initiated) return; + setInitiated(true); + const formattedNumber = displayFormat(clean(value).join("")); + const phoneMetadata = parsePhoneNumber(formattedNumber); + handleMount({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}); + handleChange({ + ...phoneMetadata, + valid: () => checkValidity(phoneMetadata) + }, {} as ChangeEvent); + setValue(formattedNumber); + }, [clean, handleChange, handleMount, initiated, value]) + + const countriesSelect = useMemo(() => ( + + ), [selectValue, minWidth]) -const PhoneInput = (inputLegacyProps: PhoneInputProps) => { return ( - +
setMinWidth(node?.offsetWidth || 0)}> + +
) } diff --git a/src/metadata/countries.json b/src/metadata/countries.json new file mode 100644 index 0000000..3898da9 --- /dev/null +++ b/src/metadata/countries.json @@ -0,0 +1,3978 @@ +[ + [ + "af", + "Afghanistan", + "93", + "93", + "+93 (..) ... ...." + ], + [ + "al", + "Albania", + "355", + "355", + "+355 (...) ... ..." + ], + [ + "dz", + "Algeria", + "213", + "213", + "+213 (..) ... ...." + ], + [ + "as", + "American Samoa", + "1684", + "1684", + "+1 (684) ...." + ], + [ + "ad", + "Andorra", + "376", + "376", + "+376 (...) ..." + ], + [ + "ao", + "Angola", + "244", + "244", + "+244 (...) ... ..." + ], + [ + "ai", + "Anguilla", + "1264", + "1264", + "+1 (264) ...." + ], + [ + "ag", + "Antigua and Barbuda", + "1268", + "1268", + "+1 (268) ...." + ], + [ + "ar", + "Argentina", + "54", + "5411", + "+54 (11.) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54221", + "+54 (221) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54223", + "+54 (223) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54261", + "+54 (261) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54264", + "+54 (264) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "542652", + "+54 (265) 2.. ...." + ], + [ + "ar", + "Argentina", + "54", + "54280", + "+54 (280) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "542905", + "+54 (290) 5.. ...." + ], + [ + "ar", + "Argentina", + "54", + "54291", + "+54 (291) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "542920", + "+54 (292) 0.. ...." + ], + [ + "ar", + "Argentina", + "54", + "542966", + "+54 (296) 6.. ...." + ], + [ + "ar", + "Argentina", + "54", + "54299", + "+54 (299) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54341", + "+54 (341) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54342", + "+54 (342) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54343", + "+54 (343) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54351", + "+54 (351) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54376", + "+54 (376) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54379", + "+54 (379) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54381", + "+54 (381) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "543833", + "+54 (383) 3.. ...." + ], + [ + "ar", + "Argentina", + "54", + "54385", + "+54 (385) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54387", + "+54 (387) ... ...." + ], + [ + "ar", + "Argentina", + "54", + "54388", + "+54 (388) ... ...." + ], + [ + "am", + "Armenia", + "374", + "374", + "+374 (..) ... ..." + ], + [ + "aw", + "Aruba", + "297", + "297", + "+297 (...) ...." + ], + [ + "au", + "Australia", + "61", + "612", + "+61 (2) .... ...." + ], + [ + "au", + "Australia", + "61", + "613", + "+61 (3) .... ...." + ], + [ + "au", + "Australia", + "61", + "614", + "+61 (4) .... ...." + ], + [ + "au", + "Australia", + "61", + "617", + "+61 (7) .... ...." + ], + [ + "au", + "Australia", + "61", + "618", + "+61 (8) .... ...." + ], + [ + "au", + "Australia", + "61", + "6102", + "+61 (0) 2... ...." + ], + [ + "au", + "Australia", + "61", + "6103", + "+61 (0) 3... ...." + ], + [ + "au", + "Australia", + "61", + "6104", + "+61 (0) 4... ...." + ], + [ + "au", + "Australia", + "61", + "6107", + "+61 (0) 7... ...." + ], + [ + "au", + "Australia", + "61", + "6108", + "+61 (0) 8... ...." + ], + [ + "at", + "Austria", + "43", + "43", + "+43 (...) ... ...." + ], + [ + "az", + "Azerbaijan", + "994", + "994", + "+994 (..) ... .. .." + ], + [ + "bs", + "Bahamas", + "1242", + "1242", + "+1 (242) ...." + ], + [ + "bh", + "Bahrain", + "973", + "973", + "+973 (....) ...." + ], + [ + "bd", + "Bangladesh", + "880", + "880", + "+880 (..) ... ..." + ], + [ + "bb", + "Barbados", + "1246", + "1246", + "+1 (246) ...." + ], + [ + "by", + "Belarus", + "375", + "375", + "+375 (..) ... .. .." + ], + [ + "be", + "Belgium", + "32", + "32", + "+32 (...) ... ..." + ], + [ + "bz", + "Belize", + "501", + "501", + "+501 (...) ...." + ], + [ + "bj", + "Benin", + "229", + "229", + "+229 (..) .. ...." + ], + [ + "bm", + "Bermuda", + "1441", + "1441", + "+1 (441) ...." + ], + [ + "bt", + "Bhutan", + "975", + "975", + "+975 (.) ... ..." + ], + [ + "bo", + "Bolivia", + "591", + "591", + "+591 (.) ... ...." + ], + [ + "ba", + "Bosnia and Herzegovina", + "387", + "387", + "+387 (..) ....." + ], + [ + "bw", + "Botswana", + "267", + "267", + "+267 (..) ... ..." + ], + [ + "br", + "Brazil", + "55", + "55", + "+55 (..) .... ...." + ], + [ + "io", + "British Indian Ocean Territory", + "246", + "246", + "+246 (...) ...." + ], + [ + "vg", + "British Virgin Islands", + "1284", + "1284", + "+1 (284) ...." + ], + [ + "bn", + "Brunei", + "673", + "673", + "+673 (...) ...." + ], + [ + "bg", + "Bulgaria", + "359", + "359", + "+359 (...) ... ..." + ], + [ + "bf", + "Burkina Faso", + "226", + "226", + "+226 (..) .. ...." + ], + [ + "bi", + "Burundi", + "257", + "257", + "+257 (..) .. ...." + ], + [ + "kh", + "Cambodia", + "855", + "855", + "+855 (..) ... ..." + ], + [ + "cm", + "Cameroon", + "237", + "237", + "+237 (....) ...." + ], + [ + "ca", + "Canada", + "1204", + "1204", + "+1 (204) ... ...." + ], + [ + "ca", + "Canada", + "1226", + "1226", + "+1 (226) ... ...." + ], + [ + "ca", + "Canada", + "1236", + "1236", + "+1 (236) ... ...." + ], + [ + "ca", + "Canada", + "1249", + "1249", + "+1 (249) ... ...." + ], + [ + "ca", + "Canada", + "1250", + "1250", + "+1 (250) ... ...." + ], + [ + "ca", + "Canada", + "1289", + "1289", + "+1 (289) ... ...." + ], + [ + "ca", + "Canada", + "1306", + "1306", + "+1 (306) ... ...." + ], + [ + "ca", + "Canada", + "1343", + "1343", + "+1 (343) ... ...." + ], + [ + "ca", + "Canada", + "1365", + "1365", + "+1 (365) ... ...." + ], + [ + "ca", + "Canada", + "1387", + "1387", + "+1 (387) ... ...." + ], + [ + "ca", + "Canada", + "1403", + "1403", + "+1 (403) ... ...." + ], + [ + "ca", + "Canada", + "1416", + "1416", + "+1 (416) ... ...." + ], + [ + "ca", + "Canada", + "1418", + "1418", + "+1 (418) ... ...." + ], + [ + "ca", + "Canada", + "1431", + "1431", + "+1 (431) ... ...." + ], + [ + "ca", + "Canada", + "1437", + "1437", + "+1 (437) ... ...." + ], + [ + "ca", + "Canada", + "1438", + "1438", + "+1 (438) ... ...." + ], + [ + "ca", + "Canada", + "1450", + "1450", + "+1 (450) ... ...." + ], + [ + "ca", + "Canada", + "1506", + "1506", + "+1 (506) ... ...." + ], + [ + "ca", + "Canada", + "1514", + "1514", + "+1 (514) ... ...." + ], + [ + "ca", + "Canada", + "1519", + "1519", + "+1 (519) ... ...." + ], + [ + "ca", + "Canada", + "1548", + "1548", + "+1 (548) ... ...." + ], + [ + "ca", + "Canada", + "1579", + "1579", + "+1 (579) ... ...." + ], + [ + "ca", + "Canada", + "1581", + "1581", + "+1 (581) ... ...." + ], + [ + "ca", + "Canada", + "1587", + "1587", + "+1 (587) ... ...." + ], + [ + "ca", + "Canada", + "1604", + "1604", + "+1 (604) ... ...." + ], + [ + "ca", + "Canada", + "1613", + "1613", + "+1 (613) ... ...." + ], + [ + "ca", + "Canada", + "1639", + "1639", + "+1 (639) ... ...." + ], + [ + "ca", + "Canada", + "1647", + "1647", + "+1 (647) ... ...." + ], + [ + "ca", + "Canada", + "1672", + "1672", + "+1 (672) ... ...." + ], + [ + "ca", + "Canada", + "1705", + "1705", + "+1 (705) ... ...." + ], + [ + "ca", + "Canada", + "1709", + "1709", + "+1 (709) ... ...." + ], + [ + "ca", + "Canada", + "1742", + "1742", + "+1 (742) ... ...." + ], + [ + "ca", + "Canada", + "1778", + "1778", + "+1 (778) ... ...." + ], + [ + "ca", + "Canada", + "1780", + "1780", + "+1 (780) ... ...." + ], + [ + "ca", + "Canada", + "1782", + "1782", + "+1 (782) ... ...." + ], + [ + "ca", + "Canada", + "1807", + "1807", + "+1 (807) ... ...." + ], + [ + "ca", + "Canada", + "1819", + "1819", + "+1 (819) ... ...." + ], + [ + "ca", + "Canada", + "1825", + "1825", + "+1 (825) ... ...." + ], + [ + "ca", + "Canada", + "1867", + "1867", + "+1 (867) ... ...." + ], + [ + "ca", + "Canada", + "1873", + "1873", + "+1 (873) ... ...." + ], + [ + "ca", + "Canada", + "1902", + "1902", + "+1 (902) ... ...." + ], + [ + "ca", + "Canada", + "1905", + "1905", + "+1 (905) ... ...." + ], + [ + "cv", + "Cape Verde", + "238", + "238", + "+238 (...) .. .." + ], + [ + "bq", + "Caribbean Netherlands", + "599", + "599", + "+599 (...) .... ...." + ], + [ + "ky", + "Cayman Islands", + "1345", + "1345", + "+1 (345) ...." + ], + [ + "cf", + "Central African Republic", + "236", + "236", + "+236 (..) .. ...." + ], + [ + "td", + "Chad", + "235", + "235", + "+235 (..) .. .. .." + ], + [ + "cl", + "Chile", + "56", + "56", + "+56 (.) .... ...." + ], + [ + "cn", + "China", + "86", + "86", + "+86 (..) ..... ....." + ], + [ + "co", + "Colombia", + "57", + "57", + "+57 (...) ... ...." + ], + [ + "km", + "Comoros", + "269", + "269", + "+269 (..) ....." + ], + [ + "cd", + "Congo", + "243", + "243", + "+243 (...) ... ..." + ], + [ + "cg", + "Congo", + "242", + "242", + "+242 (..) ... ...." + ], + [ + "ck", + "Cook Islands", + "682", + "682", + "+682 (..) ..." + ], + [ + "cr", + "Costa Rica", + "506", + "506", + "+506 (....) ...." + ], + [ + "hr", + "Croatia", + "385", + "385", + "+385 (..) ... ..." + ], + [ + "cu", + "Cuba", + "53", + "53", + "+53 (.) ... ...." + ], + [ + "cw", + "Cura\u00e7ao", + "599", + "599", + "+599 (...) ...." + ], + [ + "cy", + "Cyprus", + "357", + "357", + "+357 (..) ... ..." + ], + [ + "cz", + "Czech Republic", + "420", + "420", + "+420 (...) ... ..." + ], + [ + "ci", + "C\u00f4te d\u2019Ivoire", + "225", + "225", + "+225 (..) ... ..." + ], + [ + "dk", + "Denmark", + "45", + "45", + "+45 (..) .. .. .." + ], + [ + "dj", + "Djibouti", + "253", + "253", + "+253 (..) .. .. .." + ], + [ + "dm", + "Dominica", + "1767", + "1767", + "+1 (767) ...." + ], + [ + "do", + "Dominican Republic", + "1809", + "1809", + "+1 (809) ...." + ], + [ + "do", + "Dominican Republic", + "1829", + "1829", + "+1 (829) ...." + ], + [ + "do", + "Dominican Republic", + "1849", + "1849", + "+1 (849) ...." + ], + [ + "ec", + "Ecuador", + "593", + "593", + "+593 (..) ... ...." + ], + [ + "eg", + "Egypt", + "20", + "20", + "+20 (...) ... ...." + ], + [ + "sv", + "El Salvador", + "503", + "503", + "+503 (..) .. ...." + ], + [ + "gq", + "Equatorial Guinea", + "240", + "240", + "+240 (..) ... ...." + ], + [ + "er", + "Eritrea", + "291", + "291", + "+291 (.) ... ..." + ], + [ + "ee", + "Estonia", + "372", + "372", + "+372 (....) ...." + ], + [ + "et", + "Ethiopia", + "251", + "251", + "+251 (..) ... ...." + ], + [ + "fk", + "Falkland Islands", + "500", + "500", + "+500 ....." + ], + [ + "fo", + "Faroe Islands", + "298", + "298", + "+298 (...) ..." + ], + [ + "fj", + "Fiji", + "679", + "679", + "+679 (..) ....." + ], + [ + "fi", + "Finland", + "358", + "358", + "+358 (...) ... .. .." + ], + [ + "fr", + "France", + "33", + "33", + "+33 (...) ... ...." + ], + [ + "gf", + "French Guiana", + "594", + "594", + "+594 (.....) ...." + ], + [ + "pf", + "French Polynesia", + "689", + "689", + "+689 (..) .. .." + ], + [ + "ga", + "Gabon", + "241", + "241", + "+241 (.) .. .. .." + ], + [ + "gm", + "Gambia", + "220", + "220", + "+220 (...) .. .." + ], + [ + "ge", + "Georgia", + "995", + "995", + "+995 (...) ... ..." + ], + [ + "de", + "Germany", + "49", + "49", + "+49 (....) ... ...." + ], + [ + "gh", + "Ghana", + "233", + "233", + "+233 (...) ... ..." + ], + [ + "gi", + "Gibraltar", + "350", + "350", + "+350 (...) ....." + ], + [ + "gr", + "Greece", + "30", + "30", + "+30 (...) ... ...." + ], + [ + "gl", + "Greenland", + "299", + "299", + "+299 (..) .. .." + ], + [ + "gd", + "Grenada", + "1473", + "1473", + "+1 (473) ...." + ], + [ + "gp", + "Guadeloupe", + "590", + "590", + "+590 (...) ... ...." + ], + [ + "gu", + "Guam", + "1671", + "1671", + "+1 (671) ...." + ], + [ + "gt", + "Guatemala", + "502", + "502", + "+502 (.) ... ...." + ], + [ + "gn", + "Guinea", + "224", + "224", + "+224 (..) ... ..." + ], + [ + "gw", + "Guinea-Bissau", + "245", + "245", + "+245 (.) ......" + ], + [ + "gy", + "Guyana", + "592", + "592", + "+592 (...) ...." + ], + [ + "ht", + "Haiti", + "509", + "509", + "+509 (..) .. ...." + ], + [ + "hn", + "Honduras", + "504", + "504", + "+504 (....) ...." + ], + [ + "hk", + "Hong Kong", + "852", + "852", + "+852 (....) ...." + ], + [ + "hu", + "Hungary", + "36", + "36", + "+36 (...) ... ..." + ], + [ + "is", + "Iceland", + "354", + "354", + "+354 (...) ...." + ], + [ + "in", + "India", + "91", + "91", + "+91 (....) ... ..." + ], + [ + "id", + "Indonesia", + "62", + "62", + "+62 (..) ... ...." + ], + [ + "ir", + "Iran", + "98", + "98", + "+98 (...) ... ...." + ], + [ + "iq", + "Iraq", + "964", + "964", + "+964 (...) ... ...." + ], + [ + "ie", + "Ireland", + "353", + "353", + "+353 (...) ... ..." + ], + [ + "il", + "Israel", + "972", + "972", + "+972 (..) ... ...." + ], + [ + "it", + "Italy", + "39", + "39", + "+39 (...) .... ..." + ], + [ + "jm", + "Jamaica", + "1876", + "1876", + "+1 (876) ...." + ], + [ + "jp", + "Japan", + "81", + "81", + "+81 (..) .... ...." + ], + [ + "je", + "Jersey", + "44", + "44", + "+44 (..) .... ...." + ], + [ + "jo", + "Jordan", + "962", + "962", + "+962 (.) .... ...." + ], + [ + "kz", + "Kazakhstan", + "7310", + "7310", + "+7 (310) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7311", + "7311", + "+7 (311) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7312", + "7312", + "+7 (312) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7313", + "7313", + "+7 (313) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7315", + "7315", + "+7 (315) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7318", + "7318", + "+7 (318) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7321", + "7321", + "+7 (321) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7324", + "7324", + "+7 (324) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7325", + "7325", + "+7 (325) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7326", + "7326", + "+7 (326) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7327", + "7327", + "+7 (327) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "7336", + "7336", + "+7 (336) ... .. .." + ], + [ + "kz", + "Kazakhstan", + "77172", + "77172", + "+7 (717) 2.. .. .." + ], + [ + "kz", + "Kazakhstan", + "773622", + "773622", + "+7 (736) 22. .. .." + ], + [ + "ke", + "Kenya", + "254", + "254", + "+254 (...) ......" + ], + [ + "ki", + "Kiribati", + "686", + "686", + "+686 (..) ..." + ], + [ + "xk", + "Kosovo", + "383", + "383", + "+383 (...) .... ...." + ], + [ + "kw", + "Kuwait", + "965", + "965", + "+965 (....) ...." + ], + [ + "kg", + "Kyrgyzstan", + "996", + "996", + "+996 (...) ... ..." + ], + [ + "la", + "Laos", + "856", + "856", + "+856 (..) ... ..." + ], + [ + "lv", + "Latvia", + "371", + "371", + "+371 (..) ... ..." + ], + [ + "lb", + "Lebanon", + "961", + "961", + "+961 (..) ... ..." + ], + [ + "ls", + "Lesotho", + "266", + "266", + "+266 (.) ... ...." + ], + [ + "lr", + "Liberia", + "231", + "231", + "+231 (..) ... ..." + ], + [ + "ly", + "Libya", + "218", + "218", + "+218 (..) ... ...." + ], + [ + "li", + "Liechtenstein", + "423", + "423", + "+423 (...) ... ...." + ], + [ + "lt", + "Lithuania", + "370", + "370", + "+370 (...) .. ..." + ], + [ + "lu", + "Luxembourg", + "352", + "352", + "+352 (...) ... ..." + ], + [ + "mo", + "Macau", + "853", + "853", + "+853 (....) ...." + ], + [ + "mk", + "Macedonia", + "389", + "389", + "+389 (..) ... ..." + ], + [ + "mg", + "Madagascar", + "261", + "261", + "+261 (..) .. ....." + ], + [ + "mw", + "Malawi", + "265", + "265", + "+265 (.) .... ...." + ], + [ + "my", + "Malaysia", + "60", + "60", + "+60 (...) ... ...." + ], + [ + "mv", + "Maldives", + "960", + "960", + "+960 (...) ...." + ], + [ + "ml", + "Mali", + "223", + "223", + "+223 (..) .. ...." + ], + [ + "mt", + "Malta", + "356", + "356", + "+356 (....) ...." + ], + [ + "mh", + "Marshall Islands", + "692", + "692", + "+692 (...) ...." + ], + [ + "mq", + "Martinique", + "596", + "596", + "+596 (...) .. .. .." + ], + [ + "mr", + "Mauritania", + "222", + "222", + "+222 (..) .. ...." + ], + [ + "mu", + "Mauritius", + "230", + "230", + "+230 (...) ...." + ], + [ + "mx", + "Mexico", + "52", + "5255", + "+52 (55.) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "5281", + "+52 (81.) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "5233", + "+52 (33.) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "52656", + "+52 (656) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "52664", + "+52 (664) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "52998", + "+52 (998) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "52774", + "+52 (774) ... ...." + ], + [ + "mx", + "Mexico", + "52", + "52229", + "+52 (229) ... ...." + ], + [ + "fm", + "Micronesia", + "691", + "691", + "+691 (...) ...." + ], + [ + "md", + "Moldova", + "373", + "373", + "+373 (....) ...." + ], + [ + "mc", + "Monaco", + "377", + "377", + "+377 (...) ... ..." + ], + [ + "mn", + "Mongolia", + "976", + "976", + "+976 (..) .. ...." + ], + [ + "me", + "Montenegro", + "382", + "382", + "+382 (..) ... ..." + ], + [ + "ms", + "Montserrat", + "1664", + "1664", + "+1 (664) ...." + ], + [ + "ma", + "Morocco", + "212", + "212", + "+212 (..) .... ..." + ], + [ + "mz", + "Mozambique", + "258", + "258", + "+258 (..) ... ...." + ], + [ + "mm", + "Myanmar", + "95", + "95", + "+95 (..) ... ..." + ], + [ + "na", + "Namibia", + "264", + "264", + "+264 (..) ... ...." + ], + [ + "nr", + "Nauru", + "674", + "674", + "+674 (...) ...." + ], + [ + "np", + "Nepal", + "977", + "977", + "+977 (..) ... ..." + ], + [ + "nl", + "Netherlands", + "31", + "31", + "+31 (..) ... ...." + ], + [ + "nc", + "New Caledonia", + "687", + "687", + "+687 (..) ...." + ], + [ + "nz", + "New Zealand", + "64", + "64", + "+64 (...) ... ...." + ], + [ + "ni", + "Nicaragua", + "505", + "505", + "+505 (....) ...." + ], + [ + "ne", + "Niger", + "227", + "227", + "+227 (..) .. ...." + ], + [ + "ng", + "Nigeria", + "234", + "234", + "+234 (...) ... ...." + ], + [ + "nu", + "Niue", + "683", + "683", + "+683 ...." + ], + [ + "nf", + "Norfolk Island", + "672", + "672", + "+672 (..) ..." + ], + [ + "kp", + "North Korea", + "850", + "850", + "+850 (...) .... ........" + ], + [ + "mp", + "Northern Mariana Islands", + "1670", + "1670", + "+1 (670) ...." + ], + [ + "no", + "Norway", + "47", + "47", + "+47 (...) .. ..." + ], + [ + "om", + "Oman", + "968", + "968", + "+968 (..) ... ..." + ], + [ + "pk", + "Pakistan", + "92", + "92", + "+92 (...) ... ...." + ], + [ + "pw", + "Palau", + "680", + "680", + "+680 (...) ...." + ], + [ + "ps", + "Palestine", + "970", + "970", + "+970 (..) ... ...." + ], + [ + "pa", + "Panama", + "507", + "507", + "+507 (...) ...." + ], + [ + "pg", + "Papua New Guinea", + "675", + "675", + "+675 (...) .. ..." + ], + [ + "py", + "Paraguay", + "595", + "595", + "+595 (...) ... ..." + ], + [ + "pe", + "Peru", + "51", + "51", + "+51 (...) ... ..." + ], + [ + "ph", + "Philippines", + "63", + "63", + "+63 (...) ... ...." + ], + [ + "pl", + "Poland", + "48", + "48", + "+48 (...) ... ..." + ], + [ + "pt", + "Portugal", + "351", + "351", + "+351 (..) ... ...." + ], + [ + "pr", + "Puerto Rico", + "1787", + "1787", + "+1 (787) ... ...." + ], + [ + "pr", + "Puerto Rico", + "1939", + "1939", + "+1 (939) ... ...." + ], + [ + "qa", + "Qatar", + "974", + "974", + "+974 (....) ...." + ], + [ + "ro", + "Romania", + "40", + "40", + "+40 (..) ... ...." + ], + [ + "ru", + "Russia", + "7", + "7", + "+7 (...) ... .. .." + ], + [ + "rw", + "Rwanda", + "250", + "250", + "+250 (...) ... ..." + ], + [ + "re", + "R\u00e9union", + "262", + "262", + "+262 (.....) ...." + ], + [ + "kn", + "Saint Kitts and Nevis", + "1869", + "1869", + "+1 (869) ...." + ], + [ + "lc", + "Saint Lucia", + "1758", + "1758", + "+1 (758) ...." + ], + [ + "vc", + "Saint Vincent and the Grenadines", + "1784", + "1784", + "+1 (784) ...." + ], + [ + "ws", + "Samoa", + "685", + "685", + "+685 (..) ...." + ], + [ + "sm", + "San Marino", + "378", + "378", + "+378 (....) ......" + ], + [ + "sa", + "Saudi Arabia", + "966", + "966", + "+966 (.) .... ...." + ], + [ + "sn", + "Senegal", + "221", + "221", + "+221 (..) ... ...." + ], + [ + "rs", + "Serbia", + "381", + "381", + "+381 (..) ... ...." + ], + [ + "sc", + "Seychelles", + "248", + "248", + "+248 (.) ... ..." + ], + [ + "sl", + "Sierra Leone", + "232", + "232", + "+232 (..) ......" + ], + [ + "sg", + "Singapore", + "65", + "65", + "+65 (....) ...." + ], + [ + "sx", + "Sint Maarten", + "1721", + "1721", + "+1 (721) ...." + ], + [ + "sk", + "Slovakia", + "421", + "421", + "+421 (...) ... ..." + ], + [ + "si", + "Slovenia", + "386", + "386", + "+386 (..) ... ..." + ], + [ + "sb", + "Solomon Islands", + "677", + "677", + "+677 (...) ...." + ], + [ + "so", + "Somalia", + "252", + "252", + "+252 (..) ... ..." + ], + [ + "za", + "South Africa", + "27", + "27", + "+27 (..) ... ...." + ], + [ + "kr", + "South Korea", + "82", + "82", + "+82 (..) .... ....." + ], + [ + "ss", + "South Sudan", + "211", + "211", + "+211 (..) ... ...." + ], + [ + "es", + "Spain", + "34", + "34", + "+34 (...) ... ..." + ], + [ + "lk", + "Sri Lanka", + "94", + "94", + "+94 (..) ... ...." + ], + [ + "sh", + "St. Helena", + "290", + "290", + "+290 ...." + ], + [ + "pm", + "St. Pierre & Miquelon", + "508", + "508", + "+508 (...) ... ..." + ], + [ + "sd", + "Sudan", + "249", + "249", + "+249 (..) ... ...." + ], + [ + "sr", + "Suriname", + "597", + "597", + "+597 (...) ...." + ], + [ + "sz", + "Swaziland", + "268", + "268", + "+268 (..) .. ...." + ], + [ + "se", + "Sweden", + "46", + "46", + "+46 (..) ... ...." + ], + [ + "ch", + "Switzerland", + "41", + "41", + "+41 (..) ... ...." + ], + [ + "sy", + "Syria", + "963", + "963", + "+963 (..) .... ..." + ], + [ + "st", + "S\u00e3o Tom\u00e9 and Pr\u00edncipe", + "239", + "239", + "+239 (..) ....." + ], + [ + "tw", + "Taiwan", + "886", + "886", + "+886 (.) .... ...." + ], + [ + "tj", + "Tajikistan", + "992", + "992", + "+992 (..) ... ...." + ], + [ + "tz", + "Tanzania", + "255", + "255", + "+255 (..) ... ...." + ], + [ + "th", + "Thailand", + "66", + "66", + "+66 (..) ... ...." + ], + [ + "tl", + "Timor-Leste", + "670", + "670", + "+670 (...) ....." + ], + [ + "tg", + "Togo", + "228", + "228", + "+228 (..) ... ..." + ], + [ + "tk", + "Tokelau", + "690", + "690", + "+690 ...." + ], + [ + "to", + "Tonga", + "676", + "676", + "+676 ....." + ], + [ + "tt", + "Trinidad and Tobago", + "1868", + "1868", + "+1 (868) ...." + ], + [ + "tn", + "Tunisia", + "216", + "216", + "+216 (..) ... ..." + ], + [ + "tr", + "Turkey", + "90", + "90", + "+90 (...) ... ...." + ], + [ + "tm", + "Turkmenistan", + "993", + "993", + "+993 (.) ... ...." + ], + [ + "tc", + "Turks & Caicos Islands", + "1649", + "1649", + "+1 (649) ...." + ], + [ + "tv", + "Tuvalu", + "688", + "688", + "+688 ......" + ], + [ + "vi", + "U.S. Virgin Islands", + "1340", + "1340", + "+1 (340) ...." + ], + [ + "ug", + "Uganda", + "256", + "256", + "+256 (...) ... ..." + ], + [ + "ua", + "Ukraine", + "380", + "380", + "+380 (..) ... .. .." + ], + [ + "ae", + "United Arab Emirates", + "971", + "971", + "+971 (..) ... ...." + ], + [ + "gb", + "United Kingdom", + "44", + "44", + "+44 (..) .... ...." + ], + [ + "us", + "United States", + "1", + "1907", + "+1 (907) ... ...." + ], + [ + "us", + "United States", + "1", + "1205", + "+1 (205) ... ...." + ], + [ + "us", + "United States", + "1", + "1251", + "+1 (251) ... ...." + ], + [ + "us", + "United States", + "1", + "1256", + "+1 (256) ... ...." + ], + [ + "us", + "United States", + "1", + "1334", + "+1 (334) ... ...." + ], + [ + "us", + "United States", + "1", + "1479", + "+1 (479) ... ...." + ], + [ + "us", + "United States", + "1", + "1501", + "+1 (501) ... ...." + ], + [ + "us", + "United States", + "1", + "1870", + "+1 (870) ... ...." + ], + [ + "us", + "United States", + "1", + "1480", + "+1 (480) ... ...." + ], + [ + "us", + "United States", + "1", + "1520", + "+1 (520) ... ...." + ], + [ + "us", + "United States", + "1", + "1602", + "+1 (602) ... ...." + ], + [ + "us", + "United States", + "1", + "1623", + "+1 (623) ... ...." + ], + [ + "us", + "United States", + "1", + "1928", + "+1 (928) ... ...." + ], + [ + "us", + "United States", + "1", + "1209", + "+1 (209) ... ...." + ], + [ + "us", + "United States", + "1", + "1213", + "+1 (213) ... ...." + ], + [ + "us", + "United States", + "1", + "1310", + "+1 (310) ... ...." + ], + [ + "us", + "United States", + "1", + "1323", + "+1 (323) ... ...." + ], + [ + "us", + "United States", + "1", + "1408", + "+1 (408) ... ...." + ], + [ + "us", + "United States", + "1", + "1415", + "+1 (415) ... ...." + ], + [ + "us", + "United States", + "1", + "1510", + "+1 (510) ... ...." + ], + [ + "us", + "United States", + "1", + "1530", + "+1 (530) ... ...." + ], + [ + "us", + "United States", + "1", + "1559", + "+1 (559) ... ...." + ], + [ + "us", + "United States", + "1", + "1562", + "+1 (562) ... ...." + ], + [ + "us", + "United States", + "1", + "1619", + "+1 (619) ... ...." + ], + [ + "us", + "United States", + "1", + "1626", + "+1 (626) ... ...." + ], + [ + "us", + "United States", + "1", + "1650", + "+1 (650) ... ...." + ], + [ + "us", + "United States", + "1", + "1661", + "+1 (661) ... ...." + ], + [ + "us", + "United States", + "1", + "1707", + "+1 (707) ... ...." + ], + [ + "us", + "United States", + "1", + "1714", + "+1 (714) ... ...." + ], + [ + "us", + "United States", + "1", + "1760", + "+1 (760) ... ...." + ], + [ + "us", + "United States", + "1", + "1805", + "+1 (805) ... ...." + ], + [ + "us", + "United States", + "1", + "1818", + "+1 (818) ... ...." + ], + [ + "us", + "United States", + "1", + "1831", + "+1 (831) ... ...." + ], + [ + "us", + "United States", + "1", + "1858", + "+1 (858) ... ...." + ], + [ + "us", + "United States", + "1", + "1909", + "+1 (909) ... ...." + ], + [ + "us", + "United States", + "1", + "1916", + "+1 (916) ... ...." + ], + [ + "us", + "United States", + "1", + "1925", + "+1 (925) ... ...." + ], + [ + "us", + "United States", + "1", + "1949", + "+1 (949) ... ...." + ], + [ + "us", + "United States", + "1", + "1951", + "+1 (951) ... ...." + ], + [ + "us", + "United States", + "1", + "1303", + "+1 (303) ... ...." + ], + [ + "us", + "United States", + "1", + "1719", + "+1 (719) ... ...." + ], + [ + "us", + "United States", + "1", + "1970", + "+1 (970) ... ...." + ], + [ + "us", + "United States", + "1", + "1203", + "+1 (203) ... ...." + ], + [ + "us", + "United States", + "1", + "1860", + "+1 (860) ... ...." + ], + [ + "us", + "United States", + "1", + "1202", + "+1 (202) ... ...." + ], + [ + "us", + "United States", + "1", + "1302", + "+1 (302) ... ...." + ], + [ + "us", + "United States", + "1", + "1239", + "+1 (239) ... ...." + ], + [ + "us", + "United States", + "1", + "1305", + "+1 (305) ... ...." + ], + [ + "us", + "United States", + "1", + "1321", + "+1 (321) ... ...." + ], + [ + "us", + "United States", + "1", + "1352", + "+1 (352) ... ...." + ], + [ + "us", + "United States", + "1", + "1386", + "+1 (386) ... ...." + ], + [ + "us", + "United States", + "1", + "1407", + "+1 (407) ... ...." + ], + [ + "us", + "United States", + "1", + "1561", + "+1 (561) ... ...." + ], + [ + "us", + "United States", + "1", + "1727", + "+1 (727) ... ...." + ], + [ + "us", + "United States", + "1", + "1772", + "+1 (772) ... ...." + ], + [ + "us", + "United States", + "1", + "1813", + "+1 (813) ... ...." + ], + [ + "us", + "United States", + "1", + "1850", + "+1 (850) ... ...." + ], + [ + "us", + "United States", + "1", + "1863", + "+1 (863) ... ...." + ], + [ + "us", + "United States", + "1", + "1904", + "+1 (904) ... ...." + ], + [ + "us", + "United States", + "1", + "1941", + "+1 (941) ... ...." + ], + [ + "us", + "United States", + "1", + "1954", + "+1 (954) ... ...." + ], + [ + "us", + "United States", + "1", + "1229", + "+1 (229) ... ...." + ], + [ + "us", + "United States", + "1", + "1404", + "+1 (404) ... ...." + ], + [ + "us", + "United States", + "1", + "1478", + "+1 (478) ... ...." + ], + [ + "us", + "United States", + "1", + "1706", + "+1 (706) ... ...." + ], + [ + "us", + "United States", + "1", + "1770", + "+1 (770) ... ...." + ], + [ + "us", + "United States", + "1", + "1912", + "+1 (912) ... ...." + ], + [ + "us", + "United States", + "1", + "1808", + "+1 (808) ... ...." + ], + [ + "us", + "United States", + "1", + "1319", + "+1 (319) ... ...." + ], + [ + "us", + "United States", + "1", + "1515", + "+1 (515) ... ...." + ], + [ + "us", + "United States", + "1", + "1563", + "+1 (563) ... ...." + ], + [ + "us", + "United States", + "1", + "1641", + "+1 (641) ... ...." + ], + [ + "us", + "United States", + "1", + "1712", + "+1 (712) ... ...." + ], + [ + "us", + "United States", + "1", + "1208", + "+1 (208) ... ...." + ], + [ + "us", + "United States", + "1", + "1217", + "+1 (217) ... ...." + ], + [ + "us", + "United States", + "1", + "1309", + "+1 (309) ... ...." + ], + [ + "us", + "United States", + "1", + "1312", + "+1 (312) ... ...." + ], + [ + "us", + "United States", + "1", + "1618", + "+1 (618) ... ...." + ], + [ + "us", + "United States", + "1", + "1630", + "+1 (630) ... ...." + ], + [ + "us", + "United States", + "1", + "1708", + "+1 (708) ... ...." + ], + [ + "us", + "United States", + "1", + "1773", + "+1 (773) ... ...." + ], + [ + "us", + "United States", + "1", + "1815", + "+1 (815) ... ...." + ], + [ + "us", + "United States", + "1", + "1847", + "+1 (847) ... ...." + ], + [ + "us", + "United States", + "1", + "1219", + "+1 (219) ... ...." + ], + [ + "us", + "United States", + "1", + "1260", + "+1 (260) ... ...." + ], + [ + "us", + "United States", + "1", + "1317", + "+1 (317) ... ...." + ], + [ + "us", + "United States", + "1", + "1574", + "+1 (574) ... ...." + ], + [ + "us", + "United States", + "1", + "1765", + "+1 (765) ... ...." + ], + [ + "us", + "United States", + "1", + "1812", + "+1 (812) ... ...." + ], + [ + "us", + "United States", + "1", + "1316", + "+1 (316) ... ...." + ], + [ + "us", + "United States", + "1", + "1620", + "+1 (620) ... ...." + ], + [ + "us", + "United States", + "1", + "1785", + "+1 (785) ... ...." + ], + [ + "us", + "United States", + "1", + "1913", + "+1 (913) ... ...." + ], + [ + "us", + "United States", + "1", + "1270", + "+1 (270) ... ...." + ], + [ + "us", + "United States", + "1", + "1502", + "+1 (502) ... ...." + ], + [ + "us", + "United States", + "1", + "1606", + "+1 (606) ... ...." + ], + [ + "us", + "United States", + "1", + "1859", + "+1 (859) ... ...." + ], + [ + "us", + "United States", + "1", + "1225", + "+1 (225) ... ...." + ], + [ + "us", + "United States", + "1", + "1318", + "+1 (318) ... ...." + ], + [ + "us", + "United States", + "1", + "1337", + "+1 (337) ... ...." + ], + [ + "us", + "United States", + "1", + "1504", + "+1 (504) ... ...." + ], + [ + "us", + "United States", + "1", + "1985", + "+1 (985) ... ...." + ], + [ + "us", + "United States", + "1", + "1413", + "+1 (413) ... ...." + ], + [ + "us", + "United States", + "1", + "1508", + "+1 (508) ... ...." + ], + [ + "us", + "United States", + "1", + "1617", + "+1 (617) ... ...." + ], + [ + "us", + "United States", + "1", + "1781", + "+1 (781) ... ...." + ], + [ + "us", + "United States", + "1", + "1978", + "+1 (978) ... ...." + ], + [ + "us", + "United States", + "1", + "1301", + "+1 (301) ... ...." + ], + [ + "us", + "United States", + "1", + "1410", + "+1 (410) ... ...." + ], + [ + "us", + "United States", + "1", + "1207", + "+1 (207) ... ...." + ], + [ + "us", + "United States", + "1", + "1231", + "+1 (231) ... ...." + ], + [ + "us", + "United States", + "1", + "1248", + "+1 (248) ... ...." + ], + [ + "us", + "United States", + "1", + "1269", + "+1 (269) ... ...." + ], + [ + "us", + "United States", + "1", + "1313", + "+1 (313) ... ...." + ], + [ + "us", + "United States", + "1", + "1517", + "+1 (517) ... ...." + ], + [ + "us", + "United States", + "1", + "1586", + "+1 (586) ... ...." + ], + [ + "us", + "United States", + "1", + "1616", + "+1 (616) ... ...." + ], + [ + "us", + "United States", + "1", + "1734", + "+1 (734) ... ...." + ], + [ + "us", + "United States", + "1", + "1810", + "+1 (810) ... ...." + ], + [ + "us", + "United States", + "1", + "1906", + "+1 (906) ... ...." + ], + [ + "us", + "United States", + "1", + "1989", + "+1 (989) ... ...." + ], + [ + "us", + "United States", + "1", + "1218", + "+1 (218) ... ...." + ], + [ + "us", + "United States", + "1", + "1320", + "+1 (320) ... ...." + ], + [ + "us", + "United States", + "1", + "1507", + "+1 (507) ... ...." + ], + [ + "us", + "United States", + "1", + "1612", + "+1 (612) ... ...." + ], + [ + "us", + "United States", + "1", + "1651", + "+1 (651) ... ...." + ], + [ + "us", + "United States", + "1", + "1763", + "+1 (763) ... ...." + ], + [ + "us", + "United States", + "1", + "1952", + "+1 (952) ... ...." + ], + [ + "us", + "United States", + "1", + "1314", + "+1 (314) ... ...." + ], + [ + "us", + "United States", + "1", + "1417", + "+1 (417) ... ...." + ], + [ + "us", + "United States", + "1", + "1573", + "+1 (573) ... ...." + ], + [ + "us", + "United States", + "1", + "1636", + "+1 (636) ... ...." + ], + [ + "us", + "United States", + "1", + "1660", + "+1 (660) ... ...." + ], + [ + "us", + "United States", + "1", + "1816", + "+1 (816) ... ...." + ], + [ + "us", + "United States", + "1", + "1228", + "+1 (228) ... ...." + ], + [ + "us", + "United States", + "1", + "1601", + "+1 (601) ... ...." + ], + [ + "us", + "United States", + "1", + "1662", + "+1 (662) ... ...." + ], + [ + "us", + "United States", + "1", + "1406", + "+1 (406) ... ...." + ], + [ + "us", + "United States", + "1", + "1252", + "+1 (252) ... ...." + ], + [ + "us", + "United States", + "1", + "1336", + "+1 (336) ... ...." + ], + [ + "us", + "United States", + "1", + "1704", + "+1 (704) ... ...." + ], + [ + "us", + "United States", + "1", + "1828", + "+1 (828) ... ...." + ], + [ + "us", + "United States", + "1", + "1910", + "+1 (910) ... ...." + ], + [ + "us", + "United States", + "1", + "1919", + "+1 (919) ... ...." + ], + [ + "us", + "United States", + "1", + "1701", + "+1 (701) ... ...." + ], + [ + "us", + "United States", + "1", + "1308", + "+1 (308) ... ...." + ], + [ + "us", + "United States", + "1", + "1402", + "+1 (402) ... ...." + ], + [ + "us", + "United States", + "1", + "1603", + "+1 (603) ... ...." + ], + [ + "us", + "United States", + "1", + "1201", + "+1 (201) ... ...." + ], + [ + "us", + "United States", + "1", + "1609", + "+1 (609) ... ...." + ], + [ + "us", + "United States", + "1", + "1732", + "+1 (732) ... ...." + ], + [ + "us", + "United States", + "1", + "1856", + "+1 (856) ... ...." + ], + [ + "us", + "United States", + "1", + "1908", + "+1 (908) ... ...." + ], + [ + "us", + "United States", + "1", + "1973", + "+1 (973) ... ...." + ], + [ + "us", + "United States", + "1", + "1505", + "+1 (505) ... ...." + ], + [ + "us", + "United States", + "1", + "1575", + "+1 (575) ... ...." + ], + [ + "us", + "United States", + "1", + "1702", + "+1 (702) ... ...." + ], + [ + "us", + "United States", + "1", + "1775", + "+1 (775) ... ...." + ], + [ + "us", + "United States", + "1", + "1212", + "+1 (212) ... ...." + ], + [ + "us", + "United States", + "1", + "1315", + "+1 (315) ... ...." + ], + [ + "us", + "United States", + "1", + "1516", + "+1 (516) ... ...." + ], + [ + "us", + "United States", + "1", + "1518", + "+1 (518) ... ...." + ], + [ + "us", + "United States", + "1", + "1585", + "+1 (585) ... ...." + ], + [ + "us", + "United States", + "1", + "1607", + "+1 (607) ... ...." + ], + [ + "us", + "United States", + "1", + "1631", + "+1 (631) ... ...." + ], + [ + "us", + "United States", + "1", + "1716", + "+1 (716) ... ...." + ], + [ + "us", + "United States", + "1", + "1718", + "+1 (718) ... ...." + ], + [ + "us", + "United States", + "1", + "1845", + "+1 (845) ... ...." + ], + [ + "us", + "United States", + "1", + "1914", + "+1 (914) ... ...." + ], + [ + "us", + "United States", + "1", + "1216", + "+1 (216) ... ...." + ], + [ + "us", + "United States", + "1", + "1330", + "+1 (330) ... ...." + ], + [ + "us", + "United States", + "1", + "1419", + "+1 (419) ... ...." + ], + [ + "us", + "United States", + "1", + "1440", + "+1 (440) ... ...." + ], + [ + "us", + "United States", + "1", + "1513", + "+1 (513) ... ...." + ], + [ + "us", + "United States", + "1", + "1614", + "+1 (614) ... ...." + ], + [ + "us", + "United States", + "1", + "1740", + "+1 (740) ... ...." + ], + [ + "us", + "United States", + "1", + "1937", + "+1 (937) ... ...." + ], + [ + "us", + "United States", + "1", + "1405", + "+1 (405) ... ...." + ], + [ + "us", + "United States", + "1", + "1580", + "+1 (580) ... ...." + ], + [ + "us", + "United States", + "1", + "1918", + "+1 (918) ... ...." + ], + [ + "us", + "United States", + "1", + "1503", + "+1 (503) ... ...." + ], + [ + "us", + "United States", + "1", + "1541", + "+1 (541) ... ...." + ], + [ + "us", + "United States", + "1", + "1215", + "+1 (215) ... ...." + ], + [ + "us", + "United States", + "1", + "1412", + "+1 (412) ... ...." + ], + [ + "us", + "United States", + "1", + "1570", + "+1 (570) ... ...." + ], + [ + "us", + "United States", + "1", + "1610", + "+1 (610) ... ...." + ], + [ + "us", + "United States", + "1", + "1717", + "+1 (717) ... ...." + ], + [ + "us", + "United States", + "1", + "1724", + "+1 (724) ... ...." + ], + [ + "us", + "United States", + "1", + "1814", + "+1 (814) ... ...." + ], + [ + "us", + "United States", + "1", + "1401", + "+1 (401) ... ...." + ], + [ + "us", + "United States", + "1", + "1803", + "+1 (803) ... ...." + ], + [ + "us", + "United States", + "1", + "1843", + "+1 (843) ... ...." + ], + [ + "us", + "United States", + "1", + "1864", + "+1 (864) ... ...." + ], + [ + "us", + "United States", + "1", + "1605", + "+1 (605) ... ...." + ], + [ + "us", + "United States", + "1", + "1423", + "+1 (423) ... ...." + ], + [ + "us", + "United States", + "1", + "1615", + "+1 (615) ... ...." + ], + [ + "us", + "United States", + "1", + "1731", + "+1 (731) ... ...." + ], + [ + "us", + "United States", + "1", + "1865", + "+1 (865) ... ...." + ], + [ + "us", + "United States", + "1", + "1901", + "+1 (901) ... ...." + ], + [ + "us", + "United States", + "1", + "1931", + "+1 (931) ... ...." + ], + [ + "us", + "United States", + "1", + "1210", + "+1 (210) ... ...." + ], + [ + "us", + "United States", + "1", + "1214", + "+1 (214) ... ...." + ], + [ + "us", + "United States", + "1", + "1254", + "+1 (254) ... ...." + ], + [ + "us", + "United States", + "1", + "1281", + "+1 (281) ... ...." + ], + [ + "us", + "United States", + "1", + "1325", + "+1 (325) ... ...." + ], + [ + "us", + "United States", + "1", + "1361", + "+1 (361) ... ...." + ], + [ + "us", + "United States", + "1", + "1409", + "+1 (409) ... ...." + ], + [ + "us", + "United States", + "1", + "1432", + "+1 (432) ... ...." + ], + [ + "us", + "United States", + "1", + "1512", + "+1 (512) ... ...." + ], + [ + "us", + "United States", + "1", + "1713", + "+1 (713) ... ...." + ], + [ + "us", + "United States", + "1", + "1806", + "+1 (806) ... ...." + ], + [ + "us", + "United States", + "1", + "1817", + "+1 (817) ... ...." + ], + [ + "us", + "United States", + "1", + "1830", + "+1 (830) ... ...." + ], + [ + "us", + "United States", + "1", + "1903", + "+1 (903) ... ...." + ], + [ + "us", + "United States", + "1", + "1915", + "+1 (915) ... ...." + ], + [ + "us", + "United States", + "1", + "1936", + "+1 (936) ... ...." + ], + [ + "us", + "United States", + "1", + "1940", + "+1 (940) ... ...." + ], + [ + "us", + "United States", + "1", + "1956", + "+1 (956) ... ...." + ], + [ + "us", + "United States", + "1", + "1972", + "+1 (972) ... ...." + ], + [ + "us", + "United States", + "1", + "1979", + "+1 (979) ... ...." + ], + [ + "us", + "United States", + "1", + "1435", + "+1 (435) ... ...." + ], + [ + "us", + "United States", + "1", + "1801", + "+1 (801) ... ...." + ], + [ + "us", + "United States", + "1", + "1276", + "+1 (276) ... ...." + ], + [ + "us", + "United States", + "1", + "1434", + "+1 (434) ... ...." + ], + [ + "us", + "United States", + "1", + "1540", + "+1 (540) ... ...." + ], + [ + "us", + "United States", + "1", + "1703", + "+1 (703) ... ...." + ], + [ + "us", + "United States", + "1", + "1757", + "+1 (757) ... ...." + ], + [ + "us", + "United States", + "1", + "1804", + "+1 (804) ... ...." + ], + [ + "us", + "United States", + "1", + "1802", + "+1 (802) ... ...." + ], + [ + "us", + "United States", + "1", + "1206", + "+1 (206) ... ...." + ], + [ + "us", + "United States", + "1", + "1253", + "+1 (253) ... ...." + ], + [ + "us", + "United States", + "1", + "1360", + "+1 (360) ... ...." + ], + [ + "us", + "United States", + "1", + "1425", + "+1 (425) ... ...." + ], + [ + "us", + "United States", + "1", + "1509", + "+1 (509) ... ...." + ], + [ + "us", + "United States", + "1", + "1262", + "+1 (262) ... ...." + ], + [ + "us", + "United States", + "1", + "1414", + "+1 (414) ... ...." + ], + [ + "us", + "United States", + "1", + "1608", + "+1 (608) ... ...." + ], + [ + "us", + "United States", + "1", + "1715", + "+1 (715) ... ...." + ], + [ + "us", + "United States", + "1", + "1920", + "+1 (920) ... ...." + ], + [ + "us", + "United States", + "1", + "1304", + "+1 (304) ... ...." + ], + [ + "us", + "United States", + "1", + "1307", + "+1 (307) ... ...." + ], + [ + "uy", + "Uruguay", + "598", + "598", + "+598 (.) ... .. .." + ], + [ + "uz", + "Uzbekistan", + "998", + "998", + "+998 (..) ... ...." + ], + [ + "vu", + "Vanuatu", + "678", + "678", + "+678 (..) ....." + ], + [ + "va", + "Vatican City", + "39", + "39", + "+39 (.) ... ....." + ], + [ + "ve", + "Venezuela", + "58", + "58", + "+58 (...) ... ...." + ], + [ + "vn", + "Vietnam", + "84", + "84", + "+84 (...) .... ..." + ], + [ + "wf", + "Wallis & Futuna", + "681", + "681", + "+681 (..) ...." + ], + [ + "ye", + "Yemen", + "967", + "967", + "+967 (...) ... ..." + ], + [ + "zm", + "Zambia", + "260", + "260", + "+260 (..) ... ...." + ], + [ + "zw", + "Zimbabwe", + "263", + "263", + "+263 (.) ......" + ] +] \ No newline at end of file diff --git a/src/metadata/timezones.json b/src/metadata/timezones.json new file mode 100644 index 0000000..a9d6f72 --- /dev/null +++ b/src/metadata/timezones.json @@ -0,0 +1,444 @@ +{ + "Africa/Abidjan": "ci", + "Africa/Accra": "gh", + "Africa/Addis_Ababa": "et", + "Africa/Algiers": "dz", + "Africa/Asmara": "er", + "Africa/Asmera": "er", + "Africa/Bamako": "ml", + "Africa/Bangui": "cf", + "Africa/Banjul": "gm", + "Africa/Bissau": "gw", + "Africa/Blantyre": "mw", + "Africa/Brazzaville": "cg", + "Africa/Bujumbura": "bi", + "Africa/Cairo": "eg", + "Africa/Casablanca": "ma", + "Africa/Ceuta": "es", + "Africa/Conakry": "gn", + "Africa/Dakar": "sn", + "Africa/Dar_es_Salaam": "tz", + "Africa/Djibouti": "dj", + "Africa/Douala": "cm", + "Africa/El_Aaiun": "ma", + "Africa/Freetown": "sl", + "Africa/Gaborone": "bw", + "Africa/Harare": "zw", + "Africa/Johannesburg": "za", + "Africa/Juba": "ss", + "Africa/Kampala": "ug", + "Africa/Khartoum": "sd", + "Africa/Kigali": "rw", + "Africa/Kinshasa": "cd", + "Africa/Lagos": "ng", + "Africa/Libreville": "ga", + "Africa/Lome": "tg", + "Africa/Luanda": "ao", + "Africa/Lubumbashi": "cd", + "Africa/Lusaka": "zm", + "Africa/Malabo": "gq", + "Africa/Maputo": "mz", + "Africa/Maseru": "ls", + "Africa/Mbabane": "sz", + "Africa/Mogadishu": "so", + "Africa/Monrovia": "lr", + "Africa/Nairobi": "ke", + "Africa/Ndjamena": "td", + "Africa/Niamey": "ne", + "Africa/Nouakchott": "mr", + "Africa/Ouagadougou": "bf", + "Africa/Porto-Novo": "bj", + "Africa/Sao_Tome": "st", + "Africa/Timbuktu": "ml", + "Africa/Tripoli": "ly", + "Africa/Tunis": "tn", + "Africa/Windhoek": "na", + "America/Adak": "us", + "America/Anchorage": "us", + "America/Anguilla": "ai", + "America/Antigua": "ag", + "America/Araguaina": "br", + "America/Argentina/Buenos_Aires": "ar", + "America/Argentina/Catamarca": "ar", + "America/Argentina/Cordoba": "ar", + "America/Argentina/Jujuy": "ar", + "America/Argentina/La_Rioja": "ar", + "America/Argentina/Mendoza": "ar", + "America/Argentina/Rio_Gallegos": "ar", + "America/Argentina/Salta": "ar", + "America/Argentina/San_Juan": "ar", + "America/Argentina/San_Luis": "ar", + "America/Argentina/Tucuman": "ar", + "America/Argentina/Ushuaia": "ar", + "America/Aruba": "aw", + "America/Asuncion": "py", + "America/Atikokan": "ca", + "America/Bahia": "br", + "America/Bahia_Banderas": "mx", + "America/Barbados": "bb", + "America/Belem": "br", + "America/Belize": "bz", + "America/Blanc-Sablon": "ca", + "America/Boa_Vista": "br", + "America/Bogota": "co", + "America/Boise": "us", + "America/Cambridge_Bay": "ca", + "America/Campo_Grande": "br", + "America/Cancun": "mx", + "America/Caracas": "ve", + "America/Cayenne": "gf", + "America/Cayman": "ky", + "America/Chicago": "us", + "America/Chihuahua": "mx", + "America/Coral_Harbour": "ca", + "America/Costa_Rica": "cr", + "America/Creston": "ca", + "America/Cuiaba": "br", + "America/Curacao": "cw", + "America/Danmarkshavn": "gl", + "America/Dawson": "ca", + "America/Dawson_Creek": "ca", + "America/Denver": "us", + "America/Detroit": "us", + "America/Dominica": "dm", + "America/Edmonton": "ca", + "America/Eirunepe": "br", + "America/El_Salvador": "sv", + "America/Fort_Nelson": "ca", + "America/Fortaleza": "br", + "America/Glace_Bay": "ca", + "America/Goose_Bay": "ca", + "America/Grand_Turk": "tc", + "America/Grenada": "gd", + "America/Guadeloupe": "gp", + "America/Guatemala": "gt", + "America/Guayaquil": "ec", + "America/Guyana": "gy", + "America/Halifax": "ca", + "America/Havana": "cu", + "America/Hermosillo": "mx", + "America/Indiana/Indianapolis": "us", + "America/Indiana/Knox": "us", + "America/Indiana/Marengo": "us", + "America/Indiana/Petersburg": "us", + "America/Indiana/Tell_City": "us", + "America/Indiana/Vevay": "us", + "America/Indiana/Vincennes": "us", + "America/Indiana/Winamac": "us", + "America/Inuvik": "ca", + "America/Iqaluit": "ca", + "America/Jamaica": "jm", + "America/Juneau": "us", + "America/Kentucky/Louisville": "us", + "America/Kentucky/Monticello": "us", + "America/Kralendijk": "bq", + "America/La_Paz": "bo", + "America/Lima": "pe", + "America/Los_Angeles": "us", + "America/Lower_Princes": "sx", + "America/Maceio": "br", + "America/Managua": "ni", + "America/Manaus": "br", + "America/Marigot": "mf", + "America/Martinique": "mq", + "America/Matamoros": "mx", + "America/Mazatlan": "mx", + "America/Menominee": "us", + "America/Merida": "mx", + "America/Metlakatla": "us", + "America/Mexico_City": "mx", + "America/Miquelon": "pm", + "America/Moncton": "ca", + "America/Monterrey": "mx", + "America/Montevideo": "uy", + "America/Montreal": "ca", + "America/Montserrat": "ms", + "America/Nassau": "bs", + "America/New_York": "us", + "America/Nipigon": "ca", + "America/Nome": "us", + "America/Noronha": "br", + "America/North_Dakota/Beulah": "us", + "America/North_Dakota/Center": "us", + "America/North_Dakota/New_Salem": "us", + "America/Nuuk": "gl", + "America/Ojinaga": "mx", + "America/Panama": "pa", + "America/Pangnirtung": "ca", + "America/Paramaribo": "sr", + "America/Phoenix": "us", + "America/Port-au-Prince": "ht", + "America/Port_of_Spain": "tt", + "America/Porto_Velho": "br", + "America/Puerto_Rico": "pr", + "America/Punta_Arenas": "cl", + "America/Rainy_River": "ca", + "America/Rankin_Inlet": "ca", + "America/Recife": "br", + "America/Regina": "ca", + "America/Resolute": "ca", + "America/Rio_Branco": "br", + "America/Santarem": "br", + "America/Santiago": "cl", + "America/Santo_Domingo": "do", + "America/Sao_Paulo": "br", + "America/Scoresbysund": "gl", + "America/Sitka": "us", + "America/St_Barthelemy": "bl", + "America/St_Johns": "ca", + "America/St_Kitts": "kn", + "America/St_Lucia": "lc", + "America/St_Thomas": "vi", + "America/St_Vincent": "vc", + "America/Swift_Current": "ca", + "America/Tegucigalpa": "hn", + "America/Thule": "gl", + "America/Thunder_Bay": "ca", + "America/Tijuana": "mx", + "America/Toronto": "ca", + "America/Tortola": "vg", + "America/Vancouver": "ca", + "America/Virgin": "vi", + "America/Whitehorse": "ca", + "America/Winnipeg": "ca", + "America/Yakutat": "us", + "America/Yellowknife": "ca", + "Antarctica/Casey": "aq", + "Antarctica/Davis": "aq", + "Antarctica/DumontDUrville": "aq", + "Antarctica/Macquarie": "au", + "Antarctica/Mawson": "aq", + "Antarctica/McMurdo": "aq", + "Antarctica/Palmer": "aq", + "Antarctica/Rothera": "aq", + "Antarctica/South_Pole": "aq", + "Antarctica/Syowa": "aq", + "Antarctica/Troll": "aq", + "Antarctica/Vostok": "aq", + "Arctic/Longyearbyen": "no", + "Asia/Aden": "ye", + "Asia/Almaty": "kz", + "Asia/Amman": "jo", + "Asia/Anadyr": "ru", + "Asia/Aqtau": "kz", + "Asia/Aqtobe": "kz", + "Asia/Ashgabat": "tm", + "Asia/Atyrau": "kz", + "Asia/Baghdad": "iq", + "Asia/Bahrain": "bh", + "Asia/Baku": "az", + "Asia/Bangkok": "th", + "Asia/Barnaul": "ru", + "Asia/Beirut": "lb", + "Asia/Bishkek": "kg", + "Asia/Brunei": "bn", + "Asia/Chita": "ru", + "Asia/Choibalsan": "mn", + "Asia/Colombo": "lk", + "Asia/Damascus": "sy", + "Asia/Dhaka": "bd", + "Asia/Dili": "tl", + "Asia/Dubai": "ae", + "Asia/Dushanbe": "tj", + "Asia/Famagusta": "cy", + "Asia/Gaza": "ps", + "Asia/Hebron": "ps", + "Asia/Ho_Chi_Minh": "vn", + "Asia/Hong_Kong": "hk", + "Asia/Hovd": "mn", + "Asia/Irkutsk": "ru", + "Asia/Jakarta": "id", + "Asia/Jayapura": "id", + "Asia/Jerusalem": "il", + "Asia/Kabul": "af", + "Asia/Kamchatka": "ru", + "Asia/Karachi": "pk", + "Asia/Kathmandu": "np", + "Asia/Khandyga": "ru", + "Asia/Kolkata": "in", + "Asia/Krasnoyarsk": "ru", + "Asia/Kuala_Lumpur": "my", + "Asia/Kuching": "my", + "Asia/Kuwait": "kw", + "Asia/Macau": "mo", + "Asia/Magadan": "ru", + "Asia/Makassar": "id", + "Asia/Manila": "ph", + "Asia/Muscat": "om", + "Asia/Nicosia": "cy", + "Asia/Novokuznetsk": "ru", + "Asia/Novosibirsk": "ru", + "Asia/Omsk": "ru", + "Asia/Oral": "kz", + "Asia/Phnom_Penh": "kh", + "Asia/Pontianak": "id", + "Asia/Pyongyang": "kp", + "Asia/Qatar": "qa", + "Asia/Qostanay": "kz", + "Asia/Qyzylorda": "kz", + "Asia/Riyadh": "sa", + "Asia/Sakhalin": "ru", + "Asia/Samarkand": "uz", + "Asia/Seoul": "kr", + "Asia/Shanghai": "cn", + "Asia/Singapore": "sg", + "Asia/Srednekolymsk": "ru", + "Asia/Taipei": "tw", + "Asia/Tashkent": "uz", + "Asia/Tbilisi": "ge", + "Asia/Tehran": "ir", + "Asia/Thimphu": "bt", + "Asia/Tokyo": "jp", + "Asia/Tomsk": "ru", + "Asia/Ulaanbaatar": "mn", + "Asia/Urumqi": "cn", + "Asia/Ust-Nera": "ru", + "Asia/Vientiane": "la", + "Asia/Vladivostok": "ru", + "Asia/Yakutsk": "ru", + "Asia/Yangon": "mm", + "Asia/Yekaterinburg": "ru", + "Asia/Yerevan": "am", + "Atlantic/Azores": "pt", + "Atlantic/Bermuda": "bm", + "Atlantic/Canary": "es", + "Atlantic/Cape_Verde": "cv", + "Atlantic/Faroe": "fo", + "Atlantic/Jan_Mayen": "no", + "Atlantic/Madeira": "pt", + "Atlantic/Reykjavik": "is", + "Atlantic/South_Georgia": "ni", + "Atlantic/St_Helena": "sh", + "Atlantic/Stanley": "fk", + "Australia/Adelaide": "au", + "Australia/Brisbane": "au", + "Australia/Broken_Hill": "au", + "Australia/Darwin": "au", + "Australia/Eucla": "au", + "Australia/Hobart": "au", + "Australia/Lindeman": "au", + "Australia/Lord_Howe": "au", + "Australia/Melbourne": "au", + "Australia/Perth": "au", + "Australia/Sydney": "au", + "Canada/Eastern": "ca", + "Europe/Amsterdam": "nl", + "Europe/Andorra": "ad", + "Europe/Astrakhan": "ru", + "Europe/Athens": "gr", + "Europe/Belfast": "gb", + "Europe/Belgrade": "rs", + "Europe/Berlin": "de", + "Europe/Bratislava": "sk", + "Europe/Brussels": "be", + "Europe/Bucharest": "ro", + "Europe/Budapest": "hu", + "Europe/Busingen": "de", + "Europe/Chisinau": "md", + "Europe/Copenhagen": "dk", + "Europe/Dublin": "ie", + "Europe/Gibraltar": "gi", + "Europe/Guernsey": "gb", + "Europe/Helsinki": "fi", + "Europe/Isle_of_Man": "gb", + "Europe/Istanbul": "tr", + "Europe/Jersey": "je", + "Europe/Kaliningrad": "ru", + "Europe/Kiev": "ua", + "Europe/Kirov": "ru", + "Europe/Lisbon": "pt", + "Europe/Ljubljana": "si", + "Europe/London": "gb", + "Europe/Luxembourg": "lu", + "Europe/Madrid": "es", + "Europe/Malta": "mt", + "Europe/Mariehamn": "sc", + "Europe/Minsk": "by", + "Europe/Monaco": "mc", + "Europe/Moscow": "ru", + "Europe/Oslo": "no", + "Europe/Paris": "fr", + "Europe/Podgorica": "me", + "Europe/Prague": "cz", + "Europe/Riga": "lv", + "Europe/Rome": "it", + "Europe/Samara": "ru", + "Europe/San_Marino": "sm", + "Europe/Sarajevo": "ba", + "Europe/Saratov": "ru", + "Europe/Simferopol": "ru", + "Europe/Skopje": "mk", + "Europe/Sofia": "bg", + "Europe/Stockholm": "se", + "Europe/Tallinn": "ee", + "Europe/Tirane": "al", + "Europe/Ulyanovsk": "ru", + "Europe/Uzhgorod": "ua", + "Europe/Vaduz": "li", + "Europe/Vatican": "va", + "Europe/Vienna": "at", + "Europe/Vilnius": "lt", + "Europe/Volgograd": "ru", + "Europe/Warsaw": "pl", + "Europe/Zagreb": "hr", + "Europe/Zaporozhye": "ua", + "Europe/Zurich": "ch", + "GB": "gb", + "GB-Eire": "gb", + "Indian/Antananarivo": "mg", + "Indian/Chagos": "io", + "Indian/Christmas": "au", + "Indian/Cocos": "au", + "Indian/Comoro": "km", + "Indian/Kerguelen": "zm", + "Indian/Mahe": "sc", + "Indian/Maldives": "mv", + "Indian/Mauritius": "mu", + "Indian/Mayotte": "re", + "Indian/Reunion": "re", + "NZ": "nz", + "Pacific/Apia": "ws", + "Pacific/Auckland": "nz", + "Pacific/Bougainville": "pg", + "Pacific/Chatham": "nz", + "Pacific/Chuuk": "fm", + "Pacific/Easter": "cl", + "Pacific/Efate": "vu", + "Pacific/Fakaofo": "tk", + "Pacific/Fiji": "fj", + "Pacific/Funafuti": "tv", + "Pacific/Galapagos": "ec", + "Pacific/Gambier": "pf", + "Pacific/Guadalcanal": "sb", + "Pacific/Guam": "gu", + "Pacific/Honolulu": "us", + "Pacific/Johnston": "us", + "Pacific/Kanton": "ki", + "Pacific/Kiritimati": "ki", + "Pacific/Kosrae": "fm", + "Pacific/Kwajalein": "mh", + "Pacific/Majuro": "mh", + "Pacific/Marquesas": "pf", + "Pacific/Midway": "us", + "Pacific/Nauru": "nr", + "Pacific/Niue": "nu", + "Pacific/Norfolk": "nf", + "Pacific/Noumea": "nc", + "Pacific/Pago_Pago": "as", + "Pacific/Palau": "pw", + "Pacific/Pitcairn": "nz", + "Pacific/Pohnpei": "fm", + "Pacific/Port_Moresby": "pg", + "Pacific/Rarotonga": "ck", + "Pacific/Saipan": "mp", + "Pacific/Samoa": "ws", + "Pacific/Tahiti": "pf", + "Pacific/Tarawa": "ki", + "Pacific/Tongatapu": "to", + "Pacific/Wake": "us", + "Pacific/Wallis": "wf", + "Singapore": "sg", + "US/Arizona": "us", + "US/Hawaii": "us", + "US/Samoa": "ws" +} \ No newline at end of file diff --git a/src/metadata/validations.json b/src/metadata/validations.json new file mode 100644 index 0000000..be7dec7 --- /dev/null +++ b/src/metadata/validations.json @@ -0,0 +1,235 @@ +{ + "ad": "^(?:1|6\\d)\\d{7}|[135-9]\\d{5}$", + "ae": "^(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}$", + "af": "^[2-7]\\d{8}$", + "ag": "^(?:268|[58]\\d\\d|900)\\d{7}$", + "ai": "^(?:264|[58]\\d\\d|900)\\d{7}$", + "al": "^(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}$", + "am": "^(?:[1-489]\\d|55|60|77)\\d{6}$", + "ao": "^[29]\\d{8}$", + "ar": "^(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}$", + "as": "^(?:[58]\\d\\d|684|900)\\d{7}$", + "at": "^1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}$", + "au": "^1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}$", + "aw": "^(?:[25-79]\\d\\d|800)\\d{4}$", + "az": "^365\\d{6}|(?:[124579]\\d|60|88)\\d{7}$", + "ba": "^6\\d{8}|(?:[35689]\\d|49|70)\\d{6}$", + "bb": "^(?:246|[58]\\d\\d|900)\\d{7}$", + "bd": "^[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}$", + "be": "^4\\d{8}|[1-9]\\d{7}$", + "bf": "^[025-7]\\d{7}$", + "bg": "^00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}$", + "bh": "^[136-9]\\d{7}$", + "bi": "^(?:[267]\\d|31)\\d{6}$", + "bj": "^[24-689]\\d{7}$", + "bm": "^(?:441|[58]\\d\\d|900)\\d{7}$", + "bn": "^[2-578]\\d{6}$", + "bo": "^(?:[2-467]\\d\\d|8001)\\d{5}$", + "bq": "^(?:[34]1|7\\d)\\d{5}$", + "br": "^(?:[1-46-9]\\d\\d|5(?:[0-46-9]\\d|5[0-46-9]))\\d{8}|[1-9]\\d{9}|[3589]\\d{8}|[34]\\d{7}$", + "bs": "^(?:242|[58]\\d\\d|900)\\d{7}$", + "bt": "^[17]\\d{7}|[2-8]\\d{6}$", + "bw": "^(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}$", + "by": "^(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}$", + "bz": "^(?:0800\\d|[2-8])\\d{6}$", + "ca": "^(?:[2-8]\\d|90)\\d{8}|3\\d{6}$", + "cd": "^[189]\\d{8}|[1-68]\\d{6}$", + "cf": "^(?:[27]\\d{3}|8776)\\d{4}$", + "cg": "^222\\d{6}|(?:0\\d|80)\\d{7}$", + "ch": "^8\\d{11}|[2-9]\\d{8}$", + "ci": "^[02]\\d{9}$", + "ck": "^[2-578]\\d{4}$", + "cl": "^12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}$", + "cm": "^[26]\\d{8}|88\\d{6,7}$", + "cn": "^1[127]\\d{8,9}|2\\d{9}(?:\\d{2})?|[12]\\d{6,7}|86\\d{6}|(?:1[03-689]\\d|6)\\d{7,9}|(?:[3-579]\\d|8[0-57-9])\\d{6,9}$", + "co": "^(?:60\\d\\d|9101)\\d{6}|(?:1\\d|3)\\d{9}$", + "cr": "^(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}$", + "cu": "^[27]\\d{6,7}|[34]\\d{5,7}|63\\d{6}|(?:5|8\\d\\d)\\d{7}$", + "cv": "^(?:[2-59]\\d\\d|800)\\d{4}$", + "cw": "^(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}$", + "cy": "^(?:[279]\\d|[58]0)\\d{6}$", + "cz": "^(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}$", + "de": "^[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}$", + "dj": "^(?:2\\d|77)\\d{6}$", + "dk": "^[2-9]\\d{7}$", + "dm": "^(?:[58]\\d\\d|767|900)\\d{7}$", + "do": "^(?:[58]\\d\\d|900)\\d{7}$", + "dz": "^(?:[1-4]|[5-79]\\d|80)\\d{7}$", + "ec": "^1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}$", + "ee": "^8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}$", + "eg": "^[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}$", + "er": "^[178]\\d{6}$", + "es": "^[5-9]\\d{8}$", + "et": "^(?:11|[2-579]\\d)\\d{7}$", + "fi": "^[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}$", + "fj": "^45\\d{5}|(?:0800\\d|[235-9])\\d{6}$", + "fk": "^[2-7]\\d{4}$", + "fm": "^(?:[39]\\d\\d|820)\\d{4}$", + "fo": "^[2-9]\\d{5}$", + "fr": "^[1-9]\\d{8}$", + "ga": "^(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}$", + "gb": "^[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}$", + "gd": "^(?:473|[58]\\d\\d|900)\\d{7}$", + "ge": "^(?:[3-57]\\d\\d|800)\\d{6}$", + "gf": "^[56]94\\d{6}|(?:80|9\\d)\\d{7}$", + "gh": "^(?:[235]\\d{3}|800)\\d{5}$", + "gi": "^(?:[25]\\d|60)\\d{6}$", + "gl": "^(?:19|[2-689]\\d|70)\\d{4}$", + "gm": "^[2-9]\\d{6}$", + "gn": "^722\\d{6}|(?:3|6\\d)\\d{7}$", + "gp": "^590\\d{6}|(?:69|80|9\\d)\\d{7}$", + "gq": "^222\\d{6}|(?:3\\d|55|[89]0)\\d{7}$", + "gr": "^5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}$", + "gt": "^(?:1\\d{3}|[2-7])\\d{7}$", + "gu": "^(?:[58]\\d\\d|671|900)\\d{7}$", + "gw": "^[49]\\d{8}|4\\d{6}$", + "gy": "^9008\\d{3}|(?:[2-467]\\d\\d|510|862)\\d{4}$", + "hk": "^8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}$", + "hn": "^8\\d{10}|[237-9]\\d{7}$", + "hr": "^(?:[24-69]\\d|3[0-79])\\d{7}|80\\d{5,7}|[1-79]\\d{7}|6\\d{5,6}$", + "ht": "^(?:[2-489]\\d|55)\\d{6}$", + "hu": "^[235-7]\\d{8}|[1-9]\\d{7}$", + "id": "^(?:(?:00[1-9]|8\\d)\\d{4}|[1-36])\\d{6}|00\\d{10}|[1-9]\\d{8,10}|[2-9]\\d{7}$", + "ie": "^(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}$", + "il": "^1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}$", + "in": "^(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}$", + "io": "^3\\d{6}$", + "iq": "^(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}$", + "ir": "^[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}$", + "is": "^(?:38\\d|[4-9])\\d{6}$", + "it": "^0\\d{5,10}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?$", + "je": "^1534\\d{6}|(?:[3578]\\d|90)\\d{8}$", + "jm": "^(?:[58]\\d\\d|658|900)\\d{7}$", + "jo": "^(?:(?:[2689]|7\\d)\\d|32|53)\\d{6}$", + "jp": "^00[1-9]\\d{6,14}|[257-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}$", + "ke": "^(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}$", + "kg": "^8\\d{9}|[235-9]\\d{8}$", + "kh": "^1\\d{9}|[1-9]\\d{7,8}$", + "ki": "^(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}$", + "km": "^[3478]\\d{6}$", + "kn": "^(?:[58]\\d\\d|900)\\d{7}$", + "kp": "^85\\d{6}|(?:19\\d|[2-7])\\d{7}$", + "kr": "^00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}$", + "kw": "^18\\d{5}|(?:[2569]\\d|41)\\d{6}$", + "ky": "^(?:345|[58]\\d\\d|900)\\d{7}$", + "kz": "^(?:33622|8\\d{8})\\d{5}|[78]\\d{9}$", + "la": "^[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}$", + "lb": "^[27-9]\\d{7}|[13-9]\\d{6}$", + "lc": "^(?:[58]\\d\\d|758|900)\\d{7}$", + "li": "^[68]\\d{8}|(?:[2378]\\d|90)\\d{5}$", + "lk": "^[1-9]\\d{8}$", + "lr": "^(?:[25]\\d|33|77|88)\\d{7}|(?:2\\d|[4-6])\\d{6}$", + "ls": "^(?:[256]\\d\\d|800)\\d{5}$", + "lt": "^(?:[3469]\\d|52|[78]0)\\d{6}$", + "lu": "^35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}$", + "lv": "^(?:[268]\\d|90)\\d{6}$", + "ly": "^[2-9]\\d{8}$", + "ma": "^[5-8]\\d{8}$", + "mc": "^(?:[3489]|6\\d)\\d{7}$", + "md": "^(?:[235-7]\\d|[89]0)\\d{6}$", + "me": "^(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}$", + "mg": "^[23]\\d{8}$", + "mh": "^329\\d{4}|(?:[256]\\d|45)\\d{5}$", + "mk": "^[2-578]\\d{7}$", + "ml": "^[24-9]\\d{7}$", + "mm": "^1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}$", + "mn": "^[12]\\d{7,9}|[5-9]\\d{7}$", + "mo": "^0800\\d{3}|(?:28|[68]\\d)\\d{6}$", + "mp": "^[58]\\d{9}|(?:67|90)0\\d{7}$", + "mq": "^596\\d{6}|(?:69|80|9\\d)\\d{7}$", + "mr": "^(?:[2-4]\\d\\d|800)\\d{5}$", + "ms": "^(?:[58]\\d\\d|664|900)\\d{7}$", + "mt": "^3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}$", + "mu": "^(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}$", + "mv": "^(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}$", + "mw": "^(?:[1289]\\d|31|77)\\d{7}|1\\d{6}$", + "mx": "^1(?:(?:[27]2|44|87|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[01]\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-69]|9[1-8])|[2-9]\\d)\\d{8}$", + "my": "^1\\d{8,9}|(?:3\\d|[4-9])\\d{7}$", + "mz": "^(?:2|8\\d)\\d{7}$", + "na": "^[68]\\d{7,8}$", + "nc": "^(?:050|[2-57-9]\\d\\d)\\d{3}$", + "ne": "^[027-9]\\d{7}$", + "nf": "^[13]\\d{5}$", + "ng": "^(?:[124-7]|9\\d{3})\\d{6}|[1-9]\\d{7}|[78]\\d{9,13}$", + "ni": "^(?:1800|[25-8]\\d{3})\\d{4}$", + "nl": "^(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}$", + "no": "^(?:0|[2-9]\\d{3})\\d{4}$", + "np": "^(?:1\\d|9)\\d{9}|[1-9]\\d{7}$", + "nr": "^(?:444|(?:55|8\\d)\\d|666)\\d{4}$", + "nu": "^(?:[47]|888\\d)\\d{3}$", + "nz": "^[1289]\\d{9}|50\\d{5}(?:\\d{2,3})?|[27-9]\\d{7,8}|(?:[34]\\d|6[0-35-9])\\d{6}|8\\d{4,6}$", + "om": "^(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}$", + "pa": "^(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}$", + "pe": "^(?:[14-8]|9\\d)\\d{7}$", + "pf": "^4\\d{5}(?:\\d{2})?|8\\d{7,8}$", + "pg": "^(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}$", + "ph": "^(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}$", + "pk": "^122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}$", + "pl": "^(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}$", + "pm": "^[45]\\d{5}|(?:708|80\\d)\\d{6}$", + "pr": "^(?:[589]\\d\\d|787)\\d{7}$", + "ps": "^[2489]2\\d{6}|(?:1\\d|5)\\d{8}$", + "pt": "^1693\\d{5}|(?:[26-9]\\d|30)\\d{7}$", + "pw": "^(?:[24-8]\\d\\d|345|900)\\d{4}$", + "py": "^59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}$", + "qa": "^800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}$", + "re": "^(?:26|[689]\\d)\\d{7}$", + "ro": "^(?:[2378]\\d|90)\\d{7}|[23]\\d{5}$", + "rs": "^38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}$", + "ru": "^8\\d{13}|[347-9]\\d{9}$", + "rw": "^(?:06|[27]\\d\\d|[89]00)\\d{6}$", + "sa": "^92\\d{7}|(?:[15]|8\\d)\\d{8}$", + "sb": "^(?:[1-6]|[7-9]\\d\\d)\\d{4}$", + "sc": "^800\\d{4}|(?:[249]\\d|64)\\d{5}$", + "sd": "^[19]\\d{8}$", + "se": "^(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}$", + "sg": "^(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}$", + "sh": "^(?:[256]\\d|8)\\d{3}$", + "si": "^[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}$", + "sk": "^[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}$", + "sl": "^(?:[237-9]\\d|66)\\d{6}$", + "sm": "^(?:0549|[5-7]\\d)\\d{6}$", + "sn": "^(?:[378]\\d|93)\\d{7}$", + "so": "^[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}$", + "sr": "^(?:[2-5]|68|[78]\\d)\\d{5}$", + "ss": "^[19]\\d{8}$", + "st": "^(?:22|9\\d)\\d{5}$", + "sv": "^[267]\\d{7}|[89]00\\d{4}(?:\\d{4})?$", + "sx": "^7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}$", + "sy": "^[1-39]\\d{8}|[1-5]\\d{7}$", + "sz": "^0800\\d{4}|(?:[237]\\d|900)\\d{6}$", + "tc": "^(?:[58]\\d\\d|649|900)\\d{7}$", + "td": "^(?:22|[69]\\d|77)\\d{6}$", + "tg": "^[279]\\d{7}$", + "th": "^(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}$", + "tj": "^[0-57-9]\\d{8}$", + "tk": "^[2-47]\\d{3,6}$", + "tl": "^7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}$", + "tm": "^[1-6]\\d{7}$", + "tn": "^[2-57-9]\\d{7}$", + "to": "^(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}$", + "tr": "^4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}$", + "tt": "^(?:[58]\\d\\d|900)\\d{7}$", + "tv": "^(?:2|7\\d\\d|90)\\d{4}$", + "tw": "^[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}$", + "tz": "^(?:[25-8]\\d|41|90)\\d{7}$", + "ua": "^[89]\\d{9}|[3-9]\\d{8}$", + "ug": "^800\\d{6}|(?:[29]0|[347]\\d)\\d{7}$", + "us": "^[2-9]\\d{9}|3\\d{6}$", + "uy": "^0004\\d{2,9}|[1249]\\d{7}|(?:[49]\\d|80)\\d{5}$", + "uz": "^200\\d{6}|(?:33|[5-79]\\d|88)\\d{7}$", + "va": "^0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}$", + "vc": "^(?:[58]\\d\\d|784|900)\\d{7}$", + "ve": "^[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}$", + "vg": "^(?:284|[58]\\d\\d|900)\\d{7}$", + "vi": "^[58]\\d{9}|(?:34|90)0\\d{7}$", + "vn": "^[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}$", + "vu": "^[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}$", + "wf": "^(?:40|72)\\d{4}|8\\d{5}(?:\\d{3})?$", + "ws": "^(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}$", + "xk": "^[23]\\d{7,8}|(?:4\\d\\d|[89]00)\\d{5}$", + "ye": "^(?:1|7\\d)\\d{7}|[1-7]\\d{6}$", + "za": "^[1-79]\\d{8}|8\\d{4,9}$", + "zm": "^800\\d{6}|(?:21|63|[79]\\d)\\d{7}$", + "zw": "^2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}$" +} \ No newline at end of file diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..3906406 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,954 @@ +.ant-select-item .ant-phone-input-select-item { + display: flex; + column-gap: 10px; + align-items: center; +} + +.ant-phone-input-wrapper .ant-select-selector { + border: none !important; +} + +.ant-phone-input-wrapper .ant-select-selection-item { + padding: 0 !important; +} + +.ant-phone-input-wrapper .ant-input-group-addon * { + display: flex; + align-items: center; + justify-content: center; +} + +.flag { + width: 16px; + height: 11px; + background-image: url(data:image/png;base64,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); +} + +.flag.ad { + background-position: -16px 0; +} + +.flag.ae { + background-position: -32px 0; +} + +.flag.af { + background-position: -48px 0; +} + +.flag.ag { + background-position: -64px 0; +} + +.flag.ai { + background-position: -80px 0; +} + +.flag.al { + background-position: -96px 0; +} + +.flag.am { + background-position: -112px 0; +} + +.flag.ao { + background-position: -128px 0; +} + +.flag.ar { + background-position: -144px 0; +} + +.flag.as { + background-position: -160px 0; +} + +.flag.at { + background-position: -176px 0; +} + +.flag.au { + background-position: -192px 0; +} + +.flag.aw { + background-position: -208px 0; +} + +.flag.az { + background-position: -224px 0; +} + +.flag.ba { + background-position: -240px 0; +} + +.flag.bb { + background-position: 0 -11px; +} + +.flag.bd { + background-position: -16px -11px; +} + +.flag.be { + background-position: -32px -11px; +} + +.flag.bf { + background-position: -48px -11px; +} + +.flag.bg { + background-position: -64px -11px; +} + +.flag.bh { + background-position: -80px -11px; +} + +.flag.bi { + background-position: -96px -11px; +} + +.flag.bj { + background-position: -112px -11px; +} + +.flag.bm { + background-position: -128px -11px; +} + +.flag.bn { + background-position: -144px -11px; +} + +.flag.bo { + background-position: -160px -11px; +} + +.flag.br { + background-position: -176px -11px; +} + +.flag.bs { + background-position: -192px -11px; +} + +.flag.bt { + background-position: -208px -11px; +} + +.flag.bw { + background-position: -224px -11px; +} + +.flag.by { + background-position: -240px -11px; +} + +.flag.bz { + background-position: 0 -22px; +} + +.flag.ca { + background-position: -16px -22px; +} + +.flag.cd { + background-position: -32px -22px; +} + +.flag.cf { + background-position: -48px -22px; +} + +.flag.cg { + background-position: -64px -22px; +} + +.flag.ch { + background-position: -80px -22px; +} + +.flag.ci { + background-position: -96px -22px; +} + +.flag.ck { + background-position: -112px -22px; +} + +.flag.cl { + background-position: -128px -22px; +} + +.flag.cm { + background-position: -144px -22px; +} + +.flag.cn { + background-position: -160px -22px; +} + +.flag.co { + background-position: -176px -22px; +} + +.flag.cr { + background-position: -192px -22px; +} + +.flag.cu { + background-position: -208px -22px; +} + +.flag.cv { + background-position: -224px -22px; +} + +.flag.cw { + background-position: -240px -22px; +} + +.flag.cy { + background-position: 0 -33px; +} + +.flag.cz { + background-position: -16px -33px; +} + +.flag.de { + background-position: -32px -33px; +} + +.flag.dj { + background-position: -48px -33px; +} + +.flag.dk { + background-position: -64px -33px; +} + +.flag.dm { + background-position: -80px -33px; +} + +.flag.do { + background-position: -96px -33px; +} + +.flag.dz { + background-position: -112px -33px; +} + +.flag.ec { + background-position: -128px -33px; +} + +.flag.ee { + background-position: -144px -33px; +} + +.flag.eg { + background-position: -160px -33px; +} + +.flag.er { + background-position: -176px -33px; +} + +.flag.es { + background-position: -192px -33px; +} + +.flag.et { + background-position: -208px -33px; +} + +.flag.fi { + background-position: -224px -33px; +} + +.flag.fj { + background-position: -240px -33px; +} + +.flag.fk { + background-position: 0 -44px; +} + +.flag.fm { + background-position: -16px -44px; +} + +.flag.fo { + background-position: -32px -44px; +} + +.flag.fr { + background-position: -48px -44px; +} + +.flag.ga { + background-position: -64px -44px; +} + +.flag.gb { + background-position: -80px -44px; +} + +.flag.gd { + background-position: -96px -44px; +} + +.flag.ge { + background-position: -112px -44px; +} + +.flag.gf { + background-position: -128px -44px; +} + +.flag.gh { + background-position: -144px -44px; +} + +.flag.gi { + background-position: -160px -44px; +} + +.flag.gl { + background-position: -176px -44px; +} + +.flag.gm { + background-position: -192px -44px; +} + +.flag.gn { + background-position: -208px -44px; +} + +.flag.gp { + background-position: -224px -44px; +} + +.flag.gq { + background-position: -240px -44px; +} + +.flag.gr { + background-position: 0 -55px; +} + +.flag.gt { + background-position: -16px -55px; +} + +.flag.gu { + background-position: -32px -55px; +} + +.flag.gw { + background-position: -48px -55px; +} + +.flag.gy { + background-position: -64px -55px; +} + +.flag.hk { + background-position: -80px -55px; +} + +.flag.hn { + background-position: -96px -55px; +} + +.flag.hr { + background-position: -112px -55px; +} + +.flag.ht { + background-position: -128px -55px; +} + +.flag.hu { + background-position: -144px -55px; +} + +.flag.id { + background-position: -160px -55px; +} + +.flag.ie { + background-position: -176px -55px; +} + +.flag.il { + background-position: -192px -55px; +} + +.flag.in { + background-position: -208px -55px; +} + +.flag.io { + background-position: -224px -55px; +} + +.flag.iq { + background-position: -240px -55px; +} + +.flag.ir { + background-position: 0 -66px; +} + +.flag.is { + background-position: -16px -66px; +} + +.flag.it { + background-position: -32px -66px; +} + +.flag.je { + background-position: -144px -154px; +} + +.flag.jm { + background-position: -48px -66px; +} + +.flag.jo { + background-position: -64px -66px; +} + +.flag.jp { + background-position: -80px -66px; +} + +.flag.ke { + background-position: -96px -66px; +} + +.flag.kg { + background-position: -112px -66px; +} + +.flag.kh { + background-position: -128px -66px; +} + +.flag.ki { + background-position: -144px -66px; +} + +.flag.xk { + background-position: -128px -154px; +} + +.flag.km { + background-position: -160px -66px; +} + +.flag.kn { + background-position: -176px -66px; +} + +.flag.kp { + background-position: -192px -66px; +} + +.flag.kr { + background-position: -208px -66px; +} + +.flag.kw { + background-position: -224px -66px; +} + +.flag.ky { + background-position: -240px -66px; +} + +.flag.kz { + background-position: 0 -77px; +} + +.flag.la { + background-position: -16px -77px; +} + +.flag.lb { + background-position: -32px -77px; +} + +.flag.lc { + background-position: -48px -77px; +} + +.flag.li { + background-position: -64px -77px; +} + +.flag.lk { + background-position: -80px -77px; +} + +.flag.lr { + background-position: -96px -77px; +} + +.flag.ls { + background-position: -112px -77px; +} + +.flag.lt { + background-position: -128px -77px; +} + +.flag.lu { + background-position: -144px -77px; +} + +.flag.lv { + background-position: -160px -77px; +} + +.flag.ly { + background-position: -176px -77px; +} + +.flag.ma { + background-position: -192px -77px; +} + +.flag.mc { + background-position: -208px -77px; +} + +.flag.md { + background-position: -224px -77px; +} + +.flag.me { + background-position: -112px -154px; + height: 12px; +} + +.flag.mg { + background-position: 0 -88px; +} + +.flag.mh { + background-position: -16px -88px; +} + +.flag.mk { + background-position: -32px -88px; +} + +.flag.ml { + background-position: -48px -88px; +} + +.flag.mm { + background-position: -64px -88px; +} + +.flag.mn { + background-position: -80px -88px; +} + +.flag.mo { + background-position: -96px -88px; +} + +.flag.mp { + background-position: -112px -88px; +} + +.flag.mq { + background-position: -128px -88px; +} + +.flag.mr { + background-position: -144px -88px; +} + +.flag.ms { + background-position: -160px -88px; +} + +.flag.mt { + background-position: -176px -88px; +} + +.flag.mu { + background-position: -192px -88px; +} + +.flag.mv { + background-position: -208px -88px; +} + +.flag.mw { + background-position: -224px -88px; +} + +.flag.mx { + background-position: -240px -88px; +} + +.flag.my { + background-position: 0 -99px; +} + +.flag.mz { + background-position: -16px -99px; +} + +.flag.na { + background-position: -32px -99px; +} + +.flag.nc { + background-position: -48px -99px; +} + +.flag.ne { + background-position: -64px -99px; +} + +.flag.nf { + background-position: -80px -99px; +} + +.flag.ng { + background-position: -96px -99px; +} + +.flag.ni { + background-position: -112px -99px; +} + +.flag.nl, .flag.bq { + background-position: -128px -99px; +} + +.flag.no { + background-position: -144px -99px; +} + +.flag.np { + background-position: -160px -99px; +} + +.flag.nr { + background-position: -176px -99px; +} + +.flag.nu { + background-position: -192px -99px; +} + +.flag.nz { + background-position: -208px -99px; +} + +.flag.om { + background-position: -224px -99px; +} + +.flag.pa { + background-position: -240px -99px; +} + +.flag.pe { + background-position: 0 -110px; +} + +.flag.pf { + background-position: -16px -110px; +} + +.flag.pg { + background-position: -32px -110px; +} + +.flag.ph { + background-position: -48px -110px; +} + +.flag.pk { + background-position: -64px -110px; +} + +.flag.pl { + background-position: -80px -110px; +} + +.flag.pm { + background-position: -96px -110px; +} + +.flag.pr { + background-position: -112px -110px; +} + +.flag.ps { + background-position: -128px -110px; +} + +.flag.pt { + background-position: -144px -110px; +} + +.flag.pw { + background-position: -160px -110px; +} + +.flag.py { + background-position: -176px -110px; +} + +.flag.qa { + background-position: -192px -110px; +} + +.flag.re { + background-position: -208px -110px; +} + +.flag.ro { + background-position: -224px -110px; +} + +.flag.rs { + background-position: -240px -110px; +} + +.flag.ru { + background-position: 0 -121px; +} + +.flag.rw { + background-position: -16px -121px; +} + +.flag.sa { + background-position: -32px -121px; +} + +.flag.sb { + background-position: -48px -121px; +} + +.flag.sc { + background-position: -64px -121px; +} + +.flag.sd { + background-position: -80px -121px; +} + +.flag.se { + background-position: -96px -121px; +} + +.flag.sg { + background-position: -112px -121px; +} + +.flag.sh { + background-position: -128px -121px; +} + +.flag.si { + background-position: -144px -121px; +} + +.flag.sk { + background-position: -160px -121px; +} + +.flag.sl { + background-position: -176px -121px; +} + +.flag.sm { + background-position: -192px -121px; +} + +.flag.sn { + background-position: -208px -121px; +} + +.flag.so { + background-position: -224px -121px; +} + +.flag.sr { + background-position: -240px -121px; +} + +.flag.ss { + background-position: 0 -132px; +} + +.flag.st { + background-position: -16px -132px; +} + +.flag.sv { + background-position: -32px -132px; +} + +.flag.sx { + background-position: -48px -132px; +} + +.flag.sy { + background-position: -64px -132px; +} + +.flag.sz { + background-position: -80px -132px; +} + +.flag.tc { + background-position: -96px -132px; +} + +.flag.td { + background-position: -112px -132px; +} + +.flag.tg { + background-position: -128px -132px; +} + +.flag.th { + background-position: -144px -132px; +} + +.flag.tj { + background-position: -160px -132px; +} + +.flag.tk { + background-position: -176px -132px; +} + +.flag.tl { + background-position: -192px -132px; +} + +.flag.tm { + background-position: -208px -132px; +} + +.flag.tn { + background-position: -224px -132px; +} + +.flag.to { + background-position: -240px -132px; +} + +.flag.tr { + background-position: 0 -143px; +} + +.flag.tt { + background-position: -16px -143px; +} + +.flag.tv { + background-position: -32px -143px; +} + +.flag.tw { + background-position: -48px -143px; +} + +.flag.tz { + background-position: -64px -143px; +} + +.flag.ua { + background-position: -80px -143px; +} + +.flag.ug { + background-position: -96px -143px; +} + +.flag.us { + background-position: -112px -143px; +} + +.flag.uy { + background-position: -128px -143px; +} + +.flag.uz { + background-position: -144px -143px; +} + +.flag.va { + background-position: -160px -143px; +} + +.flag.vc { + background-position: -176px -143px; +} + +.flag.ve { + background-position: -192px -143px; +} + +.flag.vg { + background-position: -208px -143px; +} + +.flag.vi { + background-position: -224px -143px; +} + +.flag.vn { + background-position: -240px -143px; +} + +.flag.vu { + background-position: 0 -154px; +} + +.flag.wf { + background-position: -16px -154px; +} + +.flag.ws { + background-position: -32px -154px; +} + +.flag.ye { + background-position: -48px -154px; +} + +.flag.za { + background-position: -64px -154px; +} + +.flag.zm { + background-position: -80px -154px; +} + +.flag.zw { + background-position: -96px -154px; +} \ No newline at end of file diff --git a/src/styles.ts b/src/styles.ts new file mode 100644 index 0000000..25f1ba6 --- /dev/null +++ b/src/styles.ts @@ -0,0 +1,13 @@ +export default (cssText: string) => { + /** Inject the given `cssText` in the document head */ + const style = document.createElement("style"); + style.setAttribute("type", "text/css"); + + if ((style as any).styleSheet) { + (style as any).styleSheet.cssText = cssText; + } else { + style.appendChild(document.createTextNode(cssText)); + } + + document.head.appendChild(style); +} diff --git a/tests/antd4.test.tsx b/tests/antd4.test.tsx index 8883aed..f1400f8 100644 --- a/tests/antd4.test.tsx +++ b/tests/antd4.test.tsx @@ -3,6 +3,5 @@ import Button from "antd4/lib/button"; import FormItem from "antd4/lib/form/FormItem"; import commonTests from "./common"; -import PhoneInput from "../src/legacy"; -commonTests(PhoneInput, Form, FormItem, Button); +commonTests(Form, FormItem, Button); diff --git a/tests/antd5.test.tsx b/tests/antd5.test.tsx index 369f1c5..ba569c2 100644 --- a/tests/antd5.test.tsx +++ b/tests/antd5.test.tsx @@ -3,6 +3,5 @@ import Button from "antd/lib/button"; import FormItem from "antd/lib/form/FormItem"; import commonTests from "./common"; -import PhoneInput from "../src"; -commonTests(PhoneInput, Form, FormItem, Button); +commonTests(Form, FormItem, Button); diff --git a/tests/common.tsx b/tests/common.tsx index ff2c227..394b627 100644 --- a/tests/common.tsx +++ b/tests/common.tsx @@ -2,6 +2,8 @@ import assert from "assert"; import userEvent from "@testing-library/user-event"; import {act, render, screen} from "@testing-library/react"; +import PhoneInput from "../src"; + Object.defineProperty(window, "matchMedia", { writable: true, value: jest.fn().mockImplementation(query => ({ @@ -16,7 +18,7 @@ Object.defineProperty(window, "matchMedia", { })), }) -export default function commonTests(PhoneInput: any, Form: any, FormItem: any, Button: any) { +export default function commonTests(Form: any, FormItem: any, Button: any) { console.warn = jest.fn(); describe("Checking the basic rendering and functionality", () => { From 780f1c99e6db60203f22086fe9a5e67d03bb1595 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 26 Oct 2023 15:56:23 +0400 Subject: [PATCH 22/69] GH-53: Fix the after-build preparation of styles Signed-off-by: Artyom Vancyan --- scripts/prepare-styles.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/prepare-styles.ts b/scripts/prepare-styles.ts index 8972977..4264a75 100644 --- a/scripts/prepare-styles.ts +++ b/scripts/prepare-styles.ts @@ -2,17 +2,15 @@ import fs from "fs"; import util from "node:util"; import process from "node:child_process"; -const exec = (command: string) => util.promisify(process.exec)(command); +const exec = (command: string) => util.promisify(process.exec)(command, {shell: "/bin/bash"}); (async () => { - await exec("bash -c 'cp src/legacy/*.css legacy'"); - - let styles = fs.readFileSync("./legacy/style5.css", "utf8"); + let styles = fs.readFileSync("./src/styles.css", "utf8"); styles = styles.replaceAll(/\/\*\*.*?\*\/[\n\s]*/gs, ""); styles = styles.replaceAll(/\B[^{}]*?\{[\s\n]}/g, ""); styles = styles.replaceAll(/\//g, "\\\/"); styles = styles.replaceAll(/\n\s*/g, ""); - await exec(`find legacy -maxdepth 1 -name '*.js' -type f -exec sed -i 's/style5.css/${styles}/g' {} +`); - await exec("find . legacy -maxdepth 1 \\( -name '*.ts' -o -name '*.js' \\) -type f -exec sed -i 's/antd\\/lib/antd\\/es/g' {} +"); + await exec(`ls *.js | xargs -I {} sed -i 's/styles.css/${styles}/g' {}`); + await exec("ls *.{j,t}s | xargs -I {} sed -i 's/antd\\/lib/antd\\/es/g' {}"); })(); From 90e12b5003351445f2eb9b08bd9ce96f13f6c1ab Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Thu, 26 Oct 2023 15:57:20 +0400 Subject: [PATCH 23/69] GH-53: Fix the build and handle built files properly Signed-off-by: Artyom Vancyan --- .gitignore | 6 +++--- package.json | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 038f69e..45b46aa 100644 --- a/.gitignore +++ b/.gitignore @@ -6,11 +6,11 @@ package-lock.json .idea/ # Build files -./legacy/ +./metadata/ +./styles* +./types* ./index* -!examples/**/index* - # Pycache __pycache__/ *.py[cod] diff --git a/package.json b/package.json index b90ee1e..5d4cff2 100644 --- a/package.json +++ b/package.json @@ -32,13 +32,6 @@ "default": "./index.d.ts" } }, - "./legacy": { - "import": "./legacy/index.js", - "require": "./legacy/index.cjs.js", - "types": { - "default": "./legacy/index.d.ts" - } - }, "./types": { "import": "./types.js", "require": "./types.cjs.js", @@ -46,21 +39,28 @@ "default": "./types.d.ts" } }, + "./styles": { + "import": "./styles.js", + "require": "./styles.cjs.js", + "types": { + "default": "./styles.d.ts" + } + }, "./package.json": "./package.json" }, "files": [ "index*", - "style*", "types*", - "legacy", + "styles*", "LICENSE", + "metadata", "README.md" ], "scripts": { - "rename": "bash -c 'for file in $1*.js; do if [[ \"${file%.js}\" =~ ^[^.]*$ ]]; then mv \"$file\" \"${file%.js}.$0.js\"; fi; done'", - "compile": "tsc --module commonjs && npm run rename -- cjs && npm run rename -- cjs legacy/ && tsc --declaration", - "build": "npm run compile && tsx scripts/prepare-styles.ts", - "prebuild": "rm -r legacy index* style* types* || true", + "rename": "bash -c 'for file in *.js; do mv $file \"${file%.js}.$0.js\"; done'", + "build": "tsc --module commonjs && npm run rename -- cjs && tsc --declaration", + "prebuild": "rm -r metadata index* types* styles* || true", + "postbuild": "tsx scripts/prepare-styles.ts", "postpack": "tsx scripts/prepare-package.ts", "test": "jest --config jestconfig.json" }, From 175459b946fc7fe9784e64a1119d0df9f074068b Mon Sep 17 00:00:00 2001 From: Artyom Vancyan <44609997+ArtyomVancyan@users.noreply.github.com> Date: Thu, 26 Oct 2023 19:58:58 +0400 Subject: [PATCH 24/69] GH-53: Delete the src/legacy directory --- src/legacy/countries.json | 3978 ----------------------------------- src/legacy/index.tsx | 201 -- src/legacy/style.ts | 13 - src/legacy/style5.css | 954 --------- src/legacy/timezones.json | 444 ---- src/legacy/validations.json | 235 --- 6 files changed, 5825 deletions(-) delete mode 100644 src/legacy/countries.json delete mode 100644 src/legacy/index.tsx delete mode 100644 src/legacy/style.ts delete mode 100644 src/legacy/style5.css delete mode 100644 src/legacy/timezones.json delete mode 100644 src/legacy/validations.json diff --git a/src/legacy/countries.json b/src/legacy/countries.json deleted file mode 100644 index 3898da9..0000000 --- a/src/legacy/countries.json +++ /dev/null @@ -1,3978 +0,0 @@ -[ - [ - "af", - "Afghanistan", - "93", - "93", - "+93 (..) ... ...." - ], - [ - "al", - "Albania", - "355", - "355", - "+355 (...) ... ..." - ], - [ - "dz", - "Algeria", - "213", - "213", - "+213 (..) ... ...." - ], - [ - "as", - "American Samoa", - "1684", - "1684", - "+1 (684) ...." - ], - [ - "ad", - "Andorra", - "376", - "376", - "+376 (...) ..." - ], - [ - "ao", - "Angola", - "244", - "244", - "+244 (...) ... ..." - ], - [ - "ai", - "Anguilla", - "1264", - "1264", - "+1 (264) ...." - ], - [ - "ag", - "Antigua and Barbuda", - "1268", - "1268", - "+1 (268) ...." - ], - [ - "ar", - "Argentina", - "54", - "5411", - "+54 (11.) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54221", - "+54 (221) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54223", - "+54 (223) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54261", - "+54 (261) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54264", - "+54 (264) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "542652", - "+54 (265) 2.. ...." - ], - [ - "ar", - "Argentina", - "54", - "54280", - "+54 (280) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "542905", - "+54 (290) 5.. ...." - ], - [ - "ar", - "Argentina", - "54", - "54291", - "+54 (291) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "542920", - "+54 (292) 0.. ...." - ], - [ - "ar", - "Argentina", - "54", - "542966", - "+54 (296) 6.. ...." - ], - [ - "ar", - "Argentina", - "54", - "54299", - "+54 (299) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54341", - "+54 (341) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54342", - "+54 (342) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54343", - "+54 (343) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54351", - "+54 (351) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54376", - "+54 (376) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54379", - "+54 (379) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54381", - "+54 (381) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "543833", - "+54 (383) 3.. ...." - ], - [ - "ar", - "Argentina", - "54", - "54385", - "+54 (385) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54387", - "+54 (387) ... ...." - ], - [ - "ar", - "Argentina", - "54", - "54388", - "+54 (388) ... ...." - ], - [ - "am", - "Armenia", - "374", - "374", - "+374 (..) ... ..." - ], - [ - "aw", - "Aruba", - "297", - "297", - "+297 (...) ...." - ], - [ - "au", - "Australia", - "61", - "612", - "+61 (2) .... ...." - ], - [ - "au", - "Australia", - "61", - "613", - "+61 (3) .... ...." - ], - [ - "au", - "Australia", - "61", - "614", - "+61 (4) .... ...." - ], - [ - "au", - "Australia", - "61", - "617", - "+61 (7) .... ...." - ], - [ - "au", - "Australia", - "61", - "618", - "+61 (8) .... ...." - ], - [ - "au", - "Australia", - "61", - "6102", - "+61 (0) 2... ...." - ], - [ - "au", - "Australia", - "61", - "6103", - "+61 (0) 3... ...." - ], - [ - "au", - "Australia", - "61", - "6104", - "+61 (0) 4... ...." - ], - [ - "au", - "Australia", - "61", - "6107", - "+61 (0) 7... ...." - ], - [ - "au", - "Australia", - "61", - "6108", - "+61 (0) 8... ...." - ], - [ - "at", - "Austria", - "43", - "43", - "+43 (...) ... ...." - ], - [ - "az", - "Azerbaijan", - "994", - "994", - "+994 (..) ... .. .." - ], - [ - "bs", - "Bahamas", - "1242", - "1242", - "+1 (242) ...." - ], - [ - "bh", - "Bahrain", - "973", - "973", - "+973 (....) ...." - ], - [ - "bd", - "Bangladesh", - "880", - "880", - "+880 (..) ... ..." - ], - [ - "bb", - "Barbados", - "1246", - "1246", - "+1 (246) ...." - ], - [ - "by", - "Belarus", - "375", - "375", - "+375 (..) ... .. .." - ], - [ - "be", - "Belgium", - "32", - "32", - "+32 (...) ... ..." - ], - [ - "bz", - "Belize", - "501", - "501", - "+501 (...) ...." - ], - [ - "bj", - "Benin", - "229", - "229", - "+229 (..) .. ...." - ], - [ - "bm", - "Bermuda", - "1441", - "1441", - "+1 (441) ...." - ], - [ - "bt", - "Bhutan", - "975", - "975", - "+975 (.) ... ..." - ], - [ - "bo", - "Bolivia", - "591", - "591", - "+591 (.) ... ...." - ], - [ - "ba", - "Bosnia and Herzegovina", - "387", - "387", - "+387 (..) ....." - ], - [ - "bw", - "Botswana", - "267", - "267", - "+267 (..) ... ..." - ], - [ - "br", - "Brazil", - "55", - "55", - "+55 (..) .... ...." - ], - [ - "io", - "British Indian Ocean Territory", - "246", - "246", - "+246 (...) ...." - ], - [ - "vg", - "British Virgin Islands", - "1284", - "1284", - "+1 (284) ...." - ], - [ - "bn", - "Brunei", - "673", - "673", - "+673 (...) ...." - ], - [ - "bg", - "Bulgaria", - "359", - "359", - "+359 (...) ... ..." - ], - [ - "bf", - "Burkina Faso", - "226", - "226", - "+226 (..) .. ...." - ], - [ - "bi", - "Burundi", - "257", - "257", - "+257 (..) .. ...." - ], - [ - "kh", - "Cambodia", - "855", - "855", - "+855 (..) ... ..." - ], - [ - "cm", - "Cameroon", - "237", - "237", - "+237 (....) ...." - ], - [ - "ca", - "Canada", - "1204", - "1204", - "+1 (204) ... ...." - ], - [ - "ca", - "Canada", - "1226", - "1226", - "+1 (226) ... ...." - ], - [ - "ca", - "Canada", - "1236", - "1236", - "+1 (236) ... ...." - ], - [ - "ca", - "Canada", - "1249", - "1249", - "+1 (249) ... ...." - ], - [ - "ca", - "Canada", - "1250", - "1250", - "+1 (250) ... ...." - ], - [ - "ca", - "Canada", - "1289", - "1289", - "+1 (289) ... ...." - ], - [ - "ca", - "Canada", - "1306", - "1306", - "+1 (306) ... ...." - ], - [ - "ca", - "Canada", - "1343", - "1343", - "+1 (343) ... ...." - ], - [ - "ca", - "Canada", - "1365", - "1365", - "+1 (365) ... ...." - ], - [ - "ca", - "Canada", - "1387", - "1387", - "+1 (387) ... ...." - ], - [ - "ca", - "Canada", - "1403", - "1403", - "+1 (403) ... ...." - ], - [ - "ca", - "Canada", - "1416", - "1416", - "+1 (416) ... ...." - ], - [ - "ca", - "Canada", - "1418", - "1418", - "+1 (418) ... ...." - ], - [ - "ca", - "Canada", - "1431", - "1431", - "+1 (431) ... ...." - ], - [ - "ca", - "Canada", - "1437", - "1437", - "+1 (437) ... ...." - ], - [ - "ca", - "Canada", - "1438", - "1438", - "+1 (438) ... ...." - ], - [ - "ca", - "Canada", - "1450", - "1450", - "+1 (450) ... ...." - ], - [ - "ca", - "Canada", - "1506", - "1506", - "+1 (506) ... ...." - ], - [ - "ca", - "Canada", - "1514", - "1514", - "+1 (514) ... ...." - ], - [ - "ca", - "Canada", - "1519", - "1519", - "+1 (519) ... ...." - ], - [ - "ca", - "Canada", - "1548", - "1548", - "+1 (548) ... ...." - ], - [ - "ca", - "Canada", - "1579", - "1579", - "+1 (579) ... ...." - ], - [ - "ca", - "Canada", - "1581", - "1581", - "+1 (581) ... ...." - ], - [ - "ca", - "Canada", - "1587", - "1587", - "+1 (587) ... ...." - ], - [ - "ca", - "Canada", - "1604", - "1604", - "+1 (604) ... ...." - ], - [ - "ca", - "Canada", - "1613", - "1613", - "+1 (613) ... ...." - ], - [ - "ca", - "Canada", - "1639", - "1639", - "+1 (639) ... ...." - ], - [ - "ca", - "Canada", - "1647", - "1647", - "+1 (647) ... ...." - ], - [ - "ca", - "Canada", - "1672", - "1672", - "+1 (672) ... ...." - ], - [ - "ca", - "Canada", - "1705", - "1705", - "+1 (705) ... ...." - ], - [ - "ca", - "Canada", - "1709", - "1709", - "+1 (709) ... ...." - ], - [ - "ca", - "Canada", - "1742", - "1742", - "+1 (742) ... ...." - ], - [ - "ca", - "Canada", - "1778", - "1778", - "+1 (778) ... ...." - ], - [ - "ca", - "Canada", - "1780", - "1780", - "+1 (780) ... ...." - ], - [ - "ca", - "Canada", - "1782", - "1782", - "+1 (782) ... ...." - ], - [ - "ca", - "Canada", - "1807", - "1807", - "+1 (807) ... ...." - ], - [ - "ca", - "Canada", - "1819", - "1819", - "+1 (819) ... ...." - ], - [ - "ca", - "Canada", - "1825", - "1825", - "+1 (825) ... ...." - ], - [ - "ca", - "Canada", - "1867", - "1867", - "+1 (867) ... ...." - ], - [ - "ca", - "Canada", - "1873", - "1873", - "+1 (873) ... ...." - ], - [ - "ca", - "Canada", - "1902", - "1902", - "+1 (902) ... ...." - ], - [ - "ca", - "Canada", - "1905", - "1905", - "+1 (905) ... ...." - ], - [ - "cv", - "Cape Verde", - "238", - "238", - "+238 (...) .. .." - ], - [ - "bq", - "Caribbean Netherlands", - "599", - "599", - "+599 (...) .... ...." - ], - [ - "ky", - "Cayman Islands", - "1345", - "1345", - "+1 (345) ...." - ], - [ - "cf", - "Central African Republic", - "236", - "236", - "+236 (..) .. ...." - ], - [ - "td", - "Chad", - "235", - "235", - "+235 (..) .. .. .." - ], - [ - "cl", - "Chile", - "56", - "56", - "+56 (.) .... ...." - ], - [ - "cn", - "China", - "86", - "86", - "+86 (..) ..... ....." - ], - [ - "co", - "Colombia", - "57", - "57", - "+57 (...) ... ...." - ], - [ - "km", - "Comoros", - "269", - "269", - "+269 (..) ....." - ], - [ - "cd", - "Congo", - "243", - "243", - "+243 (...) ... ..." - ], - [ - "cg", - "Congo", - "242", - "242", - "+242 (..) ... ...." - ], - [ - "ck", - "Cook Islands", - "682", - "682", - "+682 (..) ..." - ], - [ - "cr", - "Costa Rica", - "506", - "506", - "+506 (....) ...." - ], - [ - "hr", - "Croatia", - "385", - "385", - "+385 (..) ... ..." - ], - [ - "cu", - "Cuba", - "53", - "53", - "+53 (.) ... ...." - ], - [ - "cw", - "Cura\u00e7ao", - "599", - "599", - "+599 (...) ...." - ], - [ - "cy", - "Cyprus", - "357", - "357", - "+357 (..) ... ..." - ], - [ - "cz", - "Czech Republic", - "420", - "420", - "+420 (...) ... ..." - ], - [ - "ci", - "C\u00f4te d\u2019Ivoire", - "225", - "225", - "+225 (..) ... ..." - ], - [ - "dk", - "Denmark", - "45", - "45", - "+45 (..) .. .. .." - ], - [ - "dj", - "Djibouti", - "253", - "253", - "+253 (..) .. .. .." - ], - [ - "dm", - "Dominica", - "1767", - "1767", - "+1 (767) ...." - ], - [ - "do", - "Dominican Republic", - "1809", - "1809", - "+1 (809) ...." - ], - [ - "do", - "Dominican Republic", - "1829", - "1829", - "+1 (829) ...." - ], - [ - "do", - "Dominican Republic", - "1849", - "1849", - "+1 (849) ...." - ], - [ - "ec", - "Ecuador", - "593", - "593", - "+593 (..) ... ...." - ], - [ - "eg", - "Egypt", - "20", - "20", - "+20 (...) ... ...." - ], - [ - "sv", - "El Salvador", - "503", - "503", - "+503 (..) .. ...." - ], - [ - "gq", - "Equatorial Guinea", - "240", - "240", - "+240 (..) ... ...." - ], - [ - "er", - "Eritrea", - "291", - "291", - "+291 (.) ... ..." - ], - [ - "ee", - "Estonia", - "372", - "372", - "+372 (....) ...." - ], - [ - "et", - "Ethiopia", - "251", - "251", - "+251 (..) ... ...." - ], - [ - "fk", - "Falkland Islands", - "500", - "500", - "+500 ....." - ], - [ - "fo", - "Faroe Islands", - "298", - "298", - "+298 (...) ..." - ], - [ - "fj", - "Fiji", - "679", - "679", - "+679 (..) ....." - ], - [ - "fi", - "Finland", - "358", - "358", - "+358 (...) ... .. .." - ], - [ - "fr", - "France", - "33", - "33", - "+33 (...) ... ...." - ], - [ - "gf", - "French Guiana", - "594", - "594", - "+594 (.....) ...." - ], - [ - "pf", - "French Polynesia", - "689", - "689", - "+689 (..) .. .." - ], - [ - "ga", - "Gabon", - "241", - "241", - "+241 (.) .. .. .." - ], - [ - "gm", - "Gambia", - "220", - "220", - "+220 (...) .. .." - ], - [ - "ge", - "Georgia", - "995", - "995", - "+995 (...) ... ..." - ], - [ - "de", - "Germany", - "49", - "49", - "+49 (....) ... ...." - ], - [ - "gh", - "Ghana", - "233", - "233", - "+233 (...) ... ..." - ], - [ - "gi", - "Gibraltar", - "350", - "350", - "+350 (...) ....." - ], - [ - "gr", - "Greece", - "30", - "30", - "+30 (...) ... ...." - ], - [ - "gl", - "Greenland", - "299", - "299", - "+299 (..) .. .." - ], - [ - "gd", - "Grenada", - "1473", - "1473", - "+1 (473) ...." - ], - [ - "gp", - "Guadeloupe", - "590", - "590", - "+590 (...) ... ...." - ], - [ - "gu", - "Guam", - "1671", - "1671", - "+1 (671) ...." - ], - [ - "gt", - "Guatemala", - "502", - "502", - "+502 (.) ... ...." - ], - [ - "gn", - "Guinea", - "224", - "224", - "+224 (..) ... ..." - ], - [ - "gw", - "Guinea-Bissau", - "245", - "245", - "+245 (.) ......" - ], - [ - "gy", - "Guyana", - "592", - "592", - "+592 (...) ...." - ], - [ - "ht", - "Haiti", - "509", - "509", - "+509 (..) .. ...." - ], - [ - "hn", - "Honduras", - "504", - "504", - "+504 (....) ...." - ], - [ - "hk", - "Hong Kong", - "852", - "852", - "+852 (....) ...." - ], - [ - "hu", - "Hungary", - "36", - "36", - "+36 (...) ... ..." - ], - [ - "is", - "Iceland", - "354", - "354", - "+354 (...) ...." - ], - [ - "in", - "India", - "91", - "91", - "+91 (....) ... ..." - ], - [ - "id", - "Indonesia", - "62", - "62", - "+62 (..) ... ...." - ], - [ - "ir", - "Iran", - "98", - "98", - "+98 (...) ... ...." - ], - [ - "iq", - "Iraq", - "964", - "964", - "+964 (...) ... ...." - ], - [ - "ie", - "Ireland", - "353", - "353", - "+353 (...) ... ..." - ], - [ - "il", - "Israel", - "972", - "972", - "+972 (..) ... ...." - ], - [ - "it", - "Italy", - "39", - "39", - "+39 (...) .... ..." - ], - [ - "jm", - "Jamaica", - "1876", - "1876", - "+1 (876) ...." - ], - [ - "jp", - "Japan", - "81", - "81", - "+81 (..) .... ...." - ], - [ - "je", - "Jersey", - "44", - "44", - "+44 (..) .... ...." - ], - [ - "jo", - "Jordan", - "962", - "962", - "+962 (.) .... ...." - ], - [ - "kz", - "Kazakhstan", - "7310", - "7310", - "+7 (310) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7311", - "7311", - "+7 (311) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7312", - "7312", - "+7 (312) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7313", - "7313", - "+7 (313) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7315", - "7315", - "+7 (315) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7318", - "7318", - "+7 (318) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7321", - "7321", - "+7 (321) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7324", - "7324", - "+7 (324) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7325", - "7325", - "+7 (325) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7326", - "7326", - "+7 (326) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7327", - "7327", - "+7 (327) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "7336", - "7336", - "+7 (336) ... .. .." - ], - [ - "kz", - "Kazakhstan", - "77172", - "77172", - "+7 (717) 2.. .. .." - ], - [ - "kz", - "Kazakhstan", - "773622", - "773622", - "+7 (736) 22. .. .." - ], - [ - "ke", - "Kenya", - "254", - "254", - "+254 (...) ......" - ], - [ - "ki", - "Kiribati", - "686", - "686", - "+686 (..) ..." - ], - [ - "xk", - "Kosovo", - "383", - "383", - "+383 (...) .... ...." - ], - [ - "kw", - "Kuwait", - "965", - "965", - "+965 (....) ...." - ], - [ - "kg", - "Kyrgyzstan", - "996", - "996", - "+996 (...) ... ..." - ], - [ - "la", - "Laos", - "856", - "856", - "+856 (..) ... ..." - ], - [ - "lv", - "Latvia", - "371", - "371", - "+371 (..) ... ..." - ], - [ - "lb", - "Lebanon", - "961", - "961", - "+961 (..) ... ..." - ], - [ - "ls", - "Lesotho", - "266", - "266", - "+266 (.) ... ...." - ], - [ - "lr", - "Liberia", - "231", - "231", - "+231 (..) ... ..." - ], - [ - "ly", - "Libya", - "218", - "218", - "+218 (..) ... ...." - ], - [ - "li", - "Liechtenstein", - "423", - "423", - "+423 (...) ... ...." - ], - [ - "lt", - "Lithuania", - "370", - "370", - "+370 (...) .. ..." - ], - [ - "lu", - "Luxembourg", - "352", - "352", - "+352 (...) ... ..." - ], - [ - "mo", - "Macau", - "853", - "853", - "+853 (....) ...." - ], - [ - "mk", - "Macedonia", - "389", - "389", - "+389 (..) ... ..." - ], - [ - "mg", - "Madagascar", - "261", - "261", - "+261 (..) .. ....." - ], - [ - "mw", - "Malawi", - "265", - "265", - "+265 (.) .... ...." - ], - [ - "my", - "Malaysia", - "60", - "60", - "+60 (...) ... ...." - ], - [ - "mv", - "Maldives", - "960", - "960", - "+960 (...) ...." - ], - [ - "ml", - "Mali", - "223", - "223", - "+223 (..) .. ...." - ], - [ - "mt", - "Malta", - "356", - "356", - "+356 (....) ...." - ], - [ - "mh", - "Marshall Islands", - "692", - "692", - "+692 (...) ...." - ], - [ - "mq", - "Martinique", - "596", - "596", - "+596 (...) .. .. .." - ], - [ - "mr", - "Mauritania", - "222", - "222", - "+222 (..) .. ...." - ], - [ - "mu", - "Mauritius", - "230", - "230", - "+230 (...) ...." - ], - [ - "mx", - "Mexico", - "52", - "5255", - "+52 (55.) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "5281", - "+52 (81.) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "5233", - "+52 (33.) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "52656", - "+52 (656) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "52664", - "+52 (664) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "52998", - "+52 (998) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "52774", - "+52 (774) ... ...." - ], - [ - "mx", - "Mexico", - "52", - "52229", - "+52 (229) ... ...." - ], - [ - "fm", - "Micronesia", - "691", - "691", - "+691 (...) ...." - ], - [ - "md", - "Moldova", - "373", - "373", - "+373 (....) ...." - ], - [ - "mc", - "Monaco", - "377", - "377", - "+377 (...) ... ..." - ], - [ - "mn", - "Mongolia", - "976", - "976", - "+976 (..) .. ...." - ], - [ - "me", - "Montenegro", - "382", - "382", - "+382 (..) ... ..." - ], - [ - "ms", - "Montserrat", - "1664", - "1664", - "+1 (664) ...." - ], - [ - "ma", - "Morocco", - "212", - "212", - "+212 (..) .... ..." - ], - [ - "mz", - "Mozambique", - "258", - "258", - "+258 (..) ... ...." - ], - [ - "mm", - "Myanmar", - "95", - "95", - "+95 (..) ... ..." - ], - [ - "na", - "Namibia", - "264", - "264", - "+264 (..) ... ...." - ], - [ - "nr", - "Nauru", - "674", - "674", - "+674 (...) ...." - ], - [ - "np", - "Nepal", - "977", - "977", - "+977 (..) ... ..." - ], - [ - "nl", - "Netherlands", - "31", - "31", - "+31 (..) ... ...." - ], - [ - "nc", - "New Caledonia", - "687", - "687", - "+687 (..) ...." - ], - [ - "nz", - "New Zealand", - "64", - "64", - "+64 (...) ... ...." - ], - [ - "ni", - "Nicaragua", - "505", - "505", - "+505 (....) ...." - ], - [ - "ne", - "Niger", - "227", - "227", - "+227 (..) .. ...." - ], - [ - "ng", - "Nigeria", - "234", - "234", - "+234 (...) ... ...." - ], - [ - "nu", - "Niue", - "683", - "683", - "+683 ...." - ], - [ - "nf", - "Norfolk Island", - "672", - "672", - "+672 (..) ..." - ], - [ - "kp", - "North Korea", - "850", - "850", - "+850 (...) .... ........" - ], - [ - "mp", - "Northern Mariana Islands", - "1670", - "1670", - "+1 (670) ...." - ], - [ - "no", - "Norway", - "47", - "47", - "+47 (...) .. ..." - ], - [ - "om", - "Oman", - "968", - "968", - "+968 (..) ... ..." - ], - [ - "pk", - "Pakistan", - "92", - "92", - "+92 (...) ... ...." - ], - [ - "pw", - "Palau", - "680", - "680", - "+680 (...) ...." - ], - [ - "ps", - "Palestine", - "970", - "970", - "+970 (..) ... ...." - ], - [ - "pa", - "Panama", - "507", - "507", - "+507 (...) ...." - ], - [ - "pg", - "Papua New Guinea", - "675", - "675", - "+675 (...) .. ..." - ], - [ - "py", - "Paraguay", - "595", - "595", - "+595 (...) ... ..." - ], - [ - "pe", - "Peru", - "51", - "51", - "+51 (...) ... ..." - ], - [ - "ph", - "Philippines", - "63", - "63", - "+63 (...) ... ...." - ], - [ - "pl", - "Poland", - "48", - "48", - "+48 (...) ... ..." - ], - [ - "pt", - "Portugal", - "351", - "351", - "+351 (..) ... ...." - ], - [ - "pr", - "Puerto Rico", - "1787", - "1787", - "+1 (787) ... ...." - ], - [ - "pr", - "Puerto Rico", - "1939", - "1939", - "+1 (939) ... ...." - ], - [ - "qa", - "Qatar", - "974", - "974", - "+974 (....) ...." - ], - [ - "ro", - "Romania", - "40", - "40", - "+40 (..) ... ...." - ], - [ - "ru", - "Russia", - "7", - "7", - "+7 (...) ... .. .." - ], - [ - "rw", - "Rwanda", - "250", - "250", - "+250 (...) ... ..." - ], - [ - "re", - "R\u00e9union", - "262", - "262", - "+262 (.....) ...." - ], - [ - "kn", - "Saint Kitts and Nevis", - "1869", - "1869", - "+1 (869) ...." - ], - [ - "lc", - "Saint Lucia", - "1758", - "1758", - "+1 (758) ...." - ], - [ - "vc", - "Saint Vincent and the Grenadines", - "1784", - "1784", - "+1 (784) ...." - ], - [ - "ws", - "Samoa", - "685", - "685", - "+685 (..) ...." - ], - [ - "sm", - "San Marino", - "378", - "378", - "+378 (....) ......" - ], - [ - "sa", - "Saudi Arabia", - "966", - "966", - "+966 (.) .... ...." - ], - [ - "sn", - "Senegal", - "221", - "221", - "+221 (..) ... ...." - ], - [ - "rs", - "Serbia", - "381", - "381", - "+381 (..) ... ...." - ], - [ - "sc", - "Seychelles", - "248", - "248", - "+248 (.) ... ..." - ], - [ - "sl", - "Sierra Leone", - "232", - "232", - "+232 (..) ......" - ], - [ - "sg", - "Singapore", - "65", - "65", - "+65 (....) ...." - ], - [ - "sx", - "Sint Maarten", - "1721", - "1721", - "+1 (721) ...." - ], - [ - "sk", - "Slovakia", - "421", - "421", - "+421 (...) ... ..." - ], - [ - "si", - "Slovenia", - "386", - "386", - "+386 (..) ... ..." - ], - [ - "sb", - "Solomon Islands", - "677", - "677", - "+677 (...) ...." - ], - [ - "so", - "Somalia", - "252", - "252", - "+252 (..) ... ..." - ], - [ - "za", - "South Africa", - "27", - "27", - "+27 (..) ... ...." - ], - [ - "kr", - "South Korea", - "82", - "82", - "+82 (..) .... ....." - ], - [ - "ss", - "South Sudan", - "211", - "211", - "+211 (..) ... ...." - ], - [ - "es", - "Spain", - "34", - "34", - "+34 (...) ... ..." - ], - [ - "lk", - "Sri Lanka", - "94", - "94", - "+94 (..) ... ...." - ], - [ - "sh", - "St. Helena", - "290", - "290", - "+290 ...." - ], - [ - "pm", - "St. Pierre & Miquelon", - "508", - "508", - "+508 (...) ... ..." - ], - [ - "sd", - "Sudan", - "249", - "249", - "+249 (..) ... ...." - ], - [ - "sr", - "Suriname", - "597", - "597", - "+597 (...) ...." - ], - [ - "sz", - "Swaziland", - "268", - "268", - "+268 (..) .. ...." - ], - [ - "se", - "Sweden", - "46", - "46", - "+46 (..) ... ...." - ], - [ - "ch", - "Switzerland", - "41", - "41", - "+41 (..) ... ...." - ], - [ - "sy", - "Syria", - "963", - "963", - "+963 (..) .... ..." - ], - [ - "st", - "S\u00e3o Tom\u00e9 and Pr\u00edncipe", - "239", - "239", - "+239 (..) ....." - ], - [ - "tw", - "Taiwan", - "886", - "886", - "+886 (.) .... ...." - ], - [ - "tj", - "Tajikistan", - "992", - "992", - "+992 (..) ... ...." - ], - [ - "tz", - "Tanzania", - "255", - "255", - "+255 (..) ... ...." - ], - [ - "th", - "Thailand", - "66", - "66", - "+66 (..) ... ...." - ], - [ - "tl", - "Timor-Leste", - "670", - "670", - "+670 (...) ....." - ], - [ - "tg", - "Togo", - "228", - "228", - "+228 (..) ... ..." - ], - [ - "tk", - "Tokelau", - "690", - "690", - "+690 ...." - ], - [ - "to", - "Tonga", - "676", - "676", - "+676 ....." - ], - [ - "tt", - "Trinidad and Tobago", - "1868", - "1868", - "+1 (868) ...." - ], - [ - "tn", - "Tunisia", - "216", - "216", - "+216 (..) ... ..." - ], - [ - "tr", - "Turkey", - "90", - "90", - "+90 (...) ... ...." - ], - [ - "tm", - "Turkmenistan", - "993", - "993", - "+993 (.) ... ...." - ], - [ - "tc", - "Turks & Caicos Islands", - "1649", - "1649", - "+1 (649) ...." - ], - [ - "tv", - "Tuvalu", - "688", - "688", - "+688 ......" - ], - [ - "vi", - "U.S. Virgin Islands", - "1340", - "1340", - "+1 (340) ...." - ], - [ - "ug", - "Uganda", - "256", - "256", - "+256 (...) ... ..." - ], - [ - "ua", - "Ukraine", - "380", - "380", - "+380 (..) ... .. .." - ], - [ - "ae", - "United Arab Emirates", - "971", - "971", - "+971 (..) ... ...." - ], - [ - "gb", - "United Kingdom", - "44", - "44", - "+44 (..) .... ...." - ], - [ - "us", - "United States", - "1", - "1907", - "+1 (907) ... ...." - ], - [ - "us", - "United States", - "1", - "1205", - "+1 (205) ... ...." - ], - [ - "us", - "United States", - "1", - "1251", - "+1 (251) ... ...." - ], - [ - "us", - "United States", - "1", - "1256", - "+1 (256) ... ...." - ], - [ - "us", - "United States", - "1", - "1334", - "+1 (334) ... ...." - ], - [ - "us", - "United States", - "1", - "1479", - "+1 (479) ... ...." - ], - [ - "us", - "United States", - "1", - "1501", - "+1 (501) ... ...." - ], - [ - "us", - "United States", - "1", - "1870", - "+1 (870) ... ...." - ], - [ - "us", - "United States", - "1", - "1480", - "+1 (480) ... ...." - ], - [ - "us", - "United States", - "1", - "1520", - "+1 (520) ... ...." - ], - [ - "us", - "United States", - "1", - "1602", - "+1 (602) ... ...." - ], - [ - "us", - "United States", - "1", - "1623", - "+1 (623) ... ...." - ], - [ - "us", - "United States", - "1", - "1928", - "+1 (928) ... ...." - ], - [ - "us", - "United States", - "1", - "1209", - "+1 (209) ... ...." - ], - [ - "us", - "United States", - "1", - "1213", - "+1 (213) ... ...." - ], - [ - "us", - "United States", - "1", - "1310", - "+1 (310) ... ...." - ], - [ - "us", - "United States", - "1", - "1323", - "+1 (323) ... ...." - ], - [ - "us", - "United States", - "1", - "1408", - "+1 (408) ... ...." - ], - [ - "us", - "United States", - "1", - "1415", - "+1 (415) ... ...." - ], - [ - "us", - "United States", - "1", - "1510", - "+1 (510) ... ...." - ], - [ - "us", - "United States", - "1", - "1530", - "+1 (530) ... ...." - ], - [ - "us", - "United States", - "1", - "1559", - "+1 (559) ... ...." - ], - [ - "us", - "United States", - "1", - "1562", - "+1 (562) ... ...." - ], - [ - "us", - "United States", - "1", - "1619", - "+1 (619) ... ...." - ], - [ - "us", - "United States", - "1", - "1626", - "+1 (626) ... ...." - ], - [ - "us", - "United States", - "1", - "1650", - "+1 (650) ... ...." - ], - [ - "us", - "United States", - "1", - "1661", - "+1 (661) ... ...." - ], - [ - "us", - "United States", - "1", - "1707", - "+1 (707) ... ...." - ], - [ - "us", - "United States", - "1", - "1714", - "+1 (714) ... ...." - ], - [ - "us", - "United States", - "1", - "1760", - "+1 (760) ... ...." - ], - [ - "us", - "United States", - "1", - "1805", - "+1 (805) ... ...." - ], - [ - "us", - "United States", - "1", - "1818", - "+1 (818) ... ...." - ], - [ - "us", - "United States", - "1", - "1831", - "+1 (831) ... ...." - ], - [ - "us", - "United States", - "1", - "1858", - "+1 (858) ... ...." - ], - [ - "us", - "United States", - "1", - "1909", - "+1 (909) ... ...." - ], - [ - "us", - "United States", - "1", - "1916", - "+1 (916) ... ...." - ], - [ - "us", - "United States", - "1", - "1925", - "+1 (925) ... ...." - ], - [ - "us", - "United States", - "1", - "1949", - "+1 (949) ... ...." - ], - [ - "us", - "United States", - "1", - "1951", - "+1 (951) ... ...." - ], - [ - "us", - "United States", - "1", - "1303", - "+1 (303) ... ...." - ], - [ - "us", - "United States", - "1", - "1719", - "+1 (719) ... ...." - ], - [ - "us", - "United States", - "1", - "1970", - "+1 (970) ... ...." - ], - [ - "us", - "United States", - "1", - "1203", - "+1 (203) ... ...." - ], - [ - "us", - "United States", - "1", - "1860", - "+1 (860) ... ...." - ], - [ - "us", - "United States", - "1", - "1202", - "+1 (202) ... ...." - ], - [ - "us", - "United States", - "1", - "1302", - "+1 (302) ... ...." - ], - [ - "us", - "United States", - "1", - "1239", - "+1 (239) ... ...." - ], - [ - "us", - "United States", - "1", - "1305", - "+1 (305) ... ...." - ], - [ - "us", - "United States", - "1", - "1321", - "+1 (321) ... ...." - ], - [ - "us", - "United States", - "1", - "1352", - "+1 (352) ... ...." - ], - [ - "us", - "United States", - "1", - "1386", - "+1 (386) ... ...." - ], - [ - "us", - "United States", - "1", - "1407", - "+1 (407) ... ...." - ], - [ - "us", - "United States", - "1", - "1561", - "+1 (561) ... ...." - ], - [ - "us", - "United States", - "1", - "1727", - "+1 (727) ... ...." - ], - [ - "us", - "United States", - "1", - "1772", - "+1 (772) ... ...." - ], - [ - "us", - "United States", - "1", - "1813", - "+1 (813) ... ...." - ], - [ - "us", - "United States", - "1", - "1850", - "+1 (850) ... ...." - ], - [ - "us", - "United States", - "1", - "1863", - "+1 (863) ... ...." - ], - [ - "us", - "United States", - "1", - "1904", - "+1 (904) ... ...." - ], - [ - "us", - "United States", - "1", - "1941", - "+1 (941) ... ...." - ], - [ - "us", - "United States", - "1", - "1954", - "+1 (954) ... ...." - ], - [ - "us", - "United States", - "1", - "1229", - "+1 (229) ... ...." - ], - [ - "us", - "United States", - "1", - "1404", - "+1 (404) ... ...." - ], - [ - "us", - "United States", - "1", - "1478", - "+1 (478) ... ...." - ], - [ - "us", - "United States", - "1", - "1706", - "+1 (706) ... ...." - ], - [ - "us", - "United States", - "1", - "1770", - "+1 (770) ... ...." - ], - [ - "us", - "United States", - "1", - "1912", - "+1 (912) ... ...." - ], - [ - "us", - "United States", - "1", - "1808", - "+1 (808) ... ...." - ], - [ - "us", - "United States", - "1", - "1319", - "+1 (319) ... ...." - ], - [ - "us", - "United States", - "1", - "1515", - "+1 (515) ... ...." - ], - [ - "us", - "United States", - "1", - "1563", - "+1 (563) ... ...." - ], - [ - "us", - "United States", - "1", - "1641", - "+1 (641) ... ...." - ], - [ - "us", - "United States", - "1", - "1712", - "+1 (712) ... ...." - ], - [ - "us", - "United States", - "1", - "1208", - "+1 (208) ... ...." - ], - [ - "us", - "United States", - "1", - "1217", - "+1 (217) ... ...." - ], - [ - "us", - "United States", - "1", - "1309", - "+1 (309) ... ...." - ], - [ - "us", - "United States", - "1", - "1312", - "+1 (312) ... ...." - ], - [ - "us", - "United States", - "1", - "1618", - "+1 (618) ... ...." - ], - [ - "us", - "United States", - "1", - "1630", - "+1 (630) ... ...." - ], - [ - "us", - "United States", - "1", - "1708", - "+1 (708) ... ...." - ], - [ - "us", - "United States", - "1", - "1773", - "+1 (773) ... ...." - ], - [ - "us", - "United States", - "1", - "1815", - "+1 (815) ... ...." - ], - [ - "us", - "United States", - "1", - "1847", - "+1 (847) ... ...." - ], - [ - "us", - "United States", - "1", - "1219", - "+1 (219) ... ...." - ], - [ - "us", - "United States", - "1", - "1260", - "+1 (260) ... ...." - ], - [ - "us", - "United States", - "1", - "1317", - "+1 (317) ... ...." - ], - [ - "us", - "United States", - "1", - "1574", - "+1 (574) ... ...." - ], - [ - "us", - "United States", - "1", - "1765", - "+1 (765) ... ...." - ], - [ - "us", - "United States", - "1", - "1812", - "+1 (812) ... ...." - ], - [ - "us", - "United States", - "1", - "1316", - "+1 (316) ... ...." - ], - [ - "us", - "United States", - "1", - "1620", - "+1 (620) ... ...." - ], - [ - "us", - "United States", - "1", - "1785", - "+1 (785) ... ...." - ], - [ - "us", - "United States", - "1", - "1913", - "+1 (913) ... ...." - ], - [ - "us", - "United States", - "1", - "1270", - "+1 (270) ... ...." - ], - [ - "us", - "United States", - "1", - "1502", - "+1 (502) ... ...." - ], - [ - "us", - "United States", - "1", - "1606", - "+1 (606) ... ...." - ], - [ - "us", - "United States", - "1", - "1859", - "+1 (859) ... ...." - ], - [ - "us", - "United States", - "1", - "1225", - "+1 (225) ... ...." - ], - [ - "us", - "United States", - "1", - "1318", - "+1 (318) ... ...." - ], - [ - "us", - "United States", - "1", - "1337", - "+1 (337) ... ...." - ], - [ - "us", - "United States", - "1", - "1504", - "+1 (504) ... ...." - ], - [ - "us", - "United States", - "1", - "1985", - "+1 (985) ... ...." - ], - [ - "us", - "United States", - "1", - "1413", - "+1 (413) ... ...." - ], - [ - "us", - "United States", - "1", - "1508", - "+1 (508) ... ...." - ], - [ - "us", - "United States", - "1", - "1617", - "+1 (617) ... ...." - ], - [ - "us", - "United States", - "1", - "1781", - "+1 (781) ... ...." - ], - [ - "us", - "United States", - "1", - "1978", - "+1 (978) ... ...." - ], - [ - "us", - "United States", - "1", - "1301", - "+1 (301) ... ...." - ], - [ - "us", - "United States", - "1", - "1410", - "+1 (410) ... ...." - ], - [ - "us", - "United States", - "1", - "1207", - "+1 (207) ... ...." - ], - [ - "us", - "United States", - "1", - "1231", - "+1 (231) ... ...." - ], - [ - "us", - "United States", - "1", - "1248", - "+1 (248) ... ...." - ], - [ - "us", - "United States", - "1", - "1269", - "+1 (269) ... ...." - ], - [ - "us", - "United States", - "1", - "1313", - "+1 (313) ... ...." - ], - [ - "us", - "United States", - "1", - "1517", - "+1 (517) ... ...." - ], - [ - "us", - "United States", - "1", - "1586", - "+1 (586) ... ...." - ], - [ - "us", - "United States", - "1", - "1616", - "+1 (616) ... ...." - ], - [ - "us", - "United States", - "1", - "1734", - "+1 (734) ... ...." - ], - [ - "us", - "United States", - "1", - "1810", - "+1 (810) ... ...." - ], - [ - "us", - "United States", - "1", - "1906", - "+1 (906) ... ...." - ], - [ - "us", - "United States", - "1", - "1989", - "+1 (989) ... ...." - ], - [ - "us", - "United States", - "1", - "1218", - "+1 (218) ... ...." - ], - [ - "us", - "United States", - "1", - "1320", - "+1 (320) ... ...." - ], - [ - "us", - "United States", - "1", - "1507", - "+1 (507) ... ...." - ], - [ - "us", - "United States", - "1", - "1612", - "+1 (612) ... ...." - ], - [ - "us", - "United States", - "1", - "1651", - "+1 (651) ... ...." - ], - [ - "us", - "United States", - "1", - "1763", - "+1 (763) ... ...." - ], - [ - "us", - "United States", - "1", - "1952", - "+1 (952) ... ...." - ], - [ - "us", - "United States", - "1", - "1314", - "+1 (314) ... ...." - ], - [ - "us", - "United States", - "1", - "1417", - "+1 (417) ... ...." - ], - [ - "us", - "United States", - "1", - "1573", - "+1 (573) ... ...." - ], - [ - "us", - "United States", - "1", - "1636", - "+1 (636) ... ...." - ], - [ - "us", - "United States", - "1", - "1660", - "+1 (660) ... ...." - ], - [ - "us", - "United States", - "1", - "1816", - "+1 (816) ... ...." - ], - [ - "us", - "United States", - "1", - "1228", - "+1 (228) ... ...." - ], - [ - "us", - "United States", - "1", - "1601", - "+1 (601) ... ...." - ], - [ - "us", - "United States", - "1", - "1662", - "+1 (662) ... ...." - ], - [ - "us", - "United States", - "1", - "1406", - "+1 (406) ... ...." - ], - [ - "us", - "United States", - "1", - "1252", - "+1 (252) ... ...." - ], - [ - "us", - "United States", - "1", - "1336", - "+1 (336) ... ...." - ], - [ - "us", - "United States", - "1", - "1704", - "+1 (704) ... ...." - ], - [ - "us", - "United States", - "1", - "1828", - "+1 (828) ... ...." - ], - [ - "us", - "United States", - "1", - "1910", - "+1 (910) ... ...." - ], - [ - "us", - "United States", - "1", - "1919", - "+1 (919) ... ...." - ], - [ - "us", - "United States", - "1", - "1701", - "+1 (701) ... ...." - ], - [ - "us", - "United States", - "1", - "1308", - "+1 (308) ... ...." - ], - [ - "us", - "United States", - "1", - "1402", - "+1 (402) ... ...." - ], - [ - "us", - "United States", - "1", - "1603", - "+1 (603) ... ...." - ], - [ - "us", - "United States", - "1", - "1201", - "+1 (201) ... ...." - ], - [ - "us", - "United States", - "1", - "1609", - "+1 (609) ... ...." - ], - [ - "us", - "United States", - "1", - "1732", - "+1 (732) ... ...." - ], - [ - "us", - "United States", - "1", - "1856", - "+1 (856) ... ...." - ], - [ - "us", - "United States", - "1", - "1908", - "+1 (908) ... ...." - ], - [ - "us", - "United States", - "1", - "1973", - "+1 (973) ... ...." - ], - [ - "us", - "United States", - "1", - "1505", - "+1 (505) ... ...." - ], - [ - "us", - "United States", - "1", - "1575", - "+1 (575) ... ...." - ], - [ - "us", - "United States", - "1", - "1702", - "+1 (702) ... ...." - ], - [ - "us", - "United States", - "1", - "1775", - "+1 (775) ... ...." - ], - [ - "us", - "United States", - "1", - "1212", - "+1 (212) ... ...." - ], - [ - "us", - "United States", - "1", - "1315", - "+1 (315) ... ...." - ], - [ - "us", - "United States", - "1", - "1516", - "+1 (516) ... ...." - ], - [ - "us", - "United States", - "1", - "1518", - "+1 (518) ... ...." - ], - [ - "us", - "United States", - "1", - "1585", - "+1 (585) ... ...." - ], - [ - "us", - "United States", - "1", - "1607", - "+1 (607) ... ...." - ], - [ - "us", - "United States", - "1", - "1631", - "+1 (631) ... ...." - ], - [ - "us", - "United States", - "1", - "1716", - "+1 (716) ... ...." - ], - [ - "us", - "United States", - "1", - "1718", - "+1 (718) ... ...." - ], - [ - "us", - "United States", - "1", - "1845", - "+1 (845) ... ...." - ], - [ - "us", - "United States", - "1", - "1914", - "+1 (914) ... ...." - ], - [ - "us", - "United States", - "1", - "1216", - "+1 (216) ... ...." - ], - [ - "us", - "United States", - "1", - "1330", - "+1 (330) ... ...." - ], - [ - "us", - "United States", - "1", - "1419", - "+1 (419) ... ...." - ], - [ - "us", - "United States", - "1", - "1440", - "+1 (440) ... ...." - ], - [ - "us", - "United States", - "1", - "1513", - "+1 (513) ... ...." - ], - [ - "us", - "United States", - "1", - "1614", - "+1 (614) ... ...." - ], - [ - "us", - "United States", - "1", - "1740", - "+1 (740) ... ...." - ], - [ - "us", - "United States", - "1", - "1937", - "+1 (937) ... ...." - ], - [ - "us", - "United States", - "1", - "1405", - "+1 (405) ... ...." - ], - [ - "us", - "United States", - "1", - "1580", - "+1 (580) ... ...." - ], - [ - "us", - "United States", - "1", - "1918", - "+1 (918) ... ...." - ], - [ - "us", - "United States", - "1", - "1503", - "+1 (503) ... ...." - ], - [ - "us", - "United States", - "1", - "1541", - "+1 (541) ... ...." - ], - [ - "us", - "United States", - "1", - "1215", - "+1 (215) ... ...." - ], - [ - "us", - "United States", - "1", - "1412", - "+1 (412) ... ...." - ], - [ - "us", - "United States", - "1", - "1570", - "+1 (570) ... ...." - ], - [ - "us", - "United States", - "1", - "1610", - "+1 (610) ... ...." - ], - [ - "us", - "United States", - "1", - "1717", - "+1 (717) ... ...." - ], - [ - "us", - "United States", - "1", - "1724", - "+1 (724) ... ...." - ], - [ - "us", - "United States", - "1", - "1814", - "+1 (814) ... ...." - ], - [ - "us", - "United States", - "1", - "1401", - "+1 (401) ... ...." - ], - [ - "us", - "United States", - "1", - "1803", - "+1 (803) ... ...." - ], - [ - "us", - "United States", - "1", - "1843", - "+1 (843) ... ...." - ], - [ - "us", - "United States", - "1", - "1864", - "+1 (864) ... ...." - ], - [ - "us", - "United States", - "1", - "1605", - "+1 (605) ... ...." - ], - [ - "us", - "United States", - "1", - "1423", - "+1 (423) ... ...." - ], - [ - "us", - "United States", - "1", - "1615", - "+1 (615) ... ...." - ], - [ - "us", - "United States", - "1", - "1731", - "+1 (731) ... ...." - ], - [ - "us", - "United States", - "1", - "1865", - "+1 (865) ... ...." - ], - [ - "us", - "United States", - "1", - "1901", - "+1 (901) ... ...." - ], - [ - "us", - "United States", - "1", - "1931", - "+1 (931) ... ...." - ], - [ - "us", - "United States", - "1", - "1210", - "+1 (210) ... ...." - ], - [ - "us", - "United States", - "1", - "1214", - "+1 (214) ... ...." - ], - [ - "us", - "United States", - "1", - "1254", - "+1 (254) ... ...." - ], - [ - "us", - "United States", - "1", - "1281", - "+1 (281) ... ...." - ], - [ - "us", - "United States", - "1", - "1325", - "+1 (325) ... ...." - ], - [ - "us", - "United States", - "1", - "1361", - "+1 (361) ... ...." - ], - [ - "us", - "United States", - "1", - "1409", - "+1 (409) ... ...." - ], - [ - "us", - "United States", - "1", - "1432", - "+1 (432) ... ...." - ], - [ - "us", - "United States", - "1", - "1512", - "+1 (512) ... ...." - ], - [ - "us", - "United States", - "1", - "1713", - "+1 (713) ... ...." - ], - [ - "us", - "United States", - "1", - "1806", - "+1 (806) ... ...." - ], - [ - "us", - "United States", - "1", - "1817", - "+1 (817) ... ...." - ], - [ - "us", - "United States", - "1", - "1830", - "+1 (830) ... ...." - ], - [ - "us", - "United States", - "1", - "1903", - "+1 (903) ... ...." - ], - [ - "us", - "United States", - "1", - "1915", - "+1 (915) ... ...." - ], - [ - "us", - "United States", - "1", - "1936", - "+1 (936) ... ...." - ], - [ - "us", - "United States", - "1", - "1940", - "+1 (940) ... ...." - ], - [ - "us", - "United States", - "1", - "1956", - "+1 (956) ... ...." - ], - [ - "us", - "United States", - "1", - "1972", - "+1 (972) ... ...." - ], - [ - "us", - "United States", - "1", - "1979", - "+1 (979) ... ...." - ], - [ - "us", - "United States", - "1", - "1435", - "+1 (435) ... ...." - ], - [ - "us", - "United States", - "1", - "1801", - "+1 (801) ... ...." - ], - [ - "us", - "United States", - "1", - "1276", - "+1 (276) ... ...." - ], - [ - "us", - "United States", - "1", - "1434", - "+1 (434) ... ...." - ], - [ - "us", - "United States", - "1", - "1540", - "+1 (540) ... ...." - ], - [ - "us", - "United States", - "1", - "1703", - "+1 (703) ... ...." - ], - [ - "us", - "United States", - "1", - "1757", - "+1 (757) ... ...." - ], - [ - "us", - "United States", - "1", - "1804", - "+1 (804) ... ...." - ], - [ - "us", - "United States", - "1", - "1802", - "+1 (802) ... ...." - ], - [ - "us", - "United States", - "1", - "1206", - "+1 (206) ... ...." - ], - [ - "us", - "United States", - "1", - "1253", - "+1 (253) ... ...." - ], - [ - "us", - "United States", - "1", - "1360", - "+1 (360) ... ...." - ], - [ - "us", - "United States", - "1", - "1425", - "+1 (425) ... ...." - ], - [ - "us", - "United States", - "1", - "1509", - "+1 (509) ... ...." - ], - [ - "us", - "United States", - "1", - "1262", - "+1 (262) ... ...." - ], - [ - "us", - "United States", - "1", - "1414", - "+1 (414) ... ...." - ], - [ - "us", - "United States", - "1", - "1608", - "+1 (608) ... ...." - ], - [ - "us", - "United States", - "1", - "1715", - "+1 (715) ... ...." - ], - [ - "us", - "United States", - "1", - "1920", - "+1 (920) ... ...." - ], - [ - "us", - "United States", - "1", - "1304", - "+1 (304) ... ...." - ], - [ - "us", - "United States", - "1", - "1307", - "+1 (307) ... ...." - ], - [ - "uy", - "Uruguay", - "598", - "598", - "+598 (.) ... .. .." - ], - [ - "uz", - "Uzbekistan", - "998", - "998", - "+998 (..) ... ...." - ], - [ - "vu", - "Vanuatu", - "678", - "678", - "+678 (..) ....." - ], - [ - "va", - "Vatican City", - "39", - "39", - "+39 (.) ... ....." - ], - [ - "ve", - "Venezuela", - "58", - "58", - "+58 (...) ... ...." - ], - [ - "vn", - "Vietnam", - "84", - "84", - "+84 (...) .... ..." - ], - [ - "wf", - "Wallis & Futuna", - "681", - "681", - "+681 (..) ...." - ], - [ - "ye", - "Yemen", - "967", - "967", - "+967 (...) ... ..." - ], - [ - "zm", - "Zambia", - "260", - "260", - "+260 (..) ... ...." - ], - [ - "zw", - "Zimbabwe", - "263", - "263", - "+263 (.) ......" - ] -] \ No newline at end of file diff --git a/src/legacy/index.tsx b/src/legacy/index.tsx deleted file mode 100644 index db92cfd..0000000 --- a/src/legacy/index.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import {ChangeEvent, KeyboardEvent, useCallback, useEffect, useMemo, useState} from "react"; -import Select from "antd/lib/select"; -import Input from "antd/lib/input"; - -import {PhoneInputProps, PhoneNumber} from "../types"; - -import styleInject from "./style"; -import timezones from "./timezones.json"; -import countries from "./countries.json"; -import validations from "./validations.json"; - -styleInject("style5.css"); - -const slots = new Set("."); - -const getMetadata = (rawValue: string) => { - return countries.find((country) => rawValue.startsWith(country[3])); -} - -const getRawValue = (value: PhoneNumber | string) => { - if (typeof value === "string") { - return value.replaceAll(/\D/g, ""); - } - return [value?.countryCode, value?.areaCode, value?.phoneNumber].filter(Boolean).join(""); -} - -const displayFormat = (value: string) => { - return value.replace(/[.\s\D]+$/, "").replace(/(\(\d+)$/, "$1)"); -} - -const cleanInput = (input: any, pattern: string) => { - input = input.match(/\d/g) || []; - return Array.from(pattern, c => input[0] === c || slots.has(c) ? input.shift() || c : c); -} - -const checkValidity = (metadata: PhoneNumber) => { - /** Checks if both the area code and phone number match the validation pattern */ - const pattern = new RegExp((validations as any)[metadata.isoCode as keyof typeof validations]); - return pattern.test([metadata.areaCode, metadata.phoneNumber].filter(Boolean).join("")); -} - -const getDefaultISO2Code = () => { - /** Returns the default ISO2 code, based on the user's timezone */ - return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as keyof typeof timezones] || "") || "us"; -} - -const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { - const value = getRawValue(formattedNumber); - const isoCode = getMetadata(value)?.[0]; - const countryCodePattern = /\+\d+/; - const areaCodePattern = /\((\d+)\)/; - - /** Parses the matching partials of the phone number by predefined regex patterns */ - const countryCodeMatch = formattedNumber ? (formattedNumber.match(countryCodePattern) || []) : []; - const areaCodeMatch = formattedNumber ? (formattedNumber.match(areaCodePattern) || []) : []; - - /** Converts the parsed values of the country and area codes to integers if values present */ - const countryCode = countryCodeMatch.length > 0 ? parseInt(countryCodeMatch[0]) : null; - const areaCode = areaCodeMatch.length > 1 ? parseInt(areaCodeMatch[1]) : null; - - /** Parses the phone number by removing the country and area codes from the formatted value */ - const phoneNumberPattern = new RegExp(`^${countryCode}${(areaCode || "")}(\\d+)`); - const phoneNumberMatch = value ? (value.match(phoneNumberPattern) || []) : []; - const phoneNumber = phoneNumberMatch.length > 1 ? phoneNumberMatch[1] : null; - - return {countryCode, areaCode, phoneNumber, isoCode}; -} - -const PhoneInput = ({ - value: initialValue = "", - country = getDefaultISO2Code(), - onBlur: handleBlur = () => null, - onMount: handleMount = () => null, - onInput: handleInput = () => null, - onFocus: handleFocus = () => null, - onChange: handleChange = () => null, - onKeyDown: handleKeyDown = () => null, - ...antInputProps - }: PhoneInputProps) => { - const defaultValue = getRawValue(initialValue); - const defaultMetadata = getMetadata(defaultValue) || countries.find(([iso]) => iso === country); - const defaultDialCode = defaultMetadata?.[3]; - const defaultPhoneMask = defaultMetadata?.[4]; - - let back = false; - const [initiated, setInitiated] = useState(false); - const [value, setValue] = useState(defaultValue as string); - const [minWidth, setMinWidth] = useState(0); - const [pattern, setPattern] = useState(defaultPhoneMask || ""); - - const metadata = useMemo(() => { - return getMetadata(getRawValue(value)); - }, [value]) - - const first = useMemo(() => { - return [...pattern].findIndex(c => slots.has(c)); - }, [pattern]) - - const prev = useMemo(() => { - return (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0); - }, [pattern]) - - const selectValue = useMemo(() => { - return metadata ? metadata[0] + metadata[3] : defaultDialCode; - }, [defaultDialCode, metadata]) - - const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) - - const format = ({target}: ChangeEvent) => { - const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { - i = clean(target.value.slice(0, i)).findIndex(c => slots.has(c)); - return i < 0 ? prev[prev.length - 1] : back ? prev[i - 1] || first : i; - }); - target.value = displayFormat(clean(target.value).join("")); - target.setSelectionRange(i, j); - setValue(target.value); - back = false; - } - - const onChange = (event: ChangeEvent) => { - const phoneMetadata = parsePhoneNumber(displayFormat(clean(event.target.value).join(""))); - handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); - } - - const onKeyDown = (event: KeyboardEvent) => { - back = event.key === "Backspace"; - handleKeyDown(event); - } - - const onBlur = (event: ChangeEvent) => { - if (event.target.value === pattern) setValue(""); - handleBlur(event); - } - - const onInput = (event: ChangeEvent) => { - handleInput(event); - format(event); - } - - const onFocus = (event: ChangeEvent) => { - handleFocus(event); - format(event); - } - - useEffect(() => { - if (initiated) return; - setInitiated(true); - const formattedNumber = displayFormat(clean(value).join("")); - const phoneMetadata = parsePhoneNumber(formattedNumber); - handleMount({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}); - handleChange({ - ...phoneMetadata, - valid: () => checkValidity(phoneMetadata) - }, {} as ChangeEvent); - setValue(formattedNumber); - }, [clean, handleChange, handleMount, initiated, value]) - - const countriesSelect = useMemo(() => ( - - ), [selectValue, minWidth]) - - return ( -
setMinWidth(node?.offsetWidth || 0)}> - -
- ) -} - -export default PhoneInput; diff --git a/src/legacy/style.ts b/src/legacy/style.ts deleted file mode 100644 index 25f1ba6..0000000 --- a/src/legacy/style.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default (cssText: string) => { - /** Inject the given `cssText` in the document head */ - const style = document.createElement("style"); - style.setAttribute("type", "text/css"); - - if ((style as any).styleSheet) { - (style as any).styleSheet.cssText = cssText; - } else { - style.appendChild(document.createTextNode(cssText)); - } - - document.head.appendChild(style); -} diff --git a/src/legacy/style5.css b/src/legacy/style5.css deleted file mode 100644 index 3906406..0000000 --- a/src/legacy/style5.css +++ /dev/null @@ -1,954 +0,0 @@ -.ant-select-item .ant-phone-input-select-item { - display: flex; - column-gap: 10px; - align-items: center; -} - -.ant-phone-input-wrapper .ant-select-selector { - border: none !important; -} - -.ant-phone-input-wrapper .ant-select-selection-item { - padding: 0 !important; -} - -.ant-phone-input-wrapper .ant-input-group-addon * { - display: flex; - align-items: center; - justify-content: center; -} - -.flag { - width: 16px; - height: 11px; - background-image: url(data:image/png;base64,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); -} - -.flag.ad { - background-position: -16px 0; -} - -.flag.ae { - background-position: -32px 0; -} - -.flag.af { - background-position: -48px 0; -} - -.flag.ag { - background-position: -64px 0; -} - -.flag.ai { - background-position: -80px 0; -} - -.flag.al { - background-position: -96px 0; -} - -.flag.am { - background-position: -112px 0; -} - -.flag.ao { - background-position: -128px 0; -} - -.flag.ar { - background-position: -144px 0; -} - -.flag.as { - background-position: -160px 0; -} - -.flag.at { - background-position: -176px 0; -} - -.flag.au { - background-position: -192px 0; -} - -.flag.aw { - background-position: -208px 0; -} - -.flag.az { - background-position: -224px 0; -} - -.flag.ba { - background-position: -240px 0; -} - -.flag.bb { - background-position: 0 -11px; -} - -.flag.bd { - background-position: -16px -11px; -} - -.flag.be { - background-position: -32px -11px; -} - -.flag.bf { - background-position: -48px -11px; -} - -.flag.bg { - background-position: -64px -11px; -} - -.flag.bh { - background-position: -80px -11px; -} - -.flag.bi { - background-position: -96px -11px; -} - -.flag.bj { - background-position: -112px -11px; -} - -.flag.bm { - background-position: -128px -11px; -} - -.flag.bn { - background-position: -144px -11px; -} - -.flag.bo { - background-position: -160px -11px; -} - -.flag.br { - background-position: -176px -11px; -} - -.flag.bs { - background-position: -192px -11px; -} - -.flag.bt { - background-position: -208px -11px; -} - -.flag.bw { - background-position: -224px -11px; -} - -.flag.by { - background-position: -240px -11px; -} - -.flag.bz { - background-position: 0 -22px; -} - -.flag.ca { - background-position: -16px -22px; -} - -.flag.cd { - background-position: -32px -22px; -} - -.flag.cf { - background-position: -48px -22px; -} - -.flag.cg { - background-position: -64px -22px; -} - -.flag.ch { - background-position: -80px -22px; -} - -.flag.ci { - background-position: -96px -22px; -} - -.flag.ck { - background-position: -112px -22px; -} - -.flag.cl { - background-position: -128px -22px; -} - -.flag.cm { - background-position: -144px -22px; -} - -.flag.cn { - background-position: -160px -22px; -} - -.flag.co { - background-position: -176px -22px; -} - -.flag.cr { - background-position: -192px -22px; -} - -.flag.cu { - background-position: -208px -22px; -} - -.flag.cv { - background-position: -224px -22px; -} - -.flag.cw { - background-position: -240px -22px; -} - -.flag.cy { - background-position: 0 -33px; -} - -.flag.cz { - background-position: -16px -33px; -} - -.flag.de { - background-position: -32px -33px; -} - -.flag.dj { - background-position: -48px -33px; -} - -.flag.dk { - background-position: -64px -33px; -} - -.flag.dm { - background-position: -80px -33px; -} - -.flag.do { - background-position: -96px -33px; -} - -.flag.dz { - background-position: -112px -33px; -} - -.flag.ec { - background-position: -128px -33px; -} - -.flag.ee { - background-position: -144px -33px; -} - -.flag.eg { - background-position: -160px -33px; -} - -.flag.er { - background-position: -176px -33px; -} - -.flag.es { - background-position: -192px -33px; -} - -.flag.et { - background-position: -208px -33px; -} - -.flag.fi { - background-position: -224px -33px; -} - -.flag.fj { - background-position: -240px -33px; -} - -.flag.fk { - background-position: 0 -44px; -} - -.flag.fm { - background-position: -16px -44px; -} - -.flag.fo { - background-position: -32px -44px; -} - -.flag.fr { - background-position: -48px -44px; -} - -.flag.ga { - background-position: -64px -44px; -} - -.flag.gb { - background-position: -80px -44px; -} - -.flag.gd { - background-position: -96px -44px; -} - -.flag.ge { - background-position: -112px -44px; -} - -.flag.gf { - background-position: -128px -44px; -} - -.flag.gh { - background-position: -144px -44px; -} - -.flag.gi { - background-position: -160px -44px; -} - -.flag.gl { - background-position: -176px -44px; -} - -.flag.gm { - background-position: -192px -44px; -} - -.flag.gn { - background-position: -208px -44px; -} - -.flag.gp { - background-position: -224px -44px; -} - -.flag.gq { - background-position: -240px -44px; -} - -.flag.gr { - background-position: 0 -55px; -} - -.flag.gt { - background-position: -16px -55px; -} - -.flag.gu { - background-position: -32px -55px; -} - -.flag.gw { - background-position: -48px -55px; -} - -.flag.gy { - background-position: -64px -55px; -} - -.flag.hk { - background-position: -80px -55px; -} - -.flag.hn { - background-position: -96px -55px; -} - -.flag.hr { - background-position: -112px -55px; -} - -.flag.ht { - background-position: -128px -55px; -} - -.flag.hu { - background-position: -144px -55px; -} - -.flag.id { - background-position: -160px -55px; -} - -.flag.ie { - background-position: -176px -55px; -} - -.flag.il { - background-position: -192px -55px; -} - -.flag.in { - background-position: -208px -55px; -} - -.flag.io { - background-position: -224px -55px; -} - -.flag.iq { - background-position: -240px -55px; -} - -.flag.ir { - background-position: 0 -66px; -} - -.flag.is { - background-position: -16px -66px; -} - -.flag.it { - background-position: -32px -66px; -} - -.flag.je { - background-position: -144px -154px; -} - -.flag.jm { - background-position: -48px -66px; -} - -.flag.jo { - background-position: -64px -66px; -} - -.flag.jp { - background-position: -80px -66px; -} - -.flag.ke { - background-position: -96px -66px; -} - -.flag.kg { - background-position: -112px -66px; -} - -.flag.kh { - background-position: -128px -66px; -} - -.flag.ki { - background-position: -144px -66px; -} - -.flag.xk { - background-position: -128px -154px; -} - -.flag.km { - background-position: -160px -66px; -} - -.flag.kn { - background-position: -176px -66px; -} - -.flag.kp { - background-position: -192px -66px; -} - -.flag.kr { - background-position: -208px -66px; -} - -.flag.kw { - background-position: -224px -66px; -} - -.flag.ky { - background-position: -240px -66px; -} - -.flag.kz { - background-position: 0 -77px; -} - -.flag.la { - background-position: -16px -77px; -} - -.flag.lb { - background-position: -32px -77px; -} - -.flag.lc { - background-position: -48px -77px; -} - -.flag.li { - background-position: -64px -77px; -} - -.flag.lk { - background-position: -80px -77px; -} - -.flag.lr { - background-position: -96px -77px; -} - -.flag.ls { - background-position: -112px -77px; -} - -.flag.lt { - background-position: -128px -77px; -} - -.flag.lu { - background-position: -144px -77px; -} - -.flag.lv { - background-position: -160px -77px; -} - -.flag.ly { - background-position: -176px -77px; -} - -.flag.ma { - background-position: -192px -77px; -} - -.flag.mc { - background-position: -208px -77px; -} - -.flag.md { - background-position: -224px -77px; -} - -.flag.me { - background-position: -112px -154px; - height: 12px; -} - -.flag.mg { - background-position: 0 -88px; -} - -.flag.mh { - background-position: -16px -88px; -} - -.flag.mk { - background-position: -32px -88px; -} - -.flag.ml { - background-position: -48px -88px; -} - -.flag.mm { - background-position: -64px -88px; -} - -.flag.mn { - background-position: -80px -88px; -} - -.flag.mo { - background-position: -96px -88px; -} - -.flag.mp { - background-position: -112px -88px; -} - -.flag.mq { - background-position: -128px -88px; -} - -.flag.mr { - background-position: -144px -88px; -} - -.flag.ms { - background-position: -160px -88px; -} - -.flag.mt { - background-position: -176px -88px; -} - -.flag.mu { - background-position: -192px -88px; -} - -.flag.mv { - background-position: -208px -88px; -} - -.flag.mw { - background-position: -224px -88px; -} - -.flag.mx { - background-position: -240px -88px; -} - -.flag.my { - background-position: 0 -99px; -} - -.flag.mz { - background-position: -16px -99px; -} - -.flag.na { - background-position: -32px -99px; -} - -.flag.nc { - background-position: -48px -99px; -} - -.flag.ne { - background-position: -64px -99px; -} - -.flag.nf { - background-position: -80px -99px; -} - -.flag.ng { - background-position: -96px -99px; -} - -.flag.ni { - background-position: -112px -99px; -} - -.flag.nl, .flag.bq { - background-position: -128px -99px; -} - -.flag.no { - background-position: -144px -99px; -} - -.flag.np { - background-position: -160px -99px; -} - -.flag.nr { - background-position: -176px -99px; -} - -.flag.nu { - background-position: -192px -99px; -} - -.flag.nz { - background-position: -208px -99px; -} - -.flag.om { - background-position: -224px -99px; -} - -.flag.pa { - background-position: -240px -99px; -} - -.flag.pe { - background-position: 0 -110px; -} - -.flag.pf { - background-position: -16px -110px; -} - -.flag.pg { - background-position: -32px -110px; -} - -.flag.ph { - background-position: -48px -110px; -} - -.flag.pk { - background-position: -64px -110px; -} - -.flag.pl { - background-position: -80px -110px; -} - -.flag.pm { - background-position: -96px -110px; -} - -.flag.pr { - background-position: -112px -110px; -} - -.flag.ps { - background-position: -128px -110px; -} - -.flag.pt { - background-position: -144px -110px; -} - -.flag.pw { - background-position: -160px -110px; -} - -.flag.py { - background-position: -176px -110px; -} - -.flag.qa { - background-position: -192px -110px; -} - -.flag.re { - background-position: -208px -110px; -} - -.flag.ro { - background-position: -224px -110px; -} - -.flag.rs { - background-position: -240px -110px; -} - -.flag.ru { - background-position: 0 -121px; -} - -.flag.rw { - background-position: -16px -121px; -} - -.flag.sa { - background-position: -32px -121px; -} - -.flag.sb { - background-position: -48px -121px; -} - -.flag.sc { - background-position: -64px -121px; -} - -.flag.sd { - background-position: -80px -121px; -} - -.flag.se { - background-position: -96px -121px; -} - -.flag.sg { - background-position: -112px -121px; -} - -.flag.sh { - background-position: -128px -121px; -} - -.flag.si { - background-position: -144px -121px; -} - -.flag.sk { - background-position: -160px -121px; -} - -.flag.sl { - background-position: -176px -121px; -} - -.flag.sm { - background-position: -192px -121px; -} - -.flag.sn { - background-position: -208px -121px; -} - -.flag.so { - background-position: -224px -121px; -} - -.flag.sr { - background-position: -240px -121px; -} - -.flag.ss { - background-position: 0 -132px; -} - -.flag.st { - background-position: -16px -132px; -} - -.flag.sv { - background-position: -32px -132px; -} - -.flag.sx { - background-position: -48px -132px; -} - -.flag.sy { - background-position: -64px -132px; -} - -.flag.sz { - background-position: -80px -132px; -} - -.flag.tc { - background-position: -96px -132px; -} - -.flag.td { - background-position: -112px -132px; -} - -.flag.tg { - background-position: -128px -132px; -} - -.flag.th { - background-position: -144px -132px; -} - -.flag.tj { - background-position: -160px -132px; -} - -.flag.tk { - background-position: -176px -132px; -} - -.flag.tl { - background-position: -192px -132px; -} - -.flag.tm { - background-position: -208px -132px; -} - -.flag.tn { - background-position: -224px -132px; -} - -.flag.to { - background-position: -240px -132px; -} - -.flag.tr { - background-position: 0 -143px; -} - -.flag.tt { - background-position: -16px -143px; -} - -.flag.tv { - background-position: -32px -143px; -} - -.flag.tw { - background-position: -48px -143px; -} - -.flag.tz { - background-position: -64px -143px; -} - -.flag.ua { - background-position: -80px -143px; -} - -.flag.ug { - background-position: -96px -143px; -} - -.flag.us { - background-position: -112px -143px; -} - -.flag.uy { - background-position: -128px -143px; -} - -.flag.uz { - background-position: -144px -143px; -} - -.flag.va { - background-position: -160px -143px; -} - -.flag.vc { - background-position: -176px -143px; -} - -.flag.ve { - background-position: -192px -143px; -} - -.flag.vg { - background-position: -208px -143px; -} - -.flag.vi { - background-position: -224px -143px; -} - -.flag.vn { - background-position: -240px -143px; -} - -.flag.vu { - background-position: 0 -154px; -} - -.flag.wf { - background-position: -16px -154px; -} - -.flag.ws { - background-position: -32px -154px; -} - -.flag.ye { - background-position: -48px -154px; -} - -.flag.za { - background-position: -64px -154px; -} - -.flag.zm { - background-position: -80px -154px; -} - -.flag.zw { - background-position: -96px -154px; -} \ No newline at end of file diff --git a/src/legacy/timezones.json b/src/legacy/timezones.json deleted file mode 100644 index a9d6f72..0000000 --- a/src/legacy/timezones.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "Africa/Abidjan": "ci", - "Africa/Accra": "gh", - "Africa/Addis_Ababa": "et", - "Africa/Algiers": "dz", - "Africa/Asmara": "er", - "Africa/Asmera": "er", - "Africa/Bamako": "ml", - "Africa/Bangui": "cf", - "Africa/Banjul": "gm", - "Africa/Bissau": "gw", - "Africa/Blantyre": "mw", - "Africa/Brazzaville": "cg", - "Africa/Bujumbura": "bi", - "Africa/Cairo": "eg", - "Africa/Casablanca": "ma", - "Africa/Ceuta": "es", - "Africa/Conakry": "gn", - "Africa/Dakar": "sn", - "Africa/Dar_es_Salaam": "tz", - "Africa/Djibouti": "dj", - "Africa/Douala": "cm", - "Africa/El_Aaiun": "ma", - "Africa/Freetown": "sl", - "Africa/Gaborone": "bw", - "Africa/Harare": "zw", - "Africa/Johannesburg": "za", - "Africa/Juba": "ss", - "Africa/Kampala": "ug", - "Africa/Khartoum": "sd", - "Africa/Kigali": "rw", - "Africa/Kinshasa": "cd", - "Africa/Lagos": "ng", - "Africa/Libreville": "ga", - "Africa/Lome": "tg", - "Africa/Luanda": "ao", - "Africa/Lubumbashi": "cd", - "Africa/Lusaka": "zm", - "Africa/Malabo": "gq", - "Africa/Maputo": "mz", - "Africa/Maseru": "ls", - "Africa/Mbabane": "sz", - "Africa/Mogadishu": "so", - "Africa/Monrovia": "lr", - "Africa/Nairobi": "ke", - "Africa/Ndjamena": "td", - "Africa/Niamey": "ne", - "Africa/Nouakchott": "mr", - "Africa/Ouagadougou": "bf", - "Africa/Porto-Novo": "bj", - "Africa/Sao_Tome": "st", - "Africa/Timbuktu": "ml", - "Africa/Tripoli": "ly", - "Africa/Tunis": "tn", - "Africa/Windhoek": "na", - "America/Adak": "us", - "America/Anchorage": "us", - "America/Anguilla": "ai", - "America/Antigua": "ag", - "America/Araguaina": "br", - "America/Argentina/Buenos_Aires": "ar", - "America/Argentina/Catamarca": "ar", - "America/Argentina/Cordoba": "ar", - "America/Argentina/Jujuy": "ar", - "America/Argentina/La_Rioja": "ar", - "America/Argentina/Mendoza": "ar", - "America/Argentina/Rio_Gallegos": "ar", - "America/Argentina/Salta": "ar", - "America/Argentina/San_Juan": "ar", - "America/Argentina/San_Luis": "ar", - "America/Argentina/Tucuman": "ar", - "America/Argentina/Ushuaia": "ar", - "America/Aruba": "aw", - "America/Asuncion": "py", - "America/Atikokan": "ca", - "America/Bahia": "br", - "America/Bahia_Banderas": "mx", - "America/Barbados": "bb", - "America/Belem": "br", - "America/Belize": "bz", - "America/Blanc-Sablon": "ca", - "America/Boa_Vista": "br", - "America/Bogota": "co", - "America/Boise": "us", - "America/Cambridge_Bay": "ca", - "America/Campo_Grande": "br", - "America/Cancun": "mx", - "America/Caracas": "ve", - "America/Cayenne": "gf", - "America/Cayman": "ky", - "America/Chicago": "us", - "America/Chihuahua": "mx", - "America/Coral_Harbour": "ca", - "America/Costa_Rica": "cr", - "America/Creston": "ca", - "America/Cuiaba": "br", - "America/Curacao": "cw", - "America/Danmarkshavn": "gl", - "America/Dawson": "ca", - "America/Dawson_Creek": "ca", - "America/Denver": "us", - "America/Detroit": "us", - "America/Dominica": "dm", - "America/Edmonton": "ca", - "America/Eirunepe": "br", - "America/El_Salvador": "sv", - "America/Fort_Nelson": "ca", - "America/Fortaleza": "br", - "America/Glace_Bay": "ca", - "America/Goose_Bay": "ca", - "America/Grand_Turk": "tc", - "America/Grenada": "gd", - "America/Guadeloupe": "gp", - "America/Guatemala": "gt", - "America/Guayaquil": "ec", - "America/Guyana": "gy", - "America/Halifax": "ca", - "America/Havana": "cu", - "America/Hermosillo": "mx", - "America/Indiana/Indianapolis": "us", - "America/Indiana/Knox": "us", - "America/Indiana/Marengo": "us", - "America/Indiana/Petersburg": "us", - "America/Indiana/Tell_City": "us", - "America/Indiana/Vevay": "us", - "America/Indiana/Vincennes": "us", - "America/Indiana/Winamac": "us", - "America/Inuvik": "ca", - "America/Iqaluit": "ca", - "America/Jamaica": "jm", - "America/Juneau": "us", - "America/Kentucky/Louisville": "us", - "America/Kentucky/Monticello": "us", - "America/Kralendijk": "bq", - "America/La_Paz": "bo", - "America/Lima": "pe", - "America/Los_Angeles": "us", - "America/Lower_Princes": "sx", - "America/Maceio": "br", - "America/Managua": "ni", - "America/Manaus": "br", - "America/Marigot": "mf", - "America/Martinique": "mq", - "America/Matamoros": "mx", - "America/Mazatlan": "mx", - "America/Menominee": "us", - "America/Merida": "mx", - "America/Metlakatla": "us", - "America/Mexico_City": "mx", - "America/Miquelon": "pm", - "America/Moncton": "ca", - "America/Monterrey": "mx", - "America/Montevideo": "uy", - "America/Montreal": "ca", - "America/Montserrat": "ms", - "America/Nassau": "bs", - "America/New_York": "us", - "America/Nipigon": "ca", - "America/Nome": "us", - "America/Noronha": "br", - "America/North_Dakota/Beulah": "us", - "America/North_Dakota/Center": "us", - "America/North_Dakota/New_Salem": "us", - "America/Nuuk": "gl", - "America/Ojinaga": "mx", - "America/Panama": "pa", - "America/Pangnirtung": "ca", - "America/Paramaribo": "sr", - "America/Phoenix": "us", - "America/Port-au-Prince": "ht", - "America/Port_of_Spain": "tt", - "America/Porto_Velho": "br", - "America/Puerto_Rico": "pr", - "America/Punta_Arenas": "cl", - "America/Rainy_River": "ca", - "America/Rankin_Inlet": "ca", - "America/Recife": "br", - "America/Regina": "ca", - "America/Resolute": "ca", - "America/Rio_Branco": "br", - "America/Santarem": "br", - "America/Santiago": "cl", - "America/Santo_Domingo": "do", - "America/Sao_Paulo": "br", - "America/Scoresbysund": "gl", - "America/Sitka": "us", - "America/St_Barthelemy": "bl", - "America/St_Johns": "ca", - "America/St_Kitts": "kn", - "America/St_Lucia": "lc", - "America/St_Thomas": "vi", - "America/St_Vincent": "vc", - "America/Swift_Current": "ca", - "America/Tegucigalpa": "hn", - "America/Thule": "gl", - "America/Thunder_Bay": "ca", - "America/Tijuana": "mx", - "America/Toronto": "ca", - "America/Tortola": "vg", - "America/Vancouver": "ca", - "America/Virgin": "vi", - "America/Whitehorse": "ca", - "America/Winnipeg": "ca", - "America/Yakutat": "us", - "America/Yellowknife": "ca", - "Antarctica/Casey": "aq", - "Antarctica/Davis": "aq", - "Antarctica/DumontDUrville": "aq", - "Antarctica/Macquarie": "au", - "Antarctica/Mawson": "aq", - "Antarctica/McMurdo": "aq", - "Antarctica/Palmer": "aq", - "Antarctica/Rothera": "aq", - "Antarctica/South_Pole": "aq", - "Antarctica/Syowa": "aq", - "Antarctica/Troll": "aq", - "Antarctica/Vostok": "aq", - "Arctic/Longyearbyen": "no", - "Asia/Aden": "ye", - "Asia/Almaty": "kz", - "Asia/Amman": "jo", - "Asia/Anadyr": "ru", - "Asia/Aqtau": "kz", - "Asia/Aqtobe": "kz", - "Asia/Ashgabat": "tm", - "Asia/Atyrau": "kz", - "Asia/Baghdad": "iq", - "Asia/Bahrain": "bh", - "Asia/Baku": "az", - "Asia/Bangkok": "th", - "Asia/Barnaul": "ru", - "Asia/Beirut": "lb", - "Asia/Bishkek": "kg", - "Asia/Brunei": "bn", - "Asia/Chita": "ru", - "Asia/Choibalsan": "mn", - "Asia/Colombo": "lk", - "Asia/Damascus": "sy", - "Asia/Dhaka": "bd", - "Asia/Dili": "tl", - "Asia/Dubai": "ae", - "Asia/Dushanbe": "tj", - "Asia/Famagusta": "cy", - "Asia/Gaza": "ps", - "Asia/Hebron": "ps", - "Asia/Ho_Chi_Minh": "vn", - "Asia/Hong_Kong": "hk", - "Asia/Hovd": "mn", - "Asia/Irkutsk": "ru", - "Asia/Jakarta": "id", - "Asia/Jayapura": "id", - "Asia/Jerusalem": "il", - "Asia/Kabul": "af", - "Asia/Kamchatka": "ru", - "Asia/Karachi": "pk", - "Asia/Kathmandu": "np", - "Asia/Khandyga": "ru", - "Asia/Kolkata": "in", - "Asia/Krasnoyarsk": "ru", - "Asia/Kuala_Lumpur": "my", - "Asia/Kuching": "my", - "Asia/Kuwait": "kw", - "Asia/Macau": "mo", - "Asia/Magadan": "ru", - "Asia/Makassar": "id", - "Asia/Manila": "ph", - "Asia/Muscat": "om", - "Asia/Nicosia": "cy", - "Asia/Novokuznetsk": "ru", - "Asia/Novosibirsk": "ru", - "Asia/Omsk": "ru", - "Asia/Oral": "kz", - "Asia/Phnom_Penh": "kh", - "Asia/Pontianak": "id", - "Asia/Pyongyang": "kp", - "Asia/Qatar": "qa", - "Asia/Qostanay": "kz", - "Asia/Qyzylorda": "kz", - "Asia/Riyadh": "sa", - "Asia/Sakhalin": "ru", - "Asia/Samarkand": "uz", - "Asia/Seoul": "kr", - "Asia/Shanghai": "cn", - "Asia/Singapore": "sg", - "Asia/Srednekolymsk": "ru", - "Asia/Taipei": "tw", - "Asia/Tashkent": "uz", - "Asia/Tbilisi": "ge", - "Asia/Tehran": "ir", - "Asia/Thimphu": "bt", - "Asia/Tokyo": "jp", - "Asia/Tomsk": "ru", - "Asia/Ulaanbaatar": "mn", - "Asia/Urumqi": "cn", - "Asia/Ust-Nera": "ru", - "Asia/Vientiane": "la", - "Asia/Vladivostok": "ru", - "Asia/Yakutsk": "ru", - "Asia/Yangon": "mm", - "Asia/Yekaterinburg": "ru", - "Asia/Yerevan": "am", - "Atlantic/Azores": "pt", - "Atlantic/Bermuda": "bm", - "Atlantic/Canary": "es", - "Atlantic/Cape_Verde": "cv", - "Atlantic/Faroe": "fo", - "Atlantic/Jan_Mayen": "no", - "Atlantic/Madeira": "pt", - "Atlantic/Reykjavik": "is", - "Atlantic/South_Georgia": "ni", - "Atlantic/St_Helena": "sh", - "Atlantic/Stanley": "fk", - "Australia/Adelaide": "au", - "Australia/Brisbane": "au", - "Australia/Broken_Hill": "au", - "Australia/Darwin": "au", - "Australia/Eucla": "au", - "Australia/Hobart": "au", - "Australia/Lindeman": "au", - "Australia/Lord_Howe": "au", - "Australia/Melbourne": "au", - "Australia/Perth": "au", - "Australia/Sydney": "au", - "Canada/Eastern": "ca", - "Europe/Amsterdam": "nl", - "Europe/Andorra": "ad", - "Europe/Astrakhan": "ru", - "Europe/Athens": "gr", - "Europe/Belfast": "gb", - "Europe/Belgrade": "rs", - "Europe/Berlin": "de", - "Europe/Bratislava": "sk", - "Europe/Brussels": "be", - "Europe/Bucharest": "ro", - "Europe/Budapest": "hu", - "Europe/Busingen": "de", - "Europe/Chisinau": "md", - "Europe/Copenhagen": "dk", - "Europe/Dublin": "ie", - "Europe/Gibraltar": "gi", - "Europe/Guernsey": "gb", - "Europe/Helsinki": "fi", - "Europe/Isle_of_Man": "gb", - "Europe/Istanbul": "tr", - "Europe/Jersey": "je", - "Europe/Kaliningrad": "ru", - "Europe/Kiev": "ua", - "Europe/Kirov": "ru", - "Europe/Lisbon": "pt", - "Europe/Ljubljana": "si", - "Europe/London": "gb", - "Europe/Luxembourg": "lu", - "Europe/Madrid": "es", - "Europe/Malta": "mt", - "Europe/Mariehamn": "sc", - "Europe/Minsk": "by", - "Europe/Monaco": "mc", - "Europe/Moscow": "ru", - "Europe/Oslo": "no", - "Europe/Paris": "fr", - "Europe/Podgorica": "me", - "Europe/Prague": "cz", - "Europe/Riga": "lv", - "Europe/Rome": "it", - "Europe/Samara": "ru", - "Europe/San_Marino": "sm", - "Europe/Sarajevo": "ba", - "Europe/Saratov": "ru", - "Europe/Simferopol": "ru", - "Europe/Skopje": "mk", - "Europe/Sofia": "bg", - "Europe/Stockholm": "se", - "Europe/Tallinn": "ee", - "Europe/Tirane": "al", - "Europe/Ulyanovsk": "ru", - "Europe/Uzhgorod": "ua", - "Europe/Vaduz": "li", - "Europe/Vatican": "va", - "Europe/Vienna": "at", - "Europe/Vilnius": "lt", - "Europe/Volgograd": "ru", - "Europe/Warsaw": "pl", - "Europe/Zagreb": "hr", - "Europe/Zaporozhye": "ua", - "Europe/Zurich": "ch", - "GB": "gb", - "GB-Eire": "gb", - "Indian/Antananarivo": "mg", - "Indian/Chagos": "io", - "Indian/Christmas": "au", - "Indian/Cocos": "au", - "Indian/Comoro": "km", - "Indian/Kerguelen": "zm", - "Indian/Mahe": "sc", - "Indian/Maldives": "mv", - "Indian/Mauritius": "mu", - "Indian/Mayotte": "re", - "Indian/Reunion": "re", - "NZ": "nz", - "Pacific/Apia": "ws", - "Pacific/Auckland": "nz", - "Pacific/Bougainville": "pg", - "Pacific/Chatham": "nz", - "Pacific/Chuuk": "fm", - "Pacific/Easter": "cl", - "Pacific/Efate": "vu", - "Pacific/Fakaofo": "tk", - "Pacific/Fiji": "fj", - "Pacific/Funafuti": "tv", - "Pacific/Galapagos": "ec", - "Pacific/Gambier": "pf", - "Pacific/Guadalcanal": "sb", - "Pacific/Guam": "gu", - "Pacific/Honolulu": "us", - "Pacific/Johnston": "us", - "Pacific/Kanton": "ki", - "Pacific/Kiritimati": "ki", - "Pacific/Kosrae": "fm", - "Pacific/Kwajalein": "mh", - "Pacific/Majuro": "mh", - "Pacific/Marquesas": "pf", - "Pacific/Midway": "us", - "Pacific/Nauru": "nr", - "Pacific/Niue": "nu", - "Pacific/Norfolk": "nf", - "Pacific/Noumea": "nc", - "Pacific/Pago_Pago": "as", - "Pacific/Palau": "pw", - "Pacific/Pitcairn": "nz", - "Pacific/Pohnpei": "fm", - "Pacific/Port_Moresby": "pg", - "Pacific/Rarotonga": "ck", - "Pacific/Saipan": "mp", - "Pacific/Samoa": "ws", - "Pacific/Tahiti": "pf", - "Pacific/Tarawa": "ki", - "Pacific/Tongatapu": "to", - "Pacific/Wake": "us", - "Pacific/Wallis": "wf", - "Singapore": "sg", - "US/Arizona": "us", - "US/Hawaii": "us", - "US/Samoa": "ws" -} \ No newline at end of file diff --git a/src/legacy/validations.json b/src/legacy/validations.json deleted file mode 100644 index be7dec7..0000000 --- a/src/legacy/validations.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "ad": "^(?:1|6\\d)\\d{7}|[135-9]\\d{5}$", - "ae": "^(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}$", - "af": "^[2-7]\\d{8}$", - "ag": "^(?:268|[58]\\d\\d|900)\\d{7}$", - "ai": "^(?:264|[58]\\d\\d|900)\\d{7}$", - "al": "^(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}$", - "am": "^(?:[1-489]\\d|55|60|77)\\d{6}$", - "ao": "^[29]\\d{8}$", - "ar": "^(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}$", - "as": "^(?:[58]\\d\\d|684|900)\\d{7}$", - "at": "^1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}$", - "au": "^1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}$", - "aw": "^(?:[25-79]\\d\\d|800)\\d{4}$", - "az": "^365\\d{6}|(?:[124579]\\d|60|88)\\d{7}$", - "ba": "^6\\d{8}|(?:[35689]\\d|49|70)\\d{6}$", - "bb": "^(?:246|[58]\\d\\d|900)\\d{7}$", - "bd": "^[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}$", - "be": "^4\\d{8}|[1-9]\\d{7}$", - "bf": "^[025-7]\\d{7}$", - "bg": "^00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}$", - "bh": "^[136-9]\\d{7}$", - "bi": "^(?:[267]\\d|31)\\d{6}$", - "bj": "^[24-689]\\d{7}$", - "bm": "^(?:441|[58]\\d\\d|900)\\d{7}$", - "bn": "^[2-578]\\d{6}$", - "bo": "^(?:[2-467]\\d\\d|8001)\\d{5}$", - "bq": "^(?:[34]1|7\\d)\\d{5}$", - "br": "^(?:[1-46-9]\\d\\d|5(?:[0-46-9]\\d|5[0-46-9]))\\d{8}|[1-9]\\d{9}|[3589]\\d{8}|[34]\\d{7}$", - "bs": "^(?:242|[58]\\d\\d|900)\\d{7}$", - "bt": "^[17]\\d{7}|[2-8]\\d{6}$", - "bw": "^(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}$", - "by": "^(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}$", - "bz": "^(?:0800\\d|[2-8])\\d{6}$", - "ca": "^(?:[2-8]\\d|90)\\d{8}|3\\d{6}$", - "cd": "^[189]\\d{8}|[1-68]\\d{6}$", - "cf": "^(?:[27]\\d{3}|8776)\\d{4}$", - "cg": "^222\\d{6}|(?:0\\d|80)\\d{7}$", - "ch": "^8\\d{11}|[2-9]\\d{8}$", - "ci": "^[02]\\d{9}$", - "ck": "^[2-578]\\d{4}$", - "cl": "^12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}$", - "cm": "^[26]\\d{8}|88\\d{6,7}$", - "cn": "^1[127]\\d{8,9}|2\\d{9}(?:\\d{2})?|[12]\\d{6,7}|86\\d{6}|(?:1[03-689]\\d|6)\\d{7,9}|(?:[3-579]\\d|8[0-57-9])\\d{6,9}$", - "co": "^(?:60\\d\\d|9101)\\d{6}|(?:1\\d|3)\\d{9}$", - "cr": "^(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}$", - "cu": "^[27]\\d{6,7}|[34]\\d{5,7}|63\\d{6}|(?:5|8\\d\\d)\\d{7}$", - "cv": "^(?:[2-59]\\d\\d|800)\\d{4}$", - "cw": "^(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}$", - "cy": "^(?:[279]\\d|[58]0)\\d{6}$", - "cz": "^(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}$", - "de": "^[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}$", - "dj": "^(?:2\\d|77)\\d{6}$", - "dk": "^[2-9]\\d{7}$", - "dm": "^(?:[58]\\d\\d|767|900)\\d{7}$", - "do": "^(?:[58]\\d\\d|900)\\d{7}$", - "dz": "^(?:[1-4]|[5-79]\\d|80)\\d{7}$", - "ec": "^1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}$", - "ee": "^8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}$", - "eg": "^[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}$", - "er": "^[178]\\d{6}$", - "es": "^[5-9]\\d{8}$", - "et": "^(?:11|[2-579]\\d)\\d{7}$", - "fi": "^[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}$", - "fj": "^45\\d{5}|(?:0800\\d|[235-9])\\d{6}$", - "fk": "^[2-7]\\d{4}$", - "fm": "^(?:[39]\\d\\d|820)\\d{4}$", - "fo": "^[2-9]\\d{5}$", - "fr": "^[1-9]\\d{8}$", - "ga": "^(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}$", - "gb": "^[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}$", - "gd": "^(?:473|[58]\\d\\d|900)\\d{7}$", - "ge": "^(?:[3-57]\\d\\d|800)\\d{6}$", - "gf": "^[56]94\\d{6}|(?:80|9\\d)\\d{7}$", - "gh": "^(?:[235]\\d{3}|800)\\d{5}$", - "gi": "^(?:[25]\\d|60)\\d{6}$", - "gl": "^(?:19|[2-689]\\d|70)\\d{4}$", - "gm": "^[2-9]\\d{6}$", - "gn": "^722\\d{6}|(?:3|6\\d)\\d{7}$", - "gp": "^590\\d{6}|(?:69|80|9\\d)\\d{7}$", - "gq": "^222\\d{6}|(?:3\\d|55|[89]0)\\d{7}$", - "gr": "^5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}$", - "gt": "^(?:1\\d{3}|[2-7])\\d{7}$", - "gu": "^(?:[58]\\d\\d|671|900)\\d{7}$", - "gw": "^[49]\\d{8}|4\\d{6}$", - "gy": "^9008\\d{3}|(?:[2-467]\\d\\d|510|862)\\d{4}$", - "hk": "^8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}$", - "hn": "^8\\d{10}|[237-9]\\d{7}$", - "hr": "^(?:[24-69]\\d|3[0-79])\\d{7}|80\\d{5,7}|[1-79]\\d{7}|6\\d{5,6}$", - "ht": "^(?:[2-489]\\d|55)\\d{6}$", - "hu": "^[235-7]\\d{8}|[1-9]\\d{7}$", - "id": "^(?:(?:00[1-9]|8\\d)\\d{4}|[1-36])\\d{6}|00\\d{10}|[1-9]\\d{8,10}|[2-9]\\d{7}$", - "ie": "^(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}$", - "il": "^1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}$", - "in": "^(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}$", - "io": "^3\\d{6}$", - "iq": "^(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}$", - "ir": "^[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}$", - "is": "^(?:38\\d|[4-9])\\d{6}$", - "it": "^0\\d{5,10}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?$", - "je": "^1534\\d{6}|(?:[3578]\\d|90)\\d{8}$", - "jm": "^(?:[58]\\d\\d|658|900)\\d{7}$", - "jo": "^(?:(?:[2689]|7\\d)\\d|32|53)\\d{6}$", - "jp": "^00[1-9]\\d{6,14}|[257-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}$", - "ke": "^(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}$", - "kg": "^8\\d{9}|[235-9]\\d{8}$", - "kh": "^1\\d{9}|[1-9]\\d{7,8}$", - "ki": "^(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}$", - "km": "^[3478]\\d{6}$", - "kn": "^(?:[58]\\d\\d|900)\\d{7}$", - "kp": "^85\\d{6}|(?:19\\d|[2-7])\\d{7}$", - "kr": "^00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}$", - "kw": "^18\\d{5}|(?:[2569]\\d|41)\\d{6}$", - "ky": "^(?:345|[58]\\d\\d|900)\\d{7}$", - "kz": "^(?:33622|8\\d{8})\\d{5}|[78]\\d{9}$", - "la": "^[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}$", - "lb": "^[27-9]\\d{7}|[13-9]\\d{6}$", - "lc": "^(?:[58]\\d\\d|758|900)\\d{7}$", - "li": "^[68]\\d{8}|(?:[2378]\\d|90)\\d{5}$", - "lk": "^[1-9]\\d{8}$", - "lr": "^(?:[25]\\d|33|77|88)\\d{7}|(?:2\\d|[4-6])\\d{6}$", - "ls": "^(?:[256]\\d\\d|800)\\d{5}$", - "lt": "^(?:[3469]\\d|52|[78]0)\\d{6}$", - "lu": "^35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}$", - "lv": "^(?:[268]\\d|90)\\d{6}$", - "ly": "^[2-9]\\d{8}$", - "ma": "^[5-8]\\d{8}$", - "mc": "^(?:[3489]|6\\d)\\d{7}$", - "md": "^(?:[235-7]\\d|[89]0)\\d{6}$", - "me": "^(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}$", - "mg": "^[23]\\d{8}$", - "mh": "^329\\d{4}|(?:[256]\\d|45)\\d{5}$", - "mk": "^[2-578]\\d{7}$", - "ml": "^[24-9]\\d{7}$", - "mm": "^1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}$", - "mn": "^[12]\\d{7,9}|[5-9]\\d{7}$", - "mo": "^0800\\d{3}|(?:28|[68]\\d)\\d{6}$", - "mp": "^[58]\\d{9}|(?:67|90)0\\d{7}$", - "mq": "^596\\d{6}|(?:69|80|9\\d)\\d{7}$", - "mr": "^(?:[2-4]\\d\\d|800)\\d{5}$", - "ms": "^(?:[58]\\d\\d|664|900)\\d{7}$", - "mt": "^3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}$", - "mu": "^(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}$", - "mv": "^(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}$", - "mw": "^(?:[1289]\\d|31|77)\\d{7}|1\\d{6}$", - "mx": "^1(?:(?:[27]2|44|87|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[01]\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-69]|9[1-8])|[2-9]\\d)\\d{8}$", - "my": "^1\\d{8,9}|(?:3\\d|[4-9])\\d{7}$", - "mz": "^(?:2|8\\d)\\d{7}$", - "na": "^[68]\\d{7,8}$", - "nc": "^(?:050|[2-57-9]\\d\\d)\\d{3}$", - "ne": "^[027-9]\\d{7}$", - "nf": "^[13]\\d{5}$", - "ng": "^(?:[124-7]|9\\d{3})\\d{6}|[1-9]\\d{7}|[78]\\d{9,13}$", - "ni": "^(?:1800|[25-8]\\d{3})\\d{4}$", - "nl": "^(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}$", - "no": "^(?:0|[2-9]\\d{3})\\d{4}$", - "np": "^(?:1\\d|9)\\d{9}|[1-9]\\d{7}$", - "nr": "^(?:444|(?:55|8\\d)\\d|666)\\d{4}$", - "nu": "^(?:[47]|888\\d)\\d{3}$", - "nz": "^[1289]\\d{9}|50\\d{5}(?:\\d{2,3})?|[27-9]\\d{7,8}|(?:[34]\\d|6[0-35-9])\\d{6}|8\\d{4,6}$", - "om": "^(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}$", - "pa": "^(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}$", - "pe": "^(?:[14-8]|9\\d)\\d{7}$", - "pf": "^4\\d{5}(?:\\d{2})?|8\\d{7,8}$", - "pg": "^(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}$", - "ph": "^(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}$", - "pk": "^122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}$", - "pl": "^(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}$", - "pm": "^[45]\\d{5}|(?:708|80\\d)\\d{6}$", - "pr": "^(?:[589]\\d\\d|787)\\d{7}$", - "ps": "^[2489]2\\d{6}|(?:1\\d|5)\\d{8}$", - "pt": "^1693\\d{5}|(?:[26-9]\\d|30)\\d{7}$", - "pw": "^(?:[24-8]\\d\\d|345|900)\\d{4}$", - "py": "^59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}$", - "qa": "^800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}$", - "re": "^(?:26|[689]\\d)\\d{7}$", - "ro": "^(?:[2378]\\d|90)\\d{7}|[23]\\d{5}$", - "rs": "^38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}$", - "ru": "^8\\d{13}|[347-9]\\d{9}$", - "rw": "^(?:06|[27]\\d\\d|[89]00)\\d{6}$", - "sa": "^92\\d{7}|(?:[15]|8\\d)\\d{8}$", - "sb": "^(?:[1-6]|[7-9]\\d\\d)\\d{4}$", - "sc": "^800\\d{4}|(?:[249]\\d|64)\\d{5}$", - "sd": "^[19]\\d{8}$", - "se": "^(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}$", - "sg": "^(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}$", - "sh": "^(?:[256]\\d|8)\\d{3}$", - "si": "^[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}$", - "sk": "^[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}$", - "sl": "^(?:[237-9]\\d|66)\\d{6}$", - "sm": "^(?:0549|[5-7]\\d)\\d{6}$", - "sn": "^(?:[378]\\d|93)\\d{7}$", - "so": "^[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}$", - "sr": "^(?:[2-5]|68|[78]\\d)\\d{5}$", - "ss": "^[19]\\d{8}$", - "st": "^(?:22|9\\d)\\d{5}$", - "sv": "^[267]\\d{7}|[89]00\\d{4}(?:\\d{4})?$", - "sx": "^7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}$", - "sy": "^[1-39]\\d{8}|[1-5]\\d{7}$", - "sz": "^0800\\d{4}|(?:[237]\\d|900)\\d{6}$", - "tc": "^(?:[58]\\d\\d|649|900)\\d{7}$", - "td": "^(?:22|[69]\\d|77)\\d{6}$", - "tg": "^[279]\\d{7}$", - "th": "^(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}$", - "tj": "^[0-57-9]\\d{8}$", - "tk": "^[2-47]\\d{3,6}$", - "tl": "^7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}$", - "tm": "^[1-6]\\d{7}$", - "tn": "^[2-57-9]\\d{7}$", - "to": "^(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}$", - "tr": "^4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}$", - "tt": "^(?:[58]\\d\\d|900)\\d{7}$", - "tv": "^(?:2|7\\d\\d|90)\\d{4}$", - "tw": "^[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}$", - "tz": "^(?:[25-8]\\d|41|90)\\d{7}$", - "ua": "^[89]\\d{9}|[3-9]\\d{8}$", - "ug": "^800\\d{6}|(?:[29]0|[347]\\d)\\d{7}$", - "us": "^[2-9]\\d{9}|3\\d{6}$", - "uy": "^0004\\d{2,9}|[1249]\\d{7}|(?:[49]\\d|80)\\d{5}$", - "uz": "^200\\d{6}|(?:33|[5-79]\\d|88)\\d{7}$", - "va": "^0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}$", - "vc": "^(?:[58]\\d\\d|784|900)\\d{7}$", - "ve": "^[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}$", - "vg": "^(?:284|[58]\\d\\d|900)\\d{7}$", - "vi": "^[58]\\d{9}|(?:34|90)0\\d{7}$", - "vn": "^[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}$", - "vu": "^[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}$", - "wf": "^(?:40|72)\\d{4}|8\\d{5}(?:\\d{3})?$", - "ws": "^(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}$", - "xk": "^[23]\\d{7,8}|(?:4\\d\\d|[89]00)\\d{5}$", - "ye": "^(?:1|7\\d)\\d{7}|[1-7]\\d{6}$", - "za": "^[1-79]\\d{8}|8\\d{4,9}$", - "zm": "^800\\d{6}|(?:21|63|[79]\\d)\\d{7}$", - "zw": "^2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}$" -} \ No newline at end of file From 1e6f9cb68af31b044387825c6db3fc041baebcde Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Fri, 27 Oct 2023 14:08:53 +0400 Subject: [PATCH 25/69] GH-53: Add resources to NPM ignore-list Signed-off-by: Artyom Vancyan --- .npmignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.npmignore b/.npmignore index 0086d2f..3939a9e 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,4 @@ +resources examples scripts tests \ No newline at end of file From 94b1939f8586336e721d75de1f2a4bc2627672d3 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Fri, 27 Oct 2023 14:12:13 +0400 Subject: [PATCH 26/69] GH-53: Redeclare CSS rules in JSON file Signed-off-by: Artyom Vancyan --- resources/stylesheet.json | 723 +++++++++++++++++++++++++++++ src/styles.css | 954 -------------------------------------- 2 files changed, 723 insertions(+), 954 deletions(-) create mode 100644 resources/stylesheet.json delete mode 100644 src/styles.css diff --git a/resources/stylesheet.json b/resources/stylesheet.json new file mode 100644 index 0000000..c96e5dc --- /dev/null +++ b/resources/stylesheet.json @@ -0,0 +1,723 @@ +{ + ".ant-select-item .ant-phone-input-select-item": { + "display": "flex", + "column-gap": "10px", + "align-items": "center" + }, + ".ant-phone-input-wrapper .ant-select-selector": { + "border": "none !important" + }, + ".ant-phone-input-wrapper .ant-select-selection-item": { + "padding": "0 !important" + }, + ".ant-phone-input-wrapper .ant-input-group-addon *": { + "display": "flex", + "align-items": "center", + "justify-content": "center" + }, + ".flag": { + "width": "16px", + "height": "11px", + "background-image": "url(data:image\\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAACmCAMAAAACnqETAAADAFBMVEUAAAD30gQCKn0GJJ4MP4kMlD43WGf9\\/f329vcBAQHhAADx8vHvAwL8AQL7UlL4RUUzqDP2MjLp6un2Jyj0Ghn2PTr9fHvi5OJYuln7Xl75+UPpNzXUAQH29jH6cXC+AAIAJwBNtE\\/23Ff5aGdDr0TJAQHsZV3qR0IAOQB3x3fdRD\\/Z2NvuWFLkcG7fVlH4kI4AAlXO0M8BATsdS6MCagIBfQEASgPoKSc4VKL442q4xeQAigD46eetAABYd9jvf3nZMiwAAoD30zz55X5ng9tPbKZnwGXz8x77+lY7OTjzzikABGsenh72pKNPldEAWgHgGBgAACH88\\/Gqt95JR0OWAwP3uLd\\/qdr53kMBBJJ3d3XMPTpWer8NnAwABKPH1O1VVFIuLSz13NtZnlf2kEh9keLn7vfZ4vNkZGHzvwJIXZRfZLuDwfv4y8tvk79LlUblzsxorGcCBusFKuYCCcdmfq5jqvlxt\\/tzktEABLb8\\/HL2tlTAw8SLlMFpj\\/ZlpNhBZ81BYbQcGxuToN9SYdjXY2Lz7lD0dCQ6S9Dm0EUCYPdDlvWWvd2AnviXqc11eMZTqPc3cPMCRev16ZrRUE0Hf\\/tNT7HIJyTptDVTffSsTkvhtgQ0T4jigoFUx\\/g+hsX9\\/QUHzQY1dbJ7sHV02Pduvd0leiK1XmaTrfpCQPgELrrdsrY1NamgyPrh03iPxosvX92ysbCgoZzk5kP1YD7t6AILnu+45LykNS40qvXDdHnR6tBennz6u3TSxU1Or9Swz6wqzCsPZKzglJbIqEY8hDhyAgFzbJxuOC+Li4d9sJLFsnhwbvH2d1A3kzAqPZQITsN76nq2dzaZdKJf4F6RJkb078YFiM+tnWZGh2F+dDibykYoMcsnekdI1UhCAwWb25qVkEq43km9yBrclQMGwfyZ3\\/zZ2QK9gJxsJWCBUk32QwqOSYKRxh6Xdm3B4oMW22EPZzawnR72kgZltCqPxrdH1dkBkqDdWwwMwMO9O2sqKXHvipPGJkzlRVLhJjVIs9KrAAAAB3RSTlMA\\/v3+\\/Pn9Fk05qAAAUU9JREFUeNp0nAlYVNcVxzHazoroGBkXhAgCCjMsroDoKIgKdFABBwQUnSAoCqLRFBfcCBIM4kbqShO1hlSrCJqQQmNssVFqjBarsdjFJWlMTOLXJDZt8\\/X7+j\\/n3pk3vNq\\/bb8+3nbP79137\\/+dd954qTVt8uTJL73OMhqNer03ady4cWOhWbNmjV+0FfKGjMb36Y9\\/1fXUst9cb2y8\\/lpb797z5k2dOjXVD9Ljn59fcHBwQEDAgGch3l9on6feeeedn0r9kvT222+\\/sErRgvcDArwV8f5tN\\/rcvPnMZ22pqVFRSVGjR38k9Rsp9fLql\\/MXLj20VGjt2rVeak2Og\\/auI\\/kHBQ3We\\/tCo0ZNhwYNGj58\\/NaWlpbOyMhIX1\\/\\/2\\/jTrICvckhXruQsWbJw4cL3tzhPORynSk5lZWVtglL9IkmdDQ05NqvVGhLwbKSUL+Tvb9yH\\/2sj+eN0IZZ3fvq3Hnp71ZtCOyofdnTYSzq9xX7UtsF9+\\/Y1FpeZT54sc2aUlq6Jy89YM\\/qj2oZaoeOkMR8dV\\/Tee++NWb04rrA5MRYKDAyc\\/NKCpwDIyKhE9LEzZ\\/r4DLQAAE6EyEeM6AcNH7m1pTMnB+fHX7tG9Bs0Xt+GwM\\/frqm5tz950aKDk6rsiA0xbUrbRAii\\/BDeV9bGhQsPRlyOCAuZ9GykZwT++n2RHPnVYQU+oaFDPQD8jEQAPiDdaLPaHGVXbn\\/O7YHQuIH9B\\/gYgzts1iqrtSopKWlNRkzS6I8arFaOFvTfew8AfiYil\\/rN6sWTKwtbArOzExISUl7+vwCuQNt8Bg71AQCcTwNpWeFbW3IIQEmJr08XgIzX2xDcvZrs7Jru5EWXwwKSwh2RkQ77w7Q0bXp6YRoDaKO+kZl8MCwsYpJ3pEf8liAAoPhDhqUMQ\\/wAkF+oqKiosJYA7HxotdnTtVe6Pr\\/S0h+AI90QffU3T9obGuwdD5PqkmJiMtbM+ajWI\\/60TX0COhoarAAE1dfXV80FgMmLi1oSKP7\\/B6ASAGyBV4YM7D\\/Bx8\\/bF7g5fgmgEwCCSiJtJQRgxEi9zZqVdYUu9pW0tLCIgOvxdR0dpxx5aWl7EzV7CYDV+tXnCzMzkzMvE4AFlTuhZaSf\\/OQny1L32RC+JcHikzJ06NAJoe+YNKRbsbG3xPlWZTxssNmdOP\\/J27ffudLJ60V7DAaT1lxRVvfwYe3Jlrq4uJiKjAwAcIWP+BkAhV\\/i7HA0uAG8BAIUf8qfzvwvgJcQf+XMK4GWi8OGTpgQ6uftzwC0LIM2WgcASwaXOBwlA7v6\\/YgAhFRt2pRGeu0\\/UyImbal77eHDo2kVAJAeKwE0fl6P63\\/5nSlTAKBCiR8AovbZEL9lf8I5AMD5booAE7OzY8X5fhGJi0\\/nTzTcMh+80iIBaF0APqvIu3EjqfRGcV3S4aSKYk8AaW4ADU4gOFlfn8sAXnoJBDpTCMDL87zU2kwATl+x1Nw+P2HChKHBBMDHFT8DwGjX11FSYu\\/f\\/aMf9XtOjwAacf2hmxRg7ywXDrr30kb7NVhDquo\\/z0y+nJs7ZUoYA5DxM4BFmcnJyV93PzjbvQhK3urqAYF7xflWVT5ssDaU4Ox7T9+6Ei4BaN0AUkvXJEExMTGHD9cdFgA2yfgZQAP1f0dJw0lrfS4BmIb4z5yZBgL\\/H8DibbehGROenQ0AQRhvZPwQAGDQ8wlqsFkmdP9ofr\\/n\\/OgK2ml1xxQECAAy\\/tdee++91wCA1mfWJy\\/KXUTr536T+O67764X2r9\\/\\/T+3JkPdDx50f7qItDXfff+zeAxY1lYV0VCmPV1Ts5fGAGUYDbHpo0qT6vKTignAtWvXiuf0StwGZZPQybMPAYC8\\/xF\\/bj0AUPwvvzytKCdl6dMAvJxRuXjxkCHnL86YMXs2A8B4m4yWQTrdIp0uByMajcATJrwzXwCIiIjAFSrbJwGI+FlH00YH8\\/rQy5enQPsYgBK\\/BLCI1c0Afonhn\\/XjH8MNLP9o1Y4Pfg795N9hYQ23bt1q4fb07z+A\\/ITR2J8AFJnqOP7iuj7Fc35TK+9\\/bkPaM+NGiSnsB6wRIwGA4n\\/5T5Pzc5aeeAqAP1VCM4niWRqVgr1p1sEYlskNJQC4BQZbLJi0MAgCgBUKqYo3VEVEhIWFTZqXtYmVxiIAtB4QeDUAvMuSFBgAJCkwAKHlLAKw4wMIFG5URVgdLdwedEq6BuCgj1qzpi4uiVScYa6I0fWKJQVC2aRDY0eNWrlyECwMMIDDc2vZ6UF0F7z8tB5w4kTvtZ+ygklGkk4lvZ6sne45SDg8aJIQ2z+4Mmg0qcfauXPnfvPNN9XV\\/1S0VSWyf1Ls4FZ5aIHu\\/blGKb2UOM0ckq4PmsZ2b8yYMb2l4FbhX8ePHwmhuSPXkhaQ5q0tXzBvntdUUq9eSyFu9njXxpA74Leg198yktRWVI4OkAkymw2Q3WO90+nnN3u2H0QkHI6JpHHj2GvTYdsupd68GfVZ4yTJqJeUaNKhQ+rzCUvOMXEr\\/\\/4vD3333XdLe+rRJx4iqumDnT2O5zW1HII1hPLy8pJGjz9GWgk9D61Al4fWkWay9VRbUa1GEVCYDRoonu0dr++n0ZQ0dMCNdDRYHVrtuImjWHQ80lvfl4WfhJetw1CFm6h+rkazd28iJHvyIe\\/IHt7ZOBY7o4GPH4smPqf7nRwz\\/sH6bmmi2HtvYiBUYPxEcZakt701PdsPAIhb3DBbYmIIAOK+F9HXJ6z7t799AwDI48+cOQRi66m2ogoAYVwIQEkQb8DrJza1azRWq9NpjUjXtg+aNXHU9EEQHW\\/YsGFD3toHMFZbgzUsDNPkPgAgpScG1vA4TgB8PZATAAoc6IasWPHhhwCQkyNCdwMIJCVqDabA8+cAAJFLYVD92dvpjvQe7ZcA7p0\\/350dEzNmy+iRAHBPrO9+AwB41Of4h2HoFdZYhsfL7ej7QmbSBdED\\/GkDXv+ju9Pv4i9mM+g09Rs1duKoQSQR\\/4whb7msbFhufHy8M2xup6AZ3sHzWOChaveIWQCtn00A7s\\/84MDuD4bd+fBDcYEukrVna5fwMQPAsqnQZOqqLtBzezysvHd6z\\/YLANndUELMGAmgXqzPfeON3+IE8PHbuL2YegYCAO+\\/fz\\/io2VMM+5HpR\\/BGXIPGCzix3oAaBo13aApK9Mahg8fNAo9ANsPGi7iB4BLZRUPH9advJGb6zx+3Jk7FwFtCNekNzQUabW3cAv0Ek9uUA0U+PGsY4NmzrxQVBS3e82wGQDA7bvI8SsAsgNP7y26HV4GALyeJzGaY5J18fZ4GT+3DwBK8\\/K2ZF\\/s7v46ZYwEsMJHrJ\\/gApBJ8QPAs9gh2BYBnT077OwUnvcBwB0\\/nCEAQPFBdADefv5dPEu3p2u18e39Bg2aPou2h9wNmP3wi7bGL9qsuVOcizoBgM\\/X0BBtamggK2wGABn+WSLw8awm9P4Du3ecys+aMWPGt6J9medF\\/EsBIBbxJxSFm4vM5moJAOGL+AHAO90jfglgy5bshO7uFAIQM2fkyhUr6sX6fW+MJQDYX1wvWI\\/+uOIc79mziJec4ESxDPGy6AF9RfzYHgBw02s7yswNhf1GDJ8+lvcfPgKrxfoAa0S9uP9HTV95LHdur8TzuF7W5OSqDdEGAFiaiIjk9U8hAMdw+1Ts3r37VPOMGR\\/K9l3k+CUA9P9b4c6y8LKC6upqAiDj3wpxD1Dix\\/m9Uku3KAD6xMx5DgC6xfrLYwnAEuw\\/jOJnAMHjpnvECwA8aK5YseK3EA2aogf0pQNIAIOaXI8S0\\/sBAPaHaLUEIOJHPmjUsWACACN7\\/qLVmoz2Zjabv3x8X+oBdP\\/DWeih94d9sHv3BzO+fOOND6l9C93xL00BgOy97dHo\\/ZHm6EcAwM8OHlZ+YLpFtF9eQAGA9+81pg8DQCzdU3D9Ef\\/YN3AC8OP4Z5D1DBg7XYmfAKitqYl7AA8AvDxxVLtGW1VVVhYRZjC0jhg\\/Tuzv3j6gCuEjfghGYd\\/cXrFk5BNqai4K633k938h\\/Zp15C8Tx68E7X7Dtm2b8QZEAH743j8gYQQwC8TGlp08Z7ZWC+k\\/4eFf6pc\\/\\/Sje3+TZ\\/pFeqXkQ7hoIhhoAnve8ogRgCQZBMQsgTgBgXykpAoDKmpoIuJP\\/wMvzwaOKHkisVfUnDYZZ2J\\/k3n4ST\\/94UiHt2\\/d+Lx7yttFAXnP+60W6+X9ggQFzGDdeOJT791fQNAgAv\\/qHFFMAAJou7AWQBCAkKXzknW71bD96APnWQ4c+hthRsv1Ty2WNA4InwYYpzhJSW1MT+lmkxx9awyfNhQVmvf9+c9M4kVt1by8tsmuLub3I\\/in6er7URGkh1SZ1znfk\\/xR9o2oP7F8Pax1vbO8RgJcwhYp8BvpMcD1t+0GffPJ7xUo+CA54Yc+DPXv2vGA0vkBavfqIW+xeH3kr8iJ9QxJegQNpu\\/TMzZupnzXOkQ7+OkumeCCOU+Si2Sr7kR6RkQZ\\/iA0y62PWVKlUiLy8fsz1MSd6s+YhLz1vu0t7ILS4T1Rqn2cU9fF6YQdpMZIAG6dNmzZ5bX+7PZKGsXi0CM9xwZ+0DmuVnejxsHMDJu3Zu24vkrT+QTtYq4\\/8nvWHPzyeCa2HUySRbzMKAO9CGhZ15Pku67uGlaS7frzoeFat26uY2CpzijiIrbKfLdH2buy7eKLkR8oAaXWhQNLH8+qEKirKy0tLS6O8bXVZQpvg8dPmbV\\/O+jH0IvRClLY06hkPAcBGqLa19ckBzC0HVg+0R9rQFpqFtWER1oBPhr3+eutPocevPzIaBwTseTORAu\\/rQ7sd2AgA4g69T1PlfmGVsX9fn8ESALk4ER5Gsb\\/Mny2tbzGkPQwASH1s2iTDBwC2yhYeVdgq+yXODAwpCCzAozT7Dml12fqR8VGcOMtk9A0pkUvsI7YvR+DQrl2vQLtWpdbFPAVAq8lgMrcygKEEoKQsJKTMYQgLDQn4ZN3r60T43ngSrH5g1rBcWaINAoCMX1plXq8GoBUAXNYX4RcfPqzVXa8tqk3bpATAVtnCVpytsp8tsCBifcJVil8BoFhfu7OE5RCyGn0HWxweQLYvf\\/HF2tp1T568IgD0Gf2MJilKBSCrPf5Cc3h76e4zuwmAv8ZqQ5cLMwwNA4DWn+IfwoeqX3\\/8kQvAQC2rGQCU+NkqywuiAqAVACa6rO\\/hYsR\\/uBi3wKZd7wGA1gPAcEvfhAQAmEEA4DwLEgo4\\/tmzwyYdYqurWF+9zWKxhCKlTjnV2WEBxkhHX5\\/G8jSZEZoKALWJWbuyYgWBVRgA6vqk9hgDNh54YtI2t2jbn5wBgAl2m1XTYAmxhFoNU5DG\\/uRnHuG\\/d\\/yjEa0X7kID+99tgu6OxTytxK8A0KoAaCGexz+rWHPpUtKaG4e1hwnAhhNZlLtMhwyG+HhDGVvl0PXZ2fv7w3oMe8vPijuf4of2AQCyutDmzWdI1zcv0Psr8SOFF2As0Th8Qr84CiEzcjSKni09b4l5C+al4r9uAcCBA1nthuYKc3spA4i0hWgNdFazgbK8n3iEjzct380S1rd\\/f+mkAECJH87O21\\/2v76eALQM4MiRX0+MKqXsFXSYAei8\\/d3WXLHaoQNTUga4AYSGiesPTSEASvwEwCrin4D4GYAv4m9MS5M5yalGX1uixccntCDwKqf5n5FSboGNBw4caG03m1tbz5zZs3v1bAAAKvtJDAuzAeD1c0r4DEBY4f4DKH4C8AclfgYQxFl0etRWAAj+RwjA6DUyfuoC3xt02F6JnwDQ8UNpeQAB+DTY6op\\/HxJLU+au3jj5JYRPwvR5ZoFN3v12oVxjkE+oXbG+4o71WH5dJa9VALD7wBPMArvP7AEAfaTVgm3NZkzcszHoBCvhM4BvhTcfMOCB8OZH\\/sDxp0hrCwA8PvKjNqkaAPaL80sAyvU3fF+sU1tptspDaRkA3gKAEIoforwaAPhZ3f2de4RWeUvAARqDKH65ZDKE7\\/nxriexm17ZtO0JxvhXX1n1Q5UAYCMQTCsvn7ybEuYL9JE2q9jfZJoSBgADEP5xt757MJM0xMcHUUOfzr9Pywlua+vtThhJAOvdPYDc\\/LjRayC+CxiDTm2l2SpbeJmPHywzyhLDXH1ICI96wEAcAlIr4ABKSThuXt4c75ByyJ2Zj9qDWbD2SSJmAdaqBSp5CdPoB5frx9LDdEVDG6C5cKnB\\/xz1kdB3rAcP2Bb7+X0q9GtOXirWU7HGEgBSwI\\/CoehosrIT2f7pFKmtNFvlYF4W\\/jvAI6kMoX2y1kBIZKBHu1PDwfNI7A1ZbP+UIgPMAn08hFnAIOROal3P6pnlzSQlK8pHf4F2s+AwjSRNvDsCadl76bQif9tbqDBdNvzPfxcy8+nCw1OULDDrOukEi7PXnngo+IDLY8UZZMmGOmsMn09yPTI8VwjhWEUkXIY4mYVu2\\/7qq9tJXuqsLoxJj+XMZqEWUmdnskabf8olWOI9Rl9Ik07vqeh1id\\/EpqZRUGKOhksqxveuZGm0Idx3g\\/\\/+BPrd734n793wXnuFEoUOXc+ClJcrC4wiI8rv0On4GNUbbh8TBRtwDOPVWerxv2P9SuiPukKcBwd0xRPusuLSH+\\/xUmd1r9dm5XsuZzZ35kBLxCt+ANBoihA5CY6YAODEmnS8KRpIr7cBgJp2uyDkahcmi+EAUE7SpvPQFRrw9yfcvk5nPHUyApDokQWPBQCOXN7DafPo+ABH1RN8fL0t6OrVq1X3eC7C8dVZ6vHu2P\\/4xz\\/\\/WQDAQ44rnmhXFlrYYxeAW+mJ6bcSEyUAEFCyqJdPfkX6HLp8+fJXBEBTyAR2uAD0tWjSfbh9BGAUxX\\/1zi8HVXcpAHZq03m9BNBptXY4ET8DUOKXANJk\\/AxAFETYbO\\/ayJ3aACAwcH3gep\\/Qru4PUZ8w\\/nW8X9gWOMSdZR7bRG81jkOU1XjeDUArFOey4i++WFW1vr4NAMTLaFjLvekuAJvylYKIXIcvFcQItzLB9o5G44CzylcA+Pe1+GjS+fojwGDO4hbcOfuXX35bnZ0deIgB7Nyp1QqrygB+1Wb9lbOBAUQTAOV1XuwhdRZXI7Q3UVplfSKS45aEc0MH9p\\/yTveKkQCw7WrIXneWmYDMrD3++Mnx47x8Iqt8GiTs4+bJ8y6V3Xj4sOLkjV27qjA9AYCBvGJsQkLgXraKBAAEOsCdZPfLdbjjRwQAUOJvxy7t\\/BK+NKuPhqVYTX6PEHJ101+qq8MWLcrUqdf\\/ne5Pa+OvMLPRPB3dBw+ychaDSkers7gaFiAliv31sSHr14euv0o8n322XoeAHXhwOyuydsMYwJDax0+ePD5OywCA8NM4fAIwdWfdtIqKvKyMXbuKDPWFRS8wAG3r3lvtF0RBAveANuqv7K2Dc+3K9Z\\/g7gGtlKRja9sjPjSQF6\\/eqc7+9ttztKz3Z6uarl22BcqL+jvdo1URvyqzGbSUpOTX6XlkW0mvpaqzuBLA6dOxOD4DKMA7koRzaMyUf3+xczUCvlVgic+m+CWAIUNqjz95vEkBwJdfAniVhj6+\\/xuRjGyTAO42XRjVxJMfACjxE4CuveRlC2SO7d13NJD59yJFSQD0QRj+tPHu7flhpqv6y+pv\\/9lF7wn0QexZ4g1bBIBZBCAnIsJaEm+QAJT4f\\/Naqrmndd2wCFMPhuHTp3OWQDk6vS1hfcL+6v6I\\/iU8vgPAkAs1+5vPIn62zt6+56AsdNChjx49OqcvwsEQPx2OjwcAIv5d+YW5hfkSgNZ814wNGADHP0HEo58Q8PXe2Fjx\\/JkCxd7T8uXn+CUA3P4AILcPFu8NuqrDziF+lND4hfCjigAQsywKozQN0Esc8eJ89LTHLk8+7ZmV+LnBnJX2KNAA8KvVQ\\/\\/9xWTYkDNnJq9VW2m5XF8vl2lSx\\/X3AMDhU35kee7yXS94mfh8St78RNZDOetAEwBAmaRjoS6t4a7M0TKFcWxNtfE+cvvgsWKCjs3U8jwFAGxd0w150DIAkHO0QSjaSPM3Pa6BI+RnVtojAPAErBRo6AeHtN1YDP8uRra1aiutXgYALTZ1H287pn+SxAAA0pFB0aQT7wuzKbOQwV93kfC\\/Qt13j\\/TI0k5kg2Yqox1YY0VBwlKdWXgx6VvLzKlRrPEjRU53Q7QQdpenE\\/bW7G7JBpZOpUmfLVi9arXQWkhtpdXLZP8WzFsQFx3Hh2vm\\/CjrBZaX9UbvmzenotZWWmpZ3AOJUgvCtkq\\/2u2Vy0lmbiOfZhxLqSWuyC\\/FpS5qbCyiW\\/6LUm\\/om2rv6mrvR9VGyCRkNErs6uOprS2bcpaZ91Bbd0CTmsTiPd\\/i8gtuzxGVPpoIebTY61qJ+aT9pJOytEnQ6NfiSBlxcbWsMTRG7LBtdFvJ8nxI9FAyKEhgkJRa4jqHpigjQxMZqamry\\/fV1Hk3eWRx198zmjTpmEZovSbe7tRGq4+ntraGnlY9nJfT47Wu5YAGVIKSZIEF7y8KOrg9R5C++r2iI6\\/W9myvF2p3\\/YNwyqQYcl\\/Fc14TkcNAk+r60AkPhBzg0wkA4GNi2fyDCMAg5VURKkfz4uwOzWJN0GBNuR0Qrnk3jTrrqlh68O1wvDlyNCBp6R+k0Tqq7ACgOp7K2koA6b7xSgFGeuTgvkElWBYAEDgidxVY8P5c0DGMrbLTgx908tVTPdo73uumw+4baW94WByTlp+fFuMCkJGhBqD1ACCeFP2pTg\\/WVzkgTpiXUV6GtCCeD4Li82N29vYGoDs1\\/Lrvy379ngcADaWtg0JwMAe8ufp46gIM+brdYnEKL4\\/lSF5fItqjFE6ms6\\/g\\/UVBB18Qb1xgeno4x7qqf\\/XUKdr81i2ZIfJaU1LR0YEsbUxMWmnFUQEgP5\\/sYFxceXlWn1XIGR6w0JzDWosGZ2SIBgeFwJvDeBBvtxWVz5Ior2Xle486i4KIO1fP3aEXkiv0QQ47pa9CQoTTnP304227d08ejwMsszRaylwAZIGDvwCw\\/RQ8ObRRaBUXcIiCDpwPAN6NvQoN5vgHngOA5XT7NDVJa+31WUXSjRsxa27EXEuLawGAo3HU\\/+OysnBjlpdmPeNnExkYV16+HO3NEKMQJjgrGizjl1a0MTLI4xL2vek9KrBg+IiuhBRUFhMAfrojiae74Kcf715m8j0+ngDgj\\/vBR9QOAyArUmj2njc5cJmkOLCKa5u5PTO4YMM7cR0REPELAMtxxA0bpDX3SsXYFwNdu5bWmZN0bc7RjNraOMSPHpBRCgCrKWcYKq\\/\\/njNrp4kGmyCQCQlGg5X40WDZA3z6u3vAnUEjRtw5d+5LAJi\\/Qm9xcOstFht9JxHp9\\/TjDeteKJyd7AFhuVPKhFX39vcXXd4hssjbuQO4IGxkAD6iPZy1Rg9Yj\\/g5\\/IGPAGD58kJ42Q0bwnE8AUDG39mZl5eToyMAiL62Fok2AkD34O7QM26jlIcG14oui6sYEjymrpxeyuUJlaZuqViWnz5Y0x8AQpt7J6V6Hxs+4k4N2chD386f\\/6EeRseB9lso89oBY6I+3lhVAQYDSHfud5qEkUEWGftj574ii2xWUqJyPTqfKOjg\\/WlQ5P7v4wJwSguhoJEV7hW1huOHKO1xDQD45aJWWyoAUAPOhBEAgwtAbZ2YhC2haDA\\/bbkfNvKmxmRobJF5mgEDNL\\/Q2EPKU72nD7rPPhq5rwf9CIDdageAUK2hod4GAKrj\\/U8BRiQ\\/ju8\\/R\\/7UJ4Ssbl9HutbpL63uUws2RH\\/k5bKe1vrKq8td1nsflDsXAES5OXQY9da639SS6uQswAC0ByyTlR6QAQkbEgIBQNbicggY8qCpdRpb3M6dNAguS4rTWC4ZjwVCXIABCitgdZ2RGNBDMAs4bSUAoDre\\/xRgsCFYvx5hkbkVVjfIv6\\/L6j61YIMLOs7ysuvttdSRV+vcnqEecycAiFpbFtUbiEpbzpiy6NKsDlhL\\/pS1ZQuq6TZwkjCYJOtuSVNJpZ8nIQeaf\\/NmPlKyz9R+b4T++cj46JF+9iM9JK2un5+0uurjkX2T5Qsso5Df\\/7O6smCj5\\/a93oI+5eUjKu0JVpLMJK\\/r18PDZRaWq4i3k0ykcHbLKmcqaoVlCvcQtGjEjyZ6emF1Fre3CpDa6vKZhbHn8wdLueytnqU8n7CTFSllugeMik0WaJd6CrUZDTfmwep\\/cY3S5M\\/hmqjP73V9Mj0uKjnA7ZQtFebiRWiVt8x\\/yrHW6GE1SYf8Hraa2psUa2m0QWRlQ0QWd8FiUrkrL5XK+ytm13iiUog3mzZtQbANsrpL7CfpySCz+G8BXEChYRVAxj1vSsmCDVUBxTfFTq3zpDO+Li5\\/Q9OFlrg6tdX2MovZCn6MtXM7PS8LAPQ+HQA48IcPeardqFesJtf6HvL2bby97tat9unCCQIAz\\/ORkWKeBwB3PgafKWxOFVYXCYvjwuqe4NAlnpcIgIhcFkQAAAfOfwwNIwAALR4IkKEpMJp6ZrWj1QUUgx2Yde32G\\/hIB+VVx6LUVlsCcF2Dyt4MQBzvFQgAKP62pvA2CUBaTZmF\\/RjLEV+dn7nuVvuo4fQRFQBYoHRH31DKAgdX5EMSb0ZGXIy0uiU+JcLqEoBprvgZgBK\\/BKDEHxYBAIMEAG16NQDoJYAdO7QCQAKnL043N5+mbpB4qNEZ77CXlFRk5FMJfFOd\\/OyOxJ\\/deZ1A99+8Weue5gjALphFLL+yezcB2AhZmy5Y2Wnh9feSCGE1ET8DAM2D3WeHDKFuMGi80R\\/hl+CjqvgSBsBlc5V0vMpCqigRF4viN7AVXV252B3+S8jaKtdTZoH5q7IIaUUjJnEBhYHWxysA3ty4482Nb2r5+KyMuvw64fQqnBknT2aU7aQe0PX8MqoXaKUsaCvivWvQmiQA7qHQ5t7bkSt5RctWYzcD2MEAwsNDJICvFi7sewf6knRnIltPn8vdxGNYvGkcAPj42OPt9hJfTqpyAws1GRnaImRBXQAQf4mBG7i2snwnaxlp51R1FjnEYRfqgBo69nHO0YD1ngAKNxbiP7S9BFAXV1EhnN7D8KLw5riiirq4lXUHK47VIf6mC63tTU3trU3T78IJilJSpQcAwK5XeLlQAXCg6oMbVYife8DCep8RSqkpACD+e0hL70UPGD5S70\\/pLXQ6pyhY4BzfYi20uNDgBoD4Bxi4gQyQZnVZPK3OMquXOecIdgQA0vMGuPwbD+yg9RIA4o8T20+tAFvxlV59Te6y0Vh5wWQytLYaTOgBAFCp3KNiEPzxrldUADD8VV06\\/wUWfw4AZDUVqzoSy2GXHwyZiTGgHwGhLHGoj7Mk0jmUAVS4D54BxcVcr90E5fUfkJTGb36ox4gSDwg9hkthP4RQCDtu3Ic6dYEDF1CYPAHweowBwgqPbVoJyXJXfFCxrCgjDv8Jr4urO51bk1GBLDOUQ+IssxesKKlSqveeH7+iBnAAqo\\/YTTogsq49rOfB7m23brUOp2UGQNH4DJ1gEVnledP47pKvfLdEqd\\/9occo8TMAJX4CoFXilwBg+lQA5HoFAIcvviiZWsHXH4q5nVDzk9HqLLNXUaFLJlORqahuz4uQOCDPAkblUYvkx1bTw3oGt3Xi4ivLsoDBnVWeygNc3mYSsoQA4PnyFwDIMCglD8EjXc3\\/kAQAPbPE4Wx9PW6BF6RDkW1ci2+K+JsngQE9AB2QOwEudGNdRoU6y+zl\\/ohMmjWyf6uiyfduWEVSnJ0wZLw4UvkMTaebCCuqLOtVFQxKGasQdwSYZdcZPWweSykFFuKwlZxoOBdQXIiGmvUkVxJ5g5TaSivnHs3SqeQ1UZUl7Q1p9Bp3kQWvFicXNvvQfGX7cR8fmqs6oPozOp1KAqgClSyw1AKSnqVA\\/PbTXj3E7RWnn\\/81jrcb4loHme7+n\\/Pz5krWuu3GM5+hVnmOfAICAFVWtzdVE9g05VApHvNTPawnW8fLiYmPeXvofmCNztv2lRxRuG\\/p1AUXOl6rrDd6WFGyyqsXQ4oXnKe3sRIT2f5YAsY2PV4nNJPUS2nv\\/a9wQJ3yewPiW2OcP3wDN8LQvIHP3zO+7\\/kXJ8IvrYGuJBUDgEhqyruaAJSXa0I0eaSjRwGA1otw2DrqOs8HBt6hzb+tSbi4RAdn17jE\\/UI7UwJw+Po6xLOFjmsroj\\/\\/fEMmr+eCCovl6lUfeqHu47d2scsG0WA5eSqMj1AovM\\/QiAB8JXZnnRvBul6u9k4\\/v9Ccmbzwn8ZIgROwwDPET6sxdeaEa5xOTfiSnHA+\\/\\/OeWetce0cDVAzl5BwGgNb29lb570L73fZ+AFCqsWg4fgCIYuspLidbVxzwNgggzZOQ0o2AyNpG2JWHKQZgJ6sdycvR3CGdDbYyE6kFABD\\/+uyEgoFcUBHQEAHVV1XxZyNhcwUAy\\/r1FP+UiIBZo0zmY+2etcQc\\/\\/3uzE5T54P1evSokvj4SB\\/w7I\\/jAUB4Z3N6ZF8f3\\/TmJRsYwMILraQLUOvwz8ocHR2ODlSo5V65sg8ANKx0B7IsJGGtLaraXXF+Nir0\\/r77fPb58wkXM1HAAACUpbZjvQJAfJY00EnLRt8gdPXPIyIuiwoRLqi4mlBQkFI9gQFQUWpDhNNZbwWAXADg+AMD9w8dOmVKaMAsg2FQ+3BYFs\\/2TL+\\/EIN4Z8qjgXqjf4kdpoP7kwCgMWkdMGNDI03hOD+11+xhrWWt8uHiwyfbGk+6AdjtjkhhPV3Fx2F0\\/tnyszixP9cCy8\\/UshP2y8\\/Q7Brg9sHeImvLX42JlLADy+E4HrxxZlhY8gSuEGGrjOrnagAg4wMA9RH4lCu+w5lLADpQ+mlxxm8LvFUytKTEcnCWofV5fOVzzAmVlDk7yAneP4\\/4M79GcSoBcJb4l8SHIH4+Hj8oNoeGLtv8kNojASjWGlnwS5eK16BMM6eidMlhFwBtpK\\/Bw3qGqqyn2J+SkASAPtM6fz7l62QG4O8RvwQQL95qOGnZDeCyLGaGVeYesL8ayxKANl6Lt125+\\/DV2CVTZZGzcrHZPDmvbPLm8O\\/RA4a39+uux+WQF2T6\\/ZZMxJ\\/yDbcHPcBGPYDjFwBM2lPL8jafyTCF4\\/zUXrOHlY7iStXDEDlUAPCNdzgdeHqz8z9Hwzx8SQoAR4\\/S6\\/yYo1FsPbUKADipewnZeMvxZcrS7q2LuNY3TMYPAQAUSfHbeDma\\/1xmtdIYYMYYQE5yYEFKyjdoLwMIC4sHAPzHSQAqKovi8L5w2uT8yrz8uPLiWStN7Su60COnkADg8fkWU2dmZkr\\/ZwWAoCCMAUEU\\/7M4np9BE57TrM3avLm8sHnhBkM0ffbX4S4mdoSNXiPiv3b7ypIlt2\\/rvNjaYnwXFQb99QRAO5QB4Fvio6PZeor4OAury7mYXfMtWeFvD\\/X6OpNqfbtkXpYLIkTBhX1w30gDA6D9Mfp2d\\/cTn6kZg7gQoLpaFlQsKH\\/J9Sj6p1\\/8Yktq76LFIDAtP39yXn5dXv4zs5DFqFB06Us8jYZn7v\\/GVRCBW4qrC4aKMQA9wJyzJFqbn2+IXrgkmgHkDqRV8nwE4DDU53DO7dt0C6gLCqZi+tdatHlyGhjN1lPL4vVbAwPvu2aVOyn7dd4h92ReVhREqAsuxk6XqyFplT0LMILXyklQUpiaVJlfWRkXt7g8P6M8I2Na1KyVpTt2vPjiRgjO\\/MAq3RKopsDd3lNFbuVDWTj\\/hmYTj3ctzQYCEIFRVzkfirUheRdcAwB1lpXsnyHAFOVyj2w9hdPk9UsPjVM+Oxv\\/9cdzx49VliF1wcVY1S84eBg9JavMLlyqeOrhw6mpl4qjooqfiSruM+sErLmHYP7++sijvduVYgfa7gX1+XV6Y48TzoF6WOFPDilfxZHUWWB1VlY+Fe12qTe0wCOIQKkE+SaAQcp6E1JvlZRSYaH+AyCPn1sTnxMqmq2SOsurXl5L6vUWnYFb4KXWJ3v39viFBXXWVFpT\\/EFY0wOiSjg\\/\\/03Wmd5ZdRcSL9SJdyN4MRK4cuX69bHvtjWyLn4claHNqFCssfN\\/ACSSlF+MGKC8+fSFjHPbWOJ4Bw\\/+1VsldXvVy2sXQ+ug2Fgy108DwIHXPr4gfmHhs4fQDegL0g2dPhI20\\/2ISwA4B52fv5EeQncAwGk0\\/HReHj\\/u5qUGrny+oCBWNPhg48GuKK3GcMkKcR2DddI8IfQYIffvA8hfjEDBBklG4A8AHDj0DnTwr656mAApdZZXvcxWe+bM27e3bQujn\\/J6CoDH\\/FFkQs1dBnCiklL4izERbebSUmEMTE3HzOIzOQaw42+dnX\\/bCBGAFjS\\/heNXADQ27u+6eLHrIABkGOouKVmdsgyhiooMoU\\/58\\/ga1vnzNV\\/j9beUqB94v02JnwDopFxPzOqCCvUyAZi8rQa\\/d5f9fwAkcg\\/APXteApgGFWq0hZM9ANx9fkWTJ4CizOQiAWDBYnR8cf1BYHNq4PMAEAgACfsPgkBXVMWlS+gBso6lapJGqKVFI6T+BQpTz6ywuSzeKVVG6tCxtrZsdQPgeLu65C9W8LLyCxEAgFlm2+2IiHsAMOWpAKgHXKAe8AQE3j5BxMrp\\/NO4tJQBtFOKpp2sJAPYsTwuOTnuRQbwfcWNG5eEMLdc0kkABxMu7t+f0nWzK75nlrdMxpe8SAGgxA8fYVJlhf+nFpkVvUSn6RQAOCtd39WVi3gJQKS4f0R9bxAATAaAewUFADDlqQD+W9y1hkVRRmGyy+6ygrYleMVCM4sQoRvQKiFSBlG56CZiYYigEIgFlcJWhIJ0YUuUCLMbT1mhS4ClaRJPEQRElhbhpRD1qSyhInvq6f6e832zMzta\\/arebm4zOzvnnW9n3j3fOe9H8f\\/gev6HH57vpPZyMAbK0pESpAfz\\/YKA5YuWvb9skdnMBGCq6PO2lpbMz6l19pWhUZdg8h1ljvLHSOCiZUxASxyw\\/eM9F7Cbn1LHNGWugYHyv3pJgIcDhSRAla5B\\/zQCZNvdnj2y7U73\\/lAiYFVJ3\\/33980jJXkqAsDA84e+aaorq5MEYCaLlBjiVwgw73z\\/\\/eadZgAEIAV3O6YB9qN4CASQ1t\\/KMkP82BEE4Mu\\/5+ieoyDA6pnVzd3G6Ni3r0P8aVqwNA94nJDcetfnWyRuB7Z80rqDvv8MPA+36y1M9W13escIEACVNW9eX9+8vyIghr0Fnq\\/r\\/IEdFnq\\/xP1fwbHjprFqZyYCvHDaYzRXGBkHJAoCArby5qtJa4KAGctAwIzqTR9\\/vP3j7Xu20whQ69gwAs7UgbPIfGyRRUYxs1LMCzy6tnWTGj8R8CkDnUfyDyc5WOiyxCtmQmTOGxcXd20cm7mdTIALI4DwvHBYGOopjceO9czaggDcA0TBA+4BIGCSsp1mr8YIAgKrqqs\\/BrbvOWr1lMa5egJ0WWQQAIhqXgAEqE9BQu+3OuilvL7W+FZKOAmHvYuBkwl4rV81WCB4CmNtgncag+XfKyr0bWyiq7kK2MDQdb2dPALUtzPWywznWolWoFcD\\/fv1Ul6pE1DKjVmkiloGPgMvPTh\\/qpGOWjsGoPeZUlF9+ypv\\/\\/pVTspyLe5S3n\\/paR5YynvfweDt+qzzEAn5CWhkdySGR2NKMD4+1oH\\/c5WAsv9lO9qSqJZ5k5LbNgukKuerrxUmKrSXzyTQ2moSuJEgiiouIKBfAPBTpWO0IzJS9rAsWNAWPLR0ZQw9VyIisH1UQcnXnJVdSYjg\\/U\\/Twcdvl5\\/fewzejv0ZSlZ2SDmhsLs7t5w+I2yIozwjwwGxjFcZkflh+iz1L7VBtW+jzc3pzM8CwoyGUM7hBcjz5YIKqTSBaWrWWbTxcVZ6IHhgYNMAZ6Vv7ADEk4J9jgUBE1TpiConQzls5WJji2IHStN+8vErCEzzpSqlEVtnVG0dylnZEioQmMf7y7jnzXMTEDjBF\\/aHAG\\/n\\/YHD54us8xDE7WjurLVXuPDDlAjIiUzPyTcY8ImRKSBAZH0PHJAFF4+\\/jfDwd2wl5c5jw8xB9cSAzVeeL0tleZ8gpYik6yRlQp0KMSkrXb3uq2EXvpv8LmWluWNFEIAqBDcBqnSMTiQCEH7R\\/D2lu1ItkJZdBWm+aWkj0qq2YjtnZbkKawbvf4TQ39\\/d3d\\/Pf\\/TZFVjg+xID22l\\/jv6aiyYOP4DECBNQX9HgKMx3VRAB0Q5k9nNiiYCUICaA4p84ejTCp\\/25zQ21zCCgvHxmJUZAoYEJkOcLLzQMDE5fsRcaLDQ+BA5to8IwImCA4qcn7cePX6cSAG8zI0nj8WJ6fJQqHeMdiZH5dPk3IXyjOf\\/rkC5fhF9QUFp69jkoNOSsLBdIzOD9ScGcf+gio\\/GiQ+dfjxcYMV2SAN6O\\/YGJzcaJQuoSARXfFDkiwztiYjPzw8opNZcSaTBGRpYnwhwT+59\\/WEijfux\\/heI4URk+8+aamZWzzTKNPUyebxKZwRURwskLbSqatCj+nTsPCQJ8\\/Dyn35kAY27nV7VaAiZdDAjT03gUfdLl79rVbcxw5M+mvjykMEePSyutikPpKkvXEtkxzwQA2wzANv6jT0RBYJcggLfT\\/ofroKK2NSOi4ZOHOEBAaE650VEUkwkC+LGNf5SkJRFwzWiaGm08QbW+xxxZe\\/dWOvdmhs901EzP1BAgpO9UR74U4sBZbSYm4KNtOz8iIAlLSlGVSgoB\\/vUDQWb+bSAIGMnnTlL0ivgcXP62Tbu6zZE54bDW+toPI6CrNC6utPQcGgEsXRE\\/CGDlxe1Tt8Ay8NAtz9KffWBmtpXCv\\/NO1RFip9G80+hfh+MTAfmFFbGO0AUdMZnhsbPLUzLSMQjQ05kY5J8YGUv7L2scfaB\\/XOMLtH+8MysWU9tAT0tfX7gkwGgdIaWvvlZZEPAhj4DPQIDOoYIJ2GdsQFkiDDLcBJyvFjzE5+Dmtys7qDwW1ZIgAFJza0HaCIRf+v3XisMD1+IKAoRIsaRmp2\\/nP\\/pEzPAkgM3TcAecOFwc35Gf73C5CuubY9rDQQCMkVPgCms04kVkfvhs3v\\/9\\/nHj+hE\\/E1CE+LmYt69vtyQAOWSY1UkCZPyybQ7KkupCP9yG+ImAG2vUyXYyiLyCCfBvaPDXEGA8Xy14iM9v67Tj4u++dPduJiCgYF7p2WdXVZ177tenfT9CODzw58Wx9OQMlq\\/9ppvsvufSn\\/EVmAECKEGnOkIMP7TN\\/9A1fHwiIL+jor4+ph7FuUxAeUo+EwBvcBDA+7\\/\\/Pp8PEyDiZ4AAPl8iQErfE4cPc8GSBNr4hDK\\/Wrb9ieOp8YGAffvEF078NmDpeI1a4DC1vjYxJ5YQDuArMCuwC4MItjaY7Kq6lmtz5VOApScr2DE3QcvjP4APPZ9fYpyyljdetMkWFnJ2lghIsVgc+UYjnoL+QeGz9ftP5cd\\/bCxYIJhk1tn6F7XC+qzzeP32K94ABAEXAyCApOONkwGRtT1rSLxaPQzAP4qwdKk34wvOEn\\/xKnDUmzBGB9477w4gj7frfX01hg8MvMbfYRZLmHAX4\\/35DfyOydjbo5pZJn1zvSXUUmEBVb4L6D+f\\/yMKQKYRvPKSBgeTUKp7gdT0c3XSNSlaZqzjo4upse0DAVFcDHytgmt3rwDqLNQXbekwAaLAwky1x3w8ofRVua\\/P4iImwwcGNQ198OBBLy2mMlQSnQGLF\\/vOnD5scyCjTPEpVnZhFjRtdkrbHX8U4JVUUVFfUeF4z2wjWHN9NtZ5SNFop8PBZXzF6dmjID0\\/ePjh4vLyYsXn4davd0mI\\/uKh8CWm2Wwz5uN2ki8xS1tRsMDHQy2ytnfzTn3tMLLQhocNAcETpOPEwaHeBz0IQLM5Q5ixzX4iIzVjZUZ2yr0ls8gQvEw6RNCdZm8+vmLjbXZjsGfbnTGdunBEgYa31\\/6KehdKS9dMkVlfH79JfdousCSnK7ANPviRlgBIz4TmDx7+xlUyq6T+vpkzUeM0EwSkKSil2l2y2AQBNTWoxiSLTZa2ggA+HipRAf65DxABOBN3HpMImGS42cClc+w4sXmoNfVlDwI4cDm7Ezt7UmpMQkRIRMLqEkYZHCJYOmeGH99xfDcISDWkTvHwPU7npplhskADBDhcaE5fY7EycimrmqvxCU5yBoIAZ0YqbEKH5W678VgFcsz7R4\\/u3MsIy7ZZFaQCtZMFAYsWGY3bXmACRgoCjGaWtg8h06Ma3N3+4Dlau\\/xRAd6CAJmCIQJsqanW0zUE5GjihxvdsOyYkEC\\/iLensB98SZl0iNiLG+bx3cczZ4832g1TZPxyBKRsYTM04XiBr0CM0+VyrrmYSwKmjB+6o2CS77qFC5WSl2hnW1tloiUE99yQoIuoDW3WrP19eAYMGwY16uuN2IDsXbtkSQwREGrYtuydDiLgHZNa22tmKawYQsRUiIIFs2cWOMgA3Ky+tuy2W63eY4d4jgCKX5qxPZFhD5oVaX9xeiPiBwGKQ0T4pszdxzcdnz0+WG2rpPoD5fMofiYgz4HLDygjYKhrfqDvsGTFwQEEVGbh8o84e5h950RuQ5vVtx8MjEP8RIA4YEJX6S7hQEG+xKGGmnfeWW5sJgLU2l4LZX0VApo3SkcIszZ+aeCw+D5gJq8Qcesv3t6bdyN9oBCwocKloKmpyTW4KmHx4mGLnVOyED9QdmxvZlvbk20gYNPu3cfDmQAZPxOwfosYfTTbRZ4kXhdQ\\/z6AEUfCYLz3QGDwsGS+\\/A8IAootCfh2+gUdIqlMI2B0H+KfQfFTZ6c6AjgLS77Eoc3L33lnUUcz+RKrtb0Wer86AmKE9jfrsrj06j5NQcMvYzdu5OsvQStKuGd3z8g0Bc7CzY\\/RyASobYAQckPCTdK3mJukqP6A70G4Aymf52W1EZRvsTWXtHM20hUSndEZVrQt4vKPFFJ58jdNfXPm9I07wZnJfaZt8maxU6D5PCKgbhkufkcz+RKTtJUE8PvlPeD55\\/kxcPfa0++RM\\/EA2d9ByRnuY8cV4RU2NSo1dcpULQHlhoxYEf4ZggAZ\\/jyE31g1NV+N\\/9iQ3aZp5Fs8nCDOn9sBRDl0SBSyxl5jgy\\/RZnWnQfunwdWcgPRG3NEgKviZkNs8XErJyW8coJo4jh+pWZNH29pVw88jX2I00eBGENRMvsQsRQUB\\/H4qxmasB2BuFp0jg+dmrefCxk4iAjhLTO5x08JgTD9pWpibAHiRWSIRvyDgSRDA8SN8ip8IcMdfXX0MBJBvscZHGN5iiJ8IyL5wTDYISLUB6n28FtpftrkxC0d98JCy+9e5peR57FEk8SkI0ElN8iVGaVxNjdFcCF9isV0QwNvXqklvgAjIkUOAAQImGW82KlVaIOACOKmOBwMqATnKUwA8yBEgKWACshQdn3kcbYDsW6w5v7UYeQSaqU6lEUBunLUCbxOGfr90A5qtjiqAYuqsu0yVkqjj9YBeatLmGmRlC4NCF7m3hwbR\\/zmPtq8FtPZm0bpaXsg\\/88sWNcuJ\\/81QGFCW01DA8k+iCsD+HrtwOhonqIh9pZgCYpghfIXF1RcNegLu1rVeb0+p2pDkmTcmWenO4QI2BXJIXRYVdUWS5h1508aqWXZAX2sszNDUz1uvgvXzKZf40MwX6R0puCXvVeC009T0uSZGL5aimlrgsbq2NdPARqFSAgp4++juYqdmsawwesRrpbPNs1Y4NcpiycbuLqcLv7OzKqfe8d6XG0UWF4Djg77WGFIaULPU6kQJpm0efXTtqZf4GFD8vkx6RwquRdYsEeI9aRSyppw2JYwHATiQphZ4rK5tDVnV6kt8gbQZcVuxHQEmInBgMyAIuIZqd6Ujg00bPhPgb8\\/KaiqrbGrLbNkNApAvp\\/dI5OprjSGllx9oKiiQWV8QgMB\\/+OabH14ngIBTLfGB0IXXGQjQOVLk0WSvcJTg\\/b1HjRmT3NWVfDWDCcDxNLXAcqkrV0y3UGKUVv4KS06k4a5IvsFGg82W4pTxny4IQPzI+E1sngil5yZABvhCtr2msrKsrL2sJbNpSWwYCHjpvQx1u77WGAQ0lXVtLaiSWV8i4BCmYcYJBtby8ckugn1ozf5iBHD8TIDekSKPJns1S4SMRU3pxStXagkAnZpaYNGuHjElLcIqCVhY2DCnetjWrajuRUbI2L1ypc3s3Mzxn75ZElDnP3L4yJ3NUHoKAcoVDsKZVFa2tcMvP65lScvUOx5JwdpRe1ezozwmS30CRslaY5WArtTcLrmEBxMw7hmgkVYgen2tCDg1JCRVU5w9wPEzAXpHCnah1SwRMgQP3ITkZDseusBz8V6cNVVrgQUBFYGrdwRWSHO0woVz6ue8m3z2OaVLUZxs6541q9uwsuH4McJxk5l+506sI9P+kcNJKofILyjPWI7CXB0IaI\\/tmUEE7G8JuyPSkIFs0XEpTVuJAG2tsSAgI7iKs54gAN\\/9ZwjjBAHpQnnWObOF9BZKEvFLAvSOFAoBSOLheIIAFDFnX6olQK4mp86vm8v37i2HYwET0DBnznx8P7efc24ptmMEVNhsIe4sKxFw\\/sSLzIdkgYM+CxtKBLS0NM3vw11uMBNfgUhaNkuugLYaI0CNX0rpAy1dUWVx4v0g4NFHrxUj4DUQcKcgIDUqCgSYFQIGZPyt75r0jhRUIHF\\/ibpECBEA45mNl3KPPAgQq8npCDBmwARItKlRre2cBvpl0Ps4B2zrtmVPkPFJApBTbTbX1TWPBAH6goWhWI+wMhMFUC0tRwaXbAYBuP4Z6nS5rtaYf0scaKqqKsX7FQLoHnBtx2uCAGVPbvNKZwKMRhl+77smvSPFipmo9OD4BQFGIDk7N5mPgQssaoU1tcB6H18QUN9O8QNzh3LACcPUggQmgB4AdTv9rxl+1clLbnh3pq3bvHl+S8sgsGTzbBCwyuJu6zHX6muNJ9MSH+\\/jAPx+IgC3vh8OH0b8TADf1QFaLg1marcyAQNMQG8rCNA7UqygUieO\\/1U+Ht+YduzINQv4i1phtRYYBEzx8PFFbW77EqXN7N2rva\\/tDtEvqWH+uyU3QMDqrErG5vDNRMBe7ZoarfpaY7HEh\\/r+9fT4B15nEAGA6LYGmACcungMAia9IwXXInMWex4fz6wWTwgChhJyGd6EC7QqDTB5ojVNV5BAVN+od3AANJP0c8NUeTo7r3U8jqsuqaGrNZZaW33\\/ep37WR5B02amb03TO1LQXis2cIGEPF8mxw0vo4TSO6lRngycm8f6c3mL895Tz2D7IGRuUvQR8i6Tvr46qXoGgAINLomYCgz19qw\\/GeMMv2l8uPNxxQhZ3\\/ZmtCkwQ1pbLM+6cQvDKODuHLuccBrjlFL6KkDbR6f3Fc5YzwVaAi7X3WshTRmyE9NUbFxsSHwPwJewweXaHw2dW78SSBPS9Ko6T6l6BrLHqATOEXg6zDvbZseyvAEy6zu2MiElISTFnuh0kt1g1lSeKFXPx6Jvw4MpitYW5Rb9+bO5GytfIX3VeISPsFqwIXyJ9b7C\\/kgZKVnrzrIyFwhwNyPj7rTMlFecQrGvATrLmpYhY5SV5YLUTGNpSgURNVqpCgJycvCDTVr0gQCbPcAOF6ULpZMUChsnTAAdYoa\\/CATgt4Z6PhabgWtm+bUgQLPuDlas0J0\\/CEBgmtXx1HiEj7BnBsq80+slt0cwrW35yB14g7L\\/fU1N5SBgUd225prmZvzT8QIIWJyBq4\\/w9zaVHXiBCWgX8Z+tFEQs12QYckHADcgv5CN+SUDqJVi2WcQPAi5IwHjxi9pRVNQCFE2FoUIGtxKuIkxPeiUxalSq36jixYziFZ9tOwQoo+DDZyUBLpdRIQAXViN9RTx3bdnyKKUh7lrrE8J1pAUFUqh54bHEEBO6L92xXsaP3ekNdxIBzc11zXUdy5mANcZVxmJx+V9A3osIcLnjv8SeS1ng5WrbSOhS\\/ZIYdlsCHtDSIv\\/C8UUJiVEbEzc6isKZgLAVM+1m+xrCQWBNdN4jAci8+zqJEJTu3qp+PTRSuK4C+dHl\\/BoE0Fp2Bw4I6QsCEM2WlIwMUPDoQyCACyZm4IRYamsJoCzFS3dgvh1QZpxLvkCWt3lnc0dH3aLlNcsQcF7kquJVuPxNB16QBLTL+M+eYIew4CzwIqVSDwREqPETAUNxBTTl9xfMjSzescNZviM8fMCR4ggHAZhtUOJ\\/GQQsDh6VGuI7cxURsMZNgHL8IL5gD3f+8ENPA7JMd93Jnz8aNSaHxep44oLiB3IK4gcBomAibdy4UsSvJ+AOEKAvOJisLqbGAa\\/A+HfSt5\\/iv4wIcHH8IwKy3W12y\\/3l+TEBFL+6GpzNMwucixHEX38QMLBsERGAG4wHAaHOmc7a6Rw\\/E6B9vyRgeWddTc+yh4gAWcDR3y+lr\\/ARvj09\\/faHeLuQ3jNQyS1Xm5u28WfCbwI\\/t+oLDkiaNjMKmwUBaxo6cfk5fiKggeIfRj\\/OcEtpvhxZ4EWaR23hkJynn0b80qP0uTAmQOMHEO1E\\/JVU4VS0bFlReNjcL38W+Jjwc+\\/4jW\\/nTg\\/FuuF8fuvmHpSOQwC7zrBP8H03d7bcdwNPtbEZm0b6Ch9h3Ai2KFNxbqXGaX0vvXRFAB7L0REBYt21ukV0xfPqcfkXyfiR9Y12pQ3zTbCiBubQRcOx\\/+XXLJqjdWgAAc\\/h+iN+JmC2TY2fgBGgVHjtxlK54WGn8AkOsEepr1es4tEB5AEHo0Wef0ts7O0iQM5Sq6vjgQB1KpK2mw3ysy2M0JPa5k7K8roNKd4hmOZ0lnVqV6ML2+Vn99\\/ZXDdyotj\\/suWeDg1UEIG7AB4CjNlmXe1wvJPL3ABRkPFPPsG3riIo3xEQIGcZRZhEgPoUoP312y93t\\/HJ1eZOMifTFRwAJi2ODr7g8frdd9+\\/6jLs7y5AMHmC5B+yzO4SB5Jz0gwil0ACkHPCEv\\/kE6zvslOFsgCXVyAHitU5dFJabscO2iy211kmT4zXFUioApyxoiF4UrCKKVfrs7TwRvFwJt7Rdvqxj4cc26Skvrm0gl0hNrAWlu+9SpGm+uONB7T11nkEFvj4B2jV7T958uPT5k4+7zvluumPZxZQzdSefEVncRHlKRXvhLXMI8WPKHeeFfWpU66+2I2bxuuztDeopjkPA2+dIWt9xSIwsWFsniYW1SA5PFYWSLg\\/T18wofcN5l+D5JPlqidtkGTq3OXx+ZM7MLkB++7QDp7BMZ3sU5zqB6td5TUIeH29RyelT9QkjfEuCPDw+gIBWEYZi2lLPL5dn6X9vkK7uvqun0St78bg2KL89vZYIgB5e9EoCCFABCRkB4waFSgelWVy9ThVCut9gykfkJ7TiQVPmnqK1tyfZJrfE9ilfj4I2LFxdce+jn3+b\\/ASG3x+2Zj\\/svtJn+JRtByesj8IwK+kyFSLgoU+fl1pJcDoRrqTNvanpKutuUBxvXVXdwgYUAjQL2xMxcvrqhcutNqruc3tmFzSIraoKbCqpWg2ETBTNEqyEPLB9Ugd5et2f6tkSyMH4AQc0eK5H1NREWHj43OOL316J9DUfpAIWNJXUqDWOk\\/uwFjZV7gv1PLGp5IAX7vdzzfAHjJB+BRnj4Kxsbrw8hkPbXvo0ewQBe9CKnaljR5dMoj4B68dfcTgqbUt9fVL2g3Z5yhfKzYsMDaT+dghiyQgrQWPgVBrbkvuu9W9+bLWt6ioottNADu9BUIOEwF2q93X94QEapI4feLOOhs5\\/u6KCmuMQkBDw\\/T0+9e0d7b3HLw\\/2tQQtHB\\/ybw0WTsMAlZvWr3vDf+gjn1MAElfu1+C1c8vdQJtlxdMXXj5jIefKXxw\\/c8+Er1QSl1bYex73eC4\\/bcNjpMEpNTUpIiChvr65x21BssxBXRArK6N+M+\\/iKRv647OzoUNDXMKl7TX7tmDEeBYwKvLhYe3NLWAAG7MdHG36BgmIISywr7utrloJ8evpt0pfuSpkaN2kfSFUnQ1dC5Ys6aop70FvxVMFqyEg4qVNFkLfB4TsG\\/fGxQ\\/pu9J+dl9rX7D7NZRtF1XOwwCHq149MEv8UoABPAIaBwcd+2rg9cyAXyNm2XBQkPnlztiUqBZBIbwCGCLjzp\\/MxPgKK+GCij0r9\\/elrO9N56qLlnptBw4MBg+m5e8cFH8IECt5j7BGH7iininev1PT9osa4PxiypGSGsQ0NlQ1g4CsEY6pDKPgMZ5aUoW+rw3Vg+sw7y1nL4XBASEWBP8Un1puz5r7XXWaw8+mNJtVbDQZ8LWNEUJv\\/pqY3+k+v0X94DumApHtLpiob5NjdvcPr7utsJaavOSBIQTAZktLWeFzz6dZmpcFH8ZF0EtjaCeYVmQgIWTk4o1M4+VWVPNuuODgPbOpibcAfct20cEzJ+zv0TMoigEVK\\/m+CUByDonJEwYAWfJS2i7LmsNAh5c\\/60GV\\/gEY4EkjVsc33SgvbDEHdTXqlvxFFgQPUSF3pzse9z+GVWEgp9AgIj\\/0ieBcNPp90xfsMDF\\/cJXEgEbIsoA8l0mxA3qzdN4Ieh3VOmNLG9WT1N7T0\\/PvmUvEwFL+maUqtIZBLy9eqMIXxKAeO2pVmvCKN6ul9pev6z\\/9lktAd471BwtcF6e6vIEHkBAyu54TfzxenMyOFMzygWGTOXHP0HU+t56j3ITdF0IoJbX8\\/N88MiWE0sEb\\/1C0LfiPJwNrsCypvY3yHHC1FMwSiOVQQAeg7J8AzD9g7TGCPiOcYWCabqCB9XxVqAt3mPR1l9MOkD+aZ2Jz9CW+tL205OAQV43mBPQemmql776haClFI6Pjxbo1e1vMs31qDn4J2ntpZeKVgzkB6y+7tetEr2M7b0vM2B6JrerWdbLTxzBB+qzynqCshT4BfAMvX7JjPjElKypUxMdiZI3xV3CIrPEdDlOkyDmXj1yhMsfFOxou\\/XYx0mQ3sBUQH98fbxeeql4jq1h\\/vwGm1153bpDwaZO16ae3pdp4QG4aSvb3W1uFzWW9KHAAQUNgFrQYFINHAmmLMMW+sv4ovimN5htFVjj62HCzcDp8UYkiOm2K+6Cs3k1OpRVKlnhvPe43oHTvlSQ8X7UykPyNWFpkpDexe4CjgqrrbvCUIG\\/u7u7K1z6eEWBREKC6sBgt7UvXDjfliBf66XpyzcXw4UX5dlyu2JudrgR1lq37R+k6WwOXRY0cIpN9SF+NWuLdCDBrDD8xqZYUHpbwfe8dEJkfEa6IyMyIzIofDM1SIAAIRttstY3773pq5TjkTna+4unf6M5\\/lLZZrfaXcBRERGD6CNKbLaIwLLGTindu7oUKcxS0Wq1qw4MCWBgznxriHgNy1as2vQmgMLNuI4hgoDp0y9Us8Bk7tXYuB\\/3wMHGfhCgncpae5pYKFlK3XlHs7YYHzM+Zn5sPY3LWeZCEFCyEi1jW7bwyh5vtX6ptAF+DFSblMXYbObuzs5uKwhYtQrF2qNJqpOP8WlEsOpzvEFI7417Kzcvwn0QBEBDlJQsdux9zzXuSFl3EMULFMxQpDCEiJ\\/Nb1jACOswxYEhwTZ\\/DjHAr\\/F+Q4qM\\/+mON0EA1ieFR+aFQkoyAbj8TXPQlHek8dAHTMBTMn5MZgqhk91gtIv9s7Y8Rlj\\/li8oP8dvndkaE2M1SpdReIzqsr6FICCCYMzo6Ww6UiEIOHzg8OETh6+l2uM8nqVIxwDiLHJSFknv4tq9mzfvq2letjnMaQx1BZY4sVNZo6sisZDPZ96M0aPj4s5mKQxlZLdhPCOppUhFMICCgCXWEHptaG7GIBDxPx3XEX36zewRugBnL9vi6PL34RnY19j45utrP3n4ecKbEpdCGAHGhiVGaoDfjnsALr\\/lQf8P+L6UXm+hiSCcvkShrna4cKkwWcFPIXNPj9koCDgwsbFxeP+1JJ3xGvEXrzlYnIEs2ZqkY85KVHdnEQF1ze+AgIxIgyHCFpy7uqy5OAMEsI0vjZcROH8mAPEGQCj5ZZ\\/rlooh1iW33bbEGoXXMRUx3Rkcf08cLWV98kLJB+jyX4fLX0fT16d5ZpVp\\/UASxsaL68XqcTwCHnzrg5eZQb\\/qG1J4+Ct4K10bv4YAY4WrtrY+NHSFGAEnTvQfuZZylnjN8R8EA5QjjHZL6X3LQMDs4sgUw7JAIqAx0uEPAvj8S5EWl1KYpKEd9Xw0Ia9KRTDwwAMLU6PO9jZ0d3P4lOmJewME6KTkVa6SPmigvsbDb74mCFDjJwIGXU3AEQX70Umi+qQGpba\\/fLNqsksE97KUdsO0IUa47GCuqbbWbAmlgFHwcWI4jk6lt71uvwdRshOfpfyU6Ozra9rMXWaNByqaWppccUGQ0uL8x20dgaSxJIDiDaH4tVIxxLrwgQfmpIZ466WpXkp+4VooLj8qWCQBavyvjtvwjOfrL\\/yy\\/ahVW3yDfAKqM\\/j+z4Crr6VQ5yvMBAQCZloMGgFQVrgEXYX9OBoRoD8fECB\\/SvUAggBzs6UszlVcaGYCeK0KavbD\\/kzAqaUixsB1ty1J9e5Vbsp7qvYgw3GStCQp3NdY8vzrDBCgPvUIG3y6BLYKeAepbFrS\\/f27XlZshm9gRF\\/h6SsMAuRTgN7DBOArII7feKqCjHihH+QwYAL487qRpmMC9FL4r6Virgmo7WVAYP7Ue0ppif+1\\/4sTH7izrm5jsA0C+v2nELhEpJrhr1teTilEUCCOcvRortxpxYqkJOXopyrI0LflWdxrTwicJIUf2GCaq5WGSTC4nzZtndvyIgzgo2G7B2SNw1VXjQw9R\\/N+\\/epzQZM1OWZgnhszGJfq8MckTbGtbdIfXv82TD0xAzs00jDJiaxncIIsY1s3Nyy\\/PMgRCTsouR0ODVF+qpPt2P66ukOWBPX9l9cp6CkoaEk7z2io+YaADlfCVaNHqEBKqErGHa4QkD3l92xeZZWqAX+fku31b8M0vy8QpbCKFGYCVq97e906tvYhAiLb2spRmy+2gwBEfoni4njJ2MGYi5ZftDNhgnw\\/CLhIunuPXJ6WVjMZN9FOrRSeN8LdIgkwAUVFOQtynAvuKSrCC4Ph1z9+tRm6ugw2\\/MFg8Pq3QVnVsq+q3VlSImAdCEhel2tMTU5uRYNCZnkbehPk9pBsuwLy6LzQ1BlxzfKROy3yfweDAMR\\/jSwrWT7ZuDLBMCBvgj\\/9tHU8CKDoq6q8CRczAU6MAAyBBQvwgi\\/879lRUfRvw39BgCuwqa9MWeh4jkkSkJycm1yLv0BAZmI59WZI6asvUKC8PFWLi6zGyCtAgDR3H3PObQ+keUfFzAqJql5XnZzMbnCt80Yg\\/LRzq6puSsPEEAgQGOjJFH8wEH4dExx8MS7\\/f0JA55KyOftlv8WGsj3JYi2L5GRj7eNvm0FAW2Ybxf+LlL46qUq+vX2B15xPFilw9Zl43uV1irm9IMAeMmuW3Sj5hRIUBFS99VZV2lg3AZkopJQMSJ\\/jm25KMPxHBPS0NO0vk+eHE5wWLK29UpPffhwjQC999W1uuIeU1cD1REwlnT8ZBMjhf+W5D4AAc8isAnM1H5L79ogA79KqHxdV\\/aQSgPjBQLgkgG8D+Ps\\/ImAJrv+c990LKU9bLU82udZci2puvfRtL9Sux19\\/namzERUFO\\/3FdGBklljiYqRKAHyWv8Is4k8\\/\\/cQNGCDAG6iqajmGphVJQHgPCBhQRkAqf\\/v\\/s3vAEjV+QQDHT0DG7vFWvdTEkFduGDxiBiOoXWLxGqVgQV3i4qZzHzCVggBzzziNFJ43huMvrfqpCk07IICR2TMwHwNAfQoA\\/9VToM+15HzNQspz8fgHkiUNraeQvu48MGDqp6fgYnfFQrS6xMWFY667rdTbaK45wBBGF5fNGKN1uU0GAYz5bh1wCS484T\\/TAUdNk7ULKSuFvK0SJ0lfHS677MzyFZrV1NQlLi6Aj9dYb3+T55IXM9CxogAcV\\/3vSvC\\/Bj1utPD6n\\/EnnaQbrf6BCX0AAAAASUVORK5CYII=)" + }, + ".flag.ad": { + "background-position": "-16px 0" + }, + ".flag.ae": { + "background-position": "-32px 0" + }, + ".flag.af": { + "background-position": "-48px 0" + }, + ".flag.ag": { + "background-position": "-64px 0" + }, + ".flag.ai": { + "background-position": "-80px 0" + }, + ".flag.al": { + "background-position": "-96px 0" + }, + ".flag.am": { + "background-position": "-112px 0" + }, + ".flag.ao": { + "background-position": "-128px 0" + }, + ".flag.ar": { + "background-position": "-144px 0" + }, + ".flag.as": { + "background-position": "-160px 0" + }, + ".flag.at": { + "background-position": "-176px 0" + }, + ".flag.au": { + "background-position": "-192px 0" + }, + ".flag.aw": { + "background-position": "-208px 0" + }, + ".flag.az": { + "background-position": "-224px 0" + }, + ".flag.ba": { + "background-position": "-240px 0" + }, + ".flag.bb": { + "background-position": "0 -11px" + }, + ".flag.bd": { + "background-position": "-16px -11px" + }, + ".flag.be": { + "background-position": "-32px -11px" + }, + ".flag.bf": { + "background-position": "-48px -11px" + }, + ".flag.bg": { + "background-position": "-64px -11px" + }, + ".flag.bh": { + "background-position": "-80px -11px" + }, + ".flag.bi": { + "background-position": "-96px -11px" + }, + ".flag.bj": { + "background-position": "-112px -11px" + }, + ".flag.bm": { + "background-position": "-128px -11px" + }, + ".flag.bn": { + "background-position": "-144px -11px" + }, + ".flag.bo": { + "background-position": "-160px -11px" + }, + ".flag.br": { + "background-position": "-176px -11px" + }, + ".flag.bs": { + "background-position": "-192px -11px" + }, + ".flag.bt": { + "background-position": "-208px -11px" + }, + ".flag.bw": { + "background-position": "-224px -11px" + }, + ".flag.by": { + "background-position": "-240px -11px" + }, + ".flag.bz": { + "background-position": "0 -22px" + }, + ".flag.ca": { + "background-position": "-16px -22px" + }, + ".flag.cd": { + "background-position": "-32px -22px" + }, + ".flag.cf": { + "background-position": "-48px -22px" + }, + ".flag.cg": { + "background-position": "-64px -22px" + }, + ".flag.ch": { + "background-position": "-80px -22px" + }, + ".flag.ci": { + "background-position": "-96px -22px" + }, + ".flag.ck": { + "background-position": "-112px -22px" + }, + ".flag.cl": { + "background-position": "-128px -22px" + }, + ".flag.cm": { + "background-position": "-144px -22px" + }, + ".flag.cn": { + "background-position": "-160px -22px" + }, + ".flag.co": { + "background-position": "-176px -22px" + }, + ".flag.cr": { + "background-position": "-192px -22px" + }, + ".flag.cu": { + "background-position": "-208px -22px" + }, + ".flag.cv": { + "background-position": "-224px -22px" + }, + ".flag.cw": { + "background-position": "-240px -22px" + }, + ".flag.cy": { + "background-position": "0 -33px" + }, + ".flag.cz": { + "background-position": "-16px -33px" + }, + ".flag.de": { + "background-position": "-32px -33px" + }, + ".flag.dj": { + "background-position": "-48px -33px" + }, + ".flag.dk": { + "background-position": "-64px -33px" + }, + ".flag.dm": { + "background-position": "-80px -33px" + }, + ".flag.do": { + "background-position": "-96px -33px" + }, + ".flag.dz": { + "background-position": "-112px -33px" + }, + ".flag.ec": { + "background-position": "-128px -33px" + }, + ".flag.ee": { + "background-position": "-144px -33px" + }, + ".flag.eg": { + "background-position": "-160px -33px" + }, + ".flag.er": { + "background-position": "-176px -33px" + }, + ".flag.es": { + "background-position": "-192px -33px" + }, + ".flag.et": { + "background-position": "-208px -33px" + }, + ".flag.fi": { + "background-position": "-224px -33px" + }, + ".flag.fj": { + "background-position": "-240px -33px" + }, + ".flag.fk": { + "background-position": "0 -44px" + }, + ".flag.fm": { + "background-position": "-16px -44px" + }, + ".flag.fo": { + "background-position": "-32px -44px" + }, + ".flag.fr": { + "background-position": "-48px -44px" + }, + ".flag.ga": { + "background-position": "-64px -44px" + }, + ".flag.gb": { + "background-position": "-80px -44px" + }, + ".flag.gd": { + "background-position": "-96px -44px" + }, + ".flag.ge": { + "background-position": "-112px -44px" + }, + ".flag.gf": { + "background-position": "-128px -44px" + }, + ".flag.gh": { + "background-position": "-144px -44px" + }, + ".flag.gi": { + "background-position": "-160px -44px" + }, + ".flag.gl": { + "background-position": "-176px -44px" + }, + ".flag.gm": { + "background-position": "-192px -44px" + }, + ".flag.gn": { + "background-position": "-208px -44px" + }, + ".flag.gp": { + "background-position": "-224px -44px" + }, + ".flag.gq": { + "background-position": "-240px -44px" + }, + ".flag.gr": { + "background-position": "0 -55px" + }, + ".flag.gt": { + "background-position": "-16px -55px" + }, + ".flag.gu": { + "background-position": "-32px -55px" + }, + ".flag.gw": { + "background-position": "-48px -55px" + }, + ".flag.gy": { + "background-position": "-64px -55px" + }, + ".flag.hk": { + "background-position": "-80px -55px" + }, + ".flag.hn": { + "background-position": "-96px -55px" + }, + ".flag.hr": { + "background-position": "-112px -55px" + }, + ".flag.ht": { + "background-position": "-128px -55px" + }, + ".flag.hu": { + "background-position": "-144px -55px" + }, + ".flag.id": { + "background-position": "-160px -55px" + }, + ".flag.ie": { + "background-position": "-176px -55px" + }, + ".flag.il": { + "background-position": "-192px -55px" + }, + ".flag.in": { + "background-position": "-208px -55px" + }, + ".flag.io": { + "background-position": "-224px -55px" + }, + ".flag.iq": { + "background-position": "-240px -55px" + }, + ".flag.ir": { + "background-position": "0 -66px" + }, + ".flag.is": { + "background-position": "-16px -66px" + }, + ".flag.it": { + "background-position": "-32px -66px" + }, + ".flag.je": { + "background-position": "-144px -154px" + }, + ".flag.jm": { + "background-position": "-48px -66px" + }, + ".flag.jo": { + "background-position": "-64px -66px" + }, + ".flag.jp": { + "background-position": "-80px -66px" + }, + ".flag.ke": { + "background-position": "-96px -66px" + }, + ".flag.kg": { + "background-position": "-112px -66px" + }, + ".flag.kh": { + "background-position": "-128px -66px" + }, + ".flag.ki": { + "background-position": "-144px -66px" + }, + ".flag.xk": { + "background-position": "-128px -154px" + }, + ".flag.km": { + "background-position": "-160px -66px" + }, + ".flag.kn": { + "background-position": "-176px -66px" + }, + ".flag.kp": { + "background-position": "-192px -66px" + }, + ".flag.kr": { + "background-position": "-208px -66px" + }, + ".flag.kw": { + "background-position": "-224px -66px" + }, + ".flag.ky": { + "background-position": "-240px -66px" + }, + ".flag.kz": { + "background-position": "0 -77px" + }, + ".flag.la": { + "background-position": "-16px -77px" + }, + ".flag.lb": { + "background-position": "-32px -77px" + }, + ".flag.lc": { + "background-position": "-48px -77px" + }, + ".flag.li": { + "background-position": "-64px -77px" + }, + ".flag.lk": { + "background-position": "-80px -77px" + }, + ".flag.lr": { + "background-position": "-96px -77px" + }, + ".flag.ls": { + "background-position": "-112px -77px" + }, + ".flag.lt": { + "background-position": "-128px -77px" + }, + ".flag.lu": { + "background-position": "-144px -77px" + }, + ".flag.lv": { + "background-position": "-160px -77px" + }, + ".flag.ly": { + "background-position": "-176px -77px" + }, + ".flag.ma": { + "background-position": "-192px -77px" + }, + ".flag.mc": { + "background-position": "-208px -77px" + }, + ".flag.md": { + "background-position": "-224px -77px" + }, + ".flag.me": { + "background-position": "-112px -154px", + "height": "12px" + }, + ".flag.mg": { + "background-position": "0 -88px" + }, + ".flag.mh": { + "background-position": "-16px -88px" + }, + ".flag.mk": { + "background-position": "-32px -88px" + }, + ".flag.ml": { + "background-position": "-48px -88px" + }, + ".flag.mm": { + "background-position": "-64px -88px" + }, + ".flag.mn": { + "background-position": "-80px -88px" + }, + ".flag.mo": { + "background-position": "-96px -88px" + }, + ".flag.mp": { + "background-position": "-112px -88px" + }, + ".flag.mq": { + "background-position": "-128px -88px" + }, + ".flag.mr": { + "background-position": "-144px -88px" + }, + ".flag.ms": { + "background-position": "-160px -88px" + }, + ".flag.mt": { + "background-position": "-176px -88px" + }, + ".flag.mu": { + "background-position": "-192px -88px" + }, + ".flag.mv": { + "background-position": "-208px -88px" + }, + ".flag.mw": { + "background-position": "-224px -88px" + }, + ".flag.mx": { + "background-position": "-240px -88px" + }, + ".flag.my": { + "background-position": "0 -99px" + }, + ".flag.mz": { + "background-position": "-16px -99px" + }, + ".flag.na": { + "background-position": "-32px -99px" + }, + ".flag.nc": { + "background-position": "-48px -99px" + }, + ".flag.ne": { + "background-position": "-64px -99px" + }, + ".flag.nf": { + "background-position": "-80px -99px" + }, + ".flag.ng": { + "background-position": "-96px -99px" + }, + ".flag.ni": { + "background-position": "-112px -99px" + }, + ".flag.nl": { + "background-position": "-128px -99px" + }, + ".flag.bq": { + "background-position": "-128px -99px" + }, + ".flag.no": { + "background-position": "-144px -99px" + }, + ".flag.np": { + "background-position": "-160px -99px" + }, + ".flag.nr": { + "background-position": "-176px -99px" + }, + ".flag.nu": { + "background-position": "-192px -99px" + }, + ".flag.nz": { + "background-position": "-208px -99px" + }, + ".flag.om": { + "background-position": "-224px -99px" + }, + ".flag.pa": { + "background-position": "-240px -99px" + }, + ".flag.pe": { + "background-position": "0 -110px" + }, + ".flag.pf": { + "background-position": "-16px -110px" + }, + ".flag.pg": { + "background-position": "-32px -110px" + }, + ".flag.ph": { + "background-position": "-48px -110px" + }, + ".flag.pk": { + "background-position": "-64px -110px" + }, + ".flag.pl": { + "background-position": "-80px -110px" + }, + ".flag.pm": { + "background-position": "-96px -110px" + }, + ".flag.pr": { + "background-position": "-112px -110px" + }, + ".flag.ps": { + "background-position": "-128px -110px" + }, + ".flag.pt": { + "background-position": "-144px -110px" + }, + ".flag.pw": { + "background-position": "-160px -110px" + }, + ".flag.py": { + "background-position": "-176px -110px" + }, + ".flag.qa": { + "background-position": "-192px -110px" + }, + ".flag.re": { + "background-position": "-208px -110px" + }, + ".flag.ro": { + "background-position": "-224px -110px" + }, + ".flag.rs": { + "background-position": "-240px -110px" + }, + ".flag.ru": { + "background-position": "0 -121px" + }, + ".flag.rw": { + "background-position": "-16px -121px" + }, + ".flag.sa": { + "background-position": "-32px -121px" + }, + ".flag.sb": { + "background-position": "-48px -121px" + }, + ".flag.sc": { + "background-position": "-64px -121px" + }, + ".flag.sd": { + "background-position": "-80px -121px" + }, + ".flag.se": { + "background-position": "-96px -121px" + }, + ".flag.sg": { + "background-position": "-112px -121px" + }, + ".flag.sh": { + "background-position": "-128px -121px" + }, + ".flag.si": { + "background-position": "-144px -121px" + }, + ".flag.sk": { + "background-position": "-160px -121px" + }, + ".flag.sl": { + "background-position": "-176px -121px" + }, + ".flag.sm": { + "background-position": "-192px -121px" + }, + ".flag.sn": { + "background-position": "-208px -121px" + }, + ".flag.so": { + "background-position": "-224px -121px" + }, + ".flag.sr": { + "background-position": "-240px -121px" + }, + ".flag.ss": { + "background-position": "0 -132px" + }, + ".flag.st": { + "background-position": "-16px -132px" + }, + ".flag.sv": { + "background-position": "-32px -132px" + }, + ".flag.sx": { + "background-position": "-48px -132px" + }, + ".flag.sy": { + "background-position": "-64px -132px" + }, + ".flag.sz": { + "background-position": "-80px -132px" + }, + ".flag.tc": { + "background-position": "-96px -132px" + }, + ".flag.td": { + "background-position": "-112px -132px" + }, + ".flag.tg": { + "background-position": "-128px -132px" + }, + ".flag.th": { + "background-position": "-144px -132px" + }, + ".flag.tj": { + "background-position": "-160px -132px" + }, + ".flag.tk": { + "background-position": "-176px -132px" + }, + ".flag.tl": { + "background-position": "-192px -132px" + }, + ".flag.tm": { + "background-position": "-208px -132px" + }, + ".flag.tn": { + "background-position": "-224px -132px" + }, + ".flag.to": { + "background-position": "-240px -132px" + }, + ".flag.tr": { + "background-position": "0 -143px" + }, + ".flag.tt": { + "background-position": "-16px -143px" + }, + ".flag.tv": { + "background-position": "-32px -143px" + }, + ".flag.tw": { + "background-position": "-48px -143px" + }, + ".flag.tz": { + "background-position": "-64px -143px" + }, + ".flag.ua": { + "background-position": "-80px -143px" + }, + ".flag.ug": { + "background-position": "-96px -143px" + }, + ".flag.us": { + "background-position": "-112px -143px" + }, + ".flag.uy": { + "background-position": "-128px -143px" + }, + ".flag.uz": { + "background-position": "-144px -143px" + }, + ".flag.va": { + "background-position": "-160px -143px" + }, + ".flag.vc": { + "background-position": "-176px -143px" + }, + ".flag.ve": { + "background-position": "-192px -143px" + }, + ".flag.vg": { + "background-position": "-208px -143px" + }, + ".flag.vi": { + "background-position": "-224px -143px" + }, + ".flag.vn": { + "background-position": "-240px -143px" + }, + ".flag.vu": { + "background-position": "0 -154px" + }, + ".flag.wf": { + "background-position": "-16px -154px" + }, + ".flag.ws": { + "background-position": "-32px -154px" + }, + ".flag.ye": { + "background-position": "-48px -154px" + }, + ".flag.za": { + "background-position": "-64px -154px" + }, + ".flag.zm": { + "background-position": "-80px -154px" + }, + ".flag.zw": { + "background-position": "-96px -154px" + } +} \ No newline at end of file diff --git a/src/styles.css b/src/styles.css deleted file mode 100644 index 3906406..0000000 --- a/src/styles.css +++ /dev/null @@ -1,954 +0,0 @@ -.ant-select-item .ant-phone-input-select-item { - display: flex; - column-gap: 10px; - align-items: center; -} - -.ant-phone-input-wrapper .ant-select-selector { - border: none !important; -} - -.ant-phone-input-wrapper .ant-select-selection-item { - padding: 0 !important; -} - -.ant-phone-input-wrapper .ant-input-group-addon * { - display: flex; - align-items: center; - justify-content: center; -} - -.flag { - width: 16px; - height: 11px; - background-image: url(data:image/png;base64,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); -} - -.flag.ad { - background-position: -16px 0; -} - -.flag.ae { - background-position: -32px 0; -} - -.flag.af { - background-position: -48px 0; -} - -.flag.ag { - background-position: -64px 0; -} - -.flag.ai { - background-position: -80px 0; -} - -.flag.al { - background-position: -96px 0; -} - -.flag.am { - background-position: -112px 0; -} - -.flag.ao { - background-position: -128px 0; -} - -.flag.ar { - background-position: -144px 0; -} - -.flag.as { - background-position: -160px 0; -} - -.flag.at { - background-position: -176px 0; -} - -.flag.au { - background-position: -192px 0; -} - -.flag.aw { - background-position: -208px 0; -} - -.flag.az { - background-position: -224px 0; -} - -.flag.ba { - background-position: -240px 0; -} - -.flag.bb { - background-position: 0 -11px; -} - -.flag.bd { - background-position: -16px -11px; -} - -.flag.be { - background-position: -32px -11px; -} - -.flag.bf { - background-position: -48px -11px; -} - -.flag.bg { - background-position: -64px -11px; -} - -.flag.bh { - background-position: -80px -11px; -} - -.flag.bi { - background-position: -96px -11px; -} - -.flag.bj { - background-position: -112px -11px; -} - -.flag.bm { - background-position: -128px -11px; -} - -.flag.bn { - background-position: -144px -11px; -} - -.flag.bo { - background-position: -160px -11px; -} - -.flag.br { - background-position: -176px -11px; -} - -.flag.bs { - background-position: -192px -11px; -} - -.flag.bt { - background-position: -208px -11px; -} - -.flag.bw { - background-position: -224px -11px; -} - -.flag.by { - background-position: -240px -11px; -} - -.flag.bz { - background-position: 0 -22px; -} - -.flag.ca { - background-position: -16px -22px; -} - -.flag.cd { - background-position: -32px -22px; -} - -.flag.cf { - background-position: -48px -22px; -} - -.flag.cg { - background-position: -64px -22px; -} - -.flag.ch { - background-position: -80px -22px; -} - -.flag.ci { - background-position: -96px -22px; -} - -.flag.ck { - background-position: -112px -22px; -} - -.flag.cl { - background-position: -128px -22px; -} - -.flag.cm { - background-position: -144px -22px; -} - -.flag.cn { - background-position: -160px -22px; -} - -.flag.co { - background-position: -176px -22px; -} - -.flag.cr { - background-position: -192px -22px; -} - -.flag.cu { - background-position: -208px -22px; -} - -.flag.cv { - background-position: -224px -22px; -} - -.flag.cw { - background-position: -240px -22px; -} - -.flag.cy { - background-position: 0 -33px; -} - -.flag.cz { - background-position: -16px -33px; -} - -.flag.de { - background-position: -32px -33px; -} - -.flag.dj { - background-position: -48px -33px; -} - -.flag.dk { - background-position: -64px -33px; -} - -.flag.dm { - background-position: -80px -33px; -} - -.flag.do { - background-position: -96px -33px; -} - -.flag.dz { - background-position: -112px -33px; -} - -.flag.ec { - background-position: -128px -33px; -} - -.flag.ee { - background-position: -144px -33px; -} - -.flag.eg { - background-position: -160px -33px; -} - -.flag.er { - background-position: -176px -33px; -} - -.flag.es { - background-position: -192px -33px; -} - -.flag.et { - background-position: -208px -33px; -} - -.flag.fi { - background-position: -224px -33px; -} - -.flag.fj { - background-position: -240px -33px; -} - -.flag.fk { - background-position: 0 -44px; -} - -.flag.fm { - background-position: -16px -44px; -} - -.flag.fo { - background-position: -32px -44px; -} - -.flag.fr { - background-position: -48px -44px; -} - -.flag.ga { - background-position: -64px -44px; -} - -.flag.gb { - background-position: -80px -44px; -} - -.flag.gd { - background-position: -96px -44px; -} - -.flag.ge { - background-position: -112px -44px; -} - -.flag.gf { - background-position: -128px -44px; -} - -.flag.gh { - background-position: -144px -44px; -} - -.flag.gi { - background-position: -160px -44px; -} - -.flag.gl { - background-position: -176px -44px; -} - -.flag.gm { - background-position: -192px -44px; -} - -.flag.gn { - background-position: -208px -44px; -} - -.flag.gp { - background-position: -224px -44px; -} - -.flag.gq { - background-position: -240px -44px; -} - -.flag.gr { - background-position: 0 -55px; -} - -.flag.gt { - background-position: -16px -55px; -} - -.flag.gu { - background-position: -32px -55px; -} - -.flag.gw { - background-position: -48px -55px; -} - -.flag.gy { - background-position: -64px -55px; -} - -.flag.hk { - background-position: -80px -55px; -} - -.flag.hn { - background-position: -96px -55px; -} - -.flag.hr { - background-position: -112px -55px; -} - -.flag.ht { - background-position: -128px -55px; -} - -.flag.hu { - background-position: -144px -55px; -} - -.flag.id { - background-position: -160px -55px; -} - -.flag.ie { - background-position: -176px -55px; -} - -.flag.il { - background-position: -192px -55px; -} - -.flag.in { - background-position: -208px -55px; -} - -.flag.io { - background-position: -224px -55px; -} - -.flag.iq { - background-position: -240px -55px; -} - -.flag.ir { - background-position: 0 -66px; -} - -.flag.is { - background-position: -16px -66px; -} - -.flag.it { - background-position: -32px -66px; -} - -.flag.je { - background-position: -144px -154px; -} - -.flag.jm { - background-position: -48px -66px; -} - -.flag.jo { - background-position: -64px -66px; -} - -.flag.jp { - background-position: -80px -66px; -} - -.flag.ke { - background-position: -96px -66px; -} - -.flag.kg { - background-position: -112px -66px; -} - -.flag.kh { - background-position: -128px -66px; -} - -.flag.ki { - background-position: -144px -66px; -} - -.flag.xk { - background-position: -128px -154px; -} - -.flag.km { - background-position: -160px -66px; -} - -.flag.kn { - background-position: -176px -66px; -} - -.flag.kp { - background-position: -192px -66px; -} - -.flag.kr { - background-position: -208px -66px; -} - -.flag.kw { - background-position: -224px -66px; -} - -.flag.ky { - background-position: -240px -66px; -} - -.flag.kz { - background-position: 0 -77px; -} - -.flag.la { - background-position: -16px -77px; -} - -.flag.lb { - background-position: -32px -77px; -} - -.flag.lc { - background-position: -48px -77px; -} - -.flag.li { - background-position: -64px -77px; -} - -.flag.lk { - background-position: -80px -77px; -} - -.flag.lr { - background-position: -96px -77px; -} - -.flag.ls { - background-position: -112px -77px; -} - -.flag.lt { - background-position: -128px -77px; -} - -.flag.lu { - background-position: -144px -77px; -} - -.flag.lv { - background-position: -160px -77px; -} - -.flag.ly { - background-position: -176px -77px; -} - -.flag.ma { - background-position: -192px -77px; -} - -.flag.mc { - background-position: -208px -77px; -} - -.flag.md { - background-position: -224px -77px; -} - -.flag.me { - background-position: -112px -154px; - height: 12px; -} - -.flag.mg { - background-position: 0 -88px; -} - -.flag.mh { - background-position: -16px -88px; -} - -.flag.mk { - background-position: -32px -88px; -} - -.flag.ml { - background-position: -48px -88px; -} - -.flag.mm { - background-position: -64px -88px; -} - -.flag.mn { - background-position: -80px -88px; -} - -.flag.mo { - background-position: -96px -88px; -} - -.flag.mp { - background-position: -112px -88px; -} - -.flag.mq { - background-position: -128px -88px; -} - -.flag.mr { - background-position: -144px -88px; -} - -.flag.ms { - background-position: -160px -88px; -} - -.flag.mt { - background-position: -176px -88px; -} - -.flag.mu { - background-position: -192px -88px; -} - -.flag.mv { - background-position: -208px -88px; -} - -.flag.mw { - background-position: -224px -88px; -} - -.flag.mx { - background-position: -240px -88px; -} - -.flag.my { - background-position: 0 -99px; -} - -.flag.mz { - background-position: -16px -99px; -} - -.flag.na { - background-position: -32px -99px; -} - -.flag.nc { - background-position: -48px -99px; -} - -.flag.ne { - background-position: -64px -99px; -} - -.flag.nf { - background-position: -80px -99px; -} - -.flag.ng { - background-position: -96px -99px; -} - -.flag.ni { - background-position: -112px -99px; -} - -.flag.nl, .flag.bq { - background-position: -128px -99px; -} - -.flag.no { - background-position: -144px -99px; -} - -.flag.np { - background-position: -160px -99px; -} - -.flag.nr { - background-position: -176px -99px; -} - -.flag.nu { - background-position: -192px -99px; -} - -.flag.nz { - background-position: -208px -99px; -} - -.flag.om { - background-position: -224px -99px; -} - -.flag.pa { - background-position: -240px -99px; -} - -.flag.pe { - background-position: 0 -110px; -} - -.flag.pf { - background-position: -16px -110px; -} - -.flag.pg { - background-position: -32px -110px; -} - -.flag.ph { - background-position: -48px -110px; -} - -.flag.pk { - background-position: -64px -110px; -} - -.flag.pl { - background-position: -80px -110px; -} - -.flag.pm { - background-position: -96px -110px; -} - -.flag.pr { - background-position: -112px -110px; -} - -.flag.ps { - background-position: -128px -110px; -} - -.flag.pt { - background-position: -144px -110px; -} - -.flag.pw { - background-position: -160px -110px; -} - -.flag.py { - background-position: -176px -110px; -} - -.flag.qa { - background-position: -192px -110px; -} - -.flag.re { - background-position: -208px -110px; -} - -.flag.ro { - background-position: -224px -110px; -} - -.flag.rs { - background-position: -240px -110px; -} - -.flag.ru { - background-position: 0 -121px; -} - -.flag.rw { - background-position: -16px -121px; -} - -.flag.sa { - background-position: -32px -121px; -} - -.flag.sb { - background-position: -48px -121px; -} - -.flag.sc { - background-position: -64px -121px; -} - -.flag.sd { - background-position: -80px -121px; -} - -.flag.se { - background-position: -96px -121px; -} - -.flag.sg { - background-position: -112px -121px; -} - -.flag.sh { - background-position: -128px -121px; -} - -.flag.si { - background-position: -144px -121px; -} - -.flag.sk { - background-position: -160px -121px; -} - -.flag.sl { - background-position: -176px -121px; -} - -.flag.sm { - background-position: -192px -121px; -} - -.flag.sn { - background-position: -208px -121px; -} - -.flag.so { - background-position: -224px -121px; -} - -.flag.sr { - background-position: -240px -121px; -} - -.flag.ss { - background-position: 0 -132px; -} - -.flag.st { - background-position: -16px -132px; -} - -.flag.sv { - background-position: -32px -132px; -} - -.flag.sx { - background-position: -48px -132px; -} - -.flag.sy { - background-position: -64px -132px; -} - -.flag.sz { - background-position: -80px -132px; -} - -.flag.tc { - background-position: -96px -132px; -} - -.flag.td { - background-position: -112px -132px; -} - -.flag.tg { - background-position: -128px -132px; -} - -.flag.th { - background-position: -144px -132px; -} - -.flag.tj { - background-position: -160px -132px; -} - -.flag.tk { - background-position: -176px -132px; -} - -.flag.tl { - background-position: -192px -132px; -} - -.flag.tm { - background-position: -208px -132px; -} - -.flag.tn { - background-position: -224px -132px; -} - -.flag.to { - background-position: -240px -132px; -} - -.flag.tr { - background-position: 0 -143px; -} - -.flag.tt { - background-position: -16px -143px; -} - -.flag.tv { - background-position: -32px -143px; -} - -.flag.tw { - background-position: -48px -143px; -} - -.flag.tz { - background-position: -64px -143px; -} - -.flag.ua { - background-position: -80px -143px; -} - -.flag.ug { - background-position: -96px -143px; -} - -.flag.us { - background-position: -112px -143px; -} - -.flag.uy { - background-position: -128px -143px; -} - -.flag.uz { - background-position: -144px -143px; -} - -.flag.va { - background-position: -160px -143px; -} - -.flag.vc { - background-position: -176px -143px; -} - -.flag.ve { - background-position: -192px -143px; -} - -.flag.vg { - background-position: -208px -143px; -} - -.flag.vi { - background-position: -224px -143px; -} - -.flag.vn { - background-position: -240px -143px; -} - -.flag.vu { - background-position: 0 -154px; -} - -.flag.wf { - background-position: -16px -154px; -} - -.flag.ws { - background-position: -32px -154px; -} - -.flag.ye { - background-position: -48px -154px; -} - -.flag.za { - background-position: -64px -154px; -} - -.flag.zm { - background-position: -80px -154px; -} - -.flag.zw { - background-position: -96px -154px; -} \ No newline at end of file From 1e40a57b665e9ddff620733b410db1ffe87f0c79 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Fri, 27 Oct 2023 14:12:58 +0400 Subject: [PATCH 27/69] GH-53: Load styles from JSON in simplified way Signed-off-by: Artyom Vancyan --- scripts/prepare-styles.ts | 13 +++++++------ scripts/tsconfig.json | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/prepare-styles.ts b/scripts/prepare-styles.ts index 4264a75..c6301cb 100644 --- a/scripts/prepare-styles.ts +++ b/scripts/prepare-styles.ts @@ -1,15 +1,16 @@ -import fs from "fs"; import util from "node:util"; import process from "node:child_process"; +import stylesheet from "../resources/stylesheet.json"; + const exec = (command: string) => util.promisify(process.exec)(command, {shell: "/bin/bash"}); (async () => { - let styles = fs.readFileSync("./src/styles.css", "utf8"); - styles = styles.replaceAll(/\/\*\*.*?\*\/[\n\s]*/gs, ""); - styles = styles.replaceAll(/\B[^{}]*?\{[\s\n]}/g, ""); - styles = styles.replaceAll(/\//g, "\\\/"); - styles = styles.replaceAll(/\n\s*/g, ""); + let styles = Object.entries(stylesheet).map(([selector, rules]) => { + return `${selector} {` + Object.entries(rules).map(([key, value]) => { + return `${key}: ${value}; `; + }).join("") + "} "; + }).join(""); await exec(`ls *.js | xargs -I {} sed -i 's/styles.css/${styles}/g' {}`); await exec("ls *.{j,t}s | xargs -I {} sed -i 's/antd\\/lib/antd\\/es/g' {}"); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 456455c..2d36bf2 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "noUnusedLocals": true, "noUnusedParameters": true, + "resolveJsonModule": true, "esModuleInterop": true, "lib": [ "esnext" From 45a24d602dd5c91ee34a8f40a9ef7726839b069d Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Fri, 27 Oct 2023 15:13:56 +0400 Subject: [PATCH 28/69] GH-53: Update the `exclude` list Signed-off-by: Artyom Vancyan --- tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 6f8899e..53fb28b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,9 +21,9 @@ }, "exclude": [ "node_modules", + "resources", "examples", "scripts", - "tests", - "dist" + "tests" ] } From 7aec1b3f5e4ebfccb0747a4131790120026fef22 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Fri, 27 Oct 2023 17:06:06 +0400 Subject: [PATCH 29/69] GH-53: Optimize functions with useCallback and fix stackoverflow issue occurring on reset Signed-off-by: Artyom Vancyan --- src/index.tsx | 49 +++++++++++++++++++++---------------------------- src/types.ts | 2 -- 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 81e9623..2df63b7 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -import {ChangeEvent, KeyboardEvent, useCallback, useEffect, useMemo, useState} from "react"; +import {ChangeEvent, KeyboardEvent, useCallback, useEffect, useMemo, useRef, useState} from "react"; import Select from "antd/lib/select"; import Input from "antd/lib/input"; @@ -69,7 +69,6 @@ const parsePhoneNumber = (formattedNumber: string): PhoneNumber => { const PhoneInput = ({ value: initialValue = "", country = getDefaultISO2Code(), - onBlur: handleBlur = () => null, onMount: handleMount = () => null, onInput: handleInput = () => null, onFocus: handleFocus = () => null, @@ -82,8 +81,8 @@ const PhoneInput = ({ const defaultDialCode = defaultMetadata?.[3]; const defaultPhoneMask = defaultMetadata?.[4]; - let back = false; - const [initiated, setInitiated] = useState(false); + const backRef = useRef(false); + const initiatedRef = useRef(false); const [value, setValue] = useState(defaultValue as string); const [minWidth, setMinWidth] = useState(0); const [pattern, setPattern] = useState(defaultPhoneMask || ""); @@ -106,45 +105,40 @@ const PhoneInput = ({ const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) - const format = ({target}: ChangeEvent) => { + const format = useCallback(({target}: ChangeEvent) => { const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { i = clean(target.value.slice(0, i)).findIndex(c => slots.has(c)); - return i < 0 ? prev[prev.length - 1] : back ? prev[i - 1] || first : i; + return i < 0 ? prev[prev.length - 1] : backRef.current ? prev[i - 1] || first : i; }); target.value = displayFormat(clean(target.value).join("")); target.setSelectionRange(i, j); + backRef.current = false; setValue(target.value); - back = false; - } - - const onChange = (event: ChangeEvent) => { - const phoneMetadata = parsePhoneNumber(displayFormat(clean(event.target.value).join(""))); - handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); - } + }, [clean, first, prev]) - const onKeyDown = (event: KeyboardEvent) => { - back = event.key === "Backspace"; + const onKeyDown = useCallback((event: KeyboardEvent) => { + backRef.current = event.key === "Backspace"; handleKeyDown(event); - } + }, [handleKeyDown]) - const onBlur = (event: ChangeEvent) => { - if (event.target.value === pattern) setValue(""); - handleBlur(event); - } + const onChange = useCallback((event: ChangeEvent) => { + const phoneMetadata = parsePhoneNumber(displayFormat(clean(event.target.value).join(""))); + handleChange({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}, event); + }, [clean, handleChange]) - const onInput = (event: ChangeEvent) => { + const onInput = useCallback((event: ChangeEvent) => { handleInput(event); format(event); - } + }, [format, handleInput]) - const onFocus = (event: ChangeEvent) => { + const onFocus = useCallback((event: ChangeEvent) => { handleFocus(event); format(event); - } + }, [format, handleFocus]) useEffect(() => { - if (initiated) return; - setInitiated(true); + if (initiatedRef.current) return; + initiatedRef.current = true; const formattedNumber = displayFormat(clean(value).join("")); const phoneMetadata = parsePhoneNumber(formattedNumber); handleMount({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}); @@ -153,7 +147,7 @@ const PhoneInput = ({ valid: () => checkValidity(phoneMetadata) }, {} as ChangeEvent); setValue(formattedNumber); - }, [clean, handleChange, handleMount, initiated, value]) + }, [clean, handleChange, handleMount, value]) const countriesSelect = useMemo(() => ( { setValue(displayFormat(cleanInput(mask, mask).join(""))); setPattern(mask); }} optionLabelProp="label" dropdownStyle={{minWidth}} + notFoundContent={searchNotFound} + dropdownRender={(menu) => ( +
+ {enableSearch && ( + setQuery(target.value)} + /> + )} + {menu} +
+ )} > - {countries.map(([iso, name, _, dial, mask]) => ( + {filterCountries(query).map(([iso, name, _, dial, mask]) => ( ))} - ), [selectValue, minWidth]) + ), [selectValue, minWidth, searchNotFound, query, enableSearch, searchPlaceholder]) return (
, - searchPlaceholder?: string, - searchNotFound?: string, - dropdownClass?: string, - enableSearch?: boolean, disableDropdown?: boolean, - country?: string, onlyCountries?: string[], excludeCountries?: string[], preferredCountries?: string[], @@ -30,8 +24,15 @@ export interface PhoneInputProps extends Omit */ value?: PhoneNumber | string; + country?: string; + enableSearch?: boolean; + + searchNotFound?: string; + + searchPlaceholder?: string; + onMount?(value: PhoneNumber): void; onFocus?(event: ChangeEvent): void; From 52fa3c1f8acc8f1bdc80fd323baf98ffdf7ad199 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sat, 28 Oct 2023 19:02:47 +0400 Subject: [PATCH 31/69] GH-53: Implement rest props Signed-off-by: Artyom Vancyan --- src/index.tsx | 34 ++++++++++++++++++++++++++-------- src/types.ts | 15 ++++++++------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 8489172..6e6a66b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -24,12 +24,6 @@ const getRawValue = (value: PhoneNumber | string) => { return [value?.countryCode, value?.areaCode, value?.phoneNumber].filter(Boolean).join(""); } -const filterCountries = (query: string) => { - return countries.filter(([_1, name, _2, dial]) => { - return name.toLowerCase().startsWith(query.toLowerCase()) || dial.includes(query); - }); -} - const displayFormat = (value: string) => { return value.replace(/[.\s\D]+$/, "").replace(/(\(\d+)$/, "$1)"); } @@ -76,6 +70,10 @@ const PhoneInput = ({ value: initialValue = "", country = getDefaultISO2Code(), enableSearch = false, + disableDropdown = false, + onlyCountries = [], + excludeCountries = [], + preferredCountries = [], searchNotFound = "No country found", searchPlaceholder = "Search country", onMount: handleMount = () => null, @@ -113,6 +111,25 @@ const PhoneInput = ({ return metadata ? metadata[0] + metadata[3] : defaultDialCode; }, [defaultDialCode, metadata]) + const countriesOnly = useMemo(() => { + const allowList = onlyCountries.length > 0 ? onlyCountries : countries.map(([iso]) => iso); + return countries.map(([iso]) => iso).filter((iso) => { + return allowList.includes(iso) && !excludeCountries.includes(iso); + }); + }, [onlyCountries, excludeCountries]) + + const countriesList = useMemo(() => { + const filteredCountries = countries.filter(([iso, name, _1, dial]) => { + return countriesOnly.includes(iso) && ( + name.toLowerCase().startsWith(query.toLowerCase()) || dial.includes(query) + ); + }); + return [ + ...filteredCountries.filter(([iso]) => preferredCountries.includes(iso)), + ...filteredCountries.filter(([iso]) => !preferredCountries.includes(iso)), + ]; + }, [countriesOnly, preferredCountries, query]) + const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) const format = useCallback(({target}: ChangeEvent) => { @@ -163,6 +180,7 @@ const PhoneInput = ({ - ), [selectValue, minWidth, searchNotFound, query, enableSearch, searchPlaceholder]) + ), [selectValue, disableDropdown, minWidth, searchNotFound, countriesList, enableSearch, searchPlaceholder]) return (
{ /** * NOTE: Interfaces of events may differ from the original interfaces @@ -33,6 +26,14 @@ export interface PhoneInputProps extends Omit searchPlaceholder?: string; + disableDropdown?: boolean; + + onlyCountries?: string[]; + + excludeCountries?: string[]; + + preferredCountries?: string[]; + onMount?(value: PhoneNumber): void; onFocus?(event: ChangeEvent): void; From bc2c5bc75ffe8c4d63f22d51ce51eb53b29e9601 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 29 Oct 2023 19:36:25 +0400 Subject: [PATCH 32/69] GH-53: Add a country entity for US with `1` dial code Signed-off-by: Artyom Vancyan --- src/metadata/countries.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/metadata/countries.json b/src/metadata/countries.json index 3898da9..9d9df5a 100644 --- a/src/metadata/countries.json +++ b/src/metadata/countries.json @@ -2218,6 +2218,13 @@ "44", "+44 (..) .... ...." ], + [ + "us", + "United States", + "1", + "1", + "+1 (...) ... ...." + ], [ "us", "United States", From 94d683b7b93fde6e3304c340b1d1ad82dd2f837e Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 29 Oct 2023 19:37:57 +0400 Subject: [PATCH 33/69] GH-53: Remove onFocus callback wrapper Signed-off-by: Artyom Vancyan --- src/index.tsx | 7 ------- src/types.ts | 8 +------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 6e6a66b..c074021 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -78,7 +78,6 @@ const PhoneInput = ({ searchPlaceholder = "Search country", onMount: handleMount = () => null, onInput: handleInput = () => null, - onFocus: handleFocus = () => null, onChange: handleChange = () => null, onKeyDown: handleKeyDown = () => null, ...antInputProps @@ -158,11 +157,6 @@ const PhoneInput = ({ format(event); }, [format, handleInput]) - const onFocus = useCallback((event: ChangeEvent) => { - handleFocus(event); - format(event); - }, [format, handleFocus]) - useEffect(() => { if (initiatedRef.current) return; initiatedRef.current = true; @@ -221,7 +215,6 @@ const PhoneInput = ({ inputMode="tel" value={value} onInput={onInput} - onFocus={onFocus} onChange={onChange} onKeyDown={onKeyDown} addonBefore={countriesSelect} diff --git a/src/types.ts b/src/types.ts index 1cee5aa..e2c460f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,11 +11,6 @@ export interface PhoneNumber { } export interface PhoneInputProps extends Omit { - /** - * NOTE: Interfaces of events may differ from the original interfaces - * of dependencies, so be careful and follow the linked documentation. - */ - value?: PhoneNumber | string; country?: string; @@ -36,11 +31,10 @@ export interface PhoneInputProps extends Omit onMount?(value: PhoneNumber): void; - onFocus?(event: ChangeEvent): void; - onInput?(event: ChangeEvent): void; onKeyDown?(event: KeyboardEvent): void; + /** NOTE: This differs from the antd Input onChange interface */ onChange?(value: PhoneNumber, event: ChangeEvent): void; } From 632ebda525b05015c04705f0668db7c1daaaaccf Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 29 Oct 2023 19:40:30 +0400 Subject: [PATCH 34/69] GH-53: Fix country auto-detection feature Signed-off-by: Artyom Vancyan --- src/index.tsx | 69 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index c074021..c152787 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -84,31 +84,13 @@ const PhoneInput = ({ }: PhoneInputProps) => { const defaultValue = getRawValue(initialValue); const defaultMetadata = getMetadata(defaultValue) || countries.find(([iso]) => iso === country); - const defaultDialCode = defaultMetadata?.[3]; - const defaultPhoneMask = defaultMetadata?.[4]; + const defaultValueState = defaultValue || countries.find(([iso]) => iso === defaultMetadata?.[0])?.[3] as string; - const backRef = useRef(false); - const initiatedRef = useRef(false); + const backRef = useRef(false); + const initiatedRef = useRef(false); const [query, setQuery] = useState(""); - const [value, setValue] = useState(defaultValue as string); - const [minWidth, setMinWidth] = useState(0); - const [pattern, setPattern] = useState(defaultPhoneMask || ""); - - const metadata = useMemo(() => { - return getMetadata(getRawValue(value)); - }, [value]) - - const first = useMemo(() => { - return [...pattern].findIndex(c => slots.has(c)); - }, [pattern]) - - const prev = useMemo(() => { - return (j => Array.from(pattern, (c, i) => slots.has(c) ? j = i + 1 : j))(0); - }, [pattern]) - - const selectValue = useMemo(() => { - return metadata ? metadata[0] + metadata[3] : defaultDialCode; - }, [defaultDialCode, metadata]) + const [value, setValue] = useState(defaultValueState); + const [minWidth, setMinWidth] = useState(0); const countriesOnly = useMemo(() => { const allowList = onlyCountries.length > 0 ? onlyCountries : countries.map(([iso]) => iso); @@ -129,7 +111,37 @@ const PhoneInput = ({ ]; }, [countriesOnly, preferredCountries, query]) - const clean = useCallback((input: any) => cleanInput(input, pattern), [pattern]) + const metadata = useMemo(() => { + const calculatedMetadata = getMetadata(getRawValue(value)) || defaultMetadata; + if (!countriesList.find(([iso]) => iso === calculatedMetadata?.[0])) { + return countriesList[0]; + } + return calculatedMetadata; + }, [countriesList, defaultMetadata, value]) + + const pattern = useMemo(() => { + return metadata?.[4] || defaultMetadata?.[4] || ""; + }, [defaultMetadata, metadata]) + + const clean = useCallback((input: any) => { + return cleanInput(input, pattern.replaceAll(/\d/g, ".")); + }, [pattern]) + + const first = useMemo(() => { + return [...pattern].findIndex(c => slots.has(c)); + }, [pattern]) + + const prev = useMemo((j = 0) => { + return Array.from(pattern.replaceAll(/\d/g, "."), (c, i) => { + return slots.has(c) ? j = i + 1 : j; + }); + }, [pattern]) + + const selectValue = useMemo(() => { + const isoCode = metadata?.[0] || defaultMetadata?.[0] as string; + const dialCode = metadata?.[3] || defaultMetadata?.[3] as string; + return isoCode + dialCode; + }, [defaultMetadata, metadata]) const format = useCallback(({target}: ChangeEvent) => { const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { @@ -160,7 +172,11 @@ const PhoneInput = ({ useEffect(() => { if (initiatedRef.current) return; initiatedRef.current = true; - const formattedNumber = displayFormat(clean(value).join("")); + let initialValue = getRawValue(value); + if (!initialValue.startsWith(metadata?.[3] as string)) { + initialValue = metadata?.[3] as string; + } + const formattedNumber = displayFormat(clean(initialValue).join("")); const phoneMetadata = parsePhoneNumber(formattedNumber); handleMount({...phoneMetadata, valid: () => checkValidity(phoneMetadata)}); handleChange({ @@ -168,7 +184,7 @@ const PhoneInput = ({ valid: () => checkValidity(phoneMetadata) }, {} as ChangeEvent); setValue(formattedNumber); - }, [clean, handleChange, handleMount, value]) + }, [clean, handleChange, handleMount, metadata, value]) const countriesSelect = useMemo(() => ( Date: Thu, 2 Nov 2023 21:56:17 +0400 Subject: [PATCH 45/69] GH-53: Fix country selection issue over sorted countries Signed-off-by: Artyom Vancyan --- src/index.tsx | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index bfaf29f..839af36 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -13,8 +13,8 @@ styleInject("styles.css"); const slots = new Set("."); -const getMetadata = (rawValue: string, countriesList: typeof countries = countries) => { - return countriesList.find((country) => rawValue.startsWith(country[3])); +const getMetadata = (rawValue: string, countriesList: typeof countries = countries, country: any = null) => { + return countriesList.find((c) => rawValue.startsWith(c[3]) && (country == null || country === c[0])); } const getRawValue = (value: PhoneNumber | string) => { @@ -44,9 +44,9 @@ const getDefaultISO2Code = () => { return (timezones[Intl.DateTimeFormat().resolvedOptions().timeZone as keyof typeof timezones] || "") || "us"; } -const parsePhoneNumber = (formattedNumber: string, countriesList: typeof countries = countries): PhoneNumber => { +const parsePhoneNumber = (formattedNumber: string, countriesList: typeof countries = countries, country: any = null): PhoneNumber => { const value = getRawValue(formattedNumber); - const isoCode = getMetadata(value, countriesList)?.[0]; + const isoCode = getMetadata(value, countriesList, country)?.[0]; const countryCodePattern = /\+\d+/; const areaCodePattern = /\((\d+)\)/; @@ -91,6 +91,7 @@ const PhoneInput = ({ const [query, setQuery] = useState(""); const [value, setValue] = useState(defaultValueState); const [minWidth, setMinWidth] = useState(0); + const [countryCode, setCountryCode] = useState(country); const countriesOnly = useMemo(() => { const allowList = onlyCountries.length > 0 ? onlyCountries : countries.map(([iso]) => iso); @@ -112,12 +113,12 @@ const PhoneInput = ({ }, [countriesOnly, preferredCountries, query]) const metadata = useMemo(() => { - const calculatedMetadata = getMetadata(getRawValue(value), countriesList) || defaultMetadata; - if (!countriesList.find(([iso]) => iso === calculatedMetadata?.[0])) { + const calculatedMetadata = getMetadata(getRawValue(value), countriesList, countryCode); + if (!countriesList.find(([iso]) => iso === calculatedMetadata?.[0] || iso === defaultMetadata?.[0])) { return countriesList[0]; } - return calculatedMetadata; - }, [countriesList, defaultMetadata, value]) + return calculatedMetadata || defaultMetadata; + }, [countriesList, countryCode, defaultMetadata, value]) const pattern = useMemo(() => { return metadata?.[4] || defaultMetadata?.[4] || ""; @@ -160,9 +161,10 @@ const PhoneInput = ({ }, [handleKeyDown]) const onChange = useCallback((event: ChangeEvent) => { - const phoneMetadata = parsePhoneNumber(displayFormat(clean(event.target.value).join("")), countriesList); + const formattedNumber = displayFormat(clean(event.target.value).join("")); + const phoneMetadata = parsePhoneNumber(formattedNumber, countriesList, countryCode); handleChange({...phoneMetadata, valid: (strict: boolean) => checkValidity(phoneMetadata, strict)}, event); - }, [clean, countriesList, handleChange]) + }, [clean, countriesList, countryCode, handleChange]) const onInput = useCallback((event: ChangeEvent) => { handleInput(event); @@ -191,8 +193,9 @@ const PhoneInput = ({ suffixIcon={null} value={selectValue} open={disableDropdown ? false : undefined} - onSelect={(_, {key: mask}) => { + onSelect={(selectedOption, {key: mask}) => { setValue(displayFormat(cleanInput(mask, mask).join(""))); + setCountryCode(selectedOption.slice(0, 2)); }} optionLabelProp="label" dropdownStyle={{minWidth}} From 3734f27f920d5d9b269e42ffa4765fb0e6cb32d9 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Fri, 3 Nov 2023 19:47:54 +0400 Subject: [PATCH 46/69] GH-53: Implement the validation handling Signed-off-by: Artyom Vancyan --- src/index.tsx | 49 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 839af36..aec1257 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,6 @@ -import {ChangeEvent, KeyboardEvent, useCallback, useEffect, useMemo, useRef, useState} from "react"; +import {ChangeEvent, KeyboardEvent, useCallback, useContext, useEffect, useMemo, useRef, useState} from "react"; +import useFormInstance from "antd/lib/form/hooks/useFormInstance"; +import {FormContext} from "antd/lib/form/context"; import Select from "antd/lib/select"; import Input from "antd/lib/input"; @@ -14,13 +16,16 @@ styleInject("styles.css"); const slots = new Set("."); const getMetadata = (rawValue: string, countriesList: typeof countries = countries, country: any = null) => { - return countriesList.find((c) => rawValue.startsWith(c[3]) && (country == null || country === c[0])); + country = country == null && rawValue.startsWith("44") ? "gb" : country; + if (country != null) { + countriesList = countriesList.filter((c) => c[0] === country); + countriesList = countriesList.sort((a, b) => b[3].length - a[3].length); + } + return countriesList.find((c) => rawValue.startsWith(c[3])); } const getRawValue = (value: PhoneNumber | string) => { - if (typeof value === "string") { - return value.replaceAll(/\D/g, ""); - } + if (typeof value === "string") return value.replaceAll(/\D/g, ""); return [value?.countryCode, value?.areaCode, value?.phoneNumber].filter(Boolean).join(""); } @@ -86,6 +91,8 @@ const PhoneInput = ({ const defaultMetadata = getMetadata(defaultValue) || countries.find(([iso]) => iso === country); const defaultValueState = defaultValue || countries.find(([iso]) => iso === defaultMetadata?.[0])?.[3] as string; + const formInstance = useFormInstance(); + const formContext = useContext(FormContext); const backRef = useRef(false); const initiatedRef = useRef(false); const [query, setQuery] = useState(""); @@ -144,6 +151,19 @@ const PhoneInput = ({ return isoCode + dialCode; }, [defaultMetadata, metadata]) + const setFieldValue = useCallback((value: PhoneNumber) => { + if (formInstance) { + let namePath = []; + let formName = (formContext as any)?.name || ""; + let fieldName = (antInputProps as any)?.id || ""; + if (formName) { + namePath.push(formName); + fieldName = fieldName.slice(formName.length + 1); + } + formInstance.setFieldValue(namePath.concat(fieldName.split("_")), value); + } + }, [antInputProps, formContext, formInstance]) + const format = useCallback(({target}: ChangeEvent) => { const [i, j] = [target.selectionStart, target.selectionEnd].map((i: any) => { i = clean(target.value.slice(0, i)).findIndex(c => slots.has(c)); @@ -180,13 +200,11 @@ const PhoneInput = ({ } const formattedNumber = displayFormat(clean(initialValue).join("")); const phoneMetadata = parsePhoneNumber(formattedNumber, countriesList); + setFieldValue({...phoneMetadata, valid: (strict: boolean) => checkValidity(phoneMetadata, strict)}); handleMount({...phoneMetadata, valid: (strict: boolean) => checkValidity(phoneMetadata, strict)}); - handleChange({ - ...phoneMetadata, - valid: (strict: boolean) => checkValidity(phoneMetadata, strict) - }, {} as ChangeEvent); + setCountryCode(phoneMetadata.isoCode as keyof typeof validations); setValue(formattedNumber); - }, [clean, countriesList, handleChange, handleMount, metadata, value]) + }, [clean, countriesList, handleMount, metadata, setFieldValue, value]) const countriesSelect = useMemo(() => ( - ), [selectValue, disableDropdown, minWidth, searchNotFound, countriesList, enableSearch, searchPlaceholder]) + ), [selectValue, disableDropdown, minWidth, searchNotFound, countriesList, setFieldValue, enableSearch, searchPlaceholder]) return (
Date: Sat, 4 Nov 2023 20:21:28 +0400 Subject: [PATCH 47/69] GH-53: Upgrade dev dependencies Signed-off-by: Artyom Vancyan --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5d4cff2..45837c1 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,8 @@ "devDependencies": { "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.5.1", - "@types/jest": "^29.5.5", - "@types/react": "^18.2.21", + "@types/jest": "^29.5.7", + "@types/react": "^18.2.34", "antd": "npm:antd@5.2.0", "antd4": "npm:antd@^4.24.8", "identity-obj-proxy": "^3.0.0", From be5debc31115dab5e8ec6783a3284e5956644633 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sat, 4 Nov 2023 20:26:31 +0400 Subject: [PATCH 48/69] GH-53: Refactor tests - fix validation checks Signed-off-by: Artyom Vancyan --- tests/common.tsx | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/tests/common.tsx b/tests/common.tsx index fcf67ee..cd98bad 100644 --- a/tests/common.tsx +++ b/tests/common.tsx @@ -18,6 +18,11 @@ Object.defineProperty(window, "matchMedia", { })), }) +function inputHasError(parent: any = document) { + const inputGroup = parent.querySelector(".ant-input-group-wrapper"); + return inputGroup.className.includes("ant-input-group-wrapper-status-error"); +} + export default function commonTests(Form: any, FormItem: any, Button: any) { console.warn = jest.fn(); @@ -126,33 +131,31 @@ export default function commonTests(Form: any, FormItem: any, Button: any) { ); const form = screen.getByTestId("form"); - const input = screen.getByDisplayValue("+1 (702)"); - const submit = screen.getByTestId("submit"); const reset = screen.getByTestId("reset"); + const submit = screen.getByTestId("submit"); + assert(!inputHasError(form)); // valid await userEvent.click(reset); - assert(form.querySelector(".ant-form-item-has-success") !== null); // valid - await userEvent.type(input, "a"); + assert(!inputHasError(form)); // valid await userEvent.click(submit); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-error") !== null); // invalid + assert(inputHasError(form)); // invalid await userEvent.click(reset); - assert(form.querySelector(".ant-form-item-has-success") !== null); // valid + assert(!inputHasError(form)); // valid await userEvent.click(reset); - assert(form.querySelector(".ant-form-item-has-success") !== null); // valid - await userEvent.type(input, "a"); + assert(!inputHasError(form)); // valid await userEvent.click(submit); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-error") !== null); // invalid + assert(inputHasError(form)); // invalid await userEvent.click(submit); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-error") !== null); // invalid + assert(inputHasError(form)); // invalid }) it("Checking validation with casual inputs and actions", async () => { @@ -170,35 +173,34 @@ export default function commonTests(Form: any, FormItem: any, Button: any) { ); const form = screen.getByTestId("form"); - const input = screen.getByDisplayValue("+1"); - const submit = screen.getByTestId("submit"); const reset = screen.getByTestId("reset"); + const submit = screen.getByTestId("submit"); + const input = screen.getByDisplayValue("+1"); await userEvent.type(input, "90712345"); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-error") !== null); // invalid + assert(inputHasError(form)); // invalid await userEvent.type(input, "6"); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-error") !== null); // invalid + assert(inputHasError(form)); // invalid await userEvent.type(input, "7"); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-success") !== null); // valid + assert(!inputHasError(form)); // valid await userEvent.click(reset); - assert(form.querySelector(".ant-form-item-has-success") !== null); // valid - await userEvent.type(input, "a"); + assert(!inputHasError(form)); // valid await userEvent.click(submit); await act(async () => { await new Promise(r => setTimeout(r, 100)); }) - assert(form.querySelector(".ant-form-item-has-error") !== null); // invalid + assert(inputHasError(form)); // invalid await userEvent.click(reset); - assert(form.querySelector(".ant-form-item-has-success") !== null); // valid + assert(!inputHasError(form)); // valid }) }) } \ No newline at end of file From fdaa533ebf32d21ea9abe221b47b46b2ddecd4bc Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 14:49:43 +0400 Subject: [PATCH 49/69] GH-53: Remove specific antd versions Signed-off-by: Artyom Vancyan --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 45837c1..5f8afeb 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,7 @@ "@testing-library/user-event": "^14.5.1", "@types/jest": "^29.5.7", "@types/react": "^18.2.34", - "antd": "npm:antd@5.2.0", - "antd4": "npm:antd@^4.24.8", + "antd": "*", "identity-obj-proxy": "^3.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", From cd8141688ba8ea482a94d6a797715abcf9bb769e Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 14:55:02 +0400 Subject: [PATCH 50/69] GH-53: Remove version specific initiations and merge tests Signed-off-by: Artyom Vancyan --- tests/antd.test.tsx | 202 ++++++++++++++++++++++++++++++++++++++++++ tests/antd4.test.tsx | 7 -- tests/antd5.test.tsx | 7 -- tests/common.tsx | 206 ------------------------------------------- 4 files changed, 202 insertions(+), 220 deletions(-) create mode 100644 tests/antd.test.tsx delete mode 100644 tests/antd4.test.tsx delete mode 100644 tests/antd5.test.tsx delete mode 100644 tests/common.tsx diff --git a/tests/antd.test.tsx b/tests/antd.test.tsx new file mode 100644 index 0000000..a7df357 --- /dev/null +++ b/tests/antd.test.tsx @@ -0,0 +1,202 @@ +import assert from "assert"; +import Form from "antd/lib/form"; +import Button from "antd/lib/button"; +import FormItem from "antd/lib/form/FormItem"; +import userEvent from "@testing-library/user-event"; +import {act, render, screen} from "@testing-library/react"; + +import PhoneInput from "../src"; + +Object.defineProperty(console, "warn", { + value: jest.fn(), +}) + +Object.defineProperty(window, "matchMedia", { + value: jest.fn().mockImplementation((): any => ({ + addListener: jest.fn(), + removeListener: jest.fn(), + })), +}) + +function inputHasError(parent: any = document) { + const inputGroup = parent.querySelector(".ant-input-group-wrapper"); + return inputGroup.className.includes("ant-input-group-wrapper-status-error"); +} + +describe("Checking the basic rendering and functionality", () => { + it("Rendering without crashing", () => { + render(); + }) + + it("Rendering with strict raw value", () => { + render(); + assert(screen.getByDisplayValue("+1 (702) 123 4567")); + }) + + it("Rendering with an initial value", () => { + render( { + assert(value.countryCode === 1); + assert(value.areaCode === 702); + assert(value.phoneNumber === "1234567"); + assert(value.isoCode === "us"); + assert(value.valid()); + }} + value={{countryCode: 1, areaCode: 702, phoneNumber: "1234567"}} + />); + assert(screen.getByDisplayValue("+1 (702) 123 4567")); + }) + + it("Rendering with a raw initial value", () => { + render(
+ + + +
); + assert(screen.getByDisplayValue("+1 (702) 123 4567")); + }) + + it("Checking the component on user input", async () => { + render( { + assert(value.isoCode === "us"); + }} + country="us" + />); + const input = screen.getByDisplayValue("+1"); + await userEvent.type(input, "907123456789"); + assert(input.getAttribute("value") === "+1 (907) 123 4567"); + }) + + it("Using the input with FormItem", async () => { + render(
{ + assert(phone.countryCode === 1); + assert(phone.areaCode === 907); + assert(phone.phoneNumber === "1234567"); + assert(phone.isoCode === "us"); + }}> + + + + +
); + const input = screen.getByDisplayValue("+1"); + await userEvent.type(input, "907123456789"); + assert(input.getAttribute("value") === "+1 (907) 123 4567"); + screen.getByTestId("button").click(); + }) + + it("Checking input validation with FormItem", async () => { + render(
+ { + assert(valid()); + return Promise.resolve(); + } + }]}> + + + +
); + await userEvent.click(screen.getByTestId("button")); + }) + + it("Checking form with initial value", async () => { + render(
+ + + + +
); + const input = screen.getByDisplayValue("+1 (702)"); + await userEvent.type(input, "1234567"); + assert(input.getAttribute("value") === "+1 (702) 123 4567"); + }) + + it("Checking validation with casual form actions", async () => { + render(
+ { + if (valid()) return Promise.resolve(); + return Promise.reject("Invalid phone number"); + } + }]}> + + + + +
); + + const form = screen.getByTestId("form"); + const reset = screen.getByTestId("reset"); + const submit = screen.getByTestId("submit"); + + assert(!inputHasError(form)); // valid + await userEvent.click(reset); + assert(!inputHasError(form)); // valid + await userEvent.click(submit); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(inputHasError(form)); // invalid + await userEvent.click(reset); + assert(!inputHasError(form)); // valid + await userEvent.click(reset); + assert(!inputHasError(form)); // valid + await userEvent.click(submit); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(inputHasError(form)); // invalid + await userEvent.click(submit); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(inputHasError(form)); // invalid + }) + + it("Checking validation with casual inputs and actions", async () => { + render(
+ { + if (valid()) return Promise.resolve(); + return Promise.reject("Invalid phone number"); + } + }]}> + + + + +
); + + const form = screen.getByTestId("form"); + const reset = screen.getByTestId("reset"); + const submit = screen.getByTestId("submit"); + const input = screen.getByDisplayValue("+1"); + + await userEvent.type(input, "90712345"); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(inputHasError(form)); // invalid + await userEvent.type(input, "6"); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(inputHasError(form)); // invalid + await userEvent.type(input, "7"); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(!inputHasError(form)); // valid + await userEvent.click(reset); + assert(!inputHasError(form)); // valid + await userEvent.click(submit); + await act(async () => { + await new Promise(r => setTimeout(r, 100)); + }) + assert(inputHasError(form)); // invalid + await userEvent.click(reset); + assert(!inputHasError(form)); // valid + }) +}) diff --git a/tests/antd4.test.tsx b/tests/antd4.test.tsx deleted file mode 100644 index f1400f8..0000000 --- a/tests/antd4.test.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Form from "antd4/lib/form"; -import Button from "antd4/lib/button"; -import FormItem from "antd4/lib/form/FormItem"; - -import commonTests from "./common"; - -commonTests(Form, FormItem, Button); diff --git a/tests/antd5.test.tsx b/tests/antd5.test.tsx deleted file mode 100644 index ba569c2..0000000 --- a/tests/antd5.test.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Form from "antd/lib/form"; -import Button from "antd/lib/button"; -import FormItem from "antd/lib/form/FormItem"; - -import commonTests from "./common"; - -commonTests(Form, FormItem, Button); diff --git a/tests/common.tsx b/tests/common.tsx deleted file mode 100644 index cd98bad..0000000 --- a/tests/common.tsx +++ /dev/null @@ -1,206 +0,0 @@ -import assert from "assert"; -import userEvent from "@testing-library/user-event"; -import {act, render, screen} from "@testing-library/react"; - -import PhoneInput from "../src"; - -Object.defineProperty(window, "matchMedia", { - writable: true, - value: jest.fn().mockImplementation(query => ({ - matches: false, - media: query, - onchange: null, - addListener: jest.fn(), - removeListener: jest.fn(), - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - dispatchEvent: jest.fn(), - })), -}) - -function inputHasError(parent: any = document) { - const inputGroup = parent.querySelector(".ant-input-group-wrapper"); - return inputGroup.className.includes("ant-input-group-wrapper-status-error"); -} - -export default function commonTests(Form: any, FormItem: any, Button: any) { - console.warn = jest.fn(); - - describe("Checking the basic rendering and functionality", () => { - it("Rendering without crashing", () => { - render(); - }) - - it("Rendering with strict raw value", () => { - render(); - assert(screen.getByDisplayValue("+1 (702) 123 4567")); - }) - - it("Rendering with an initial value", () => { - render( { - assert(value.countryCode === 1); - assert(value.areaCode === 702); - assert(value.phoneNumber === "1234567"); - assert(value.isoCode === "us"); - assert(value.valid()); - }} - value={{countryCode: 1, areaCode: 702, phoneNumber: "1234567"}} - />); - assert(screen.getByDisplayValue("+1 (702) 123 4567")); - }) - - it("Rendering with a raw initial value", () => { - render(
- - - -
); - assert(screen.getByDisplayValue("+1 (702) 123 4567")); - }) - - it("Checking the component on user input", async () => { - render( { - assert(value.isoCode === "us"); - }} - country="us" - />); - const input = screen.getByDisplayValue("+1"); - await userEvent.type(input, "907123456789"); - assert(input.getAttribute("value") === "+1 (907) 123 4567"); - }) - - it("Using the input with FormItem", async () => { - render(
{ - assert(phone.countryCode === 1); - assert(phone.areaCode === 907); - assert(phone.phoneNumber === "1234567"); - assert(phone.isoCode === "us"); - }}> - - - - -
); - const input = screen.getByDisplayValue("+1"); - await userEvent.type(input, "907123456789"); - assert(input.getAttribute("value") === "+1 (907) 123 4567"); - screen.getByTestId("button").click(); - }) - - it("Checking input validation with FormItem", async () => { - render(
- { - assert(valid()); - return Promise.resolve(); - } - }]}> - - - -
); - await userEvent.click(screen.getByTestId("button")); - }) - - it("Checking form with initial value", async () => { - render(
- - - - -
); - const input = screen.getByDisplayValue("+1 (702)"); - await userEvent.type(input, "1234567"); - assert(input.getAttribute("value") === "+1 (702) 123 4567"); - }) - - it("Checking validation with casual form actions", async () => { - render(
- { - if (valid()) return Promise.resolve(); - return Promise.reject("Invalid phone number"); - } - }]}> - - - - -
); - - const form = screen.getByTestId("form"); - const reset = screen.getByTestId("reset"); - const submit = screen.getByTestId("submit"); - - assert(!inputHasError(form)); // valid - await userEvent.click(reset); - assert(!inputHasError(form)); // valid - await userEvent.click(submit); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(inputHasError(form)); // invalid - await userEvent.click(reset); - assert(!inputHasError(form)); // valid - await userEvent.click(reset); - assert(!inputHasError(form)); // valid - await userEvent.click(submit); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(inputHasError(form)); // invalid - await userEvent.click(submit); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(inputHasError(form)); // invalid - }) - - it("Checking validation with casual inputs and actions", async () => { - render(
- { - if (valid()) return Promise.resolve(); - return Promise.reject("Invalid phone number"); - } - }]}> - - - - -
); - - const form = screen.getByTestId("form"); - const reset = screen.getByTestId("reset"); - const submit = screen.getByTestId("submit"); - const input = screen.getByDisplayValue("+1"); - - await userEvent.type(input, "90712345"); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(inputHasError(form)); // invalid - await userEvent.type(input, "6"); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(inputHasError(form)); // invalid - await userEvent.type(input, "7"); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(!inputHasError(form)); // valid - await userEvent.click(reset); - assert(!inputHasError(form)); // valid - await userEvent.click(submit); - await act(async () => { - await new Promise(r => setTimeout(r, 100)); - }) - assert(inputHasError(form)); // invalid - await userEvent.click(reset); - assert(!inputHasError(form)); // valid - }) - }) -} \ No newline at end of file From c4a87f4ca3292d89c7c233b47889a638ea3164d5 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 14:57:31 +0400 Subject: [PATCH 51/69] GH-53: Declare new environments and include missing versions Signed-off-by: Artyom Vancyan --- tox.ini | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/tox.ini b/tox.ini index 6fe3488..fae682b 100644 --- a/tox.ini +++ b/tox.ini @@ -1,15 +1,38 @@ [tox] envlist = + antd_v424_jest antd_v424 + antd_v500_jest + antd_v500 + antd_v510_jest antd_v510 + antd_v520_jest antd_v520 + antd_v530_jest antd_v530 + antd_v540_jest antd_v540 + antd_v550_jest antd_v550 + antd_v560_jest antd_v560 + antd_v570_jest antd_v570 + antd_v580_jest antd_v580 + antd_v590_jest antd_v590 + antd_v5100_jest + antd_v5100 + antd_v5110_jest + antd_v5110 + +[testenv:antd_v424_jest] +allowlist_externals = npm +commands = + npm install + npm install -D antd@4.24.14 + npm test [testenv:antd_v424] changedir = examples/antd4.x @@ -18,6 +41,30 @@ commands = npm install --legacy-peer-deps npm run build +[testenv:antd_v500_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.0.0 + npm test + +[testenv:antd_v500] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install antd@5.0.0 + npm run build + +[testenv:antd_v510_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.1.0 + npm test + [testenv:antd_v510] changedir = examples/antd5.x allowlist_externals = npm @@ -26,6 +73,14 @@ commands = npm install antd@5.1.0 npm run build +[testenv:antd_v520_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.2.0 + npm test + [testenv:antd_v520] changedir = examples/antd5.x allowlist_externals = npm @@ -34,6 +89,14 @@ commands = npm install antd@5.2.0 npm run build +[testenv:antd_v530_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.3.0 + npm test + [testenv:antd_v530] changedir = examples/antd5.x allowlist_externals = npm @@ -42,6 +105,14 @@ commands = npm install antd@5.3.0 npm run build +[testenv:antd_v540_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.4.0 + npm test + [testenv:antd_v540] changedir = examples/antd5.x allowlist_externals = npm @@ -50,6 +121,14 @@ commands = npm install antd@5.4.0 npm run build +[testenv:antd_v550_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.5.0 + npm test + [testenv:antd_v550] changedir = examples/antd5.x allowlist_externals = npm @@ -58,6 +137,14 @@ commands = npm install antd@5.5.0 npm run build +[testenv:antd_v560_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.6.0 + npm test + [testenv:antd_v560] changedir = examples/antd5.x allowlist_externals = npm @@ -66,6 +153,14 @@ commands = npm install antd@5.6.0 npm run build +[testenv:antd_v570_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.7.0 + npm test + [testenv:antd_v570] changedir = examples/antd5.x allowlist_externals = npm @@ -74,6 +169,14 @@ commands = npm install antd@5.7.0 npm run build +[testenv:antd_v580_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.8.0 + npm test + [testenv:antd_v580] changedir = examples/antd5.x allowlist_externals = npm @@ -82,6 +185,14 @@ commands = npm install antd@5.8.0 npm run build +[testenv:antd_v590_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.9.0 + npm test + [testenv:antd_v590] changedir = examples/antd5.x allowlist_externals = npm @@ -89,3 +200,35 @@ commands = npm install npm install antd@5.9.0 npm run build + +[testenv:antd_v5100_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.10.0 + npm test + +[testenv:antd_v5100] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install antd@5.10.0 + npm run build + +[testenv:antd_v5110_jest] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install -D antd@5.11.0 + npm test + +[testenv:antd_v5110] +changedir = examples/antd5.x +allowlist_externals = npm +commands = + npm install + npm install antd@5.11.0 + npm run build From 5c5ead8cc39d777aaceee02ea92a782f7b0935fe Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 14:59:39 +0400 Subject: [PATCH 52/69] GH-53: Change the testing strategy Signed-off-by: Artyom Vancyan --- .github/workflows/tests.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6997ab8..d347a5a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,6 +14,7 @@ jobs: strategy: matrix: node-version: [ 16.x, 18.x, 20.x ] + antd-version: [ 424, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 5100, 5110 ] steps: - name: Checkout @@ -28,8 +29,8 @@ jobs: - name: Install dependencies run: npm install - - name: Run tests - run: npm test + - name: Run Tox Jest + run: tox -e antd_v${{ matrix.antd-version }}_jest build: @@ -37,7 +38,7 @@ jobs: strategy: matrix: - env: [ antd_v424, antd_v510, antd_v520, antd_v530, antd_v540, antd_v550, antd_v560, antd_v570, antd_v580, antd_v590 ] + antd-version: [ 424, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 5100, 5110 ] steps: - name: Checkout @@ -64,4 +65,4 @@ jobs: npm pack - name: Run Tox - run: tox -e ${{ matrix.env }} + run: tox -e antd_v${{ matrix.antd-version }} From 9b8735551961aadc84fe9bb831f0218868ff0423 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 16:22:56 +0400 Subject: [PATCH 53/69] GH-53: Use project directory for `*_jest` environments Signed-off-by: Artyom Vancyan --- tox.ini | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/tox.ini b/tox.ini index fae682b..2da482f 100644 --- a/tox.ini +++ b/tox.ini @@ -42,7 +42,6 @@ commands = npm run build [testenv:antd_v500_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -58,7 +57,6 @@ commands = npm run build [testenv:antd_v510_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -74,7 +72,6 @@ commands = npm run build [testenv:antd_v520_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -90,7 +87,6 @@ commands = npm run build [testenv:antd_v530_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -106,7 +102,6 @@ commands = npm run build [testenv:antd_v540_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -122,7 +117,6 @@ commands = npm run build [testenv:antd_v550_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -138,7 +132,6 @@ commands = npm run build [testenv:antd_v560_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -154,7 +147,6 @@ commands = npm run build [testenv:antd_v570_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -170,7 +162,6 @@ commands = npm run build [testenv:antd_v580_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -186,7 +177,6 @@ commands = npm run build [testenv:antd_v590_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -202,7 +192,6 @@ commands = npm run build [testenv:antd_v5100_jest] -changedir = examples/antd5.x allowlist_externals = npm commands = npm install @@ -218,8 +207,6 @@ commands = npm run build [testenv:antd_v5110_jest] -changedir = examples/antd5.x -allowlist_externals = npm commands = npm install npm install -D antd@5.11.0 From b0bfa3cab7185d46565ce11ce46d3d8a331d608b Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 16:25:41 +0400 Subject: [PATCH 54/69] GH-53: Add steps for Tox installation Signed-off-by: Artyom Vancyan --- .github/workflows/tests.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d347a5a..b55c4e7 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,6 +20,14 @@ jobs: - name: Checkout uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v2 + + - name: Install Tox + run: | + pip install --upgrade pip + pip install tox tox-gh-actions + - name: Set up Node uses: actions/setup-node@v3 with: From d71ca956da284874a8f938ae3929a49028bf58df Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 16:28:47 +0400 Subject: [PATCH 55/69] GH-53: Fix "npm is not allowed" error Signed-off-by: Artyom Vancyan --- tox.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/tox.ini b/tox.ini index 2da482f..314cc01 100644 --- a/tox.ini +++ b/tox.ini @@ -207,6 +207,7 @@ commands = npm run build [testenv:antd_v5110_jest] +allowlist_externals = npm commands = npm install npm install -D antd@5.11.0 From f45e2fe681e634ae9ad59f70b3b7981fbfc94395 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Sun, 5 Nov 2023 16:48:35 +0400 Subject: [PATCH 56/69] GH-53: Replace buggy version with the next batch Signed-off-by: Artyom Vancyan --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index 314cc01..8ff844a 100644 --- a/tox.ini +++ b/tox.ini @@ -45,7 +45,7 @@ commands = allowlist_externals = npm commands = npm install - npm install -D antd@5.0.0 + npm install -D antd@5.0.1 npm test [testenv:antd_v500] @@ -53,7 +53,7 @@ changedir = examples/antd5.x allowlist_externals = npm commands = npm install - npm install antd@5.0.0 + npm install antd@5.0.1 npm run build [testenv:antd_v510_jest] From 4f0ec77d686c8dcdf4da3318d4cb95aecfdd4b23 Mon Sep 17 00:00:00 2001 From: Artyom Vancyan Date: Mon, 6 Nov 2023 12:34:50 +0400 Subject: [PATCH 57/69] GH-53: Handle `onMount` properly Signed-off-by: Artyom Vancyan --- src/index.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index aec1257..b1f0cba 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -191,6 +191,11 @@ const PhoneInput = ({ format(event); }, [format, handleInput]) + const onMount = useCallback((value: PhoneNumber) => { + setFieldValue(value); + handleMount(value); + }, [handleMount, setFieldValue]) + useEffect(() => { if (initiatedRef.current) return; initiatedRef.current = true; @@ -200,11 +205,10 @@ const PhoneInput = ({ } const formattedNumber = displayFormat(clean(initialValue).join("")); const phoneMetadata = parsePhoneNumber(formattedNumber, countriesList); - setFieldValue({...phoneMetadata, valid: (strict: boolean) => checkValidity(phoneMetadata, strict)}); - handleMount({...phoneMetadata, valid: (strict: boolean) => checkValidity(phoneMetadata, strict)}); + onMount({...phoneMetadata, valid: (strict: boolean) => checkValidity(phoneMetadata, strict)}); setCountryCode(phoneMetadata.isoCode as keyof typeof validations); setValue(formattedNumber); - }, [clean, countriesList, handleMount, metadata, setFieldValue, value]) + }, [clean, countriesList, metadata, onMount, setFieldValue, value]) const countriesSelect = useMemo(() => (