{"version":3,"file":"TimePicker.cjs","sources":["../../../../src/components/forms/time-picker/TimePicker.tsx"],"sourcesContent":["import { IconButton } from '@components/actions/icon-button'\nimport { TextField } from '@components/forms/text-field'\nimport TimePickerPanel from '@components/forms/time-picker/components/time-picker-panel/TimePickerPanel.tsx'\nimport { DEFAULT_HOUR_STEP, DEFAULT_MINUTE_STEP } from '@components/forms/time-picker/constants'\nimport { useTimePicker } from '@components/forms/time-picker/hooks/useTimePicker.hook.ts'\nimport { TIME_PICKER_STYLES } from '@components/forms/time-picker/styles/TimePicker.css.ts'\nimport type { TimePickerProps } from '@components/forms/time-picker/types/TimePicker.props.ts'\nimport { Popover } from '@components/overlay/popover'\nimport ClockIcon from '@resources/asset/ClockIcon.svg?react'\nimport { cn } from '@utils/cn.ts'\nimport { memo, useCallback, useRef } from 'react'\n\n/**\n * A time picker that combines a native `type=\"time\"` text field with a popover\n * listing hours and minutes.\n *\n * - Typing a valid `HH:mm` time updates the popover and calls `onChange`.\n * - Choosing an hour updates the input; choosing a minute also closes the popover.\n * - Incomplete typed values are kept in the input but do not update the selected\n *   time until they become valid.\n * - Closing the popover returns focus to the input.\n *\n * @example\n * ```tsx\n * const [time, setTime] = useState<string | undefined>()\n * <TimePicker label=\"Start time\" value={time} onChange={setTime} />\n * ```\n */\nconst TimePicker = memo(\n    ({\n        value,\n        defaultValue,\n        onChange,\n        defaultPanelTime,\n        minTime,\n        maxTime,\n        hourStep = DEFAULT_HOUR_STEP,\n        minuteStep = DEFAULT_MINUTE_STEP,\n        showNowButton = false,\n        clearable = false,\n        nowLabel = 'Now',\n        clearLabel = 'Clear',\n        id,\n        disabled,\n        'aria-label': ariaLabel,\n        'aria-labelledby': ariaLabelledBy,\n        panelAriaLabel = 'Time',\n        hoursAriaLabel = 'Hours',\n        minutesAriaLabel = 'Minutes',\n        triggerAriaLabel = 'Open time picker',\n        onKeyDown,\n        ...textFieldProps\n    }: TimePickerProps) => {\n        const {\n            selectedTime,\n            inputValue,\n            open,\n            inputId,\n            handleInputChange,\n            handleInputKeyDown,\n            handleHourSelect,\n            handleMinuteSelect,\n            handleNowSelect,\n            handleClear,\n            setOpen,\n        } = useTimePicker({\n            value,\n            defaultValue,\n            onChange,\n            id,\n            defaultPanelTime,\n            minTime,\n            maxTime,\n        })\n\n        const inputRef = useRef<HTMLInputElement>(null)\n\n        const handleKeyDown = useCallback(\n            (event: React.KeyboardEvent<HTMLInputElement>) => {\n                handleInputKeyDown(event)\n                onKeyDown?.(event)\n            },\n            [handleInputKeyDown, onKeyDown],\n        )\n\n        const handleInputClick = useCallback(\n            (event: React.MouseEvent<HTMLInputElement>) => {\n                // Stops mobile browsers from opening their native time picker.\n                event.preventDefault()\n            },\n            [],\n        )\n\n        const handleTriggerMouseDown = useCallback(\n            (event: React.MouseEvent<HTMLButtonElement>) => {\n                event.preventDefault()\n            },\n            [],\n        )\n\n        return (\n            <Popover\n                open={open}\n                onOpenChange={setOpen}\n            >\n                <TextField\n                    {...textFieldProps}\n                    ref={inputRef}\n                    id={inputId}\n                    type={'time'}\n                    min={minTime}\n                    max={maxTime}\n                    disabled={disabled}\n                    value={inputValue}\n                    onChange={handleInputChange}\n                    onKeyDown={handleKeyDown}\n                    onClick={handleInputClick}\n                    className={cn(TIME_PICKER_STYLES.input, textFieldProps.className)}\n                    aria-label={ariaLabel}\n                    aria-labelledby={ariaLabelledBy}\n                    aria-haspopup={'dialog'}\n                    endAction={\n                        <Popover.Trigger>\n                            <IconButton\n                                icon={ClockIcon}\n                                aria-label={triggerAriaLabel}\n                                variant={'ghost'}\n                                color={'primary'}\n                                size={'sm'}\n                                type={'button'}\n                                disabled={disabled}\n                                onMouseDown={handleTriggerMouseDown}\n                            />\n                        </Popover.Trigger>\n                    }\n                />\n\n                <Popover.Content\n                    side={'bottom'}\n                    align={'end'}\n                    padding={'none'}\n                    aria-label={panelAriaLabel}\n                    initialFocus={false}\n                    finalFocus={inputRef}\n                >\n                    <TimePickerPanel\n                        selectedTime={selectedTime}\n                        defaultPanelTime={defaultPanelTime}\n                        minTime={minTime}\n                        maxTime={maxTime}\n                        hourStep={hourStep}\n                        minuteStep={minuteStep}\n                        hoursAriaLabel={hoursAriaLabel}\n                        minutesAriaLabel={minutesAriaLabel}\n                        showNowButton={showNowButton}\n                        clearable={clearable}\n                        nowLabel={nowLabel}\n                        clearLabel={clearLabel}\n                        onHourSelect={handleHourSelect}\n                        onMinuteSelect={handleMinuteSelect}\n                        onNowSelect={handleNowSelect}\n                        onClear={handleClear}\n                    />\n                </Popover.Content>\n            </Popover>\n        )\n    },\n)\n\nTimePicker.displayName = 'TimePicker'\n\nexport default TimePicker\n"],"names":["TimePicker","memo","value","defaultValue","onChange","defaultPanelTime","minTime","maxTime","hourStep","DEFAULT_HOUR_STEP","minuteStep","DEFAULT_MINUTE_STEP","showNowButton","clearable","nowLabel","clearLabel","id","disabled","ariaLabel","ariaLabelledBy","panelAriaLabel","hoursAriaLabel","minutesAriaLabel","triggerAriaLabel","onKeyDown","textFieldProps","selectedTime","inputValue","open","inputId","handleInputChange","handleInputKeyDown","handleHourSelect","handleMinuteSelect","handleNowSelect","handleClear","setOpen","useTimePicker","inputRef","useRef","handleKeyDown","useCallback","event","handleInputClick","handleTriggerMouseDown","jsxs","Popover","jsx","TextField","cn","TIME_PICKER_STYLES","IconButton","ClockIcon","TimePickerPanel"],"mappings":"6qCA4BMA,EAAaC,EAAAA,KACf,CAAC,CACG,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,QAAAC,EACA,QAAAC,EACA,SAAAC,EAAWC,EAAAA,kBACX,WAAAC,EAAaC,EAAAA,oBACb,cAAAC,EAAgB,GAChB,UAAAC,EAAY,GACZ,SAAAC,EAAW,MACX,WAAAC,EAAa,QACb,GAAAC,EACA,SAAAC,EACA,aAAcC,EACd,kBAAmBC,EACnB,eAAAC,EAAiB,OACjB,eAAAC,EAAiB,QACjB,iBAAAC,EAAmB,UACnB,iBAAAC,EAAmB,mBACnB,UAAAC,EACA,GAAGC,CAAA,IACgB,CACnB,KAAM,CACF,aAAAC,EACA,WAAAC,EACA,KAAAC,EACA,QAAAC,EACA,kBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,gBAAAC,EACA,YAAAC,EACA,QAAAC,CAAA,EACAC,gBAAc,CACd,MAAAnC,EACA,aAAAC,EACA,SAAAC,EACA,GAAAY,EACA,iBAAAX,EACA,QAAAC,EACA,QAAAC,CAAA,CACH,EAEK+B,EAAWC,EAAAA,OAAyB,IAAI,EAExCC,EAAgBC,EAAAA,YACjBC,GAAiD,CAC9CX,EAAmBW,CAAK,EACxBlB,IAAYkB,CAAK,CACrB,EACA,CAACX,EAAoBP,CAAS,CAAA,EAG5BmB,EAAmBF,EAAAA,YACpBC,GAA8C,CAE3CA,EAAM,eAAA,CACV,EACA,CAAA,CAAC,EAGCE,EAAyBH,EAAAA,YAC1BC,GAA+C,CAC5CA,EAAM,eAAA,CACV,EACA,CAAA,CAAC,EAGL,OACIG,EAAAA,KAACC,EAAA,CACG,KAAAlB,EACA,aAAcQ,EAEd,SAAA,CAAAW,EAAAA,IAACC,EAAA,CACI,GAAGvB,EACJ,IAAKa,EACL,GAAIT,EACJ,KAAM,OACN,IAAKvB,EACL,IAAKC,EACL,SAAAU,EACA,MAAOU,EACP,SAAUG,EACV,UAAWU,EACX,QAASG,EACT,UAAWM,EAAAA,GAAGC,EAAAA,mBAAmB,MAAOzB,EAAe,SAAS,EAChE,aAAYP,EACZ,kBAAiBC,EACjB,gBAAe,SACf,UACI4B,EAAAA,IAACD,EAAQ,QAAR,CACG,SAAAC,EAAAA,IAACI,EAAA,CACG,KAAMC,EACN,aAAY7B,EACZ,QAAS,QACT,MAAO,UACP,KAAM,KACN,KAAM,SACN,SAAAN,EACA,YAAa2B,CAAA,CAAA,CACjB,CACJ,CAAA,CAAA,EAIRG,EAAAA,IAACD,EAAQ,QAAR,CACG,KAAM,SACN,MAAO,MACP,QAAS,OACT,aAAY1B,EACZ,aAAc,GACd,WAAYkB,EAEZ,SAAAS,EAAAA,IAACM,EAAA,CACG,aAAA3B,EACA,iBAAArB,EACA,QAAAC,EACA,QAAAC,EACA,SAAAC,EACA,WAAAE,EACA,eAAAW,EACA,iBAAAC,EACA,cAAAV,EACA,UAAAC,EACA,SAAAC,EACA,WAAAC,EACA,aAAciB,EACd,eAAgBC,EAChB,YAAaC,EACb,QAASC,CAAA,CAAA,CACb,CAAA,CACJ,CAAA,CAAA,CAGZ,CACJ,EAEAnC,EAAW,YAAc"}