x
1
2
3
4
5
6
7
8
9
10
11
12
<div class="lui-date_picker-wrapper"> <div class="lui-date_picker h-[32px]!"> <div class="lui-date_picker__field" data-controller="date-picker" data-date-picker-locale-value="fr" data-date-picker-submit-on-select-value="false" data-date-picker-range-value="true" data-date-picker-show-today-button-value="true" data-date-picker-today-label-value="Aujourd'hui" data-date-picker-show-clear-button-value="true" data-date-picker-clear-label-value="Effacer" data-date-picker-granularity-value="date" data-date-picker-range-separator-value="~" data-date-picker-date-format-value="dd/MM/yyyy" data-date-picker-min-date-value="2026-06-04" data-date-picker-max-date-value="2026-08-04"> <input name="date_range" class="lui-date_picker-ranged-picker" readonly="readonly" data-date-picker-target="input" placeholder="Sélectionner une plage de dates..."> <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> </div> </div></div>DatePicker
Description
Related components
| Used Components | Components where is Used |
|---|---|
| Label |
Usage rules
- ✅ Do
- ❌ Don't
1
2
3
4
5
6
7
<%= render LooposUi::DatePicker.new( range: true, granularity: "date", locale: 'fr', min_date: Date.today - 1.month, max_date: Date.today + 1.month) %>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 configurable granularity, an inline mode, and optional presets.
Arguments
| Property | Default | Required | Description |
|---|---|---|---|
inline |
false |
Renders an inline calendar (always visible). | |
id |
nil |
Optional DOM id seed. When omitted, a random datepicker-* id is generated. |
|
name |
nil |
Input name attribute. Defaults to date, month, year, time, or date_range. |
|
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. | |
granularity |
'date' |
Selection precision: date, month_year, year, date_time, time. |
|
locale |
I18n.locale.to_s |
Locale used for Air Datepicker labels and component translations. | |
initial_date |
nil |
Pre-selected date (Date). Does not restrict selectable dates. | |
min_date |
nil |
Minimum selectable date. Dates before this are disabled in all modes. | |
max_date |
nil |
Maximum selectable date. Dates after this are disabled in all modes. | |
help |
nil |
Help text shown below the input. Hidden when error is present. |
|
error |
nil |
Error message shown below the input. Adds an error border to the input. |
Value formats by granularity
granularity |
Input value format |
|---|---|
date |
dd/MM/yyyy |
month_year |
MM/yyyy |
year |
yyyy |
date_time |
Display: dd/MM/yyyy HH:mm — submit: dd/MM/yyyy HH:mm:ss (:00) |
time |
Display: HH:mm — submit: HH:mm:ss (:00) |
range + any |
{start}~{end} using the format above |
Notes:
- For
month_yearandyear, the picker opens in months or years view. - When
presets: true, range selection is enabled and a left-side presets column is shown. - Unknown granularity values fall back to
date. - LoopOS protocol forms use the same granularity values; map
min_date,max_date, andrangefrom the surrounding element when integrating.
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/year:
<%= render LooposUi::DatePicker.new(granularity: 'month_year') %>- Year-only:
<%= render LooposUi::DatePicker.new(granularity: 'year') %>- Date range:
<%= render LooposUi::DatePicker.new(range: true) %>- With date constraints:
<%= render LooposUi::DatePicker.new( min_date: Date.new(2024, 1, 1), max_date: Date.new(2025, 12, 31)) %>- With presets and inline calendar:
<%= render LooposUi::DatePicker.new(presets: true, initial_date: Date.current) %>