Date Picker
A date picker input with a button trigger that opens a calendar popover.
Requires JavaScript
date-picker/default
<%= render Shadcn::DatePickerComponent.new(selected: Date.new(2026, 8, 29), month: Date.new(2026, 8, 1)) %>
Installation
Add the component to your project:
rails generate shadcn:add date_picker
Usage
<%= render Shadcn::DatePickerComponent.new(selected: Date.new(2026, 8, 29), month: Date.new(2026, 8, 1)) %>
Examples
Pre-selected Date
Use the selected prop to set an initial date.
<%= render Shadcn::DatePickerComponent.new(selected: Date.today) %>
Form Integration
Use the name prop inside a Rails form to enable form submission.
<%= form_with url: events_path, scope: :event, class: "space-y-4" do |form| %>
<div class="space-y-2">
<%= form.label :date, "Event Date" %>
<%= render Shadcn::DatePickerComponent.new(
name: "event[date]",
selected: Date.today,
placeholder: "Select event date"
) %>
</div>
<%= form.submit "Save event" %>
<% end %>
Date Formats
Use the format prop to change how dates are displayed.
Short
Medium (default)
Long
<div class="flex flex-wrap gap-4">
<div class="space-y-2">
<p class="text-xs text-muted-foreground">Short</p>
<%= render Shadcn::DatePickerComponent.new(selected: Date.today, format: :short) %>
</div>
<div class="space-y-2">
<p class="text-xs text-muted-foreground">Medium (default)</p>
<%= render Shadcn::DatePickerComponent.new(selected: Date.today, format: :medium) %>
</div>
<div class="space-y-2">
<p class="text-xs text-muted-foreground">Long</p>
<%= render Shadcn::DatePickerComponent.new(selected: Date.today, format: :long) %>
</div>
</div>
Date Constraints
Use min_date and max_date to limit selectable dates.
<%= render Shadcn::DatePickerComponent.new(
min_date: Date.today,
max_date: Date.today + 30.days,
placeholder: "Select date (next 30 days)"
) %>
Disabled Dates
Pass specific dates that should not be selectable.
<%= render Shadcn::DatePickerComponent.new(
selected: Date.today + 1.day,
disabled_dates: [
Date.today,
Date.today + 2.days,
Date.today + 5.days
],
placeholder: "Select an available date"
) %>
Disabled
The date picker can be disabled.
<%= render Shadcn::DatePickerComponent.new(disabled: true) %>
API Reference
DatePickerComponent
API Reference
| Prop | Type | Default | Description |
|---|---|---|---|
| selected |
Date
|
nil
|
Currently selected date |
| month |
Date
|
Date.today
|
Month to display (defaults to selected date's month) |
| min_date |
Date
|
nil
|
Minimum selectable date |
| max_date |
Date
|
nil
|
Maximum selectable date |
| name |
String
|
nil
|
Form field name for hidden input |
| disabled_dates |
Array<Date>
|
[]
|
Specific dates that cannot be selected |
| show_outside_days |
Boolean
|
true
|
Whether to show days outside current month |
| placeholder |
String
|
"Pick a date"
|
Placeholder text when no date selected |
| format |
Symbol
|
:medium
|
Date format (:short, :medium, :long, :iso) |
| disabled |
Boolean
|
false
|
Whether the date picker is disabled |
| class_name |
String
|
nil
|
Additional CSS classes |
Date Formats
| Format | Example Output |
|---|---|
:short |
11/26/2024 |
:medium |
November 26, 2024 |
:long |
Tuesday, November 26, 2024 |
:iso |
2024-11-26 |
Events
The Date Picker dispatches a shadcn--date-picker:select event when a date is selected.
element.addEventListener("shadcn--date-picker:select", (event) => {
console.log(event.detail.date) // JavaScript Date object
console.log(event.detail.dateString) // ISO date string (YYYY-MM-DD)
})
Accessibility
- Trigger button has
aria-haspopup="dialog" aria-expandedreflects popover state- Calendar uses
role="grid" aria-selectedindicates selected date- Pressing Escape closes the popover
- Clicking outside closes the popover
On This Page