From f314a1a06e8ee24ed94d898e67d52516eb54b1d7 Mon Sep 17 00:00:00 2001 From: tristan Date: Mon, 22 Jun 2026 10:16:09 +0200 Subject: [PATCH] =?UTF-8?q?feat=20:=20int=C3=A9gration=20du=20s=C3=A9lecte?= =?UTF-8?q?ur=20d'ann=C3=A9e=20dans=20CalendarField=20(#date-year-picker)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../malio/date/internal/CalendarField.vue | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/app/components/malio/date/internal/CalendarField.vue b/app/components/malio/date/internal/CalendarField.vue index 4d8af60..1837c42 100644 --- a/app/components/malio/date/internal/CalendarField.vue +++ b/app/components/malio/date/internal/CalendarField.vue @@ -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" /> + @@ -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(() =>