UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

1 lines • 48.9 kB
{"version":3,"file":"use-calendar.cjs","names":["DEFAULT_HOLIDAYS: Date[]","DEFAULT_WEEKEND_DAYS: number[]","DEFAULT_FIRST_DAY_OF_WEEK: StartDayOfWeek","DEFAULT_MAX_DATE: Date","DEFAULT_MIN_DATE: Date","weekdays: { label: string; value: number }[]","weeks: { label: string; value: Date }[][]","days: { label: string; value: Date }[]","createDescendants","createContext","useI18n","useDateTimeFormat","value","useControllableState","startOfMonth","yearItems: { label: string; value: string }[]","yearItems","monthItems: { label: string; value: string }[]","month","monthItems","index: null | number","descendant: Descendant<HTMLTableCellElement> | undefined","getRootProps: PropGetter","getNavigationProps: PropGetter<\"nav\">","getYearSelectProps: PropGetter<\n \"div\",\n { value?: string; onChange?: (value: string) => void },\n { value?: string; onChange?: (value: string) => void }\n >","getMonthSelectProps: PropGetter<\n \"div\",\n { value?: string; onChange?: (value: string) => void },\n { value?: string; onChange?: (value: string) => void }\n >","getStatusProps: PropGetter","visuallyHiddenAttributes","getMonthProps: PropGetter<\"table\">","mergeRefs","getWeekdayProps: RequiredPropGetter<\"th\", { value: number }>","getButtonProps: PropGetter<\"button\">","getPrevButtonProps: PropGetter<\"button\">","getNextButtonProps: PropGetter<\"button\">","holiday","selectedValue","ev","calendarProps: (keyof UseCalendarProps)[]","useSplitProps"],"sources":["../../../../src/components/calendar/use-calendar.ts"],"sourcesContent":["\"use client\"\n\nimport type { FocusEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter, RequiredPropGetter } from \"../../core\"\nimport type { Descendant } from \"../../hooks/use-descendants\"\nimport type { Locale } from \"../../providers/i18n-provider\"\nimport type { AnyString, Dict } from \"../../utils\"\nimport dayjs from \"dayjs\"\nimport { useCallback, useMemo, useRef } from \"react\"\nimport { useSplitProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n contains,\n createContext,\n dataAttr,\n handlerAll,\n isArray,\n isDate,\n isNumber,\n isObject,\n mergeRefs,\n runKeyAction,\n useUpdateEffect,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport { useDateTimeFormat } from \"../format\"\n\nexport const DEFAULT_HOLIDAYS: Date[] = []\nexport const DEFAULT_WEEKEND_DAYS: number[] = [0, 6]\nexport const DEFAULT_FIRST_DAY_OF_WEEK: StartDayOfWeek = \"sunday\"\nexport const DEFAULT_MAX_DATE: Date = new Date(\"2099-12-31\")\nexport const DEFAULT_MIN_DATE: Date = new Date(\"1900-01-01\")\n\nexport type MaybeDate = Date | Date[] | undefined | { end?: Date; start?: Date }\nexport type MaybeDateValue<\n Multiple extends boolean = false,\n Range extends boolean = false,\n> = Range extends true\n ? { end?: Date; start?: Date }\n : Multiple extends true\n ? Date[]\n : Date | undefined\nexport type StartDayOfWeek = \"monday\" | \"sunday\"\nexport interface CalendarFormat {\n day?: Intl.DateTimeFormatOptions[\"day\"] | null\n month?: Intl.DateTimeFormatOptions[\"month\"] | null\n weekday?: Intl.DateTimeFormatOptions[\"weekday\"] | null\n year?: Intl.DateTimeFormatOptions[\"year\"] | null\n}\n\nexport const getStartOfWeek = (\n date: Date,\n startDayOfWeek: StartDayOfWeek,\n): Date =>\n dayjs(date)\n .subtract(startDayOfWeek === \"monday\" ? 1 : 0, \"day\")\n .startOf(\"week\")\n .add(startDayOfWeek === \"monday\" ? 1 : 0, \"day\")\n .toDate()\n\nexport const getEndOfWeek = (\n date: Date,\n startDayOfWeek: StartDayOfWeek,\n): Date =>\n dayjs(date)\n .subtract(startDayOfWeek === \"monday\" ? 1 : 0, \"day\")\n .endOf(\"week\")\n .add(startDayOfWeek === \"monday\" ? 1 : 0, \"day\")\n .toDate()\n\nexport const getWeekdays = (\n startDayOfWeek: StartDayOfWeek,\n format: (value: Date) => string,\n): { label: string; value: number }[] => {\n let weekdays: { label: string; value: number }[] = []\n\n const date = getStartOfWeek(new Date(), startDayOfWeek)\n\n for (let i = 0; i < 7; i += 1) {\n const label = format(date)\n const value = date.getDay()\n\n weekdays = [...weekdays, { label, value }]\n\n date.setDate(date.getDate() + 1)\n }\n\n return weekdays\n}\n\nexport const getMonthDays = (\n date: Date,\n startDayOfWeek: StartDayOfWeek,\n format: (value: Date) => string,\n): { label: string; value: Date }[][] => {\n const currentMonth = date.getMonth()\n const startOfMonth = new Date(date.getFullYear(), currentMonth, 1)\n const endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)\n const startDate = getStartOfWeek(startOfMonth, startDayOfWeek)\n const endDate = getEndOfWeek(endOfMonth, startDayOfWeek)\n\n const weeks: { label: string; value: Date }[][] = []\n\n while (startDate <= endDate) {\n const days: { label: string; value: Date }[] = []\n\n for (let i = 0; i < 7; i += 1) {\n const value = new Date(startDate)\n const label = format(value)\n\n days.push({ label, value })\n\n startDate.setDate(startDate.getDate() + 1)\n }\n\n weeks.push(days)\n }\n\n return weeks\n}\n\nexport const isSameYear = (\n date: Date | undefined,\n comparison: Date | undefined,\n): boolean =>\n date instanceof Date &&\n comparison instanceof Date &&\n dayjs(date).isSame(comparison, \"year\")\n\nexport const isSameMonth = (\n date: Date | undefined,\n comparison: Date | undefined,\n): boolean =>\n date instanceof Date &&\n comparison instanceof Date &&\n dayjs(date).isSame(comparison, \"month\")\n\nexport const isSameDate = (\n date: Date | undefined,\n comparison: Date | undefined,\n) =>\n date instanceof Date &&\n comparison instanceof Date &&\n dayjs(date).isSame(comparison, \"date\")\n\nexport const isAfterDate = (value: Date, date: Date | undefined) =>\n date instanceof Date && dayjs(value).isAfter(date, \"date\")\n\nexport const isBeforeDate = (value: Date, date: Date | undefined) =>\n date instanceof Date && dayjs(value).isBefore(date, \"date\")\n\nexport const isSameAfterDate = (value: Date, date: Date | undefined) =>\n date instanceof Date &&\n (dayjs(date).isSame(value, \"date\") || dayjs(value).isAfter(date, \"date\"))\n\nexport const isSameBeforeDate = (value: Date, date: Date | undefined) =>\n date instanceof Date &&\n (dayjs(date).isSame(value, \"date\") || dayjs(value).isBefore(date, \"date\"))\n\nexport const isAfterMonth = (value: Date, date: Date | undefined) =>\n date instanceof Date && dayjs(value).isAfter(date, \"month\")\n\nexport const isBeforeMonth = (value: Date, date: Date | undefined) =>\n date instanceof Date && dayjs(value).isBefore(date, \"month\")\n\nexport const isSameAfterMonth = (value: Date, date: Date | undefined) =>\n date instanceof Date &&\n (dayjs(date).isSame(value, \"month\") || dayjs(value).isAfter(date, \"month\"))\n\nexport const isSameBeforeMonth = (value: Date, date: Date | undefined) =>\n date instanceof Date &&\n (dayjs(date).isSame(value, \"month\") || dayjs(value).isBefore(date, \"month\"))\n\nexport const isAfterYear = (value: Date, date: Date | undefined) =>\n date instanceof Date && dayjs(value).isAfter(date, \"year\")\n\nexport const isBeforeYear = (value: Date, date: Date | undefined) =>\n date instanceof Date && dayjs(value).isBefore(date, \"year\")\n\nexport const isSameAfterYear = (value: Date, date: Date | undefined) =>\n date instanceof Date &&\n (dayjs(date).isSame(value, \"year\") || dayjs(value).isAfter(date, \"year\"))\n\nexport const isSameBeforeYear = (value: Date, date: Date | undefined) =>\n date instanceof Date &&\n (dayjs(date).isSame(value, \"year\") || dayjs(value).isBefore(date, \"year\"))\n\nexport const isIncludeDates = (comparison: Date, dates: Date[]) =>\n dates.some((date) => dayjs(date).isSame(comparison, \"date\"))\n\nexport const isInRange = (date: Date, minDate?: Date, maxDate?: Date) => {\n const hasMinDate = minDate instanceof Date\n const hasMaxDate = maxDate instanceof Date\n\n if (!hasMaxDate && !hasMinDate) return false\n\n const minInRange = hasMinDate ? isAfterDate(date, minDate) : false\n const maxInRange = hasMaxDate ? isBeforeDate(date, maxDate) : false\n\n return maxInRange && minInRange\n}\n\nexport const sortDates = (dates: Date[], type: \"asc\" | \"desc\" = \"asc\") => {\n if (type === \"asc\") {\n return dates.sort((a, b) => (dayjs(a).isAfter(b, \"date\") ? 1 : -1))\n } else {\n return dates.sort((a, b) => (dayjs(a).isBefore(b, \"date\") ? 1 : -1))\n }\n}\n\nexport const updateMaybeDateValue =\n (value: Date, max?: number) =>\n (prev: MaybeDate): MaybeDate => {\n if (isArray(prev)) {\n if (isIncludeDates(value, prev)) {\n return prev.filter((prevValue) => !isSameDate(prevValue, value))\n } else if (!isNumber(max) || prev.length < max) {\n return [...prev, value]\n } else {\n return prev\n }\n } else if (isObject(prev) && !isDate(prev)) {\n const { end, start } = prev\n\n if ((start && end) || !start) {\n return { end: undefined, start: value }\n } else {\n if (isSameDate(start, value)) {\n return { end: undefined, start: undefined }\n } else if (isBeforeDate(value, start)) {\n return { end: start, start: value }\n } else {\n return { end: value, start }\n }\n }\n } else {\n if (isSameDate(prev, value)) {\n return undefined\n } else {\n return value\n }\n }\n }\n\nexport const getAdjustedMonth = (value: MaybeDate, month: Date) => {\n if (isDate(value)) {\n if (!isSameMonth(value, month)) month = dayjs(value).set(\"date\", 1).toDate()\n } else if (isArray(value)) {\n const lastValue = value.at(-1)\n\n if (lastValue && !isSameMonth(lastValue, month))\n month = dayjs(lastValue).set(\"date\", 1).toDate()\n } else if (isObject(value)) {\n if (value.end) {\n month = dayjs(value.end).set(\"date\", 1).toDate()\n } else if (value.start) {\n month = dayjs(value.start).set(\"date\", 1).toDate()\n }\n }\n\n return month\n}\n\nconst {\n DescendantsContext: CalendarDescendantsContext,\n useDescendant: useCalendarDescendant,\n useDescendants: useCalendarDescendants,\n} = createDescendants<HTMLTableCellElement>()\n\nexport {\n CalendarDescendantsContext,\n useCalendarDescendant,\n useCalendarDescendants,\n}\n\ninterface CalendarContext\n extends Omit<\n UseCalendarReturn,\n | \"descendants\"\n | \"getMonthProps\"\n | \"getMonthSelectProps\"\n | \"getNavigationProps\"\n | \"getNextButtonProps\"\n | \"getPrevButtonProps\"\n | \"getRootProps\"\n | \"getStatusProps\"\n | \"getWeekdayProps\"\n | \"getYearSelectProps\"\n | \"monthDays\"\n | \"monthItems\"\n | \"weekdays\"\n | \"yearItems\"\n > {}\n\nconst [CalendarContext, useCalendarContext] = createContext<CalendarContext>({\n name: \"CalendarContext\",\n})\n\nexport { CalendarContext, useCalendarContext }\n\nexport interface UseCalendarProps<\n Multiple extends boolean = false,\n Range extends boolean = false,\n> extends Omit<HTMLProps, \"defaultValue\" | \"onChange\"> {\n /**\n * The initial month of the calendar.\n *\n * @default new Date()\n */\n defaultMonth?: Date\n /**\n * The initial value of the calendar.\n */\n defaultValue?: MaybeDateValue<Multiple, Range>\n /**\n * If `true`, disables the calendar.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Callback function to determine whether the day should be disabled.\n */\n excludeDate?: (date: Date) => boolean\n /**\n * The format used for conversion.\n * Check the docs to see the format of possible modifiers you can pass.\n *\n * @see https://day.js.org/docs/en/display/format#list-of-localized-formats\n */\n format?: CalendarFormat\n /**\n * Define holidays.\n */\n holidays?: Date[]\n /**\n * The locale of the calendar.\n *\n * @default 'en-US'\n */\n locale?: AnyString | Locale\n /**\n * The maximum selectable value.\n */\n max?: number\n /**\n * The maximum possible date.\n *\n * @default new Date(2099, 11, 31)\n */\n maxDate?: Date\n /**\n * The minimum possible date.\n *\n * @default new Date(1900, 0, 1)\n */\n minDate?: Date\n /**\n * The month of the calendar.\n */\n month?: Date\n /**\n * If `true`, the calendar will be multiple.\n *\n * @default false\n */\n multiple?: Multiple\n /**\n * If `true`, enables date range selection.\n *\n * @default false\n */\n range?: Range\n /**\n * Define the start day of the week.\n *\n * @default 'monday'\n */\n startDayOfWeek?: StartDayOfWeek\n /**\n * If `true`, highlight today.\n *\n * @default true\n */\n today?: boolean\n /**\n * The value of the calendar.\n */\n value?: MaybeDateValue<Multiple, Range>\n /**\n * Define weekend days.\n *\n * @default [0, 6]\n */\n weekendDays?: number[]\n /**\n * The callback invoked when value state changes.\n */\n onChange?: (value: MaybeDateValue<Multiple, Range>) => void\n /**\n * The callback invoked when month state changes.\n */\n onChangeMonth?: (value: Date) => void\n}\n\nexport const useCalendar = <\n Multiple extends boolean = false,\n Range extends boolean = false,\n>({\n defaultMonth = new Date(),\n multiple = false as Multiple,\n range = false as Range,\n defaultValue = (range\n ? { end: undefined, start: undefined }\n : multiple\n ? []\n : undefined) as MaybeDateValue<Multiple, Range>,\n disabled = false,\n excludeDate,\n format: format = {},\n holidays = DEFAULT_HOLIDAYS,\n locale: localeProp,\n max,\n maxDate = DEFAULT_MAX_DATE,\n minDate = DEFAULT_MIN_DATE,\n month: monthProp,\n startDayOfWeek = DEFAULT_FIRST_DAY_OF_WEEK,\n today = true,\n value: valueProp,\n weekendDays = DEFAULT_WEEKEND_DAYS,\n onChange: onChangeProp,\n onChangeMonth: onChangeMonthProp,\n ...rest\n}: UseCalendarProps<Multiple, Range> = {}) => {\n if (dayjs(minDate).isAfter(dayjs(maxDate))) maxDate = minDate\n\n const { locale: defaultLocale, t } = useI18n(\"calendar\")\n const locale = localeProp ?? defaultLocale\n const dateTimeFormat = useDateTimeFormat({ locale })\n const yearFormat = useCallback(\n (value: Date) => {\n if (format.year === null) {\n return value.getFullYear().toString()\n } else {\n const year = format.year ?? \"numeric\"\n\n return dateTimeFormat(value, { year })\n }\n },\n [dateTimeFormat, format.year],\n )\n const monthFormat = useCallback(\n (value: Date) => {\n if (format.month === null) {\n return (value.getMonth() + 1).toString()\n } else {\n const month = format.month ?? \"short\"\n\n return dateTimeFormat(value, { month })\n }\n },\n [dateTimeFormat, format.month],\n )\n const weekdayFormat = useCallback(\n (value: Date) => {\n return dateTimeFormat(value, {\n weekday: format.weekday ?? \"short\",\n })\n },\n [dateTimeFormat, format.weekday],\n )\n const dayFormat = useCallback(\n (value: Date) => {\n if (format.day) {\n return dateTimeFormat(value, {\n day: format.day,\n })\n } else {\n return value.getDate().toString()\n }\n },\n [dateTimeFormat, format.day],\n )\n const descendants = useCalendarDescendants()\n const monthRef = useRef<HTMLTableElement>(null)\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const [month, setMonth] = useControllableState({\n defaultValue: () => {\n if (dayjs(minDate).isAfter(dayjs(defaultMonth)))\n defaultMonth = dayjs(minDate).set(\"date\", 1).toDate()\n\n if (valueProp) {\n defaultMonth = getAdjustedMonth(valueProp, defaultMonth)\n } else if (defaultValue) {\n defaultMonth = getAdjustedMonth(defaultValue, defaultMonth)\n }\n\n return defaultMonth\n },\n value: monthProp,\n onChange: onChangeMonthProp,\n })\n const { endOfMonth, startOfMonth } = useMemo(() => {\n const startOfMonth = dayjs(month).startOf(\"month\").toDate()\n const endOfMonth = dayjs(month).endOf(\"month\").toDate()\n\n return { endOfMonth, startOfMonth }\n }, [month])\n const weekdays = useMemo(\n () => getWeekdays(startDayOfWeek, weekdayFormat),\n [startDayOfWeek, weekdayFormat],\n )\n const monthDays = useMemo(\n () => getMonthDays(month, startDayOfWeek, dayFormat),\n [month, startDayOfWeek, dayFormat],\n )\n const yearItems = useMemo(() => {\n const minYear = dayjs(minDate).year()\n const maxYear = dayjs(maxDate).year()\n const yearItems: { label: string; value: string }[] = []\n\n for (let year = minYear; year <= maxYear; year++) {\n const label = yearFormat(dayjs().set(\"year\", year).toDate())\n const value = year.toString()\n\n yearItems.push({ label, value })\n }\n\n return yearItems\n }, [maxDate, minDate, yearFormat])\n const monthItems = useMemo(() => {\n const monthItems: { label: string; value: string }[] = []\n const date = dayjs(month).toDate()\n\n for (let month = 0; month < 12; month++) {\n date.setMonth(month)\n\n if (isAfterMonth(date, maxDate)) continue\n if (isBeforeMonth(date, minDate)) continue\n\n const label = monthFormat(dayjs().set(\"month\", month).toDate())\n const value = month.toString()\n\n monthItems.push({ label, value })\n }\n\n return monthItems\n }, [month, maxDate, minDate, monthFormat])\n\n const onChange = useCallback(\n (value: Date) => {\n if (isBeforeDate(value, minDate)) return\n if (isAfterDate(value, maxDate)) return\n\n setValue(\n (prev) =>\n updateMaybeDateValue(value, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n },\n [max, maxDate, minDate, setValue],\n )\n\n const onMonthChange = useCallback(\n (month: Date) => {\n if (isAfterMonth(month, maxDate)) {\n setMonth(dayjs(maxDate).set(\"date\", 1).toDate())\n } else if (isBeforeMonth(month, minDate)) {\n setMonth(dayjs(minDate).set(\"date\", 1).toDate())\n } else {\n setMonth((prev) => {\n if (isSameMonth(prev, month)) return prev\n\n return month\n })\n }\n },\n [maxDate, minDate, setMonth],\n )\n\n const onPrevMonth = useCallback(() => {\n setMonth((prev) => {\n if (isSameMonth(prev, minDate)) return prev\n\n return dayjs(prev).subtract(1, \"month\").toDate()\n })\n }, [minDate, setMonth])\n\n const onNextMonth = useCallback(() => {\n setMonth((prev) => {\n if (isSameMonth(prev, maxDate)) return prev\n\n return dayjs(prev).add(1, \"month\").toDate()\n })\n }, [maxDate, setMonth])\n\n const onFocus = useCallback(() => {\n let index: null | number = null\n let descendant: Descendant<HTMLTableCellElement> | undefined\n\n if (value) {\n if (isDate(value)) {\n if (isSameMonth(month, new Date())) index = new Date().getDate() - 1\n } else if (isArray(value)) {\n const firstValue = value[0]\n\n if (firstValue && isSameMonth(month, firstValue))\n index = firstValue.getDate() - 1\n } else if (isObject(value)) {\n if (value.start && isSameMonth(month, value.start)) {\n index = value.start.getDate() - 1\n } else if (value.end && isSameMonth(month, value.end)) {\n index = value.end.getDate() - 1\n }\n }\n } else if (isSameMonth(month, new Date())) {\n index = new Date().getDate() - 1\n }\n\n descendant = descendants.value(index)\n\n if (!descendant) descendant = descendants.enabledFirstValue()\n\n if (!descendant) return\n\n descendant.node.focus()\n descendant.node.tabIndex = 0\n\n if (monthRef.current) monthRef.current.tabIndex = -1\n }, [descendants, month, value])\n\n const onBlur = useCallback((ev: FocusEvent<HTMLTableElement>) => {\n if (contains(monthRef.current, ev.relatedTarget)) return\n\n if (monthRef.current) monthRef.current.tabIndex = 0\n }, [])\n\n useUpdateEffect(() => {\n setMonth((prev) => getAdjustedMonth(value, prev))\n }, [value])\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => ({\n \"data-disabled\": dataAttr(disabled),\n ...rest,\n ...props,\n }),\n [disabled, rest],\n )\n\n const getNavigationProps: PropGetter<\"nav\"> = useCallback(\n (props = {}) => ({ \"data-disabled\": dataAttr(disabled), ...props }),\n [disabled],\n )\n\n const getYearSelectProps: PropGetter<\n \"div\",\n { value?: string; onChange?: (value: string) => void },\n { value?: string; onChange?: (value: string) => void }\n > = useCallback(\n (props = {}) => ({\n \"aria-label\": t(\"Choose the year\"),\n disabled,\n value: dayjs(month).get(\"year\").toString(),\n ...props,\n onChange: handlerAll(props.onChange, (value) =>\n onMonthChange(dayjs(month).set(\"year\", parseInt(value)).toDate()),\n ),\n }),\n [disabled, month, onMonthChange, t],\n )\n\n const getMonthSelectProps: PropGetter<\n \"div\",\n { value?: string; onChange?: (value: string) => void },\n { value?: string; onChange?: (value: string) => void }\n > = useCallback(\n (props = {}) => ({\n \"aria-label\": t(\"Choose the month\"),\n disabled,\n value: dayjs(month).get(\"month\").toString(),\n ...props,\n onChange: handlerAll(props.onChange, (value) =>\n onMonthChange(dayjs(month).set(\"month\", parseInt(value)).toDate()),\n ),\n }),\n [disabled, month, onMonthChange, t],\n )\n\n const getStatusProps: PropGetter = useCallback(\n (props = {}) => ({\n style: visuallyHiddenAttributes.style,\n \"aria-live\": \"polite\",\n children: dateTimeFormat(dayjs(month).toDate(), {\n month: \"long\",\n year: \"numeric\",\n }),\n role: \"status\",\n ...props,\n }),\n [dateTimeFormat, month],\n )\n\n const getMonthProps: PropGetter<\"table\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ref: mergeRefs(ref, monthRef),\n \"aria-label\": dateTimeFormat(dayjs(month).toDate(), {\n month: \"long\",\n year: \"numeric\",\n }),\n \"aria-multiselectable\": ariaAttr(multiple || range),\n \"data-disabled\": dataAttr(disabled),\n role: \"grid\",\n tabIndex: disabled ? -1 : 0,\n ...props,\n onBlur: handlerAll(props.onBlur, onBlur),\n onFocus: handlerAll(props.onFocus, onFocus),\n }),\n [dateTimeFormat, disabled, month, multiple, onBlur, onFocus, range],\n )\n\n const getWeekdayProps: RequiredPropGetter<\"th\", { value: number }> =\n useCallback(\n ({ value, ...props }) => ({\n \"data-disabled\": dataAttr(disabled),\n \"data-value\": value.toString(),\n abbr: dateTimeFormat(dayjs().set(\"day\", value).toDate(), {\n weekday: \"long\",\n }),\n ...props,\n }),\n [dateTimeFormat, disabled],\n )\n\n const getButtonProps: PropGetter<\"button\"> = useCallback(\n (props) => ({\n type: \"button\",\n \"data-disabled\": dataAttr(disabled),\n ...props,\n }),\n [disabled],\n )\n\n const getPrevButtonProps: PropGetter<\"button\"> = useCallback(\n (props = {}) =>\n getButtonProps({\n \"aria-label\": t(\"Go to the previous month\"),\n disabled: isSameBeforeMonth(month, minDate),\n ...props,\n onClick: handlerAll(props.onClick, onPrevMonth),\n }),\n [getButtonProps, minDate, month, onPrevMonth, t],\n )\n\n const getNextButtonProps: PropGetter<\"button\"> = useCallback(\n (props = {}) =>\n getButtonProps({\n \"aria-label\": t(\"Go to the next month\"),\n disabled: isSameAfterMonth(month, maxDate),\n ...props,\n onClick: handlerAll(props.onClick, onNextMonth),\n }),\n [getButtonProps, maxDate, month, onNextMonth, t],\n )\n\n return {\n descendants,\n disabled,\n endOfMonth,\n excludeDate,\n holidays,\n locale,\n max,\n maxDate,\n minDate,\n month,\n monthDays,\n monthItems,\n multiple,\n range,\n startDayOfWeek,\n startOfMonth,\n today,\n value,\n weekdays,\n weekendDays,\n yearItems,\n getMonthProps,\n getMonthSelectProps,\n getNavigationProps,\n getNextButtonProps,\n getPrevButtonProps,\n getRootProps,\n getStatusProps,\n getWeekdayProps,\n getYearSelectProps,\n onChange,\n onMonthChange,\n onNextMonth,\n onPrevMonth,\n }\n}\n\nexport type UseCalendarReturn = ReturnType<typeof useCalendar>\n\nexport interface UseCalendarDayProps extends Omit<HTMLProps<\"td\">, \"value\"> {\n value: Date\n}\n\nexport const useCalendarDay = ({ value, ...rest }: UseCalendarDayProps) => {\n const { t } = useI18n(\"calendar\")\n const {\n disabled: rootDisabled,\n excludeDate,\n holidays,\n locale,\n max,\n maxDate,\n minDate,\n month,\n startDayOfWeek,\n today: highlightToday,\n value: selectedValue,\n weekendDays,\n onChange,\n onMonthChange,\n onNextMonth,\n onPrevMonth,\n } = useCalendarContext()\n const dateTimeFormat = useDateTimeFormat({ locale })\n const cellRef = useRef<HTMLTableCellElement>(null)\n const outside = useMemo(() => !isSameMonth(month, value), [month, value])\n const holiday = useMemo(\n () => holidays.some((holiday) => isSameDate(holiday, value)),\n [holidays, value],\n )\n const weekend = useMemo(\n () => weekendDays.includes(value.getDay()),\n [weekendDays, value],\n )\n const today = useMemo(\n () => highlightToday && isSameDate(value, new Date()),\n [highlightToday, value],\n )\n const selected = useMemo(() => {\n if (isDate(selectedValue)) {\n return isSameDate(selectedValue, value)\n } else if (isArray(selectedValue)) {\n return selectedValue.some((selectedValue) =>\n isSameDate(selectedValue, value),\n )\n } else if (isObject(selectedValue)) {\n return (\n isSameDate(selectedValue.start, value) ||\n isSameDate(selectedValue.end, value)\n )\n }\n }, [selectedValue, value])\n const disabled = useMemo(() => {\n if (rootDisabled) return true\n if (isAfterDate(value, maxDate)) return true\n if (isBeforeDate(value, minDate)) return true\n if (excludeDate?.(value)) return true\n if (\n isArray(selectedValue) &&\n isNumber(max) &&\n selectedValue.length >= max &&\n !isIncludeDates(value, selectedValue as Date[])\n )\n return true\n\n return false\n }, [excludeDate, max, maxDate, minDate, rootDisabled, selectedValue, value])\n const between = useMemo(() => {\n if (isDate(selectedValue) || isArray(selectedValue)) return false\n\n return isInRange(value, selectedValue?.start, selectedValue?.end)\n }, [selectedValue, value])\n const startValue = useMemo(() => {\n if (isDate(selectedValue) || isArray(selectedValue)) return false\n\n const { end, start } = selectedValue ?? {}\n\n return start && end && isSameDate(value, start)\n }, [selectedValue, value])\n const endValue = useMemo(() => {\n if (isDate(selectedValue) || isArray(selectedValue)) return false\n\n const { end, start } = selectedValue ?? {}\n\n return start && end && isSameDate(value, end)\n }, [selectedValue, value])\n const { descendants, register } = useCalendarDescendant({\n disabled: disabled,\n })\n\n const onFocusDescendant = useCallback(\n (descendant?: Descendant<HTMLTableCellElement>) => {\n if (!descendant) return\n\n descendant.node.focus()\n descendant.node.tabIndex = 0\n },\n [],\n )\n\n const onBlur = useCallback(() => {\n if (cellRef.current) cellRef.current.tabIndex = -1\n }, [])\n\n const onClick = useCallback(() => {\n if (disabled) return\n\n onChange(value)\n }, [disabled, onChange, value])\n\n const onPrevDate = useCallback(() => {\n const descendant = descendants.enabledPrevValue(cellRef.current, false)\n\n if (descendant) {\n onFocusDescendant(descendant)\n } else if (!isSameBeforeDate(value, minDate)) {\n onPrevMonth()\n\n setTimeout(() => onFocusDescendant(descendants.enabledLastValue()))\n }\n }, [descendants, minDate, onFocusDescendant, onPrevMonth, value])\n\n const onNextDate = useCallback(() => {\n const descendant = descendants.enabledNextValue(cellRef.current, false)\n\n if (descendant) {\n onFocusDescendant(descendant)\n } else if (!isSameAfterDate(value, maxDate)) {\n onNextMonth()\n\n setTimeout(() => onFocusDescendant(descendants.enabledFirstValue()))\n }\n }, [descendants, maxDate, onFocusDescendant, onNextMonth, value])\n\n const onPrevTraverseDate = useCallback(\n (date: Date) => {\n onMonthChange(dayjs(date).set(\"date\", 1).toDate())\n\n setTimeout(() => {\n const descendant = isBeforeDate(date, minDate)\n ? descendants.enabledFirstValue()\n : descendants.value(date.getDate() - 1)\n\n if (!descendant) return\n\n if (descendant.disabled) {\n onFocusDescendant(descendants.enabledNextValue(descendant, false))\n } else {\n onFocusDescendant(descendant)\n }\n })\n },\n [descendants, minDate, onFocusDescendant, onMonthChange],\n )\n\n const onNextTraverseDate = useCallback(\n (date: Date) => {\n onMonthChange(dayjs(date).set(\"date\", 1).toDate())\n\n setTimeout(() => {\n const descendant = isAfterDate(date, maxDate)\n ? descendants.enabledLastValue()\n : descendants.value(date.getDate() - 1)\n\n if (!descendant) return\n\n if (descendant.disabled) {\n onFocusDescendant(descendants.enabledPrevValue(descendant, false))\n } else {\n onFocusDescendant(descendant)\n }\n })\n },\n [descendants, maxDate, onFocusDescendant, onMonthChange],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLTableCellElement>) => {\n runKeyAction(ev, {\n ArrowDown: () =>\n onNextTraverseDate(dayjs(value).add(1, \"week\").toDate()),\n ArrowLeft: onPrevDate,\n ArrowRight: onNextDate,\n ArrowUp: () =>\n onPrevTraverseDate(dayjs(value).subtract(1, \"week\").toDate()),\n End: () => onNextTraverseDate(getEndOfWeek(value, startDayOfWeek)),\n Enter: onClick,\n Home: () => onPrevTraverseDate(getStartOfWeek(value, startDayOfWeek)),\n PageDown: (ev) => {\n if (ev.shiftKey) {\n onNextTraverseDate(dayjs(value).add(1, \"year\").toDate())\n } else {\n onNextTraverseDate(dayjs(value).add(1, \"month\").toDate())\n }\n },\n PageUp: (ev) => {\n if (ev.shiftKey) {\n onPrevTraverseDate(dayjs(value).subtract(1, \"year\").toDate())\n } else {\n onPrevTraverseDate(dayjs(value).subtract(1, \"month\").toDate())\n }\n },\n Space: onClick,\n })\n },\n [\n onClick,\n onNextDate,\n onNextTraverseDate,\n onPrevDate,\n onPrevTraverseDate,\n startDayOfWeek,\n value,\n ],\n )\n\n const getDayProps: PropGetter<\"td\"> = useCallback(\n ({ ref, \"aria-label\": ariaLabel, ...props } = {}) => {\n if (!ariaLabel) {\n ariaLabel = dateTimeFormat(dayjs(value).toDate(), {\n day: \"numeric\",\n month: \"long\",\n weekday: \"long\",\n year: \"numeric\",\n })\n\n if (today) ariaLabel = `${t(\"Today\")}, ${ariaLabel}`\n }\n\n return {\n \"aria-disabled\": ariaAttr(disabled),\n \"aria-label\": ariaLabel,\n \"aria-selected\": ariaAttr(selected),\n \"data-between\": dataAttr(between),\n \"data-disabled\": dataAttr(disabled),\n \"data-end\": dataAttr(endValue),\n \"data-holiday\": dataAttr(holiday),\n \"data-outside\": dataAttr(outside),\n \"data-selected\": dataAttr(selected),\n \"data-start\": dataAttr(startValue),\n \"data-today\": dataAttr(today),\n \"data-value\": dayjs(value).format(\"YYYY-MM-DD\"),\n \"data-weekend\": dataAttr(weekend),\n tabIndex: -1,\n ...rest,\n ...props,\n ref: mergeRefs(ref, cellRef, outside ? null : register),\n onBlur: handlerAll(props.onBlur, onBlur),\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, (ev) => ev.preventDefault()),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n }\n },\n [\n between,\n dateTimeFormat,\n disabled,\n endValue,\n holiday,\n onBlur,\n onClick,\n onKeyDown,\n outside,\n register,\n rest,\n selected,\n startValue,\n t,\n today,\n value,\n weekend,\n ],\n )\n\n return { outside, getDayProps }\n}\n\nexport type UseCalendarDayReturn = ReturnType<typeof useCalendarDay>\n\nconst calendarProps: (keyof UseCalendarProps)[] = [\n \"defaultMonth\",\n \"defaultValue\",\n \"disabled\",\n \"excludeDate\",\n \"format\",\n \"holidays\",\n \"locale\",\n \"max\",\n \"maxDate\",\n \"minDate\",\n \"month\",\n \"range\",\n \"startDayOfWeek\",\n \"today\",\n \"value\",\n \"weekendDays\",\n \"onChange\",\n \"onChangeMonth\",\n]\n\nexport const useCalendarProps = <\n Y extends boolean = false,\n M extends boolean = false,\n D extends Dict = Dict,\n H extends keyof UseCalendarProps<Y, M> = keyof UseCalendarProps<Y, M>,\n>(\n props: D,\n omitKeys?: H[],\n) => {\n return useSplitProps(\n props,\n calendarProps.filter((key) => !omitKeys?.includes(key as H)),\n ) as unknown as [\n keyof UseCalendarProps<Y, M> extends H\n ? UseCalendarProps<Y, M>\n : Omit<UseCalendarProps<Y, M>, H>,\n Omit<\n M,\n keyof UseCalendarProps<Y, M> extends H\n ? keyof UseCalendarProps<Y, M>\n : Exclude<keyof UseCalendarProps<Y, M>, H>\n >,\n ]\n}\n"],"mappings":"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"}