Pular para o conteúdo

DateRangeField

Intervalo de datas com campos digitáveis e calendário de duas pontas.

O DateRangeField escolhe um período: início e fim, digitando nos segmentos ou abrindo o calendário. É o campo de datas da tela de Métricas. A tela troca só strings AAAA-MM-DD, o formato que cabe na URL; a conversão para o tipo de data do React Aria fica dentro do componente.

import { DateRangeField } from "@rastreio-x/ui";

Padrão

label, from, to e onChange. O campo é controlado: guarde o intervalo no estado.

Com limites

min e max (também AAAA-MM-DD) bloqueiam datas fora da janela. Diga o limite em texto perto do campo, porque o calendário só desabilita os dias.

Guardando na URL

Os valores são strings, então encaixam em parâmetros de busca da rota. Mostre em pt-BR o período escolhido e anuncie a mudança.

Em uma barra de filtros

Dentro de um FilterField mais largo, ao lado de outros filtros, como na tela de Métricas.

Anatomia

DateRangeField
├── Label
├── DateField.Group
│   ├── segmentos do início (dia, mês, ano)
│   ├── separador
│   ├── segmentos do fim
│   └── botão do calendário (Trigger)
└── Popover
    └── RangeCalendar (cabeçalho, grade de dias)

Propriedades

Animações

O calendário abre e fecha com uma transição curta de opacidade e transform do popover do HeroUI, e o realce do intervalo troca de cor ao passar o mouse. Com prefers-reduced-motion, a folha global da fachada reduz as transições a 0,01 ms. Os selos acima vêm de análise estática.

Acessibilidade

  • Cada segmento (dia, mês, ano) é focável e editável com o teclado; setas mudam o valor e digitar avança para o próximo segmento.
  • O botão do calendário tem nome (Abrir calendário: Datas do Período) e abre o RangeCalendar em um diálogo; Esc fecha e devolve o foco.
  • No calendário, setas movem o dia, PageUp e PageDown trocam o mês, e Enter escolhe a ponta do intervalo.
  • O dia selecionado é anunciado com a data completa; os dias bloqueados por min/max são marcados como indisponíveis.
  • O rótulo sempre visível dá o nome ao grupo. O foco usa o anel azul padrão.

Boas práticas

Faça

Rótulo visível, limites em `min` e `max` e a janela dita em texto: No máximo 90 dias.

Evite

Dois campos de data soltos, ou aceitar um intervalo invertido sem avisar.
  • O componente já impede início depois do fim; confirme o limite máximo do lado do servidor.
  • Guarde o intervalo na URL para a tela ser compartilhável.
  • Para uma data só, use um campo de data simples; este componente é para períodos.

Relacionados