beautify-event 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/event-calendar/ui/utils.ts","../components/event-calendar/ui/card.tsx","../components/event-calendar/ui/spinner.tsx","../components/event-calendar/theme-provider.tsx","../components/event-calendar/utils.ts","../components/event-calendar/dnd/helpers.ts","../components/event-calendar/dnd/drag-overlay.tsx","../components/event-calendar/dnd/event-calendar-dnd.tsx","../components/event-calendar/use-media-query.ts","../components/event-calendar/calendar-context.tsx","../components/event-calendar/ui/button.tsx","../components/event-calendar/ui/toggle.tsx","../components/event-calendar/ui/toggle-group.tsx","../components/event-calendar/mobile-week-strip.tsx","../components/event-calendar/mobile-month-picker.tsx","../components/event-calendar/calendar-header.tsx","../components/event-calendar/dnd/types.ts","../components/event-calendar/dnd/droppable-slot.tsx","../components/event-calendar/dnd/draggable-create-slot.tsx","../components/event-calendar/dnd/draggable-event.tsx","../components/event-calendar/month-view.tsx","../components/event-calendar/week-view.tsx","../components/event-calendar/day-view.tsx","../components/event-calendar/resource-view.tsx","../components/event-calendar/event-calendar.tsx"],"names":["twMerge","clsx","jsx","Loader2Icon","React","enUS","fr","ar","format","startOfWeek","startOfMonth","endOfWeek","endOfMonth","eachDayOfInterval","startOfDay","addDays","endOfDay","isWithinInterval","isSameDay","addMonths","subMonths","addWeeks","subWeeks","subDays","getHours","getMinutes","differenceInMinutes","setMinutes","setHours","addMinutes","DragOverlay","jsxs","Fragment","React2","DndContext","pointerWithin","useState","useEffect","createContext","useContext","cva","Slot","React3","ToggleGroupPrimitive","_a","_b","ChevronLeft","ChevronRight","isSameMonth","Calendar","ChevronUp","ChevronDown","useDroppable","useDraggable","useRef","useMemo","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport { cn } from \"./utils\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Card }\n","import { Loader2Icon } from \"lucide-react\"\nimport { cn } from \"./utils\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n )\n}\n\nexport { Spinner }\n","\"use client\"\n\nimport * as React from \"react\"\n\nexport type CalendarTheme = \"light\" | \"dark\" | \"system\"\n\ninterface EventCalendarThemeProviderProps {\n theme?: CalendarTheme\n /** Custom CSS variable overrides. Keys with or without -- prefix work. */\n themeVars?: Record<string, string>\n children: React.ReactNode\n}\n\nfunction useSystemTheme(): \"light\" | \"dark\" {\n const [systemTheme, setSystemTheme] = React.useState<\"light\" | \"dark\">(\"light\")\n\n React.useEffect(() => {\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\")\n const handler = () => setSystemTheme(mq.matches ? \"dark\" : \"light\")\n handler()\n mq.addEventListener(\"change\", handler)\n return () => mq.removeEventListener(\"change\", handler)\n }, [])\n\n return systemTheme\n}\n\nfunction normalizeThemeVars(vars?: Record<string, string>): React.CSSProperties {\n if (!vars || Object.keys(vars).length === 0) return {}\n return Object.fromEntries(\n Object.entries(vars).map(([key, value]) => [\n key.startsWith(\"--\") ? key : `--${key}`,\n value,\n ])\n ) as React.CSSProperties\n}\n\nexport function EventCalendarThemeProvider({\n theme = \"system\",\n themeVars,\n children,\n}: EventCalendarThemeProviderProps) {\n const systemTheme = useSystemTheme()\n const resolvedTheme = theme === \"system\" ? systemTheme : theme\n const isDark = resolvedTheme === \"dark\"\n const customStyle = normalizeThemeVars(themeVars)\n\n return (\n <div\n className={`event-calendar-root ${isDark ? \"dark\" : \"\"}`}\n data-event-calendar-theme={resolvedTheme}\n style={customStyle}\n >\n {children}\n </div>\n )\n}\n","import {\n startOfMonth,\n endOfMonth,\n startOfWeek,\n endOfWeek,\n eachDayOfInterval,\n isSameDay,\n isSameMonth,\n format,\n addMonths,\n subMonths,\n addWeeks,\n subWeeks,\n addDays,\n subDays,\n startOfDay,\n endOfDay,\n isWithinInterval,\n getHours,\n getMinutes,\n differenceInMinutes,\n setHours,\n setMinutes,\n} from \"date-fns\"\nimport { enUS } from \"date-fns/locale\"\nimport { fr } from \"date-fns/locale\"\nimport { ar } from \"date-fns/locale\"\nimport type { Locale } from \"date-fns\"\nimport type { CalendarEvent, ViewType, DateRange, CalendarConfig, TimeFormat } from \"./types\"\n\n/** Built-in locale map: en, en-US, fr, ar */\nconst LOCALE_MAP: Record<string, Locale> = {\n en: enUS,\n \"en-US\": enUS,\n fr,\n ar,\n}\n\nexport function getDateFnsLocale(localeCode: string): Locale {\n return LOCALE_MAP[localeCode] ?? enUS\n}\n\n/** Format date with locale support */\nexport function formatDate(date: Date, formatStr: string, localeCode: string = \"en-US\"): string {\n const locale = getDateFnsLocale(localeCode)\n return format(date, formatStr, { locale })\n}\n\nexport function getMonthDays(date: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] {\n const start = startOfWeek(startOfMonth(date), { weekStartsOn })\n const end = endOfWeek(endOfMonth(date), { weekStartsOn })\n return eachDayOfInterval({ start, end })\n}\n\nexport function getWeekDays(date: Date, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] {\n const start = startOfWeek(date, { weekStartsOn })\n const end = endOfWeek(date, { weekStartsOn })\n return eachDayOfInterval({ start, end })\n}\n\nexport function getTwoDays(date: Date, _weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): Date[] {\n const start = startOfDay(date)\n return [start, addDays(start, 1)]\n}\n\nexport function getEventsForDay(events: CalendarEvent[], day: Date): CalendarEvent[] {\n return events.filter((event) => {\n const eventStart = startOfDay(event.start)\n const eventEnd = endOfDay(event.end)\n return isWithinInterval(day, { start: eventStart, end: eventEnd }) ||\n isSameDay(event.start, day) ||\n isSameDay(event.end, day)\n })\n}\n\nexport function getEventsForHour(events: CalendarEvent[], day: Date, hour: number): CalendarEvent[] {\n return events.filter((event) => {\n const eventHour = getHours(event.start)\n return isSameDay(event.start, day) && eventHour === hour\n })\n}\n\nexport function navigateDate(date: Date, view: ViewType, direction: \"prev\" | \"next\"): Date {\n switch (view) {\n case \"month\":\n return direction === \"next\" ? addMonths(date, 1) : subMonths(date, 1)\n case \"week\":\n case \"resource\":\n return direction === \"next\" ? addWeeks(date, 1) : subWeeks(date, 1)\n case \"day\":\n return direction === \"next\" ? addDays(date, 1) : subDays(date, 1)\n case \"2day\":\n return direction === \"next\" ? addDays(date, 2) : subDays(date, 2)\n default:\n return date\n }\n}\n\nexport function getViewTitle(\n date: Date,\n view: ViewType,\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0,\n localeCode: string = \"en-US\"\n): string {\n const locale = getDateFnsLocale(localeCode)\n const fmt = (d: Date, str: string) => format(d, str, { locale })\n switch (view) {\n case \"month\":\n return fmt(date, \"MMMM yyyy\")\n case \"week\":\n case \"resource\": {\n const weekStart = startOfWeek(date, { weekStartsOn })\n const weekEnd = endOfWeek(date, { weekStartsOn })\n return `${fmt(weekStart, \"MMM d\")} - ${fmt(weekEnd, \"MMM d, yyyy\")}`\n }\n case \"day\":\n return fmt(date, \"EEEE, MMMM d, yyyy\")\n case \"2day\": {\n const days = getTwoDays(date, weekStartsOn)\n return `${fmt(days[0], \"MMM d\")} – ${fmt(days[1], \"MMM d, yyyy\")}`\n }\n default:\n return fmt(date, \"MMMM yyyy\")\n }\n}\n\nexport function getViewDateRange(date: Date, view: ViewType, weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0): DateRange {\n switch (view) {\n case \"month\":\n return {\n start: startOfWeek(startOfMonth(date), { weekStartsOn }),\n end: endOfWeek(endOfMonth(date), { weekStartsOn }),\n }\n case \"week\":\n case \"resource\":\n return {\n start: startOfWeek(date, { weekStartsOn }),\n end: endOfWeek(date, { weekStartsOn }),\n }\n case \"day\":\n return {\n start: startOfDay(date),\n end: endOfDay(date),\n }\n case \"2day\": {\n const days = getTwoDays(date, weekStartsOn)\n return {\n start: startOfDay(days[0]),\n end: endOfDay(days[1]),\n }\n }\n default:\n return {\n start: startOfMonth(date),\n end: endOfMonth(date),\n }\n }\n}\n\nexport function getEventPosition(\n event: CalendarEvent,\n hourHeight: number = 64,\n startHour: number = 0\n): { top: number; height: number } {\n const eventStartHour = getHours(event.start)\n const eventStartMinutes = getMinutes(event.start)\n const startMinutes = (eventStartHour - startHour) * 60 + eventStartMinutes\n const duration = differenceInMinutes(event.end, event.start)\n const top = (startMinutes / 60) * hourHeight\n const height = Math.max((duration / 60) * hourHeight, 24) // Minimum 24px height\n return { top: Math.max(top, 0), height }\n}\n\nexport function createSlotDate(day: Date, hour: number, minute: number = 0): Date {\n return setMinutes(setHours(day, hour), minute)\n}\n\nexport function getWeekdayNames(\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6 = 0,\n short: boolean = true,\n localeCode: string = \"en-US\"\n): string[] {\n const locale = getDateFnsLocale(localeCode)\n const baseDate = new Date(2024, 0, 7) // A Sunday\n const days: string[] = []\n for (let i = 0; i < 7; i++) {\n const dayIndex = (weekStartsOn + i) % 7\n const date = addDays(baseDate, dayIndex)\n days.push(format(date, short ? \"EEE\" : \"EEEE\", { locale }))\n }\n return days\n}\n\nexport function getHoursArray(startHour: number = 0, endHour: number = 24): number[] {\n const hours: number[] = []\n for (let i = startHour; i < endHour; i++) {\n hours.push(i)\n }\n return hours\n}\n\n/** Returns top offset (px) for current time line, or null if outside visible range */\nexport function getCurrentTimeLineTop(\n now: Date,\n startHour: number,\n endHour: number,\n hourHeight: number,\n topPadding: number = 16\n): number | null {\n const currentHour = getHours(now)\n const currentMinute = getMinutes(now)\n const currentTimeInHours = currentHour + currentMinute / 60\n if (currentTimeInHours < startHour || currentTimeInHours >= endHour) return null\n const top = topPadding + (currentTimeInHours - startHour) * hourHeight\n return top\n}\n\nexport function formatHour(hour: number, timeFormat: TimeFormat = \"12h\", localeCode: string = \"en-US\"): string {\n if (timeFormat === \"24h\") {\n return `${hour.toString().padStart(2, \"0\")}:00`\n }\n // 12-hour format with locale (uses date-fns for localized AM/PM)\n const locale = getDateFnsLocale(localeCode)\n const d = new Date(2000, 0, 1, hour, 0, 0)\n return format(d, \"h a\", { locale })\n}\n\nexport const defaultConfig: CalendarConfig = {\n weekStartsOn: 0,\n startHour: 0, // 12:00 AM - full day start\n endHour: 24, // 11:59 PM - full day end\n hourHeight: 64,\n timeSeriesMaxHeight: 400,\n showCurrentTimeLine: true,\n maxEventsPerDay: 3,\n defaultEventColor: \"#3b82f6\",\n defaultResourceColor: \"#6366f1\",\n locale: \"en-US\",\n timeFormat: \"12h\",\n}\n\nexport { isSameDay, isSameMonth, format, startOfWeek, endOfWeek, getHours, startOfDay, endOfDay } from \"date-fns\"\n","import {\n startOfDay,\n endOfDay,\n differenceInMinutes,\n addMinutes,\n setHours,\n setMinutes,\n} from \"date-fns\"\nimport type { CalendarEvent, SlotInfo } from \"../types\"\nimport type { SlotDropData } from \"./types\"\nimport { createSlotDate } from \"../utils\"\n\nexport function slotDataToSlotInfo(\n data: SlotDropData,\n endHour?: number\n): SlotInfo {\n switch (data.view) {\n case \"day\":\n case \"week\": {\n const start = createSlotDate(data.day, data.hour)\n const end = createSlotDate(data.day, data.hour + 1)\n return { start, end }\n }\n case \"month\": {\n const start = startOfDay(data.day)\n const end = endOfDay(data.day)\n return { start, end }\n }\n case \"resource\": {\n const start = createSlotDate(data.day, data.hour)\n const end = createSlotDate(data.day, data.hour + 1)\n return { start, end, resourceId: data.resourceId }\n }\n }\n}\n\nexport function computeCreateSlotInfo(\n from: SlotDropData,\n to: SlotDropData\n): SlotInfo {\n if (from.view === \"month\" && to.view === \"month\") {\n const start = startOfDay(to.day)\n const end = endOfDay(to.day)\n return { start, end }\n }\n\n if (\n (from.view === \"day\" || from.view === \"week\") &&\n (to.view === \"day\" || to.view === \"week\")\n ) {\n const startDate = from.day.getTime() < to.day.getTime() ? from.day : to.day\n const endDate = from.day.getTime() < to.day.getTime() ? to.day : from.day\n const startHour =\n from.day.getTime() === startDate.getTime() ? from.hour : to.hour\n const endHour =\n from.day.getTime() === endDate.getTime() ? from.hour : to.hour\n\n const start = createSlotDate(startDate, Math.min(startHour, endHour))\n const end = createSlotDate(endDate, Math.max(startHour, endHour) + 1)\n return { start, end }\n }\n\n if (\n from.view === \"resource\" &&\n to.view === \"resource\" &&\n from.resourceId === to.resourceId\n ) {\n const startDate = from.day.getTime() < to.day.getTime() ? from.day : to.day\n const endDate = from.day.getTime() < to.day.getTime() ? to.day : from.day\n const startHour =\n from.day.getTime() === startDate.getTime() ? from.hour : to.hour\n const endHour =\n from.day.getTime() === endDate.getTime() ? from.hour : to.hour\n const start = createSlotDate(startDate, Math.min(startHour, endHour))\n const end = createSlotDate(endDate, Math.max(startHour, endHour) + 1)\n return { start, end, resourceId: from.resourceId }\n }\n\n return slotDataToSlotInfo(to)\n}\n\nexport function computeMoveEvent(\n event: CalendarEvent,\n dropData: SlotDropData\n): { newStart: Date; newEnd: Date; resourceId?: string } {\n const duration = differenceInMinutes(event.end, event.start)\n\n switch (dropData.view) {\n case \"day\":\n case \"week\": {\n const newStart = createSlotDate(dropData.day, dropData.hour)\n const newEnd = addMinutes(newStart, duration)\n return { newStart, newEnd }\n }\n case \"month\": {\n const newStart = setMinutes(\n setHours(dropData.day, event.start.getHours()),\n event.start.getMinutes()\n )\n const newEnd = addMinutes(newStart, duration)\n return { newStart, newEnd }\n }\n case \"resource\": {\n const newStart = createSlotDate(dropData.day, dropData.hour)\n const newEnd = addMinutes(newStart, duration)\n return { newStart, newEnd, resourceId: dropData.resourceId }\n }\n }\n}\n","\"use client\"\n\nimport { DragOverlay } from \"@dnd-kit/core\"\nimport { formatDate } from \"../utils\"\nimport type { CalendarEvent, ViewType } from \"../types\"\n\ninterface CalendarDragOverlayProps {\n activeEvent: CalendarEvent | null\n activeCreateSlotInfo: { start: Date; end: Date } | null\n defaultEventColor: string\n locale?: string\n renderEvent?: (event: CalendarEvent, view: ViewType) => React.ReactNode\n}\n\nexport function CalendarDragOverlay({\n activeEvent,\n activeCreateSlotInfo,\n defaultEventColor,\n locale = \"en-US\",\n renderEvent,\n}: CalendarDragOverlayProps) {\n return (\n <DragOverlay dropAnimation={null}>\n {activeEvent ? (\n <div className=\"rounded-lg border border-border bg-card px-3 py-2 shadow-lg opacity-90\">\n {renderEvent ? (\n renderEvent(activeEvent, \"day\")\n ) : (\n <>\n <div\n className=\"font-semibold text-sm\"\n style={{\n color: activeEvent.color || defaultEventColor,\n }}\n >\n {activeEvent.title}\n </div>\n <div className=\"text-xs text-muted-foreground mt-0.5\">\n {formatDate(activeEvent.start, \"h:mm a\", locale)} -{\" \"}\n {formatDate(activeEvent.end, \"h:mm a\", locale)}\n </div>\n </>\n )}\n </div>\n ) : activeCreateSlotInfo ? (\n <div className=\"rounded-lg border-2 border-dashed border-primary/50 bg-primary/10 px-3 py-2 shadow-lg\">\n <div className=\"text-sm font-medium text-primary\">\n {formatDate(activeCreateSlotInfo.start, \"h:mm a\", locale)} -{\" \"}\n {formatDate(activeCreateSlotInfo.end, \"h:mm a\", locale)}\n </div>\n </div>\n ) : null}\n </DragOverlay>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { DndContext, pointerWithin } from \"@dnd-kit/core\"\nimport type { CalendarEvent, SlotInfo, ViewType } from \"../types\"\nimport type { SlotDropData } from \"./types\"\nimport { slotDataToSlotInfo, computeCreateSlotInfo, computeMoveEvent } from \"./helpers\"\nimport { CalendarDragOverlay } from \"./drag-overlay\"\n\ninterface EventCalendarDndProviderProps {\n enableDragToCreate?: boolean\n enableDragToMove?: boolean\n onEventCreate?: (slotInfo: SlotInfo) => void\n onEventMove?: (params: {\n event: CalendarEvent\n newStart: Date\n newEnd: Date\n resourceId?: string\n }) => void\n defaultEventColor: string\n locale?: string\n renderEvent?: (event: CalendarEvent, view: ViewType) => React.ReactNode\n children: React.ReactNode\n}\n\nexport function EventCalendarDndProvider({\n enableDragToCreate = false,\n enableDragToMove = false,\n onEventCreate,\n onEventMove,\n defaultEventColor,\n locale = \"en-US\",\n renderEvent,\n children,\n}: EventCalendarDndProviderProps) {\n const [activeEvent, setActiveEvent] = React.useState<CalendarEvent | null>(null)\n const [activeCreateSlotInfo, setActiveCreateSlotInfo] = React.useState<{\n start: Date\n end: Date\n } | null>(null)\n\n const handleDragStart = React.useCallback(\n (event: { active: { id: string; data: { current?: unknown } } }) => {\n const data = event.active.data.current\n if (!data) return\n if (typeof data !== \"object\" || data === null) return\n\n if (\"event\" in data && data.event) {\n setActiveEvent(data.event as CalendarEvent)\n } else if (\"slotData\" in data && data.slotData) {\n const slotData = data.slotData as SlotDropData\n const info = slotDataToSlotInfo(slotData)\n setActiveCreateSlotInfo({ start: info.start, end: info.end })\n }\n },\n []\n )\n\n const handleDragEnd = React.useCallback(\n (event: {\n active: { id: string; data: { current?: unknown } }\n over: { id: string; data: { current?: unknown } } | null\n }) => {\n const activeData = event.active.data.current\n const overData = event.over?.data.current\n\n setActiveEvent(null)\n setActiveCreateSlotInfo(null)\n\n if (!overData || typeof overData !== \"object\") return\n\n const overSlot = overData as SlotDropData\n\n if (\n activeData &&\n typeof activeData === \"object\" &&\n \"event\" in activeData &&\n enableDragToMove &&\n onEventMove\n ) {\n const eventData = activeData.event as CalendarEvent\n const { newStart, newEnd, resourceId } = computeMoveEvent(\n eventData,\n overSlot\n )\n onEventMove({ event: eventData, newStart, newEnd, resourceId })\n } else if (\n activeData &&\n typeof activeData === \"object\" &&\n \"slotData\" in activeData &&\n enableDragToCreate &&\n onEventCreate\n ) {\n const fromSlot = activeData.slotData as SlotDropData\n const slotInfo = computeCreateSlotInfo(fromSlot, overSlot)\n onEventCreate(slotInfo)\n }\n },\n [enableDragToCreate, enableDragToMove, onEventCreate, onEventMove]\n )\n\n return (\n <DndContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n collisionDetection={pointerWithin}\n >\n {children}\n <CalendarDragOverlay\n activeEvent={activeEvent}\n activeCreateSlotInfo={activeCreateSlotInfo}\n defaultEventColor={defaultEventColor}\n locale={locale}\n renderEvent={renderEvent}\n />\n </DndContext>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect } from \"react\"\n\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n} as const\n\nexport type Breakpoint = keyof typeof BREAKPOINTS\n\nexport function useMediaQuery(breakpoint: Breakpoint): boolean {\n const query = `(max-width: ${BREAKPOINTS[breakpoint] - 1}px)`\n const [matches, setMatches] = useState(false)\n\n useEffect(() => {\n if (typeof window === \"undefined\") return\n const media = window.matchMedia(query)\n setMatches(media.matches)\n const listener = (e: MediaQueryListEvent) => setMatches(e.matches)\n media.addEventListener(\"change\", listener)\n return () => media.removeEventListener(\"change\", listener)\n }, [query])\n\n return matches\n}\n","\"use client\"\n\nimport { createContext, useContext } from \"react\"\nimport type { CalendarContextValue, CalendarConfig } from \"./types\"\nimport { defaultConfig } from \"./utils\"\n\nconst CalendarContext = createContext<CalendarContextValue | null>(null)\n\nexport function useCalendar() {\n const context = useContext(CalendarContext)\n if (!context) {\n throw new Error(\"useCalendar must be used within an EventCalendar\")\n }\n return context\n}\n\nexport function CalendarProvider({\n children,\n value,\n}: {\n children: React.ReactNode\n value: CalendarContextValue\n}) {\n return (\n <CalendarContext.Provider value={value}>\n {children}\n </CalendarContext.Provider>\n )\n}\n\nexport { CalendarContext }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"./utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n outline:\n \"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n },\n },\n defaultVariants: {\n variant: \"outline\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"./utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] whitespace-nowrap\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"./utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants>\n>({\n size: \"default\",\n variant: \"default\",\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant ?? variant}\n data-size={context.size ?? size}\n className={cn(\n toggleVariants({\n variant: context.variant ?? variant,\n size: context.size ?? size,\n }),\n \"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","\"use client\"\n\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { cn } from \"./ui/utils\"\nimport { Button } from \"./ui/button\"\nimport { getWeekDays, isSameDay, formatDate } from \"./utils\"\n\ninterface MobileWeekStripProps {\n selectedDate: Date\n onDaySelect: (date: Date) => void\n onPrevWeek: () => void\n onNextWeek: () => void\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n locale?: string\n className?: string\n}\n\nexport function MobileWeekStrip({\n selectedDate,\n onDaySelect,\n onPrevWeek,\n onNextWeek,\n weekStartsOn = 0,\n locale = \"en-US\",\n className,\n}: MobileWeekStripProps) {\n const days = getWeekDays(selectedDate, weekStartsOn)\n const today = new Date()\n\n return (\n <div className={cn(\"flex items-center gap-0.5\", className)}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onPrevWeek}\n className=\"h-7 w-7 shrink-0\"\n aria-label=\"Previous week\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <div className=\"flex flex-1 justify-between gap-0 min-w-0 overflow-visible\">\n {days.map((day) => {\n const isToday = isSameDay(day, today)\n const isSelected = isSameDay(day, selectedDate)\n\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n onClick={() => onDaySelect(day)}\n className={cn(\n \"flex flex-col items-center justify-center min-w-[32px] flex-1 py-1 px-0.5 text-[11px] font-medium transition-colors overflow-visible\",\n !isToday && !isSelected && \"text-muted-foreground hover:text-foreground\",\n isToday && !isSelected && \"text-primary font-semibold\",\n isSelected && \"text-primary-foreground font-semibold\"\n )}\n >\n <span\n className={cn(\n \"text-[9px] uppercase leading-tight\",\n isSelected ? \"text-primary-foreground\" : \"text-inherit opacity-80\"\n )}\n >\n {formatDate(day, \"EEE\", locale)}\n </span>\n <span\n className={cn(\n \"mt-0.5 w-6 h-6 shrink-0 flex items-center justify-center rounded-full text-[11px] font-semibold tabular-nums\",\n isSelected && \"bg-primary text-primary-foreground\",\n isToday && !isSelected && \"bg-primary/15 text-primary\",\n !isSelected && !isToday && \"text-foreground\"\n )}\n >\n {formatDate(day, \"d\", locale)}\n </span>\n </button>\n )\n })}\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onNextWeek}\n className=\"h-7 w-7 shrink-0\"\n aria-label=\"Next week\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { cn } from \"./ui/utils\"\nimport { Button } from \"./ui/button\"\nimport { startOfMonth, addMonths, subMonths } from \"date-fns\"\nimport {\n getMonthDays,\n getWeekdayNames,\n isSameDay,\n isSameMonth,\n formatDate,\n} from \"./utils\"\n\ninterface MobileMonthPickerProps {\n selectedDate: Date\n onDaySelect: (date: Date) => void\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n locale?: string\n className?: string\n}\n\nexport function MobileMonthPicker({\n selectedDate,\n onDaySelect,\n weekStartsOn = 0,\n locale = \"en-US\",\n className,\n}: MobileMonthPickerProps) {\n const [viewMonth, setViewMonth] = useState(() => startOfMonth(selectedDate))\n\n useEffect(() => {\n setViewMonth((prev) => {\n const target = startOfMonth(selectedDate)\n return isSameMonth(prev, target) ? prev : target\n })\n }, [selectedDate])\n\n const days = getMonthDays(viewMonth, weekStartsOn)\n const weekdays = getWeekdayNames(weekStartsOn, true, locale)\n const today = new Date()\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {/* Month/Year header */}\n <div className=\"flex items-center justify-between px-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setViewMonth((m) => subMonths(m, 1))}\n className=\"h-8 w-8 shrink-0\"\n aria-label=\"Previous month\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-sm font-medium text-foreground\">\n {formatDate(viewMonth, \"MMMM yyyy\", locale)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setViewMonth((m) => addMonths(m, 1))}\n className=\"h-8 w-8 shrink-0\"\n aria-label=\"Next month\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 gap-0.5\">\n {weekdays.map((day) => (\n <div\n key={day}\n className=\"py-1 text-center text-[10px] font-medium text-muted-foreground uppercase\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"grid grid-cols-7 gap-0.5\">\n {days.map((day) => {\n const isCurrentMonth = isSameMonth(day, viewMonth)\n const isToday = isSameDay(day, today)\n const isSelected = isSameDay(day, selectedDate)\n\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n onClick={() => onDaySelect(day)}\n className={cn(\n \"aspect-square flex items-center justify-center rounded-full text-xs font-medium transition-colors\",\n !isCurrentMonth && \"text-muted-foreground/50\",\n isCurrentMonth && !isToday && !isSelected && \"text-foreground hover:bg-muted\",\n isToday && !isSelected && \"bg-primary/20 text-primary font-semibold\",\n isSelected && \"bg-primary text-primary-foreground font-semibold\"\n )}\n >\n {formatDate(day, \"d\", locale)}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { ChevronLeft, ChevronRight, ChevronDown, ChevronUp, Calendar } from \"lucide-react\"\nimport { Button } from \"./ui/button\"\nimport { ToggleGroup, ToggleGroupItem } from \"./ui/toggle-group\"\nimport { MobileWeekStrip } from \"./mobile-week-strip\"\nimport { MobileMonthPicker } from \"./mobile-month-picker\"\nimport { cn } from \"./ui/utils\"\nimport type { ViewType, HeaderRenderProps } from \"./types\"\n\ninterface CalendarHeaderProps {\n currentDate: Date\n view: ViewType\n views: ViewType[]\n title: string\n showNavigation?: boolean\n showViewSwitcher?: boolean\n showTodayButton?: boolean\n isMobile?: boolean\n showMobileMonthPicker?: boolean\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n locale?: string\n onNavigate: (direction: \"prev\" | \"next\") => void\n onViewChange: (view: ViewType) => void\n onToday: () => void\n onDateSelect?: (date: Date) => void\n onWeekNavigate?: (direction: \"prev\" | \"next\") => void\n renderHeader?: (props: HeaderRenderProps) => React.ReactNode\n}\n\nconst VIEW_LABELS: Record<ViewType, string> = {\n month: \"Month\",\n week: \"Week\",\n day: \"Day\",\n \"2day\": \"2 Day\",\n resource: \"Resource\",\n}\n\nexport function CalendarHeader({\n currentDate,\n view,\n views,\n title,\n showNavigation = true,\n showViewSwitcher = true,\n showTodayButton = true,\n isMobile = false,\n showMobileMonthPicker = true,\n weekStartsOn = 0,\n locale = \"en-US\",\n onNavigate,\n onViewChange,\n onToday,\n onDateSelect,\n onWeekNavigate,\n renderHeader,\n}: CalendarHeaderProps) {\n const [monthPickerExpanded, setMonthPickerExpanded] = useState(false)\n\n if (renderHeader) {\n return (\n <>\n {renderHeader({\n date: currentDate,\n view,\n views,\n title,\n onNavigate,\n onViewChange,\n onToday,\n })}\n </>\n )\n }\n\n if (isMobile) {\n return (\n <div className=\"flex flex-col gap-2\">\n {/* Month title + chevron - title and chevron right beside each other */}\n <div className=\"flex items-center gap-2 min-w-0\">\n <Calendar className=\"h-4 w-4 text-primary shrink-0\" />\n <div className=\"flex items-center gap-0.5 flex-1 min-w-0\">\n {showMobileMonthPicker && onDateSelect && onWeekNavigate ? (\n <button\n type=\"button\"\n onClick={() => setMonthPickerExpanded((v) => !v)}\n className=\"text-base font-semibold text-foreground truncate text-left hover:underline\"\n >\n {title}\n </button>\n ) : (\n <h2 className=\"text-base font-semibold text-foreground truncate\">{title}</h2>\n )}\n {showMobileMonthPicker && onDateSelect && onWeekNavigate && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => setMonthPickerExpanded((v) => !v)}\n className=\"h-7 w-7 shrink-0\"\n aria-expanded={monthPickerExpanded}\n aria-label={monthPickerExpanded ? \"Collapse month view\" : \"Expand month view\"}\n >\n {monthPickerExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </Button>\n )}\n </div>\n </div>\n\n {/* Collapsible week strip / month picker */}\n {showMobileMonthPicker && onDateSelect && onWeekNavigate && (\n <div className=\"flex flex-col overflow-hidden\">\n <div\n className={cn(\n \"flex items-center rounded-lg px-1.5 py-1 bg-muted/30\",\n monthPickerExpanded && \"rounded-b-none\"\n )}\n >\n <div className=\"flex-1 min-w-0\">\n {!monthPickerExpanded && (\n <MobileWeekStrip\n selectedDate={currentDate}\n onDaySelect={onDateSelect}\n onPrevWeek={() => onWeekNavigate(\"prev\")}\n onNextWeek={() => onWeekNavigate(\"next\")}\n weekStartsOn={weekStartsOn}\n locale={locale}\n />\n )}\n </div>\n </div>\n\n {/* Expandable month picker with smooth animation */}\n <div\n className=\"overflow-hidden transition-[max-height] duration-300 ease-in-out\"\n style={{ maxHeight: monthPickerExpanded ? 400 : 0 }}\n >\n <div>\n <div className=\"rounded-b-lg bg-muted/30 px-2 pt-1 pb-2 border-t border-border/50\">\n <MobileMonthPicker\n selectedDate={currentDate}\n onDaySelect={onDateSelect}\n weekStartsOn={weekStartsOn}\n locale={locale}\n />\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n\n return (\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-5 w-5 text-primary\" />\n <h2 className=\"text-xl font-semibold text-foreground\">\n {title}\n </h2>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 sm:gap-4\">\n {showNavigation && (\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => onNavigate(\"prev\")}\n className=\"h-8 w-8\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous</span>\n </Button>\n {showTodayButton && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onToday}\n className=\"h-8 px-3 text-xs font-medium\"\n >\n Today\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => onNavigate(\"next\")}\n className=\"h-8 w-8\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next</span>\n </Button>\n </div>\n )}\n\n {showViewSwitcher && views.length > 1 && (\n <ToggleGroup\n type=\"single\"\n value={view}\n onValueChange={(value) => value && onViewChange(value as ViewType)}\n className=\"border border-border rounded-lg p-0.5\"\n >\n {views.map((v) => (\n <ToggleGroupItem\n key={v}\n value={v}\n className=\"h-7 px-3 text-xs data-[state=on]:bg-primary data-[state=on]:text-primary-foreground\"\n >\n {VIEW_LABELS[v]}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n )}\n </div>\n </div>\n )\n}\n","import type { CalendarEvent, SlotInfo } from \"../types\"\n\nexport type DndItemType = \"event\" | \"create\"\n\nexport interface EventDragData {\n type: \"event\"\n event: CalendarEvent\n}\n\nexport interface CreateDragData {\n type: \"create\"\n slotData: SlotDropData\n}\n\nexport interface DaySlotDropData {\n view: \"day\"\n day: Date\n hour: number\n}\n\nexport interface WeekSlotDropData {\n view: \"week\"\n day: Date\n hour: number\n}\n\nexport interface MonthSlotDropData {\n view: \"month\"\n day: Date\n}\n\nexport interface ResourceSlotDropData {\n view: \"resource\"\n day: Date\n hour: number\n resourceId: string\n}\n\nexport type SlotDropData =\n | DaySlotDropData\n | WeekSlotDropData\n | MonthSlotDropData\n | ResourceSlotDropData\n\nexport function createEventId(event: CalendarEvent): string {\n return `event-${event.id}`\n}\n\nexport function createSlotId(data: SlotDropData): string {\n switch (data.view) {\n case \"day\":\n return `slot-day-${data.day.getTime()}-${data.hour}`\n case \"week\":\n return `slot-week-${data.day.getTime()}-${data.hour}`\n case \"month\":\n return `slot-month-${data.day.getTime()}`\n case \"resource\":\n return `slot-resource-${data.resourceId}-${data.day.getTime()}-${data.hour}`\n }\n}\n","\"use client\"\n\nimport { useDroppable } from \"@dnd-kit/core\"\nimport type { SlotDropData } from \"./types\"\nimport { createSlotId } from \"./types\"\n\ninterface DroppableSlotProps {\n data: SlotDropData\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport function DroppableSlot({\n data,\n children,\n className,\n style,\n}: DroppableSlotProps) {\n const id = createSlotId(data)\n const { setNodeRef, isOver } = useDroppable({\n id,\n data,\n })\n\n return (\n <div\n ref={setNodeRef}\n className={className}\n style={{\n ...style,\n ...(isOver ? { backgroundColor: \"var(--accent)\" } : {}),\n }}\n >\n {children}\n </div>\n )\n}\n","\"use client\"\n\nimport { useDraggable } from \"@dnd-kit/core\"\nimport type { SlotDropData } from \"./types\"\nimport { createSlotId } from \"./types\"\n\ninterface DraggableCreateSlotProps {\n data: SlotDropData\n children: React.ReactNode\n disabled?: boolean\n className?: string\n style?: React.CSSProperties\n}\n\nexport function DraggableCreateSlot({\n data,\n children,\n disabled = false,\n className,\n style,\n}: DraggableCreateSlotProps) {\n const id = `create-${createSlotId(data)}`\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: { type: \"create\" as const, slotData: data },\n disabled,\n })\n\n return (\n <div\n ref={setNodeRef}\n {...listeners}\n {...attributes}\n className={className}\n style={{\n ...style,\n opacity: isDragging ? 0.5 : 1,\n cursor: disabled ? \"default\" : \"crosshair\",\n }}\n >\n {children}\n </div>\n )\n}\n","\"use client\"\n\nimport { useDraggable } from \"@dnd-kit/core\"\nimport type { CalendarEvent } from \"../types\"\nimport { createEventId } from \"./types\"\n\ninterface DraggableEventProps {\n event: CalendarEvent\n children: React.ReactNode\n disabled?: boolean\n className?: string\n style?: React.CSSProperties\n}\n\nexport function DraggableEvent({\n event,\n children,\n disabled = false,\n className,\n style,\n}: DraggableEventProps) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id: createEventId(event),\n data: { type: \"event\" as const, event },\n disabled,\n })\n\n return (\n <div\n ref={setNodeRef}\n {...listeners}\n {...attributes}\n className={className}\n style={{\n ...style,\n opacity: isDragging ? 0.5 : 1,\n cursor: disabled ? \"default\" : \"grab\",\n position: \"absolute\",\n }}\n >\n {children}\n </div>\n )\n}\n","\"use client\"\n\nimport { cn } from \"./ui/utils\"\nimport type { CalendarEvent, SlotInfo } from \"./types\"\nimport { getMonthDays, getEventsForDay, isSameMonth, isSameDay, formatDate, getWeekdayNames, startOfDay, endOfDay } from \"./utils\"\nimport { useCalendar } from \"./calendar-context\"\nimport { DroppableSlot } from \"./dnd/droppable-slot\"\nimport { DraggableCreateSlot } from \"./dnd/draggable-create-slot\"\nimport { DraggableEvent } from \"./dnd/draggable-event\"\n\ninterface MonthViewProps {\n currentDate: Date\n events: CalendarEvent[]\n}\n\nexport function MonthView({ currentDate, events }: MonthViewProps) {\n const { \n config, \n onEventClick, \n onEventDoubleClick,\n onSlotClick, \n onSlotDoubleClick,\n onDayClick,\n renderEvent,\n enableDragToCreate = false,\n enableDragToMove = false,\n } = useCalendar()\n \n const days = getMonthDays(currentDate, config.weekStartsOn)\n const weekdays = getWeekdayNames(config.weekStartsOn, true, config.locale)\n const today = new Date()\n\n const handleSlotClick = (day: Date) => {\n if (onDayClick) {\n onDayClick(day)\n }\n if (onSlotClick) {\n const slotInfo: SlotInfo = {\n start: startOfDay(day),\n end: endOfDay(day),\n }\n onSlotClick(slotInfo)\n }\n }\n\n const handleSlotDoubleClick = (day: Date) => {\n if (onSlotDoubleClick) {\n const slotInfo: SlotInfo = {\n start: startOfDay(day),\n end: endOfDay(day),\n }\n onSlotDoubleClick(slotInfo)\n }\n }\n\n const handleEventClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventClick?.(event)\n }\n\n const handleEventDoubleClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventDoubleClick?.(event)\n }\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Weekday headers */}\n <div className=\"grid grid-cols-7 border-b border-border\">\n {weekdays.map((day) => (\n <div\n key={day}\n className=\"py-3 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 flex-1 auto-rows-fr\">\n {days.map((day, index) => {\n const dayEvents = getEventsForDay(events, day)\n const isCurrentMonth = isSameMonth(day, currentDate)\n const isToday = isSameDay(day, today)\n const slotData = { view: \"month\" as const, day }\n\n const cellContent = (\n <>\n <div className=\"flex items-center justify-between mb-1\">\n <span\n className={cn(\n \"inline-flex items-center justify-center w-7 h-7 text-sm font-medium rounded-full\",\n isToday && \"bg-primary text-primary-foreground\",\n !isToday && isCurrentMonth && \"text-foreground\",\n !isToday && !isCurrentMonth && \"text-muted-foreground\"\n )}\n >\n {formatDate(day, \"d\", config.locale)}\n </span>\n </div>\n\n <div className=\"space-y-0.5 overflow-hidden\">\n {dayEvents.slice(0, config.maxEventsPerDay).map((event) => {\n const eventColor = event.color || config.defaultEventColor\n\n const eventContent = renderEvent ? (\n renderEvent(event, \"month\")\n ) : (\n <span>{event.title}</span>\n )\n\n const eventEl = (\n <div\n className={cn(\n \"px-1.5 py-0.5 text-xs font-medium rounded truncate transition-opacity hover:opacity-80\",\n !enableDragToMove && \"cursor-pointer\"\n )}\n style={{\n backgroundColor: `${eventColor}20`,\n color: eventColor,\n borderLeft: `2px solid ${eventColor}`,\n }}\n title={event.title}\n onClick={(e) => handleEventClick(e, event)}\n onDoubleClick={(e) => handleEventDoubleClick(e, event)}\n >\n {eventContent}\n </div>\n )\n\n return enableDragToMove ? (\n <DraggableEvent key={event.id} event={event}>\n {eventEl}\n </DraggableEvent>\n ) : (\n <div key={event.id}>{eventEl}</div>\n )\n })}\n {dayEvents.length > config.maxEventsPerDay && (\n <div className=\"text-xs text-muted-foreground pl-1.5 font-medium\">\n +{dayEvents.length - config.maxEventsPerDay} more\n </div>\n )}\n </div>\n </>\n )\n\n const cell = (\n <div\n className={cn(\n \"min-h-[100px] border-b border-r border-border p-1.5 transition-colors hover:bg-muted/50 cursor-pointer h-full\",\n !isCurrentMonth && \"bg-muted/30\",\n index % 7 === 0 && \"border-l-0\",\n index < 7 && \"border-t-0\"\n )}\n onClick={() => handleSlotClick(day)}\n onDoubleClick={() => handleSlotDoubleClick(day)}\n >\n {cellContent}\n </div>\n )\n\n return (enableDragToCreate || enableDragToMove) ? (\n <DroppableSlot key={index} data={slotData} className=\"min-h-[100px]\">\n {enableDragToCreate ? (\n <DraggableCreateSlot data={slotData} className=\"h-full\">\n {cell}\n </DraggableCreateSlot>\n ) : (\n cell\n )}\n </DroppableSlot>\n ) : (\n <div key={index}>{cell}</div>\n )\n })}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect, useRef } from \"react\"\nimport { cn } from \"./ui/utils\"\nimport type { CalendarEvent, SlotInfo } from \"./types\"\nimport { getWeekDays, getTwoDays, getEventsForDay, isSameDay, formatDate, getEventPosition, getHoursArray, formatHour, createSlotDate, getCurrentTimeLineTop } from \"./utils\"\nimport { useCalendar } from \"./calendar-context\"\nimport { DroppableSlot } from \"./dnd/droppable-slot\"\nimport { DraggableCreateSlot } from \"./dnd/draggable-create-slot\"\nimport { DraggableEvent } from \"./dnd/draggable-event\"\n\ninterface WeekViewProps {\n currentDate: Date\n events: CalendarEvent[]\n /** When 2, shows 2-day view instead of full week */\n dayCount?: number\n /** On mobile, full-week columns use wider min-width so ~2 days fit in viewport */\n isMobile?: boolean\n}\n\nexport function WeekView({ currentDate, events, dayCount, isMobile = false }: WeekViewProps) {\n const {\n config,\n onEventClick,\n onEventDoubleClick,\n onSlotClick,\n onSlotDoubleClick,\n renderEvent,\n enableDragToCreate = false,\n enableDragToMove = false,\n } = useCalendar()\n\n const days = dayCount === 2 ? getTwoDays(currentDate, config.weekStartsOn) : getWeekDays(currentDate, config.weekStartsOn)\n const hours = getHoursArray(config.startHour, config.endHour)\n const today = new Date()\n const totalHours = hours.length\n const showCurrentTimeLine = config.showCurrentTimeLine ?? true\n const includesToday = days.some((d) => isSameDay(d, today))\n\n const [now, setNow] = useState(() => new Date())\n const columnRefs = useRef<Map<string, HTMLDivElement>>(new Map())\n\n useEffect(() => {\n if (!showCurrentTimeLine || !includesToday) return\n const id = setInterval(() => setNow(new Date()), 60_000)\n return () => clearInterval(id)\n }, [showCurrentTimeLine, includesToday])\n\n // Scroll the selected day's column into view when currentDate changes\n useEffect(() => {\n const key = currentDate.toISOString().slice(0, 10)\n const el = columnRefs.current.get(key)\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", inline: \"center\", block: \"nearest\" })\n }\n }, [currentDate])\n\n const currentTimeLineTop =\n showCurrentTimeLine && includesToday\n ? getCurrentTimeLineTop(now, config.startHour, config.endHour, config.hourHeight, 0)\n : null\n\n // On mobile full-week: wider columns so ~2 days visible, scroll for the rest\n const dayColumnMinWidth = isMobile && dayCount !== 2 ? \"min(45vw, 200px)\" : \"140px\"\n\n const handleSlotClick = (day: Date, hour: number) => {\n if (onSlotClick) {\n const slotInfo: SlotInfo = {\n start: createSlotDate(day, hour),\n end: createSlotDate(day, hour + 1),\n }\n onSlotClick(slotInfo)\n }\n }\n\n const handleSlotDoubleClick = (day: Date, hour: number) => {\n if (onSlotDoubleClick) {\n const slotInfo: SlotInfo = {\n start: createSlotDate(day, hour),\n end: createSlotDate(day, hour + 1),\n }\n onSlotDoubleClick(slotInfo)\n }\n }\n\n const handleEventClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventClick?.(event)\n }\n\n const handleEventDoubleClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventDoubleClick?.(event)\n }\n\n const maxHeightStyle =\n config.timeSeriesMaxHeight != null\n ? typeof config.timeSeriesMaxHeight === \"number\"\n ? `${config.timeSeriesMaxHeight}px`\n : config.timeSeriesMaxHeight\n : undefined\n\n return (\n <div\n className=\"h-full overflow-auto\"\n style={{ maxHeight: maxHeightStyle }}\n >\n <div className=\"flex flex-col min-w-max flex-1\">\n {/* Header with days - sticky for vertical scroll, scrolls with content horizontally */}\n <div className=\"flex border-b border-border shrink-0 bg-background z-10 sticky top-0 shadow-[0_4px_12px_-2px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_-2px_rgba(0,0,0,0.2)]\">\n <div className=\"w-16 shrink-0 border-r border-border sticky left-0 z-10 bg-background shadow-[4px_0_12px_-2px_rgba(0,0,0,0.08),6px_0_16px_-4px_rgba(0,0,0,0.06)] dark:shadow-[4px_0_16px_-2px_rgba(0,0,0,0.25),6px_0_24px_-4px_rgba(0,0,0,0.2)]\" />\n {days.map((day, index) => {\n const isToday = isSameDay(day, today)\n const dayKey = day.toISOString().slice(0, 10)\n return (\n <div\n key={index}\n ref={(el) => {\n if (el) columnRefs.current.set(dayKey, el)\n }}\n className={cn(\n \"flex-1 py-3 text-center border-r border-border last:border-r-0\",\n isToday && \"bg-primary/5\"\n )}\n style={{ minWidth: dayColumnMinWidth }}\n >\n <div className=\"text-xs font-medium text-muted-foreground uppercase\">\n {formatDate(day, \"EEE\", config.locale)}\n </div>\n <div\n className={cn(\n \"mt-1 inline-flex items-center justify-center w-8 h-8 text-lg font-semibold rounded-full\",\n isToday && \"bg-primary text-primary-foreground\",\n !isToday && \"text-foreground\"\n )}\n >\n {formatDate(day, \"d\", config.locale)}\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Time grid */}\n <div\n className=\"flex flex-1 relative\"\n style={{ minHeight: totalHours * config.hourHeight }}\n >\n {/* Current time line */}\n {currentTimeLineTop != null && (\n <div\n className=\"absolute left-16 right-0 h-0.5 bg-sky-300 z-20 pointer-events-none\"\n style={{ top: currentTimeLineTop }}\n aria-hidden\n >\n <span className=\"absolute -left-1 top-1/2 -translate-y-1/2 w-2 h-2 rounded-full bg-sky-300\" />\n </div>\n )}\n {/* Time labels column - sticky on horizontal scroll with pocket shadow */}\n <div className=\"w-16 shrink-0 border-r border-border sticky left-0 z-10 bg-background shadow-[4px_0_12px_-2px_rgba(0,0,0,0.08),6px_0_16px_-4px_rgba(0,0,0,0.06)] dark:shadow-[4px_0_16px_-2px_rgba(0,0,0,0.25),6px_0_24px_-4px_rgba(0,0,0,0.2)]\">\n {hours.map((hour) => (\n <div\n key={hour}\n className=\"pr-2 flex items-start justify-end\"\n style={{ height: `${config.hourHeight}px` }}\n >\n <span className=\"text-xs text-muted-foreground -mt-2\">\n {formatHour(hour, config.timeFormat, config.locale)}\n </span>\n </div>\n ))}\n </div>\n\n {/* Day columns */}\n {days.map((day, dayIndex) => {\n const dayEvents = getEventsForDay(events, day)\n const isToday = isSameDay(day, today)\n\n return (\n <div\n key={dayIndex}\n className={cn(\n \"flex-1 border-r border-border last:border-r-0 relative\",\n isToday && \"bg-primary/5\"\n )}\n style={{ minWidth: dayColumnMinWidth }}\n >\n {/* Hour rows */}\n {hours.map((hour, index) => {\n const slotData = { view: \"week\" as const, day, hour }\n const slotContent = (\n <div\n className={cn(\n \"cursor-pointer hover:bg-muted/30 transition-colors h-full w-full\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${config.hourHeight}px` }}\n onClick={() => handleSlotClick(day, hour)}\n onDoubleClick={() => handleSlotDoubleClick(day, hour)}\n />\n )\n return (enableDragToCreate || enableDragToMove) ? (\n <DroppableSlot\n key={hour}\n data={slotData}\n style={{ height: `${config.hourHeight}px` }}\n className={cn(index < totalHours - 1 && \"border-b border-border\")}\n >\n {enableDragToCreate ? (\n <DraggableCreateSlot data={slotData} className=\"h-full w-full\">\n {slotContent}\n </DraggableCreateSlot>\n ) : (\n slotContent\n )}\n </DroppableSlot>\n ) : (\n <div\n key={hour}\n className={cn(\n \"cursor-pointer hover:bg-muted/30 transition-colors\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${config.hourHeight}px` }}\n onClick={() => handleSlotClick(day, hour)}\n onDoubleClick={() => handleSlotDoubleClick(day, hour)}\n />\n )\n })}\n {/* Bottom border for last row alignment */}\n <div className=\"absolute bottom-0 left-0 right-0 h-px bg-border\" />\n\n {/* Events */}\n {dayEvents.map((event) => {\n if (!isSameDay(event.start, day)) return null\n const { top, height } = getEventPosition(event, config.hourHeight, config.startHour)\n const eventColor = event.color || config.defaultEventColor\n\n const eventContent = renderEvent ? (\n renderEvent(event, \"week\")\n ) : (\n <>\n <div className=\"font-semibold truncate\">{event.title}</div>\n <div className=\"text-[10px] opacity-80\">\n {formatDate(event.start, \"h:mm a\", config.locale)} - {formatDate(event.end, \"h:mm a\", config.locale)}\n </div>\n </>\n )\n\n const eventEl = (\n <div\n className={cn(\n \"px-1.5 py-1 rounded text-xs font-medium overflow-hidden transition-opacity hover:opacity-90 h-full w-full\",\n !enableDragToMove && \"cursor-pointer\"\n )}\n style={{\n backgroundColor: `${eventColor}15`,\n borderLeft: `3px solid ${eventColor}`,\n color: eventColor,\n }}\n title={event.title}\n onClick={(e) => handleEventClick(e, event)}\n onDoubleClick={(e) => handleEventDoubleClick(e, event)}\n >\n {eventContent}\n </div>\n )\n\n return enableDragToMove ? (\n <DraggableEvent\n key={event.id}\n event={event}\n className=\"absolute left-0.5 right-0.5\"\n style={{ top: `${top}px`, height: `${height}px` }}\n >\n {eventEl}\n </DraggableEvent>\n ) : (\n <div\n key={event.id}\n className=\"absolute left-0.5 right-0.5\"\n style={{ top: `${top}px`, height: `${height}px` }}\n >\n {eventEl}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect } from \"react\"\nimport { cn } from \"./ui/utils\"\nimport type { CalendarEvent, SlotInfo } from \"./types\"\nimport { getEventsForDay, isSameDay, formatDate, getEventPosition, getHoursArray, formatHour, createSlotDate, getCurrentTimeLineTop } from \"./utils\"\nimport { useCalendar } from \"./calendar-context\"\nimport { DroppableSlot } from \"./dnd/droppable-slot\"\nimport { DraggableCreateSlot } from \"./dnd/draggable-create-slot\"\nimport { DraggableEvent } from \"./dnd/draggable-event\"\n\ninterface DayViewProps {\n currentDate: Date\n events: CalendarEvent[]\n}\n\nexport function DayView({ currentDate, events }: DayViewProps) {\n const {\n config,\n onEventClick,\n onEventDoubleClick,\n onSlotClick,\n onSlotDoubleClick,\n renderEvent,\n enableDragToCreate = false,\n enableDragToMove = false,\n } = useCalendar()\n\n const dayEvents = getEventsForDay(events, currentDate)\n const hours = getHoursArray(config.startHour, config.endHour)\n const today = new Date()\n const isToday = isSameDay(currentDate, today)\n const totalHours = hours.length\n const showCurrentTimeLine = config.showCurrentTimeLine ?? true\n\n const [now, setNow] = useState(() => new Date())\n useEffect(() => {\n if (!showCurrentTimeLine || !isToday) return\n const id = setInterval(() => setNow(new Date()), 60_000)\n return () => clearInterval(id)\n }, [showCurrentTimeLine, isToday])\n\n const currentTimeLineTop =\n showCurrentTimeLine && isToday\n ? getCurrentTimeLineTop(now, config.startHour, config.endHour, config.hourHeight, 0)\n : null\n\n const handleSlotClick = (hour: number) => {\n if (onSlotClick) {\n const slotInfo: SlotInfo = {\n start: createSlotDate(currentDate, hour),\n end: createSlotDate(currentDate, hour + 1),\n }\n onSlotClick(slotInfo)\n }\n }\n\n const handleSlotDoubleClick = (hour: number) => {\n if (onSlotDoubleClick) {\n const slotInfo: SlotInfo = {\n start: createSlotDate(currentDate, hour),\n end: createSlotDate(currentDate, hour + 1),\n }\n onSlotDoubleClick(slotInfo)\n }\n }\n\n const handleEventClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventClick?.(event)\n }\n\n const handleEventDoubleClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventDoubleClick?.(event)\n }\n\n return (\n <div className=\"flex flex-col h-full overflow-hidden\">\n {/* Header */}\n <div className=\"flex border-b border-border shrink-0 bg-background z-10 shadow-[0_4px_12px_-2px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_12px_-2px_rgba(0,0,0,0.2)]\">\n <div className=\"w-20 shrink-0 border-r border-border\" />\n <div\n className={cn(\n \"flex-1 py-4 text-center border-r border-border\",\n isToday && \"bg-primary/5\"\n )}\n >\n <div className=\"text-sm font-medium text-muted-foreground uppercase\">\n {formatDate(currentDate, \"EEEE\", config.locale)}\n </div>\n <div\n className={cn(\n \"mt-1 inline-flex items-center justify-center w-10 h-10 text-xl font-semibold rounded-full\",\n isToday && \"bg-primary text-primary-foreground\",\n !isToday && \"text-foreground\"\n )}\n >\n {formatDate(currentDate, \"d\", config.locale)}\n </div>\n </div>\n </div>\n\n {/* Time grid - fixed max height, horizontal + vertical scroll */}\n <div\n className=\"flex flex-1 overflow-auto min-h-0\"\n style={{\n maxHeight: config.timeSeriesMaxHeight != null\n ? (typeof config.timeSeriesMaxHeight === \"number\" ? `${config.timeSeriesMaxHeight}px` : config.timeSeriesMaxHeight)\n : undefined,\n }}\n >\n <div\n className=\"flex min-w-full relative\"\n style={{ minHeight: totalHours * config.hourHeight }}\n >\n {/* Current time line */}\n {currentTimeLineTop != null && (\n <div\n className=\"absolute left-20 right-0 h-0.5 bg-sky-300 z-20 pointer-events-none\"\n style={{ top: currentTimeLineTop }}\n aria-hidden\n >\n <span className=\"absolute -left-1 top-1/2 -translate-y-1/2 w-2 h-2 rounded-full bg-sky-300\" />\n </div>\n )}\n {/* Time labels column */}\n <div className=\"w-20 shrink-0 border-r border-border relative\">\n {hours.map((hour) => (\n <div\n key={hour}\n className=\"pr-3 flex items-start justify-end\"\n style={{ height: `${config.hourHeight}px` }}\n >\n <span className=\"text-xs text-muted-foreground -mt-2\">\n {formatHour(hour, config.timeFormat, config.locale)}\n </span>\n </div>\n ))}\n </div>\n\n {/* Day column */}\n <div className={cn(\"flex-1 relative border-r border-border\", isToday && \"bg-primary/5\")}>\n {/* Hour rows */}\n {hours.map((hour, index) => {\n const slotData = { view: \"day\" as const, day: currentDate, hour }\n const slotContent = (\n <div\n className={cn(\n \"cursor-pointer hover:bg-muted/30 transition-colors h-full w-full\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${config.hourHeight}px` }}\n onClick={() => handleSlotClick(hour)}\n onDoubleClick={() => handleSlotDoubleClick(hour)}\n />\n )\n return (enableDragToCreate || enableDragToMove) ? (\n <DroppableSlot\n key={hour}\n data={slotData}\n style={{ height: `${config.hourHeight}px` }}\n className={cn(index < totalHours - 1 && \"border-b border-border\")}\n >\n {enableDragToCreate ? (\n <DraggableCreateSlot data={slotData} className=\"h-full w-full\">\n {slotContent}\n </DraggableCreateSlot>\n ) : (\n slotContent\n )}\n </DroppableSlot>\n ) : (\n <div\n key={hour}\n className={cn(\n \"cursor-pointer hover:bg-muted/30 transition-colors\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${config.hourHeight}px` }}\n onClick={() => handleSlotClick(hour)}\n onDoubleClick={() => handleSlotDoubleClick(hour)}\n />\n )\n })}\n {/* Bottom border for last row alignment */}\n <div className=\"absolute bottom-0 left-0 right-0 h-px bg-border\" />\n\n {/* Events */}\n {dayEvents.map((event) => {\n if (!isSameDay(event.start, currentDate)) return null\n const { top, height } = getEventPosition(event, config.hourHeight, config.startHour)\n const eventColor = event.color || config.defaultEventColor\n\n const eventContent = renderEvent ? (\n renderEvent(event, \"day\")\n ) : (\n <>\n <div className=\"font-semibold text-sm\" style={{ color: eventColor }}>\n {event.title}\n </div>\n <div className=\"text-xs text-muted-foreground mt-0.5\">\n {formatDate(event.start, \"h:mm a\", config.locale)} - {formatDate(event.end, \"h:mm a\", config.locale)}\n </div>\n {event.description && (\n <div className=\"text-xs text-muted-foreground mt-1 line-clamp-2\">\n {event.description}\n </div>\n )}\n </>\n )\n\n const eventEl = (\n <div\n className={cn(\n \"px-3 py-2 rounded-lg overflow-hidden transition-all hover:shadow-md h-full w-full\",\n !enableDragToMove && \"cursor-pointer\"\n )}\n style={{\n backgroundColor: `${eventColor}15`,\n borderLeft: `4px solid ${eventColor}`,\n }}\n title={event.title}\n onClick={(e) => handleEventClick(e, event)}\n onDoubleClick={(e) => handleEventDoubleClick(e, event)}\n >\n {eventContent}\n </div>\n )\n\n return enableDragToMove ? (\n <DraggableEvent\n key={event.id}\n event={event}\n className=\"absolute left-2 right-2\"\n style={{ top: `${top}px`, height: `${height}px` }}\n >\n {eventEl}\n </DraggableEvent>\n ) : (\n <div key={event.id} className=\"absolute left-2 right-2\" style={{ top: `${top}px`, height: `${height}px` }}>\n {eventEl}\n </div>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { cn } from \"./ui/utils\"\nimport type { CalendarEvent, Resource, SlotInfo } from \"./types\"\nimport { getWeekDays, isSameDay, formatDate, getEventPosition, getHoursArray, formatHour, createSlotDate } from \"./utils\"\nimport { useCalendar } from \"./calendar-context\"\nimport { DroppableSlot } from \"./dnd/droppable-slot\"\nimport { DraggableCreateSlot } from \"./dnd/draggable-create-slot\"\nimport { DraggableEvent } from \"./dnd/draggable-event\"\n\ninterface ResourceViewProps {\n currentDate: Date\n events: CalendarEvent[]\n resources: Resource[]\n}\n\nexport function ResourceView({ currentDate, events, resources }: ResourceViewProps) {\n const {\n config,\n onEventClick,\n onEventDoubleClick,\n onSlotClick,\n onSlotDoubleClick,\n renderEvent,\n enableDragToCreate = false,\n enableDragToMove = false,\n } = useCalendar()\n\n const days = getWeekDays(currentDate, config.weekStartsOn)\n const hours = getHoursArray(config.startHour, config.endHour)\n const today = new Date()\n const hourHeight = 56 // Slightly smaller for resource view\n const totalHours = hours.length\n\n const getResourceDayEvents = (resourceId: string, day: Date) => {\n return events.filter(\n (event) => event.resourceId === resourceId && isSameDay(event.start, day)\n )\n }\n\n const handleSlotClick = (day: Date, hour: number, resourceId: string) => {\n if (onSlotClick) {\n const slotInfo: SlotInfo = {\n start: createSlotDate(day, hour),\n end: createSlotDate(day, hour + 1),\n resourceId,\n }\n onSlotClick(slotInfo)\n }\n }\n\n const handleSlotDoubleClick = (day: Date, hour: number, resourceId: string) => {\n if (onSlotDoubleClick) {\n const slotInfo: SlotInfo = {\n start: createSlotDate(day, hour),\n end: createSlotDate(day, hour + 1),\n resourceId,\n }\n onSlotDoubleClick(slotInfo)\n }\n }\n\n const handleEventClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventClick?.(event)\n }\n\n const handleEventDoubleClick = (e: React.MouseEvent, event: CalendarEvent) => {\n e.stopPropagation()\n onEventDoubleClick?.(event)\n }\n\n if (resources.length === 0) {\n return (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n No resources available. Add resources to use the resource view.\n </div>\n )\n }\n\n return (\n <div className=\"flex flex-col h-full overflow-hidden\">\n {/* Header with resources */}\n <div className=\"flex border-b border-border shrink-0 bg-background z-10\">\n <div className=\"w-16 shrink-0 border-r border-border\" />\n {resources.map((resource) => {\n const resourceColor = resource.color || config.defaultResourceColor\n return (\n <div\n key={resource.id}\n className=\"flex-1 py-3 px-2 text-center border-r border-border last:border-r-0\"\n >\n <div className=\"flex items-center justify-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: resourceColor }}\n />\n <span className=\"text-sm font-medium text-foreground truncate\">\n {resource.name}\n </span>\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Days row */}\n <div className=\"flex border-b border-border shrink-0 bg-muted/50 z-10\">\n <div className=\"w-16 shrink-0 border-r border-border py-2 px-2 text-xs font-medium text-muted-foreground\">\n Week View\n </div>\n {resources.map((resource) => (\n <div key={resource.id} className=\"flex-1 flex border-r border-border last:border-r-0\">\n {days.map((day, dayIndex) => {\n const isToday = isSameDay(day, today)\n return (\n <div\n key={dayIndex}\n className={cn(\n \"flex-1 py-2 text-center border-r border-border/50 last:border-r-0\",\n isToday && \"bg-primary/5\"\n )}\n >\n <div className=\"text-[10px] text-muted-foreground uppercase\">\n {formatDate(day, \"EEE\", config.locale)}\n </div>\n <div\n className={cn(\n \"text-xs font-medium\",\n isToday && \"text-primary\",\n !isToday && \"text-foreground\"\n )}\n >\n {formatDate(day, \"d\", config.locale)}\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n\n {/* Time grid - min-height ensures full day (12am-11:59pm) scrollable */}\n <div className=\"flex flex-1 overflow-y-auto min-h-0\">\n <div\n className=\"flex min-w-full\"\n style={{ minHeight: totalHours * hourHeight }}\n >\n {/* Time labels column */}\n <div className=\"w-16 shrink-0 border-r border-border relative\">\n {hours.map((hour, index) => (\n <div\n key={hour}\n className={cn(\n \"pr-2 flex items-start justify-end\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${hourHeight}px` }}\n >\n <span className=\"text-[10px] text-muted-foreground -mt-1.5\">\n {formatHour(hour, config.timeFormat, config.locale)}\n </span>\n </div>\n ))}\n {/* Bottom border for last row alignment */}\n <div className=\"absolute bottom-0 left-0 right-0 h-px bg-border\" />\n </div>\n\n {/* Resource columns */}\n {resources.map((resource) => {\n const resourceColor = resource.color || config.defaultResourceColor\n\n return (\n <div\n key={resource.id}\n className=\"flex-1 flex border-r border-border last:border-r-0\"\n >\n {days.map((day, dayIndex) => {\n const dayEvents = getResourceDayEvents(resource.id, day)\n const isToday = isSameDay(day, today)\n\n return (\n <div\n key={dayIndex}\n className={cn(\n \"flex-1 border-r border-border/50 last:border-r-0 relative\",\n isToday && \"bg-primary/5\"\n )}\n >\n {/* Hour rows */}\n {hours.map((hour, index) => {\n const slotData = {\n view: \"resource\" as const,\n day,\n hour,\n resourceId: resource.id,\n }\n const slotContent = (\n <div\n className={cn(\n \"cursor-pointer hover:bg-muted/30 transition-colors h-full w-full\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${hourHeight}px` }}\n onClick={() => handleSlotClick(day, hour, resource.id)}\n onDoubleClick={() => handleSlotDoubleClick(day, hour, resource.id)}\n />\n )\n return (enableDragToCreate || enableDragToMove) ? (\n <DroppableSlot\n key={hour}\n data={slotData}\n style={{ height: `${hourHeight}px` }}\n className={cn(index < totalHours - 1 && \"border-b border-border\")}\n >\n {enableDragToCreate ? (\n <DraggableCreateSlot data={slotData} className=\"h-full w-full\">\n {slotContent}\n </DraggableCreateSlot>\n ) : (\n slotContent\n )}\n </DroppableSlot>\n ) : (\n <div\n key={hour}\n className={cn(\n \"cursor-pointer hover:bg-muted/30 transition-colors\",\n index < totalHours - 1 && \"border-b border-border\"\n )}\n style={{ height: `${hourHeight}px` }}\n onClick={() => handleSlotClick(day, hour, resource.id)}\n onDoubleClick={() => handleSlotDoubleClick(day, hour, resource.id)}\n />\n )\n })}\n {/* Bottom border for last row alignment */}\n <div className=\"absolute bottom-0 left-0 right-0 h-px bg-border\" />\n\n {/* Events */}\n {dayEvents.map((event) => {\n const { top, height } = getEventPosition(event, config.hourHeight, config.startHour)\n const scaledTop = (top / config.hourHeight) * hourHeight\n const scaledHeight = (height / config.hourHeight) * hourHeight\n const eventColor = event.color || resourceColor\n\n const eventContent = renderEvent ? (\n renderEvent(event, \"resource\")\n ) : (\n <>\n <div className=\"truncate font-semibold\">{event.title}</div>\n <div className=\"truncate opacity-80\">\n {formatDate(event.start, \"h:mm\", config.locale)}\n </div>\n </>\n )\n\n const eventEl = (\n <div\n className={cn(\n \"px-1 py-0.5 rounded text-[10px] font-medium overflow-hidden transition-opacity hover:opacity-90 h-full w-full\",\n !enableDragToMove && \"cursor-pointer\"\n )}\n style={{\n backgroundColor: `${eventColor}20`,\n borderLeft: `2px solid ${eventColor}`,\n color: eventColor,\n }}\n title={`${event.title} - ${resource.name}`}\n onClick={(e) => handleEventClick(e, event)}\n onDoubleClick={(e) => handleEventDoubleClick(e, event)}\n >\n {eventContent}\n </div>\n )\n\n return enableDragToMove ? (\n <DraggableEvent\n key={event.id}\n event={event}\n className=\"absolute left-0.5 right-0.5\"\n style={{ top: `${scaledTop}px`, height: `${scaledHeight}px` }}\n >\n {eventEl}\n </DraggableEvent>\n ) : (\n <div\n key={event.id}\n className=\"absolute left-0.5 right-0.5\"\n style={{ top: `${scaledTop}px`, height: `${scaledHeight}px` }}\n >\n {eventEl}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState, useEffect, useMemo, useCallback } from \"react\"\nimport { cn } from \"./ui/utils\"\nimport { Card } from \"./ui/card\"\nimport { Spinner } from \"./ui/spinner\"\nimport { EventCalendarThemeProvider } from \"./theme-provider\"\nimport { EventCalendarDndProvider } from \"./dnd/event-calendar-dnd\"\nimport type { ViewType, EventCalendarProps, CalendarConfig, CalendarContextValue } from \"./types\"\nimport { navigateDate, getViewTitle, getViewDateRange, defaultConfig } from \"./utils\"\nimport { addWeeks, subWeeks } from \"date-fns\"\nimport { useMediaQuery } from \"./use-media-query\"\nimport { CalendarProvider } from \"./calendar-context\"\nimport { CalendarHeader } from \"./calendar-header\"\nimport { MonthView } from \"./month-view\"\nimport { WeekView } from \"./week-view\"\nimport { DayView } from \"./day-view\"\nimport { ResourceView } from \"./resource-view\"\n\nexport function EventCalendar({\n events,\n resources = [],\n date,\n defaultDate = new Date(),\n view,\n defaultView = \"month\",\n views = [\"month\", \"week\", \"day\", \"resource\"],\n calendarOptions = {},\n showNavigation = true,\n showViewSwitcher = true,\n showTodayButton = true,\n className,\n loading = false,\n theme = \"system\",\n themeVars,\n enableDragToCreate = false,\n enableDragToMove = false,\n mobileBreakpoint = \"md\",\n showMobileMonthPicker = true,\n onEventClick,\n onEventDoubleClick,\n onSlotClick,\n onSlotDoubleClick,\n onDateChange,\n onViewChange,\n onNavigate,\n onRangeChange,\n onDayClick,\n onEventCreate,\n onEventMove,\n renderEvent,\n renderDayCell,\n renderHeader,\n renderResourceHeader,\n renderTimeSlot,\n renderEmpty,\n renderSelectedEvent,\n renderSelectedSlot,\n}: EventCalendarProps) {\n // Handle controlled/uncontrolled date\n const [internalDate, setInternalDate] = useState(defaultDate)\n const [selectedEvent, setSelectedEvent] = useState<import(\"./types\").CalendarEvent | null>(null)\n const [selectedSlot, setSelectedSlot] = useState<import(\"./types\").SlotInfo | null>(null)\n const currentDate = date ?? internalDate\n\n const isMobile = useMediaQuery(mobileBreakpoint)\n\n // Handle controlled/uncontrolled view\n const [internalView, setInternalView] = useState<ViewType>(defaultView)\n const currentView = view ?? internalView\n\n // Build config object from calendarOptions with defaults\n const config: CalendarConfig = useMemo(\n () => ({\n weekStartsOn: calendarOptions.weekStartsOn ?? defaultConfig.weekStartsOn,\n startHour: calendarOptions.startHour ?? defaultConfig.startHour,\n endHour: calendarOptions.endHour ?? defaultConfig.endHour,\n hourHeight: calendarOptions.hourHeight ?? defaultConfig.hourHeight,\n maxEventsPerDay: calendarOptions.maxEventsPerDay ?? defaultConfig.maxEventsPerDay,\n timeSeriesMaxHeight: calendarOptions.timeSeriesMaxHeight ?? defaultConfig.timeSeriesMaxHeight,\n showCurrentTimeLine: calendarOptions.showCurrentTimeLine ?? defaultConfig.showCurrentTimeLine,\n defaultEventColor: calendarOptions.defaultEventColor ?? defaultConfig.defaultEventColor,\n defaultResourceColor: calendarOptions.defaultResourceColor ?? defaultConfig.defaultResourceColor,\n locale: calendarOptions.locale ?? defaultConfig.locale,\n timeFormat: calendarOptions.timeFormat ?? defaultConfig.timeFormat,\n }),\n [calendarOptions]\n )\n\n // Notify range changes (computed after effectiveView)\n\n const effectiveView: ViewType = isMobile\n ? ([\"week\", \"day\", \"2day\"].includes(currentView) ? currentView : \"week\")\n : currentView\n\n const handleNavigate = useCallback(\n (direction: \"prev\" | \"next\") => {\n const newDate = navigateDate(currentDate, effectiveView, direction)\n if (date === undefined) {\n setInternalDate(newDate)\n }\n onDateChange?.(newDate)\n onNavigate?.(newDate, direction)\n },\n [currentDate, effectiveView, date, onDateChange, onNavigate]\n )\n\n const handleWeekNavigate = useCallback(\n (direction: \"prev\" | \"next\") => {\n const newDate = direction === \"next\" ? addWeeks(currentDate, 1) : subWeeks(currentDate, 1)\n if (date === undefined) {\n setInternalDate(newDate)\n }\n onDateChange?.(newDate)\n },\n [currentDate, date, onDateChange]\n )\n\n const handleDateSelect = useCallback(\n (newDate: Date) => {\n if (date === undefined) {\n setInternalDate(newDate)\n }\n onDateChange?.(newDate)\n },\n [date, onDateChange]\n )\n\n const handleToday = useCallback(() => {\n const today = new Date()\n if (date === undefined) {\n setInternalDate(today)\n }\n onDateChange?.(today)\n onNavigate?.(today, \"today\")\n }, [date, onDateChange, onNavigate])\n\n const handleViewChange = useCallback(\n (newView: ViewType) => {\n if (view === undefined) {\n setInternalView(newView)\n }\n onViewChange?.(newView)\n },\n [view, onViewChange]\n )\n\n const handleEventClick = useCallback(\n (event: import(\"./types\").CalendarEvent) => {\n onEventClick?.(event)\n if (renderSelectedEvent) {\n setSelectedEvent(event)\n setSelectedSlot(null)\n }\n },\n [onEventClick, renderSelectedEvent]\n )\n\n const handleSlotClick = useCallback(\n (slot: import(\"./types\").SlotInfo) => {\n onSlotClick?.(slot)\n if (renderSelectedSlot) {\n setSelectedSlot(slot)\n setSelectedEvent(null)\n }\n },\n [onSlotClick, renderSelectedSlot]\n )\n\n const handleCloseSelected = useCallback(() => {\n setSelectedEvent(null)\n setSelectedSlot(null)\n }, [])\n\n // Build context value - use wrapped handlers when render props are provided\n const contextValue: CalendarContextValue = useMemo(\n () => ({\n currentDate,\n view: currentView,\n events,\n resources,\n config,\n onEventClick: renderSelectedEvent ? handleEventClick : onEventClick,\n onEventDoubleClick,\n onSlotClick: renderSelectedSlot ? handleSlotClick : onSlotClick,\n onSlotDoubleClick,\n onDayClick,\n renderEvent,\n enableDragToCreate,\n enableDragToMove,\n onEventCreate,\n onEventMove,\n }),\n [\n currentDate,\n currentView,\n events,\n resources,\n config,\n renderSelectedEvent,\n renderSelectedSlot,\n handleEventClick,\n handleSlotClick,\n onEventClick,\n onEventDoubleClick,\n onSlotClick,\n onSlotDoubleClick,\n onDayClick,\n renderEvent,\n enableDragToCreate,\n enableDragToMove,\n onEventCreate,\n onEventMove,\n ]\n )\n\n const mobileViews: ViewType[] = [\"week\", \"day\", \"2day\"]\n\n const title = getViewTitle(currentDate, effectiveView, config.weekStartsOn, config.locale)\n\n // Notify range changes\n useEffect(() => {\n if (onRangeChange) {\n const range = getViewDateRange(currentDate, effectiveView, config.weekStartsOn)\n onRangeChange(range)\n }\n }, [currentDate, effectiveView, config.weekStartsOn, onRangeChange])\n\n // Filter views to only include those that are available\n const availableViews = (isMobile ? mobileViews : views).filter((v) => {\n if (v === \"resource\" && resources.length === 0) return false\n return true\n })\n\n const calendarContent = (\n <CalendarProvider value={contextValue}>\n <Card\n className={cn(\n \"flex flex-col h-full overflow-hidden border-border\",\n isMobile && \"gap-0 py-0\",\n className\n )}\n >\n {(showNavigation || showViewSwitcher) && (\n <div\n className={cn(\n \"bg-card\",\n isMobile\n ? \"px-3 py-2 border-b border-border relative z-10 rounded-t-xl shadow-[0_4px_24px_rgba(0,0,0,0.12),0_8px_40px_rgba(0,0,0,0.1),0_12px_48px_rgba(0,0,0,0.08)] dark:shadow-[0_4px_24px_rgba(0,0,0,0.35),0_8px_40px_rgba(0,0,0,0.3),0_12px_48px_rgba(0,0,0,0.2)]\"\n : \"p-4 border-b border-border\"\n )}\n >\n <CalendarHeader\n currentDate={currentDate}\n view={effectiveView}\n views={availableViews}\n title={title}\n showNavigation={showNavigation}\n showViewSwitcher={showViewSwitcher}\n showTodayButton={showTodayButton}\n isMobile={isMobile}\n showMobileMonthPicker={showMobileMonthPicker}\n weekStartsOn={config.weekStartsOn}\n locale={config.locale}\n onNavigate={handleNavigate}\n onViewChange={handleViewChange}\n onToday={handleToday}\n onDateSelect={isMobile ? handleDateSelect : undefined}\n onWeekNavigate={isMobile ? handleWeekNavigate : undefined}\n renderHeader={renderHeader}\n />\n </div>\n )}\n\n <div\n className={cn(\n \"flex-1 overflow-hidden relative\",\n isMobile &&\n \"rounded-b-xl bg-background shadow-[inset_0_8px_12px_-6px_rgba(0,0,0,0.1),0_2px_8px_rgba(0,0,0,0.06)] dark:shadow-[inset_0_8px_12px_-6px_rgba(0,0,0,0.25),0_2px_8px_rgba(0,0,0,0.15)]\"\n )}\n >\n {loading && (\n <div className=\"absolute inset-0 bg-background/50 flex items-center justify-center z-20\">\n <Spinner className=\"h-8 w-8\" />\n </div>\n )}\n\n {events.length === 0 && renderEmpty ? (\n renderEmpty()\n ) : (\n <>\n {effectiveView === \"month\" && (\n <MonthView currentDate={currentDate} events={events} />\n )}\n {(effectiveView === \"week\" || effectiveView === \"2day\") && (\n <WeekView\n currentDate={currentDate}\n events={events}\n dayCount={effectiveView === \"2day\" ? 2 : undefined}\n isMobile={isMobile}\n />\n )}\n {effectiveView === \"day\" && (\n <DayView currentDate={currentDate} events={events} />\n )}\n {effectiveView === \"resource\" && (\n <ResourceView\n currentDate={currentDate}\n events={events}\n resources={resources}\n />\n )}\n </>\n )}\n </div>\n\n {renderSelectedEvent && (\n <>\n {renderSelectedEvent({\n event: selectedEvent,\n onClose: handleCloseSelected,\n })}\n </>\n )}\n {renderSelectedSlot && (\n <>\n {renderSelectedSlot({\n slot: selectedSlot,\n onClose: handleCloseSelected,\n })}\n </>\n )}\n </Card>\n </CalendarProvider>\n )\n\n const wrappedContent =\n enableDragToCreate || enableDragToMove ? (\n <EventCalendarDndProvider\n enableDragToCreate={enableDragToCreate}\n enableDragToMove={enableDragToMove}\n onEventCreate={onEventCreate}\n onEventMove={onEventMove}\n defaultEventColor={config.defaultEventColor}\n locale={config.locale}\n renderEvent={renderEvent}\n >\n {calendarContent}\n </EventCalendarDndProvider>\n ) : (\n calendarContent\n )\n\n if (theme || themeVars) {\n return (\n <EventCalendarThemeProvider\n theme={theme ?? \"system\"}\n themeVars={themeVars}\n >\n {wrappedContent}\n </EventCalendarThemeProvider>\n )\n }\n\n return wrappedContent\n}\n"]}