Phone input
Teléfono con país · components/fields/phone-input
Un campo de teléfono con el país adelante: el botón de la bandera y el código crece con un resorte hasta ser una lista con buscador, el número toma forma mientras lo escribís (la guía tenue muestra lo que falta), y un tilde verde aparece cuando el número está completo. Si pegás un número internacional (+54 9 11…) elige solo el país; si tipeás + en el número se abre la lista buscando por código. Al salir del campo con un número incompleto avisa en rojo cuántos dígitos tiene que tener. El valor sale en E.164, listo para SMS o WhatsApp.
Por qué entró
Elegir el código de país y escribir el número en un solo campo. El botón de probar no me gusta, lo quitaría.
Sirve para
- formularios donde hay que elegir el código de país
- enviar SMS o WhatsApp eligiendo país y número
- alta de cuenta o verificación por código en ET Conecta, miET y el campus
No sirve para
- con el botón de probar tal como viene: se quita al portear
- teléfonos internos o extensiones: ahí va un campo común
Origen: Arc UI, porteado a nuestro stack y traducido. La licencia del sitio no está declarada: se usa en nuestras apps, no se publica.
Cómo se usa
import { PhoneInput } from '@/components/ui/phone-input/PhoneInput'
<PhoneInput label="Celular" description="Te mandamos un código de 6 dígitos por SMS." onValueChange={(e164, { valid }) => setTelefono(valid ? e164 : '')} />
<PhoneInput label="WhatsApp" name="telefono" required />
<PhoneInput label="Celular" value={telefono} onValueChange={setTelefono} error={error} />
value/defaultValue: el número en E.164 ("+5491123456789"). Un texto vacío limpia el campo. Si lo controlás, cada valor nuevo que no salió del campo se vuelve a leer.onValueChange(e164, { country, formatted, status, valid }): en cada edición.statusesempty,incomplete,validotoo-long.country/defaultCountry/onCountryChange: el país por código ISO. Por defecto arranca en Argentina.countries: limita la lista a esos códigos ISO.preferredCountries: los fijados arriba bajo "Sugeridos"; por defecto Argentina, Uruguay, Paraguay, Brasil y Chile.description: ayuda bajo el campo.error: reemplaza el mensaje propio.validate(activo) muestra el aviso de largo al salir del campo con un número a medias.name: agrega un input oculto con el E.164 para enviar el formulario de forma nativa.hideLabel,disabled,required,id,className,onBlurcomo en un<input>.- Celulares argentinos: el campo acepta
9 11 2345-6789(11 dígitos) además de los 10 del fijo. Para WhatsApp hace falta el 9 adelante; pedilo en ladescription. - Teclado: en el botón del país, flecha abajo abre la lista y una letra abre buscando; en la lista, flechas, Inicio/Fin, Enter elige, Escape cierra. Borrar sobre un separador borra el dígito de al lado.
- También exporta
PHONE_COUNTRIES,parsePhoneNumber,formatPhoneNumber,formatNationalyflagOfpor si querés mostrar un número guardado. - Con
prefers-reduced-motiontodo cambia sin animación.
Qué toma de tu app
Fondo, bordes, textos, el radio del campo y el foco salen de los tokens --ui-*; las
esquinas del botón del país siguen a --ui-radius. El tilde de número válido es verde y
el mensaje de error rojo: semánticos, no cambian de app, del acento toman sólo la luz y la
saturación. Las banderas son emoji del sistema. Las duraciones salen de --ui-dur y
--ui-ease. Necesita motion y lucide-react.
Details
- Source
- Arc UI · Not declared
- Added
- October 2, 2026 · francovassallo
- Tags
- telefonopaiscodigosmswhatsappformulario
- Tokens used
--ui-font-text--ui-accent--ui-dur--ui-radius--ui-ink--ui-ink-muted--ui-line--ui-surface--ui-ease--ui-surface-2--ui-ink-soft- Dependencies
lucide-reactmotion- Used in
- Not in any app yet