x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<div class="lui-date_picker !h-[32px]"> <div class="lui-date_picker__presets" data-controller="dropdown-popover date-picker" data-dropdown-popover-placement-value="bottom-start" data-dropdown-popover-auto-position-value="true" data-date-picker-range-value="true" data-date-picker-locale-value="es" data-date-picker-today-label-value="Hoy" data-date-picker-now-label-value="Ahora" data-date-picker-this-week-label-value="Esta semana" data-date-picker-this-month-label-value="Este mes" data-date-picker-this-year-label-value="Este año" data-date-picker-clear-label-value="Limpiar" data-date-picker-submit-on-select-value="false"> <div> <input name="date_range" class="air-datepicker-input" readonly="readonly" data-dropdown-popover-target="button" data-action="click->dropdown-popover#toggle" data-date-picker-target="input" placeholder="Seleccionar rango de fechas..."> <div class="lui-date_picker__icon"> <div class="lui-icon h-[16px] w-[16px]"> <i class="fa-regular fa-calendar lui-icon__icon" style="font-size: 16px; color: currentColor;"></i> </div> </div> <dialog data-dropdown-popover-target="menu" data-controller="menu" data-action="click@document->dropdown-popover#closeOnClickOutside keydown.up->menu#prev keydown.down->menu#next keydown.up->menu#preventScroll keydown.down->menu#preventScroll" class="outline-hidden absolute z-50 rounded-lg border border-neutral-200 bg-white text-neutral-800 shadow-md transition-opacity ease-out duration-150 opacity-0 [&[open]]:scale-100 [&[open]]:opacity-100" data-menu-index-value="-1"> <div class="flex flex-col sm:flex-row"> <!-- Left side: Time range presets --> <div class="air-datepicker-presets-left-container"> <div class="air-datepicker-presets-left-container-buttons"> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setToday"> Hoy </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setYesterday"> Ayer </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setLastDays" data-days="7"> Últimos 7 días </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setLastDays" data-days="30"> Últimos 30 días </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setLastDays" data-days="90"> Últimos 90 días </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setLastDays" data-days="180"> Últimos 180 días </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setLastDays" data-days="365"> Últimos 365 días </button> </div> <div class="air-datepicker-presets-left-divider-line"></div> <div class="air-datepicker-presets-left-container-buttons"> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setPreset" data-preset-type="this-month"> Este mes </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setPreset" data-preset-type="last-month"> Mes pasado </button> <button type="button" class="air-datepicker-presets--button" data-menu-target="item" data-action="click->date-picker#setPreset" data-preset-type="this-year"> Este año </button> </div> <div class="air-datepicker-presets-left-divider-line"></div> <div class="air-datepicker-presets-left-container-buttons"> <button type="button" class="air-datepicker-presets--button-close" data-menu-target="item" data-action="click->date-picker#clearSelection"> Limpiar y cerrar </button> </div> </div> <!-- Right side: Inline calendar --> <div class="inline-calendar" data-controller="date-picker" data-date-picker-locale-value="es" data-date-picker-submit-on-select-value="false" data-date-picker-inline-value="true" data-date-picker-range-value="true" data-date-picker-show-clear-button-value="true" data-date-picker-clear-label-value="Limpiar"> <input class="hidden" data-date-picker-target="input"> </div> </div> </dialog> </div> </div></div>DatePicker
Description
Related components
| Used Components | Components where is Used |
|---|---|
| Label |
Usage rules
- ✅ Do
- ❌ Don't
1
<%= render LooposUi::DatePicker.new(presets: true, initial_date: Date.current, locale: 'es') %>No notes provided.
No params configured.
Description
Date Picker component for selecting a single date, a date range, or month/year values. It integrates with a Stimulus controller and Air Datepicker, supports different display formats, an inline mode, and optional presets.
Arguments
| Property | Default | Required | Description |
|---|---|---|---|
inline |
false |
Renders an inline calendar (always visible). | |
name |
nil |
Input name attribute. Defaults to date, month, year, or date_range depending on mode. |
|
submit_on_select |
false |
When true, submits the surrounding form after selecting. | |
range |
false |
Enables date range selection. | |
presets |
false |
Shows preset quick ranges in a popover with an inline calendar. | |
format |
'date' |
Controls the picker format: 'date', 'month', or 'year'. |
|
initial_date |
nil |
Initial date (Date). For range, treated as min/start. | |
end_date |
nil |
End date (Date) used as max/end for ranges. |
Notes:
- For
format: 'month'andformat: 'year', the picker starts and is constrained to months or years. - When
presets: true, range selection is enabled and a left-side presets column is shown.
Slots
None.
JS Events
Emits on the input element:
change: Fired whenever the input value changes due to selection or clearing.
Listens to:
- No custom events. Uses internal Stimulus behaviors.
Accessibility
- The input is readonly and opens a calendar UI; ensure labels and context are provided by the surrounding form.
Examples
- Single date:
<%= render LooposUi::DatePicker.new %>- Month-only:
<%= render LooposUi::DatePicker.new(format: 'month') %>- Year-only:
<%= render LooposUi::DatePicker.new(format: 'year') %>- Date range:
<%= render LooposUi::DatePicker.new(range: true) %>- With presets and inline calendar:
<%= render LooposUi::DatePicker.new(presets: true, initial_date: Date.current) %>