import { TimePickerDisplayVariant } from '../../TimePicker/types';
import { MaskedFieldSectionRange } from '../../../utils/maskedFieldSections';
import { DateTimeRangePickerShortcut, DateTimeRangePickerValue } from '../types';
type DateTimeRangePickerFieldSection = 'endDay' | 'endHours' | 'endMinutes' | 'endMonth' | 'endPeriod' | 'endSeconds' | 'endYear' | 'startDay' | 'startHours' | 'startMinutes' | 'startMonth' | 'startPeriod' | 'startSeconds' | 'startYear';
export interface DateTimeRangePickerFieldSectionRange extends MaskedFieldSectionRange<DateTimeRangePickerFieldSection> {
    replacement: string;
}
type DateTimeRangePickerStepDirection = -1 | 1;
/**
 * Create a stable lookup key for a public date-time range value.
 */
export declare function getDateTimeRangeValueKey(value: DateTimeRangePickerValue): string;
/**
 * Clone a public range value so local draft state never mutates external dates.
 */
export declare function cloneDateTimeRangeValue(value: DateTimeRangePickerValue): DateTimeRangePickerValue;
/**
 * Compare two public range values using timestamps instead of object identity.
 */
export declare function areDateTimeRangeValuesEqual(previousValue: DateTimeRangePickerValue, nextValue: DateTimeRangePickerValue): boolean;
/**
 * Resolve the fixed visible mask rendered by the field for the active time format.
 */
export declare function getDateTimeRangeInputMask(displayVariant: TimePickerDisplayVariant): string;
/**
 * Build the static editable section ranges for the current field mask.
 */
export declare function getDateTimeRangeSectionRanges(displayVariant: TimePickerDisplayVariant): DateTimeRangePickerFieldSectionRange[];
/**
 * Resolve the active fixed-width field section from the current selection or caret position.
 */
export declare function getDateTimeRangeSectionRangeFromSelection(selectionStart: number, selectionEnd: number, displayVariant: TimePickerDisplayVariant): DateTimeRangePickerFieldSectionRange | null;
/**
 * Resolve the adjacent section range used by left and right keyboard navigation.
 */
export declare function getAdjacentDateTimeRangeSectionRange(currentRange: DateTimeRangePickerFieldSectionRange, direction: -1 | 1, displayVariant: TimePickerDisplayVariant): DateTimeRangePickerFieldSectionRange;
/**
 * Resolve the first or last editable section in the fixed field mask.
 */
export declare function getDateTimeRangeBoundarySectionRange(boundary: 'start' | 'end', displayVariant: TimePickerDisplayVariant): DateTimeRangePickerFieldSectionRange;
/**
 * Resolve the next editable caret position inside the protected mask.
 */
export declare function getDateTimeRangeNextEditablePosition(position: number, displayVariant: TimePickerDisplayVariant, includePeriod?: boolean): number | null;
/**
 * Replace a fixed-width substring without changing the total mask length.
 */
export declare function replaceDateTimeRangeInputSubstring(currentValue: string, start: number, end: number, replacement: string): string;
/**
 * Resolve the masked sections targeted by the current delete or selection action.
 */
export declare function getDateTimeRangeSectionsFromSelection(selectionStart: number, selectionEnd: number, key: 'Backspace' | 'Delete', displayVariant: TimePickerDisplayVariant): DateTimeRangePickerFieldSection[];
/**
 * Reset the targeted sections back to their default placeholder values.
 */
export declare function resetDateTimeRangeInputSections(currentValue: string, sections: DateTimeRangePickerFieldSection[], displayVariant: TimePickerDisplayVariant): string;
/**
 * Resolve the period section that should react to an AM/PM keyboard shortcut.
 */
export declare function resolveDateTimeRangePeriodRange(selectionStart: number, selectionEnd: number, displayVariant: TimePickerDisplayVariant): DateTimeRangePickerFieldSectionRange | null;
/**
 * Step the currently active section up or down while preserving the fixed mask length.
 */
export declare function stepDateTimeRangeInputSection(currentValue: string, selectionStart: number, selectionEnd: number, direction: DateTimeRangePickerStepDirection, displayVariant: TimePickerDisplayVariant): {
    nextValue: string;
    sectionRange: DateTimeRangePickerFieldSectionRange;
} | null;
/**
 * Check whether a raw field string contains only characters supported by the range mask.
 */
export declare function isAllowedDateTimeRangeFieldValue(rawValue: string, displayVariant: TimePickerDisplayVariant): boolean;
/**
 * Format one Date side into the field representation used by the fixed mask.
 */
export declare function formatDateTimeRangeSide(value: Date | null, displayVariant: TimePickerDisplayVariant): string;
/**
 * Format the public value into the single visible input string.
 */
export declare function formatDateTimeRangeValue(value: DateTimeRangePickerValue, displayVariant: TimePickerDisplayVariant): string;
/**
 * Parse the full masked field string back into the public range value.
 */
export declare function parseDateTimeRangeInput(rawValue: string, displayVariant: TimePickerDisplayVariant): DateTimeRangePickerValue | null;
/**
 * Resolve the active shortcut that matches the current range value.
 */
export declare function resolveDateTimeRangeShortcutId(shortcuts: DateTimeRangePickerShortcut[], value: DateTimeRangePickerValue, referenceDate: Date): string | null;
/**
 * Count the calendar-day span represented by the current range value.
 */
export declare function getDateTimeRangeSelectedDayCount(value: DateTimeRangePickerValue): number;
/**
 * Format the footer copy that summarizes the current selected day span.
 */
export declare function formatDateTimeRangeSelectedDaysText(value: DateTimeRangePickerValue, labels?: {
    dayLabel: string;
    daysLabel: string;
    selectedRangeLabel: string;
}): string;
export {};
//# sourceMappingURL=helpers.d.ts.map