import type { Enumerate, NumberRange } from '../number/types';
import type { Maybe } from '../types/index';
import type { $BnEn, $GMTOffset, $TimeZoneIdentifier, BanglaSeasonName, BnCalendarVariant, ChronosProperties, DateArgs, TimeZoneNameNative } from './types';
/** Core formatting logic shared by `formatDate` and `Chronos`, `BanglaCalendar` classes */
export declare function _formatDateCore(format: string, dateComponents: Record<string, string>): string;
/** Core formatting logic shared by `formatDate` and `Chronos` class */
export declare function _formatDate(format: string, year: number, month: number, day: number, date: number, hours: number, minutes: number, seconds: number, milliseconds: number, offset: string): string;
/** Normalize a time string by adding offset at the end */
export declare function _normalizeOffset(timeStr: string): string;
/** Converts milliseconds to seconds */
export declare const _toSeconds: (ms: number) => number;
/** Converts timestamp seconds to JS `Date` */
export declare const _secToDate: (sec: number) => Date;
type $TzNameType = Intl.DateTimeFormatOptions['timeZoneName'];
type $TzId = Maybe<$TimeZoneIdentifier>;
type $ResolvedTzName<T extends $TzNameType> = Maybe<T extends 'long' ? TimeZoneNameNative : T extends 'longOffset' ? $GMTOffset : string>;
/** Resolve `timeZoneName` value from `Intl.DateTimeFormat` */
export declare function _resolveNativeTzName<T extends $TzNameType>(tzId: $TzId, type: T, date?: Date): $ResolvedTzName<T>;
/** Convert `GMT±HH:mm` string to `UTC±HH:mm` format*/
export declare function _gmtToUtcOffset(gmt: Maybe<string>): Maybe<"UTC+00:00" | "UTC+00:15" | "UTC+00:30" | "UTC+00:45" | "UTC+01:00" | "UTC+01:15" | "UTC+01:30" | "UTC+01:45" | "UTC+02:00" | "UTC+02:15" | "UTC+02:30" | "UTC+02:45" | "UTC+03:00" | "UTC+03:15" | "UTC+03:30" | "UTC+03:45" | "UTC+04:00" | "UTC+04:15" | "UTC+04:30" | "UTC+04:45" | "UTC+05:00" | "UTC+05:15" | "UTC+05:30" | "UTC+05:45" | "UTC+06:00" | "UTC+06:15" | "UTC+06:30" | "UTC+06:45" | "UTC+07:00" | "UTC+07:15" | "UTC+07:30" | "UTC+07:45" | "UTC+08:00" | "UTC+08:15" | "UTC+08:30" | "UTC+08:45" | "UTC+09:00" | "UTC+09:15" | "UTC+09:30" | "UTC+09:45" | "UTC+10:00" | "UTC+10:15" | "UTC+10:30" | "UTC+10:45" | "UTC+11:00" | "UTC+11:15" | "UTC+11:30" | "UTC+11:45" | "UTC+12:00" | "UTC+12:15" | "UTC+12:30" | "UTC+12:45" | "UTC+13:00" | "UTC+13:15" | "UTC+13:30" | "UTC+13:45" | "UTC+14:00" | "UTC+14:15" | "UTC+14:30" | "UTC+14:45" | "UTC-00:00" | "UTC-00:15" | "UTC-00:30" | "UTC-00:45" | "UTC-01:00" | "UTC-01:15" | "UTC-01:30" | "UTC-01:45" | "UTC-02:00" | "UTC-02:15" | "UTC-02:30" | "UTC-02:45" | "UTC-03:00" | "UTC-03:15" | "UTC-03:30" | "UTC-03:45" | "UTC-04:00" | "UTC-04:15" | "UTC-04:30" | "UTC-04:45" | "UTC-05:00" | "UTC-05:15" | "UTC-05:30" | "UTC-05:45" | "UTC-06:00" | "UTC-06:15" | "UTC-06:30" | "UTC-06:45" | "UTC-07:00" | "UTC-07:15" | "UTC-07:30" | "UTC-07:45" | "UTC-08:00" | "UTC-08:15" | "UTC-08:30" | "UTC-08:45" | "UTC-09:00" | "UTC-09:15" | "UTC-09:30" | "UTC-09:45" | "UTC-10:00" | "UTC-10:15" | "UTC-10:30" | "UTC-10:45" | "UTC-11:00" | "UTC-11:15" | "UTC-11:30" | "UTC-11:45" | "UTC-12:00" | "UTC-12:15" | "UTC-12:30" | "UTC-12:45" | "UTC-13:00" | "UTC-13:15" | "UTC-13:30" | "UTC-13:45" | "UTC-14:00" | "UTC-14:15" | "UTC-14:30" | "UTC-14:45">;
/** Get Bangla season name by month index (`0-11`) */
export declare function _getBnSeason<L extends $BnEn = 'bn'>(month: number, locale?: L | $BnEn): BanglaSeasonName<L>;
/** Check whether a Bangla year is leap by Gregorian and Bangla years and calendar variant */
export declare function _isBnLeapYear(by: number, gy: number, v?: BnCalendarVariant): boolean;
/** Extract selective unit values from {@link Date} object */
export declare function _extractDateUnits(date: Date): {
    gy: number;
    $gm: Enumerate<12>;
    gm: NumberRange<1, 12>;
    gd: NumberRange<1, 31>;
    wd: Enumerate<7>;
};
/** Get Gregorian base year from {@link Date} object for Bangla year */
export declare function _getGregBaseYear(date: Date): number;
/** Get Bangla year from {@link Date} object */
export declare function _getBnYear(date: Date): number;
/** Get timestamp in milliseconds between midnight, January 1, 1970 (UTC) and the specified {@link Date} object */
export declare function _getUtcTs(date: Date): number;
/** Get number of days elapsed since midnight April 14, 1970 (UTC) for specific {@link Date} */
export declare function _getElapsedDays(date: Date): number;
/** Get number of days elapsed since midnight April 14, 1970 (UTC) and month index for specific `Date` and Bangla calendar variant */
export declare function _bnDaysMonthIdx(date: Date, variant?: BnCalendarVariant): {
    days: number;
    monthIdx: number;
};
/**
 * Convert number to string and pad at the start with zero (`'0'`)
 * @param value Value to convert and pad with
 * @param length Maximum length to pad, default is `2`
 * @returns The padded string
 */
export declare function _padZero(value: number, length?: number): string;
/**
 * Pad at the start of a string with Bangla zero (`'০'`)
 * @param str String to pad with
 * @param length Maximum length to pad, default is `2`
 * @returns The padded string
 */
export declare function _padShunno(str: string, length?: number): string;
/**
 * Convert a string, number, or `Date` object to a `Date` object.
 * - If the input is already a `Date`, it is returned as is.
 * - If it's a string, it is parsed into a `Date`.
 * - If it's a number or undefined, it is treated as a timestamp and converted to a `Date`.
 * @param value The date input to convert, which can be a `Date` object, a date string, a timestamp number, or undefined (which defaults to the current date and time).
 * @returns A `Date` object representing the input date.
 */
export declare function _dateArgsToDate(value: Maybe<DateArgs>): Date;
/**
 * Type guard to check if a value has the necessary properties to be reconstructed into a `Chronos` instance.
 * - Validates that the value is an object with the required keys and that the `native` property is a valid date or date string, and that the `utcOffset` is valid.
 * @param value The value to check for reconstructability.
 * @returns `true` if the value has the required properties for reconstruction, otherwise `false`.
 */
export declare function _hasChronosProperties(value: unknown): value is ChronosProperties;
export {};
