import { PackedData, UnpackedZoneData, DateTimeFormatOptions, Formats, DateTimeFormatLocaleInternalData, RawDateTimeLocaleData } from './types';
export interface IntlDateTimeFormatInternal {
    locale: string;
    dataLocale: string;
    calendar?: string;
    weekday: 'narrow' | 'short' | 'long';
    era: 'narrow' | 'short' | 'long';
    year: '2-digit' | 'numeric';
    month: '2-digit' | 'numeric' | 'narrow' | 'short' | 'long';
    day: '2-digit' | 'numeric';
    hour: '2-digit' | 'numeric';
    minute: '2-digit' | 'numeric';
    second: '2-digit' | 'numeric';
    timeZoneName: 'short' | 'long';
    hourCycle: string;
    numberingSystem: string;
    timeZone: string;
    pattern: string;
    boundFormat?: Intl.DateTimeFormat['format'];
}
export interface DateTimeFormatPart {
    type: 'literal' | 'era' | 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'weekday' | 'timeZoneName' | 'dayPeriod' | 'relatedYear' | 'yearName' | 'unknown';
    value: 'string';
}
export interface ResolvedDateTimeFormatOptions {
    locale: string;
    calendar?: string;
    weekday: 'narrow' | 'short' | 'long';
    era: 'narrow' | 'short' | 'long';
    year: '2-year' | 'numeric';
    month: '2-year' | 'numeric' | 'narrow' | 'short' | 'long';
    day: '2-year' | 'numeric';
    hour: '2-year' | 'numeric';
    minute: '2-year' | 'numeric';
    second: '2-year' | 'numeric';
    timeZoneName: 'short' | 'long';
    hourCycle: string;
    numberingSystem: string;
}
/**
 * https://tc39.es/ecma402/#sec-todatetimeoptions
 * @param options
 * @param required
 * @param defaults
 */
export declare function toDateTimeOptions(options?: DateTimeFormatOptions | null, required?: string, defaults?: string): DateTimeFormatOptions;
export declare function basicFormatMatcherScore(options: DateTimeFormatOptions, format: Formats): number;
/**
 * Credit: https://github.com/andyearnshaw/Intl.js/blob/0958dc1ad8153f1056653ea22b8208f0df289a4e/src/12.datetimeformat.js#L611
 * with some modifications
 * @param options
 * @param format
 */
export declare function bestFitFormatMatcherScore(options: DateTimeFormatOptions, format: Formats): number;
export interface DateTimeFormatConstructor {
    new (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;
    (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;
    __addLocaleData(...data: RawDateTimeLocaleData[]): void;
    supportedLocalesOf(locales: string | string[], options?: Pick<DateTimeFormatOptions, 'localeMatcher'>): string[];
    getDefaultLocale(): string;
    __defaultLocale: string;
    __defaultTimeZone: string;
    localeData: Record<string, DateTimeFormatLocaleInternalData>;
    availableLocales: string[];
    polyfilled: boolean;
    tzData: Record<string, UnpackedZoneData[]>;
    __addTZData(d: PackedData): void;
}
export interface DateTimeFormat {
    resolvedOptions(): ResolvedDateTimeFormatOptions;
    formatToParts(x?: number | Date): DateTimeFormatPart[];
    format(x?: number | Date): string;
}
export declare const DateTimeFormat: DateTimeFormatConstructor;
//# sourceMappingURL=core.d.ts.map