Date Picker
Um Popover com um Calendar dentro. Não existe
Ui::DatePickerComponent:
você mesmo junta as duas peças.
Instalação
O Shadwire segue o modelo open code do shadcn/ui: o código-fonte do componente é copiado para o seu app 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, então 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 num input escondido (name:)
e dispara ui-calendar:change.
O controller ui-date-picker escuta esse evento,
mostra a data formatada no gatilho e fecha o popover. Ele só cuida da exibição: sem ele, o
picker continua funcionando, mas o gatilho não mostra o que foi escolhido.
O popover precisa de w-auto! p-0!, porque o
w-72 e o padding padrão deixam pouco espaço para o calendário.
No Tailwind v4, o ! vai no fim da classe.
Composição
Exemplos
Os oito arranjos que o shadcn/ui documenta, traduzidos para ViewComponent + Stimulus.
Padrão
Um botão que abre o calendário num popover e depois mostra a data escolhida.
Com rótulo
O mesmo gatilho dentro de um Field, associado ao rótulo por id.
Intervalo
Duas datas num só gatilho. O popover fecha depois da segunda data, não da primeira.
Data de nascimento
Selects de mês e ano na legenda e max: hoje, já que ninguém nasce no futuro.
Com campo de texto
Digite a data ou escolha no calendário. O que você digita é interpretado, e o campo mostra a data formatada. ↓ abre o popover.
Data e hora
O picker define o dia e um input type="time" nativo define a hora.
Linguagem natural
Entende "hoje", "amanhã", "em 2 semanas" e "próxima sexta". A lista de frases fica no controller, então você pode acrescentar as suas.
Your post goes out on .
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.
A tabela abaixo cobre só o controller que liga os dois: os 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ó depois da segunda data. |
natural-language-value |
false |
Aceita frases relativas (“amanhã”, “em 2 semanas”, “próxima sexta”) no campo de texto. |
target="label" |
— | O elemento cujo texto vira a data escolhida; recebe data-empty enquanto está vazio. |
target="input" |
— | Um campo de texto editável: o que você digita é interpretado, e ↓ abre o popover. |
target="preview" |
— | Mostra, se você quiser, a data interpretada numa linha de apoio abaixo do campo. |