import type { Dayjs } from "dayjs"; export interface TimeValue { /** Hours (0-23) */ hours: number; /** Minutes (0-59) */ minutes: number; /** Seconds (0-59) */ seconds?: number; } export type TimePickerFormat = "12" | "24"; export interface TimePickerPanelProps { /** Current time value. */ value?: TimeValue; /** Callback when time changes. */ onChange?: (value: TimeValue) => void; /** 12-hour or 24-hour format. */ format?: TimePickerFormat; /** Show seconds column. */ showSeconds?: boolean; /** Minute step interval (e.g. 5 for 0, 5, 10...). */ minuteStep?: number; /** Second step interval. */ secondStep?: number; /** Disabled state. */ disabled?: boolean; /** Additional CSS class names. */ className?: string; } export type TimePickerType = "time" | "range"; export interface TimePickerProps { /** Current time value. TimeValue/Date/Dayjs for single, [TimeValue|Date|Dayjs, TimeValue|Date|Dayjs] for range. */ value?: TimeValue | Date | Dayjs | [TimeValue | Date | Dayjs | null, TimeValue | Date | Dayjs | null] | null; /** Callback when time changes. Returns Dayjs object (or [Dayjs, Dayjs] for range) and formatted string. */ onChange?: (value: unknown, timeString: string | [string, string]) => void; /** Callback when the trigger input(s) lose focus. */ onBlur?: (e: React.FocusEvent) => void; /** Single time or range selection. */ type?: TimePickerType; /** 12-hour or 24-hour format. */ format?: TimePickerFormat; /** Custom display format string (dayjs syntax, e.g. "h:mm A"). Overrides default format/showSeconds for display & parsing. */ displayFormat?: string; /** Show seconds column. */ showSeconds?: boolean; /** Minute step interval (e.g. 5 for 0, 5, 10...). */ minuteStep?: number; /** Second step interval. */ secondStep?: number; /** Disabled state. */ disabled?: boolean; /** Placeholder text for the input. */ placeholder?: string; /** Label displayed above the input. */ label?: string; /** Error message displayed below the input. */ error?: string; /** Help text displayed below the input. */ helpText?: React.ReactNode; /** Size of the trigger input. */ size?: "small" | "medium" | "large"; /** Required field indicator. */ required?: boolean; /** Timezone display tag (replaces clock icon). */ timezone?: string; /** Controlled popover open state. Omit for uncontrolled. */ open?: boolean; /** Callback when popover open state changes (fires for both controlled and uncontrolled). */ onOpenChange?: (open: boolean) => void; /** Render an OK button; defer onChange until OK is clicked or popover closes. Defaults to true (matches antd). Pass false for live onChange. */ needConfirm?: boolean; /** Callback when the OK button is clicked (only relevant when `needConfirm` is true). */ onOk?: (value: unknown) => void; /** Props forwarded to the label element. */ labelProps?: Record; /** Additional CSS class names. */ className?: string; }