@alikhalilll/a-tel-input 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/index.cjs +5846 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +791 -0
  6. package/dist/index.d.ts +791 -0
  7. package/dist/index.js +5804 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/nuxt/index.cjs +30 -0
  10. package/dist/nuxt/index.cjs.map +1 -0
  11. package/dist/nuxt/index.d.cts +15 -0
  12. package/dist/nuxt/index.d.ts +15 -0
  13. package/dist/nuxt/index.js +30 -0
  14. package/dist/nuxt/index.js.map +1 -0
  15. package/dist/resolver/index.cjs +25 -0
  16. package/dist/resolver/index.cjs.map +1 -0
  17. package/dist/resolver/index.d.cts +14 -0
  18. package/dist/resolver/index.d.ts +14 -0
  19. package/dist/resolver/index.js +25 -0
  20. package/dist/resolver/index.js.map +1 -0
  21. package/dist/styles.css +520 -0
  22. package/package.json +123 -0
  23. package/src/components/ACountryFlag.vue +78 -0
  24. package/src/components/ACountrySelect.vue +674 -0
  25. package/src/components/ATelInput.vue +742 -0
  26. package/src/composables/useCountryDetection.ts +247 -0
  27. package/src/composables/useCountryMatching.ts +213 -0
  28. package/src/composables/usePhoneValidation.ts +573 -0
  29. package/src/composables/useTelInputValidation.ts +136 -0
  30. package/src/composables/useTypingPhase.ts +88 -0
  31. package/src/icons/AlertCircleIcon.vue +17 -0
  32. package/src/icons/CheckCircleIcon.vue +16 -0
  33. package/src/icons/CheckIcon.vue +15 -0
  34. package/src/icons/ChevronDownIcon.vue +15 -0
  35. package/src/icons/SearchIcon.vue +16 -0
  36. package/src/icons/SpinnerIcon.vue +28 -0
  37. package/src/icons/index.ts +6 -0
  38. package/src/index.ts +36 -0
  39. package/src/nuxt/index.ts +37 -0
  40. package/src/resolver/index.ts +29 -0
  41. package/src/types.ts +389 -0
  42. package/src/utils/digits.ts +42 -0
  43. package/src/utils/flag-url.ts +10 -0
  44. package/web-types.json +526 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["examples","isBrowser"],"sources":["../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../AUiBase/dist/index.js","../src/utils/digits.ts","../src/composables/usePhoneValidation.ts","../src/composables/useCountryDetection.ts","../src/composables/useCountryMatching.ts","../src/composables/useTypingPhase.ts","../src/composables/useTelInputValidation.ts","../src/types.ts","../src/utils/flag-url.ts","../src/components/ACountryFlag.vue","../src/icons/CheckIcon.vue","../src/icons/CheckCircleIcon.vue","../src/icons/AlertCircleIcon.vue","../src/icons/SpinnerIcon.vue","../src/icons/ChevronDownIcon.vue","../src/icons/SearchIcon.vue","../src/components/ACountrySelect.vue","../src/components/ATelInput.vue"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNamedContainerQuery,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Container Type\n * @see https://tailwindcss.com/docs/responsive-design#container-queries\n */\n 'container-type': [{\n '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Container Name\n * @see https://tailwindcss.com/docs/responsive-design#named-containers\n */\n 'container-named': [isNamedContainerQuery],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n /**\n * Zoom\n * @see https://tailwindcss.com/docs/zoom\n */\n zoom: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n postfixLookupClassGroups: ['container-type'],\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n//#region src/cn.ts\nfunction cn(...inputs) {\n\treturn twMerge(clsx(inputs));\n}\n//#endregion\n//#region src/sizes.ts\nconst SIZES = [\n\t\"xs\",\n\t\"sm\",\n\t\"md\",\n\t\"lg\",\n\t\"xl\"\n];\nconst DEFAULT_SIZE = \"md\";\n/** Tailwind height utility per size. md uses an arbitrary value because 43px isn't on the spacing scale. */\nconst controlHeight = {\n\txs: \"h-7\",\n\tsm: \"h-9\",\n\tmd: \"h-[43px]\",\n\tlg: \"h-[52px]\",\n\txl: \"h-[60px]\"\n};\nconst controlPaddingX = {\n\txs: \"px-2\",\n\tsm: \"px-2.5\",\n\tmd: \"px-3\",\n\tlg: \"px-3.5\",\n\txl: \"px-4\"\n};\nconst controlTextSize = {\n\txs: \"text-xs\",\n\tsm: \"text-sm\",\n\tmd: \"text-sm\",\n\tlg: \"text-base\",\n\txl: \"text-base\"\n};\n/** Pixel values exposed so non-template code (icons, ResizeObserver, etc.) can read the height. */\nconst controlHeightPx = {\n\txs: 28,\n\tsm: 36,\n\tmd: 43,\n\tlg: 52,\n\txl: 60\n};\n//#endregion\nexport { DEFAULT_SIZE, SIZES, cn, controlHeight, controlHeightPx, controlPaddingX, controlTextSize };\n\n//# sourceMappingURL=index.js.map","/**\n * Alternative-numeral support. Phone numbers are routinely entered with the digits of the\n * user's own script — Arabic-Indic, Persian/Urdu, Devanagari, Bengali. `libphonenumber-js`\n * and our own `\\d` cleanup only understand ASCII `0-9`, so anything else silently becomes\n * an empty number. `normalizeDigits` folds those scripts down to ASCII before validation.\n */\n\n/**\n * Base code points of contiguous decimal-digit blocks. Each block runs `base`‥`base+9`\n * for digit `0`‥`9`, so the ASCII digit is `codePoint - base`. Add a script by appending\n * one entry here.\n */\nexport const LOCALE_DIGIT_RANGES: { name: string; base: number }[] = [\n { name: 'arabic-indic', base: 0x0660 }, // ٠١٢٣٤٥٦٧٨٩\n { name: 'extended-arabic', base: 0x06f0 }, // ۰۱۲۳۴۵۶۷۸۹ — Persian / Urdu\n { name: 'devanagari', base: 0x0966 }, // ०१२३४५६७८९\n { name: 'bengali', base: 0x09e6 }, // ০১২৩৪৫৬৭৮৯\n];\n\n/** Lookup of every non-ASCII digit code point → its ASCII character. */\nconst DIGIT_MAP: Map<number, string> = (() => {\n const map = new Map<number, string>();\n for (const { base } of LOCALE_DIGIT_RANGES) {\n for (let d = 0; d <= 9; d++) map.set(base + d, String(d));\n }\n return map;\n})();\n\n/**\n * Replace any supported non-ASCII decimal digit with its ASCII equivalent. Every other\n * character (spaces, `+`, separators, letters) is left untouched — callers still run their\n * own `\\D` cleanup afterwards.\n */\nexport function normalizeDigits(input: string): string {\n const str = String(input ?? '');\n let out = '';\n for (const ch of str) {\n const cp = ch.codePointAt(0);\n out += (cp != null && DIGIT_MAP.get(cp)) || ch;\n }\n return out;\n}\n","/**\n * Country list + phone validation, framework-agnostic.\n *\n * Ported from the reference @pkgs/ui ATelInput composable with these cleanups:\n * - Drop Nuxt-only `process.client` checks → use plain `typeof window !== 'undefined'`.\n * - Drop Arabic default placeholder; let consumers pass their own.\n * - Expand the offline fallback list from 2 → ~20 of the most-populated countries.\n * - Keep REST Countries fetch + localStorage cache + libphonenumber-js examples + fast `search_key`.\n */\n\nimport { ref, type Ref } from 'vue';\nimport {\n type CountryCode,\n type Examples,\n getExampleNumber,\n isValidPhoneNumber,\n parsePhoneNumberFromString,\n} from 'libphonenumber-js';\nimport examples from 'libphonenumber-js/examples.mobile.json';\nimport { normalizeDigits } from '../utils/digits';\n\n/* -----------------------------------------------------------------------------\n * Public types\n * -------------------------------------------------------------------------- */\nexport interface RestCountry {\n name?: { common?: string };\n cca2?: string;\n idd?: { root?: string; suffixes?: string[] };\n flags?: { png?: string; svg?: string };\n}\n\nexport interface CountryOption<T = RestCountry> {\n /** Display label, e.g. \"Egypt (+20)\". */\n label: string;\n /** Stable unique ID — the ISO 3166-1 alpha-2 code, e.g. \"EG\". */\n value: string;\n /** Precomputed normalized string for fast substring search. */\n search_key: string;\n raw_data: {\n iso2: string;\n dial_code: string;\n dial_digits: string;\n name: string;\n flag: string | null;\n source: 'restcountries' | 'fallback';\n original: T;\n };\n}\n\nexport interface PhoneRequiredInfo {\n iso2: string;\n dial_code: string;\n /** Empty by default — consumer passes a placeholder via the component prop. */\n placeholder: string;\n example_national: string;\n example_e164: string;\n national_number_length: { min: number | null; max: number | null };\n format_hint: string;\n}\n\nexport type PhoneValidationReason =\n | 'missing_country'\n | 'country_not_supported'\n | 'phone_has_non_digits'\n | 'too_short'\n | 'too_long'\n | 'invalid_phone'\n | 'parse_failed';\n\nexport interface PhoneValidationResult {\n ok: boolean;\n reason: PhoneValidationReason | null;\n country: { iso2: string; dial_code: string } | null;\n phone: { raw: string | null; digits: string };\n full_phone: string | null;\n required: PhoneRequiredInfo | null;\n details?: Record<string, unknown>;\n}\n\nexport type ValidateArgs =\n | {\n country: { iso2: string; dial_code?: string } | null | undefined;\n phone?: undefined;\n /** BCP-47 locale — localizes the numerals in the returned `required.format_hint`. */\n locale?: string;\n }\n | {\n country: { iso2: string; dial_code?: string } | null | undefined;\n phone: string | null;\n /** BCP-47 locale — localizes the numerals in the returned `required.format_hint`. */\n locale?: string;\n };\n\nconst STORAGE_KEY = 'ali_ui_phone_countries_v1';\nconst REST_COUNTRIES_URL = 'https://restcountries.com/v3.1/all?fields=name,cca2,idd,flags';\n\nconst EX = examples as unknown as Examples;\n\nconst isBrowser = () => typeof window !== 'undefined';\n\nfunction toDigits(v: unknown) {\n // Fold alternative numeral systems (Arabic-Indic, Persian, Devanagari, Bengali) down to\n // ASCII first, so a number typed in the user's own script still validates.\n return normalizeDigits(String(v ?? '')).replace(/\\D/g, '');\n}\n\n/**\n * Render an ASCII digit string in a locale's numeral system (e.g. `'ar'` → `٠-٩`).\n * Used only for display hints — falls back to ASCII if the locale is unknown.\n */\nfunction localizeDigits(digits: string, locale?: string): string {\n if (!locale) return digits;\n try {\n const fmt = new Intl.NumberFormat(locale, { useGrouping: false });\n return digits.replace(/[0-9]/g, (d) => fmt.format(Number(d)));\n } catch {\n return digits;\n }\n}\n\nfunction ensurePlusDial(dial: unknown) {\n const d = toDigits(dial);\n return d ? `+${d}` : '';\n}\n\nfunction normalizeIso2(iso2: unknown) {\n return String(iso2 ?? '')\n .trim()\n .toUpperCase();\n}\n\nfunction dropLeadingZeros(digits: string) {\n return String(digits ?? '').replace(/^0+/, '');\n}\n\nfunction buildFullE164(dial: string, digits: string) {\n const dialClean = ensurePlusDial(dial);\n const nsn = dropLeadingZeros(toDigits(digits));\n return dialClean && nsn ? `${dialClean}${nsn}` : null;\n}\n\nfunction inferLengthFromExample(national: string) {\n const d = toDigits(national);\n if (!d) return { min: null, max: null };\n const n = d.length;\n return { min: Math.max(4, n - 2), max: n + 2 };\n}\n\nfunction buildDialCode(idd?: RestCountry['idd']): string | null {\n const root = idd?.root?.trim();\n if (!root || !root.startsWith('+')) return null;\n const suffix = idd?.suffixes?.[0]?.trim() ?? '';\n const out = `${root}${suffix}`;\n return out.startsWith('+') ? out : null;\n}\n\nfunction normalizeSearchKey(input: string) {\n return (\n String(input ?? '')\n .toLowerCase()\n .replace(/\\s+/g, ' ')\n .trim()\n // Keep letters of every script (so localized names — Arabic, etc. — stay searchable),\n // digits, `+`, and spaces; drop punctuation/symbols.\n .replace(/[^\\p{L}\\p{N}+ ]/gu, '')\n );\n}\n\n/**\n * Return a copy of the country list with display names localized to `locale` via\n * `Intl.DisplayNames`. `search_key` is rebuilt (keeping the English name too) so search\n * still matches either spelling. Unknown locales / regions fall back to the English name.\n */\nexport function localizeCountries(list: CountryOption[], locale?: string): CountryOption[] {\n if (!locale) return list;\n let display: Intl.DisplayNames;\n try {\n display = new Intl.DisplayNames([locale], { type: 'region' });\n } catch {\n return list;\n }\n return list.map((c) => {\n let localized = c.raw_data.name;\n try {\n localized = display.of(c.raw_data.iso2) || c.raw_data.name;\n } catch {\n /* region not in CLDR data — keep English name */\n }\n if (localized === c.raw_data.name) return c;\n const dial = c.raw_data.dial_code;\n return {\n ...c,\n label: `${localized} (${dial})`,\n search_key: normalizeSearchKey(\n `${localized} ${c.raw_data.name} ${dial} ${c.raw_data.iso2} ${c.raw_data.dial_digits}`\n ),\n raw_data: { ...c.raw_data, name: localized },\n };\n });\n}\n\n/* -----------------------------------------------------------------------------\n * Offline fallback — used when the REST Countries fetch fails. ~20 most-populated\n * countries so the picker is still useful when offline.\n * -------------------------------------------------------------------------- */\nfunction makeFallback(iso2: string, name: string, dial: string): CountryOption {\n const dialDigits = toDigits(dial);\n return {\n label: `${name} (+${dialDigits})`,\n value: iso2,\n search_key: normalizeSearchKey(`${name} +${dialDigits} ${iso2}`),\n raw_data: {\n iso2,\n dial_code: `+${dialDigits}`,\n dial_digits: dialDigits,\n name,\n flag: `https://flagcdn.com/w40/${iso2.toLowerCase()}.png`,\n source: 'fallback',\n original: {},\n },\n };\n}\n\nconst FALLBACK_COUNTRIES: CountryOption[] = [\n makeFallback('SA', 'Saudi Arabia', '+966'),\n makeFallback('EG', 'Egypt', '+20'),\n makeFallback('AE', 'United Arab Emirates', '+971'),\n makeFallback('US', 'United States', '+1'),\n makeFallback('GB', 'United Kingdom', '+44'),\n makeFallback('DE', 'Germany', '+49'),\n makeFallback('FR', 'France', '+33'),\n makeFallback('ES', 'Spain', '+34'),\n makeFallback('IT', 'Italy', '+39'),\n makeFallback('TR', 'Turkey', '+90'),\n makeFallback('RU', 'Russia', '+7'),\n makeFallback('CN', 'China', '+86'),\n makeFallback('IN', 'India', '+91'),\n makeFallback('JP', 'Japan', '+81'),\n makeFallback('KR', 'South Korea', '+82'),\n makeFallback('BR', 'Brazil', '+55'),\n makeFallback('MX', 'Mexico', '+52'),\n makeFallback('CA', 'Canada', '+1'),\n makeFallback('AU', 'Australia', '+61'),\n makeFallback('NG', 'Nigeria', '+234'),\n makeFallback('PK', 'Pakistan', '+92'),\n makeFallback('ID', 'Indonesia', '+62'),\n];\n\n/* -----------------------------------------------------------------------------\n * Composable\n * -------------------------------------------------------------------------- */\nexport interface UsePhoneValidationReturn {\n countries: Ref<CountryOption[]>;\n isCountriesLoading: Ref<boolean>;\n getCountries(options?: { force?: boolean }): Promise<CountryOption[]>;\n searchCountries(keyword: string, limit?: number): CountryOption[];\n getCountryByValue(value: string): CountryOption | null;\n getCountriesByDial(dial: string): CountryOption[];\n getRequiredInfo(\n country: { iso2: string; dial_code?: string },\n locale?: string\n ): PhoneRequiredInfo | null;\n validate(input: ValidateArgs): PhoneValidationResult;\n}\n\nexport function usePhoneValidation(): UsePhoneValidationReturn {\n const countries = ref<CountryOption[]>([]);\n const isCountriesLoading = ref(false);\n\n const byValue = ref<Map<string, CountryOption>>(new Map());\n const byDialDigits = ref<Map<string, CountryOption[]>>(new Map());\n\n function rebuildIndexes(list: CountryOption[]) {\n const valueMap = new Map<string, CountryOption>();\n const dialMap = new Map<string, CountryOption[]>();\n for (const item of list) {\n valueMap.set(item.value, item);\n const dial = item.raw_data.dial_digits;\n if (dial) {\n const bucket = dialMap.get(dial) ?? [];\n bucket.push(item);\n dialMap.set(dial, bucket);\n }\n }\n byValue.value = valueMap;\n byDialDigits.value = dialMap;\n }\n\n function upsertCountries(list: CountryOption[]) {\n countries.value = list;\n rebuildIndexes(list);\n }\n\n function normalizeRestCountries(list: RestCountry[]): CountryOption[] {\n const out: CountryOption[] = [];\n for (const c of list) {\n const name = c?.name?.common?.trim();\n const iso2 = normalizeIso2(c?.cca2);\n const dial = buildDialCode(c?.idd);\n const flag = c?.flags?.png?.trim() || c?.flags?.svg?.trim() || null;\n if (!name || !iso2 || !dial) continue;\n const dialDigits = toDigits(dial);\n const search_key = normalizeSearchKey(`${name} ${dial} ${iso2} ${dialDigits}`);\n out.push({\n label: `${name} (${dial})`,\n value: iso2,\n search_key,\n raw_data: {\n iso2,\n dial_code: dial,\n dial_digits: dialDigits,\n name,\n flag,\n source: 'restcountries',\n original: c,\n },\n });\n }\n\n const map = new Map<string, CountryOption>();\n for (const item of out) {\n const prev = map.get(item.value);\n if (!prev) {\n map.set(item.value, item);\n continue;\n }\n const prevScore = (prev.raw_data.flag ? 1 : 0) + (prev.raw_data.dial_code ? 1 : 0);\n const nextScore = (item.raw_data.flag ? 1 : 0) + (item.raw_data.dial_code ? 1 : 0);\n if (nextScore > prevScore) map.set(item.value, item);\n }\n return Array.from(map.values()).sort((a, b) => a.raw_data.name.localeCompare(b.raw_data.name));\n }\n\n async function getCountries(options?: { force?: boolean }) {\n const force = Boolean(options?.force);\n if (!force && countries.value.length) return countries.value;\n\n if (!force && isBrowser()) {\n try {\n const cached = localStorage.getItem(STORAGE_KEY);\n if (cached) {\n const parsed = JSON.parse(cached) as CountryOption[];\n if (Array.isArray(parsed) && parsed.length) {\n upsertCountries(parsed);\n return countries.value;\n }\n }\n } catch {\n /* ignore parse errors */\n }\n }\n\n isCountriesLoading.value = true;\n try {\n const res = await fetch(REST_COUNTRIES_URL);\n if (!res.ok) throw new Error(`Failed to fetch countries: ${res.status}`);\n const data = (await res.json()) as RestCountry[];\n const normalized = normalizeRestCountries(data);\n upsertCountries(normalized.length ? normalized : FALLBACK_COUNTRIES);\n if (isBrowser()) {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(countries.value));\n } catch {\n /* storage full or disabled */\n }\n }\n return countries.value;\n } catch {\n upsertCountries(FALLBACK_COUNTRIES);\n return countries.value;\n } finally {\n isCountriesLoading.value = false;\n }\n }\n\n function searchCountries(keyword: string, limit = 50) {\n const q = normalizeSearchKey(keyword);\n if (!q) return countries.value.slice(0, limit);\n const res: CountryOption[] = [];\n for (const item of countries.value) {\n if (item.search_key.includes(q)) {\n res.push(item);\n if (res.length >= limit) break;\n }\n }\n return res;\n }\n\n function getCountryByValue(value: string) {\n return byValue.value.get(normalizeIso2(value)) ?? null;\n }\n\n function getCountriesByDial(dial: string) {\n return byDialDigits.value.get(toDigits(dial)) ?? [];\n }\n\n function getRequiredInfo(\n country: { iso2: string; dial_code?: string },\n locale?: string\n ): PhoneRequiredInfo | null {\n const iso2 = normalizeIso2(country.iso2);\n if (!iso2) return null;\n try {\n const example = getExampleNumber(iso2 as CountryCode, EX);\n const exampleNational = example?.formatNational?.() ?? '';\n const exampleE164 = example?.format?.('E.164') ?? '';\n const inferred = inferLengthFromExample(exampleNational);\n const dial_code = country.dial_code\n ? ensurePlusDial(country.dial_code)\n : exampleE164\n ? `+${example?.countryCallingCode}`\n : '';\n const digitsExample = toDigits(exampleNational);\n return {\n iso2,\n dial_code,\n placeholder: '',\n example_national: exampleNational,\n example_e164: exampleE164,\n national_number_length: inferred,\n format_hint: digitsExample ? `e.g. ${localizeDigits(digitsExample, locale)}` : '',\n };\n } catch {\n return null;\n }\n }\n\n function validate(input: ValidateArgs): PhoneValidationResult {\n const country = input.country ?? null;\n if (!country?.iso2) {\n return {\n ok: false,\n reason: 'missing_country',\n country: null,\n phone: { raw: ('phone' in input ? input.phone : null) ?? null, digits: '' },\n full_phone: null,\n required: null,\n };\n }\n\n const iso2 = normalizeIso2(country.iso2);\n const required = getRequiredInfo({ iso2, dial_code: country.dial_code }, input.locale);\n if (!required) {\n return {\n ok: false,\n reason: 'country_not_supported',\n country: { iso2, dial_code: ensurePlusDial(country.dial_code) },\n phone: { raw: ('phone' in input ? input.phone : null) ?? null, digits: '' },\n full_phone: null,\n required: null,\n };\n }\n\n if (!('phone' in input)) {\n return {\n ok: true,\n reason: null,\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw: null, digits: '' },\n full_phone: null,\n required,\n };\n }\n\n const raw = input.phone;\n const digits = toDigits(raw);\n\n if (!raw || !String(raw).trim()) {\n return {\n ok: true,\n reason: null,\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw: raw ?? null, digits: '' },\n full_phone: null,\n required,\n };\n }\n\n if (\n String(raw)\n .replace(/\\s+/g, '')\n .match(/[^\\d+]/)\n ) {\n return {\n ok: false,\n reason: 'phone_has_non_digits',\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw, digits },\n full_phone: buildFullE164(required.dial_code, digits),\n required,\n };\n }\n\n const nsn = dropLeadingZeros(digits);\n const { min, max } = required.national_number_length;\n\n if (min !== null && nsn.length < min) {\n return {\n ok: false,\n reason: 'too_short',\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw, digits },\n full_phone: buildFullE164(required.dial_code, digits),\n required,\n details: { min, actual: nsn.length },\n };\n }\n\n if (max !== null && nsn.length > max) {\n return {\n ok: false,\n reason: 'too_long',\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw, digits },\n full_phone: buildFullE164(required.dial_code, digits),\n required,\n details: { max, actual: nsn.length },\n };\n }\n\n const full = buildFullE164(required.dial_code, digits) ?? String(raw);\n\n try {\n const ok = isValidPhoneNumber(full, iso2 as CountryCode);\n if (!ok) {\n const parsed = parsePhoneNumberFromString(full, iso2 as CountryCode);\n return {\n ok: false,\n reason: 'invalid_phone',\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw, digits },\n full_phone: parsed?.number ?? null,\n required,\n details: {\n type: parsed?.getType?.() ?? null,\n possible: parsed?.isPossible?.() ?? null,\n country: parsed?.country ?? null,\n },\n };\n }\n const parsed = parsePhoneNumberFromString(full, iso2 as CountryCode);\n return {\n ok: true,\n reason: null,\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw, digits },\n full_phone: parsed?.number ?? full,\n required,\n };\n } catch (e) {\n return {\n ok: false,\n reason: 'parse_failed',\n country: { iso2: required.iso2, dial_code: required.dial_code },\n phone: { raw, digits },\n full_phone: buildFullE164(required.dial_code, digits),\n required,\n details: { error: (e as Error)?.message ?? String(e) },\n };\n }\n }\n\n return {\n countries,\n isCountriesLoading,\n getCountries,\n searchCountries,\n getCountryByValue,\n getCountriesByDial,\n getRequiredInfo,\n validate,\n };\n}\n","/**\n * Best-effort country detection chain: IP geolocation → timezone → navigator.language → fallback.\n * Every step is independent and degrades gracefully; the final fallback is always returned.\n *\n * The composable returns reactive state so consumers can swap in the detected ISO2 the moment it\n * resolves, while still rendering an input immediately on mount.\n */\n\nimport { onMounted, ref, type Ref } from 'vue';\n\nexport type DetectionStrategy = 'auto' | 'locale' | 'none';\n\nexport interface DetectCountryOptions {\n /**\n * - `'auto'` — try IP geolocation first, then timezone, then `navigator.language`, then default.\n * - `'locale'` — skip the network call, use timezone + locale only.\n * - `'none'` — return `defaultCountry` immediately.\n */\n strategy?: DetectionStrategy;\n /** Endpoint returning a JSON body with a `country_code` (or `country`) field. */\n ipEndpoint?: string;\n /** Fallback ISO2 used when every step fails. */\n defaultCountry?: string;\n /** Abort the IP request after this many ms. */\n timeoutMs?: number;\n /** Persist the resolved country in sessionStorage so re-mounts within the session skip detection. */\n cache?: boolean;\n}\n\nconst SESSION_CACHE_KEY = 'ali_ui_country_detected';\n\nconst isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/** Hand-rolled IANA timezone → ISO2 map. Covers the most-populated zones; falls through on miss. */\nconst TIMEZONE_TO_ISO2: Record<string, string> = {\n // Africa\n 'Africa/Cairo': 'EG',\n 'Africa/Johannesburg': 'ZA',\n 'Africa/Lagos': 'NG',\n 'Africa/Casablanca': 'MA',\n 'Africa/Algiers': 'DZ',\n 'Africa/Nairobi': 'KE',\n 'Africa/Accra': 'GH',\n 'Africa/Tunis': 'TN',\n // Americas\n 'America/Argentina/Buenos_Aires': 'AR',\n 'America/Bogota': 'CO',\n 'America/Caracas': 'VE',\n 'America/Chicago': 'US',\n 'America/Denver': 'US',\n 'America/Halifax': 'CA',\n 'America/Lima': 'PE',\n 'America/Los_Angeles': 'US',\n 'America/Mexico_City': 'MX',\n 'America/New_York': 'US',\n 'America/Phoenix': 'US',\n 'America/Sao_Paulo': 'BR',\n 'America/Santiago': 'CL',\n 'America/Toronto': 'CA',\n 'America/Vancouver': 'CA',\n // Asia\n 'Asia/Baghdad': 'IQ',\n 'Asia/Bahrain': 'BH',\n 'Asia/Bangkok': 'TH',\n 'Asia/Beirut': 'LB',\n 'Asia/Damascus': 'SY',\n 'Asia/Dhaka': 'BD',\n 'Asia/Dubai': 'AE',\n 'Asia/Hong_Kong': 'HK',\n 'Asia/Jakarta': 'ID',\n 'Asia/Jerusalem': 'IL',\n 'Asia/Karachi': 'PK',\n 'Asia/Kolkata': 'IN',\n 'Asia/Kuala_Lumpur': 'MY',\n 'Asia/Kuwait': 'KW',\n 'Asia/Manila': 'PH',\n 'Asia/Muscat': 'OM',\n 'Asia/Qatar': 'QA',\n 'Asia/Riyadh': 'SA',\n 'Asia/Seoul': 'KR',\n 'Asia/Shanghai': 'CN',\n 'Asia/Singapore': 'SG',\n 'Asia/Taipei': 'TW',\n 'Asia/Tehran': 'IR',\n 'Asia/Tokyo': 'JP',\n 'Asia/Yangon': 'MM',\n // Europe\n 'Europe/Amsterdam': 'NL',\n 'Europe/Athens': 'GR',\n 'Europe/Belgrade': 'RS',\n 'Europe/Berlin': 'DE',\n 'Europe/Brussels': 'BE',\n 'Europe/Bucharest': 'RO',\n 'Europe/Budapest': 'HU',\n 'Europe/Copenhagen': 'DK',\n 'Europe/Dublin': 'IE',\n 'Europe/Helsinki': 'FI',\n 'Europe/Istanbul': 'TR',\n 'Europe/Kyiv': 'UA',\n 'Europe/Lisbon': 'PT',\n 'Europe/London': 'GB',\n 'Europe/Madrid': 'ES',\n 'Europe/Moscow': 'RU',\n 'Europe/Oslo': 'NO',\n 'Europe/Paris': 'FR',\n 'Europe/Prague': 'CZ',\n 'Europe/Rome': 'IT',\n 'Europe/Sofia': 'BG',\n 'Europe/Stockholm': 'SE',\n 'Europe/Vienna': 'AT',\n 'Europe/Warsaw': 'PL',\n 'Europe/Zurich': 'CH',\n // Oceania\n 'Australia/Brisbane': 'AU',\n 'Australia/Melbourne': 'AU',\n 'Australia/Perth': 'AU',\n 'Australia/Sydney': 'AU',\n 'Pacific/Auckland': 'NZ',\n 'Pacific/Honolulu': 'US',\n};\n\nfunction tryTimezone(): string | null {\n if (!isBrowser()) return null;\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return TIMEZONE_TO_ISO2[tz] ?? null;\n } catch {\n return null;\n }\n}\n\nfunction tryLocale(): string | null {\n if (!isBrowser()) return null;\n try {\n const lang = navigator.language ?? '';\n const m = lang.match(/^[a-z]{2,3}-([A-Z]{2})/);\n return m ? m[1] : null;\n } catch {\n return null;\n }\n}\n\nasync function tryIp(endpoint: string, timeoutMs: number): Promise<string | null> {\n if (!isBrowser() || typeof fetch !== 'function') return null;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(endpoint, { signal: controller.signal, credentials: 'omit' });\n if (!res.ok) return null;\n const data = (await res.json()) as { country_code?: string; country?: string };\n const code = (data.country_code ?? data.country ?? '').toString().toUpperCase();\n return /^[A-Z]{2}$/.test(code) ? code : null;\n } catch {\n return null;\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction readCache(): string | null {\n if (!isBrowser()) return null;\n try {\n const v = sessionStorage.getItem(SESSION_CACHE_KEY);\n return v && /^[A-Z]{2}$/.test(v) ? v : null;\n } catch {\n return null;\n }\n}\n\nfunction writeCache(iso2: string) {\n if (!isBrowser()) return;\n try {\n sessionStorage.setItem(SESSION_CACHE_KEY, iso2);\n } catch {\n /* quota or storage disabled — silently ignore */\n }\n}\n\n/**\n * Imperative API. Use this when you want to call detection from outside Vue (e.g. inside a\n * non-component composable, server middleware, or unit test).\n */\nexport async function detectCountry(opts: DetectCountryOptions = {}): Promise<string> {\n const {\n strategy = 'auto',\n ipEndpoint = 'https://ipapi.co/json/',\n defaultCountry = 'US',\n timeoutMs = 2000,\n cache = true,\n } = opts;\n\n if (cache) {\n const cached = readCache();\n if (cached) return cached;\n }\n\n if (strategy === 'none') {\n return defaultCountry.toUpperCase();\n }\n\n if (strategy === 'auto') {\n const ipResult = await tryIp(ipEndpoint, timeoutMs);\n if (ipResult) {\n if (cache) writeCache(ipResult);\n return ipResult;\n }\n }\n\n const localResult = tryTimezone() ?? tryLocale();\n const final = (localResult ?? defaultCountry).toUpperCase();\n if (cache) writeCache(final);\n return final;\n}\n\nexport interface UseCountryDetectionReturn {\n /** Resolved ISO2 code. Initially `null` until detection completes. */\n country: Ref<string | null>;\n /** True while detection is in flight. */\n isLoading: Ref<boolean>;\n /** Manually re-run detection (e.g. after the user changes their VPN). */\n refresh: () => Promise<string>;\n}\n\n/**\n * Reactive wrapper. Kicks off detection in `onMounted` so SSR renders an empty value and the\n * client patches in the real country once resolved.\n */\nexport function useCountryDetection(opts: DetectCountryOptions = {}): UseCountryDetectionReturn {\n const country = ref<string | null>(null);\n const isLoading = ref(false);\n\n async function run() {\n isLoading.value = true;\n try {\n country.value = await detectCountry(opts);\n } finally {\n isLoading.value = false;\n }\n return country.value!;\n }\n\n onMounted(() => {\n void run();\n });\n\n return { country, isLoading, refresh: run };\n}\n","import { parsePhoneNumberFromString, type CountryCode } from 'libphonenumber-js';\nimport type { CountryOption } from './usePhoneValidation';\n\n/** Synchronous dial-digit → ISO2 fallback for common countries, used when the async\n * REST Countries fetch hasn't populated `getCountriesByDial`'s index yet at setup. */\nexport const DIAL_TO_ISO2_FALLBACK: Record<string, string> = {\n '1': 'US',\n '7': 'RU',\n '20': 'EG',\n '27': 'ZA',\n '30': 'GR',\n '31': 'NL',\n '32': 'BE',\n '33': 'FR',\n '34': 'ES',\n '39': 'IT',\n '44': 'GB',\n '46': 'SE',\n '47': 'NO',\n '48': 'PL',\n '49': 'DE',\n '52': 'MX',\n '54': 'AR',\n '55': 'BR',\n '60': 'MY',\n '61': 'AU',\n '62': 'ID',\n '63': 'PH',\n '64': 'NZ',\n '65': 'SG',\n '66': 'TH',\n '81': 'JP',\n '82': 'KR',\n '84': 'VN',\n '86': 'CN',\n '90': 'TR',\n '91': 'IN',\n '92': 'PK',\n '95': 'MM',\n '212': 'MA',\n '213': 'DZ',\n '216': 'TN',\n '218': 'LY',\n '234': 'NG',\n '254': 'KE',\n '352': 'LU',\n '353': 'IE',\n '358': 'FI',\n '359': 'BG',\n '380': 'UA',\n '420': 'CZ',\n '421': 'SK',\n '961': 'LB',\n '962': 'JO',\n '963': 'SY',\n '964': 'IQ',\n '965': 'KW',\n '966': 'SA',\n '967': 'YE',\n '968': 'OM',\n '970': 'PS',\n '971': 'AE',\n '972': 'IL',\n '973': 'BH',\n '974': 'QA',\n};\n\n/** localStorage key for the user's most recently picked countries. Used as a\n * tie-breaker when multiple countries share a dial code (e.g. all NANP). */\nexport const COUNTRY_RECENTS_KEY = 'ali_ui_country_recents_v1';\n\nexport interface DialMatch {\n country: CountryOption;\n /** The national significant number — what the phone input should hold, with both the\n * dial code and the national prefix (e.g. Egyptian leading `0`) stripped. */\n nationalNumber: string;\n}\n\nexport interface MatchLeadingDialCodeOptions {\n /** ISO2 hint for libphonenumber's national-format parse (tier 2). Typically the\n * IP/timezone/locale-resolved country. */\n hintCountry?: string;\n /** Currently selected ISO2 — preferred when a shared dial code yields multiple\n * countries (tier 3 tie-break). */\n currentIso2?: string;\n}\n\nfunction readRecents(): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = localStorage.getItem(COUNTRY_RECENTS_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed.filter((v): v is string => typeof v === 'string') : [];\n } catch {\n return [];\n }\n}\n\nexport interface CountryMatchingDeps {\n /** Country lookup by ISO2 code — typically `usePhoneValidation().getCountryByValue`. */\n getCountryByValue: (value: string) => CountryOption | null;\n /** Country lookup by dial digits — typically `usePhoneValidation().getCountriesByDial`. */\n getCountriesByDial: (dial: string) => CountryOption[];\n}\n\n/**\n * Country-matching helpers used by the tel input — pure functions on top of the\n * `usePhoneValidation` country index. Split out of `ATelInput.vue` so the component\n * script stays focused on UI state and the matching logic is independently testable.\n *\n * **Important**: takes the validation lookups as dependencies rather than calling\n * `usePhoneValidation()` itself. `usePhoneValidation` creates a fresh state on every\n * call, so calling it here would produce a *second* empty country index that never gets\n * populated by the caller's `getCountries()` — the matcher would see no countries and\n * all tier-3 prefix lookups would fall through to the (much smaller) fallback table.\n */\nexport function useCountryMatching(deps: CountryMatchingDeps) {\n const { getCountryByValue, getCountriesByDial } = deps;\n\n /** Accept either an ISO2 code (`'EG'`) or a dial-digit string (`'20'`, `'+20'`).\n * Returns the canonical ISO2 for downstream consumers, or `''` if it can't resolve. */\n function resolveCountryIdentifier(raw: string | undefined | null): string {\n const v = String(raw ?? '').trim();\n if (!v) return '';\n if (/^[A-Za-z]{2}$/.test(v)) return v.toUpperCase();\n const dial = v.replace(/^\\+/, '');\n if (!/^\\d+$/.test(dial)) return '';\n // Prefer the loaded country index (right answer when multiple share a dial); fall\n // back to the synchronous table when the async list hasn't arrived yet.\n const match = getCountriesByDial(dial)[0];\n if (match) return match.value;\n return DIAL_TO_ISO2_FALLBACK[dial] ?? '';\n }\n\n /** Compute the dial digits (as a number) for an ISO2 code. Falls back to the\n * synchronous dial table if the async country list hasn't populated yet. */\n function dialNumberFor(iso2: string): number | null {\n if (!iso2) return null;\n const fromIndex = getCountryByValue(iso2)?.raw_data?.dial_digits;\n const digits =\n fromIndex ?? Object.entries(DIAL_TO_ISO2_FALLBACK).find(([, v]) => v === iso2)?.[0];\n if (!digits) return null;\n const n = Number(digits);\n return Number.isFinite(n) ? n : null;\n }\n\n /** Three-tier match of the leading digits to a country:\n * 1. libphonenumber international parse (handles NANP disambiguation).\n * 2. libphonenumber national-format parse using `hintCountry` (handles local\n * formats like Egyptian `01066105963` with no dial-code prefix).\n * 3. Longest-prefix match against the dial-digits index, with the current\n * selection / recents as tie-breakers when multiple countries share a code. */\n function matchLeadingDialCode(\n digits: string,\n options: MatchLeadingDialCodeOptions = {}\n ): DialMatch | null {\n if (!digits) return null;\n const { hintCountry, currentIso2 } = options;\n\n // Tier 1: international parse with leading `+`.\n try {\n const parsed = parsePhoneNumberFromString(`+${digits}`);\n if (parsed?.country && parsed.countryCallingCode) {\n const parsedCountry = getCountryByValue(parsed.country);\n if (parsedCountry) {\n return { country: parsedCountry, nationalNumber: String(parsed.nationalNumber ?? '') };\n }\n }\n } catch {\n /* libphonenumber throws on partial input — fall through */\n }\n\n // Tier 2: national-format parse using the silently-inferred country as a hint.\n if (hintCountry && digits.length >= 4) {\n try {\n const parsed = parsePhoneNumberFromString(digits, hintCountry as CountryCode);\n if (parsed?.isValid()) {\n const matched = getCountryByValue(parsed.country || hintCountry);\n if (matched) {\n return { country: matched, nationalNumber: String(parsed.nationalNumber ?? '') };\n }\n }\n } catch {\n /* fall through */\n }\n }\n\n // Tier 3: longest-prefix match over the dial-digits index.\n for (let len = Math.min(3, digits.length); len >= 1; len--) {\n const prefix = digits.slice(0, len);\n const group = getCountriesByDial(prefix);\n if (!group.length) continue;\n const nationalNumber = digits.slice(prefix.length);\n if (group.length === 1) return { country: group[0], nationalNumber };\n const current = currentIso2 ? group.find((c) => c.value === currentIso2.toUpperCase()) : null;\n if (current) return { country: current, nationalNumber };\n const recents = readRecents();\n const recentHit = recents\n .map((iso2) => group.find((c) => c.value === iso2))\n .find((c): c is CountryOption => Boolean(c));\n if (recentHit) return { country: recentHit, nationalNumber };\n return { country: group[0], nationalNumber };\n }\n return null;\n }\n\n return {\n resolveCountryIdentifier,\n dialNumberFor,\n matchLeadingDialCode,\n };\n}\n","import { ref, readonly, type ComputedRef, type Ref } from 'vue';\nimport { useDebounceFn } from '@vueuse/core';\n\n/**\n * Typing-phase state machine for the tel input.\n *\n * Owns the three reactive flags that drive the \"is the user still typing?\" UX:\n *\n * - `isDetecting` — true while the debounce window is in flight (user is mid-burst or\n * has just paused). Drives the loading spinner in the picker slot.\n * - `hasFinishedTyping` — false from the moment a key lands until the debounce settles.\n * Gates validation visibility, so error/success states only appear once the user pauses.\n * - `detectionAttempted` — flips true the first time the debounce fires on non-empty\n * input. Used by the consumer to keep the country picker visible after a failed\n * detection (so the user can pick manually instead of being stranded).\n *\n * Design notes:\n *\n * - The composable is pure state — it does not know about country detection, phone\n * numbers, or libphonenumber. The consumer wires the `onSettle` callback to whatever\n * \"what to do when typing pauses\" logic is appropriate (typically: try to detect a\n * country from the current digits, mark a detection attempt, and apply the match).\n *\n * - `markDetectionAttempt()` is exposed separately so the caller controls *when* the\n * \"keep the picker visible\" flag flips — not every settle triggers a real attempt\n * (e.g. when input is empty or the user already picked a country manually).\n *\n * - Refs are exposed `readonly` so external code can't bypass the state machine; all\n * transitions go through the exposed actions.\n */\nexport interface UseTypingPhaseOptions {\n /** Debounce window in ms. Reactive so consumers can change `detectDebounceMs` at runtime. */\n debounceMs: ComputedRef<number>;\n /** Fired when the debounce timer settles. Runs regardless of input state — use this\n * to clear loading UI, then perform any pause-triggered work (e.g. detection). */\n onSettle?: () => void;\n}\n\nexport interface UseTypingPhaseReturn {\n isDetecting: Readonly<Ref<boolean>>;\n hasFinishedTyping: Readonly<Ref<boolean>>;\n detectionAttempted: Readonly<Ref<boolean>>;\n /** Call from the input handler on every keystroke that produces non-empty input. */\n markTyping: () => void;\n /** Flip `detectionAttempted` to true. Call from within the `onSettle` callback when\n * a real detection attempt is about to run — so the picker stays visible after even\n * a failed match. */\n markDetectionAttempt: () => void;\n /** Reset all three flags to defaults. Call when the input is cleared. */\n reset: () => void;\n}\n\nexport function useTypingPhase(opts: UseTypingPhaseOptions): UseTypingPhaseReturn {\n const isDetecting = ref(false);\n const hasFinishedTyping = ref(true);\n const detectionAttempted = ref(false);\n\n const settle = useDebounceFn(() => {\n isDetecting.value = false;\n hasFinishedTyping.value = true;\n opts.onSettle?.();\n }, opts.debounceMs);\n\n function markTyping() {\n isDetecting.value = true;\n hasFinishedTyping.value = false;\n settle();\n }\n\n function markDetectionAttempt() {\n detectionAttempted.value = true;\n }\n\n function reset() {\n isDetecting.value = false;\n hasFinishedTyping.value = true;\n detectionAttempted.value = false;\n }\n\n return {\n isDetecting: readonly(isDetecting),\n hasFinishedTyping: readonly(hasFinishedTyping),\n detectionAttempted: readonly(detectionAttempted),\n markTyping,\n markDetectionAttempt,\n reset,\n };\n}\n","import { computed, type ComputedRef, type Ref } from 'vue';\nimport type {\n CountryOption,\n PhoneValidationReason,\n PhoneValidationResult,\n PhoneRequiredInfo,\n UsePhoneValidationReturn,\n} from './usePhoneValidation';\nimport type { TelInputMessages } from '../types';\n\n/**\n * Validation surfacing facade for ATelInput.\n *\n * Wraps the raw `usePhoneValidation()` calls and produces the *view-layer* surface the\n * component needs:\n *\n * - `validation` / `validationState` — the raw + simplified state of the current input.\n * - `visibleValidationState` — `validationState` gated by the `hasFinishedTyping` flag\n * from {@link useTypingPhase}, so error tints / icons / messages only appear once the\n * user has paused. This is the value the template should bind to.\n * - `errorMessage` — localised error string for the current `validation.reason`, or\n * `null` when the input is empty or valid.\n * - `showError` / `showHint` — boolean computed properties for conditional rendering\n * in the template; both already respect `showValidation` and the typing-pause gate.\n * - `selectedDialCode` — the human-readable dial prefix (`+20`, `+1`, …) for the\n * selected country, used as an in-input prefix.\n *\n * Design notes:\n *\n * - The composable takes the `usePhoneValidation()` return value as a *dependency*\n * rather than calling `usePhoneValidation()` itself. That function creates a fresh\n * country index per invocation; calling it here would produce a second, empty index\n * that never gets populated by the caller's `getCountries()` (the same bug pattern\n * {@link useCountryMatching} avoids).\n *\n * - All inputs are `Ref` / `ComputedRef` so reactivity flows correctly. Method\n * references on the validation singleton (`validate`, `getRequiredInfo`,\n * `getCountryByValue`) are passed verbatim — their backing state is reactive.\n */\nexport interface UseTelInputValidationDeps {\n validate: UsePhoneValidationReturn['validate'];\n getRequiredInfo: UsePhoneValidationReturn['getRequiredInfo'];\n getCountryByValue: UsePhoneValidationReturn['getCountryByValue'];\n}\n\nexport interface UseTelInputValidationInputs {\n /** Digits-only national number model. */\n phone: Ref<string>;\n /** Currently selected ISO2 — empty string when no country chosen. */\n selectedIso2: Ref<string>;\n /** From {@link useTypingPhase} — gates visible state during the debounce window. */\n hasFinishedTyping: Readonly<Ref<boolean>>;\n /** Resolved i18n messages (merged defaults + consumer overrides). */\n messages: ComputedRef<TelInputMessages>;\n}\n\nexport interface UseTelInputValidationConfig {\n /** BCP-47 locale; affects `format_hint` numeral rendering. */\n locale: () => string | undefined;\n /** Light up field tinting + error message line. From props. */\n showValidation: () => boolean | undefined;\n /** Per-reason error string overrides. From props. */\n errorMessages: () => Partial<Record<PhoneValidationReason, string>> | undefined;\n}\n\nexport interface UseTelInputValidationReturn {\n validation: ComputedRef<PhoneValidationResult>;\n required: ComputedRef<PhoneRequiredInfo | null>;\n validationState: ComputedRef<'idle' | 'valid' | 'error'>;\n visibleValidationState: ComputedRef<'idle' | 'valid' | 'error'>;\n errorMessage: ComputedRef<string | null>;\n showError: ComputedRef<boolean>;\n showHint: ComputedRef<boolean>;\n selectedDialCode: ComputedRef<string | null>;\n}\n\nexport function useTelInputValidation(\n deps: UseTelInputValidationDeps,\n inputs: UseTelInputValidationInputs,\n config: UseTelInputValidationConfig\n): UseTelInputValidationReturn {\n const required = computed(() =>\n inputs.selectedIso2.value\n ? deps.getRequiredInfo({ iso2: inputs.selectedIso2.value }, config.locale())\n : null\n );\n\n const validation = computed<PhoneValidationResult>(() =>\n deps.validate({\n country: inputs.selectedIso2.value ? { iso2: inputs.selectedIso2.value } : null,\n phone: inputs.phone.value ?? '',\n locale: config.locale(),\n })\n );\n\n const validationState = computed<'idle' | 'valid' | 'error'>(() => {\n if (!inputs.phone.value) return 'idle';\n return validation.value.ok ? 'valid' : 'error';\n });\n\n const visibleValidationState = computed<'idle' | 'valid' | 'error'>(() =>\n inputs.hasFinishedTyping.value ? validationState.value : 'idle'\n );\n\n const errorMessage = computed<string | null>(() => {\n const v = validation.value;\n if (v.ok || !v.reason) return null;\n if (!inputs.phone.value) return null;\n return config.errorMessages()?.[v.reason] ?? inputs.messages.value.errorMessages[v.reason];\n });\n\n const showError = computed<boolean>(() =>\n Boolean(config.showValidation() && inputs.hasFinishedTyping.value && errorMessage.value)\n );\n\n const showHint = computed<boolean>(\n () => !showError.value && !inputs.phone.value && !!required.value?.format_hint\n );\n\n const selectedDialCode = computed<string | null>(() => {\n if (!inputs.selectedIso2.value) return null;\n const country: CountryOption | null = deps.getCountryByValue(inputs.selectedIso2.value);\n return country?.raw_data.dial_code ?? null;\n });\n\n return {\n validation,\n required,\n validationState,\n visibleValidationState,\n errorMessage,\n showError,\n showHint,\n selectedDialCode,\n };\n}\n","import type { HTMLAttributes } from 'vue';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { DetectionStrategy, DetectCountryOptions } from './composables/useCountryDetection';\nimport type {\n CountryOption,\n PhoneValidationReason,\n PhoneValidationResult,\n} from './composables/usePhoneValidation';\nimport type { FlagUrlBuilder } from './utils/flag-url';\nimport type { Size } from '@alikhalilll/a-ui-base';\n\n/** Alias for the shared `Size` scale — kept for backwards-friendly naming. */\nexport type ATelInputSize = Size;\n\n// Field styling now lives entirely in ATelInput.vue's scoped CSS — sizes/states are driven\n// by the `data-size` / `data-state` attributes set in the template. The cva wrapper survives\n// so consumers can still call `aTelInputVariants({ size: 'md' })` (returns the field class);\n// the per-size class slots are empty placeholders that exist only to preserve the type.\nexport const aTelInputVariants = cva('a-tel-input__field', {\n variants: {\n size: { xs: '', sm: '', md: '', lg: '', xl: '' },\n },\n defaultVariants: { size: 'md' },\n});\n\nexport type ATelInputVariants = VariantProps<typeof aTelInputVariants>;\n\n/** Text direction for the field. `'auto'` (or omitting the prop) inherits from the\n * nearest `[dir]` ancestor / `<html dir>`; `'ltr'` / `'rtl'` force it. */\nexport type ATelInputDir = 'ltr' | 'rtl' | 'auto';\n\n/**\n * Every user-facing string in the tel-input UI, bundled so a consumer can localize the\n * component in one prop. Each key has an English default in {@link DEFAULT_MESSAGES}.\n */\nexport interface TelInputMessages {\n /** Placeholder of the country-picker search box. */\n searchPlaceholder: string;\n /** Shown when a search yields no countries. */\n emptyText: string;\n /** Shown while the country list is loading. */\n loadingText: string;\n /** Header of the \"Suggested\" group (current + recent picks). */\n suggestedLabel: string;\n /** Header of the full country list. */\n allCountriesLabel: string;\n /** Validation error text, keyed by reason. */\n errorMessages: Record<PhoneValidationReason, string>;\n /** Prefix of the country trigger's `aria-label`, e.g. `\"Country: Egypt\"`. */\n countryLabel: string;\n /** `aria-label` of the country trigger when no country is selected. */\n selectCountryLabel: string;\n /** `aria-label` of the phone input element. */\n phoneInputLabel: string;\n}\n\n/** Partial override shape for the `messages` prop — every key (and every error reason) is optional. */\nexport type TelInputMessagesInput = Partial<Omit<TelInputMessages, 'errorMessages'>> & {\n errorMessages?: Partial<Record<PhoneValidationReason, string>>;\n};\n\nexport interface ATelInputProps {\n class?: HTMLAttributes['class'];\n placeholder?: string;\n disabled?: boolean;\n loading?: boolean;\n size?: ATelInputSize;\n /**\n * Text direction. Omit (or pass `'auto'`) to inherit from the page — RTL pages get an\n * RTL field automatically. Pass `'ltr'` / `'rtl'` to force it.\n */\n dir?: ATelInputDir;\n /**\n * BCP-47 locale (e.g. `'ar'`, `'fr'`). When set, country names render localized via\n * `Intl.DisplayNames` and the format hint uses the locale's numerals.\n */\n locale?: string;\n /**\n * Localized UI strings. A single bag covering the picker, validation errors, and a11y\n * labels. Individual props (`searchPlaceholder`, `emptyText`, `loadingText`,\n * `errorMessages`) take precedence over the matching `messages` key when both are set.\n */\n messages?: TelInputMessagesInput;\n /**\n * Whitelist of allowed dial-digit codes (no `+`), e.g. `['20', '966']`.\n * Countries outside this list are still shown in the picker but rendered as disabled.\n */\n allowedDialCodes?: string[];\n /** Light up the field's validation styling — coloured border + ring on the input and the\n * error message line below — when the number is valid / invalid. Default `false`, so the\n * field stays neutral and validation surfacing is left to the consumer (via the\n * `validation` ref exposure). */\n showValidation?: boolean;\n /** Show the green check / red alert icon at the end of the field. Default `false`; opt\n * in with `true`. Independent of `showValidation` — you can show the icon without the\n * coloured field, or vice versa. The slots `#valid-icon` / `#error-icon` still apply. */\n showValidationIcon?: boolean;\n /**\n * Country auto-detect strategy. Defaults to `'auto'` — try IP geolocation first, then\n * timezone, then `navigator.language`, finally `defaultCountry`.\n */\n detectCountry?: DetectionStrategy;\n /**\n * Initial country. Accepts either an ISO2 code (`'EG'`) or a dial-digit string\n * (`'20'`, `'+20'`). When set, the picker is visible at mount with this country\n * pre-selected — overrides the hidden-until-detected default.\n */\n defaultCountry?: string;\n /** Override the IP geolocation endpoint. Must return JSON with `country_code` or `country`. */\n ipEndpoint?: string;\n /** Localized strings for the country picker UI. */\n searchPlaceholder?: string;\n emptyText?: string;\n loadingText?: string;\n /** Error labels keyed by reason. Each gets a sensible English default. */\n errorMessages?: Partial<Record<PhoneValidationReason, string>>;\n /**\n * When true, the country picker is hidden until a leading dial code is detected in the\n * phone input. Every keystroke runs a longest-prefix match against known dial codes; on\n * first match the picker reveals with that country and the matched dial digits are\n * stripped from `phone`. Skips the onMount IP/timezone/locale detection chain.\n */\n detectFromInput?: boolean;\n /**\n * Debounce window (ms) for `detectFromInput` detection. Each keystroke schedules the\n * libphonenumber parse + lookup; bursts of typing/paste collapse into a single call.\n * Clearing the input is not debounced — the picker hides immediately. Default 150ms.\n */\n detectDebounceMs?: number;\n /** Override the flag URL builder, forwarded to ACountrySelect. */\n flagUrl?: (iso2: string, width: number) => string;\n /** Custom search predicate, forwarded to ACountrySelect. */\n searcher?: (query: string, country: CountryOption) => boolean;\n /** Provide your own country list, forwarded to ACountrySelect. */\n countries?: CountryOption[];\n /**\n * Fully custom country detection. When provided, this function runs in place of the\n * built-in chain — `detectCountry`-style options are still honored but the function\n * receives them and is free to ignore them.\n */\n detector?: (options: DetectCountryOptions) => Promise<string | null | undefined>;\n /** Forwarded to ACountrySelect: classes for the popover content surface. */\n contentClass?: string;\n /** Forwarded to ACountrySelect: classes for the desktop popover surface. */\n popoverClass?: string;\n /** Forwarded to ACountrySelect: classes for the mobile drawer surface. */\n drawerClass?: string;\n /** Classes for the inner phone field input element. */\n inputClass?: string;\n /** Classes for the outer wrapper that holds country select + input. */\n fieldClass?: string;\n /** Classes for the helper hint line. */\n hintClass?: string;\n /** Classes for the error message line. */\n errorClass?: string;\n /**\n * How page scroll is blocked while the country popover is open. Defaults to `'events'`\n * (sticky-safe document-level lock). Pass `'body'` for the legacy\n * `body { overflow: hidden }` lock, or `'none'` to leave page scrolling alone.\n */\n scrollLock?: 'events' | 'body' | 'none';\n}\n\n/**\n * Props for {@link ACountryFlag} — the standalone flag image component. Renders a\n * `flagcdn` image for an ISO2 code with an automatic text-badge fallback when the\n * image fails to load. Surface separately so it can be used outside `ATelInput`\n * (e.g., in a custom country picker).\n */\nexport interface ACountryFlagProps {\n /** ISO 3166-1 alpha-2 country code, case-insensitive. */\n iso2: string;\n /** Pixel width served by flagcdn. 40 is crisp at retina up to ~24px wide. */\n width?: number;\n /** Optional explicit URL override. When set, `iso2` / `width` / `flagUrl` are ignored. */\n src?: string | null;\n /** Function `(iso2, width) => string` — fully replace the URL builder. */\n flagUrl?: FlagUrlBuilder;\n alt?: string;\n class?: HTMLAttributes['class'];\n}\n\n/**\n * Slot prop shape for {@link ACountryFlag}. The `empty` slot is rendered when no\n * flag URL is available and no ISO2 fallback can be derived.\n */\nexport interface ACountryFlagSlots {\n /** Rendered when the flag URL is unavailable and no ISO2 text fallback can be derived. */\n empty?: () => unknown;\n}\n\nexport const DEFAULT_ERROR_MESSAGES: Record<PhoneValidationReason, string> = {\n missing_country: 'Please select a country.',\n country_not_supported: 'This country is not supported.',\n phone_has_non_digits: 'Phone number can only contain digits.',\n too_short: 'Phone number is too short.',\n too_long: 'Phone number is too long.',\n invalid_phone: 'Phone number is invalid.',\n parse_failed: 'Could not parse phone number.',\n};\n\n/** English defaults for every {@link TelInputMessages} key. */\nexport const DEFAULT_MESSAGES: TelInputMessages = {\n searchPlaceholder: 'Search country or +code…',\n emptyText: 'No countries found.',\n loadingText: 'Loading countries…',\n suggestedLabel: 'Suggested',\n allCountriesLabel: 'All countries',\n errorMessages: DEFAULT_ERROR_MESSAGES,\n countryLabel: 'Country',\n selectCountryLabel: 'Select country',\n phoneInputLabel: 'Phone number',\n};\n\n/**\n * Merge a partial `messages` override onto the English defaults. Used internally by\n * `ATelInput` to resolve a complete {@link TelInputMessages} object.\n */\nexport function resolveMessages(input?: TelInputMessagesInput): TelInputMessages {\n if (!input) return DEFAULT_MESSAGES;\n return {\n ...DEFAULT_MESSAGES,\n ...input,\n errorMessages: { ...DEFAULT_ERROR_MESSAGES, ...input.errorMessages },\n };\n}\n\n/**\n * Slot prop shape for {@link ATelInput}. Use to get full slot-prop type inference\n * when overriding slots in a consumer template:\n *\n * <ATelInput #suffix=\"{ validationState }\">…</ATelInput>\n * ↑ inferred as `'idle' | 'valid' | 'error'`\n *\n * Or in TypeScript code:\n * type SuffixProps = Parameters<NonNullable<ATelInputSlots['suffix']>>[0];\n */\nexport interface ATelInputSlots {\n /** Content before the country select trigger (e.g. an icon). */\n prefix?: () => unknown;\n /** Content between the input and the validation icons. */\n suffix?: (props: {\n validationState: 'idle' | 'valid' | 'error';\n validation: PhoneValidationResult;\n }) => unknown;\n /** Replace the green check shown when the number validates. */\n 'valid-icon'?: () => unknown;\n /** Replace the warning icon shown when the number fails validation. */\n 'error-icon'?: (props: { reason: string }) => unknown;\n /** Replace the dim helper line shown below the input when empty. */\n hint?: (props: { country: string; formatHint: string; example: string | null }) => unknown;\n /** Replace the error message rendered when invalid. */\n error?: (props: {\n message: string;\n reason: string;\n validation: PhoneValidationResult;\n }) => unknown;\n /** Forwarded to ACountrySelect — replace the trigger button. */\n trigger?: (props: {\n selectedCountry: CountryOption | null;\n open: boolean;\n sizeClasses: string;\n }) => unknown;\n /** Forwarded to ACountrySelect — replace the chevron. */\n chevron?: (props: { open: boolean }) => unknown;\n /** Forwarded — replace any flag rendering. */\n flag?: (props: { country: CountryOption; context: 'trigger' | 'item' }) => unknown;\n /** Forwarded — replace each country list row. */\n item?: (props: {\n country: CountryOption;\n selected: boolean;\n disabled: boolean;\n select: () => void;\n }) => unknown;\n /** Forwarded — section header. */\n 'group-header'?: (props: { label: string; group: 'suggested' | 'all' }) => unknown;\n /** Forwarded — search bar. */\n search?: (props: {\n value: string;\n setValue: (v: string) => void;\n isSearching: boolean;\n }) => unknown;\n loading?: () => unknown;\n empty?: (props: { query: string }) => unknown;\n /** Replace the spinner shown in the picker slot during the debounce window. */\n detecting?: () => unknown;\n}\n\n/**\n * Emit map for {@link ATelInput}. `update:phone` carries the digits-only string,\n * `update:country` carries the dial-number (not ISO2). Surface for consumers who\n * wire the events manually instead of via `v-model:phone` / `v-model:country`.\n */\nexport type ATelInputEmits = {\n 'update:phone': [value: string];\n 'update:country': [value: number | null];\n};\n\n/**\n * Props for {@link ACountrySelect} — the standalone country picker. Surface\n * separately so it can be used outside `ATelInput` with full type support.\n */\nexport interface ACountrySelectProps {\n class?: HTMLAttributes['class'];\n triggerClass?: HTMLAttributes['class'];\n contentClass?: HTMLAttributes['class'];\n popoverClass?: HTMLAttributes['class'];\n drawerClass?: HTMLAttributes['class'];\n searchPlaceholder?: string;\n emptyText?: string;\n loadingText?: string;\n suggestedLabel?: string;\n allCountriesLabel?: string;\n /** ISO2 codes that are selectable. Others are listed but disabled. */\n allowedDialCodes?: string[];\n disabled?: boolean;\n /** Drives the trigger button padding + text size. Matches ATelInput's `size`. */\n size?: ATelInputSize;\n /** Max items rendered under the \"Suggested\" header (current + recents, deduped). */\n suggestedLimit?: number;\n /** Cap the number of matching countries shown in search results. */\n maxResults?: number;\n /** Override the flag URL builder, e.g. `(iso, w) => `/flags/${iso}.svg``. */\n flagUrl?: (iso2: string, width: number) => string;\n /** Custom search predicate. Default: substring match on the precomputed `search_key`. */\n searcher?: (query: string, country: CountryOption) => boolean;\n /** Provide your own country list (bypasses the REST Countries fetch). */\n countries?: CountryOption[];\n /** Override the right-side kbd hints. Pass `null` to hide. */\n kbdOpen?: string | null;\n kbdClose?: string | null;\n /** BCP-47 locale — country names render localized via `Intl.DisplayNames`. */\n locale?: string;\n /** Prefix of the trigger's `aria-label` when a country is selected, e.g. `\"Country\"`. */\n countryLabel?: string;\n /** Trigger's `aria-label` when no country is selected. */\n selectCountryLabel?: string;\n /** How page scroll is blocked while the popover is open. Default `'events'`. */\n scrollLock?: 'events' | 'body' | 'none';\n}\n\n/**\n * Slot prop shape for {@link ACountrySelect}. Forwarded versions of these slots\n * also appear on {@link ATelInputSlots} (`trigger`, `chevron`, `flag`, `item`,\n * etc.) — keep them in sync when changing one.\n */\nexport interface ACountrySelectSlots {\n /** Replace the entire country picker trigger button. */\n trigger?: (props: {\n selectedCountry: CountryOption | null;\n open: boolean;\n sizeClasses: string;\n }) => unknown;\n /** Replace the chevron icon. */\n chevron?: (props: { open: boolean }) => unknown;\n /** Replace just the flag rendered in the trigger and items. */\n flag?: (props: { country: CountryOption; context: 'trigger' | 'item' }) => unknown;\n /** Replace the entire search bar (input + icon + kbd). */\n search?: (props: {\n value: string;\n setValue: (v: string) => void;\n isSearching: boolean;\n }) => unknown;\n /** Replace the search-bar leading icon. */\n 'search-icon'?: () => unknown;\n /** Replace the loading state. */\n loading?: () => unknown;\n /** Replace the empty/no-results state. */\n empty?: (props: { query: string }) => unknown;\n /** Replace a section header. */\n 'group-header'?: (props: { label: string; group: 'suggested' | 'all' }) => unknown;\n /** Replace each country list row. */\n item?: (props: {\n country: CountryOption;\n selected: boolean;\n disabled: boolean;\n select: () => void;\n }) => unknown;\n /** Replace just the right-side check icon for the selected row. */\n 'item-check'?: (props: { country: CountryOption }) => unknown;\n}\n\n/**\n * Emit map for {@link ACountrySelect}. The `selected` is `v-model:selected`,\n * carrying the ISO2 code of the picked country.\n */\nexport type ACountrySelectEmits = {\n 'update:selected': [value: string];\n};\n","/**\n * Default flag URL builder — flagcdn.com hosts PNG flags at multiple widths and is\n * generous with caching + no API key required. Swap via the `flagUrl` prop on\n * ATelInput / ACountrySelect / ACountryFlag to use any other source.\n */\nexport function defaultFlagUrl(iso2: string, width = 40): string {\n return `https://flagcdn.com/w${width}/${iso2.toLowerCase()}.png`;\n}\n\nexport type FlagUrlBuilder = (iso2: string, width: number) => string;\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport { cn } from '@alikhalilll/a-ui-base';\nimport { defaultFlagUrl } from '../utils/flag-url';\nimport type { ACountryFlagProps, ACountryFlagSlots } from '../types';\n\nconst props = withDefaults(defineProps<ACountryFlagProps>(), { width: 40 });\ndefineSlots<ACountryFlagSlots>();\n\nconst url = computed(() => {\n if (props.src) return props.src;\n if (!props.iso2) return null;\n return (props.flagUrl ?? defaultFlagUrl)(props.iso2, props.width);\n});\n\n// Image load failure → fall back to the ISO2 text badge. The flag URL can change as the\n// user switches country, so reset the error flag whenever the URL changes.\nconst failed = ref(false);\nwatch(url, () => {\n failed.value = false;\n});\n\nconst iso2Label = computed(() => (props.iso2 ?? '').slice(0, 2).toUpperCase());\n</script>\n\n<template>\n <img\n v-if=\"url && !failed\"\n :src=\"url\"\n :alt=\"props.alt ?? `${props.iso2} flag`\"\n loading=\"lazy\"\n data-slot=\"country-flag\"\n :class=\"cn('a-country-flag', props.class)\"\n @error=\"failed = true\"\n />\n <span\n v-else-if=\"iso2Label\"\n data-slot=\"country-flag-fallback\"\n :aria-label=\"props.alt ?? `${props.iso2} flag`\"\n :class=\"cn('a-country-flag a-country-flag--fallback', props.class)\"\n >\n {{ iso2Label }}\n </span>\n <slot v-else name=\"empty\">\n <span\n data-slot=\"country-flag-empty\"\n :class=\"cn('a-country-flag a-country-flag--empty', props.class)\"\n />\n </slot>\n</template>\n\n<style scoped>\n.a-country-flag {\n display: inline-block;\n width: 1.5rem;\n height: 1rem;\n border-radius: 0.125rem;\n object-fit: cover;\n box-shadow: 0 0 0 1px hsl(var(--ak-ui-border) / 0.4);\n}\n\n.a-country-flag--fallback {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: hsl(var(--ak-ui-muted));\n color: hsl(var(--ak-ui-muted-foreground));\n font-size: 8px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: -0.025em;\n}\n\n.a-country-flag--empty {\n background: hsl(var(--ak-ui-muted));\n box-shadow: none;\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n</template>\n","<template>\n <svg\n class=\"a-tel-input-icon-spinner\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n</template>\n\n<style>\n@keyframes a-tel-input-icon-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.a-tel-input-icon-spinner {\n animation: a-tel-input-icon-spin 1s linear infinite;\n transform-origin: center;\n}\n</style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue';\nimport { cn } from '@alikhalilll/a-ui-base';\nimport {\n AResponsivePopover,\n AResponsivePopoverContent,\n AResponsivePopoverTrigger,\n} from '@alikhalilll/a-responsive-popover';\nimport {\n usePhoneValidation,\n localizeCountries,\n type CountryOption,\n} from '../composables/usePhoneValidation';\nimport { DEFAULT_SIZE } from '@alikhalilll/a-ui-base';\nimport type { ACountrySelectProps, ACountrySelectSlots } from '../types';\nimport ACountryFlag from './ACountryFlag.vue';\nimport { ChevronDownIcon, SearchIcon, CheckIcon } from '../icons';\n\nconst props = withDefaults(defineProps<ACountrySelectProps>(), {\n searchPlaceholder: 'Search country or +code…',\n emptyText: 'No countries found.',\n loadingText: 'Loading countries…',\n suggestedLabel: 'Suggested',\n allCountriesLabel: 'All countries',\n countryLabel: 'Country',\n selectCountryLabel: 'Select country',\n size: DEFAULT_SIZE,\n suggestedLimit: 4,\n maxResults: 80,\n kbdOpen: '⌘K',\n kbdClose: 'Esc',\n});\n\ndefineSlots<ACountrySelectSlots>();\n\nconst selected = defineModel<string>('selected', { default: '' });\n\nconst {\n countries: internalCountries,\n isCountriesLoading,\n getCountries,\n searchCountries: defaultSearch,\n getCountryByValue: lookupInternal,\n} = usePhoneValidation();\n\nconst open = ref(false);\nconst search = ref('');\n\nvoid getCountries();\n\n/* ---------------------------------------------------------------\n * Country source — either the user-supplied list (props.countries)\n * or the internal REST Countries + localStorage cache. A `locale`\n * localizes the internal list's display names via `Intl.DisplayNames`;\n * a caller-supplied `countries` list is used verbatim (caller owns names).\n * ------------------------------------------------------------- */\nconst effectiveCountries = computed<CountryOption[]>(() =>\n props.countries && props.countries.length\n ? props.countries\n : localizeCountries(internalCountries.value, props.locale)\n);\n\nconst effectiveByValue = computed<Map<string, CountryOption>>(\n () => new Map(effectiveCountries.value.map((c) => [c.value, c]))\n);\n\nfunction lookup(iso2: string): CountryOption | null {\n if (!iso2) return null;\n return effectiveByValue.value.get(iso2) ?? lookupInternal(iso2);\n}\n\n/* ---------------------------------------------------------------\n * Recent picks — persisted so subsequent visits surface the user's\n * actual countries above the long alphabetical list.\n * ------------------------------------------------------------- */\nconst RECENTS_KEY = 'ali_ui_country_recents_v1';\nconst recents = ref<string[]>([]);\n\nfunction loadRecents() {\n if (typeof window === 'undefined') return;\n try {\n const raw = localStorage.getItem(RECENTS_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return;\n recents.value = parsed.filter((v): v is string => typeof v === 'string').slice(0, 8);\n } catch {\n /* ignore corrupt cache */\n }\n}\n\nfunction pushRecent(iso2: string) {\n if (typeof window === 'undefined' || !iso2) return;\n const next = [iso2, ...recents.value.filter((x) => x !== iso2)].slice(0, 8);\n recents.value = next;\n try {\n localStorage.setItem(RECENTS_KEY, JSON.stringify(next));\n } catch {\n /* quota or storage disabled */\n }\n}\n\nonMounted(loadRecents);\n\n/* ---------------------------------------------------------------\n * Section state\n * ------------------------------------------------------------- */\nconst isSearching = computed(() => search.value.trim().length > 0);\n\nfunction defaultSearcher(q: string, c: CountryOption): boolean {\n return c.search_key.includes(q.toLowerCase());\n}\n\nconst filtered = computed<CountryOption[]>(() => {\n if (!isSearching.value) return [];\n // When the caller didn't override the country source, the internal `searchCountries`\n // is already optimal (uses the precomputed search_key + early break). Fall back to a\n // manual filter when we need to honor a custom `searcher`/`countries` source, or a\n // `locale` (whose localized `search_key` lives only on `effectiveCountries`).\n if (!props.countries && !props.searcher && !props.locale) {\n return defaultSearch(search.value, props.maxResults);\n }\n const q = search.value.trim();\n const matcher = props.searcher ?? defaultSearcher;\n const out: CountryOption[] = [];\n for (const c of effectiveCountries.value) {\n if (matcher(q, c)) {\n out.push(c);\n if (out.length >= props.maxResults) break;\n }\n }\n return out;\n});\n\nconst suggested = computed<CountryOption[]>(() => {\n if (isSearching.value) return [];\n const seen = new Set<string>();\n const out: CountryOption[] = [];\n const candidate = (iso: string) => {\n if (!iso || seen.has(iso)) return;\n const c = lookup(iso);\n if (!c) return;\n seen.add(iso);\n out.push(c);\n };\n candidate(selected.value);\n\n const allowed = props.allowedDialCodes;\n const hasAllowed = Array.isArray(allowed) && allowed.length > 0;\n if (hasAllowed) {\n // Surface every whitelisted country in the Suggested group — they're the only\n // selectable options, so they belong at the top and the recents/limit logic is\n // irrelevant here.\n for (const c of effectiveCountries.value) {\n if (allowed.includes(c.raw_data.dial_digits)) candidate(c.value);\n }\n return out;\n }\n\n for (const r of recents.value) {\n candidate(r);\n if (out.length >= props.suggestedLimit) break;\n }\n return out.slice(0, props.suggestedLimit);\n});\n\nconst allCountries = computed<CountryOption[]>(() => {\n if (isSearching.value) return [];\n return effectiveCountries.value;\n});\n\nconst selectedCountry = computed<CountryOption | null>(() => lookup(selected.value));\n\nfunction isAllowed(option: CountryOption) {\n const allowed = props.allowedDialCodes;\n if (!allowed || allowed.length === 0) return true;\n return allowed.includes(option.raw_data.dial_digits);\n}\n\nfunction selectCountry(option: CountryOption) {\n if (!isAllowed(option)) return;\n selected.value = option.value;\n pushRecent(option.value);\n open.value = false;\n}\n\nwatch(open, (isOpen) => {\n if (!isOpen) search.value = '';\n});\n\n/** Trigger size — class is consumed by the scoped `<style>` block via `data-size`. The\n * legacy `sizeClasses` slot prop is preserved for backwards compat but it's now an empty\n * string (consumers should rely on `size` directly when overriding the trigger). */\nconst triggerSizeClasses = computed(() => '');\n\ndefineExpose({\n open,\n setOpen: (v: boolean) => (open.value = v),\n search,\n setSearch: (v: string) => (search.value = v),\n selectedCountry,\n selectCountry,\n countries: effectiveCountries,\n recents,\n});\n</script>\n\n<template>\n <AResponsivePopover v-model:open=\"open\" :scroll-lock=\"props.scrollLock\">\n <AResponsivePopoverTrigger as-child>\n <slot\n name=\"trigger\"\n :selected-country=\"selectedCountry\"\n :open=\"open\"\n :size-classes=\"triggerSizeClasses\"\n >\n <button\n type=\"button\"\n :disabled=\"props.disabled\"\n data-slot=\"country-select-trigger\"\n :data-state=\"open ? 'open' : 'closed'\"\n :data-size=\"props.size\"\n :class=\"cn('a-country-select__trigger', props.triggerClass)\"\n :aria-label=\"\n selectedCountry\n ? `${props.countryLabel}: ${selectedCountry.raw_data.name}`\n : props.selectCountryLabel\n \"\n >\n <slot v-if=\"selectedCountry\" name=\"flag\" :country=\"selectedCountry\" context=\"trigger\">\n <ACountryFlag\n :iso2=\"selectedCountry.raw_data.iso2\"\n :src=\"selectedCountry.raw_data.flag\"\n :flag-url=\"props.flagUrl\"\n />\n </slot>\n <slot name=\"chevron\" :open=\"open\">\n <ChevronDownIcon class=\"a-country-select__chevron\" :data-open=\"open ? '' : undefined\" />\n </slot>\n </button>\n </slot>\n </AResponsivePopoverTrigger>\n\n <AResponsivePopoverContent\n align=\"end\"\n :side-offset=\"6\"\n :class=\"cn('a-country-select__content', props.contentClass)\"\n :popover-class=\"cn('a-country-select__popover', props.popoverClass)\"\n :drawer-class=\"cn('a-country-select__drawer', props.drawerClass)\"\n >\n <!-- Search header -->\n <slot\n name=\"search\"\n :value=\"search\"\n :set-value=\"(v: string) => (search = v)\"\n :is-searching=\"isSearching\"\n >\n <div class=\"a-country-select__search\">\n <div class=\"a-country-select__search-box\">\n <slot name=\"search-icon\">\n <SearchIcon class=\"a-country-select__search-icon\" />\n </slot>\n <input\n v-model=\"search\"\n type=\"text\"\n data-slot=\"country-select-search\"\n :placeholder=\"props.searchPlaceholder\"\n class=\"a-country-select__search-input\"\n />\n <kbd\n v-if=\"!isSearching && props.kbdOpen\"\n class=\"a-country-select__kbd a-country-select__kbd--open\"\n >\n {{ props.kbdOpen }}\n </kbd>\n <kbd\n v-else-if=\"isSearching && props.kbdClose\"\n class=\"a-country-select__kbd a-country-select__kbd--close\"\n >\n {{ props.kbdClose }}\n </kbd>\n </div>\n </div>\n </slot>\n\n <!-- List -->\n <div class=\"a-country-select__list\">\n <slot v-if=\"isCountriesLoading && effectiveCountries.length === 0\" name=\"loading\">\n <div class=\"a-country-select__loading\">\n {{ props.loadingText }}\n </div>\n </slot>\n\n <slot v-else-if=\"isSearching && filtered.length === 0\" name=\"empty\" :query=\"search\">\n <div class=\"a-country-select__empty\">\n {{ props.emptyText }}\n </div>\n </slot>\n\n <template v-else>\n <!-- Suggested group -->\n <section\n v-if=\"suggested.length > 0\"\n data-slot=\"country-select-group\"\n data-group=\"suggested\"\n class=\"a-country-select__section\"\n >\n <slot name=\"group-header\" :label=\"props.suggestedLabel\" group=\"suggested\">\n <header class=\"a-country-select__group-header\">\n {{ props.suggestedLabel }}\n </header>\n </slot>\n <ul\n role=\"listbox\"\n :aria-label=\"props.suggestedLabel\"\n class=\"a-country-select__group-list\"\n >\n <li\n v-for=\"option in suggested\"\n :key=\"`s-${option.value}`\"\n role=\"option\"\n :aria-selected=\"option.value === selected\"\n :aria-disabled=\"!isAllowed(option)\"\n >\n <slot\n name=\"item\"\n :country=\"option\"\n :selected=\"option.value === selected\"\n :disabled=\"!isAllowed(option)\"\n :select=\"() => selectCountry(option)\"\n >\n <button\n type=\"button\"\n :disabled=\"!isAllowed(option)\"\n data-slot=\"country-select-item\"\n :data-selected=\"option.value === selected ? '' : undefined\"\n class=\"a-country-select__item\"\n @click=\"selectCountry(option)\"\n >\n <slot name=\"flag\" :country=\"option\" context=\"item\">\n <ACountryFlag\n :iso2=\"option.raw_data.iso2\"\n :src=\"option.raw_data.flag\"\n :flag-url=\"props.flagUrl\"\n />\n </slot>\n <span class=\"a-country-select__item-name\">{{ option.raw_data.name }}</span>\n <span class=\"a-country-select__item-dial\">{{ option.raw_data.dial_code }}</span>\n <slot v-if=\"option.value === selected\" name=\"item-check\" :country=\"option\">\n <CheckIcon class=\"a-country-select__item-check\" />\n </slot>\n </button>\n </slot>\n </li>\n </ul>\n </section>\n\n <!-- All countries / search results -->\n <section\n data-slot=\"country-select-group\"\n data-group=\"all\"\n class=\"a-country-select__section\"\n >\n <slot\n v-if=\"!isSearching && allCountries.length > 0\"\n name=\"group-header\"\n :label=\"props.allCountriesLabel\"\n group=\"all\"\n >\n <header class=\"a-country-select__group-header\">\n {{ props.allCountriesLabel }}\n </header>\n </slot>\n <ul\n role=\"listbox\"\n :aria-label=\"isSearching ? props.searchPlaceholder : props.allCountriesLabel\"\n class=\"a-country-select__group-list\"\n >\n <li\n v-for=\"option in isSearching ? filtered : allCountries\"\n :key=\"option.value\"\n role=\"option\"\n :aria-selected=\"option.value === selected\"\n :aria-disabled=\"!isAllowed(option)\"\n >\n <slot\n name=\"item\"\n :country=\"option\"\n :selected=\"option.value === selected\"\n :disabled=\"!isAllowed(option)\"\n :select=\"() => selectCountry(option)\"\n >\n <button\n type=\"button\"\n :disabled=\"!isAllowed(option)\"\n data-slot=\"country-select-item\"\n :data-selected=\"option.value === selected ? '' : undefined\"\n class=\"a-country-select__item\"\n @click=\"selectCountry(option)\"\n >\n <slot name=\"flag\" :country=\"option\" context=\"item\">\n <ACountryFlag\n :iso2=\"option.raw_data.iso2\"\n :src=\"option.raw_data.flag\"\n :flag-url=\"props.flagUrl\"\n />\n </slot>\n <span class=\"a-country-select__item-name\">{{ option.raw_data.name }}</span>\n <span class=\"a-country-select__item-dial\">{{ option.raw_data.dial_code }}</span>\n <slot v-if=\"option.value === selected\" name=\"item-check\" :country=\"option\">\n <CheckIcon class=\"a-country-select__item-check\" />\n </slot>\n </button>\n </slot>\n </li>\n </ul>\n </section>\n </template>\n </div>\n </AResponsivePopoverContent>\n </AResponsivePopover>\n</template>\n\n<style scoped>\n/* ------------------------------------------------------------\n * In-tree (non-teleported) styles — only the trigger button.\n * ---------------------------------------------------------- */\n.a-country-select__trigger {\n display: inline-flex;\n height: 100%;\n flex-shrink: 0;\n align-items: center;\n gap: 0.375rem;\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: background-color 150ms;\n outline: none;\n color: inherit;\n font: inherit;\n}\n.a-country-select__trigger:hover,\n.a-country-select__trigger:focus-visible,\n.a-country-select__trigger[data-state='open'] {\n background: hsl(var(--ak-ui-muted));\n}\n.a-country-select__trigger:focus-visible {\n box-shadow: inset 0 0 0 1px hsl(var(--ak-ui-ring));\n}\n.a-country-select__trigger:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.a-country-select__trigger[data-size='xs'] {\n padding: 0 0.5rem;\n font-size: 0.75rem;\n}\n.a-country-select__trigger[data-size='sm'] {\n padding: 0 0.625rem;\n font-size: 0.875rem;\n}\n.a-country-select__trigger[data-size='md'] {\n padding: 0 0.75rem;\n font-size: 0.875rem;\n}\n.a-country-select__trigger[data-size='lg'] {\n padding: 0 0.875rem;\n font-size: 1rem;\n}\n.a-country-select__trigger[data-size='xl'] {\n padding: 0 1rem;\n font-size: 1rem;\n}\n\n.a-country-select__chevron {\n width: 0.875rem;\n height: 0.875rem;\n flex-shrink: 0;\n color: hsl(var(--ak-ui-muted-foreground));\n transition: transform 200ms;\n}\n.a-country-select__chevron[data-open] {\n transform: rotate(180deg);\n}\n</style>\n\n<!--\n The popover content is teleported to <body> by AResponsivePopoverContent (reka-ui Popover\n or vaul-vue Drawer). Vue's `<style scoped>` data-attribute does NOT propagate to teleported\n nodes, so the dropdown UI is styled in this unscoped block. Class names are uniquely\n prefixed `a-country-select__*` to avoid collisions.\n-->\n<style>\n.a-country-select__content {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n}\n.a-country-select__popover {\n width: min(20rem, calc(100vw - 2rem));\n max-height: min(22rem, var(--reka-popover-content-available-height));\n}\n.a-country-select__drawer {\n max-height: 80vh;\n padding-bottom: 1rem;\n}\n\n.a-country-select__search {\n border-bottom: 1px solid hsl(var(--ak-ui-border) / 0.7);\n padding: 0.375rem;\n}\n.a-country-select__search-box {\n position: relative;\n display: flex;\n align-items: center;\n background: hsl(var(--ak-ui-muted) / 0.4);\n border-radius: calc(var(--ak-ui-radius) - 2px);\n box-shadow: 0 0 0 1px hsl(var(--ak-ui-border) / 0.7);\n transition: box-shadow 150ms;\n}\n.a-country-select__search-box:focus-within {\n box-shadow: 0 0 0 1px hsl(var(--ak-ui-ring) / 0.5);\n}\n.a-country-select__search-icon {\n position: absolute;\n top: 50%;\n inset-inline-start: 0.625rem;\n width: 0.875rem;\n height: 0.875rem;\n transform: translateY(-50%);\n color: hsl(var(--ak-ui-muted-foreground));\n pointer-events: none;\n}\n.a-country-select__search-input {\n height: 2.5rem;\n width: 100%;\n background: transparent;\n border: 0;\n padding-inline-start: 2rem;\n padding-inline-end: 3.5rem;\n font-size: 0.875rem;\n outline: none;\n color: inherit;\n font-family: inherit;\n}\n.a-country-select__search-input::placeholder {\n color: hsl(var(--ak-ui-muted-foreground));\n}\n.a-country-select__kbd {\n position: absolute;\n top: 50%;\n inset-inline-end: 0.5rem;\n display: none;\n align-items: center;\n gap: 0.125rem;\n background: hsl(var(--ak-ui-background));\n color: hsl(var(--ak-ui-muted-foreground));\n border: 1px solid hsl(var(--ak-ui-border));\n border-radius: 0.25rem;\n padding: 0.125rem 0.375rem;\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n font-size: 10px;\n letter-spacing: -0.025em;\n transform: translateY(-50%);\n}\n@media (min-width: 768px) {\n .a-country-select__kbd--open {\n display: inline-flex;\n }\n .a-country-select__kbd--close {\n display: inline-block;\n }\n}\n\n.a-country-select__list {\n flex: 1;\n overflow-y: auto;\n /* Themed scrollbar — Firefox + WebKit/Blink. Resolves the browser-default\n light-grey scrollbar that didn't match the popover surface in dark mode. */\n scrollbar-width: thin;\n scrollbar-color: hsl(var(--ak-ui-muted-foreground) / 0.4) transparent;\n}\n.a-country-select__list::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n.a-country-select__list::-webkit-scrollbar-track {\n background: transparent;\n}\n.a-country-select__list::-webkit-scrollbar-thumb {\n background-color: hsl(var(--ak-ui-muted-foreground) / 0.4);\n border-radius: 4px;\n}\n.a-country-select__list::-webkit-scrollbar-thumb:hover {\n background-color: hsl(var(--ak-ui-muted-foreground) / 0.6);\n}\n.a-country-select__loading,\n.a-country-select__empty {\n color: hsl(var(--ak-ui-muted-foreground));\n padding: 1rem;\n text-align: center;\n font-size: 0.875rem;\n}\n\n.a-country-select__group-header {\n position: sticky;\n top: 0;\n z-index: 10;\n background: hsl(var(--ak-ui-popover));\n color: hsl(var(--ak-ui-muted-foreground));\n padding: 0.375rem 0.75rem;\n font-size: 10px;\n font-weight: 500;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n margin: 0;\n}\n\n.a-country-select__group-list {\n list-style: none;\n margin: 0;\n padding: 0 0 0.25rem;\n}\n\n.a-country-select__item {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 0.75rem;\n text-align: start;\n font-size: 0.875rem;\n background: transparent;\n border: 0;\n cursor: pointer;\n color: inherit;\n transition: background-color 150ms;\n outline: none;\n font-family: inherit;\n}\n.a-country-select__item:hover,\n.a-country-select__item:focus-visible {\n background: hsl(var(--ak-ui-muted) / 0.6);\n}\n.a-country-select__item[data-selected] {\n background: hsl(var(--ak-ui-muted));\n}\n.a-country-select__item:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n.a-country-select__item:disabled:hover {\n background: transparent;\n}\n\n.a-country-select__item-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.a-country-select__item-dial {\n color: hsl(var(--ak-ui-muted-foreground));\n font-variant-numeric: tabular-nums;\n}\n.a-country-select__item-check {\n width: 0.875rem;\n height: 0.875rem;\n flex-shrink: 0;\n color: hsl(var(--ak-ui-foreground));\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, useId, watch } from 'vue';\nimport { cn } from '@alikhalilll/a-ui-base';\nimport { usePhoneValidation } from '../composables/usePhoneValidation';\nimport { detectCountry, type DetectCountryOptions } from '../composables/useCountryDetection';\nimport { useCountryMatching } from '../composables/useCountryMatching';\nimport { useTypingPhase } from '../composables/useTypingPhase';\nimport { useTelInputValidation } from '../composables/useTelInputValidation';\nimport { DEFAULT_SIZE } from '@alikhalilll/a-ui-base';\nimport { resolveMessages, type ATelInputProps, type ATelInputSlots } from '../types';\nimport { normalizeDigits } from '../utils/digits';\nimport ACountrySelect from './ACountrySelect.vue';\nimport { CheckCircleIcon, AlertCircleIcon, SpinnerIcon } from '../icons';\n\nconst props = withDefaults(defineProps<ATelInputProps>(), {\n placeholder: 'Phone number',\n size: DEFAULT_SIZE,\n detectCountry: 'auto',\n defaultCountry: '',\n ipEndpoint: 'https://ipapi.co/json/',\n detectFromInput: true,\n detectDebounceMs: 800,\n showValidationIcon: false,\n});\n\ndefineSlots<ATelInputSlots>();\n\nconst phone = defineModel<string>('phone', { default: '' });\n/** Public `v-model:country` — the **dial number** (e.g. `20` for Egypt, `44` for the UK,\n * `1` for the NANP block). `null` means no country selected. Internally the component\n * tracks a richer ISO2 code (`selectedIso2`) because dial codes alone can't disambiguate\n * NANP (`+1` covers 25+ countries) — the picker still needs an exact country. */\nconst country = defineModel<number | null>('country', { default: null });\n\n/** Internal source of truth — the ISO2 alpha-2 code of the picker selection. Synced with\n * `country` (dial number) via watchers below. */\nconst selectedIso2 = ref<string>('');\n\nconst { getCountries, validate, getRequiredInfo, getCountryByValue, getCountriesByDial } =\n usePhoneValidation();\n// Pass the loaded lookups in — useCountryMatching can't call usePhoneValidation() itself\n// because each invocation creates a fresh, empty country index.\nconst { resolveCountryIdentifier, dialNumberFor, matchLeadingDialCode } = useCountryMatching({\n getCountryByValue,\n getCountriesByDial,\n});\n\nvoid getCountries();\n\nconst userPickedCountry = ref(false);\nconst autoSettingCountry = ref(false);\n\n/** Silently resolved via IP/timezone/locale when `detectFromInput` is on — used as a hint\n * so local-format numbers (e.g. Egyptian `01066105963`) can be parsed without a `+` prefix.\n * Seeded from `defaultCountry` so it has a usable value before async detection resolves. */\nconst inferredCountry = ref<string>(resolveCountryIdentifier(props.defaultCountry));\n\n/** Closure passed everywhere the matcher needs typing context (hint country + current\n * selection for tier-3 tie-breaks). Avoids re-reading `selectedIso2`/`inferredCountry`\n * at every call site. */\nfunction tryMatchPhone(digits: string) {\n return matchLeadingDialCode(digits, {\n hintCountry: inferredCountry.value,\n currentIso2: selectedIso2.value,\n });\n}\n\n/* ---------------------------------------------------------------\n * Typing-phase state machine — owns `isDetecting`, `hasFinishedTyping`,\n * `detectionAttempted` and the debounce timer. The `onSettle` callback\n * runs at the end of every debounce window: it short-circuits when\n * detection is disabled / the user already picked / input is empty,\n * otherwise marks a detection attempt and applies any match.\n * ------------------------------------------------------------- */\nconst typing = useTypingPhase({\n debounceMs: computed(() => Math.max(0, props.detectDebounceMs)),\n onSettle: () => {\n if (!props.detectFromInput) return;\n if (userPickedCountry.value || selectedIso2.value) return;\n const current = phone.value;\n if (!current) return;\n\n typing.markDetectionAttempt();\n\n const match = tryMatchPhone(current);\n if (!match) return;\n autoSettingCountry.value = true;\n selectedIso2.value = match.country.value;\n phone.value = match.nationalNumber;\n },\n});\nconst { isDetecting, hasFinishedTyping, detectionAttempted } = typing;\n\nonMounted(async () => {\n if (selectedIso2.value) return; // v-model has an initial value — respect it.\n\n // Explicit `defaultCountry` is treated as the initial picker value (the picker shows\n // immediately) — this is how callers opt out of the hidden-until-detected default. Accepts\n // either an ISO2 code (`'EG'`) or a dial-digit string (`'20'`, `'+20'`).\n if (props.defaultCountry) {\n const seed = resolveCountryIdentifier(props.defaultCountry);\n if (seed) {\n inferredCountry.value = seed;\n autoSettingCountry.value = true;\n selectedIso2.value = seed;\n return;\n }\n }\n\n // No defaultCountry → run the environment chain. Used as a parsing hint in detect mode,\n // or as the auto-fill source in legacy (`detectFromInput=false`) mode.\n const detectOpts: DetectCountryOptions = {\n strategy: props.detectCountry,\n ipEndpoint: props.ipEndpoint,\n defaultCountry: '',\n };\n let detected: string | null | undefined;\n if (props.detector) {\n try {\n detected = await props.detector(detectOpts);\n } catch {\n detected = null;\n }\n }\n if (!detected) {\n detected = await detectCountry(detectOpts);\n }\n const iso2 = detected ? detected.toUpperCase() : '';\n\n if (props.detectFromInput) {\n inferredCountry.value = iso2;\n // If the user has already typed something while detection was resolving, re-attempt\n // matching now that we have a hint country for the libphonenumber national-format pass.\n if (phone.value && !userPickedCountry.value && !selectedIso2.value) {\n const match = tryMatchPhone(phone.value);\n if (match) {\n autoSettingCountry.value = true;\n selectedIso2.value = match.country.value;\n phone.value = match.nationalNumber;\n }\n }\n return;\n }\n if (!selectedIso2.value && iso2) {\n autoSettingCountry.value = true;\n selectedIso2.value = iso2;\n }\n});\n\n/** External → internal: when the caller mutates `v-model:country` (dial number), resolve\n * it to an ISO2. If the current ISO2 already maps to this dial (e.g. user has Canada\n * selected and the caller writes back `1`), keep the existing selection — don't churn it. */\nwatch(\n country,\n (next) => {\n if (next == null) {\n if (selectedIso2.value) selectedIso2.value = '';\n return;\n }\n if (dialNumberFor(selectedIso2.value) === next) return; // already in sync\n const iso2 = resolveCountryIdentifier(String(next));\n if (iso2) selectedIso2.value = iso2;\n },\n { immediate: true }\n);\n\n/** Internal → external: keep `country` (dial number) in lockstep with `selectedIso2`, and\n * flag \"user manually picked from picker\" when the change isn't one we initiated.\n * `flush: 'sync'` so the `autoSettingCountry` guard is reliable. */\nwatch(\n selectedIso2,\n (iso2, prev) => {\n const wasAutoSet = autoSettingCountry.value;\n autoSettingCountry.value = false;\n\n const nextDial = dialNumberFor(iso2);\n if (country.value !== nextDial) country.value = nextDial;\n\n if (!wasAutoSet && props.detectFromInput && iso2 && prev !== iso2) {\n userPickedCountry.value = true;\n }\n },\n { flush: 'sync' }\n);\n\n/** The string shown in the `<input>`. Deliberately decoupled from `phone` (the digits-only\n * model) so the visible field is NOT rewritten mid-edit — non-digits / alternative numerals\n * are normalized into `phone` immediately, but the displayed value is only cleaned up once\n * the user finishes typing (on blur / change). */\nconst displayValue = ref<string>(String(phone.value ?? ''));\n\n/** Set when the in-flight `phone` change came from the user typing — tells the `phone`\n * watcher to leave `displayValue` alone (the user is still editing it). */\nlet phoneEditedByInput = false;\n\nfunction commitPhone(value: string) {\n phoneEditedByInput = true;\n phone.value = value;\n}\n\nfunction handlePhoneInput(e: Event) {\n const target = e.target as HTMLInputElement;\n // Keep the visible value exactly as typed — don't rewrite it mid-edit. The model still\n // receives a normalized, digits-only value so validation + detection stay correct.\n displayValue.value = target.value;\n // Fold alternative numerals (Arabic-Indic, Persian, …) to ASCII, then strip non-digits.\n const cleaned = normalizeDigits(target.value).replace(/\\D/g, '');\n\n if (!cleaned) {\n // Always reset on clear — even after a manual pick. Instant (not debounced) so the\n // picker + spinner hide the moment the input goes empty.\n typing.reset();\n if (props.detectFromInput) {\n autoSettingCountry.value = true;\n selectedIso2.value = '';\n userPickedCountry.value = false;\n }\n commitPhone('');\n return;\n }\n\n typing.markTyping();\n commitPhone(cleaned);\n}\n\n/** Fires when the user finishes editing (blur). Now it's safe to normalize the visible\n * value — fold alternative numerals to ASCII and drop any stray non-digits. */\nfunction handlePhoneChange(e: Event) {\n const target = e.target as HTMLInputElement;\n displayValue.value = normalizeDigits(target.value).replace(/\\D/g, '');\n}\n\nwatch(\n () => phone.value,\n (next) => {\n const cleaned = normalizeDigits(String(next ?? '')).replace(/\\D/g, '');\n // Normalize a programmatic value that arrived non-clean.\n if (cleaned !== next) {\n phone.value = cleaned;\n return;\n }\n // The user typing manages `displayValue` itself — don't fight their edit.\n if (phoneEditedByInput) {\n phoneEditedByInput = false;\n return;\n }\n // External or detection-driven change → reflect it in the visible input.\n displayValue.value = cleaned;\n },\n { flush: 'post' }\n);\n\n/** Resolved UI strings — `messages` prop merged onto English defaults. The individual\n * string props still win when both are set (see `errorMessage` / template bindings). */\nconst messages = computed(() => resolveMessages(props.messages));\n\n/** `dir` of the outer wrapper — drives the hint/error text alignment and the country\n * picker popover. Explicit `'ltr'`/`'rtl'` is applied; `'auto'` or an omitted prop yields\n * `undefined` so it inherits from the page. The field row itself is always LTR so the\n * dial prefix / digits / flag trigger keep a consistent order. */\nconst dirAttr = computed<'ltr' | 'rtl' | undefined>(() =>\n props.dir === 'ltr' || props.dir === 'rtl' ? props.dir : undefined\n);\n\n/* ---------------------------------------------------------------\n * Validation facade — wraps the raw `usePhoneValidation` calls and\n * produces the view-layer surface (visible state gated by the typing\n * pause, localised error message, conditional show flags, etc.).\n * ------------------------------------------------------------- */\nconst {\n validation,\n required,\n validationState,\n visibleValidationState,\n errorMessage,\n showError,\n showHint,\n selectedDialCode,\n} = useTelInputValidation(\n { validate, getRequiredInfo, getCountryByValue },\n { phone, selectedIso2, hasFinishedTyping, messages },\n {\n locale: () => props.locale,\n showValidation: () => props.showValidation,\n errorMessages: () => props.errorMessages,\n }\n);\n\nconst effectivePlaceholder = computed(\n () => props.placeholder || required.value?.format_hint || messages.value.phoneInputLabel\n);\n\n/* ---------------------------------------------------------------\n * Accessibility — the helper line (hint or error) lives in a single\n * `aria-live` region; the input's `aria-describedby` points at it\n * whenever it has content.\n * ------------------------------------------------------------- */\nconst helperId = useId();\nconst describedBy = computed(() => (showError.value || showHint.value ? helperId : undefined));\n\ndefineExpose({\n validation,\n required,\n selectedDialCode,\n validationState,\n visibleValidationState,\n isDetecting,\n hasFinishedTyping,\n detectionAttempted,\n});\n</script>\n\n<template>\n <div\n :class=\"cn('a-tel-input', $attrs.class as string)\"\n :data-size=\"props.size\"\n :data-state=\"visibleValidationState\"\n :data-show-validation=\"props.showValidation ? '' : undefined\"\n data-slot=\"tel-input\"\n :dir=\"dirAttr\"\n >\n <!-- The field row is forced LTR so its pieces (dial prefix, digits, flag trigger) keep\n the same order regardless of page direction — phone numbers read left-to-right. -->\n <div class=\"a-tel-input__row\" dir=\"ltr\">\n <div\n :class=\"cn('a-tel-input__field', props.class, props.fieldClass)\"\n :data-state=\"visibleValidationState\"\n >\n <slot name=\"prefix\" />\n\n <span\n v-if=\"selectedDialCode\"\n data-slot=\"tel-input-dial\"\n dir=\"ltr\"\n aria-hidden=\"true\"\n class=\"a-tel-input__dial\"\n >\n {{ selectedDialCode }}\n </span>\n\n <input\n :value=\"displayValue\"\n type=\"tel\"\n inputmode=\"numeric\"\n autocomplete=\"tel\"\n dir=\"ltr\"\n data-slot=\"tel-input-field\"\n :disabled=\"props.disabled || props.loading\"\n :placeholder=\"effectivePlaceholder\"\n :aria-label=\"messages.phoneInputLabel\"\n :aria-invalid=\"visibleValidationState === 'error' || undefined\"\n :aria-describedby=\"describedBy\"\n :class=\"cn('a-tel-input__input', props.inputClass)\"\n :data-has-dial=\"selectedDialCode ? '' : undefined\"\n @input=\"handlePhoneInput\"\n @change=\"handlePhoneChange\"\n />\n\n <!-- Detection-in-flight spinner — shown only during the first debounce window,\n before the picker has appeared. Once the picker is visible (success OR a failed\n attempt that revealed the empty picker) we stop re-flashing on every keystroke. -->\n <Transition name=\"a-tell-detect\">\n <div\n v-if=\"isDetecting && !selectedIso2 && !detectionAttempted\"\n class=\"a-tel-input__detecting\"\n aria-hidden=\"true\"\n data-slot=\"tel-input-detecting\"\n >\n <slot name=\"detecting\">\n <SpinnerIcon class=\"a-tel-input__detecting-icon\" />\n </slot>\n </div>\n </Transition>\n\n <Transition name=\"a-tell-country\">\n <!-- Wrapper div gives the <Transition> a single element root to animate.\n ACountrySelect's root is the AResponsivePopover fragment (Popover/Drawer\n swap), which a Transition can't animate directly — without this wrapper\n Vue logs \"Component inside <Transition> renders non-element root node\". -->\n <div\n v-if=\"!props.detectFromInput || selectedIso2 || detectionAttempted\"\n class=\"a-tel-input__country-wrapper\"\n data-slot=\"tel-input-country-wrapper\"\n >\n <ACountrySelect\n v-model:selected=\"selectedIso2\"\n :allowed-dial-codes=\"props.allowedDialCodes\"\n :disabled=\"props.disabled || props.loading\"\n :size=\"props.size\"\n :locale=\"props.locale\"\n :search-placeholder=\"props.searchPlaceholder ?? messages.searchPlaceholder\"\n :empty-text=\"props.emptyText ?? messages.emptyText\"\n :loading-text=\"props.loadingText ?? messages.loadingText\"\n :suggested-label=\"messages.suggestedLabel\"\n :all-countries-label=\"messages.allCountriesLabel\"\n :country-label=\"messages.countryLabel\"\n :select-country-label=\"messages.selectCountryLabel\"\n :flag-url=\"props.flagUrl\"\n :searcher=\"props.searcher\"\n :countries=\"props.countries\"\n :content-class=\"props.contentClass\"\n :popover-class=\"props.popoverClass\"\n :drawer-class=\"props.drawerClass\"\n :scroll-lock=\"props.scrollLock\"\n >\n <template v-if=\"$slots.trigger\" #trigger=\"slotProps\">\n <slot name=\"trigger\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.chevron\" #chevron=\"slotProps\">\n <slot name=\"chevron\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.flag\" #flag=\"slotProps\">\n <slot name=\"flag\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.item\" #item=\"slotProps\">\n <slot name=\"item\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots['group-header']\" #group-header=\"slotProps\">\n <slot name=\"group-header\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.search\" #search=\"slotProps\">\n <slot name=\"search\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.loading\" #loading>\n <slot name=\"loading\" />\n </template>\n <template v-if=\"$slots.empty\" #empty=\"slotProps\">\n <slot name=\"empty\" v-bind=\"slotProps\" />\n </template>\n </ACountrySelect>\n </div>\n </Transition>\n\n <slot name=\"suffix\" :validation-state=\"validationState\" :validation=\"validation\" />\n </div>\n\n <Transition v-if=\"props.showValidationIcon\" name=\"a-tell-icon\">\n <slot v-if=\"visibleValidationState === 'valid'\" name=\"valid-icon\">\n <CheckCircleIcon class=\"a-tel-input__icon a-tel-input__icon--valid\" />\n </slot>\n <slot\n v-else-if=\"visibleValidationState === 'error'\"\n name=\"error-icon\"\n :reason=\"validation.reason ?? ''\"\n >\n <AlertCircleIcon class=\"a-tel-input__icon a-tel-input__icon--error\" />\n </slot>\n </Transition>\n </div>\n\n <div :id=\"helperId\" aria-live=\"polite\">\n <slot\n v-if=\"showError\"\n name=\"error\"\n :message=\"errorMessage!\"\n :reason=\"validation.reason ?? ''\"\n :validation=\"validation\"\n >\n <p\n data-slot=\"tel-input-error\"\n :class=\"cn('a-tel-input__error', props.errorClass)\"\n role=\"alert\"\n >\n {{ errorMessage }}\n </p>\n </slot>\n <slot\n v-else-if=\"showHint\"\n name=\"hint\"\n :country=\"selectedIso2\"\n :format-hint=\"required!.format_hint\"\n :example=\"required!.example_e164\"\n >\n <p data-slot=\"tel-input-hint\" :class=\"cn('a-tel-input__hint', props.hintClass)\">\n {{ required!.format_hint }}\n </p>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* ------------------------------------------------------------\n * ATelInput — scoped CSS. All colors map to the global\n * --ak-ui-* design tokens (defined in assets/styles.src.css) so\n * dark mode + consumer theme overrides keep working.\n * ---------------------------------------------------------- */\n.a-tel-input {\n display: flex;\n width: 100%;\n flex-direction: column;\n gap: 0.375rem;\n}\n\n.a-tel-input__row {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.a-tel-input__field {\n display: flex;\n width: 100%;\n align-items: center;\n overflow: hidden;\n border: 1px solid hsl(var(--ak-ui-input));\n background: hsl(var(--ak-ui-background));\n border-radius: calc(var(--ak-ui-radius) - 2px);\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n transition:\n border-color 150ms,\n box-shadow 150ms;\n}\n\n.a-tel-input__field:focus-within {\n outline: none;\n box-shadow: 0 0 0 2px hsl(var(--ak-ui-ring) / 0.4);\n}\n\n.a-tel-input__field:has(input:disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Validation field colors — opt-in via `data-show-validation` on the root. */\n.a-tel-input[data-show-validation] .a-tel-input__field[data-state='valid'] {\n border-color: rgb(16 185 129 / 0.6);\n box-shadow: 0 0 0 1px rgb(16 185 129 / 0.2);\n}\n.a-tel-input[data-show-validation] .a-tel-input__field[data-state='valid']:focus-within {\n box-shadow: 0 0 0 2px rgb(16 185 129 / 0.4);\n}\n.a-tel-input[data-show-validation] .a-tel-input__field[data-state='error'] {\n border-color: hsl(var(--ak-ui-destructive) / 0.8);\n box-shadow: 0 0 0 1px hsl(var(--ak-ui-destructive) / 0.2);\n}\n.a-tel-input[data-show-validation] .a-tel-input__field[data-state='error']:focus-within {\n box-shadow: 0 0 0 2px hsl(var(--ak-ui-destructive) / 0.4);\n}\n\n/* Size variants — values mirror the shared Size scale (see utils/sizes.ts). */\n.a-tel-input[data-size='xs'] .a-tel-input__field {\n height: 1.75rem;\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.a-tel-input[data-size='sm'] .a-tel-input__field {\n height: 2.25rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.a-tel-input[data-size='md'] .a-tel-input__field {\n height: 43px;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.a-tel-input[data-size='lg'] .a-tel-input__field {\n height: 52px;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.a-tel-input[data-size='xl'] .a-tel-input__field {\n height: 60px;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n.a-tel-input__dial {\n flex-shrink: 0;\n color: hsl(var(--ak-ui-muted-foreground));\n font-variant-numeric: tabular-nums;\n user-select: none;\n padding: 0 0.5rem;\n}\n.a-tel-input[data-size='xs'] .a-tel-input__dial {\n font-size: 0.75rem;\n}\n.a-tel-input[data-size='sm'] .a-tel-input__dial,\n.a-tel-input[data-size='md'] .a-tel-input__dial {\n font-size: 0.875rem;\n}\n.a-tel-input[data-size='lg'] .a-tel-input__dial,\n.a-tel-input[data-size='xl'] .a-tel-input__dial {\n font-size: 1rem;\n}\n\n.a-tel-input__input {\n height: 100%;\n width: 100%;\n min-width: 0;\n flex: 1;\n background: transparent;\n font-variant-numeric: tabular-nums;\n outline: none;\n border: 0;\n color: inherit;\n font: inherit;\n}\n\n.a-tel-input__input::placeholder {\n color: hsl(var(--ak-ui-muted-foreground));\n}\n.a-tel-input__input:disabled {\n cursor: not-allowed;\n}\n.a-tel-input__input[data-has-dial] {\n padding-inline-start: 0.25rem;\n}\n\n/* Per-size horizontal padding for the input itself. */\n.a-tel-input[data-size='xs'] .a-tel-input__input {\n padding-inline: 0.5rem;\n}\n.a-tel-input[data-size='sm'] .a-tel-input__input {\n padding-inline: 0.625rem;\n}\n.a-tel-input[data-size='md'] .a-tel-input__input {\n padding-inline: 0.75rem;\n}\n.a-tel-input[data-size='lg'] .a-tel-input__input {\n padding-inline: 0.875rem;\n}\n.a-tel-input[data-size='xl'] .a-tel-input__input {\n padding-inline: 1rem;\n}\n/* When the dial prefix is present, the input already inherits ps-1 via [data-has-dial]; collapse start padding. */\n.a-tel-input__input[data-has-dial] {\n padding-inline-start: 0.25rem;\n}\n\n.a-tel-input__detecting {\n display: inline-flex;\n height: 100%;\n flex-shrink: 0;\n align-items: center;\n padding: 0 0.5rem;\n color: hsl(var(--ak-ui-muted-foreground));\n}\n.a-tel-input__detecting-icon {\n width: 1rem;\n height: 1rem;\n}\n\n.a-tel-input__country-wrapper {\n display: inline-flex;\n height: 100%;\n flex-shrink: 0;\n align-items: center;\n}\n\n.a-tel-input__icon {\n width: 1.25rem;\n height: 1.25rem;\n flex-shrink: 0;\n}\n.a-tel-input__icon--valid {\n color: rgb(16 185 129);\n}\n.a-tel-input__icon--error {\n color: hsl(var(--ak-ui-destructive));\n}\n\n.a-tel-input__error {\n color: hsl(var(--ak-ui-destructive));\n font-size: 0.75rem;\n line-height: 1rem;\n margin: 0;\n}\n\n.a-tel-input__hint {\n color: hsl(var(--ak-ui-muted-foreground));\n font-size: 0.75rem;\n line-height: 1rem;\n font-variant-numeric: tabular-nums;\n margin: 0;\n}\n\n/* Detecting spinner transition (collapsible width + fade). */\n.a-tell-detect-enter-active {\n transition:\n opacity 200ms ease-out,\n max-width 200ms ease-out;\n overflow: hidden;\n}\n.a-tell-detect-leave-active {\n transition:\n opacity 150ms ease-in,\n max-width 150ms ease-in;\n overflow: hidden;\n}\n.a-tell-detect-enter-from,\n.a-tell-detect-leave-to {\n opacity: 0;\n max-width: 0;\n}\n.a-tell-detect-enter-to,\n.a-tell-detect-leave-from {\n opacity: 1;\n max-width: 2.5rem;\n}\n\n/* Country picker reveal/hide transition. */\n.a-tell-country-enter-active {\n transition:\n opacity 200ms ease-out,\n max-width 200ms ease-out;\n overflow: hidden;\n}\n.a-tell-country-leave-active {\n transition:\n opacity 150ms ease-in,\n max-width 150ms ease-in;\n overflow: hidden;\n}\n.a-tell-country-enter-from,\n.a-tell-country-leave-to {\n opacity: 0;\n max-width: 0;\n}\n.a-tell-country-enter-to,\n.a-tell-country-leave-from {\n opacity: 1;\n max-width: 12rem;\n}\n\n/* Validation icon swap. */\n.a-tell-icon-enter-active {\n transition:\n opacity 150ms ease-out,\n transform 150ms ease-out;\n}\n.a-tell-icon-leave-active {\n transition:\n opacity 100ms ease-in,\n transform 100ms ease-in;\n}\n.a-tell-icon-enter-from,\n.a-tell-icon-leave-to {\n opacity: 0;\n transform: scale(0.9);\n}\n</style>\n"],"x_google_ignoreList":[0,1],"mappings":"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"}