"use client"; import { type CalendarDate, isSameDay, isSameMonth, isToday, } from "@internationalized/date"; import { useCalendarCell } from "@react-aria/calendar"; import { mergeProps } from "@react-aria/utils"; import clsx from "clsx"; import { useRef } from "react"; import { useHover } from "react-aria"; import { RangeCalendarState } from "react-stately"; import styles from "./calendar.module.css"; export function CalendarCell({ state, date, }: { state: RangeCalendarState; date: CalendarDate; }) { let ref = useRef(); let { cellProps, buttonProps, isSelected, isOutsideVisibleRange, isDisabled, formattedDate, isInvalid, } = useCalendarCell({ date }, state, ref); state; let highlightedRange = "highlightedRange" in state && state.highlightedRange; let isFirstInRange = highlightedRange && isSameDay(date, highlightedRange.start); let isLastInRange = highlightedRange && isSameDay(date, highlightedRange.end); let { hoverProps, isHovered } = useHover({}); let isTechnicallyValid = true; if (state.maxValue) { if (date > state.maxValue) { isTechnicallyValid = false; } } if (state.minValue) { if (date < state.minValue) { isTechnicallyValid = false; } } if (isTechnicallyValid) { cellProps["aria-disabled"] = false; if (highlightedRange) { if (date >= highlightedRange.start && date <= highlightedRange.end) { cellProps["aria-selected"] = true; } } } return ( ); }