"use client"; import { RiArrowLeftSFill, RiArrowRightSFill } from "@remixicon/react"; import * as React from "react"; import { cn } from "@/lib/utils/ui"; import { buttonVariants } from "./button"; type Month = { number: number; name: string; }; const MONTHS: Month[][] = [ [ { number: 0, name: "Jan" }, { number: 1, name: "Fev" }, { number: 2, name: "Mar" }, { number: 3, name: "Abr" }, ], [ { number: 4, name: "Mai" }, { number: 5, name: "Jun" }, { number: 6, name: "Jul" }, { number: 7, name: "Ago" }, ], [ { number: 8, name: "Set" }, { number: 9, name: "Out" }, { number: 10, name: "Nov" }, { number: 11, name: "Dez" }, ], ]; type MonthCalProps = { selectedMonth?: Date; onMonthSelect?: (date: Date) => void; onYearForward?: () => void; onYearBackward?: () => void; callbacks?: { yearLabel?: (year: number) => string; monthLabel?: (month: Month) => string; }; variant?: { calendar?: { main?: ButtonVariant; selected?: ButtonVariant; }; chevrons?: ButtonVariant; }; minDate?: Date; maxDate?: Date; disabledDates?: Date[]; }; type ButtonVariant = | "default" | "outline" | "ghost" | "link" | "destructive" | "secondary" | null | undefined; function MonthPicker({ onMonthSelect, selectedMonth, minDate, maxDate, disabledDates, callbacks, onYearBackward, onYearForward, variant, className, ...props }: React.HTMLAttributes & MonthCalProps) { return (
); } function MonthCal({ selectedMonth, onMonthSelect, callbacks, variant, minDate, maxDate, disabledDates, onYearBackward, onYearForward, }: MonthCalProps) { const [year, setYear] = React.useState( selectedMonth?.getFullYear() ?? new Date().getFullYear(), ); const [month, setMonth] = React.useState( selectedMonth?.getMonth() ?? new Date().getMonth(), ); const [menuYear, setMenuYear] = React.useState(year); if (minDate && maxDate && minDate > maxDate) minDate = maxDate; const disabledDatesMapped = disabledDates?.map((d) => { return { year: d.getFullYear(), month: d.getMonth() }; }); return ( <>
{callbacks?.yearLabel ? callbacks?.yearLabel(menuYear) : menuYear}
{MONTHS.map((monthRow, a) => { return ( {monthRow.map((m) => { return ( ); })} ); })}
); } MonthPicker.displayName = "MonthPicker"; export { MonthPicker };