{"version":3,"file":"Calendar.cjs","sources":["../../../../src/components/forms/calendar/Calendar.tsx"],"sourcesContent":["import { memo, type FC } from 'react'\r\nimport { DayPicker } from 'react-day-picker'\r\n\r\nimport Box from '@components/layout/box/Box.tsx'\r\nimport Flex from '@components/layout/flex/Flex.tsx'\r\nimport { cn } from '@utils/cn.ts'\r\nimport { CalendarContext } from '@components/forms/calendar/context/calendarContext.ts'\r\nimport { CalendarCaption } from '@components/forms/calendar/components/calendar-caption/index.ts'\r\nimport { CalendarMonthView } from '@components/forms/calendar/components/calendar-month-view'\r\nimport { CalendarYearView } from '@components/forms/calendar/components/calendar-year-view'\r\nimport { CALENDAR_ROOT_STYLES } from '@components/forms/calendar/styles/calendarRoot.css.ts'\r\nimport { CALENDAR_GRID_STYLES } from '@components/forms/calendar/styles/calendarGrid.css.ts'\r\nimport { CALENDAR_DAY_BUTTON_STYLES } from '@components/forms/calendar/styles/calendarDayButton.css.ts'\r\nimport { useCalendar } from '@components/forms/calendar/hooks/useCalendar.hook.ts'\r\nimport type { CalendarProps } from '@components/forms/calendar/types/Calendar.props.ts'\r\n\r\n/**\r\n * A date-picker calendar built on top of `react-day-picker`.\r\n *\r\n * Supports `single`, `multiple`, and `range` selection modes.\r\n *\r\n * The header shows **[← Month Year →]** in day view. Clicking **Month** opens\r\n * a 3×4 month picker; clicking **Year** opens a 3×4 year picker with decade\r\n * pagination — no scrolling required.\r\n *\r\n * Use `startYear` / `endYear` to bound the year picker range\r\n * (defaults: 100 years back → 10 years ahead).\r\n *\r\n * @example\r\n * ```tsx\r\n * // Single date\r\n * <Calendar mode=\"single\" selected={date} onSelect={setDate} />\r\n *\r\n * // Date of birth — show last 120 years, no future dates\r\n * <Calendar mode=\"single\" startYear={1900} endYear={currentYear} disabled={{ after: new Date() }} selected={dob} onSelect={setDob} />\r\n *\r\n * // Date range\r\n * <Calendar mode=\"range\" selected={range} onSelect={setRange} />\r\n * ```\r\n */\r\nconst Calendar: FC<CalendarProps> = memo(({\r\n    className,\r\n    classNames,\r\n    month: controlledMonth,\r\n    defaultMonth,\r\n    onMonthChange,\r\n    startMonth,\r\n    endMonth,\r\n    startYear,\r\n    endYear,\r\n    weekStartsOn = 1,\r\n    showOutsideDays = true,\r\n    captionLabels,\r\n    ...props\r\n}) => {\r\n    const {\r\n        view,\r\n        setView,\r\n        currentMonth,\r\n        setCurrentMonth,\r\n        resolvedStartYear,\r\n        resolvedEndYear,\r\n        resolvedStartMonth,\r\n        resolvedEndMonth,\r\n    } = useCalendar({\r\n        month: controlledMonth,\r\n        defaultMonth,\r\n        onMonthChange,\r\n        startMonth,\r\n        endMonth,\r\n        startYear,\r\n        endYear,\r\n    })\r\n\r\n    return (\r\n        <CalendarContext.Provider\r\n            value={{\r\n                view,\r\n                setView,\r\n                currentMonth,\r\n                setCurrentMonth,\r\n                startYear: resolvedStartYear,\r\n                endYear: resolvedEndYear,            }}\r\n        >\r\n            <Box className={cn(CALENDAR_ROOT_STYLES.root, className)}>\r\n                <Flex\r\n                    flexDirection={'column'}\r\n                    gap={'md'}\r\n                >\r\n                    <CalendarCaption labels={captionLabels} />\r\n\r\n                    <Box className={CALENDAR_ROOT_STYLES.calendarContent}>\r\n                        {view === 'day' && (\r\n                            <DayPicker\r\n                                {...props}\r\n                                weekStartsOn={weekStartsOn}\r\n                                showOutsideDays={showOutsideDays}\r\n                                month={currentMonth}\r\n                                onMonthChange={setCurrentMonth}\r\n                                startMonth={resolvedStartMonth}\r\n                                endMonth={resolvedEndMonth}\r\n                                hideNavigation\r\n                                classNames={{\r\n                                    months: CALENDAR_ROOT_STYLES.months,\r\n                                    month: CALENDAR_ROOT_STYLES.month,\r\n                                    month_caption: CALENDAR_ROOT_STYLES.hiddenCaption,\r\n                                    month_grid: CALENDAR_GRID_STYLES.month_grid,\r\n                                    weekdays: CALENDAR_GRID_STYLES.weekdays,\r\n                                    weekday: CALENDAR_GRID_STYLES.weekday,\r\n                                    week: CALENDAR_GRID_STYLES.week,\r\n                                    day: CALENDAR_GRID_STYLES.day,\r\n                                    day_button: CALENDAR_DAY_BUTTON_STYLES.day_button,\r\n                                    selected: CALENDAR_DAY_BUTTON_STYLES.selected,\r\n                                    today: CALENDAR_DAY_BUTTON_STYLES.today,\r\n                                    outside: CALENDAR_DAY_BUTTON_STYLES.outside,\r\n                                    disabled: CALENDAR_DAY_BUTTON_STYLES.disabled,\r\n                                    range_start: CALENDAR_DAY_BUTTON_STYLES.range_start,\r\n                                    range_end: CALENDAR_DAY_BUTTON_STYLES.range_end,\r\n                                    range_middle: CALENDAR_DAY_BUTTON_STYLES.range_middle,\r\n                                    ...classNames,\r\n                                }}\r\n                            />\r\n                        )}\r\n\r\n                        {view === 'month' && <CalendarMonthView />}\r\n                        {view === 'year' && <CalendarYearView />}\r\n                    </Box>\r\n                </Flex>\r\n            </Box>\r\n        </CalendarContext.Provider>\r\n    )\r\n})\r\n\r\nCalendar.displayName = 'Calendar'\r\n\r\nexport default Calendar\r\n"],"names":["Calendar","memo","className","classNames","controlledMonth","defaultMonth","onMonthChange","startMonth","endMonth","startYear","endYear","weekStartsOn","showOutsideDays","captionLabels","props","view","setView","currentMonth","setCurrentMonth","resolvedStartYear","resolvedEndYear","resolvedStartMonth","resolvedEndMonth","useCalendar","jsx","CalendarContext","Box","cn","CALENDAR_ROOT_STYLES","jsxs","Flex","CalendarCaption","DayPicker","CALENDAR_GRID_STYLES","CALENDAR_DAY_BUTTON_STYLES","CalendarMonthView","CalendarYearView"],"mappings":"68BAwCMA,EAA8BC,EAAAA,KAAK,CAAC,CACtC,UAAAC,EACA,WAAAC,EACA,MAAOC,EACP,aAAAC,EACA,cAAAC,EACA,WAAAC,EACA,SAAAC,EACA,UAAAC,EACA,QAAAC,EACA,aAAAC,EAAe,EACf,gBAAAC,EAAkB,GAClB,cAAAC,EACA,GAAGC,CACP,IAAM,CACF,KAAM,CACF,KAAAC,EACA,QAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,kBAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,CAAA,EACAC,cAAY,CACZ,MAAOnB,EACP,aAAAC,EACA,cAAAC,EACA,WAAAC,EACA,SAAAC,EACA,UAAAC,EACA,QAAAC,CAAA,CACH,EAED,OACIc,EAAAA,IAACC,EAAAA,gBAAgB,SAAhB,CACG,MAAO,CACH,KAAAV,EACA,QAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,UAAWC,EACX,QAASC,CAAA,EAEb,eAACM,EAAA,CAAI,UAAWC,EAAAA,GAAGC,EAAAA,qBAAqB,KAAM1B,CAAS,EACnD,SAAA2B,EAAAA,KAACC,EAAA,CACG,cAAe,SACf,IAAK,KAEL,SAAA,CAAAN,EAAAA,IAACO,EAAA,CAAgB,OAAQlB,CAAA,CAAe,EAExCgB,EAAAA,KAACH,EAAA,CAAI,UAAWE,EAAAA,qBAAqB,gBAChC,SAAA,CAAAb,IAAS,OACNS,EAAAA,IAACQ,EAAAA,UAAA,CACI,GAAGlB,EACJ,aAAAH,EACA,gBAAAC,EACA,MAAOK,EACP,cAAeC,EACf,WAAYG,EACZ,SAAUC,EACV,eAAc,GACd,WAAY,CACR,OAAQM,EAAAA,qBAAqB,OAC7B,MAAOA,EAAAA,qBAAqB,MAC5B,cAAeA,EAAAA,qBAAqB,cACpC,WAAYK,EAAAA,qBAAqB,WACjC,SAAUA,EAAAA,qBAAqB,SAC/B,QAASA,EAAAA,qBAAqB,QAC9B,KAAMA,EAAAA,qBAAqB,KAC3B,IAAKA,EAAAA,qBAAqB,IAC1B,WAAYC,EAAAA,2BAA2B,WACvC,SAAUA,EAAAA,2BAA2B,SACrC,MAAOA,EAAAA,2BAA2B,MAClC,QAASA,EAAAA,2BAA2B,QACpC,SAAUA,EAAAA,2BAA2B,SACrC,YAAaA,EAAAA,2BAA2B,YACxC,UAAWA,EAAAA,2BAA2B,UACtC,aAAcA,EAAAA,2BAA2B,aACzC,GAAG/B,CAAA,CACP,CAAA,EAIPY,IAAS,SAAWS,MAACW,EAAA,CAAA,CAAkB,EACvCpB,IAAS,QAAUS,MAACY,EAAA,CAAA,CAAiB,CAAA,CAAA,CAC1C,CAAA,CAAA,CAAA,CACJ,CACJ,CAAA,CAAA,CAGZ,CAAC,EAEDpC,EAAS,YAAc"}