export interface DateTimePeriodValue {
    /** Start date (YYYY-MM-DD). */
    date: string;
    /** Start time (HH:mm). */
    startTime: string;
    /** End time (HH:mm). */
    endTime: string;
    /**
     * End date (YYYY-MM-DD). Only set in `granularity="minute"` mode when the
     * end time numerically precedes the start time — meaning the period
     * overflowed into the next day (e.g. 23:40 → 01:20 becomes next-day 01:20).
     */
    endDate?: string;
}
export interface DateTimePickerPreset {
    label: string;
    getValue: () => DateTimePeriodValue;
}
export interface DateTimePickerProps {
    open: boolean;
    anchorEl?: HTMLElement | null;
    value?: DateTimePeriodValue | null;
    onConfirm?: (value: DateTimePeriodValue) => void;
    onCancel?: () => void;
    onClear?: () => void;
    onValueChange?: (value: DateTimePeriodValue) => void;
    presets?: DateTimePickerPreset[];
    helperText?: string;
    /** When true, dates after today are disabled in the calendar. */
    disableFuture?: boolean;
    /**
     * Controls how the user selects times.
     * - `"step15"` (default): two `HH:mm` dropdowns, 15-min steps, same-day only.
     * - `"minute"`: four separate dropdowns (start HH / MM, end HH / MM) with
     *   per-minute precision. When the end time is earlier than the start time,
     *   the period is treated as overflowing into the next day and `endDate` is
     *   populated in the returned value.
     */
    granularity?: "step15" | "minute";
    /**
     * Maximum selectable duration (minutes). In `"minute"` mode, end-time options
     * that would produce a longer span are disabled. Ignored in `"step15"` mode
     * (that mode has its own built-in 30-min cap).
     */
    maxDurationMinutes?: number;
    /**
     * Rendering variant.
     * - `"popover"` (default): renders via a portal fixed to the viewport,
     *   anchored to `anchorEl`. Uses click-outside and scroll listeners.
     * - `"inline"`: renders in-place without a portal. Positioning, click-outside,
     *   and scroll listeners are all disabled. Intended to be embedded inside a
     *   parent container (e.g. a modal). Use `onValueChange` to receive changes.
     */
    variant?: "popover" | "inline";
    /** When true, hides the Limpar / Cancelar / Confirmar action row. */
    hideActions?: boolean;
    /** When true, hides the large date header. Useful for compact inline layouts. */
    hideHeader?: boolean;
    /**
     * Minute step for the start-time dropdown in `"step15"` mode.
     * Defaults to 15 to preserve the standard picker behavior.
     */
    timeStepMinutes?: number;
}
