import { type DateRangeInput } from "@ryuzaki13/react-foundation-lib/formatters";
import { type PresetOption } from "@ryuzaki13/react-foundation-lib/presets";
/**
 * Идентификаторы встроенных уровней детализации периода.
 */
export type PeriodSelectPresetId = "day" | "week" | "month" | "year";
export type PeriodSelectId = PeriodSelectPresetId | (string & {});
export interface PeriodSelectOption extends PresetOption<PeriodSelectId> {
    maxRangeDays?: number;
}
type BuiltInPeriodSelectOption = PeriodSelectOption & {
    id: PeriodSelectPresetId;
};
export type PeriodSelectDateRangeConnectors = Readonly<{
    start: string;
    end: string;
}>;
export type PeriodSelectThresholds = {
    maxDayRangeDays?: number;
    maxWeekRangeWeeks?: number;
};
export declare const DEFAULT_PERIOD_SELECT_PRESET_ID = "day";
export declare const DEFAULT_PERIOD_SELECT_MAX_DAY_RANGE_DAYS = 31;
export declare const DEFAULT_PERIOD_SELECT_MAX_WEEK_RANGE_WEEKS = 26;
/**
 * Канонический каталог встроенных вариантов. Порядок элементов задает порядок
 * отображения и автоматического перехода к следующему доступному уровню.
 */
export declare const PERIOD_SELECT_OPTIONS: readonly BuiltInPeriodSelectOption[];
/**
 * Полный набор встроенных вариантов, доступный при отсутствии явного allow-list.
 */
export declare const DEFAULT_PERIOD_SELECT_PRESET_IDS: readonly ["day", "week", "month", "year"];
export declare function isPeriodSelectPresetId(value: unknown): value is PeriodSelectPresetId;
export declare function normalizePeriodSelectPresetIds(value: unknown, fallbackIds?: readonly PeriodSelectPresetId[]): PeriodSelectPresetId[];
export declare function resolvePeriodSelectOptionsByIds(presetIds: readonly PeriodSelectOption["id"][], options?: readonly PeriodSelectOption[]): PeriodSelectOption[];
export declare function getPeriodSelectOption(id: PeriodSelectOption["id"] | undefined, options?: readonly PeriodSelectOption[]): PeriodSelectOption | null;
export declare function resolvePeriodSelectDefaultValue(value: unknown): PeriodSelectPresetId;
export declare function createPeriodSelectOptions({ maxDayRangeDays, maxWeekRangeWeeks }?: PeriodSelectThresholds): PeriodSelectOption[];
export declare function isPeriodSelectOptionDisabled(option: PeriodSelectOption, dateRange: DateRangeInput | undefined): boolean;
export declare function resolvePeriodSelectAvailableValue(value: PeriodSelectOption["id"] | undefined, options: readonly PeriodSelectOption[], dateRange: DateRangeInput | undefined): PeriodSelectOption["id"] | undefined;
export declare function normalizePeriodSelectDateRangeConnectors(value: unknown): PeriodSelectDateRangeConnectors | undefined;
export {};
//# sourceMappingURL=periodSelect.d.ts.map