import { type DateRangeReferenceContext, type NullableDateRange } from "@ryuzaki13/react-foundation-lib/formatters";
import { type PresetOption } from "@ryuzaki13/react-foundation-lib/presets";
/**
 * Идентификаторы встроенных пресетов диапазона дат.
 */
export type DateRangePresetId = "monthStartToYesterday" | "monthStartToToday" | "today" | "yesterday" | "monthAgo";
/**
 * Описание одного пресета диапазона дат.
 */
export interface DateRangePresetOption extends PresetOption<DateRangePresetId | (string & {})> {
    resolveRange: (context: DateRangeReferenceContext) => NullableDateRange;
}
type BuiltInDateRangePresetOption = DateRangePresetOption & {
    id: DateRangePresetId;
};
/**
 * Полезная нагрузка события с вычисленным диапазоном.
 */
export interface DateRangePresetChangePayload {
    id: DateRangePresetOption["id"];
    label: string;
    range: NullableDateRange;
}
/**
 * Полный встроенный список пресетов диапазона дат.
 */
export declare const DATE_RANGE_PRESET_OPTIONS: readonly BuiltInDateRangePresetOption[];
/**
 * Идентификаторы пресетов, которые включены в контрол по умолчанию.
 */
export declare const DEFAULT_DATE_RANGE_PRESET_IDS: readonly ["monthStartToYesterday", "monthStartToToday", "today", "yesterday"];
/**
 * Проверяет, что значение является идентификатором встроенного пресета.
 */
export declare function isDateRangePresetId(value: unknown): value is DateRangePresetId;
/**
 * Нормализует сохраненный список идентификаторов пресетов.
 */
export declare function normalizeDateRangePresetIds(value: unknown, fallbackIds?: readonly DateRangePresetId[]): DateRangePresetId[];
/**
 * Формирует список пресетов по сохраненным идентификаторам, сохраняя порядок.
 */
export declare function resolveDateRangePresetOptionsByIds(presetIds: readonly DateRangePresetOption["id"][], options?: readonly DateRangePresetOption[]): DateRangePresetOption[];
/**
 * Встроенный список пресетов диапазона дат, включенный по умолчанию.
 */
export declare const DEFAULT_DATE_RANGE_PRESET_OPTIONS: readonly DateRangePresetOption[];
/**
 * Ищет пресет по идентификатору.
 */
export declare function getDateRangePresetOption(id: DateRangePresetOption["id"] | undefined, options?: readonly DateRangePresetOption[]): DateRangePresetOption | null;
/**
 * Вычисляет диапазон по идентификатору пресета.
 */
export declare function resolveDateRangePresetPayload(id: DateRangePresetOption["id"] | undefined, referenceDate?: Date, options?: readonly DateRangePresetOption[]): DateRangePresetChangePayload | null;
/**
 * Ищет идентификатор пресета, который полностью совпадает с переданным диапазоном.
 */
export declare function resolveDateRangePresetIdByRange(range: NullableDateRange | null | undefined, referenceDate?: Date, options?: readonly DateRangePresetOption[]): DateRangePresetOption["id"] | null;
export {};
//# sourceMappingURL=dateRangePresets.d.ts.map