{"version":3,"file":"DatePicker.cjs","sources":["../../../../src/components/forms/date-picker/DatePicker.tsx"],"sourcesContent":["import { Calendar } from '@components/forms/calendar'\r\nimport { TextField } from '@components/forms/text-field'\r\nimport { Popover } from '@components/overlay/popover'\r\nimport { IconButton } from '@components/actions/icon-button'\r\nimport { useDatePicker } from '@components/forms/date-picker/hooks/useDatePicker.hook.ts'\r\nimport { DATE_PICKER_STYLES } from '@components/forms/date-picker/styles/DatePicker.css.ts'\r\nimport CalendarIcon from '@resources/asset/CalendarIcon.svg?react'\r\nimport { cn } from '@utils/cn.ts'\r\nimport type { DatePickerProps } from '@components/forms/date-picker/types/DatePicker.props.ts'\r\nimport { memo, useCallback, useMemo, useRef } from 'react'\r\n\r\n/**\r\n * A date picker that combines a native `type=\"date\"` text field with a\r\n * calendar popover.\r\n *\r\n * - Typing a valid `YYYY-MM-DD` date updates the calendar and calls `onChange`.\r\n * - Selecting a day in the calendar updates the input and closes the popover.\r\n * - Invalid or incomplete typed values are kept in the input but do not update\r\n *   the selected date until they become valid.\r\n * - Opening the popover focuses the selected day (or today), and closing it\r\n *   returns focus to the input.\r\n *\r\n * @example\r\n * ```tsx\r\n * const [date, setDate] = useState<Date | undefined>()\r\n * <DatePicker label=\"Pick a date\" value={date} onChange={setDate} />\r\n * ```\r\n */\r\nconst DatePicker = memo(\r\n    ({\r\n        value,\r\n        defaultValue,\r\n        onChange,\r\n        calendarProps,\r\n        id,\r\n        disabled,\r\n        'aria-label': ariaLabel,\r\n        'aria-labelledby': ariaLabelledBy,\r\n        calendarAriaLabel = 'Calendar',\r\n        onKeyDown,\r\n        ...textFieldProps\r\n    }: DatePickerProps) => {\r\n        const {\r\n            selectedDate,\r\n            inputValue,\r\n            open,\r\n            inputId,\r\n            handleInputChange,\r\n            handleInputKeyDown,\r\n            handleCalendarSelect,\r\n            setOpen,\r\n        } = useDatePicker({ value, defaultValue, onChange, id })\r\n\r\n        const inputRef = useRef<HTMLInputElement>(null)\r\n        const calendarDefaultMonth = useMemo(\r\n            () => selectedDate ?? new Date(),\r\n            [selectedDate],\r\n        )\r\n\r\n        const handleKeyDown = useCallback(\r\n            (event: React.KeyboardEvent<HTMLInputElement>) => {\r\n                handleInputKeyDown(event)\r\n                onKeyDown?.(event)\r\n            },\r\n            [handleInputKeyDown, onKeyDown],\r\n        )\r\n\r\n        const handleCalendarButtonMouseDown = useCallback(\r\n            (event: React.MouseEvent<HTMLButtonElement>) => {\r\n                event.preventDefault()\r\n            },\r\n            [],\r\n        )\r\n\r\n        const { className: calendarClassName, ...restCalendarProps } =\r\n            calendarProps ?? {}\r\n\r\n        return (\r\n            <Popover\r\n                open={open}\r\n                onOpenChange={setOpen}\r\n            >\r\n                <TextField\r\n                    {...textFieldProps}\r\n                    ref={inputRef}\r\n                    id={inputId}\r\n                    type={'date'}\r\n                    disabled={disabled}\r\n                    value={inputValue}\r\n                    onChange={handleInputChange}\r\n                    onKeyDown={handleKeyDown}\r\n                    className={cn(DATE_PICKER_STYLES.input, textFieldProps.className)}\r\n                    aria-label={ariaLabel}\r\n                    aria-labelledby={ariaLabelledBy}\r\n                    aria-haspopup={'dialog'}\r\n                    endAction={\r\n                        <Popover.Trigger>\r\n                            <IconButton\r\n                                icon={CalendarIcon}\r\n                                aria-label={'Open calendar'}\r\n                                variant={'ghost'}\r\n                                color={'primary'}\r\n                                size={'sm'}\r\n                                type={'button'}\r\n                                disabled={disabled}\r\n                                onMouseDown={handleCalendarButtonMouseDown}\r\n                            />\r\n                        </Popover.Trigger>\r\n                    }\r\n                />\r\n\r\n                <Popover.Content\r\n                    side={'bottom'}\r\n                    align={'end'}\r\n                    className={DATE_PICKER_STYLES.content}\r\n                    aria-label={calendarAriaLabel}\r\n                    initialFocus={false}\r\n                    finalFocus={inputRef}\r\n                >\r\n                    <Calendar\r\n                        mode={'single'}\r\n                        selected={selectedDate}\r\n                        onSelect={handleCalendarSelect}\r\n                        disabled={disabled}\r\n                        className={cn(DATE_PICKER_STYLES.calendar, calendarClassName)}\r\n                        {...restCalendarProps}\r\n                        defaultMonth={calendarDefaultMonth}\r\n                        autoFocus={open}\r\n                    />\r\n                </Popover.Content>\r\n            </Popover>\r\n        )\r\n    },\r\n)\r\n\r\nDatePicker.displayName = 'DatePicker'\r\n\r\nexport default DatePicker\r\n"],"names":["DatePicker","memo","value","defaultValue","onChange","calendarProps","id","disabled","ariaLabel","ariaLabelledBy","calendarAriaLabel","onKeyDown","textFieldProps","selectedDate","inputValue","open","inputId","handleInputChange","handleInputKeyDown","handleCalendarSelect","setOpen","useDatePicker","inputRef","useRef","calendarDefaultMonth","useMemo","handleKeyDown","useCallback","event","handleCalendarButtonMouseDown","calendarClassName","restCalendarProps","jsxs","Popover","jsx","TextField","cn","DATE_PICKER_STYLES","IconButton","CalendarIcon","Calendar"],"mappings":"+mDA4BMA,EAAaC,EAAAA,KACf,CAAC,CACG,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,cAAAC,EACA,GAAAC,EACA,SAAAC,EACA,aAAcC,EACd,kBAAmBC,EACnB,kBAAAC,EAAoB,WACpB,UAAAC,EACA,GAAGC,CAAA,IACgB,CACnB,KAAM,CACF,aAAAC,EACA,WAAAC,EACA,KAAAC,EACA,QAAAC,EACA,kBAAAC,EACA,mBAAAC,EACA,qBAAAC,EACA,QAAAC,CAAA,EACAC,EAAAA,cAAc,CAAE,MAAAnB,EAAO,aAAAC,EAAc,SAAAC,EAAU,GAAAE,EAAI,EAEjDgB,EAAWC,EAAAA,OAAyB,IAAI,EACxCC,EAAuBC,EAAAA,QACzB,IAAMZ,GAAgB,IAAI,KAC1B,CAACA,CAAY,CAAA,EAGXa,EAAgBC,EAAAA,YACjBC,GAAiD,CAC9CV,EAAmBU,CAAK,EACxBjB,IAAYiB,CAAK,CACrB,EACA,CAACV,EAAoBP,CAAS,CAAA,EAG5BkB,EAAgCF,EAAAA,YACjCC,GAA+C,CAC5CA,EAAM,eAAA,CACV,EACA,CAAA,CAAC,EAGC,CAAE,UAAWE,EAAmB,GAAGC,CAAA,EACrC1B,GAAiB,CAAA,EAErB,OACI2B,EAAAA,KAACC,EAAA,CACG,KAAAlB,EACA,aAAcK,EAEd,SAAA,CAAAc,EAAAA,IAACC,EAAA,CACI,GAAGvB,EACJ,IAAKU,EACL,GAAIN,EACJ,KAAM,OACN,SAAAT,EACA,MAAOO,EACP,SAAUG,EACV,UAAWS,EACX,UAAWU,EAAAA,GAAGC,EAAAA,mBAAmB,MAAOzB,EAAe,SAAS,EAChE,aAAYJ,EACZ,kBAAiBC,EACjB,gBAAe,SACf,UACIyB,EAAAA,IAACD,EAAQ,QAAR,CACG,SAAAC,EAAAA,IAACI,EAAA,CACG,KAAMC,EACN,aAAY,gBACZ,QAAS,QACT,MAAO,UACP,KAAM,KACN,KAAM,SACN,SAAAhC,EACA,YAAasB,CAAA,CAAA,CACjB,CACJ,CAAA,CAAA,EAIRK,EAAAA,IAACD,EAAQ,QAAR,CACG,KAAM,SACN,MAAO,MACP,UAAWI,EAAAA,mBAAmB,QAC9B,aAAY3B,EACZ,aAAc,GACd,WAAYY,EAEZ,SAAAY,EAAAA,IAACM,EAAA,CACG,KAAM,SACN,SAAU3B,EACV,SAAUM,EACV,SAAAZ,EACA,UAAW6B,EAAAA,GAAGC,qBAAmB,SAAUP,CAAiB,EAC3D,GAAGC,EACJ,aAAcP,EACd,UAAWT,CAAA,CAAA,CACf,CAAA,CACJ,CAAA,CAAA,CAGZ,CACJ,EAEAf,EAAW,YAAc"}