@mantine-vue/dates 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.cjs +189 -71
- package/cjs/index.cjs.map +1 -1
- package/esm/index.mjs +189 -71
- package/esm/index.mjs.map +1 -1
- package/lib/index.d.mts +120 -12
- package/lib/index.d.ts +120 -12
- package/package.json +3 -3
- package/styles.css +137 -102
- package/styles.layer.css +137 -102
package/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/Dates.module.css","../src/index.ts"],"sourcesContent":[".calendar {\n display: flex;\n gap: var(--mantine-spacing-md);\n width: max-content;\n}\n\n.calendar[data-full-width] {\n width: 100%;\n}\n\n.calendar[data-full-width] > * {\n flex: 1;\n}\n\n.calendarLevel {\n min-width: 16.25rem;\n}\n\n.calendarHeader {\n --dch-control-size: 2.25rem;\n\n display: flex;\n max-width: calc(var(--dch-control-size) * 8 + 0.4375rem);\n margin-bottom: var(--mantine-spacing-xs);\n}\n\n.calendarHeader[data-full-width] {\n max-width: none;\n width: 100%;\n}\n\n.calendarHeaderLevel,\n.calendarHeaderControl {\n height: var(--dch-control-size);\n border-radius: var(--mantine-radius-default);\n display: flex;\n justify-content: center;\n align-items: center;\n user-select: none;\n opacity: 1;\n cursor: pointer;\n color: var(--mantine-color-text);\n}\n\n.calendarHeaderLevel[data-static],\n.calendarHeaderControl[data-static] {\n cursor: default;\n}\n\n.calendarHeaderLevel:not(:disabled):not([data-disabled]):not([data-static]):hover,\n.calendarHeaderControl:not(:disabled):not([data-disabled]):not([data-static]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.calendarHeaderLevel:disabled,\n.calendarHeaderLevel[data-disabled],\n.calendarHeaderControl:disabled,\n.calendarHeaderControl[data-disabled] {\n opacity: 0.2;\n cursor: not-allowed;\n}\n\n.calendarHeaderControl {\n width: var(--dch-control-size);\n}\n\n.calendarHeaderLevel {\n flex: 1;\n font-size: var(--mantine-font-size-sm);\n font-weight: 500;\n text-transform: capitalize;\n}\n\n.calendarHeaderControlIcon {\n width: 45%;\n height: 45%;\n}\n\n.calendarHeaderControlIcon[data-direction='next'] {\n transform: rotate(270deg);\n}\n\n.calendarHeaderControlIcon[data-direction='previous'] {\n transform: rotate(90deg);\n}\n\n.month {\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n}\n\n.month[data-full-width] {\n width: 100%;\n}\n\n.monthRow {\n border: 0;\n}\n\n.monthCell {\n padding: 0;\n text-align: center;\n}\n\n.monthCell[data-with-spacing] {\n padding: 0.125rem;\n}\n\n.weekday {\n height: 1.75rem;\n color: var(--mantine-color-dimmed);\n font-size: var(--mantine-font-size-xs);\n font-weight: 500;\n text-align: center;\n}\n\n.weekday[data-weekend] {\n color: var(--mantine-color-red-filled);\n}\n\n.weekNumber {\n color: var(--mantine-color-dimmed);\n font-size: var(--mantine-font-size-xs);\n text-align: center;\n}\n\n.day {\n --day-size: 2.25rem;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--day-size);\n height: var(--day-size);\n border-radius: var(--mantine-radius-sm);\n color: var(--mantine-color-text);\n font-size: var(--mantine-font-size-sm);\n line-height: 1;\n user-select: none;\n}\n\n.day[data-full-width] {\n width: 100%;\n height: auto;\n min-height: var(--day-size);\n aspect-ratio: 1;\n}\n\n.day:not(:disabled):not([data-static]):not([data-selected]):not([data-in-range]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.day[data-outside] {\n color: var(--mantine-color-dimmed);\n opacity: 0.65;\n}\n\n.day[data-weekend] {\n color: var(--mantine-color-red-filled);\n}\n\n.day[data-today][data-highlight-today] {\n border: 1px solid var(--mantine-primary-color-filled);\n}\n\n.day[data-in-range] {\n background-color: var(--mantine-primary-color-light);\n color: var(--mantine-primary-color-light-color);\n border-radius: 0;\n}\n\n.day[data-in-range]:not(:disabled):not([data-static]):hover {\n background-color: var(--mantine-primary-color-light);\n}\n\n.day[data-selected],\n.day[data-first-in-range],\n.day[data-last-in-range] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n}\n\n.day[data-selected]:not(:disabled):not([data-static]):hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.day:disabled,\n.pickerControl:disabled {\n cursor: not-allowed;\n color: var(--mantine-color-dimmed);\n opacity: 0.55;\n}\n\n.controlsGrid[data-full-width] {\n width: 100%;\n}\n\n.pickerControl {\n height: 2.25rem;\n width: calc(2.25rem * 7 / 3 + 0.09375rem);\n display: flex;\n justify-content: center;\n align-items: center;\n padding-inline: var(--mantine-spacing-xs);\n border-radius: var(--mantine-radius-sm);\n color: var(--mantine-color-text);\n font-size: var(--mantine-font-size-sm);\n user-select: none;\n background-color: transparent;\n}\n\n.pickerControl[data-full-width] {\n width: 100%;\n}\n\n.pickerControl:not(:disabled):not([data-selected]):not([data-in-range]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.pickerControl[data-selected] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n}\n\n.pickerControl[data-selected]:hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.pickerControl[data-in-range] {\n background-color: var(--mantine-primary-color-light-hover);\n color: var(--mantine-primary-color-light-color);\n}\n\n.pickerControl[data-in-range]:hover {\n background-color: var(--mantine-primary-color-light);\n}\n\n.pickerControl[data-first-in-range] {\n border-radius: 0;\n border-start-start-radius: var(--mantine-radius-default);\n border-end-start-radius: var(--mantine-radius-default);\n}\n\n.pickerControl[data-last-in-range] {\n border-radius: 0;\n border-end-end-radius: var(--mantine-radius-default);\n border-start-end-radius: var(--mantine-radius-default);\n}\n\n.pickerControl[data-first-in-range][data-last-in-range] {\n border-radius: var(--mantine-radius-default);\n}\n\n.timePicker,\n.dateTimePicker {\n width: max-content;\n}\n\n.datePickerRoot {\n display: flex;\n font-size: var(--mantine-font-size-sm);\n}\n\n.dateTimePicker {\n display: grid;\n gap: var(--mantine-spacing-sm);\n}\n\n.timeWrapper {\n display: flex;\n align-items: stretch;\n margin-top: var(--mantine-spacing-md);\n}\n\n.timeInput {\n flex: 1;\n margin-inline-end: var(--mantine-spacing-md);\n}\n\n.presetsList {\n display: flex;\n flex-direction: column;\n border-inline-end: 1px solid var(--mantine-color-default-border);\n padding-inline-end: 0.5em;\n margin-inline-end: 0.5em;\n}\n\n.presetButton {\n padding: 0.52em 0.8em;\n border-radius: var(--mantine-radius-default);\n font-size: inherit;\n white-space: nowrap;\n}\n\n.presetButton:hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.timePickerPresetsGroup {\n margin-bottom: var(--mantine-spacing-xs);\n}\n\n.dropdown {\n padding: var(--mantine-spacing-xs);\n}\n\n.placeholder {\n color: var(--mantine-color-placeholder);\n}\n\n.timeGridControl {\n text-align: center;\n padding-inline: 1em;\n padding-block: 0.25em;\n border: 1px solid var(--mantine-color-default-border);\n background-color: var(--mantine-color-default);\n color: var(--mantine-color-default-color);\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-sm);\n}\n\n.timeGridControl:not(:disabled):not([data-disabled]):not([data-active]):hover {\n background-color: var(--mantine-color-default-hover);\n}\n\n.timeGridControl[data-active] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n border-color: transparent;\n}\n\n.timeGridControl[data-active]:not(:disabled):not([data-disabled]):hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.timeGridControl:disabled,\n.timeGridControl[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.timePickerFieldsRoot {\n display: flex;\n align-items: center;\n height: 100%;\n overflow: hidden;\n}\n\n.timePickerFieldsGroup {\n display: flex;\n align-items: center;\n height: calc(var(--input-height) - 15px);\n}\n\n.timePickerField {\n width: calc(2ch + 0.3em);\n caret-color: transparent;\n font-variant-numeric: tabular-nums;\n position: relative;\n height: 100%;\n line-height: 1;\n padding-inline: 0.15em;\n border: 0;\n text-align: center;\n text-align-last: center;\n background-color: transparent;\n color: var(--input-color);\n border-radius: 2px;\n appearance: none;\n}\n\n.timePickerField[data-am-pm] {\n width: auto;\n}\n\n.timePickerField:disabled {\n cursor: not-allowed;\n}\n\n.timePickerField::selection {\n background-color: transparent;\n}\n\n.timePickerField::placeholder {\n opacity: 1;\n color: inherit;\n}\n\n.timePickerField:focus {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n outline: 0;\n}\n\n.timePickerField:focus::placeholder {\n color: var(--mantine-color-white);\n}\n\n.timePickerDropdown {\n padding: 4px;\n}\n\n.timePickerControlsListGroup {\n display: flex;\n gap: 4px;\n}\n\n.timePickerControlsList {\n display: flex;\n flex-direction: column;\n}\n\n.timePickerControl {\n text-align: center;\n min-width: 2.5em;\n width: max-content;\n height: 2em;\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-sm);\n}\n\n.timePickerControl[data-active] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n}\n\n.timePickerControl:not([data-active]):hover {\n color: var(--mantine-color-bright);\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.miniCalendarRoot {\n width: fit-content;\n display: flex;\n align-items: center;\n font-size: var(--mantine-font-size-sm);\n}\n\n.miniCalendarDays {\n display: flex;\n font-size: inherit;\n}\n\n.miniCalendarDay {\n display: flex;\n min-width: 3em;\n gap: 0.5em;\n font-size: inherit;\n flex-direction: column;\n align-items: center;\n line-height: 1;\n padding: 0.75em;\n border-radius: var(--mantine-radius-default);\n}\n\n.miniCalendarDay[data-selected] {\n color: var(--mantine-primary-color-contrast);\n background-color: var(--mantine-primary-color-filled);\n}\n\n.miniCalendarDay[data-selected]:not([data-disabled]):hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.miniCalendarDay[data-disabled] {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.miniCalendarDay:not([data-disabled]):not([data-selected]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.miniCalendarDayMonth {\n font-size: 0.75em;\n font-weight: var(--mantine-font-weight-medium);\n opacity: 0.65;\n}\n\n.miniCalendarDayNumber {\n font-size: 0.9em;\n font-weight: var(--mantine-font-weight-medium);\n}\n\n.miniCalendarControl {\n align-self: stretch;\n font-size: inherit;\n width: 2em;\n border-radius: var(--mantine-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mantine-color-bright);\n}\n\n.miniCalendarControl[data-disabled] {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.miniCalendarControl:not([data-disabled]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.miniCalendarControl [data-chevron] {\n font-size: inherit;\n width: 60%;\n}\n\n.miniCalendarControl[data-direction='previous'] [data-chevron] {\n transform: rotate(90deg);\n}\n\n.miniCalendarControl[data-direction='next'] [data-chevron] {\n transform: rotate(-90deg);\n}\n","import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n provide,\n ref,\n watch,\n type CSSProperties,\n type InjectionKey,\n type PropType,\n type VNodeChild,\n} from 'vue'\nimport { useUncontrolled } from '@mantine-vue/hooks'\nimport {\n AccordionChevron,\n ActionIcon,\n Box,\n Button,\n CheckIcon,\n CloseButton,\n Group,\n InputBase,\n Modal,\n Popover,\n ScrollArea,\n SimpleGrid,\n Text,\n UnstyledButton,\n type MantineSize,\n} from '@mantine-vue/core'\nimport classes from './Dates.module.css'\n\ndayjs.extend(customParseFormat)\n\nexport type DateStringValue = string\nexport type DateValue = DateStringValue | null\nexport type DatesRangeValue = [DateValue, DateValue]\nexport type DatePickerType = 'default' | 'multiple' | 'range'\nexport type CalendarLevel = 'month' | 'year' | 'decade'\nexport type DatePickerValue<Type extends DatePickerType = 'default'> = Type extends 'range'\n ? DatesRangeValue\n : Type extends 'multiple'\n ? DateStringValue[]\n : DateValue\nexport type DatePickerValueType = DateValue | DateStringValue[] | DatesRangeValue\nexport type ControlKeydownPayload = {\n rowIndex: number\n cellIndex: number\n event: KeyboardEvent\n controlsRef: HTMLElement[][]\n}\nexport type DateFormatter = (payload: {\n type: DatePickerType\n date: DatePickerValueType\n locale?: string\n format: string\n labelSeparator: string\n}) => string\n\nexport interface DatesProviderSettings {\n locale?: string\n firstDayOfWeek?: number\n weekendDays?: number[]\n timezone?: string\n consistentWeeks?: boolean\n}\n\nconst DATES_PROVIDER_DEFAULT_SETTINGS: Required<DatesProviderSettings> = {\n locale: 'en',\n firstDayOfWeek: 1,\n weekendDays: [0, 6],\n timezone: 'UTC',\n consistentWeeks: false,\n}\n\nconst DatesContextKey: InjectionKey<Required<DatesProviderSettings>> = Symbol('DatesContext')\n\nexport const DatesProvider = defineComponent({\n name: 'DatesProvider',\n props: {\n settings: { type: Object as PropType<DatesProviderSettings>, default: () => ({}) },\n },\n setup(props, { slots }) {\n const settings = computed(() => ({ ...DATES_PROVIDER_DEFAULT_SETTINGS, ...props.settings }))\n provide(DatesContextKey, settings.value)\n watch(settings, (value) => provide(DatesContextKey, value))\n return () => slots.default?.()\n },\n})\n\nexport function useDatesContext() {\n return inject(DatesContextKey, DATES_PROVIDER_DEFAULT_SETTINGS)\n}\n\nfunction normalizeDate(value: Date | string | null | undefined): DateStringValue | null {\n if (value == null || value === '') {\n return null\n }\n\n const parsed = dayjs(value)\n return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null\n}\n\nexport function toDateString(value: Date | string | null | undefined): DateStringValue | null {\n return normalizeDate(value)\n}\n\nexport function shiftTimezone<T>(direction: 'add' | 'remove', date: T, timezone?: string): T {\n void direction\n void timezone\n return date\n}\n\nexport function getTimezoneOffset(date: Date | string, timezone?: string) {\n void timezone\n return new Date(date).getTimezoneOffset()\n}\n\nexport function clampDate(date: DateStringValue, minDate?: Date | string, maxDate?: Date | string) {\n const value = dayjs(date)\n const min = normalizeDate(minDate)\n const max = normalizeDate(maxDate)\n\n if (min && value.isBefore(min, 'day')) {\n return min\n }\n\n if (max && value.isAfter(max, 'day')) {\n return max\n }\n\n return value.format('YYYY-MM-DD')\n}\n\nexport function getDefaultClampedDate({\n minDate,\n maxDate,\n defaultDate,\n}: {\n minDate?: Date | string\n maxDate?: Date | string\n defaultDate?: Date | string\n} = {}) {\n return clampDate(normalizeDate(defaultDate) || dayjs().format('YYYY-MM-DD'), minDate, maxDate)\n}\n\nexport function assignTime(date: Date | string, time: Date | string) {\n const timeValue = dayjs(time)\n return dayjs(date)\n .hour(timeValue.hour())\n .minute(timeValue.minute())\n .second(timeValue.second())\n .millisecond(timeValue.millisecond())\n .toDate()\n}\n\nexport function getFormattedDate({\n date,\n format = 'MMMM D, YYYY',\n locale,\n}: {\n date: Date | string\n format?: string\n locale?: string\n}) {\n return dayjs(date)\n .locale(locale || 'en')\n .format(format)\n}\n\nexport function isSameDate(\n a: Date | string | null | undefined,\n b: Date | string | null | undefined,\n) {\n if (!a || !b) return false\n return dayjs(a).isSame(b, 'day')\n}\n\nexport function isSameMonth(a: Date | string, b: Date | string) {\n return dayjs(a).isSame(b, 'month')\n}\n\nexport function isSameYear(a: Date | string, b: Date | string) {\n return dayjs(a).isSame(b, 'year')\n}\n\nexport function getStartOfWeek(date: Date | string, firstDayOfWeek = 1) {\n const value = dayjs(date)\n const diff = (value.day() - firstDayOfWeek + 7) % 7\n return value.subtract(diff, 'day').format('YYYY-MM-DD')\n}\n\nexport function getEndOfWeek(date: Date | string, firstDayOfWeek = 1) {\n return dayjs(getStartOfWeek(date, firstDayOfWeek)).add(6, 'day').format('YYYY-MM-DD')\n}\n\nexport function getWeekNumber(date: Date | string) {\n const current = dayjs(date)\n const yearStart = dayjs(`${current.year()}-01-01`)\n return Math.ceil((current.diff(yearStart, 'day') + yearStart.day() + 1) / 7)\n}\n\nexport function handleControlKeyDown({\n rowIndex,\n cellIndex,\n event,\n controlsRef,\n}: ControlKeydownPayload) {\n const rows = controlsRef.length\n const cols = controlsRef[0]?.length || 0\n let nextRow = rowIndex\n let nextCell = cellIndex\n\n if (event.key === 'ArrowRight') nextCell += 1\n if (event.key === 'ArrowLeft') nextCell -= 1\n if (event.key === 'ArrowDown') nextRow += 1\n if (event.key === 'ArrowUp') nextRow -= 1\n if (event.key === 'Home') nextCell = 0\n if (event.key === 'End') nextCell = cols - 1\n\n if (nextCell < 0) {\n nextCell = cols - 1\n nextRow -= 1\n }\n\n if (nextCell >= cols) {\n nextCell = 0\n nextRow += 1\n }\n\n const next = controlsRef[(nextRow + rows) % rows]?.[(nextCell + cols) % cols]\n if (next) {\n event.preventDefault()\n next.focus()\n }\n}\n\nfunction focusAdjacentControl(\n refs: (HTMLElement | null | undefined)[][],\n rowIndex: number,\n cellIndex: number,\n direction: 'up' | 'down' | 'left' | 'right',\n) {\n const isFocusable = (el: HTMLElement | null | undefined) =>\n !!el &&\n !(el as any).disabled &&\n !el.hasAttribute('data-hidden') &&\n !el.hasAttribute('data-outside')\n\n let nextRow = rowIndex\n let nextCell = cellIndex\n\n for (let i = 0; i < 60; i += 1) {\n if (direction === 'up') nextRow -= 1\n if (direction === 'down') nextRow += 1\n if (direction === 'left') {\n nextCell -= 1\n if (nextCell < 0) {\n nextRow -= 1\n nextCell = (refs[nextRow]?.length || 1) - 1\n }\n }\n if (direction === 'right') {\n nextCell += 1\n if (nextCell >= (refs[nextRow]?.length || 0)) {\n nextRow += 1\n nextCell = 0\n }\n }\n\n const row = refs[nextRow]\n if (!row) return\n const el = row[nextCell]\n if (el === undefined) return\n if (isFocusable(el)) {\n el!.focus()\n return\n }\n }\n}\n\nfunction keyToDirection(key: string): 'up' | 'down' | 'left' | 'right' | null {\n if (key === 'ArrowUp') return 'up'\n if (key === 'ArrowDown') return 'down'\n if (key === 'ArrowLeft') return 'left'\n if (key === 'ArrowRight') return 'right'\n return null\n}\n\n// A ref callback used on grid cells (Day/PickerControl) to capture the real\n// DOM node into a [row][cell] array - components resolve to their instance\n// proxy (`.$el`), not the DOM node directly.\nfunction setGridRef(\n refs: (HTMLElement | null | undefined)[][],\n rowIndex: number,\n cellIndex: number,\n node: any,\n) {\n if (!refs[rowIndex]) refs[rowIndex] = []\n refs[rowIndex][cellIndex] = node?.$el ?? node ?? undefined\n}\n\nfunction getMonthDays(month: DateStringValue, firstDayOfWeek: number, consistentWeeks = false) {\n const startOfMonth = dayjs(month).startOf('month')\n const start = dayjs(getStartOfWeek(startOfMonth.format('YYYY-MM-DD'), firstDayOfWeek))\n const weeks = consistentWeeks\n ? 6\n : Math.ceil((startOfMonth.daysInMonth() + startOfMonth.day()) / 7)\n\n return Array.from({ length: weeks }, (_, week) =>\n Array.from({ length: 7 }, (__, day) => start.add(week * 7 + day, 'day').format('YYYY-MM-DD')),\n )\n}\n\nfunction isBeforeMin(date: DateStringValue, minDate?: Date | string) {\n const min = normalizeDate(minDate)\n return !!min && dayjs(date).isBefore(min, 'day')\n}\n\nfunction isAfterMax(date: DateStringValue, maxDate?: Date | string) {\n const max = normalizeDate(maxDate)\n return !!max && dayjs(date).isAfter(max, 'day')\n}\n\nfunction formatValue(\n value: DatePickerValueType,\n type: DatePickerType,\n format: string,\n locale?: string,\n labelSeparator = '–',\n valueFormatter?: DateFormatter,\n) {\n if (valueFormatter) {\n return valueFormatter({ type, date: value, locale, format, labelSeparator })\n }\n\n if (type === 'multiple') {\n return Array.isArray(value)\n ? value\n .map((item) =>\n dayjs(item)\n .locale(locale || 'en')\n .format(format),\n )\n .join(', ')\n : ''\n }\n\n if (type === 'range') {\n const [start, end] = Array.isArray(value) ? (value as DatesRangeValue) : [null, null]\n if (!start && !end) return ''\n if (start && !end)\n return `${dayjs(start)\n .locale(locale || 'en')\n .format(format)} ${labelSeparator} `\n if (!start && end)\n return `${labelSeparator} ${dayjs(end)\n .locale(locale || 'en')\n .format(format)}`\n return `${dayjs(start)\n .locale(locale || 'en')\n .format(format)} ${labelSeparator} ${dayjs(end)\n .locale(locale || 'en')\n .format(format)}`\n }\n\n return value\n ? dayjs(value as DateStringValue)\n .locale(locale || 'en')\n .format(format)\n : ''\n}\n\nfunction getMonthLabel(date: DateStringValue, format = 'MMMM YYYY', locale?: string) {\n return dayjs(date)\n .locale(locale || 'en')\n .format(format)\n}\n\nfunction getYearRange(date: DateStringValue) {\n const year = dayjs(date).year()\n const start = year - (year % 10)\n return Array.from({ length: 10 }, (_, index) =>\n dayjs(`${start + index}-01-01`).format('YYYY-MM-DD'),\n )\n}\n\nfunction getDecadeLabel(date: DateStringValue) {\n const years = getYearRange(date)\n return `${dayjs(years[0]).year()} – ${dayjs(years[years.length - 1]).year()}`\n}\n\nexport const Day = defineComponent({\n name: 'Day',\n inheritAttrs: false,\n props: {\n date: { type: String, required: true },\n size: { type: [String, Number], default: 'sm' },\n static: { type: Boolean, default: false },\n weekend: Boolean,\n outside: Boolean,\n selected: Boolean,\n hidden: Boolean,\n inRange: Boolean,\n firstInRange: Boolean,\n lastInRange: Boolean,\n highlightToday: Boolean,\n fullWidth: Boolean,\n disabled: Boolean,\n renderDay: Function as PropType<(date: DateStringValue) => VNodeChild>,\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n unstyled: Boolean,\n },\n setup(props, { attrs }) {\n return () =>\n h(\n UnstyledButton,\n {\n ...attrs,\n component: props.static ? 'div' : 'button',\n class: [classes.day, (attrs as any).class],\n disabled: props.disabled,\n style: [{ display: props.hidden ? 'none' : undefined }, (attrs as any).style],\n 'data-today': dayjs(props.date).isSame(new Date(), 'day') || undefined,\n 'data-hidden': props.hidden || undefined,\n 'data-highlight-today': props.highlightToday || undefined,\n 'data-disabled': props.disabled || undefined,\n 'data-weekend': (!props.disabled && !props.outside && props.weekend) || undefined,\n 'data-outside': (!props.disabled && props.outside) || undefined,\n 'data-selected': (!props.disabled && props.selected) || undefined,\n 'data-in-range': (props.inRange && !props.disabled) || undefined,\n 'data-first-in-range': (props.firstInRange && !props.disabled) || undefined,\n 'data-last-in-range': (props.lastInRange && !props.disabled) || undefined,\n 'data-static': props.static || undefined,\n 'data-full-width': props.fullWidth || undefined,\n },\n () => props.renderDay?.(props.date) || dayjs(props.date).date(),\n )\n },\n})\n\nexport const PickerControl = defineComponent({\n name: 'PickerControl',\n inheritAttrs: false,\n props: {\n selected: Boolean,\n disabled: Boolean,\n inRange: Boolean,\n firstInRange: Boolean,\n lastInRange: Boolean,\n withCellSpacing: { type: Boolean, default: true },\n fullWidth: Boolean,\n },\n setup(props, { attrs, slots }) {\n return () =>\n h(\n UnstyledButton,\n {\n ...attrs,\n class: [classes.pickerControl, (attrs as any).class],\n disabled: props.disabled,\n 'data-selected': (props.selected && !props.disabled) || undefined,\n 'data-disabled': props.disabled || undefined,\n 'data-in-range': (props.inRange && !props.disabled && !props.selected) || undefined,\n 'data-first-in-range': (props.firstInRange && !props.disabled) || undefined,\n 'data-last-in-range': (props.lastInRange && !props.disabled) || undefined,\n 'data-with-cell-spacing': props.withCellSpacing || undefined,\n 'data-full-width': props.fullWidth || undefined,\n },\n () => slots.default?.(),\n )\n },\n})\n\nexport const CalendarHeader = defineComponent({\n name: 'CalendarHeader',\n props: {\n label: { type: String, required: true },\n hasNextLevel: { type: Boolean, default: true },\n withNext: { type: Boolean, default: true },\n withPrevious: { type: Boolean, default: true },\n nextDisabled: Boolean,\n previousDisabled: Boolean,\n nextLabel: { type: String, default: 'Next' },\n previousLabel: { type: String, default: 'Previous' },\n levelControlAriaLabel: String,\n fullWidth: Boolean,\n onNext: Function as PropType<() => void>,\n onPrevious: Function as PropType<() => void>,\n onLevelClick: Function as PropType<() => void>,\n },\n setup(props) {\n return () => {\n const previousControl = props.withPrevious\n ? h(\n UnstyledButton,\n {\n class: classes.calendarHeaderControl,\n 'data-direction': 'previous',\n 'aria-label': props.previousLabel,\n onClick: props.onPrevious,\n disabled: props.previousDisabled,\n 'data-disabled': props.previousDisabled || undefined,\n },\n () =>\n h(AccordionChevron, {\n class: classes.calendarHeaderControlIcon,\n 'data-direction': 'previous',\n size: '45%',\n }),\n )\n : null\n\n const levelControl = h(\n UnstyledButton,\n {\n component: props.hasNextLevel ? 'button' : 'div',\n class: classes.calendarHeaderLevel,\n onClick: props.hasNextLevel ? props.onLevelClick : undefined,\n disabled: !props.hasNextLevel,\n 'data-static': !props.hasNextLevel || undefined,\n 'aria-label': props.levelControlAriaLabel,\n },\n () => props.label,\n )\n\n const nextControl = props.withNext\n ? h(\n UnstyledButton,\n {\n class: classes.calendarHeaderControl,\n 'data-direction': 'next',\n 'aria-label': props.nextLabel,\n onClick: props.onNext,\n disabled: props.nextDisabled,\n 'data-disabled': props.nextDisabled || undefined,\n },\n () =>\n h(AccordionChevron, {\n class: classes.calendarHeaderControlIcon,\n 'data-direction': 'next',\n size: '45%',\n }),\n )\n : null\n\n return h(\n 'div',\n { class: classes.calendarHeader, 'data-full-width': props.fullWidth || undefined },\n [previousControl, levelControl, nextControl],\n )\n }\n },\n})\n\nexport const WeekdaysRow = defineComponent({\n name: 'WeekdaysRow',\n props: {\n firstDayOfWeek: Number,\n weekendDays: Array as PropType<number[]>,\n locale: String,\n weekdayFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'dd',\n },\n withWeekNumbers: Boolean,\n },\n setup(props) {\n const ctx = useDatesContext()\n return () => {\n const first = props.firstDayOfWeek ?? ctx.firstDayOfWeek\n const days = Array.from({ length: 7 }, (_, index) =>\n dayjs('2024-01-07').add((first + index) % 7, 'day'),\n )\n return h('tr', { class: classes.weekdaysRow }, [\n props.withWeekNumbers ? h('th', { class: classes.weekday }) : null,\n ...days.map((date) =>\n h(\n 'th',\n {\n class: classes.weekday,\n 'data-weekend':\n (props.weekendDays ?? ctx.weekendDays).includes(date.day()) || undefined,\n },\n typeof props.weekdayFormat === 'function'\n ? props.weekdayFormat(date.format('YYYY-MM-DD'))\n : date.locale(props.locale || ctx.locale).format(props.weekdayFormat),\n ),\n ),\n ])\n }\n },\n})\n\nexport const Month = defineComponent({\n name: 'Month',\n props: {\n month: { type: String, default: () => dayjs().format('YYYY-MM-DD') },\n value: { type: [String, Array, null] as PropType<DatePickerValueType>, default: null },\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n firstDayOfWeek: Number,\n weekendDays: Array as PropType<number[]>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n excludeDate: Function as PropType<(date: DateStringValue) => boolean>,\n renderDay: Function as PropType<(date: DateStringValue) => VNodeChild>,\n hideOutsideDates: Boolean,\n hideWeekdays: Boolean,\n getDayProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n getDayAriaLabel: Function as PropType<(date: DateStringValue) => string>,\n onDayClick: Function as PropType<(date: DateStringValue) => void>,\n onDayMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n withCellSpacing: { type: Boolean, default: true },\n highlightToday: Boolean,\n withWeekNumbers: Boolean,\n static: Boolean,\n fullWidth: Boolean,\n },\n setup(props) {\n const ctx = useDatesContext()\n const hovered = ref<string | null>(null)\n\n const dayRefs: (HTMLElement | null | undefined)[][] = []\n\n const isSelected = (date: DateStringValue) => {\n if (props.type === 'multiple') return Array.isArray(props.value) && props.value.includes(date)\n if (props.type === 'range') {\n const [start, end] = Array.isArray(props.value)\n ? (props.value as DatesRangeValue)\n : [null, null]\n return isSameDate(date, start) || isSameDate(date, end)\n }\n return isSameDate(date, props.value as DateValue)\n }\n\n const isInRange = (date: DateStringValue) => {\n if (props.type !== 'range' || !Array.isArray(props.value)) return false\n const [start, end] = props.value as DatesRangeValue\n const rangeEnd = end || hovered.value\n if (!start || !rangeEnd) return false\n return dayjs(date).isAfter(start, 'day') && dayjs(date).isBefore(rangeEnd, 'day')\n }\n\n return () => {\n const first = props.firstDayOfWeek ?? ctx.firstDayOfWeek\n const rows = getMonthDays(props.month, first, ctx.consistentWeeks)\n\n // Only one day in the whole grid is in the tab order (roving tabindex) -\n // prefer the selected date, then today, then the first enabled date.\n const flatDates = rows.flat()\n const isEnabled = (date: DateStringValue) => {\n const outside = !dayjs(date).isSame(props.month, 'month')\n const disabled =\n isBeforeMin(date, props.minDate) ||\n isAfterMax(date, props.maxDate) ||\n props.excludeDate?.(date) ||\n props.getDayProps?.(date)?.disabled\n return !disabled && (!props.hideOutsideDates || !outside)\n }\n const enabledDates = flatDates.filter(isEnabled)\n const dateInTabOrder =\n enabledDates.find((date) => isSelected(date)) ??\n enabledDates.find((date) => dayjs().isSame(date, 'date')) ??\n enabledDates[0]\n\n return h('table', { class: classes.month, 'data-full-width': props.fullWidth || undefined }, [\n props.hideWeekdays\n ? null\n : h('thead', [\n h(WeekdaysRow, {\n firstDayOfWeek: first,\n weekendDays: props.weekendDays,\n withWeekNumbers: props.withWeekNumbers,\n }),\n ]),\n h(\n 'tbody',\n rows.map((week, rowIndex) =>\n h('tr', { class: classes.monthRow }, [\n props.withWeekNumbers\n ? h('td', { class: classes.weekNumber }, getWeekNumber(week[0]))\n : null,\n ...week.map((date, cellIndex) => {\n const outside = !dayjs(date).isSame(props.month, 'month')\n const disabled =\n isBeforeMin(date, props.minDate) ||\n isAfterMax(date, props.maxDate) ||\n props.excludeDate?.(date)\n const dayProps = props.getDayProps?.(date) || {}\n const selected = isSelected(date)\n const [start, end] =\n props.type === 'range' && Array.isArray(props.value)\n ? (props.value as DatesRangeValue)\n : [null, null]\n\n return h(\n 'td',\n {\n class: classes.monthCell,\n 'data-with-spacing': props.withCellSpacing || undefined,\n },\n [\n h(Day, {\n ...dayProps,\n date,\n static: props.static,\n disabled: disabled || dayProps.disabled,\n weekend: (props.weekendDays ?? ctx.weekendDays).includes(dayjs(date).day()),\n outside,\n hidden: props.hideOutsideDates && outside,\n selected,\n inRange: isInRange(date),\n firstInRange: isSameDate(date, start),\n lastInRange: isSameDate(date, end),\n highlightToday: props.highlightToday,\n fullWidth: props.fullWidth,\n renderDay: props.renderDay,\n 'aria-label': props.getDayAriaLabel?.(date),\n tabindex: props.static ? undefined : date === dateInTabOrder ? 0 : -1,\n // Lets a focus-trapped Popover (e.g. DatePickerInput's\n // dropdown) land directly on the selected date instead\n // of the first tabbable element.\n 'data-autofocus': selected || undefined,\n ref: (node: any) => setGridRef(dayRefs, rowIndex, cellIndex, node),\n onClick: (event: MouseEvent) => {\n dayProps.onClick?.(event)\n if (!disabled && !props.static) props.onDayClick?.(date)\n },\n onMouseenter: (event: MouseEvent) => {\n hovered.value = date\n dayProps.onMouseenter?.(event)\n props.onDayMouseEnter?.(date)\n },\n onKeydown: (event: KeyboardEvent) => {\n dayProps.onKeydown?.(event)\n const direction = keyToDirection(event.key)\n if (direction) {\n event.preventDefault()\n focusAdjacentControl(dayRefs, rowIndex, cellIndex, direction)\n }\n },\n }),\n ],\n )\n }),\n ]),\n ),\n ),\n ])\n }\n },\n})\n\nexport const MonthsList = defineComponent({\n name: 'MonthsList',\n props: {\n year: { type: String, default: () => dayjs().format('YYYY-MM-DD') },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n locale: String,\n monthsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'MMM',\n },\n getMonthControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n onMonthSelect: Function as PropType<(date: DateStringValue) => void>,\n onMonthMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n fullWidth: Boolean,\n },\n setup(props) {\n const controlRefs: (HTMLElement | null | undefined)[][] = []\n return () => {\n const months = Array.from({ length: 12 }, (_, index) =>\n dayjs(props.year).month(index).startOf('month').format('YYYY-MM-DD'),\n )\n const isEnabled = (date: DateStringValue) =>\n !(\n (props.minDate && dayjs(date).endOf('month').isBefore(props.minDate, 'day')) ||\n (props.maxDate && dayjs(date).startOf('month').isAfter(props.maxDate, 'day')) ||\n props.getMonthControlProps?.(date)?.disabled\n )\n const isSelected = (date: DateStringValue) =>\n Array.isArray(props.value)\n ? (props.value as DateStringValue[]).some((item) => dayjs(item).isSame(date, 'month'))\n : !!props.value && dayjs(props.value as any).isSame(date, 'month')\n const enabledMonths = months.filter(isEnabled)\n const monthInTabOrder =\n enabledMonths.find(isSelected) ??\n enabledMonths.find((date) => dayjs().isSame(date, 'month')) ??\n enabledMonths[0]\n\n return h(\n SimpleGrid,\n {\n cols: 3,\n spacing: 4,\n class: classes.controlsGrid,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n months.map((date, index) => {\n const rowIndex = Math.floor(index / 3)\n const cellIndex = index % 3\n const disabled = !isEnabled(date)\n const controlProps = props.getMonthControlProps?.(date) || {}\n return h(\n PickerControl,\n {\n fullWidth: props.fullWidth,\n ...controlProps,\n disabled: disabled || controlProps.disabled,\n selected: isSelected(date),\n tabindex: date === monthInTabOrder ? 0 : -1,\n 'data-autofocus': isSelected(date) || undefined,\n ref: (node: any) => setGridRef(controlRefs, rowIndex, cellIndex, node),\n onClick: (event: MouseEvent) => {\n controlProps.onClick?.(event)\n if (!disabled) props.onMonthSelect?.(date)\n },\n onMouseenter: (event: MouseEvent) => {\n controlProps.onMouseenter?.(event)\n props.onMonthMouseEnter?.(date)\n },\n onKeydown: (event: KeyboardEvent) => {\n controlProps.onKeydown?.(event)\n const direction = keyToDirection(event.key)\n if (direction) {\n event.preventDefault()\n focusAdjacentControl(controlRefs, rowIndex, cellIndex, direction)\n }\n },\n },\n () =>\n typeof props.monthsListFormat === 'function'\n ? props.monthsListFormat(date)\n : dayjs(date)\n .locale(props.locale || 'en')\n .format(props.monthsListFormat),\n )\n }),\n )\n }\n },\n})\n\nexport const YearsList = defineComponent({\n name: 'YearsList',\n props: {\n decade: { type: String, default: () => dayjs().format('YYYY-MM-DD') },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n yearsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'YYYY',\n },\n getYearControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n onYearSelect: Function as PropType<(date: DateStringValue) => void>,\n onYearMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n fullWidth: Boolean,\n },\n setup(props) {\n const controlRefs: (HTMLElement | null | undefined)[][] = []\n return () => {\n const years = getYearRange(props.decade)\n const isEnabled = (date: DateStringValue) =>\n !(\n (props.minDate && dayjs(date).endOf('year').isBefore(props.minDate, 'day')) ||\n (props.maxDate && dayjs(date).startOf('year').isAfter(props.maxDate, 'day')) ||\n props.getYearControlProps?.(date)?.disabled\n )\n const isSelected = (date: DateStringValue) =>\n Array.isArray(props.value)\n ? (props.value as DateStringValue[]).some((item) => dayjs(item).isSame(date, 'year'))\n : !!props.value && dayjs(props.value as any).isSame(date, 'year')\n const enabledYears = years.filter(isEnabled)\n const yearInTabOrder =\n enabledYears.find(isSelected) ??\n enabledYears.find((date) => dayjs().isSame(date, 'year')) ??\n enabledYears[0]\n\n return h(\n SimpleGrid,\n {\n cols: 3,\n spacing: 4,\n class: classes.controlsGrid,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n years.map((date, index) => {\n const rowIndex = Math.floor(index / 3)\n const cellIndex = index % 3\n const disabled = !isEnabled(date)\n const controlProps = props.getYearControlProps?.(date) || {}\n return h(\n PickerControl,\n {\n fullWidth: props.fullWidth,\n ...controlProps,\n disabled: disabled || controlProps.disabled,\n selected: isSelected(date),\n tabindex: date === yearInTabOrder ? 0 : -1,\n 'data-autofocus': isSelected(date) || undefined,\n ref: (node: any) => setGridRef(controlRefs, rowIndex, cellIndex, node),\n onClick: (event: MouseEvent) => {\n controlProps.onClick?.(event)\n if (!disabled) props.onYearSelect?.(date)\n },\n onMouseenter: (event: MouseEvent) => {\n controlProps.onMouseenter?.(event)\n props.onYearMouseEnter?.(date)\n },\n onKeydown: (event: KeyboardEvent) => {\n controlProps.onKeydown?.(event)\n const direction = keyToDirection(event.key)\n if (direction) {\n event.preventDefault()\n focusAdjacentControl(controlRefs, rowIndex, cellIndex, direction)\n }\n },\n },\n () =>\n typeof props.yearsListFormat === 'function'\n ? props.yearsListFormat(date)\n : dayjs(date).format(props.yearsListFormat),\n )\n }),\n )\n }\n },\n})\n\nfunction getNextLevel(level: CalendarLevel, direction: 'up' | 'down'): CalendarLevel {\n const order: CalendarLevel[] = ['month', 'year', 'decade']\n return order[\n Math.max(0, Math.min(order.length - 1, order.indexOf(level) + (direction === 'up' ? 1 : -1)))\n ]\n}\n\nfunction clampLevel(\n level: CalendarLevel | undefined,\n minLevel: CalendarLevel | undefined,\n maxLevel: CalendarLevel | undefined,\n): CalendarLevel {\n const order: CalendarLevel[] = ['month', 'year', 'decade']\n const toNumber = (value: CalendarLevel | undefined, fallback: number) =>\n value ? order.indexOf(value) : fallback\n const clamped = Math.max(\n toNumber(minLevel, 0),\n Math.min(toNumber(maxLevel, 2), toNumber(level, 0)),\n )\n return order[clamped]\n}\n\nexport const Calendar = defineComponent({\n name: 'Calendar',\n props: {\n defaultLevel: String as PropType<CalendarLevel>,\n level: String as PropType<CalendarLevel>,\n onLevelChange: Function as PropType<(level: CalendarLevel) => void>,\n maxLevel: { type: String as PropType<CalendarLevel>, default: 'decade' },\n minLevel: { type: String as PropType<CalendarLevel>, default: 'month' },\n defaultDate: [String, Date] as PropType<string | Date>,\n date: [String, Date] as PropType<string | Date>,\n onDateChange: Function as PropType<(date: DateStringValue) => void>,\n numberOfColumns: { type: Number, default: 1 },\n columnsToScroll: Number,\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n locale: String,\n firstDayOfWeek: Number,\n weekendDays: Array as PropType<number[]>,\n renderDay: Function as PropType<(date: DateStringValue) => VNodeChild>,\n getDayProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n getDayAriaLabel: Function as PropType<(date: DateStringValue) => string>,\n getMonthControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n getYearControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n excludeDate: Function as PropType<(date: DateStringValue) => boolean>,\n hideOutsideDates: Boolean,\n hideWeekdays: Boolean,\n monthLabelFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'MMMM YYYY',\n },\n yearLabelFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'YYYY',\n },\n decadeLabelFormat: Function as PropType<\n (start: DateStringValue, end: DateStringValue) => string\n >,\n monthsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'MMM',\n },\n yearsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'YYYY',\n },\n onYearSelect: Function as PropType<(date: DateStringValue) => void>,\n onMonthSelect: Function as PropType<(date: DateStringValue) => void>,\n onMonthMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n onYearMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n onDayClick: Function as PropType<(date: DateStringValue) => void>,\n withCellSpacing: { type: Boolean, default: true },\n highlightToday: Boolean,\n withWeekNumbers: Boolean,\n static: Boolean,\n fullWidth: Boolean,\n },\n setup(props, { attrs }) {\n const [_level, setLevel] = useUncontrolled<CalendarLevel>({\n value: computed(() =>\n props.level === undefined\n ? undefined\n : clampLevel(props.level, props.minLevel, props.maxLevel),\n ),\n defaultValue:\n props.defaultLevel === undefined\n ? undefined\n : clampLevel(props.defaultLevel, props.minLevel, props.maxLevel),\n finalValue: clampLevel(undefined, props.minLevel, props.maxLevel),\n onChange: (value) => props.onLevelChange?.(value),\n })\n const [_date, setDate] = useUncontrolled<DateStringValue>({\n value: computed(() => normalizeDate(props.date) || undefined),\n defaultValue: normalizeDate(props.defaultDate) || undefined,\n finalValue: getDefaultClampedDate({ minDate: props.minDate, maxDate: props.maxDate }),\n onChange: (value) => props.onDateChange?.(value),\n })\n\n const scroll = props.columnsToScroll || props.numberOfColumns || 1\n const updateDate = (amount: number, unit: 'month' | 'year') => {\n setDate(dayjs(_date.value).add(amount, unit).format('YYYY-MM-DD'))\n }\n\n return () =>\n h(\n Box,\n {\n ...attrs,\n class: [classes.calendar, (attrs as any).class],\n 'data-calendar': true,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n Array.from({ length: props.numberOfColumns || 1 }, (_, column) => {\n const currentDate = dayjs(_date.value)\n .add(\n column * scroll,\n _level.value === 'month' ? 'month' : _level.value === 'year' ? 'year' : 'year',\n )\n .format('YYYY-MM-DD')\n if (_level.value === 'month') {\n return h('div', { class: classes.calendarLevel }, [\n h(CalendarHeader, {\n label:\n typeof props.monthLabelFormat === 'function'\n ? props.monthLabelFormat(currentDate)\n : getMonthLabel(currentDate, props.monthLabelFormat, props.locale),\n hasNextLevel: props.maxLevel !== 'month',\n withPrevious: column === 0,\n withNext: column === (props.numberOfColumns || 1) - 1,\n fullWidth: props.fullWidth,\n onPrevious: () => updateDate(-scroll, 'month'),\n onNext: () => updateDate(scroll, 'month'),\n onLevelClick: () => setLevel(getNextLevel(_level.value, 'up')),\n }),\n h(Month, {\n month: currentDate,\n value: props.value,\n type: props.type,\n minDate: props.minDate,\n maxDate: props.maxDate,\n firstDayOfWeek: props.firstDayOfWeek,\n weekendDays: props.weekendDays,\n renderDay: props.renderDay,\n getDayProps: props.getDayProps,\n getDayAriaLabel: props.getDayAriaLabel,\n excludeDate: props.excludeDate,\n hideOutsideDates: props.hideOutsideDates,\n hideWeekdays: props.hideWeekdays,\n withCellSpacing: props.withCellSpacing,\n highlightToday: props.highlightToday,\n withWeekNumbers: props.withWeekNumbers,\n static: props.static,\n fullWidth: props.fullWidth,\n onDayClick: props.onDayClick,\n }),\n ])\n }\n\n if (_level.value === 'year') {\n return h('div', { class: classes.calendarLevel }, [\n h(CalendarHeader, {\n label:\n typeof props.yearLabelFormat === 'function'\n ? props.yearLabelFormat(currentDate)\n : dayjs(currentDate).format(props.yearLabelFormat),\n hasNextLevel: props.maxLevel === 'decade',\n withPrevious: column === 0,\n withNext: column === (props.numberOfColumns || 1) - 1,\n fullWidth: props.fullWidth,\n onPrevious: () => updateDate(-scroll, 'year'),\n onNext: () => updateDate(scroll, 'year'),\n onLevelClick: () => setLevel(getNextLevel(_level.value, 'up')),\n }),\n h(MonthsList, {\n year: currentDate,\n value: props.value,\n minDate: props.minDate,\n maxDate: props.maxDate,\n monthsListFormat: props.monthsListFormat,\n getMonthControlProps: props.getMonthControlProps,\n fullWidth: props.fullWidth,\n onMonthMouseEnter: props.onMonthMouseEnter,\n onMonthSelect: (date: DateStringValue) => {\n setDate(date)\n props.onMonthSelect?.(date)\n // Clamp instead of forcing 'month': for MonthPicker\n // (minLevel: 'year') this keeps the view at 'year'\n // instead of incorrectly drilling into a day grid.\n setLevel(clampLevel('month', props.minLevel, props.maxLevel))\n },\n }),\n ])\n }\n\n const years = getYearRange(currentDate)\n return h('div', { class: classes.calendarLevel }, [\n h(CalendarHeader, {\n label: props.decadeLabelFormat\n ? props.decadeLabelFormat(years[0], years[years.length - 1])\n : getDecadeLabel(currentDate),\n withPrevious: column === 0,\n withNext: column === (props.numberOfColumns || 1) - 1,\n hasNextLevel: false,\n fullWidth: props.fullWidth,\n onPrevious: () => updateDate(-10 * scroll, 'year'),\n onNext: () => updateDate(10 * scroll, 'year'),\n }),\n h(YearsList, {\n decade: currentDate,\n value: props.value,\n minDate: props.minDate,\n maxDate: props.maxDate,\n yearsListFormat: props.yearsListFormat,\n getYearControlProps: props.getYearControlProps,\n fullWidth: props.fullWidth,\n onYearMouseEnter: props.onYearMouseEnter,\n onYearSelect: (date: DateStringValue) => {\n setDate(date)\n props.onYearSelect?.(date)\n // Clamp instead of forcing 'year': for YearPicker\n // (minLevel: 'decade') this keeps the view at 'decade'\n // instead of incorrectly drilling into the months grid.\n setLevel(clampLevel('year', props.minLevel, props.maxLevel))\n },\n }),\n ])\n }),\n )\n },\n})\n\nexport const MonthLevel = Calendar\nexport const YearLevel = Calendar\nexport const DecadeLevel = Calendar\nexport const MonthLevelGroup = Calendar\nexport const YearLevelGroup = Calendar\nexport const DecadeLevelGroup = Calendar\nexport const LevelsGroup = Calendar\n\n// Granularity-aware range check for month/year range hover-previews, where\n// day-level ms precision doesn't apply - sorts the range endpoints then checks\n// date falls within [min, max] inclusive at the given unit.\nfunction isInRangeGranular(\n date: DateStringValue,\n range: [DateStringValue, DateStringValue],\n unit: 'month' | 'year',\n) {\n const sorted = [...range].sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1))\n return !dayjs(date).isBefore(sorted[0], unit) && !dayjs(date).isAfter(sorted[1], unit)\n}\n\nfunction getNextPickerValue(\n value: DatePickerValueType,\n date: DateStringValue,\n type: DatePickerType,\n sortDates = true,\n) {\n if (type === 'multiple') {\n const next = Array.isArray(value) ? [...(value as DateStringValue[])] : []\n const index = next.findIndex((item) => isSameDate(item, date))\n if (index >= 0) next.splice(index, 1)\n else next.push(date)\n return sortDates ? next.sort((a, b) => dayjs(a).valueOf() - dayjs(b).valueOf()) : next\n }\n\n if (type === 'range') {\n const [start, end] = Array.isArray(value) ? (value as DatesRangeValue) : [null, null]\n if (!start || (start && end) || dayjs(date).isBefore(start, 'day')) {\n return [date, null] as DatesRangeValue\n }\n return [start, date] as DatesRangeValue\n }\n\n return date\n}\n\nexport const DatePicker = defineComponent({\n name: 'DatePicker',\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n allowDeselect: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n presets: Array as PropType<Array<{ value: DatePickerValueType; label: string }>>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const selectDate = (date: DateStringValue) => {\n if (\n props.type === 'default' &&\n props.allowDeselect &&\n isSameDate(_value.value as DateValue, date)\n ) {\n setValue(null)\n } else {\n setValue(getNextPickerValue(_value.value, date, props.type, props.sortDates))\n }\n }\n\n // When presets are used, selecting one must also jump the Calendar's\n // displayed date/level to the preset's month. Calendar's onDateChange/\n // onLevelChange mirror its internal navigation back into these refs even\n // while `date`/`level` stay undefined (uncontrolled) - useUncontrolled\n // always invokes onChange regardless of controlled state - so passing\n // them through is a no-op until a preset click gives them a real value.\n const calendarDate = ref<DateStringValue | undefined>(undefined)\n const calendarLevel = ref<CalendarLevel | undefined>(undefined)\n const selectPreset = (value: DatePickerValueType) => {\n const date = Array.isArray(value) ? value[0] : value\n if (date != null) {\n calendarDate.value = date\n calendarLevel.value = 'month'\n }\n setValue(value)\n }\n\n return () => {\n const calendar = h(Calendar, {\n ...attrs,\n type: props.type,\n value: _value.value,\n date: calendarDate.value,\n onDateChange: (date: DateStringValue) => (calendarDate.value = date),\n level: calendarLevel.value,\n onLevelChange: (level: CalendarLevel) => (calendarLevel.value = level),\n onDayClick: selectDate,\n })\n\n if (!props.presets?.length) return calendar\n\n return h('div', { class: classes.datePickerRoot }, [\n h(\n 'div',\n { class: classes.presetsList },\n props.presets.map((preset, index) =>\n h(\n UnstyledButton,\n {\n key: index,\n class: classes.presetButton,\n onClick: () => selectPreset(preset.value),\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => preset.label,\n ),\n ),\n ),\n calendar,\n ])\n }\n },\n})\n\n// YearPicker/MonthPicker used to be thin wrappers around DatePicker with\n// just a different minLevel/defaultLevel. That doesn't work: DatePicker only\n// ever wires Calendar's `onDayClick` to update its value, but with\n// minLevel=\"year\"/\"decade\" the day grid is never reached at all - selection\n// happens via Calendar's onMonthSelect/onYearSelect instead, which DatePicker\n// never listens to. The value was therefore never updated, so nothing ever\n// appeared selected. These are real, separate implementations now, each\n// wiring the selection callback that actually fires at their level.\nexport const YearPicker = defineComponent({\n name: 'YearPicker',\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n allowDeselect: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n presets: Array as PropType<Array<{ value: DatePickerValueType; label: string }>>,\n onYearSelect: Function as PropType<(date: DateStringValue) => void>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const hoveredDate = ref<DateStringValue | null>(null)\n const selectYear = (date: DateStringValue) => {\n if (\n props.type === 'default' &&\n props.allowDeselect &&\n isSameDate(_value.value as DateValue, date)\n ) {\n setValue(null)\n } else {\n setValue(getNextPickerValue(_value.value, date, props.type, props.sortDates))\n }\n hoveredDate.value = null\n props.onYearSelect?.(date)\n }\n // For type=\"range\", PickerControl needs inRange/firstInRange/lastInRange\n // (not just `selected`) to draw the connecting highlight between the\n // start and end year. While only the start of the range is picked,\n // hovering over other years previews the highlight up to the hovered year.\n const yearControlProps = (date: DateStringValue) => {\n const external = (attrs as any).getYearControlProps?.(date) || {}\n if (props.type !== 'range' || !Array.isArray(_value.value)) return external\n const [start, end] = _value.value as DatesRangeValue\n const hovered = start && !end ? hoveredDate.value : null\n const inRange =\n start && hovered\n ? isInRangeGranular(date, [hovered, start], 'year')\n : start && end\n ? isInRangeGranular(date, [start, end], 'year')\n : false\n const firstInRange = start\n ? dayjs(date).isSame(start, 'year') && !(hovered && dayjs(hovered).isBefore(start, 'year'))\n : false\n const lastInRange = end\n ? dayjs(date).isSame(end, 'year')\n : !!(\n start &&\n hovered &&\n dayjs(hovered).isBefore(start, 'year') &&\n dayjs(date).isSame(start, 'year')\n )\n return {\n inRange,\n firstInRange,\n lastInRange,\n ...external,\n }\n }\n const calendarDate = ref<DateStringValue | undefined>(undefined)\n const selectPreset = (value: DatePickerValueType) => {\n const date = Array.isArray(value) ? value[0] : value\n if (date != null) calendarDate.value = date\n setValue(value)\n }\n\n return () => {\n const calendar = h(Calendar, {\n ...attrs,\n type: props.type,\n value: _value.value,\n date: calendarDate.value,\n onDateChange: (date: DateStringValue) => (calendarDate.value = date),\n defaultLevel: 'decade',\n minLevel: 'decade',\n onYearSelect: selectYear,\n getYearControlProps: yearControlProps,\n onYearMouseEnter: (date: DateStringValue) => {\n const [start, end] = Array.isArray(_value.value)\n ? (_value.value as DatesRangeValue)\n : [null, null]\n if (props.type === 'range' && start && !end) hoveredDate.value = date\n },\n onMouseleave: () => {\n hoveredDate.value = null\n },\n })\n\n if (!props.presets?.length) return calendar\n\n return h('div', { class: classes.datePickerRoot }, [\n h(\n 'div',\n { class: classes.presetsList },\n props.presets.map((preset, index) =>\n h(\n UnstyledButton,\n {\n key: index,\n class: classes.presetButton,\n onClick: () => selectPreset(preset.value),\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => preset.label,\n ),\n ),\n ),\n calendar,\n ])\n }\n },\n})\n\nexport const MonthPicker = defineComponent({\n name: 'MonthPicker',\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n allowDeselect: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n presets: Array as PropType<Array<{ value: DatePickerValueType; label: string }>>,\n onMonthSelect: Function as PropType<(date: DateStringValue) => void>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const hoveredDate = ref<DateStringValue | null>(null)\n const selectMonth = (date: DateStringValue) => {\n if (\n props.type === 'default' &&\n props.allowDeselect &&\n isSameDate(_value.value as DateValue, date)\n ) {\n setValue(null)\n } else {\n setValue(getNextPickerValue(_value.value, date, props.type, props.sortDates))\n }\n hoveredDate.value = null\n props.onMonthSelect?.(date)\n }\n // For type=\"range\", PickerControl needs inRange/firstInRange/lastInRange\n // (not just `selected`) to draw the connecting highlight between the\n // start and end month. While only the start of the range is picked,\n // hovering over other months previews the highlight up to the hovered month.\n const monthControlProps = (date: DateStringValue) => {\n const external = (attrs as any).getMonthControlProps?.(date) || {}\n if (props.type !== 'range' || !Array.isArray(_value.value)) return external\n const [start, end] = _value.value as DatesRangeValue\n const hovered = start && !end ? hoveredDate.value : null\n const inRange =\n start && hovered\n ? isInRangeGranular(date, [hovered, start], 'month')\n : start && end\n ? isInRangeGranular(date, [start, end], 'month')\n : false\n const firstInRange = start\n ? dayjs(date).isSame(start, 'month') &&\n !(hovered && dayjs(hovered).isBefore(start, 'month'))\n : false\n const lastInRange = end\n ? dayjs(date).isSame(end, 'month')\n : !!(\n start &&\n hovered &&\n dayjs(hovered).isBefore(start, 'month') &&\n dayjs(date).isSame(start, 'month')\n )\n return {\n inRange,\n firstInRange,\n lastInRange,\n ...external,\n }\n }\n const calendarDate = ref<DateStringValue | undefined>(undefined)\n const selectPreset = (value: DatePickerValueType) => {\n const date = Array.isArray(value) ? value[0] : value\n if (date != null) calendarDate.value = date\n setValue(value)\n }\n\n return () => {\n const calendar = h(Calendar, {\n ...attrs,\n type: props.type,\n value: _value.value,\n date: calendarDate.value,\n onDateChange: (date: DateStringValue) => (calendarDate.value = date),\n defaultLevel: 'year',\n minLevel: 'year',\n onMonthSelect: selectMonth,\n getMonthControlProps: monthControlProps,\n onMonthMouseEnter: (date: DateStringValue) => {\n const [start, end] = Array.isArray(_value.value)\n ? (_value.value as DatesRangeValue)\n : [null, null]\n if (props.type === 'range' && start && !end) hoveredDate.value = date\n },\n onMouseleave: () => {\n hoveredDate.value = null\n },\n })\n\n if (!props.presets?.length) return calendar\n\n return h('div', { class: classes.datePickerRoot }, [\n h(\n 'div',\n { class: classes.presetsList },\n props.presets.map((preset, index) =>\n h(\n UnstyledButton,\n {\n key: index,\n class: classes.presetButton,\n onClick: () => selectPreset(preset.value),\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => preset.label,\n ),\n ),\n ),\n calendar,\n ])\n }\n },\n})\n\nexport const PickerInputBase = defineComponent({\n name: 'PickerInputBase',\n props: {\n formattedValue: { type: String, default: '' },\n dropdownOpened: Boolean,\n dropdownType: { type: String as PropType<'popover' | 'modal'>, default: 'popover' },\n label: [String, Number, Object, Function] as PropType<any>,\n placeholder: String,\n clearable: Boolean,\n disabled: Boolean,\n required: Boolean,\n error: [String, Boolean] as PropType<any>,\n size: { type: [String, Number], default: 'sm' },\n variant: String as PropType<'default' | 'filled' | 'unstyled'>,\n onClear: Function as PropType<() => void>,\n onDropdownClose: Function as PropType<() => void>,\n onDropdownOpen: Function as PropType<() => void>,\n },\n emits: ['click'],\n inheritAttrs: false,\n setup(props, { slots, emit, attrs }) {\n const opened = ref(props.dropdownOpened)\n watch(\n () => props.dropdownOpened,\n (value) => {\n opened.value = value\n },\n )\n const close = () => {\n opened.value = false\n props.onDropdownClose?.()\n }\n const open = () => {\n if (!props.disabled) {\n opened.value = true\n props.onDropdownOpen?.()\n }\n }\n\n const target = () =>\n h(\n InputBase,\n {\n ...attrs,\n component: 'button',\n type: 'button',\n label: props.label,\n placeholder: props.placeholder,\n disabled: props.disabled,\n required: props.required,\n error: props.error,\n pointer: true,\n size: props.size,\n variant: props.variant,\n rightSection:\n props.clearable && props.formattedValue\n ? h(CloseButton, {\n size: props.size,\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n onClick: (event: MouseEvent) => {\n event.stopPropagation()\n props.onClear?.()\n },\n })\n : undefined,\n // A manually-supplied rightSection defaults to pointer-events:none\n // (it's normally just a decorative icon), so the clear button would\n // render but never receive clicks unless we explicitly re-enable\n // pointer events for it here.\n rightSectionPointerEvents: props.clearable && props.formattedValue ? 'all' : undefined,\n onClick: (event: MouseEvent) => {\n emit('click', event)\n open()\n },\n },\n () =>\n props.formattedValue\n ? h('span', props.formattedValue)\n : h('span', { class: classes.placeholder }, props.placeholder),\n )\n\n return () =>\n props.dropdownType === 'modal'\n ? h(Box, null, () => [\n target(),\n h(\n Modal,\n { opened: opened.value, onClose: close, title: props.label, size: 'auto' },\n () => slots.default?.({ close }),\n ),\n ])\n : h(\n Popover,\n {\n opened: opened.value,\n onChange: (value: boolean) => (value ? open() : close()),\n position: 'bottom-start',\n trapFocus: true,\n returnFocus: false,\n },\n () => [\n h(Popover.Target, null, target),\n h(Popover.Dropdown, { class: classes.dropdown }, () => slots.default?.({ close })),\n ],\n )\n },\n})\n\nfunction createPickerInput(\n name: string,\n Picker: any,\n defaultLevel?: CalendarLevel,\n defaultValueFormat: string = 'MMMM D, YYYY',\n) {\n return defineComponent({\n name,\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n valueFormat: { type: String, default: defaultValueFormat },\n labelSeparator: { type: String, default: '–' },\n locale: String,\n placeholder: String,\n label: [String, Number, Object, Function] as PropType<any>,\n clearable: Boolean,\n closeOnChange: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n valueFormatter: Function as PropType<DateFormatter>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const opened = ref(false)\n const formattedValue = computed(() =>\n formatValue(\n _value.value,\n props.type,\n props.valueFormat,\n props.locale,\n props.labelSeparator,\n props.valueFormatter,\n ),\n )\n return () =>\n h(\n PickerInputBase,\n {\n ...attrs,\n formattedValue: formattedValue.value,\n dropdownOpened: opened.value,\n label: props.label,\n placeholder: props.placeholder,\n clearable: props.clearable,\n onDropdownOpen: () => (opened.value = true),\n onDropdownClose: () => (opened.value = false),\n onClear: () => setValue(finalValue.value),\n },\n {\n default: ({ close }: any) =>\n h(Picker, {\n ...attrs,\n type: props.type,\n value: _value.value,\n sortDates: props.sortDates,\n defaultLevel,\n locale: props.locale,\n onChange: (value: DatePickerValueType) => {\n setValue(value)\n if (props.closeOnChange && props.type === 'default') close()\n },\n }),\n },\n )\n },\n })\n}\n\nexport const DatePickerInput = createPickerInput('DatePickerInput', DatePicker)\nexport const MonthPickerInput = createPickerInput(\n 'MonthPickerInput',\n MonthPicker,\n 'year',\n 'MMMM YYYY',\n)\nexport const YearPickerInput = createPickerInput('YearPickerInput', YearPicker, 'decade', 'YYYY')\n\nexport const HiddenDatesInput = defineComponent({\n name: 'HiddenDatesInput',\n props: {\n name: String,\n value: [String, Array, null] as PropType<DatePickerValueType>,\n },\n setup(props) {\n return () => {\n const value = Array.isArray(props.value)\n ? props.value.filter(Boolean).join(',')\n : props.value || ''\n return h('input', { type: 'hidden', name: props.name, value })\n }\n },\n})\n\nexport function dateStringParser(value: string, format = 'MMMM D, YYYY', locale?: string) {\n return dayjs(value, format, locale || 'en', true).format('YYYY-MM-DD')\n}\n\nexport function isDateValid({\n date,\n minDate,\n maxDate,\n}: {\n date: string\n minDate?: string | Date\n maxDate?: string | Date\n}) {\n const parsed = dayjs(date)\n return (\n parsed.isValid() &&\n !isBeforeMin(parsed.format('YYYY-MM-DD'), minDate) &&\n !isAfterMax(parsed.format('YYYY-MM-DD'), maxDate)\n )\n}\n\nexport const DateInput = defineComponent({\n name: 'DateInput',\n inheritAttrs: false,\n props: {\n value: [String, Date, null] as PropType<string | Date | null>,\n defaultValue: [String, Date, null] as PropType<string | Date | null>,\n onChange: Function as PropType<(value: DateValue) => void>,\n valueFormat: { type: String, default: 'MMMM D, YYYY' },\n dateParser: Function as PropType<(value: string) => DateStringValue | null>,\n locale: String,\n clearable: Boolean,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n presets: Array as PropType<Array<{ value: DateValue; label: string }>>,\n },\n // A free-text input that also opens a Calendar dropdown (in a Popover,\n // same as DatePickerInput) on focus/click, so users can either type a\n // date or pick it from the calendar.\n setup(props, { attrs }) {\n const [_value, setValue] = useUncontrolled<DateValue>({\n // normalizeDate() coerces a missing prop to `null`, but useUncontrolled\n // relies on strict `undefined` to detect \"no value prop passed\" (i.e.\n // uncontrolled usage). Coercing to null here made the component always\n // look controlled-with-null, so setValue() never actually updated\n // anything without an external value/onChange binding.\n value: computed(() => (props.value === undefined ? undefined : normalizeDate(props.value))),\n defaultValue: normalizeDate(props.defaultValue),\n finalValue: null,\n onChange: (value) => props.onChange?.(value),\n })\n const formatValue = (value: DateValue) =>\n value\n ? dayjs(value)\n .locale(props.locale || 'en')\n .format(props.valueFormat)\n : ''\n const inputValue = ref(formatValue(_value.value))\n const opened = ref(false)\n watch(_value, (value) => {\n if (!opened.value) inputValue.value = formatValue(value)\n })\n const parseInput = (raw: string): DateStringValue | null => {\n const parsed =\n props.dateParser?.(raw) || dateStringParser(raw, props.valueFormat, props.locale)\n return dayjs(parsed).isValid() &&\n isDateValid({ date: parsed, minDate: props.minDate, maxDate: props.maxDate })\n ? parsed\n : null\n }\n const commit = () => {\n opened.value = false\n if (!inputValue.value.trim()) {\n if (props.clearable) setValue(null)\n else inputValue.value = formatValue(_value.value)\n return\n }\n const parsed = parseInput(inputValue.value)\n if (parsed) {\n setValue(parsed)\n } else {\n // Invalid input reverts to the last known valid value on blur.\n inputValue.value = formatValue(_value.value)\n }\n }\n const selectDay = (date: DateStringValue) => {\n setValue(date)\n inputValue.value = formatValue(date)\n opened.value = false\n }\n return () =>\n h(Box, null, () =>\n h(\n Popover,\n {\n opened: opened.value,\n onChange: (v: boolean) => (opened.value = v),\n position: 'bottom-start',\n },\n () => [\n h(Popover.Target, null, () =>\n h(InputBase, {\n ...attrs,\n value: inputValue.value,\n onInput: (event: Event) =>\n (inputValue.value = (event.target as HTMLInputElement).value),\n onFocus: () => (opened.value = true),\n onClick: () => (opened.value = true),\n onBlur: commit,\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === 'Escape') opened.value = false\n },\n rightSection:\n props.clearable && _value.value\n ? h(CloseButton, {\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n onClick: (event: MouseEvent) => {\n event.stopPropagation()\n inputValue.value = ''\n setValue(null)\n },\n })\n : undefined,\n // Without this, the rightSection div defaults to\n // pointer-events:none (it's normally a decorative icon),\n // so the clear button would render but never be clickable.\n rightSectionPointerEvents: props.clearable && _value.value ? 'all' : undefined,\n }),\n ),\n h(\n Popover.Dropdown,\n { onMousedown: (event: MouseEvent) => event.preventDefault() },\n () => [\n props.presets?.length\n ? h(Group, { gap: 4, mb: 4 }, () =>\n props.presets?.map((preset, index) =>\n h(\n Button,\n {\n key: index,\n size: 'xs',\n variant: 'light',\n onClick: () => selectDay(preset.value as DateStringValue),\n },\n () => preset.label,\n ),\n ),\n )\n : null,\n h(Calendar, {\n defaultDate: _value.value || undefined,\n minDate: props.minDate,\n maxDate: props.maxDate,\n locale: props.locale,\n getDayProps: (date: DateStringValue) => ({\n selected: isSameDate(date, _value.value),\n onClick: () => selectDay(date),\n }),\n }),\n ],\n ),\n ],\n ),\n )\n },\n})\n\nfunction splitTimeString(value = '') {\n const [time = '', period] = value.split(' ')\n const [hours = '00', minutes = '00', seconds = '00'] = time.split(':')\n return { hours, minutes, seconds, period }\n}\n\nexport function padTime(value: number | string) {\n return String(value).padStart(2, '0')\n}\n\nexport interface TimePickerAmPmLabels {\n am: string\n pm: string\n}\n\nconst defaultAmPmLabels: TimePickerAmPmLabels = { am: 'AM', pm: 'PM' }\n\nexport function getParsedTime({\n time,\n format,\n amPmLabels = defaultAmPmLabels,\n}: {\n time: string\n format: '12h' | '24h'\n amPmLabels?: TimePickerAmPmLabels\n}): { hours: number | null; minutes: number | null; seconds: number | null; amPm: string | null } {\n if (!time) return { hours: null, minutes: null, seconds: null, amPm: null }\n const { hours, minutes, seconds } = splitTimeString(time)\n const h24 = Number(hours)\n const m = Number(minutes)\n const s = Number(seconds)\n if (format === '12h') {\n const amPm = h24 >= 12 ? amPmLabels.pm : amPmLabels.am\n const hour12 = h24 % 12 === 0 ? 12 : h24 % 12\n return { hours: hour12, minutes: m, seconds: s, amPm }\n }\n return { hours: h24, minutes: m, seconds: s, amPm: null }\n}\n\nexport function getTimeString({\n hours,\n minutes,\n seconds,\n format = '24h',\n withSeconds = false,\n amPm = null,\n amPmLabels = defaultAmPmLabels,\n}: {\n hours: number | null\n minutes: number | null\n seconds?: number | null\n format?: '12h' | '24h'\n withSeconds?: boolean\n amPm?: string | null\n amPmLabels?: TimePickerAmPmLabels\n}): { valid: boolean; value: string } {\n if (hours === null || minutes === null) return { valid: false, value: '' }\n if (withSeconds && (seconds === null || seconds === undefined)) return { valid: false, value: '' }\n\n if (format === '24h') {\n return {\n valid: true,\n value: `${padTime(hours)}:${padTime(minutes)}${withSeconds ? `:${padTime(seconds || 0)}` : ''}`,\n }\n }\n\n if (amPm === null) return { valid: false, value: '' }\n let h24 = hours\n if (amPm === amPmLabels.pm && hours !== 12) h24 += 12\n else if (amPm === amPmLabels.am && hours === 12) h24 = 0\n return {\n valid: true,\n value: `${padTime(h24)}:${padTime(minutes)}${withSeconds ? `:${padTime(seconds || 0)}` : ''}`,\n }\n}\n\nexport function timeToSeconds(value: string) {\n const { hours, minutes, seconds } = splitTimeString(value)\n return Number(hours) * 3600 + Number(minutes) * 60 + Number(seconds || 0)\n}\n\nexport function isSameTime(a?: string, b?: string) {\n return !!a && !!b && timeToSeconds(a) === timeToSeconds(b)\n}\n\nexport function compareTime(a: string, b: string) {\n return timeToSeconds(a) - timeToSeconds(b)\n}\n\nexport function clampTime(value: string, min?: string, max?: string) {\n if (min && compareTime(value, min) < 0) return min\n if (max && compareTime(value, max) > 0) return max\n return value\n}\n\nexport function getTimeRange(start: string, end: string, step = 60) {\n const result: string[] = []\n for (let current = timeToSeconds(start); current <= timeToSeconds(end); current += step) {\n const hours = Math.floor(current / 3600)\n const minutes = Math.floor((current % 3600) / 60)\n result.push(`${padTime(hours)}:${padTime(minutes)}`)\n }\n return result\n}\n\nexport const TimeInput = defineComponent({\n name: 'TimeInput',\n props: {\n withSeconds: Boolean,\n value: String,\n defaultValue: String,\n onChange: Function as PropType<(event: Event) => void>,\n },\n setup(props, { attrs }) {\n return () =>\n h(InputBase, {\n ...attrs,\n type: 'time',\n step: props.withSeconds ? 1 : 60,\n value: props.value,\n defaultValue: props.defaultValue,\n onChange: props.onChange,\n })\n },\n})\n\n// TimeGrid renders its own TimeGridControl (a bordered/pill-shaped\n// default-variant button) rather than reusing PickerControl (which is styled\n// for square date-picker day/month/year cells).\nexport const TimeGrid = defineComponent({\n name: 'TimeGrid',\n props: {\n data: { type: Array as PropType<string[]>, default: () => [] },\n value: String,\n defaultValue: String,\n minTime: String,\n maxTime: String,\n allowDeselect: Boolean,\n disabled: Boolean,\n onChange: Function as PropType<(value: string | null) => void>,\n getControlProps: Function as PropType<(value: string) => Record<string, any>>,\n },\n setup(props, { attrs }) {\n const [_value, setValue] = useUncontrolled<string | null>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: null,\n onChange: (value) => props.onChange?.(value),\n })\n return () =>\n h(Box, { ...attrs, class: [classes.timeGridRoot, (attrs as any).class] }, () =>\n h(SimpleGrid, { cols: 3, spacing: 'xs', class: classes.timeGrid }, () =>\n props.data.map((item) => {\n const isDisabled =\n props.disabled ||\n (props.minTime && compareTime(item, props.minTime) < 0) ||\n (props.maxTime && compareTime(item, props.maxTime) > 0)\n const controlProps = props.getControlProps?.(item) || {}\n const active = isSameTime(_value.value ?? undefined, item)\n return h(\n UnstyledButton,\n {\n ...controlProps,\n class: [classes.timeGridControl, controlProps.class],\n disabled: isDisabled || controlProps.disabled,\n 'data-active': active || undefined,\n 'data-disabled': isDisabled || controlProps.disabled || undefined,\n onClick: (event: MouseEvent) => {\n controlProps.onClick?.(event)\n if (isDisabled) return\n const nextValue = props.allowDeselect && active ? null : item\n if (nextValue !== _value.value) setValue(nextValue)\n },\n },\n () => item,\n )\n }),\n ),\n )\n },\n})\n\n// Real Mantine's SpinInput is a distinct component from TimeInput: a bare\n// numeric text field with digit-typing, arrow-key increment/decrement, and\n// auto-advance to the next field once enough digits are typed. It powers\n// each hour/minute/second segment inside TimePicker.\nexport const SpinInput = defineComponent({\n name: 'SpinInput',\n inheritAttrs: false,\n props: {\n value: { type: Number as PropType<number | null>, default: null },\n min: { type: Number, required: true },\n max: { type: Number, required: true },\n onChange: Function as PropType<(value: number | null) => void>,\n step: { type: Number, default: 1 },\n onNextInput: Function as PropType<() => void>,\n onPreviousInput: Function as PropType<() => void>,\n allowTemporaryZero: Boolean,\n placeholder: { type: String, default: '--' },\n disableAutoAdvance: Boolean,\n disabled: Boolean,\n readOnly: Boolean,\n },\n setup(props, { attrs }) {\n const maxDigit = () => Number(props.max.toFixed(0)[0])\n const arrowsMax = () => props.max + 1 - props.step\n\n const handleChange = (raw: string) => {\n if (props.readOnly) return\n const clearValue = raw.replace(/\\D/g, '')\n if (clearValue === '') return\n let parsedValue = 0\n for (let i = 0; i < clearValue.length; i += 1) {\n const digit = clearValue.charCodeAt(i) - 48\n const next = parsedValue * 10 + digit\n parsedValue = next > props.max ? digit : next\n }\n const clampedValue =\n props.allowTemporaryZero && parsedValue === 0 && props.min > 0\n ? 0\n : Math.min(Math.max(parsedValue, props.min), props.max)\n props.onChange?.(clampedValue)\n if (!props.disableAutoAdvance && (clampedValue > maxDigit() || raw.startsWith('00'))) {\n props.onNextInput?.()\n }\n }\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (props.readOnly) return\n if (event.key === '0' || event.key === 'Num0') {\n const target = event.currentTarget as HTMLInputElement\n const { selectionStart, selectionEnd, value: inputValue } = target\n const isEntireValueSelected =\n inputValue.length > 0 && selectionStart === 0 && selectionEnd === inputValue.length\n if (props.value === 0 && !isEntireValueSelected) {\n event.preventDefault()\n props.onNextInput?.()\n }\n }\n if (event.key === 'Home') {\n event.preventDefault()\n props.onChange?.(props.min)\n }\n if (event.key === 'End') {\n event.preventDefault()\n props.onChange?.(props.max)\n }\n if (event.key === 'Backspace' || event.key === 'Delete') {\n event.preventDefault()\n if (props.value !== null) props.onChange?.(null)\n else props.onPreviousInput?.()\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault()\n props.onNextInput?.()\n }\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n props.onPreviousInput?.()\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n const newValue =\n props.value === null\n ? props.min\n : Math.min(Math.max(props.value + props.step, props.min), arrowsMax())\n props.onChange?.(newValue)\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n const newValue =\n props.value === null\n ? arrowsMax()\n : Math.min(Math.max(props.value - props.step, props.min), arrowsMax())\n props.onChange?.(newValue)\n }\n }\n\n return () =>\n h('input', {\n ...attrs,\n type: 'text',\n role: 'spinbutton',\n 'aria-valuemin': props.min,\n 'aria-valuemax': props.max,\n 'aria-valuenow': props.value === null ? 0 : props.value,\n 'data-empty': props.value === null || undefined,\n inputmode: 'numeric',\n placeholder: props.placeholder,\n disabled: props.disabled,\n readonly: props.readOnly,\n value: props.value === null ? '' : padTime(props.value),\n onInput: (event: Event) => handleChange((event.target as HTMLInputElement).value),\n onKeydown: handleKeydown,\n onFocus: (event: FocusEvent) => (event.target as HTMLInputElement).select(),\n onClick: (event: MouseEvent) => {\n event.stopPropagation()\n ;(event.target as HTMLInputElement).select()\n },\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n })\n },\n})\n\nexport const AmPmInput = defineComponent({\n name: 'AmPmInput',\n props: {\n value: { type: String as PropType<string | null>, default: null },\n labels: { type: Object as PropType<TimePickerAmPmLabels>, default: () => defaultAmPmLabels },\n onChange: Function as PropType<(value: string) => void>,\n disabled: Boolean,\n readOnly: Boolean,\n },\n setup(props, { attrs }) {\n return () =>\n h(\n 'select',\n {\n ...attrs,\n class: classes.timePickerField,\n 'data-am-pm': true,\n disabled: props.disabled,\n value: props.value ?? props.labels.am,\n onChange: (event: Event) => props.onChange?.((event.target as HTMLSelectElement).value),\n },\n [\n h('option', { value: props.labels.am }, props.labels.am),\n h('option', { value: props.labels.pm }, props.labels.pm),\n ],\n )\n },\n})\n\nexport const TimeControlsList = defineComponent({\n name: 'TimeControlsList',\n props: {\n min: { type: Number, required: true },\n max: { type: Number, required: true },\n step: { type: Number, default: 1 },\n value: { type: Number as PropType<number | null>, default: null },\n onSelect: Function as PropType<(value: number) => void>,\n formatValue: Function as PropType<(value: number) => string>,\n },\n setup(props) {\n return () =>\n h(ScrollArea, { h: 200 }, () =>\n h(\n 'div',\n { class: classes.timePickerControlsList },\n Array.from(\n { length: Math.floor((props.max - props.min) / props.step) + 1 },\n (_, index) => props.min + index * props.step,\n ).map((item) =>\n h(\n UnstyledButton,\n {\n key: item,\n class: classes.timePickerControl,\n 'data-active': item === props.value || undefined,\n onClick: () => props.onSelect?.(item),\n },\n () => (props.formatValue ? props.formatValue(item) : padTime(item)),\n ),\n ),\n ),\n )\n },\n})\n\nexport const TimePicker = defineComponent({\n name: 'TimePicker',\n props: {\n value: String,\n defaultValue: String,\n onChange: Function as PropType<(value: string) => void>,\n withSeconds: Boolean,\n min: String,\n max: String,\n format: { type: String as PropType<'12h' | '24h'>, default: '24h' },\n amPmLabels: {\n type: Object as PropType<TimePickerAmPmLabels>,\n default: () => defaultAmPmLabels,\n },\n hoursStep: { type: Number, default: 1 },\n minutesStep: { type: Number, default: 1 },\n secondsStep: { type: Number, default: 1 },\n clearable: Boolean,\n withDropdown: Boolean,\n disabled: Boolean,\n readOnly: Boolean,\n size: { type: [String, Number], default: 'sm' },\n presets: Array as PropType<Array<{ value: string; label: string }>>,\n closeDropdownOnPresetSelect: Boolean,\n // A ref object supplied by the parent (e.g. DateTimePicker) that gets\n // populated with the actual hours <input> DOM node, so the parent can\n // call .focus() on it directly to auto-focus the time input after a\n // date is picked.\n hoursRef: Object as PropType<{ value: any }>,\n },\n setup(props, { attrs }) {\n const [_value, setValue] = useUncontrolled<string>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: '',\n onChange: (value) => props.onChange?.(value),\n })\n\n const parsed = computed(() =>\n getParsedTime({ time: _value.value, format: props.format, amPmLabels: props.amPmLabels }),\n )\n const hours = ref(parsed.value.hours)\n const minutes = ref(parsed.value.minutes)\n const seconds = ref(parsed.value.seconds)\n const amPm = ref(parsed.value.amPm)\n watch(_value, (value) => {\n const next = getParsedTime({\n time: value,\n format: props.format,\n amPmLabels: props.amPmLabels,\n })\n hours.value = next.hours\n minutes.value = next.minutes\n seconds.value = next.seconds\n amPm.value = next.amPm\n })\n\n // Refs to the SpinInput/AmPmInput component instances (not raw DOM\n // nodes) - see focusRef() below for how these are used to call .focus().\n const hoursRef = ref<any>()\n const minutesRef = ref<any>()\n const secondsRef = ref<any>()\n const amPmRef = ref<any>()\n // SpinInput/AmPmInput are components, so their `ref` resolves to the\n // component instance rather than the underlying DOM node - fall back to\n // `.$el` (or use the value directly if it's already an element, e.g. a\n // plain DOM ref) to actually call .focus() on the input.\n const focusRef = (target: any) => {\n const el = target?.$el ?? target\n el?.focus?.()\n }\n const focus = (field: 'hours' | 'minutes' | 'seconds' | 'amPm') => {\n focusRef(\n (field === 'hours'\n ? hoursRef\n : field === 'minutes'\n ? minutesRef\n : field === 'seconds'\n ? secondsRef\n : amPmRef\n ).value,\n )\n }\n watch(\n hoursRef,\n (val) => {\n // hoursRef is a ref-forwarding prop: the parent passes a ref object\n // whose `.value` we populate with the resolved element, mirroring\n // how minutesRef/secondsRef/amPmRef forward focus targets elsewhere.\n // eslint-disable-next-line vue/no-mutating-props\n if (props.hoursRef) props.hoursRef.value = val?.$el ?? val\n },\n { immediate: true },\n )\n\n const commit = () => {\n const result = getTimeString({\n hours: hours.value,\n minutes: minutes.value,\n seconds: seconds.value,\n format: props.format,\n withSeconds: props.withSeconds,\n amPm: amPm.value,\n amPmLabels: props.amPmLabels,\n })\n setValue(result.valid ? result.value : '')\n }\n\n const setHours = (value: number | null) => {\n let adjusted = value\n if (props.format === '12h' && typeof value === 'number' && value > 12) {\n adjusted = ((value - 1) % 12) + 1\n }\n hours.value = adjusted\n commit()\n focus('hours')\n }\n const setMinutes = (value: number | null) => {\n minutes.value = value\n commit()\n focus('minutes')\n }\n const setSeconds = (value: number | null) => {\n seconds.value = value\n commit()\n focus('seconds')\n }\n const setAmPm = (value: string | null) => {\n amPm.value = value\n commit()\n focus('amPm')\n }\n const clear = () => {\n hours.value = null\n minutes.value = null\n seconds.value = null\n amPm.value = null\n setValue('')\n focus('hours')\n }\n\n const isClearable = computed(\n () =>\n props.clearable &&\n !props.readOnly &&\n !props.disabled &&\n (hours.value !== null ||\n minutes.value !== null ||\n seconds.value !== null ||\n amPm.value !== null),\n )\n\n const opened = ref(false)\n\n const handlePresetSelect = (timeString: string) => {\n setValue(timeString)\n if (props.closeDropdownOnPresetSelect) {\n opened.value = false\n }\n }\n\n return () =>\n h(\n Popover,\n {\n opened: props.withDropdown && opened.value,\n position: 'bottom-start',\n transitionProps: { duration: 0 },\n },\n () => [\n h(Popover.Target, null, () =>\n h(\n InputBase,\n {\n ...attrs,\n component: 'div',\n size: props.size,\n disabled: props.disabled,\n onClick: () => {\n focus('hours')\n if (props.withDropdown) opened.value = true\n },\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n onFocusin: () => {\n if (props.withDropdown) opened.value = true\n },\n onFocusout: () => {\n if (props.withDropdown) opened.value = false\n },\n rightSection: isClearable.value\n ? h(CloseButton, {\n size: props.size,\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n onClick: clear,\n })\n : undefined,\n rightSectionPointerEvents: isClearable.value ? 'all' : undefined,\n },\n () => [\n h('div', { class: classes.timePickerFieldsRoot, dir: 'ltr' }, [\n h('div', { class: classes.timePickerFieldsGroup }, [\n h(SpinInput, {\n ref: hoursRef,\n class: classes.timePickerField,\n value: hours.value,\n min: props.format === '12h' ? 1 : 0,\n max: props.format === '12h' ? 12 : 23,\n step: props.hoursStep,\n onChange: setHours,\n onNextInput: () => focus('minutes'),\n allowTemporaryZero: props.format === '12h',\n readOnly: props.readOnly,\n disabled: props.disabled,\n placeholder: '--',\n }),\n h('span', ':'),\n h(SpinInput, {\n ref: minutesRef,\n class: classes.timePickerField,\n value: minutes.value,\n min: 0,\n max: 59,\n step: props.minutesStep,\n onChange: setMinutes,\n onPreviousInput: () => focus('hours'),\n onNextInput: () => focus(props.withSeconds ? 'seconds' : 'amPm'),\n readOnly: props.readOnly,\n disabled: props.disabled,\n placeholder: '--',\n }),\n props.withSeconds ? h('span', ':') : null,\n props.withSeconds\n ? h(SpinInput, {\n ref: secondsRef,\n class: classes.timePickerField,\n value: seconds.value,\n min: 0,\n max: 59,\n step: props.secondsStep,\n onChange: setSeconds,\n onPreviousInput: () => focus('minutes'),\n onNextInput: () => focus('amPm'),\n readOnly: props.readOnly,\n disabled: props.disabled,\n placeholder: '--',\n })\n : null,\n props.format === '12h'\n ? h(AmPmInput, {\n ref: amPmRef,\n value: amPm.value,\n labels: props.amPmLabels,\n onChange: setAmPm,\n readOnly: props.readOnly,\n disabled: props.disabled,\n })\n : null,\n ]),\n ]),\n ],\n ),\n ),\n h(\n Popover.Dropdown,\n {\n class: classes.timePickerDropdown,\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => [\n props.presets?.length\n ? h(Group, { gap: 4, class: classes.timePickerPresetsGroup }, () =>\n props.presets?.map((preset) =>\n h(\n Button,\n {\n size: 'xs',\n variant: 'light',\n onClick: () => handlePresetSelect(preset.value),\n },\n () => preset.label,\n ),\n ),\n )\n : h('div', { class: classes.timePickerControlsListGroup }, [\n h(TimeControlsList, {\n min: props.format === '12h' ? 1 : 0,\n max: props.format === '12h' ? 12 : 23,\n step: props.hoursStep,\n value: hours.value,\n onSelect: setHours,\n }),\n h(TimeControlsList, {\n min: 0,\n max: 59,\n step: props.minutesStep,\n value: minutes.value,\n onSelect: setMinutes,\n }),\n props.withSeconds\n ? h(TimeControlsList, {\n min: 0,\n max: 59,\n step: props.secondsStep,\n value: seconds.value,\n onSelect: setSeconds,\n })\n : null,\n ]),\n ],\n ),\n ],\n )\n },\n})\n\nexport const TimeValue = defineComponent({\n name: 'TimeValue',\n props: {\n value: { type: [String, Date] as PropType<string | Date>, required: true },\n format: { type: String, default: 'HH:mm' },\n locale: String,\n },\n setup(props, { attrs }) {\n return () =>\n h(Text, attrs, () =>\n (props.value instanceof Date ? dayjs(props.value) : dayjs(`2024-01-01 ${props.value}`))\n .locale(props.locale || 'en')\n .format(props.format),\n )\n },\n})\n\nexport const DateTimePicker = defineComponent({\n name: 'DateTimePicker',\n props: {\n value: [String, Date, null] as PropType<string | Date | null>,\n defaultValue: [String, Date, null] as PropType<string | Date | null>,\n onChange: Function as PropType<(value: Date | null) => void>,\n valueFormat: { type: String, default: 'MMMM D, YYYY h:mm A' },\n clearable: Boolean,\n withSeconds: Boolean,\n size: { type: [String, Number], default: 'sm' },\n submitButtonProps: Object as PropType<Record<string, any>>,\n },\n setup(props, { attrs }) {\n // Populated with the actual hours <input> DOM node once TimePicker\n // mounts (see TimePicker's hoursRef prop) so we can auto-focus it right\n // after a date is picked from the calendar.\n const hoursRef = ref<any>()\n const [_value, setValue] = useUncontrolled<Date | null>({\n // Must stay `undefined` (not coerced to null) when props.value isn't\n // passed at all - useUncontrolled uses strict undefined-checking to\n // decide whether the component is controlled. Coercing a missing prop\n // to null made this component permanently \"controlled with null\",\n // so picking a date/time in the dropdown never updated anything\n // without an external value/onChange binding - the picker looked\n // completely broken/inert.\n value: computed(() =>\n props.value === undefined ? undefined : props.value === null ? null : new Date(props.value),\n ),\n defaultValue: props.defaultValue ? new Date(props.defaultValue) : null,\n finalValue: null,\n onChange: (value) => props.onChange?.(value),\n })\n const date = computed(() => (_value.value ? dayjs(_value.value).format('YYYY-MM-DD') : null))\n const time = computed(() =>\n _value.value ? dayjs(_value.value).format(props.withSeconds ? 'HH:mm:ss' : 'HH:mm') : '',\n )\n const updateDate = (nextDate: DatePickerValueType) => {\n if (!nextDate || Array.isArray(nextDate)) return\n setValue(assignTime(nextDate, `2024-01-01 ${time.value || '00:00'}`))\n // As soon as a date is picked, move focus straight to the time input's\n // hours field.\n hoursRef.value?.focus?.()\n }\n const updateTime = (nextTime: string) => {\n if (date.value) setValue(assignTime(date.value, `2024-01-01 ${nextTime}`))\n }\n return () =>\n h(\n PickerInputBase,\n {\n ...attrs,\n formattedValue: _value.value ? dayjs(_value.value).format(props.valueFormat) : '',\n clearable: props.clearable,\n onClear: () => setValue(null),\n },\n {\n default: ({ close }: { close: () => void }) =>\n h('div', { class: classes.dateTimePicker }, [\n // fullWidth is explicitly overridden to false here -\n // fullWidth:true is only meant for a standalone\n // InlineDateTimePicker embedded directly in a page. Inside a\n // Popover dropdown (this component), the dropdown itself sizes\n // to content (width:max-content), so a fullWidth calendar has\n // nothing definite to size against and blows out to fill the\n // viewport instead, with its contents getting squashed.\n h(DatePicker, { fullWidth: false, value: date.value, onChange: updateDate }),\n h('div', { class: classes.timeWrapper }, [\n // `class` can't be passed directly to TimePicker here: its\n // render root is a Popover call, and Popover has\n // inheritAttrs:false and never even reads `attrs` in its own\n // setup(), so a class handed to TimePicker silently gets\n // dropped along that path and never reaches any real DOM\n // node. Wrapping it in a plain div instead guarantees\n // `.timeInput`'s `flex: 1` actually lands on an element\n // inside the `.timeWrapper` flex row.\n // For a plain DOM element (not a component), h()'s third\n // argument must be actual children - a bare function is only\n // auto-invoked as the default slot for component vnodes, so\n // passing one here silently rendered an empty div.\n h('div', { class: classes.timeInput }, [\n h(TimePicker, {\n value: time.value,\n withSeconds: props.withSeconds,\n size: props.size,\n hoursRef,\n onChange: updateTime,\n }),\n ]),\n h(\n ActionIcon,\n {\n variant: 'default',\n size: `input-${props.size || 'sm'}`,\n 'data-mantine-stop-propagation': true,\n ...props.submitButtonProps,\n onClick: (event: MouseEvent) => {\n props.submitButtonProps?.onClick?.(event)\n close()\n },\n },\n () => h(CheckIcon, { size: '30%' }),\n ),\n ]),\n ]),\n },\n )\n },\n})\n\nexport const InlineDateTimePicker = DateTimePicker\n\nexport const MiniCalendar = defineComponent({\n name: 'MiniCalendar',\n props: {\n date: [String, Date] as PropType<string | Date>,\n defaultDate: [String, Date] as PropType<string | Date>,\n onDateChange: Function as PropType<(date: DateStringValue) => void>,\n value: [String, Date, null] as PropType<string | Date | null>,\n onChange: Function as PropType<(date: DateStringValue) => void>,\n maxDate: [String, Date] as PropType<string | Date>,\n minDate: [String, Date] as PropType<string | Date>,\n numberOfDays: { type: Number, default: 7 },\n monthLabelFormat: { type: String, default: 'MMM' },\n onNext: Function as PropType<() => void>,\n onPrevious: Function as PropType<() => void>,\n getDayProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n size: { type: String as PropType<MantineSize>, default: 'sm' },\n previousControlProps: Object as PropType<Record<string, any>>,\n nextControlProps: Object as PropType<Record<string, any>>,\n locale: String,\n },\n setup(props, { attrs }) {\n const ctx = useDatesContext()\n const [_date, setDate] = useUncontrolled<DateStringValue>({\n value: computed(() => toDateString(props.date ?? null) ?? undefined),\n defaultValue: toDateString(props.defaultDate ?? null) ?? undefined,\n finalValue: toDateString(props.value ?? null) || dayjs().format('YYYY-MM-DD'),\n onChange: (value) => props.onDateChange?.(value),\n })\n\n const handleNext = () => {\n props.onNext?.()\n setDate(dayjs(_date.value).add(props.numberOfDays, 'days').format('YYYY-MM-DD'))\n }\n const handlePrevious = () => {\n props.onPrevious?.()\n setDate(dayjs(_date.value).subtract(props.numberOfDays, 'days').format('YYYY-MM-DD'))\n }\n\n return () => {\n const previousDisabled = props.minDate\n ? dayjs(_date.value).subtract(1, 'days').isBefore(dayjs(props.minDate))\n : false\n const nextDisabled = props.maxDate\n ? dayjs(_date.value).add(props.numberOfDays, 'days').isAfter(dayjs(props.maxDate))\n : false\n\n const range = Array.from({ length: props.numberOfDays }, (_, index) =>\n dayjs(_date.value).add(index, 'days'),\n ).map((date) => {\n const disabled =\n (props.minDate && date.isBefore(dayjs(props.minDate), 'day')) ||\n (props.maxDate && date.isAfter(dayjs(props.maxDate), 'day')) ||\n false\n const dayProps = props.getDayProps?.(toDateString(date.format('YYYY-MM-DD'))!) || {}\n\n return h(\n UnstyledButton,\n {\n key: date.toString(),\n disabled,\n 'aria-label': date.format('YYYY-MM-DD'),\n 'data-disabled': disabled || undefined,\n 'data-selected': (props.value && dayjs(date).isSame(props.value, 'day')) || undefined,\n ...dayProps,\n class: [classes.miniCalendarDay, dayProps.class],\n onClick: (event: MouseEvent) => {\n dayProps.onClick?.(event)\n props.onChange?.(toDateString(date.format('YYYY-MM-DD'))!)\n },\n },\n () => [\n h(\n 'span',\n { class: classes.miniCalendarDayMonth },\n date.locale(props.locale || ctx.locale).format(props.monthLabelFormat),\n ),\n h('span', { class: classes.miniCalendarDayNumber }, String(date.date())),\n ],\n )\n })\n\n return h(Box, { ...attrs, class: [classes.miniCalendarRoot, (attrs as any).class] }, () => [\n h(\n UnstyledButton,\n {\n onClick: handlePrevious,\n disabled: previousDisabled,\n 'data-disabled': previousDisabled || undefined,\n 'data-direction': 'previous',\n ...props.previousControlProps,\n class: [classes.miniCalendarControl, props.previousControlProps?.class],\n },\n () =>\n props.previousControlProps?.children ||\n h(AccordionChevron, { 'data-chevron': true, size: props.size }),\n ),\n h('div', { class: classes.miniCalendarDays }, range),\n h(\n UnstyledButton,\n {\n onClick: handleNext,\n disabled: nextDisabled,\n 'data-disabled': nextDisabled || undefined,\n 'data-direction': 'next',\n ...props.nextControlProps,\n class: [classes.miniCalendarControl, props.nextControlProps?.class],\n },\n () =>\n props.nextControlProps?.children ||\n h(AccordionChevron, { 'data-chevron': true, size: props.size }),\n ),\n ])\n }\n },\n})\n\nexport const getFormattedTime = ({\n value,\n format = 'HH:mm',\n}: {\n value: string | Date\n format?: string\n}) => (value instanceof Date ? dayjs(value) : dayjs(`2024-01-01 ${value}`)).format(format)\n\nexport type DayProps = InstanceType<typeof Day>['$props']\nexport type CalendarProps = InstanceType<typeof Calendar>['$props']\nexport type DatePickerProps = InstanceType<typeof DatePicker>['$props']\nexport type DatePickerInputProps = InstanceType<typeof DatePickerInput>['$props']\nexport type DateInputProps = InstanceType<typeof DateInput>['$props']\nexport type TimeInputProps = InstanceType<typeof TimeInput>['$props']\nexport type TimePickerProps = InstanceType<typeof TimePicker>['$props']\nexport type TimeGridProps = InstanceType<typeof TimeGrid>['$props']\nexport type TimeValueProps = InstanceType<typeof TimeValue>['$props']\nexport type DateTimePickerProps = InstanceType<typeof DateTimePicker>['$props']\nexport type MiniCalendarProps = InstanceType<typeof MiniCalendar>['$props']\nexport type DatesStylesNames = keyof typeof classes\nexport type PickerBaseProps = Record<string, any>\nexport type ControlsGroupSettings = Record<string, any>\nexport type DateInputSharedProps = Record<string, any>\nexport type CalendarSettings = Record<string, any>\nexport type CalendarBaseProps = Record<string, any>\nexport type CalendarAriaLabels = Record<string, string>\nexport type MonthLevelSettings = Record<string, any>\nexport type YearLevelSettings = Record<string, any>\nexport type DecadeLevelSettings = Record<string, any>\nexport type TimePickerPresets = Array<{ value: string; label: string }>\nexport type TimeGridData = string[]\nexport type TimeGridStylesNames = DatesStylesNames\nexport type TimePickerStylesNames = DatesStylesNames\nexport type DatePickerStylesNames = DatesStylesNames\nexport type DatePickerInputStylesNames = DatesStylesNames\nexport type DateInputStylesNames = DatesStylesNames\nexport type CalendarStylesNames = DatesStylesNames\n\nvoid ({} as CSSProperties)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/Dates.module.css","../src/index.ts"],"sourcesContent":[".calendar {\n display: flex;\n gap: var(--mantine-spacing-md);\n width: max-content;\n}\n\n.calendar[data-full-width] {\n width: 100%;\n}\n\n.calendar[data-full-width] > * {\n flex: 1;\n}\n\n.calendarLevel {\n min-width: 16.25rem;\n}\n\n.calendarHeader {\n --dch-control-size: 2.25rem;\n\n display: flex;\n max-width: calc(var(--dch-control-size) * 8 + 0.4375rem);\n margin-bottom: var(--mantine-spacing-xs);\n}\n\n.calendarHeader[data-full-width] {\n max-width: none;\n width: 100%;\n}\n\n.calendarHeaderLevel,\n.calendarHeaderControl {\n height: var(--dch-control-size);\n border-radius: var(--mantine-radius-default);\n display: flex;\n justify-content: center;\n align-items: center;\n user-select: none;\n opacity: 1;\n cursor: pointer;\n color: var(--mantine-color-text);\n}\n\n.calendarHeaderLevel[data-static],\n.calendarHeaderControl[data-static] {\n cursor: default;\n}\n\n.calendarHeaderLevel:not(:disabled):not([data-disabled]):not([data-static]):hover,\n.calendarHeaderControl:not(:disabled):not([data-disabled]):not([data-static]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.calendarHeaderLevel:disabled,\n.calendarHeaderLevel[data-disabled],\n.calendarHeaderControl:disabled,\n.calendarHeaderControl[data-disabled] {\n opacity: 0.2;\n cursor: not-allowed;\n}\n\n.calendarHeaderControl {\n width: var(--dch-control-size);\n}\n\n.calendarHeaderLevel {\n flex: 1;\n font-size: var(--mantine-font-size-sm);\n font-weight: 500;\n text-transform: capitalize;\n}\n\n.calendarHeaderLevel[data-native-level-select] {\n cursor: default;\n gap: var(--mantine-spacing-md);\n}\n\n.calendarHeaderSelect {\n appearance: none;\n background: transparent;\n border: none;\n font-size: inherit;\n font-weight: var(--mantine-font-weight-medium);\n text-transform: capitalize;\n color: inherit;\n font-family: inherit;\n cursor: pointer;\n padding: 0 rem(16px) 0 0;\n line-height: var(--dch-control-size);\n height: var(--dch-control-size);\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' fill='none'%3E%3Cpath d='M4.9 5.4 7.5 2.8l2.6 2.6M10.1 9.6 7.5 12.2 4.9 9.6' stroke='currentColor'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right center;\n background-size: rem(14px) rem(14px);\n\n &:focus-visible {\n outline: rem(2px) solid var(--mantine-primary-color-filled);\n outline-offset: rem(2px);\n border-radius: var(--mantine-radius-sm);\n }\n\n &:disabled {\n cursor: not-allowed;\n color: var(--mantine-color-dimmed);\n }\n}\n\n.calendarHeaderControlIcon {\n width: 45%;\n height: 45%;\n}\n\n.calendarHeaderControlIcon[data-direction='next'] {\n transform: rotate(270deg);\n}\n\n.calendarHeaderControlIcon[data-direction='previous'] {\n transform: rotate(90deg);\n}\n\n.month {\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n}\n\n.month[data-full-width] {\n width: 100%;\n}\n\n.monthRow {\n border: 0;\n}\n\n.monthCell {\n padding: 0;\n text-align: center;\n}\n\n.monthCell[data-with-spacing] {\n padding: 0.125rem;\n}\n\n.weekday {\n height: 1.75rem;\n color: var(--mantine-color-dimmed);\n font-size: var(--mantine-font-size-xs);\n font-weight: 500;\n text-align: center;\n}\n\n.weekday[data-weekend] {\n color: var(--mantine-color-red-filled);\n}\n\n.weekNumber {\n color: var(--mantine-color-dimmed);\n font-size: var(--mantine-font-size-xs);\n text-align: center;\n}\n\n.day {\n --day-size: 2.25rem;\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--day-size);\n height: var(--day-size);\n border-radius: var(--mantine-radius-sm);\n color: var(--mantine-color-text);\n font-size: var(--mantine-font-size-sm);\n line-height: 1;\n user-select: none;\n}\n\n.day[data-full-width] {\n width: 100%;\n height: auto;\n min-height: var(--day-size);\n aspect-ratio: 1;\n}\n\n.day:not(:disabled):not([data-static]):not([data-selected]):not([data-in-range]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.day[data-outside] {\n color: var(--mantine-color-dimmed);\n opacity: 0.65;\n}\n\n.day[data-weekend] {\n color: var(--mantine-color-red-filled);\n}\n\n.day[data-today][data-highlight-today] {\n border: 1px solid var(--mantine-primary-color-filled);\n}\n\n.day[data-in-range] {\n background-color: var(--mantine-primary-color-light);\n color: var(--mantine-primary-color-light-color);\n border-radius: 0;\n}\n\n.day[data-in-range]:not(:disabled):not([data-static]):hover {\n background-color: var(--mantine-primary-color-light);\n}\n\n.day[data-selected],\n.day[data-first-in-range],\n.day[data-last-in-range] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n}\n\n.day[data-selected]:not(:disabled):not([data-static]):hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.day:disabled,\n.pickerControl:disabled {\n cursor: not-allowed;\n color: var(--mantine-color-dimmed);\n opacity: 0.55;\n}\n\n.controlsGrid[data-full-width] {\n width: 100%;\n}\n\n.pickerControl {\n height: 2.25rem;\n width: calc(2.25rem * 7 / 3 + 0.09375rem);\n display: flex;\n justify-content: center;\n align-items: center;\n padding-inline: var(--mantine-spacing-xs);\n border-radius: var(--mantine-radius-sm);\n color: var(--mantine-color-text);\n font-size: var(--mantine-font-size-sm);\n user-select: none;\n background-color: transparent;\n}\n\n.pickerControl[data-full-width] {\n width: 100%;\n}\n\n.pickerControl:not(:disabled):not([data-selected]):not([data-in-range]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.pickerControl[data-selected] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n}\n\n.pickerControl[data-selected]:hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.pickerControl[data-in-range] {\n background-color: var(--mantine-primary-color-light-hover);\n color: var(--mantine-primary-color-light-color);\n}\n\n.pickerControl[data-in-range]:hover {\n background-color: var(--mantine-primary-color-light);\n}\n\n.pickerControl[data-first-in-range] {\n border-radius: 0;\n border-start-start-radius: var(--mantine-radius-default);\n border-end-start-radius: var(--mantine-radius-default);\n}\n\n.pickerControl[data-last-in-range] {\n border-radius: 0;\n border-end-end-radius: var(--mantine-radius-default);\n border-start-end-radius: var(--mantine-radius-default);\n}\n\n.pickerControl[data-first-in-range][data-last-in-range] {\n border-radius: var(--mantine-radius-default);\n}\n\n.timePicker,\n.dateTimePicker {\n width: max-content;\n}\n\n.datePickerRoot {\n display: flex;\n font-size: var(--mantine-font-size-sm);\n}\n\n.dateTimePicker {\n display: grid;\n gap: var(--mantine-spacing-sm);\n}\n\n.timeWrapper {\n display: flex;\n align-items: stretch;\n margin-top: var(--mantine-spacing-md);\n}\n\n.timeInput {\n flex: 1;\n margin-inline-end: var(--mantine-spacing-md);\n}\n\n.presetsList {\n display: flex;\n flex-direction: column;\n border-inline-end: 1px solid var(--mantine-color-default-border);\n padding-inline-end: 0.5em;\n margin-inline-end: 0.5em;\n}\n\n.presetButton {\n padding: 0.52em 0.8em;\n border-radius: var(--mantine-radius-default);\n font-size: inherit;\n white-space: nowrap;\n}\n\n.presetButton:hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.timePickerPresetsGroup {\n margin-bottom: var(--mantine-spacing-xs);\n}\n\n.dropdown {\n padding: var(--mantine-spacing-xs);\n}\n\n.placeholder {\n color: var(--mantine-color-placeholder);\n}\n\n.timeGridControl {\n text-align: center;\n padding-inline: 1em;\n padding-block: 0.25em;\n border: 1px solid var(--mantine-color-default-border);\n background-color: var(--mantine-color-default);\n color: var(--mantine-color-default-color);\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-sm);\n}\n\n.timeGridControl:not(:disabled):not([data-disabled]):not([data-active]):hover {\n background-color: var(--mantine-color-default-hover);\n}\n\n.timeGridControl[data-active] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n border-color: transparent;\n}\n\n.timeGridControl[data-active]:not(:disabled):not([data-disabled]):hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.timeGridControl:disabled,\n.timeGridControl[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.timePickerFieldsRoot {\n display: flex;\n align-items: center;\n height: 100%;\n overflow: hidden;\n}\n\n.timePickerFieldsGroup {\n display: flex;\n align-items: center;\n height: calc(var(--input-height) - 15px);\n}\n\n.timePickerField {\n width: calc(2ch + 0.3em);\n caret-color: transparent;\n font-variant-numeric: tabular-nums;\n position: relative;\n height: 100%;\n line-height: 1;\n padding-inline: 0.15em;\n border: 0;\n text-align: center;\n text-align-last: center;\n background-color: transparent;\n color: var(--input-color);\n border-radius: 2px;\n appearance: none;\n}\n\n.timePickerField[data-am-pm] {\n width: auto;\n}\n\n.timePickerField:disabled {\n cursor: not-allowed;\n}\n\n.timePickerField::selection {\n background-color: transparent;\n}\n\n.timePickerField::placeholder {\n opacity: 1;\n color: inherit;\n}\n\n.timePickerField:focus {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n outline: 0;\n}\n\n.timePickerField:focus::placeholder {\n color: var(--mantine-color-white);\n}\n\n.timePickerDropdown {\n padding: 4px;\n}\n\n.timePickerControlsListGroup {\n display: flex;\n gap: 4px;\n}\n\n.timePickerControlsList {\n display: flex;\n flex-direction: column;\n}\n\n.timePickerControl {\n text-align: center;\n min-width: 2.5em;\n width: max-content;\n height: 2em;\n border-radius: var(--mantine-radius-default);\n font-size: var(--mantine-font-size-sm);\n}\n\n.timePickerControl[data-active] {\n background-color: var(--mantine-primary-color-filled);\n color: var(--mantine-color-white);\n}\n\n.timePickerControl:not([data-active]):hover {\n color: var(--mantine-color-bright);\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.miniCalendarRoot {\n width: fit-content;\n display: flex;\n align-items: center;\n font-size: var(--mantine-font-size-sm);\n}\n\n.miniCalendarDays {\n display: flex;\n font-size: inherit;\n}\n\n.miniCalendarDay {\n display: flex;\n min-width: 3em;\n gap: 0.5em;\n font-size: inherit;\n flex-direction: column;\n align-items: center;\n line-height: 1;\n padding: 0.75em;\n border-radius: var(--mantine-radius-default);\n}\n\n.miniCalendarDay[data-selected] {\n color: var(--mantine-primary-color-contrast);\n background-color: var(--mantine-primary-color-filled);\n}\n\n.miniCalendarDay[data-selected]:not([data-disabled]):hover {\n background-color: var(--mantine-primary-color-filled-hover);\n}\n\n.miniCalendarDay[data-disabled] {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.miniCalendarDay:not([data-disabled]):not([data-selected]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.miniCalendarDayMonth {\n font-size: 0.75em;\n font-weight: var(--mantine-font-weight-medium);\n opacity: 0.65;\n}\n\n.miniCalendarDayNumber {\n font-size: 0.9em;\n font-weight: var(--mantine-font-weight-medium);\n}\n\n.miniCalendarControl {\n align-self: stretch;\n font-size: inherit;\n width: 2em;\n border-radius: var(--mantine-radius-default);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mantine-color-bright);\n}\n\n.miniCalendarControl[data-disabled] {\n opacity: 0.3;\n cursor: not-allowed;\n}\n\n.miniCalendarControl:not([data-disabled]):hover {\n background-color: var(--mantine-color-gray-light-hover);\n}\n\n.miniCalendarControl [data-chevron] {\n font-size: inherit;\n width: 60%;\n}\n\n.miniCalendarControl[data-direction='previous'] [data-chevron] {\n transform: rotate(90deg);\n}\n\n.miniCalendarControl[data-direction='next'] [data-chevron] {\n transform: rotate(-90deg);\n}\n","import dayjs from 'dayjs'\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\nimport {\n computed,\n defineComponent,\n h,\n inject,\n provide,\n ref,\n watch,\n type CSSProperties,\n type InjectionKey,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from 'vue'\nimport { useUncontrolled } from '@mantine-vue/hooks'\nimport {\n AccordionChevron,\n ActionIcon,\n Box,\n Button,\n CheckIcon,\n CloseButton,\n Group,\n InputBase,\n Modal,\n Popover,\n ScrollArea,\n SimpleGrid,\n Text,\n UnstyledButton,\n type MantineSize,\n} from '@mantine-vue/core'\nimport classes from './Dates.module.css'\n\ndayjs.extend(customParseFormat)\n\nexport type DateStringValue = string\nexport type DateValue = DateStringValue | null\nexport type DatesRangeValue = [DateValue, DateValue]\nexport type DatePickerType = 'default' | 'multiple' | 'range'\nexport type CalendarLevel = 'month' | 'year' | 'decade'\nexport interface RenderDaySlots {\n renderDay?: (input: { date: DateStringValue }) => VNodeChild\n /** Short alias for `renderDay`. */\n day?: (input: { date: DateStringValue }) => VNodeChild\n}\nexport type DatePickerValue<Type extends DatePickerType = 'default'> = Type extends 'range'\n ? DatesRangeValue\n : Type extends 'multiple'\n ? DateStringValue[]\n : DateValue\nexport type DatePickerValueType = DateValue | DateStringValue[] | DatesRangeValue\nexport type ControlKeydownPayload = {\n rowIndex: number\n cellIndex: number\n event: KeyboardEvent\n controlsRef: HTMLElement[][]\n}\nexport type DateFormatter = (payload: {\n type: DatePickerType\n date: DatePickerValueType\n locale?: string\n format: string\n labelSeparator: string\n}) => string\n\nexport interface DatesProviderSettings {\n locale?: string\n firstDayOfWeek?: number\n weekendDays?: number[]\n timezone?: string\n consistentWeeks?: boolean\n}\n\nconst DATES_PROVIDER_DEFAULT_SETTINGS: Required<DatesProviderSettings> = {\n locale: 'en',\n firstDayOfWeek: 1,\n weekendDays: [0, 6],\n timezone: 'UTC',\n consistentWeeks: false,\n}\n\nconst DatesContextKey: InjectionKey<Required<DatesProviderSettings>> = Symbol('DatesContext')\n\nexport const DatesProvider = defineComponent({\n name: 'DatesProvider',\n props: {\n settings: { type: Object as PropType<DatesProviderSettings>, default: () => ({}) },\n },\n setup(props, { slots }) {\n const settings = computed(() => ({ ...DATES_PROVIDER_DEFAULT_SETTINGS, ...props.settings }))\n provide(DatesContextKey, settings.value)\n watch(settings, (value) => provide(DatesContextKey, value))\n return () => slots.default?.()\n },\n})\n\nexport function useDatesContext() {\n return inject(DatesContextKey, DATES_PROVIDER_DEFAULT_SETTINGS)\n}\n\nfunction normalizeDate(value: Date | string | null | undefined): DateStringValue | null {\n if (value == null || value === '') {\n return null\n }\n\n const parsed = dayjs(value)\n return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null\n}\n\nexport function toDateString(value: Date | string | null | undefined): DateStringValue | null {\n return normalizeDate(value)\n}\n\nexport function shiftTimezone<T>(direction: 'add' | 'remove', date: T, timezone?: string): T {\n void direction\n void timezone\n return date\n}\n\nexport function getTimezoneOffset(date: Date | string, timezone?: string) {\n void timezone\n return new Date(date).getTimezoneOffset()\n}\n\nexport function clampDate(date: DateStringValue, minDate?: Date | string, maxDate?: Date | string) {\n const value = dayjs(date)\n const min = normalizeDate(minDate)\n const max = normalizeDate(maxDate)\n\n if (min && value.isBefore(min, 'day')) {\n return min\n }\n\n if (max && value.isAfter(max, 'day')) {\n return max\n }\n\n return value.format('YYYY-MM-DD')\n}\n\nexport function getDefaultClampedDate({\n minDate,\n maxDate,\n defaultDate,\n}: {\n minDate?: Date | string\n maxDate?: Date | string\n defaultDate?: Date | string\n} = {}) {\n return clampDate(normalizeDate(defaultDate) || dayjs().format('YYYY-MM-DD'), minDate, maxDate)\n}\n\nexport function assignTime(date: Date | string, time: Date | string) {\n const timeValue = dayjs(time)\n return dayjs(date)\n .hour(timeValue.hour())\n .minute(timeValue.minute())\n .second(timeValue.second())\n .millisecond(timeValue.millisecond())\n .toDate()\n}\n\nexport function getFormattedDate({\n date,\n format = 'MMMM D, YYYY',\n locale,\n}: {\n date: Date | string\n format?: string\n locale?: string\n}) {\n return dayjs(date)\n .locale(locale || 'en')\n .format(format)\n}\n\nexport function isSameDate(\n a: Date | string | null | undefined,\n b: Date | string | null | undefined,\n) {\n if (!a || !b) return false\n return dayjs(a).isSame(b, 'day')\n}\n\nexport function isSameMonth(a: Date | string, b: Date | string) {\n return dayjs(a).isSame(b, 'month')\n}\n\nexport function isSameYear(a: Date | string, b: Date | string) {\n return dayjs(a).isSame(b, 'year')\n}\n\nexport function getStartOfWeek(date: Date | string, firstDayOfWeek = 1) {\n const value = dayjs(date)\n const diff = (value.day() - firstDayOfWeek + 7) % 7\n return value.subtract(diff, 'day').format('YYYY-MM-DD')\n}\n\nexport function getEndOfWeek(date: Date | string, firstDayOfWeek = 1) {\n return dayjs(getStartOfWeek(date, firstDayOfWeek)).add(6, 'day').format('YYYY-MM-DD')\n}\n\nexport function getWeekNumber(date: Date | string) {\n const current = dayjs(date)\n const yearStart = dayjs(`${current.year()}-01-01`)\n return Math.ceil((current.diff(yearStart, 'day') + yearStart.day() + 1) / 7)\n}\n\nexport function handleControlKeyDown({\n rowIndex,\n cellIndex,\n event,\n controlsRef,\n}: ControlKeydownPayload) {\n const rows = controlsRef.length\n const cols = controlsRef[0]?.length || 0\n let nextRow = rowIndex\n let nextCell = cellIndex\n\n if (event.key === 'ArrowRight') nextCell += 1\n if (event.key === 'ArrowLeft') nextCell -= 1\n if (event.key === 'ArrowDown') nextRow += 1\n if (event.key === 'ArrowUp') nextRow -= 1\n if (event.key === 'Home') nextCell = 0\n if (event.key === 'End') nextCell = cols - 1\n\n if (nextCell < 0) {\n nextCell = cols - 1\n nextRow -= 1\n }\n\n if (nextCell >= cols) {\n nextCell = 0\n nextRow += 1\n }\n\n const next = controlsRef[(nextRow + rows) % rows]?.[(nextCell + cols) % cols]\n if (next) {\n event.preventDefault()\n next.focus()\n }\n}\n\nfunction focusAdjacentControl(\n refs: (HTMLElement | null | undefined)[][],\n rowIndex: number,\n cellIndex: number,\n direction: 'up' | 'down' | 'left' | 'right',\n) {\n const isFocusable = (el: HTMLElement | null | undefined) =>\n !!el &&\n !(el as any).disabled &&\n !el.hasAttribute('data-hidden') &&\n !el.hasAttribute('data-outside')\n\n let nextRow = rowIndex\n let nextCell = cellIndex\n\n for (let i = 0; i < 60; i += 1) {\n if (direction === 'up') nextRow -= 1\n if (direction === 'down') nextRow += 1\n if (direction === 'left') {\n nextCell -= 1\n if (nextCell < 0) {\n nextRow -= 1\n nextCell = (refs[nextRow]?.length || 1) - 1\n }\n }\n if (direction === 'right') {\n nextCell += 1\n if (nextCell >= (refs[nextRow]?.length || 0)) {\n nextRow += 1\n nextCell = 0\n }\n }\n\n const row = refs[nextRow]\n if (!row) return\n const el = row[nextCell]\n if (el === undefined) return\n if (isFocusable(el)) {\n el!.focus()\n return\n }\n }\n}\n\nfunction keyToDirection(key: string): 'up' | 'down' | 'left' | 'right' | null {\n if (key === 'ArrowUp') return 'up'\n if (key === 'ArrowDown') return 'down'\n if (key === 'ArrowLeft') return 'left'\n if (key === 'ArrowRight') return 'right'\n return null\n}\n\n// A ref callback used on grid cells (Day/PickerControl) to capture the real\n// DOM node into a [row][cell] array - components resolve to their instance\n// proxy (`.$el`), not the DOM node directly.\nfunction setGridRef(\n refs: (HTMLElement | null | undefined)[][],\n rowIndex: number,\n cellIndex: number,\n node: any,\n) {\n if (!refs[rowIndex]) refs[rowIndex] = []\n refs[rowIndex][cellIndex] = node?.$el ?? node ?? undefined\n}\n\nfunction getMonthDays(month: DateStringValue, firstDayOfWeek: number, consistentWeeks = false) {\n const startOfMonth = dayjs(month).startOf('month')\n const start = dayjs(getStartOfWeek(startOfMonth.format('YYYY-MM-DD'), firstDayOfWeek))\n const weeks = consistentWeeks\n ? 6\n : Math.ceil((startOfMonth.daysInMonth() + startOfMonth.day()) / 7)\n\n return Array.from({ length: weeks }, (_, week) =>\n Array.from({ length: 7 }, (__, day) => start.add(week * 7 + day, 'day').format('YYYY-MM-DD')),\n )\n}\n\nfunction isBeforeMin(date: DateStringValue, minDate?: Date | string) {\n const min = normalizeDate(minDate)\n return !!min && dayjs(date).isBefore(min, 'day')\n}\n\nfunction isAfterMax(date: DateStringValue, maxDate?: Date | string) {\n const max = normalizeDate(maxDate)\n return !!max && dayjs(date).isAfter(max, 'day')\n}\n\nfunction formatValue(\n value: DatePickerValueType,\n type: DatePickerType,\n format: string,\n locale?: string,\n labelSeparator = '–',\n valueFormatter?: DateFormatter,\n) {\n if (valueFormatter) {\n return valueFormatter({ type, date: value, locale, format, labelSeparator })\n }\n\n if (type === 'multiple') {\n return Array.isArray(value)\n ? value\n .map((item) =>\n dayjs(item)\n .locale(locale || 'en')\n .format(format),\n )\n .join(', ')\n : ''\n }\n\n if (type === 'range') {\n const [start, end] = Array.isArray(value) ? (value as DatesRangeValue) : [null, null]\n if (!start && !end) return ''\n if (start && !end)\n return `${dayjs(start)\n .locale(locale || 'en')\n .format(format)} ${labelSeparator} `\n if (!start && end)\n return `${labelSeparator} ${dayjs(end)\n .locale(locale || 'en')\n .format(format)}`\n return `${dayjs(start)\n .locale(locale || 'en')\n .format(format)} ${labelSeparator} ${dayjs(end)\n .locale(locale || 'en')\n .format(format)}`\n }\n\n return value\n ? dayjs(value as DateStringValue)\n .locale(locale || 'en')\n .format(format)\n : ''\n}\n\nfunction getMonthLabel(date: DateStringValue, format = 'MMMM YYYY', locale?: string) {\n return dayjs(date)\n .locale(locale || 'en')\n .format(format)\n}\n\nfunction getYearRange(date: DateStringValue) {\n const year = dayjs(date).year()\n const start = year - (year % 10)\n return Array.from({ length: 10 }, (_, index) =>\n dayjs(`${start + index}-01-01`).format('YYYY-MM-DD'),\n )\n}\n\nfunction getDecadeLabel(date: DateStringValue) {\n const years = getYearRange(date)\n return `${dayjs(years[0]).year()} – ${dayjs(years[years.length - 1]).year()}`\n}\n\nexport const Day = defineComponent({\n name: 'Day',\n inheritAttrs: false,\n slots: Object as SlotsType<RenderDaySlots>,\n props: {\n date: { type: String, required: true },\n size: { type: [String, Number], default: 'sm' },\n static: { type: Boolean, default: false },\n weekend: Boolean,\n outside: Boolean,\n selected: Boolean,\n hidden: Boolean,\n inRange: Boolean,\n firstInRange: Boolean,\n lastInRange: Boolean,\n highlightToday: Boolean,\n fullWidth: Boolean,\n disabled: Boolean,\n renderDay: Function as PropType<(date: DateStringValue) => VNodeChild>,\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n unstyled: Boolean,\n },\n setup(props, { attrs, slots }) {\n return () =>\n h(\n UnstyledButton,\n {\n ...attrs,\n component: props.static ? 'div' : 'button',\n class: [classes.day, (attrs as any).class],\n disabled: props.disabled,\n style: [{ display: props.hidden ? 'none' : undefined }, (attrs as any).style],\n 'data-today': dayjs(props.date).isSame(new Date(), 'day') || undefined,\n 'data-hidden': props.hidden || undefined,\n 'data-highlight-today': props.highlightToday || undefined,\n 'data-disabled': props.disabled || undefined,\n 'data-weekend': (!props.disabled && !props.outside && props.weekend) || undefined,\n 'data-outside': (!props.disabled && props.outside) || undefined,\n 'data-selected': (!props.disabled && props.selected) || undefined,\n 'data-in-range': (props.inRange && !props.disabled) || undefined,\n 'data-first-in-range': (props.firstInRange && !props.disabled) || undefined,\n 'data-last-in-range': (props.lastInRange && !props.disabled) || undefined,\n 'data-static': props.static || undefined,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n (props.renderDay\n ? props.renderDay(props.date)\n : (slots.renderDay ?? slots.day)?.({ date: props.date })) || dayjs(props.date).date(),\n )\n },\n})\n\nexport const PickerControl = defineComponent({\n name: 'PickerControl',\n inheritAttrs: false,\n props: {\n selected: Boolean,\n disabled: Boolean,\n inRange: Boolean,\n firstInRange: Boolean,\n lastInRange: Boolean,\n withCellSpacing: { type: Boolean, default: true },\n fullWidth: Boolean,\n },\n setup(props, { attrs, slots }) {\n return () =>\n h(\n UnstyledButton,\n {\n ...attrs,\n class: [classes.pickerControl, (attrs as any).class],\n disabled: props.disabled,\n 'data-selected': (props.selected && !props.disabled) || undefined,\n 'data-disabled': props.disabled || undefined,\n 'data-in-range': (props.inRange && !props.disabled && !props.selected) || undefined,\n 'data-first-in-range': (props.firstInRange && !props.disabled) || undefined,\n 'data-last-in-range': (props.lastInRange && !props.disabled) || undefined,\n 'data-with-cell-spacing': props.withCellSpacing || undefined,\n 'data-full-width': props.fullWidth || undefined,\n },\n () => slots.default?.(),\n )\n },\n})\n\nexport const CalendarHeader = defineComponent({\n name: 'CalendarHeader',\n props: {\n label: { type: String, required: true },\n hasNextLevel: { type: Boolean, default: true },\n withNext: { type: Boolean, default: true },\n withPrevious: { type: Boolean, default: true },\n nextDisabled: Boolean,\n previousDisabled: Boolean,\n nextLabel: { type: String, default: 'Next' },\n previousLabel: { type: String, default: 'Previous' },\n levelControlAriaLabel: String,\n fullWidth: Boolean,\n withNativeLevelSelect: Boolean,\n yearsSelectRange: Array as unknown as PropType<[number, number]>,\n calendarLevel: String as PropType<CalendarLevel>,\n date: [String, Date] as PropType<string | Date>,\n locale: String,\n onDateChange: Function as PropType<(date: DateStringValue) => void>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n disableNativeLevelSelect: Boolean,\n onNext: Function as PropType<() => void>,\n onPrevious: Function as PropType<() => void>,\n onLevelClick: Function as PropType<() => void>,\n },\n setup(props) {\n return () => {\n const previousControl = props.withPrevious\n ? h(\n UnstyledButton,\n {\n class: classes.calendarHeaderControl,\n 'data-direction': 'previous',\n 'aria-label': props.previousLabel,\n onClick: props.onPrevious,\n disabled: props.previousDisabled,\n 'data-disabled': props.previousDisabled || undefined,\n },\n () =>\n h(AccordionChevron, {\n class: classes.calendarHeaderControlIcon,\n 'data-direction': 'previous',\n size: '45%',\n }),\n )\n : null\n\n const displayed = props.date ? dayjs(props.date) : dayjs()\n const currentYear = new Date().getFullYear()\n const rawMinYear =\n props.yearsSelectRange?.[0] ??\n (props.minDate ? dayjs(props.minDate).year() : currentYear - 100)\n const rawMaxYear =\n props.yearsSelectRange?.[1] ??\n (props.maxDate ? dayjs(props.maxDate).year() : currentYear + 50)\n const minYear = Math.min(rawMinYear, rawMaxYear, displayed.year())\n const maxYear = Math.max(rawMinYear, rawMaxYear, displayed.year())\n const updateNativeDate = (next: dayjs.Dayjs) => {\n let result = next\n if (props.minDate && result.isBefore(dayjs(props.minDate), 'day'))\n result = dayjs(props.minDate)\n if (props.maxDate && result.isAfter(dayjs(props.maxDate), 'day'))\n result = dayjs(props.maxDate)\n props.onDateChange?.(result.format('YYYY-MM-DD'))\n }\n const nativeLevelControl =\n props.withNativeLevelSelect &&\n props.date &&\n props.onDateChange &&\n props.calendarLevel !== 'decade'\n ? h(\n 'div',\n {\n class: classes.calendarHeaderLevel,\n 'data-static': true,\n 'data-native-level-select': true,\n },\n [\n props.calendarLevel === 'month'\n ? h(\n 'select',\n {\n class: classes.calendarHeaderSelect,\n 'data-select': 'month',\n disabled: props.disableNativeLevelSelect,\n value: displayed.month(),\n 'aria-label': props.levelControlAriaLabel,\n onChange: (event: Event) =>\n updateNativeDate(\n displayed.month(Number((event.target as HTMLSelectElement).value)),\n ),\n },\n Array.from({ length: 12 }, (_, month) =>\n h(\n 'option',\n { value: month },\n dayjs()\n .locale(props.locale || 'en')\n .month(month)\n .format('MMMM'),\n ),\n ),\n )\n : null,\n h(\n 'select',\n {\n class: classes.calendarHeaderSelect,\n 'data-select': 'year',\n disabled: props.disableNativeLevelSelect,\n value: displayed.year(),\n 'aria-label': props.levelControlAriaLabel,\n onChange: (event: Event) =>\n updateNativeDate(\n displayed.year(Number((event.target as HTMLSelectElement).value)),\n ),\n },\n Array.from({ length: maxYear - minYear + 1 }, (_, index) => {\n const year = minYear + index\n return h('option', { value: year }, year)\n }),\n ),\n ],\n )\n : null\n const levelControl =\n nativeLevelControl ??\n h(\n UnstyledButton,\n {\n component: props.hasNextLevel ? 'button' : 'div',\n class: classes.calendarHeaderLevel,\n onClick: props.hasNextLevel ? props.onLevelClick : undefined,\n disabled: !props.hasNextLevel,\n 'data-static': !props.hasNextLevel || undefined,\n 'aria-label': props.levelControlAriaLabel,\n },\n () => props.label,\n )\n\n const nextControl = props.withNext\n ? h(\n UnstyledButton,\n {\n class: classes.calendarHeaderControl,\n 'data-direction': 'next',\n 'aria-label': props.nextLabel,\n onClick: props.onNext,\n disabled: props.nextDisabled,\n 'data-disabled': props.nextDisabled || undefined,\n },\n () =>\n h(AccordionChevron, {\n class: classes.calendarHeaderControlIcon,\n 'data-direction': 'next',\n size: '45%',\n }),\n )\n : null\n\n return h(\n 'div',\n { class: classes.calendarHeader, 'data-full-width': props.fullWidth || undefined },\n [previousControl, levelControl, nextControl],\n )\n }\n },\n})\n\nexport const WeekdaysRow = defineComponent({\n name: 'WeekdaysRow',\n props: {\n firstDayOfWeek: Number,\n weekendDays: Array as PropType<number[]>,\n locale: String,\n weekdayFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'dd',\n },\n withWeekNumbers: Boolean,\n },\n setup(props) {\n const ctx = useDatesContext()\n return () => {\n const first = props.firstDayOfWeek ?? ctx.firstDayOfWeek\n const days = Array.from({ length: 7 }, (_, index) =>\n dayjs('2024-01-07').add((first + index) % 7, 'day'),\n )\n return h('tr', { class: classes.weekdaysRow }, [\n props.withWeekNumbers ? h('th', { class: classes.weekday }) : null,\n ...days.map((date) =>\n h(\n 'th',\n {\n class: classes.weekday,\n 'data-weekend':\n (props.weekendDays ?? ctx.weekendDays).includes(date.day()) || undefined,\n },\n typeof props.weekdayFormat === 'function'\n ? props.weekdayFormat(date.format('YYYY-MM-DD'))\n : date.locale(props.locale || ctx.locale).format(props.weekdayFormat),\n ),\n ),\n ])\n }\n },\n})\n\nexport const Month = defineComponent({\n name: 'Month',\n slots: Object as SlotsType<RenderDaySlots>,\n props: {\n month: { type: String, default: () => dayjs().format('YYYY-MM-DD') },\n value: { type: [String, Array, null] as PropType<DatePickerValueType>, default: null },\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n firstDayOfWeek: Number,\n weekendDays: Array as PropType<number[]>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n excludeDate: Function as PropType<(date: DateStringValue) => boolean>,\n renderDay: Function as PropType<(date: DateStringValue) => VNodeChild>,\n hideOutsideDates: Boolean,\n hideWeekdays: Boolean,\n getDayProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n getDayAriaLabel: Function as PropType<(date: DateStringValue) => string>,\n onDayClick: Function as PropType<(date: DateStringValue) => void>,\n onDayMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n withCellSpacing: { type: Boolean, default: true },\n highlightToday: Boolean,\n withWeekNumbers: Boolean,\n static: Boolean,\n fullWidth: Boolean,\n },\n setup(props, { slots }) {\n const ctx = useDatesContext()\n const hovered = ref<string | null>(null)\n\n const dayRefs: (HTMLElement | null | undefined)[][] = []\n\n const isSelected = (date: DateStringValue) => {\n if (props.type === 'multiple') return Array.isArray(props.value) && props.value.includes(date)\n if (props.type === 'range') {\n const [start, end] = Array.isArray(props.value)\n ? (props.value as DatesRangeValue)\n : [null, null]\n return isSameDate(date, start) || isSameDate(date, end)\n }\n return isSameDate(date, props.value as DateValue)\n }\n\n const isInRange = (date: DateStringValue) => {\n if (props.type !== 'range' || !Array.isArray(props.value)) return false\n const [start, end] = props.value as DatesRangeValue\n const rangeEnd = end || hovered.value\n if (!start || !rangeEnd) return false\n return dayjs(date).isAfter(start, 'day') && dayjs(date).isBefore(rangeEnd, 'day')\n }\n\n return () => {\n const first = props.firstDayOfWeek ?? ctx.firstDayOfWeek\n const rows = getMonthDays(props.month, first, ctx.consistentWeeks)\n\n // Only one day in the whole grid is in the tab order (roving tabindex) -\n // prefer the selected date, then today, then the first enabled date.\n const flatDates = rows.flat()\n const isEnabled = (date: DateStringValue) => {\n const outside = !dayjs(date).isSame(props.month, 'month')\n const disabled =\n isBeforeMin(date, props.minDate) ||\n isAfterMax(date, props.maxDate) ||\n props.excludeDate?.(date) ||\n props.getDayProps?.(date)?.disabled\n return !disabled && (!props.hideOutsideDates || !outside)\n }\n const enabledDates = flatDates.filter(isEnabled)\n const dateInTabOrder =\n enabledDates.find((date) => isSelected(date)) ??\n enabledDates.find((date) => dayjs().isSame(date, 'date')) ??\n enabledDates[0]\n\n return h('table', { class: classes.month, 'data-full-width': props.fullWidth || undefined }, [\n props.hideWeekdays\n ? null\n : h('thead', [\n h(WeekdaysRow, {\n firstDayOfWeek: first,\n weekendDays: props.weekendDays,\n withWeekNumbers: props.withWeekNumbers,\n }),\n ]),\n h(\n 'tbody',\n rows.map((week, rowIndex) =>\n h('tr', { class: classes.monthRow }, [\n props.withWeekNumbers\n ? h('td', { class: classes.weekNumber }, getWeekNumber(week[0]))\n : null,\n ...week.map((date, cellIndex) => {\n const outside = !dayjs(date).isSame(props.month, 'month')\n const disabled =\n isBeforeMin(date, props.minDate) ||\n isAfterMax(date, props.maxDate) ||\n props.excludeDate?.(date)\n const dayProps = props.getDayProps?.(date) || {}\n const selected = isSelected(date)\n const [start, end] =\n props.type === 'range' && Array.isArray(props.value)\n ? (props.value as DatesRangeValue)\n : [null, null]\n\n return h(\n 'td',\n {\n class: classes.monthCell,\n 'data-with-spacing': props.withCellSpacing || undefined,\n },\n [\n h(Day, {\n ...dayProps,\n date,\n static: props.static,\n disabled: disabled || dayProps.disabled,\n weekend: (props.weekendDays ?? ctx.weekendDays).includes(dayjs(date).day()),\n outside,\n hidden: props.hideOutsideDates && outside,\n selected,\n inRange: isInRange(date),\n firstInRange: isSameDate(date, start),\n lastInRange: isSameDate(date, end),\n highlightToday: props.highlightToday,\n fullWidth: props.fullWidth,\n renderDay:\n props.renderDay ??\n ((slots.renderDay ?? slots.day)\n ? (date: DateStringValue) => (slots.renderDay ?? slots.day)?.({ date })\n : undefined),\n 'aria-label': props.getDayAriaLabel?.(date),\n tabindex: props.static ? undefined : date === dateInTabOrder ? 0 : -1,\n // Lets a focus-trapped Popover (e.g. DatePickerInput's\n // dropdown) land directly on the selected date instead\n // of the first tabbable element.\n 'data-autofocus': selected || undefined,\n ref: (node: any) => setGridRef(dayRefs, rowIndex, cellIndex, node),\n onClick: (event: MouseEvent) => {\n dayProps.onClick?.(event)\n if (!disabled && !props.static) props.onDayClick?.(date)\n },\n onMouseenter: (event: MouseEvent) => {\n hovered.value = date\n dayProps.onMouseenter?.(event)\n props.onDayMouseEnter?.(date)\n },\n onKeydown: (event: KeyboardEvent) => {\n dayProps.onKeydown?.(event)\n const direction = keyToDirection(event.key)\n if (direction) {\n event.preventDefault()\n focusAdjacentControl(dayRefs, rowIndex, cellIndex, direction)\n }\n },\n }),\n ],\n )\n }),\n ]),\n ),\n ),\n ])\n }\n },\n})\n\nexport const MonthsList = defineComponent({\n name: 'MonthsList',\n props: {\n year: { type: String, default: () => dayjs().format('YYYY-MM-DD') },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n locale: String,\n monthsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'MMM',\n },\n getMonthControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n onMonthSelect: Function as PropType<(date: DateStringValue) => void>,\n onMonthMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n fullWidth: Boolean,\n },\n setup(props) {\n const controlRefs: (HTMLElement | null | undefined)[][] = []\n return () => {\n const months = Array.from({ length: 12 }, (_, index) =>\n dayjs(props.year).month(index).startOf('month').format('YYYY-MM-DD'),\n )\n const isEnabled = (date: DateStringValue) =>\n !(\n (props.minDate && dayjs(date).endOf('month').isBefore(props.minDate, 'day')) ||\n (props.maxDate && dayjs(date).startOf('month').isAfter(props.maxDate, 'day')) ||\n props.getMonthControlProps?.(date)?.disabled\n )\n const isSelected = (date: DateStringValue) =>\n Array.isArray(props.value)\n ? (props.value as DateStringValue[]).some((item) => dayjs(item).isSame(date, 'month'))\n : !!props.value && dayjs(props.value as any).isSame(date, 'month')\n const enabledMonths = months.filter(isEnabled)\n const monthInTabOrder =\n enabledMonths.find(isSelected) ??\n enabledMonths.find((date) => dayjs().isSame(date, 'month')) ??\n enabledMonths[0]\n\n return h(\n SimpleGrid,\n {\n cols: 3,\n spacing: 4,\n class: classes.controlsGrid,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n months.map((date, index) => {\n const rowIndex = Math.floor(index / 3)\n const cellIndex = index % 3\n const disabled = !isEnabled(date)\n const controlProps = props.getMonthControlProps?.(date) || {}\n return h(\n PickerControl,\n {\n fullWidth: props.fullWidth,\n ...controlProps,\n disabled: disabled || controlProps.disabled,\n selected: isSelected(date),\n tabindex: date === monthInTabOrder ? 0 : -1,\n 'data-autofocus': isSelected(date) || undefined,\n ref: (node: any) => setGridRef(controlRefs, rowIndex, cellIndex, node),\n onClick: (event: MouseEvent) => {\n controlProps.onClick?.(event)\n if (!disabled) props.onMonthSelect?.(date)\n },\n onMouseenter: (event: MouseEvent) => {\n controlProps.onMouseenter?.(event)\n props.onMonthMouseEnter?.(date)\n },\n onKeydown: (event: KeyboardEvent) => {\n controlProps.onKeydown?.(event)\n const direction = keyToDirection(event.key)\n if (direction) {\n event.preventDefault()\n focusAdjacentControl(controlRefs, rowIndex, cellIndex, direction)\n }\n },\n },\n () =>\n typeof props.monthsListFormat === 'function'\n ? props.monthsListFormat(date)\n : dayjs(date)\n .locale(props.locale || 'en')\n .format(props.monthsListFormat),\n )\n }),\n )\n }\n },\n})\n\nexport const YearsList = defineComponent({\n name: 'YearsList',\n props: {\n decade: { type: String, default: () => dayjs().format('YYYY-MM-DD') },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n yearsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'YYYY',\n },\n getYearControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n onYearSelect: Function as PropType<(date: DateStringValue) => void>,\n onYearMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n fullWidth: Boolean,\n },\n setup(props) {\n const controlRefs: (HTMLElement | null | undefined)[][] = []\n return () => {\n const years = getYearRange(props.decade)\n const isEnabled = (date: DateStringValue) =>\n !(\n (props.minDate && dayjs(date).endOf('year').isBefore(props.minDate, 'day')) ||\n (props.maxDate && dayjs(date).startOf('year').isAfter(props.maxDate, 'day')) ||\n props.getYearControlProps?.(date)?.disabled\n )\n const isSelected = (date: DateStringValue) =>\n Array.isArray(props.value)\n ? (props.value as DateStringValue[]).some((item) => dayjs(item).isSame(date, 'year'))\n : !!props.value && dayjs(props.value as any).isSame(date, 'year')\n const enabledYears = years.filter(isEnabled)\n const yearInTabOrder =\n enabledYears.find(isSelected) ??\n enabledYears.find((date) => dayjs().isSame(date, 'year')) ??\n enabledYears[0]\n\n return h(\n SimpleGrid,\n {\n cols: 3,\n spacing: 4,\n class: classes.controlsGrid,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n years.map((date, index) => {\n const rowIndex = Math.floor(index / 3)\n const cellIndex = index % 3\n const disabled = !isEnabled(date)\n const controlProps = props.getYearControlProps?.(date) || {}\n return h(\n PickerControl,\n {\n fullWidth: props.fullWidth,\n ...controlProps,\n disabled: disabled || controlProps.disabled,\n selected: isSelected(date),\n tabindex: date === yearInTabOrder ? 0 : -1,\n 'data-autofocus': isSelected(date) || undefined,\n ref: (node: any) => setGridRef(controlRefs, rowIndex, cellIndex, node),\n onClick: (event: MouseEvent) => {\n controlProps.onClick?.(event)\n if (!disabled) props.onYearSelect?.(date)\n },\n onMouseenter: (event: MouseEvent) => {\n controlProps.onMouseenter?.(event)\n props.onYearMouseEnter?.(date)\n },\n onKeydown: (event: KeyboardEvent) => {\n controlProps.onKeydown?.(event)\n const direction = keyToDirection(event.key)\n if (direction) {\n event.preventDefault()\n focusAdjacentControl(controlRefs, rowIndex, cellIndex, direction)\n }\n },\n },\n () =>\n typeof props.yearsListFormat === 'function'\n ? props.yearsListFormat(date)\n : dayjs(date).format(props.yearsListFormat),\n )\n }),\n )\n }\n },\n})\n\nfunction getNextLevel(level: CalendarLevel, direction: 'up' | 'down'): CalendarLevel {\n const order: CalendarLevel[] = ['month', 'year', 'decade']\n return order[\n Math.max(0, Math.min(order.length - 1, order.indexOf(level) + (direction === 'up' ? 1 : -1)))\n ]\n}\n\nfunction clampLevel(\n level: CalendarLevel | undefined,\n minLevel: CalendarLevel | undefined,\n maxLevel: CalendarLevel | undefined,\n): CalendarLevel {\n const order: CalendarLevel[] = ['month', 'year', 'decade']\n const toNumber = (value: CalendarLevel | undefined, fallback: number) =>\n value ? order.indexOf(value) : fallback\n const clamped = Math.max(\n toNumber(minLevel, 0),\n Math.min(toNumber(maxLevel, 2), toNumber(level, 0)),\n )\n return order[clamped]\n}\n\nexport const Calendar = defineComponent({\n name: 'Calendar',\n slots: Object as SlotsType<RenderDaySlots>,\n props: {\n defaultLevel: String as PropType<CalendarLevel>,\n level: String as PropType<CalendarLevel>,\n onLevelChange: Function as PropType<(level: CalendarLevel) => void>,\n maxLevel: { type: String as PropType<CalendarLevel>, default: 'decade' },\n minLevel: { type: String as PropType<CalendarLevel>, default: 'month' },\n defaultDate: [String, Date] as PropType<string | Date>,\n date: [String, Date] as PropType<string | Date>,\n onDateChange: Function as PropType<(date: DateStringValue) => void>,\n numberOfColumns: { type: Number, default: 1 },\n columnsToScroll: Number,\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n locale: String,\n firstDayOfWeek: Number,\n weekendDays: Array as PropType<number[]>,\n renderDay: Function as PropType<(date: DateStringValue) => VNodeChild>,\n getDayProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n getDayAriaLabel: Function as PropType<(date: DateStringValue) => string>,\n getMonthControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n getYearControlProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n excludeDate: Function as PropType<(date: DateStringValue) => boolean>,\n hideOutsideDates: Boolean,\n hideWeekdays: Boolean,\n monthLabelFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'MMMM YYYY',\n },\n yearLabelFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'YYYY',\n },\n decadeLabelFormat: Function as PropType<\n (start: DateStringValue, end: DateStringValue) => string\n >,\n monthsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'MMM',\n },\n yearsListFormat: {\n type: [String, Function] as PropType<string | ((date: DateStringValue) => string)>,\n default: 'YYYY',\n },\n onYearSelect: Function as PropType<(date: DateStringValue) => void>,\n onMonthSelect: Function as PropType<(date: DateStringValue) => void>,\n onMonthMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n onYearMouseEnter: Function as PropType<(date: DateStringValue) => void>,\n onDayClick: Function as PropType<(date: DateStringValue) => void>,\n withCellSpacing: { type: Boolean, default: true },\n highlightToday: Boolean,\n withWeekNumbers: Boolean,\n static: Boolean,\n fullWidth: Boolean,\n withNativeLevelSelect: Boolean,\n yearsSelectRange: Array as unknown as PropType<[number, number]>,\n },\n setup(props, { attrs, slots }) {\n const [_level, setLevel] = useUncontrolled<CalendarLevel>({\n value: computed(() =>\n props.level === undefined\n ? undefined\n : clampLevel(props.level, props.minLevel, props.maxLevel),\n ),\n defaultValue:\n props.defaultLevel === undefined\n ? undefined\n : clampLevel(props.defaultLevel, props.minLevel, props.maxLevel),\n finalValue: clampLevel(undefined, props.minLevel, props.maxLevel),\n onChange: (value) => props.onLevelChange?.(value),\n })\n const [_date, setDate] = useUncontrolled<DateStringValue>({\n value: computed(() => normalizeDate(props.date) || undefined),\n defaultValue: normalizeDate(props.defaultDate) || undefined,\n finalValue: getDefaultClampedDate({ minDate: props.minDate, maxDate: props.maxDate }),\n onChange: (value) => props.onDateChange?.(value),\n })\n\n const scroll = props.columnsToScroll || props.numberOfColumns || 1\n const updateDate = (amount: number, unit: 'month' | 'year') => {\n setDate(dayjs(_date.value).add(amount, unit).format('YYYY-MM-DD'))\n }\n\n return () =>\n h(\n Box,\n {\n ...attrs,\n class: [classes.calendar, (attrs as any).class],\n 'data-calendar': true,\n 'data-full-width': props.fullWidth || undefined,\n },\n () =>\n Array.from({ length: props.numberOfColumns || 1 }, (_, column) => {\n const currentDate = dayjs(_date.value)\n .add(\n column * scroll,\n _level.value === 'month' ? 'month' : _level.value === 'year' ? 'year' : 'year',\n )\n .format('YYYY-MM-DD')\n if (_level.value === 'month') {\n return h('div', { class: classes.calendarLevel }, [\n h(CalendarHeader, {\n label:\n typeof props.monthLabelFormat === 'function'\n ? props.monthLabelFormat(currentDate)\n : getMonthLabel(currentDate, props.monthLabelFormat, props.locale),\n hasNextLevel: props.maxLevel !== 'month',\n withPrevious: column === 0,\n withNext: column === (props.numberOfColumns || 1) - 1,\n fullWidth: props.fullWidth,\n withNativeLevelSelect: props.withNativeLevelSelect,\n yearsSelectRange: props.yearsSelectRange,\n calendarLevel: 'month',\n date: currentDate,\n locale: props.locale,\n onDateChange: setDate,\n minDate: props.minDate,\n maxDate: props.maxDate,\n disableNativeLevelSelect: props.date !== undefined && !props.onDateChange,\n onPrevious: () => updateDate(-scroll, 'month'),\n onNext: () => updateDate(scroll, 'month'),\n onLevelClick: () => setLevel(getNextLevel(_level.value, 'up')),\n }),\n h(Month, {\n month: currentDate,\n value: props.value,\n type: props.type,\n minDate: props.minDate,\n maxDate: props.maxDate,\n firstDayOfWeek: props.firstDayOfWeek,\n weekendDays: props.weekendDays,\n renderDay:\n props.renderDay ??\n ((slots.renderDay ?? slots.day)\n ? (date: DateStringValue) => (slots.renderDay ?? slots.day)?.({ date })\n : undefined),\n getDayProps: props.getDayProps,\n getDayAriaLabel: props.getDayAriaLabel,\n excludeDate: props.excludeDate,\n hideOutsideDates: props.hideOutsideDates,\n hideWeekdays: props.hideWeekdays,\n withCellSpacing: props.withCellSpacing,\n highlightToday: props.highlightToday,\n withWeekNumbers: props.withWeekNumbers,\n static: props.static,\n fullWidth: props.fullWidth,\n onDayClick: props.onDayClick,\n }),\n ])\n }\n\n if (_level.value === 'year') {\n return h('div', { class: classes.calendarLevel }, [\n h(CalendarHeader, {\n label:\n typeof props.yearLabelFormat === 'function'\n ? props.yearLabelFormat(currentDate)\n : dayjs(currentDate).format(props.yearLabelFormat),\n hasNextLevel: props.maxLevel === 'decade',\n withPrevious: column === 0,\n withNext: column === (props.numberOfColumns || 1) - 1,\n fullWidth: props.fullWidth,\n withNativeLevelSelect: props.withNativeLevelSelect,\n yearsSelectRange: props.yearsSelectRange,\n calendarLevel: 'year',\n date: currentDate,\n locale: props.locale,\n onDateChange: setDate,\n minDate: props.minDate,\n maxDate: props.maxDate,\n disableNativeLevelSelect: props.date !== undefined && !props.onDateChange,\n onPrevious: () => updateDate(-scroll, 'year'),\n onNext: () => updateDate(scroll, 'year'),\n onLevelClick: () => setLevel(getNextLevel(_level.value, 'up')),\n }),\n h(MonthsList, {\n year: currentDate,\n value: props.value,\n minDate: props.minDate,\n maxDate: props.maxDate,\n monthsListFormat: props.monthsListFormat,\n getMonthControlProps: props.getMonthControlProps,\n fullWidth: props.fullWidth,\n onMonthMouseEnter: props.onMonthMouseEnter,\n onMonthSelect: (date: DateStringValue) => {\n setDate(date)\n props.onMonthSelect?.(date)\n // Clamp instead of forcing 'month': for MonthPicker\n // (minLevel: 'year') this keeps the view at 'year'\n // instead of incorrectly drilling into a day grid.\n setLevel(clampLevel('month', props.minLevel, props.maxLevel))\n },\n }),\n ])\n }\n\n const years = getYearRange(currentDate)\n return h('div', { class: classes.calendarLevel }, [\n h(CalendarHeader, {\n label: props.decadeLabelFormat\n ? props.decadeLabelFormat(years[0], years[years.length - 1])\n : getDecadeLabel(currentDate),\n withPrevious: column === 0,\n withNext: column === (props.numberOfColumns || 1) - 1,\n hasNextLevel: false,\n fullWidth: props.fullWidth,\n onPrevious: () => updateDate(-10 * scroll, 'year'),\n onNext: () => updateDate(10 * scroll, 'year'),\n }),\n h(YearsList, {\n decade: currentDate,\n value: props.value,\n minDate: props.minDate,\n maxDate: props.maxDate,\n yearsListFormat: props.yearsListFormat,\n getYearControlProps: props.getYearControlProps,\n fullWidth: props.fullWidth,\n onYearMouseEnter: props.onYearMouseEnter,\n onYearSelect: (date: DateStringValue) => {\n setDate(date)\n props.onYearSelect?.(date)\n // Clamp instead of forcing 'year': for YearPicker\n // (minLevel: 'decade') this keeps the view at 'decade'\n // instead of incorrectly drilling into the months grid.\n setLevel(clampLevel('year', props.minLevel, props.maxLevel))\n },\n }),\n ])\n }),\n )\n },\n})\n\nexport const MonthLevel = Calendar\nexport const YearLevel = Calendar\nexport const DecadeLevel = Calendar\nexport const MonthLevelGroup = Calendar\nexport const YearLevelGroup = Calendar\nexport const DecadeLevelGroup = Calendar\nexport const LevelsGroup = Calendar\n\n// Granularity-aware range check for month/year range hover-previews, where\n// day-level ms precision doesn't apply - sorts the range endpoints then checks\n// date falls within [min, max] inclusive at the given unit.\nfunction isInRangeGranular(\n date: DateStringValue,\n range: [DateStringValue, DateStringValue],\n unit: 'month' | 'year',\n) {\n const sorted = [...range].sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1))\n return !dayjs(date).isBefore(sorted[0], unit) && !dayjs(date).isAfter(sorted[1], unit)\n}\n\nfunction getNextPickerValue(\n value: DatePickerValueType,\n date: DateStringValue,\n type: DatePickerType,\n sortDates = true,\n) {\n if (type === 'multiple') {\n const next = Array.isArray(value) ? [...(value as DateStringValue[])] : []\n const index = next.findIndex((item) => isSameDate(item, date))\n if (index >= 0) next.splice(index, 1)\n else next.push(date)\n return sortDates ? next.sort((a, b) => dayjs(a).valueOf() - dayjs(b).valueOf()) : next\n }\n\n if (type === 'range') {\n const [start, end] = Array.isArray(value) ? (value as DatesRangeValue) : [null, null]\n if (!start || (start && end) || dayjs(date).isBefore(start, 'day')) {\n return [date, null] as DatesRangeValue\n }\n return [start, date] as DatesRangeValue\n }\n\n return date\n}\n\nexport const DatePicker = defineComponent({\n name: 'DatePicker',\n slots: Object as SlotsType<RenderDaySlots>,\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n allowDeselect: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n presets: Array as PropType<Array<{ value: DatePickerValueType; label: string }>>,\n withNativeLevelSelect: Boolean,\n yearsSelectRange: Array as unknown as PropType<[number, number]>,\n },\n setup(props, { attrs, slots }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const selectDate = (date: DateStringValue) => {\n if (\n props.type === 'default' &&\n props.allowDeselect &&\n isSameDate(_value.value as DateValue, date)\n ) {\n setValue(null)\n } else {\n setValue(getNextPickerValue(_value.value, date, props.type, props.sortDates))\n }\n }\n\n // When presets are used, selecting one must also jump the Calendar's\n // displayed date/level to the preset's month. Calendar's onDateChange/\n // onLevelChange mirror its internal navigation back into these refs even\n // while `date`/`level` stay undefined (uncontrolled) - useUncontrolled\n // always invokes onChange regardless of controlled state - so passing\n // them through is a no-op until a preset click gives them a real value.\n const calendarDate = ref<DateStringValue | undefined>(undefined)\n const calendarLevel = ref<CalendarLevel | undefined>(undefined)\n const selectPreset = (value: DatePickerValueType) => {\n const date = Array.isArray(value) ? value[0] : value\n if (date != null) {\n calendarDate.value = date\n calendarLevel.value = 'month'\n }\n setValue(value)\n }\n\n return () => {\n const calendar = h(\n Calendar,\n {\n ...attrs,\n type: props.type,\n value: _value.value,\n date: calendarDate.value,\n onDateChange: (date: DateStringValue) => (calendarDate.value = date),\n level: calendarLevel.value,\n onLevelChange: (level: CalendarLevel) => (calendarLevel.value = level),\n withNativeLevelSelect: props.withNativeLevelSelect,\n yearsSelectRange: props.yearsSelectRange,\n onDayClick: selectDate,\n },\n {\n renderDay: slots.renderDay,\n day: slots.day,\n },\n )\n\n if (!props.presets?.length) return calendar\n\n return h('div', { class: classes.datePickerRoot }, [\n h(\n 'div',\n { class: classes.presetsList },\n props.presets.map((preset, index) =>\n h(\n UnstyledButton,\n {\n key: index,\n class: classes.presetButton,\n onClick: () => selectPreset(preset.value),\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => preset.label,\n ),\n ),\n ),\n calendar,\n ])\n }\n },\n})\n\n// YearPicker/MonthPicker used to be thin wrappers around DatePicker with\n// just a different minLevel/defaultLevel. That doesn't work: DatePicker only\n// ever wires Calendar's `onDayClick` to update its value, but with\n// minLevel=\"year\"/\"decade\" the day grid is never reached at all - selection\n// happens via Calendar's onMonthSelect/onYearSelect instead, which DatePicker\n// never listens to. The value was therefore never updated, so nothing ever\n// appeared selected. These are real, separate implementations now, each\n// wiring the selection callback that actually fires at their level.\nexport const YearPicker = defineComponent({\n name: 'YearPicker',\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n allowDeselect: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n presets: Array as PropType<Array<{ value: DatePickerValueType; label: string }>>,\n onYearSelect: Function as PropType<(date: DateStringValue) => void>,\n withNativeLevelSelect: Boolean,\n yearsSelectRange: Array as unknown as PropType<[number, number]>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const hoveredDate = ref<DateStringValue | null>(null)\n const selectYear = (date: DateStringValue) => {\n if (\n props.type === 'default' &&\n props.allowDeselect &&\n isSameDate(_value.value as DateValue, date)\n ) {\n setValue(null)\n } else {\n setValue(getNextPickerValue(_value.value, date, props.type, props.sortDates))\n }\n hoveredDate.value = null\n props.onYearSelect?.(date)\n }\n // For type=\"range\", PickerControl needs inRange/firstInRange/lastInRange\n // (not just `selected`) to draw the connecting highlight between the\n // start and end year. While only the start of the range is picked,\n // hovering over other years previews the highlight up to the hovered year.\n const yearControlProps = (date: DateStringValue) => {\n const external = (attrs as any).getYearControlProps?.(date) || {}\n if (props.type !== 'range' || !Array.isArray(_value.value)) return external\n const [start, end] = _value.value as DatesRangeValue\n const hovered = start && !end ? hoveredDate.value : null\n const inRange =\n start && hovered\n ? isInRangeGranular(date, [hovered, start], 'year')\n : start && end\n ? isInRangeGranular(date, [start, end], 'year')\n : false\n const firstInRange = start\n ? dayjs(date).isSame(start, 'year') && !(hovered && dayjs(hovered).isBefore(start, 'year'))\n : false\n const lastInRange = end\n ? dayjs(date).isSame(end, 'year')\n : !!(\n start &&\n hovered &&\n dayjs(hovered).isBefore(start, 'year') &&\n dayjs(date).isSame(start, 'year')\n )\n return {\n inRange,\n firstInRange,\n lastInRange,\n ...external,\n }\n }\n const calendarDate = ref<DateStringValue | undefined>(undefined)\n const selectPreset = (value: DatePickerValueType) => {\n const date = Array.isArray(value) ? value[0] : value\n if (date != null) calendarDate.value = date\n setValue(value)\n }\n\n return () => {\n const calendar = h(Calendar, {\n ...attrs,\n type: props.type,\n value: _value.value,\n date: calendarDate.value,\n onDateChange: (date: DateStringValue) => (calendarDate.value = date),\n defaultLevel: 'decade',\n minLevel: 'decade',\n withNativeLevelSelect: props.withNativeLevelSelect,\n yearsSelectRange: props.yearsSelectRange,\n onYearSelect: selectYear,\n getYearControlProps: yearControlProps,\n onYearMouseEnter: (date: DateStringValue) => {\n const [start, end] = Array.isArray(_value.value)\n ? (_value.value as DatesRangeValue)\n : [null, null]\n if (props.type === 'range' && start && !end) hoveredDate.value = date\n },\n onMouseleave: () => {\n hoveredDate.value = null\n },\n })\n\n if (!props.presets?.length) return calendar\n\n return h('div', { class: classes.datePickerRoot }, [\n h(\n 'div',\n { class: classes.presetsList },\n props.presets.map((preset, index) =>\n h(\n UnstyledButton,\n {\n key: index,\n class: classes.presetButton,\n onClick: () => selectPreset(preset.value),\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => preset.label,\n ),\n ),\n ),\n calendar,\n ])\n }\n },\n})\n\nexport const MonthPicker = defineComponent({\n name: 'MonthPicker',\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n allowDeselect: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n presets: Array as PropType<Array<{ value: DatePickerValueType; label: string }>>,\n onMonthSelect: Function as PropType<(date: DateStringValue) => void>,\n withNativeLevelSelect: Boolean,\n yearsSelectRange: Array as unknown as PropType<[number, number]>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const hoveredDate = ref<DateStringValue | null>(null)\n const selectMonth = (date: DateStringValue) => {\n if (\n props.type === 'default' &&\n props.allowDeselect &&\n isSameDate(_value.value as DateValue, date)\n ) {\n setValue(null)\n } else {\n setValue(getNextPickerValue(_value.value, date, props.type, props.sortDates))\n }\n hoveredDate.value = null\n props.onMonthSelect?.(date)\n }\n // For type=\"range\", PickerControl needs inRange/firstInRange/lastInRange\n // (not just `selected`) to draw the connecting highlight between the\n // start and end month. While only the start of the range is picked,\n // hovering over other months previews the highlight up to the hovered month.\n const monthControlProps = (date: DateStringValue) => {\n const external = (attrs as any).getMonthControlProps?.(date) || {}\n if (props.type !== 'range' || !Array.isArray(_value.value)) return external\n const [start, end] = _value.value as DatesRangeValue\n const hovered = start && !end ? hoveredDate.value : null\n const inRange =\n start && hovered\n ? isInRangeGranular(date, [hovered, start], 'month')\n : start && end\n ? isInRangeGranular(date, [start, end], 'month')\n : false\n const firstInRange = start\n ? dayjs(date).isSame(start, 'month') &&\n !(hovered && dayjs(hovered).isBefore(start, 'month'))\n : false\n const lastInRange = end\n ? dayjs(date).isSame(end, 'month')\n : !!(\n start &&\n hovered &&\n dayjs(hovered).isBefore(start, 'month') &&\n dayjs(date).isSame(start, 'month')\n )\n return {\n inRange,\n firstInRange,\n lastInRange,\n ...external,\n }\n }\n const calendarDate = ref<DateStringValue | undefined>(undefined)\n const selectPreset = (value: DatePickerValueType) => {\n const date = Array.isArray(value) ? value[0] : value\n if (date != null) calendarDate.value = date\n setValue(value)\n }\n\n return () => {\n const calendar = h(Calendar, {\n ...attrs,\n type: props.type,\n value: _value.value,\n date: calendarDate.value,\n onDateChange: (date: DateStringValue) => (calendarDate.value = date),\n defaultLevel: 'year',\n minLevel: 'year',\n withNativeLevelSelect: props.withNativeLevelSelect,\n yearsSelectRange: props.yearsSelectRange,\n onMonthSelect: selectMonth,\n getMonthControlProps: monthControlProps,\n onMonthMouseEnter: (date: DateStringValue) => {\n const [start, end] = Array.isArray(_value.value)\n ? (_value.value as DatesRangeValue)\n : [null, null]\n if (props.type === 'range' && start && !end) hoveredDate.value = date\n },\n onMouseleave: () => {\n hoveredDate.value = null\n },\n })\n\n if (!props.presets?.length) return calendar\n\n return h('div', { class: classes.datePickerRoot }, [\n h(\n 'div',\n { class: classes.presetsList },\n props.presets.map((preset, index) =>\n h(\n UnstyledButton,\n {\n key: index,\n class: classes.presetButton,\n onClick: () => selectPreset(preset.value),\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => preset.label,\n ),\n ),\n ),\n calendar,\n ])\n }\n },\n})\n\nexport const PickerInputBase = defineComponent({\n name: 'PickerInputBase',\n props: {\n formattedValue: { type: String, default: '' },\n dropdownOpened: Boolean,\n dropdownType: { type: String as PropType<'popover' | 'modal'>, default: 'popover' },\n label: [String, Number, Object, Function] as PropType<any>,\n placeholder: String,\n clearable: Boolean,\n disabled: Boolean,\n required: Boolean,\n error: [String, Boolean] as PropType<any>,\n size: { type: [String, Number], default: 'sm' },\n variant: String as PropType<'default' | 'filled' | 'unstyled'>,\n onClear: Function as PropType<() => void>,\n onDropdownClose: Function as PropType<() => void>,\n onDropdownOpen: Function as PropType<() => void>,\n },\n emits: ['click'],\n inheritAttrs: false,\n setup(props, { slots, emit, attrs }) {\n const opened = ref(props.dropdownOpened)\n watch(\n () => props.dropdownOpened,\n (value) => {\n opened.value = value\n },\n )\n const close = () => {\n opened.value = false\n props.onDropdownClose?.()\n }\n const open = () => {\n if (!props.disabled) {\n opened.value = true\n props.onDropdownOpen?.()\n }\n }\n\n const target = () =>\n h(\n InputBase,\n {\n ...attrs,\n component: 'button',\n type: 'button',\n label: props.label,\n placeholder: props.placeholder,\n disabled: props.disabled,\n required: props.required,\n error: props.error,\n pointer: true,\n size: props.size,\n variant: props.variant,\n rightSection:\n props.clearable && props.formattedValue\n ? h(CloseButton, {\n size: props.size,\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n onClick: (event: MouseEvent) => {\n event.stopPropagation()\n props.onClear?.()\n },\n })\n : undefined,\n // A manually-supplied rightSection defaults to pointer-events:none\n // (it's normally just a decorative icon), so the clear button would\n // render but never receive clicks unless we explicitly re-enable\n // pointer events for it here.\n rightSectionPointerEvents: props.clearable && props.formattedValue ? 'all' : undefined,\n onClick: (event: MouseEvent) => {\n emit('click', event)\n open()\n },\n },\n () =>\n props.formattedValue\n ? h('span', props.formattedValue)\n : h('span', { class: classes.placeholder }, props.placeholder),\n )\n\n return () =>\n props.dropdownType === 'modal'\n ? h(Box, null, () => [\n target(),\n h(\n Modal,\n { opened: opened.value, onClose: close, title: props.label, size: 'auto' },\n () => slots.default?.({ close }),\n ),\n ])\n : h(\n Popover,\n {\n opened: opened.value,\n onChange: (value: boolean) => (value ? open() : close()),\n position: 'bottom-start',\n trapFocus: true,\n returnFocus: false,\n },\n () => [\n h(Popover.Target, null, target),\n h(Popover.Dropdown, { class: classes.dropdown }, () => slots.default?.({ close })),\n ],\n )\n },\n})\n\nfunction createPickerInput(\n name: string,\n Picker: any,\n defaultLevel?: CalendarLevel,\n defaultValueFormat: string = 'MMMM D, YYYY',\n) {\n return defineComponent({\n name,\n props: {\n type: { type: String as PropType<DatePickerType>, default: 'default' },\n value: [String, Array, null] as PropType<DatePickerValueType>,\n defaultValue: [String, Array, null] as PropType<DatePickerValueType>,\n onChange: Function as PropType<(value: DatePickerValueType) => void>,\n valueFormat: { type: String, default: defaultValueFormat },\n labelSeparator: { type: String, default: '–' },\n locale: String,\n placeholder: String,\n label: [String, Number, Object, Function] as PropType<any>,\n clearable: Boolean,\n closeOnChange: { type: Boolean, default: true },\n sortDates: { type: Boolean, default: true },\n valueFormatter: Function as PropType<DateFormatter>,\n withNativeLevelSelect: Boolean,\n yearsSelectRange: Array as unknown as PropType<[number, number]>,\n },\n setup(props, { attrs }) {\n const finalValue = computed<DatePickerValueType>(() =>\n props.type === 'multiple' ? [] : props.type === 'range' ? [null, null] : null,\n )\n const [_value, setValue] = useUncontrolled<DatePickerValueType>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: finalValue.value,\n onChange: (value) => props.onChange?.(value),\n })\n const opened = ref(false)\n const formattedValue = computed(() =>\n formatValue(\n _value.value,\n props.type,\n props.valueFormat,\n props.locale,\n props.labelSeparator,\n props.valueFormatter,\n ),\n )\n return () =>\n h(\n PickerInputBase,\n {\n ...attrs,\n formattedValue: formattedValue.value,\n dropdownOpened: opened.value,\n label: props.label,\n placeholder: props.placeholder,\n clearable: props.clearable,\n onDropdownOpen: () => (opened.value = true),\n onDropdownClose: () => (opened.value = false),\n onClear: () => setValue(finalValue.value),\n },\n {\n default: ({ close }: any) =>\n h(Picker, {\n ...attrs,\n type: props.type,\n value: _value.value,\n sortDates: props.sortDates,\n defaultLevel,\n locale: props.locale,\n withNativeLevelSelect: props.withNativeLevelSelect,\n yearsSelectRange: props.yearsSelectRange,\n onChange: (value: DatePickerValueType) => {\n setValue(value)\n if (props.closeOnChange && props.type === 'default') close()\n },\n }),\n },\n )\n },\n })\n}\n\nexport const DatePickerInput = createPickerInput('DatePickerInput', DatePicker)\nexport const MonthPickerInput = createPickerInput(\n 'MonthPickerInput',\n MonthPicker,\n 'year',\n 'MMMM YYYY',\n)\nexport const YearPickerInput = createPickerInput('YearPickerInput', YearPicker, 'decade', 'YYYY')\n\nexport const HiddenDatesInput = defineComponent({\n name: 'HiddenDatesInput',\n props: {\n name: String,\n value: [String, Array, null] as PropType<DatePickerValueType>,\n },\n setup(props) {\n return () => {\n const value = Array.isArray(props.value)\n ? props.value.filter(Boolean).join(',')\n : props.value || ''\n return h('input', { type: 'hidden', name: props.name, value })\n }\n },\n})\n\nexport function dateStringParser(value: string, format = 'MMMM D, YYYY', locale?: string) {\n return dayjs(value, format, locale || 'en', true).format('YYYY-MM-DD')\n}\n\nexport function isDateValid({\n date,\n minDate,\n maxDate,\n}: {\n date: string\n minDate?: string | Date\n maxDate?: string | Date\n}) {\n const parsed = dayjs(date)\n return (\n parsed.isValid() &&\n !isBeforeMin(parsed.format('YYYY-MM-DD'), minDate) &&\n !isAfterMax(parsed.format('YYYY-MM-DD'), maxDate)\n )\n}\n\nexport const DateInput = defineComponent({\n name: 'DateInput',\n inheritAttrs: false,\n props: {\n value: [String, Date, null] as PropType<string | Date | null>,\n defaultValue: [String, Date, null] as PropType<string | Date | null>,\n onChange: Function as PropType<(value: DateValue) => void>,\n valueFormat: { type: String, default: 'MMMM D, YYYY' },\n dateParser: Function as PropType<(value: string) => DateStringValue | null>,\n locale: String,\n clearable: Boolean,\n minDate: [String, Date] as PropType<string | Date>,\n maxDate: [String, Date] as PropType<string | Date>,\n presets: Array as PropType<Array<{ value: DateValue; label: string }>>,\n },\n // A free-text input that also opens a Calendar dropdown (in a Popover,\n // same as DatePickerInput) on focus/click, so users can either type a\n // date or pick it from the calendar.\n setup(props, { attrs }) {\n const [_value, setValue] = useUncontrolled<DateValue>({\n // normalizeDate() coerces a missing prop to `null`, but useUncontrolled\n // relies on strict `undefined` to detect \"no value prop passed\" (i.e.\n // uncontrolled usage). Coercing to null here made the component always\n // look controlled-with-null, so setValue() never actually updated\n // anything without an external value/onChange binding.\n value: computed(() => (props.value === undefined ? undefined : normalizeDate(props.value))),\n defaultValue: normalizeDate(props.defaultValue),\n finalValue: null,\n onChange: (value) => props.onChange?.(value),\n })\n const formatValue = (value: DateValue) =>\n value\n ? dayjs(value)\n .locale(props.locale || 'en')\n .format(props.valueFormat)\n : ''\n const inputValue = ref(formatValue(_value.value))\n const opened = ref(false)\n watch(_value, (value) => {\n if (!opened.value) inputValue.value = formatValue(value)\n })\n const parseInput = (raw: string): DateStringValue | null => {\n const parsed =\n props.dateParser?.(raw) || dateStringParser(raw, props.valueFormat, props.locale)\n return dayjs(parsed).isValid() &&\n isDateValid({ date: parsed, minDate: props.minDate, maxDate: props.maxDate })\n ? parsed\n : null\n }\n const commit = () => {\n opened.value = false\n if (!inputValue.value.trim()) {\n if (props.clearable) setValue(null)\n else inputValue.value = formatValue(_value.value)\n return\n }\n const parsed = parseInput(inputValue.value)\n if (parsed) {\n setValue(parsed)\n } else {\n // Invalid input reverts to the last known valid value on blur.\n inputValue.value = formatValue(_value.value)\n }\n }\n const selectDay = (date: DateStringValue) => {\n setValue(date)\n inputValue.value = formatValue(date)\n opened.value = false\n }\n return () =>\n h(Box, null, () =>\n h(\n Popover,\n {\n opened: opened.value,\n onChange: (v: boolean) => (opened.value = v),\n position: 'bottom-start',\n },\n () => [\n h(Popover.Target, null, () =>\n h(InputBase, {\n ...attrs,\n value: inputValue.value,\n onInput: (event: Event) =>\n (inputValue.value = (event.target as HTMLInputElement).value),\n onFocus: () => (opened.value = true),\n onClick: () => (opened.value = true),\n onBlur: commit,\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === 'Escape') opened.value = false\n },\n rightSection:\n props.clearable && _value.value\n ? h(CloseButton, {\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n onClick: (event: MouseEvent) => {\n event.stopPropagation()\n inputValue.value = ''\n setValue(null)\n },\n })\n : undefined,\n // Without this, the rightSection div defaults to\n // pointer-events:none (it's normally a decorative icon),\n // so the clear button would render but never be clickable.\n rightSectionPointerEvents: props.clearable && _value.value ? 'all' : undefined,\n }),\n ),\n h(\n Popover.Dropdown,\n { onMousedown: (event: MouseEvent) => event.preventDefault() },\n () => [\n props.presets?.length\n ? h(Group, { gap: 4, mb: 4 }, () =>\n props.presets?.map((preset, index) =>\n h(\n Button,\n {\n key: index,\n size: 'xs',\n variant: 'light',\n onClick: () => selectDay(preset.value as DateStringValue),\n },\n () => preset.label,\n ),\n ),\n )\n : null,\n h(Calendar, {\n defaultDate: _value.value || undefined,\n minDate: props.minDate,\n maxDate: props.maxDate,\n locale: props.locale,\n getDayProps: (date: DateStringValue) => ({\n selected: isSameDate(date, _value.value),\n onClick: () => selectDay(date),\n }),\n }),\n ],\n ),\n ],\n ),\n )\n },\n})\n\nfunction splitTimeString(value = '') {\n const [time = '', period] = value.split(' ')\n const [hours = '00', minutes = '00', seconds = '00'] = time.split(':')\n return { hours, minutes, seconds, period }\n}\n\nexport function padTime(value: number | string) {\n return String(value).padStart(2, '0')\n}\n\nexport interface TimePickerAmPmLabels {\n am: string\n pm: string\n}\n\nconst defaultAmPmLabels: TimePickerAmPmLabels = { am: 'AM', pm: 'PM' }\n\nexport function getParsedTime({\n time,\n format,\n amPmLabels = defaultAmPmLabels,\n}: {\n time: string\n format: '12h' | '24h'\n amPmLabels?: TimePickerAmPmLabels\n}): { hours: number | null; minutes: number | null; seconds: number | null; amPm: string | null } {\n if (!time) return { hours: null, minutes: null, seconds: null, amPm: null }\n const { hours, minutes, seconds } = splitTimeString(time)\n const h24 = Number(hours)\n const m = Number(minutes)\n const s = Number(seconds)\n if (format === '12h') {\n const amPm = h24 >= 12 ? amPmLabels.pm : amPmLabels.am\n const hour12 = h24 % 12 === 0 ? 12 : h24 % 12\n return { hours: hour12, minutes: m, seconds: s, amPm }\n }\n return { hours: h24, minutes: m, seconds: s, amPm: null }\n}\n\nexport function getTimeString({\n hours,\n minutes,\n seconds,\n format = '24h',\n withSeconds = false,\n amPm = null,\n amPmLabels = defaultAmPmLabels,\n}: {\n hours: number | null\n minutes: number | null\n seconds?: number | null\n format?: '12h' | '24h'\n withSeconds?: boolean\n amPm?: string | null\n amPmLabels?: TimePickerAmPmLabels\n}): { valid: boolean; value: string } {\n if (hours === null || minutes === null) return { valid: false, value: '' }\n if (withSeconds && (seconds === null || seconds === undefined)) return { valid: false, value: '' }\n\n if (format === '24h') {\n return {\n valid: true,\n value: `${padTime(hours)}:${padTime(minutes)}${withSeconds ? `:${padTime(seconds || 0)}` : ''}`,\n }\n }\n\n if (amPm === null) return { valid: false, value: '' }\n let h24 = hours\n if (amPm === amPmLabels.pm && hours !== 12) h24 += 12\n else if (amPm === amPmLabels.am && hours === 12) h24 = 0\n return {\n valid: true,\n value: `${padTime(h24)}:${padTime(minutes)}${withSeconds ? `:${padTime(seconds || 0)}` : ''}`,\n }\n}\n\nexport function timeToSeconds(value: string) {\n const { hours, minutes, seconds } = splitTimeString(value)\n return Number(hours) * 3600 + Number(minutes) * 60 + Number(seconds || 0)\n}\n\nexport function isSameTime(a?: string, b?: string) {\n return !!a && !!b && timeToSeconds(a) === timeToSeconds(b)\n}\n\nexport function compareTime(a: string, b: string) {\n return timeToSeconds(a) - timeToSeconds(b)\n}\n\nexport function clampTime(value: string, min?: string, max?: string) {\n if (min && compareTime(value, min) < 0) return min\n if (max && compareTime(value, max) > 0) return max\n return value\n}\n\nexport function getTimeRange(start: string, end: string, step = 60) {\n const result: string[] = []\n for (let current = timeToSeconds(start); current <= timeToSeconds(end); current += step) {\n const hours = Math.floor(current / 3600)\n const minutes = Math.floor((current % 3600) / 60)\n result.push(`${padTime(hours)}:${padTime(minutes)}`)\n }\n return result\n}\n\nexport const TimeInput = defineComponent({\n name: 'TimeInput',\n props: {\n withSeconds: Boolean,\n value: String,\n defaultValue: String,\n onChange: Function as PropType<(event: Event) => void>,\n },\n setup(props, { attrs }) {\n return () =>\n h(InputBase, {\n ...attrs,\n type: 'time',\n step: props.withSeconds ? 1 : 60,\n value: props.value,\n defaultValue: props.defaultValue,\n onChange: props.onChange,\n })\n },\n})\n\n// TimeGrid renders its own TimeGridControl (a bordered/pill-shaped\n// default-variant button) rather than reusing PickerControl (which is styled\n// for square date-picker day/month/year cells).\nexport const TimeGrid = defineComponent({\n name: 'TimeGrid',\n props: {\n data: { type: Array as PropType<string[]>, default: () => [] },\n value: String,\n defaultValue: String,\n minTime: String,\n maxTime: String,\n allowDeselect: Boolean,\n disabled: Boolean,\n onChange: Function as PropType<(value: string | null) => void>,\n getControlProps: Function as PropType<(value: string) => Record<string, any>>,\n },\n setup(props, { attrs }) {\n const [_value, setValue] = useUncontrolled<string | null>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: null,\n onChange: (value) => props.onChange?.(value),\n })\n return () =>\n h(Box, { ...attrs, class: [classes.timeGridRoot, (attrs as any).class] }, () =>\n h(SimpleGrid, { cols: 3, spacing: 'xs', class: classes.timeGrid }, () =>\n props.data.map((item) => {\n const isDisabled =\n props.disabled ||\n (props.minTime && compareTime(item, props.minTime) < 0) ||\n (props.maxTime && compareTime(item, props.maxTime) > 0)\n const controlProps = props.getControlProps?.(item) || {}\n const active = isSameTime(_value.value ?? undefined, item)\n return h(\n UnstyledButton,\n {\n ...controlProps,\n class: [classes.timeGridControl, controlProps.class],\n disabled: isDisabled || controlProps.disabled,\n 'data-active': active || undefined,\n 'data-disabled': isDisabled || controlProps.disabled || undefined,\n onClick: (event: MouseEvent) => {\n controlProps.onClick?.(event)\n if (isDisabled) return\n const nextValue = props.allowDeselect && active ? null : item\n if (nextValue !== _value.value) setValue(nextValue)\n },\n },\n () => item,\n )\n }),\n ),\n )\n },\n})\n\n// Real Mantine's SpinInput is a distinct component from TimeInput: a bare\n// numeric text field with digit-typing, arrow-key increment/decrement, and\n// auto-advance to the next field once enough digits are typed. It powers\n// each hour/minute/second segment inside TimePicker.\nexport const SpinInput = defineComponent({\n name: 'SpinInput',\n inheritAttrs: false,\n props: {\n value: { type: Number as PropType<number | null>, default: null },\n min: { type: Number, required: true },\n max: { type: Number, required: true },\n onChange: Function as PropType<(value: number | null) => void>,\n step: { type: Number, default: 1 },\n onNextInput: Function as PropType<() => void>,\n onPreviousInput: Function as PropType<() => void>,\n allowTemporaryZero: Boolean,\n placeholder: { type: String, default: '--' },\n disableAutoAdvance: Boolean,\n disabled: Boolean,\n readOnly: Boolean,\n },\n setup(props, { attrs }) {\n const finiteMax = () => Number.isFinite(props.max)\n const maxDigit = () => (finiteMax() ? Number(props.max.toFixed(0)[0]) : Infinity)\n const arrowsMax = () => props.max + 1 - props.step\n\n const handleChange = (raw: string) => {\n if (props.readOnly) return\n const clearValue = raw.replace(/\\D/g, '')\n if (clearValue === '') return\n let parsedValue = 0\n for (let i = 0; i < clearValue.length; i += 1) {\n const digit = clearValue.charCodeAt(i) - 48\n const next = parsedValue * 10 + digit\n parsedValue = finiteMax() && next > props.max ? digit : next\n }\n const clampedValue =\n props.allowTemporaryZero && parsedValue === 0 && props.min > 0\n ? 0\n : finiteMax()\n ? Math.min(Math.max(parsedValue, props.min), props.max)\n : Math.max(parsedValue, props.min)\n props.onChange?.(clampedValue)\n if (!props.disableAutoAdvance && (clampedValue > maxDigit() || raw.startsWith('00'))) {\n props.onNextInput?.()\n }\n }\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (props.readOnly) return\n if (event.key === '0' || event.key === 'Num0') {\n const target = event.currentTarget as HTMLInputElement\n const { selectionStart, selectionEnd, value: inputValue } = target\n const isEntireValueSelected =\n inputValue.length > 0 && selectionStart === 0 && selectionEnd === inputValue.length\n if (props.value === 0 && !isEntireValueSelected) {\n event.preventDefault()\n props.onNextInput?.()\n }\n }\n if (event.key === 'Home') {\n event.preventDefault()\n props.onChange?.(props.min)\n }\n if (event.key === 'End') {\n event.preventDefault()\n if (finiteMax()) props.onChange?.(props.max)\n }\n if (event.key === 'Backspace' || event.key === 'Delete') {\n event.preventDefault()\n if (props.value !== null) props.onChange?.(null)\n else props.onPreviousInput?.()\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault()\n props.onNextInput?.()\n }\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n props.onPreviousInput?.()\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n const newValue =\n props.value === null\n ? props.min\n : finiteMax()\n ? Math.min(Math.max(props.value + props.step, props.min), arrowsMax())\n : Math.max(props.value + props.step, props.min)\n props.onChange?.(newValue)\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n const newValue =\n props.value === null\n ? finiteMax()\n ? arrowsMax()\n : props.min\n : Math.min(Math.max(props.value - props.step, props.min), arrowsMax())\n props.onChange?.(newValue)\n }\n }\n\n return () =>\n h('input', {\n ...attrs,\n type: 'text',\n role: 'spinbutton',\n 'aria-valuemin': props.min,\n 'aria-valuemax': finiteMax() ? props.max : undefined,\n 'aria-valuenow': props.value === null ? 0 : props.value,\n 'data-empty': props.value === null || undefined,\n inputmode: 'numeric',\n placeholder: props.placeholder,\n disabled: props.disabled,\n readonly: props.readOnly,\n value: props.value === null ? '' : padTime(props.value),\n onInput: (event: Event) => handleChange((event.target as HTMLInputElement).value),\n onKeydown: handleKeydown,\n onFocus: (event: FocusEvent) => (event.target as HTMLInputElement).select(),\n onClick: (event: MouseEvent) => {\n event.stopPropagation()\n ;(event.target as HTMLInputElement).select()\n },\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n })\n },\n})\n\nexport const AmPmInput = defineComponent({\n name: 'AmPmInput',\n props: {\n value: { type: String as PropType<string | null>, default: null },\n labels: { type: Object as PropType<TimePickerAmPmLabels>, default: () => defaultAmPmLabels },\n onChange: Function as PropType<(value: string) => void>,\n disabled: Boolean,\n readOnly: Boolean,\n },\n setup(props, { attrs }) {\n return () =>\n h(\n 'select',\n {\n ...attrs,\n class: classes.timePickerField,\n 'data-am-pm': true,\n disabled: props.disabled,\n value: props.value ?? props.labels.am,\n onChange: (event: Event) => props.onChange?.((event.target as HTMLSelectElement).value),\n },\n [\n h('option', { value: props.labels.am }, props.labels.am),\n h('option', { value: props.labels.pm }, props.labels.pm),\n ],\n )\n },\n})\n\nexport const TimeControlsList = defineComponent({\n name: 'TimeControlsList',\n props: {\n min: { type: Number, required: true },\n max: { type: Number, required: true },\n step: { type: Number, default: 1 },\n value: { type: Number as PropType<number | null>, default: null },\n onSelect: Function as PropType<(value: number) => void>,\n formatValue: Function as PropType<(value: number) => string>,\n },\n setup(props) {\n return () =>\n h(ScrollArea, { h: 200 }, () =>\n h(\n 'div',\n { class: classes.timePickerControlsList },\n Array.from(\n { length: Math.floor((props.max - props.min) / props.step) + 1 },\n (_, index) => props.min + index * props.step,\n ).map((item) =>\n h(\n UnstyledButton,\n {\n key: item,\n class: classes.timePickerControl,\n 'data-active': item === props.value || undefined,\n onClick: () => props.onSelect?.(item),\n },\n () => (props.formatValue ? props.formatValue(item) : padTime(item)),\n ),\n ),\n ),\n )\n },\n})\n\nexport const TimePicker = defineComponent({\n name: 'TimePicker',\n props: {\n value: String,\n defaultValue: String,\n onChange: Function as PropType<(value: string) => void>,\n type: { type: String as PropType<'time' | 'duration'>, default: 'time' },\n withSeconds: Boolean,\n min: String,\n max: String,\n format: { type: String as PropType<'12h' | '24h'>, default: '24h' },\n amPmLabels: {\n type: Object as PropType<TimePickerAmPmLabels>,\n default: () => defaultAmPmLabels,\n },\n hoursStep: { type: Number, default: 1 },\n minutesStep: { type: Number, default: 1 },\n secondsStep: { type: Number, default: 1 },\n clearable: Boolean,\n withDropdown: Boolean,\n disabled: Boolean,\n readOnly: Boolean,\n size: { type: [String, Number], default: 'sm' },\n presets: Array as PropType<Array<{ value: string; label: string }>>,\n closeDropdownOnPresetSelect: Boolean,\n // A ref object supplied by the parent (e.g. DateTimePicker) that gets\n // populated with the actual hours <input> DOM node, so the parent can\n // call .focus() on it directly to auto-focus the time input after a\n // date is picked.\n hoursRef: Object as PropType<{ value: any }>,\n },\n setup(props, { attrs }) {\n const effectiveFormat = computed<'12h' | '24h'>(() =>\n props.type === 'duration' ? '24h' : props.format,\n )\n const [_value, setValue] = useUncontrolled<string>({\n value: computed(() => props.value),\n defaultValue: props.defaultValue,\n finalValue: '',\n onChange: (value) => props.onChange?.(value),\n })\n\n const parsed = computed(() =>\n getParsedTime({\n time: _value.value,\n format: effectiveFormat.value,\n amPmLabels: props.amPmLabels,\n }),\n )\n const hours = ref(parsed.value.hours)\n const minutes = ref(parsed.value.minutes)\n const seconds = ref(parsed.value.seconds)\n const amPm = ref(parsed.value.amPm)\n watch(_value, (value) => {\n const next = getParsedTime({\n time: value,\n format: effectiveFormat.value,\n amPmLabels: props.amPmLabels,\n })\n hours.value = next.hours\n minutes.value = next.minutes\n seconds.value = next.seconds\n amPm.value = next.amPm\n })\n\n // Refs to the SpinInput/AmPmInput component instances (not raw DOM\n // nodes) - see focusRef() below for how these are used to call .focus().\n const hoursRef = ref<any>()\n const minutesRef = ref<any>()\n const secondsRef = ref<any>()\n const amPmRef = ref<any>()\n // SpinInput/AmPmInput are components, so their `ref` resolves to the\n // component instance rather than the underlying DOM node - fall back to\n // `.$el` (or use the value directly if it's already an element, e.g. a\n // plain DOM ref) to actually call .focus() on the input.\n const focusRef = (target: any) => {\n const el = target?.$el ?? target\n el?.focus?.()\n }\n const focus = (field: 'hours' | 'minutes' | 'seconds' | 'amPm') => {\n focusRef(\n (field === 'hours'\n ? hoursRef\n : field === 'minutes'\n ? minutesRef\n : field === 'seconds'\n ? secondsRef\n : amPmRef\n ).value,\n )\n }\n watch(\n hoursRef,\n (val) => {\n // hoursRef is a ref-forwarding prop: the parent passes a ref object\n // whose `.value` we populate with the resolved element, mirroring\n // how minutesRef/secondsRef/amPmRef forward focus targets elsewhere.\n // eslint-disable-next-line vue/no-mutating-props\n if (props.hoursRef) props.hoursRef.value = val?.$el ?? val\n },\n { immediate: true },\n )\n\n const commit = () => {\n const result = getTimeString({\n hours: hours.value,\n minutes: minutes.value,\n seconds: seconds.value,\n format: effectiveFormat.value,\n withSeconds: props.withSeconds,\n amPm: amPm.value,\n amPmLabels: props.amPmLabels,\n })\n setValue(result.valid ? result.value : '')\n }\n\n const setHours = (value: number | null) => {\n let adjusted = value\n if (effectiveFormat.value === '12h' && typeof value === 'number' && value > 12) {\n adjusted = ((value - 1) % 12) + 1\n }\n hours.value = adjusted\n commit()\n focus('hours')\n }\n const setMinutes = (value: number | null) => {\n minutes.value = value\n commit()\n focus('minutes')\n }\n const setSeconds = (value: number | null) => {\n seconds.value = value\n commit()\n focus('seconds')\n }\n const setAmPm = (value: string | null) => {\n amPm.value = value\n commit()\n focus('amPm')\n }\n const clear = () => {\n hours.value = null\n minutes.value = null\n seconds.value = null\n amPm.value = null\n setValue('')\n focus('hours')\n }\n\n const isClearable = computed(\n () =>\n props.clearable &&\n !props.readOnly &&\n !props.disabled &&\n (hours.value !== null ||\n minutes.value !== null ||\n seconds.value !== null ||\n amPm.value !== null),\n )\n\n const opened = ref(false)\n\n const handlePresetSelect = (timeString: string) => {\n setValue(timeString)\n if (props.closeDropdownOnPresetSelect) {\n opened.value = false\n }\n }\n\n const handlePaste = (event: ClipboardEvent) => {\n if (props.readOnly || props.disabled) return\n const value = event.clipboardData?.getData('text').trim()\n if (!value || !/^\\d+:\\d{2}(?::\\d{2})?(?:\\s+[aApP][mM])?$/.test(value)) return\n const next = getParsedTime({\n time: value,\n format: effectiveFormat.value,\n amPmLabels: props.amPmLabels,\n })\n if (\n next.hours === null ||\n next.minutes === null ||\n next.minutes > 59 ||\n (props.withSeconds && (next.seconds === null || next.seconds > 59)) ||\n (props.type === 'time' && effectiveFormat.value === '24h' && next.hours > 23)\n )\n return\n event.preventDefault()\n hours.value = next.hours\n minutes.value = next.minutes\n seconds.value = props.withSeconds ? next.seconds : null\n amPm.value = next.amPm\n const result = getTimeString({\n ...next,\n seconds: props.withSeconds ? next.seconds : null,\n format: effectiveFormat.value,\n withSeconds: props.withSeconds,\n amPmLabels: props.amPmLabels,\n })\n if (result.valid) setValue(clampTime(result.value, props.min, props.max))\n }\n\n return () =>\n h(\n Popover,\n {\n opened: props.type !== 'duration' && props.withDropdown && opened.value,\n position: 'bottom-start',\n transitionProps: { duration: 0 },\n },\n () => [\n h(Popover.Target, null, () =>\n h(\n InputBase,\n {\n ...attrs,\n component: 'div',\n size: props.size,\n disabled: props.disabled,\n onClick: () => {\n focus('hours')\n if (props.type !== 'duration' && props.withDropdown) opened.value = true\n },\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n onFocusin: () => {\n if (props.type !== 'duration' && props.withDropdown) opened.value = true\n },\n onFocusout: () => {\n if (props.withDropdown) opened.value = false\n },\n rightSection: isClearable.value\n ? h(CloseButton, {\n size: props.size,\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n onClick: clear,\n })\n : undefined,\n rightSectionPointerEvents: isClearable.value ? 'all' : undefined,\n },\n () => [\n h('div', { class: classes.timePickerFieldsRoot, dir: 'ltr' }, [\n h('div', { class: classes.timePickerFieldsGroup }, [\n h(SpinInput, {\n ref: hoursRef,\n class: classes.timePickerField,\n value: hours.value,\n min: effectiveFormat.value === '12h' ? 1 : 0,\n max:\n props.type === 'duration'\n ? Infinity\n : effectiveFormat.value === '12h'\n ? 12\n : 23,\n step: props.hoursStep,\n onChange: setHours,\n onNextInput: () => focus('minutes'),\n allowTemporaryZero: effectiveFormat.value === '12h',\n disableAutoAdvance: props.type === 'duration',\n onPaste: handlePaste,\n readOnly: props.readOnly,\n disabled: props.disabled,\n placeholder: '--',\n }),\n h('span', ':'),\n h(SpinInput, {\n ref: minutesRef,\n class: classes.timePickerField,\n value: minutes.value,\n min: 0,\n max: 59,\n step: props.minutesStep,\n onChange: setMinutes,\n onPreviousInput: () => focus('hours'),\n onNextInput: () => focus(props.withSeconds ? 'seconds' : 'amPm'),\n readOnly: props.readOnly,\n disabled: props.disabled,\n placeholder: '--',\n }),\n props.withSeconds ? h('span', ':') : null,\n props.withSeconds\n ? h(SpinInput, {\n ref: secondsRef,\n class: classes.timePickerField,\n value: seconds.value,\n min: 0,\n max: 59,\n step: props.secondsStep,\n onChange: setSeconds,\n onPreviousInput: () => focus('minutes'),\n onNextInput: () => focus('amPm'),\n readOnly: props.readOnly,\n disabled: props.disabled,\n placeholder: '--',\n })\n : null,\n effectiveFormat.value === '12h'\n ? h(AmPmInput, {\n ref: amPmRef,\n value: amPm.value,\n labels: props.amPmLabels,\n onChange: setAmPm,\n readOnly: props.readOnly,\n disabled: props.disabled,\n })\n : null,\n ]),\n ]),\n ],\n ),\n ),\n h(\n Popover.Dropdown,\n {\n class: classes.timePickerDropdown,\n onMousedown: (event: MouseEvent) => event.preventDefault(),\n },\n () => [\n props.presets?.length\n ? h(Group, { gap: 4, class: classes.timePickerPresetsGroup }, () =>\n props.presets?.map((preset) =>\n h(\n Button,\n {\n size: 'xs',\n variant: 'light',\n onClick: () => handlePresetSelect(preset.value),\n },\n () => preset.label,\n ),\n ),\n )\n : h('div', { class: classes.timePickerControlsListGroup }, [\n h(TimeControlsList, {\n min: effectiveFormat.value === '12h' ? 1 : 0,\n max: effectiveFormat.value === '12h' ? 12 : 23,\n step: props.hoursStep,\n value: hours.value,\n onSelect: setHours,\n }),\n h(TimeControlsList, {\n min: 0,\n max: 59,\n step: props.minutesStep,\n value: minutes.value,\n onSelect: setMinutes,\n }),\n props.withSeconds\n ? h(TimeControlsList, {\n min: 0,\n max: 59,\n step: props.secondsStep,\n value: seconds.value,\n onSelect: setSeconds,\n })\n : null,\n ]),\n ],\n ),\n ],\n )\n },\n})\n\nexport const TimeValue = defineComponent({\n name: 'TimeValue',\n props: {\n value: { type: [String, Date] as PropType<string | Date>, required: true },\n format: { type: String, default: 'HH:mm' },\n locale: String,\n },\n setup(props, { attrs }) {\n return () =>\n h(Text, attrs, () =>\n (props.value instanceof Date ? dayjs(props.value) : dayjs(`2024-01-01 ${props.value}`))\n .locale(props.locale || 'en')\n .format(props.format),\n )\n },\n})\n\nexport const DateTimePicker = defineComponent({\n name: 'DateTimePicker',\n props: {\n value: [String, Date, null] as PropType<string | Date | null>,\n defaultValue: [String, Date, null] as PropType<string | Date | null>,\n onChange: Function as PropType<(value: Date | null) => void>,\n valueFormat: { type: String, default: 'MMMM D, YYYY h:mm A' },\n clearable: Boolean,\n withSeconds: Boolean,\n size: { type: [String, Number], default: 'sm' },\n submitButtonProps: Object as PropType<Record<string, any>>,\n },\n setup(props, { attrs }) {\n // Populated with the actual hours <input> DOM node once TimePicker\n // mounts (see TimePicker's hoursRef prop) so we can auto-focus it right\n // after a date is picked from the calendar.\n const hoursRef = ref<any>()\n const [_value, setValue] = useUncontrolled<Date | null>({\n // Must stay `undefined` (not coerced to null) when props.value isn't\n // passed at all - useUncontrolled uses strict undefined-checking to\n // decide whether the component is controlled. Coercing a missing prop\n // to null made this component permanently \"controlled with null\",\n // so picking a date/time in the dropdown never updated anything\n // without an external value/onChange binding - the picker looked\n // completely broken/inert.\n value: computed(() =>\n props.value === undefined ? undefined : props.value === null ? null : new Date(props.value),\n ),\n defaultValue: props.defaultValue ? new Date(props.defaultValue) : null,\n finalValue: null,\n onChange: (value) => props.onChange?.(value),\n })\n const date = computed(() => (_value.value ? dayjs(_value.value).format('YYYY-MM-DD') : null))\n const time = computed(() =>\n _value.value ? dayjs(_value.value).format(props.withSeconds ? 'HH:mm:ss' : 'HH:mm') : '',\n )\n const updateDate = (nextDate: DatePickerValueType) => {\n if (!nextDate || Array.isArray(nextDate)) return\n setValue(assignTime(nextDate, `2024-01-01 ${time.value || '00:00'}`))\n // As soon as a date is picked, move focus straight to the time input's\n // hours field.\n hoursRef.value?.focus?.()\n }\n const updateTime = (nextTime: string) => {\n if (date.value) setValue(assignTime(date.value, `2024-01-01 ${nextTime}`))\n }\n return () =>\n h(\n PickerInputBase,\n {\n ...attrs,\n formattedValue: _value.value ? dayjs(_value.value).format(props.valueFormat) : '',\n clearable: props.clearable,\n onClear: () => setValue(null),\n },\n {\n default: ({ close }: { close: () => void }) =>\n h('div', { class: classes.dateTimePicker }, [\n // fullWidth is explicitly overridden to false here -\n // fullWidth:true is only meant for a standalone\n // InlineDateTimePicker embedded directly in a page. Inside a\n // Popover dropdown (this component), the dropdown itself sizes\n // to content (width:max-content), so a fullWidth calendar has\n // nothing definite to size against and blows out to fill the\n // viewport instead, with its contents getting squashed.\n h(DatePicker, { fullWidth: false, value: date.value, onChange: updateDate }),\n h('div', { class: classes.timeWrapper }, [\n // `class` can't be passed directly to TimePicker here: its\n // render root is a Popover call, and Popover has\n // inheritAttrs:false and never even reads `attrs` in its own\n // setup(), so a class handed to TimePicker silently gets\n // dropped along that path and never reaches any real DOM\n // node. Wrapping it in a plain div instead guarantees\n // `.timeInput`'s `flex: 1` actually lands on an element\n // inside the `.timeWrapper` flex row.\n // For a plain DOM element (not a component), h()'s third\n // argument must be actual children - a bare function is only\n // auto-invoked as the default slot for component vnodes, so\n // passing one here silently rendered an empty div.\n h('div', { class: classes.timeInput }, [\n h(TimePicker, {\n value: time.value,\n withSeconds: props.withSeconds,\n size: props.size,\n hoursRef,\n onChange: updateTime,\n }),\n ]),\n h(\n ActionIcon,\n {\n variant: 'default',\n size: `input-${props.size || 'sm'}`,\n 'data-mantine-stop-propagation': true,\n ...props.submitButtonProps,\n onClick: (event: MouseEvent) => {\n props.submitButtonProps?.onClick?.(event)\n close()\n },\n },\n () => h(CheckIcon, { size: '30%' }),\n ),\n ]),\n ]),\n },\n )\n },\n})\n\nexport const InlineDateTimePicker = DateTimePicker\n\nexport const MiniCalendar = defineComponent({\n name: 'MiniCalendar',\n props: {\n date: [String, Date] as PropType<string | Date>,\n defaultDate: [String, Date] as PropType<string | Date>,\n onDateChange: Function as PropType<(date: DateStringValue) => void>,\n value: [String, Date, null] as PropType<string | Date | null>,\n onChange: Function as PropType<(date: DateStringValue) => void>,\n maxDate: [String, Date] as PropType<string | Date>,\n minDate: [String, Date] as PropType<string | Date>,\n numberOfDays: { type: Number, default: 7 },\n monthLabelFormat: { type: String, default: 'MMM' },\n onNext: Function as PropType<() => void>,\n onPrevious: Function as PropType<() => void>,\n getDayProps: Function as PropType<(date: DateStringValue) => Record<string, any>>,\n size: { type: String as PropType<MantineSize>, default: 'sm' },\n previousControlProps: Object as PropType<Record<string, any>>,\n nextControlProps: Object as PropType<Record<string, any>>,\n locale: String,\n },\n setup(props, { attrs }) {\n const ctx = useDatesContext()\n const [_date, setDate] = useUncontrolled<DateStringValue>({\n value: computed(() => toDateString(props.date ?? null) ?? undefined),\n defaultValue: toDateString(props.defaultDate ?? null) ?? undefined,\n finalValue: toDateString(props.value ?? null) || dayjs().format('YYYY-MM-DD'),\n onChange: (value) => props.onDateChange?.(value),\n })\n\n const handleNext = () => {\n props.onNext?.()\n setDate(dayjs(_date.value).add(props.numberOfDays, 'days').format('YYYY-MM-DD'))\n }\n const handlePrevious = () => {\n props.onPrevious?.()\n setDate(dayjs(_date.value).subtract(props.numberOfDays, 'days').format('YYYY-MM-DD'))\n }\n\n return () => {\n const previousDisabled = props.minDate\n ? dayjs(_date.value).subtract(1, 'days').isBefore(dayjs(props.minDate))\n : false\n const nextDisabled = props.maxDate\n ? dayjs(_date.value).add(props.numberOfDays, 'days').isAfter(dayjs(props.maxDate))\n : false\n\n const range = Array.from({ length: props.numberOfDays }, (_, index) =>\n dayjs(_date.value).add(index, 'days'),\n ).map((date) => {\n const disabled =\n (props.minDate && date.isBefore(dayjs(props.minDate), 'day')) ||\n (props.maxDate && date.isAfter(dayjs(props.maxDate), 'day')) ||\n false\n const dayProps = props.getDayProps?.(toDateString(date.format('YYYY-MM-DD'))!) || {}\n\n return h(\n UnstyledButton,\n {\n key: date.toString(),\n disabled,\n 'aria-label': date.format('YYYY-MM-DD'),\n 'data-disabled': disabled || undefined,\n 'data-selected': (props.value && dayjs(date).isSame(props.value, 'day')) || undefined,\n ...dayProps,\n class: [classes.miniCalendarDay, dayProps.class],\n onClick: (event: MouseEvent) => {\n dayProps.onClick?.(event)\n props.onChange?.(toDateString(date.format('YYYY-MM-DD'))!)\n },\n },\n () => [\n h(\n 'span',\n { class: classes.miniCalendarDayMonth },\n date.locale(props.locale || ctx.locale).format(props.monthLabelFormat),\n ),\n h('span', { class: classes.miniCalendarDayNumber }, String(date.date())),\n ],\n )\n })\n\n return h(Box, { ...attrs, class: [classes.miniCalendarRoot, (attrs as any).class] }, () => [\n h(\n UnstyledButton,\n {\n onClick: handlePrevious,\n disabled: previousDisabled,\n 'data-disabled': previousDisabled || undefined,\n 'data-direction': 'previous',\n ...props.previousControlProps,\n class: [classes.miniCalendarControl, props.previousControlProps?.class],\n },\n () =>\n props.previousControlProps?.children ||\n h(AccordionChevron, { 'data-chevron': true, size: props.size }),\n ),\n h('div', { class: classes.miniCalendarDays }, range),\n h(\n UnstyledButton,\n {\n onClick: handleNext,\n disabled: nextDisabled,\n 'data-disabled': nextDisabled || undefined,\n 'data-direction': 'next',\n ...props.nextControlProps,\n class: [classes.miniCalendarControl, props.nextControlProps?.class],\n },\n () =>\n props.nextControlProps?.children ||\n h(AccordionChevron, { 'data-chevron': true, size: props.size }),\n ),\n ])\n }\n },\n})\n\nexport const getFormattedTime = ({\n value,\n format = 'HH:mm',\n}: {\n value: string | Date\n format?: string\n}) => (value instanceof Date ? dayjs(value) : dayjs(`2024-01-01 ${value}`)).format(format)\n\nexport type DayProps = InstanceType<typeof Day>['$props']\nexport type CalendarProps = InstanceType<typeof Calendar>['$props']\nexport type DatePickerProps = InstanceType<typeof DatePicker>['$props']\nexport type DatePickerInputProps = InstanceType<typeof DatePickerInput>['$props']\nexport type DateInputProps = InstanceType<typeof DateInput>['$props']\nexport type TimeInputProps = InstanceType<typeof TimeInput>['$props']\nexport type TimePickerProps = InstanceType<typeof TimePicker>['$props']\nexport type TimeGridProps = InstanceType<typeof TimeGrid>['$props']\nexport type TimeValueProps = InstanceType<typeof TimeValue>['$props']\nexport type DateTimePickerProps = InstanceType<typeof DateTimePicker>['$props']\nexport type MiniCalendarProps = InstanceType<typeof MiniCalendar>['$props']\nexport type DatesStylesNames = keyof typeof classes\nexport type PickerBaseProps = Record<string, any>\nexport type ControlsGroupSettings = Record<string, any>\nexport type DateInputSharedProps = Record<string, any>\nexport type CalendarSettings = Record<string, any>\nexport type CalendarBaseProps = Record<string, any>\nexport type CalendarAriaLabels = Record<string, string>\nexport type MonthLevelSettings = Record<string, any>\nexport type YearLevelSettings = Record<string, any>\nexport type DecadeLevelSettings = Record<string, any>\nexport type TimePickerPresets = Array<{ value: string; label: string }>\nexport type TimeGridData = string[]\nexport type TimeGridStylesNames = DatesStylesNames\nexport type TimePickerStylesNames = DatesStylesNames\nexport type DatePickerStylesNames = DatesStylesNames\nexport type DatePickerInputStylesNames = DatesStylesNames\nexport type DateInputStylesNames = DatesStylesNames\nexport type CalendarStylesNames = DatesStylesNames\n\nvoid ({} as CSSProperties)\n"],"mappings":"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"}
|