/** Priority1 电话国家区号 — 按英文国名 A–Z 排序,供模拟界面搜索选择 */ export type PhoneCountry = { code: string; name: string; dial: string; }; const RAW: PhoneCountry[] = [ { code: "AF", name: "Afghanistan", dial: "+93" }, { code: "AL", name: "Albania", dial: "+355" }, { code: "DZ", name: "Algeria", dial: "+213" }, { code: "AR", name: "Argentina", dial: "+54" }, { code: "AU", name: "Australia", dial: "+61" }, { code: "AT", name: "Austria", dial: "+43" }, { code: "BH", name: "Bahrain", dial: "+973" }, { code: "BD", name: "Bangladesh", dial: "+880" }, { code: "BE", name: "Belgium", dial: "+32" }, { code: "BR", name: "Brazil", dial: "+55" }, { code: "BN", name: "Brunei", dial: "+673" }, { code: "KH", name: "Cambodia", dial: "+855" }, { code: "CA", name: "Canada", dial: "+1" }, { code: "CL", name: "Chile", dial: "+56" }, { code: "CN", name: "China", dial: "+86" }, { code: "CO", name: "Colombia", dial: "+57" }, { code: "CR", name: "Costa Rica", dial: "+506" }, { code: "HR", name: "Croatia", dial: "+385" }, { code: "CZ", name: "Czech Republic", dial: "+420" }, { code: "DK", name: "Denmark", dial: "+45" }, { code: "DO", name: "Dominican Republic", dial: "+1" }, { code: "EC", name: "Ecuador", dial: "+593" }, { code: "EG", name: "Egypt", dial: "+20" }, { code: "EE", name: "Estonia", dial: "+372" }, { code: "FI", name: "Finland", dial: "+358" }, { code: "FR", name: "France", dial: "+33" }, { code: "DE", name: "Germany", dial: "+49" }, { code: "GR", name: "Greece", dial: "+30" }, { code: "HK", name: "Hong Kong", dial: "+852" }, { code: "HU", name: "Hungary", dial: "+36" }, { code: "IS", name: "Iceland", dial: "+354" }, { code: "IN", name: "India", dial: "+91" }, { code: "ID", name: "Indonesia", dial: "+62" }, { code: "IE", name: "Ireland", dial: "+353" }, { code: "IL", name: "Israel", dial: "+972" }, { code: "IT", name: "Italy", dial: "+39" }, { code: "JP", name: "Japan", dial: "+81" }, { code: "JO", name: "Jordan", dial: "+962" }, { code: "KE", name: "Kenya", dial: "+254" }, { code: "KW", name: "Kuwait", dial: "+965" }, { code: "LV", name: "Latvia", dial: "+371" }, { code: "LB", name: "Lebanon", dial: "+961" }, { code: "LT", name: "Lithuania", dial: "+370" }, { code: "LU", name: "Luxembourg", dial: "+352" }, { code: "MY", name: "Malaysia", dial: "+60" }, { code: "MX", name: "Mexico", dial: "+52" }, { code: "MA", name: "Morocco", dial: "+212" }, { code: "NL", name: "Netherlands", dial: "+31" }, { code: "NZ", name: "New Zealand", dial: "+64" }, { code: "NG", name: "Nigeria", dial: "+234" }, { code: "NO", name: "Norway", dial: "+47" }, { code: "OM", name: "Oman", dial: "+968" }, { code: "PK", name: "Pakistan", dial: "+92" }, { code: "PA", name: "Panama", dial: "+507" }, { code: "PE", name: "Peru", dial: "+51" }, { code: "PH", name: "Philippines", dial: "+63" }, { code: "PL", name: "Poland", dial: "+48" }, { code: "PT", name: "Portugal", dial: "+351" }, { code: "QA", name: "Qatar", dial: "+974" }, { code: "RO", name: "Romania", dial: "+40" }, { code: "RU", name: "Russia", dial: "+7" }, { code: "SA", name: "Saudi Arabia", dial: "+966" }, { code: "SG", name: "Singapore", dial: "+65" }, { code: "SK", name: "Slovakia", dial: "+421" }, { code: "ZA", name: "South Africa", dial: "+27" }, { code: "KR", name: "South Korea", dial: "+82" }, { code: "ES", name: "Spain", dial: "+34" }, { code: "LK", name: "Sri Lanka", dial: "+94" }, { code: "SE", name: "Sweden", dial: "+46" }, { code: "CH", name: "Switzerland", dial: "+41" }, { code: "TW", name: "Taiwan", dial: "+886" }, { code: "TH", name: "Thailand", dial: "+66" }, { code: "TR", name: "Turkey", dial: "+90" }, { code: "AE", name: "United Arab Emirates", dial: "+971" }, { code: "GB", name: "United Kingdom", dial: "+44" }, { code: "US", name: "United States", dial: "+1" }, { code: "UA", name: "Ukraine", dial: "+380" }, { code: "UY", name: "Uruguay", dial: "+598" }, { code: "VE", name: "Venezuela", dial: "+58" }, { code: "VN", name: "Vietnam", dial: "+84" }, ]; export const P1_PHONE_COUNTRIES: PhoneCountry[] = [...RAW].sort((a, b) => a.name.localeCompare(b.name, "en"), ); export function findPhoneCountry(code: string): PhoneCountry { return ( P1_PHONE_COUNTRIES.find((c) => c.code === code) ?? P1_PHONE_COUNTRIES.find((c) => c.code === "US")! ); } export function filterPhoneCountries(query: string): PhoneCountry[] { const q = query.trim().toLowerCase(); if (!q) return P1_PHONE_COUNTRIES; return P1_PHONE_COUNTRIES.filter( (c) => c.name.toLowerCase().includes(q) || c.code.toLowerCase().includes(q) || c.dial.includes(q.replace(/\s/g, "")), ); }