import * as React from 'react'; import { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker'; import { cn } from '../../lib/utils'; import { Button, buttonVariants } from './button'; import { ChevronLeft, ChevronRight, ChevronDown } from '../icons'; export type CalendarProps = React.ComponentProps & { buttonVariant?: React.ComponentProps['variant']; }; function Calendar({ className, classNames, showOutsideDays = true, captionLayout = 'label', buttonVariant = 'ghost', formatters, components, ...props }: CalendarProps): JSX.Element { const defaultClassNames = getDefaultClassNames(); return ( date.toLocaleString('default', { month: 'short' }), ...formatters, }} classNames={{ root: cn('UR-UI-Calendar-Root', defaultClassNames.root), months: cn('UR-UI-Calendar-Months', defaultClassNames.months), month: cn('UR-UI-Calendar-Month', defaultClassNames.month), nav: cn('UR-UI-Calendar-Nav', defaultClassNames.nav), button_previous: cn( buttonVariants({ variant: buttonVariant }), 'UR-UI-Calendar-NavButton', 'UR-UI-Calendar-NavButtonPrevious', defaultClassNames.button_previous, ), button_next: cn( buttonVariants({ variant: buttonVariant }), 'UR-UI-Calendar-NavButton', 'UR-UI-Calendar-NavButtonNext', defaultClassNames.button_next, ), month_caption: cn( 'UR-UI-Calendar-MonthCaption', defaultClassNames.month_caption, ), dropdowns: cn('UR-UI-Calendar-Dropdowns', defaultClassNames.dropdowns), dropdown_root: cn( 'UR-UI-Calendar-DropdownRoot', defaultClassNames.dropdown_root, ), dropdown: cn('UR-UI-Calendar-Dropdown', defaultClassNames.dropdown), caption_label: cn( 'UR-UI-Calendar-CaptionLabel', defaultClassNames.caption_label, ), weekdays: cn('UR-UI-Calendar-Weekdays', defaultClassNames.weekdays), weekday: cn('UR-UI-Calendar-Weekday', defaultClassNames.weekday), week: cn('UR-UI-Calendar-Week', defaultClassNames.week), week_number_header: cn( 'UR-UI-Calendar-WeekNumberHeader', defaultClassNames.week_number_header, ), week_number: cn( 'UR-UI-Calendar-WeekNumber', defaultClassNames.week_number, ), day: cn('UR-UI-Calendar-Day', defaultClassNames.day), range_start: cn( 'UR-UI-Calendar-RangeStart', defaultClassNames.range_start, ), range_middle: cn( 'UR-UI-Calendar-RangeMiddle', defaultClassNames.range_middle, ), range_end: cn('UR-UI-Calendar-RangeEnd', defaultClassNames.range_end), today: cn('UR-UI-Calendar-Today', defaultClassNames.today), outside: cn('UR-UI-Calendar-Outside', defaultClassNames.outside), disabled: cn('UR-UI-Calendar-Disabled', defaultClassNames.disabled), hidden: cn('UR-UI-Calendar-Hidden', defaultClassNames.hidden), ...classNames, }} components={{ Root: ({ className, rootRef, ...props }) => { return (
); }, Chevron: ({ className, orientation, ...props }) => { if (orientation === 'left') { return ( ); } if (orientation === 'right') { return ( ); } return ( ); }, DayButton: CalendarDayButton, WeekNumber: ({ children, ...props }) => { return (
{children}
); }, ...components, }} {...props} /> ); } function CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps): JSX.Element { const defaultClassNames = getDefaultClassNames(); const ref = React.useRef(null); React.useEffect(() => { if (modifiers.focused) ref.current?.focus(); }, [modifiers.focused]); return (