import React from "react";
/**
 * TimePicker component props
 * @property {string} value - The selected time value in "HH:mm" format
 * @property {string} defaultValue - Default time value for uncontrolled mode
 * @property {function} onChange - Callback fired when time value changes
 * @property {TimeFormat} format - Display format: 12-hour or 24-hour
 * @property {number} step - Step interval for minutes (1, 5, 10, 15, 30)
 * @property {string} minTime - Minimum selectable time in "HH:mm" format
 * @property {string} maxTime - Maximum selectable time in "HH:mm" format
 * @property {boolean} disabled - Whether the component is disabled
 * @property {string} placeholder - Placeholder text for the input
 * @property {TimePickerSize} size - Size variant of the component
 * @property {TimePickerState} state - State variant of the component
 * @property {boolean} clearable - Whether to show a clear button
 * @property {string} label - Optional label text
 * @property {string} helperText - Optional helper text
 * @property {React.ReactNode} iconStart - Icon to display at the start (left side)
 * @property {React.ReactNode} iconEnd - Icon to display at the end (right side)
 */
export interface TimePickerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value" | "defaultValue"> {
    /** The selected time value in "HH:mm" format */
    value?: string;
    /** Default time value for uncontrolled mode */
    defaultValue?: string;
    /** Callback fired when time value changes */
    onChange?: (time: string) => void;
    /** Display format: 12-hour or 24-hour */
    format?: TimeFormat;
    /** Step interval for minutes (1, 5, 10, 15, 30) */
    step?: number;
    /** Minimum selectable time in "HH:mm" format */
    minTime?: string;
    /** Maximum selectable time in "HH:mm" format */
    maxTime?: string;
    /** Whether the component is disabled */
    disabled?: boolean;
    /** Placeholder text for the input */
    placeholder?: string;
    /** Size variant of the component */
    size?: TimePickerSize;
    /** State variant of the component */
    state?: TimePickerState;
    /** Whether to show a clear button */
    clearable?: boolean;
    /** Optional label text */
    label?: string;
    /** Optional helper text */
    helperText?: string;
    /** Icon to display at the start (left side) */
    iconStart?: React.ReactNode;
    /** Icon to display at the end (right side) */
    iconEnd?: React.ReactNode;
    /** Additional class name for the wrapper */
    className?: string;
    /** Additional class name for the label */
    labelClassName?: string;
    /** Additional class name for the helper text */
    helperTextClassName?: string;
    /** Component-level theme overrides */
    theme?: TimePickerThemeOverrides;
}
/**
 * Time display format options
 */
export type TimeFormat = "12h" | "24h";
/**
 * Size variants for TimePicker
 */
export type TimePickerSize = "sm" | "md" | "lg";
/**
 * State variants for TimePicker
 */
export type TimePickerState = "default" | "disabled" | "invalid";
/**
 * Time picker mode for internal selector state
 */
export type TimePickerMode = "hour" | "minute" | "period";
/**
 * Time period for 12-hour format
 */
export type TimePeriod = "AM" | "PM";
/**
 * Parsed time object for internal use
 */
export interface ParsedTime {
    hour: number;
    minute: number;
    second?: number;
    period?: TimePeriod;
}
/**
 * WheelColumn component props for iOS-style scroll wheel
 */
export interface WheelColumnProps {
    /** Header label for the column */
    label?: string;
    /** Array of options to display */
    options: (number | string)[];
    /** Currently selected value */
    value: number | string;
    /** Callback when value changes */
    onChange: (value: number | string) => void;
    /** Height of each item in pixels (default: 40) */
    itemHeight?: number;
    /** Number of visible items (default: 5, should be odd) */
    visibleItems?: number;
    /** Theme overrides */
    theme?: Partial<TimePickerThemeOverrides>;
}
/**
 * Theme overrides for the TimePicker component
 * Follows Select/DatePicker pattern with trigger-based styling
 */
