feat : intégration du sélecteur d'année dans CalendarField (#date-year-picker)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-22 10:16:09 +02:00
parent 5e5423c545
commit f314a1a06e
@@ -86,9 +86,10 @@
:view-mode="viewMode"
:current-month="currentMonth"
:current-year="currentYear"
:year-page-start="yearPageStart"
@prev="goToPrev"
@next="goToNext"
@toggle-view="toggleView"
@toggle-view="goToHigherView"
/>
<slot
v-if="viewMode === 'days'"
@@ -97,10 +98,21 @@
:close="closePopover"
/>
<MonthPicker
v-else
v-else-if="viewMode === 'months'"
:selected-month="currentMonth"
:current-year="currentYear"
:min="min"
:max="max"
@select="onSelectMonth"
/>
<YearPicker
v-else
:page-start="yearPageStart"
:selected-year="currentYear"
:min="min"
:max="max"
@select="onSelectYear"
/>
</div>
</div>
@@ -127,6 +139,7 @@ import type {MaskInputOptions} from 'maska'
import MalioRequiredMark from '../../shared/RequiredMark.vue'
import CalendarHeader from './CalendarHeader.vue'
import MonthPicker from './MonthPicker.vue'
import YearPicker from './YearPicker.vue'
import {useCalendarPopover} from '../composables/useCalendarPopover'
import {useCalendarView} from '../composables/useCalendarView'
import {buildBoundedMask} from '../composables/maskTemplate'
@@ -157,6 +170,8 @@ const props = withDefaults(
labelClass?: string
groupClass?: string
reserveMessageSpace?: boolean
min?: string
max?: string
}>(),
{
id: '',
@@ -176,6 +191,8 @@ const props = withDefaults(
labelClass: '',
groupClass: '',
reserveMessageSpace: true,
min: undefined,
max: undefined,
},
)
@@ -215,8 +232,8 @@ watch(() => props.displayValue, (value) => {
draft.value = value
})
const {isOpen, viewMode, open, close: closePopover, toggleView} = useCalendarPopover(root)
const {currentMonth, currentYear, goToPrev, goToNext, selectMonth, syncToIso} = useCalendarView(viewMode)
const {isOpen, viewMode, open, close: closePopover, goToHigherView} = useCalendarPopover(root)
const {currentMonth, currentYear, yearPageStart, goToPrev, goToNext, selectMonth, selectYear, syncToIso} = useCalendarView(viewMode)
const inputId = computed(() => props.id?.toString() || `malio-date-${generatedId}`)
const hasError = computed(() => !!props.error)
@@ -323,7 +340,12 @@ watch(() => props.syncTo, (value) => {
const onSelectMonth = (m: number) => {
selectMonth(m)
toggleView()
viewMode.value = 'days'
}
const onSelectYear = (y: number) => {
selectYear(y)
viewMode.value = 'months'
}
const mergedGroupClass = computed(() =>