@allhailai/tempusmachina-react 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":["../src/primitives/cn.ts","../src/components/ui/button.tsx","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/hooks/use-calendar.ts","../src/hooks/use-drag-event.ts","../src/hooks/use-interaction.ts","../src/context/calendar-context.tsx","../src/components/calendar-header.tsx","../src/primitives/variants.ts","../src/components/event-card.tsx","../src/components/more-popover.tsx","../src/components/day-cell.tsx","../src/components/day-grid.tsx","../src/components/time-slot.tsx","../src/components/now-indicator.tsx","../src/components/all-day-row.tsx","../src/components/time-grid.tsx","../src/components/resource-lane.tsx","../src/components/timeline.tsx","../src/components/agenda.tsx","../src/components/multi-month.tsx","../src/components/resource-time-grid.tsx","../src/components/calendar.tsx","../src/components/calendar-footer.tsx","../src/components/background-event.tsx","../src/hooks/use-navigation.ts","../src/hooks/use-events.ts","../src/hooks/use-view.ts","../src/hooks/use-slots.ts","../src/hooks/use-drop-slot.ts","../src/hooks/use-selection.ts","../src/hooks/use-temporal-now.ts","../src/hooks/use-event-sources.ts","../src/hooks/use-external-drop.ts","../src/hooks/use-calendar-bridge.ts","../src/hooks/use-keyboard-nav.ts","../src/hooks/use-touch.ts","../src/hooks/use-resources.ts","../src/context/theme-context.tsx"],"names":["twMerge","clsx","cva","jsx","ButtonPrimitive","TogglePrimitive","React","ToggleGroupPrimitive","useState","getToday","useCallback","useMemo","createPluginRegistry","EventStore","useEffect","getVisibleRange","useRef","Temporal","viewTypeFromPreset","resolveLayoutSolver","navigateNext","navigatePrev","next","getViewTitle","draggable","monitorForElements","createContext","useContext","jsxs","formatEventTime","handleClick","dropTargetForElements","getWeekNumber","formatTime","isRtl","Fragment","createEventSources","fetchEventSource","mergeEventSources","monitorForExternal","dropTargetForExternal"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility for merging Tailwind CSS classes with proper conflict resolution.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { Button as ButtonPrimitive } from '@base-ui/react/button';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/primitives/cn';\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost:\n 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default:\n 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',\n icon: 'size-8',\n 'icon-xs':\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm':\n 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/primitives/cn';\n\nconst toggleVariants = cva(\n \"group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline: 'border border-input bg-transparent hover:bg-muted',\n },\n size: {\n default: 'h-8 min-w-8 px-2',\n sm: 'h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-1.5 text-[0.8rem]',\n lg: 'h-9 min-w-9 px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nfunction Toggle({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive\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 { Toggle as TogglePrimitive } from '@base-ui/react/toggle';\nimport { ToggleGroup as ToggleGroupPrimitive } from '@base-ui/react/toggle-group';\nimport { type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/primitives/cn';\nimport { toggleVariants } from '@/components/ui/toggle';\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }\n>({\n size: 'default',\n variant: 'default',\n spacing: 0,\n orientation: 'horizontal',\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = 'horizontal',\n children,\n ...props\n}: ToggleGroupPrimitive.Props &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n orientation?: 'horizontal' | 'vertical';\n }) {\n return (\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ '--gap': spacing } as React.CSSProperties}\n className={cn(\n 'group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch',\n className,\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing, orientation }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = 'default',\n size = 'default',\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n 'shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t',\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className,\n )}\n {...props}\n >\n {children}\n </TogglePrimitive>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","'use client';\n\nimport { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n EventInput,\n NormalizedEvent,\n ViewPreset,\n ViewLayout,\n TemporalDateRange,\n PluginDef,\n Resource,\n BusinessHoursInput,\n ViewConfig,\n EventDefaults,\n} from '@tempus-machina/core';\nimport {\n EventStore,\n navigateNext,\n navigatePrev,\n getVisibleRange,\n getToday,\n viewTypeFromPreset,\n getViewTitle,\n createPluginRegistry,\n resolveLayoutSolver,\n applyEventNormalizers,\n} from '@tempus-machina/core';\n\nexport interface UseCalendarOptions {\n events: EventInput[];\n plugins: PluginDef[];\n defaultDate?: Temporal.PlainDate;\n date?: Temporal.PlainDate; // Controlled\n onDateChange?: (date: Temporal.PlainDate) => void;\n defaultView?: ViewPreset;\n view?: ViewPreset; // Controlled\n onViewChange?: (view: ViewPreset) => void;\n timezone?: string;\n locale?: string;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n slotDuration?: Temporal.Duration;\n slotMinTime?: Temporal.PlainTime;\n slotMaxTime?: Temporal.PlainTime;\n resources?: Resource[];\n businessHours?: BusinessHoursInput;\n editable?: boolean;\n selectable?: boolean;\n eventMaxStack?: number;\n\n // Event defaults & global colors\n eventDefaults?: EventDefaults;\n validRange?: TemporalDateRange;\n\n // Title customization\n titleFormat?: Intl.DateTimeFormatOptions;\n titleRangeSeparator?: string;\n\n // Lifecycle callbacks\n onDatesSet?: (info: {\n start: Temporal.PlainDate;\n end: Temporal.PlainDate;\n view: ViewPreset;\n }) => void;\n onEventAdd?: (info: { event: NormalizedEvent }) => void;\n onEventChange?: (info: { event: NormalizedEvent; oldEvent: NormalizedEvent }) => void;\n onEventRemove?: (info: { event: NormalizedEvent }) => void;\n onEventsSet?: (events: NormalizedEvent[]) => void;\n}\n\nexport interface UseCalendarReturn {\n currentDate: Temporal.PlainDate;\n currentView: ViewPreset;\n viewLayout: ViewLayout | null;\n visibleRange: TemporalDateRange;\n events: NormalizedEvent[];\n next: () => void;\n prev: () => void;\n today: () => void;\n goToDate: (date: Temporal.PlainDate) => void;\n changeView: (view: ViewPreset) => void;\n title: string;\n addEvent: (event: EventInput) => void;\n updateEvent: (id: string, patch: Partial<EventInput>) => void;\n removeEvent: (id: string) => void;\n}\n\n/**\n * Primary orchestration hook — wires the headless core engine to React state.\n */\nexport function useCalendar(options: UseCalendarOptions): UseCalendarReturn {\n const {\n events: eventInputs,\n plugins,\n defaultDate,\n date: controlledDate,\n onDateChange,\n defaultView = 'dayGridMonth',\n view: controlledView,\n onViewChange,\n timezone = 'UTC',\n locale = 'en-US',\n firstDayOfWeek = 0,\n slotDuration,\n slotMinTime,\n slotMaxTime,\n resources = [],\n businessHours,\n eventMaxStack = 3,\n eventDefaults,\n validRange,\n titleFormat,\n titleRangeSeparator,\n onDatesSet,\n onEventAdd,\n onEventChange,\n onEventRemove,\n onEventsSet,\n } = options;\n\n // Date state (controlled or uncontrolled)\n const [internalDate, setInternalDate] = useState<Temporal.PlainDate>(\n () => defaultDate ?? getToday(),\n );\n const currentDate = controlledDate ?? internalDate;\n const setDate = useCallback(\n (date: Temporal.PlainDate) => {\n if (controlledDate === undefined) setInternalDate(date);\n onDateChange?.(date);\n },\n [controlledDate, onDateChange],\n );\n\n // View state (controlled or uncontrolled)\n const [internalView, setInternalView] = useState<ViewPreset>(defaultView);\n const currentView = controlledView ?? internalView;\n const setView = useCallback(\n (view: ViewPreset) => {\n if (controlledView === undefined) setInternalView(view);\n onViewChange?.(view);\n },\n [controlledView, onViewChange],\n );\n\n // Plugin registry\n const registry = useMemo(() => createPluginRegistry(plugins), [plugins]);\n\n // Event store — uses EventDefaults for normalization\n const [eventStore, setEventStore] = useState(() =>\n EventStore.from(eventInputs, timezone, eventDefaults),\n );\n\n // Sync external events prop\n useEffect(() => {\n setEventStore(EventStore.from(eventInputs, timezone, eventDefaults));\n }, [eventInputs, timezone, eventDefaults]);\n\n // Visible range\n const visibleRange = useMemo(\n () => getVisibleRange(currentDate, currentView, firstDayOfWeek),\n [currentDate, currentView, firstDayOfWeek],\n );\n\n // Fire onDatesSet when visible range changes\n const prevRangeRef = useRef(visibleRange);\n useEffect(() => {\n const prevRange = prevRangeRef.current;\n if (!prevRange.start.equals(visibleRange.start) || !prevRange.end.equals(visibleRange.end)) {\n onDatesSet?.({\n start: visibleRange.start,\n end: visibleRange.end,\n view: currentView,\n });\n }\n prevRangeRef.current = visibleRange;\n }, [visibleRange, currentView, onDatesSet]);\n\n // Fire onEventsSet when event store changes\n useEffect(() => {\n onEventsSet?.(eventStore.getAll());\n }, [eventStore, onEventsSet]);\n\n // View config\n const viewConfig = useMemo((): ViewConfig => {\n const defaults = {\n slotDuration: slotDuration ?? Temporal.Duration.from({ minutes: 30 }),\n slotMinTime: slotMinTime ?? Temporal.PlainTime.from('00:00'),\n slotMaxTime: slotMaxTime ?? Temporal.PlainTime.from('23:59:59'),\n };\n\n return {\n type: viewTypeFromPreset(currentView),\n preset: currentView,\n visibleRange,\n slotDuration: defaults.slotDuration,\n slotMinTime: defaults.slotMinTime,\n slotMaxTime: defaults.slotMaxTime,\n firstDayOfWeek,\n hiddenDays: [],\n businessHours,\n eventMaxStack,\n validRange,\n };\n }, [\n currentView,\n visibleRange,\n slotDuration,\n slotMinTime,\n slotMaxTime,\n firstDayOfWeek,\n businessHours,\n eventMaxStack,\n validRange,\n ]);\n\n // Layout computation\n const viewLayout = useMemo(() => {\n const viewType = viewTypeFromPreset(currentView);\n const layoutSolver = resolveLayoutSolver(viewType, registry);\n\n if (!layoutSolver) return null;\n\n const eventsInRange = eventStore.getInRange(visibleRange, timezone);\n\n const context = {\n now: () => Temporal.Now.zonedDateTimeISO(timezone),\n getEvents: () => eventsInRange,\n getResources: () => resources,\n getViewConfig: () => viewConfig,\n };\n\n return layoutSolver(eventsInRange, viewConfig, context);\n }, [currentView, eventStore, visibleRange, timezone, resources, viewConfig, registry]);\n\n // Navigation — now respects validRange\n const next = useCallback(\n () => setDate(navigateNext(currentDate, currentView, validRange)),\n [currentDate, currentView, setDate, validRange],\n );\n const prev = useCallback(\n () => setDate(navigatePrev(currentDate, currentView, validRange)),\n [currentDate, currentView, setDate, validRange],\n );\n const todayAction = useCallback(() => setDate(getToday()), [setDate]);\n const goToDate = useCallback((date: Temporal.PlainDate) => setDate(date), [setDate]);\n const changeView = useCallback((view: ViewPreset) => setView(view), [setView]);\n\n // Event mutations — fire lifecycle callbacks\n const addEvent = useCallback(\n (event: EventInput) => {\n setEventStore((store) => {\n const next = store.add(event, timezone, eventDefaults);\n const added = next.getById(event.id);\n if (added) onEventAdd?.({ event: added });\n return next;\n });\n },\n [timezone, eventDefaults, onEventAdd],\n );\n\n const updateEvent = useCallback(\n (id: string, patch: Partial<EventInput>) => {\n setEventStore((store) => {\n const oldEvent = store.getById(id);\n const next = store.update(id, patch, timezone, eventDefaults);\n const updated = next.getById(id);\n if (oldEvent && updated) onEventChange?.({ event: updated, oldEvent });\n return next;\n });\n },\n [timezone, eventDefaults, onEventChange],\n );\n\n const removeEvent = useCallback(\n (id: string) => {\n setEventStore((store) => {\n const removed = store.getById(id);\n const next = store.remove(id);\n if (removed) onEventRemove?.({ event: removed });\n return next;\n });\n },\n [onEventRemove],\n );\n\n // Title — now supports configurable format and separator\n const title = useMemo(\n () => getViewTitle(currentDate, currentView, locale, titleFormat, titleRangeSeparator),\n [currentDate, currentView, locale, titleFormat, titleRangeSeparator],\n );\n\n return {\n currentDate,\n currentView,\n viewLayout,\n visibleRange,\n events: eventStore.getAll(),\n next,\n prev,\n today: todayAction,\n goToDate,\n changeView,\n title,\n addEvent,\n updateEvent,\n removeEvent,\n };\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport type { NormalizedEvent } from '@tempus-machina/core';\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\n\n/**\n * PDND data key for identifying calendar event drags.\n */\nexport const CALENDAR_EVENT_TYPE = 'tempus-machina/event';\n\nexport interface UseDragEventOptions {\n /** The event being made draggable */\n event: NormalizedEvent;\n /** Whether this event is editable (default: true) */\n editable?: boolean;\n /** Whether the start time can be changed via drag */\n startEditable?: boolean;\n /** Minimum distance before drag activates (pixels) */\n dragMinDistance?: number;\n /** Callback when drag starts */\n onDragStart?: (event: NormalizedEvent) => void;\n /** Callback when drag ends (regardless of outcome) */\n onDragEnd?: (event: NormalizedEvent) => void;\n}\n\nexport interface UseDragEventReturn {\n /** Ref to attach to the draggable element */\n dragRef: React.RefObject<HTMLElement | null>;\n /** Ref to attach to a specific drag handle (optional) */\n dragHandleRef: React.RefObject<HTMLElement | null>;\n /** Whether this element is currently being dragged */\n isDragging: boolean;\n}\n\n/**\n * Hook to make an event card draggable using Pragmatic Drag and Drop.\n *\n * Usage:\n * ```tsx\n * const { dragRef, isDragging } = useDragEvent({ event });\n * return <div ref={dragRef} style={{ opacity: isDragging ? 0.5 : 1 }}>...</div>;\n * ```\n */\nexport function useDragEvent(options: UseDragEventOptions): UseDragEventReturn {\n const {\n event,\n editable = event.editable ?? true,\n startEditable = event.startEditable ?? true,\n dragMinDistance,\n onDragStart,\n onDragEnd,\n } = options;\n\n const dragRef = useRef<HTMLElement | null>(null);\n const dragHandleRef = useRef<HTMLElement | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const el = dragRef.current;\n if (!el) return;\n\n // Skip if explicitly disabled\n if (editable === false || startEditable === false) return;\n\n const cleanup = draggable({\n element: el,\n dragHandle: dragHandleRef.current ?? undefined,\n getInitialData: () => ({\n type: CALENDAR_EVENT_TYPE,\n eventId: event.id,\n eventTitle: event.title,\n eventStart: event.start.toString(),\n eventEnd: event.end.toString(),\n isAllDay: event.isAllDay,\n resourceIds: event.resourceIds,\n }),\n onDragStart: () => {\n setIsDragging(true);\n onDragStart?.(event);\n },\n onDrop: () => {\n setIsDragging(false);\n onDragEnd?.(event);\n },\n });\n\n return cleanup;\n }, [event, editable, startEditable, onDragStart, onDragEnd]);\n\n return { dragRef, dragHandleRef, isDragging };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type { NormalizedEvent, ViewConfig } from '@tempus-machina/core';\nimport { calculateNewTimes, getSnapMinutes, type DragDeltaParams } from '@tempus-machina/core';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { CALENDAR_EVENT_TYPE } from './use-drag-event.js';\n\nexport type InteractionMode = 'idle' | 'dragging' | 'resizing' | 'selecting';\n\nexport interface InteractionState {\n mode: InteractionMode;\n activeEvent: NormalizedEvent | null;\n ghostEvent: NormalizedEvent | null;\n previewStart: Temporal.ZonedDateTime | null;\n previewEnd: Temporal.ZonedDateTime | null;\n /** The drop target currently being hovered */\n dropTargetDate: string | null;\n dropTargetTime: string | null;\n dropTargetResourceId: string | null;\n}\n\nexport interface UseInteractionOptions {\n /** All events for overlap checking */\n events?: NormalizedEvent[];\n /** View config for time resolution */\n viewConfig?: ViewConfig;\n /** Timezone */\n timezone?: string;\n /** Duration of revert animation on failed drop (ms) */\n dragRevertDuration?: number;\n /** When dragging between timed and all-day, maintain original duration */\n allDayMaintainDuration?: boolean;\n /** Whether events can be dragged between resources */\n eventResourceEditable?: boolean;\n /** Callback when event drag starts */\n onEventDragStart?: (info: { event: NormalizedEvent }) => void;\n /** Callback when event drag stops */\n onEventDragStop?: (info: { event: NormalizedEvent }) => void;\n /** Callback when event is dropped */\n onEventDrop?: (info: {\n event: NormalizedEvent;\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n newResourceId?: string;\n oldResourceId?: string;\n revert: () => void;\n }) => void;\n /** Callback when event is resized */\n onEventResize?: (info: {\n event: NormalizedEvent;\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n revert: () => void;\n }) => void;\n}\n\nexport interface UseInteractionReturn {\n state: InteractionState;\n startDrag: (event: NormalizedEvent, position: { x: number; y: number }) => void;\n startResize: (\n event: NormalizedEvent,\n edge: 'start' | 'end',\n position: { x: number; y: number },\n ) => void;\n startSelect: (position: { x: number; y: number }) => void;\n updatePosition: (position: { x: number; y: number }) => void;\n endInteraction: () => InteractionResult | null;\n cancel: () => void;\n}\n\nexport interface InteractionResult {\n type: 'move' | 'resize' | 'create' | 'select';\n event?: NormalizedEvent;\n newStart?: Temporal.ZonedDateTime;\n newEnd?: Temporal.ZonedDateTime;\n newResourceId?: string;\n}\n\nconst IDLE_STATE: InteractionState = {\n mode: 'idle',\n activeEvent: null,\n ghostEvent: null,\n previewStart: null,\n previewEnd: null,\n dropTargetDate: null,\n dropTargetTime: null,\n dropTargetResourceId: null,\n};\n\n/**\n * Drag/drop/resize state machine hook.\n * Uses PDND's monitorForElements at the calendar root level for global drag awareness.\n * Individual elements use useDragEvent/useDropSlot for PDND binding.\n *\n * This hook orchestrates the high-level interaction state (ghost events, previews)\n * while PDND handles the browser-native drag mechanics.\n */\nexport function useInteraction(options: UseInteractionOptions = {}): UseInteractionReturn {\n const {\n events = [],\n viewConfig,\n timezone = 'UTC',\n dragRevertDuration = 300,\n allDayMaintainDuration = true,\n eventResourceEditable = true,\n onEventDragStart,\n onEventDragStop,\n onEventDrop,\n onEventResize,\n } = options;\n\n const [state, setState] = useState<InteractionState>(IDLE_STATE);\n\n // Ref for events lookup (avoid stale closures in PDND callbacks)\n const eventsRef = useRef(events);\n useEffect(() => {\n eventsRef.current = events;\n }, [events]);\n\n // PDND monitor — tracks all drag operations at the calendar level\n useEffect(() => {\n const cleanup = monitorForElements({\n canMonitor: ({ source }) => source.data.type === CALENDAR_EVENT_TYPE,\n onDragStart: ({ source }) => {\n const eventId = source.data.eventId as string;\n const activeEvent = eventsRef.current.find((e) => e.id === eventId) ?? null;\n const resizeEdge = source.data.resizeEdge as 'start' | 'end' | undefined;\n\n if (activeEvent) {\n const ghostEvent: NormalizedEvent = {\n ...activeEvent,\n id: `ghost-${activeEvent.id}`,\n };\n\n setState({\n mode: resizeEdge ? 'resizing' : 'dragging',\n activeEvent,\n ghostEvent,\n previewStart: activeEvent.start,\n previewEnd: activeEvent.end,\n dropTargetDate: null,\n dropTargetTime: null,\n dropTargetResourceId: null,\n });\n\n onEventDragStart?.({ event: activeEvent });\n }\n },\n onDrag: ({ location }) => {\n const dropTarget = location.current.dropTargets[0];\n if (dropTarget) {\n setState((prev) => ({\n ...prev,\n dropTargetDate: (dropTarget.data.date as string) ?? null,\n dropTargetTime: (dropTarget.data.time as string) ?? null,\n dropTargetResourceId: (dropTarget.data.resourceId as string) ?? null,\n }));\n }\n },\n onDrop: ({ source, location }) => {\n const eventId = source.data.eventId as string;\n const activeEvent = eventsRef.current.find((e) => e.id === eventId);\n const resizeEdge = source.data.resizeEdge as 'start' | 'end' | undefined;\n\n if (activeEvent) {\n onEventDragStop?.({ event: activeEvent });\n\n const dropTarget = location.current.dropTargets[0];\n if (dropTarget && dropTarget.data.date) {\n const targetDate = Temporal.PlainDate.from(dropTarget.data.date as string);\n const targetTime = dropTarget.data.time\n ? Temporal.PlainTime.from(dropTarget.data.time as string)\n : Temporal.PlainTime.from('00:00');\n const targetResourceId = (dropTarget.data.resourceId as string) ?? undefined;\n const isAllDay = !dropTarget.data.time;\n\n // Check resource editability\n const oldResourceId = activeEvent.resourceIds?.[0];\n if (!eventResourceEditable && targetResourceId && targetResourceId !== oldResourceId) {\n setState(IDLE_STATE);\n return;\n }\n\n if (resizeEdge) {\n // Resize operation\n let newStart = activeEvent.start;\n let newEnd = activeEvent.end;\n\n const targetZdt = targetDate.toZonedDateTime({\n timeZone: timezone,\n plainTime: targetTime,\n });\n\n if (resizeEdge === 'start') {\n newStart = targetZdt;\n } else {\n newEnd = targetZdt;\n }\n\n onEventResize?.({\n event: activeEvent,\n newStart,\n newEnd,\n revert: () => {\n // Restore original event times via the drop callback\n onEventResize?.({\n event: activeEvent,\n newStart: activeEvent.start,\n newEnd: activeEvent.end,\n revert: () => {},\n });\n },\n });\n } else {\n // Move operation\n let newStart: Temporal.ZonedDateTime;\n let newEnd: Temporal.ZonedDateTime;\n\n if (isAllDay && allDayMaintainDuration) {\n // Dragging to all-day: maintain duration from original\n newStart = targetDate.toZonedDateTime({\n timeZone: timezone,\n plainTime: Temporal.PlainTime.from('00:00'),\n });\n const duration = activeEvent.start.until(activeEvent.end);\n newEnd = newStart.add(duration);\n } else {\n newStart = targetDate.toZonedDateTime({\n timeZone: timezone,\n plainTime: targetTime,\n });\n const duration = activeEvent.start.until(activeEvent.end);\n newEnd = newStart.add(duration);\n }\n\n onEventDrop?.({\n event: activeEvent,\n newStart,\n newEnd,\n newResourceId: targetResourceId,\n oldResourceId,\n revert: () => {\n // Restore original event position via the drop callback\n onEventDrop?.({\n event: activeEvent,\n newStart: activeEvent.start,\n newEnd: activeEvent.end,\n newResourceId: oldResourceId,\n oldResourceId: targetResourceId,\n revert: () => {},\n });\n },\n });\n }\n }\n }\n\n setState(IDLE_STATE);\n },\n });\n\n return cleanup;\n }, [timezone, onEventDragStart, onEventDragStop, onEventDrop]);\n\n // Legacy API compatibility — these are still available for non-PDND usage\n const startDrag = useCallback((event: NormalizedEvent, position: { x: number; y: number }) => {\n const ghostEvent: NormalizedEvent = { ...event, id: `ghost-${event.id}` };\n setState({\n mode: 'dragging',\n activeEvent: event,\n ghostEvent,\n previewStart: event.start,\n previewEnd: event.end,\n dropTargetDate: null,\n dropTargetTime: null,\n dropTargetResourceId: null,\n });\n }, []);\n\n const startResize = useCallback(\n (event: NormalizedEvent, edge: 'start' | 'end', position: { x: number; y: number }) => {\n setState({\n mode: 'resizing',\n activeEvent: event,\n ghostEvent: null,\n previewStart: event.start,\n previewEnd: event.end,\n dropTargetDate: null,\n dropTargetTime: null,\n dropTargetResourceId: null,\n });\n },\n [],\n );\n\n const startSelect = useCallback((position: { x: number; y: number }) => {\n setState({\n mode: 'selecting',\n activeEvent: null,\n ghostEvent: null,\n previewStart: null,\n previewEnd: null,\n dropTargetDate: null,\n dropTargetTime: null,\n dropTargetResourceId: null,\n });\n }, []);\n\n const updatePosition = useCallback((_position: { x: number; y: number }) => {\n // In PDND mode, position updates come from the monitor.\n // This is kept for backward compatibility.\n }, []);\n\n const endInteraction = useCallback((): InteractionResult | null => {\n const result: InteractionResult = {\n type: state.mode === 'dragging' ? 'move' : state.mode === 'resizing' ? 'resize' : 'select',\n event: state.activeEvent ?? undefined,\n };\n setState(IDLE_STATE);\n return result;\n }, [state.mode, state.activeEvent]);\n\n const cancel = useCallback(() => {\n setState(IDLE_STATE);\n }, []);\n\n return {\n state,\n startDrag,\n startResize,\n startSelect,\n updatePosition,\n endInteraction,\n cancel,\n };\n}\n","'use client';\n\nimport { createContext, useContext } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n NormalizedEvent,\n PositionedEvent,\n ViewPreset,\n ViewLayout,\n TemporalDateRange,\n EventInput,\n PluginDef,\n ViewConfig,\n Resource,\n BusinessHoursInput,\n EventDefaults,\n ViewApi,\n} from '@tempus-machina/core';\n\n/**\n * Calendar slots — render prop overrides for every visual element.\n */\nexport interface CalendarSlots {\n eventContent?: (props: EventContentProps) => React.ReactNode;\n dayCellContent?: (props: DayCellContentProps) => React.ReactNode;\n slotContent?: (props: SlotContentProps) => React.ReactNode;\n headerContent?: (props: HeaderContentProps) => React.ReactNode;\n moreLinkContent?: (props: MoreLinkContentProps) => React.ReactNode;\n resourceLabelContent?: (props: ResourceLabelContentProps) => React.ReactNode;\n nowIndicatorContent?: () => React.ReactNode;\n\n // Lifecycle hooks — called via useEffect-based ref callbacks\n /** Additional CSS class names for events (string or function) */\n eventClassNames?: string | ((props: EventContentProps) => string);\n /** Called after an event DOM element is mounted */\n eventDidMount?: (info: {\n el: HTMLElement;\n event: import('@tempus-machina/core').NormalizedEvent;\n view: import('@tempus-machina/core').ViewPreset;\n }) => void;\n /** Called before an event DOM element is unmounted */\n eventWillUnmount?: (info: {\n el: HTMLElement;\n event: import('@tempus-machina/core').NormalizedEvent;\n view: import('@tempus-machina/core').ViewPreset;\n }) => void;\n /** Called after a day cell DOM element is mounted */\n dayCellDidMount?: (info: {\n el: HTMLElement;\n date: import('temporal-polyfill').Temporal.PlainDate;\n }) => void;\n /** Called after the view container is mounted */\n viewDidMount?: (info: {\n el: HTMLElement;\n view: import('@tempus-machina/core').ViewPreset;\n }) => void;\n /** Called before the view container is unmounted */\n viewWillUnmount?: (info: {\n el: HTMLElement;\n view: import('@tempus-machina/core').ViewPreset;\n }) => void;\n}\n\nexport interface EventContentProps {\n event: NormalizedEvent;\n view: ViewPreset;\n isStart: boolean;\n isEnd: boolean;\n isDragging: boolean;\n timeText: string;\n}\n\nexport interface DayCellContentProps {\n date: Temporal.PlainDate;\n isToday: boolean;\n isCurrentMonth: boolean;\n isWeekend: boolean;\n dayNumberText: string;\n events: NormalizedEvent[];\n}\n\nexport interface SlotContentProps {\n start: Temporal.PlainDateTime;\n end: Temporal.PlainDateTime;\n isBusinessHour: boolean;\n}\n\nexport interface HeaderContentProps {\n title: string;\n currentView: ViewPreset;\n currentDate: Temporal.PlainDate;\n}\n\nexport interface MoreLinkContentProps {\n count: number;\n date: Temporal.PlainDate;\n}\n\nexport interface ResourceLabelContentProps {\n resource: Resource;\n}\n\n/**\n * The shape of the calendar context value.\n */\nexport interface CalendarContextValue {\n // Current state\n currentDate: Temporal.PlainDate;\n currentView: ViewPreset;\n viewLayout: ViewLayout | null;\n visibleRange: TemporalDateRange;\n events: NormalizedEvent[];\n resources: Resource[];\n\n // Configuration\n timezone: string;\n locale: string;\n firstDayOfWeek: number;\n editable: boolean;\n selectable: boolean;\n eventDefaults?: EventDefaults;\n\n // Selection state\n selectedRange: { start: Temporal.ZonedDateTime; end: Temporal.ZonedDateTime } | null;\n select: (start: Temporal.ZonedDateTime, end: Temporal.ZonedDateTime) => void;\n unselect: () => void;\n\n // Navigation actions\n next: () => void;\n prev: () => void;\n today: () => void;\n goToDate: (date: Temporal.PlainDate) => void;\n changeView: (view: ViewPreset) => void;\n\n // Event mutations\n addEvent: (event: EventInput) => void;\n updateEvent: (id: string, patch: Partial<EventInput>) => void;\n removeEvent: (id: string) => void;\n\n // Display\n title: string;\n\n // Slots\n slots: CalendarSlots;\n\n // Core callbacks (already existed)\n onEventClick?: (event: NormalizedEvent) => void;\n onEventDrop?: (info: {\n event: NormalizedEvent;\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n newResourceId?: string;\n }) => void;\n onDateSelect?: (range: {\n start: Temporal.PlainDateTime;\n end: Temporal.PlainDateTime;\n resourceId?: string;\n }) => void;\n onEventResize?: (info: {\n event: NormalizedEvent;\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n }) => void;\n\n // Date callbacks\n onDateClick?: (info: {\n date: Temporal.PlainDate;\n dateStr: string;\n view: ViewPreset;\n resourceId?: string;\n }) => void;\n onDatesSet?: (info: {\n start: Temporal.PlainDate;\n end: Temporal.PlainDate;\n view: ViewPreset;\n }) => void;\n onUnselect?: () => void;\n\n // Event hover callbacks\n onEventMouseEnter?: (info: { event: NormalizedEvent; el: HTMLElement }) => void;\n onEventMouseLeave?: (info: { event: NormalizedEvent; el: HTMLElement }) => void;\n\n // Drag lifecycle callbacks\n onEventDragStart?: (info: { event: NormalizedEvent }) => void;\n onEventDragStop?: (info: { event: NormalizedEvent }) => void;\n\n // Resize lifecycle callbacks\n onEventResizeStart?: (info: { event: NormalizedEvent }) => void;\n onEventResizeStop?: (info: { event: NormalizedEvent }) => void;\n\n // Event mutation lifecycle callbacks\n onEventAdd?: (info: { event: NormalizedEvent }) => void;\n onEventChange?: (info: { event: NormalizedEvent; oldEvent: NormalizedEvent }) => void;\n onEventRemove?: (info: { event: NormalizedEvent }) => void;\n onEventsSet?: (events: NormalizedEvent[]) => void;\n\n // Loading state callback\n onLoading?: (isLoading: boolean) => void;\n\n // Window resize callback\n onWindowResize?: (info: { view: ViewPreset }) => void;\n}\n\nexport const CalendarContext = createContext<CalendarContextValue | null>(null);\n\n/**\n * Hook to consume the calendar context.\n * Must be used within a <Calendar> provider.\n */\nexport function useCalendarContext(): CalendarContextValue {\n const context = useContext(CalendarContext);\n if (!context) {\n throw new Error(\n '[tempus-machina] useCalendarContext must be used within a <Calendar> component.',\n );\n }\n return context;\n}\n","'use client';\n\nimport React from 'react';\nimport { Button } from './ui/button.js';\nimport { ToggleGroup, ToggleGroupItem } from './ui/toggle-group.js';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport type { ViewPreset } from '@tempus-machina/core';\n\nexport interface ToolbarConfig {\n left?: string;\n center?: string;\n right?: string;\n}\n\nexport interface CustomButton {\n text: string;\n click: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface CalendarHeaderProps {\n className?: string;\n children?: React.ReactNode;\n /** Config-driven toolbar: { left: 'prev,next today', center: 'title', right: 'dayGridMonth,timeGridWeek,timeGridDay' } */\n toolbar?: ToolbarConfig;\n /** Override button text labels */\n buttonText?: Partial<Record<string, string>>;\n /** Custom buttons registry */\n customButtons?: Record<string, CustomButton>;\n /** Whether to use sticky positioning */\n sticky?: boolean;\n}\n\nconst DEFAULT_BUTTON_TEXT: Record<string, string> = {\n today: 'Today',\n dayGridMonth: 'Month',\n dayGridWeek: 'Week',\n dayGridDay: 'Day',\n timeGridWeek: 'Week',\n timeGridDay: 'Day',\n timelineDay: 'Timeline',\n multiMonthStack: 'Year',\n prev: '‹',\n next: '›',\n prevYear: '«',\n nextYear: '»',\n};\n\nconst VIEW_PRESETS: string[] = [\n 'dayGridMonth',\n 'dayGridWeek',\n 'dayGridDay',\n 'timeGridWeek',\n 'timeGridDay',\n 'timelineDay',\n 'timelineWeek',\n 'timelineMonth',\n 'multiMonthStack',\n 'multiMonthGrid',\n 'resourceTimeGridDay',\n 'resourceTimeGridWeek',\n];\n\n/**\n * <CalendarHeader /> — Config-driven toolbar with prev/next, title, view switcher, and custom buttons.\n *\n * When `toolbar` prop is provided, renders from config tokens.\n * Otherwise falls back to children, slots, or default layout.\n */\nexport function CalendarHeader({\n className,\n children,\n toolbar,\n buttonText,\n customButtons,\n sticky,\n}: CalendarHeaderProps) {\n const { title, next, prev, today, currentView, changeView, slots, currentDate } =\n useCalendarContext();\n\n const mergedText: Record<string, string> = {\n ...DEFAULT_BUTTON_TEXT,\n ...Object.fromEntries(\n Object.entries(buttonText ?? {}).filter(\n (entry): entry is [string, string] => entry[1] !== undefined,\n ),\n ),\n };\n\n // Slot override\n if (slots.headerContent) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-b border-cal-border bg-cal-header-bg',\n sticky && 'sticky top-0 z-10',\n className,\n )}\n >\n {slots.headerContent({ title, currentView, currentDate })}\n </div>\n );\n }\n\n // Children override\n if (children) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-b border-cal-border bg-cal-header-bg',\n sticky && 'sticky top-0 z-10',\n className,\n )}\n >\n {children}\n </div>\n );\n }\n\n // Config-driven toolbar\n if (toolbar) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-b border-cal-border bg-cal-header-bg',\n sticky && 'sticky top-0 z-10',\n className,\n )}\n >\n <ToolbarSection\n tokens={toolbar.left}\n mergedText={mergedText}\n customButtons={customButtons}\n prev={prev}\n next={next}\n today={today}\n title={title}\n currentView={currentView}\n changeView={changeView}\n />\n <ToolbarSection\n tokens={toolbar.center}\n mergedText={mergedText}\n customButtons={customButtons}\n prev={prev}\n next={next}\n today={today}\n title={title}\n currentView={currentView}\n changeView={changeView}\n />\n <ToolbarSection\n tokens={toolbar.right}\n mergedText={mergedText}\n customButtons={customButtons}\n prev={prev}\n next={next}\n today={today}\n title={title}\n currentView={currentView}\n changeView={changeView}\n />\n </div>\n );\n }\n\n // Default layout\n return (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-3 border-b border-cal-border bg-cal-header-bg',\n sticky && 'sticky top-0 z-10',\n className,\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"icon\" onClick={prev} aria-label=\"Previous\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n <Button variant=\"outline\" size=\"icon\" onClick={next} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={today}>\n Today\n </Button>\n </div>\n\n <h2 className=\"text-lg font-semibold text-cal-header-fg\">{title}</h2>\n\n <ToggleGroup\n value={[currentView]}\n onValueChange={(newValue: string[]) => {\n if (newValue.length > 0) {\n changeView(newValue[0] as typeof currentView);\n }\n }}\n variant=\"outline\"\n >\n {(['dayGridMonth', 'timeGridWeek', 'timeGridDay'] as const).map((view) => (\n <ToggleGroupItem key={view} value={view} size=\"sm\">\n {mergedText[view] ?? view}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n </div>\n );\n}\n\n/**\n * Renders a section of the toolbar from comma-separated tokens.\n */\nfunction ToolbarSection({\n tokens,\n mergedText,\n customButtons,\n prev,\n next,\n today,\n title,\n currentView,\n changeView,\n}: {\n tokens?: string;\n mergedText: Record<string, string>;\n customButtons?: Record<string, CustomButton>;\n prev: () => void;\n next: () => void;\n today: () => void;\n title: string;\n currentView: string;\n changeView: (view: ViewPreset) => void;\n}) {\n if (!tokens) return <div />;\n\n const groups = tokens.split(' ').filter(Boolean);\n\n return (\n <div className=\"flex items-center gap-2\">\n {groups.map((group, gIdx) => {\n const items = group.split(',').filter(Boolean);\n const viewItems = items.filter((t) => VIEW_PRESETS.includes(t));\n const actionItems = items.filter((t) => !VIEW_PRESETS.includes(t));\n\n // If all items are view presets, render as a toggle group\n if (viewItems.length > 0 && actionItems.length === 0) {\n return (\n <ToggleGroup\n key={gIdx}\n value={[currentView]}\n onValueChange={(v: string[]) => v.length > 0 && changeView(v[0] as ViewPreset)}\n variant=\"outline\"\n >\n {viewItems.map((view) => (\n <ToggleGroupItem key={view} value={view} size=\"sm\">\n {mergedText[view] ?? view}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n );\n }\n\n // Otherwise render as buttons\n return (\n <div key={gIdx} className=\"flex items-center gap-1\">\n {items.map((token) =>\n renderToken(token, mergedText, customButtons, {\n prev,\n next,\n today,\n title,\n changeView,\n currentView,\n }),\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction renderToken(\n token: string,\n text: Record<string, string>,\n customButtons?: Record<string, CustomButton>,\n actions?: {\n prev: () => void;\n next: () => void;\n today: () => void;\n title: string;\n changeView: (view: ViewPreset) => void;\n currentView: string;\n },\n): React.ReactNode {\n switch (token) {\n case 'title':\n return (\n <h2 key=\"title\" className=\"text-lg font-semibold text-cal-header-fg\">\n {actions?.title}\n </h2>\n );\n case 'prev':\n return (\n <Button\n key=\"prev\"\n variant=\"outline\"\n size=\"icon\"\n onClick={actions?.prev}\n aria-label=\"Previous\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n );\n case 'next':\n return (\n <Button key=\"next\" variant=\"outline\" size=\"icon\" onClick={actions?.next} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n );\n case 'today':\n return (\n <Button key=\"today\" variant=\"outline\" size=\"sm\" onClick={actions?.today}>\n {text.today ?? 'Today'}\n </Button>\n );\n default:\n // Custom button\n if (customButtons?.[token]) {\n const btn = customButtons[token];\n return (\n <Button key={token} variant=\"outline\" size=\"sm\" onClick={btn.click}>\n {btn.icon}\n {btn.text}\n </Button>\n );\n }\n // View preset button\n if (VIEW_PRESETS.includes(token)) {\n return (\n <Button\n key={token}\n variant={actions?.currentView === token ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => actions?.changeView(token as ViewPreset)}\n >\n {text[token] ?? token}\n </Button>\n );\n }\n return null;\n }\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Event card variants.\n * Styled pill-shaped cards with hover elevation and active feedback.\n */\nexport const eventCardVariants = cva(\n [\n 'rounded-[var(--cal-event-border-radius)] px-2 py-1 text-xs font-medium',\n 'cursor-pointer select-none',\n 'transition-all duration-[var(--cal-transition-duration)]',\n // Hover: subtle lift + glow\n 'hover:brightness-110 hover:shadow-md hover:-translate-y-px',\n // Active: pressed feedback\n 'active:scale-[0.98] active:shadow-sm',\n ].join(' '),\n {\n variants: {\n variant: {\n default: 'bg-cal-event-default-bg text-cal-event-default-fg',\n outline: 'border border-current bg-transparent',\n ghost: 'border border-dashed border-current bg-transparent opacity-60',\n },\n size: {\n sm: 'text-[10px] px-1.5 py-0.5 leading-tight',\n default: 'text-xs px-2 py-1',\n lg: 'text-sm px-3 py-1.5',\n },\n state: {\n idle: '',\n dragging: 'opacity-[var(--cal-drag-opacity)] shadow-lg scale-[1.02] z-50',\n resizing: 'opacity-90 z-50',\n selected: 'ring-2 ring-cal-event-selected-ring ring-offset-1',\n focused: 'ring-2 ring-cal-event-selected-ring ring-offset-1',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n state: 'idle',\n },\n },\n);\n\nexport type EventCardVariants = VariantProps<typeof eventCardVariants>;\n\n/**\n * Day cell variants for the month grid.\n * Includes hover highlight for interactivity feedback.\n */\nexport const dayCellVariants = cva(\n [\n 'min-h-24 p-1.5 border-b border-r border-cal-border',\n 'transition-colors duration-[var(--cal-transition-duration)]',\n // Hover: subtle highlight\n 'hover:bg-cal-slot-bg-odd',\n ].join(' '),\n {\n variants: {\n variant: {\n default: 'bg-cal-slot-bg',\n today: 'bg-cal-today-bg hover:bg-cal-today-bg',\n weekend: 'bg-cal-weekend-bg',\n otherMonth: 'bg-cal-slot-bg opacity-50',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport type DayCellVariants = VariantProps<typeof dayCellVariants>;\n\n/**\n * Time slot variants.\n * Alternating backgrounds for readability + hover state.\n */\nexport const timeSlotVariants = cva(\n ['border-b border-cal-slot-border', 'transition-colors duration-75'].join(' '),\n {\n variants: {\n variant: {\n default: 'bg-cal-slot-bg',\n odd: 'bg-cal-slot-bg-odd',\n business: 'bg-cal-slot-business',\n nonBusiness: 'bg-cal-slot-non-business',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport type TimeSlotVariants = VariantProps<typeof timeSlotVariants>;\n","'use client';\n\nimport React, { useCallback } from 'react';\nimport type { PositionedEvent, NormalizedEvent } from '@tempus-machina/core';\nimport { formatEventTime } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { useDragEvent } from '../hooks/use-drag-event.js';\nimport { cn } from '../primitives/cn.js';\nimport { eventCardVariants } from '../primitives/variants.js';\n\nexport interface EventCardProps {\n positionedEvent: PositionedEvent;\n compact?: boolean;\n /** Custom event time format */\n eventTimeFormat?: Intl.DateTimeFormatOptions;\n /** Whether to show event time (default: true) */\n displayEventTime?: boolean;\n /** Whether to show event end time (default: false) */\n displayEventEnd?: boolean;\n}\n\n/**\n * Resolve the inline styles for an event based on the color hierarchy:\n * event.backgroundColor/borderColor/textColor → event.color → CSS token fallback\n */\nfunction resolveEventStyles(event: NormalizedEvent): React.CSSProperties | undefined {\n const bgColor = event.backgroundColor ?? event.color ?? undefined;\n const borderClr = event.borderColor ?? event.color ?? undefined;\n const textClr = event.textColor ?? undefined;\n\n if (!bgColor && !borderClr && !textClr) return undefined;\n\n return {\n ...(bgColor ? { backgroundColor: bgColor } : {}),\n ...(borderClr ? { borderLeft: `3px solid ${borderClr}` } : {}),\n ...(textClr ? { color: textClr } : { ...(bgColor ? { color: 'white' } : {}) }),\n };\n}\n\n/**\n * <EventCard /> — Renders a single event.\n * Supports display modes: auto, block, list-item, none.\n * When editable, integrates Pragmatic Drag and Drop for native drag behavior.\n */\nexport function EventCard({\n positionedEvent,\n compact = false,\n eventTimeFormat,\n displayEventTime = true,\n displayEventEnd = false,\n}: EventCardProps) {\n const {\n slots,\n onEventClick,\n onEventMouseEnter,\n onEventMouseLeave,\n currentView,\n locale,\n editable,\n } = useCalendarContext();\n const { event } = positionedEvent;\n\n // PDND drag binding — only active when calendar is editable\n const { dragRef, isDragging } = useDragEvent({\n event,\n editable: editable && event.editable !== false,\n });\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEventClick?.(event);\n },\n [event, onEventClick],\n );\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n onEventMouseEnter?.({ event, el: e.currentTarget });\n },\n [event, onEventMouseEnter],\n );\n\n const handleMouseLeave = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n onEventMouseLeave?.({ event, el: e.currentTarget });\n },\n [event, onEventMouseLeave],\n );\n\n // Hidden events — must be after all hooks\n if (event.display === 'none') return null;\n\n const state = isDragging\n ? 'dragging'\n : positionedEvent.isDragging\n ? 'dragging'\n : positionedEvent.isResizing\n ? 'resizing'\n : positionedEvent.isSelected\n ? 'selected'\n : positionedEvent.isFocused\n ? 'focused'\n : 'idle';\n\n const timeText = event.isAllDay\n ? 'All day'\n : displayEventTime\n ? formatEventTime(event.start, locale, eventTimeFormat)\n : '';\n\n const endTimeText =\n displayEventEnd && !event.isAllDay ? formatEventTime(event.end, locale, eventTimeFormat) : '';\n\n const fullTimeText = endTimeText ? `${timeText} – ${endTimeText}` : timeText;\n\n const eventStyles = resolveEventStyles(event);\n\n // Custom renderer override\n if (slots.eventContent) {\n return (\n <div\n ref={dragRef as React.RefObject<HTMLDivElement>}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(eventCardVariants({ state }), event.className, 'cursor-pointer')}\n style={{ ...eventStyles, ...(isDragging ? { opacity: 0.5 } : {}) }}\n >\n {slots.eventContent({\n event,\n view: currentView,\n isStart: true,\n isEnd: true,\n isDragging,\n timeText: fullTimeText,\n })}\n </div>\n );\n }\n\n // List-item display mode — dot + text\n if (event.display === 'list-item') {\n const dotColor = event.backgroundColor ?? event.color ?? 'var(--cal-event-default-bg)';\n return (\n <div\n ref={dragRef as React.RefObject<HTMLDivElement>}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n 'flex items-center gap-1 text-xs cursor-pointer truncate py-0.5 px-1',\n event.className,\n )}\n style={isDragging ? { opacity: 0.5 } : undefined}\n >\n <span\n className=\"inline-block w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: dotColor }}\n />\n {displayEventTime && !event.isAllDay && (\n <span className=\"font-normal opacity-75\">{fullTimeText}</span>\n )}\n <span className=\"truncate\">{event.title}</span>\n </div>\n );\n }\n\n // Compact mode (small cells)\n if (compact) {\n return (\n <div\n ref={dragRef as React.RefObject<HTMLDivElement>}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(\n eventCardVariants({ size: 'sm', state }),\n event.className,\n 'truncate cursor-pointer',\n )}\n style={{ ...eventStyles, ...(isDragging ? { opacity: 0.5 } : {}) }}\n title={event.title}\n >\n {displayEventTime && !event.isAllDay && (\n <span className=\"font-normal opacity-75 mr-1\">{fullTimeText}</span>\n )}\n {event.title}\n </div>\n );\n }\n\n // Default (block / auto) display\n return (\n <div\n ref={dragRef as React.RefObject<HTMLDivElement>}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={cn(eventCardVariants({ state }), event.className, 'cursor-pointer')}\n style={{ ...eventStyles, ...(isDragging ? { opacity: 0.5 } : {}) }}\n >\n <div className=\"font-semibold truncate\">{event.title}</div>\n {displayEventTime && !event.isAllDay && (\n <div className=\"text-[10px] opacity-75\">{fullTimeText}</div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport type { PositionedEvent, NormalizedEvent } from '@tempus-machina/core';\nimport { EventCard } from './event-card.js';\nimport { cn } from '../primitives/cn.js';\n\nexport type MoreLinkClick = 'popover' | 'day' | ((info: MoreLinkInfo) => void);\n\nexport interface MoreLinkInfo {\n date: string;\n allEvents: PositionedEvent[];\n hiddenEvents: PositionedEvent[];\n}\n\nexport interface MorePopoverProps {\n /** Hidden events to show in the popover */\n events: PositionedEvent[];\n /** Total count of hidden events */\n count: number;\n /** Date string for the cell */\n dateStr: string;\n /** How to handle the click */\n moreLinkClick?: MoreLinkClick;\n /** Callback to navigate to day view */\n onNavigateToDay?: (dateStr: string) => void;\n /** All events for the cell (visible + hidden) */\n allEvents?: PositionedEvent[];\n className?: string;\n}\n\n/**\n * <MorePopover /> — \"+N more\" link with popover showing all hidden events.\n *\n * Supports three modes:\n * - 'popover' (default): shows a floating popover with all events\n * - 'day': navigates to day view\n * - function: calls the provided callback\n */\nexport function MorePopover({\n events,\n count,\n dateStr,\n moreLinkClick = 'popover',\n onNavigateToDay,\n allEvents,\n className,\n}: MorePopoverProps) {\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n const handleClick = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [isOpen]);\n\n // Close on Escape\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setIsOpen(false);\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [isOpen]);\n\n const handleClick = () => {\n if (moreLinkClick === 'day') {\n onNavigateToDay?.(dateStr);\n return;\n }\n\n if (typeof moreLinkClick === 'function') {\n moreLinkClick({\n date: dateStr,\n allEvents: allEvents ?? events,\n hiddenEvents: events,\n });\n return;\n }\n\n // Default: 'popover'\n setIsOpen(!isOpen);\n };\n\n return (\n <div className={cn('relative', className)}>\n <button\n ref={triggerRef}\n onClick={handleClick}\n className=\"text-[10px] font-semibold text-cal-today-fg mt-0.5 cursor-pointer px-1.5 py-0.5 rounded-full hover:bg-cal-today-bg hover:underline focus:outline-none transition-colors\"\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n >\n +{count} more\n </button>\n\n {isOpen && (\n <div\n ref={popoverRef}\n className={cn(\n 'absolute z-50 top-full left-0 mt-1',\n 'w-48 max-h-64 overflow-y-auto',\n 'bg-cal-bg border border-cal-border rounded-lg shadow-lg',\n 'p-2 space-y-1',\n )}\n role=\"dialog\"\n aria-label={`Events for ${dateStr}`}\n >\n <div className=\"text-xs font-semibold text-cal-fg-muted mb-1 px-1\">{dateStr}</div>\n {events.map((posEvent) => (\n <EventCard key={posEvent.event.id} positionedEvent={posEvent} compact />\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useRef, useEffect, useState } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type { DayCell as DayCellType } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { dayCellVariants } from '../primitives/variants.js';\nimport { EventCard } from './event-card.js';\nimport { MorePopover, type MoreLinkClick } from './more-popover.js';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { CALENDAR_EVENT_TYPE } from '../hooks/use-drag-event.js';\n\nexport interface DayCellProps {\n cell: DayCellType;\n /** How to handle \"+N more\" clicks */\n moreLinkClick?: MoreLinkClick;\n /** Enable clicking day number to navigate to day view */\n navLinkDayClick?: boolean | ((date: Temporal.PlainDate) => void);\n}\n\n/**\n * <DayCell /> — Individual day cell in the month grid.\n * Supports dateClick, navLinkDayClick, moreLinkClick, and PDND drop targets.\n */\nexport function DayCell({ cell, moreLinkClick, navLinkDayClick }: DayCellProps) {\n const { slots, onDateSelect, changeView, editable } = useCalendarContext();\n const cellRef = useRef<HTMLDivElement>(null);\n const [isDragOver, setIsDragOver] = useState(false);\n\n const variant = cell.isToday\n ? 'today'\n : !cell.isCurrentMonth\n ? 'otherMonth'\n : cell.isWeekend\n ? 'weekend'\n : 'default';\n\n // Register as PDND drop target for drag-and-drop\n useEffect(() => {\n const el = cellRef.current;\n if (!el || !editable) return;\n\n const cleanup = dropTargetForElements({\n element: el,\n getData: () => ({\n date: cell.date.toString(),\n time: null, // All-day drop for month view\n resourceId: null,\n }),\n canDrop: ({ source }) => source.data.type === CALENDAR_EVENT_TYPE,\n onDragEnter: () => setIsDragOver(true),\n onDragLeave: () => setIsDragOver(false),\n onDrop: () => setIsDragOver(false),\n });\n\n return cleanup;\n }, [editable, cell.date]);\n\n const handleClick = () => {\n if (onDateSelect) {\n const start = cell.date.toPlainDateTime(Temporal.PlainTime.from('00:00'));\n const end = cell.date.add({ days: 1 }).toPlainDateTime(Temporal.PlainTime.from('00:00'));\n onDateSelect({ start, end });\n }\n };\n\n const handleDayNumberClick = (e: React.MouseEvent) => {\n if (!navLinkDayClick) return;\n e.stopPropagation();\n\n if (typeof navLinkDayClick === 'function') {\n navLinkDayClick(cell.date);\n } else {\n // Navigate to day view\n changeView('timeGridDay' as any);\n }\n };\n\n if (slots.dayCellContent) {\n return (\n <div\n ref={cellRef}\n className={cn(\n dayCellVariants({ variant }),\n isDragOver && 'ring-2 ring-inset ring-cal-today-fg/50 bg-cal-today-bg/30',\n )}\n onClick={handleClick}\n >\n {slots.dayCellContent({\n date: cell.date,\n isToday: cell.isToday,\n isCurrentMonth: cell.isCurrentMonth,\n isWeekend: cell.isWeekend,\n dayNumberText: String(cell.date.day),\n events: cell.events.map((e) => e.event),\n })}\n </div>\n );\n }\n\n return (\n <div\n ref={cellRef}\n className={cn(\n dayCellVariants({ variant }),\n isDragOver && 'ring-2 ring-inset ring-cal-today-fg/50 bg-cal-today-bg/30',\n )}\n onClick={handleClick}\n >\n {/* Day number */}\n <div\n className={cn(\n 'text-xs font-medium mb-1',\n cell.isToday &&\n 'inline-flex items-center justify-center w-6 h-6 rounded-full bg-cal-today-fg text-white',\n !cell.isCurrentMonth && 'opacity-40',\n navLinkDayClick && 'cursor-pointer hover:text-cal-today-fg hover:underline',\n )}\n onClick={navLinkDayClick ? handleDayNumberClick : undefined}\n role={navLinkDayClick ? 'link' : undefined}\n >\n {cell.date.day}\n </div>\n\n {/* Events */}\n <div className=\"space-y-0.5\">\n {cell.events.map((posEvent) => (\n <EventCard key={posEvent.event.id} positionedEvent={posEvent} compact />\n ))}\n </div>\n\n {/* \"+N more\" link */}\n {cell.moreCount > 0 && (\n <MorePopover\n events={cell.events}\n count={cell.moreCount}\n dateStr={cell.date.toString()}\n moreLinkClick={moreLinkClick}\n />\n )}\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type { DayCell } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { DayCell as DayCellComponent } from './day-cell.js';\nimport { formatDate, getWeekNumber } from '@tempus-machina/core';\n\nexport interface DayGridProps {\n className?: string;\n /** Always show 6 weeks (default: false) */\n fixedWeekCount?: boolean;\n /** Show dates from adjacent months (default: true) */\n showNonCurrentDates?: boolean;\n /** Show week numbers column (default: false) */\n weekNumbers?: boolean;\n}\n\n/**\n * <DayGrid /> — Month view renderer.\n * Renders a grid of weeks × days from viewLayout.weeks.\n * Supports fixedWeekCount, showNonCurrentDates, and weekNumbers.\n */\nexport function DayGrid({\n className,\n fixedWeekCount = false,\n showNonCurrentDates = true,\n weekNumbers = false,\n}: DayGridProps) {\n const { viewLayout, locale } = useCalendarContext();\n if (!viewLayout?.weeks) return null;\n\n let weeks = viewLayout.weeks;\n\n // fixedWeekCount: always show 6 rows\n if (fixedWeekCount && weeks.length < 6) {\n weeks = [...weeks];\n while (weeks.length < 6) {\n const lastWeek = weeks[weeks.length - 1];\n const lastDate = lastWeek[lastWeek.length - 1].date;\n const newWeek: DayCell[] = [];\n for (let d = 1; d <= 7; d++) {\n const date = lastDate.add({ days: d });\n newWeek.push({\n date,\n dayOfWeek: date.dayOfWeek,\n isToday: false,\n isCurrentMonth: false,\n isWeekend: date.dayOfWeek === 6 || date.dayOfWeek === 7,\n isHidden: false,\n events: [],\n moreCount: 0,\n });\n }\n weeks.push(newWeek);\n }\n } else if (!fixedWeekCount && weeks.length > 5) {\n const lastWeek = weeks[weeks.length - 1];\n if (lastWeek.every((cell) => !cell.isCurrentMonth)) {\n weeks = weeks.slice(0, -1);\n }\n }\n\n const cols = weekNumbers ? 8 : 7; // extra column for week number\n\n // Day-of-week header labels\n const dayLabels =\n weeks[0]?.map((cell) => {\n const jsDate = new Date(cell.date.toString());\n return new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(jsDate);\n }) ?? [];\n\n return (\n <div className={cn('tm-day-grid-wrapper flex-1 flex flex-col overflow-hidden', className)}>\n {/* Day-of-week headers */}\n <div\n className=\"border-b border-cal-border\"\n style={{\n display: 'grid',\n gridTemplateColumns: weekNumbers ? `2rem repeat(7, 1fr)` : `repeat(7, 1fr)`,\n }}\n >\n {weekNumbers && (\n <div className=\"py-2 text-center text-xs font-medium text-cal-fg opacity-40\">Wk</div>\n )}\n {dayLabels.map((label, i) => (\n <div key={i} className=\"py-2 text-center text-xs font-medium text-cal-fg opacity-60\">\n {label}\n </div>\n ))}\n </div>\n\n {/* Week rows */}\n <div className=\"flex-1 flex flex-col\">\n {weeks.map((week, weekIdx) => (\n <div\n key={weekIdx}\n className=\"flex-1\"\n style={{\n display: 'grid',\n gridTemplateColumns: weekNumbers ? `2rem repeat(7, 1fr)` : `repeat(7, 1fr)`,\n minHeight: '5rem',\n }}\n >\n {/* Week number */}\n {weekNumbers && week[0] && (\n <div className=\"flex items-start justify-center pt-1 text-[10px] text-cal-fg-muted border-r border-cal-border\">\n {getWeekNumber(week[0].date)}\n </div>\n )}\n\n {/* Day cells */}\n {week.map((cell) => {\n if (!showNonCurrentDates && !cell.isCurrentMonth) {\n return (\n <div\n key={cell.date.toString()}\n className=\"min-h-[5rem] border-r border-b border-cal-border\"\n />\n );\n }\n return <DayCellComponent key={cell.date.toString()} cell={cell} />;\n })}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useRef, useEffect, useState } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type { TimeSlot as TimeSlotType } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { timeSlotVariants } from '../primitives/variants.js';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { CALENDAR_EVENT_TYPE } from '../hooks/use-drag-event.js';\nimport { cn } from '../primitives/cn.js';\n\nexport interface TimeSlotProps {\n slot: TimeSlotType;\n /** The date this slot belongs to (for drop target registration) */\n date?: Temporal.PlainDate;\n /** Resource ID (for resource views) */\n resourceId?: string;\n}\n\n/**\n * <TimeSlot /> — Individual time cell in the time-grid view.\n * Acts as a PDND drop target when the calendar is editable.\n */\nexport function TimeSlot({ slot, date, resourceId }: TimeSlotProps) {\n const { slots, onDateSelect, selectable, editable } = useCalendarContext();\n const slotRef = useRef<HTMLDivElement>(null);\n const [isDragOver, setIsDragOver] = useState(false);\n\n const variant = slot.isBusinessHour ? 'business' : slot.index % 2 === 0 ? 'default' : 'odd';\n\n // Register as PDND drop target\n useEffect(() => {\n const el = slotRef.current;\n if (!el || !editable || !date) return;\n\n const cleanup = dropTargetForElements({\n element: el,\n getData: () => ({\n date: date.toString(),\n time: slot.time.toString(),\n resourceId: resourceId ?? null,\n }),\n canDrop: ({ source }) => source.data.type === CALENDAR_EVENT_TYPE,\n onDragEnter: () => setIsDragOver(true),\n onDragLeave: () => setIsDragOver(false),\n onDrop: () => setIsDragOver(false),\n });\n\n return cleanup;\n }, [editable, date, slot.time, resourceId]);\n\n const handleClick = () => {\n if (selectable && onDateSelect) {\n onDateSelect({ start: slot.start, end: slot.end });\n }\n };\n\n if (slots.slotContent) {\n return (\n <div\n ref={slotRef}\n className={cn(timeSlotVariants({ variant }), isDragOver && 'bg-cal-today-bg/50')}\n style={{ height: 'var(--cal-slot-height)' }}\n onClick={handleClick}\n >\n {slots.slotContent({\n start: slot.start,\n end: slot.end,\n isBusinessHour: slot.isBusinessHour,\n })}\n </div>\n );\n }\n\n return (\n <div\n ref={slotRef}\n className={cn(timeSlotVariants({ variant }), isDragOver && 'bg-cal-today-bg/50')}\n style={{ height: 'var(--cal-slot-height)' }}\n onClick={handleClick}\n role={selectable ? 'button' : undefined}\n tabIndex={selectable ? 0 : undefined}\n />\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { useCalendarContext } from '../context/calendar-context.js';\n\nexport interface NowIndicatorProps {\n position: number; // Percentage from top\n}\n\n/**\n * <NowIndicator /> — Current time line in time-grid views.\n */\nexport function NowIndicator({ position }: NowIndicatorProps) {\n const { slots } = useCalendarContext();\n\n if (slots.nowIndicatorContent) {\n return (\n <div className=\"tm-now-indicator\" style={{ top: `${position}%` }}>\n {slots.nowIndicatorContent()}\n </div>\n );\n }\n\n return <div className=\"tm-now-indicator\" style={{ top: `${position}%` }} />;\n}\n","'use client';\n\nimport React from 'react';\nimport type { PositionedEvent } from '@tempus-machina/core';\nimport { cn } from '../primitives/cn.js';\nimport { EventCard } from './event-card.js';\n\nexport interface AllDayRowProps {\n events: PositionedEvent[];\n className?: string;\n}\n\n/**\n * <AllDayRow /> — All-day event strip at the top of time-grid views.\n */\nexport function AllDayRow({ events, className }: AllDayRowProps) {\n if (events.length === 0) return null;\n\n return (\n <div className={cn('tm-all-day-row border-b border-cal-border px-2', className)}>\n {events.map((posEvent) => (\n <EventCard key={posEvent.event.id} positionedEvent={posEvent} compact />\n ))}\n </div>\n );\n}\n","'use client';\n\nimport React, { useRef, useEffect } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { TimeSlot } from './time-slot.js';\nimport { EventCard } from './event-card.js';\nimport { NowIndicator } from './now-indicator.js';\nimport { AllDayRow } from './all-day-row.js';\nimport { formatTime } from '@tempus-machina/core';\n\nexport interface TimeGridProps {\n className?: string;\n /** Initial scroll position (e.g., '06:00:00') */\n scrollTime?: string;\n /** Reset scroll on view change */\n scrollTimeReset?: boolean;\n /** Sticky header dates */\n stickyHeaderDates?: boolean;\n /** Slot label format override */\n slotLabelFormat?: Intl.DateTimeFormatOptions;\n /** Sticky footer scrollbar */\n stickyFooterScrollbar?: boolean;\n}\n\n/**\n * <TimeGrid /> — Week/day time view renderer.\n * Renders time axis + day columns with positioned events.\n * Supports scrollTime, stickyHeaderDates, and slot label formatting.\n */\nexport function TimeGrid({\n className,\n scrollTime = '06:00:00',\n scrollTimeReset = true,\n stickyHeaderDates = true,\n slotLabelFormat,\n stickyFooterScrollbar = false,\n}: TimeGridProps) {\n const { viewLayout, locale, currentView } = useCalendarContext();\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n // Scroll to scrollTime on mount and view change\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container || !viewLayout?.timeSlots) return;\n\n try {\n const scrollTarget = Temporal.PlainTime.from(scrollTime);\n const slots = viewLayout.timeSlots;\n if (slots.length === 0) return;\n\n const firstSlot = slots[0];\n const totalMinutes =\n slots[slots.length - 1].time.hour * 60 +\n slots[slots.length - 1].time.minute -\n (firstSlot.time.hour * 60 + firstSlot.time.minute);\n const targetMinutes =\n scrollTarget.hour * 60 +\n scrollTarget.minute -\n (firstSlot.time.hour * 60 + firstSlot.time.minute);\n\n if (totalMinutes > 0) {\n const scrollPercent = Math.max(0, Math.min(1, targetMinutes / totalMinutes));\n container.scrollTop = scrollPercent * container.scrollHeight;\n }\n } catch {\n // Invalid scrollTime, skip\n }\n }, [scrollTime, scrollTimeReset ? currentView : null, viewLayout?.timeSlots]);\n\n if (!viewLayout?.columns) return null;\n\n const columns = viewLayout.columns;\n const timeSlots = viewLayout.timeSlots ?? [];\n const allDayRow = viewLayout.allDayRow ?? [];\n const nowPosition = viewLayout.nowPosition;\n\n const gridCols = `var(--cal-time-axis-width, 4rem) repeat(${columns.length}, 1fr)`;\n\n const formatSlotTime = (time: Temporal.PlainTime) => {\n if (slotLabelFormat) {\n const jsDate = new Date(2000, 0, 1, time.hour, time.minute);\n return new Intl.DateTimeFormat(locale, slotLabelFormat).format(jsDate);\n }\n return formatTime(time, locale);\n };\n\n return (\n <div className={cn('flex-1 flex flex-col overflow-hidden', className)}>\n {/* All-day row */}\n {allDayRow.length > 0 && <AllDayRow events={allDayRow} />}\n\n {/* Day column headers — sticky */}\n <div\n className={cn(\n 'border-b border-cal-border bg-cal-header-bg shrink-0',\n stickyHeaderDates && 'sticky top-0 z-10',\n )}\n style={{\n display: 'grid',\n gridTemplateColumns: gridCols,\n }}\n >\n <div /> {/* Time axis spacer */}\n {columns.map((col) => {\n const jsDate = new Date(col.date.toString());\n const dayName = new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(jsDate);\n const dayNum = col.date.day;\n const isToday = col.date.equals(Temporal.Now.plainDateISO());\n\n return (\n <div key={col.date.toString()} className=\"text-center py-2 border-l border-cal-border\">\n <div className=\"text-xs font-medium opacity-60\">{dayName}</div>\n <div\n className={cn(\n 'text-lg font-semibold',\n isToday &&\n 'inline-flex items-center justify-center w-8 h-8 rounded-full bg-cal-today-fg text-white',\n )}\n >\n {dayNum}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Scrollable body: time axis + columns */}\n <div ref={scrollContainerRef} className=\"flex-1 overflow-y-auto tm-scrollable\">\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: gridCols,\n position: 'relative',\n }}\n >\n {/* Time axis */}\n <div>\n {timeSlots.map((slot) => (\n <div\n key={slot.index}\n className=\"relative border-b border-cal-slot-border\"\n style={{ height: 'var(--cal-slot-height, 3rem)' }}\n >\n {slot.time.minute === 0 && (\n <span className=\"absolute -top-3 right-2 text-[10px] text-cal-fg opacity-50\">\n {formatSlotTime(slot.time)}\n </span>\n )}\n </div>\n ))}\n </div>\n\n {/* Day columns */}\n {columns.map((col) => (\n <div key={col.date.toString()} className=\"relative border-l border-cal-border\">\n {/* Slot backgrounds — these set the column height */}\n {col.slots.map((slot) => (\n <TimeSlot key={slot.index} slot={slot} date={col.date} />\n ))}\n\n {/* Positioned events — absolute over the slot backgrounds */}\n {col.events.map((posEvent) => (\n <div\n key={posEvent.event.id}\n className=\"absolute overflow-hidden z-1\"\n style={{\n top: `${posEvent.top}%`,\n height: `${Math.max(posEvent.height, 2)}%`,\n left: `${posEvent.left}%`,\n width: `${posEvent.width}%`,\n minHeight: '1.25rem',\n }}\n >\n <EventCard positionedEvent={posEvent} />\n </div>\n ))}\n\n {/* Now indicator */}\n {nowPosition !== undefined &&\n nowPosition >= 0 &&\n col.date.equals(Temporal.Now.plainDateISO()) && (\n <NowIndicator position={nowPosition} />\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Sticky footer scrollbar */}\n {stickyFooterScrollbar && (\n <div className=\"sticky bottom-0 h-3 bg-cal-bg border-t border-cal-border overflow-x-auto shrink-0\" />\n )}\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { ResourceLane as ResourceLaneType } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { EventCard } from './event-card.js';\n\nexport interface ResourceLaneProps {\n lane: ResourceLaneType;\n slotCount: number;\n}\n\n/**\n * <ResourceLane /> — A single resource row in the timeline view.\n */\nexport function ResourceLane({ lane, slotCount }: ResourceLaneProps) {\n const { slots } = useCalendarContext();\n\n return (\n <div\n className=\"grid border-b border-cal-border\"\n style={{ gridTemplateColumns: `var(--cal-resource-header-width) repeat(${slotCount}, 1fr)` }}\n >\n {/* Resource label */}\n <div className=\"p-2 border-r border-cal-border bg-cal-header-bg\">\n {slots.resourceLabelContent ? (\n slots.resourceLabelContent({ resource: lane.resource })\n ) : (\n <div className=\"flex items-center gap-2\">\n {lane.resource.color && (\n <div\n className=\"w-2 h-2 rounded-full flex-shrink-0\"\n style={{ backgroundColor: lane.resource.color }}\n />\n )}\n <span className=\"text-sm font-medium truncate\">{lane.resource.title}</span>\n </div>\n )}\n </div>\n\n {/* Event area */}\n <div\n className={cn('relative col-span-full', `col-start-2`)}\n style={{ gridColumn: `2 / -1`, minHeight: 'var(--cal-slot-height)' }}\n >\n {lane.events.map((posEvent) => (\n <div\n key={posEvent.event.id}\n className=\"tm-event\"\n style={{\n left: `${posEvent.left}%`,\n width: `${posEvent.width}%`,\n top: '2px',\n height: 'calc(100% - 4px)',\n }}\n >\n <EventCard positionedEvent={posEvent} compact />\n </div>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { ResourceLane } from './resource-lane.js';\nimport { formatTime } from '@tempus-machina/core';\n\nexport interface TimelineProps {\n className?: string;\n}\n\n/**\n * <Timeline /> — Horizontal resource timeline renderer.\n */\nexport function Timeline({ className }: TimelineProps) {\n const { viewLayout, locale } = useCalendarContext();\n if (!viewLayout?.lanes) return null;\n\n const lanes = viewLayout.lanes;\n const timeSlots = viewLayout.timeSlots ?? [];\n\n return (\n <div className={cn('flex-1 overflow-hidden tm-timeline', className)}>\n {/* Time header */}\n <div className=\"tm-timeline__header border-b border-cal-border bg-cal-header-bg\">\n <div\n className=\"grid\"\n style={{\n gridTemplateColumns: `var(--cal-resource-header-width) repeat(${timeSlots.length}, 1fr)`,\n }}\n >\n <div className=\"p-2 text-xs font-medium text-cal-fg opacity-60\">Resources</div>\n {timeSlots.map((slot) => (\n <div\n key={slot.index}\n className=\"p-1 text-[10px] text-center border-l border-cal-slot-border opacity-50\"\n >\n {slot.time.minute === 0 ? formatTime(slot.time, locale) : ''}\n </div>\n ))}\n </div>\n </div>\n\n {/* Resource lanes */}\n <div className=\"overflow-y-auto tm-scrollable\">\n {lanes.map((lane) => (\n <ResourceLane key={lane.resource.id} lane={lane} slotCount={timeSlots.length} />\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { formatDate, formatEventTime } from '@tempus-machina/core';\n\nexport interface AgendaProps {\n className?: string;\n}\n\n/**\n * <Agenda /> — List/agenda view renderer.\n * Groups events by date in a flat list format.\n */\nexport function Agenda({ className }: AgendaProps) {\n const { viewLayout, locale, onEventClick } = useCalendarContext();\n if (!viewLayout?.groups) return null;\n\n const groups = viewLayout.groups;\n\n if (groups.length === 0) {\n return (\n <div className={cn('flex-1 flex items-center justify-center text-sm opacity-50', className)}>\n No events to display\n </div>\n );\n }\n\n return (\n <div className={cn('flex-1 overflow-y-auto tm-scrollable', className)}>\n {groups.map((group) => {\n const jsDate = new Date(group.date.toString());\n const dateLabel = new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(jsDate);\n const isToday = group.date.equals(Temporal.Now.plainDateISO());\n\n return (\n <div key={group.date.toString()} className=\"border-b border-cal-border\">\n {/* Date header */}\n <div\n className={cn(\n 'px-4 py-2 text-sm font-semibold bg-cal-header-bg sticky top-0',\n isToday && 'text-cal-today-fg',\n )}\n >\n {dateLabel}\n {isToday && <span className=\"ml-2 text-xs font-normal opacity-60\">(Today)</span>}\n </div>\n\n {/* Events */}\n <div className=\"divide-y divide-cal-border\">\n {group.events.map((event) => (\n <div\n key={event.id}\n className=\"px-4 py-3 flex items-start gap-3 hover:bg-cal-slot-bg-odd cursor-pointer transition-colors\"\n onClick={() => onEventClick?.(event)}\n >\n {/* Color indicator */}\n <div\n className=\"w-1 h-full min-h-[2rem] rounded-full flex-shrink-0 mt-0.5\"\n style={{ backgroundColor: event.color ?? 'var(--cal-event-default-bg)' }}\n />\n\n {/* Event info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-sm truncate\">{event.title}</div>\n <div className=\"text-xs opacity-60 mt-0.5\">\n {event.isAllDay\n ? 'All day'\n : `${formatEventTime(event.start, locale)} – ${formatEventTime(event.end, locale)}`}\n </div>\n {event.description && (\n <div className=\"text-xs opacity-50 mt-1 truncate\">{event.description}</div>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type { DayCell as DayCellType } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { DayCell } from './day-cell.js';\nimport { cn } from '../primitives/cn.js';\n\nexport interface MultiMonthProps {\n className?: string;\n}\n\ninterface MonthLayout {\n month: Temporal.PlainDate;\n weeks: DayCellType[][];\n}\n\n/**\n * <MultiMonth /> — Renders multiple months in a stacked or grid layout.\n *\n * Used by multiMonthStack and multiMonthGrid view presets.\n */\nexport function MultiMonth({ className }: MultiMonthProps) {\n const { viewLayout, currentView, locale } = useCalendarContext();\n if (!viewLayout) return null;\n\n const months = (viewLayout as any).months as MonthLayout[] | undefined;\n if (!months || months.length === 0) return null;\n\n const isGrid = currentView === 'multiMonthGrid';\n\n return (\n <div\n className={cn(\n 'tm-multi-month overflow-auto',\n isGrid ? 'grid grid-cols-2 gap-4 p-4' : 'flex flex-col gap-6 p-4',\n className,\n )}\n >\n {months.map((monthLayout, idx) => (\n <MonthMini\n key={monthLayout.month.toString()}\n month={monthLayout.month}\n weeks={monthLayout.weeks}\n locale={locale}\n />\n ))}\n </div>\n );\n}\n\n/**\n * Individual mini-month within the multi-month view.\n */\nfunction MonthMini({\n month,\n weeks,\n locale,\n}: {\n month: Temporal.PlainDate;\n weeks: DayCellType[][];\n locale: string;\n}) {\n const monthName = month.toLocaleString(locale, { month: 'long', year: 'numeric' });\n\n return (\n <div className=\"tm-mini-month border border-cal-border rounded-lg overflow-hidden\">\n {/* Month header */}\n <div className=\"px-3 py-2 font-semibold text-sm bg-cal-header-bg text-cal-fg border-b border-cal-border\">\n {monthName}\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"grid grid-cols-7 text-center text-[10px] text-cal-fg-muted py-1 border-b border-cal-border\">\n {weeks[0]?.map((cell, i) => {\n const dayName = cell.date.toLocaleString(locale, { weekday: 'narrow' });\n return (\n <div key={i} className=\"font-medium\">\n {dayName}\n </div>\n );\n }) ?? null}\n </div>\n\n {/* Weeks grid */}\n <div className=\"grid grid-cols-7\">\n {weeks.flat().map((cell) => (\n <DayCell key={cell.date.toString()} cell={cell} />\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { ResourceLane, TimeSlot } from '@tempus-machina/core';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { EventCard } from './event-card.js';\nimport { NowIndicator } from './now-indicator.js';\nimport { cn } from '../primitives/cn.js';\nimport { timeSlotVariants } from '../primitives/variants.js';\n\nexport interface ResourceTimeGridProps {\n className?: string;\n}\n\n/**\n * <ResourceTimeGrid /> — Renders a time grid where columns represent resources.\n *\n * Used by resourceTimeGridDay and resourceTimeGridWeek view presets.\n */\nexport function ResourceTimeGrid({ className }: ResourceTimeGridProps) {\n const { viewLayout } = useCalendarContext();\n if (!viewLayout) return null;\n\n const slots = (viewLayout as any).slots as TimeSlot[] | undefined;\n const resourceLanes = (viewLayout as any).resourceLanes as ResourceLane[] | undefined;\n\n if (!slots || !resourceLanes || resourceLanes.length === 0) return null;\n\n return (\n <div className={cn('tm-resource-time-grid flex flex-1 overflow-auto', className)}>\n {/* Time gutter */}\n <div className=\"tm-time-gutter w-16 shrink-0 border-r border-cal-border\">\n {/* Empty header spacer */}\n <div className=\"h-10 border-b border-cal-border\" />\n {/* Slot labels */}\n {slots.map((slot, idx) => (\n <div\n key={idx}\n className=\"h-10 text-[10px] text-cal-fg-muted text-right pr-2 border-b border-cal-slot-border\"\n >\n {slot.time.minute === 0\n ? slot.time.toLocaleString('en-US', { hour: 'numeric', minute: '2-digit' })\n : ''}\n </div>\n ))}\n </div>\n\n {/* Resource columns */}\n {resourceLanes.map((lane) => (\n <ResourceColumn key={lane.resource.id} lane={lane} slots={slots} />\n ))}\n </div>\n );\n}\n\n/**\n * A single resource column in the resource time grid.\n */\nfunction ResourceColumn({ lane, slots }: { lane: ResourceLane; slots: TimeSlot[] }) {\n return (\n <div className=\"tm-resource-column flex-1 min-w-[120px] border-r border-cal-border last:border-r-0\">\n {/* Resource header */}\n <div className=\"h-10 flex items-center justify-center text-xs font-semibold border-b border-cal-border bg-cal-header-bg truncate px-2\">\n {lane.resource.title}\n </div>\n\n {/* Time slots with events */}\n <div className=\"relative\">\n {/* Slot grid */}\n {slots.map((slot, idx) => (\n <div\n key={idx}\n className={cn(\n timeSlotVariants({\n variant: slot.isBusinessHour ? 'business' : idx % 2 === 0 ? 'default' : 'odd',\n }),\n 'h-10',\n )}\n />\n ))}\n\n {/* Positioned events overlay */}\n {lane.events.map((positioned) => (\n <div\n key={positioned.event.id}\n className=\"absolute px-0.5\"\n style={{\n top: `${positioned.top}%`,\n height: `${positioned.height}%`,\n left: `${positioned.left}%`,\n width: `${positioned.width}%`,\n }}\n >\n <EventCard positionedEvent={positioned} />\n </div>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport { Button } from './ui/button.js';\nimport { ToggleGroup, ToggleGroupItem } from './ui/toggle-group.js';\nimport type {\n EventInput,\n NormalizedEvent,\n ViewPreset,\n PluginDef,\n Resource,\n BusinessHoursInput,\n} from '@tempus-machina/core';\nimport { isRtl } from '@tempus-machina/core';\nimport { useCalendar, type UseCalendarOptions } from '../hooks/use-calendar.js';\nimport { useInteraction } from '../hooks/use-interaction.js';\nimport { CalendarContext, type CalendarSlots } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport { CalendarHeader } from './calendar-header.js';\nimport { DayGrid } from './day-grid.js';\nimport { TimeGrid } from './time-grid.js';\nimport { Timeline } from './timeline.js';\nimport { Agenda } from './agenda.js';\nimport { MultiMonth } from './multi-month.js';\nimport { ResourceTimeGrid } from './resource-time-grid.js';\n\nexport interface CalendarProps extends UseCalendarOptions {\n className?: string;\n children?: React.ReactNode;\n slots?: CalendarSlots;\n /** Text direction: 'ltr' | 'rtl'. Auto-detected from locale if not set. */\n direction?: 'ltr' | 'rtl';\n /** Calendar height (e.g., '600px', 'auto') */\n height?: string | number;\n /** Calendar content height */\n contentHeight?: string | number;\n /** Aspect ratio for auto-sizing */\n aspectRatio?: number;\n onEventClick?: (event: NormalizedEvent) => void;\n onEventDrop?: (info: {\n event: NormalizedEvent;\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n newResourceId?: string;\n }) => void;\n onDateSelect?: (range: {\n start: Temporal.PlainDateTime;\n end: Temporal.PlainDateTime;\n resourceId?: string;\n }) => void;\n onEventResize?: (info: {\n event: NormalizedEvent;\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n }) => void;\n /** Mouse enter on event */\n onEventMouseEnter?: (info: { event: NormalizedEvent; el: HTMLElement }) => void;\n /** Mouse leave from event */\n onEventMouseLeave?: (info: { event: NormalizedEvent; el: HTMLElement }) => void;\n /** Date click handler */\n onDateClick?: (info: {\n date: Temporal.PlainDate;\n dateStr: string;\n view: ViewPreset;\n resourceId?: string;\n }) => void;\n}\n\n/**\n * <Calendar /> — Root compound component.\n * Provides CalendarContext and renders children or default layout.\n * Activates PDND drag-and-drop monitor when `editable` is true.\n */\nexport function Calendar({\n className,\n children,\n slots = {},\n direction,\n height,\n contentHeight,\n aspectRatio,\n onEventClick,\n onEventDrop,\n onDateSelect,\n onEventResize,\n onEventMouseEnter,\n onEventMouseLeave,\n onDateClick,\n ...options\n}: CalendarProps) {\n const calendarState = useCalendar(options);\n\n // Auto-detect direction from locale\n const resolvedDirection = direction ?? (options.locale && isRtl(options.locale) ? 'rtl' : 'ltr');\n\n // PDND monitor — bridges drag/drop events to callbacks when editable\n const interaction = useInteraction({\n events: calendarState.events,\n timezone: options.timezone ?? 'UTC',\n onEventDrop: onEventDrop\n ? (info) => {\n onEventDrop({\n event: info.event,\n newStart: info.newStart,\n newEnd: info.newEnd,\n newResourceId: info.newResourceId,\n });\n }\n : undefined,\n onEventResize: onEventResize\n ? (info) => {\n onEventResize({\n event: info.event,\n newStart: info.newStart,\n newEnd: info.newEnd,\n });\n }\n : undefined,\n });\n\n const contextValue = {\n ...calendarState,\n resources: options.resources ?? [],\n timezone: options.timezone ?? 'UTC',\n locale: options.locale ?? 'en-US',\n firstDayOfWeek: options.firstDayOfWeek ?? 0,\n editable: options.editable ?? true,\n selectable: options.selectable ?? false,\n selectedRange: null as { start: any; end: any } | null,\n select: (_start: any, _end: any) => {},\n unselect: () => {},\n slots,\n onEventClick,\n onEventDrop,\n onDateSelect,\n onEventResize,\n onEventMouseEnter,\n onEventMouseLeave,\n onDateClick,\n };\n\n const containerStyle: React.CSSProperties = {\n ...(height ? { height: typeof height === 'number' ? `${height}px` : height } : {}),\n ...(contentHeight\n ? { maxHeight: typeof contentHeight === 'number' ? `${contentHeight}px` : contentHeight }\n : {}),\n ...(aspectRatio ? { aspectRatio: String(aspectRatio) } : {}),\n };\n\n return (\n <CalendarContext.Provider value={contextValue}>\n <div\n dir={resolvedDirection}\n style={containerStyle}\n className={cn(\n 'tm-calendar flex flex-col bg-cal-bg text-cal-fg border border-cal-border overflow-hidden',\n className,\n )}\n role=\"application\"\n aria-label=\"Calendar\"\n >\n {children ?? (\n <>\n <Calendar.Header />\n <Calendar.View />\n </>\n )}\n </div>\n </CalendarContext.Provider>\n );\n}\n\n// --- Sub-components attached to Calendar namespace ---\n\nfunction CalendarHeaderSlot({ className }: { className?: string }) {\n return <CalendarHeader className={className} />;\n}\nCalendarHeaderSlot.displayName = 'Calendar.Header';\n\nfunction CalendarViewSlot({ className }: { className?: string }) {\n return <CalendarViewRenderer className={className} />;\n}\nCalendarViewSlot.displayName = 'Calendar.View';\n\nCalendar.Header = CalendarHeaderSlot;\nCalendar.View = CalendarViewSlot;\nCalendar.NavPrev = CalendarNavPrev;\nCalendar.NavNext = CalendarNavNext;\nCalendar.NavToday = CalendarNavToday;\nCalendar.Title = CalendarTitle;\nCalendar.ViewSwitcher = CalendarViewSwitcher;\n\n// --- Individual navigation sub-components (shadcn Button) ---\n\nfunction CalendarNavPrev({ className }: { className?: string }) {\n const { prev } = React.useContext(CalendarContext)!;\n return (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={prev}\n className={className}\n aria-label=\"Previous\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n );\n}\nCalendarNavPrev.displayName = 'Calendar.NavPrev';\n\nfunction CalendarNavNext({ className }: { className?: string }) {\n const { next } = React.useContext(CalendarContext)!;\n return (\n <Button variant=\"outline\" size=\"icon\" onClick={next} className={className} aria-label=\"Next\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n );\n}\nCalendarNavNext.displayName = 'Calendar.NavNext';\n\nfunction CalendarNavToday({ className }: { className?: string }) {\n const { today } = React.useContext(CalendarContext)!;\n return (\n <Button variant=\"outline\" size=\"sm\" onClick={today} className={className}>\n Today\n </Button>\n );\n}\nCalendarNavToday.displayName = 'Calendar.NavToday';\n\nfunction CalendarTitle({ className }: { className?: string }) {\n const { title } = React.useContext(CalendarContext)!;\n return <h2 className={cn('text-lg font-semibold text-cal-header-fg', className)}>{title}</h2>;\n}\nCalendarTitle.displayName = 'Calendar.Title';\n\nfunction CalendarViewSwitcher({ views, className }: { views?: ViewPreset[]; className?: string }) {\n const { currentView, changeView } = React.useContext(CalendarContext)!;\n const defaultViews: ViewPreset[] = views ?? ['dayGridMonth', 'timeGridWeek', 'timeGridDay'];\n\n const viewLabels: Record<string, string> = {\n dayGridMonth: 'Month',\n dayGridWeek: 'Week',\n dayGridDay: 'Day',\n timeGridWeek: 'Week',\n timeGridDay: 'Day',\n timelineDay: 'Timeline',\n timelineWeek: 'Timeline',\n timelineMonth: 'Timeline',\n agendaDay: 'Agenda',\n agendaWeek: 'Agenda',\n agendaMonth: 'Agenda',\n };\n\n return (\n <ToggleGroup\n value={[currentView]}\n onValueChange={(newValue: string[]) => {\n if (newValue.length > 0) {\n changeView(newValue[0] as ViewPreset);\n }\n }}\n variant=\"outline\"\n className={className}\n >\n {defaultViews.map((view) => (\n <ToggleGroupItem key={view} value={view} size=\"sm\">\n {viewLabels[view] ?? view}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n );\n}\nCalendarViewSwitcher.displayName = 'Calendar.ViewSwitcher';\n\n// --- View Renderer ---\n\nfunction CalendarViewRenderer({ className }: { className?: string }) {\n const context = React.useContext(CalendarContext);\n if (!context) return null;\n\n const { currentView, viewLayout } = context;\n if (!viewLayout)\n return (\n <div className={cn('flex-1 flex items-center justify-center text-sm opacity-50', className)}>\n No plugin registered for this view\n </div>\n );\n\n const viewType = currentView.startsWith('dayGrid')\n ? 'dayGrid'\n : currentView.startsWith('timeGrid')\n ? 'timeGrid'\n : currentView.startsWith('timeline')\n ? 'timeline'\n : currentView.startsWith('multiMonth')\n ? 'multiMonth'\n : currentView.startsWith('resourceTimeGrid')\n ? 'resourceTimeGrid'\n : 'agenda';\n\n switch (viewType) {\n case 'dayGrid':\n return <DayGrid className={className} />;\n case 'timeGrid':\n return <TimeGrid className={className} />;\n case 'timeline':\n return <Timeline className={className} />;\n case 'multiMonth':\n return <MultiMonth className={className} />;\n case 'resourceTimeGrid':\n return <ResourceTimeGrid className={className} />;\n case 'agenda':\n return <Agenda className={className} />;\n default:\n return null;\n }\n}\n","'use client';\n\nimport React from 'react';\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport { cn } from '../primitives/cn.js';\nimport type { ToolbarConfig, CustomButton } from './calendar-header.js';\nimport { CalendarHeader } from './calendar-header.js';\n\nexport interface CalendarFooterProps {\n className?: string;\n /** Config-driven footer toolbar — same token format as headerToolbar */\n toolbar?: ToolbarConfig;\n /** Override button text labels */\n buttonText?: Partial<Record<string, string>>;\n /** Custom buttons registry */\n customButtons?: Record<string, CustomButton>;\n}\n\n/**\n * <CalendarFooter /> — Optional footer toolbar mirroring the header's config-driven rendering.\n *\n * Usage:\n * ```tsx\n * <CalendarFooter toolbar={{ left: 'prev,next', center: '', right: 'dayGridMonth,timeGridWeek' }} />\n * ```\n */\nexport function CalendarFooter({\n className,\n toolbar,\n buttonText,\n customButtons,\n}: CalendarFooterProps) {\n if (!toolbar) return null;\n\n return (\n <div className={cn('border-t border-cal-border', className)}>\n <CalendarHeader\n toolbar={toolbar}\n buttonText={buttonText}\n customButtons={customButtons}\n className=\"border-b-0\"\n />\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport type { NormalizedEvent } from '@tempus-machina/core';\nimport type { BackgroundEvent as BackgroundEventType } from '@tempus-machina/core';\nimport { cn } from '../primitives/cn.js';\n\nexport interface BackgroundEventProps {\n /** Background event with positioning data */\n backgroundEvent: BackgroundEventType;\n /** Whether this is in a time-grid (uses top/height) or day-grid (full cell) */\n variant?: 'timeGrid' | 'dayGrid';\n}\n\n/**\n * <BackgroundEvent /> — Renders a translucent background overlay for events\n * with display: 'background'. These appear behind regular events.\n */\nexport function BackgroundEvent({ backgroundEvent, variant = 'timeGrid' }: BackgroundEventProps) {\n const { event, top, height } = backgroundEvent;\n const bgColor = event.backgroundColor ?? event.color ?? 'var(--cal-event-default-bg)';\n\n if (variant === 'dayGrid') {\n // Full-cell overlay in day grid\n return (\n <div\n className={cn('absolute inset-0 pointer-events-none', event.className)}\n style={{\n backgroundColor: bgColor,\n opacity: 0.3,\n }}\n aria-hidden=\"true\"\n title={event.title}\n />\n );\n }\n\n // Time-grid: positioned vertically\n return (\n <div\n className={cn('absolute left-0 right-0 pointer-events-none rounded-sm', event.className)}\n style={{\n top: `${top}%`,\n height: `${Math.max(height, 0.5)}%`,\n backgroundColor: bgColor,\n opacity: 0.3,\n }}\n aria-hidden=\"true\"\n title={event.title}\n />\n );\n}\n","'use client';\n\nimport { useCalendarContext } from '../context/calendar-context.js';\n\n/**\n * Hook for date navigation controls.\n */\nexport function useNavigation() {\n const { next, prev, today, goToDate, currentDate, title } = useCalendarContext();\n return { next, prev, today, goToDate, currentDate, title };\n}\n","'use client';\n\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport type { NormalizedEvent } from '@tempus-machina/core';\n\n/**\n * Hook for event store operations.\n */\nexport function useEvents() {\n const { events, addEvent, updateEvent, removeEvent } = useCalendarContext();\n return { events, addEvent, updateEvent, removeEvent };\n}\n","'use client';\n\nimport { useCalendarContext } from '../context/calendar-context.js';\n\n/**\n * Hook for view switching.\n */\nexport function useView() {\n const { currentView, changeView, viewLayout } = useCalendarContext();\n return { currentView, changeView, viewLayout };\n}\n","'use client';\n\nimport { useCalendarContext } from '../context/calendar-context.js';\nimport type { ViewConfig } from '@tempus-machina/core';\nimport { generateTimeSlots } from '@tempus-machina/core';\n\n/**\n * Hook for time slot generation in the current view.\n */\nexport function useSlots() {\n const { viewLayout } = useCalendarContext();\n return {\n timeSlots: viewLayout?.timeSlots ?? [],\n columns: viewLayout?.columns ?? [],\n };\n}\n","'use client';\n\nimport { useEffect, useRef, useState, useCallback } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type { NormalizedEvent, ViewConfig } from '@tempus-machina/core';\nimport { resolveDropTarget } from '@tempus-machina/core';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { CALENDAR_EVENT_TYPE } from './use-drag-event.js';\n\nexport interface UseDropSlotOptions {\n /** The date this slot represents */\n date: Temporal.PlainDate;\n /** Time position within the day (for time-grid slots) */\n time?: Temporal.PlainTime;\n /** Resource ID (for resource views) */\n resourceId?: string;\n /** View config for time resolution */\n viewConfig: ViewConfig;\n /** Timezone */\n timezone: string;\n /** Called when a valid drop occurs */\n onEventDrop?: (info: {\n event: { id: string; title: string };\n newStart: Temporal.ZonedDateTime;\n newEnd: Temporal.ZonedDateTime;\n newResourceId?: string;\n }) => void;\n /** Called when drag enters this slot */\n onDragEnter?: () => void;\n /** Called when drag leaves this slot */\n onDragLeave?: () => void;\n}\n\nexport interface UseDropSlotReturn {\n /** Ref to attach to the drop target element */\n dropRef: React.RefObject<HTMLElement | null>;\n /** Whether something is currently dragging over this slot */\n isDragOver: boolean;\n /** Whether this slot can accept the current drag */\n canDrop: boolean;\n}\n\n/**\n * Hook to make a time slot or day cell a PDND drop target.\n *\n * Usage:\n * ```tsx\n * const { dropRef, isDragOver } = useDropSlot({\n * date, time, viewConfig, timezone,\n * onEventDrop: (info) => updateEvent(info.event.id, { start: info.newStart }),\n * });\n * return <div ref={dropRef} className={isDragOver ? 'bg-blue-100' : ''}>...</div>;\n * ```\n */\nexport function useDropSlot(options: UseDropSlotOptions): UseDropSlotReturn {\n const { date, time, resourceId, viewConfig, timezone, onEventDrop, onDragEnter, onDragLeave } =\n options;\n\n const dropRef = useRef<HTMLElement | null>(null);\n const [isDragOver, setIsDragOver] = useState(false);\n const [canDrop, setCanDrop] = useState(false);\n\n useEffect(() => {\n const el = dropRef.current;\n if (!el) return;\n\n const cleanup = dropTargetForElements({\n element: el,\n getData: () => ({\n date: date.toString(),\n time: time?.toString() ?? null,\n resourceId: resourceId ?? null,\n }),\n canDrop: ({ source }) => {\n // Only accept calendar event drags\n return source.data.type === CALENDAR_EVENT_TYPE;\n },\n onDragEnter: () => {\n setIsDragOver(true);\n setCanDrop(true);\n onDragEnter?.();\n },\n onDragLeave: () => {\n setIsDragOver(false);\n setCanDrop(false);\n onDragLeave?.();\n },\n onDrop: ({ source }) => {\n setIsDragOver(false);\n setCanDrop(false);\n\n const data = source.data;\n if (data.type !== CALENDAR_EVENT_TYPE) return;\n\n // Calculate the new start time based on slot position\n const slotTime = time ?? Temporal.PlainTime.from('00:00');\n const newStart = date.toZonedDateTime({\n timeZone: timezone,\n plainTime: slotTime,\n });\n\n // Calculate duration from original event data\n const originalStart = Temporal.ZonedDateTime.from(data.eventStart as string);\n const originalEnd = Temporal.ZonedDateTime.from(data.eventEnd as string);\n const duration = originalStart.until(originalEnd);\n const newEnd = newStart.add(duration);\n\n onEventDrop?.({\n event: {\n id: data.eventId as string,\n title: data.eventTitle as string,\n },\n newStart,\n newEnd,\n newResourceId: resourceId,\n });\n },\n });\n\n return cleanup;\n }, [date, time, resourceId, viewConfig, timezone, onEventDrop, onDragEnter, onDragLeave]);\n\n return { dropRef, isDragOver, canDrop };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { Temporal } from 'temporal-polyfill';\n\nexport interface UseSelectionOptions {\n /** Whether selection is enabled */\n selectable?: boolean;\n /** Minimum distance in pixels before selection starts */\n selectMinDistance?: number;\n /** Whether to show a mirror overlay during selection */\n selectMirror?: boolean;\n /** Automatically unselect when clicking elsewhere */\n unselectAuto?: boolean;\n /** CSS selector for elements that should NOT trigger unselect */\n unselectCancel?: string;\n /** Timezone for time calculations */\n timezone?: string;\n\n /** Called when a date/time range is selected */\n onSelect?: (info: SelectionInfo) => void;\n /** Called when selection is cleared */\n onUnselect?: () => void;\n /** Called on single date click */\n onDateClick?: (info: DateClickInfo) => void;\n}\n\nexport interface SelectionInfo {\n start: Temporal.ZonedDateTime;\n end: Temporal.ZonedDateTime;\n allDay: boolean;\n resourceId?: string;\n}\n\nexport interface DateClickInfo {\n date: Temporal.PlainDate;\n dateStr: string;\n allDay: boolean;\n resourceId?: string;\n}\n\nexport interface SelectionState {\n /** Whether a selection is currently in progress (dragging) */\n isSelecting: boolean;\n /** Current selection range */\n selection: SelectionInfo | null;\n /** Mirror preview during drag-select */\n previewStart: Temporal.ZonedDateTime | null;\n previewEnd: Temporal.ZonedDateTime | null;\n}\n\nexport interface UseSelectionReturn {\n /** Current selection state */\n state: SelectionState;\n /** Begin a selection at a given position */\n startSelection: (info: {\n date: Temporal.PlainDate;\n time?: Temporal.PlainTime;\n resourceId?: string;\n allDay?: boolean;\n }) => void;\n /** Update the selection end as the pointer moves */\n updateSelection: (info: { date: Temporal.PlainDate; time?: Temporal.PlainTime }) => void;\n /** Finalize the selection */\n endSelection: () => void;\n /** Clear the current selection */\n clearSelection: () => void;\n /** Programmatically set a selection */\n select: (start: Temporal.ZonedDateTime, end: Temporal.ZonedDateTime) => void;\n}\n\n/**\n * Pointer-event-based selection hook for calendar date/time range selection.\n * Uses pointer events (not PDND) because selection ≠ drag-and-drop.\n *\n * Supports:\n * - Click-to-select-slot (single cell)\n * - Drag-to-select-range (multiple cells)\n * - selectMirror ghost preview\n * - unselectAuto click-away\n * - selectMinDistance threshold\n */\nexport function useSelection(options: UseSelectionOptions = {}): UseSelectionReturn {\n const {\n selectable = true,\n selectMinDistance = 0,\n selectMirror = false,\n unselectAuto = true,\n unselectCancel,\n timezone = 'UTC',\n onSelect,\n onUnselect,\n onDateClick,\n } = options;\n\n const [state, setState] = useState<SelectionState>({\n isSelecting: false,\n selection: null,\n previewStart: null,\n previewEnd: null,\n });\n\n // Ref to track latest previewEnd for endSelection closure\n const previewEndRef = useRef<Temporal.ZonedDateTime | null>(null);\n\n const selectionContext = useRef<{\n startDate: Temporal.PlainDate;\n startTime: Temporal.PlainTime | null;\n resourceId?: string;\n allDay: boolean;\n startX: number;\n startY: number;\n hasMovedEnough: boolean;\n } | null>(null);\n\n const startSelection = useCallback(\n (info: {\n date: Temporal.PlainDate;\n time?: Temporal.PlainTime;\n resourceId?: string;\n allDay?: boolean;\n }) => {\n if (!selectable) return;\n\n const plainTime = info.time ?? Temporal.PlainTime.from('00:00');\n const startZdt = info.date.toZonedDateTime({\n timeZone: timezone,\n plainTime,\n });\n\n selectionContext.current = {\n startDate: info.date,\n startTime: info.time ?? null,\n resourceId: info.resourceId,\n allDay: info.allDay ?? !info.time,\n startX: 0,\n startY: 0,\n hasMovedEnough: selectMinDistance === 0,\n };\n\n setState({\n isSelecting: true,\n selection: null,\n previewStart: selectMirror ? startZdt : null,\n previewEnd: selectMirror ? startZdt : null,\n });\n },\n [selectable, timezone, selectMinDistance, selectMirror],\n );\n\n const updateSelection = useCallback(\n (info: { date: Temporal.PlainDate; time?: Temporal.PlainTime }) => {\n if (!selectionContext.current) return;\n\n const ctx = selectionContext.current;\n ctx.hasMovedEnough = true;\n\n const endTime = info.time ?? Temporal.PlainTime.from('23:59:59');\n const endZdt = info.date.toZonedDateTime({\n timeZone: timezone,\n plainTime: endTime,\n });\n\n const startTime = ctx.startTime ?? Temporal.PlainTime.from('00:00');\n const startZdt = ctx.startDate.toZonedDateTime({\n timeZone: timezone,\n plainTime: startTime,\n });\n\n // Ensure start <= end\n const [realStart, realEnd] =\n Temporal.ZonedDateTime.compare(startZdt, endZdt) <= 0\n ? [startZdt, endZdt]\n : [endZdt, startZdt];\n\n if (selectMirror) {\n previewEndRef.current = realEnd;\n }\n\n setState((prev) => ({\n ...prev,\n previewStart: selectMirror ? realStart : null,\n previewEnd: selectMirror ? realEnd : null,\n }));\n },\n [timezone, selectMirror],\n );\n\n const endSelection = useCallback(() => {\n const ctx = selectionContext.current;\n if (!ctx) return;\n\n const startTime = ctx.startTime ?? Temporal.PlainTime.from('00:00');\n const startZdt = ctx.startDate.toZonedDateTime({\n timeZone: timezone,\n plainTime: startTime,\n });\n\n if (!ctx.hasMovedEnough) {\n // Single click — fire dateClick\n onDateClick?.({\n date: ctx.startDate,\n dateStr: ctx.startDate.toString(),\n allDay: ctx.allDay,\n resourceId: ctx.resourceId,\n });\n\n setState({\n isSelecting: false,\n selection: null,\n previewStart: null,\n previewEnd: null,\n });\n selectionContext.current = null;\n return;\n }\n\n // Range selection — use ref to avoid stale closure\n const endZdt = previewEndRef.current ?? startZdt.add({ hours: 1 });\n\n const [realStart, realEnd] =\n Temporal.ZonedDateTime.compare(startZdt, endZdt) <= 0\n ? [startZdt, endZdt]\n : [endZdt, startZdt];\n\n const selection: SelectionInfo = {\n start: realStart,\n end: realEnd,\n allDay: ctx.allDay,\n resourceId: ctx.resourceId,\n };\n\n setState({\n isSelecting: false,\n selection,\n previewStart: null,\n previewEnd: null,\n });\n\n previewEndRef.current = null;\n onSelect?.(selection);\n selectionContext.current = null;\n }, [timezone, onSelect, onDateClick]);\n\n const clearSelection = useCallback(() => {\n setState({\n isSelecting: false,\n selection: null,\n previewStart: null,\n previewEnd: null,\n });\n selectionContext.current = null;\n onUnselect?.();\n }, [onUnselect]);\n\n const select = useCallback(\n (start: Temporal.ZonedDateTime, end: Temporal.ZonedDateTime) => {\n const selection: SelectionInfo = {\n start,\n end,\n allDay: false,\n };\n setState({\n isSelecting: false,\n selection,\n previewStart: null,\n previewEnd: null,\n });\n onSelect?.(selection);\n },\n [onSelect],\n );\n\n // Auto-unselect on click-away\n useEffect(() => {\n if (!unselectAuto || !state.selection) return;\n\n const handleClick = (e: MouseEvent) => {\n // Check if the click target matches the unselectCancel selector\n if (unselectCancel && (e.target as HTMLElement).closest(unselectCancel)) {\n return;\n }\n clearSelection();\n };\n\n // Delay to avoid the selection's own mouseup from triggering\n const timeoutId = setTimeout(() => {\n document.addEventListener('mousedown', handleClick);\n }, 0);\n\n return () => {\n clearTimeout(timeoutId);\n document.removeEventListener('mousedown', handleClick);\n };\n }, [unselectAuto, unselectCancel, state.selection, clearSelection]);\n\n return {\n state,\n startSelection,\n updateSelection,\n endSelection,\n clearSelection,\n select,\n };\n}\n","'use client';\n\nimport { useState, useEffect, useRef } from 'react';\nimport { Temporal } from 'temporal-polyfill';\n\n/**\n * Reactive current time hook.\n * Updates on an interval for now-indicator positioning.\n *\n * @param intervalMs - Update interval in milliseconds (default: 60000 = 1 minute)\n * @param timezone - IANA timezone string (default: local)\n */\nexport function useTemporalNow(\n intervalMs: number = 60000,\n timezone?: string,\n): Temporal.ZonedDateTime {\n const [now, setNow] = useState(() =>\n timezone ? Temporal.Now.zonedDateTimeISO(timezone) : Temporal.Now.zonedDateTimeISO(),\n );\n\n useEffect(() => {\n const update = () => {\n setNow(timezone ? Temporal.Now.zonedDateTimeISO(timezone) : Temporal.Now.zonedDateTimeISO());\n };\n\n const id = setInterval(update, intervalMs);\n return () => clearInterval(id);\n }, [intervalMs, timezone]);\n\n return now;\n}\n","'use client';\n\nimport { useState, useEffect, useRef, useCallback } from 'react';\nimport { Temporal } from 'temporal-polyfill';\nimport type {\n EventInput,\n NormalizedEvent,\n TemporalDateRange,\n EventDefaults,\n} from '@tempus-machina/core';\nimport type {\n EventSourceDef,\n EventSourceInput,\n NormalizedEventSource,\n EventSourceState,\n} from '@tempus-machina/core';\nimport {\n EventStore,\n fetchEventSource,\n mergeEventSources,\n createEventSources,\n} from '@tempus-machina/core';\n\nexport interface UseEventSourcesOptions {\n /** Event source definitions */\n eventSources: (EventSourceDef | EventSourceInput)[];\n /** Current visible range — triggers refetch on change */\n visibleRange: TemporalDateRange;\n /** Timezone */\n timezone: string;\n /** Event defaults for normalization */\n eventDefaults?: EventDefaults;\n /** Whether to render events progressively as sources resolve */\n progressiveEventRendering?: boolean;\n /** Called when loading state changes */\n onLoading?: (isLoading: boolean) => void;\n /** Called when a source fails */\n onSourceError?: (sourceId: string, error: Error) => void;\n}\n\nexport interface UseEventSourcesReturn {\n /** All resolved events from all sources */\n events: NormalizedEvent[];\n /** Whether any source is currently loading */\n isLoading: boolean;\n /** Individual source states */\n sources: NormalizedEventSource[];\n /** Force refetch all sources */\n refetchAll: () => void;\n /** Force refetch a specific source */\n refetch: (sourceId: string) => void;\n}\n\n/**\n * Hook to manage multiple event sources with automatic refetching on range change.\n *\n * Supports:\n * - Static arrays, JSON feed URLs, and async functions\n * - Parallel fetching with error isolation\n * - Progressive rendering (show events as they arrive)\n * - Loading state callbacks\n * - Manual refetch control\n */\nexport function useEventSources(options: UseEventSourcesOptions): UseEventSourcesReturn {\n const {\n eventSources: sourceInputs,\n visibleRange,\n timezone,\n eventDefaults,\n progressiveEventRendering = false,\n onLoading,\n onSourceError,\n } = options;\n\n // Normalized source definitions\n const [sources, setSources] = useState<NormalizedEventSource[]>(() =>\n createEventSources(sourceInputs),\n );\n\n // Event store for merged events\n const [eventStore, setEventStore] = useState(() => EventStore.from([], timezone, eventDefaults));\n const [isLoading, setIsLoading] = useState(false);\n\n // Track range for refetch detection\n const prevRangeRef = useRef<string>('');\n const abortRef = useRef<AbortController | null>(null);\n const sourcesRef = useRef(sources);\n useEffect(() => {\n sourcesRef.current = sources;\n }, [sources]);\n\n // Re-init sources when inputs change\n useEffect(() => {\n setSources(createEventSources(sourceInputs));\n }, [sourceInputs]);\n\n // Fetch all sources\n const fetchAll = useCallback(async () => {\n // Abort previous fetch cycle\n abortRef.current?.abort();\n const abort = new AbortController();\n abortRef.current = abort;\n\n setIsLoading(true);\n onLoading?.(true);\n\n // Mark all sources as loading\n setSources((prev) =>\n prev.map((s) => ({ ...s, state: 'loading' as EventSourceState, error: null })),\n );\n\n const sourceDefs = sourcesRef.current.map((s) => s.def);\n\n if (progressiveEventRendering) {\n // Progressive: resolve each source independently\n const allEvents: EventInput[] = [];\n\n for (const source of sourceDefs) {\n if (abort.signal.aborted) break;\n\n try {\n const events = await fetchEventSource(source, visibleRange, timezone);\n allEvents.push(...events);\n\n setSources((prev) =>\n prev.map((s) =>\n s.id === source.id\n ? { ...s, state: 'success' as EventSourceState, events, lastFetched: Date.now() }\n : s,\n ),\n );\n\n // Progressively update events\n setEventStore(EventStore.from(allEvents, timezone, eventDefaults));\n } catch (error) {\n const err = error as Error;\n setSources((prev) =>\n prev.map((s) =>\n s.id === source.id ? { ...s, state: 'failure' as EventSourceState, error: err } : s,\n ),\n );\n onSourceError?.(source.id, err);\n }\n }\n } else {\n // Batch: wait for all sources to resolve\n const { events, errors } = await mergeEventSources(sourceDefs, visibleRange, timezone);\n\n if (!abort.signal.aborted) {\n setEventStore(EventStore.from(events, timezone, eventDefaults));\n\n setSources((prev) =>\n prev.map((s) => {\n if (errors.has(s.id)) {\n const err = errors.get(s.id)!;\n onSourceError?.(s.id, err);\n return { ...s, state: 'failure' as EventSourceState, error: err };\n }\n return { ...s, state: 'success' as EventSourceState, lastFetched: Date.now() };\n }),\n );\n }\n }\n\n if (!abort.signal.aborted) {\n setIsLoading(false);\n onLoading?.(false);\n }\n }, [visibleRange, timezone, eventDefaults, progressiveEventRendering, onLoading, onSourceError]);\n\n // Fetch on range change\n useEffect(() => {\n const rangeKey = `${visibleRange.start.toString()}-${visibleRange.end.toString()}`;\n if (rangeKey === prevRangeRef.current) return;\n prevRangeRef.current = rangeKey;\n\n fetchAll();\n }, [visibleRange, fetchAll]);\n\n // Manual refetch\n const refetchAll = useCallback(() => {\n prevRangeRef.current = ''; // Force refetch\n fetchAll();\n }, [fetchAll]);\n\n const refetch = useCallback(\n async (sourceId: string) => {\n const source = sources.find((s) => s.id === sourceId);\n if (!source) return;\n\n setSources((prev) =>\n prev.map((s) => (s.id === sourceId ? { ...s, state: 'loading' as EventSourceState } : s)),\n );\n\n try {\n const events = await fetchEventSource(source.def, visibleRange, timezone);\n setSources((prev) =>\n prev.map((s) =>\n s.id === sourceId\n ? { ...s, state: 'success' as EventSourceState, events, lastFetched: Date.now() }\n : s,\n ),\n );\n\n // Rebuild full event store from all sources\n const allEvents: EventInput[] = [];\n sources.forEach((s) => {\n if (s.id === sourceId) {\n allEvents.push(...events);\n } else {\n allEvents.push(...s.events);\n }\n });\n setEventStore(EventStore.from(allEvents, timezone, eventDefaults));\n } catch (error) {\n const err = error as Error;\n setSources((prev) =>\n prev.map((s) =>\n s.id === sourceId ? { ...s, state: 'failure' as EventSourceState, error: err } : s,\n ),\n );\n onSourceError?.(sourceId, err);\n }\n },\n [sources, visibleRange, timezone, eventDefaults, onSourceError],\n );\n\n return {\n events: eventStore.getAll(),\n isLoading,\n sources,\n refetchAll,\n refetch,\n };\n}\n","'use client';\n\nimport { useEffect, useRef, useCallback, useState } from 'react';\nimport type { EventInput } from '@tempus-machina/core';\nimport { Temporal } from 'temporal-polyfill';\n\n// PDND external adapter imports\nimport {\n monitorForExternal,\n dropTargetForExternal,\n} from '@atlaskit/pragmatic-drag-and-drop/external/adapter';\n\n/**\n * Data carried by an external draggable element.\n */\nexport interface ExternalDragData {\n /** Type identifier for filtering */\n type: string;\n /** Event data to create on drop */\n eventData?: Partial<EventInput>;\n /** Raw data from external source */\n raw?: unknown;\n}\n\nexport interface ExternalDropInfo {\n /** The slot date/time where the drop occurred */\n date: Temporal.PlainDate;\n time?: Temporal.PlainTime;\n /** Resource ID if applicable */\n resourceId?: string;\n /** The external drag data */\n dragData: ExternalDragData;\n /** Whether the drop was on an all-day area */\n allDay: boolean;\n}\n\nexport interface UseExternalDropOptions {\n /** Whether the calendar accepts external drops */\n droppable?: boolean;\n /** Filter function for accepted drop types */\n dropAccept?: string | string[] | ((type: string) => boolean);\n /** Called when an external element is dropped onto the calendar */\n onDrop?: (info: ExternalDropInfo) => void;\n /** Called when an event is received from an external source */\n onEventReceive?: (event: EventInput) => void;\n}\n\nexport interface UseExternalDropReturn {\n /** Ref to attach to the calendar container for external drops */\n dropRef: React.RefObject<HTMLElement | null>;\n /** Whether an external element is currently being dragged over */\n isDraggingOver: boolean;\n /** Whether an external drag is currently active */\n isExternalDragActive: boolean;\n}\n\n/**\n * useExternalDrop — Accepts drops from external sources onto the calendar.\n *\n * Uses PDND's external adapter to handle files, text, and external HTML elements\n * dragged from outside the calendar. External elements must attach PDND data\n * via the consuming app's `draggable()` configuration.\n *\n * @example\n * ```tsx\n * const { dropRef, isDraggingOver } = useExternalDrop({\n * droppable: true,\n * dropAccept: 'task',\n * onDrop: (info) => console.log('Dropped:', info),\n * onEventReceive: (event) => addEvent(event),\n * });\n * ```\n */\nexport function useExternalDrop(options: UseExternalDropOptions): UseExternalDropReturn {\n const { droppable = true, dropAccept, onDrop, onEventReceive } = options;\n\n const dropRef = useRef<HTMLElement | null>(null);\n const [isDraggingOver, setIsDraggingOver] = useState(false);\n const [isExternalDragActive, setIsExternalDragActive] = useState(false);\n\n // Check if a drag type is accepted\n const isAccepted = useCallback(\n (type: string): boolean => {\n if (!dropAccept) return true;\n if (typeof dropAccept === 'string') return type === dropAccept;\n if (Array.isArray(dropAccept)) return dropAccept.includes(type);\n return dropAccept(type);\n },\n [dropAccept],\n );\n\n // Monitor for external drags globally\n useEffect(() => {\n if (!droppable) return;\n\n return monitorForExternal({\n onDragStart: () => setIsExternalDragActive(true),\n onDrop: () => setIsExternalDragActive(false),\n });\n }, [droppable]);\n\n // Set up drop target\n useEffect(() => {\n const element = dropRef.current;\n if (!element || !droppable) return;\n\n return dropTargetForExternal({\n element,\n onDragEnter: () => setIsDraggingOver(true),\n onDragLeave: () => setIsDraggingOver(false),\n onDrop: ({ source, location }) => {\n setIsDraggingOver(false);\n\n // Extract drag data from native drag event types\n const dragData: ExternalDragData = {\n type: 'external',\n raw: source,\n };\n\n // Check PDND native data types\n const types = source.types;\n\n // Handle text/plain data\n if (types.includes('text/plain')) {\n dragData.type = 'text';\n }\n\n // Handle files\n if (types.includes('Files')) {\n dragData.type = 'files';\n }\n\n // Handle application/json (structured event data)\n if (types.includes('application/json')) {\n dragData.type = 'json';\n }\n\n if (!isAccepted(dragData.type)) return;\n\n // Resolve the drop date from the innermost drop target's data\n const innerTarget = location.current.dropTargets[0];\n const targetDateStr = innerTarget?.data?.date as string | undefined;\n const targetTimeStr = innerTarget?.data?.time as string | undefined;\n\n const dropInfo: ExternalDropInfo = {\n date: targetDateStr\n ? Temporal.PlainDate.from(targetDateStr)\n : Temporal.Now.plainDateISO(), // Fallback only if no date on drop target\n time: targetTimeStr ? Temporal.PlainTime.from(targetTimeStr) : undefined,\n resourceId: (innerTarget?.data?.resourceId as string) ?? undefined,\n dragData,\n allDay: !targetTimeStr,\n };\n\n onDrop?.(dropInfo);\n\n // If event data was provided, fire eventReceive\n if (dragData.eventData) {\n onEventReceive?.(dragData.eventData as EventInput);\n }\n },\n });\n }, [droppable, isAccepted, onDrop, onEventReceive]);\n\n return {\n dropRef,\n isDraggingOver,\n isExternalDragActive,\n };\n}\n","'use client';\n\nimport { useEffect, useCallback, useRef } from 'react';\nimport type { NormalizedEvent } from '@tempus-machina/core';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\n\n/** Data key used to identify calendar events in PDND data */\nexport const CALENDAR_BRIDGE_TYPE = 'tempus-machina-bridge';\n\nexport interface CalendarBridgeEvent {\n /** Source calendar instance ID */\n sourceCalendarId: string;\n /** The event being transferred */\n event: NormalizedEvent;\n}\n\nexport interface UseCalendarBridgeOptions {\n /** Unique ID for this calendar instance */\n calendarId: string;\n /** Called when an event leaves this calendar during drag */\n onEventLeave?: (event: NormalizedEvent) => void;\n /** Called when an event is received from another calendar */\n onEventReceive?: (event: NormalizedEvent, sourceCalendarId: string) => void;\n /** Called when an event is dropped back on its original calendar (no-op) */\n onEventReturn?: (event: NormalizedEvent) => void;\n /** Whether inter-calendar transfer is enabled */\n enabled?: boolean;\n}\n\nexport interface UseCalendarBridgeReturn {\n /** Unique calendar ID */\n calendarId: string;\n /** Ref to attach PDND bridge data to draggable events */\n getBridgeData: (event: NormalizedEvent) => Record<string, unknown>;\n /** Check if a drag source is from another calendar */\n isFromOtherCalendar: (data: Record<string, unknown>) => boolean;\n}\n\n/**\n * useCalendarBridge — Enables cross-calendar event transfer via PDND.\n *\n * Calendar A's monitor detects when an event drag leaves → fires `onEventLeave`.\n * Calendar B's drop target receives the event → fires `onEventReceive`.\n * Events carry source calendar identity via PDND's `getInitialData()` flow.\n *\n * No shared state needed — PDND's browser-native DnD handles cross-component transfer.\n *\n * @example\n * ```tsx\n * // Calendar A\n * const bridgeA = useCalendarBridge({\n * calendarId: 'calendar-a',\n * onEventLeave: (event) => removeEvent(event.id),\n * });\n *\n * // Calendar B\n * const bridgeB = useCalendarBridge({\n * calendarId: 'calendar-b',\n * onEventReceive: (event, sourceId) => addEvent(event),\n * });\n * ```\n */\nexport function useCalendarBridge(options: UseCalendarBridgeOptions): UseCalendarBridgeReturn {\n const { calendarId, onEventLeave, onEventReceive, onEventReturn, enabled = true } = options;\n\n const calendarIdRef = useRef(calendarId);\n useEffect(() => {\n calendarIdRef.current = calendarId;\n }, [calendarId]);\n\n // Monitor for elements to detect cross-calendar transfers\n useEffect(() => {\n if (!enabled) return;\n\n return monitorForElements({\n onDrop: ({ source, location }) => {\n const sourceData = source.data;\n\n // Check if this is a bridge-enabled drag\n if (sourceData[CALENDAR_BRIDGE_TYPE] !== true) return;\n\n const sourceCalId = sourceData.sourceCalendarId as string;\n const event = sourceData.event as NormalizedEvent;\n\n if (!event || !sourceCalId) return;\n\n // Check if the drop happened on a drop target\n const dropTargets = location.current.dropTargets;\n if (dropTargets.length === 0) return;\n\n // Check the drop target's calendar ID\n const targetData = dropTargets[0].data;\n const targetCalId = targetData.calendarId as string | undefined;\n\n if (targetCalId && targetCalId !== sourceCalId) {\n // Cross-calendar transfer\n if (sourceCalId === calendarIdRef.current) {\n // This calendar is the source — event left\n onEventLeave?.(event);\n }\n if (targetCalId === calendarIdRef.current) {\n // This calendar is the target — event received\n onEventReceive?.(event, sourceCalId);\n }\n } else if (targetCalId === sourceCalId && sourceCalId === calendarIdRef.current) {\n // Event returned to same calendar\n onEventReturn?.(event);\n }\n },\n });\n }, [enabled, onEventLeave, onEventReceive, onEventReturn]);\n\n // Generate bridge data to attach to draggable events\n const getBridgeData = useCallback(\n (event: NormalizedEvent): Record<string, unknown> => ({\n [CALENDAR_BRIDGE_TYPE]: true,\n sourceCalendarId: calendarIdRef.current,\n event,\n }),\n [],\n );\n\n // Check if drag data came from another calendar\n const isFromOtherCalendar = useCallback((data: Record<string, unknown>): boolean => {\n return data[CALENDAR_BRIDGE_TYPE] === true && data.sourceCalendarId !== calendarIdRef.current;\n }, []);\n\n return {\n calendarId,\n getBridgeData,\n isFromOtherCalendar,\n };\n}\n","'use client';\n\nimport { useEffect, useCallback, useRef } from 'react';\nimport type { ViewPreset } from '@tempus-machina/core';\n\nexport interface KeyboardNavHints {\n /** Accessible hint for navigation buttons */\n buttonHints?: { prev?: string; next?: string; today?: string };\n /** Hint for view switcher buttons */\n viewHint?: (viewName: string) => string;\n /** Hint for day number nav links */\n navLinkHint?: string;\n /** Hint for time slots */\n timeHint?: (timeText: string) => string;\n /** Hint for events */\n eventHint?: (title: string) => string;\n /** Hint for close buttons */\n closeHint?: string;\n}\n\nexport interface UseKeyboardNavOptions {\n /** Container ref — keyboard events are scoped to this element */\n containerRef: React.RefObject<HTMLElement | null>;\n /** Whether keyboard navigation is enabled */\n enabled?: boolean;\n /** Callback when a date is navigated to via keyboard */\n onDateNav?: (direction: 'up' | 'down' | 'left' | 'right') => void;\n /** Callback when Enter/Space is pressed on a focused date */\n onDateSelect?: () => void;\n /** Callback when Escape is pressed */\n onCancel?: () => void;\n /** Callback when Tab key cycles through events */\n onEventFocus?: (eventId: string) => void;\n /** Current view for determining navigation behavior */\n currentView?: ViewPreset;\n /** Accessible hints */\n hints?: KeyboardNavHints;\n}\n\nexport interface UseKeyboardNavReturn {\n /** Props to spread on the calendar container */\n containerProps: {\n role: 'grid';\n tabIndex: number;\n 'aria-label': string;\n onKeyDown: (e: React.KeyboardEvent) => void;\n };\n /** Props to spread on each grid cell */\n getCellProps: (opts: { date: string; isSelected?: boolean }) => {\n role: 'gridcell';\n tabIndex: number;\n 'aria-selected': boolean;\n 'aria-label': string;\n };\n /** Props to spread on each event element */\n getEventProps: (opts: { id: string; title: string; timeText: string }) => {\n role: 'button';\n tabIndex: number;\n 'aria-label': string;\n 'aria-grabbed'?: boolean;\n };\n}\n\n/**\n * useKeyboardNav — Full keyboard navigation for the calendar.\n *\n * Arrow keys navigate between dates/events, Enter/Space selects,\n * Escape cancels, Tab cycles through interactive events.\n *\n * @example\n * ```tsx\n * const { containerProps, getCellProps, getEventProps } = useKeyboardNav({\n * containerRef,\n * onDateNav: (dir) => navigateDate(dir),\n * onDateSelect: () => selectDate(),\n * });\n * ```\n */\nexport function useKeyboardNav(options: UseKeyboardNavOptions): UseKeyboardNavReturn {\n const {\n containerRef,\n enabled = true,\n onDateNav,\n onDateSelect,\n onCancel,\n onEventFocus,\n currentView,\n hints = {},\n } = options;\n\n const focusedIndexRef = useRef(0);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!enabled) return;\n\n // View-dependent navigation semantics:\n // Month views: left/right = prev/next day, up/down = prev/next week\n // Time views: left/right = prev/next day, up/down = prev/next time slot\n // Day views: up/down = prev/next time slot (no left/right day nav)\n const isMonthView =\n currentView?.startsWith('dayGrid') || currentView?.startsWith('multiMonth');\n const isDayView = currentView === 'timeGridDay' || currentView === 'dayGridDay';\n\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n onDateNav?.('left');\n break;\n case 'ArrowRight':\n e.preventDefault();\n onDateNav?.('right');\n break;\n case 'ArrowUp':\n e.preventDefault();\n // In month views, up = previous week; in time views, up = earlier time slot\n onDateNav?.(isMonthView ? 'up' : 'up');\n break;\n case 'ArrowDown':\n e.preventDefault();\n onDateNav?.(isMonthView ? 'down' : 'down');\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n onDateSelect?.();\n break;\n case 'Escape':\n e.preventDefault();\n onCancel?.();\n break;\n case 'Tab': {\n // Cycle through interactive events within the container\n const container = containerRef.current;\n if (!container) break;\n\n const focusableEvents = container.querySelectorAll<HTMLElement>(\n '[role=\"button\"][tabindex=\"0\"]',\n );\n if (focusableEvents.length === 0) break;\n\n e.preventDefault();\n const direction = e.shiftKey ? -1 : 1;\n focusedIndexRef.current =\n (focusedIndexRef.current + direction + focusableEvents.length) % focusableEvents.length;\n const target = focusableEvents[focusedIndexRef.current];\n target.focus();\n onEventFocus?.(target.dataset.eventId ?? '');\n break;\n }\n }\n },\n [enabled, onDateNav, onDateSelect, onCancel, onEventFocus, containerRef, currentView],\n );\n\n // View-dependent ARIA roledescription\n const ariaRoleDescription = currentView?.startsWith('dayGrid')\n ? 'Month calendar'\n : currentView?.startsWith('timeGrid')\n ? 'Time grid calendar'\n : currentView?.startsWith('timeline')\n ? 'Timeline calendar'\n : 'Calendar';\n\n const containerProps = {\n role: 'grid' as const,\n tabIndex: 0,\n 'aria-label': 'Calendar',\n 'aria-roledescription': ariaRoleDescription,\n onKeyDown: handleKeyDown,\n };\n\n const getCellProps = useCallback(\n (opts: { date: string; isSelected?: boolean }) => ({\n role: 'gridcell' as const,\n tabIndex: opts.isSelected ? 0 : -1,\n 'aria-selected': opts.isSelected ?? false,\n 'aria-label': hints.navLinkHint ? `${hints.navLinkHint} ${opts.date}` : opts.date,\n }),\n [hints.navLinkHint],\n );\n\n const getEventProps = useCallback(\n (opts: { id: string; title: string; timeText: string }) => ({\n role: 'button' as const,\n tabIndex: 0,\n 'aria-label': hints.eventHint\n ? hints.eventHint(opts.title)\n : `${opts.title}, ${opts.timeText}`,\n 'data-event-id': opts.id,\n }),\n [hints],\n );\n\n return {\n containerProps,\n getCellProps,\n getEventProps,\n };\n}\n","'use client';\n\nimport { useRef, useCallback, useEffect, useState } from 'react';\n\nexport interface UseTouchOptions {\n /** Element ref for touch event binding */\n elementRef: React.RefObject<HTMLElement | null>;\n /** Whether touch interactions are enabled */\n enabled?: boolean;\n /** Long press delay for initiating drag (ms) */\n longPressDelay?: number;\n /** Long press delay specifically for events (ms) */\n eventLongPressDelay?: number;\n /** Long press delay specifically for selection (ms) */\n selectLongPressDelay?: number;\n /** Called when a long press is detected on an event */\n onEventLongPress?: (info: TouchEventInfo) => void;\n /** Called when a long press is detected on a slot (for selection) */\n onSlotLongPress?: (info: TouchEventInfo) => void;\n /** Called when a tap is detected */\n onTap?: (info: TouchEventInfo) => void;\n /** Called when a swipe gesture is detected */\n onSwipe?: (direction: 'left' | 'right' | 'up' | 'down') => void;\n}\n\nexport interface TouchEventInfo {\n /** Touch position relative to viewport */\n clientX: number;\n clientY: number;\n /** The target element */\n target: HTMLElement;\n /** Data attributes from the target element */\n date?: string;\n time?: string;\n eventId?: string;\n resourceId?: string;\n}\n\nexport interface UseTouchReturn {\n /** Whether a long press is currently active */\n isLongPressing: boolean;\n}\n\n/** @internal */\nconst SWIPE_THRESHOLD = 50;\n/** @internal */\nconst SWIPE_VELOCITY_THRESHOLD = 0.3; // px/ms\n\n/**\n * useTouch — Touch interaction support for the calendar.\n *\n * Provides long-press detection for drag initiation on touch devices,\n * tap detection, and swipe gestures for navigation.\n *\n * @example\n * ```tsx\n * const { isLongPressing } = useTouch({\n * elementRef: calendarRef,\n * onEventLongPress: (info) => startDrag(info),\n * onSwipe: (dir) => dir === 'left' ? next() : prev(),\n * });\n * ```\n */\nexport function useTouch(options: UseTouchOptions): UseTouchReturn {\n const {\n elementRef,\n enabled = true,\n longPressDelay = 1000,\n eventLongPressDelay,\n selectLongPressDelay,\n onEventLongPress,\n onSlotLongPress,\n onTap,\n onSwipe,\n } = options;\n\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [isLongPressing, setIsLongPressing] = useState(false);\n const touchStartRef = useRef<{ x: number; y: number; time: number } | null>(null);\n const hasMoved = useRef(false);\n\n const clearLongPress = useCallback(() => {\n if (longPressTimerRef.current) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = null;\n }\n setIsLongPressing(false);\n }, []);\n\n const extractTouchInfo = useCallback((touch: Touch, target: HTMLElement): TouchEventInfo => {\n const dataset = target.dataset;\n return {\n clientX: touch.clientX,\n clientY: touch.clientY,\n target,\n date: dataset.date,\n time: dataset.time,\n eventId: dataset.eventId,\n resourceId: dataset.resourceId,\n };\n }, []);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element || !enabled) return;\n\n const handleTouchStart = (e: TouchEvent) => {\n if (e.touches.length !== 1) return;\n\n const touch = e.touches[0];\n const target = e.target as HTMLElement;\n touchStartRef.current = { x: touch.clientX, y: touch.clientY, time: Date.now() };\n hasMoved.current = false;\n\n const info = extractTouchInfo(touch, target);\n const isEvent = !!info.eventId;\n const delay = isEvent\n ? (eventLongPressDelay ?? longPressDelay)\n : (selectLongPressDelay ?? longPressDelay);\n\n longPressTimerRef.current = setTimeout(() => {\n setIsLongPressing(true);\n\n if (isEvent) {\n onEventLongPress?.(info);\n } else {\n onSlotLongPress?.(info);\n }\n }, delay);\n };\n\n const handleTouchMove = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n const touch = e.touches[0];\n const dx = Math.abs(touch.clientX - touchStartRef.current.x);\n const dy = Math.abs(touch.clientY - touchStartRef.current.y);\n\n if (dx > 10 || dy > 10) {\n hasMoved.current = true;\n clearLongPress();\n }\n };\n\n const handleTouchEnd = (e: TouchEvent) => {\n clearLongPress();\n\n if (!touchStartRef.current) return;\n\n const touch = e.changedTouches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = touch.clientY - touchStartRef.current.y;\n const elapsed = Date.now() - touchStartRef.current.time;\n\n // Detect swipe\n if (Math.abs(dx) > SWIPE_THRESHOLD || Math.abs(dy) > SWIPE_THRESHOLD) {\n const velocity = Math.max(Math.abs(dx), Math.abs(dy)) / elapsed;\n if (velocity > SWIPE_VELOCITY_THRESHOLD) {\n if (Math.abs(dx) > Math.abs(dy)) {\n onSwipe?.(dx > 0 ? 'right' : 'left');\n } else {\n onSwipe?.(dy > 0 ? 'down' : 'up');\n }\n }\n } else if (!hasMoved.current && elapsed < 300) {\n // Tap\n const target = e.target as HTMLElement;\n const info = extractTouchInfo(touch, target);\n onTap?.(info);\n }\n\n touchStartRef.current = null;\n };\n\n const handleTouchCancel = () => {\n clearLongPress();\n touchStartRef.current = null;\n };\n\n element.addEventListener('touchstart', handleTouchStart, { passive: true });\n element.addEventListener('touchmove', handleTouchMove, { passive: true });\n element.addEventListener('touchend', handleTouchEnd, { passive: true });\n element.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n clearLongPress();\n element.removeEventListener('touchstart', handleTouchStart);\n element.removeEventListener('touchmove', handleTouchMove);\n element.removeEventListener('touchend', handleTouchEnd);\n element.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [\n elementRef,\n enabled,\n longPressDelay,\n eventLongPressDelay,\n selectLongPressDelay,\n onEventLongPress,\n onSlotLongPress,\n onTap,\n onSwipe,\n clearLongPress,\n extractTouchInfo,\n ]);\n\n return {\n isLongPressing,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport type { Resource } from '@tempus-machina/core';\n\nexport type ResourceSourceInput =\n | Resource[]\n | string\n | ((fetchInfo: ResourceFetchInfo) => Promise<Resource[]>);\n\nexport interface ResourceFetchInfo {\n start: string;\n end: string;\n}\n\nexport interface UseResourcesOptions {\n /** Initial resources or resource source */\n resources?: ResourceSourceInput;\n /** Sort function for resource ordering */\n resourceOrder?: string | ((a: Resource, b: Resource) => number);\n /** Width of the resource area in pixels */\n resourceAreaWidth?: number;\n /** Whether to refetch resources on date navigation */\n refetchResourcesOnNavigate?: boolean;\n /** Lifecycle callbacks */\n onResourceAdd?: (resource: Resource) => void;\n onResourceChange?: (resource: Resource) => void;\n onResourceRemove?: (resource: Resource) => void;\n onResourcesSet?: (resources: Resource[]) => void;\n}\n\nexport interface UseResourcesReturn {\n /** Current list of resources */\n resources: Resource[];\n /** Whether resources are loading */\n isLoading: boolean;\n /** Add a resource */\n addResource: (resource: Resource | (Omit<Resource, 'id'> & { id?: string })) => void;\n /** Remove a resource by ID */\n removeResource: (resourceId: string) => void;\n /** Update a resource */\n updateResource: (resourceId: string, updates: Partial<Resource>) => void;\n /** Replace all resources */\n setResources: (resources: Resource[]) => void;\n /** Trigger resource refetch (for function/URL sources) */\n refetchResources: () => void;\n /** Resource area width */\n resourceAreaWidth: number;\n}\n\n/**\n * useResources — Resource CRUD and data sourcing hook.\n *\n * Manages calendar resources with immutable state updates.\n * Supports static arrays, JSON feed URLs, and async functions.\n *\n * @example\n * ```tsx\n * const { resources, addResource, removeResource } = useResources({\n * resources: [\n * { id: 'room-a', title: 'Room A' },\n * { id: 'room-b', title: 'Room B' },\n * ],\n * resourceOrder: 'title',\n * onResourceAdd: (r) => console.log('Added:', r),\n * });\n * ```\n */\nexport function useResources(options: UseResourcesOptions = {}): UseResourcesReturn {\n const {\n resources: resourcesInput,\n resourceOrder,\n resourceAreaWidth = 200,\n refetchResourcesOnNavigate = false,\n onResourceAdd,\n onResourceChange,\n onResourceRemove,\n onResourcesSet,\n } = options;\n\n const [resources, setResourcesState] = useState<Resource[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const fetchIdRef = useRef(0);\n\n // Sort resources\n const sortResources = useCallback(\n (items: Resource[]): Resource[] => {\n if (!resourceOrder) return items;\n\n const sorted = [...items];\n if (typeof resourceOrder === 'string') {\n sorted.sort((a, b) => {\n const aVal = (a as any)[resourceOrder] ?? '';\n const bVal = (b as any)[resourceOrder] ?? '';\n return String(aVal).localeCompare(String(bVal));\n });\n } else {\n sorted.sort(resourceOrder);\n }\n return sorted;\n },\n [resourceOrder],\n );\n\n // Resolve resource source\n const resolveResources = useCallback(async () => {\n if (!resourcesInput) return;\n\n const fetchId = ++fetchIdRef.current;\n\n if (Array.isArray(resourcesInput)) {\n setResourcesState(sortResources(resourcesInput));\n return;\n }\n\n setIsLoading(true);\n\n try {\n let resolved: Resource[];\n\n if (typeof resourcesInput === 'string') {\n // JSON feed\n const response = await fetch(resourcesInput);\n resolved = await response.json();\n } else {\n // Async function\n resolved = await resourcesInput({\n start: new Date().toISOString(),\n end: new Date().toISOString(),\n });\n }\n\n // Only apply if this is still the latest fetch\n if (fetchId === fetchIdRef.current) {\n setResourcesState(sortResources(resolved));\n }\n } catch (error) {\n console.error('[TempusMachina] Resource fetch error:', error);\n } finally {\n if (fetchId === fetchIdRef.current) {\n setIsLoading(false);\n }\n }\n }, [resourcesInput, sortResources]);\n\n // Initial load\n useEffect(() => {\n resolveResources();\n }, [resolveResources]);\n\n // CRUD operations\n const addResource = useCallback(\n (resource: Resource | (Omit<Resource, 'id'> & { id?: string })) => {\n const newResource: Resource = {\n id: resource.id ?? `resource-${Date.now()}`,\n ...resource,\n } as Resource;\n\n setResourcesState((prev) => sortResources([...prev, newResource]));\n onResourceAdd?.(newResource);\n },\n [sortResources, onResourceAdd],\n );\n\n const removeResource = useCallback(\n (resourceId: string) => {\n setResourcesState((prev) => {\n const removed = prev.find((r) => r.id === resourceId);\n const next = prev.filter((r) => r.id !== resourceId);\n if (removed) onResourceRemove?.(removed);\n return next;\n });\n },\n [onResourceRemove],\n );\n\n const updateResource = useCallback(\n (resourceId: string, updates: Partial<Resource>) => {\n setResourcesState((prev) => {\n const next = prev.map((r) => {\n if (r.id !== resourceId) return r;\n const updated = { ...r, ...updates };\n onResourceChange?.(updated);\n return updated;\n });\n return sortResources(next);\n });\n },\n [sortResources, onResourceChange],\n );\n\n const setResources = useCallback(\n (newResources: Resource[]) => {\n const sorted = sortResources(newResources);\n setResourcesState(sorted);\n onResourcesSet?.(sorted);\n },\n [sortResources, onResourcesSet],\n );\n\n const refetchResources = useCallback(() => {\n resolveResources();\n }, [resolveResources]);\n\n return {\n resources,\n isLoading,\n addResource,\n removeResource,\n updateResource,\n setResources,\n refetchResources,\n resourceAreaWidth,\n };\n}\n","'use client';\n\nimport React, { createContext, useContext, useCallback, useMemo, useState, useEffect } from 'react';\n\nexport interface ThemeContextValue {\n theme: 'light' | 'dark';\n setTheme: (theme: 'light' | 'dark') => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('[tempus-machina] useTheme must be used within a CalendarThemeProvider.');\n }\n return context;\n}\n\nexport interface CalendarThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: 'light' | 'dark';\n}\n\nexport function CalendarThemeProvider({\n children,\n defaultTheme = 'light',\n}: CalendarThemeProviderProps) {\n const [theme, setTheme] = useState<'light' | 'dark'>(defaultTheme);\n\n const toggleTheme = useCallback(() => {\n setTheme((prev) => (prev === 'light' ? 'dark' : 'light'));\n }, []);\n\n const value = useMemo(() => ({ theme, setTheme, toggleTheme }), [theme, toggleTheme]);\n\n return (\n <ThemeContext.Provider value={value}>\n <div className={theme === 'dark' ? 'dark' : ''}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n"]}