UI

Number Field

Campo numérico com botões −/+, setas do teclado e formatação automática de moeda, porcentagem e unidades.

Instalação

npx shadcn@latest add @lenstech/number-field

Uso

import { I18nProvider } from "react-aria-components"
import { NumberField } from "@/components/ui/number-field"
<I18nProvider locale="pt-BR">
  <NumberField
    label="Valor do serviço"
    name="valor"
    minValue={0}
    formatOptions={{ style: "currency", currency: "BRL" }}
  />
</I18nProvider>

O valor é sempre um number

A formatação (R$ 1.500,00, 10%, 4,5 m) é só visual: onChange recebe 1500, 0.1 ou 4.5. O idioma define separadores — com pt-BR, vírgula decimal e ponto de milhar. Campo vazio vale NaN.

Exemplos

Moeda (BRL)

Use formatOptions={{ style: "currency", currency: "BRL" }}. O step define o incremento dos botões e das setas. Com hideStepper o campo fica como um input simples.

Valor sugerido para começar: R$ 1.500,00.

Porcentagem

Com style: "percent" o valor é uma fração: 0.1 aparece como 10%. Ajuste step, minValue e maxValue na mesma escala.

Máximo de 50%.

Unidades

style: "unit" aceita as unidades do Intl.NumberFormat (meter, kilogram, minute, liter…). Unidades de área como m² não existem no Intl — nesse caso, deixe a unidade no rótulo.

Medida usada para calcular o letreiro.

Validação

isRequired, minValue/maxValue e validate exibem a mensagem abaixo do campo. Clique em Calcular orçamento.

Máximo de 50 páginas no plano atual.

Quando usar

  • Use para quantidades e valores: preço, desconto, número de páginas, duração.
  • Não use para identificadores como CPF, CNPJ, CEP ou telefone — eles são texto; use Input.
  • Não use para escolher um valor aproximado num intervalo visual — use Slider.
  • Informe limites com minValue/maxValue: eles também bloqueiam os botões −/+ no limite.

API

NumberField

Aceita todas as props do NumberField do React Aria, mais:

Prop

Type

On this page