@innosolutions/inno-calendar 1.0.38 → 1.0.40

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.
Files changed (36) hide show
  1. package/dist/agenda-widget-B5Sgvvry.cjs +2 -0
  2. package/dist/agenda-widget-B5Sgvvry.cjs.map +1 -0
  3. package/dist/{agenda-widget-CNUXKiQT.js → agenda-widget-C5uR9Raa.js} +1055 -1052
  4. package/dist/agenda-widget-C5uR9Raa.js.map +1 -0
  5. package/dist/components/index.cjs +1 -1
  6. package/dist/components/index.mjs +2 -2
  7. package/dist/components/inno-calendar.d.ts +11 -0
  8. package/dist/components/inno-calendar.d.ts.map +1 -1
  9. package/dist/components/primitives/index.d.ts +1 -0
  10. package/dist/components/primitives/index.d.ts.map +1 -1
  11. package/dist/components/primitives/multi-day-banner.d.ts +17 -3
  12. package/dist/components/primitives/multi-day-banner.d.ts.map +1 -1
  13. package/dist/components/primitives/week-all-day-row.d.ts +40 -0
  14. package/dist/components/primitives/week-all-day-row.d.ts.map +1 -0
  15. package/dist/components/views/day-events-expansion.d.ts.map +1 -1
  16. package/dist/components/views/day-view.d.ts.map +1 -1
  17. package/dist/components/views/week-view.d.ts.map +1 -1
  18. package/dist/index.cjs +1 -1
  19. package/dist/index.mjs +3 -3
  20. package/dist/presets/index.cjs +1 -1
  21. package/dist/presets/index.mjs +1 -1
  22. package/dist/{tailwind-calendar-BqhSHRk0.cjs → tailwind-calendar-B2vvMCsL.cjs} +2 -2
  23. package/dist/{tailwind-calendar-BqhSHRk0.cjs.map → tailwind-calendar-B2vvMCsL.cjs.map} +1 -1
  24. package/dist/{tailwind-calendar-BvWm9ry9.js → tailwind-calendar-C1_6GoL0.js} +2 -2
  25. package/dist/{tailwind-calendar-BvWm9ry9.js.map → tailwind-calendar-C1_6GoL0.js.map} +1 -1
  26. package/dist/week-view-DBsCYSce.cjs +11 -0
  27. package/dist/week-view-DBsCYSce.cjs.map +1 -0
  28. package/dist/{week-view-BGthazCB.js → week-view-Dh-gHd0m.js} +1486 -1189
  29. package/dist/week-view-Dh-gHd0m.js.map +1 -0
  30. package/package.json +2 -2
  31. package/dist/agenda-widget-BsRtRyZ3.cjs +0 -2
  32. package/dist/agenda-widget-BsRtRyZ3.cjs.map +0 -1
  33. package/dist/agenda-widget-CNUXKiQT.js.map +0 -1
  34. package/dist/week-view-BGthazCB.js.map +0 -1
  35. package/dist/week-view-DOvr2VIq.cjs +0 -11
  36. package/dist/week-view-DOvr2VIq.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-calendar-BvWm9ry9.js","sources":["../src/presets/default/default-calendar.tsx","../src/presets/tailwind/tailwind-calendar.tsx"],"sourcesContent":["/**\n * DefaultCalendar - Pre-styled Calendar Preset\n *\n * A fully styled calendar using CSS custom properties for theming.\n * Designed for projects that don't use TailwindCSS but want a complete solution.\n *\n * CSS Custom Properties (override these for theming):\n * - --ic-bg: Background color\n * - --ic-bg-muted: Muted background\n * - --ic-text: Primary text color\n * - --ic-text-muted: Secondary text color\n * - --ic-border: Border color\n * - --ic-primary: Primary/accent color\n * - --ic-primary-foreground: Text on primary background\n * - --ic-radius: Border radius\n *\n * @example\n * ```tsx\n * import { DefaultCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <div style={{ '--ic-primary': '#6366f1' }}>\n * <DefaultCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * />\n * </div>\n * );\n * }\n * ```\n */\n\nimport { type CSSProperties, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\n\n// ============================================================================\n// STYLES (CSS-in-JS for zero-config usage)\n// ============================================================================\n\nconst baseStyles: CSSProperties = {\n\tdisplay: 'flex',\n\tflexDirection: 'column',\n\theight: '100%',\n\tminHeight: '400px',\n\tbackgroundColor: 'var(--ic-bg, #ffffff)',\n\tborder: '1px solid var(--ic-border, #e5e7eb)',\n\tborderRadius: 'var(--ic-radius, 0.5rem)',\n\toverflow: 'hidden',\n\tfontFamily:\n\t\t'var(--ic-font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)',\n\tfontSize: 'var(--ic-font-size, 0.875rem)',\n\tcolor: 'var(--ic-text, #111827)',\n};\n\nconst headerStyles: CSSProperties = {\n\tborderBottom: '1px solid var(--ic-border, #e5e7eb)',\n};\n\nconst contentStyles: CSSProperties = {\n\tflex: 1,\n\toverflow: 'auto',\n};\n\nconst fallbackViewStyles: CSSProperties = {\n\tdisplay: 'flex',\n\talignItems: 'center',\n\tjustifyContent: 'center',\n\theight: '16rem',\n\tcolor: 'var(--ic-text-muted, #6b7280)',\n};\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface DefaultCalendarProps<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\t/** Events to display */\n\tevents: CalendarEvent<TEventData>[];\n\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom style overrides */\n\tstyle?: CSSProperties;\n\t/** Custom header actions */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function DefaultCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes: _scheduleTypes,\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tclassName = '',\n\tstyle,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: DefaultCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Build visible hours from preferences\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: preferences.startHour,\n\t\t\tendHour: preferences.endHour,\n\t\t}),\n\t\t[preferences.startHour, preferences.endHour]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn <div style={fallbackViewStyles}>View &quot;{view}&quot; is not yet implemented</div>;\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\treturn (\n\t\t<div className={className} style={{ ...baseStyles, ...style }}>\n\t\t\t{/* Header */}\n\t\t\t{!hideHeader && (\n\t\t\t\t<div style={headerStyles}>\n\t\t\t\t\t<CalendarHeader\n\t\t\t\t\t\tview={view}\n\t\t\t\t\t\tcurrentDate={date}\n\t\t\t\t\t\tavailableViews={availableViews}\n\t\t\t\t\t\tonViewChange={handleViewChange}\n\t\t\t\t\t\tonNavigate={(direction) => {\n\t\t\t\t\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\t\t\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\t\t\t\t\telse handleNavigateToday();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tactions={headerActions}\n\t\t\t\t\t\tclassName=\"p-3\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Calendar View */}\n\t\t\t<div style={contentStyles}>{renderView()}</div>\n\t\t</div>\n\t);\n}\n","/**\n * TailwindCalendar - Tailwind-Optimized Calendar Preset\n *\n * A fully featured, ready-to-use calendar component designed for TailwindCSS projects.\n * Composes all calendar components into a cohesive experience.\n *\n * Features:\n * - Full customization via render props (renderEvent, renderEventPopover, renderFilterSidebar)\n * - All visual components can be replaced while keeping state management\n * - Matches production quality when used with custom components\n *\n * @example\n * ```tsx\n * import { TailwindCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <TailwindCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * onSlotSelect={(selection) => console.log('Selected:', selection)}\n * // Custom components for production quality\n * renderEvent={(event) => <MyEventCard event={event} />}\n * renderEventPopover={(event, onClose) => <MyEventPopover event={event} onClose={onClose} />}\n * renderFilterSidebar={(props) => <MyFilterSidebar {...props} />}\n * />\n * );\n * }\n * ```\n */\n\nimport { type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIEventPosition,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\nimport { cn } from '../../lib/utils';\n\n// ============================================================================\n// RENDER PROP TYPES\n// ============================================================================\n\n/**\n * Props for custom event rendering\n */\nexport interface RenderEventProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tview: TCalendarView;\n\tvariant: 'full' | 'compact' | 'dot' | 'block';\n\tposition?: IEventPosition;\n\tbadgeVariant: TBadgeVariant;\n\tonClick?: () => void;\n}\n\n/**\n * Props for custom event popover rendering\n */\nexport interface RenderEventPopoverProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tonClose: () => void;\n}\n\n/**\n * Props for custom filter sidebar rendering\n */\nexport interface RenderFilterSidebarProps<TScheduleTypeData = Record<string, unknown>> {\n\tscheduleTypes: IScheduleType<TScheduleTypeData>[];\n\tselectedScheduleTypeIds: number[];\n\tonScheduleTypeChange: (ids: number[]) => void;\n\tselectedParticipantIds: string[];\n\tonParticipantChange: (ids: string[]) => void;\n\tonClearAll?: () => void;\n}\n\n/**\n * Props for custom header rendering\n */\nexport interface RenderHeaderProps {\n\tview: TCalendarView;\n\tcurrentDate: Date;\n\tavailableViews: TCalendarView[];\n\tonViewChange: (view: TCalendarView) => void;\n\tonNavigate: (direction: 'prev' | 'next' | 'today') => void;\n\tonNavigatePrev?: () => void;\n\tonNavigateNext?: () => void;\n\tonNavigateToday?: () => void;\n\tonAddEvent?: () => void;\n\tactions?: ReactNode;\n\tclassName?: string;\n}\n\n// ============================================================================\n// COMPONENT PROPS\n// ============================================================================\n\nexport interface TailwindCalendarProps<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\t/** Events to display */\n\tevents: CalendarEvent<TEventData>[];\n\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Show filter sidebar */\n\tshowFilterSidebar?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\n\t// ========================================================================\n\t// CALLBACKS\n\t// ========================================================================\n\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Add event handler (for header button) */\n\tonAddEvent?: () => void;\n\t/** Filter change handler */\n\tonFiltersChange?: (filters: ICalendarFilters) => void;\n\n\t// ========================================================================\n\t// RENDER PROPS (for custom components)\n\t// ========================================================================\n\n\t/**\n\t * Custom event renderer\n\t * Use this to inject your own EventCard component\n\t */\n\trenderEvent?: (props: RenderEventProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom event popover renderer\n\t * Use this to inject your own EventPopover component\n\t * If not provided, a basic popover is shown\n\t */\n\trenderEventPopover?: (props: RenderEventPopoverProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom filter sidebar renderer\n\t * Use this to inject your own CalendarFilterSidebar component\n\t */\n\trenderFilterSidebar?: (props: RenderFilterSidebarProps<TScheduleTypeData>) => ReactNode;\n\n\t/**\n\t * Custom header renderer\n\t * Use this to inject your own CalendarHeader component\n\t */\n\trenderHeader?: (props: RenderHeaderProps) => ReactNode;\n\n\t// ========================================================================\n\t// HEADER SLOTS\n\t// ========================================================================\n\n\t/** Settings popover content (for default header) */\n\tsettingsContent?: ReactNode;\n\t/** Filter row content (for default header) */\n\tfilterContent?: ReactNode;\n\t/** Whether to show the settings button (default: true) */\n\tshowSettings?: boolean;\n\t/** Whether to show timeline view options (default: false) */\n\tshowTimelineViews?: boolean;\n\n\t// ========================================================================\n\t// STYLING\n\t// ========================================================================\n\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom header actions (shown in default header) */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function TailwindCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes = [],\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tshowFilterSidebar = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tonAddEvent,\n\tonFiltersChange,\n\trenderEvent,\n\trenderEventPopover: _renderEventPopover,\n\trenderFilterSidebar,\n\trenderHeader,\n\tsettingsContent,\n\tfilterContent,\n\tshowSettings = true,\n\tshowTimelineViews = false,\n\tclassName,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: TailwindCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Filter state (for filter sidebar)\n\tconst [selectedScheduleTypeIds, setSelectedScheduleTypeIds] = useState<number[]>([]);\n\tconst [selectedParticipantIds, setSelectedParticipantIds] = useState<string[]>([]);\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Visible hours - show all hours (0-24) so users can see the full day\n\t// The working hours determine which slots have striped (disabled) appearance\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: 0,\n\t\t\tendHour: 24,\n\t\t}),\n\t\t[]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\t// Build working hours from preferences (for time grid views)\n\t// Working hours determine which slots are clickable and don't have striped pattern\n\t// Non-working hours get diagonal stripes and are disabled\n\tconst workingHours = useMemo(() => {\n\t\tconst hours: Record<number, { enabled: boolean; from: number; to: number }> = {};\n\t\tfor (let i = 0; i <= 6; i++) {\n\t\t\tconst isWeekend = i === 0 || i === 6;\n\t\t\t// Weekdays: use preferences, Weekends: use preferences if showWeekends, otherwise disabled\n\t\t\tif (!isWeekend) {\n\t\t\t\t// Weekdays (Mon-Fri): always have working hours from preferences\n\t\t\t\thours[i] = { enabled: true, from: preferences.startHour, to: preferences.endHour };\n\t\t\t} else if (preferences.showWeekends) {\n\t\t\t\t// Weekends with showWeekends: Saturday half-day (8-12), Sunday disabled\n\t\t\t\tif (i === 6) {\n\t\t\t\t\t// Saturday - half day (matching agenda-v2)\n\t\t\t\t\thours[i] = { enabled: true, from: 8, to: 12 };\n\t\t\t\t} else {\n\t\t\t\t\t// Sunday - disabled\n\t\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Weekends without showWeekends: both disabled\n\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t}\n\t\t}\n\t\treturn hours;\n\t}, [preferences.startHour, preferences.endHour, preferences.showWeekends]);\n\n\t// Handle filter changes\n\tconst handleScheduleTypeFilterChange = useCallback(\n\t\t(ids: number[]) => {\n\t\t\tsetSelectedScheduleTypeIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: ids,\n\t\t\t\tparticipantIds: selectedParticipantIds,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedParticipantIds]\n\t);\n\n\tconst handleParticipantFilterChange = useCallback(\n\t\t(ids: string[]) => {\n\t\t\tsetSelectedParticipantIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: selectedScheduleTypeIds,\n\t\t\t\tparticipantIds: ids,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedScheduleTypeIds]\n\t);\n\n\t// Create render event adapters for different view types\n\t// Each view has a slightly different renderEvent signature\n\n\tconst dayWeekRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: {\n\t\t\tevent: CalendarEvent<TEventData>;\n\t\t\tposition: { top: number; height: number; left: number; width: number };\n\t\t}) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview,\n\t\t\t\tvariant: 'full',\n\t\t\t\tposition: { ...props.position, zIndex: 1 },\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, view, badgeVariant, onEventClick]);\n\n\tconst monthRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData>; variant: 'compact' }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'month',\n\t\t\t\tvariant: props.variant,\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst agendaRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData> }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'agenda',\n\t\t\t\tvariant: 'block',\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(monthRenderEvent && { renderEvent: monthRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t\t{...(agendaRenderEvent && { renderEvent: agendaRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex items-center justify-center h-64 text-gray-500\">\n\t\t\t\t\t\tView &quot;{view}&quot; is not yet implemented\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\t// Header navigation handler\n\tconst handleNavigate = useCallback(\n\t\t(direction: 'prev' | 'next' | 'today') => {\n\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\telse handleNavigateToday();\n\t\t},\n\t\t[handleNavigatePrev, handleNavigateNext, handleNavigateToday]\n\t);\n\n\t// Default header props (conditionally add optional props)\n\tconst headerProps: RenderHeaderProps = {\n\t\tview,\n\t\tcurrentDate: date,\n\t\tavailableViews,\n\t\tonViewChange: handleViewChange,\n\t\tonNavigate: handleNavigate,\n\t\tonNavigatePrev: handleNavigatePrev,\n\t\tonNavigateNext: handleNavigateNext,\n\t\tonNavigateToday: handleNavigateToday,\n\t\t...(onAddEvent && { onAddEvent }),\n\t\t...(headerActions && { actions: headerActions }),\n\t\tclassName: 'border-b border-gray-200 p-3',\n\t};\n\n\t// Calendar header props (includes events for count display + slots)\n\tconst calendarHeaderProps = {\n\t\t...headerProps,\n\t\tevents,\n\t\tweekStartsOn,\n\t\tsettingsContent,\n\t\tfilterContent,\n\t\tshowSettings,\n\t\tshowTimelineViews,\n\t};\n\n\t// Clear all filters handler\n\tconst handleClearAllFilters = useCallback(() => {\n\t\tsetSelectedScheduleTypeIds([]);\n\t\tsetSelectedParticipantIds([]);\n\t\tonFiltersChange?.({\n\t\t\tscheduleTypeIds: [],\n\t\t\tparticipantIds: [],\n\t\t});\n\t}, [onFiltersChange]);\n\n\treturn (\n\t\t<div className={cn('flex h-full bg-white border border-gray-200 rounded-lg', className)}>\n\t\t\t{/* Filter Sidebar */}\n\t\t\t{showFilterSidebar && (\n\t\t\t\t<div className=\"w-64 border-r border-gray-200 flex-shrink-0\">\n\t\t\t\t\t{renderFilterSidebar ? (\n\t\t\t\t\t\trenderFilterSidebar({\n\t\t\t\t\t\t\tscheduleTypes,\n\t\t\t\t\t\t\tselectedScheduleTypeIds,\n\t\t\t\t\t\t\tselectedParticipantIds,\n\t\t\t\t\t\t\tonScheduleTypeChange: handleScheduleTypeFilterChange,\n\t\t\t\t\t\t\tonParticipantChange: handleParticipantFilterChange,\n\t\t\t\t\t\t\tonClearAll: handleClearAllFilters,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"p-4 text-sm text-gray-500\">Filter sidebar not configured</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Main Calendar Area */}\n\t\t\t<div className=\"flex flex-col flex-1 min-w-0\">\n\t\t\t\t{/* Header */}\n\t\t\t\t{!hideHeader &&\n\t\t\t\t\t(renderHeader ? renderHeader(headerProps) : <CalendarHeader {...calendarHeaderProps} />)}\n\n\t\t\t\t{/* Calendar View */}\n\t\t\t\t<div className=\"flex-1 overflow-auto\">{renderView()}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"names":["baseStyles","headerStyles","contentStyles","fallbackViewStyles","DefaultCalendar","events","_resources","_scheduleTypes","initialView","initialDate","_initialFilters","userPreferences","badgeVariant","hideHeader","availableViews","onEventClick","onSlotSelect","onViewChange","onDateChange","className","style","headerActions","emptyState","_children","view","setView","useState","date","setDate","preferences","useMemo","DEFAULT_PREFERENCES","handleViewChange","useCallback","newView","handleDateChange","newDate","handleNavigatePrev","navigatePrev","handleNavigateNext","navigateNext","handleNavigateToday","navigateToday","handleDayClick","clickedDate","visibleHours","weekStartsOn","renderView","jsx","DayView","WeekView","MonthView","AgendaView","jsxs","CalendarHeader","direction","TailwindCalendar","scheduleTypes","showFilterSidebar","onAddEvent","onFiltersChange","renderEvent","_renderEventPopover","renderFilterSidebar","renderHeader","settingsContent","filterContent","showSettings","showTimelineViews","selectedScheduleTypeIds","setSelectedScheduleTypeIds","selectedParticipantIds","setSelectedParticipantIds","workingHours","hours","i","handleScheduleTypeFilterChange","ids","handleParticipantFilterChange","dayWeekRenderEvent","props","monthRenderEvent","agendaRenderEvent","handleNavigate","headerProps","calendarHeaderProps","handleClearAllFilters","cn"],"mappings":"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"}
1
+ {"version":3,"file":"tailwind-calendar-C1_6GoL0.js","sources":["../src/presets/default/default-calendar.tsx","../src/presets/tailwind/tailwind-calendar.tsx"],"sourcesContent":["/**\n * DefaultCalendar - Pre-styled Calendar Preset\n *\n * A fully styled calendar using CSS custom properties for theming.\n * Designed for projects that don't use TailwindCSS but want a complete solution.\n *\n * CSS Custom Properties (override these for theming):\n * - --ic-bg: Background color\n * - --ic-bg-muted: Muted background\n * - --ic-text: Primary text color\n * - --ic-text-muted: Secondary text color\n * - --ic-border: Border color\n * - --ic-primary: Primary/accent color\n * - --ic-primary-foreground: Text on primary background\n * - --ic-radius: Border radius\n *\n * @example\n * ```tsx\n * import { DefaultCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <div style={{ '--ic-primary': '#6366f1' }}>\n * <DefaultCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * />\n * </div>\n * );\n * }\n * ```\n */\n\nimport { type CSSProperties, type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\n\n// ============================================================================\n// STYLES (CSS-in-JS for zero-config usage)\n// ============================================================================\n\nconst baseStyles: CSSProperties = {\n\tdisplay: 'flex',\n\tflexDirection: 'column',\n\theight: '100%',\n\tminHeight: '400px',\n\tbackgroundColor: 'var(--ic-bg, #ffffff)',\n\tborder: '1px solid var(--ic-border, #e5e7eb)',\n\tborderRadius: 'var(--ic-radius, 0.5rem)',\n\toverflow: 'hidden',\n\tfontFamily:\n\t\t'var(--ic-font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif)',\n\tfontSize: 'var(--ic-font-size, 0.875rem)',\n\tcolor: 'var(--ic-text, #111827)',\n};\n\nconst headerStyles: CSSProperties = {\n\tborderBottom: '1px solid var(--ic-border, #e5e7eb)',\n};\n\nconst contentStyles: CSSProperties = {\n\tflex: 1,\n\toverflow: 'auto',\n};\n\nconst fallbackViewStyles: CSSProperties = {\n\tdisplay: 'flex',\n\talignItems: 'center',\n\tjustifyContent: 'center',\n\theight: '16rem',\n\tcolor: 'var(--ic-text-muted, #6b7280)',\n};\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface DefaultCalendarProps<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\t/** Events to display */\n\tevents: CalendarEvent<TEventData>[];\n\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom style overrides */\n\tstyle?: CSSProperties;\n\t/** Custom header actions */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function DefaultCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes: _scheduleTypes,\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tclassName = '',\n\tstyle,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: DefaultCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Build visible hours from preferences\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: preferences.startHour,\n\t\t\tendHour: preferences.endHour,\n\t\t}),\n\t\t[preferences.startHour, preferences.endHour]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn <div style={fallbackViewStyles}>View &quot;{view}&quot; is not yet implemented</div>;\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\treturn (\n\t\t<div className={className} style={{ ...baseStyles, ...style }}>\n\t\t\t{/* Header */}\n\t\t\t{!hideHeader && (\n\t\t\t\t<div style={headerStyles}>\n\t\t\t\t\t<CalendarHeader\n\t\t\t\t\t\tview={view}\n\t\t\t\t\t\tcurrentDate={date}\n\t\t\t\t\t\tavailableViews={availableViews}\n\t\t\t\t\t\tonViewChange={handleViewChange}\n\t\t\t\t\t\tonNavigate={(direction) => {\n\t\t\t\t\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\t\t\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\t\t\t\t\telse handleNavigateToday();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tactions={headerActions}\n\t\t\t\t\t\tclassName=\"p-3\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Calendar View */}\n\t\t\t<div style={contentStyles}>{renderView()}</div>\n\t\t</div>\n\t);\n}\n","/**\n * TailwindCalendar - Tailwind-Optimized Calendar Preset\n *\n * A fully featured, ready-to-use calendar component designed for TailwindCSS projects.\n * Composes all calendar components into a cohesive experience.\n *\n * Features:\n * - Full customization via render props (renderEvent, renderEventPopover, renderFilterSidebar)\n * - All visual components can be replaced while keeping state management\n * - Matches production quality when used with custom components\n *\n * @example\n * ```tsx\n * import { TailwindCalendar } from '@inno/calendar/presets';\n *\n * function MyAgenda() {\n * return (\n * <TailwindCalendar\n * events={myEvents}\n * onEventClick={(event) => console.log('Clicked:', event)}\n * onSlotSelect={(selection) => console.log('Selected:', selection)}\n * // Custom components for production quality\n * renderEvent={(event) => <MyEventCard event={event} />}\n * renderEventPopover={(event, onClose) => <MyEventPopover event={event} onClose={onClose} />}\n * renderFilterSidebar={(props) => <MyFilterSidebar {...props} />}\n * />\n * );\n * }\n * ```\n */\n\nimport { type ReactNode, useCallback, useMemo, useState } from 'react';\nimport { CalendarHeader } from '../../components/header/calendar-header';\nimport { AgendaView } from '../../components/views/agenda-view';\nimport { DayView } from '../../components/views/day-view';\nimport { MonthView } from '../../components/views/month-view';\nimport { WeekView } from '../../components/views/week-view';\nimport { DEFAULT_PREFERENCES } from '../../core/constants';\nimport type {\n\tCalendarEvent,\n\tICalendarFilters,\n\tICalendarPreferences,\n\tIEventPosition,\n\tIResource,\n\tIScheduleType,\n\tISelectionResult,\n\tTBadgeVariant,\n\tTCalendarView,\n} from '../../core/types';\nimport { navigateNext, navigatePrev, navigateToday } from '../../core/utils/grid-utils';\nimport { cn } from '../../lib/utils';\n\n// ============================================================================\n// RENDER PROP TYPES\n// ============================================================================\n\n/**\n * Props for custom event rendering\n */\nexport interface RenderEventProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tview: TCalendarView;\n\tvariant: 'full' | 'compact' | 'dot' | 'block';\n\tposition?: IEventPosition;\n\tbadgeVariant: TBadgeVariant;\n\tonClick?: () => void;\n}\n\n/**\n * Props for custom event popover rendering\n */\nexport interface RenderEventPopoverProps<TEventData = Record<string, unknown>> {\n\tevent: CalendarEvent<TEventData>;\n\tonClose: () => void;\n}\n\n/**\n * Props for custom filter sidebar rendering\n */\nexport interface RenderFilterSidebarProps<TScheduleTypeData = Record<string, unknown>> {\n\tscheduleTypes: IScheduleType<TScheduleTypeData>[];\n\tselectedScheduleTypeIds: number[];\n\tonScheduleTypeChange: (ids: number[]) => void;\n\tselectedParticipantIds: string[];\n\tonParticipantChange: (ids: string[]) => void;\n\tonClearAll?: () => void;\n}\n\n/**\n * Props for custom header rendering\n */\nexport interface RenderHeaderProps {\n\tview: TCalendarView;\n\tcurrentDate: Date;\n\tavailableViews: TCalendarView[];\n\tonViewChange: (view: TCalendarView) => void;\n\tonNavigate: (direction: 'prev' | 'next' | 'today') => void;\n\tonNavigatePrev?: () => void;\n\tonNavigateNext?: () => void;\n\tonNavigateToday?: () => void;\n\tonAddEvent?: () => void;\n\tactions?: ReactNode;\n\tclassName?: string;\n}\n\n// ============================================================================\n// COMPONENT PROPS\n// ============================================================================\n\nexport interface TailwindCalendarProps<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n> {\n\t/** Events to display */\n\tevents: CalendarEvent<TEventData>[];\n\t/** Available resources */\n\tresources?: IResource<TResourceData>[];\n\t/** Available schedule types */\n\tscheduleTypes?: IScheduleType<TScheduleTypeData>[];\n\t/** Initial view */\n\tinitialView?: TCalendarView;\n\t/** Initial date */\n\tinitialDate?: Date;\n\t/** Initial filters */\n\tinitialFilters?: ICalendarFilters;\n\t/** Preferences */\n\tpreferences?: Partial<ICalendarPreferences>;\n\t/** Badge variant for events (dot, colored, mixed) */\n\tbadgeVariant?: TBadgeVariant;\n\t/** Hide the header */\n\thideHeader?: boolean;\n\t/** Show filter sidebar */\n\tshowFilterSidebar?: boolean;\n\t/** Available views to show in view switcher */\n\tavailableViews?: TCalendarView[];\n\n\t// ========================================================================\n\t// CALLBACKS\n\t// ========================================================================\n\n\t/** Event click handler */\n\tonEventClick?: (event: CalendarEvent<TEventData>) => void;\n\t/** Slot selection handler */\n\tonSlotSelect?: (selection: ISelectionResult) => void;\n\t/** View change handler */\n\tonViewChange?: (view: TCalendarView) => void;\n\t/** Date change handler */\n\tonDateChange?: (date: Date) => void;\n\t/** Add event handler (for header button) */\n\tonAddEvent?: () => void;\n\t/** Filter change handler */\n\tonFiltersChange?: (filters: ICalendarFilters) => void;\n\n\t// ========================================================================\n\t// RENDER PROPS (for custom components)\n\t// ========================================================================\n\n\t/**\n\t * Custom event renderer\n\t * Use this to inject your own EventCard component\n\t */\n\trenderEvent?: (props: RenderEventProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom event popover renderer\n\t * Use this to inject your own EventPopover component\n\t * If not provided, a basic popover is shown\n\t */\n\trenderEventPopover?: (props: RenderEventPopoverProps<TEventData>) => ReactNode;\n\n\t/**\n\t * Custom filter sidebar renderer\n\t * Use this to inject your own CalendarFilterSidebar component\n\t */\n\trenderFilterSidebar?: (props: RenderFilterSidebarProps<TScheduleTypeData>) => ReactNode;\n\n\t/**\n\t * Custom header renderer\n\t * Use this to inject your own CalendarHeader component\n\t */\n\trenderHeader?: (props: RenderHeaderProps) => ReactNode;\n\n\t// ========================================================================\n\t// HEADER SLOTS\n\t// ========================================================================\n\n\t/** Settings popover content (for default header) */\n\tsettingsContent?: ReactNode;\n\t/** Filter row content (for default header) */\n\tfilterContent?: ReactNode;\n\t/** Whether to show the settings button (default: true) */\n\tshowSettings?: boolean;\n\t/** Whether to show timeline view options (default: false) */\n\tshowTimelineViews?: boolean;\n\n\t// ========================================================================\n\t// STYLING\n\t// ========================================================================\n\n\t/** Additional CSS class */\n\tclassName?: string;\n\t/** Custom header actions (shown in default header) */\n\theaderActions?: ReactNode;\n\t/** Empty state for agenda view */\n\temptyState?: ReactNode;\n\t/** Children (for header slot) */\n\tchildren?: ReactNode;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function TailwindCalendar<\n\tTEventData = Record<string, unknown>,\n\tTScheduleTypeData = Record<string, unknown>,\n\tTResourceData = Record<string, unknown>,\n>({\n\tevents,\n\tresources: _resources,\n\tscheduleTypes = [],\n\tinitialView = 'week',\n\tinitialDate,\n\tinitialFilters: _initialFilters,\n\tpreferences: userPreferences,\n\tbadgeVariant = 'colored',\n\thideHeader = false,\n\tshowFilterSidebar = false,\n\tavailableViews = ['day', 'week', 'month', 'agenda'],\n\tonEventClick,\n\tonSlotSelect,\n\tonViewChange,\n\tonDateChange,\n\tonAddEvent,\n\tonFiltersChange,\n\trenderEvent,\n\trenderEventPopover: _renderEventPopover,\n\trenderFilterSidebar,\n\trenderHeader,\n\tsettingsContent,\n\tfilterContent,\n\tshowSettings = true,\n\tshowTimelineViews = false,\n\tclassName,\n\theaderActions,\n\temptyState,\n\tchildren: _children,\n}: TailwindCalendarProps<TEventData, TScheduleTypeData, TResourceData>) {\n\t// ========================================================================\n\t// STATE\n\t// ========================================================================\n\n\tconst [view, setView] = useState<TCalendarView>(initialView);\n\tconst [date, setDate] = useState<Date>(initialDate ?? new Date());\n\n\t// Filter state (for filter sidebar)\n\tconst [selectedScheduleTypeIds, setSelectedScheduleTypeIds] = useState<number[]>([]);\n\tconst [selectedParticipantIds, setSelectedParticipantIds] = useState<string[]>([]);\n\n\t// Merge user preferences with defaults\n\tconst preferences: ICalendarPreferences = useMemo(\n\t\t() => ({\n\t\t\t...DEFAULT_PREFERENCES,\n\t\t\t...userPreferences,\n\t\t}),\n\t\t[userPreferences]\n\t);\n\n\t// ========================================================================\n\t// HANDLERS\n\t// ========================================================================\n\n\tconst handleViewChange = useCallback(\n\t\t(newView: TCalendarView) => {\n\t\t\tsetView(newView);\n\t\t\tonViewChange?.(newView);\n\t\t},\n\t\t[onViewChange]\n\t);\n\n\tconst handleDateChange = useCallback(\n\t\t(newDate: Date) => {\n\t\t\tsetDate(newDate);\n\t\t\tonDateChange?.(newDate);\n\t\t},\n\t\t[onDateChange]\n\t);\n\n\tconst handleNavigatePrev = useCallback(() => {\n\t\tconst newDate = navigatePrev(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateNext = useCallback(() => {\n\t\tconst newDate = navigateNext(date, view);\n\t\thandleDateChange(newDate);\n\t}, [date, view, handleDateChange]);\n\n\tconst handleNavigateToday = useCallback(() => {\n\t\tconst newDate = navigateToday();\n\t\thandleDateChange(newDate);\n\t}, [handleDateChange]);\n\n\tconst handleDayClick = useCallback(\n\t\t(clickedDate: Date) => {\n\t\t\t// Navigate to day view when clicking a day in month view\n\t\t\thandleDateChange(clickedDate);\n\t\t\thandleViewChange('day');\n\t\t},\n\t\t[handleDateChange, handleViewChange]\n\t);\n\n\t// ========================================================================\n\t// VIEW RENDERING\n\t// ========================================================================\n\n\t// Visible hours - show all hours (0-24) so users can see the full day\n\t// The working hours determine which slots have striped (disabled) appearance\n\tconst visibleHours = useMemo(\n\t\t() => ({\n\t\t\tstartHour: 0,\n\t\t\tendHour: 24,\n\t\t}),\n\t\t[]\n\t);\n\n\t// Week starts on (convert from 0-6 to 0 | 1)\n\tconst weekStartsOn: 0 | 1 = preferences.firstDayOfWeek === 0 ? 0 : 1;\n\n\t// Build working hours from preferences (for time grid views)\n\t// Working hours determine which slots are clickable and don't have striped pattern\n\t// Non-working hours get diagonal stripes and are disabled\n\tconst workingHours = useMemo(() => {\n\t\tconst hours: Record<number, { enabled: boolean; from: number; to: number }> = {};\n\t\tfor (let i = 0; i <= 6; i++) {\n\t\t\tconst isWeekend = i === 0 || i === 6;\n\t\t\t// Weekdays: use preferences, Weekends: use preferences if showWeekends, otherwise disabled\n\t\t\tif (!isWeekend) {\n\t\t\t\t// Weekdays (Mon-Fri): always have working hours from preferences\n\t\t\t\thours[i] = { enabled: true, from: preferences.startHour, to: preferences.endHour };\n\t\t\t} else if (preferences.showWeekends) {\n\t\t\t\t// Weekends with showWeekends: Saturday half-day (8-12), Sunday disabled\n\t\t\t\tif (i === 6) {\n\t\t\t\t\t// Saturday - half day (matching agenda-v2)\n\t\t\t\t\thours[i] = { enabled: true, from: 8, to: 12 };\n\t\t\t\t} else {\n\t\t\t\t\t// Sunday - disabled\n\t\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Weekends without showWeekends: both disabled\n\t\t\t\thours[i] = { enabled: false, from: 0, to: 0 };\n\t\t\t}\n\t\t}\n\t\treturn hours;\n\t}, [preferences.startHour, preferences.endHour, preferences.showWeekends]);\n\n\t// Handle filter changes\n\tconst handleScheduleTypeFilterChange = useCallback(\n\t\t(ids: number[]) => {\n\t\t\tsetSelectedScheduleTypeIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: ids,\n\t\t\t\tparticipantIds: selectedParticipantIds,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedParticipantIds]\n\t);\n\n\tconst handleParticipantFilterChange = useCallback(\n\t\t(ids: string[]) => {\n\t\t\tsetSelectedParticipantIds(ids);\n\t\t\tonFiltersChange?.({\n\t\t\t\tscheduleTypeIds: selectedScheduleTypeIds,\n\t\t\t\tparticipantIds: ids,\n\t\t\t});\n\t\t},\n\t\t[onFiltersChange, selectedScheduleTypeIds]\n\t);\n\n\t// Create render event adapters for different view types\n\t// Each view has a slightly different renderEvent signature\n\n\tconst dayWeekRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: {\n\t\t\tevent: CalendarEvent<TEventData>;\n\t\t\tposition: { top: number; height: number; left: number; width: number };\n\t\t}) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview,\n\t\t\t\tvariant: 'full',\n\t\t\t\tposition: { ...props.position, zIndex: 1 },\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, view, badgeVariant, onEventClick]);\n\n\tconst monthRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData>; variant: 'compact' }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'month',\n\t\t\t\tvariant: props.variant,\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst agendaRenderEvent = useMemo(() => {\n\t\tif (!renderEvent) return undefined;\n\t\treturn (props: { event: CalendarEvent<TEventData> }) => {\n\t\t\treturn renderEvent({\n\t\t\t\tevent: props.event,\n\t\t\t\tview: 'agenda',\n\t\t\t\tvariant: 'block',\n\t\t\t\tbadgeVariant,\n\t\t\t\t...(onEventClick && { onClick: () => onEventClick(props.event) }),\n\t\t\t});\n\t\t};\n\t}, [renderEvent, badgeVariant, onEventClick]);\n\n\tconst renderView = () => {\n\t\tswitch (view) {\n\t\t\tcase 'day':\n\t\t\t\treturn (\n\t\t\t\t\t<DayView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'week':\n\t\t\t\treturn (\n\t\t\t\t\t<WeekView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tvisibleHours={visibleHours}\n\t\t\t\t\t\tworkingHours={workingHours}\n\t\t\t\t\t\tslotDuration={preferences.slotDuration}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(dayWeekRenderEvent && { renderEvent: dayWeekRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'month':\n\t\t\t\treturn (\n\t\t\t\t\t<MonthView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\tweekStartsOn={weekStartsOn}\n\t\t\t\t\t\tonDayClick={handleDayClick}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(onSlotSelect && { onSlotSelect })}\n\t\t\t\t\t\t{...(monthRenderEvent && { renderEvent: monthRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tcase 'agenda':\n\t\t\t\treturn (\n\t\t\t\t\t<AgendaView<TEventData>\n\t\t\t\t\t\tevents={events}\n\t\t\t\t\t\tdate={date}\n\t\t\t\t\t\tbadgeVariant={badgeVariant}\n\t\t\t\t\t\t{...(onEventClick && { onEventClick })}\n\t\t\t\t\t\t{...(emptyState && { emptyState })}\n\t\t\t\t\t\t{...(agendaRenderEvent && { renderEvent: agendaRenderEvent })}\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex items-center justify-center h-64 text-gray-500\">\n\t\t\t\t\t\tView &quot;{view}&quot; is not yet implemented\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t}\n\t};\n\n\t// ========================================================================\n\t// RENDER\n\t// ========================================================================\n\n\t// Header navigation handler\n\tconst handleNavigate = useCallback(\n\t\t(direction: 'prev' | 'next' | 'today') => {\n\t\t\tif (direction === 'prev') handleNavigatePrev();\n\t\t\telse if (direction === 'next') handleNavigateNext();\n\t\t\telse handleNavigateToday();\n\t\t},\n\t\t[handleNavigatePrev, handleNavigateNext, handleNavigateToday]\n\t);\n\n\t// Default header props (conditionally add optional props)\n\tconst headerProps: RenderHeaderProps = {\n\t\tview,\n\t\tcurrentDate: date,\n\t\tavailableViews,\n\t\tonViewChange: handleViewChange,\n\t\tonNavigate: handleNavigate,\n\t\tonNavigatePrev: handleNavigatePrev,\n\t\tonNavigateNext: handleNavigateNext,\n\t\tonNavigateToday: handleNavigateToday,\n\t\t...(onAddEvent && { onAddEvent }),\n\t\t...(headerActions && { actions: headerActions }),\n\t\tclassName: 'border-b border-gray-200 p-3',\n\t};\n\n\t// Calendar header props (includes events for count display + slots)\n\tconst calendarHeaderProps = {\n\t\t...headerProps,\n\t\tevents,\n\t\tweekStartsOn,\n\t\tsettingsContent,\n\t\tfilterContent,\n\t\tshowSettings,\n\t\tshowTimelineViews,\n\t};\n\n\t// Clear all filters handler\n\tconst handleClearAllFilters = useCallback(() => {\n\t\tsetSelectedScheduleTypeIds([]);\n\t\tsetSelectedParticipantIds([]);\n\t\tonFiltersChange?.({\n\t\t\tscheduleTypeIds: [],\n\t\t\tparticipantIds: [],\n\t\t});\n\t}, [onFiltersChange]);\n\n\treturn (\n\t\t<div className={cn('flex h-full bg-white border border-gray-200 rounded-lg', className)}>\n\t\t\t{/* Filter Sidebar */}\n\t\t\t{showFilterSidebar && (\n\t\t\t\t<div className=\"w-64 border-r border-gray-200 flex-shrink-0\">\n\t\t\t\t\t{renderFilterSidebar ? (\n\t\t\t\t\t\trenderFilterSidebar({\n\t\t\t\t\t\t\tscheduleTypes,\n\t\t\t\t\t\t\tselectedScheduleTypeIds,\n\t\t\t\t\t\t\tselectedParticipantIds,\n\t\t\t\t\t\t\tonScheduleTypeChange: handleScheduleTypeFilterChange,\n\t\t\t\t\t\t\tonParticipantChange: handleParticipantFilterChange,\n\t\t\t\t\t\t\tonClearAll: handleClearAllFilters,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"p-4 text-sm text-gray-500\">Filter sidebar not configured</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Main Calendar Area */}\n\t\t\t<div className=\"flex flex-col flex-1 min-w-0\">\n\t\t\t\t{/* Header */}\n\t\t\t\t{!hideHeader &&\n\t\t\t\t\t(renderHeader ? renderHeader(headerProps) : <CalendarHeader {...calendarHeaderProps} />)}\n\n\t\t\t\t{/* Calendar View */}\n\t\t\t\t<div className=\"flex-1 overflow-auto\">{renderView()}</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"names":["baseStyles","headerStyles","contentStyles","fallbackViewStyles","DefaultCalendar","events","_resources","_scheduleTypes","initialView","initialDate","_initialFilters","userPreferences","badgeVariant","hideHeader","availableViews","onEventClick","onSlotSelect","onViewChange","onDateChange","className","style","headerActions","emptyState","_children","view","setView","useState","date","setDate","preferences","useMemo","DEFAULT_PREFERENCES","handleViewChange","useCallback","newView","handleDateChange","newDate","handleNavigatePrev","navigatePrev","handleNavigateNext","navigateNext","handleNavigateToday","navigateToday","handleDayClick","clickedDate","visibleHours","weekStartsOn","renderView","jsx","DayView","WeekView","MonthView","AgendaView","jsxs","CalendarHeader","direction","TailwindCalendar","scheduleTypes","showFilterSidebar","onAddEvent","onFiltersChange","renderEvent","_renderEventPopover","renderFilterSidebar","renderHeader","settingsContent","filterContent","showSettings","showTimelineViews","selectedScheduleTypeIds","setSelectedScheduleTypeIds","selectedParticipantIds","setSelectedParticipantIds","workingHours","hours","i","handleScheduleTypeFilterChange","ids","handleParticipantFilterChange","dayWeekRenderEvent","props","monthRenderEvent","agendaRenderEvent","handleNavigate","headerProps","calendarHeaderProps","handleClearAllFilters","cn"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ "use strict";const e=require("react/jsx-runtime"),a=require("react"),d=require("./index-D2U2F80P.cjs"),st=require("@radix-ui/react-dropdown-menu"),g=require("./utils.cjs"),le=require("./slot-selection-context-Bx3FKJfR.cjs"),rt=require("@radix-ui/react-popover"),ot=require("@radix-ui/react-tooltip");function Ne(t){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const r=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(n,s,r.get?r:{enumerable:!0,get:()=>t[s]})}}return n.default=t,Object.freeze(n)}const ee=Ne(a),V=Ne(st),ie=Ne(rt),he=Ne(ot),Z=ie.Root,Q=ie.Trigger,at=ie.Anchor,X=ee.forwardRef(({className:t,align:n="center",sideOffset:s=4,...r},o)=>e.jsx(ie.Portal,{children:e.jsx(ie.Content,{ref:o,align:n,sideOffset:s,className:d.cn("z-50 w-72 rounded-xl border bg-white text-popover-foreground outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...r})}));X.displayName=ie.Content.displayName;const it=he.Provider,te=he.Root,ne=he.Trigger,J=ee.forwardRef(({className:t,sideOffset:n=4,...s},r)=>e.jsx(he.Content,{ref:r,sideOffset:n,className:d.cn("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...s}));J.displayName=he.Content.displayName;function se(t){return{blue:{bg:"bg-blue-50 dark:bg-blue-950/30",text:"text-blue-700 dark:text-blue-300",dot:"bg-blue-500",dotFill:"fill-blue-600 dark:fill-blue-500",border:"border-blue-400 dark:border-blue-600",accentBorder:"border-l-blue-500 dark:border-l-blue-400"},green:{bg:"bg-green-50 dark:bg-green-950/30",text:"text-green-700 dark:text-green-300",dot:"bg-green-500",dotFill:"fill-green-600 dark:fill-green-500",border:"border-green-400 dark:border-green-600",accentBorder:"border-l-green-500 dark:border-l-green-400"},red:{bg:"bg-red-50 dark:bg-red-950/30",text:"text-red-700 dark:text-red-300",dot:"bg-red-500",dotFill:"fill-red-600 dark:fill-red-500",border:"border-red-400 dark:border-red-600",accentBorder:"border-l-red-500 dark:border-l-red-400"},yellow:{bg:"bg-yellow-50 dark:bg-yellow-950/30",text:"text-yellow-700 dark:text-yellow-300",dot:"bg-yellow-500",dotFill:"fill-yellow-600 dark:fill-yellow-500",border:"border-yellow-400 dark:border-yellow-600",accentBorder:"border-l-yellow-500 dark:border-l-yellow-400"},purple:{bg:"bg-purple-50 dark:bg-purple-950/30",text:"text-purple-700 dark:text-purple-300",dot:"bg-purple-500",dotFill:"fill-purple-600 dark:fill-purple-500",border:"border-purple-400 dark:border-purple-600",accentBorder:"border-l-purple-500 dark:border-l-purple-400"},orange:{bg:"bg-orange-50 dark:bg-orange-950/30",text:"text-orange-700 dark:text-orange-300",dot:"bg-orange-500",dotFill:"fill-orange-600 dark:fill-orange-500",border:"border-orange-400 dark:border-orange-600",accentBorder:"border-l-orange-500 dark:border-l-orange-400"},pink:{bg:"bg-pink-50 dark:bg-pink-950/30",text:"text-pink-700 dark:text-pink-300",dot:"bg-pink-500",dotFill:"fill-pink-600 dark:fill-pink-500",border:"border-pink-400 dark:border-pink-600",accentBorder:"border-l-pink-500 dark:border-l-pink-400"},teal:{bg:"bg-teal-50 dark:bg-teal-950/30",text:"text-teal-700 dark:text-teal-300",dot:"bg-teal-500",dotFill:"fill-teal-600 dark:fill-teal-500",border:"border-teal-400 dark:border-teal-600",accentBorder:"border-l-teal-500 dark:border-l-teal-400"},gray:{bg:"bg-gray-50 dark:bg-gray-950/30",text:"text-gray-700 dark:text-gray-300",dot:"bg-gray-500",dotFill:"fill-gray-600 dark:fill-gray-500",border:"border-gray-400 dark:border-gray-600",accentBorder:"border-l-gray-500 dark:border-l-gray-400"},indigo:{bg:"bg-indigo-50 dark:bg-indigo-950/30",text:"text-indigo-700 dark:text-indigo-300",dot:"bg-indigo-500",dotFill:"fill-indigo-600 dark:fill-indigo-500",border:"border-indigo-400 dark:border-indigo-600",accentBorder:"border-l-indigo-500 dark:border-l-indigo-400"}}[t??"blue"]}function ze(t){const n=new Date(t);return n.setHours(0,0,0,0),n}function me({event:t,variant:n="full",badgeVariant:s="colored",onClick:r,className:o,showTime:h=!0,showDescription:i=!1,showParticipants:b=!1,style:k,disablePopover:l=!1,renderPopover:j,enableDrag:N=!1,enablePageTransition:x=!1,pageTransitionDuration:f=400}){const u=se(t.color),[w,v]=a.useState(!1),[E,T]=a.useState(!1),[L,I]=a.useState(!1),[W,A]=a.useState(null),M=a.useRef(null),$=le.useOptionalDragDrop(),S=t.endDate<ze(new Date),B=t.isCanceled??!1,G=N&&$&&!B&&!S,p=t.data,y=p?.meetingTookPlace??t.meetingTookPlace??!1,_=B?e.jsx(dt,{className:"h-3 w-3 text-zinc-800 dark:text-zinc-200"}):y?e.jsx(lt,{className:d.cn("h-3 w-3",u.text)}):null,H=t.scheduleTypeName||p?.scheduleTypeName||p?.typeName,P=p?.productName,D=p?.nrParticipant,c=p?.siteName,m=p?.siteCity,C=[c,m].filter(Boolean).join(", "),R=a.useCallback(()=>{if(!E){if(l&&r){r(t);return}if(x&&M.current){const q=M.current.getBoundingClientRect();A(q),I(!0)}else l||v(!0)}},[E,l,r,t,x]);a.useCallback(()=>{I(!1),A(null),l||v(!0)},[l]);const z=a.useCallback(()=>{v(!1)},[]),K=a.useCallback(q=>{G&&(q.dataTransfer.effectAllowed="move",q.dataTransfer.setData("text/plain",t.id),T(!0),$?.startDrag?.(t))},[G,t,$]),O=a.useCallback(()=>{T(!1),$?.isDragging&&$.endDrag?.()},[$]);if(n==="dot"){const q=e.jsx("button",{type:"button",onClick:R,className:d.cn("size-2 rounded-full cursor-pointer transition-opacity",S?"bg-gray-400":u.dot,t.isCanceled&&"opacity-50",o),style:k,"aria-label":t.title});return l?e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:q}),e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-medium",children:t.title}),e.jsx("div",{className:"text-xs opacity-80",children:g.formatEventTimeDisplay(t)})]})})]}):e.jsxs(Z,{open:w,onOpenChange:v,children:[e.jsx(Q,{asChild:!0,children:e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:q}),e.jsx(J,{children:e.jsx("div",{className:"font-medium",children:t.title})})]})}),e.jsx(X,{className:"w-80",children:j?j({event:t,onClose:z}):e.jsx(xe,{event:t,onClose:z})})]})}if(n==="compact"){const q=e.jsxs("div",{role:"button",tabIndex:0,draggable:!!G,onDragStart:K,onDragEnd:O,onClick:l?R:void 0,onKeyDown:U=>{(U.key==="Enter"||U.key===" ")&&(U.preventDefault(),R())},className:d.cn("group flex w-full relative items-center shadow-[0_0_1px_rgba(0,0,0,0.3)] gap-0 rounded px-1.5 py-1 text-left text-xs transition-colors hover:opacity-80",G?"cursor-grab active:cursor-grabbing":"cursor-pointer",E&&"opacity-50",B||S?"bg-zinc-100 dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400 line-through":[s==="colored"&&[u.bg,u.text],s==="mixed"&&[u.bg,u.text],s==="dot"&&"bg-muted/50"],o),style:k,children:[["dot","mixed"].includes(s)&&!S&&e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",className:"event-dot absolute -top-1 -left-1 shrink-0","aria-hidden":"true",focusable:"false",children:e.jsx("circle",{cx:"4",cy:"4",r:"4",className:u.dotFill})}),e.jsx("span",{className:"flex-1 min-w-0 overflow-hidden",children:e.jsxs("span",{className:"",children:[e.jsx("span",{className:"relative block overflow-hidden whitespace-nowrap text-xs leading-tight",style:{maskImage:"linear-gradient(to right, transparent 0, black 8px, black calc(100% - 8px), transparent 100%)",WebkitMaskImage:"linear-gradient(to right, transparent 0, black 8px, black calc(100% - 8px), transparent 100%)"},children:e.jsxs("span",{className:"inline-flex event-marquee",children:[e.jsx("span",{className:"shrink-0 px-1",children:t.title}),e.jsx("span",{className:"shrink-0 px-1",children:"•"}),e.jsx("span",{"aria-hidden":"true",className:"shrink-0 px-1",children:t.title}),e.jsx("span",{"aria-hidden":"true",className:"shrink-0 px-1",children:"•"})]})}),e.jsx("div",{className:d.cn("w-fit mt-0.5 text-[10px] px-1 py-0.5 border border-dashed rounded-full font-medium",S?"border-zinc-400 dark:border-zinc-600":u.border),children:g.formatEventTimeDisplay(t)})]})}),e.jsx("div",{className:"flex gap-0.5",children:_})]});return l?e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:q}),e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-medium",children:t.title}),e.jsx("div",{className:"text-xs text-muted-foreground tabular-nums",children:g.formatEventTimeDisplay(t)})]})})]}):e.jsxs(Z,{open:w,onOpenChange:v,children:[e.jsx(Q,{asChild:!0,children:q}),e.jsx(X,{className:"w-80",children:j?j({event:t,onClose:z}):e.jsx(xe,{event:t,onClose:z})})]})}const F=e.jsxs("button",{type:"button",onClick:R,className:d.cn("group relative flex w-full flex-col gap-1 rounded-md border-l-[3px] px-2 py-1.5 text-left transition-all","shadow-[0_1px_3px_rgba(0,0,0,0.08)] hover:shadow-[0_2px_6px_rgba(0,0,0,0.12)]","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",B||S?"bg-zinc-100 dark:bg-zinc-800 border-l-zinc-400 dark:border-l-zinc-600 text-zinc-500 dark:text-zinc-400 line-through":[s==="colored"&&[u.bg,u.accentBorder,u.text],s==="mixed"&&[u.bg,u.accentBorder,u.text],s==="dot"&&"bg-muted/50 border-l-neutral-400 dark:border-l-neutral-600"],o),style:k,children:[e.jsxs("div",{className:"flex items-start justify-between gap-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[["dot","mixed"].includes(s)&&!S&&!B&&e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",className:"event-dot shrink-0","aria-hidden":"true",focusable:"false",children:e.jsx("circle",{cx:"4",cy:"4",r:"4",className:u.dotFill})}),e.jsxs("span",{className:d.cn("text-sm font-medium truncate",!S&&!B&&s!=="dot"&&u.text,B&&"line-through"),children:[t.title,H&&e.jsxs("span",{className:"font-normal opacity-75",children:[" ","- ",H]})]})]}),_]}),P&&e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:P}),D!=null&&e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx(Se,{className:"h-3 w-3 shrink-0"}),e.jsxs("span",{children:[D," participant",D!==1?"s":""]})]}),h&&e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx(Ee,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{children:g.formatEventTimeDisplay(t)})]}),C&&e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx(qe,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:C})]}),i&&t.description&&e.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2",children:t.description}),b&&t.participants&&t.participants.length>0&&e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx(Se,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:t.participants.map(q=>q.name).join(", ")})]})]});return l?e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:F}),e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-medium",children:t.title}),e.jsx("div",{className:"text-xs text-muted-foreground tabular-nums",children:g.formatEventTimeDisplay(t)})]})})]}):e.jsxs(Z,{open:w,onOpenChange:v,children:[e.jsx(Q,{asChild:!0,children:F}),e.jsx(X,{className:"w-80",children:j?j({event:t,onClose:z}):e.jsx(xe,{event:t,onClose:z})})]})}function Ee({className:t}){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("polyline",{points:"12 6 12 12 16 14"})]})}function lt({className:t}){return e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:e.jsx("path",{d:"M20 6 9 17l-5-5"})})}function dt({className:t}){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[e.jsx("path",{d:"M18 6 6 18"}),e.jsx("path",{d:"m6 6 12 12"})]})}function Se({className:t}){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[e.jsx("path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"}),e.jsx("circle",{cx:"9",cy:"7",r:"4"}),e.jsx("path",{d:"M22 21v-2a4 4 0 0 0-3-3.87"}),e.jsx("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]})}function qe({className:t}){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[e.jsx("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.jsx("circle",{cx:"12",cy:"10",r:"3"})]})}function xe({event:t,onClose:n}){const s=se(t.color),r=t.isCanceled??!1;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:d.cn("size-4 rounded shrink-0 mt-0.5",s.dot)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:d.cn("font-semibold text-lg",r&&"line-through opacity-50"),children:t.title}),e.jsxs("div",{className:"flex items-center gap-1 text-sm text-muted-foreground mt-1",children:[e.jsx(Ee,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"tabular-nums",children:g.formatEventTimeDisplay(t)})]})]})]}),t.description&&e.jsx("p",{className:"text-sm text-muted-foreground",children:t.description}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[t.isAllDay&&e.jsx("span",{className:"text-xs bg-muted px-2 py-0.5 rounded-full font-medium",children:"All day"}),t.isRecurring&&e.jsx("span",{className:"text-xs bg-muted px-2 py-0.5 rounded-full font-medium",children:"Recurring"}),r&&e.jsx("span",{className:"text-xs bg-red-100 dark:bg-red-950/30 text-red-700 dark:text-red-300 px-2 py-0.5 rounded-full font-medium",children:"Canceled"})]}),e.jsx("div",{className:"flex justify-end pt-2 border-t",children:e.jsx("button",{type:"button",onClick:n,className:"text-xs text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-muted transition-colors",children:"Close"})})]})}function Le({event:t,position:n,hourHeight:s=96,badgeVariant:r="colored",onClick:o,className:h,disablePopover:i=!1,renderPopover:b,enableDrag:k=!0}){const l=se(t.color),[j,N]=a.useState(!1),[x,f]=a.useState(!1),u=le.useOptionalDragDrop(),w=(t.endDate.getTime()-t.startDate.getTime())/(1e3*60),v=w/60*s-8,E=t.endDate<ze(new Date),T=t.isCanceled??!1,L=k&&u&&!T&&!E,I=w<35,W=w>25,A=w>=45,M=t.data,$=t.scheduleTypeName||M?.scheduleTypeName||M?.typeName,S=M?.productName,B=M?.nrParticipant,G=M?.siteName,p=M?.siteCity,y=[G,p].filter(Boolean).join(", "),_=r==="dot",H=a.useCallback(()=>{x||(i&&o?o(t):i||N(!0))},[x,i,o,t]),P=a.useCallback(()=>{N(!1)},[]),D=a.useCallback(z=>{if(!L)return;z.dataTransfer.effectAllowed="move",z.dataTransfer.setData("text/plain",t.id);const K=z.currentTarget,O=K.getBoundingClientRect();z.dataTransfer.setDragImage(K,z.clientX-O.left,z.clientY-O.top),f(!0),u?.startDrag?.(t)},[L,t,u]),c=a.useCallback(()=>{f(!1),u?.isDragging&&u.endDrag?.()},[u]),m=a.useCallback(z=>{(z.key==="Enter"||z.key===" ")&&(z.preventDefault(),H())},[H]),C=e.jsxs("div",{role:"button",tabIndex:0,draggable:!!L,onDragStart:D,onDragEnd:c,onKeyDown:m,onClick:x?void 0:H,className:d.cn("group flex w-full select-none flex-col gap-0.5 overflow-hidden rounded-md border-l-[3px] px-2 py-1.5 text-xs text-left","shadow-[0_1px_3px_rgba(0,0,0,0.08)] hover:shadow-[0_2px_6px_rgba(0,0,0,0.12)]","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","transition-all",L?"cursor-grab active:cursor-grabbing":"cursor-pointer",x&&"opacity-50",T||E?"bg-zinc-100 dark:bg-zinc-800 border-l-zinc-400 dark:border-l-zinc-600 text-zinc-500 dark:text-zinc-400 line-through":[!_&&[l.bg,l.accentBorder,l.text],_&&"bg-neutral-50 dark:bg-neutral-900 border-l-neutral-400 dark:border-l-neutral-600"],I&&"py-0 justify-center",h),style:{height:`${Math.max(v,20)}px`},children:[e.jsxs("div",{className:"flex items-start gap-1.5 min-w-0",children:[["mixed","dot"].includes(r)&&!E&&!T&&e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",className:"event-dot shrink-0","aria-hidden":"true",focusable:"false",children:e.jsx("circle",{cx:"4",cy:"4",r:"4",className:l.dotFill})}),e.jsx("div",{className:"flex-1 min-w-0 overflow-hidden",children:e.jsxs("p",{className:d.cn("font-semibold truncate leading-tight",!E&&!T&&_&&"text-foreground"),children:[t.title,$&&e.jsxs("span",{className:"font-normal opacity-75",children:[" ","- ",$]})]})})]}),A&&S&&e.jsx("p",{className:d.cn("text-[11px] truncate leading-tight",_?"text-muted-foreground":"opacity-80"),children:S}),A&&B!=null&&e.jsxs("div",{className:d.cn("flex items-center gap-1 text-[11px] leading-tight",_?"text-muted-foreground":"opacity-80"),children:[e.jsx(Se,{className:"h-3 w-3 shrink-0"}),e.jsxs("span",{children:[B," participant",B!==1?"s":""]})]}),W&&e.jsxs("div",{className:d.cn("flex items-center gap-1 text-[11px] tabular-nums leading-tight",_?"text-muted-foreground":"opacity-90"),children:[e.jsx(Ee,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{children:g.formatEventTimeDisplay(t)})]}),A&&y&&e.jsxs("div",{className:d.cn("flex items-center gap-1 text-[11px] truncate leading-tight",_?"text-muted-foreground":"opacity-80"),children:[e.jsx(qe,{className:"h-3 w-3 shrink-0"}),e.jsx("span",{className:"truncate",children:y})]})]}),R=e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs("div",{className:"font-medium",children:[t.title,$&&e.jsxs("span",{className:"font-normal opacity-75",children:[" ","- ",$]})]}),S&&e.jsx("div",{className:"text-xs text-muted-foreground",children:S}),B!=null&&e.jsxs("div",{className:"text-xs text-muted-foreground",children:[B," participant",B!==1?"s":""]}),e.jsx("div",{className:"text-xs text-muted-foreground tabular-nums",children:g.formatEventTimeDisplay(t)}),y&&e.jsx("div",{className:"text-xs text-muted-foreground",children:y})]})});return i?e.jsx("div",{className:"absolute p-0.5",style:{top:`${n.top}px`,left:`${n.left}%`,width:n.minWidth?`max(${n.minWidth}px, ${n.width}%)`:`${n.width}%`,minWidth:n.minWidth?`${n.minWidth}px`:void 0},children:e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:C}),R]})}):e.jsx("div",{className:"absolute p-0.5",style:{top:`${n.top}px`,left:`${n.left}%`,width:n.minWidth?`max(${n.minWidth}px, ${n.width}%)`:`${n.width}%`,minWidth:n.minWidth?`${n.minWidth}px`:void 0},children:e.jsxs(Z,{open:j,onOpenChange:N,children:[e.jsx(Q,{asChild:!0,children:C}),e.jsx(X,{className:"w-80",children:b?b({event:t,onClose:P}):e.jsx(xe,{event:t,onClose:P})})]})})}function ct({event:t,spanDays:n,isStart:s,isEnd:r,onClick:o,className:h,disablePopover:i=!1,renderPopover:b}){const k=se(t.color),[l,j]=a.useState(!1),N=t.endDate<ze(new Date),x=t.isCanceled??!1,f=a.useCallback(()=>{i&&o?o(t):i||j(!0)},[i,o,t]),u=a.useCallback(()=>{j(!1)},[]),w=e.jsx("button",{type:"button",onClick:f,className:d.cn("flex h-5 items-center px-1.5 text-xs font-medium transition-opacity hover:opacity-80",x||N?"bg-zinc-200 dark:bg-zinc-700 text-zinc-500 dark:text-zinc-400 line-through":[k.dot,"text-white"],s&&"rounded-l",r&&"rounded-r",!s&&"border-l-0",!r&&"border-r-0",h),style:{width:`${n*100}%`},children:s&&e.jsx("span",{className:"truncate",children:t.title})}),v=e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-medium",children:t.title}),e.jsx("div",{className:"text-xs text-muted-foreground tabular-nums",children:g.formatEventTimeDisplay(t)})]})});return i?e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:w}),v]}):e.jsxs(Z,{open:l,onOpenChange:j,children:[e.jsx(Q,{asChild:!0,children:w}),e.jsx(X,{className:"w-80",children:b?b({event:t,onClose:u}):e.jsx(xe,{event:t,onClose:u})})]})}if(typeof window<"u"&&!document.getElementById("inno-calendar-event-marquee-style")){const t=document.createElement("style");t.id="inno-calendar-event-marquee-style",t.innerHTML=`
2
+ @keyframes event-marquee {
3
+ 0% { transform: translateX(0); }
4
+ 100% { transform: translateX(-50%); }
5
+ }
6
+ .event-marquee {
7
+ animation: event-marquee 28s linear infinite;
8
+ will-change: transform;
9
+ }
10
+ `,document.head.appendChild(t)}const Be=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,$e=d.clsx,Ge=(t,n)=>s=>{var r;if(n?.variants==null)return $e(t,s?.class,s?.className);const{variants:o,defaultVariants:h}=n,i=Object.keys(o).map(l=>{const j=s?.[l],N=h?.[l];if(j===null)return null;const x=Be(j)||Be(N);return o[l][x]}),b=s&&Object.entries(s).reduce((l,j)=>{let[N,x]=j;return x===void 0||(l[N]=x),l},{}),k=n==null||(r=n.compoundVariants)===null||r===void 0?void 0:r.reduce((l,j)=>{let{class:N,className:x,...f}=j;return Object.entries(f).every(u=>{let[w,v]=u;return Array.isArray(v)?v.includes({...h,...b}[w]):{...h,...b}[w]===v})?[...l,N,x]:l},[]);return $e(t,i,k,s?.class,s?.className)},Ue=Ge("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input active:!bg-zinc-100 hover:!bg-zinc-50 active:bg-white !bg-white hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),oe=a.forwardRef(({className:t,variant:n,size:s,loading:r,disabled:o,children:h,...i},b)=>e.jsxs("button",{className:d.cn(Ue({variant:n,size:s,className:t})),ref:b,disabled:o||r,...i,children:[r&&e.jsxs("svg",{className:"animate-spin -ml-1 mr-2 size-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),h]}));oe.displayName="Button";const Ke=(...t)=>t.filter((n,s,r)=>!!n&&n.trim()!==""&&r.indexOf(n)===s).join(" ").trim();const ut=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const xt=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(n,s,r)=>r?r.toUpperCase():s.toLowerCase());const Re=t=>{const n=xt(t);return n.charAt(0).toUpperCase()+n.slice(1)};var mt={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const ht=t=>{for(const n in t)if(n.startsWith("aria-")||n==="role"||n==="title")return!0;return!1};const pt=a.forwardRef(({color:t="currentColor",size:n=24,strokeWidth:s=2,absoluteStrokeWidth:r,className:o="",children:h,iconNode:i,...b},k)=>a.createElement("svg",{ref:k,...mt,width:n,height:n,stroke:t,strokeWidth:r?Number(s)*24/Number(n):s,className:Ke("lucide",o),...!h&&!ht(b)&&{"aria-hidden":"true"},...b},[...i.map(([l,j])=>a.createElement(l,j)),...Array.isArray(h)?h:[h]]));const Ae=(t,n)=>{const s=a.forwardRef(({className:r,...o},h)=>a.createElement(pt,{ref:h,iconNode:n,className:Ke(`lucide-${ut(Re(t))}`,`lucide-${t}`,r),...o}));return s.displayName=Re(t),s};const ft=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],gt=Ae("check",ft);const yt=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],bt=Ae("chevron-right",yt);const jt=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],wt=Ae("circle",jt),Me=V.Root,Te=V.Trigger,vt=ee.forwardRef(({className:t,inset:n,children:s,...r},o)=>e.jsxs(V.SubTrigger,{ref:o,className:d.cn("flex cursor-default select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",n&&"pl-8",t),...r,children:[s,e.jsx(bt,{className:"ml-auto h-4 w-4"})]}));vt.displayName=V.SubTrigger.displayName;const Nt=ee.forwardRef(({className:t,...n},s)=>e.jsx(V.SubContent,{ref:s,className:d.cn("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...n}));Nt.displayName=V.SubContent.displayName;const je=ee.forwardRef(({className:t,sideOffset:n=4,...s},r)=>e.jsx(V.Portal,{children:e.jsx(V.Content,{ref:r,sideOffset:n,className:d.cn("z-50 rounded-xl border bg-popover p-1 text-popover-foreground shadow-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...s})}));je.displayName=V.Content.displayName;const we=ee.forwardRef(({className:t,inset:n,...s},r)=>e.jsx(V.Item,{ref:r,className:d.cn("relative flex cursor-pointer select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n&&"pl-8",t),...s}));we.displayName=V.Item.displayName;const kt=ee.forwardRef(({className:t,children:n,checked:s=!1,...r},o)=>e.jsxs(V.CheckboxItem,{ref:o,className:d.cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),checked:s,...r,children:[e.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:e.jsx(V.ItemIndicator,{children:e.jsx(gt,{className:"h-4 w-4"})})}),n]}));kt.displayName=V.CheckboxItem.displayName;const Dt=ee.forwardRef(({className:t,children:n,...s},r)=>e.jsxs(V.RadioItem,{ref:r,className:d.cn("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...s,children:[e.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:e.jsx(V.ItemIndicator,{children:e.jsx(wt,{className:"h-2 w-2 fill-current"})})}),n]}));Dt.displayName=V.RadioItem.displayName;const Ct=ee.forwardRef(({className:t,inset:n,...s},r)=>e.jsx(V.Label,{ref:r,className:d.cn("px-2 py-1.5 text-sm font-semibold",n&&"pl-8",t),...s}));Ct.displayName=V.Label.displayName;const St=ee.forwardRef(({className:t,...n},s)=>e.jsx(V.Separator,{ref:s,className:d.cn("-mx-1 my-1 h-px bg-muted",t),...n}));St.displayName=V.Separator.displayName;const Mt=Ge("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function Xe({className:t,variant:n,...s}){return e.jsx("div",{className:d.cn(Mt({variant:n}),t),...s})}function Tt({className:t}){return e.jsx("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"m15 18-6-6 6-6"})})}function zt({className:t}){return e.jsx("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"m9 18 6-6-6-6"})})}const Et=["January","February","March","April","May","June","July","August","September","October","November","December"];function Ye({date:t,view:n,events:s=[],onNavigatePrev:r,onNavigateNext:o,weekStartsOn:h=1,showEventCount:i=!0,className:b}){const k=Et[t.getMonth()],l=t.getFullYear(),j=i?g.getEventsCountInView(s,t,n,h):0,N=g.getRangeText(t,n);return e.jsxs("div",{className:d.cn("min-w-0 flex-1",b),children:[e.jsxs("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-wrap",children:[e.jsxs("span",{className:"text-base sm:text-lg font-semibold truncate",children:[k," ",l]}),i&&e.jsx(Xe,{variant:"outline",className:"px-1 sm:px-1.5 text-[10px] sm:text-xs shrink-0",children:j})]}),e.jsxs("div",{className:"flex items-center gap-1.5 sm:gap-2",children:[e.jsx(oe,{variant:"outline",size:"icon",className:"size-5 sm:size-6 [&_svg]:size-3 sm:[&_svg]:size-4",onClick:r,children:e.jsx(Tt,{})}),e.jsx("p",{className:"text-xs sm:text-sm text-muted-foreground truncate",children:N}),e.jsx(oe,{variant:"outline",size:"icon",className:"size-5 sm:size-6 [&_svg]:size-3 sm:[&_svg]:size-4",onClick:o,children:e.jsx(zt,{})})]})]})}const Lt=["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];function Je({onClick:t,className:n}){const s=new Date;return e.jsxs("button",{type:"button",className:d.cn("flex size-11 sm:size-14 flex-col items-start overflow-hidden rounded-lg border shrink-0","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","hover:bg-accent/50 transition-colors",n),onClick:t,children:[e.jsx("p",{className:"flex h-4 sm:h-6 w-full items-center justify-center bg-primary text-center text-[10px] sm:text-xs font-semibold text-primary-foreground",children:Lt[s.getMonth()]}),e.jsx("p",{className:"flex w-full flex-1 items-center justify-center text-sm sm:text-lg font-bold",children:s.getDate()})]})}function At({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M8 2v4"}),e.jsx("path",{d:"M16 2v4"}),e.jsx("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"}),e.jsx("path",{d:"M3 10h18"}),e.jsx("path",{d:"M8 14h.01"}),e.jsx("path",{d:"M12 14h.01"}),e.jsx("path",{d:"M16 14h.01"}),e.jsx("path",{d:"M8 18h.01"}),e.jsx("path",{d:"M12 18h.01"}),e.jsx("path",{d:"M16 18h.01"})]})}function be({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}),e.jsx("path",{d:"M9 8h7"}),e.jsx("path",{d:"M8 12h6"}),e.jsx("path",{d:"M11 16h5"})]})}function He({className:t}){return e.jsx("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("path",{d:"m6 9 6 6 6-6"})})}function Wt({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function Ie({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M5 12h14"}),e.jsx("path",{d:"M12 5v14"})]})}function _t({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{width:"7",height:"7",x:"3",y:"3",rx:"1"}),e.jsx("rect",{width:"7",height:"7",x:"3",y:"14",rx:"1"}),e.jsx("path",{d:"M14 4h7"}),e.jsx("path",{d:"M14 9h7"}),e.jsx("path",{d:"M14 15h7"}),e.jsx("path",{d:"M14 20h7"})]})}function Bt({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}),e.jsx("path",{d:"M12 3v18"})]})}function $t({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}),e.jsx("path",{d:"M3 12h18"}),e.jsx("path",{d:"M12 3v18"})]})}function Rt({className:t}){return e.jsxs("svg",{className:t,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}),e.jsx("path",{d:"M3 9h18"}),e.jsx("path",{d:"M3 15h18"}),e.jsx("path",{d:"M9 3v18"}),e.jsx("path",{d:"M15 3v18"})]})}const Ht=[{value:"day",label:"Day",icon:_t},{value:"week",label:"Week",icon:Bt},{value:"month",label:"Month",icon:$t},{value:"year",label:"Year",icon:Rt}],Oe=[{value:"timeline-day",label:"1 Day",icon:be},{value:"timeline-3day",label:"3 Days",icon:be},{value:"timeline-week",label:"7 Days",icon:be}];function It({currentDate:t,view:n,events:s=[],onNavigateToday:r,onNavigatePrev:o,onNavigateNext:h,onNavigate:i,onViewChange:b,onAddEvent:k,availableViews:l=["day","week","month","agenda"],showTimelineViews:j=!1,timelineViews:N,settingsContent:x,showSettings:f=!1,filterContent:u,actions:w,className:v,weekStartsOn:E=1,labels:T={}}){const L=a.useMemo(()=>({today:"Today",addEvent:"Add Event",calendarView:"Calendar View",resourceView:"Resource View",...T}),[T]),I=()=>{r?.(),i?.("today")},W=()=>{o?.(),i?.("prev")},A=()=>{h?.(),i?.("next")},M=["day","week","month","year","agenda"].includes(n),$=n.startsWith("timeline-")||n.startsWith("resource-"),S=Ht.filter(p=>l.includes(p.value)),B=M?S.find(p=>p.value===n):null,G=$?Oe.find(p=>p.value===n):null;return e.jsxs("div",{className:d.cn("flex flex-col w-full gap-3 mb-2",v),children:[e.jsxs("div",{className:"flex lg:flex-row flex-col w-full justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 min-w-0",children:[e.jsx(Je,{onClick:I}),e.jsx(Ye,{date:t,view:n,events:s,onNavigatePrev:W,onNavigateNext:A,weekStartsOn:E})]}),k&&e.jsx(oe,{size:"icon",className:"shrink-0 lg:hidden",onClick:k,children:e.jsx(Ie,{className:"size-4"})})]}),e.jsxs("div",{className:"flex items-center gap-1.5 sm:gap-2 overflow-x-auto pb-1 -mb-1 scrollbar-none",children:[b&&S.length>0&&e.jsxs(Me,{children:[e.jsxs(Te,{className:d.cn("inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors","h-10 px-2 sm:px-3 gap-1 sm:gap-1.5 shrink-0",M?"bg-primary text-primary-foreground hover:bg-primary/90":"border border-input bg-background hover:bg-accent hover:text-accent-foreground"),children:[e.jsx(At,{className:"size-4"}),e.jsx("span",{className:"text-xs sm:text-sm font-medium",children:B?.label??L.calendarView}),e.jsx(He,{className:"size-3 opacity-60"})]}),e.jsx(je,{align:"start",className:"min-w-[120px]",children:S.map(p=>{const y=p.icon;return e.jsxs(we,{onClick:()=>b(p.value),className:d.cn("gap-2",n===p.value&&"bg-accent"),children:[e.jsx(y,{className:"size-4"}),e.jsx("span",{children:p.label})]},p.value)})})]}),j&&b&&e.jsxs(Me,{children:[e.jsxs(Te,{className:d.cn("inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors","h-10 px-2 sm:px-3 gap-1 sm:gap-1.5 shrink-0",$?"bg-primary text-primary-foreground hover:bg-primary/90":"border border-input bg-white hover:bg-zinc-50 hover:text-accent-foreground"),children:[e.jsx(be,{className:"size-4"}),e.jsx("span",{className:"text-xs sm:text-sm font-medium",children:G?.label??L.resourceView}),e.jsx(He,{className:"size-3 opacity-60"})]}),e.jsx(je,{align:"start",className:"min-w-[120px]",children:Oe.map(p=>{const y=p.icon;return e.jsxs(we,{onClick:()=>b(p.value),className:d.cn("gap-2",n===p.value&&"bg-accent"),children:[e.jsx(y,{className:"size-4"}),e.jsx("span",{children:p.label})]},p.value)})})]}),f&&x&&e.jsxs(Z,{children:[e.jsx(Q,{asChild:!0,children:e.jsx(oe,{variant:"outline",size:"icon",className:"min-w-10 min-h-10 shrink-0 mx-0",children:e.jsx(Wt,{className:"size-4 sm:size-5"})})}),e.jsx(X,{className:"w-auto min-w-80 p-0",align:"end",sideOffset:8,children:e.jsx("div",{className:"max-h-[70vh] overflow-y-auto p-4 space-y-6",children:x})})]}),w,k&&e.jsxs(oe,{className:"hidden lg:flex shrink-0 max-h-10",onClick:k,children:[e.jsx(Ie,{className:"size-4"}),L.addEvent]})]})]}),u&&e.jsx("div",{className:"flex items-center gap-2 pb-1 -mb-1 scrollbar-none",children:u})]})}function Ot({events:t,date:n,daysAhead:s=60,badgeVariant:r="colored",onEventClick:o,className:h,renderEvent:i,renderPopover:b,slots:k,classNames:l}){const j=a.useMemo(()=>{const x=new Date(n);x.setHours(0,0,0,0);const f=new Date(x);return f.setDate(f.getDate()+s),t.filter(u=>u.endDate>=x&&u.startDate<=f)},[t,s,n]),N=a.useMemo(()=>{const x=g.groupEventsByDate(j),f=[];for(const[u,w]of x)f.push({date:new Date(u),dateKey:u,events:w});return f.sort((u,w)=>u.date.getTime()-w.date.getTime()),f},[j]);return N.length===0?e.jsx("div",{className:d.cn("flex flex-col items-center justify-center h-full py-12",h),children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-muted-foreground",children:"No events found"}),e.jsx("p",{className:"text-sm text-muted-foreground/70",children:"No events scheduled for this period"})]})}):e.jsxs("div",{className:d.cn("flex flex-col h-full overflow-auto",l?.agendaList,h),children:[e.jsx("div",{className:"sticky top-0 z-10 bg-background border-b px-4 py-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h2",{className:"text-lg font-medium",children:"Schedule"}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:[j.length," event",j.length!==1?"s":""]})]})}),e.jsx("div",{className:"flex-1",children:N.map(({date:x,dateKey:f,events:u})=>{const w=g.isToday(x),v=x.toLocaleDateString([],{weekday:"short"}),E=x.getDate(),T=x.toLocaleDateString([],{month:"short"});return e.jsxs("div",{className:d.cn("",l?.agendaDayGroup),children:[e.jsx("div",{className:d.cn("sticky top-[52px] z-10 bg-background px-4 py-3 border-b",l?.agendaDayHeader),children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center min-w-[40px]",children:[e.jsx("span",{className:d.cn("text-[11px] font-medium uppercase tracking-wide",w?"text-primary":"text-muted-foreground"),children:v}),e.jsx("span",{className:d.cn("flex items-center justify-center rounded-full mt-0.5","size-10 text-xl font-normal",w?"bg-primary text-primary-foreground":"text-foreground"),children:E})]}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:[T," ",x.getFullYear()]})]})}),e.jsx("div",{className:"px-4 py-3 space-y-2 border-b last:border-b-0",children:u.map(L=>i?e.jsx("div",{children:i({event:L,variant:"full"})},L.id):e.jsx(me,{event:L,variant:"full",badgeVariant:r,onClick:o,disablePopover:!!o&&!b,renderPopover:b,showTime:!0,showDescription:!0,showParticipants:!0,...l?.eventCard&&{className:l.eventCard}},L.id))})]},f)})})]})}const pe=360,fe=480,ke=280;function Ze({isOpen:t,onClose:n,date:s,events:r,anchorRect:o,badgeVariant:h="colored",onEventClick:i,renderEvent:b,renderPopover:k,className:l}){const j=a.useRef(null),N=a.useRef(null),[x,f]=a.useState("closed"),u=a.useMemo(()=>[...r].sort((W,A)=>W.startDate.getTime()-A.startDate.getTime()),[r]),w=a.useMemo(()=>{if(!o)return{top:0,left:0,width:pe,maxHeight:fe};const W=typeof window<"u"?window.innerWidth:1200,A=typeof window<"u"?window.innerHeight:800;let M=o.left+o.width/2-pe/2;M=Math.max(16,Math.min(M,W-pe-16));const $=Math.min(r.length*68+80,fe);let S=o.top+o.height/2-$/2;return S=Math.max(16,Math.min(S,A-$-16)),{top:S,left:M,width:pe,maxHeight:fe}},[o,r.length]);a.useLayoutEffect(()=>{if(t&&o)f("entering"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{f("open")})});else if(!t&&x==="open"){f("exiting");const W=setTimeout(()=>{f("closed")},ke);return()=>clearTimeout(W)}},[t,o]),a.useEffect(()=>{if(x==="closed")return;const W=A=>{A.key==="Escape"&&(A.stopPropagation(),n())};return document.addEventListener("keydown",W),()=>document.removeEventListener("keydown",W)},[x,n]),a.useEffect(()=>{x==="open"&&N.current&&N.current.focus()},[x]);const v=a.useCallback(W=>{W.target===j.current&&n()},[n]);if(x==="closed")return null;const E=x==="entering"||x==="exiting",T=E&&o?{position:"fixed",top:o.top,left:o.left,width:o.width,height:o.height,maxHeight:o.height,opacity:x==="entering"?.7:0,transform:"scale(1)",borderRadius:"8px"}:{position:"fixed",top:w.top,left:w.left,width:w.width,maxHeight:w.maxHeight,opacity:1,transform:"scale(1)",borderRadius:"12px"},L=E?0:1,I=s.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric"});return e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:j,role:"presentation",onClick:v,className:"ic-expansion-backdrop",style:{position:"fixed",inset:0,zIndex:50,backgroundColor:"rgba(0, 0, 0, 0.2)",opacity:L,transition:`opacity ${ke}ms cubic-bezier(0.32, 0.72, 0, 1)`}}),e.jsxs("div",{ref:N,role:"dialog","aria-modal":"true","aria-label":`Events for ${I}`,tabIndex:-1,className:d.cn("ic-expansion-panel","bg-background border border-border shadow-2xl overflow-hidden","focus:outline-none",l),style:{...T,zIndex:51,transition:`all ${ke}ms cubic-bezier(0.32, 0.72, 0, 1)`,willChange:"top, left, width, height, max-height, opacity, border-radius"},children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b bg-muted/30",children:[e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:I}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r.length," event",r.length!==1?"s":""]})]}),e.jsx("button",{type:"button",onClick:n,className:"flex items-center justify-center size-7 rounded-full hover:bg-muted transition-colors text-muted-foreground hover:text-foreground","aria-label":"Close",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M18 6 6 18"}),e.jsx("path",{d:"m6 6 12 12"})]})})]}),e.jsxs("div",{className:"overflow-y-auto px-3 py-2 space-y-1.5",style:{maxHeight:`${fe-64}px`},children:[u.map(W=>e.jsx("div",{onPointerDown:A=>A.stopPropagation(),children:b?b({event:W,variant:"compact"}):e.jsx(me,{event:W,variant:"compact",badgeVariant:h,onClick:A=>{n(),i?.(A)},disablePopover:!!i&&!k,renderPopover:k,showTime:!0})},W.id)),r.length===0&&e.jsx("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"No events"})]})]})]})}function Pt({event:t,date:n,onEventClick:s,disablePopover:r,renderPopover:o}){const[h,i]=a.useState(!1),b=se(t.color),k=g.detectAllDayEvent(t),l=g.isSameDay(t.startDate,n),j=g.isSameDay(t.endDate,n),N=k&&g.isSameDay(t.startDate,t.endDate),x=a.useCallback(()=>{r&&s?s(t):r||i(!0)},[r,s,t]),f=a.useCallback(()=>{i(!1)},[]),u=e.jsxs("button",{type:"button",onClick:x,title:g.formatEventTimeDisplay(t),className:d.cn("inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-medium transition-opacity hover:opacity-80","sm:px-2 sm:py-1 sm:text-xs",b.bg,b.text,t.isCanceled&&"opacity-60 line-through"),children:[!N&&l&&!j&&"→ ",!N&&!l&&j&&" ←",!N&&!l&&!j&&"↔ ",e.jsx("span",{className:"truncate max-w-24 sm:max-w-32",children:t.title}),N&&e.jsx("span",{className:"text-[9px] opacity-70 sm:text-[10px]",children:"All day"})]}),w=e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-medium",children:t.title}),e.jsx("div",{className:"text-xs text-muted-foreground tabular-nums",children:g.formatEventTimeDisplay(t)})]})});return r?e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:u}),w]}):e.jsxs(Z,{open:h,onOpenChange:i,children:[e.jsx(Q,{asChild:!0,children:u}),e.jsx(X,{className:"w-80",children:o?o({event:t,onClose:f}):e.jsx(Vt,{event:t,onClose:f})})]})}function Vt({event:t,onClose:n}){const s=se(t.color),r=t.isCanceled??!1;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:d.cn("size-4 rounded shrink-0 mt-0.5",s.dot)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:d.cn("font-semibold text-lg",r&&"line-through opacity-50"),children:t.title}),e.jsx("div",{className:"flex items-center gap-1 text-sm text-muted-foreground mt-1 tabular-nums",children:g.formatEventTimeDisplay(t)})]})]}),t.description&&e.jsx("p",{className:"text-sm text-muted-foreground",children:t.description}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[t.isAllDay&&e.jsx("span",{className:"text-xs bg-muted px-2 py-0.5 rounded-full font-medium",children:"All day"}),r&&e.jsx("span",{className:"text-xs bg-red-100 dark:bg-red-950/30 text-red-700 dark:text-red-300 px-2 py-0.5 rounded-full font-medium",children:"Canceled"})]}),e.jsx("div",{className:"flex justify-end pt-2 border-t",children:e.jsx("button",{type:"button",onClick:n,className:"text-xs text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-muted transition-colors",children:"Close"})})]})}function Qe({events:t,date:n,onEventClick:s,disablePopover:r=!1,renderPopover:o,className:h}){if(t.length===0)return null;const i=t.some(l=>g.detectAllDayEvent(l)&&g.isSameDay(l.startDate,l.endDate)),b=t.some(l=>!g.isSameDay(l.startDate,l.endDate)||g.detectAllDayEvent(l)&&!g.isSameDay(l.startDate,l.endDate)),k=i&&b?"All day / Multi-day":i?"All day":"Multi-day";return e.jsxs("div",{className:d.cn("border-b bg-muted/20 px-2 py-1.5 space-y-1","sm:px-4 sm:py-2",h),children:[e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground sm:text-xs",children:k}),e.jsx("div",{className:"flex flex-wrap gap-1",children:t.map(l=>e.jsx(Pt,{event:l,date:n,onEventClick:s,disablePopover:r,renderPopover:o},l.id))})]})}const Ft=5;function et({slot:t,onSelectionStart:n,onSelectionMove:s,onSelectionEnd:r,isSelected:o=!1,isSelecting:h=!1,disabled:i=!1,ariaLabel:b,children:k,className:l,height:j,style:N,dataAttributes:x}){const f=a.useRef(null),u=a.useRef(!1),w=a.useRef(!1),v=a.useRef(null),[E,T]=a.useState(!1),L=le.useOptionalDragDrop(),I=a.useCallback(p=>{i||p.button!==0&&p.pointerType==="mouse"||(p.preventDefault(),f.current={x:p.clientX,y:p.clientY},u.current=!1,w.current=!0,n?.(t))},[i,t,n]),W=a.useCallback(p=>{if(!(f.current&&w.current&&!i))return;const y=p.clientX-f.current.x,_=p.clientY-f.current.y;Math.sqrt(y*y+_*_)>=Ft&&(u.current=!0)},[i]),A=a.useCallback(p=>{i||(p.buttons>0||h)&&s?.(t)},[i,h,t,s]),M=a.useCallback(()=>{i||(r?.(),f.current=null,u.current=!1,w.current=!1)},[i,r]),$=a.useCallback(p=>{if(!L?.isDragging||i)return;p.preventDefault(),p.dataTransfer.dropEffect="move",T(!0);const y=new Date,_=t.hour??y.getHours(),H=t.minute??(y.getMinutes()>=30?30:0);L.updateDragPreview?.(t.date,_,H)},[L,i,t]),S=a.useCallback(()=>{T(!1)},[]),B=a.useCallback(p=>{p.preventDefault(),T(!1),!(!L?.isDragging||i)&&L.endDrag?.()},[L,i]);a.useEffect(()=>{const p=()=>{w.current&&(w.current=!1,f.current=null,u.current=!1)};return window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p),()=>{window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p)}},[]);const G=a.useCallback(p=>{i||(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),n?.(t),r?.())},[i,t,n,r]);return e.jsx("button",{ref:v,type:"button","aria-label":b,"aria-disabled":i,"aria-pressed":o,disabled:i,onPointerDown:I,onPointerMove:W,onPointerUp:M,onPointerEnter:A,onKeyDown:G,onDragOver:$,onDragLeave:S,onDrop:B,className:d.cn("select-none touch-none cursor-pointer transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",!(h||i)&&"hover:bg-blue-50/60",o&&"bg-blue-100/70",E&&"bg-primary/20 ring-2 ring-primary ring-inset",i&&"cursor-not-allowed opacity-50",l),style:{height:j,...N},...x,children:k})}function We({slot:t,date:n,hour:s,minute:r,ariaLabel:o,...h}){const i=t??{date:n,hour:s??0,minute:r??0},b=o??`Add event at ${(i.hour??0).toString().padStart(2,"0")}:${(i.minute??0).toString().padStart(2,"0")} on ${i.date.toLocaleDateString()}`;return e.jsx(et,{slot:i,ariaLabel:b,...h})}function tt({slot:t,date:n,ariaLabel:s,...r}){const o=t??{date:n},h=s??`Select ${o.date.toLocaleDateString()}`;return e.jsx(et,{slot:o,ariaLabel:h,...r})}const de=96,De=72,Ce=80;function qt({events:t,date:n,visibleHours:s={startHour:0,endHour:24},workingHours:r,slotDuration:o=30,badgeVariant:h="colored",onEventClick:i,onSlotSelect:b,className:k,renderEvent:l,renderPopover:j,slots:N,classNames:x}){const f=60/o,u=100/f,w=a.useMemo(()=>{const D=[];for(let c=0;c<f;c++)D.push(c*o);return D},[f,o]),v=a.useMemo(()=>g.getEventsForDay(t,n),[t,n]),{singleDay:E,multiDay:T}=a.useMemo(()=>g.separateEventsByDuration(v),[v]),L=a.useMemo(()=>{const D=g.calculateOverlappingPositions(E,n,s,de),c=new Map;for(const m of D)c.set(m.event.id,m.position);return c},[E,n,s]),I=a.useMemo(()=>g.getVisibleHoursArray(s),[s]),W=new Date,A=g.isToday(n),M=a.useMemo(()=>{if(!A)return 0;const D=W.getHours()+W.getMinutes()/60;return D<s.startHour||D>s.endHour?-1:(D-s.startHour)*de},[A,s,W]),$=a.useRef(null);a.useLayoutEffect(()=>{const D=$.current;if(!D)return;const c=()=>{let m;if(A){const R=new Date().getHours();m=Math.max(R-1,s.startHour)}else{const R=n.getDay(),z=r?.[R];z?.enabled&&z.from>0?m=Math.max(z.from-1,s.startHour):m=Math.max(7,s.startHour)}const C=(m-s.startHour)*de;D.scrollTo({top:C,behavior:"instant"})};requestAnimationFrame(()=>{requestAnimationFrame(c)})},[n,r,s,A]);const S=le.useOptionalSlotSelection(),B=a.useCallback(D=>{S?.startSelection(D)},[S]),G=a.useCallback(D=>{S?.updateSelection(D)},[S]),p=a.useCallback(()=>{S?.endSelection()},[S]),y=a.useCallback(D=>{i?.(D)},[i]),_=n.toLocaleDateString([],{weekday:"short"}),H=n.getDate(),P=g.isToday(n);return e.jsxs("div",{className:d.cn("flex flex-col h-full",k),children:[e.jsx("div",{className:d.cn("flex items-center gap-3 border-b px-4 py-3",x?.columnHeader,P&&x?.columnHeaderToday),children:e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx("span",{className:d.cn("text-[11px] font-medium uppercase tracking-wide",P?"text-primary":"text-muted-foreground"),children:_}),e.jsx("span",{className:d.cn("flex items-center justify-center rounded-full mt-0.5","size-12 text-3xl font-normal",P?"bg-primary text-primary-foreground":"text-foreground"),children:H})]})}),T.length>0&&e.jsx(Qe,{events:T,date:n,onEventClick:y,disablePopover:!!i&&!j,renderPopover:j,...x?.multiDayBanner&&{className:x.multiDayBanner}}),e.jsx("div",{ref:$,className:d.cn("flex-1 overflow-auto",x?.scrollContainer),children:e.jsxs("div",{className:"relative min-h-full",children:[I.map((D,c)=>{const C=!g.isWorkingHour(n,D,r);return e.jsxs("div",{className:d.cn("relative flex",C&&"bg-calendar-disabled-hour",x?.timeSlot,C?x?.timeSlotNonWorking:x?.timeSlotWorking),style:{height:de},children:[e.jsx("div",{className:d.cn("relative flex-shrink-0 border-r border-border/50 bg-zinc-50 dark:bg-zinc-900",x?.timeGutter),style:{width:De},children:e.jsx("div",{className:"absolute -top-2.5 right-1 sm:right-2 flex h-5 items-center",children:c!==0&&e.jsx("span",{className:d.cn("text-[10px] sm:text-xs text-muted-foreground",x?.timeGutterLabel),children:g.formatHourLabel(D)})})}),e.jsxs("div",{className:"relative flex-1",children:[A&&!C&&e.jsx("div",{className:"absolute inset-0 bg-primary/5"}),c!==0&&e.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 border-b border-border/50"}),w.slice(1).map(R=>e.jsx("div",{className:"pointer-events-none absolute inset-x-0 border-b border-dashed border-border/30",style:{top:`${R/60*100}%`}},R)),w.map((R,z)=>{const K={date:n,hour:D,minute:R};return e.jsx(We,{slot:K,onSelectionStart:B,onSelectionMove:G,onSelectionEnd:p,isSelected:S?.isSlotSelected(K)??!1,isSelecting:S?.isSelecting??!1,disabled:C,className:"absolute inset-x-0",style:{top:`${z*u}%`,height:`${u}%`},ariaLabel:`Add event at ${g.formatHourLabel(D)}:${String(R).padStart(2,"0")}`},R)})]})]},D)}),e.jsx("div",{className:"absolute top-0 bottom-0 right-0 pointer-events-none",style:{left:De},children:E.map(D=>{const c=L.get(D.id);if(!c)return null;const m=`calc(${c.width}% - 2px)`,C=`max(${Ce}px, ${m})`;return l?e.jsx("div",{className:"absolute pointer-events-auto p-0.5",style:{top:`${c.top}px`,left:`${c.left}%`,width:C,minWidth:`${Ce}px`},children:l({event:D,position:c})},D.id):e.jsx(Le,{event:D,position:{top:c.top,left:c.left,width:c.width,minWidth:Ce},hourHeight:de,badgeVariant:h,onClick:i,disablePopover:!!i&&!j,renderPopover:j,className:d.cn("pointer-events-auto",x?.eventCard)},D.id)})}),A&&M>=0&&e.jsxs("div",{className:d.cn("absolute left-0 right-0 z-20 flex items-center pointer-events-none",x?.currentTimeIndicator),style:{top:M,left:De},children:[e.jsx("div",{className:"h-2.5 w-2.5 -ml-1 rounded-full bg-red-500"}),e.jsx("div",{className:"flex-1 h-0.5 bg-red-500"})]})]})})]})}const Gt=[{full:"Monday",short:"Mon",tiny:"M"},{full:"Tuesday",short:"Tue",tiny:"T"},{full:"Wednesday",short:"Wed",tiny:"W"},{full:"Thursday",short:"Thu",tiny:"T"},{full:"Friday",short:"Fri",tiny:"F"},{full:"Saturday",short:"Sat",tiny:"S"},{full:"Sunday",short:"Sun",tiny:"S"}],Ut=[{full:"Sunday",short:"Sun",tiny:"S"},{full:"Monday",short:"Mon",tiny:"M"},{full:"Tuesday",short:"Tue",tiny:"T"},{full:"Wednesday",short:"Wed",tiny:"W"},{full:"Thursday",short:"Thu",tiny:"T"},{full:"Friday",short:"Fri",tiny:"F"},{full:"Saturday",short:"Sat",tiny:"S"}],ce=3;function Kt({events:t,date:n,weekStartsOn:s=1,badgeVariant:r="colored",onEventClick:o,onSlotSelect:h,onDayClick:i,className:b,renderEvent:k,renderPopover:l,showMoreMode:j,showMoreEventsInPopover:N=!1,slots:x,classNames:f}){const u=j??(N?"popover":"expand"),w=x?.dayCellHeader,v=x?.dayCellFooter,[E,T]=a.useState(null),[L,I]=a.useState(null),W=a.useMemo(()=>g.generateMonthGrid(n,s),[n,s]),A=a.useMemo(()=>{const y=new Map;for(const _ of W){const H=_.date.toDateString(),P=g.getEventsForDay(t,_.date);P.sort((D,c)=>D.startDate.getTime()-c.startDate.getTime()),y.set(H,P)}return y},[W,t]),M=le.useOptionalSlotSelection(),$=a.useCallback(y=>{M?.startSelection(y)},[M]),S=a.useCallback(y=>{M?.updateSelection(y)},[M]),B=a.useCallback(()=>{M?.endSelection()},[M]),G=a.useCallback(y=>{i?.(y)},[i]),p=s===0?Ut:Gt;return e.jsxs("div",{className:d.cn("flex flex-col h-full overflow-hidden",b),children:[e.jsx("div",{className:"flex flex-col flex-1 overflow-auto",children:e.jsxs("div",{className:"flex flex-col flex-1 min-w-[560px] sm:min-w-0",children:[e.jsx("div",{className:d.cn("grid grid-cols-7 border-b !sticky !top-0 bg-background z-10",f?.weekdayHeader),children:p.map((y,_)=>e.jsxs("div",{className:d.cn("py-2 sm:py-2.5 text-center text-[11px] uppercase font-medium tracking-wide text-muted-foreground",_>=5&&"text-muted-foreground/70",f?.weekdayLabel),children:[e.jsx("span",{className:"sm:hidden",children:y.short}),e.jsx("span",{className:"hidden sm:inline",children:y.short})]},y.full))}),e.jsx("div",{className:d.cn("grid grid-cols-7 auto-rows-min",f?.monthGrid),children:W.map(y=>{const _=y.date.toDateString(),H=A.get(_)||[],P=g.isToday(y.date),D=y.date.getDay()===0||y.date.getDay()===6,c=H.length>ce;return e.jsxs(tt,{date:y.date,dataAttributes:{"data-day-key":_},onSelectionStart:$,onSelectionMove:S,onSelectionEnd:B,isSelected:M?.isSlotSelected({date:y.date})??!1,isSelecting:M?.isSelecting??!1,className:d.cn("relative flex flex-col border-r border-b text-left min-h-[80px] sm:min-h-[100px] overflow-hidden","[&:nth-child(7n)]:border-r-0",!y.isCurrentMonth&&"bg-muted/20",D&&y.isCurrentMonth&&"bg-muted/10",f?.dayCell,P&&f?.dayCellToday,!y.isCurrentMonth&&f?.dayCellOutside,D&&f?.dayCellWeekend),ariaLabel:`${y.date.toLocaleDateString()} - ${H.length} events. Click to create event, double-click to view day.`,children:[e.jsx("div",{className:d.cn("flex items-center justify-center p-1",!y.isCurrentMonth&&"text-muted-foreground/40",f?.dayCellNumber),children:e.jsx("button",{type:"button",onClick:m=>{m.stopPropagation(),G(y.date)},className:d.cn("flex items-center justify-center rounded-full transition-colors","size-7 text-sm font-normal",P?"bg-primary text-primary-foreground":"hover:bg-muted"),children:y.date.getDate()})}),w&&e.jsx(w,{date:y.date,events:H,isToday:P,isCurrentMonth:y.isCurrentMonth,isWeekend:D,view:"month"}),e.jsxs("div",{className:d.cn("flex-1 overflow-hidden px-2 pt-1 pb-1 space-y-1",f?.dayCellContent),children:[H.slice(0,ce).map(m=>e.jsx("div",{onPointerDown:C=>{C.stopPropagation()},children:k?k({event:m,variant:"compact"}):e.jsx(me,{event:m,variant:"compact",badgeVariant:r,onClick:o,disablePopover:!!o&&!l,renderPopover:l,showTime:!1,enableDrag:!0,...f?.eventCardCompact&&{className:f.eventCardCompact}})},m.id)),c&&u==="expand"&&e.jsxs("button",{type:"button",onPointerDown:m=>m.stopPropagation(),onClick:m=>{m.stopPropagation();const C=document.querySelector(`[data-day-key="${_}"]`);I({date:y.date,events:H,rect:C?.getBoundingClientRect()??new DOMRect(window.innerWidth/2-180,window.innerHeight/2-240,0,0)})},className:d.cn("w-full text-left text-xs text-muted-foreground hover:text-foreground hover:underline px-1.5 cursor-pointer",f?.moreEventsIndicator),children:["+",H.length-ce," more"]}),c&&u==="popover"&&e.jsxs(Z,{open:E===_,onOpenChange:m=>T(m?_:null),children:[e.jsx(Q,{asChild:!0,children:e.jsxs("button",{type:"button",onPointerDown:m=>m.stopPropagation(),onClick:m=>{m.stopPropagation(),T(_)},className:d.cn("w-full text-left text-xs text-muted-foreground hover:text-foreground hover:underline px-1.5 cursor-pointer",f?.moreEventsIndicator),children:["+",H.length-ce," more"]})}),e.jsxs(X,{align:"start",side:"right",sideOffset:8,className:"w-72 max-h-80 overflow-y-auto p-2",onPointerDown:m=>m.stopPropagation(),children:[e.jsxs("div",{className:"flex items-center justify-between mb-2 pb-2 border-b",children:[e.jsx("span",{className:"text-sm font-medium",children:y.date.toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"})}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[H.length," events"]})]}),e.jsx("div",{className:"space-y-1.5",children:H.map(m=>e.jsx("div",{children:k?k({event:m,variant:"compact"}):e.jsx(me,{event:m,variant:"compact",badgeVariant:r,onClick:C=>{T(null),o?.(C)},disablePopover:!!o&&!l,renderPopover:l,showTime:!0})},m.id))})]})]}),c&&u==="dayView"&&e.jsxs("div",{onPointerDown:m=>{m.stopPropagation(),G(y.date)},className:d.cn("w-full text-left text-xs text-muted-foreground hover:text-foreground hover:underline px-1.5 cursor-pointer",f?.moreEventsIndicator),children:["+",H.length-ce," more"]})]}),v&&e.jsx(v,{date:y.date,events:H,isToday:P,isCurrentMonth:y.isCurrentMonth,isWeekend:D,view:"month"})]},_)})})]})}),e.jsx(Ze,{isOpen:L!==null,onClose:()=>I(null),date:L?.date??new Date,events:L?.events??[],anchorRect:L?.rect??null,badgeVariant:r,onEventClick:o,renderEvent:k,renderPopover:l})]})}const ve=26,Pe=2,ge=4;function Ve(t,n){const s=g.startOfDay(t);for(let o=0;o<n.length;o++){const h=n[o];if(h&&g.isSameDay(s,h))return o}const r=n[0];return r&&s<g.startOfDay(r)?-1:7}function Xt(t){const n=[...t].sort((r,o)=>{const h=r.endCol-r.startCol,i=o.endCol-o.startCol;return i!==h?i-h:r.startCol-o.startCol}),s=[];return n.map(r=>{let o=-1;for(let i=0;i<s.length;i++){const b=s[i];if(!b)continue;let k=!0;for(let l=r.startCol;l<=r.endCol;l++)if(b[l]){k=!1;break}if(k){o=i;break}}o===-1&&(o=s.length,s.push(new Array(7).fill(!1)));const h=s[o];if(h)for(let i=r.startCol;i<=r.endCol;i++)h[i]=!0;return{...r,row:o}})}function Yt({pe:t,onEventClick:n,disablePopover:s,renderPopover:r}){const[o,h]=a.useState(!1),i=se(t.event.color),b=a.useCallback(()=>{s&&n?n(t.event):s||h(!0)},[s,n,t.event]),k=a.useCallback(()=>{h(!1)},[]),l=e.jsxs("button",{type:"button",onClick:b,className:d.cn("inline-flex items-center gap-1 rounded text-[10px] font-medium transition-opacity hover:opacity-80 mx-0.5 overflow-hidden w-full","sm:text-xs",i.bg,i.text,t.event.isCanceled&&"opacity-60 line-through",t.continuesBefore&&"rounded-l-none -ml-0.5 pl-1",t.continuesAfter&&"rounded-r-none -mr-0.5 pr-1"),style:{height:ve,lineHeight:`${ve}px`,paddingLeft:t.continuesBefore?4:6,paddingRight:t.continuesAfter?4:6},children:[t.continuesBefore&&e.jsx("span",{className:"text-[9px] opacity-60 flex-shrink-0",children:"◂"}),e.jsx("span",{className:"truncate",children:t.event.title}),t.isSingleDayAllDay&&e.jsx("span",{className:"text-[9px] opacity-70 flex-shrink-0 hidden sm:inline",children:"All day"}),t.continuesAfter&&e.jsx("span",{className:"text-[9px] opacity-60 flex-shrink-0",children:"▸"})]}),j=e.jsx(J,{children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx("div",{className:"font-medium",children:t.event.title}),e.jsx("div",{className:"text-xs text-muted-foreground tabular-nums",children:g.formatEventTimeDisplay(t.event)})]})}),N={gridColumn:`${t.startCol+2} / ${t.endCol+3}`,gridRow:t.row+1};return s?e.jsx("div",{style:N,children:e.jsxs(te,{children:[e.jsx(ne,{asChild:!0,children:l}),j]})}):e.jsx("div",{style:N,children:e.jsxs(Z,{open:o,onOpenChange:h,children:[e.jsx(Q,{asChild:!0,children:l}),e.jsx(X,{className:"w-80",children:r?r({event:t.event,onClose:k}):e.jsx(Jt,{event:t.event,onClose:k})})]})})}function Jt({event:t,onClose:n}){const s=se(t.color),r=t.isCanceled??!1;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:d.cn("size-4 rounded shrink-0 mt-0.5",s.dot)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:d.cn("font-semibold text-lg",r&&"line-through opacity-50"),children:t.title}),e.jsx("div",{className:"flex items-center gap-1 text-sm text-muted-foreground mt-1 tabular-nums",children:g.formatEventTimeDisplay(t)})]})]}),t.description&&e.jsx("p",{className:"text-sm text-muted-foreground",children:t.description}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[t.isAllDay&&e.jsx("span",{className:"text-xs bg-muted px-2 py-0.5 rounded-full font-medium",children:"All day"}),r&&e.jsx("span",{className:"text-xs bg-red-100 dark:bg-red-950/30 text-red-700 dark:text-red-300 px-2 py-0.5 rounded-full font-medium",children:"Canceled"})]}),e.jsx("div",{className:"flex justify-end pt-2 border-t",children:e.jsx("button",{type:"button",onClick:n,className:"text-xs text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-muted transition-colors",children:"Close"})})]})}function Zt({events:t,weekDays:n,hourColumnWidth:s,minDayColumnWidth:r,dayColumnWidths:o,onEventClick:h,disablePopover:i=!1,renderPopover:b,className:k}){const l=a.useMemo(()=>{if(t.length===0)return[];const v=t.map(E=>{const T=Ve(E.startDate,n),L=Ve(E.endDate,n),I=Math.max(0,T),W=Math.min(6,L);if(I>6||W<0)return null;const A=T<0,M=L>6,S=g.detectAllDayEvent(E)&&g.isSameDay(E.startDate,E.endDate);return{event:E,startCol:I,endCol:W,continuesBefore:A,continuesAfter:M,isSingleDayAllDay:S}}).filter(Boolean);return Xt(v)},[t,n]);if(l.length===0)return null;const j=Math.max(...l.map(v=>v.row))+1,N=Math.min(j,ge),x=j>ge,f=x?l.filter(v=>v.row>=ge).length:0,u=[`${s}px`,...o.map(v=>v>r?`${v}px`:`minmax(${r}px, 1fr)`)].join(" "),w=N*ve+(N-1)*Pe+8;return e.jsxs("div",{className:d.cn("ic-all-day-row border-b bg-muted/20 relative",k),style:{display:"grid",gridTemplateColumns:u,gridTemplateRows:`repeat(${N}, ${ve}px)`,gap:`${Pe}px 0`,paddingTop:4,paddingBottom:4,minHeight:w},children:[e.jsx("div",{className:"flex items-start justify-center pt-1 text-[10px] font-medium text-muted-foreground",style:{gridColumn:1,gridRow:`1 / span ${N}`},children:e.jsx("span",{className:"hidden sm:inline",children:"All day"})}),n.map((v,E)=>e.jsx("div",{className:"pointer-events-none border-r last:border-r-0",style:{gridColumn:E+2,gridRow:`1 / span ${N}`}},v.toDateString())),l.filter(v=>v.row<ge).map(v=>e.jsx(Yt,{pe:v,onEventClick:h,disablePopover:i,renderPopover:b},v.event.id)),x&&e.jsxs("div",{className:"text-[10px] text-muted-foreground font-medium px-2 flex items-center",style:{gridColumn:`2 / ${n.length+2}`,gridRow:N},children:["+",f," more"]})]})}const ae=96,ue=56,Fe=72,Y=120,ye=100,Qt=3;function en({events:t,date:n,weekStartsOn:s=1,visibleHours:r={startHour:0,endHour:24},workingHours:o,slotDuration:h=30,badgeVariant:i="colored",onEventClick:b,onSlotSelect:k,onDayClick:l,className:j,renderEvent:N,renderPopover:x,slots:f,classNames:u}){const w=60/h,v=100/w,E=a.useMemo(()=>{const c=[];for(let m=0;m<w;m++)c.push(m*h);return c},[w,h]),T=a.useMemo(()=>g.getWeekDays(n,s),[n,s]),L=a.useMemo(()=>g.getVisibleHoursArray(r),[r]),I=a.useMemo(()=>{const c=new Map;for(const m of T){const C=m.toDateString(),R=g.getEventsForDay(t,m),{singleDay:z,multiDay:K}=g.separateEventsByDuration(R),O=g.calculateOverlappingPositions(z,m,r,ae),F=new Map;let q=1;for(const U of O)if(F.set(U.event.id,U.position),U.position.width>0){const re=Math.round(100/U.position.width);q=Math.max(q,re)}c.set(C,{singleDay:z,multiDay:K,positions:F,maxOverlapping:q})}return c},[T,t,r]),W=a.useMemo(()=>{const c=new Map;for(const{multiDay:m}of I.values())for(const C of m)c.set(C.id,C);return Array.from(c.values())},[I]),A=new Date,M=T.findIndex(c=>g.isToday(c)),$=a.useMemo(()=>{if(M<0)return-1;const c=A.getHours()+A.getMinutes()/60;return c<r.startHour||c>r.endHour?-1:(c-r.startHour)*ae},[M,r,A]),S=a.useRef(null);a.useLayoutEffect(()=>{const c=S.current;if(!c)return;const m=()=>{let C;if(M!==-1){const z=new Date().getHours();C=Math.max(z-1,r.startHour)}else{const K=new Date().getDay();let O=o?.[K];if(!O?.enabled||O.from===0){const F=o?.[1];F?.enabled&&(O=F)}O?.enabled&&O.from>0?C=Math.max(O.from-1,r.startHour):C=Math.max(7,r.startHour)}const R=(C-r.startHour)*ae;c.scrollTo({top:R,behavior:"instant"})};requestAnimationFrame(()=>{requestAnimationFrame(m)})},[n,o,r,M]);const B=le.useOptionalSlotSelection(),G=a.useCallback(c=>{B?.startSelection(c)},[B]),p=a.useCallback(c=>{B?.updateSelection(c)},[B]),y=a.useCallback(()=>{B?.endSelection()},[B]),_=a.useCallback(c=>{b?.(c)},[b]),H=ue+7*Y,P=a.useMemo(()=>{const c=[];for(const m of T){const C=m.toDateString(),z=I.get(C)?.maxOverlapping??1;z>Qt?c.push(Math.max(Y,z*ye)):c.push(Y)}return c},[T,I]),D=ue+P.reduce((c,m)=>c+m,0);return e.jsxs("div",{className:d.cn("ic-week-view flex flex-col h-full",j),children:[W.length>0&&e.jsx(Zt,{events:W,weekDays:T,hourColumnWidth:ue,minDayColumnWidth:Y,dayColumnWidths:P,onEventClick:_,disablePopover:!!b&&!x,renderPopover:x,...u?.multiDayBanner&&{className:u.multiDayBanner}}),e.jsx("div",{ref:S,className:d.cn("ic-week-scroll-container flex-1",u?.scrollContainer),children:e.jsxs("div",{style:{minWidth:Math.max(H,D)},children:[e.jsx("div",{className:"ic-week-header sticky top-0 z-20 border-b bg-background",children:e.jsxs("div",{className:"flex",children:[e.jsx("div",{className:"flex-shrink-0 flex items-end justify-center pb-2 text-[10px] text-muted-foreground/70",style:{width:ue,height:Fe},children:e.jsxs("span",{className:"hidden sm:inline",children:["GMT",(()=>{const c=new Date().getTimezoneOffset(),m=Math.abs(Math.floor(c/60)),C=c<=0?"+":"-";return m>0?`${C}${String(m).padStart(2,"0")}`:""})()]})}),T.map((c,m)=>{const C=g.isToday(c),R=P[m]??Y,z=R>Y;return e.jsxs("div",{className:d.cn("flex-1 flex flex-col items-center justify-center border-r last:border-r-0 py-2",u?.columnHeader,C&&u?.columnHeaderToday),style:{height:Fe,minWidth:z?R:Y},children:[e.jsx("span",{className:d.cn("text-[11px] font-medium uppercase tracking-wide",C?"text-primary":"text-muted-foreground"),children:c.toLocaleDateString([],{weekday:"short"})}),e.jsx("button",{type:"button",onClick:()=>l?.(c),className:d.cn("flex items-center justify-center rounded-full transition-colors mt-0.5","size-10 text-2xl font-normal",C?"bg-primary text-primary-foreground":"text-foreground hover:bg-muted"),children:c.getDate()})]},c.toDateString())})]})}),e.jsxs("div",{className:"relative flex",children:[e.jsx("div",{className:d.cn("ic-hour-column sticky left-0 z-10 bg-zinc-50 border-r",u?.timeGutter),style:{width:ue},children:L.map((c,m)=>e.jsx("div",{className:"relative",style:{height:ae},children:e.jsx("div",{className:"absolute -top-2.5 right-1 sm:right-2 flex h-5 items-center",children:m!==0&&e.jsx("span",{className:d.cn("text-[10px] sm:text-xs text-muted-foreground",u?.timeGutterLabel),children:g.formatHourLabel(c)})})},c))}),e.jsx("div",{className:"ic-week-grid relative flex-1",children:e.jsx("div",{className:"flex divide-x",children:T.map((c,m)=>{const C=c.toDateString(),R=I.get(C),z=P[m]??Y,K=z>Y;return e.jsxs("div",{className:"ic-day-column relative flex-1",style:{minWidth:K?z:Y},children:[L.map((O,F)=>{const U=!g.isWorkingHour(c,O,o);return e.jsxs("div",{className:d.cn("relative",U&&"bg-calendar-disabled-hour",g.isToday(c)&&!U&&"bg-primary/5",u?.timeSlot,U?u?.timeSlotNonWorking:u?.timeSlotWorking),style:{height:ae},children:[F!==0&&e.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 border-b border-border/50"}),E.slice(1).map(re=>e.jsx("div",{className:"pointer-events-none absolute inset-x-0 border-b border-dashed border-border/30",style:{top:`${re/60*100}%`}},re)),E.map((re,nt)=>{const _e={date:c,hour:O,minute:re};return e.jsx(We,{slot:_e,onSelectionStart:G,onSelectionMove:p,onSelectionEnd:y,isSelected:B?.isSlotSelected(_e)??!1,isSelecting:B?.isSelecting??!1,disabled:U,className:"absolute inset-x-0",style:{top:`${nt*v}%`,height:`${v}%`},ariaLabel:`Add event on ${c.toLocaleDateString()} at ${g.formatHourLabel(O)}:${String(re).padStart(2,"0")}`},re)})]},O)}),R?.singleDay.map(O=>{const F=R.positions.get(O.id);if(!F)return null;const q=`calc(${F.width}% - 2px)`,U=`max(${ye}px, ${q})`;return N?e.jsx("div",{className:"absolute pointer-events-auto p-0.5",style:{top:`${F.top}px`,left:`${F.left}%`,width:U,minWidth:`${ye}px`},children:N({event:O,position:F})},O.id):e.jsx(Le,{event:O,position:{top:F.top,left:F.left,width:F.width,minWidth:ye},hourHeight:ae,badgeVariant:i,onClick:b,disablePopover:!!b&&!x,renderPopover:x,className:d.cn("pointer-events-auto",u?.eventCard)},O.id)}),m===M&&$>=0&&e.jsxs("div",{className:d.cn("absolute left-0 right-0 z-20 flex items-center pointer-events-none",u?.currentTimeIndicator),style:{top:$},children:[e.jsx("div",{className:"h-2 w-2 -ml-1 rounded-full bg-red-500"}),e.jsx("div",{className:"flex-1 h-0.5 bg-red-500"})]})]},c.toDateString())})})})]})]})})]})}exports.AgendaView=Ot;exports.Badge=Xe;exports.Button=oe;exports.CalendarHeader=It;exports.DateNavigator=Ye;exports.DayEventsExpansion=Ze;exports.DaySlot=tt;exports.DayView=qt;exports.DropdownMenu=Me;exports.DropdownMenuContent=je;exports.DropdownMenuItem=we;exports.DropdownMenuTrigger=Te;exports.EventBlock=Le;exports.EventCard=me;exports.MonthView=Kt;exports.MultiDayBanner=Qe;exports.MultiDayEventBar=ct;exports.Popover=Z;exports.PopoverAnchor=at;exports.PopoverContent=X;exports.PopoverTrigger=Q;exports.TimeSlot=We;exports.TodayButton=Je;exports.Tooltip=te;exports.TooltipContent=J;exports.TooltipProvider=it;exports.TooltipTrigger=ne;exports.WeekView=en;exports.buttonVariants=Ue;exports.getEventColorClasses=se;
11
+ //# sourceMappingURL=week-view-DBsCYSce.cjs.map