Date Picker
Uma receita: Popover + Calendar. Não é um componente novo — não existe
Ui::DatePickerComponent,
você compõe as partes.
Instalação
O Shadwire segue o modelo open-code do shadcn/ui: o código-fonte do componente é copiado para a sua aplicação e passa a ser seu. Instale com a CLI:
O item date-picker
do registry instala estes arquivos:
-
app/components/ui_component.rb -
app/javascript/controllers/ui_date_picker_controller.js -
vendor/shadwire/shadwire.css
Este componente usa Stimulus: a aplicação precisa de
importmap-rails e
stimulus-rails
com carregamento automático de controllers.
Ainda não instalou a CLI?
gem install shadwire
e depois shadwire init.
Uso
O ui_calendar é quem guarda o valor:
ele grava a data escolhida em um input escondido (name:)
e anuncia ui-calendar:change.
O controller ui-date-picker ouve esse evento
para escrever a data formatada no rótulo do gatilho e fechar o popover — nada além de apresentação.
Sem ele o picker continua funcionando; só não conta ao usuário o que foi escolhido.
O popover precisa de w-auto! p-0!:
o padrão é w-72 com preenchimento,
estreito demais para a grade do calendário. O !
vai no fim da classe — é a sintaxe do Tailwind v4.
Composição
Exemplos
Os oito arranjos que o shadcn/ui documenta, traduzidos para ViewComponent + Stimulus.
Padrão
Botão que abre o calendário em um popover e passa a exibir a data escolhida.
Com rótulo
O mesmo gatilho dentro de um Field, associado ao rótulo por id.
Intervalo
Duas datas em um gatilho só. O popover fecha quando a segunda ponta entra, não na primeira.
Data de nascimento
Legenda com selects de mês e ano e max: hoje — ninguém nasceu semana que vem.
Com campo de texto
Digite a data ou escolha no calendário: o texto vira data e a data volta formatada. ↓ abre o popover.
Data e hora
O picker resolve o dia; um input type="time" nativo resolve a hora.
Linguagem natural
Aceita "hoje", "amanhã", "em 2 semanas", "próxima sexta". A tabela de frases mora no controller — é código seu.
Sua publicação sai em .
RTL
dir: :rtl espelha a grade, as setas e as teclas ←/→; month_names:/day_names: traduzem a legenda.
Referência da API
O que o calendário aceita está em Calendar.
Abaixo, só o controller de ligação — atributos data-*
no elemento que envolve o popover e o campo.
| Atributo | Padrão | Descrição |
|---|---|---|
format-value |
long |
full, long, medium, short ou iso. |
locale-value |
— | BCP 47 (pt-BR, ar-EG). Vazio segue o idioma do navegador. |
separator-value |
– |
O que separa as duas pontas de um intervalo no rótulo. |
date-order-value |
dmy |
Como ler 01/06/2026 ao digitar. mdy para o formato americano. |
close-on-select-value |
true |
Fecha o popover ao escolher. Em mode: :range, só quando a segunda data entra. |
natural-language-value |
false |
Aceita frases relativas (“amanhã”, “em 2 semanas”, “próxima sexta”) no campo de texto. |
target="label" |
— | Elemento cujo texto vira a data escolhida; ganha data-empty para o estado vazio. |
target="input" |
— | Campo de texto editável: o que for digitado é interpretado, ↓ abre o popover. |
target="preview" |
— | Eco opcional da data já interpretada, para uma linha de apoio abaixo do campo. |