import type { Dayjs } from "dayjs";
import type { TimeValue } from "../TimePicker/types";
/**
 * Reverse timezone conversion: extract date/time values from a timezone-aware
 * dayjs and create a browser-local Date. This undoes applyTimezone so that
 * Calendar and input display the correct date after a controlled round-trip.
 */
export declare const toBrowserLocalDate: (date: Date) => Date;
export declare const toNativeDate: (value: unknown) => Date | null;
export declare const coerceDateValue: (value: unknown, type: "date" | "range") => Date | [Date | null, Date | null] | null;
export declare const getInitialCalendarMonth: (value: unknown, defaultValue: unknown, type: "date" | "range") => Date;
/**
 * Format a date for display using browser-local time.
 * Calendar and input always show browser-local dates.
 */
export declare const formatDate: (date: Date | null, formatStr: string) => string;
/**
 * Parse a date string using browser-local pureDayjs (not timezone-aware).
 * The user types in browser-local time; timezone conversion happens
 * later in commitValue via applyTimezone.
 */
export declare const parseDate: (str: string, formatStr: string) => Date | null;
export declare const applyTimeToDate: (date: Date, time: TimeValue) => Date;
/**
 * Reinterpret a native Date's browser-local time values in the user's configured timezone.
 * Formats in browser-local time (pureDayjs), then reparses through timezone-aware dayjs.
 * Matches neetoUI's getTimezoneAppliedDateTime behavior.
 */
export declare const applyTimezone: (date: Date) => Date;
export declare const toUserTzDayjs: (date: Date) => Dayjs;
export declare const toDayjs: (date: Date) => Dayjs;
export declare const getDisplayFormat: (dateFormat: string, timeFormat: string, showTime: boolean) => string;
export declare const getDatePlaceholder: (dateFormat: string, timeFormat: string, showTime: boolean, type: "date" | "range") => string;
export declare const isDatePartComplete: (part: string, maskEnabled: boolean, singleDateLen: number) => boolean;
export declare const parseRangeText: (text: string, displayFormat: string, maskEnabled: boolean, singleDateLen: number) => [Date, Date] | null;
export declare const startOfWeek: (date: Date, weekStartsOn?: number) => Date;
export declare const weekDaysFrom: (start: Date) => Date[];
export declare const isMonthDisabled: (monthDate: Date, minDate?: Date, maxDate?: Date) => boolean;
export declare const isYearDisabled: (yearDate: Date, minDate?: Date, maxDate?: Date) => boolean;
export declare const buildMonth: (year: number, month: number) => Date;
export declare const isSameMonth: (a: Date | null, b: Date) => boolean;
export declare const isSameDay: (a: Date | null, b: Date | null) => boolean;
export declare const orderRange: (from: Date | null, to: Date | null) => [Date | null, Date | null];
export declare const parseGridcellDay: (target: EventTarget | null) => Date | null;
export declare const computeRangePreview: ({ pendingRange, committed, hoveredDate, rangeStep, }: {
    pendingRange: [Date | null, Date | null] | null;
    committed: [Date | null, Date | null] | null;
    hoveredDate: Date | null;
    rangeStep: "from" | "to";
}) => {
    from: Date | null;
    to: Date | null;
};
export declare const decadeStartFor: (year: number) => number;
