import { type InputStatus } from '../Field';
import { type DayOfWeek, type DayOfWeekName } from '../Calendar';
import type { BaseProps } from '../BaseProps';
import type { SizeValue } from '../utils/types';
export type ISODateTimeString = string & {
    readonly __brand: 'ISODateTimeString';
};
export type DateTimeInputHourFormat = '12h' | '24h';
export type DateTimeInputSize = 'sm' | 'md' | 'lg';
/** Supported minute increments for arrow-key stepping of the time field. */
export type DateTimeInputTimeIncrement = 1 | 5 | 10 | 15 | 30;
export type { InputStatus as DateTimeInputStatus, InputStatusType as DateTimeInputStatusType, } from '../Field';
export interface DateTimeInputProps extends Omit<BaseProps, 'onChange' | 'defaultValue'> {
    /** Ref forwarded to the date input element */
    ref?: React.Ref<HTMLInputElement>;
    /**
     * Label text for the input (required for accessibility).
     */
    label: string;
    /**
     * Whether to visually hide the label (still accessible to screen readers).
     * @default false
     */
    isLabelHidden?: boolean;
    /**
     * Description text displayed between the label and input.
     */
    description?: string;
    /**
     * Whether the field is optional. Mutually exclusive with isRequired.
     * @default false
     */
    isOptional?: boolean;
    /**
     * Whether the field is required. Mutually exclusive with isOptional.
     * @default false
     */
    isRequired?: boolean;
    /**
     * Whether the input is disabled.
     * @default false
     */
    isDisabled?: boolean;
    /**
     * Explains why the input is disabled. When set together with
     * `isDisabled`, the input shows a tooltip with this text on hover and
     * keyboard focus, and the date and time fields stay focusable (via
     * `aria-disabled`) so the reason is discoverable by keyboard and assistive
     * technology. Typing and calendar activation stay blocked.
     *
     * Use this instead of wrapping a disabled input in `Tooltip` — disabled
     * controls don't emit the pointer events an external tooltip needs.
     *
     * @example
     * ```
     * <DateTimeInput
     *   label="Meeting time"
     *   value={dateTime}
     *   onChange={setDateTime}
     *   isDisabled
     *   disabledMessage="You need the Editor role to change this"
     * />
     * ```
     */
    disabledMessage?: string;
    /**
     * The selected datetime in ISO 8601 format ("YYYY-MM-DDTHH:MM" or "YYYY-MM-DDTHH:MM:SS").
     */
    value?: ISODateTimeString;
    /**
     * Callback fired when the datetime changes.
     * Called with undefined when input is cleared.
     */
    onChange: (value: ISODateTimeString | undefined) => void;
    /**
     * Async action on change. Fires after onChange.
     */
    changeAction?: (value: ISODateTimeString | undefined) => void | Promise<void>;
    /**
     * Whether the input is in a loading state.
     * @default false
     */
    isLoading?: boolean;
    /**
     * Minimum selectable datetime in ISO format.
     * Constrains both date and time selection.
     */
    min?: ISODateTimeString;
    /**
     * Maximum selectable datetime in ISO format.
     * Constrains both date and time selection.
     */
    max?: ISODateTimeString;
    /**
     * Custom date constraint functions.
     * Date is disabled in the calendar if ANY function returns false.
     */
    dateConstraints?: ReadonlyArray<(date: Date) => boolean>;
    /**
     * Whether to include seconds in the time portion.
     * @default false
     */
    hasSeconds?: boolean;
    /**
     * Hour display format.
     * @default '12h'
     */
    hourFormat?: DateTimeInputHourFormat;
    /**
     * Minutes added or subtracted when stepping the time field with the arrow
     * keys. Constrained to a set of sensible increments.
     * @default 1
     */
    timeIncrement?: DateTimeInputTimeIncrement;
    /**
     * Whether to show a clear button when a value is set.
     * @default false
     */
    hasClear?: boolean;
    /**
     * Placeholder text shown in the date portion when no date is selected.
     * @default "Select a date"
     */
    placeholder?: string;
    /**
     * Placeholder text shown in the time portion when no time is selected.
     * @default "Select a time"
     */
    timePlaceholder?: string;
    /**
     * Accessible label for the time portion of the field. Defaults to
     * `"{label} time"` so it is tied to the field's own label and localizable,
     * rather than a hardcoded English "Time".
     */
    timeLabel?: string;
    /**
     * The size of the inputs.
     * @default 'md'
     */
    size?: DateTimeInputSize;
    /**
     * Status indicator for the input.
     */
    status?: InputStatus;
    /**
     * Width of the field. Numbers are treated as pixels, strings are used as-is
     * (e.g. `'100%'`). Sizes the whole field (label, control, and status) so they
     * stay aligned, unlike setting width via `xstyle`/`className`/`style`.
     */
    width?: SizeValue;
    /**
     * Tooltip text to display in an info icon at the end of the label.
     */
    labelTooltip?: string;
    /**
     * Number of months to display in the calendar.
     * @default 1
     */
    numberOfMonths?: 1 | 2;
    /**
     * First day of week in the calendar. Accepts a number
     * (0 = Sunday … 6 = Saturday) or a three-letter day name ('sun'–'sat',
     * case-insensitive).
     * @default 0
     */
    weekStartsOn?: DayOfWeek | DayOfWeekName;
}
/**
 * A combined date and time picker with side-by-side date input and
 * time input under a single label. The date input opens a calendar
 * popover; the time input supports typed entry and arrow-key adjustment.
 *
 * @example
 * ```
 * <DateTimeInput
 *   label="Meeting time"
 *   value={dateTime}
 *   onChange={setDateTime}
 * />
 * ```
 */
export declare function DateTimeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement, hasClear, placeholder: placeholderFromProps, timePlaceholder: timePlaceholderFromProps, timeLabel, size: sizeProp, status, labelTooltip, numberOfMonths, weekStartsOn, width, xstyle, className, style, ref, ...rest }: DateTimeInputProps): import("react").JSX.Element;
export declare namespace DateTimeInput {
    var displayName: string;
}
//# sourceMappingURL=DateTimeInput.d.ts.map