{
  "version": 3,
  "sources": ["../src/index.ts", "../src/utils/placeholders.ts", "../src/countries.ts"],
  "sourcesContent": ["// src/index.ts\n// @ts-check  // (se vuoi anche nei sorgenti)\n\n/** @typedef {import(\"./countries.js\").CountryKey} CountryKey */\n/** @typedef {import(\"./countries.js\").CountryDef} CountryDef */\n/** @typedef {\"car\"|\"motorcycle\"|\"any\"} VehicleType */\n/** @typedef {{ country: CountryKey; name: string }} ValidateMatch */\n/** @typedef {{ vehicleType?: VehicleType }} ValidateOptions */\n/** @typedef {{ isValid: boolean; matches: ValidateMatch[]; checked: CountryKey[]; errors?: string[] }} ValidateResult */\n\nimport { getInputMask } from \"./countries.js\"; // (non \u00E8 obbligatorio, serve solo a evitare che bundler estremi eliminino exports non usati)\n\nimport { RX, supportedCountries } from \"./countries.js\";\nimport type { CountryKey, VehicleType, CountryDef } from \"./countries.js\";\nexport type { CountryKey, VehicleType, CountryDef } from \"./countries.js\";\nexport * from \"./countries.js\";\n\n// export { createEuroPlate } from \"./client/europlate.client.js\";\n\n/** Risultato di un match paese/targa */\nexport interface Match {\n  country: CountryKey;\n  name: string;\n}\n\nexport interface ValidateOptions {\n  vehicleType?: VehicleType;\n}\n\nexport interface ValidateMatch {\n  country: CountryKey;\n  name: string;\n}\n\nexport interface ValidateResult {\n  isValid: boolean;\n  matches: ValidateMatch[];\n  checked: CountryKey[];\n  errors?: string[];\n}\n\n/** Normalizza l'input targa: maiuscolo, spazi consolidati, trim.\n *  @param {string} input\n *  @returns {string}\n */\nexport function normalize(input: string): string {\n  return String(input ?? \"\")\n    .toUpperCase()\n    .replace(/\\s+/g, \" \")\n    .trim();\n}\n\n/** Genera i pattern (RegExp) per un dato paese e tipo veicolo.\n *  @param {CountryKey} country\n *  @param {VehicleType} vehicleType\n *  @returns {Generator<RegExp>}\n */\nfunction* pickPatternsFor(country: CountryKey, vehicleType: VehicleType): Generator<RegExp> {\n  const set: CountryDef[\"patterns\"] = RX[country].patterns;\n  if (vehicleType === \"car\" || vehicleType === \"any\") {\n    for (const p of set.car ?? []) yield p.rx;\n  }\n  if (vehicleType === \"motorcycle\" || vehicleType === \"any\") {\n    for (const p of set.motorcycle ?? []) yield p.rx;\n  }\n}\n\n/** Valida una targa contro uno o pi\u00F9 paesi.\n *  @param {string} plate\n *  @param {readonly CountryKey[]=} countries  Elenco di paesi da controllare (default: tutti)\n *  @param {ValidateOptions=} options          { vehicleType?: \"car\"|\"motorcycle\"|\"any\" } (default \"any\")\n *  @returns {ValidateResult}\n */\nexport function validatePlate(plate: string, countries?: readonly CountryKey[], options: ValidateOptions = {}): ValidateResult {\n  const vehicleType: VehicleType = options.vehicleType ?? \"any\";\n  const norm = normalize(plate);\n\n  // Normalizza l\u2019elenco dei paesi in un array mutabile locale, tipizzato\n  const picks: CountryKey[] = countries && countries.length ? (countries.filter((c): c is CountryKey => c in RX) as CountryKey[]) : [...supportedCountries];\n\n  if (!norm) {\n    return { isValid: false, matches: [], checked: picks, errors: [\"empty\"] };\n  }\n  if (!picks.length) {\n    return { isValid: false, matches: [], checked: [], errors: [\"no_countries_selected\"] };\n  }\n\n  const matches: ValidateMatch[] = [];\n  for (const c of picks) {\n    for (const rx of pickPatternsFor(c, vehicleType)) {\n      if (rx.test(norm)) {\n        matches.push({ country: c, name: RX[c].name });\n        break;\n      }\n    }\n  }\n\n  return {\n    isValid: matches.length > 0,\n    matches,\n    checked: picks,\n    errors: matches.length ? undefined : [\"no_match\"],\n  };\n}\n", "// src/utils/placeholders.ts\n\nimport type { CountryKey, InputMaskLayout } from \"../countries.js\";\n\n/**\n * Converte un \"display format\" leggibile in un placeholder.\n * Regole :\n *  - Lettere ( A / B / L / H / C ) \u2192 \"_\"\n *  - Cifre ( 9 / # / 0-9 ) \u2192 \"_\"\n *  - Separatori ( spazio , - , . , / ) \u2192 preservati\n *  - Per formati multipli ( \"|\" o \"/\" ) prende il PRIMO segmento significativo\n */\nexport function placeholderFromDisplayFormat(format: string): string {\n  const pick = firstSignificantVariant(format);\n\n  let out = \"\";\n  for (const ch of pick) {\n    if (isLetterToken(ch) || isDigitToken(ch)) out += \"_\";\n    else out += ch; // separatori, spazi, trattini, ecc.\n  }\n  // normalizza spazi multipli\n  return out.replace(/\\s{2,}/g, \" \").trim();\n}\n\n/**\n * Separa per '|' o '/' e sceglie la variante pi\u00F9 rappresentativa.\n * Criteri : prima variante non vuota , preferibilmente con cifre.\n */\nfunction firstSignificantVariant(format: string): string {\n  const parts = format.split(/\\s*(?:\\|\\/|\\/|\\|)\\s*/).filter(Boolean);\n  if (parts.length === 0) return format;\n  // Heuristica : preferisci quella con pi\u00F9 cifre / lunghezza\n  return parts.slice().sort((a, b) => scoreVariant(b) - scoreVariant(a))[0];\n}\n\nfunction scoreVariant(s: string): number {\n  const digits = (s.match(/[9#0-9]/g) || []).length;\n  return digits * 10 + s.length; // peso maggiore ai digit\n}\n\nfunction isLetterToken(ch: string): boolean {\n  // Token usati nei display : A B L H C X\n  return /[A-Z]/.test(ch) && /[ABLHCX]/.test(ch);\n}\n\nfunction isDigitToken(ch: string): boolean {\n  return /[9#0-9]/.test(ch);\n}\n// --- helper per tokenizzare una mask ---\nfunction isLetterTokenMask(ch: string): boolean {\n  // token lettere usati nelle nostre mask: L / H / C / X (pi\u00F9 eventuali A/B)\n  return /[A-Z]/.test(ch) && /[LH CAX]/.test(ch.replace(/ /g, \"\")); // tollera spazio\n}\nfunction isDigitTokenMask(ch: string): boolean {\n  return /[9#0]/.test(ch);\n}\nfunction isSeparator(ch: string): boolean {\n  return !isLetterTokenMask(ch) && !isDigitTokenMask(ch);\n}\n\n// prende il primo/ultimo char non-separatore\nfunction firstNonSep(s: string): string | null {\n  for (const ch of s) if (!isSeparator(ch)) return ch;\n  return null;\n}\nfunction lastNonSep(s: string): string | null {\n  for (let i = s.length - 1; i >= 0; i--) {\n    const ch = s[i];\n    if (!isSeparator(ch)) return ch;\n  }\n  return null;\n}\n\n// blocchi di lettere consecutivi (per preferire LL-...-LL)\nfunction countLetterBlocks(s: string): number {\n  let blocks = 0,\n    inBlock = false;\n  for (const ch of s) {\n    if (isLetterTokenMask(ch)) {\n      if (!inBlock) {\n        blocks++;\n        inBlock = true;\n      }\n    } else if (!isSeparator(ch)) {\n      inBlock = false;\n    } else {\n      // separatore: chiude eventuale blocco\n      inBlock = false;\n    }\n  }\n  return blocks;\n}\n\nfunction scoreMaskVariant(s: string): number {\n  const digits = (s.match(/[9#0]/g) || []).length;\n  const letters = (s.match(/[A-Z]/g) || []).length; // conta i token lettera\n  const len = s.length;\n\n  const first = firstNonSep(s);\n  const last = lastNonSep(s);\n\n  const startsWithLetter = first ? isLetterTokenMask(first) : false;\n  const endsWithLetter = last ? isLetterTokenMask(last) : false;\n\n  const letterBlocks = countLetterBlocks(s);\n\n  // base: preferisci molte cifre (pi\u00F9 informativo) e lunghezza\n  // bonus: inizio con lettera (+8), fine con lettera (+4), 2+ blocchi lettera (+3)\n  // ulteriore bonus: pi\u00F9 lettere totali (+letters)\n  return digits * 10 + len + (startsWithLetter ? 8 : 0) + (endsWithLetter ? 4 : 0) + (letterBlocks >= 2 ? 3 : 0) + letters;\n}\n\n/**\n * Dato un array di mask Inputmask, genera un placeholder rappresentativo\n * scegliendo la variante con punteggio migliore (preferenza: inizio lettera).\n */\nexport function placeholderFromMasks(masks: string[]): string {\n  const best = masks.slice().sort((a, b) => scoreMaskVariant(b) - scoreMaskVariant(a))[0] || \"\";\n  let out = \"\";\n  for (const ch of best) {\n    if (isLetterTokenMask(ch)) out += \"_\";\n    else if (isDigitTokenMask(ch)) out += \"_\";\n    else out += ch; // separatori\n  }\n  return out.replace(/\\s{2,}/g, \" \").trim();\n}\n\n/**\n * Costruisce una mappa CountryKey \u2192 placeholder a partire dai DISPLAY_FORMATS.\n */\nexport function buildPlaceholdersFromDisplay(displayFormats: Partial<Record<CountryKey, string>>): Partial<Record<CountryKey, string>> {\n  const out: Partial<Record<CountryKey, string>> = {};\n  for (const [k, fmt] of Object.entries(displayFormats) as [CountryKey, string][]) {\n    out[k] = placeholderFromDisplayFormat(fmt);\n  }\n  return out;\n}\n\n/**\n * Inietta i placeholder mancanti dentro le layout Inputmask.\n * - Se la layout ha `placeholder` non vuoto \u2192 NON toccare.\n * - Se `mask` \u00E8 stringa \u2192 deriva placeholder dalla mask.\n * - Se `mask` \u00E8 array \u2192 usa placeholderFromMasks.\n * - Se fallisce \u2192 prova da DISPLAY_FORMATS.\n * Inoltre: normalizza keepStatic `null` \u2192 `undefined`.\n */\nexport function finalizeInputMaskLayouts<T extends Partial<Record<CountryKey, InputMaskLayout>>>(baseLayouts: T, displayFormats: Partial<Record<CountryKey, string>>): T {\n  // copia superficiale della mappa; poi copiamo ogni voce che modifichiamo\n  const out: Partial<Record<CountryKey, InputMaskLayout>> = { ...baseLayouts };\n\n  const displayPH: Partial<Record<CountryKey, string>> = {};\n  for (const [k, fmt] of Object.entries(displayFormats) as [CountryKey, string][]) {\n    displayPH[k] = placeholderFromDisplayFormat(fmt);\n  }\n\n  (Object.keys(out) as CountryKey[]).forEach((cc) => {\n    const layout = out[cc];\n    if (!layout) return;\n\n    let next: InputMaskLayout = { ...layout };\n\n    // normalizza keepStatic: null \u2192 undefined\n    if (next.keepStatic === null) {\n      delete (next as any).keepStatic;\n    }\n\n    // se gi\u00E0 presente e non vuoto, lascia stare\n    if (next.placeholder && next.placeholder.trim()) {\n      out[cc] = next;\n      return;\n    }\n\n    // prova a derivare dalla mask\n    const m = next.mask;\n    if (typeof m === \"string\") {\n      next.placeholder = placeholderFromMasks([m]);\n    } else if (Array.isArray(m) && m.length > 0) {\n      next.placeholder = placeholderFromMasks(m as string[]);\n    }\n\n    // fallback dal display format\n    if (!next.placeholder || !next.placeholder.trim()) {\n      if (displayPH[cc]) next.placeholder = displayPH[cc]!;\n    }\n\n    out[cc] = next;\n  });\n\n  return out as T;\n}\n", "// src/countries.ts\nimport { finalizeInputMaskLayouts } from \"./utils/placeholders.js\";\n\n// prettier-ignore\n/** Tutti i country code supportati (Russia esclusa) */\nexport type CountryKey = \"IT\" | \"UK\" | \"DE\" | \"FR\" | \"ES\" | \"PT\" | \"NL\" | \"BE\" | \"CH\" | \"AT\" | \"IE\" | \"LU\" | \"DK\" | \"SE\" | \"NO\" | \"FI\" | \"PL\" | \"CZ\" | \"SK\" | \"HU\" | \"RO\" | \"BG\" | \"SI\" | \"HR\" | \"GR\" | \"LT\" | \"LV\" | \"EE\" | \"UA\";\n\n/** Tipo veicolo */\nexport type VehicleType = \"car\" | \"motorcycle\" | \"any\";\n\n// prettier-ignore\n/** Lista di paesi supportati (const + tipizzato) */\nexport const supportedCountries = [\n  \"IT\", \"UK\", \"DE\", \"FR\", \"ES\", \"PT\", \"NL\", \"BE\", \"CH\", \"AT\", \"IE\", \"LU\", \"DK\", \"SE\", \"NO\", \"FI\", \"PL\", \"CZ\", \"SK\", \"HU\", \"RO\", \"BG\", \"SI\", \"HR\", \"GR\", \"LT\", \"LV\", \"EE\", \"UA\",\n] as const satisfies ReadonlyArray<CountryKey>;\n\n// prettier-ignore\nexport const FLAG_MAP = {\n  IT:\"it\", UK:\"gb\", DE:\"de\", FR:\"fr\", ES:\"es\", PT:\"pt\", NL:\"nl\", BE:\"be\", CH:\"ch\", AT:\"at\", IE:\"ie\", LU:\"lu\",\n  DK:\"dk\", SE:\"se\", NO:\"no\", FI:\"fi\", PL:\"pl\", CZ:\"cz\", SK:\"sk\", HU:\"hu\", RO:\"ro\", BG:\"bg\", SI:\"si\", HR:\"hr\",\n  GR:\"gr\", LT:\"lt\", LV:\"lv\", EE:\"ee\", UA:\"ua\"\n} as const;\n\n// prettier-ignore\nexport const COUNTRY_NAMES = {\n  IT:\"Italy\", UK:\"United Kingdom\", DE:\"Germany\", FR:\"France\", ES:\"Spain\", PT:\"Portugal\", NL:\"Netherlands\",\n  BE:\"Belgium\", CH:\"Switzerland\", AT:\"Austria\", IE:\"Ireland\", LU:\"Luxembourg\", DK:\"Denmark\", SE:\"Sweden\",\n  NO:\"Norway\", FI:\"Finland\", PL:\"Poland\", CZ:\"Czechia\", SK:\"Slovakia\", HU:\"Hungary\", RO:\"Romania\", BG:\"Bulgaria\",\n  SI:\"Slovenia\", HR:\"Croatia\", GR:\"Greece\", LT:\"Lithuania\", LV:\"Latvia\", EE:\"Estonia\", UA:\"Ukraine\"\n} as const;\n\nexport type CountryCode = keyof typeof FLAG_MAP;\n\n/**\n * Normalizes some real-world quirks:\n * - GB \u21E2 UK (ISO alpha-2 is GB; plates often use UK). Your map uses \"UK\", so we normalize to that.\n */\nexport function normalizeCode(code: string): CountryCode | undefined {\n  const up = code.trim().toUpperCase();\n  const alias = up === \"GB\" ? \"UK\" : up;\n  return alias in FLAG_MAP ? (alias as CountryCode) : undefined;\n}\n\nexport function getFlagSlug(code: string): string | undefined {\n  const cc = normalizeCode(code);\n  return cc ? FLAG_MAP[cc] : undefined;\n}\n\nexport function getCountryName(code: string): string | undefined {\n  const cc = normalizeCode(code);\n  return cc ? COUNTRY_NAMES[cc] : undefined;\n}\n\nexport const COUNTRY_CODES = Object.keys(FLAG_MAP) as CountryCode[];\n\nexport type CountryInfo = {\n  code: CountryCode;\n  flag: (typeof FLAG_MAP)[CountryCode];\n  name: (typeof COUNTRY_NAMES)[CountryCode];\n};\n\nexport const COUNTRIES: CountryInfo[] = COUNTRY_CODES.map((c) => ({\n  code: c as CountryCode,\n  flag: FLAG_MAP[c as CountryCode],\n  name: COUNTRY_NAMES[c as CountryCode],\n}));\n\n// Reverse lookups (by flag slug or name)\nexport const FLAG_TO_CODE = Object.fromEntries(COUNTRY_CODES.map((c) => [FLAG_MAP[c], c])) as Record<(typeof FLAG_MAP)[CountryCode], CountryCode>;\n\nexport const NAME_TO_CODE = Object.fromEntries(COUNTRY_CODES.map((c) => [COUNTRY_NAMES[c], c])) as Record<(typeof COUNTRY_NAMES)[CountryCode], CountryCode>;\n\n/** Entry di pattern per tipo veicolo */\nexport interface PatternSet {\n  car?: ReadonlyArray<{ rx: RegExp }>;\n  motorcycle?: ReadonlyArray<{ rx: RegExp }>;\n}\n\n/** Definizione Paese */\nexport interface CountryDef {\n  name: string;\n  patterns: PatternSet;\n}\n\n// Tipi: solo type, nessuna dipendenza runtime\ntype IMOpts = Inputmask.Options;\n\nexport interface InputMaskLayout {\n  mask: string | string[];\n  definitions?: IMOpts[\"definitions\"];\n  greedy?: IMOpts[\"greedy\"];\n  keepStatic?: IMOpts[\"keepStatic\"];\n  showMaskOnHover?: IMOpts[\"showMaskOnHover\"];\n  showMaskOnFocus?: IMOpts[\"showMaskOnFocus\"];\n  placeholder?: string;\n}\n\n/** Mappe leggibili per UI / placeholder / doc */\nexport const DISPLAY_FORMATS: Partial<Record<CountryKey, string>> = {\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 EUROZONA BASE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  IT: \"AA 999 AA\", // (senza I O Q U)\n  FR: \"AA-999-AA\",\n  ES: \"9999 BBB\", // (solo consonanti)\n  DE: \"B-AA 1234\", // variabile (prefisso+serie)\n  NL: \"AA-999-AA | 99-AAA-9 | A-999-AA | AA-999-A | 9-AA-999 | LL-LL-99 | 99-LL-LL | LLL-99-L\",\n  PT: \"99-AA-99 | AA-99-99 | 99-99-AA\",\n  BE: \"1-ABC-123 | ABC-123\",\n  CH: \"GE 123456\",\n  AT: \"W 1234 AB\",\n  IE: \"23-D-12345\",\n  LU: \"123456 | 12-3456\",\n  DK: \"AB 12 345\",\n  SE: \"ABC 12A\",\n  NO: \"AB 12345\",\n  FI: \"ABC-123\",\n  PL: \"WW 12345\", // formato generico\n  CZ: \"1AB 2345\",\n  SK: \"AA-999 AA\",\n  HU: \"ABC-123 | AAAA-123 | AA99-AA\",\n  RO: \"BB 99 AAA / B 999 AAA\",\n  BG: \"AA 9999 AA\",\n  SI: \"LJ-123-AB\",\n  HR: \"ST 1234-AA\",\n  GR: \"ABC-1234\",\n  LT: \"ABC 123\",\n  LV: \"AB-1234\",\n  EE: \"123 ABC\",\n  UA: \"AA 1234 AA\",\n  UK: \"AB12 CDE\",\n};\n\n/** Layout Inputmask per digitazione assistita (coerenti con le regex) */\nexport const INPUTMASK_LAYOUTS: Partial<Record<CountryKey, InputMaskLayout>> = {\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ITALIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  IT: {\n    // AA 999 AA  ma con alfabeto ristretto (niente I O Q U)\n    mask: \"HH 999 HH\",\n    definitions: {\n      // accetta minuscole+maiuscole, poi upper via casing\n      H: { validator: \"[A-HJ-NPR-TV-Za-hj-npr-tv-z]\", casing: \"upper\" },\n    },\n    placeholder: \"__ ___ __\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 FRANCIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  FR: {\n    // AA-999-AA (solo trattini) \u2014 nessuna defs: usa L base dal client\n    mask: \"LL-999-LL\",\n    placeholder: \"__-___-__\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SPAGNA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  ES: {\n    // 9999 BBB  \u2192 consonanti senza A E I O U Q \u00D1\n    mask: \"9999 CCC\",\n    definitions: {\n      // consonanti in entrambe le casse, poi upper\n      C: { validator: \"[BCDFGHJKLMNPRSTVWXYZbcdfghjklmnprstvwxyz]\", casing: \"upper\" },\n    },\n    placeholder: \"____ ___\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 REGNO UNITO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  UK: {\n    // AB12 CDE (formato corrente) \u2014 nessuna defs: L base\n    mask: \"LL99 LLL\",\n    placeholder: \"__ __ ___\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: true,\n  },\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 PAESI BASSI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  NL: {\n    // Sidecode multipli\n    mask: [\"LL-999-LL\", \"99-LLL-9\", \"L-999-LL\", \"LL-999-L\", \"9-LL-999\", \"LL-LL-99\", \"99-LL-LL\", \"LLL-99-L\"],\n    // Alfabeto NL senza A E I O U Q\n    definitions: { L: { validator: \"[BDFGHJKLNPRSTVXYZbdfghjklnprstvxyz]\", casing: \"upper\" } },\n    placeholder: \"\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: false,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ROMANIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  RO: {\n    // BB 99 AAA / B 999 AAA \u2014 nessuna defs: L base\n    mask: [\"LL 99 LLL\", \"LL 999 LLL\", \"L 99 LLL\", \"L 999 LLL\"],\n    placeholder: \"\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: false,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SLOVACCHIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  SK: {\n    // DD-999LL  (accetta varianti con / senza spazi / trattino) \u2014 L base\n    mask: [\"LL-999 LL\", \"LL999LL\", \"LL 999 LL\"],\n    placeholder: \"\",\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: false,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 PORTOGALLO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  PT: {\n    // L base\n    mask: [\"99-LL-99\", \"LL-99-99\", \"99-99-LL\"],\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: false,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 BELGIO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  BE: {\n    // L base\n    mask: [\"9-LLL-999\", \"LLL-999\"],\n    keepStatic: true,\n    showMaskOnHover: false,\n    showMaskOnFocus: false,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 DANIMARCA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  DK: {\n    // AA 12 345 \u2014 L base\n    mask: \"LL 99 999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SVEZIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  SE: {\n    // ABC 12X  (X alfanumerico) \u2014 L base; X con minuscole\n    mask: \"LLL 99 X\",\n    definitions: {\n      X: { validator: \"[A-Za-z0-9]\", casing: \"upper\" },\n    },\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 NORVEGIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  NO: {\n    // AA 12345 \u2014 L base\n    mask: \"LL 99999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 FINLANDIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  FI: {\n    // ABC-123 \u2014 L base\n    mask: \"LLL-999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 REP. CECA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  CZ: {\n    // 1AB 2345 \u2014 L base\n    mask: \"9 LL 9999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 UNGHERIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  HU: {\n    // ABC-123  /  AAAA-123  /  AA99-AA \u2014 L base\n    mask: [\"LLL-999\", \"LLLL-999\", \"LL99-LL\"],\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 BULGARIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  BG: {\n    // L base\n    mask: [\"L 9999 L\", \"LL 9999 LL\", \"L9999L\", \"LL9999LL\"],\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SLOVENIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  SI: {\n    // L base\n    mask: [\"LL-999- L\", \"LL-999- LL\", \"LL-9999- L\", \"LL-9999- LL\"],\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CROAZIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  HR: {\n    // L base\n    mask: [\"LL 999- LL\", \"LL 9999- LL\"],\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 GRECIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  GR: {\n    // L base\n    mask: \"LLL-9999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LITUANIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  LT: {\n    // L base\n    mask: \"LLL 999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LETTONIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  LV: {\n    // L base\n    mask: \"LL-9999\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ESTONIA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  EE: {\n    // L base\n    mask: \"999 LLL\",\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 UCRAINA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  UA: {\n    // L base\n    mask: \"LL 9994 LL\".replace(\"9994\", \"9999\"),\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LUSSEMBURGO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  LU: {\n    // 4\u20136 cifre  oppure  1\u20132 cifre - 3\u20134 cifre\n    mask: [\"9999\", \"99999\", \"999999\", \"9-999\", \"99-999\", \"9-9999\", \"99-9999\"],\n    keepStatic: true,\n  },\n\n  // \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 GERMANIA / AUSTRIA / SVIZZERA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  // Prefissi/lunghezze variabili, caratteri speciali (\u00C4\u00D6\u00DC) \u2192 niente mask rigida.\n  // DE: \u2014  AT: \u2014  CH: \u2014\n};\n\n// /** Helper ergonomici */\n// \uD83D\uDD1A Esporta una versione finale che garantisce i placeholder dove mancano\nexport const INPUTMASK_LAYOUTS_FINAL = finalizeInputMaskLayouts(\n  INPUTMASK_LAYOUTS, // <- T = Partial<Record<CountryKey, InputMaskLayout>>\n  DISPLAY_FORMATS\n);\n\n// opzionale: punta i consumer alla mappa \"final\"\nexport function getInputMask(country: CountryKey) {\n  return (INPUTMASK_LAYOUTS_FINAL as Record<CountryKey, InputMaskLayout | undefined>)[country] ?? null;\n}\n\nexport function getDisplayFormat(country: CountryKey): string | null {\n  return (DISPLAY_FORMATS as Record<CountryKey, string | undefined>)[country] ?? null;\n}\n\n/**\n * Mappa paesi \u2192 definizioni con regex.\n * Usa `satisfies` per garantire che ogni chiave rispetti CountryDef.\n */\nexport const RX: Record<CountryKey, CountryDef> = {\n  IT: {\n    name: \"Italy\",\n    patterns: {\n      // Car 1994\u2013today: AA 999 AA (no I O Q U), skip \"EE\" series\n      car: [{ rx: /^(?!EE)[A-HJ-NPR-TV-Z]{2}\\s?\\d{3}\\s?[A-HJ-NPR-TV-Z]{2}$/ }],\n      //BK 05-10 car: [{ rx: /^(?!EE)[A-HJ-NP-RTZ]{2}\\s?\\d{3}\\s?[A-HJ-NP-RTZ]{2}$/ }],\n      // Motorcycle 1999\u2013oggi: AA 00000 (no I O Q U)\n      motorcycle: [{ rx: /^[A-HJ-NPR-TV-Z]{2}\\s?\\d{5}$/ }],\n      //motorcycle: [{ rx: /^[A-HJ-NP-RTZ]{2}\\s?\\d{5}$/ }],\n      // BK 05-10 motorcycle: [{ rx: /^[A-HJ-NP-RTZ]{2}\\s?\\d{5}$/ }],\n    },\n  },\n\n  UK: {\n    name: \"United Kingdom\",\n    patterns: {\n      car: [\n        // Current (2001\u2013today): AB12 CDE\n        { rx: /^[A-Z]{2}\\d{2}\\s?[A-Z]{3}$/ },\n        // Broad legacy: A1, AB1, ABC1234, etc.\n        { rx: /^[A-Z]{1,3}\\s?\\d{1,4}\\s?[A-Z]{0,3}$/ },\n      ],\n      // (moto non dettagliata qui; si pu\u00F2 aggiungere in futuro)\n    },\n  },\n\n  DE: {\n    name: \"Germany\",\n    patterns: {\n      car: [\n        // Standard: prefisso regionale 1\u20133 lettere + '-' + 1\u20132 lettere + 1\u20134 cifre\n        // Nota: sui prefissi compaiono anche umlaut (\u00C4\u00D6\u00DC); li ammettiamo.\n        { rx: /^[A-Z\u00C4\u00D6\u00DC]{1,3}-[A-Z]{1,2}\\s?\\d{1,4}$/ },\n\n        // Ente pubblico / senza serie lettere a destra delle targhette:\n        // prefisso 1\u20133 lettere + '-' + 1\u20134 cifre\n        { rx: /^[A-Z\u00C4\u00D6\u00DC]{1,3}-\\d{1,4}$/ },\n\n        // Targhe \u201Cspeciali\u201D pratiche e frequenti:\n        // 06 = targhe prova/officina; 07 = storiche (H\u00E4ndler/Oldtimer)\n        { rx: /^[A-Z\u00C4\u00D6\u00DC]{1,3}-06\\s?\\d{1,4}$/ },\n        { rx: /^[A-Z\u00C4\u00D6\u00DC]{1,3}-07\\s?\\d{1,4}$/ },\n\n        // Bundeswehr (militari): \"Y-123 456\" (spazio opzionale). Cifre in 2 blocchi (1\u20133 + 1\u20133).\n        { rx: /^Y-\\d{1,3}\\s?\\d{1,3}$/ },\n      ],\n    },\n  },\n\n  // FR: SOLO trattini, niente spazi\n  FR: {\n    name: \"France\",\n    patterns: {\n      // AA-000-AA (nessuno spazio)\n      // TESBVUG 1.0.13\n      car: [{ rx: /^[A-Z]{2}-\\d{3}-[A-Z]{2}$/ }],\n      //    car: [{ rx: /^[A-Z]{2}[-]\\d{3}[-][A-Z]{2}$/ }],\n      //car: [{ rx: /^[A-Z]{2}\\-\\d{3}\\-[A-Z]{2}$/ }],\n    },\n  },\n\n  // ES: lascia cos\u00EC (gi\u00E0 corretta)\n  ES: {\n    name: \"Spain\",\n    patterns: {\n      // 0000 BBB, lettere da consonanti senza A,E,I,\u00D1,O,Q,U\n      car: [{ rx: /^\\d{4}\\s?[BCDFGHJKLMNPRSTVWXYZ]{3}$/ }],\n    },\n  },\n  PT: {\n    name: \"Portugal\",\n    patterns: {\n      car: [{ rx: /^\\d{2}-[A-Z]{2}-\\d{2}$/ }, { rx: /^[A-Z]{2}-\\d{2}-\\d{2}$/ }, { rx: /^\\d{2}-\\d{2}-[A-Z]{2}$/ }],\n    },\n  },\n\n  NL: {\n    name: \"Netherlands\",\n    patterns: {\n      car: [\n        // Sidecodes \u201Cstorici/moderni\u201D con trattini\n        // AA-123-AA\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{2}-\\d{3}-[BDFGHJKLNPRSTVXYZ]{2}$/ },\n        // 12-AAA-1\n        { rx: /^\\d{2}-[BDFGHJKLNPRSTVXYZ]{3}-\\d$/ },\n        // 1-AAA-12\n        { rx: /^\\d-[BDFGHJKLNPRSTVXYZ]{3}-\\d{2}$/ },\n        // AA-AA-12\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{2}-[BDFGHJKLNPRSTVXYZ]{2}-\\d{2}$/ },\n        // 12-AA-AA\n        { rx: /^\\d{2}-[BDFGHJKLNPRSTVXYZ]{2}-[BDFGHJKLNPRSTVXYZ]{2}$/ },\n        // AAA-12-A\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{3}-\\d{2}-[BDFGHJKLNPRSTVXYZ]$/ },\n\n        // Nuovi sidecode (dal 2021): A-001-AA, AA-001-A, 0-AA-001\n        { rx: /^[BDFGHJKLNPRSTVXYZ]-\\d{3}-[BDFGHJKLNPRSTVXYZ]{2}$/ }, // A-001-AA\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{2}-\\d{3}-[BDFGHJKLNPRSTVXYZ]$/ }, // AA-001-A\n        { rx: /^\\d-[BDFGHJKLNPRSTVXYZ]{2}-\\d{3}$/ }, // 0-AA-001\n\n        // Tollera eventuali spazi al posto dei trattini (import/export/trascrizioni)\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{2}\\s\\d{3}\\s[BDFGHJKLNPRSTVXYZ]{2}$/ },\n        { rx: /^\\d{2}\\s[BDFGHJKLNPRSTVXYZ]{3}\\s\\d$/ },\n        { rx: /^\\d\\s[BDFGHJKLNPRSTVXYZ]{3}\\s\\d{2}$/ },\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{2}\\s[BDFGHJKLNPRSTVXYZ]{2}\\s\\d{2}$/ },\n        { rx: /^\\d{2}\\s[BDFGHJKLNPRSTVXYZ]{2}\\s[BDFGHJKLNPRSTVXYZ]{2}$/ },\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{3}\\s\\d{2}\\s[BDFGHJKLNPRSTVXYZ]$/ },\n        { rx: /^[BDFGHJKLNPRSTVXYZ]\\s\\d{3}\\s[BDFGHJKLNPRSTVXYZ]{2}$/ },\n        { rx: /^[BDFGHJKLNPRSTVXYZ]{2}\\s\\d{3}\\s[BDFGHJKLNPRSTVXYZ]$/ },\n        { rx: /^\\d\\s[BDFGHJKLNPRSTVXYZ]{2}\\s\\d{3}$/ },\n      ],\n    },\n  },\n\n  BE: {\n    name: \"Belgium\",\n    patterns: { car: [{ rx: /^[1-9]-[A-Z]{3}-\\d{3}$/ }, { rx: /^[A-Z]{3}-\\d{3}$/ }] },\n  },\n  CH: { name: \"Switzerland\", patterns: { car: [{ rx: /^[A-Z]{2}\\s?\\d{1,6}$/ }] } },\n  AT: { name: \"Austria\", patterns: { car: [{ rx: /^[A-Z]{1,3}\\s?\\d{1,4}\\s?[A-Z]{0,2}$/ }] } },\n  IE: { name: \"Ireland\", patterns: { car: [{ rx: /^\\d{2,3}-[A-Z]{1,2}-\\d{1,6}$/ }] } },\n  LU: { name: \"Luxembourg\", patterns: { car: [{ rx: /^\\d{4,6}$/ }, { rx: /^\\d{1,2}-\\d{3,4}$/ }] } },\n  DK: { name: \"Denmark\", patterns: { car: [{ rx: /^[A-Z]{2}\\s?\\d{2}\\s?\\d{3}$/ }] } },\n  SE: { name: \"Sweden\", patterns: { car: [{ rx: /^[A-Z]{3}\\s?\\d{2}[A-Z0-9]$/ }] } },\n  NO: { name: \"Norway\", patterns: { car: [{ rx: /^[A-Z]{2}\\s?\\d{5}$/ }] } },\n  FI: { name: \"Finland\", patterns: { car: [{ rx: /^[A-Z]{3}-\\d{3}$/ }] } },\n  PL: { name: \"Poland\", patterns: { car: [{ rx: /^[A-Z]{1,3}\\s?[A-Z0-9]{4,5}$/ }] } },\n  CZ: { name: \"Czechia\", patterns: { car: [{ rx: /^\\d[A-Z]{2}\\s?\\d{4}$/ }] } },\n  HU: {\n    name: \"Hungary\",\n    patterns: {\n      car: [\n        { rx: /^[A-Z]{3}-\\d{3}$/ }, // storico: ABC-123\n        { rx: /^[A-Z]{4}-\\d{3}$/ }, // nuovo: 2022\u2192, AAAA-123\n        { rx: /^[A-Z]{2}\\d{2}-[A-Z]{2}$/ }, // ampia (legacy/transitorio)\n      ],\n    },\n  },\n\n  // 7-10 RO: { name: \"Romania\", patterns: { car: [{ rx: /^[A-Z]{1,2}\\s?\\d{2,3}\\s?[A-Z]{3}$/ }] } },\n  RO: {\n    name: \"Romania\",\n    patterns: {\n      car: [\n        // Regola generale: 2 lettere di contea + 2/3 cifre + 3 lettere\n        { rx: /^[A-Z]{2}\\s?\\d{2,3}\\s?[A-Z]{3}$/ },\n        // Eccezione capitale: 1 lettera (solo B) + 2/3 cifre + 3 lettere\n        { rx: /^B\\s?\\d{2,3}\\s?[A-Z]{3}$/ },\n      ],\n    },\n  },\n\n  //SK: { name: \"Slovakia\", patterns: { car: [{ rx: /^[A-Z]{2}\\s?\\d{3,4}[A-Z]{0,2}$/ }] } },\n  SK: {\n    name: \"Slovakia\",\n    patterns: {\n      car: [\n        // Formato tipico: DD-999LL (con o senza trattino/spazio)\n        { rx: /^[A-Z]{2}[-\\s]?\\d{3}[A-Z]{2}$/ },\n      ],\n    },\n  },\n  BG: { name: \"Bulgaria\", patterns: { car: [{ rx: /^[A-Z]{1,2}\\s?\\d{4}\\s?[A-Z]{1,2}$/ }] } },\n  SI: { name: \"Slovenia\", patterns: { car: [{ rx: /^[A-Z]{2}-\\d{3,4}-[A-Z]{1,2}$/ }] } },\n  HR: { name: \"Croatia\", patterns: { car: [{ rx: /^[A-Z]{2}\\s?\\d{3,4}-[A-Z]{2}$/ }] } },\n  GR: { name: \"Greece\", patterns: { car: [{ rx: /^[A-Z]{3}-\\d{4}$/ }] } },\n  LT: { name: \"Lithuania\", patterns: { car: [{ rx: /^[A-Z]{3}\\s?\\d{3}$/ }] } },\n  LV: { name: \"Latvia\", patterns: { car: [{ rx: /^[A-Z]{2}-\\d{4}$/ }] } },\n  EE: { name: \"Estonia\", patterns: { car: [{ rx: /^\\d{3}\\s?[A-Z]{3}$/ }] } },\n  UA: { name: \"Ukraine\", patterns: { car: [{ rx: /^[A-Z]{2}\\s?\\d{4}\\s?[A-Z]{2}$/ }] } },\n} satisfies Record<CountryKey, CountryDef>;\n"],
  "mappings": "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",
  "names": []
}
