import React from "react";
/**
 * Size variants for DatePicker components
 */
export type DatePickerSize = "sm" | "md" | "lg";
/**
 * State variants for DatePicker components (aligned with forms theme)
 */
export type DatePickerState = "default" | "disabled" | "invalid";
/**
 * Placement options for DatePicker popover
 */
export type DatePickerPlacement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
/**
 * Selection mode for DatePicker
 */
export type DatePickerMode = "single" | "range";
import type { DateRange } from "../../core/Calendar/Calendar.types";
export type { DateRange };
/**
 * Preset for quick date range selection
 */
export interface DateRangePreset {
    label: string;
    getValue: () => DateRange;
}
/**
 * Main DatePicker component props (follows Select pattern)
 */
export interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue" | "onFocus" | "onBlur"> {
    /** Unique identifier */
    id?: string;
    /** Form field name */
    name?: string;
    /** Size variant */
    size?: DatePickerSize;
    /** State variant */
    state?: DatePickerState;
    /** Selection mode - single date or date range */
    mode?: DatePickerMode;
    /** The selected date (controlled mode - for single mode) */
    value?: Date | DateRange;
    /** Default selected date (uncontrolled mode - for single mode) */
    defaultValue?: Date | DateRange;
    /** Placeholder text when no date 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 date is selected - type depends on mode */
    onChange?: (value: Date | DateRange | null) => void;
    /** Array of preset date ranges (only for range mode) */
    presets?: DateRangePreset[];
    /** 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 (default: ['M', 'T', 'W', 'T', 'F', 'S', 'S']) */
    weekdays?: string[];
    /** Custom month names */
    months?: string[];
    /** Format for displaying selected date (Intl API) */
    dateFormat?: Intl.DateTimeFormatOptions;
    /** Custom format string for date display (e.g., 'DD MMM YYYY', 'DD/MM/YYYY') - takes precedence over dateFormat */
    formatString?: string;
    /** Year range for the year dropdown (default: current year back to 100 years) */
    yearRange?: {
        start: number;
        end: number;
    };
    /** Auto-select today's date when calendar opens without a value (default: false) */
    selectTodayByDefault?: boolean;
    /** 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?: DatePickerPlacement;
    /** Offset from trigger element */
    offset?: number;
    /** Children (for compound component usage) */
    children?: React.ReactNode;
}
/**
 * DatePicker trigger button props
 */
export interface DatePickerTriggerProps {
    id?: string;
    disabled?: boolean;
    isOpen?: boolean;
    state?: DatePickerState;
    size?: DatePickerSize;
    className?: string;
    onClick?: () => void;
    onFocus?: (event: React.FocusEvent<HTMLButtonElement>) => void;
    onBlur?: (event: React.FocusEvent<HTMLButtonElement>) => void;
    children?: React.ReactNode;
}
/**
 * DatePicker body props (calendar dropdown content)
 */
export interface DatePickerBodyProps {
    isOpen?: boolean;
    className?: string;
    onClose?: () => void;
    portal?: boolean;
    placement?: DatePickerPlacement;
    offset?: number;
    presets?: DateRangePreset[];
    children?: React.ReactNode;
}
/**
 * Theme interface for DatePicker (flat structure following library pattern)
 * Note: Simple, one-time-use styles are inlined directly in components
 */
export interface DatePickerTheme {
    containerStyle: string;
    baseStyle: string;
    triggerButtonStyle: string;
    placeholderTextStyle: string;
    valueTextStyle: string;
    triggerSizes: Record<DatePickerSize, string>;
    triggerStates: Record<DatePickerState, string>;
    triggerHoverStates: Record<DatePickerState, string>;
    triggerFocusStates: Record<DatePickerState, string>;
    iconEndStyle: string;
    iconEndPadding: string;
    bodyStyle: string;
    bodyWithPresetsStyle: string;
    presetsContainerStyle: string;
    presetButtonStyle: string;
    helperTextStyle: string;
    helperTextStates: Record<DatePickerState, string>;
}
