import { DateFilter, DateFilterErrorReason, DateRangeFilter } from '../types';
type DateConstraints = Pick<DateFilter, "minDate" | "maxDate" | "unavailable">;
type RangeValue = {
    startDate: string | null;
    endDate: string | null;
} | null;
/**
 * Returns the first constraint a single ISO date violates, or `null` when the
 * value is empty, unparseable, or within all constraints. Mirrors the order of
 * `validateDate` (unavailable, then min, then max).
 */
export declare const getDateConstraintReason: (value: string | null | undefined, { minDate, maxDate, unavailable }: DateConstraints) => DateFilterErrorReason | null;
/**
 * Resolves the error message (if any) for a single-date filter's current
 * value. Returns the consumer's `getErrorMessage` result when provided,
 * otherwise a default message. `undefined` means the value is valid.
 */
export declare const resolveDateFilterError: (filter: DateFilter, value: string | null | undefined) => string | undefined;
type DateRangeViolation = {
    reason: DateFilterErrorReason;
    field: "start" | "end";
    value: string;
} | {
    reason: "startAfterEnd";
};
/**
 * Returns the first constraint a range violates, or `null` when both endpoints
 * are within all constraints (or empty/unparseable). Checks the start endpoint,
 * then the end endpoint, then start-after-end ordering.
 */
export declare const getDateRangeConstraintViolation: (value: RangeValue, constraints: DateConstraints) => DateRangeViolation | null;
/**
 * Resolves the error message (if any) for a date-range filter's current value.
 * Returns the consumer's `getErrorMessage` result when provided, otherwise a
 * default message. `undefined` means the range is valid.
 */
export declare const resolveDateRangeFilterError: (filter: DateRangeFilter, value: RangeValue) => string | undefined;
export {};
