import React from "react";
import type { DateRange } from "../../core/Calendar/Calendar.types";
export type { DateRange };
/**
 * Size variants for DateRangePicker
 */
export type DateRangePickerSize = "sm" | "md" | "lg";
/**
 * State variants for DateRangePicker
 */
export type DateRangePickerState = "default" | "disabled" | "invalid";
/**
 * Placement options for DateRangePicker popover
 */
export type DateRangePickerPlacement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
/**
 * Preset for quick date range selection
 */
export interface DateRangePreset {
    label: string;
    getValue: () => DateRange;
}
/**
 * Main DateRangePicker component props
 * Always operates on DateRange — no single date mode
 */
export interface DateRangePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue" | "onFocus" | "onBlur"> {
    /** Unique identifier */
    id?: string;
    /** Form field name */
    name?: string;
    /** Size variant */
    size?: DateRangePickerSize;
    /** State variant */
    state?: DateRangePickerState;
    /** The selected date range (controlled mode) */
    value?: DateRange;
    /** Default selected date range (uncontrolled mode) */
    defaultValue?: DateRange;
    /** Placeholder text when no range selected */
    placeholder?: string;
    /** Whether the field is disabled */
    disabled?: boolean;
    /** Whether the field is required */
    required?: boolean;
    /** Label for the field */
    label?: string;
    /** Helper text below the field */
    helperText?: string;
    /** Callback fired when a range is applied */
    onChange?: (range: DateRange | null) => void;
    /** Array of preset date ranges */
    presets?: DateRangePreset[];
    /** Whether to show presets sidebar (default: true) */
    showPresets?: boolean;
    /** Focus event handler */
    onFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void;
    /** Blur event handler */
    onBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void;
    /** Minimum selectable date */
    minDate?: Date;
    /** Maximum selectable date */
    maxDate?: Date;
    /** Function to determine if a specific date should be disabled */
    isDateDisabled?: (date: Date) => boolean;
    /** Whether to highlight today's date (default: true) */
    showToday?: boolean;
    /** Custom weekday labels */
    weekdays?: string[];
    /** Custom month names */
    months?: string[];
    /** Format for displaying selected date (Intl API) */
    dateFormat?: Intl.DateTimeFormatOptions;
    /** Custom format string (e.g., 'DD MMM YYYY') - takes precedence over dateFormat */
    formatString?: string;
    /** Year range for the year dropdown */
    yearRange?: {
        start: number;
        end: number;
    };
    /** Additional class name for trigger button */
    className?: string;
    /** Additional class name for wrapper */
    wrapperClassName?: string;
    /** Whether to use portal rendering (default: true) */
    portal?: boolean;
    /** Popover placement */
    placement?: DateRangePickerPlacement;
    /** Offset from trigger element */
    offset?: number;
}
/**
 * DateRangePicker trigger button props
 */
export interface DateRangePickerTriggerProps {
    id?: string;
    disabled?: boolean;
    isOpen?: boolean;
    state?: DateRangePickerState;
    size?: DateRangePickerSize;
    className?: string;
    onClick?: () => void;
    onFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void;
    onBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void;
    children?: React.ReactNode;
}
/**
 * DateRangePicker body props
 */
export interface DateRangePickerBodyProps {
    isOpen?: boolean;
    className?: string;
    onClose?: () => void;
    portal?: boolean;
    placement?: DateRangePickerPlacement;
    offset?: number;
    presets?: DateRangePreset[];
    showPresets?: boolean;
}
/**
 * DateRangePicker presets props
 */
export interface DateRangePickerPresetsProps {
    presets: DateRangePreset[];
    className?: string;
    tempRange?: DateRange;
    setTempRange?: React.Dispatch<React.SetStateAction<DateRange | undefined>>;
    onPresetSelect?: (range: DateRange) => void;
}
/**
 * Theme interface for DateRangePicker (flat structure following library pattern)
 */
export interface DateRangePickerTheme {
    containerStyle: string;
    baseStyle: string;
    triggerButtonStyle: string;
    placeholderTextStyle: string;
    valueTextStyle: string;
    triggerSizes: Record<DateRangePickerSize, string>;
    triggerStates: Record<DateRangePickerState, string>;
    triggerHoverStates: Record<DateRangePickerState, string>;
    triggerFocusStates: Record<DateRangePickerState, string>;
    iconEndStyle: string;
    iconEndPadding: string;
    bodyStyle: string;
    presetsContainerStyle: string;
    presetButtonStyle: string;
    presetCheckmarkStyle: string;
    mobilePresetsContainerStyle: string;
    mobilePresetButtonStyle: string;
    mobileRangeDisplayStyle: string;
    helperTextStyle: string;
    helperTextStates: Record<DateRangePickerState, string>;
}
