/*
 * International Telephone Input v25.15.0
 * https://github.com/jackocnr/intl-tel-input.git
 * Licensed under the MIT license
 */

// UMD
(function(factory) {
  if (typeof module === 'object' && module.exports) {
    module.exports = factory();
  } else {
    window.intlTelInput = factory();
  }
}(() => {

var factoryOutput = (() => {
  var __defProp = Object.defineProperty;
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  var __getOwnPropNames = Object.getOwnPropertyNames;
  var __hasOwnProp = Object.prototype.hasOwnProperty;
  var __export = (target, all) => {
    for (var name in all)
      __defProp(target, name, { get: all[name], enumerable: true });
  };
  var __copyProps = (to, from, except, desc) => {
    if (from && typeof from === "object" || typeof from === "function") {
      for (let key of __getOwnPropNames(from))
        if (!__hasOwnProp.call(to, key) && key !== except)
          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
    }
    return to;
  };
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

  // src/js/intl-tel-input.ts
  var intl_tel_input_exports = {};
  __export(intl_tel_input_exports, {
    Iti: () => Iti,
    default: () => intl_tel_input_default
  });

  // src/js/intl-tel-input/data.ts
  var rawCountryData = [
    [
      "af",
      // Afghanistan
      "93",
      0,
      null,
      "0"
    ],
    [
      "ax",
      // Åland Islands
      "358",
      1,
      ["18", "4"],
      // (4 is a mobile range shared with FI)
      "0"
    ],
    [
      "al",
      // Albania
      "355",
      0,
      null,
      "0"
    ],
    [
      "dz",
      // Algeria
      "213",
      0,
      null,
      "0"
    ],
    [
      "as",
      // American Samoa
      "1",
      5,
      ["684"],
      "1"
    ],
    [
      "ad",
      // Andorra
      "376"
    ],
    [
      "ao",
      // Angola
      "244"
    ],
    [
      "ai",
      // Anguilla
      "1",
      6,
      ["264"],
      "1"
    ],
    [
      "ag",
      // Antigua and Barbuda
      "1",
      7,
      ["268"],
      "1"
    ],
    [
      "ar",
      // Argentina
      "54",
      0,
      null,
      "0"
    ],
    [
      "am",
      // Armenia
      "374",
      0,
      null,
      "0"
    ],
    [
      "aw",
      // Aruba
      "297"
    ],
    [
      "ac",
      // Ascension Island
      "247"
    ],
    [
      "au",
      // Australia
      "61",
      0,
      ["4"],
      // (mobile range shared with CX and CC)
      "0"
    ],
    [
      "at",
      // Austria
      "43",
      0,
      null,
      "0"
    ],
    [
      "az",
      // Azerbaijan
      "994",
      0,
      null,
      "0"
    ],
    [
      "bs",
      // Bahamas
      "1",
      8,
      ["242"],
      "1"
    ],
    [
      "bh",
      // Bahrain
      "973"
    ],
    [
      "bd",
      // Bangladesh
      "880",
      0,
      null,
      "0"
    ],
    [
      "bb",
      // Barbados
      "1",
      9,
      ["246"],
      "1"
    ],
    [
      "by",
      // Belarus
      "375",
      0,
      null,
      "8"
    ],
    [
      "be",
      // Belgium
      "32",
      0,
      null,
      "0"
    ],
    [
      "bz",
      // Belize
      "501"
    ],
    [
      "bj",
      // Benin
      "229"
    ],
    [
      "bm",
      // Bermuda
      "1",
      10,
      ["441"],
      "1"
    ],
    [
      "bt",
      // Bhutan
      "975"
    ],
    [
      "bo",
      // Bolivia
      "591",
      0,
      null,
      "0"
    ],
    [
      "ba",
      // Bosnia and Herzegovina
      "387",
      0,
      null,
      "0"
    ],
    [
      "bw",
      // Botswana
      "267"
    ],
    [
      "br",
      // Brazil
      "55",
      0,
      null,
      "0"
    ],
    [
      "io",
      // British Indian Ocean Territory
      "246"
    ],
    [
      "vg",
      // British Virgin Islands
      "1",
      11,
      ["284"],
      "1"
    ],
    [
      "bn",
      // Brunei
      "673"
    ],
    [
      "bg",
      // Bulgaria
      "359",
      0,
      null,
      "0"
    ],
    [
      "bf",
      // Burkina Faso
      "226"
    ],
    [
      "bi",
      // Burundi
      "257"
    ],
    [
      "kh",
      // Cambodia
      "855",
      0,
      null,
      "0"
    ],
    [
      "cm",
      // Cameroon
      "237"
    ],
    [
      "ca",
      // Canada
      "1",
      1,
      ["204", "226", "236", "249", "250", "257", "263", "289", "306", "343", "354", "365", "367", "368", "382", "403", "416", "418", "428", "431", "437", "438", "450", "468", "474", "506", "514", "519", "548", "579", "581", "584", "587", "604", "613", "639", "647", "672", "683", "705", "709", "742", "753", "778", "780", "782", "807", "819", "825", "867", "873", "879", "902", "905", "942"],
      "1"
    ],
    [
      "cv",
      // Cape Verde
      "238"
    ],
    [
      "bq",
      // Caribbean Netherlands
      "599",
      1,
      ["3", "4", "7"]
    ],
    [
      "ky",
      // Cayman Islands
      "1",
      12,
      ["345"],
      "1"
    ],
    [
      "cf",
      // Central African Republic
      "236"
    ],
    [
      "td",
      // Chad
      "235"
    ],
    [
      "cl",
      // Chile
      "56"
    ],
    [
      "cn",
      // China
      "86",
      0,
      null,
      "0"
    ],
    [
      "cx",
      // Christmas Island
      "61",
      2,
      ["4", "89164"],
      // (4 is a mobile range shared with AU and CC)
      "0"
    ],
    [
      "cc",
      // Cocos (Keeling) Islands
      "61",
      1,
      ["4", "89162"],
      // (4 is a mobile range shared with AU and CX)
      "0"
    ],
    [
      "co",
      // Colombia
      "57",
      0,
      null,
      "0"
    ],
    [
      "km",
      // Comoros
      "269"
    ],
    [
      "cg",
      // Congo (Brazzaville)
      "242"
    ],
    [
      "cd",
      // Congo (Kinshasa)
      "243",
      0,
      null,
      "0"
    ],
    [
      "ck",
      // Cook Islands
      "682"
    ],
    [
      "cr",
      // Costa Rica
      "506"
    ],
    [
      "ci",
      // Côte d'Ivoire
      "225"
    ],
    [
      "hr",
      // Croatia
      "385",
      0,
      null,
      "0"
    ],
    [
      "cu",
      // Cuba
      "53",
      0,
      null,
      "0"
    ],
    [
      "cw",
      // Curaçao
      "599",
      0
    ],
    [
      "cy",
      // Cyprus
      "357"
    ],
    [
      "cz",
      // Czech Republic
      "420"
    ],
    [
      "dk",
      // Denmark
      "45"
    ],
    [
      "dj",
      // Djibouti
      "253"
    ],
    [
      "dm",
      // Dominica
      "1",
      13,
      ["767"],
      "1"
    ],
    [
      "do",
      // Dominican Republic
      "1",
      2,
      ["809", "829", "849"],
      "1"
    ],
    [
      "ec",
      // Ecuador
      "593",
      0,
      null,
      "0"
    ],
    [
      "eg",
      // Egypt
      "20",
      0,
      null,
      "0"
    ],
    [
      "sv",
      // El Salvador
      "503"
    ],
    [
      "gq",
      // Equatorial Guinea
      "240"
    ],
    [
      "er",
      // Eritrea
      "291",
      0,
      null,
      "0"
    ],
    [
      "ee",
      // Estonia
      "372"
    ],
    [
      "sz",
      // Eswatini
      "268"
    ],
    [
      "et",
      // Ethiopia
      "251",
      0,
      null,
      "0"
    ],
    [
      "fk",
      // Falkland Islands (Malvinas)
      "500"
    ],
    [
      "fo",
      // Faroe Islands
      "298"
    ],
    [
      "fj",
      // Fiji
      "679"
    ],
    [
      "fi",
      // Finland
      "358",
      0,
      ["4"],
      // (mobile range shared with AX)
      "0"
    ],
    [
      "fr",
      // France
      "33",
      0,
      null,
      "0"
    ],
    [
      "gf",
      // French Guiana
      "594",
      0,
      null,
      "0"
    ],
    [
      "pf",
      // French Polynesia
      "689"
    ],
    [
      "ga",
      // Gabon
      "241"
    ],
    [
      "gm",
      // Gambia
      "220"
    ],
    [
      "ge",
      // Georgia
      "995",
      0,
      null,
      "0"
    ],
    [
      "de",
      // Germany
      "49",
      0,
      null,
      "0"
    ],
    [
      "gh",
      // Ghana
      "233",
      0,
      null,
      "0"
    ],
    [
      "gi",
      // Gibraltar
      "350"
    ],
    [
      "gr",
      // Greece
      "30"
    ],
    [
      "gl",
      // Greenland
      "299"
    ],
    [
      "gd",
      // Grenada
      "1",
      14,
      ["473"],
      "1"
    ],
    [
      "gp",
      // Guadeloupe
      "590",
      0,
      null,
      "0"
    ],
    [
      "gu",
      // Guam
      "1",
      15,
      ["671"],
      "1"
    ],
    [
      "gt",
      // Guatemala
      "502"
    ],
    [
      "gg",
      // Guernsey
      "44",
      1,
      ["1481", "7781", "7839", "7911"],
      "0"
    ],
    [
      "gn",
      // Guinea
      "224"
    ],
    [
      "gw",
      // Guinea-Bissau
      "245"
    ],
    [
      "gy",
      // Guyana
      "592"
    ],
    [
      "ht",
      // Haiti
      "509"
    ],
    [
      "hn",
      // Honduras
      "504"
    ],
    [
      "hk",
      // Hong Kong SAR China
      "852"
    ],
    [
      "hu",
      // Hungary
      "36",
      0,
      null,
      "06"
    ],
    [
      "is",
      // Iceland
      "354"
    ],
    [
      "in",
      // India
      "91",
      0,
      null,
      "0"
    ],
    [
      "id",
      // Indonesia
      "62",
      0,
      null,
      "0"
    ],
    [
      "ir",
      // Iran
      "98",
      0,
      null,
      "0"
    ],
    [
      "iq",
      // Iraq
      "964",
      0,
      null,
      "0"
    ],
    [
      "ie",
      // Ireland
      "353",
      0,
      null,
      "0"
    ],
    [
      "im",
      // Isle of Man
      "44",
      2,
      ["1624", "74576", "7524", "7624", "7924"],
      "0"
    ],
    [
      "il",
      // Israel
      "972",
      0,
      null,
      "0"
    ],
    [
      "it",
      // Italy
      "39",
      0,
      ["3"]
      // (mobile range shared with VA)
    ],
    [
      "jm",
      // Jamaica
      "1",
      4,
      ["658", "876"],
      "1"
    ],
    [
      "jp",
      // Japan
      "81",
      0,
      null,
      "0"
    ],
    [
      "je",
      // Jersey
      "44",
      3,
      ["1534", "7509", "7700", "7797", "7829", "7937"],
      "0"
    ],
    [
      "jo",
      // Jordan
      "962",
      0,
      null,
      "0"
    ],
    [
      "kz",
      // Kazakhstan
      "7",
      1,
      ["33", "7"],
      // (33 is shared with RU)
      "8"
    ],
    [
      "ke",
      // Kenya
      "254",
      0,
      null,
      "0"
    ],
    [
      "ki",
      // Kiribati
      "686",
      0,
      null,
      "0"
    ],
    [
      "xk",
      // Kosovo
      "383",
      0,
      null,
      "0"
    ],
    [
      "kw",
      // Kuwait
      "965"
    ],
    [
      "kg",
      // Kyrgyzstan
      "996",
      0,
      null,
      "0"
    ],
    [
      "la",
      // Laos
      "856",
      0,
      null,
      "0"
    ],
    [
      "lv",
      // Latvia
      "371"
    ],
    [
      "lb",
      // Lebanon
      "961",
      0,
      null,
      "0"
    ],
    [
      "ls",
      // Lesotho
      "266"
    ],
    [
      "lr",
      // Liberia
      "231",
      0,
      null,
      "0"
    ],
    [
      "ly",
      // Libya
      "218",
      0,
      null,
      "0"
    ],
    [
      "li",
      // Liechtenstein
      "423",
      0,
      null,
      "0"
    ],
    [
      "lt",
      // Lithuania
      "370",
      0,
      null,
      "0"
    ],
    [
      "lu",
      // Luxembourg
      "352"
    ],
    [
      "mo",
      // Macao SAR China
      "853"
    ],
    [
      "mg",
      // Madagascar
      "261",
      0,
      null,
      "0"
    ],
    [
      "mw",
      // Malawi
      "265",
      0,
      null,
      "0"
    ],
    [
      "my",
      // Malaysia
      "60",
      0,
      null,
      "0"
    ],
    [
      "mv",
      // Maldives
      "960"
    ],
    [
      "ml",
      // Mali
      "223"
    ],
    [
      "mt",
      // Malta
      "356"
    ],
    [
      "mh",
      // Marshall Islands
      "692",
      0,
      null,
      "1"
    ],
    [
      "mq",
      // Martinique
      "596",
      0,
      null,
      "0"
    ],
    [
      "mr",
      // Mauritania
      "222"
    ],
    [
      "mu",
      // Mauritius
      "230"
    ],
    [
      "yt",
      // Mayotte
      "262",
      1,
      ["269", "639"],
      "0"
    ],
    [
      "mx",
      // Mexico
      "52"
    ],
    [
      "fm",
      // Micronesia
      "691"
    ],
    [
      "md",
      // Moldova
      "373",
      0,
      null,
      "0"
    ],
    [
      "mc",
      // Monaco
      "377",
      0,
      null,
      "0"
    ],
    [
      "mn",
      // Mongolia
      "976",
      0,
      null,
      "0"
    ],
    [
      "me",
      // Montenegro
      "382",
      0,
      null,
      "0"
    ],
    [
      "ms",
      // Montserrat
      "1",
      16,
      ["664"],
      "1"
    ],
    [
      "ma",
      // Morocco
      "212",
      0,
      ["6", "7"],
      // (mobile ranges shared with EH)
      "0"
    ],
    [
      "mz",
      // Mozambique
      "258"
    ],
    [
      "mm",
      // Myanmar (Burma)
      "95",
      0,
      null,
      "0"
    ],
    [
      "na",
      // Namibia
      "264",
      0,
      null,
      "0"
    ],
    [
      "nr",
      // Nauru
      "674"
    ],
    [
      "np",
      // Nepal
      "977",
      0,
      null,
      "0"
    ],
    [
      "nl",
      // Netherlands
      "31",
      0,
      null,
      "0"
    ],
    [
      "nc",
      // New Caledonia
      "687"
    ],
    [
      "nz",
      // New Zealand
      "64",
      0,
      null,
      "0"
    ],
    [
      "ni",
      // Nicaragua
      "505"
    ],
    [
      "ne",
      // Niger
      "227"
    ],
    [
      "ng",
      // Nigeria
      "234",
      0,
      null,
      "0"
    ],
    [
      "nu",
      // Niue
      "683"
    ],
    [
      "nf",
      // Norfolk Island
      "672"
    ],
    [
      "kp",
      // North Korea
      "850",
      0,
      null,
      "0"
    ],
    [
      "mk",
      // North Macedonia
      "389",
      0,
      null,
      "0"
    ],
    [
      "mp",
      // Northern Mariana Islands
      "1",
      17,
      ["670"],
      "1"
    ],
    [
      "no",
      // Norway
      "47",
      0,
      ["4", "9"]
      // (mobile ranges shared with SJ)
    ],
    [
      "om",
      // Oman
      "968"
    ],
    [
      "pk",
      // Pakistan
      "92",
      0,
      null,
      "0"
    ],
    [
      "pw",
      // Palau
      "680"
    ],
    [
      "ps",
      // Palestinian Territories
      "970",
      0,
      null,
      "0"
    ],
    [
      "pa",
      // Panama
      "507"
    ],
    [
      "pg",
      // Papua New Guinea
      "675"
    ],
    [
      "py",
      // Paraguay
      "595",
      0,
      null,
      "0"
    ],
    [
      "pe",
      // Peru
      "51",
      0,
      null,
      "0"
    ],
    [
      "ph",
      // Philippines
      "63",
      0,
      null,
      "0"
    ],
    [
      "pl",
      // Poland
      "48"
    ],
    [
      "pt",
      // Portugal
      "351"
    ],
    [
      "pr",
      // Puerto Rico
      "1",
      3,
      ["787", "939"],
      "1"
    ],
    [
      "qa",
      // Qatar
      "974"
    ],
    [
      "re",
      // Réunion
      "262",
      0,
      null,
      "0"
    ],
    [
      "ro",
      // Romania
      "40",
      0,
      null,
      "0"
    ],
    [
      "ru",
      // Russia
      "7",
      0,
      ["33"],
      // (shared with KZ)
      "8"
    ],
    [
      "rw",
      // Rwanda
      "250",
      0,
      null,
      "0"
    ],
    [
      "ws",
      // Samoa
      "685"
    ],
    [
      "sm",
      // San Marino
      "378"
    ],
    [
      "st",
      // São Tomé & Príncipe
      "239"
    ],
    [
      "sa",
      // Saudi Arabia
      "966",
      0,
      null,
      "0"
    ],
    [
      "sn",
      // Senegal
      "221"
    ],
    [
      "rs",
      // Serbia
      "381",
      0,
      null,
      "0"
    ],
    [
      "sc",
      // Seychelles
      "248"
    ],
    [
      "sl",
      // Sierra Leone
      "232",
      0,
      null,
      "0"
    ],
    [
      "sg",
      // Singapore
      "65"
    ],
    [
      "sx",
      // Sint Maarten
      "1",
      21,
      ["721"],
      "1"
    ],
    [
      "sk",
      // Slovakia
      "421",
      0,
      null,
      "0"
    ],
    [
      "si",
      // Slovenia
      "386",
      0,
      null,
      "0"
    ],
    [
      "sb",
      // Solomon Islands
      "677"
    ],
    [
      "so",
      // Somalia
      "252",
      0,
      null,
      "0"
    ],
    [
      "za",
      // South Africa
      "27",
      0,
      null,
      "0"
    ],
    [
      "kr",
      // South Korea
      "82",
      0,
      null,
      "0"
    ],
    [
      "ss",
      // South Sudan
      "211",
      0,
      null,
      "0"
    ],
    [
      "es",
      // Spain
      "34"
    ],
    [
      "lk",
      // Sri Lanka
      "94",
      0,
      null,
      "0"
    ],
    [
      "bl",
      // St. Barthélemy
      "590",
      1,
      null,
      "0"
    ],
    [
      "sh",
      // St. Helena
      "290"
    ],
    [
      "kn",
      // St. Kitts & Nevis
      "1",
      18,
      ["869"],
      "1"
    ],
    [
      "lc",
      // St. Lucia
      "1",
      19,
      ["758"],
      "1"
    ],
    [
      "mf",
      // St. Martin
      "590",
      2,
      null,
      "0"
    ],
    [
      "pm",
      // St. Pierre & Miquelon
      "508",
      0,
      null,
      "0"
    ],
    [
      "vc",
      // St. Vincent & Grenadines
      "1",
      20,
      ["784"],
      "1"
    ],
    [
      "sd",
      // Sudan
      "249",
      0,
      null,
      "0"
    ],
    [
      "sr",
      // Suriname
      "597"
    ],
    [
      "sj",
      // Svalbard & Jan Mayen
      "47",
      1,
      ["4", "79", "9"]
      // (4 and 9 are mobile ranges shared with NO)
    ],
    [
      "se",
      // Sweden
      "46",
      0,
      null,
      "0"
    ],
    [
      "ch",
      // Switzerland
      "41",
      0,
      null,
      "0"
    ],
    [
      "sy",
      // Syria
      "963",
      0,
      null,
      "0"
    ],
    [
      "tw",
      // Taiwan
      "886",
      0,
      null,
      "0"
    ],
    [
      "tj",
      // Tajikistan
      "992"
    ],
    [
      "tz",
      // Tanzania
      "255",
      0,
      null,
      "0"
    ],
    [
      "th",
      // Thailand
      "66",
      0,
      null,
      "0"
    ],
    [
      "tl",
      // Timor-Leste
      "670"
    ],
    [
      "tg",
      // Togo
      "228"
    ],
    [
      "tk",
      // Tokelau
      "690"
    ],
    [
      "to",
      // Tonga
      "676"
    ],
    [
      "tt",
      // Trinidad & Tobago
      "1",
      22,
      ["868"],
      "1"
    ],
    [
      "tn",
      // Tunisia
      "216"
    ],
    [
      "tr",
      // Turkey
      "90",
      0,
      null,
      "0"
    ],
    [
      "tm",
      // Turkmenistan
      "993",
      0,
      null,
      "8"
    ],
    [
      "tc",
      // Turks & Caicos Islands
      "1",
      23,
      ["649"],
      "1"
    ],
    [
      "tv",
      // Tuvalu
      "688"
    ],
    [
      "vi",
      // U.S. Virgin Islands
      "1",
      24,
      ["340"],
      "1"
    ],
    [
      "ug",
      // Uganda
      "256",
      0,
      null,
      "0"
    ],
    [
      "ua",
      // Ukraine
      "380",
      0,
      null,
      "0"
    ],
    [
      "ae",
      // United Arab Emirates
      "971",
      0,
      null,
      "0"
    ],
    [
      "gb",
      // United Kingdom
      "44",
      0,
      null,
      "0"
    ],
    [
      "us",
      // United States
      "1",
      0,
      null,
      "1"
    ],
    [
      "uy",
      // Uruguay
      "598",
      0,
      null,
      "0"
    ],
    [
      "uz",
      // Uzbekistan
      "998"
    ],
    [
      "vu",
      // Vanuatu
      "678"
    ],
    [
      "va",
      // Vatican City
      "39",
      1,
      ["06698", "3"]
      // (3 is a mobile range shared with IT)
    ],
    [
      "ve",
      // Venezuela
      "58",
      0,
      null,
      "0"
    ],
    [
      "vn",
      // Vietnam
      "84",
      0,
      null,
      "0"
    ],
    [
      "wf",
      // Wallis & Futuna
      "681"
    ],
    [
      "eh",
      // Western Sahara
      "212",
      1,
      ["5288", "5289", "6", "7"],
      // (6 and 7 are mobile ranges shared with MA)
      "0"
    ],
    [
      "ye",
      // Yemen
      "967",
      0,
      null,
      "0"
    ],
    [
      "zm",
      // Zambia
      "260",
      0,
      null,
      "0"
    ],
    [
      "zw",
      // Zimbabwe
      "263",
      0,
      null,
      "0"
    ]
  ];
  var allCountries = [];
  for (const c of rawCountryData) {
    allCountries.push({
      name: "",
      // populated in the plugin
      iso2: c[0],
      dialCode: c[1],
      priority: c[2] || 0,
      areaCodes: c[3] || null,
      nodeById: {},
      // populated by the plugin
      nationalPrefix: c[4] || null,
      normalisedName: "",
      // populated in the plugin
      initials: "",
      // populated in the plugin
      dialCodePlus: ""
      // populated in the plugin
    });
  }
  var data_default = allCountries;

  // src/js/intl-tel-input/i18n/en/countries.ts
  var countryTranslations = {
    ad: "Andorra",
    ae: "United Arab Emirates",
    af: "Afghanistan",
    ag: "Antigua & Barbuda",
    ai: "Anguilla",
    al: "Albania",
    am: "Armenia",
    ao: "Angola",
    ar: "Argentina",
    as: "American Samoa",
    at: "Austria",
    au: "Australia",
    aw: "Aruba",
    ax: "\xC5land Islands",
    az: "Azerbaijan",
    ba: "Bosnia & Herzegovina",
    bb: "Barbados",
    bd: "Bangladesh",
    be: "Belgium",
    bf: "Burkina Faso",
    bg: "Bulgaria",
    bh: "Bahrain",
    bi: "Burundi",
    bj: "Benin",
    bl: "St. Barth\xE9lemy",
    bm: "Bermuda",
    bn: "Brunei",
    bo: "Bolivia",
    bq: "Caribbean Netherlands",
    br: "Brazil",
    bs: "Bahamas",
    bt: "Bhutan",
    bw: "Botswana",
    by: "Belarus",
    bz: "Belize",
    ca: "Canada",
    cc: "Cocos (Keeling) Islands",
    cd: "Congo - Kinshasa",
    cf: "Central African Republic",
    cg: "Congo - Brazzaville",
    ch: "Switzerland",
    ci: "C\xF4te d\u2019Ivoire",
    ck: "Cook Islands",
    cl: "Chile",
    cm: "Cameroon",
    cn: "China",
    co: "Colombia",
    cr: "Costa Rica",
    cu: "Cuba",
    cv: "Cape Verde",
    cw: "Cura\xE7ao",
    cx: "Christmas Island",
    cy: "Cyprus",
    cz: "Czechia",
    de: "Germany",
    dj: "Djibouti",
    dk: "Denmark",
    dm: "Dominica",
    do: "Dominican Republic",
    dz: "Algeria",
    ec: "Ecuador",
    ee: "Estonia",
    eg: "Egypt",
    eh: "Western Sahara",
    er: "Eritrea",
    es: "Spain",
    et: "Ethiopia",
    fi: "Finland",
    fj: "Fiji",
    fk: "Falkland Islands",
    fm: "Micronesia",
    fo: "Faroe Islands",
    fr: "France",
    ga: "Gabon",
    gb: "United Kingdom",
    gd: "Grenada",
    ge: "Georgia",
    gf: "French Guiana",
    gg: "Guernsey",
    gh: "Ghana",
    gi: "Gibraltar",
    gl: "Greenland",
    gm: "Gambia",
    gn: "Guinea",
    gp: "Guadeloupe",
    gq: "Equatorial Guinea",
    gr: "Greece",
    gt: "Guatemala",
    gu: "Guam",
    gw: "Guinea-Bissau",
    gy: "Guyana",
    hk: "Hong Kong SAR China",
    hn: "Honduras",
    hr: "Croatia",
    ht: "Haiti",
    hu: "Hungary",
    id: "Indonesia",
    ie: "Ireland",
    il: "Israel",
    im: "Isle of Man",
    in: "India",
    io: "British Indian Ocean Territory",
    iq: "Iraq",
    ir: "Iran",
    is: "Iceland",
    it: "Italy",
    je: "Jersey",
    jm: "Jamaica",
    jo: "Jordan",
    jp: "Japan",
    ke: "Kenya",
    kg: "Kyrgyzstan",
    kh: "Cambodia",
    ki: "Kiribati",
    km: "Comoros",
    kn: "St. Kitts & Nevis",
    kp: "North Korea",
    kr: "South Korea",
    kw: "Kuwait",
    ky: "Cayman Islands",
    kz: "Kazakhstan",
    la: "Laos",
    lb: "Lebanon",
    lc: "St. Lucia",
    li: "Liechtenstein",
    lk: "Sri Lanka",
    lr: "Liberia",
    ls: "Lesotho",
    lt: "Lithuania",
    lu: "Luxembourg",
    lv: "Latvia",
    ly: "Libya",
    ma: "Morocco",
    mc: "Monaco",
    md: "Moldova",
    me: "Montenegro",
    mf: "St. Martin",
    mg: "Madagascar",
    mh: "Marshall Islands",
    mk: "North Macedonia",
    ml: "Mali",
    mm: "Myanmar (Burma)",
    mn: "Mongolia",
    mo: "Macao SAR China",
    mp: "Northern Mariana Islands",
    mq: "Martinique",
    mr: "Mauritania",
    ms: "Montserrat",
    mt: "Malta",
    mu: "Mauritius",
    mv: "Maldives",
    mw: "Malawi",
    mx: "Mexico",
    my: "Malaysia",
    mz: "Mozambique",
    na: "Namibia",
    nc: "New Caledonia",
    ne: "Niger",
    nf: "Norfolk Island",
    ng: "Nigeria",
    ni: "Nicaragua",
    nl: "Netherlands",
    no: "Norway",
    np: "Nepal",
    nr: "Nauru",
    nu: "Niue",
    nz: "New Zealand",
    om: "Oman",
    pa: "Panama",
    pe: "Peru",
    pf: "French Polynesia",
    pg: "Papua New Guinea",
    ph: "Philippines",
    pk: "Pakistan",
    pl: "Poland",
    pm: "St. Pierre & Miquelon",
    pr: "Puerto Rico",
    ps: "Palestinian Territories",
    pt: "Portugal",
    pw: "Palau",
    py: "Paraguay",
    qa: "Qatar",
    re: "R\xE9union",
    ro: "Romania",
    rs: "Serbia",
    ru: "Russia",
    rw: "Rwanda",
    sa: "Saudi Arabia",
    sb: "Solomon Islands",
    sc: "Seychelles",
    sd: "Sudan",
    se: "Sweden",
    sg: "Singapore",
    sh: "St. Helena",
    si: "Slovenia",
    sj: "Svalbard & Jan Mayen",
    sk: "Slovakia",
    sl: "Sierra Leone",
    sm: "San Marino",
    sn: "Senegal",
    so: "Somalia",
    sr: "Suriname",
    ss: "South Sudan",
    st: "S\xE3o Tom\xE9 & Pr\xEDncipe",
    sv: "El Salvador",
    sx: "Sint Maarten",
    sy: "Syria",
    sz: "Eswatini",
    tc: "Turks & Caicos Islands",
    td: "Chad",
    tg: "Togo",
    th: "Thailand",
    tj: "Tajikistan",
    tk: "Tokelau",
    tl: "Timor-Leste",
    tm: "Turkmenistan",
    tn: "Tunisia",
    to: "Tonga",
    tr: "Turkey",
    tt: "Trinidad & Tobago",
    tv: "Tuvalu",
    tw: "Taiwan",
    tz: "Tanzania",
    ua: "Ukraine",
    ug: "Uganda",
    us: "United States",
    uy: "Uruguay",
    uz: "Uzbekistan",
    va: "Vatican City",
    vc: "St. Vincent & Grenadines",
    ve: "Venezuela",
    vg: "British Virgin Islands",
    vi: "U.S. Virgin Islands",
    vn: "Vietnam",
    vu: "Vanuatu",
    wf: "Wallis & Futuna",
    ws: "Samoa",
    ye: "Yemen",
    yt: "Mayotte",
    za: "South Africa",
    zm: "Zambia",
    zw: "Zimbabwe"
  };
  var countries_default = countryTranslations;

  // src/js/intl-tel-input/i18n/en/interface.ts
  var interfaceTranslations = {
    selectedCountryAriaLabel: "Change country, selected ${countryName} (${dialCode})",
    noCountrySelected: "Select country",
    countryListAriaLabel: "List of countries",
    searchPlaceholder: "Search",
    clearSearchAriaLabel: "Clear search",
    zeroSearchResults: "No results found",
    oneSearchResult: "1 result found",
    multipleSearchResults: "${count} results found",
    // additional countries (not supported by country-list library)
    ac: "Ascension Island",
    xk: "Kosovo"
  };
  var interface_default = interfaceTranslations;

  // src/js/intl-tel-input/i18n/en/index.ts
  var allTranslations = { ...countries_default, ...interface_default };
  var en_default = allTranslations;

  // src/js/modules/constants.ts
  var EVENTS = {
    OPEN_COUNTRY_DROPDOWN: "open:countrydropdown",
    CLOSE_COUNTRY_DROPDOWN: "close:countrydropdown",
    COUNTRY_CHANGE: "countrychange",
    INPUT: "input"
    // used for synthetic input trigger
  };
  var CLASSES = {
    HIDE: "iti__hide",
    V_HIDE: "iti__v-hide",
    ARROW_UP: "iti__arrow--up",
    GLOBE: "iti__globe",
    FLAG: "iti__flag",
    COUNTRY_ITEM: "iti__country",
    HIGHLIGHT: "iti__highlight"
  };
  var KEYS = {
    ARROW_UP: "ArrowUp",
    ARROW_DOWN: "ArrowDown",
    SPACE: " ",
    ENTER: "Enter",
    ESC: "Escape",
    TAB: "Tab"
  };
  var INPUT_TYPES = {
    PASTE: "insertFromPaste",
    DELETE_FWD: "deleteContentForward"
  };
  var REGEX = {
    ALPHA_UNICODE: /\p{L}/u,
    // any kind of letter from any language
    NON_PLUS_NUMERIC: /[^+0-9]/,
    // chars that are NOT + or digit
    NON_PLUS_NUMERIC_GLOBAL: /[^+0-9]/g,
    // chars that are NOT + or digit (global)
    HIDDEN_SEARCH_CHAR: /^[a-zA-ZÀ-ÿа-яА-Я ]$/
    // single acceptable hidden-search char
  };
  var TIMINGS = {
    SEARCH_DEBOUNCE_MS: 100,
    HIDDEN_SEARCH_RESET_MS: 1e3,
    NEXT_TICK: 0
  };
  var SENTINELS = {
    UNKNOWN_NUMBER_TYPE: -99,
    UNKNOWN_VALIDATION_ERROR: -99
  };
  var LAYOUT = {
    SANE_SELECTED_WITH_DIAL_WIDTH: 78,
    // px width fallback when separateDialCode enabled
    SANE_SELECTED_NO_DIAL_WIDTH: 42,
    // px width fallback when no separate dial code
    INPUT_PADDING_EXTRA_LEFT: 6
    // px gap between selected country container and input text
  };
  var DIAL = {
    PLUS: "+",
    NANP: "1"
    // North American Numbering Plan
  };
  var UK = {
    ISO2: "gb",
    DIAL_CODE: "44",
    // +44 United Kingdom
    MOBILE_PREFIX: "7",
    // UK mobile numbers start with 7 after national trunk (0) or core section
    MOBILE_CORE_LENGTH: 10
    // core number length (excluding dial code / national prefix) for mobiles
  };
  var US = {
    ISO2: "us",
    DIAL_CODE: "1"
    // +1 United States
  };
  var PLACEHOLDER_MODES = {
    AGGRESSIVE: "aggressive",
    POLITE: "polite",
    OFF: "off"
  };
  var INITIAL_COUNTRY = {
    AUTO: "auto"
  };
  var DATA_KEYS = {
    COUNTRY_CODE: "countryCode",
    DIAL_CODE: "dialCode"
  };
  var ARIA = {
    EXPANDED: "aria-expanded",
    LABEL: "aria-label",
    SELECTED: "aria-selected",
    ACTIVE_DESCENDANT: "aria-activedescendant",
    HASPOPUP: "aria-haspopup",
    CONTROLS: "aria-controls",
    HIDDEN: "aria-hidden",
    AUTOCOMPLETE: "aria-autocomplete",
    MODAL: "aria-modal"
  };

  // src/js/modules/core/options.ts
  var mq = (q) => typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia(q).matches;
  var computeDefaultUseFullscreenPopup = () => {
    if (typeof navigator !== "undefined" && typeof window !== "undefined") {
      const isMobileUserAgent = /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
        navigator.userAgent
      );
      const isNarrowViewport = mq("(max-width: 500px)");
      const isShortViewport = mq("(max-height: 600px)");
      const isCoarsePointer = mq("(pointer: coarse)");
      return isMobileUserAgent || isNarrowViewport || isCoarsePointer && isShortViewport;
    }
    return false;
  };
  var defaults = {
    // Allow alphanumeric "phonewords" (e.g. +1 800 FLOWERS) as valid numbers
    allowPhonewords: false,
    //* Whether or not to allow the dropdown.
    allowDropdown: true,
    //* Add a placeholder in the input with an example number for the selected country.
    autoPlaceholder: PLACEHOLDER_MODES.POLITE,
    //* Modify the parentClass.
    containerClass: "",
    //* The order of the countries in the dropdown. Defaults to alphabetical.
    countryOrder: null,
    //* Add a country search input at the top of the dropdown.
    countrySearch: true,
    //* Modify the auto placeholder.
    customPlaceholder: null,
    //* Append menu to specified element.
    dropdownContainer: null,
    //* Don't display these countries.
    excludeCountries: [],
    //* Fix the dropdown width to the input width (rather than being as wide as the longest country name).
    fixDropdownWidth: true,
    //* Format the number as the user types
    formatAsYouType: true,
    //* Format the input value during initialisation and on setNumber.
    formatOnDisplay: true,
    //* geoIp lookup function.
    geoIpLookup: null,
    //* Inject a hidden input with the name returned from this function, and on submit, populate it with the result of getNumber.
    hiddenInput: null,
    //* Internationalise the plugin text e.g. search input placeholder, country names.
    i18n: {},
    //* Initial country.
    initialCountry: "",
    //* A function to load the utils script.
    loadUtils: null,
    //* National vs international formatting for numbers e.g. placeholders and displaying existing numbers.
    nationalMode: true,
    //* Display only these countries.
    onlyCountries: [],
    //* Number type to use for placeholders.
    placeholderNumberType: "MOBILE",
    //* Show flags - for both the selected country, and in the country dropdown
    showFlags: true,
    //* Display the international dial code next to the selected flag.
    separateDialCode: false,
    //* Only allow certain chars e.g. a plus followed by numeric digits, and cap at max valid length.
    strictMode: false,
    //* Use full screen popup instead of dropdown for country list.
    useFullscreenPopup: computeDefaultUseFullscreenPopup(),
    //* The number type to enforce during validation.
    validationNumberTypes: ["MOBILE"]
  };
  var applyOptionSideEffects = (o, defaultEnglishStrings) => {
    if (o.useFullscreenPopup) {
      o.fixDropdownWidth = false;
    }
    if (o.onlyCountries.length === 1) {
      o.initialCountry = o.onlyCountries[0];
    }
    if (o.separateDialCode) {
      o.nationalMode = false;
    }
    if (o.allowDropdown && !o.showFlags && !o.separateDialCode) {
      o.nationalMode = false;
    }
    if (o.useFullscreenPopup && !o.dropdownContainer) {
      o.dropdownContainer = document.body;
    }
    o.i18n = { ...defaultEnglishStrings, ...o.i18n };
  };

  // src/js/modules/utils/string.ts
  var getNumeric = (s) => s.replace(/\D/g, "");
  var normaliseString = (s = "") => s.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();

  // src/js/modules/core/countrySearch.ts
  var getMatchedCountries = (countries, query) => {
    const normalisedQuery = normaliseString(query);
    const iso2Matches = [];
    const nameStartWith = [];
    const nameContains = [];
    const dialCodeMatches = [];
    const dialCodeContains = [];
    const initialsMatches = [];
    for (const c of countries) {
      if (c.iso2 === normalisedQuery) {
        iso2Matches.push(c);
      } else if (c.normalisedName.startsWith(normalisedQuery)) {
        nameStartWith.push(c);
      } else if (c.normalisedName.includes(normalisedQuery)) {
        nameContains.push(c);
      } else if (normalisedQuery === c.dialCode || normalisedQuery === c.dialCodePlus) {
        dialCodeMatches.push(c);
      } else if (c.dialCodePlus.includes(normalisedQuery)) {
        dialCodeContains.push(c);
      } else if (c.initials.includes(normalisedQuery)) {
        initialsMatches.push(c);
      }
    }
    const sortByPriority = (a, b) => a.priority - b.priority;
    return [
      ...iso2Matches.sort(sortByPriority),
      ...nameStartWith.sort(sortByPriority),
      ...nameContains.sort(sortByPriority),
      ...dialCodeMatches.sort(sortByPriority),
      ...dialCodeContains.sort(sortByPriority),
      ...initialsMatches.sort(sortByPriority)
    ];
  };
  var findFirstCountryStartingWith = (countries, query) => {
    const lowerQuery = query.toLowerCase();
    for (const c of countries) {
      const lowerName = c.name.toLowerCase();
      if (lowerName.startsWith(lowerQuery)) {
        return c;
      }
    }
    return null;
  };

  // src/js/modules/utils/dom.ts
  var buildClassNames = (flags) => Object.keys(flags).filter((k) => Boolean(flags[k])).join(" ");
  var createEl = (tagName, attrs, container) => {
    const el = document.createElement(tagName);
    if (attrs) {
      Object.entries(attrs).forEach(
        ([key, value]) => el.setAttribute(key, value)
      );
    }
    if (container) {
      container.appendChild(el);
    }
    return el;
  };

  // src/js/modules/core/icons.ts
  var buildSearchIcon = () => `
  <svg class="iti__search-icon-svg" width="14" height="14" viewBox="0 0 24 24" focusable="false" ${ARIA.HIDDEN}="true">
    <circle cx="11" cy="11" r="7" />
    <line x1="21" y1="21" x2="16.65" y2="16.65" />
  </svg>`;
  var buildClearIcon = (id2) => {
    const maskId = `iti-${id2}-clear-mask`;
    return `
    <svg class="iti__search-clear-svg" width="12" height="12" viewBox="0 0 16 16" ${ARIA.HIDDEN}="true" focusable="false">
      <mask id="${maskId}" maskUnits="userSpaceOnUse">
        <rect width="16" height="16" fill="white" />
        <path d="M5.2 5.2 L10.8 10.8 M10.8 5.2 L5.2 10.8" stroke="black" stroke-linecap="round" class="iti__search-clear-x" />
      </mask>
      <circle cx="8" cy="8" r="8" class="iti__search-clear-bg" mask="url(#${maskId})" />
    </svg>`;
  };

  // src/js/modules/core/ui.ts
  var UI = class {
    constructor(input, options, id2) {
      this.highlightedItem = null;
      this.selectedItem = null;
      input.dataset.intlTelInputId = id2.toString();
      this.telInput = input;
      this.options = options;
      this.id = id2;
      this.hadInitialPlaceholder = Boolean(input.getAttribute("placeholder"));
      this.isRTL = !!this.telInput.closest("[dir=rtl]");
      if (this.options.separateDialCode) {
        this.originalPaddingLeft = this.telInput.style.paddingLeft;
      }
    }
    //* Generate all of the markup for the plugin: the selected country overlay, and the dropdown.
    generateMarkup(countries) {
      this.countries = countries;
      this._prepareTelInput();
      const wrapper = this._createWrapperAndInsert();
      this._maybeBuildCountryContainer(wrapper);
      wrapper.appendChild(this.telInput);
      this._maybeUpdateInputPaddingAndReveal();
      this._maybeBuildHiddenInputs(wrapper);
    }
    _prepareTelInput() {
      this.telInput.classList.add("iti__tel-input");
      if (!this.telInput.hasAttribute("autocomplete") && !this.telInput.form?.hasAttribute("autocomplete")) {
        this.telInput.setAttribute("autocomplete", "off");
      }
    }
    _createWrapperAndInsert() {
      const { allowDropdown, showFlags, containerClass, useFullscreenPopup } = this.options;
      const parentClasses = buildClassNames({
        iti: true,
        "iti--allow-dropdown": allowDropdown,
        "iti--show-flags": showFlags,
        "iti--inline-dropdown": !useFullscreenPopup,
        [containerClass]: Boolean(containerClass)
      });
      const wrapper = createEl("div", { class: parentClasses });
      if (this.isRTL) {
        wrapper.setAttribute("dir", "ltr");
      }
      this.telInput.before(wrapper);
      return wrapper;
    }
    _maybeBuildCountryContainer(wrapper) {
      const { allowDropdown, separateDialCode, showFlags } = this.options;
      if (allowDropdown || showFlags || separateDialCode) {
        this.countryContainer = createEl(
          "div",
          // visibly hidden until we measure it's width to set the input padding correctly
          { class: `iti__country-container ${CLASSES.V_HIDE}` },
          wrapper
        );
        if (allowDropdown) {
          this.selectedCountry = createEl(
            "button",
            {
              type: "button",
              class: "iti__selected-country",
              [ARIA.EXPANDED]: "false",
              [ARIA.LABEL]: this.options.i18n.noCountrySelected,
              [ARIA.HASPOPUP]: "dialog",
              [ARIA.CONTROLS]: `iti-${this.id}__dropdown-content`
            },
            this.countryContainer
          );
          if (this.telInput.disabled) {
            this.selectedCountry.setAttribute("disabled", "true");
          }
        } else {
          this.selectedCountry = createEl(
            "div",
            { class: "iti__selected-country" },
            this.countryContainer
          );
        }
        const selectedCountryPrimary = createEl(
          "div",
          { class: "iti__selected-country-primary" },
          this.selectedCountry
        );
        this.selectedCountryInner = createEl(
          "div",
          { class: CLASSES.FLAG },
          selectedCountryPrimary
        );
        if (allowDropdown) {
          this.dropdownArrow = createEl(
            "div",
            { class: "iti__arrow", [ARIA.HIDDEN]: "true" },
            selectedCountryPrimary
          );
        }
        if (separateDialCode) {
          this.selectedDialCode = createEl(
            "div",
            { class: "iti__selected-dial-code" },
            this.selectedCountry
          );
        }
        if (allowDropdown) {
          this._buildDropdownContent();
        }
      }
    }
    _buildDropdownContent() {
      const {
        fixDropdownWidth,
        useFullscreenPopup,
        countrySearch,
        i18n,
        dropdownContainer,
        containerClass
      } = this.options;
      const extraClasses = fixDropdownWidth ? "" : "iti--flexible-dropdown-width";
      this.dropdownContent = createEl("div", {
        id: `iti-${this.id}__dropdown-content`,
        class: `iti__dropdown-content ${CLASSES.HIDE} ${extraClasses}`,
        role: "dialog",
        [ARIA.MODAL]: "true"
      });
      if (this.isRTL) {
        this.dropdownContent.setAttribute("dir", "rtl");
      }
      if (countrySearch) {
        this._buildSearchUI();
      }
      this.countryList = createEl(
        "ul",
        {
          class: "iti__country-list",
          id: `iti-${this.id}__country-listbox`,
          role: "listbox",
          [ARIA.LABEL]: i18n.countryListAriaLabel
        },
        this.dropdownContent
      );
      this._appendListItems();
      if (countrySearch) {
        this.updateSearchResultsA11yText();
      }
      if (dropdownContainer) {
        const dropdownClasses = buildClassNames({
          iti: true,
          "iti--container": true,
          "iti--fullscreen-popup": useFullscreenPopup,
          "iti--inline-dropdown": !useFullscreenPopup,
          [containerClass]: Boolean(containerClass)
        });
        this.dropdown = createEl("div", { class: dropdownClasses });
        this.dropdown.appendChild(this.dropdownContent);
      } else {
        this.countryContainer.appendChild(this.dropdownContent);
      }
    }
    _buildSearchUI() {
      const { i18n } = this.options;
      const searchWrapper = createEl(
        "div",
        { class: "iti__search-input-wrapper" },
        this.dropdownContent
      );
      this.searchIcon = createEl(
        "span",
        {
          class: "iti__search-icon",
          [ARIA.HIDDEN]: "true"
        },
        searchWrapper
      );
      this.searchIcon.innerHTML = buildSearchIcon();
      this.searchInput = createEl(
        "input",
        {
          id: `iti-${this.id}__search-input`,
          // Chrome says inputs need either a name or an id
          type: "search",
          class: "iti__search-input",
          placeholder: i18n.searchPlaceholder,
          // role=combobox + aria-autocomplete=list + aria-activedescendant allows maintaining focus on the search input while allowing users to navigate search results with up/down keyboard keys
          role: "combobox",
          [ARIA.EXPANDED]: "true",
          [ARIA.LABEL]: i18n.searchPlaceholder,
          [ARIA.CONTROLS]: `iti-${this.id}__country-listbox`,
          [ARIA.AUTOCOMPLETE]: "list",
          autocomplete: "off"
        },
        searchWrapper
      );
      this.searchClearButton = createEl(
        "button",
        {
          type: "button",
          class: `iti__search-clear ${CLASSES.HIDE}`,
          [ARIA.LABEL]: i18n.clearSearchAriaLabel,
          tabindex: "-1"
        },
        searchWrapper
      );
      this.searchClearButton.innerHTML = buildClearIcon(this.id);
      this.searchResultsA11yText = createEl(
        "span",
        { class: "iti__a11y-text" },
        this.dropdownContent
      );
      this.searchNoResults = createEl(
        "div",
        {
          class: `iti__no-results ${CLASSES.HIDE}`,
          [ARIA.HIDDEN]: "true"
          // all a11y messaging happens in this.searchResultsA11yText
        },
        this.dropdownContent
      );
      this.searchNoResults.textContent = i18n.zeroSearchResults;
    }
    _maybeUpdateInputPaddingAndReveal() {
      if (this.countryContainer) {
        this.updateInputPadding();
        this.countryContainer.classList.remove(CLASSES.V_HIDE);
      }
    }
    _maybeBuildHiddenInputs(wrapper) {
      const { hiddenInput } = this.options;
      if (hiddenInput) {
        const telInputName = this.telInput.getAttribute("name") || "";
        const names = hiddenInput(telInputName);
        if (names.phone) {
          const existingInput = this.telInput.form?.querySelector(
            `input[name="${names.phone}"]`
          );
          if (existingInput) {
            this.hiddenInput = existingInput;
          } else {
            this.hiddenInput = createEl("input", {
              type: "hidden",
              name: names.phone
            });
            wrapper.appendChild(this.hiddenInput);
          }
        }
        if (names.country) {
          const existingInput = this.telInput.form?.querySelector(
            `input[name="${names.country}"]`
          );
          if (existingInput) {
            this.hiddenInputCountry = existingInput;
          } else {
            this.hiddenInputCountry = createEl("input", {
              type: "hidden",
              name: names.country
            });
            wrapper.appendChild(this.hiddenInputCountry);
          }
        }
      }
    }
    //* For each country: add a country list item <li> to the countryList <ul> container.
    _appendListItems() {
      const frag = document.createDocumentFragment();
      for (let i = 0; i < this.countries.length; i++) {
        const c = this.countries[i];
        const liClass = buildClassNames({
          [CLASSES.COUNTRY_ITEM]: true
        });
        const listItem = createEl("li", {
          id: `iti-${this.id}__item-${c.iso2}`,
          class: liClass,
          tabindex: "-1",
          role: "option",
          [ARIA.SELECTED]: "false"
        });
        listItem.dataset.dialCode = c.dialCode;
        listItem.dataset.countryCode = c.iso2;
        c.nodeById[this.id] = listItem;
        if (this.options.showFlags) {
          createEl("div", { class: `${CLASSES.FLAG} iti__${c.iso2}` }, listItem);
        }
        const nameEl = createEl("span", { class: "iti__country-name" }, listItem);
        nameEl.textContent = c.name;
        const dialEl = createEl("span", { class: "iti__dial-code" }, listItem);
        if (this.isRTL) {
          dialEl.setAttribute("dir", "ltr");
        }
        dialEl.textContent = `+${c.dialCode}`;
        frag.appendChild(listItem);
      }
      this.countryList.appendChild(frag);
    }
    //* Update the input padding to make space for the selected country/dial code.
    updateInputPadding() {
      if (this.selectedCountry) {
        const fallbackWidth = this.options.separateDialCode ? LAYOUT.SANE_SELECTED_WITH_DIAL_WIDTH : LAYOUT.SANE_SELECTED_NO_DIAL_WIDTH;
        const selectedCountryWidth = this.selectedCountry.offsetWidth || this._getHiddenSelectedCountryWidth() || fallbackWidth;
        const inputPadding = selectedCountryWidth + LAYOUT.INPUT_PADDING_EXTRA_LEFT;
        this.telInput.style.paddingLeft = `${inputPadding}px`;
      }
    }
    //* When input is in a hidden container during init, we cannot calculate the selected country width.
    //* Fix: clone the markup, make it invisible, add it to the end of the DOM, and then measure it's width.
    //* To get the right styling to apply, all we need is a shallow clone of the container,
    //* and then to inject a deep clone of the selectedCountry element.
    _getHiddenSelectedCountryWidth() {
      if (this.telInput.parentNode) {
        let body;
        try {
          body = window.top.document.body;
        } catch (e) {
          body = document.body;
        }
        const containerClone = this.telInput.parentNode.cloneNode(
          false
        );
        containerClone.style.visibility = "hidden";
        body.appendChild(containerClone);
        const countryContainerClone = this.countryContainer.cloneNode();
        containerClone.appendChild(countryContainerClone);
        const selectedCountryClone = this.selectedCountry.cloneNode(
          true
        );
        countryContainerClone.appendChild(selectedCountryClone);
        const width = selectedCountryClone.offsetWidth;
        body.removeChild(containerClone);
        return width;
      }
      return 0;
    }
    //* Update search results text (for a11y).
    updateSearchResultsA11yText() {
      const { i18n } = this.options;
      const count = this.countryList.childElementCount;
      let searchText;
      if (count === 0) {
        searchText = i18n.zeroSearchResults;
      } else {
        if (i18n.searchResultsText) {
          searchText = i18n.searchResultsText(count);
        } else if (count === 1) {
          searchText = i18n.oneSearchResult;
        } else {
          searchText = i18n.multipleSearchResults.replace(
            "${count}",
            count.toString()
          );
        }
      }
      this.searchResultsA11yText.textContent = searchText;
    }
    //* Check if an element is visible within it's container, else scroll until it is.
    scrollTo(element) {
      const container = this.countryList;
      const scrollTop = document.documentElement.scrollTop;
      const containerHeight = container.offsetHeight;
      const containerTop = container.getBoundingClientRect().top + scrollTop;
      const containerBottom = containerTop + containerHeight;
      const elementHeight = element.offsetHeight;
      const elementTop = element.getBoundingClientRect().top + scrollTop;
      const elementBottom = elementTop + elementHeight;
      const newScrollTop = elementTop - containerTop + container.scrollTop;
      if (elementTop < containerTop) {
        container.scrollTop = newScrollTop;
      } else if (elementBottom > containerBottom) {
        const heightDifference = containerHeight - elementHeight;
        container.scrollTop = newScrollTop - heightDifference;
      }
    }
    //* Remove highlighting from the previous list item and highlight the new one.
    highlightListItem(listItem, shouldFocus) {
      const prevItem = this.highlightedItem;
      if (prevItem) {
        prevItem.classList.remove(CLASSES.HIGHLIGHT);
      }
      this.highlightedItem = listItem;
      if (this.highlightedItem) {
        this.highlightedItem.classList.add(CLASSES.HIGHLIGHT);
        if (this.options.countrySearch) {
          const activeDescendant = this.highlightedItem.getAttribute("id") || "";
          this.searchInput.setAttribute(ARIA.ACTIVE_DESCENDANT, activeDescendant);
        }
      }
      if (shouldFocus) {
        this.highlightedItem.focus();
      }
    }
    updateSelectedItem(iso2) {
      if (this.selectedItem && this.selectedItem.dataset.countryCode !== iso2) {
        this.selectedItem.setAttribute(ARIA.SELECTED, "false");
        this.selectedItem = null;
      }
      if (iso2 && !this.selectedItem) {
        const newListItem = this.countryList.querySelector(
          `[data-country-code="${iso2}"]`
        );
        if (newListItem) {
          newListItem.setAttribute(ARIA.SELECTED, "true");
          this.selectedItem = newListItem;
        }
      }
    }
    //* Country search: Filter the country list to the given array of countries.
    filterCountries(matchedCountries) {
      this.countryList.innerHTML = "";
      let noCountriesAddedYet = true;
      for (const c of matchedCountries) {
        const listItem = c.nodeById[this.id];
        if (listItem) {
          this.countryList.appendChild(listItem);
          if (noCountriesAddedYet) {
            this.highlightListItem(listItem, false);
            noCountriesAddedYet = false;
          }
        }
      }
      if (noCountriesAddedYet) {
        this.highlightListItem(null, false);
        if (this.searchNoResults) {
          this.searchNoResults.classList.remove(CLASSES.HIDE);
        }
      } else if (this.searchNoResults) {
        this.searchNoResults.classList.add(CLASSES.HIDE);
      }
      this.countryList.scrollTop = 0;
      this.updateSearchResultsA11yText();
    }
    destroy() {
      this.telInput.iti = void 0;
      delete this.telInput.dataset.intlTelInputId;
      if (this.options.separateDialCode) {
        this.telInput.style.paddingLeft = this.originalPaddingLeft;
      }
      const wrapper = this.telInput.parentNode;
      wrapper.before(this.telInput);
      wrapper.remove();
      this.telInput = null;
      this.countryContainer = null;
      this.selectedCountry = null;
      this.selectedCountryInner = null;
      this.selectedDialCode = null;
      this.dropdownArrow = null;
      this.dropdownContent = null;
      this.searchInput = null;
      this.searchIcon = null;
      this.searchClearButton = null;
      this.searchNoResults = null;
      this.searchResultsA11yText = null;
      this.countryList = null;
      this.dropdown = null;
      this.hiddenInput = null;
      this.hiddenInputCountry = null;
      this.highlightedItem = null;
      this.selectedItem = null;
      for (const c of this.countries) {
        delete c.nodeById[this.id];
      }
      this.countries = null;
    }
  };

  // src/js/modules/data/country-data.ts
  var processAllCountries = (options) => {
    const { onlyCountries, excludeCountries } = options;
    if (onlyCountries.length) {
      const lowerCaseOnlyCountries = onlyCountries.map(
        (country) => country.toLowerCase()
      );
      return data_default.filter(
        (country) => lowerCaseOnlyCountries.includes(country.iso2)
      );
    } else if (excludeCountries.length) {
      const lowerCaseExcludeCountries = excludeCountries.map(
        (country) => country.toLowerCase()
      );
      return data_default.filter(
        (country) => !lowerCaseExcludeCountries.includes(country.iso2)
      );
    }
    return data_default;
  };
  var translateCountryNames = (countries, options) => {
    for (const c of countries) {
      const iso2 = c.iso2.toLowerCase();
      if (options.i18n[iso2]) {
        c.name = options.i18n[iso2];
      }
    }
  };
  var processDialCodes = (countries) => {
    const dialCodes = /* @__PURE__ */ new Set();
    let dialCodeMaxLen = 0;
    const dialCodeToIso2Map = {};
    const _addToDialCodeMap = (iso2, dialCode) => {
      if (!iso2 || !dialCode) {
        return;
      }
      if (dialCode.length > dialCodeMaxLen) {
        dialCodeMaxLen = dialCode.length;
      }
      if (!dialCodeToIso2Map.hasOwnProperty(dialCode)) {
        dialCodeToIso2Map[dialCode] = [];
      }
      const iso2List = dialCodeToIso2Map[dialCode];
      if (iso2List.includes(iso2)) {
        return;
      }
      iso2List.push(iso2);
    };
    const countriesSortedByPriority = [...countries].sort((a, b) => a.priority - b.priority);
    for (const c of countriesSortedByPriority) {
      if (!dialCodes.has(c.dialCode)) {
        dialCodes.add(c.dialCode);
      }
      for (let k = 1; k < c.dialCode.length; k++) {
        const partialDialCode = c.dialCode.substring(0, k);
        _addToDialCodeMap(c.iso2, partialDialCode);
      }
      _addToDialCodeMap(c.iso2, c.dialCode);
      if (c.areaCodes) {
        const rootIso2Code = dialCodeToIso2Map[c.dialCode][0];
        for (const areaCode of c.areaCodes) {
          for (let k = 1; k < areaCode.length; k++) {
            const partialAreaCode = areaCode.substring(0, k);
            const partialDialCode = c.dialCode + partialAreaCode;
            _addToDialCodeMap(rootIso2Code, partialDialCode);
            _addToDialCodeMap(c.iso2, partialDialCode);
          }
          _addToDialCodeMap(c.iso2, c.dialCode + areaCode);
        }
      }
    }
    return { dialCodes, dialCodeMaxLen, dialCodeToIso2Map };
  };
  var sortCountries = (countries, options) => {
    if (options.countryOrder) {
      options.countryOrder = options.countryOrder.map(
        (iso2) => iso2.toLowerCase()
      );
    }
    countries.sort((a, b) => {
      const { countryOrder } = options;
      if (countryOrder) {
        const aIndex = countryOrder.indexOf(a.iso2);
        const bIndex = countryOrder.indexOf(b.iso2);
        const aIndexExists = aIndex > -1;
        const bIndexExists = bIndex > -1;
        if (aIndexExists || bIndexExists) {
          if (aIndexExists && bIndexExists) {
            return aIndex - bIndex;
          }
          return aIndexExists ? -1 : 1;
        }
      }
      return a.name.localeCompare(b.name);
    });
  };
  var cacheSearchTokens = (countries) => {
    for (const c of countries) {
      c.normalisedName = normaliseString(c.name);
      c.initials = c.normalisedName.split(/[^a-z]/).map((word) => word[0]).join("");
      c.dialCodePlus = `+${c.dialCode}`;
    }
  };

  // src/js/modules/format/formatting.ts
  var beforeSetNumber = (fullNumber, dialCode, separateDialCode, selectedCountryData) => {
    let number = fullNumber;
    if (separateDialCode) {
      if (dialCode) {
        dialCode = `+${selectedCountryData.dialCode}`;
        const start = number[dialCode.length] === " " || number[dialCode.length] === "-" ? dialCode.length + 1 : dialCode.length;
        number = number.substring(start);
      }
    }
    return number;
  };
  var formatNumberAsYouType = (fullNumber, telInputValue, utils, selectedCountryData, separateDialCode) => {
    const result = utils ? utils.formatNumberAsYouType(fullNumber, selectedCountryData.iso2) : fullNumber;
    const { dialCode } = selectedCountryData;
    if (separateDialCode && telInputValue.charAt(0) !== "+" && result.includes(`+${dialCode}`)) {
      const afterDialCode = result.split(`+${dialCode}`)[1] || "";
      return afterDialCode.trim();
    }
    return result;
  };

  // src/js/modules/format/caret.ts
  var translateCursorPosition = (relevantChars, formattedValue, prevCaretPos, isDeleteForwards) => {
    if (prevCaretPos === 0 && !isDeleteForwards) {
      return 0;
    }
    let relevantCharCount = 0;
    for (let i = 0; i < formattedValue.length; i++) {
      if (/[+0-9]/.test(formattedValue[i])) {
        relevantCharCount++;
      }
      if (relevantCharCount === relevantChars && !isDeleteForwards) {
        return i + 1;
      }
      if (isDeleteForwards && relevantCharCount === relevantChars + 1) {
        return i;
      }
    }
    return formattedValue.length;
  };

  // src/js/modules/data/nanp-regionless.ts
  var regionlessNanpNumbers = [
    "800",
    "822",
    "833",
    "844",
    "855",
    "866",
    "877",
    "880",
    "881",
    "882",
    "883",
    "884",
    "885",
    "886",
    "887",
    "888",
    "889"
  ];
  var isRegionlessNanp = (number) => {
    const numeric = getNumeric(number);
    if (numeric.startsWith(DIAL.NANP) && numeric.length >= 4) {
      const areaCode = numeric.substring(1, 4);
      return regionlessNanpNumbers.includes(areaCode);
    }
    return false;
  };

  // src/js/intl-tel-input.ts
  for (const c of data_default) {
    c.name = en_default[c.iso2];
  }
  var id = 0;
  var iso2Set = new Set(data_default.map((c) => c.iso2));
  var isIso2 = (val) => iso2Set.has(val);
  var Iti = class _Iti {
    constructor(input, customOptions = {}) {
      this.id = id++;
      this.options = { ...defaults, ...customOptions };
      applyOptionSideEffects(this.options, en_default);
      this.ui = new UI(input, this.options, this.id);
      this.isAndroid = _Iti._getIsAndroid();
      this.promise = this._createInitPromises();
      this.countries = processAllCountries(this.options);
      const { dialCodes, dialCodeMaxLen, dialCodeToIso2Map } = processDialCodes(
        this.countries
      );
      this.dialCodes = dialCodes;
      this.dialCodeMaxLen = dialCodeMaxLen;
      this.dialCodeToIso2Map = dialCodeToIso2Map;
      this.countryByIso2 = new Map(this.countries.map((c) => [c.iso2, c]));
      this._init();
    }
    static _getIsAndroid() {
      return typeof navigator !== "undefined" ? /Android/i.test(navigator.userAgent) : false;
    }
    _updateNumeralSet(str) {
      if (/[\u0660-\u0669]/.test(str)) {
        this.userNumeralSet = "arabic-indic";
      } else if (/[\u06F0-\u06F9]/.test(str)) {
        this.userNumeralSet = "persian";
      } else {
        this.userNumeralSet = "ascii";
      }
    }
    _mapAsciiToUserNumerals(str) {
      if (!this.userNumeralSet) {
        this._updateNumeralSet(this.ui.telInput.value);
      }
      if (this.userNumeralSet === "ascii") {
        return str;
      }
      const base = this.userNumeralSet === "arabic-indic" ? 1632 : 1776;
      return str.replace(/[0-9]/g, (d) => String.fromCharCode(base + Number(d)));
    }
    // Normalize Eastern Arabic (U+0660-0669) and Persian/Extended Arabic-Indic (U+06F0-06F9) numerals to ASCII 0-9
    _normaliseNumerals(str) {
      if (!str) {
        return "";
      }
      this._updateNumeralSet(str);
      if (this.userNumeralSet === "ascii") {
        return str;
      }
      const base = this.userNumeralSet === "arabic-indic" ? 1632 : 1776;
      const regex = this.userNumeralSet === "arabic-indic" ? /[\u0660-\u0669]/g : /[\u06F0-\u06F9]/g;
      return str.replace(regex, (ch) => String.fromCharCode(48 + (ch.charCodeAt(0) - base)));
    }
    _getTelInputValue() {
      const inputValue = this.ui.telInput.value.trim();
      return this._normaliseNumerals(inputValue);
    }
    _setTelInputValue(asciiValue) {
      this.ui.telInput.value = this._mapAsciiToUserNumerals(asciiValue);
    }
    _createInitPromises() {
      const autoCountryPromise = new Promise((resolve, reject) => {
        this.resolveAutoCountryPromise = resolve;
        this.rejectAutoCountryPromise = reject;
      });
      const utilsScriptPromise = new Promise((resolve, reject) => {
        this.resolveUtilsScriptPromise = resolve;
        this.rejectUtilsScriptPromise = reject;
      });
      return Promise.all([autoCountryPromise, utilsScriptPromise]);
    }
    //* Can't be private as it's called from intlTelInput convenience wrapper.
    _init() {
      this.selectedCountryData = {};
      this.abortController = new AbortController();
      this._processCountryData();
      this.ui.generateMarkup(this.countries);
      this._setInitialState();
      this._initListeners();
      this._initRequests();
    }
    //********************
    //*  PRIVATE METHODS
    //********************
    //* Prepare all of the country data, including onlyCountries, excludeCountries, countryOrder options.
    _processCountryData() {
      translateCountryNames(this.countries, this.options);
      sortCountries(this.countries, this.options);
      cacheSearchTokens(this.countries);
    }
    //* Set the initial state of the input value and the selected country by:
    //* 1. Extracting a dial code from the given number
    //* 2. Using explicit initialCountry
    _setInitialState(overrideAutoCountry = false) {
      const attributeValueRaw = this.ui.telInput.getAttribute("value");
      const attributeValue = this._normaliseNumerals(attributeValueRaw);
      const inputValue = this._getTelInputValue();
      const useAttribute = attributeValue && attributeValue.startsWith("+") && (!inputValue || !inputValue.startsWith("+"));
      const val = useAttribute ? attributeValue : inputValue;
      const dialCode = this._getDialCode(val);
      const isRegionlessNanpNumber = isRegionlessNanp(val);
      const { initialCountry, geoIpLookup } = this.options;
      const isAutoCountry = initialCountry === INITIAL_COUNTRY.AUTO && geoIpLookup;
      if (dialCode && !isRegionlessNanpNumber) {
        this._updateCountryFromNumber(val);
      } else if (!isAutoCountry || overrideAutoCountry) {
        const lowerInitialCountry = initialCountry ? initialCountry.toLowerCase() : "";
        if (isIso2(lowerInitialCountry)) {
          this._setCountry(lowerInitialCountry);
        } else {
          if (dialCode && isRegionlessNanpNumber) {
            this._setCountry(US.ISO2);
          } else {
            this._setCountry("");
          }
        }
      }
      if (val) {
        this._updateValFromNumber(val);
      }
    }
    //* Initialise the main event listeners: input keyup, and click selected country.
    _initListeners() {
      this._initTelInputListeners();
      if (this.options.allowDropdown) {
        this._initDropdownListeners();
      }
      if ((this.ui.hiddenInput || this.ui.hiddenInputCountry) && this.ui.telInput.form) {
        this._initHiddenInputListener();
      }
    }
    //* Update hidden input on form submit.
    _initHiddenInputListener() {
      const handleHiddenInputSubmit = () => {
        if (this.ui.hiddenInput) {
          this.ui.hiddenInput.value = this.getNumber();
        }
        if (this.ui.hiddenInputCountry) {
          this.ui.hiddenInputCountry.value = this.selectedCountryData.iso2 || "";
        }
      };
      this.ui.telInput.form?.addEventListener("submit", handleHiddenInputSubmit, {
        signal: this.abortController.signal
      });
    }
    //* initialise the dropdown listeners.
    _initDropdownListeners() {
      const signal = this.abortController.signal;
      const handleLabelClick = (e) => {
        if (this.ui.dropdownContent.classList.contains(CLASSES.HIDE)) {
          this.ui.telInput.focus();
        } else {
          e.preventDefault();
        }
      };
      const label = this.ui.telInput.closest("label");
      if (label) {
        label.addEventListener("click", handleLabelClick, { signal });
      }
      const handleClickSelectedCountry = () => {
        const dropdownClosed = this.ui.dropdownContent.classList.contains(
          CLASSES.HIDE
        );
        if (dropdownClosed && !this.ui.telInput.disabled && !this.ui.telInput.readOnly) {
          this._openDropdown();
        }
      };
      this.ui.selectedCountry.addEventListener(
        "click",
        handleClickSelectedCountry,
        {
          signal
        }
      );
      const handleCountryContainerKeydown = (e) => {
        const isDropdownHidden = this.ui.dropdownContent.classList.contains(
          CLASSES.HIDE
        );
        if (isDropdownHidden && [KEYS.ARROW_UP, KEYS.ARROW_DOWN, KEYS.SPACE, KEYS.ENTER].includes(e.key)) {
          e.preventDefault();
          e.stopPropagation();
          this._openDropdown();
        }
        if (e.key === KEYS.TAB) {
          this._closeDropdown();
        }
      };
      this.ui.countryContainer.addEventListener(
        "keydown",
        handleCountryContainerKeydown,
        { signal }
      );
    }
    //* Init many requests: utils script / geo ip lookup.
    _initRequests() {
      const { loadUtils, initialCountry, geoIpLookup } = this.options;
      if (loadUtils && !intlTelInput.utils) {
        const doAttachUtils = () => {
          intlTelInput.attachUtils(loadUtils)?.catch(() => {
          });
        };
        if (intlTelInput.documentReady()) {
          doAttachUtils();
        } else {
          const handlePageLoad = () => {
            doAttachUtils();
          };
          window.addEventListener("load", handlePageLoad, {
            signal: this.abortController.signal
          });
        }
      } else {
        this.resolveUtilsScriptPromise();
      }
      const isAutoCountry = initialCountry === INITIAL_COUNTRY.AUTO && geoIpLookup;
      if (isAutoCountry && !this.selectedCountryData.iso2) {
        this._loadAutoCountry();
      } else {
        this.resolveAutoCountryPromise();
      }
    }
    //* Perform the geo ip lookup.
    _loadAutoCountry() {
      if (intlTelInput.autoCountry) {
        this.handleAutoCountry();
      } else if (!intlTelInput.startedLoadingAutoCountry) {
        intlTelInput.startedLoadingAutoCountry = true;
        if (typeof this.options.geoIpLookup === "function") {
          this.options.geoIpLookup(
            (iso2 = "") => {
              const iso2Lower = iso2.toLowerCase();
              if (isIso2(iso2Lower)) {
                intlTelInput.autoCountry = iso2Lower;
                setTimeout(() => forEachInstance("handleAutoCountry"));
              } else {
                this._setInitialState(true);
                forEachInstance("rejectAutoCountryPromise");
              }
            },
            () => {
              this._setInitialState(true);
              forEachInstance("rejectAutoCountryPromise");
            }
          );
        }
      }
    }
    _openDropdownWithPlus() {
      this._openDropdown();
      this.ui.searchInput.value = "+";
      this._filterCountriesByQuery("");
    }
    //* Initialize the tel input listeners.
    _initTelInputListeners() {
      this._bindInputListener();
      this._maybeBindKeydownListener();
      this._maybeBindPasteListener();
    }
    _bindInputListener() {
      const {
        strictMode,
        formatAsYouType,
        separateDialCode,
        allowDropdown,
        countrySearch
      } = this.options;
      let userOverrideFormatting = false;
      if (REGEX.ALPHA_UNICODE.test(this._getTelInputValue())) {
        userOverrideFormatting = true;
      }
      const handleInputEvent = (e) => {
        const inputValue = this._getTelInputValue();
        if (this.isAndroid && e?.data === "+" && separateDialCode && allowDropdown && countrySearch) {
          const currentCaretPos = this.ui.telInput.selectionStart || 0;
          const valueBeforeCaret = inputValue.substring(0, currentCaretPos - 1);
          const valueAfterCaret = inputValue.substring(currentCaretPos);
          this._setTelInputValue(valueBeforeCaret + valueAfterCaret);
          this._openDropdownWithPlus();
          return;
        }
        if (this._updateCountryFromNumber(inputValue)) {
          this._triggerCountryChange();
        }
        const isFormattingChar = e?.data && REGEX.NON_PLUS_NUMERIC.test(e.data);
        const isPaste = e?.inputType === INPUT_TYPES.PASTE && inputValue;
        if (isFormattingChar || isPaste && !strictMode) {
          userOverrideFormatting = true;
        } else if (!REGEX.NON_PLUS_NUMERIC.test(inputValue)) {
          userOverrideFormatting = false;
        }
        const isSetNumber = e?.detail && e.detail["isSetNumber"];
        const isAscii = this.userNumeralSet === "ascii";
        if (formatAsYouType && !userOverrideFormatting && !isSetNumber && isAscii) {
          const currentCaretPos = this.ui.telInput.selectionStart || 0;
          const valueBeforeCaret = inputValue.substring(
            0,
            currentCaretPos
          );
          const relevantCharsBeforeCaret = valueBeforeCaret.replace(
            REGEX.NON_PLUS_NUMERIC_GLOBAL,
            ""
          ).length;
          const isDeleteForwards = e?.inputType === INPUT_TYPES.DELETE_FWD;
          const fullNumber = this._getFullNumber();
          const formattedValue = formatNumberAsYouType(
            fullNumber,
            inputValue,
            intlTelInput.utils,
            this.selectedCountryData,
            this.options.separateDialCode
          );
          const newCaretPos = translateCursorPosition(
            relevantCharsBeforeCaret,
            formattedValue,
            currentCaretPos,
            isDeleteForwards
          );
          this._setTelInputValue(formattedValue);
          this.ui.telInput.setSelectionRange(newCaretPos, newCaretPos);
        }
      };
      this.ui.telInput.addEventListener(
        "input",
        handleInputEvent,
        {
          signal: this.abortController.signal
        }
      );
    }
    _maybeBindKeydownListener() {
      const { strictMode, separateDialCode, allowDropdown, countrySearch } = this.options;
      if (strictMode || separateDialCode) {
        const handleKeydownEvent = (e) => {
          if (e.key && e.key.length === 1 && !e.altKey && !e.ctrlKey && !e.metaKey) {
            if (separateDialCode && allowDropdown && countrySearch && e.key === "+") {
              e.preventDefault();
              this._openDropdownWithPlus();
              return;
            }
            if (strictMode) {
              const inputValue = this._getTelInputValue();
              const alreadyHasPlus = inputValue.startsWith("+");
              const isInitialPlus = !alreadyHasPlus && this.ui.telInput.selectionStart === 0 && e.key === "+";
              const normalisedKey = this._normaliseNumerals(e.key);
              const isNumeric = /^[0-9]$/.test(normalisedKey);
              const isAllowedChar = separateDialCode ? isNumeric : isInitialPlus || isNumeric;
              const input = this.ui.telInput;
              const selStart = input.selectionStart;
              const selEnd = input.selectionEnd;
              const before = inputValue.slice(0, selStart);
              const after = inputValue.slice(selEnd);
              const newValue = before + e.key + after;
              const newFullNumber = this._getFullNumber(newValue);
              const coreNumber = intlTelInput.utils.getCoreNumber(
                newFullNumber,
                this.selectedCountryData.iso2
              );
              const hasExceededMaxLength = this.maxCoreNumberLength && coreNumber.length > this.maxCoreNumberLength;
              const newCountry = this._getNewCountryFromNumber(newFullNumber);
              const isChangingDialCode = newCountry !== null;
              if (!isAllowedChar || hasExceededMaxLength && !isChangingDialCode && !isInitialPlus) {
                e.preventDefault();
              }
            }
          }
        };
        this.ui.telInput.addEventListener("keydown", handleKeydownEvent, {
          signal: this.abortController.signal
        });
      }
    }
    _maybeBindPasteListener() {
      if (this.options.strictMode) {
        const handlePasteEvent = (e) => {
          e.preventDefault();
          const input = this.ui.telInput;
          const selStart = input.selectionStart;
          const selEnd = input.selectionEnd;
          const inputValue = this._getTelInputValue();
          const before = inputValue.slice(0, selStart);
          const after = inputValue.slice(selEnd);
          const iso2 = this.selectedCountryData.iso2;
          const pastedRaw = e.clipboardData.getData("text");
          const pasted = this._normaliseNumerals(pastedRaw);
          const initialCharSelected = selStart === 0 && selEnd > 0;
          const allowLeadingPlus = !inputValue.startsWith("+") || initialCharSelected;
          const allowedChars = pasted.replace(REGEX.NON_PLUS_NUMERIC_GLOBAL, "");
          const hasLeadingPlus = allowedChars.startsWith("+");
          const numerics = allowedChars.replace(/\+/g, "");
          const sanitised = hasLeadingPlus && allowLeadingPlus ? `+${numerics}` : numerics;
          let newVal = before + sanitised + after;
          if (newVal.length > 5) {
            let coreNumber = intlTelInput.utils.getCoreNumber(newVal, iso2);
            while (coreNumber.length === 0 && newVal.length > 0) {
              newVal = newVal.slice(0, -1);
              coreNumber = intlTelInput.utils.getCoreNumber(newVal, iso2);
            }
            if (!coreNumber) {
              return;
            }
            if (this.maxCoreNumberLength && coreNumber.length > this.maxCoreNumberLength) {
              if (input.selectionEnd === inputValue.length) {
                const trimLength = coreNumber.length - this.maxCoreNumberLength;
                newVal = newVal.slice(0, newVal.length - trimLength);
              } else {
                return;
              }
            }
          }
          this._setTelInputValue(newVal);
          const caretPos = selStart + sanitised.length;
          input.setSelectionRange(caretPos, caretPos);
          input.dispatchEvent(new InputEvent("input", { bubbles: true }));
        };
        this.ui.telInput.addEventListener("paste", handlePasteEvent, {
          signal: this.abortController.signal
        });
      }
    }
    //* Adhere to the input's maxlength attr.
    _cap(number) {
      const max = Number(this.ui.telInput.getAttribute("maxlength"));
      return max && number.length > max ? number.substring(0, max) : number;
    }
    //* Trigger a custom event on the input (typed via ItiEventMap).
    _trigger(name, detailProps = {}) {
      const e = new CustomEvent(name, {
        bubbles: true,
        cancelable: true,
        detail: detailProps
      });
      this.ui.telInput.dispatchEvent(e);
    }
    //* Open the dropdown.
    _openDropdown() {
      const { fixDropdownWidth, countrySearch } = this.options;
      this.dropdownAbortController = new AbortController();
      if (fixDropdownWidth) {
        this.ui.dropdownContent.style.width = `${this.ui.telInput.offsetWidth}px`;
      }
      this.ui.dropdownContent.classList.remove(CLASSES.HIDE);
      this.ui.selectedCountry.setAttribute(ARIA.EXPANDED, "true");
      this._setDropdownPosition();
      if (countrySearch) {
        const firstCountryItem = this.ui.countryList.firstElementChild;
        if (firstCountryItem) {
          this.ui.highlightListItem(firstCountryItem, false);
          this.ui.countryList.scrollTop = 0;
        }
        this.ui.searchInput.focus();
      }
      this._bindDropdownListeners();
      this.ui.dropdownArrow.classList.add(CLASSES.ARROW_UP);
      this._trigger(EVENTS.OPEN_COUNTRY_DROPDOWN);
    }
    //* Set the dropdown position
    _setDropdownPosition() {
      if (this.options.dropdownContainer) {
        this.options.dropdownContainer.appendChild(this.ui.dropdown);
      }
      if (!this.options.useFullscreenPopup) {
        const inputPosRelativeToVP = this.ui.telInput.getBoundingClientRect();
        const inputHeight = this.ui.telInput.offsetHeight;
        if (this.options.dropdownContainer) {
          this.ui.dropdown.style.top = `${inputPosRelativeToVP.top + inputHeight}px`;
          this.ui.dropdown.style.left = `${inputPosRelativeToVP.left}px`;
          const handleWindowScroll = () => this._closeDropdown();
          window.addEventListener("scroll", handleWindowScroll, {
            signal: this.dropdownAbortController.signal
          });
        }
      }
    }
    //* We only bind dropdown listeners when the dropdown is open.
    _bindDropdownListeners() {
      const signal = this.dropdownAbortController.signal;
      this._bindDropdownMouseoverListener(signal);
      this._bindDropdownCountryClickListener(signal);
      this._bindDropdownClickOffListener(signal);
      this._bindDropdownKeydownListener(signal);
      if (this.options.countrySearch) {
        this._bindDropdownSearchListeners(signal);
      }
    }
    //* When mouse over a list item, just highlight that one
    //* we add the class "highlight", so if they hit "enter" we know which one to select.
    _bindDropdownMouseoverListener(signal) {
      const handleMouseoverCountryList = (e) => {
        const listItem = e.target?.closest(
          `.${CLASSES.COUNTRY_ITEM}`
        );
        if (listItem) {
          this.ui.highlightListItem(listItem, false);
        }
      };
      this.ui.countryList.addEventListener(
        "mouseover",
        handleMouseoverCountryList,
        {
          signal
        }
      );
    }
    //* Listen for country selection.
    _bindDropdownCountryClickListener(signal) {
      const handleClickCountryList = (e) => {
        const listItem = e.target?.closest(
          `.${CLASSES.COUNTRY_ITEM}`
        );
        if (listItem) {
          this._selectListItem(listItem);
        }
      };
      this.ui.countryList.addEventListener("click", handleClickCountryList, {
        signal
      });
    }
    //* Click off to close (except when this initial opening click is bubbling up).
    //* We cannot just stopPropagation as it may be needed to close another instance.
    _bindDropdownClickOffListener(signal) {
      const handleClickOffToClose = (e) => {
        const target = e.target;
        const clickedInsideDropdown = !!target.closest(
          `#iti-${this.id}__dropdown-content`
        );
        if (!clickedInsideDropdown) {
          this._closeDropdown();
        }
      };
      setTimeout(() => {
        document.documentElement.addEventListener(
          "click",
          handleClickOffToClose,
          { signal }
        );
      }, 0);
    }
    //* Listen for up/down scrolling, enter to select, or escape to close.
    //* Use keydown as keypress doesn't fire for non-char keys and we want to catch if they
    //* just hit down and hold it to scroll down (no keyup event).
    //* Listen on the document because that's where key events are triggered if no input has focus.
    _bindDropdownKeydownListener(signal) {
      let query = "";
      let queryTimer = null;
      const handleKeydownOnDropdown = (e) => {
        const allowedKeys = [
          KEYS.ARROW_UP,
          KEYS.ARROW_DOWN,
          KEYS.ENTER,
          KEYS.ESC
        ];
        if (allowedKeys.includes(e.key)) {
          e.preventDefault();
          e.stopPropagation();
          if (e.key === KEYS.ARROW_UP || e.key === KEYS.ARROW_DOWN) {
            this._handleUpDownKey(e.key);
          } else if (e.key === KEYS.ENTER) {
            this._handleEnterKey();
          } else if (e.key === KEYS.ESC) {
            this._closeDropdown();
            this.ui.selectedCountry.focus();
          }
        }
        if (!this.options.countrySearch && REGEX.HIDDEN_SEARCH_CHAR.test(e.key)) {
          e.stopPropagation();
          if (queryTimer) {
            clearTimeout(queryTimer);
          }
          query += e.key.toLowerCase();
          this._searchForCountry(query);
          queryTimer = setTimeout(() => {
            query = "";
          }, TIMINGS.HIDDEN_SEARCH_RESET_MS);
        }
      };
      document.addEventListener("keydown", handleKeydownOnDropdown, { signal });
    }
    //* Search input listeners when countrySearch enabled.
    _bindDropdownSearchListeners(signal) {
      const doFilter = () => {
        const inputQuery = this.ui.searchInput.value.trim();
        this._filterCountriesByQuery(inputQuery);
        if (this.ui.searchInput.value) {
          this.ui.searchClearButton.classList.remove(CLASSES.HIDE);
        } else {
          this.ui.searchClearButton.classList.add(CLASSES.HIDE);
        }
      };
      let keyupTimer = null;
      const handleSearchChange = () => {
        if (keyupTimer) {
          clearTimeout(keyupTimer);
        }
        keyupTimer = setTimeout(() => {
          doFilter();
          keyupTimer = null;
        }, 100);
      };
      this.ui.searchInput.addEventListener("input", handleSearchChange, {
        signal
      });
      const handleSearchClear = () => {
        this.ui.searchInput.value = "";
        this.ui.searchInput.focus();
        doFilter();
      };
      this.ui.searchClearButton.addEventListener("click", handleSearchClear, {
        signal
      });
    }
    //* Hidden search (countrySearch disabled): Find the first list item whose name starts with the query string.
    _searchForCountry(query) {
      const match = findFirstCountryStartingWith(this.countries, query);
      if (match) {
        const listItem = match.nodeById[this.id];
        this.ui.highlightListItem(listItem, false);
        this.ui.scrollTo(listItem);
      }
    }
    //* Country search: Filter the countries according to the search query.
    _filterCountriesByQuery(query) {
      let matchedCountries;
      if (query === "") {
        matchedCountries = this.countries;
      } else {
        matchedCountries = getMatchedCountries(this.countries, query);
      }
      this.ui.filterCountries(matchedCountries);
    }
    //* Highlight the next/prev item in the list (and ensure it is visible).
    _handleUpDownKey(key) {
      let next = key === KEYS.ARROW_UP ? this.ui.highlightedItem?.previousElementSibling : this.ui.highlightedItem?.nextElementSibling;
      if (!next && this.ui.countryList.childElementCount > 1) {
        next = key === KEYS.ARROW_UP ? this.ui.countryList.lastElementChild : this.ui.countryList.firstElementChild;
      }
      if (next) {
        this.ui.scrollTo(next);
        this.ui.highlightListItem(next, false);
      }
    }
    //* Select the currently highlighted item.
    _handleEnterKey() {
      if (this.ui.highlightedItem) {
        this._selectListItem(this.ui.highlightedItem);
      }
    }
    //* Update the input's value to the given val (format first if possible)
    //* NOTE: this is called from _setInitialState, handleUtils and setNumber.
    _updateValFromNumber(fullNumber) {
      let number = fullNumber;
      if (this.options.formatOnDisplay && intlTelInput.utils && this.selectedCountryData) {
        const useNational = this.options.nationalMode || !number.startsWith("+") && !this.options.separateDialCode;
        const { NATIONAL, INTERNATIONAL } = intlTelInput.utils.numberFormat;
        const format = useNational ? NATIONAL : INTERNATIONAL;
        number = intlTelInput.utils.formatNumber(
          number,
          this.selectedCountryData.iso2,
          format
        );
      }
      number = this._beforeSetNumber(number);
      this._setTelInputValue(number);
    }
    //* Check if need to select a new country based on the given number
    //* Note: called from _setInitialState, keyup handler, setNumber.
    _updateCountryFromNumber(fullNumber) {
      const iso2 = this._getNewCountryFromNumber(fullNumber);
      if (iso2 !== null) {
        return this._setCountry(iso2);
      }
      return false;
    }
    // if there is a selected country, and the number doesn't start with a dial code, then add it
    _ensureHasDialCode(number) {
      const { dialCode, nationalPrefix } = this.selectedCountryData;
      const alreadyHasPlus = number.startsWith("+");
      if (alreadyHasPlus || !dialCode) {
        return number;
      }
      const hasPrefix = nationalPrefix && number.startsWith(nationalPrefix) && !this.options.separateDialCode;
      const cleanNumber = hasPrefix ? number.substring(1) : number;
      return `+${dialCode}${cleanNumber}`;
    }
    // Get the country ISO2 code from the given number
    // BUT ONLY IF ITS CHANGED FROM THE CURRENTLY SELECTED COUNTRY
    // NOTE: consider refactoring this to be more clear
    _getNewCountryFromNumber(fullNumber) {
      const plusIndex = fullNumber.indexOf("+");
      let number = plusIndex ? fullNumber.substring(plusIndex) : fullNumber;
      const selectedIso2 = this.selectedCountryData.iso2;
      const selectedDialCode = this.selectedCountryData.dialCode;
      number = this._ensureHasDialCode(number);
      const dialCodeMatch = this._getDialCode(number, true);
      const numeric = getNumeric(number);
      if (dialCodeMatch) {
        const dialCodeMatchNumeric = getNumeric(dialCodeMatch);
        const iso2Codes = this.dialCodeToIso2Map[dialCodeMatchNumeric];
        if (iso2Codes.length === 1) {
          if (iso2Codes[0] === selectedIso2) {
            return null;
          }
          return iso2Codes[0];
        }
        if (!selectedIso2 && this.defaultCountry && iso2Codes.includes(this.defaultCountry)) {
          return this.defaultCountry;
        }
        const isRegionlessNanpNumber = selectedDialCode === DIAL.NANP && isRegionlessNanp(numeric);
        if (isRegionlessNanpNumber) {
          return null;
        }
        const { areaCodes, priority } = this.selectedCountryData;
        if (areaCodes) {
          const dialCodeAreaCodes = areaCodes.map(
            (areaCode) => `${selectedDialCode}${areaCode}`
          );
          for (const dialCodeAreaCode of dialCodeAreaCodes) {
            if (numeric.startsWith(dialCodeAreaCode)) {
              return null;
            }
          }
        }
        const isMainCountry = priority === 0;
        const hasAreaCodesButNoneMatched = areaCodes && !isMainCountry && numeric.length > dialCodeMatchNumeric.length;
        const isValidSelection = selectedIso2 && iso2Codes.includes(selectedIso2) && !hasAreaCodesButNoneMatched;
        const alreadySelected = selectedIso2 === iso2Codes[0];
        if (!isValidSelection && !alreadySelected) {
          return iso2Codes[0];
        }
      } else if (number.startsWith("+") && numeric.length) {
        const currentDial = this.selectedCountryData.dialCode || "";
        if (currentDial && currentDial.startsWith(numeric)) {
          return null;
        }
        return "";
      } else if ((!number || number === "+") && !selectedIso2) {
        return this.defaultCountry;
      }
      return null;
    }
    //* Update the selected country, dial code (if separateDialCode), placeholder, title, and selected list item.
    //* Note: called from _setInitialState, _updateCountryFromNumber, _selectListItem, setCountry.
    _setCountry(iso2) {
      const { separateDialCode, showFlags, i18n, allowDropdown } = this.options;
      const prevIso2 = this.selectedCountryData.iso2 || "";
      if (allowDropdown) {
        this.ui.updateSelectedItem(iso2);
      }
      this.selectedCountryData = iso2 ? this.countryByIso2.get(iso2) : {};
      if (this.selectedCountryData.iso2) {
        this.defaultCountry = this.selectedCountryData.iso2;
      }
      if (this.ui.selectedCountry) {
        const flagClass = iso2 && showFlags ? `${CLASSES.FLAG} iti__${iso2}` : `${CLASSES.FLAG} ${CLASSES.GLOBE}`;
        let ariaLabel, title;
        if (iso2) {
          const { name, dialCode } = this.selectedCountryData;
          title = name;
          ariaLabel = i18n.selectedCountryAriaLabel.replace("${countryName}", name).replace("${dialCode}", `+${dialCode}`);
        } else {
          title = i18n.noCountrySelected;
          ariaLabel = i18n.noCountrySelected;
        }
        this.ui.selectedCountryInner.className = flagClass;
        this.ui.selectedCountry.setAttribute("title", title);
        this.ui.selectedCountry.setAttribute(ARIA.LABEL, ariaLabel);
      }
      if (separateDialCode) {
        const dialCode = this.selectedCountryData.dialCode ? `+${this.selectedCountryData.dialCode}` : "";
        this.ui.selectedDialCode.textContent = dialCode;
        this.ui.updateInputPadding();
      }
      this._updatePlaceholder();
      this._updateMaxLength();
      return prevIso2 !== iso2;
    }
    //* Update the maximum valid number length for the currently selected country.
    _updateMaxLength() {
      const { strictMode, placeholderNumberType, validationNumberTypes } = this.options;
      const { iso2 } = this.selectedCountryData;
      if (strictMode && intlTelInput.utils) {
        if (iso2) {
          const numberType = intlTelInput.utils.numberType[placeholderNumberType];
          let exampleNumber = intlTelInput.utils.getExampleNumber(
            iso2,
            false,
            numberType,
            true
          );
          let validNumber = exampleNumber;
          while (intlTelInput.utils.isPossibleNumber(
            exampleNumber,
            iso2,
            validationNumberTypes
          )) {
            validNumber = exampleNumber;
            exampleNumber += "0";
          }
          const coreNumber = intlTelInput.utils.getCoreNumber(validNumber, iso2);
          this.maxCoreNumberLength = coreNumber.length;
          if (iso2 === "by") {
            this.maxCoreNumberLength = coreNumber.length + 1;
          }
        } else {
          this.maxCoreNumberLength = null;
        }
      }
    }
    //* Update the input placeholder to an example number from the currently selected country.
    _updatePlaceholder() {
      const {
        autoPlaceholder,
        placeholderNumberType,
        nationalMode,
        customPlaceholder
      } = this.options;
      const shouldSetPlaceholder = autoPlaceholder === PLACEHOLDER_MODES.AGGRESSIVE || !this.ui.hadInitialPlaceholder && autoPlaceholder === PLACEHOLDER_MODES.POLITE;
      if (intlTelInput.utils && shouldSetPlaceholder) {
        const numberType = intlTelInput.utils.numberType[placeholderNumberType];
        let placeholder = this.selectedCountryData.iso2 ? intlTelInput.utils.getExampleNumber(
          this.selectedCountryData.iso2,
          nationalMode,
          numberType
        ) : "";
        placeholder = this._beforeSetNumber(placeholder);
        if (typeof customPlaceholder === "function") {
          placeholder = customPlaceholder(placeholder, this.selectedCountryData);
        }
        this.ui.telInput.setAttribute("placeholder", placeholder);
      }
    }
    //* Called when the user selects a list item from the dropdown.
    _selectListItem(listItem) {
      const iso2 = listItem.dataset[DATA_KEYS.COUNTRY_CODE];
      const countryChanged = this._setCountry(iso2);
      this._closeDropdown();
      const dialCode = listItem.dataset[DATA_KEYS.DIAL_CODE];
      this._updateDialCode(dialCode);
      if (this.options.formatOnDisplay) {
        const inputValue = this._getTelInputValue();
        this._updateValFromNumber(inputValue);
      }
      this.ui.telInput.focus();
      if (countryChanged) {
        this._triggerCountryChange();
      }
    }
    //* Close the dropdown and unbind any listeners.
    _closeDropdown() {
      if (this.ui.dropdownContent.classList.contains(CLASSES.HIDE)) {
        return;
      }
      this.ui.dropdownContent.classList.add(CLASSES.HIDE);
      this.ui.selectedCountry.setAttribute(ARIA.EXPANDED, "false");
      if (this.options.countrySearch) {
        this.ui.searchInput.removeAttribute(ARIA.ACTIVE_DESCENDANT);
        if (this.ui.highlightedItem) {
          this.ui.highlightedItem.classList.remove(CLASSES.HIGHLIGHT);
          this.ui.highlightedItem = null;
        }
      }
      this.ui.dropdownArrow.classList.remove(CLASSES.ARROW_UP);
      this.dropdownAbortController.abort();
      this.dropdownAbortController = null;
      if (this.options.dropdownContainer) {
        this.ui.dropdown.remove();
      }
      this._trigger(EVENTS.CLOSE_COUNTRY_DROPDOWN);
    }
    //* Replace any existing dial code with the new one
    //* Note: called from _selectListItem and setCountry
    _updateDialCode(newDialCodeBare) {
      const inputVal = this._getTelInputValue();
      const newDialCode = `+${newDialCodeBare}`;
      let newNumber;
      if (inputVal.startsWith("+")) {
        const prevDialCode = this._getDialCode(inputVal);
        if (prevDialCode) {
          newNumber = inputVal.replace(prevDialCode, newDialCode);
        } else {
          newNumber = newDialCode;
        }
        this._setTelInputValue(newNumber);
      }
    }
    //* Try and extract a valid international dial code from a full telephone number.
    //* Note: returns the raw string inc plus character and any whitespace/dots etc.
    _getDialCode(number, includeAreaCode) {
      let dialCode = "";
      if (number.startsWith("+")) {
        let numericChars = "";
        let foundBaseDialCode = false;
        for (let i = 0; i < number.length; i++) {
          const c = number.charAt(i);
          if (/[0-9]/.test(c)) {
            numericChars += c;
            const hasMapEntry = Boolean(this.dialCodeToIso2Map[numericChars]);
            if (!hasMapEntry) {
              break;
            }
            if (this.dialCodes.has(numericChars)) {
              dialCode = number.substring(0, i + 1);
              foundBaseDialCode = true;
              if (!includeAreaCode) {
                break;
              }
            } else if (includeAreaCode && foundBaseDialCode) {
              dialCode = number.substring(0, i + 1);
            }
            if (numericChars.length === this.dialCodeMaxLen) {
              break;
            }
          }
        }
      }
      return dialCode;
    }
    //* Get the input val, adding the dial code if separateDialCode is enabled.
    _getFullNumber(overrideVal) {
      const val = overrideVal ? this._normaliseNumerals(overrideVal) : this._getTelInputValue();
      const { dialCode } = this.selectedCountryData;
      let prefix;
      const numericVal = getNumeric(val);
      if (this.options.separateDialCode && !val.startsWith("+") && dialCode && numericVal) {
        prefix = `+${dialCode}`;
      } else {
        prefix = "";
      }
      return prefix + val;
    }
    //* Remove the dial code if separateDialCode is enabled also cap the length if the input has a maxlength attribute
    _beforeSetNumber(fullNumber) {
      const dialCode = this._getDialCode(fullNumber);
      const number = beforeSetNumber(
        fullNumber,
        dialCode,
        this.options.separateDialCode,
        this.selectedCountryData
      );
      return this._cap(number);
    }
    //* Trigger the 'countrychange' event.
    _triggerCountryChange() {
      this._trigger(EVENTS.COUNTRY_CHANGE);
    }
    //**************************
    //*  SECRET PUBLIC METHODS
    //**************************
    //* This is called when the geoip call returns.
    handleAutoCountry() {
      if (this.options.initialCountry === INITIAL_COUNTRY.AUTO && intlTelInput.autoCountry) {
        this.defaultCountry = intlTelInput.autoCountry;
        const hasSelectedCountryOrGlobe = this.selectedCountryData.iso2 || this.ui.selectedCountryInner.classList.contains(CLASSES.GLOBE);
        if (!hasSelectedCountryOrGlobe) {
          this.setCountry(this.defaultCountry);
        }
        this.resolveAutoCountryPromise();
      }
    }
    //* This is called when the utils request completes.
    handleUtils() {
      if (intlTelInput.utils) {
        const inputValue = this._getTelInputValue();
        if (inputValue) {
          this._updateValFromNumber(inputValue);
        }
        if (this.selectedCountryData.iso2) {
          this._updatePlaceholder();
          this._updateMaxLength();
        }
      }
      this.resolveUtilsScriptPromise();
    }
    //********************
    //*  PUBLIC METHODS
    //********************
    //* Remove plugin.
    destroy() {
      if (!this.ui.telInput) {
        return;
      }
      if (this.options.allowDropdown) {
        this._closeDropdown();
      }
      this.abortController.abort();
      this.abortController = null;
      this.ui.destroy();
      if (intlTelInput.instances instanceof Map) {
        intlTelInput.instances.delete(this.id);
      } else {
        delete intlTelInput.instances[this.id];
      }
    }
    //* Get the extension from the current number.
    getExtension() {
      if (intlTelInput.utils) {
        return intlTelInput.utils.getExtension(
          this._getFullNumber(),
          this.selectedCountryData.iso2
        );
      }
      return "";
    }
    //* Format the number to the given format.
    getNumber(format) {
      if (intlTelInput.utils) {
        const { iso2 } = this.selectedCountryData;
        const fullNumber = this._getFullNumber();
        const formattedNumber = intlTelInput.utils.formatNumber(
          fullNumber,
          iso2,
          format
        );
        return this._mapAsciiToUserNumerals(formattedNumber);
      }
      return "";
    }
    //* Get the type of the entered number e.g. landline/mobile.
    getNumberType() {
      if (intlTelInput.utils) {
        return intlTelInput.utils.getNumberType(
          this._getFullNumber(),
          this.selectedCountryData.iso2
        );
      }
      return SENTINELS.UNKNOWN_NUMBER_TYPE;
    }
    //* Get the country data for the currently selected country.
    getSelectedCountryData() {
      return this.selectedCountryData;
    }
    //* Get the validation error.
    getValidationError() {
      if (intlTelInput.utils) {
        const { iso2 } = this.selectedCountryData;
        return intlTelInput.utils.getValidationError(this._getFullNumber(), iso2);
      }
      return SENTINELS.UNKNOWN_VALIDATION_ERROR;
    }
    //* Validate the input val using number length only
    isValidNumber() {
      const { dialCode, iso2 } = this.selectedCountryData;
      if (dialCode === UK.DIAL_CODE && intlTelInput.utils) {
        const number = this._getFullNumber();
        const coreNumber = intlTelInput.utils.getCoreNumber(number, iso2);
        if (coreNumber[0] === UK.MOBILE_PREFIX && coreNumber.length !== UK.MOBILE_CORE_LENGTH) {
          return false;
        }
      }
      return this._validateNumber(false);
    }
    //* Validate the input val with precise validation
    isValidNumberPrecise() {
      return this._validateNumber(true);
    }
    _utilsIsPossibleNumber(val) {
      return intlTelInput.utils ? intlTelInput.utils.isPossibleNumber(
        val,
        this.selectedCountryData.iso2,
        this.options.validationNumberTypes
      ) : null;
    }
    //* Shared internal validation logic to handle alpha character extension rules.
    _validateNumber(precise) {
      if (!intlTelInput.utils) {
        return null;
      }
      if (!this.selectedCountryData.iso2) {
        return false;
      }
      const testValidity = (s) => precise ? this._utilsIsValidNumber(s) : this._utilsIsPossibleNumber(s);
      const val = this._getFullNumber();
      const alphaCharPosition = val.search(REGEX.ALPHA_UNICODE);
      const hasAlphaChar = alphaCharPosition > -1;
      if (hasAlphaChar && !this.options.allowPhonewords) {
        const beforeAlphaChar = val.substring(0, alphaCharPosition);
        const beforeAlphaIsValid = testValidity(beforeAlphaChar);
        const isValid = testValidity(val);
        return beforeAlphaIsValid && isValid;
      }
      return testValidity(val);
    }
    _utilsIsValidNumber(val) {
      return intlTelInput.utils ? intlTelInput.utils.isValidNumber(
        val,
        this.selectedCountryData.iso2,
        this.options.validationNumberTypes
      ) : null;
    }
    //* Update the selected country, and update the input val accordingly.
    setCountry(iso2) {
      const iso2Lower = iso2?.toLowerCase();
      if (!isIso2(iso2Lower)) {
        throw new Error(`Invalid country code: '${iso2Lower}'`);
      }
      const currentCountry = this.selectedCountryData.iso2;
      const isCountryChange = iso2 && iso2Lower !== currentCountry || !iso2 && currentCountry;
      if (isCountryChange) {
        this._setCountry(iso2Lower);
        this._updateDialCode(this.selectedCountryData.dialCode);
        if (this.options.formatOnDisplay) {
          const inputValue = this._getTelInputValue();
          this._updateValFromNumber(inputValue);
        }
        this._triggerCountryChange();
      }
    }
    //* Set the input value and update the country.
    setNumber(number) {
      const normalisedNumber = this._normaliseNumerals(number);
      const countryChanged = this._updateCountryFromNumber(normalisedNumber);
      this._updateValFromNumber(normalisedNumber);
      if (countryChanged) {
        this._triggerCountryChange();
      }
      this._trigger(EVENTS.INPUT, { isSetNumber: true });
    }
    //* Set the placeholder number typ
    setPlaceholderNumberType(type) {
      this.options.placeholderNumberType = type;
      this._updatePlaceholder();
    }
    setDisabled(disabled) {
      this.ui.telInput.disabled = disabled;
      if (disabled) {
        this.ui.selectedCountry.setAttribute("disabled", "true");
      } else {
        this.ui.selectedCountry.removeAttribute("disabled");
      }
    }
  };
  var attachUtils = (source) => {
    if (!intlTelInput.utils && !intlTelInput.startedLoadingUtilsScript) {
      let loadCall;
      if (typeof source === "function") {
        try {
          loadCall = Promise.resolve(source());
        } catch (error) {
          return Promise.reject(error);
        }
      } else {
        return Promise.reject(
          new TypeError(
            `The argument passed to attachUtils must be a function that returns a promise for the utilities module, not ${typeof source}`
          )
        );
      }
      intlTelInput.startedLoadingUtilsScript = true;
      return loadCall.then((module) => {
        const utils = module?.default;
        if (!utils || typeof utils !== "object") {
          throw new TypeError(
            "The loader function passed to attachUtils did not resolve to a module object with utils as its default export."
          );
        }
        intlTelInput.utils = utils;
        forEachInstance("handleUtils");
        return true;
      }).catch((error) => {
        forEachInstance("rejectUtilsScriptPromise", error);
        throw error;
      });
    }
    return null;
  };
  var forEachInstance = (method, ...args) => {
    Object.values(intlTelInput.instances).forEach((instance) => {
      const fn = instance[method];
      if (typeof fn === "function") {
        fn.apply(instance, args);
      }
    });
  };
  var intlTelInput = Object.assign(
    (input, options) => {
      const iti = new Iti(input, options);
      intlTelInput.instances[iti.id] = iti;
      input.iti = iti;
      return iti;
    },
    {
      defaults,
      //* Using a static var like this allows us to mock it in the tests.
      documentReady: () => document.readyState === "complete",
      //* Get the country data object.
      getCountryData: () => data_default,
      //* A getter for the plugin instance.
      getInstance: (input) => {
        const id2 = input.dataset.intlTelInputId;
        return id2 ? intlTelInput.instances[id2] : null;
      },
      //* A map from instance ID to instance object.
      instances: {},
      attachUtils,
      startedLoadingUtilsScript: false,
      startedLoadingAutoCountry: false,
      version: "25.15.0"
    }
  );
  var intl_tel_input_default = intlTelInput;
  return __toCommonJS(intl_tel_input_exports);
})();

// UMD
  return factoryOutput.default;
}));
