Files
LogiFlow/client/src/components/ui/calendar.tsx
T
michaelschal adc9edcfd8 Allow assigning tasks on weekends and improve calendar styling
Update task form schema to remove weekend restrictions for dates and enhance calendar component's weekend styling to be selectable.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: cc2d271b-82f0-4d6a-9302-a0b067ffb429
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/cc2d271b-82f0-4d6a-9302-a0b067ffb429/xVNiZBn
2025-08-19 09:30:14 +00:00

87 lines
3.3 KiB
TypeScript

import 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) {
// Week-ends stylés mais TOUJOURS SÉLECTIONNABLES pour les tâches
const isWeekend = (date: Date) => {
const day = date.getDay();
return day === 0 || day === 6; // Dimanche ou Samedi
};
return (
<DayPicker
showOutsideDays={showOutsideDays}
className={cn("p-3", className)}
modifiers={{
weekend: isWeekend,
...props.modifiers,
}}
modifiersClassNames={{
weekend: "weekend-day",
...props.modifiersClassNames,
}}
modifiersStyles={{
weekend: { backgroundColor: '#f0f9ff', border: '1px solid #bfdbfe' }, // Bleu clair pour week-ends
...props.modifiersStyles,
}}
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" }),
"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
),
nav_button_previous: "absolute left-1",
nav_button_next: "absolute right-1",
table: "w-full border-collapse space-y-1",
head_row: "flex",
head_cell:
"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
row: "flex w-full mt-2",
cell: "h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20 focus-within:outline-none",
day: cn(
buttonVariants({ variant: "ghost" }),
"h-9 w-9 p-0 font-normal aria-selected:opacity-100 focus:outline-none focus:ring-0 focus:ring-offset-0"
),
day_range_end: "day-range-end",
day_selected:
"bg-blue-600 text-white hover:bg-blue-700 hover:text-white focus:bg-blue-600 focus:text-white",
day_today: "bg-blue-50 text-blue-900 font-semibold border border-blue-200 hover:bg-blue-100",
day_outside:
"day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground",
day_disabled: "text-muted-foreground opacity-50",
day_range_middle:
"aria-selected:bg-accent aria-selected:text-accent-foreground",
day_hidden: "invisible",
...classNames,
}}
components={{
IconLeft: ({ className, ...props }) => (
<ChevronLeft className={cn("h-4 w-4", className)} {...props} />
),
IconRight: ({ className, ...props }) => (
<ChevronRight className={cn("h-4 w-4", className)} {...props} />
),
}}
{...props}
/>
)
}
Calendar.displayName = "Calendar"
export { Calendar }