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(() =>