Formularios@unozero-ai/ui

MoneyInput

Importe en una moneda, con separadores de miles mientras se escribe y el número limpio en el formulario.

Usar

import { MoneyInput } from "@unozero-ai/ui/react";

<MoneyInput></MoneyInput>

Configurador

Cambia las propiedades, escribe un importe y sal del campo para ver su formato completo.

requireddisabledreadonly
<MoneyInput value={1250000} label="Anticipo para confirmar" helperText="El 30 % de la estancia." />

Básico

Un importe en una moneda, con el aspecto de Input: tarifas, anticipos, pagos. Mientras escribes agrupa los miles sin mover el cursor (borrar un punto borra la cifra de al lado); al salir del campo muestra el formato completo de la moneda. value es un número o null, nunca el texto con puntos. Las cifras van en mono tabular (la Regla de los Tres Papeles) y el símbolo va fuera del texto, a su lado. Para cantidades sin moneda (noches, puntos) usa NumberInput.

Monedas

currency es el código ISO 4217 (COP por defecto). Separadores, símbolo, su posición y decimales salen de Intl.NumberFormat con el idioma de setLocale: el peso va sin centavos aunque ISO le dé dos, porque nadie los usa; el dólar y el euro llevan dos. Esta web usa el idioma por defecto del kit, es, y por eso el peso sale como «COP» detrás de la cifra; con setLocale("es-CO") al arrancar tu app sale «$» delante. El lector de pantalla oye la moneda junto a la etiqueta.

Estados y tamaños

Los mismos de Input. El error dice qué cifra esperaba, no solo que está mal (la Regla del Tenant), y el campo se sacude cuando llega. readonly para un total que calcula el sistema y se puede copiar; disabled para un importe que no aplica aquí. size acepta sm, md y lg, con la altura de los tokens de densidad.

En un formulario

Es un control de formulario nativo: con name envía el número limpio (1500000, 1234.5), y un campo vacío no se envía. required, min y max los valida el navegador con sus mensajes, y el kit escribe la cifra del límite con el formato de la moneda. El botón type="reset" vacía los campos. En React, onInput llega en cada tecla con e.currentTarget.value ya convertido en número, y onChange al salir del campo. Prueba con 20.000 y con 1.500.000.

Registrar pagoLimpiar

API

Generada del custom-elements.json que publica @unozero-ai/ui. Las partes se estilan desde tu CSS con el nombre del elemento: uz-button::part(base).

MoneyInput · <uz-money-input>

PropTipoDefectoDescripción
labelstring""Etiqueta visible encima del campo; también es su nombre accesible.
valuenumber | nullnullImporte actual como número, o null si el campo está vacío.
namestring""Nombre con el que el valor entra en el FormData del formulario.
currencystring"COP"Código ISO 4217: COP, USD, EUR…
minnumber | undefined—Importe mínimo para ser válido.
maxnumber | undefined—Importe máximo para ser válido.
placeholderstring""Ejemplo del dato dentro del campo vacío; no sustituye a la etiqueta.
helperTextstring""Ayuda bajo el campo (helper-text); el error la sustituye mientras dura.
errorstring""Mensaje de error bajo el campo; con texto, el campo es inválido y no se envía.
state"default" | "error" | "success""default"Estado visual del borde: default, error o success. Un error manda sobre él.
size"sm" | "md" | "lg""md"Tamaño: sm, md o lg; la altura sale de los tokens de densidad.
requiredbooleanfalseObligatorio: el formulario no se envía mientras esté vacío.
disabledbooleanfalseDeshabilitado: no se puede usar ni se envía con el formulario.
readonlybooleanfalseSolo lectura: se puede enfocar y copiar, pero no cambiar.
accessibleLabelstring""Nombre accesible (aria-label del host) cuando no hay etiqueta visible.
EventoDescripción
onChangeAl confirmar el cambio (perder el foco).
onInputAl escribir; value ya es el número.
Parte CSSDescripción
uz-money-input::part(field)El contenedor con borde.
uz-money-input::part(input)El <input> interno.
MétodoDescripción
checkValidity()—
reportValidity()—