@desource/phone-mask-react 0.3.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +51 -23
  3. package/dist/esm/components/PhoneInput.d.ts +2 -9
  4. package/dist/esm/components/PhoneInput.d.ts.map +1 -1
  5. package/dist/esm/hooks/internal/useCopyAction.d.ts +14 -0
  6. package/dist/esm/hooks/internal/useCopyAction.d.ts.map +1 -0
  7. package/dist/esm/hooks/internal/useCountry.d.ts +21 -0
  8. package/dist/esm/hooks/internal/useCountry.d.ts.map +1 -0
  9. package/dist/esm/hooks/internal/useCountrySelector.d.ts +32 -0
  10. package/dist/esm/hooks/internal/useCountrySelector.d.ts.map +1 -0
  11. package/dist/esm/hooks/internal/useFormatter.d.ts +45 -0
  12. package/dist/esm/hooks/internal/useFormatter.d.ts.map +1 -0
  13. package/dist/esm/hooks/internal/useInputHandlers.d.ts +21 -0
  14. package/dist/esm/hooks/internal/useInputHandlers.d.ts.map +1 -0
  15. package/dist/esm/hooks/internal/useTheme.d.ts +9 -0
  16. package/dist/esm/hooks/internal/useTheme.d.ts.map +1 -0
  17. package/dist/esm/hooks/internal/useValidationHint.d.ts +6 -0
  18. package/dist/esm/hooks/internal/useValidationHint.d.ts.map +1 -0
  19. package/dist/esm/hooks/usePhoneMask.d.ts +2 -1
  20. package/dist/esm/hooks/usePhoneMask.d.ts.map +1 -1
  21. package/dist/esm/hooks/utility/useClipboard.d.ts +6 -0
  22. package/dist/esm/hooks/utility/useClipboard.d.ts.map +1 -0
  23. package/dist/esm/hooks/utility/useTimer.d.ts +9 -0
  24. package/dist/esm/hooks/utility/useTimer.d.ts.map +1 -0
  25. package/dist/esm/index.d.ts.map +1 -1
  26. package/dist/esm/index.js +751 -705
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/esm/types.d.ts +18 -20
  29. package/dist/esm/types.d.ts.map +1 -1
  30. package/dist/phone-mask-react.cjs +1 -1
  31. package/dist/phone-mask-react.cjs.map +1 -1
  32. package/dist/phone-mask-react.css +1 -1
  33. package/package.json +13 -11
  34. package/dist/esm/consts.d.ts +0 -4
  35. package/dist/esm/consts.d.ts.map +0 -1
  36. package/dist/esm/utils.d.ts +0 -16
  37. package/dist/esm/utils.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../phone-mask/dist/esm/data.min.js","../../../phone-mask/dist/esm/country-code-emodji.js","../../../phone-mask/dist/esm/entries.js","../../../phone-mask/dist/esm/utils.js","../../../phone-mask/dist/esm/services/geoip/consts.js","../../../phone-mask/dist/esm/services/geoip/utils.js","../../src/utils.ts","../../src/consts.ts","../../src/components/PhoneInput.tsx","../../src/hooks/usePhoneMask.ts","../../src/index.ts"],"sourcesContent":["const M={AC:\"+247 #####\",AD:[\"+376 ### ###\",\"+376 #### ####\"],AE:[\"+971 # ### ####\",\"+971 ## ### ####\",\"+971 ### ######\",\"+971 ### # #####\"],AF:\"+93 ## ### ####\",AG:\"+1 ###-###-####\",AI:\"+1 ###-###-####\",AL:[\"+355 ## ### ###\",\"+355 ## ### ####\",\"+355 ### ####\",\"+355 ### ###\",\"+355 ### #####\"],AM:[\"+374 ## ######\",\"+374 ### ## ###\"],AO:\"+244 ### ### ###\",AR:[\"+54 ## ####-####\",\"+54 # ## ####-####\",\"+54 ###-###-####\"],AS:\"+1 ###-###-####\",AT:[\"+43 # #########\",\"+43 ### ######\"],AU:[\"+61 # #### ####\",\"+61 ### ### ###\",\"+61 #### ### ###\",\"+61 ## ### ##\"],AW:\"+297 ### ####\",AX:[\"+358 ## #######\",\"+358 ### ######\"],AZ:[\"+994 ## ### ## ##\",\"+994 ### ## ## ##\"],BA:[\"+387 ## ###-###\",\"+387 ## ### ###\"],BB:\"+1 ###-###-####\",BD:[\"+880 #-#######\",\"+880 ####-######\",\"+880 ###-#######\"],BE:[\"+32 ## ## ## ##\",\"+32 ### ## ## ##\",\"+32 ### ## ###\"],BF:\"+226 ## ## ## ##\",BG:[\"+359 # ### ###\",\"+359 ## ### ###\",\"+359 ### ## ###\"],BH:\"+973 #### ####\",BI:\"+257 ## ## ## ##\",BJ:[\"+229 ## ## ## ## ##\",\"+229 ## ## ## ##\"],BL:\"+590 ### ## ## ##\",BM:\"+1 ###-###-####\",BN:\"+673 ### ####\",BO:[\"+591 # #######\",\"+591 ########\",\"+591 ### ## ####\"],BQ:\"+599 ### ####\",BR:[\"+55 ## ####-####\",\"+55 ## #####-####\",\"+55 ### ## ####\",\"+55 ####-####\"],BS:\"+1 ###-###-####\",BT:[\"+975 # ### ###\",\"+975 ## ## ## ##\"],BW:[\"+267 ### ####\",\"+267 ## ### ###\",\"+267 #### ### ###\",\"+267 ## #####\"],BY:[\"+375 ### ##-##-##\",\"+375 ## ###-##-##\",\"+375 ### ### ####\"],BZ:[\"+501 ###-####\",\"+501 #-###-####-###\"],CA:\"+1 ###-###-####\",CC:[\"+61 # #### ####\",\"+61 ### ### ###\",\"+61 #### ### ###\"],CD:[\"+243 ## #####\",\"+243 ### ### ###\"],CF:\"+236 ## ## ## ##\",CG:[\"+242 ## ### ####\",\"+242 # #### ####\"],CH:[\"+41 ## ### ## ##\",\"+41 ### ### ###\"],CI:[\"+225 ## ## # #####\",\"+225 ## ## ## ####\"],CK:\"+682 ## ###\",CL:[\"+56 ### ### ###\",\"+56 # #### ####\",\"+56 ### ### ####\",\"+56 ## ### ####\"],CM:[\"+237 # ## ## ## ##\",\"+237 ## ## ## ##\"],CN:[\"+86 ## #### ####\",\"+86 ### #### ####\",\"+86 ### ### ####\",\"+86 ########\"],CO:[\"+57 ### #######\",\"+57 # ### #######\"],CR:[\"+506 #### ####\",\"+506 ###-###-####\"],CU:[\"+53 # #######\",\"+53 ### #######\"],CV:\"+238 ### ## ##\",CW:[\"+599 # ### ####\",\"+599 ### ####\"],CX:[\"+61 # #### ####\",\"+61 ### ### ###\",\"+61 #### ### ###\"],CY:\"+357 ## ######\",CZ:\"+420 ### ### ###\",DE:[\"+49 ## ######\",\"+49 #### #######\",\"+49 ### ##########\",\"+49 ### # ######\",\"+49 ### # ####\",\"+49 ### #### ####\",\"+49 ########\"],DJ:\"+253 ## ## ## ##\",DK:\"+45 ## ## ## ##\",DM:\"+1 ###-###-####\",DO:\"+1 ###-###-####\",DZ:[\"+213 ## ## ## ##\",\"+213 ### ## ## ##\",\"+213 ## ### ## ##\"],EC:[\"+593 #-###-####\",\"+593 ## ### ####\",\"+593 #### ### ####\"],EE:[\"+372 ### ####\",\"+372 #### ####\",\"+372 ## ## ####\"],EG:[\"+20 # ########\",\"+20 ## ########\",\"+20 ### ### ####\"],EH:[\"+212 # ## ## ## ##\",\"+212 ##-#######\"],ER:\"+291 # ### ###\",ES:[\"+34 ### ## ## ##\",\"+34 ### ### ###\"],ET:\"+251 ## ### ####\",FI:[\"+358 ## #######\",\"+358 ### ######\"],FJ:[\"+679 ### ####\",\"+679 #### ### ####\"],FK:\"+500 #####\",FM:\"+691 ### ####\",FO:\"+298 ######\",FR:[\"+33 # ## ## ## ##\",\"+33 ### ## ## ##\"],GA:\"+241 ## ## ## ##\",GB:[\"+44 ### ### ####\",\"+44 #### ######\",\"+44 ## #### ####\"],GD:\"+1 ###-###-####\",GE:[\"+995 ## ### ## ##\",\"+995 ### ## ## ##\",\"+995 ### ### ###\"],GF:\"+594 ### ## ## ##\",GG:[\"+44 #### ######\",\"+44 ### ### ####\",\"+44 ## #### ####\"],GH:[\"+233 ## ### ####\",\"+233 ### #####\"],GI:[\"+350 ### #####\",\"+350 ########\"],GL:\"+299 ## ## ##\",GM:\"+220 ### ####\",GN:[\"+224 ## ## ## ##\",\"+224 ### ## ## ##\"],GP:\"+590 ### ## ## ##\",GQ:[\"+240 ### ### ###\",\"+240 ### ######\"],GR:[\"+30 ## #### ####\",\"+30 ### ### ####\"],GT:[\"+502 #### ####\",\"+502 #### ### ####\"],GU:\"+1 ###-###-####\",GW:[\"+245 ### ### ###\",\"+245 ### ####\"],GY:\"+592 ### ####\",HK:[\"+852 #### ####\",\"+852 ### ### ###\",\"+852 ### ## ### ###\"],HN:[\"+504 ####-####\",\"+504 ###########\"],HR:[\"+385 # #### ###\",\"+385 ## ### ####\",\"+385 ### ### ###\",\"+385 ## ## ###\",\"+385 ## ### ###\"],HT:\"+509 ## ## ####\",HU:[\"+36 # ### ####\",\"+36 ## ### ####\",\"+36 ## ### ###\"],ID:[\"+62 ## #######\",\"+62 ###-###-###\",\"+62 ### #######\",\"+62 ### # ### ###\",\"+62 ### ### ####\"],IE:[\"+353 ## #####\",\"+353 ## ### ####\",\"+353 #### ### ###\",\"+353 ### ### ###\"],IL:[\"+972 #-###-####\",\"+972 ##-###-####\",\"+972 #-###-###-###\"],IM:[\"+44 #### ######\",\"+44 ### ### ####\",\"+44 ## #### ####\"],IN:[\"+91 ##### #####\",\"+91 #### ## ####\",\"+91 #### ### ### ###\",\"+91 #### ### ####\"],IO:\"+246 ### ####\",IQ:[\"+964 # ### ####\",\"+964 ### ### ####\"],IR:[\"+98 ## #### ####\",\"+98 ### ### ####\"],IS:\"+354 ### ####\",IT:[\"+39 ## #### ####\",\"+39 ### ### ####\",\"+39 ### ### ###\"],JE:[\"+44 #### ######\",\"+44 ### ### ####\",\"+44 ## #### ####\"],JM:\"+1 ###-###-####\",JO:[\"+962 # ### ####\",\"+962 # #### ####\",\"+962 ### #####\",\"+962 ## #######\"],JP:[\"+81 #-####-####\",\"+81 ##-####-####\",\"+81 ###-###-###\",\"+81 ##-###-####\"],KE:[\"+254 ## #######\",\"+254 ### ######\",\"+254 ### ### ###\"],KG:[\"+996 ### ### ###\",\"+996 ### ### # ##\"],KH:[\"+855 ## ### ###\",\"+855 #### ### ###\"],KI:[\"+686 #####\",\"+686 ########\"],KM:\"+269 ### ## ##\",KN:\"+1 ###-###-####\",KP:[\"+850 # ### ####\",\"+850 ### ### ####\"],KR:[\"+82 #-###-####\",\"+82 ##-####-####\",\"+82 ##-###-####\"],KW:[\"+965 #### ####\",\"+965 ### #####\",\"+965 #### ###\"],KY:\"+1 ###-###-####\",KZ:[\"+7 ##### # ## ##\",\"+7 ### ### ####\",\"+7 ### ###-##-##\"],LA:[\"+856 ## ### ###\",\"+856 ## ## ### ###\"],LB:[\"+961 # ### ###\",\"+961 ## ### ###\"],LC:\"+1 ###-###-####\",LI:[\"+423 ### ## ##\",\"+423 ### ### ###\"],LK:[\"+94 ### ### ###\",\"+94 ## ### ####\"],LR:[\"+231 ## ### ###\",\"+231 ## ### ####\"],LS:\"+266 #### ####\",LT:[\"+370 ### #####\",\"+370 ### ## ###\"],LU:[\"+352 ## ## ## ##\",\"+352 ### ### ###\",\"+352 ### ## ###\"],LV:\"+371 ## ### ###\",LY:\"+218 ##-#######\",MA:[\"+212 # ## ## ## ##\",\"+212 ##-#######\"],MC:[\"+377 ## ## ## ##\",\"+377 # ## ## ## ##\"],MD:[\"+373 ## ### ###\",\"+373 ### ## ###\",\"+373 ### #####\"],ME:\"+382 ## ### ###\",MF:\"+590 ### ## ## ##\",MG:\"+261 ## ## ### ##\",MH:\"+692 ###-####\",MK:[\"+389 # ### ####\",\"+389 ## ### ###\",\"+389 ### # ## ##\"],ML:\"+223 ## ## ## ##\",MM:[\"+95 # ### ###\",\"+95 # ### ####\",\"+95 ### ### ####\"],MN:\"+976 #### ####\",MO:[\"+853 #### ####\",\"+853 #### ###\"],MP:\"+1 ###-###-####\",MQ:\"+596 ### ## ## ##\",MR:\"+222 ## ## ## ##\",MS:\"+1 ###-###-####\",MT:\"+356 #### ####\",MU:[\"+230 #### ####\",\"+230 ### ####\"],MV:[\"+960 ###-####\",\"+960 ### ### ####\"],MW:[\"+265 # ### ###\",\"+265 ### ## ## ##\"],MX:\"+52 ### ### ####\",MY:[\"+60 #-#### ####\",\"+60 ##-### ####\",\"+60 #-###-##-####\",\"+60 ###-### ####\"],MZ:[\"+258 ## ### ###\",\"+258 ## ### ####\",\"+258 ### ### ###\"],NA:[\"+264 ## ### ###\",\"+264 ## ### ####\",\"+264 ### ### ###\"],NC:\"+687 ##.##.##\",NE:[\"+227 ## ## ## ##\",\"+227 ## ### ###\"],NF:[\"+672 ## ####\",\"+672 # #####\"],NG:[\"+234 #### ## ####\",\"+234 ### ### ####\",\"+234 ### #### ####\"],NI:\"+505 #### ####\",NL:[\"+31 ## ### ####\",\"+31 # ########\",\"+31 ### ####\",\"+31 ## #######\"],NO:[\"+47 ## ## ## ##\",\"+47 ### ## ###\"],NP:[\"+977 #-#######\",\"+977 ###-#######\",\"+977 ###########\"],NR:\"+674 ### ####\",NU:[\"+683 ####\",\"+683 ### ####\"],NZ:[\"+64 # ### ####\",\"+64 ## ### ####\",\"+64 ### ### ###\"],OM:[\"+968 ## ######\",\"+968 #### ####\",\"+968 ### #####\"],PA:[\"+507 ###-####\",\"+507 ####-####\"],PE:[\"+51 # #######\",\"+51 ### ### ###\",\"+51 ### #####\"],PF:[\"+689 ## ## ## ##\",\"+689 ### ## ## ##\"],PG:[\"+675 ### ####\",\"+675 #### ####\"],PH:[\"+63 # #### ####\",\"+63 ### ### ####\",\"+63 #### # ### ####\"],PK:[\"+92 ## ########\",\"+92 ### #######\",\"+92 ### ### ##\",\"+92 #### #####\"],PL:[\"+48 ## ### ## ##\",\"+48 ### ### ###\"],PM:[\"+508 ## ## ##\",\"+508 ### ## ## ##\"],PR:\"+1 ###-###-####\",PS:[\"+970 # ### ####\",\"+970 ### ### ###\",\"+970 #### ### ###\"],PT:[\"+351 ## ### ####\",\"+351 ### ### ###\"],PW:\"+680 ### ####\",PY:[\"+595 ## ### ####\",\"+595 ### ######\",\"+595 #### ### ####\"],QA:[\"+974 #### ####\",\"+974 ### ####\"],RE:\"+262 ### ## ## ##\",RO:[\"+40 ## ### ####\",\"+40 ### ### ###\"],RS:[\"+381 ## ######\",\"+381 ## #######\",\"+381 ### #####\"],RU:\"+7 ### ###-##-##\",RW:\"+250 ### ### ###\",SA:[\"+966 ## ### ####\",\"+966 ### ### ####\",\"+966 #### #####\"],SB:[\"+677 #####\",\"+677 ## #####\"],SC:[\"+248 # ### ###\",\"+248 #######\"],SD:\"+249 ## ### ####\",SE:[\"+46 # ## ## ##\",\"+46 ## ### ## ##\",\"+46 ## ## ## ##\",\"+46 ### ## ## ###\"],SG:[\"+65 #### ####\",\"+65 #### ### ####\"],SH:\"+290 #####\",SI:[\"+386 # ### ## ##\",\"+386 ## ### ###\",\"+386 ## ######\",\"+386 ### #####\"],SJ:[\"+47 ## ## ## ##\",\"+47 ### ## ###\"],SK:[\"+421 #/### ### ##\",\"+421 ### ### ###\",\"+421 #######\"],SL:\"+232 ## ######\",SM:[\"+378 #### ######\",\"+378 ## ## ## ##\"],SN:[\"+221 ## ### ## ##\",\"+221 ### ## ## ##\"],SO:[\"+252 # ######\",\"+252 # #######\"],SR:[\"+597 ###-###\",\"+597 ###-####\",\"+597 ##-##-##\"],SS:\"+211 ### ### ###\",ST:\"+239 ### ####\",SV:[\"+503 #### ####\",\"+503 ### ####\"],SX:\"+1 ###-###-####\",SY:[\"+963 ## ### ####\",\"+963 ### ### ###\"],SZ:[\"+268 #### ####\",\"+268 ##### ####\"],TA:\"+290 ####\",TC:\"+1 ###-###-####\",TD:\"+235 ## ## ## ##\",TG:\"+228 ## ## ## ##\",TH:[\"+66 # ### ####\",\"+66 ## ### ####\",\"+66 #### ### ###\"],TJ:[\"+992 ### ## ####\",\"+992 ## ### ####\"],TK:\"+690 ####\",TL:[\"+670 ### ####\",\"+670 #### ####\"],TM:[\"+993 ## ##-##-##\",\"+993 ## ######\"],TN:\"+216 ## ### ###\",TO:[\"+676 ##-###\",\"+676 ### ####\",\"+676 #### ###\"],TR:[\"+90 ### ### ## ##\",\"+90 ### ### ####\"],TT:\"+1 ###-###-####\",TV:[\"+688 ## ###\",\"+688 ## ####\"],TW:[\"+886 # #### ####\",\"+886 ### ### ###\",\"+886 ## ### ####\",\"+886 ## #### ####\"],TZ:[\"+255 ## ### ####\",\"+255 ### ### ###\",\"+255 ### ## ####\"],UA:[\"+380 #### #####\",\"+380 ## ### ####\",\"+380 ### ### ###\"],UG:[\"+256 ## #######\",\"+256 ### ######\"],US:\"+1 ###-###-####\",UY:[\"+598 #### ####\",\"+598 ## ### ###\",\"+598 ### ####\"],UZ:\"+998 ## ### ## ##\",VA:[\"+39 ## #### ####\",\"+39 ### ### ####\",\"+39 ### ### ###\"],VC:\"+1 ###-###-####\",VE:\"+58 ###-#######\",VG:\"+1 ###-###-####\",VI:\"+1 ###-###-####\",VN:[\"+84 ### #### ###\",\"+84 ### ### ###\",\"+84 #### ######\",\"+84 ## ### ## ##\"],VU:[\"+678 #####\",\"+678 ### ####\"],WF:[\"+681 ## ## ##\",\"+681 ### ## ## ##\"],WS:[\"+685 #####\",\"+685 ## #####\",\"+685 ### ###\"],XK:[\"+383 ## ### ###\",\"+383 ### #####\"],YE:[\"+967 # ### ###\",\"+967 ### ### ###\"],YT:\"+262 ### ## ## ##\",ZA:[\"+27 ## ### ####\",\"+27 ### ### ###\"],ZM:[\"+260 ### ### ###\",\"+260 ## #######\",\"+260 #########\"],ZW:[\"+263 ## #####\",\"+263 ## ### ####\",\"+263 ### ####\",\"+263 #### ######\"]};export{M as default};\n","const t=/^[a-z]{2}$/i,countryCodeEmoji=o=>{if(!t.test(o)){const t=typeof o;throw new TypeError(`cc argument must be an ISO 3166-1 alpha-2 string, but got '${\"string\"===t?o:t}' instead.`)}const e=[...o.toUpperCase()].map(t=>(t.codePointAt(0)??0)+127397);return String.fromCodePoint(...e)};export{countryCodeEmoji};\n","import e from\"./data.min.js\";import{countryCodeEmoji as n}from\"./country-code-emodji.js\";const t=Object.entries(e),divideMask=e=>e.split(/ (.*)/s);function getCodeAndMask(e){let n=\"\",t=\"\";if(Array.isArray(e)){const o=[];for(const t of e){const[e,s]=divideMask(t);n||(n=e),o.push(s)}t=o}else{const[o,s]=divideMask(e);n=o,t=s}return[n,t]}const o=e,s=t.map(([e,n])=>({id:e,mask:n})),a=t.reduce((e,[n,t])=>{const[o,s]=getCodeAndMask(t);return e[n]={code:o,mask:s},e},{}),r=t.map(([e,n])=>{const[t,o]=getCodeAndMask(n);return{id:e,code:t,mask:o}}),d=t.reduce((e,[t,o])=>{const[s,a]=getCodeAndMask(o);return e[t]={code:s,mask:a,flag:n(t)},e},{}),c=t.map(([e,t])=>{const[o,s]=getCodeAndMask(t);return{id:e,code:o,mask:s,flag:n(e)}}),MasksFullMap=e=>{const o=new Intl.DisplayNames([e],{type:\"region\"});return t.reduce((e,[t,s])=>{const[a,r]=getCodeAndMask(s),d=o.of(t)??\"\";return e[t]={code:a,mask:r,name:d,flag:n(t)},e},{})},MasksFull=e=>{const o=new Intl.DisplayNames([e],{type:\"region\"});return t.map(([e,t])=>{const[s,a]=getCodeAndMask(t);return{id:e,code:s,mask:a,name:o.of(e)??\"\",flag:n(e)}})},m=t.reduce((e,[t,o])=>{const[s,a]=getCodeAndMask(o),r=new Intl.DisplayNames([\"en\"],{type:\"region\"});return e[t]={code:s,mask:a,name:r.of(t)??\"\",flag:n(t)},e},{}),i=t.map(([e,t])=>{const[o,s]=getCodeAndMask(t);return{id:e,code:o,mask:s,name:new Intl.DisplayNames([\"en\"],{type:\"region\"}).of(e)??\"\",flag:n(e)}}),g=n;export{r as Masks,s as MasksBase,o as MasksBaseMap,MasksFull,i as MasksFullEn,MasksFullMap,m as MasksFullMapEn,a as MasksMap,c as MasksWithFlag,d as MasksWithFlagMap,g as getFlagEmoji};\n","import{MasksFullMapEn as t,MasksFullMap as n}from\"./entries.js\";function getNavigatorLang(){return\"undefined\"!=typeof navigator&&navigator.language||\"en\"}function getMasksFullMapByLocale(e){return e.toLowerCase().startsWith(\"en\")?t:n(e)}function getCountry(t,n){const e=getMasksFullMapByLocale(n),r=t.toUpperCase();return r in e?{id:r,...e[r]}:{id:\"US\",...e.US}}function toArray(t){return Array.isArray(t)?t:[t]}function countPlaceholders(t){return(t.match(/#/g)||[]).length}function removeCountryCodePrefix(t){return t.replace(/^\\+\\d+\\s?/,\"\")}function pickMaskVariant(t,n){if(1===t.length)return t[0];const e=t.map(t=>({mask:t,count:countPlaceholders(t)})),r=e.filter(t=>t.count>=n).sort((t,n)=>t.count-n.count);if(r.length>0)return r[0].mask;const o=e.sort((t,n)=>n.count-t.count)[0];return o?o.mask:t[0]}function formatDigitsWithMap(t,n){let e=\"\";const r=[];let o=0;const a=n.length,i=t.length;for(let u=0;u<i;u++){const i=t[u];if(\"#\"===i){if(!(o<a))break;e+=n[o],r.push(o),o++}else{const n=-1!==t.indexOf(\"#\",u+1)&&o<a;(e.length>0||n)&&(e+=i,r.push(-1))}}return{display:e,map:r}}export{countPlaceholders,formatDigitsWithMap,getCountry,getMasksFullMapByLocale,getNavigatorLang,pickMaskVariant,removeCountryCodePrefix,toArray};\n","const o=\"https://ipapi.co/json/\",e=1500,p=\"@desource/phone-mask:geo\",s=864e5;export{s as CACHE_EXPIRY_MS,p as CACHE_KEY,o as GEO_IP_API_URL,e as GEO_IP_TIMEOUT_MS};\n","import{GEO_IP_API_URL as t,GEO_IP_TIMEOUT_MS as o,CACHE_KEY as e,CACHE_EXPIRY_MS as r}from\"./consts.js\";async function detectCountryFromGeoIP(e=t,r=o){const c=new AbortController,n=setTimeout(()=>c.abort(),r);try{const t=await fetch(e,{signal:c.signal,headers:{Accept:\"application/json\"}});if(clearTimeout(n),!t.ok)return null;const o=await t.json();return(o.country||o.country_code||o.countryCode||o.country_code2||\"\").toString().toUpperCase()||null}catch{return clearTimeout(n),null}}async function detectByGeoIp(t){try{const o=localStorage.getItem(e);if(o){const c=JSON.parse(o),n=Date.now()-c.ts>r;if(!n&&c.country_code&&t(c.country_code))return c.country_code.toUpperCase();n&&localStorage.removeItem(e)}}catch{}const o=await detectCountryFromGeoIP();if(o&&t(o)){try{localStorage.setItem(e,JSON.stringify({country_code:o,ts:Date.now()}))}catch{}return o}return null}export{detectByGeoIp,detectCountryFromGeoIP};\n","// Shared phone formatting utilities\nimport {\n toArray,\n countPlaceholders,\n removeCountryCodePrefix,\n pickMaskVariant,\n formatDigitsWithMap,\n type MaskFull\n} from '@desource/phone-mask';\nimport type { FormatterHelpers } from './types';\n\nexport function createPhoneFormatter(country: MaskFull): FormatterHelpers {\n const variants = toArray(country.mask);\n const variantsDigits = variants.map((m) => countPlaceholders(removeCountryCodePrefix(m)));\n const maxDigits = Math.max(...variantsDigits);\n\n const getMask = (digitLength: number) => {\n const mask = pickMaskVariant(variants, digitLength);\n return removeCountryCodePrefix(mask);\n };\n\n return {\n formatDisplay: (digits: string) => {\n const template = getMask(digits.length);\n return formatDigitsWithMap(template, digits).display;\n },\n\n getMaxDigits: () => maxDigits,\n\n getPlaceholder: () => {\n // Always use minimal mask as a placeholder\n const template = getMask(0);\n return template;\n },\n\n getCaretPosition: (digitIndex: number) => {\n const template = getMask(digitIndex);\n const { display, map } = formatDigitsWithMap(template, '0'.repeat(digitIndex));\n\n for (let i = 0; i < map.length; i++) {\n if (map[i] === digitIndex) return i;\n }\n if (digitIndex >= map.length) return display.length;\n\n for (let i = 0; i < map.length; i++) {\n if (map[i]! > digitIndex) return i;\n }\n return display.length;\n },\n\n getDigitRange: (digits: string, selStart: number, selEnd: number) => {\n const template = getMask(digits.length);\n const { map } = formatDigitsWithMap(template, digits);\n\n let min = Infinity;\n let max = -Infinity;\n\n for (let i = selStart; i < selEnd && i < map.length; i++) {\n const digitIdx = map[i];\n if (digitIdx !== undefined && digitIdx >= 0) {\n min = Math.min(min, digitIdx);\n max = Math.max(max, digitIdx);\n }\n }\n\n return min === Infinity ? null : [min, max + 1];\n },\n\n isComplete: (digits: string) => {\n return variantsDigits.includes(digits.length);\n }\n };\n}\n\n/**\n * Caret manipulation helper\n */\nexport function setCaret(el: HTMLInputElement | null, position: number): void {\n if (!el) return;\n try {\n el.setSelectionRange(position, position);\n } catch {\n // Silently fail if element doesn't support selection\n }\n}\n\n/**\n * Extract digits from any string\n */\nexport function extractDigits(value: string, maxLength?: number): string {\n const digits = value.replace(/\\D/g, '');\n return maxLength ? digits.slice(0, maxLength) : digits;\n}\n\n/**\n * Parse selection range for digit operations\n */\nexport function getSelection(el: HTMLInputElement | null): [number, number] {\n if (!el) return [0, 0];\n return [el.selectionStart ?? 0, el.selectionEnd ?? 0];\n}\n","export const Delimiters = [' ', '-', '(', ')'];\nexport const NavigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'Tab'];\nexport const InvalidPattern = /[^\\d\\s\\-()]/;\n","import React, {\n useImperativeHandle,\n useRef,\n useState,\n useEffect,\n useCallback,\n useMemo,\n type CSSProperties,\n type Ref\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n getNavigatorLang,\n getCountry,\n getMasksFullMapByLocale,\n detectByGeoIp,\n type CountryKey,\n type MaskFull\n} from '@desource/phone-mask';\nimport { createPhoneFormatter, extractDigits, setCaret, getSelection } from '../utils';\nimport { Delimiters, NavigationKeys, InvalidPattern } from '../consts';\nimport type { PhoneInputProps, PhoneInputRef, PhoneNumber } from '../types';\n\n/** Get all countries */\nfunction getCountries(locale: string): MaskFull[] {\n const map = getMasksFullMapByLocale(locale);\n\n return Object.entries(map).map(([id, data]) => ({ id: id as CountryKey, ...data }));\n}\n\ntype PhoneInputComponent = PhoneInputProps & { ref?: Ref<PhoneInputRef> };\n\nexport const PhoneInput = ({ ref, ...props }: PhoneInputComponent) => {\n const {\n value = '',\n country: propCountry,\n detect = true,\n locale: propLocale,\n size = 'normal',\n theme = 'auto',\n disabled = false,\n readonly = false,\n showCopy = true,\n showClear = false,\n withValidity = true,\n searchPlaceholder = 'Search country or code...',\n noResultsText = 'No countries found',\n clearButtonLabel = 'Clear phone number',\n dropdownClass = '',\n disableDefaultStyles = false,\n onChange,\n onPhoneChange,\n onCountryChange,\n onValidationChange,\n onFocus,\n onBlur,\n onCopy,\n onClear,\n renderActionsBefore,\n renderFlag,\n renderCopySvg,\n renderClearSvg\n } = props;\n\n const telRef = useRef<HTMLInputElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const liveRef = useRef<HTMLDivElement>(null);\n const selectorRef = useRef<HTMLDivElement>(null);\n\n const locale = propLocale || getNavigatorLang();\n const [country, setCountry] = useState<MaskFull>(() => getCountry(propCountry || 'US', locale));\n const [digits, setDigits] = useState<string>('');\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const [search, setSearch] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const [copied, setCopied] = useState(false);\n const [isCopying, setIsCopying] = useState(false);\n const [dropdownStyle, setDropdownStyle] = useState<CSSProperties>({});\n const [showValidationHint, setShowValidationHint] = useState(false);\n const validationTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const copyTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [hasDropdown, setHasDropdown] = useState<boolean>(!propCountry);\n\n const formatter = useMemo(() => createPhoneFormatter(country), [country]);\n const countries = useMemo(() => getCountries(locale), [locale]);\n\n const displayValue = formatter.formatDisplay(digits);\n const displayPlaceholder = formatter.getPlaceholder();\n const isComplete = formatter.isComplete(digits);\n const isEmpty = digits.length === 0;\n const shouldShowWarn = showValidationHint && !isEmpty && !isComplete;\n\n const full = `${country.code}${digits}`;\n const fullFormatted = digits ? `${country.code} ${displayValue}` : '';\n\n const filteredCountries = useMemo(() => {\n const raw = search.trim();\n if (!raw) return countries;\n const q = raw.toUpperCase();\n const qDigits = q.replace(/\\D/g, '');\n const isNumeric = qDigits.length > 0;\n\n return countries\n .map((c) => {\n const nameUpper = c.name.toUpperCase();\n const idUpper = c.id.toUpperCase();\n const codeUpper = c.code.toUpperCase();\n const codeDigits = c.code.replace(/\\D/g, '');\n let score = 0;\n if (nameUpper.startsWith(q)) score = 1000;\n else if (nameUpper.includes(q)) score = 500;\n\n if (codeUpper.startsWith(q)) score += 100;\n else if (codeUpper.includes(q)) score += 50;\n\n if (idUpper === q) score += 200;\n else if (idUpper.startsWith(q)) score += 150;\n\n if (isNumeric && codeDigits.startsWith(qDigits)) score += 80;\n else if (isNumeric && codeDigits.includes(qDigits)) score += 40;\n\n return { country: c, score };\n })\n .filter((x) => x.score > 0)\n .sort((a, b) => (b.score !== a.score ? b.score - a.score : a.country.name.localeCompare(b.country.name)))\n .map((x) => x.country);\n }, [countries, search]);\n\n const inactive = disabled || readonly;\n const showCopyButton = showCopy && !isEmpty && !disabled;\n const showClearButton = showClear && !isEmpty && !inactive;\n\n // Country initialization and detection with cache + locale fallback\n useEffect(() => {\n setHasDropdown(!propCountry && countries.length > 1);\n\n const hasCountry = (code?: string | null) => {\n if (!code) return false;\n const id = code.toUpperCase();\n return countries.some((c) => c.id === id);\n };\n\n const detectFromLocale = (): string | null => {\n const lang = typeof navigator !== 'undefined' && navigator.language ? navigator.language : '';\n // Use Intl.Locale when available\n try {\n if (Intl.Locale) {\n const loc = new Intl.Locale(lang);\n if (loc?.region && hasCountry(loc.region)) return loc.region.toUpperCase();\n }\n } catch {\n /* ignore */\n }\n const parts = lang.split(/[-_]/);\n if (parts.length > 1 && hasCountry(parts[1])) return parts[1].toUpperCase();\n return null;\n };\n\n (async () => {\n if (propCountry && hasCountry(propCountry)) {\n const newCountry = getCountry(propCountry, locale);\n setCountry((prev) => {\n if (prev.id === newCountry.id) return prev;\n onCountryChange?.(newCountry);\n return newCountry;\n });\n return;\n }\n if (!detect) return;\n const geo = await detectByGeoIp(hasCountry);\n if (geo) {\n const detected = getCountry(geo, locale);\n setCountry((prev) => {\n if (prev.id === detected.id) return prev;\n onCountryChange?.(detected);\n return detected;\n });\n return;\n }\n const loc = detectFromLocale();\n if (loc) {\n const detected = getCountry(loc, locale);\n setCountry((prev) => {\n if (prev.id === detected.id) return prev;\n onCountryChange?.(detected);\n return detected;\n });\n }\n })();\n }, [propCountry, detect, countries, locale]);\n\n // Clamp digits when country or formatter changes\n useEffect(() => {\n const maxDigits = formatter.getMaxDigits();\n if (digits.length > maxDigits) {\n setDigits((d) => d.slice(0, maxDigits));\n }\n }, [formatter]);\n\n // Sync value prop\n useEffect(() => {\n const incomingDigits = extractDigits(value || '');\n if (incomingDigits !== digits) {\n setDigits(incomingDigits);\n }\n }, [value]);\n\n // Notify validation changes\n useEffect(() => {\n onValidationChange?.(isComplete);\n }, [isComplete, onValidationChange]);\n\n // Emit onChange and onPhoneChange\n const emitChange = useCallback(() => {\n onChange?.(digits);\n const phoneData: PhoneNumber = { full, fullFormatted, digits };\n onPhoneChange?.(phoneData);\n }, [digits, full, fullFormatted, onChange, onPhoneChange]);\n\n useEffect(() => {\n emitChange();\n }, [emitChange]);\n\n // Input handlers\n const handleBeforeInput = useCallback((e: InputEvent) => {\n const data = e.data;\n if (e.inputType !== 'insertText' || !data) return;\n const el = telRef.current;\n if (!el) return;\n if (InvalidPattern.test(data) || (data === ' ' && el.value.endsWith(' '))) {\n e.preventDefault();\n }\n }, []);\n\n const handleInput = useCallback(() => {\n const el = telRef.current;\n if (!el || inactive) return;\n const raw = el.value || '';\n const maxDigits = formatter.getMaxDigits();\n const newDigits = extractDigits(raw, maxDigits);\n setDigits(newDigits);\n setTimeout(() => {\n const pos = formatter.getCaretPosition(newDigits.length);\n setCaret(el, pos);\n }, 0);\n // validation hint debounce (500ms)\n setShowValidationHint(false);\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n if (newDigits.length > 0) {\n validationTimerRef.current = setTimeout(() => {\n setShowValidationHint(true);\n }, 500);\n }\n }, [formatter, inactive]);\n\n const handleKeydown = useCallback(\n (e: KeyboardEvent) => {\n if (inactive) return;\n const el = telRef.current;\n if (!el) return;\n\n if (e.ctrlKey || e.metaKey || e.altKey || NavigationKeys.includes(e.key)) return;\n\n const [selStart, selEnd] = getSelection(el);\n\n // debounce validation hint during typing (300ms)\n setShowValidationHint(false);\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n const scheduleHint = () => {\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n validationTimerRef.current = setTimeout(() => {\n setShowValidationHint(true);\n }, 300);\n };\n\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (selStart !== selEnd) {\n const range = formatter.getDigitRange(digits, selStart, selEnd);\n if (range) {\n const [start, end] = range;\n setDigits(digits.slice(0, start) + digits.slice(end));\n setTimeout(() => setCaret(el, formatter.getCaretPosition(start)), 0);\n }\n } else if (selStart > 0) {\n let prevPos = selStart - 1;\n while (prevPos >= 0 && Delimiters.includes(el.value[prevPos]!)) prevPos--;\n if (prevPos >= 0) {\n const range = formatter.getDigitRange(digits, prevPos, prevPos + 1);\n if (range) {\n const [start] = range;\n setDigits(digits.slice(0, start) + digits.slice(start + 1));\n setTimeout(() => setCaret(el, formatter.getCaretPosition(start)), 0);\n }\n }\n }\n scheduleHint();\n return;\n }\n\n if (e.key === 'Delete') {\n e.preventDefault();\n if (selStart !== selEnd) {\n const range = formatter.getDigitRange(digits, selStart, selEnd);\n if (range) {\n const [start, end] = range;\n setDigits(digits.slice(0, start) + digits.slice(end));\n setTimeout(() => setCaret(el, formatter.getCaretPosition(start)), 0);\n }\n } else if (selStart < el.value.length) {\n const range = formatter.getDigitRange(digits, selStart, selStart + 1);\n if (range) {\n const [start] = range;\n setDigits(digits.slice(0, start) + digits.slice(start + 1));\n setTimeout(() => setCaret(el, formatter.getCaretPosition(start)), 0);\n }\n }\n scheduleHint();\n return;\n }\n\n if (/^[0-9]$/.test(e.key)) {\n if (digits.length >= formatter.getMaxDigits()) e.preventDefault();\n scheduleHint();\n return;\n }\n\n if (e.key.length === 1) e.preventDefault();\n scheduleHint();\n },\n [inactive, formatter, digits]\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent) => {\n if (inactive) return;\n e.preventDefault();\n const el = telRef.current;\n if (!el) return;\n\n const text = e.clipboardData?.getData('text') || '';\n const maxDigits = formatter.getMaxDigits();\n const pastedDigits = extractDigits(text, maxDigits);\n if (!pastedDigits) return;\n\n const [selStart, selEnd] = getSelection(el);\n if (selStart !== selEnd) {\n const range = formatter.getDigitRange(digits, selStart, selEnd);\n if (range) {\n const [start, end] = range;\n const newDigits = extractDigits(digits.slice(0, start) + pastedDigits + digits.slice(end), maxDigits);\n setDigits(newDigits);\n setTimeout(() => setCaret(el, formatter.getCaretPosition(start + pastedDigits.length)), 0);\n }\n } else {\n const range = formatter.getDigitRange(digits, selStart, selStart);\n const insertIndex = range ? range[0] : digits.length;\n const newDigits = extractDigits(\n digits.slice(0, insertIndex) + pastedDigits + digits.slice(insertIndex),\n maxDigits\n );\n setDigits(newDigits);\n setTimeout(() => setCaret(el, formatter.getCaretPosition(insertIndex + pastedDigits.length)), 0);\n }\n // show validation hint after paste (300ms)\n setShowValidationHint(false);\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n validationTimerRef.current = setTimeout(() => {\n setShowValidationHint(true);\n }, 300);\n },\n [inactive, formatter, digits]\n );\n\n // Close dropdown with animation\n const closeDropdown = useCallback(() => {\n if (!dropdownOpen) return;\n setIsClosing(true);\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n closeTimerRef.current = setTimeout(() => {\n setDropdownOpen(false);\n setIsClosing(false);\n }, 200);\n }, [dropdownOpen]);\n\n // Input focus behavior (close dropdown, keep existing hint state)\n const handleFocusInput = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n closeDropdown();\n onFocus?.(e);\n },\n [onFocus, closeDropdown]\n );\n\n // Attach native event listeners\n useEffect(() => {\n const el = telRef.current;\n if (!el) return;\n\n const beforeInputHandler = handleBeforeInput as unknown as (evt: Event) => void;\n const keydownHandler = handleKeydown as unknown as (evt: Event) => void;\n const pasteHandler = handlePaste as unknown as (evt: Event) => void;\n\n el.addEventListener('beforeinput', beforeInputHandler);\n el.addEventListener('keydown', keydownHandler);\n el.addEventListener('paste', pasteHandler);\n\n return () => {\n el.removeEventListener('beforeinput', beforeInputHandler);\n el.removeEventListener('keydown', keydownHandler);\n el.removeEventListener('paste', pasteHandler);\n };\n }, [handleBeforeInput, handleKeydown, handlePaste]);\n\n // Country selection\n const selectCountry = useCallback(\n (code: CountryKey) => {\n const newCountry = getCountry(code, locale);\n setCountry(newCountry);\n closeDropdown();\n setSearch('');\n setFocusedIndex(0);\n onCountryChange?.(newCountry);\n setTimeout(() => telRef.current?.focus(), 0);\n },\n [locale, onCountryChange, closeDropdown]\n );\n\n // Dropdown positioning\n const positionDropdown = useCallback(() => {\n if (!rootRef.current) return;\n const rect = rootRef.current.getBoundingClientRect();\n setDropdownStyle({\n top: `${rect.bottom + window.scrollY + 8}px`,\n left: `${rect.left + window.scrollX}px`,\n width: `${rect.width}px`\n });\n }, []);\n\n useEffect(() => {\n if (!dropdownOpen) return;\n\n positionDropdown();\n const focusTimer = setTimeout(() => searchRef.current?.focus({ preventScroll: true }), 0);\n\n const onDocClick = (ev: Event) => {\n const target = ev.target as Node | null;\n const dropdownEl = dropdownRef.current;\n const selectorEl = selectorRef.current;\n if (!target) return;\n if (dropdownEl?.contains(target)) return;\n if (selectorEl?.contains(target)) return;\n closeDropdown();\n };\n\n window.addEventListener('resize', positionDropdown);\n window.addEventListener('scroll', positionDropdown, true);\n window.addEventListener('click', onDocClick, true);\n\n return () => {\n clearTimeout(focusTimer);\n window.removeEventListener('resize', positionDropdown);\n window.removeEventListener('scroll', positionDropdown, true);\n window.removeEventListener('click', onDocClick, true);\n };\n }, [dropdownOpen, positionDropdown, closeDropdown]);\n\n // Cleanup timers\n useEffect(() => {\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current);\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n };\n }, []);\n\n // Copy functionality\n const handleCopyClick = useCallback(async () => {\n if (isCopying) return;\n const trimmedValue = fullFormatted.trim();\n if (!trimmedValue) return;\n\n setIsCopying(true);\n try {\n await navigator.clipboard.writeText(trimmedValue);\n setCopied(true);\n onCopy?.(trimmedValue);\n if (liveRef.current) liveRef.current.textContent = 'Phone number copied to clipboard';\n\n if (copyTimerRef.current) clearTimeout(copyTimerRef.current);\n copyTimerRef.current = setTimeout(() => {\n setCopied(false);\n copyTimerRef.current = null;\n }, 1800);\n } catch (err) {\n console.warn('Copy failed', err);\n } finally {\n setIsCopying(false);\n }\n }, [fullFormatted, onCopy, isCopying]);\n\n // Clear functionality\n const handleClearClick = useCallback(() => {\n setDigits('');\n setShowValidationHint(false);\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n onChange?.('');\n onPhoneChange?.({ full: '', fullFormatted: '', digits: '' });\n onClear?.();\n setTimeout(() => telRef.current?.focus(), 0);\n }, [onChange, onPhoneChange, onClear]);\n\n // Imperative handle\n useImperativeHandle(\n ref,\n () => ({\n focus: () => telRef.current?.focus(),\n blur: () => telRef.current?.blur(),\n clear: () => {\n setDigits('');\n setShowValidationHint(false);\n if (validationTimerRef.current) clearTimeout(validationTimerRef.current);\n onChange?.('');\n onPhoneChange?.({ full: '', fullFormatted: '', digits: '' });\n onClear?.();\n },\n selectCountry,\n getFullNumber: () => full,\n getFullFormattedNumber: () => fullFormatted,\n getDigits: () => digits,\n isValid: () => isComplete,\n isComplete: () => isComplete\n }),\n [selectCountry, full, fullFormatted, digits, isComplete, onClear, onChange, onPhoneChange]\n );\n\n const scrollFocusedIntoView = (index: number) => {\n setTimeout(() => {\n const list = dropdownRef.current?.lastElementChild;\n const option = list?.children[index];\n if (!list || !option) return;\n\n // Scroll only the list container with smooth behavior\n const listRect = list.getBoundingClientRect();\n const optionRect = option.getBoundingClientRect();\n\n let scrollAmount = 0;\n\n if (optionRect.top < listRect.top) {\n scrollAmount = list.scrollTop - (listRect.top - optionRect.top); // Option is above visible area\n } else if (optionRect.bottom > listRect.bottom) {\n scrollAmount = list.scrollTop + (optionRect.bottom - listRect.bottom); // Option is below visible area\n } else {\n return; // Already visible, no need to scroll\n }\n\n list.scrollTo({ top: scrollAmount, behavior: 'smooth' });\n }, 0);\n };\n\n // Keyboard navigation for dropdown\n const handleSearchKeydown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedIndex((i) => {\n const next = Math.min(i + 1, filteredCountries.length - 1);\n scrollFocusedIntoView(next);\n return next;\n });\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedIndex((i) => {\n const prev = Math.max(i - 1, 0);\n scrollFocusedIntoView(prev);\n return prev;\n });\n } else if (e.key === 'Enter' && filteredCountries[focusedIndex]) {\n e.preventDefault();\n selectCountry(filteredCountries[focusedIndex]!.id);\n } else if (e.key === 'Escape') {\n closeDropdown();\n }\n },\n [filteredCountries, focusedIndex, selectCountry, closeDropdown]\n );\n\n // Theme class\n const themeClass = useMemo(() => {\n if (theme !== 'auto') return `theme-${theme}`;\n if (typeof window !== 'undefined' && window.matchMedia?.('(prefers-color-scheme: dark)').matches) {\n return 'theme-dark';\n }\n return 'theme-light';\n }, [theme]);\n\n const rootClasses = [\n 'phone-input',\n `size-${size}`,\n themeClass,\n disabled && 'is-disabled',\n readonly && 'is-readonly',\n disableDefaultStyles && 'is-unstyled',\n withValidity && shouldShowWarn && 'is-incomplete',\n withValidity && isComplete && 'is-complete'\n ]\n .filter(Boolean)\n .join(' ');\n\n const actionsCount = +showCopyButton + +showClearButton + (renderActionsBefore ? 1 : 0);\n\n return (\n <>\n <div\n ref={rootRef}\n className={rootClasses}\n style={{ '--pi-actions-count': actionsCount } as CSSProperties}\n role=\"group\"\n aria-label=\"Phone input with country selector\"\n >\n {/* Country Selector */}\n <div className=\"pi-selector\" ref={selectorRef}>\n <button\n type=\"button\"\n className={`pi-selector-btn ${!hasDropdown || readonly ? 'no-dropdown' : ''}`}\n disabled={disabled}\n tabIndex={inactive || !hasDropdown ? -1 : undefined}\n aria-label={`Selected country: ${country.name}`}\n aria-expanded={dropdownOpen}\n aria-haspopup={hasDropdown ? 'listbox' : undefined}\n onClick={() => {\n if (inactive || !hasDropdown) return;\n if (dropdownOpen) {\n closeDropdown();\n } else {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n setIsClosing(false);\n setDropdownOpen(true);\n setFocusedIndex(0);\n }\n }}\n >\n <span className=\"pi-flag\" role=\"img\" aria-label={`${country.name} flag`}>\n {renderFlag ? renderFlag(country) : country.flag}\n </span>\n <span className=\"pi-code\">{country.code}</span>\n {!inactive && hasDropdown && (\n <svg\n className={`pi-chevron ${dropdownOpen ? 'is-open' : ''}`}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 4.5L6 8L9.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n </div>\n\n {/* Input Container */}\n <div className=\"pi-input-wrap\">\n <input\n ref={telRef}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel-national\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n className=\"pi-input\"\n placeholder={displayPlaceholder}\n value={displayValue}\n disabled={disabled}\n readOnly={readonly}\n aria-invalid={shouldShowWarn}\n onInput={handleInput}\n onFocus={handleFocusInput}\n onBlur={onBlur}\n />\n\n {/* Action Buttons */}\n <div className=\"pi-actions\" role=\"toolbar\" aria-label=\"Phone input actions\">\n {renderActionsBefore && renderActionsBefore()}\n\n {showCopyButton && (\n <button\n type=\"button\"\n className={`pi-btn ${copied ? 'is-copied' : ''}`}\n aria-label={copied ? 'Copied' : `Copy ${country.code} ${displayValue}`}\n title={copied ? 'Copied' : 'Copy phone number'}\n onClick={handleCopyClick}\n >\n {renderCopySvg ? (\n renderCopySvg(copied)\n ) : copied ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6.5 11.5L3 8L4.06 6.94L6.5 9.38L11.94 3.94L13 5L6.5 11.5Z\" fill=\"currentColor\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M13.5 5.5V13.5H5.5V5.5H13.5ZM13.5 4H5.5C4.67 4 4 4.67 4 5.5V13.5C4 14.33 4.67 15 5.5 15H13.5C14.33 15 15 14.33 15 13.5V5.5C15 4.67 14.33 4 13.5 4ZM10.5 1H2.5V11H4V2.5H10.5V1Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </button>\n )}\n\n {showClearButton && (\n <button\n type=\"button\"\n className=\"pi-btn\"\n aria-label={clearButtonLabel}\n title={clearButtonLabel}\n onClick={handleClearClick}\n >\n {renderClearSvg ? (\n renderClearSvg()\n ) : (\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </button>\n )}\n </div>\n </div>\n </div>\n\n {/* Dropdown */}\n {dropdownOpen &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={dropdownRef}\n className={`phone-dropdown ${dropdownClass} ${themeClass} ${isClosing ? 'is-closing' : ''}`}\n style={dropdownStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Select country\"\n >\n <div className=\"pi-search-wrap\">\n <input\n ref={searchRef}\n type=\"search\"\n className=\"pi-search\"\n aria-label=\"Search countries\"\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setFocusedIndex(0);\n }}\n onKeyDown={handleSearchKeydown}\n />\n </div>\n <ul className=\"pi-options\" role=\"listbox\" aria-activedescendant={`option-${focusedIndex}`} tabIndex={-1}>\n {filteredCountries.length > 0 ? (\n filteredCountries.map((c, idx) => (\n <li\n key={c.id}\n id={`option-${idx}`}\n role=\"option\"\n className={`pi-option ${idx === focusedIndex ? 'is-focused' : ''} ${\n c.id === country.id ? 'is-selected' : ''\n }`}\n aria-selected={c.id === country.id}\n title={c.name}\n onClick={() => selectCountry(c.id)}\n onMouseEnter={() => setFocusedIndex(idx)}\n >\n <span className=\"pi-flag\" role=\"img\" aria-label={`${c.name} flag`}>\n {renderFlag ? renderFlag(c) : c.flag}\n </span>\n <span className=\"pi-opt-name\">{c.name}</span>\n <span className=\"pi-opt-code\">{c.code}</span>\n </li>\n ))\n ) : (\n <li className=\"pi-empty\">{noResultsText}</li>\n )}\n </ul>\n </div>,\n document.body\n )}\n\n {/* Screen reader announcements */}\n <div ref={liveRef} className=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" />\n </>\n );\n};\n\nPhoneInput.displayName = 'PhoneInput';\n","import { useRef, useState, useEffect, useCallback } from 'react';\nimport { getNavigatorLang, getCountry, detectCountryFromGeoIP, type MaskFull } from '@desource/phone-mask';\nimport { createPhoneFormatter, extractDigits, getSelection, setCaret } from '../utils';\nimport { Delimiters, InvalidPattern, NavigationKeys } from '../consts';\nimport type { UsePhoneMaskOptions, UsePhoneMaskReturn, PhoneNumber } from '../types';\n\n/**\n * Detect country from browser locale.\n */\nfunction detectCountryFromLocale(): string | null {\n try {\n const lang = getNavigatorLang();\n\n try {\n const loc = new Intl.Locale(lang);\n if (loc.region) return loc.region.toUpperCase();\n } catch {\n // Ignore\n }\n\n const parts = lang.split(/[-_]/);\n if (parts.length > 1) return parts[1]?.toUpperCase() || null;\n } catch {\n // Ignore\n }\n\n return null;\n}\n\n/**\n * React hook for phone number masking.\n * Provides low-level phone masking functionality for custom input implementations.\n */\nexport function usePhoneMask(options: UsePhoneMaskOptions = {}): UsePhoneMaskReturn {\n const inputRef = useRef<HTMLInputElement>(null);\n const [digits, setDigits] = useState<string>('');\n const [country, setCountryState] = useState<MaskFull>(() => {\n const locale = options.locale || getNavigatorLang();\n return getCountry(options.country || 'US', locale);\n });\n\n const locale = options.locale || getNavigatorLang();\n const formatter = createPhoneFormatter(country);\n\n const displayValue = formatter.formatDisplay(digits);\n const full = `${country.code}${digits}`;\n const fullFormatted = digits ? `${country.code} ${displayValue}` : '';\n const isComplete = formatter.isComplete(digits);\n const isEmpty = digits.length === 0;\n const shouldShowWarn = !isEmpty && !isComplete;\n\n // Initialize country detection\n useEffect(() => {\n if (!options.detect) return;\n\n (async () => {\n const geoCountry = await detectCountryFromGeoIP();\n if (geoCountry) {\n const detected = getCountry(geoCountry, locale);\n setCountryState(detected);\n options.onCountryChange?.(detected);\n return;\n }\n\n const localeCountry = detectCountryFromLocale();\n if (localeCountry) {\n const detected = getCountry(localeCountry, locale);\n setCountryState(detected);\n options.onCountryChange?.(detected);\n }\n })();\n }, [options.detect]);\n\n // Sync country when prop changes\n useEffect(() => {\n if (options.country) {\n const newCountry = getCountry(options.country, locale);\n if (newCountry.id !== country.id) {\n setCountryState(newCountry);\n options.onCountryChange?.(newCountry);\n }\n }\n }, [options.country, locale]);\n\n // Update display when digits or country change\n useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n el.value = displayValue;\n el.placeholder = formatter.getPlaceholder();\n }, [displayValue, formatter]);\n\n // Notify onChange callback\n useEffect(() => {\n if (options.onChange) {\n const phoneData: PhoneNumber = {\n full,\n fullFormatted,\n digits\n };\n options.onChange(phoneData);\n }\n }, [digits, full, fullFormatted]);\n\n // Event handler: beforeinput\n const handleBeforeInput = useCallback((e: InputEvent) => {\n const data = e.data;\n if (e.inputType !== 'insertText' || !data) return;\n\n const el = inputRef.current;\n if (!el) return;\n\n // Block invalid characters & multiple spaces\n if (InvalidPattern.test(data) || (data === ' ' && el.value.endsWith(' '))) {\n e.preventDefault();\n }\n }, []);\n\n // Event handler: input\n const handleInput = useCallback(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const raw = el.value || '';\n const maxDigits = formatter.getMaxDigits();\n const newDigits = extractDigits(raw, maxDigits);\n\n setDigits(newDigits);\n\n // Set caret position after state update\n setTimeout(() => {\n const pos = formatter.getCaretPosition(newDigits.length);\n setCaret(el, pos);\n }, 0);\n }, [formatter]);\n\n // Event handler: keydown\n const handleKeydown = useCallback(\n (e: KeyboardEvent) => {\n const el = inputRef.current;\n if (!el) return;\n\n // Allow meta & navigation keys\n if (e.ctrlKey || e.metaKey || e.altKey || NavigationKeys.includes(e.key)) return;\n\n const [selStart, selEnd] = getSelection(el);\n\n if (e.key === 'Backspace') {\n e.preventDefault();\n\n if (selStart !== selEnd) {\n const range = formatter.getDigitRange(digits, selStart, selEnd);\n if (range) {\n const [start, end] = range;\n const newDigits = digits.slice(0, start) + digits.slice(end);\n setDigits(newDigits);\n setTimeout(() => {\n const pos = formatter.getCaretPosition(start);\n setCaret(el, pos);\n }, 0);\n }\n return;\n }\n\n if (selStart > 0) {\n const displayStr = el.value;\n let prevPos = selStart - 1;\n while (prevPos >= 0 && Delimiters.includes(displayStr[prevPos]!)) {\n prevPos--;\n }\n\n if (prevPos >= 0) {\n const range = formatter.getDigitRange(digits, prevPos, prevPos + 1);\n if (range) {\n const [start] = range;\n const newDigits = digits.slice(0, start) + digits.slice(start + 1);\n setDigits(newDigits);\n setTimeout(() => {\n const pos = formatter.getCaretPosition(start);\n setCaret(el, pos);\n }, 0);\n }\n }\n }\n return;\n }\n\n if (e.key === 'Delete') {\n e.preventDefault();\n\n if (selStart !== selEnd) {\n const range = formatter.getDigitRange(digits, selStart, selEnd);\n if (range) {\n const [start, end] = range;\n const newDigits = digits.slice(0, start) + digits.slice(end);\n setDigits(newDigits);\n setTimeout(() => {\n const pos = formatter.getCaretPosition(start);\n setCaret(el, pos);\n }, 0);\n }\n return;\n }\n\n if (selStart < el.value.length) {\n const range = formatter.getDigitRange(digits, selStart, selStart + 1);\n if (range) {\n const [start] = range;\n const newDigits = digits.slice(0, start) + digits.slice(start + 1);\n setDigits(newDigits);\n setTimeout(() => {\n const pos = formatter.getCaretPosition(start);\n setCaret(el, pos);\n }, 0);\n }\n }\n return;\n }\n\n // Block max digits\n if (/^[0-9]$/.test(e.key)) {\n if (digits.length >= formatter.getMaxDigits()) {\n e.preventDefault();\n }\n return;\n }\n\n // Block non-numeric\n if (e.key.length === 1) {\n e.preventDefault();\n }\n },\n [digits, formatter]\n );\n\n // Event handler: paste\n const handlePaste = useCallback(\n (e: ClipboardEvent) => {\n e.preventDefault();\n\n const el = inputRef.current;\n if (!el) return;\n\n const text = e.clipboardData?.getData('text') || '';\n const maxDigits = formatter.getMaxDigits();\n const pastedDigits = extractDigits(text, maxDigits);\n\n if (pastedDigits.length === 0) return;\n\n const [selStart, selEnd] = getSelection(el);\n\n if (selStart !== selEnd) {\n const range = formatter.getDigitRange(digits, selStart, selEnd);\n\n if (range) {\n const [start, end] = range;\n const left = digits.slice(0, start);\n const right = digits.slice(end);\n const newDigits = extractDigits(left + pastedDigits + right, maxDigits);\n setDigits(newDigits);\n setTimeout(() => {\n const pos = formatter.getCaretPosition(start + pastedDigits.length);\n setCaret(el, pos);\n }, 0);\n return;\n }\n }\n\n const range = formatter.getDigitRange(digits, selStart, selStart);\n const insertIndex = range ? range[0] : digits.length;\n\n const left = digits.slice(0, insertIndex);\n const right = digits.slice(insertIndex);\n const newDigits = extractDigits(left + pastedDigits + right, maxDigits);\n setDigits(newDigits);\n\n setTimeout(() => {\n const pos = formatter.getCaretPosition(insertIndex + pastedDigits.length);\n setCaret(el, pos);\n }, 0);\n },\n [digits, formatter]\n );\n\n // Attach event listeners\n useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n el.setAttribute('type', 'tel');\n el.setAttribute('inputmode', 'tel');\n el.setAttribute('placeholder', formatter.getPlaceholder());\n\n const beforeInputHandler = handleBeforeInput as unknown as (evt: Event) => void;\n const keydownHandler = handleKeydown as unknown as (evt: Event) => void;\n const pasteHandler = handlePaste as unknown as (evt: Event) => void;\n\n el.addEventListener('beforeinput', beforeInputHandler);\n el.addEventListener('input', handleInput);\n el.addEventListener('keydown', keydownHandler);\n el.addEventListener('paste', pasteHandler);\n\n return () => {\n el.removeEventListener('beforeinput', beforeInputHandler);\n el.removeEventListener('input', handleInput);\n el.removeEventListener('keydown', keydownHandler);\n el.removeEventListener('paste', pasteHandler);\n };\n }, [handleBeforeInput, handleInput, handleKeydown, handlePaste, formatter]);\n\n const setCountry = useCallback(\n (countryCode: string) => {\n const newCountry = getCountry(countryCode, locale);\n setCountryState(newCountry);\n const newFormatter = createPhoneFormatter(newCountry);\n const maxDigits = newFormatter.getMaxDigits();\n if (digits.length > maxDigits) {\n setDigits(digits.slice(0, maxDigits));\n }\n options.onCountryChange?.(newCountry);\n },\n [locale, digits, options]\n );\n\n const clear = useCallback(() => {\n setDigits('');\n const el = inputRef.current;\n if (el) {\n el.value = '';\n }\n }, []);\n\n return {\n ref: inputRef,\n digits,\n full,\n fullFormatted,\n isComplete,\n isEmpty,\n shouldShowWarn,\n country,\n setCountry,\n clear\n };\n}\n","import {\n getFlagEmoji,\n countPlaceholders,\n formatDigitsWithMap,\n pickMaskVariant,\n removeCountryCodePrefix,\n toArray\n} from '@desource/phone-mask';\n\nexport { PhoneInput } from './components/PhoneInput';\nexport { usePhoneMask } from './hooks/usePhoneMask';\nexport type {\n PhoneInputProps,\n PhoneInputRef,\n PhoneNumber,\n UsePhoneMaskOptions,\n UsePhoneMaskReturn,\n Size as PhoneInputSize,\n Theme as PhoneInputTheme\n} from './types';\n\nexport type {\n CountryKey as PCountryKey,\n MaskBase as PMaskBase,\n MaskBaseMap as PMaskBaseMap,\n Mask as PMask,\n MaskMap as PMaskMap,\n MaskWithFlag as PMaskWithFlag,\n MaskWithFlagMap as PMaskWithFlagMap,\n MaskFull as PMaskFull,\n MaskFullMap as PMaskFullMap\n} from '@desource/phone-mask';\n\nexport const PMaskHelpers = {\n getFlagEmoji,\n countPlaceholders,\n formatDigitsWithMap,\n pickMaskVariant,\n removeCountryCodePrefix,\n toArray\n};\n"],"names":["M","t","countryCodeEmoji","o","e","divideMask","getCodeAndMask","n","s","a","MasksFullMap","r","m","g","getNavigatorLang","getMasksFullMapByLocale","getCountry","toArray","countPlaceholders","removeCountryCodePrefix","pickMaskVariant","formatDigitsWithMap","i","u","p","detectCountryFromGeoIP","c","detectByGeoIp","createPhoneFormatter","country","variants","variantsDigits","maxDigits","getMask","digitLength","mask","digits","template","digitIndex","display","map","selStart","selEnd","min","max","digitIdx","setCaret","el","position","extractDigits","value","maxLength","getSelection","Delimiters","NavigationKeys","InvalidPattern","getCountries","locale","id","data","PhoneInput","ref","props","propCountry","detect","propLocale","size","theme","disabled","readonly","showCopy","showClear","withValidity","searchPlaceholder","noResultsText","clearButtonLabel","dropdownClass","disableDefaultStyles","onChange","onPhoneChange","onCountryChange","onValidationChange","onFocus","onBlur","onCopy","onClear","renderActionsBefore","renderFlag","renderCopySvg","renderClearSvg","telRef","useRef","rootRef","dropdownRef","searchRef","liveRef","selectorRef","setCountry","useState","setDigits","dropdownOpen","setDropdownOpen","isClosing","setIsClosing","search","setSearch","focusedIndex","setFocusedIndex","copied","setCopied","isCopying","setIsCopying","dropdownStyle","setDropdownStyle","showValidationHint","setShowValidationHint","validationTimerRef","closeTimerRef","copyTimerRef","hasDropdown","setHasDropdown","formatter","useMemo","countries","displayValue","displayPlaceholder","isComplete","isEmpty","shouldShowWarn","full","fullFormatted","filteredCountries","raw","q","qDigits","isNumeric","nameUpper","idUpper","codeUpper","codeDigits","score","x","b","inactive","showCopyButton","showClearButton","useEffect","hasCountry","code","detectFromLocale","lang","loc","parts","newCountry","prev","geo","detected","d","incomingDigits","emitChange","useCallback","handleBeforeInput","handleInput","newDigits","pos","handleKeydown","scheduleHint","range","start","end","prevPos","handlePaste","text","pastedDigits","insertIndex","closeDropdown","handleFocusInput","beforeInputHandler","keydownHandler","pasteHandler","selectCountry","positionDropdown","rect","focusTimer","onDocClick","ev","target","dropdownEl","selectorEl","handleCopyClick","trimmedValue","err","handleClearClick","useImperativeHandle","scrollFocusedIntoView","index","list","option","listRect","optionRect","scrollAmount","handleSearchKeydown","next","themeClass","rootClasses","actionsCount","jsxs","Fragment","jsx","createPortal","idx","detectCountryFromLocale","usePhoneMask","options","inputRef","setCountryState","geoCountry","localeCountry","phoneData","displayStr","left","right","countryCode","clear","PMaskHelpers","getFlagEmoji"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../phone-mask/dist/esm/data.min.js","../../../phone-mask/dist/esm/country-code-emodji.js","../../../phone-mask/dist/esm/entries.js","../../../phone-mask/dist/esm/utils.js","../../../phone-mask/dist/esm/handlers.js","../../../phone-mask/dist/esm/formatter.js","../../../phone-mask/dist/esm/services/geoip/consts.js","../../../phone-mask/dist/esm/services/geoip/utils.js","../../src/hooks/internal/useFormatter.ts","../../src/hooks/internal/useCountry.ts","../../src/hooks/utility/useTimer.ts","../../src/hooks/internal/useValidationHint.ts","../../src/hooks/internal/useInputHandlers.ts","../../src/hooks/internal/useCountrySelector.ts","../../src/hooks/utility/useClipboard.ts","../../src/hooks/internal/useCopyAction.ts","../../src/hooks/internal/useTheme.ts","../../src/components/PhoneInput.tsx","../../src/hooks/usePhoneMask.ts","../../src/index.ts"],"sourcesContent":["const M={AC:\"+247 #####\",AD:[\"+376 ### ###\",\"+376 #### ####\"],AE:[\"+971 # ### ####\",\"+971 ## ### ####\",\"+971 ### ######\",\"+971 ### # #####\"],AF:\"+93 ## ### ####\",AG:\"+1 ###-###-####\",AI:\"+1 ###-###-####\",AL:[\"+355 ## ### ###\",\"+355 ## ### ####\",\"+355 ### ####\",\"+355 ### ###\",\"+355 ### #####\"],AM:[\"+374 ## ######\",\"+374 ### ## ###\"],AO:\"+244 ### ### ###\",AR:[\"+54 ## ####-####\",\"+54 # ## ####-####\",\"+54 ###-###-####\"],AS:\"+1 ###-###-####\",AT:[\"+43 # #########\",\"+43 ### ######\"],AU:[\"+61 # #### ####\",\"+61 ### ### ###\",\"+61 #### ### ###\",\"+61 ## ### ##\"],AW:\"+297 ### ####\",AX:[\"+358 ## #######\",\"+358 ### ######\"],AZ:[\"+994 ## ### ## ##\",\"+994 ### ## ## ##\"],BA:[\"+387 ## ###-###\",\"+387 ## ### ###\"],BB:\"+1 ###-###-####\",BD:[\"+880 #-#######\",\"+880 ####-######\",\"+880 ###-#######\"],BE:[\"+32 ## ## ## ##\",\"+32 ### ## ## ##\",\"+32 ### ## ###\"],BF:\"+226 ## ## ## ##\",BG:[\"+359 # ### ###\",\"+359 ## ### ###\",\"+359 ### ## ###\"],BH:\"+973 #### ####\",BI:\"+257 ## ## ## ##\",BJ:[\"+229 ## ## ## ## ##\",\"+229 ## ## ## ##\"],BL:\"+590 ### ## ## ##\",BM:\"+1 ###-###-####\",BN:\"+673 ### ####\",BO:[\"+591 # #######\",\"+591 ########\",\"+591 ### ## ####\"],BQ:\"+599 ### ####\",BR:[\"+55 ## ####-####\",\"+55 ## #####-####\",\"+55 ### ## ####\",\"+55 ####-####\"],BS:\"+1 ###-###-####\",BT:[\"+975 # ### ###\",\"+975 ## ## ## ##\"],BW:[\"+267 ### ####\",\"+267 ## ### ###\",\"+267 #### ### ###\",\"+267 ## #####\"],BY:[\"+375 ### ##-##-##\",\"+375 ## ###-##-##\",\"+375 ### ### ####\"],BZ:[\"+501 ###-####\",\"+501 #-###-####-###\"],CA:\"+1 ###-###-####\",CC:[\"+61 # #### ####\",\"+61 ### ### ###\",\"+61 #### ### ###\"],CD:[\"+243 ## #####\",\"+243 ### ### ###\"],CF:\"+236 ## ## ## ##\",CG:[\"+242 ## ### ####\",\"+242 # #### ####\"],CH:[\"+41 ## ### ## ##\",\"+41 ### ### ###\"],CI:[\"+225 ## ## # #####\",\"+225 ## ## ## ####\"],CK:\"+682 ## ###\",CL:[\"+56 ### ### ###\",\"+56 # #### ####\",\"+56 ### ### ####\",\"+56 ## ### ####\"],CM:[\"+237 # ## ## ## ##\",\"+237 ## ## ## ##\"],CN:[\"+86 ## #### ####\",\"+86 ### #### ####\",\"+86 ### ### ####\",\"+86 ########\"],CO:[\"+57 ### #######\",\"+57 # ### #######\"],CR:[\"+506 #### ####\",\"+506 ###-###-####\"],CU:[\"+53 # #######\",\"+53 ### #######\"],CV:\"+238 ### ## ##\",CW:[\"+599 # ### ####\",\"+599 ### ####\"],CX:[\"+61 # #### ####\",\"+61 ### ### ###\",\"+61 #### ### ###\"],CY:\"+357 ## ######\",CZ:\"+420 ### ### ###\",DE:[\"+49 ## ######\",\"+49 #### #######\",\"+49 ### ##########\",\"+49 ### # ######\",\"+49 ### # ####\",\"+49 ### #### ####\",\"+49 ########\"],DJ:\"+253 ## ## ## ##\",DK:\"+45 ## ## ## ##\",DM:\"+1 ###-###-####\",DO:\"+1 ###-###-####\",DZ:[\"+213 ## ## ## ##\",\"+213 ### ## ## ##\",\"+213 ## ### ## ##\"],EC:[\"+593 #-###-####\",\"+593 ## ### ####\",\"+593 #### ### ####\"],EE:[\"+372 ### ####\",\"+372 #### ####\",\"+372 ## ## ####\"],EG:[\"+20 # ########\",\"+20 ## ########\",\"+20 ### ### ####\"],EH:[\"+212 # ## ## ## ##\",\"+212 ##-#######\"],ER:\"+291 # ### ###\",ES:[\"+34 ### ## ## ##\",\"+34 ### ### ###\"],ET:\"+251 ## ### ####\",FI:[\"+358 ## #######\",\"+358 ### ######\"],FJ:[\"+679 ### ####\",\"+679 #### ### ####\"],FK:\"+500 #####\",FM:\"+691 ### ####\",FO:\"+298 ######\",FR:[\"+33 # ## ## ## ##\",\"+33 ### ## ## ##\"],GA:\"+241 ## ## ## ##\",GB:[\"+44 ### ### ####\",\"+44 #### ######\",\"+44 ## #### ####\"],GD:\"+1 ###-###-####\",GE:[\"+995 ## ### ## ##\",\"+995 ### ## ## ##\",\"+995 ### ### ###\"],GF:\"+594 ### ## ## ##\",GG:[\"+44 #### ######\",\"+44 ### ### ####\",\"+44 ## #### ####\"],GH:[\"+233 ## ### ####\",\"+233 ### #####\"],GI:[\"+350 ### #####\",\"+350 ########\"],GL:\"+299 ## ## ##\",GM:\"+220 ### ####\",GN:[\"+224 ## ## ## ##\",\"+224 ### ## ## ##\"],GP:\"+590 ### ## ## ##\",GQ:[\"+240 ### ### ###\",\"+240 ### ######\"],GR:[\"+30 ## #### ####\",\"+30 ### ### ####\"],GT:[\"+502 #### ####\",\"+502 #### ### ####\"],GU:\"+1 ###-###-####\",GW:[\"+245 ### ### ###\",\"+245 ### ####\"],GY:\"+592 ### ####\",HK:[\"+852 #### ####\",\"+852 ### ### ###\",\"+852 ### ## ### ###\"],HN:[\"+504 ####-####\",\"+504 ###########\"],HR:[\"+385 # #### ###\",\"+385 ## ### ####\",\"+385 ### ### ###\",\"+385 ## ## ###\",\"+385 ## ### ###\"],HT:\"+509 ## ## ####\",HU:[\"+36 # ### ####\",\"+36 ## ### ####\",\"+36 ## ### ###\"],ID:[\"+62 ## #######\",\"+62 ###-###-###\",\"+62 ### #######\",\"+62 ### # ### ###\",\"+62 ### ### ####\"],IE:[\"+353 ## #####\",\"+353 ## ### ####\",\"+353 #### ### ###\",\"+353 ### ### ###\"],IL:[\"+972 #-###-####\",\"+972 ##-###-####\",\"+972 #-###-###-###\"],IM:[\"+44 #### ######\",\"+44 ### ### ####\",\"+44 ## #### ####\"],IN:[\"+91 ##### #####\",\"+91 #### ## ####\",\"+91 #### ### ### ###\",\"+91 #### ### ####\"],IO:\"+246 ### ####\",IQ:[\"+964 # ### ####\",\"+964 ### ### ####\"],IR:[\"+98 ## #### ####\",\"+98 ### ### ####\"],IS:\"+354 ### ####\",IT:[\"+39 ## #### ####\",\"+39 ### ### ####\",\"+39 ### ### ###\"],JE:[\"+44 #### ######\",\"+44 ### ### ####\",\"+44 ## #### ####\"],JM:\"+1 ###-###-####\",JO:[\"+962 # ### ####\",\"+962 # #### ####\",\"+962 ### #####\",\"+962 ## #######\"],JP:[\"+81 #-####-####\",\"+81 ##-####-####\",\"+81 ###-###-###\",\"+81 ##-###-####\"],KE:[\"+254 ## #######\",\"+254 ### ######\",\"+254 ### ### ###\"],KG:[\"+996 ### ### ###\",\"+996 ### ### # ##\"],KH:[\"+855 ## ### ###\",\"+855 #### ### ###\"],KI:[\"+686 #####\",\"+686 ########\"],KM:\"+269 ### ## ##\",KN:\"+1 ###-###-####\",KP:[\"+850 # ### ####\",\"+850 ### ### ####\"],KR:[\"+82 #-###-####\",\"+82 ##-####-####\",\"+82 ##-###-####\"],KW:[\"+965 #### ####\",\"+965 ### #####\",\"+965 #### ###\"],KY:\"+1 ###-###-####\",KZ:[\"+7 ##### # ## ##\",\"+7 ### ### ####\",\"+7 ### ###-##-##\"],LA:[\"+856 ## ### ###\",\"+856 ## ## ### ###\"],LB:[\"+961 # ### ###\",\"+961 ## ### ###\"],LC:\"+1 ###-###-####\",LI:[\"+423 ### ## ##\",\"+423 ### ### ###\"],LK:[\"+94 ### ### ###\",\"+94 ## ### ####\"],LR:[\"+231 ## ### ###\",\"+231 ## ### ####\"],LS:\"+266 #### ####\",LT:[\"+370 ### #####\",\"+370 ### ## ###\"],LU:[\"+352 ## ## ## ##\",\"+352 ### ### ###\",\"+352 ### ## ###\"],LV:\"+371 ## ### ###\",LY:\"+218 ##-#######\",MA:[\"+212 # ## ## ## ##\",\"+212 ##-#######\"],MC:[\"+377 ## ## ## ##\",\"+377 # ## ## ## ##\"],MD:[\"+373 ## ### ###\",\"+373 ### ## ###\",\"+373 ### #####\"],ME:\"+382 ## ### ###\",MF:\"+590 ### ## ## ##\",MG:\"+261 ## ## ### ##\",MH:\"+692 ###-####\",MK:[\"+389 # ### ####\",\"+389 ## ### ###\",\"+389 ### # ## ##\"],ML:\"+223 ## ## ## ##\",MM:[\"+95 # ### ###\",\"+95 # ### ####\",\"+95 ### ### ####\"],MN:\"+976 #### ####\",MO:[\"+853 #### ####\",\"+853 #### ###\"],MP:\"+1 ###-###-####\",MQ:\"+596 ### ## ## ##\",MR:\"+222 ## ## ## ##\",MS:\"+1 ###-###-####\",MT:\"+356 #### ####\",MU:[\"+230 #### ####\",\"+230 ### ####\"],MV:[\"+960 ###-####\",\"+960 ### ### ####\"],MW:[\"+265 # ### ###\",\"+265 ### ## ## ##\"],MX:\"+52 ### ### ####\",MY:[\"+60 #-#### ####\",\"+60 ##-### ####\",\"+60 #-###-##-####\",\"+60 ###-### ####\"],MZ:[\"+258 ## ### ###\",\"+258 ## ### ####\",\"+258 ### ### ###\"],NA:[\"+264 ## ### ###\",\"+264 ## ### ####\",\"+264 ### ### ###\"],NC:\"+687 ##.##.##\",NE:[\"+227 ## ## ## ##\",\"+227 ## ### ###\"],NF:[\"+672 ## ####\",\"+672 # #####\"],NG:[\"+234 #### ## ####\",\"+234 ### ### ####\",\"+234 ### #### ####\"],NI:\"+505 #### ####\",NL:[\"+31 ## ### ####\",\"+31 # ########\",\"+31 ### ####\",\"+31 ## #######\"],NO:[\"+47 ## ## ## ##\",\"+47 ### ## ###\"],NP:[\"+977 #-#######\",\"+977 ###-#######\",\"+977 ###########\"],NR:\"+674 ### ####\",NU:[\"+683 ####\",\"+683 ### ####\"],NZ:[\"+64 # ### ####\",\"+64 ## ### ####\",\"+64 ### ### ###\"],OM:[\"+968 ## ######\",\"+968 #### ####\",\"+968 ### #####\"],PA:[\"+507 ###-####\",\"+507 ####-####\"],PE:[\"+51 # #######\",\"+51 ### ### ###\",\"+51 ### #####\"],PF:[\"+689 ## ## ## ##\",\"+689 ### ## ## ##\"],PG:[\"+675 ### ####\",\"+675 #### ####\"],PH:[\"+63 # #### ####\",\"+63 ### ### ####\",\"+63 #### # ### ####\"],PK:[\"+92 ## ########\",\"+92 ### #######\",\"+92 ### ### ##\",\"+92 #### #####\"],PL:[\"+48 ## ### ## ##\",\"+48 ### ### ###\"],PM:[\"+508 ## ## ##\",\"+508 ### ## ## ##\"],PR:\"+1 ###-###-####\",PS:[\"+970 # ### ####\",\"+970 ### ### ###\",\"+970 #### ### ###\"],PT:[\"+351 ## ### ####\",\"+351 ### ### ###\"],PW:\"+680 ### ####\",PY:[\"+595 ## ### ####\",\"+595 ### ######\",\"+595 #### ### ####\"],QA:[\"+974 #### ####\",\"+974 ### ####\"],RE:\"+262 ### ## ## ##\",RO:[\"+40 ## ### ####\",\"+40 ### ### ###\"],RS:[\"+381 ## ######\",\"+381 ## #######\",\"+381 ### #####\"],RU:\"+7 ### ###-##-##\",RW:\"+250 ### ### ###\",SA:[\"+966 ## ### ####\",\"+966 ### ### ####\",\"+966 #### #####\"],SB:[\"+677 #####\",\"+677 ## #####\"],SC:[\"+248 # ### ###\",\"+248 #######\"],SD:\"+249 ## ### ####\",SE:[\"+46 # ## ## ##\",\"+46 ## ### ## ##\",\"+46 ## ## ## ##\",\"+46 ### ## ## ###\"],SG:[\"+65 #### ####\",\"+65 #### ### ####\"],SH:\"+290 #####\",SI:[\"+386 # ### ## ##\",\"+386 ## ### ###\",\"+386 ## ######\",\"+386 ### #####\"],SJ:[\"+47 ## ## ## ##\",\"+47 ### ## ###\"],SK:[\"+421 #/### ### ##\",\"+421 ### ### ###\",\"+421 #######\"],SL:\"+232 ## ######\",SM:[\"+378 #### ######\",\"+378 ## ## ## ##\"],SN:[\"+221 ## ### ## ##\",\"+221 ### ## ## ##\"],SO:[\"+252 # ######\",\"+252 # #######\"],SR:[\"+597 ###-###\",\"+597 ###-####\",\"+597 ##-##-##\"],SS:\"+211 ### ### ###\",ST:\"+239 ### ####\",SV:[\"+503 #### ####\",\"+503 ### ####\"],SX:\"+1 ###-###-####\",SY:[\"+963 ## ### ####\",\"+963 ### ### ###\"],SZ:[\"+268 #### ####\",\"+268 ##### ####\"],TA:\"+290 ####\",TC:\"+1 ###-###-####\",TD:\"+235 ## ## ## ##\",TG:\"+228 ## ## ## ##\",TH:[\"+66 # ### ####\",\"+66 ## ### ####\",\"+66 #### ### ###\"],TJ:[\"+992 ### ## ####\",\"+992 ## ### ####\"],TK:\"+690 ####\",TL:[\"+670 ### ####\",\"+670 #### ####\"],TM:[\"+993 ## ##-##-##\",\"+993 ## ######\"],TN:\"+216 ## ### ###\",TO:[\"+676 ##-###\",\"+676 ### ####\",\"+676 #### ###\"],TR:[\"+90 ### ### ## ##\",\"+90 ### ### ####\"],TT:\"+1 ###-###-####\",TV:[\"+688 ## ###\",\"+688 ## ####\"],TW:[\"+886 # #### ####\",\"+886 ### ### ###\",\"+886 ## ### ####\",\"+886 ## #### ####\"],TZ:[\"+255 ## ### ####\",\"+255 ### ### ###\",\"+255 ### ## ####\"],UA:[\"+380 #### #####\",\"+380 ## ### ####\",\"+380 ### ### ###\"],UG:[\"+256 ## #######\",\"+256 ### ######\"],US:\"+1 ###-###-####\",UY:[\"+598 #### ####\",\"+598 ## ### ###\",\"+598 ### ####\"],UZ:\"+998 ## ### ## ##\",VA:[\"+39 ## #### ####\",\"+39 ### ### ####\",\"+39 ### ### ###\"],VC:\"+1 ###-###-####\",VE:\"+58 ###-#######\",VG:\"+1 ###-###-####\",VI:\"+1 ###-###-####\",VN:[\"+84 ### #### ###\",\"+84 ### ### ###\",\"+84 #### ######\",\"+84 ## ### ## ##\"],VU:[\"+678 #####\",\"+678 ### ####\"],WF:[\"+681 ## ## ##\",\"+681 ### ## ## ##\"],WS:[\"+685 #####\",\"+685 ## #####\",\"+685 ### ###\"],XK:[\"+383 ## ### ###\",\"+383 ### #####\"],YE:[\"+967 # ### ###\",\"+967 ### ### ###\"],YT:\"+262 ### ## ## ##\",ZA:[\"+27 ## ### ####\",\"+27 ### ### ###\"],ZM:[\"+260 ### ### ###\",\"+260 ## #######\",\"+260 #########\"],ZW:[\"+263 ## #####\",\"+263 ## ### ####\",\"+263 ### ####\",\"+263 #### ######\"]};export{M as default};\n","const t=/^[a-z]{2}$/i,countryCodeEmoji=o=>{if(!t.test(o)){const t=typeof o;throw new TypeError(`cc argument must be an ISO 3166-1 alpha-2 string, but got '${\"string\"===t?o:t}' instead.`)}const e=[...o.toUpperCase()].map(t=>(t.codePointAt(0)??0)+127397);return String.fromCodePoint(...e)};export{countryCodeEmoji};\n","import e from\"./data.min.js\";import{countryCodeEmoji as t}from\"./country-code-emodji.js\";const o=\"en\",n=new Map,getDisplayNames=e=>{const t=e.toLowerCase(),s=n.get(t);if(s)return s;const r=new Intl.DisplayNames([e],{type:\"region\"});if(n.size>=10)for(const e of n.keys())if(e!==o){n.delete(e);break}return n.set(t,r),r},s=Object.entries(e),divideMask=e=>e.split(/ (.*)/s);function getCodeAndMask(e){let t=\"\",o=\"\";if(Array.isArray(e)){const n=[];for(const o of e){const[e,s]=divideMask(o);t||(t=e),n.push(s)}o=n}else{const[n,s]=divideMask(e);t=n,o=s}return[t,o]}const r=e,a=s.map(([e,t])=>({id:e,mask:t})),d=s.reduce((e,[t,o])=>{const[n,s]=getCodeAndMask(o);return e[t]={code:n,mask:s},e},{}),c=s.map(([e,t])=>{const[o,n]=getCodeAndMask(t);return{id:e,code:o,mask:n}}),m=s.reduce((e,[o,n])=>{const[s,r]=getCodeAndMask(n);return e[o]={code:s,mask:r,flag:t(o)},e},{}),i=s.map(([e,o])=>{const[n,s]=getCodeAndMask(o);return{id:e,code:n,mask:s,flag:t(e)}}),MasksFullMap=e=>{const o=getDisplayNames(e);return s.reduce((e,[n,s])=>{const[r,a]=getCodeAndMask(s),d=o.of(n)??\"\";return e[n]={code:r,mask:a,name:d,flag:t(n)},e},{})},MasksFull=e=>{const o=getDisplayNames(e);return s.map(([e,n])=>{const[s,r]=getCodeAndMask(n);return{id:e,code:s,mask:r,name:o.of(e)??\"\",flag:t(e)}})},f=MasksFullMap(o),u=MasksFull(o),k=t;export{c as Masks,a as MasksBase,r as MasksBaseMap,MasksFull,u as MasksFullEn,MasksFullMap,f as MasksFullMapEn,d as MasksMap,i as MasksWithFlag,m as MasksWithFlagMap,k as getFlagEmoji};\n","import{MasksFullMap as t,MasksFullMapEn as r}from\"./entries.js\";function getNavigatorLang(){return globalThis.navigator?.language||\"en\"}function detectCountryFromLocale(){try{const t=getNavigatorLang();try{const r=new Intl.Locale(t);if(r.region)return r.region.toUpperCase()}catch{}const r=t.split(/[-_]/);if(r.length>1)return r[1]?.toUpperCase()||null}catch{}return null}function hasCountry(t){const e=r;return t.toUpperCase()in e}function getCountry(r,e){const n=t(e),o=r.toUpperCase();return o in n?{id:o,...n[o]}:{id:\"US\",...n.US}}function parseCountryCode(t,r){return t&&hasCountry(t)?t.toUpperCase():r||\"\"}function toArray(t){return Array.isArray(t)?t:[t]}function countPlaceholders(t){return(t.match(/#/g)||[]).length}function removeCountryCodePrefix(t){return t.replace(/^\\+\\d+\\s?/,\"\")}function pickMaskVariant(t,r){if(!t.length)return\"\";if(1===t.length)return t[0];const e=t.map(t=>({mask:t,count:countPlaceholders(t)})),n=e.filter(t=>t.count>=r).sort((t,r)=>t.count-r.count);if(n.length>0)return n[0].mask;const o=e.sort((t,r)=>r.count-t.count)[0];return o?o.mask:t[0]}function formatDigitsWithMap(t,r){let e=\"\";const n=[];let o=0;const a=r.length,s=t.length;for(let c=0;c<s;c++){const s=t[c];if(\"#\"===s){if(!(o<a))break;e+=r[o],n.push(o),o++}else{const r=-1!==t.indexOf(\"#\",c+1)&&o<a;(e.length>0||r)&&(e+=s,n.push(-1))}}return{display:e,map:n}}function filterCountries(t,r){const e=r.trim().toUpperCase();if(!e)return t;const n=e.replace(/\\D/g,\"\"),o=n.length>0;return t.map(t=>{const r=t.name.toUpperCase(),a=t.id.toUpperCase(),s=t.code.toUpperCase(),c=t.code.replace(/\\D/g,\"\");let i=0;return r.startsWith(e)?i=1e3:r.includes(e)&&(i=500),s.startsWith(e)?i+=100:s.includes(e)&&(i+=50),a===e?i+=200:a.startsWith(e)&&(i+=150),o&&c.startsWith(n)?i+=80:o&&c.includes(n)&&(i+=40),{country:t,score:i}}).filter(t=>t.score>0).sort((t,r)=>r.score===t.score?t.country.name.localeCompare(r.country.name):r.score-t.score).map(t=>t.country)}export{countPlaceholders,detectCountryFromLocale,filterCountries,formatDigitsWithMap,getCountry,getNavigatorLang,hasCountry,parseCountryCode,pickMaskVariant,removeCountryCodePrefix,toArray};\n","const e=[\" \",\"-\",\"(\",\")\"],t=[\"ArrowLeft\",\"ArrowRight\",\"ArrowUp\",\"ArrowDown\",\"Home\",\"End\",\"Tab\"],n=/[^\\d\\s\\-()]/;function removeDigitsRange(e,t,n){return{newDigits:e.slice(0,t)+e.slice(n),caretDigitIndex:t}}function removeSelectedDigits(e,t,n,i){if(n===i)return;const r=t.getDigitRange(e,n,i);if(!r)return;const[s,g]=r;return removeDigitsRange(e,s,g)}function extractDigits(e,t){const n=e.replace(/\\D/g,\"\");return t?n.slice(0,t):n}function getSelection(e){return e?[e.selectionStart??0,e.selectionEnd??0]:[0,0]}function setCaret(e,t){if(e)try{e.setSelectionRange(t,t)}catch{}}function processBeforeInput(e){if(!e.target)return;const t=e.target,i=e.data;\"insertText\"===e.inputType&&i&&(n.test(i)||\" \"===i&&t.value.endsWith(\" \"))&&e.preventDefault()}function processInput(e,t){if(!e.target)return;const n=e.target,{formatter:i}=t,r=i.getMaxDigits(),s=extractDigits(n.value,r);return{newDigits:s,caretDigitIndex:s.length}}function processKeydown(n,i){if(!n.target)return;const r=n.target,{digits:s,formatter:g}=i;if(function shouldIgnoreKeydown(e){return e.ctrlKey||e.metaKey||e.altKey||t.includes(e.key)}(n))return;const[o,c]=getSelection(r),a=r.value;return\"Backspace\"===n.key?(n.preventDefault(),removeSelectedDigits(s,g,o,c)??function removePreviousDigit(t,n,i,r){if(r<=0)return;let s=r-1;for(;s>=0&&e.includes(i[s]);)s--;if(s<0)return;const g=n.getDigitRange(t,s,s+1);if(!g)return;const[o]=g;return removeDigitsRange(t,o,o+1)}(s,g,a,o)):\"Delete\"===n.key?(n.preventDefault(),removeSelectedDigits(s,g,o,c)??function removeNextDigit(e,t,n,i){if(i>=n.length)return;const r=t.getDigitRange(e,i,n.length);if(!r)return;const[s]=r;return removeDigitsRange(e,s,s+1)}(s,g,a,o)):void(/^\\d$/.test(n.key)?s.length>=g.getMaxDigits()&&n.preventDefault():1===n.key.length&&n.preventDefault())}function processPaste(e,t){if(!e.target)return;e.preventDefault();const n=e.target,{digits:i,formatter:r}=t,s=e.clipboardData?.getData(\"text\")||\"\",g=r.getMaxDigits(),o=extractDigits(s,g);if(0===o.length)return;const[c,a]=getSelection(n);if(c!==a){const e=r.getDigitRange(i,c,a);if(e){const[t,n]=e;return{newDigits:extractDigits(i.slice(0,t)+o+i.slice(n),g),caretDigitIndex:t+o.length}}}const u=r.getDigitRange(i,0,c),l=u?u[1]:0;return{newDigits:extractDigits(i.slice(0,l)+o+i.slice(l),g),caretDigitIndex:l+o.length}}export{e as DELIMITERS,n as INVALID_PATTERN,t as NAVIGATION_KEYS,extractDigits,getSelection,processBeforeInput,processInput,processKeydown,processPaste,setCaret};\n","import{countPlaceholders as t,removeCountryCodePrefix as e,formatDigitsWithMap as n,toArray as r,pickMaskVariant as a}from\"./utils.js\";function createPhoneFormatter(o){const i=r(o.mask),l=i.map(n=>t(e(n))),s=Math.max(...l),getMask=t=>{const n=a(i,t);return e(n)};return{formatDisplay:t=>{const e=getMask(t.length);return n(e,t).display},getMaxDigits:()=>s,getPlaceholder:()=>getMask(0),getCaretPosition:t=>{const e=Math.max(0,t);if(0===e)return 0;const r=getMask(e),{display:a}=n(r,\"0\".repeat(e));return a.length},getDigitRange:(t,e,r)=>{const a=getMask(t.length),{map:o}=n(a,t);let i=1/0,l=-1/0;for(let t=e;t<r&&t<o.length;t++){const e=o[t];void 0!==e&&e>=0&&(i=Math.min(i,e),l=Math.max(l,e))}return i===1/0?null:[i,l+1]},isComplete:t=>l.includes(t.length)}}export{createPhoneFormatter};\n","const o=\"https://ipapi.co/json/\",e=1500,p=\"@desource/phone-mask:geo\",s=864e5;export{s as CACHE_EXPIRY_MS,p as CACHE_KEY,o as GEO_IP_API_URL,e as GEO_IP_TIMEOUT_MS};\n","import{parseCountryCode as t}from\"../../utils.js\";import{GEO_IP_API_URL as o,GEO_IP_TIMEOUT_MS as e,CACHE_KEY as r,CACHE_EXPIRY_MS as n}from\"./consts.js\";async function detectCountryFromGeoIP(t=o,r=e){const n=new AbortController,c=setTimeout(()=>n.abort(),r);try{const o=await fetch(t,{signal:n.signal,headers:{Accept:\"application/json\"}});if(clearTimeout(c),!o.ok)return null;const e=await o.json();return(e.country||e.country_code||e.countryCode||e.country_code2||\"\").toString().toUpperCase()||null}catch{return clearTimeout(c),null}}async function detectByGeoIp(){try{const o=localStorage.getItem(r);if(o){const e=JSON.parse(o),c=Date.now()-e.ts>n,a=t(e.country_code);if(a&&!c)return a;localStorage.removeItem(r)}}catch{}const o=await detectCountryFromGeoIP(),e=t(o);if(e){try{const t=JSON.stringify({country_code:e,ts:Date.now()});localStorage.setItem(r,t)}catch{}return e}return null}export{detectByGeoIp,detectCountryFromGeoIP};\n","import { useEffect, useMemo } from 'react';\nimport { extractDigits, createPhoneFormatter, type MaskFull, type FormatterHelpers } from '@desource/phone-mask';\n\nimport type { PhoneNumber } from '../../types';\n\n/** Configuration options for the useFormatter hook */\nexport interface UseFormatterOptions {\n /** Pre-resolved country data */\n country: MaskFull;\n /**\n * Controlled value (digits only, without country code)\n * The parent is responsible for managing state via onChange callback.\n */\n value: string;\n /** Callback when the digits value changes. */\n onChange: (digits: string) => void;\n /** Callback when the phone number changes. */\n onPhoneChange?: (value: PhoneNumber) => void;\n /** Callback when validation state (isComplete) changes */\n onValidationChange?: (isComplete: boolean) => void;\n}\n\n/** Return type for useFormatter hook */\nexport interface UseFormatterReturn {\n /** Raw digits without formatting */\n digits: string;\n /** Phone formatter instance */\n formatter: FormatterHelpers;\n /** Placeholder from formatter */\n displayPlaceholder: string;\n /** Formatted display string */\n displayValue: string;\n /** Full phone number with country code */\n full: string;\n /** Full phone number formatted */\n fullFormatted: string;\n /** Whether the phone number is complete */\n isComplete: boolean;\n /** Whether the input is empty */\n isEmpty: boolean;\n /** Whether to show validation warning */\n shouldShowWarn: boolean;\n}\n\n/**\n * Hook for phone number formatting and derived computations.\n * Receives pre-resolved country data; country management is handled by the caller.\n */\nexport function useFormatter({\n country,\n value,\n onChange,\n onPhoneChange,\n onValidationChange\n}: UseFormatterOptions): UseFormatterReturn {\n const formatter = useMemo(() => createPhoneFormatter(country), [country]);\n const maxDigits = formatter.getMaxDigits();\n const digits = useMemo(() => extractDigits(value, maxDigits), [value, maxDigits]);\n\n const displayPlaceholder = formatter.getPlaceholder();\n const displayValue = formatter.formatDisplay(digits);\n\n const full = digits ? `${country.code}${digits}` : '';\n const fullFormatted = displayValue ? `${country.code} ${displayValue}` : '';\n\n const isComplete = formatter.isComplete(digits);\n const isEmpty = digits.length === 0;\n const shouldShowWarn = !isEmpty && !isComplete;\n\n // Memoize phoneData to prevent infinite loops in useEffect\n const phoneData = useMemo<PhoneNumber>(() => ({ full, fullFormatted, digits }), [full, fullFormatted, digits]);\n\n // Clamp digits on formatter changes\n useEffect(() => {\n if (value !== digits) {\n onChange(digits);\n }\n }, [value, digits, onChange]);\n\n // Effect: Emit onPhoneChange\n useEffect(() => {\n onPhoneChange?.(phoneData);\n }, [phoneData, onPhoneChange]);\n\n // Effect: Emit onValidationChange\n useEffect(() => {\n onValidationChange?.(isComplete);\n }, [isComplete, onValidationChange]);\n\n return {\n digits,\n formatter,\n displayPlaceholder,\n displayValue,\n full,\n fullFormatted,\n isComplete,\n isEmpty,\n shouldShowWarn\n };\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport {\n getNavigatorLang,\n getCountry,\n parseCountryCode,\n detectByGeoIp,\n detectCountryFromLocale,\n type MaskFull\n} from '@desource/phone-mask';\n\nexport interface UseCountryOptions {\n /** Country ISO code (e.g., 'US', 'DE', 'GB') */\n country?: string;\n /** Locale for country names (default: navigator.language) */\n locale?: string;\n /** Auto-detect country from IP/locale (default: false) */\n detect?: boolean;\n /** Callback when country changes */\n onCountryChange?: (country: MaskFull) => void;\n}\n\nexport interface UseCountryReturn {\n /** Current country data */\n country: MaskFull;\n /** Change country programmatically */\n setCountry: (countryCode?: string | null) => boolean;\n /** Computed locale value */\n locale: string;\n}\n\nexport function useCountry({\n country: countryOption,\n locale: localeOption,\n detect,\n onCountryChange\n}: UseCountryOptions): UseCountryReturn {\n const locale = useMemo<string>(() => localeOption || getNavigatorLang(), [localeOption]);\n\n const [countryCode, setCountryCode] = useState<string>(parseCountryCode(countryOption, 'US'));\n\n const country = useMemo<MaskFull>(() => getCountry(countryCode, locale), [countryCode, locale]);\n\n const shouldDetect = !!detect && !countryOption;\n\n const setCountry = useCallback((countryCode?: string | null) => {\n const code = parseCountryCode(countryCode);\n\n if (code) {\n setCountryCode(code);\n return true;\n }\n\n return false;\n }, []);\n\n const detectCountry = useCallback(async () => {\n const geoCountry = await detectByGeoIp();\n\n if (setCountry(geoCountry)) return;\n\n const localeCountry = detectCountryFromLocale();\n\n setCountry(localeCountry);\n }, [setCountry]);\n\n useEffect(() => {\n if (countryOption && countryOption !== countryCode) {\n setCountry(countryOption);\n }\n }, [countryCode, countryOption, setCountry]);\n\n // Effect: Country detection\n useEffect(() => {\n if (shouldDetect) {\n detectCountry();\n }\n }, [shouldDetect, detectCountry]);\n\n // Effect: Emit onCountryChange\n useEffect(() => {\n onCountryChange?.(country);\n }, [country, onCountryChange]);\n\n return { country, setCountry, locale };\n}\n","import { useRef, useCallback, useEffect, useMemo } from 'react';\n\n/**\n * Custom hook for managing timers with automatic cleanup\n * @returns Object with set and clear methods for timer control\n */\nexport function useTimer() {\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const set = useCallback(\n (callback: () => void, delay: number) => {\n clear();\n timerRef.current = setTimeout(callback, delay);\n },\n [clear]\n );\n\n // Auto cleanup on unmount\n useEffect(() => {\n return clear;\n }, [clear]);\n\n return useMemo(() => ({ set, clear }), [set, clear]);\n}\n","import { useState, useCallback } from 'react';\nimport { useTimer } from '../utility/useTimer';\n\nexport function useValidationHint() {\n const [showValidationHint, setShowValidationHint] = useState(false);\n\n const validationTimer = useTimer();\n\n const clearValidationHint = useCallback(\n (hideHint = true) => {\n if (hideHint) setShowValidationHint(false);\n validationTimer.clear();\n },\n [validationTimer]\n );\n\n const scheduleValidationHint = useCallback(\n (delay: number) => {\n setShowValidationHint(false);\n validationTimer.set(() => {\n setShowValidationHint(true);\n }, delay);\n },\n [validationTimer]\n );\n\n return { showValidationHint, clearValidationHint, scheduleValidationHint };\n}\n","import React, { useCallback } from 'react';\nimport {\n processBeforeInput,\n processInput,\n processKeydown,\n processPaste,\n setCaret,\n type FormatterHelpers\n} from '@desource/phone-mask';\n\nexport interface UseInputHandlersOptions {\n formatter: FormatterHelpers;\n digits: string;\n inactive?: boolean;\n onChange?: (newDigits: string) => void;\n scheduleValidationHint?: (delay: number) => void;\n}\n\nexport interface UseInputHandlersReturn {\n handleBeforeInput: (e: React.SyntheticEvent<HTMLInputElement> | InputEvent) => void;\n handleInput: (e: React.SyntheticEvent<HTMLInputElement> | Event) => void;\n handleKeydown: (e: React.KeyboardEvent<HTMLInputElement> | KeyboardEvent) => void;\n handlePaste: (e: React.ClipboardEvent<HTMLInputElement> | ClipboardEvent) => void;\n}\n\n// Extract native event from React synthetic event, or return event as-is\nfunction getNativeEvent(e: React.SyntheticEvent | Event): Event {\n return 'nativeEvent' in e ? e.nativeEvent : e;\n}\n\nconst HINT_DELAY_INPUT = 500;\nconst HINT_DELAY_ACTION = 300;\n\n/**\n * React hook that provides event handlers for phone input masking.\n * Handlers are compatible with both native events and React synthetic events.\n */\nexport function useInputHandlers(options: UseInputHandlersOptions): UseInputHandlersReturn {\n const { formatter, digits, inactive, onChange, scheduleValidationHint } = options;\n\n // Helper: Schedule caret position update\n const scheduleCaretUpdate = useCallback(\n (el: HTMLInputElement | null, digitIndex: number) => {\n setTimeout(() => {\n if (!el) return;\n const pos = formatter.getCaretPosition(digitIndex);\n setCaret(el, pos);\n }, 0);\n },\n [formatter]\n );\n\n const handleBeforeInput = useCallback((e: React.SyntheticEvent<HTMLInputElement> | InputEvent) => {\n processBeforeInput(getNativeEvent(e) as InputEvent);\n }, []);\n\n const handleInput = useCallback(\n (e: React.SyntheticEvent<HTMLInputElement> | Event) => {\n if (inactive) return;\n\n const evt = getNativeEvent(e);\n const result = processInput(evt, { formatter });\n\n if (!result) return;\n\n onChange?.(result.newDigits);\n scheduleCaretUpdate(evt.target as HTMLInputElement | null, result.caretDigitIndex);\n scheduleValidationHint?.(HINT_DELAY_INPUT);\n },\n [inactive, formatter, onChange, scheduleCaretUpdate, scheduleValidationHint]\n );\n\n const handleKeydown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement> | KeyboardEvent) => {\n if (inactive) return;\n\n const evt = getNativeEvent(e) as KeyboardEvent;\n const result = processKeydown(evt, { digits, formatter });\n\n if (!result) return;\n\n onChange?.(result.newDigits);\n scheduleCaretUpdate(evt.target as HTMLInputElement | null, result.caretDigitIndex);\n scheduleValidationHint?.(HINT_DELAY_ACTION);\n },\n [inactive, digits, formatter, onChange, scheduleCaretUpdate, scheduleValidationHint]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLInputElement> | ClipboardEvent) => {\n if (inactive) return;\n\n const evt = getNativeEvent(e) as ClipboardEvent;\n const result = processPaste(evt, { digits, formatter });\n\n if (!result) return;\n\n onChange?.(result.newDigits);\n scheduleCaretUpdate(evt.target as HTMLInputElement | null, result.caretDigitIndex);\n scheduleValidationHint?.(HINT_DELAY_ACTION);\n },\n [inactive, digits, formatter, onChange, scheduleCaretUpdate, scheduleValidationHint]\n );\n\n return {\n handleBeforeInput,\n handleInput,\n handleKeydown,\n handlePaste\n };\n}\n","import React, { useState, useCallback, useMemo, useEffect, type RefObject, type CSSProperties } from 'react';\n\nimport { MasksFull, filterCountries, type CountryKey } from '@desource/phone-mask';\n\ninterface UseCountrySelectOptions {\n rootRef: RefObject<HTMLDivElement | null>;\n dropdownRef: RefObject<HTMLDivElement | null>;\n searchRef: RefObject<HTMLInputElement | null>;\n selectorRef: RefObject<HTMLDivElement | null>;\n locale: string;\n onSelectCountry: (code: CountryKey) => void;\n countryOption?: string;\n inactive?: boolean;\n onAfterSelect?: () => void;\n}\n\nexport function useCountrySelector({\n rootRef,\n dropdownRef,\n searchRef,\n selectorRef,\n locale,\n countryOption,\n inactive,\n onSelectCountry,\n onAfterSelect\n}: UseCountrySelectOptions) {\n const [search, setSearch] = useState('');\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [dropdownStyle, setDropdownStyle] = useState<CSSProperties>({});\n const [isClosing, setIsClosing] = useState(false);\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n const countries = useMemo(() => MasksFull(locale), [locale]);\n const filteredCountries = useMemo(() => filterCountries(countries, search), [countries, search]);\n const hasDropdown = useMemo(() => !countryOption && countries.length > 1, [countryOption, countries]);\n\n const focusSearch = useCallback(() => {\n setTimeout(() => searchRef.current?.focus({ preventScroll: true }), 0);\n }, []);\n\n // Close dropdown with animation — actual DOM removal happens in handleDropdownAnimationEnd\n const closeDropdown = useCallback(() => {\n if (!dropdownOpen) return;\n setIsClosing(true);\n }, [dropdownOpen]);\n\n const openDropdown = useCallback(() => {\n setIsClosing(false);\n setDropdownOpen(true);\n setFocusedIndex(0);\n focusSearch();\n }, [focusSearch]);\n\n // Called via onAnimationEnd on the dropdown element\n const handleDropdownAnimationEnd = useCallback(() => {\n if (!isClosing) return;\n setDropdownOpen(false);\n setIsClosing(false);\n }, [isClosing]);\n\n const toggleDropdown = useCallback(() => {\n if (inactive || !hasDropdown) return;\n if (dropdownOpen) {\n closeDropdown();\n } else {\n openDropdown();\n }\n }, [inactive, dropdownOpen, hasDropdown, openDropdown, closeDropdown]);\n\n const selectCountry = useCallback(\n (code: CountryKey) => {\n onSelectCountry(code);\n closeDropdown();\n setSearch('');\n setFocusedIndex(0);\n onAfterSelect?.();\n },\n [onSelectCountry, closeDropdown, onAfterSelect]\n );\n\n const handleSearchChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value);\n setFocusedIndex(0);\n }, []);\n\n // Close dropdown on outside click\n const onDocClick = useCallback(\n (ev: Event) => {\n const target = ev.target as Node | null;\n const dropdownEl = dropdownRef.current;\n const selectorEl = selectorRef.current;\n if (!target) return;\n if (dropdownEl?.contains(target)) return;\n if (selectorEl?.contains(target)) return;\n closeDropdown();\n },\n [closeDropdown]\n );\n\n // Dropdown positioning\n const positionDropdown = useCallback((e?: Event | UIEvent) => {\n if (e?.type === 'scroll' && e.target && dropdownRef.current?.contains(e.target as Node)) return;\n if (!rootRef?.current) return;\n\n const rect = rootRef.current.getBoundingClientRect();\n\n setDropdownStyle({\n top: `${rect.bottom + globalThis.scrollY + 8}px`,\n left: `${rect.left + globalThis.scrollX}px`,\n width: `${rect.width}px`\n });\n }, []);\n\n const scrollFocusedIntoView = useCallback((index: number) => {\n setTimeout(() => {\n const list = dropdownRef.current?.lastElementChild;\n const option = list?.children[index];\n if (!list || !option) return;\n\n const listRect = list.getBoundingClientRect();\n const optionRect = option.getBoundingClientRect();\n\n let scrollAmount = 0;\n\n if (optionRect.top < listRect.top) {\n scrollAmount = list.scrollTop - (listRect.top - optionRect.top);\n } else if (optionRect.bottom > listRect.bottom) {\n scrollAmount = list.scrollTop + (optionRect.bottom - listRect.bottom);\n } else {\n return;\n }\n\n list.scrollTo({ top: scrollAmount, behavior: 'smooth' });\n }, 0);\n }, []);\n\n // Keyboard navigation for dropdown\n const handleSearchKeydown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedIndex((i) => {\n const next = Math.min(i + 1, filteredCountries.length - 1);\n scrollFocusedIntoView(next);\n return next;\n });\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedIndex((i) => {\n const prev = Math.max(i - 1, 0);\n scrollFocusedIntoView(prev);\n return prev;\n });\n } else if (e.key === 'Enter' && filteredCountries[focusedIndex]) {\n e.preventDefault();\n selectCountry(filteredCountries[focusedIndex]!.id);\n } else if (e.key === 'Escape') {\n closeDropdown();\n }\n },\n [filteredCountries, focusedIndex, selectCountry, closeDropdown, scrollFocusedIntoView]\n );\n\n useEffect(() => {\n if (!hasDropdown && dropdownOpen) {\n closeDropdown();\n }\n }, [hasDropdown, dropdownOpen, closeDropdown]);\n\n useEffect(() => {\n if (!dropdownOpen) return;\n\n positionDropdown();\n\n globalThis.addEventListener('resize', positionDropdown);\n globalThis.addEventListener('scroll', positionDropdown, true);\n globalThis.addEventListener('click', onDocClick, true);\n\n return () => {\n globalThis.removeEventListener('resize', positionDropdown);\n globalThis.removeEventListener('scroll', positionDropdown, true);\n globalThis.removeEventListener('click', onDocClick, true);\n };\n }, [dropdownOpen, positionDropdown, onDocClick]);\n\n return {\n // State\n dropdownOpen,\n isClosing,\n search,\n focusedIndex,\n dropdownStyle,\n // Derived\n filteredCountries,\n hasDropdown,\n // Actions\n openDropdown,\n closeDropdown,\n toggleDropdown,\n selectCountry,\n setFocusedIndex,\n handleSearchChange,\n handleSearchKeydown,\n handleDropdownAnimationEnd\n };\n}\n","import { useState, useCallback } from 'react';\nimport { useTimer } from './useTimer';\n\nexport function useClipboard(delay = 1_800) {\n const [copied, setCopied] = useState(false);\n const [isCopying, setIsCopying] = useState(false);\n const copyTimer = useTimer();\n\n const copy = useCallback(\n async (text: string) => {\n if (isCopying) return false;\n const trimmedText = text.trim();\n if (!trimmedText) return false;\n setIsCopying(true);\n try {\n await navigator.clipboard.writeText(trimmedText);\n setCopied(true);\n copyTimer.set(() => {\n setCopied(false);\n }, delay);\n return true;\n } catch (err) {\n console.warn('Copy failed', err);\n return false;\n } finally {\n setIsCopying(false);\n }\n },\n [isCopying, copyTimer]\n );\n\n return { copied, isCopying, copy };\n}\n","import { useMemo, useCallback, type RefObject } from 'react';\nimport { useClipboard } from '../utility/useClipboard';\nimport { useTimer } from '../utility/useTimer';\n\ninterface UseCopyActionOptions {\n fullFormatted: string;\n liveRef?: RefObject<HTMLElement | null>;\n onCopy?: (value: string) => void;\n}\n\nconst DELAY = 1_800;\n\nexport function useCopyAction({ liveRef, fullFormatted, onCopy }: UseCopyActionOptions) {\n const liveTimer = useTimer();\n const { copied, copy } = useClipboard(DELAY);\n\n const copyAriaLabel = useMemo(() => (copied ? 'Copied' : `Copy ${fullFormatted}`), [copied, fullFormatted]);\n const copyButtonTitle = useMemo(() => (copied ? 'Copied' : 'Copy phone number'), [copied]);\n\n const announceToScreenReader = useCallback(\n (message: string) => {\n if (!liveRef?.current) return;\n liveRef.current.textContent = message;\n liveTimer.set(() => {\n if (liveRef.current) liveRef.current.textContent = '';\n }, DELAY);\n },\n [liveRef, liveTimer]\n );\n\n const onCopyClick = useCallback(async () => {\n const valueToCopy = fullFormatted.trim();\n const success = await copy(valueToCopy);\n if (success) {\n onCopy?.(valueToCopy);\n announceToScreenReader('Phone number copied to clipboard');\n }\n }, [fullFormatted, copy, onCopy, announceToScreenReader]);\n\n return {\n copied,\n copyAriaLabel,\n copyButtonTitle,\n onCopyClick\n };\n}\n","import { useEffect, useState, useMemo } from 'react';\n\nimport type { Theme } from '../../types';\n\ninterface UseThemeOptions {\n theme: Theme;\n}\n\nexport function useTheme({ theme }: UseThemeOptions) {\n const [systemDark, setSystemDark] = useState(false);\n\n const themeClass = useMemo(() => {\n if (theme === 'auto') {\n return systemDark ? 'theme-dark' : 'theme-light';\n }\n\n return `theme-${theme}`;\n }, [theme, systemDark]);\n\n // Track system color scheme reactively so theme:'auto' responds to OS changes at runtime\n useEffect(() => {\n const mq = globalThis.matchMedia?.('(prefers-color-scheme: dark)') ?? null;\n if (!mq) return;\n setSystemDark(mq.matches);\n\n const handler = (e: MediaQueryListEvent) => {\n setSystemDark(e.matches);\n };\n\n mq.addEventListener('change', handler);\n\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n return {\n themeClass\n };\n}\n","import React, {\n forwardRef,\n useImperativeHandle,\n useRef,\n useId,\n useCallback,\n type CSSProperties,\n type ForwardedRef\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useFormatter } from '../hooks/internal/useFormatter';\nimport { useCountry } from '../hooks/internal/useCountry';\nimport { useValidationHint } from '../hooks/internal/useValidationHint';\nimport { useInputHandlers } from '../hooks/internal/useInputHandlers';\nimport { useCountrySelector } from '../hooks/internal/useCountrySelector';\nimport { useCopyAction } from '../hooks/internal/useCopyAction';\nimport { useTheme } from '../hooks/internal/useTheme';\n\nimport type { PhoneInputProps, PhoneInputRef } from '../types';\n\nconst PhoneInputInner = (props: PhoneInputProps, ref: ForwardedRef<PhoneInputRef>) => {\n const {\n value = '',\n country: propCountry,\n detect = true,\n locale: propLocale,\n size = 'normal',\n theme = 'auto',\n disabled = false,\n readonly = false,\n showCopy = true,\n showClear = false,\n withValidity = true,\n searchPlaceholder = 'Search country or code...',\n noResultsText = 'No countries found',\n clearButtonLabel = 'Clear phone number',\n dropdownClass = '',\n disableDefaultStyles = false,\n onChange,\n onPhoneChange,\n onCountryChange,\n onValidationChange,\n onFocus,\n onBlur,\n onCopy,\n onClear,\n renderActionsBefore,\n renderFlag,\n renderCopySvg,\n renderClearSvg\n } = props;\n\n const { country, setCountry, locale } = useCountry({\n country: propCountry,\n locale: propLocale,\n detect,\n onCountryChange\n });\n\n const {\n digits,\n formatter,\n displayPlaceholder,\n displayValue,\n full,\n fullFormatted,\n isComplete,\n isEmpty,\n shouldShowWarn\n } = useFormatter({\n country,\n value,\n onChange,\n onPhoneChange,\n onValidationChange\n });\n\n const { showValidationHint, clearValidationHint, scheduleValidationHint } = useValidationHint();\n const dropdownId = useId();\n\n const telRef = useRef<HTMLInputElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const liveRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const selectorRef = useRef<HTMLDivElement>(null);\n\n const inactive = disabled || readonly;\n const incomplete = showValidationHint && shouldShowWarn;\n\n const showCopyButton = showCopy && !isEmpty && !disabled;\n const showClearButton = showClear && !isEmpty && !inactive;\n\n const {\n copied,\n copyAriaLabel,\n copyButtonTitle,\n onCopyClick: handleCopyClick\n } = useCopyAction({\n liveRef,\n fullFormatted,\n onCopy\n });\n\n const focusInput = useCallback(() => {\n setTimeout(() => telRef.current?.focus(), 0);\n }, []);\n\n const { handleBeforeInput, handleInput, handleKeydown, handlePaste } = useInputHandlers({\n formatter,\n digits,\n inactive,\n onChange,\n scheduleValidationHint\n });\n\n const {\n dropdownOpen,\n isClosing,\n search,\n focusedIndex,\n dropdownStyle,\n filteredCountries,\n hasDropdown,\n closeDropdown,\n toggleDropdown,\n selectCountry,\n setFocusedIndex,\n handleSearchChange,\n handleSearchKeydown,\n handleDropdownAnimationEnd\n } = useCountrySelector({\n rootRef,\n dropdownRef,\n searchRef,\n selectorRef,\n locale,\n inactive,\n countryOption: propCountry,\n onSelectCountry: setCountry,\n onAfterSelect: focusInput\n });\n\n // Input focus behavior (close dropdown, clear validation timer, and call onFocus callback)\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n clearValidationHint(false);\n closeDropdown();\n onFocus?.(e);\n },\n [onFocus, closeDropdown, clearValidationHint]\n );\n\n const clear = useCallback(() => {\n onChange?.('');\n clearValidationHint();\n onClear?.();\n }, [onChange, onClear, clearValidationHint]);\n\n // Clear functionality\n const handleClearClick = useCallback(() => {\n clear();\n focusInput();\n }, [clear, focusInput]);\n\n // Imperative handle\n useImperativeHandle(\n ref,\n () => ({\n focus: focusInput,\n blur: () => telRef.current?.blur(),\n clear,\n selectCountry,\n getFullNumber: () => full,\n getFullFormattedNumber: () => fullFormatted,\n getDigits: () => digits,\n isValid: () => isComplete,\n isComplete: () => isComplete\n }),\n [focusInput, selectCountry, full, fullFormatted, digits, isComplete, clear]\n );\n\n const { themeClass } = useTheme({ theme });\n\n const rootClasses = [\n 'phone-input',\n `size-${size}`,\n themeClass,\n disabled && 'is-disabled',\n readonly && 'is-readonly',\n disableDefaultStyles && 'is-unstyled',\n withValidity && incomplete && 'is-incomplete',\n withValidity && isComplete && 'is-complete'\n ]\n .filter(Boolean)\n .join(' ');\n\n const actionsCount = +showCopyButton + +showClearButton + (renderActionsBefore ? 1 : 0);\n const listboxId = `pi-options-${dropdownId}`;\n const optionIdPrefix = `pi-option-${dropdownId}`;\n const activeOptionId =\n dropdownOpen && filteredCountries[focusedIndex] ? `${optionIdPrefix}-${focusedIndex}` : undefined;\n\n return (\n <>\n <div\n ref={rootRef}\n className={rootClasses}\n style={{ '--pi-actions-count': actionsCount } as CSSProperties}\n role=\"group\"\n aria-label=\"Phone input with country selector\"\n >\n {/* Country Selector */}\n <div className=\"pi-selector\" ref={selectorRef}>\n <button\n type=\"button\"\n className={`pi-selector-btn ${!hasDropdown || readonly ? 'no-dropdown' : ''}`}\n disabled={disabled}\n tabIndex={inactive || !hasDropdown ? -1 : undefined}\n aria-label={`Selected country: ${country.name}`}\n aria-expanded={dropdownOpen}\n aria-haspopup={hasDropdown ? 'listbox' : undefined}\n onClick={toggleDropdown}\n >\n <span className=\"pi-flag\" role=\"img\" aria-label={`${country.name} flag`}>\n {renderFlag ? renderFlag(country) : country.flag}\n </span>\n <span className=\"pi-code\">{country.code}</span>\n {!inactive && hasDropdown && (\n <svg\n className={`pi-chevron ${dropdownOpen ? 'is-open' : ''}`}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 4.5L6 8L9.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n </div>\n\n {/* Input Container */}\n <div className=\"pi-input-wrap\">\n <input\n ref={telRef}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel-national\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n className=\"pi-input\"\n placeholder={displayPlaceholder}\n value={displayValue}\n disabled={disabled}\n readOnly={readonly}\n aria-invalid={incomplete}\n onInput={handleInput}\n onBeforeInput={handleBeforeInput}\n onKeyDown={handleKeydown}\n onPaste={handlePaste}\n onFocus={handleFocus}\n onBlur={onBlur}\n />\n\n {/* Action Buttons */}\n <div className=\"pi-actions\" role=\"toolbar\" aria-label=\"Phone input actions\">\n {renderActionsBefore?.()}\n\n {showCopyButton && (\n <button\n type=\"button\"\n className={`pi-btn pi-btn-copy ${copied ? 'is-copied' : ''}`}\n aria-label={copyAriaLabel}\n title={copyButtonTitle}\n onClick={handleCopyClick}\n >\n {renderCopySvg ? (\n renderCopySvg(copied)\n ) : copied ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M6.5 11.5L3 8L4.06 6.94L6.5 9.38L11.94 3.94L13 5L6.5 11.5Z\" fill=\"currentColor\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M13.5 5.5V13.5H5.5V5.5H13.5ZM13.5 4H5.5C4.67 4 4 4.67 4 5.5V13.5C4 14.33 4.67 15 5.5 15H13.5C14.33 15 15 14.33 15 13.5V5.5C15 4.67 14.33 4 13.5 4ZM10.5 1H2.5V11H4V2.5H10.5V1Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </button>\n )}\n\n {showClearButton && (\n <button\n type=\"button\"\n className=\"pi-btn pi-btn-clear\"\n aria-label={clearButtonLabel}\n title={clearButtonLabel}\n onClick={handleClearClick}\n >\n {renderClearSvg ? (\n renderClearSvg()\n ) : (\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </button>\n )}\n </div>\n </div>\n </div>\n\n {/* Dropdown */}\n {dropdownOpen &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n ref={dropdownRef}\n className={`phone-dropdown ${dropdownClass} ${themeClass} ${isClosing ? 'is-closing' : ''}`}\n style={dropdownStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label=\"Select country\"\n onAnimationEnd={handleDropdownAnimationEnd}\n >\n <div className=\"pi-search-wrap\">\n <input\n ref={searchRef}\n type=\"search\"\n className=\"pi-search\"\n aria-label=\"Search countries\"\n aria-controls={listboxId}\n aria-activedescendant={activeOptionId}\n placeholder={searchPlaceholder}\n value={search}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeydown}\n />\n </div>\n <ul id={listboxId} className=\"pi-options\" role=\"listbox\" tabIndex={-1}>\n {filteredCountries.length > 0 ? (\n filteredCountries.map((c, idx) => (\n <li\n key={c.id}\n id={`${optionIdPrefix}-${idx}`}\n role=\"option\"\n className={`pi-option ${idx === focusedIndex ? 'is-focused' : ''} ${\n c.id === country.id ? 'is-selected' : ''\n }`}\n aria-selected={c.id === country.id}\n title={c.name}\n onClick={() => selectCountry(c.id)}\n onMouseEnter={() => setFocusedIndex(idx)}\n >\n <span className=\"pi-flag\" role=\"img\" aria-label={`${c.name} flag`}>\n {renderFlag ? renderFlag(c) : c.flag}\n </span>\n <span className=\"pi-opt-name\">{c.name}</span>\n <span className=\"pi-opt-code\">{c.code}</span>\n </li>\n ))\n ) : (\n <li className=\"pi-empty\">{noResultsText}</li>\n )}\n </ul>\n </div>,\n document.body\n )}\n\n {/* Screen reader announcements */}\n <div ref={liveRef} className=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" />\n </>\n );\n};\n\nexport const PhoneInput = forwardRef<PhoneInputRef, PhoneInputProps>(PhoneInputInner);\n\nPhoneInput.displayName = 'PhoneInput';\n","import { useRef, useEffect, useCallback } from 'react';\nimport { useFormatter } from './internal/useFormatter';\nimport { useCountry } from './internal/useCountry';\nimport { useInputHandlers } from './internal/useInputHandlers';\n\nimport type { UsePhoneMaskOptions, UsePhoneMaskReturn } from '../types';\n\n/**\n * React hook for phone number masking.\n * Provides low-level phone masking functionality for custom input implementations.\n * Works in controlled mode — caller manages value state via onChange callback.\n */\nexport function usePhoneMask(options: UsePhoneMaskOptions): UsePhoneMaskReturn {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { country, setCountry } = useCountry({\n country: options.country,\n locale: options.locale,\n detect: options.detect,\n onCountryChange: options.onCountryChange\n });\n\n const {\n digits,\n formatter,\n displayPlaceholder,\n displayValue,\n full,\n fullFormatted,\n isComplete,\n isEmpty,\n shouldShowWarn\n } = useFormatter({\n country,\n value: options.value,\n onChange: options.onChange,\n onPhoneChange: options.onPhoneChange\n });\n\n // Use consolidated input handlers\n const { handleBeforeInput, handleInput, handleKeydown, handlePaste } = useInputHandlers({\n formatter,\n digits,\n onChange: options.onChange\n });\n\n // after mount, set input type to tel for better experience\n useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n el.setAttribute('type', 'tel');\n el.setAttribute('inputmode', 'tel');\n }, []);\n\n // Update display when digits or placeholder changes\n useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n el.value = displayValue;\n\n el.setAttribute('placeholder', displayPlaceholder);\n }, [displayValue, displayPlaceholder]);\n\n // Attach event listeners\n useEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const beforeInputHandler = handleBeforeInput;\n const inputHandler = handleInput;\n const keydownHandler = handleKeydown;\n const pasteHandler = handlePaste;\n\n el.addEventListener('beforeinput', beforeInputHandler);\n el.addEventListener('input', inputHandler);\n el.addEventListener('keydown', keydownHandler);\n el.addEventListener('paste', pasteHandler);\n\n return () => {\n el.removeEventListener('beforeinput', beforeInputHandler);\n el.removeEventListener('input', inputHandler);\n el.removeEventListener('keydown', keydownHandler);\n el.removeEventListener('paste', pasteHandler);\n };\n }, [handleBeforeInput, handleInput, handleKeydown, handlePaste]);\n\n const clear = useCallback(() => {\n options.onChange('');\n }, [options.onChange]);\n\n return {\n ref: inputRef,\n digits,\n formatter,\n full,\n fullFormatted,\n isComplete,\n isEmpty,\n shouldShowWarn,\n country,\n setCountry,\n clear\n };\n}\n","import {\n getFlagEmoji,\n countPlaceholders,\n formatDigitsWithMap,\n pickMaskVariant,\n removeCountryCodePrefix,\n toArray\n} from '@desource/phone-mask';\n\nexport { PhoneInput } from './components/PhoneInput';\nexport { usePhoneMask } from './hooks/usePhoneMask';\n\nexport type {\n PhoneInputProps,\n PhoneInputRef,\n PhoneNumber,\n UsePhoneMaskOptions,\n UsePhoneMaskReturn,\n Size as PhoneInputSize,\n Theme as PhoneInputTheme\n} from './types';\n\nexport type {\n CountryKey as PCountryKey,\n MaskBase as PMaskBase,\n MaskBaseMap as PMaskBaseMap,\n Mask as PMask,\n MaskMap as PMaskMap,\n MaskWithFlag as PMaskWithFlag,\n MaskWithFlagMap as PMaskWithFlagMap,\n MaskFull as PMaskFull,\n MaskFullMap as PMaskFullMap\n} from '@desource/phone-mask';\n\nexport const PMaskHelpers = {\n getFlagEmoji,\n countPlaceholders,\n formatDigitsWithMap,\n pickMaskVariant,\n removeCountryCodePrefix,\n toArray\n};\n"],"names":["M","t","countryCodeEmoji","o","e","n","getDisplayNames","s","divideMask","getCodeAndMask","r","MasksFullMap","a","d","MasksFull","f","k","getNavigatorLang","detectCountryFromLocale","hasCountry","getCountry","parseCountryCode","toArray","countPlaceholders","removeCountryCodePrefix","pickMaskVariant","formatDigitsWithMap","c","filterCountries","i","removeDigitsRange","removeSelectedDigits","g","extractDigits","getSelection","setCaret","processBeforeInput","processInput","processKeydown","processPaste","createPhoneFormatter","l","getMask","p","detectCountryFromGeoIP","detectByGeoIp","useFormatter","country","value","onChange","onPhoneChange","onValidationChange","formatter","useMemo","maxDigits","digits","displayPlaceholder","displayValue","full","fullFormatted","isComplete","isEmpty","shouldShowWarn","phoneData","useEffect","useCountry","countryOption","localeOption","detect","onCountryChange","locale","countryCode","setCountryCode","useState","shouldDetect","setCountry","useCallback","code","detectCountry","geoCountry","localeCountry","useTimer","timerRef","useRef","clear","set","callback","delay","useValidationHint","showValidationHint","setShowValidationHint","validationTimer","clearValidationHint","hideHint","scheduleValidationHint","getNativeEvent","HINT_DELAY_INPUT","HINT_DELAY_ACTION","useInputHandlers","options","inactive","scheduleCaretUpdate","el","digitIndex","pos","handleBeforeInput","handleInput","evt","result","handleKeydown","handlePaste","useCountrySelector","rootRef","dropdownRef","searchRef","selectorRef","onSelectCountry","onAfterSelect","search","setSearch","dropdownOpen","setDropdownOpen","dropdownStyle","setDropdownStyle","isClosing","setIsClosing","focusedIndex","setFocusedIndex","countries","filteredCountries","hasDropdown","focusSearch","closeDropdown","openDropdown","handleDropdownAnimationEnd","toggleDropdown","selectCountry","handleSearchChange","onDocClick","ev","target","dropdownEl","selectorEl","positionDropdown","rect","scrollFocusedIntoView","index","list","option","listRect","optionRect","scrollAmount","handleSearchKeydown","next","prev","useClipboard","copied","setCopied","isCopying","setIsCopying","copyTimer","copy","text","trimmedText","err","DELAY","useCopyAction","liveRef","onCopy","liveTimer","copyAriaLabel","copyButtonTitle","announceToScreenReader","message","onCopyClick","valueToCopy","useTheme","theme","systemDark","setSystemDark","themeClass","mq","handler","PhoneInputInner","props","ref","propCountry","propLocale","size","disabled","readonly","showCopy","showClear","withValidity","searchPlaceholder","noResultsText","clearButtonLabel","dropdownClass","disableDefaultStyles","onFocus","onBlur","onClear","renderActionsBefore","renderFlag","renderCopySvg","renderClearSvg","dropdownId","useId","telRef","incomplete","showCopyButton","showClearButton","handleCopyClick","focusInput","handleFocus","handleClearClick","useImperativeHandle","rootClasses","actionsCount","listboxId","optionIdPrefix","activeOptionId","jsxs","Fragment","jsx","createPortal","idx","PhoneInput","forwardRef","usePhoneMask","inputRef","beforeInputHandler","inputHandler","keydownHandler","pasteHandler","PMaskHelpers","getFlagEmoji"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { MaskFull, CountryKey } from '@desource/phone-mask';
1
+ import type { MaskFull, CountryKey, FormatterHelpers } from '@desource/phone-mask';
2
2
  import type { ReactNode, FocusEvent, RefObject } from 'react';
3
3
  export type Size = 'compact' | 'normal' | 'large';
4
4
  export type Theme = 'auto' | 'light' | 'dark';
@@ -9,7 +9,7 @@ export interface PhoneNumber {
9
9
  }
10
10
  export interface PhoneInputProps {
11
11
  /** Controlled value (digits only, without country code) */
12
- value?: string;
12
+ value: string;
13
13
  /** Whether to preselect a country by its ISO 3166-1 alpha-2 code */
14
14
  country?: CountryKey;
15
15
  /**
@@ -81,7 +81,7 @@ export interface PhoneInputProps {
81
81
  * Callback when the digits value changes.
82
82
  * Returns only the digits without country code (e.g. '234567890')
83
83
  */
84
- onChange?: (digits: string) => void;
84
+ onChange: (digits: string) => void;
85
85
  /**
86
86
  * Callback when the phone number changes.
87
87
  * Provides an object with:
@@ -131,16 +131,12 @@ export interface PhoneInputRef {
131
131
  /** Check if the current phone number is complete */
132
132
  isComplete: () => boolean;
133
133
  }
134
- export interface FormatterHelpers {
135
- formatDisplay: (digits: string) => string;
136
- getMaxDigits: () => number;
137
- getPlaceholder: () => string;
138
- getCaretPosition: (digitIndex: number) => number;
139
- getDigitRange: (digits: string, selStart: number, selEnd: number) => [number, number] | null;
140
- isComplete: (digits: string) => boolean;
141
- }
142
134
  /** Configuration options for the phone mask hook */
143
135
  export interface UsePhoneMaskOptions {
136
+ /** Controlled value (digits only, without country code) */
137
+ value: string;
138
+ /** Callback when the digits value changes (e.g. '234567890') */
139
+ onChange: (digits: string) => void;
144
140
  /** Country ISO code (e.g., 'US', 'DE', 'GB') */
145
141
  country?: string;
146
142
  /** Locale for country names (default: navigator.language) */
@@ -148,19 +144,23 @@ export interface UsePhoneMaskOptions {
148
144
  /** Auto-detect country from IP/locale (default: false) */
149
145
  detect?: boolean;
150
146
  /**
151
- * Callback when formatted value changes.
152
- * Provides full number, formatted phone number, and raw digits.
147
+ * Callback when the phone number changes.
148
+ * Provides full, fullFormatted, digits.
153
149
  */
154
- onChange?: (phone: PhoneNumber) => void;
150
+ onPhoneChange?: (phone: PhoneNumber) => void;
155
151
  /** Callback when country changes */
156
152
  onCountryChange?: (country: MaskFull) => void;
157
153
  }
158
154
  /** Return type for usePhoneMask hook */
159
155
  export interface UsePhoneMaskReturn {
160
- /** Ref to attach to input element */
161
- ref: RefObject<HTMLInputElement | null>;
156
+ /** Current country data */
157
+ country: MaskFull;
158
+ /** Change country programmatically */
159
+ setCountry: (countryCode: string) => void;
162
160
  /** Raw digits without formatting */
163
161
  digits: string;
162
+ /** Phone formatter instance */
163
+ formatter: FormatterHelpers;
164
164
  /** Full phone number with country code */
165
165
  full: string;
166
166
  /** Full phone number formatted */
@@ -171,10 +171,8 @@ export interface UsePhoneMaskReturn {
171
171
  isEmpty: boolean;
172
172
  /** Whether to show validation warning */
173
173
  shouldShowWarn: boolean;
174
- /** Current country data */
175
- country: MaskFull;
176
- /** Change country programmatically */
177
- setCountry: (countryCode: string) => void;
174
+ /** Ref to attach to input element */
175
+ ref: RefObject<HTMLInputElement | null>;
178
176
  /** Clear the input */
179
177
  clear: () => void;
180
178
  }