Files
ProxMenux/AppImage/components/ui/calendar.tsx

64 lines
2.7 KiB
TypeScript
Raw Normal View History

2025-10-11 18:13:35 +02:00
"use client"
import type * as React from "react"
import { ChevronLeft, ChevronRight } from "lucide-react"
import { DayPicker } from "react-day-picker"
import { cn } from "@/lib/utils"
import { buttonVariants } from "@/components/ui/button"
export type CalendarProps = React.ComponentProps<typeof DayPicker>
function Calendar({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {
return (
<DayPicker
showOutsideDays={showOutsideDays}
className={cn("p-3", className)}
classNames={{
months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
month: "space-y-4",
caption: "flex justify-center pt-1 relative items-center",
caption_label: "text-sm font-medium",
nav: "space-x-1 flex items-center",
nav_button: cn(
buttonVariants({ variant: "outline" }),
2025-10-11 18:51:50 +02:00
"h-8 w-8 bg-background p-0 hover:bg-accent hover:text-accent-foreground border-border",
2025-10-11 18:13:35 +02:00
),
nav_button_previous: "absolute left-1",
nav_button_next: "absolute right-1",
table: "w-full border-collapse space-y-1",
2025-10-11 18:37:26 +02:00
head_row: "grid grid-cols-7 gap-1",
head_cell: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem] flex items-center justify-center",
row: "grid grid-cols-7 gap-1 mt-2",
cell: cn(
2025-10-11 18:51:50 +02:00
"h-9 w-9 text-center text-sm p-0 relative flex items-center justify-center",
2025-10-11 18:37:26 +02:00
"[&:has([aria-selected].day-range-end)]:rounded-r-md",
"[&:has([aria-selected].day-range-start)]:rounded-l-md",
2025-10-11 18:51:50 +02:00
"[&:has([aria-selected].day-range-middle)]:bg-primary/20",
2025-10-11 18:37:26 +02:00
"focus-within:relative focus-within:z-20",
),
2025-10-11 18:13:35 +02:00
day: cn(buttonVariants({ variant: "ghost" }), "h-9 w-9 p-0 font-normal aria-selected:opacity-100"),
2025-10-11 18:37:26 +02:00
day_range_end: "day-range-end rounded-r-md",
day_range_start: "day-range-start rounded-l-md",
2025-10-11 18:13:35 +02:00
day_selected:
"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
2025-10-11 18:37:26 +02:00
day_today: "bg-accent text-accent-foreground font-bold",
2025-10-11 18:13:35 +02:00
day_outside:
"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30",
day_disabled: "text-muted-foreground opacity-50",
2025-10-11 18:51:50 +02:00
day_range_middle: "aria-selected:bg-primary/20 aria-selected:text-foreground rounded-none",
2025-10-11 18:13:35 +02:00
day_hidden: "invisible",
...classNames,
}}
components={{
IconLeft: ({ ...props }) => <ChevronLeft className="h-4 w-4" />,
IconRight: ({ ...props }) => <ChevronRight className="h-4 w-4" />,
}}
{...props}
/>
)
}
Calendar.displayName = "Calendar"
export { Calendar }