export interface TimePickerThemeOverrides {
    /** Container wrapper style */
    containerStyle?: string;
    /** Base style for trigger button (extends formsBaseTheme.inputGroupBaseStyle) */
    baseStyle?: string;
    /** Trigger size variants */
    triggerSizes?: Partial<Record<TimePickerSize, string>>;
    /** Trigger state variants */
    triggerStates?: Partial<Record<TimePickerState, string>>;
    /** Trigger focus state variants */
    triggerFocusStates?: Partial<Record<TimePickerState, string>>;
    /** Trigger hover state variants */
    triggerHoverStates?: Partial<Record<TimePickerState, string>>;
    /** Start icon style (Clock icon) */
    iconStartStyle?: string;
    /** End icon style (Chevron icon) */
    iconEndStyle?: string;
    /** Start icon padding */
    iconStartPadding?: string;
    /** End icon padding */
    iconEndPadding?: string;
    /** Placeholder text style */
    placeholderTextStyle?: string;
    /** Selected value text style */
    valueTextStyle?: string;
    /** Clear button style */
    clearButtonStyle?: string;
    /** Dropdown container style */
    dropdownStyle?: string;
    /** Dropdown size variants */
    dropdownSizes?: Partial<Record<TimePickerSize, string>>;
    /** Helper text style */
    helperTextStyle?: string;
    /** Helper text state variants */
    helperTextStates?: Partial<Record<TimePickerState, string>>;
    /** Wheel columns container style */
    wheelContainerStyle?: string;
    /** Individual wheel column style */
    wheelColumnStyle?: string;
    /** Wheel column header label style */
    wheelHeaderStyle?: string;
    /** Center highlight row style */
    wheelHighlightStyle?: string;
    /** Wheel item style */
    wheelItemStyle?: string;
    /** Wheel item active (selected) style */
    wheelItemActiveStyle?: string;
    /** Footer container style */
    footerStyle?: string;
    /** Inner input element style */
    inputStyle?: string;
    /** AM/PM period toggle button style */
    periodToggleStyle?: string;
}
/**
 * TimePickerTrigger component props
 * Input-oriented trigger for combobox-style masked time entry
 */
export interface TimePickerTriggerProps {
    /** Element ID */
    id?: string;
    /** Whether the trigger is disabled */
    disabled?: boolean;
    /** Whether the dropdown is open */
    isOpen?: boolean;
    /** Visual state of the trigger */
    state?: TimePickerState;
    /** Size variant */
    size?: TimePickerSize;
    /** Whether to show clear button */
    clearable?: boolean;
    /** Clear button click handler */
    onClear?: () => void;
    /** Icon to display at the start (left side) */
    iconStart?: React.ReactNode;
    /** Icon to display at the end (right side) */
    iconEnd?: React.ReactNode;
    /** Additional className */
    className?: string;
    /** Masked display value for the input */
    inputValue: string;
    /** Masked input change handler */
    onInputChange: (value: string) => void;
    /** Focus handler that opens dropdown */
    onInputFocus: () => void;
    /** Keyboard handler for the input */
    onInputKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;
    /** Time format — needed for AM/PM toggle rendering */
    format: TimeFormat;
    /** Current AM/PM value (12h only) */
    period?: TimePeriod;
    /** Toggle AM/PM handler (12h only) */
    onPeriodToggle?: () => void;
    /** Input placeholder */
    placeholder: string;
}
/**
 * Internal time selector props
 */
export interface TimeSelectorProps {
    /** Current selected time */
    time: ParsedTime;
    /** Time format */
    format: TimeFormat;
    /** Minute step interval */
    step: number;
    /** Minimum time constraint */
    minTime?: string;
    /** Maximum time constraint */
    maxTime?: string;
    /** Callback when time changes */
    onChange: (time: ParsedTime) => void;
    /** Theme overrides */
    theme?: TimePickerThemeOverrides;
}
/**
 * Time validation result
 */
export interface TimeValidationResult {
    isValid: boolean;
    error?: string;
}
/**
 * TimePickerContent component props
 */
export interface TimePickerContentProps {
    /** Whether the dropdown is open */
    isOpen: boolean;
    /** Callback when Cancel is clicked */
    onCancel: () => void;
    /** Callback when Save is clicked */
    onSave: () => void;
    /** Use portal for rendering */
    portal?: boolean;
    /** Dropdown placement */
    placement?: "bottom-start" | "bottom-end" | "top-start" | "top-end";
    /** Offset from trigger */
    offset?: number;
    /** Content children (wheel columns) */
    children?: React.ReactNode;
    /** Ref to the dropdown element (for portal-aware click-outside detection) */
    dropdownRef?: React.RefObject<HTMLDivElement | null>;
}
