UNPKG

v-phone-input

Version:

International phone field for Vuetify 3 and Vue 3.

2 lines (1 loc) 23.8 kB
(function(l,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue"),require("awesome-phonenumber"),require("vuetify/components")):typeof define=="function"&&define.amd?define(["exports","vue","awesome-phonenumber","vuetify/components"],t):(l=typeof globalThis<"u"?globalThis:l||self,t(l.VPhoneInput={},l.Vue,l.PhoneNumber,l.components))})(this,function(l,t,R,v){"use strict";function Z(){return{country:{required:!0,type:Object},decorative:{type:Boolean,default:!1}}}function k({props:n}){const o=t.computed(()=>n.decorative?void 0:"img"),a=t.computed(()=>n.decorative?void 0:n.country.name);return{role:o,title:a}}const W=t.defineComponent({props:Z(),setup(n){const{role:o,title:a}=k({props:n});return()=>t.h("span",{role:o.value,title:a.value,class:["v-phone-input__country__icon","f32"]},t.h("span",{class:["flag",n.country.iso2.toLowerCase()]}))}}),Y=t.defineComponent({props:Z(),setup(n){const{role:o,title:a}=k({props:n});return()=>t.h("span",{role:o.value,title:a.value,class:["v-phone-input__country__icon","fi",`fi-${n.country.iso2.toLowerCase()}`]})}});function cn(n){return"setPreference"in n}function A(n){return n&&typeof n=="object"?n.iso2:(n||"").toUpperCase()}function rn({props:n}){const o=R.getSupportedRegionCodes(),a=t.ref({}),s=t.ref(0),$=t.ref([]),C=t.ref([]),S=t.computed(()=>n.preferCountries.map(A)),c=t.computed(()=>n.includeCountries.map(A)),I=t.computed(()=>n.excludeCountries.map(A));t.watchEffect(()=>{const d={},T=[],P=[];n.allCountries.forEach(g=>{const f=A(g.iso2);if(o.indexOf(f)===-1||c.value.length&&c.value.indexOf(f)===-1||I.value.indexOf(f)!==-1)return;const i={...g,iso2:f};d[i.iso2]=i,S.value.indexOf(f)!==-1?T.push(i):P.push(i)}),T.sort((g,f)=>S.value.indexOf(g.iso2)-S.value.indexOf(f.iso2)),a.value=d,$.value=T,C.value=P,s.value=T.length+P.length,s.value||console.error('[v-phone-input] resulting countries from "allCountries", "includeCountries" and "excludeCountries" must be a non-empty list')});const m=t.computed(()=>{const d=$.value[0]??C.value[0];return d?a.value[d.iso2]:void 0}),h=d=>a.value[A(d)],G=t.ref(!1),V=t.computed(()=>!n.disableGuessLoading&&G.value);return{countriesCount:s,preferredCountries:$,otherCountries:C,guessingCountry:V,findCountry:h,firstCountry:m,setCountryPreference:d=>{G.value=!1,cn(n.countryGuesser)&&n.countryGuesser.setPreference(d)},guessCountry:async()=>{if(!n.guessCountry)return;G.value=!0;const d=h(await n.countryGuesser.guess());return G.value=!1,d==null?void 0:d.iso2}}}function ln({props:n}){return{countryIconComponent:t.computed(()=>{switch(n.countryIconMode){case"svg":return Y;case"sprite":return W;case"text":return;default:return n.countryIconMode}})}}function un({props:n}){return{countrySelectComponent:t.computed(()=>n.enableSearchingCountry?{type:"VAutocomplete",props:{autocomplete:"new-password","aria-autocomplete":"off",filterKeys:["raw.name","raw.iso2","raw.dialCode"]}}:{type:"VSelect",props:{}})}}function $n({props:n,country:o,example:a}){const s=(B,p)=>typeof B=="function"?B(p):B,$=t.computed(()=>({country:o.value,example:a.value})),C=t.computed(()=>s(n.label,$.value)),S=t.computed(()=>s(n.ariaLabel,$.value)),c=t.computed(()=>({...$.value,label:C.value||S.value})),I=t.computed(()=>s(n.countryLabel,c.value)),m=t.computed(()=>s(n.countryAriaLabel,c.value)),h=t.computed(()=>s(n.placeholder,c.value)),G=t.computed(()=>s(n.hint,c.value)),V=t.computed(()=>s(n.invalidMessage,c.value));return{label:C,ariaLabel:S,countryLabel:I,countryAriaLabel:m,placeholder:h,hint:G,invalidMessage:V,messageOptions:$}}function dn(n,o){const a=t.ref({}),s=()=>{const $={};Object.keys(n).forEach(C=>{const[S,...c]=C.split(":");!c.length||o.indexOf(S)===-1?$.default={...$.default||{},[C]:C}:$[S]={...$[S]||{},[c.join(":")]:C}}),a.value=$};return t.onBeforeMount(s),t.onBeforeUpdate(s),{namespacedSlots:a}}const Cn={AD:"Andorra",AE:"United Arab Emirates",AF:"Afghanistan",AG:"Antigua and Barbuda",AI:"Anguilla",AL:"Albania",AM:"Armenia",AO:"Angola",AQ:"Antarctica",AR:"Argentina",AS:"American Samoa",AT:"Austria",AU:"Australia",AW:"Aruba",AX:"Aland",AZ:"Azerbaijan",BA:"Bosnia and Herzegovina",BB:"Barbados",BD:"Bangladesh",BE:"Belgium",BF:"Burkina Faso",BG:"Bulgaria",BH:"Bahrain",BI:"Burundi",BJ:"Benin",BL:"Saint Barthelemy",BM:"Bermuda",BN:"Brunei",BO:"Bolivia",BQ:"Bonaire",BR:"Brazil",BS:"Bahamas",BT:"Bhutan",BV:"Bouvet Island",BW:"Botswana",BY:"Belarus",BZ:"Belize",CA:"Canada",CC:"Cocos (Keeling) Islands",CD:"Democratic Republic of the Congo",CF:"Central African Republic",CG:"Republic of the Congo",CH:"Switzerland",CI:"Ivory Coast",CK:"Cook Islands",CL:"Chile",CM:"Cameroon",CN:"China",CO:"Colombia",CR:"Costa Rica",CU:"Cuba",CV:"Cape Verde",CW:"Curacao",CX:"Christmas Island",CY:"Cyprus",CZ:"Czech Republic",DE:"Germany",DJ:"Djibouti",DK:"Denmark",DM:"Dominica",DO:"Dominican Republic",DZ:"Algeria",EC:"Ecuador",EE:"Estonia",EG:"Egypt",EH:"Western Sahara",ER:"Eritrea",ES:"Spain",ET:"Ethiopia",FI:"Finland",FJ:"Fiji",FK:"Falkland Islands",FM:"Micronesia",FO:"Faroe Islands",FR:"France",GA:"Gabon",GB:"United Kingdom",GD:"Grenada",GE:"Georgia",GF:"French Guiana",GG:"Guernsey",GH:"Ghana",GI:"Gibraltar",GL:"Greenland",GM:"Gambia",GN:"Guinea",GP:"Guadeloupe",GQ:"Equatorial Guinea",GR:"Greece",GS:"South Georgia and the South Sandwich Islands",GT:"Guatemala",GU:"Guam",GW:"Guinea-Bissau",GY:"Guyana",HK:"Hong Kong",HM:"Heard Island and McDonald Islands",HN:"Honduras",HR:"Croatia",HT:"Haiti",HU:"Hungary",ID:"Indonesia",IE:"Ireland",IL:"Israel",IM:"Isle of Man",IN:"India",IO:"British Indian Ocean Territory",IQ:"Iraq",IR:"Iran",IS:"Iceland",IT:"Italy",JE:"Jersey",JM:"Jamaica",JO:"Jordan",JP:"Japan",KE:"Kenya",KG:"Kyrgyzstan",KH:"Cambodia",KI:"Kiribati",KM:"Comoros",KN:"Saint Kitts and Nevis",KP:"North Korea",KR:"South Korea",KW:"Kuwait",KY:"Cayman Islands",KZ:"Kazakhstan",LA:"Laos",LB:"Lebanon",LC:"Saint Lucia",LI:"Liechtenstein",LK:"Sri Lanka",LR:"Liberia",LS:"Lesotho",LT:"Lithuania",LU:"Luxembourg",LV:"Latvia",LY:"Libya",MA:"Morocco",MC:"Monaco",MD:"Moldova",ME:"Montenegro",MF:"Saint Martin",MG:"Madagascar",MH:"Marshall Islands",MK:"North Macedonia",ML:"Mali",MM:"Myanmar (Burma)",MN:"Mongolia",MO:"Macao",MP:"Northern Mariana Islands",MQ:"Martinique",MR:"Mauritania",MS:"Montserrat",MT:"Malta",MU:"Mauritius",MV:"Maldives",MW:"Malawi",MX:"Mexico",MY:"Malaysia",MZ:"Mozambique",NA:"Namibia",NC:"New Caledonia",NE:"Niger",NF:"Norfolk Island",NG:"Nigeria",NI:"Nicaragua",NL:"Netherlands",NO:"Norway",NP:"Nepal",NR:"Nauru",NU:"Niue",NZ:"New Zealand",OM:"Oman",PA:"Panama",PE:"Peru",PF:"French Polynesia",PG:"Papua New Guinea",PH:"Philippines",PK:"Pakistan",PL:"Poland",PM:"Saint Pierre and Miquelon",PN:"Pitcairn Islands",PR:"Puerto Rico",PS:"Palestine",PT:"Portugal",PW:"Palau",PY:"Paraguay",QA:"Qatar",RE:"Reunion",RO:"Romania",RS:"Serbia",RU:"Russia",RW:"Rwanda",SA:"Saudi Arabia",SB:"Solomon Islands",SC:"Seychelles",SD:"Sudan",SE:"Sweden",SG:"Singapore",SH:"Saint Helena",SI:"Slovenia",SJ:"Svalbard and Jan Mayen",SK:"Slovakia",SL:"Sierra Leone",SM:"San Marino",SN:"Senegal",SO:"Somalia",SR:"Suriname",SS:"South Sudan",ST:"Sao Tome and Principe",SV:"El Salvador",SX:"Sint Maarten",SY:"Syria",SZ:"Eswatini",TC:"Turks and Caicos Islands",TD:"Chad",TF:"French Southern Territories",TG:"Togo",TH:"Thailand",TJ:"Tajikistan",TK:"Tokelau",TL:"East Timor",TM:"Turkmenistan",TN:"Tunisia",TO:"Tonga",TR:"Turkey",TT:"Trinidad and Tobago",TV:"Tuvalu",TW:"Taiwan",TZ:"Tanzania",UA:"Ukraine",UG:"Uganda",UM:"U.S. Minor Outlying Islands",US:"United States",UY:"Uruguay",UZ:"Uzbekistan",VA:"Vatican City",VC:"Saint Vincent and the Grenadines",VE:"Venezuela",VG:"British Virgin Islands",VI:"U.S. Virgin Islands",VN:"Vietnam",VU:"Vanuatu",WF:"Wallis and Futuna",WS:"Samoa",XK:"Kosovo",YE:"Yemen",YT:"Mayotte",ZA:"South Africa",ZM:"Zambia",ZW:"Zimbabwe"},O={AD:"Andorra",AE:"دولة الإمارات العربية المتحدة",AF:"افغانستان",AG:"Antigua and Barbuda",AI:"Anguilla",AL:"Shqipëria",AM:"Հայաստան",AO:"Angola",AQ:"Antarctica",AR:"Argentina",AS:"American Samoa",AT:"Österreich",AU:"Australia",AW:"Aruba",AX:"Åland",AZ:"Azərbaycan",BA:"Bosna i Hercegovina",BB:"Barbados",BD:"Bangladesh",BE:"België",BF:"Burkina Faso",BG:"България",BH:"‏البحرين",BI:"Burundi",BJ:"Bénin",BL:"Saint-Barthélemy",BM:"Bermuda",BN:"Negara Brunei Darussalam",BO:"Bolivia",BQ:"Bonaire",BR:"Brasil",BS:"Bahamas",BT:"ʼbrug-yul",BV:"Bouvetøya",BW:"Botswana",BY:"Белару́сь",BZ:"Belize",CA:"Canada",CC:"Cocos (Keeling) Islands",CD:"République démocratique du Congo",CF:"Ködörösêse tî Bêafrîka",CG:"République du Congo",CH:"Schweiz",CI:"Côte d'Ivoire",CK:"Cook Islands",CL:"Chile",CM:"Cameroon",CN:"中国",CO:"Colombia",CR:"Costa Rica",CU:"Cuba",CV:"Cabo Verde",CW:"Curaçao",CX:"Christmas Island",CY:"Κύπρος",CZ:"Česká republika",DE:"Deutschland",DJ:"Djibouti",DK:"Danmark",DM:"Dominica",DO:"República Dominicana",DZ:"الجزائر",EC:"Ecuador",EE:"Eesti",EG:"مصر‎",EH:"الصحراء الغربية",ER:"ኤርትራ",ES:"España",ET:"ኢትዮጵያ",FI:"Suomi",FJ:"Fiji",FK:"Falkland Islands",FM:"Micronesia",FO:"Føroyar",FR:"France",GA:"Gabon",GB:"United Kingdom",GD:"Grenada",GE:"საქართველო",GF:"Guyane française",GG:"Guernsey",GH:"Ghana",GI:"Gibraltar",GL:"Kalaallit Nunaat",GM:"Gambia",GN:"Guinée",GP:"Guadeloupe",GQ:"Guinea Ecuatorial",GR:"Ελλάδα",GS:"South Georgia",GT:"Guatemala",GU:"Guam",GW:"Guiné-Bissau",GY:"Guyana",HK:"香港",HM:"Heard Island and McDonald Islands",HN:"Honduras",HR:"Hrvatska",HT:"Haïti",HU:"Magyarország",ID:"Indonesia",IE:"Éire",IL:"יִשְׂרָאֵל",IM:"Isle of Man",IN:"भारत",IO:"British Indian Ocean Territory",IQ:"العراق",IR:"ایران",IS:"Ísland",IT:"Italia",JE:"Jersey",JM:"Jamaica",JO:"الأردن",JP:"日本",KE:"Kenya",KG:"Кыргызстан",KH:"Kâmpŭchéa",KI:"Kiribati",KM:"Komori",KN:"Saint Kitts and Nevis",KP:"북한",KR:"대한민국",KW:"الكويت",KY:"Cayman Islands",KZ:"Қазақстан",LA:"ສປປລາວ",LB:"لبنان",LC:"Saint Lucia",LI:"Liechtenstein",LK:"śrī laṃkāva",LR:"Liberia",LS:"Lesotho",LT:"Lietuva",LU:"Luxembourg",LV:"Latvija",LY:"‏ليبيا",MA:"المغرب",MC:"Monaco",MD:"Moldova",ME:"Црна Гора",MF:"Saint-Martin",MG:"Madagasikara",MH:"M̧ajeļ",MK:"Северна Македонија",ML:"Mali",MM:"မြန်မာ",MN:"Монгол улс",MO:"澳門",MP:"Northern Mariana Islands",MQ:"Martinique",MR:"موريتانيا",MS:"Montserrat",MT:"Malta",MU:"Maurice",MV:"Maldives",MW:"Malawi",MX:"México",MY:"Malaysia",MZ:"Moçambique",NA:"Namibia",NC:"Nouvelle-Calédonie",NE:"Niger",NF:"Norfolk Island",NG:"Nigeria",NI:"Nicaragua",NL:"Nederland",NO:"Norge",NP:"नेपाल",NR:"Nauru",NU:"Niuē",NZ:"New Zealand",OM:"عمان",PA:"Panamá",PE:"Perú",PF:"Polynésie française",PG:"Papua Niugini",PH:"Pilipinas",PK:"Pakistan",PL:"Polska",PM:"Saint-Pierre-et-Miquelon",PN:"Pitcairn Islands",PR:"Puerto Rico",PS:"فلسطين",PT:"Portugal",PW:"Palau",PY:"Paraguay",QA:"قطر",RE:"La Réunion",RO:"România",RS:"Србија",RU:"Россия",RW:"Rwanda",SA:"العربية السعودية",SB:"Solomon Islands",SC:"Seychelles",SD:"السودان",SE:"Sverige",SG:"Singapore",SH:"Saint Helena",SI:"Slovenija",SJ:"Svalbard og Jan Mayen",SK:"Slovensko",SL:"Sierra Leone",SM:"San Marino",SN:"Sénégal",SO:"Soomaaliya",SR:"Suriname",SS:"South Sudan",ST:"São Tomé e Príncipe",SV:"El Salvador",SX:"Sint Maarten",SY:"سوريا",SZ:"Eswatini",TC:"Turks and Caicos Islands",TD:"Tchad",TF:"Territoire des Terres australes et antarctiques fr",TG:"Togo",TH:"ประเทศไทย",TJ:"Тоҷикистон",TK:"Tokelau",TL:"Timor-Leste",TM:"Türkmenistan",TN:"تونس",TO:"Tonga",TR:"Türkiye",TT:"Trinidad and Tobago",TV:"Tuvalu",TW:"臺灣",TZ:"Tanzania",UA:"Україна",UG:"Uganda",UM:"United States Minor Outlying Islands",US:"United States",UY:"Uruguay",UZ:"O'zbekiston",VA:"Vaticano",VC:"Saint Vincent and the Grenadines",VE:"Venezuela",VG:"British Virgin Islands",VI:"United States Virgin Islands",VN:"Việt Nam",VU:"Vanuatu",WF:"Wallis et Futuna",WS:"Samoa",XK:"Republika e Kosovës",YE:"اليَمَن",YT:"Mayotte",ZA:"South Africa",ZM:"Zambia",ZW:"Zimbabwe"},J=Object.entries(Cn).sort(([n,o],[a,s])=>o.localeCompare(s)).map(([n,o])=>({name:o!==O[n]?`${O[n]} (${o})`:O[n],iso2:A(n),dialCode:`${R.getCountryCodeForRegionCode(n)}`})),F=class F{async guess(){let o,a;try{o=await fetch(F.IP2C_URL),a=await o.text()}catch{return}const s=a.toString().split(";");if(!(!s||s[0]!=="1"))return s[1]}};F.IP2C_URL="https://ip2c.org/s";let N=F;class z extends N{constructor(){super(...arguments),this.memoCountry=void 0}async guess(){return this.memoCountry||(this.memoCountry=await super.guess()),this.memoCountry}setPreference(o){this.memoCountry=o}}const Q={label:"Phone",ariaLabel:void 0,countryLabel:void 0,countryAriaLabel:n=>`Country for ${n.label}`,placeholder:void 0,hint:void 0,invalidMessage:n=>`The "${n.label}" field is not a valid phone number (example: ${n.example}).`,example:void 0,persistentPlaceholder:void 0,persistentHint:void 0,countryIconMode:void 0,allCountries:J,preferCountries:[],includeCountries:[],excludeCountries:[],defaultCountry:void 0,countryGuesser:new z,guessCountry:!1,disableGuessLoading:!1,enableSearchingCountry:!1,displayFormat:"national",phoneValidator:n=>n.valid},X={...Q};function j(n){Object.assign(X,n)}function u(n){return X[n]}function _(n,o){var a,s;return((a=n.number)==null?void 0:a[o])||((s=n.number)==null?void 0:s.input)||""}function q(n){return R.getExample(n)}function K(n,o){return R.parsePhoneNumber((n||"").trim(),{regionCode:o})}const U=["id","class","style"],Sn=["variant","flat","tile","density","singleLine","hideDetails","direction","reverse","color","bgColor","theme","disabled","readonly","rounded"],yn=t.defineComponent({components:{VListItem:v.VListItem,VSelect:v.VSelect,VTextField:v.VTextField},inheritAttrs:!1,props:{label:{type:[String,Function],default:()=>u("label")},ariaLabel:{type:[String,Function],default:()=>u("ariaLabel")},countryLabel:{type:[String,Function],default:()=>u("countryLabel")},countryAriaLabel:{type:[String,Function],default:()=>u("countryAriaLabel")},placeholder:{type:[String,Function],default:()=>u("placeholder")},hint:{type:[String,Function],default:()=>u("hint")},invalidMessage:{type:[String,Function],default:()=>u("invalidMessage")},example:{type:[String,Function],default:()=>u("example")},appendIcon:{type:String,default:void 0},appendInnerIcon:{type:String,default:void 0},prependIcon:{type:String,default:void 0},prependInnerIcon:{type:String,default:void 0},rules:{type:Array,default:()=>[]},validateOn:{type:String,default:void 0},phoneValidator:{type:Function,default:u("phoneValidator")},countryIconMode:{type:[String,Object],default:()=>u("countryIconMode")},allCountries:{type:Array,default:()=>u("allCountries")},preferCountries:{type:Array,default:()=>u("preferCountries")},includeCountries:{type:Array,default:()=>u("includeCountries")},excludeCountries:{type:Array,default:()=>u("excludeCountries")},defaultCountry:{type:String,default:()=>u("defaultCountry")},countryGuesser:{type:Object,default:()=>u("countryGuesser")},guessCountry:{type:Boolean,default:()=>u("guessCountry")},disableGuessLoading:{type:Boolean,default:()=>u("disableGuessLoading")},enableSearchingCountry:{type:Boolean,default:()=>u("enableSearchingCountry")},displayFormat:{type:String,default:()=>u("displayFormat")},country:{type:String,default:""},modelValue:{type:String,default:""},wrapperProps:{type:Object,default:()=>({})},countryProps:{type:Object,default:()=>({})},phoneProps:{type:Object,default:()=>({})}},emits:{"update:modelValue":n=>!0,"update:country":n=>!0},setup(n,{attrs:o,emit:a,slots:s,expose:$}){const{countriesCount:C,preferredCountries:S,otherCountries:c,guessingCountry:I,findCountry:m,firstCountry:h,setCountryPreference:G,guessCountry:V}=rn({props:n}),B=t.ref(null),p=t.ref(null),{namespacedSlots:d}=dn(s,["country"]),{countryIconComponent:T}=ln({props:n}),{countrySelectComponent:P}=un({props:n}),g=t.ref(!1),f=t.ref([]),i=t.ref(n.country),M=t.ref(n.modelValue||""),y=t.ref(t.markRaw(K(""))),D=e=>Object.keys(o).reduce((r,L)=>e(L)?{...r,[L]:o[L]}:r,{}),hn=t.computed(()=>({...D(e=>U.indexOf(e)!==-1),...n.wrapperProps})),Bn=t.computed(()=>({...P.value.props,...D(e=>U.indexOf(e)===-1&&Sn.indexOf(e)!==-1),...n.countryProps,menuProps:{maxHeight:300,contentClass:"v-phone-input__country__menu",closeOnContentClick:!0,...(n.countryProps?n.countryProps.menuProps:void 0)||{}}})),An=t.computed(()=>({...D(e=>U.indexOf(e)===-1),...n.phoneProps})),Tn=t.computed(()=>m(n.defaultCountry)||h.value),E=t.computed(()=>m(i.value)||Tn.value),Pn=t.computed(()=>[...S.value.map(r=>({...r,preferred:!0})),...c.value]),H=e=>_(e,n.displayFormat),Ln=t.computed(()=>n.example!==void 0?typeof n.example=="function"?n.example(E.value):n.example:H(q(E.value.iso2))),Nn=t.computed(()=>{var r;const e=new Set(((r=n.validateOn)==null?void 0:r.split(""))||[]);return e.size===0||e.has("input")}),b=$n({props:n,country:E,example:Ln}),nn=()=>{var e;Nn.value&&((e=p.value)==null||e.validate())},w=()=>{const e=n.rules.map(r=>typeof r=="function"?()=>r(M.value??"",y.value,b.messageOptions.value):r);b.invalidMessage.value?f.value=[...e,()=>!M.value||n.phoneValidator(y.value)||b.invalidMessage.value]:f.value=e},Vn=()=>{n.phoneValidator(y.value)&&(M.value=H(y.value))},En=()=>{var e,r;n.modelValue!==(((e=y.value.number)==null?void 0:e.input)??"")&&n.modelValue!==(((r=y.value.number)==null?void 0:r.e164)??"")&&(M.value=n.modelValue||"")},bn=()=>{n.country&&n.country!==i.value&&(i.value=n.country)};t.watch(()=>n.rules,w,{deep:!0,immediate:!0}),t.watch(()=>n.displayFormat,Vn),t.watch(()=>n.modelValue,En),t.watch(()=>n.country,bn);const Rn=()=>{w(),(M.value??"")!==""&&nn()};t.watch(b.invalidMessage,Rn);const vn=()=>{g.value=!0},Kn=()=>{g.value=!1},tn=()=>{y.value=t.markRaw(K(M.value,i.value)),n.phoneValidator(y.value)&&(M.value=H(y.value))},Fn=(e,r)=>{i.value?(a("update:country",i.value),G(i.value)):t.nextTick(()=>{i.value||(i.value=r)}),tn(),(M.value??"")!==""&&nn()},on=()=>{if((M.value||"").startsWith("+")){const r=K(M.value).regionCode;r&&i.value!==r&&m(r)&&(i.value=r)}tn()},On=()=>{var an,sn;const e=((an=y.value.number)==null?void 0:an.input)||"",r=((sn=y.value.number)==null?void 0:sn.e164)||e,L=n.phoneValidator(y.value);(n.modelValue!==e||n.modelValue!==r&&L)&&a("update:modelValue",L?r:e)};t.watch(i,Fn),t.watch(M,on),t.watch(y,On,{deep:!0});const Un=async()=>{if(i.value)return;if(C.value===1){i.value=h.value.iso2;return}const e=await V();!i.value&&e&&(i.value=e),i.value=i.value||E.value.iso2};t.onMounted(()=>{on(),t.nextTick(()=>{Un()})});const en={countryInputRef:B,phoneInputRef:p,isValid:t.computed(()=>{var e;return((e=p.value)==null?void 0:e.isValid)??!0}),errorMessages:t.computed(()=>{var e;return((e=p.value)==null?void 0:e.errorMessages)??[]}),reset:async()=>{var e;await((e=p.value)==null?void 0:e.reset())},resetValidation:async()=>{var e;await((e=p.value)==null?void 0:e.resetValidation())},validate:async e=>{var r;return await((r=p.value)==null?void 0:r.validate(e))??[]}};return $(en),{wrapperAttrs:hn,VTextField:v.VTextField,countryInput:B,phoneInput:p,namespacedSlots:d,countrySelectComponent:P,countryIconComponent:T,countryAttrs:Bn,phoneAttrs:An,countryFocused:g,guessingCountry:I,mergeRules:w,lazyCountry:i,lazyValue:M,mergedRules:f,activeCountry:E,labels:b,countriesItems:Pn,onCountryFocus:vn,onCountryBlur:Kn,...en}}}),Mn=(n,o)=>{const a=n.__vccOpts||n;for(const[s,$]of o)a[s]=$;return a},mn={key:1},pn={class:"v-phone-input__country__title"},fn={class:"v-phone-input__country__append text-body-2"};function In(n,o,a,s,$,C){const S=t.resolveComponent("v-list-item");return t.openBlock(),t.createElementBlock("div",t.mergeProps({class:[{"v-phone-input--prepend-inner-icon":n.prependInnerIcon},"v-phone-input"]},n.wrapperAttrs),[(t.openBlock(),t.createBlock(t.resolveDynamicComponent(n.countrySelectComponent.type),t.mergeProps({ref:"countryInput",modelValue:n.lazyCountry,"onUpdate:modelValue":o[0]||(o[0]=c=>n.lazyCountry=c),label:n.labels.countryLabel.value,"aria-label":n.labels.countryAriaLabel.value,items:n.countriesItems,"item-title":"name","item-value":"iso2",loading:n.guessingCountry,"prepend-icon":n.prependIcon,"prepend-inner-icon":n.prependInnerIcon,class:[{"v-phone-input--focused":n.countryFocused},"v-phone-input__country__input"]},n.countryAttrs,{onFocus:n.onCountryFocus,onBlur:n.onCountryBlur}),t.createSlots({selection:t.withCtx(()=>[t.renderSlot(n.$slots,"country-selection",{country:n.activeCountry},()=>[t.renderSlot(n.$slots,"country-icon",{country:n.activeCountry,decorative:!1},()=>[n.countryIconComponent?(t.openBlock(),t.createBlock(t.resolveDynamicComponent(n.countryIconComponent),{key:0,country:n.activeCountry,decorative:!1},null,8,["country"])):(t.openBlock(),t.createElementBlock("span",mn,t.toDisplayString(`+${n.activeCountry.dialCode}`),1))])])]),item:t.withCtx(c=>[t.createVNode(S,t.normalizeProps(t.guardReactiveProps(c.props)),{prepend:t.withCtx(()=>[t.renderSlot(n.$slots,"country-icon",{country:c.item.raw,decorative:!0},()=>[n.countryIconComponent?(t.openBlock(),t.createBlock(t.resolveDynamicComponent(n.countryIconComponent),{key:0,country:c.item.raw,decorative:!0},null,8,["country"])):t.createCommentVNode("",!0)])]),title:t.withCtx(()=>[t.renderSlot(n.$slots,"country-title",{country:c.item.raw},()=>[t.createElementVNode("span",pn,t.toDisplayString(c.item.raw.name),1)])]),append:t.withCtx(()=>[t.renderSlot(n.$slots,"country-append",{country:c.item.raw},()=>[t.createElementVNode("span",fn," +"+t.toDisplayString(c.item.raw.dialCode),1)])]),_:2},1040)]),_:2},[t.renderList(n.namespacedSlots.country,(c,I)=>({name:I,fn:t.withCtx(m=>[t.renderSlot(n.$slots,c,t.normalizeProps(t.guardReactiveProps(m)))])}))]),1040,["modelValue","label","aria-label","items","loading","prepend-icon","prepend-inner-icon","class","onFocus","onBlur"])),(t.openBlock(),t.createBlock(t.resolveDynamicComponent(n.VTextField),t.mergeProps({ref:"phoneInput",modelValue:n.lazyValue,"onUpdate:modelValue":o[1]||(o[1]=c=>n.lazyValue=c),label:n.labels.label.value,"aria-label":n.labels.ariaLabel.value,placeholder:n.labels.placeholder.value,hint:n.labels.hint.value,rules:n.mergedRules,"append-icon":n.appendIcon,"append-inner-icon":n.appendInnerIcon,"validate-on":n.validateOn,class:"v-phone-input__phone__input",type:"tel"},n.phoneAttrs),t.createSlots({_:2},[t.renderList(n.namespacedSlots.default,(c,I)=>({name:I,fn:t.withCtx(m=>[t.renderSlot(n.$slots,I,t.normalizeProps(t.guardReactiveProps(m)))])}))]),1040,["modelValue","label","aria-label","placeholder","hint","rules","append-icon","append-inner-icon","validate-on"]))],16)}const x=Mn(yn,[["render",In]]);function Gn(n){return(o,a)=>{a&&console.warn("[v-phone-input] options must be passed as first argument of createVPhoneInput()"),j(n||{}),o.component("VPhoneInput",x)}}class gn extends N{constructor(o={}){super(),this.storage=o.storage||localStorage,this.key=o.key||"v_phone_input_country"}async guess(){const o=this.retrieveStoredCountry();if(o)return o;const a=await super.guess();return a&&this.saveStoredCountry(a),a}setPreference(o){this.saveStoredCountry(o)}retrieveStoredCountry(){return this.storage.getItem(this.key)||void 0}saveStoredCountry(o){this.storage.setItem(this.key,o)}getStorage(){return this.storage}getKey(){return this.key}}l.DEFAULT_OPTIONS=Q,l.Ip2cCountryGuesser=N,l.MemoIp2cCountryGuesser=z,l.StorageMemoIp2cCountryGuesser=gn,l.VCountryIconSprite=W,l.VCountryIconSvg=Y,l.VPhoneInput=x,l.countries=J,l.createVPhoneInput=Gn,l.formatPhone=_,l.getOption=u,l.makeExample=q,l.makePhone=K,l.mergeOptions=j,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});