import { MuiPickersAdapter } from '@mui/x-date-pickers/models';
import { TimePickerDisplayVariant } from '../TimePicker/types';
import { DateRangeCalendarPickerRangePosition, DateRangeCalendarPickerSelectionState, DateRangeCalendarPickerValue } from './types';
interface ResolveInitialVisibleMonthParams {
    currentRangePosition: DateRangeCalendarPickerRangePosition;
    defaultCalendarMonth?: Date;
    referenceDate?: Date;
    utils: MuiPickersAdapter<Date>;
    value: DateRangeCalendarPickerValue;
}
interface ResolveNavigationBoundsParams {
    disableFuture?: boolean;
    disablePast?: boolean;
    maxDate?: Date;
    minDate?: Date;
    now: Date;
    utils: MuiPickersAdapter<Date>;
}
interface FindClosestEnabledDateParams {
    fallbackDirection: 'backward' | 'forward';
    isDateDisabled: (date: Date) => boolean;
    targetDate: Date;
    utils: MuiPickersAdapter<Date>;
}
/**
 * Build the canonical object value used by the custom range calendar.
 */
export declare function createDateRangeValue(startDate: Date | null, endDate: Date | null): DateRangeCalendarPickerValue;
/**
 * Keep visually identical same-moment date-time ranges distinguishable through the stored end instant.
 */
export declare function normalizeSameMomentDateTimeRangeValue(value: DateRangeCalendarPickerValue): DateRangeCalendarPickerValue;
/**
 * Build a stable day key that does not depend on timezone string conversion.
 */
export declare function getDateKey(date: Date, utils: MuiPickersAdapter<Date>): string;
/**
 * Resolve the selected date that should anchor the visible calendar window.
 */
export declare function resolveSelectedRangeDate(value: DateRangeCalendarPickerValue, currentRangePosition: DateRangeCalendarPickerRangePosition): Date | null;
/**
 * Resolve the first visible month used by the range calendar window.
 */
export declare function resolveInitialVisibleMonth({ currentRangePosition, defaultCalendarMonth, referenceDate, utils, value, }: ResolveInitialVisibleMonthParams): Date;
/**
 * Merge explicit min and max dates with relative past and future constraints.
 */
export declare function resolveNavigationBounds({ disableFuture, disablePast, maxDate, minDate, now, utils, }: ResolveNavigationBoundsParams): {
    maxBound?: Date;
    minBound?: Date;
};
/**
 * Format the custom header label using either an explicit pattern or the adapter default.
 */
export declare function formatHeaderLabel(month: Date, headerFormat: string | undefined, utils: MuiPickersAdapter<Date>): string;
/**
 * Check whether a date is visible inside the current multi-calendar window.
 */
export declare function isDateVisibleInWindow(date: Date, visibleMonth: Date, calendars: number, utils: MuiPickersAdapter<Date>): boolean;
/**
 * Shift the calendar window just enough to keep the target date visible.
 */
export declare function resolveVisibleMonthForDate(targetDate: Date, visibleMonth: Date, calendars: number, utils: MuiPickersAdapter<Date>): Date;
/**
 * Check whether a day is blocked by min/max, relative constraints, or consumer rules.
 */
export declare function isDateDisabled(date: Date, bounds: {
    maxBound?: Date;
    minBound?: Date;
}, shouldDisableDate: ((date: Date) => boolean) | undefined, utils: MuiPickersAdapter<Date>): boolean;
/**
 * Normalize the range after a day selection and keep the value sorted.
 */
export declare function selectRangeDate(currentValue: DateRangeCalendarPickerValue, currentRangePosition: DateRangeCalendarPickerRangePosition, nextDate: Date, utils: MuiPickersAdapter<Date>): {
    nextRangePosition: DateRangeCalendarPickerRangePosition;
    nextSelectionState: 'finish' | 'partial';
    nextValue: DateRangeCalendarPickerValue;
};
/**
 * Resolve the selection state that corresponds to the current range completeness.
 */
export declare function resolveRangeSelectionState(value: DateRangeCalendarPickerValue): DateRangeCalendarPickerSelectionState;
/**
 * Check whether a date is included in a completed selected range.
 */
export declare function isWithinSelectedRange(date: Date, value: DateRangeCalendarPickerValue, utils: MuiPickersAdapter<Date>): boolean;
/**
 * Check whether a date is included in the hover preview range for the pending end selection.
 */
export declare function isWithinPreviewRange(date: Date, value: DateRangeCalendarPickerValue, previewDate: Date | null, currentRangePosition: DateRangeCalendarPickerRangePosition, utils: MuiPickersAdapter<Date>): boolean;
/**
 * Format a Date into the display string consumed by the inline TimePicker.
 */
export declare function formatDateRangeTimeValue(date: Date | null, displayVariant: TimePickerDisplayVariant): string;
/**
 * Apply a TimePicker value to an existing date without changing its day.
 */
export declare function mergeDateWithTimeValue(date: Date, nextTimeValue: string): Date;
/**
 * Walk forward or backward until the next enabled date is found.
 */
export declare function findClosestEnabledDate({ fallbackDirection, isDateDisabled: isDisabled, targetDate, utils, }: FindClosestEnabledDateParams): Date | null;
/**
 * Return the number of calendar days included in a date range (inclusive of both endpoints).
 * Uses UTC day boundaries to avoid daylight saving time distortion.
 */
export declare function computeDateRangeDayCount(startDate: Date, endDate: Date): number;
/**
 * Resolve the first enabled day that can receive keyboard focus in the visible window.
 */
export declare function findFirstEnabledVisibleDate(visibleMonths: Date[], isDisabled: (date: Date) => boolean, utils: MuiPickersAdapter<Date>): Date | null;
export {};
//# sourceMappingURL=helpers.d.ts.map