//#region packages/ecma402-abstract/types/date-time.d.ts
type Formats = Pick<Intl.DateTimeFormatOptions, "weekday" | "era" | "year" | "month" | "day" | "dayPeriod" | "hour" | "minute" | "second" | "timeZoneName"> & {
  fractionalSecondDigits?: 1 | 2 | 3;
  hour12?: boolean;
  pattern: string;
  pattern12: string;
  skeleton: string;
  rawPattern: string;
  rangePatterns: Record<TABLE_2 | "default", RangePatterns>;
  rangePatterns12: Record<TABLE_2 | "default", RangePatterns>;
};
interface RangePatternPart<T extends RangePatternType = RangePatternType> {
  source: T;
  pattern: string;
}
type RangePatterns = Pick<Intl.DateTimeFormatOptions, "weekday" | "era" | "year" | "month" | "day" | "hour" | "minute" | "second" | "timeZoneName"> & {
  hour12?: boolean;
  patternParts: Array<RangePatternPart>;
};
declare enum RangePatternType {
  startRange = "startRange",
  shared = "shared",
  endRange = "endRange"
}
type TABLE_2 = "era" | "year" | "month" | "day" | "dayPeriod" | "ampm" | "hour" | "minute" | "second" | "fractionalSecondDigits";
type TimeZoneNameData = Record<string, {
  long?: [string, string];
  short?: [string, string];
}>;
interface EraData {
  BC: string;
  AD: string;
}
interface DateTimeFormatLocaleInternalData {
  am: string;
  pm: string;
  weekday: {
    narrow: string[];
    long: string[];
    short: string[];
  };
  era: {
    narrow: EraData;
    long: EraData;
    short: EraData;
  };
  month: {
    narrow: string[];
    long: string[];
    short: string[];
  };
  /**
  * Stand-alone month names (used when month appears without other date fields)
  * Falls back to format month if not provided
  */
  monthStandalone?: {
    narrow: string[];
    long: string[];
    short: string[];
  };
  timeZoneName: TimeZoneNameData;
  /**
  * So we can construct GMT+08:00
  */
  gmtFormat: string;
  /**
  * So we can construct GMT+08:00
  */
  hourFormat: string;
  hourCycle: string;
  dateFormat: {
    full: Formats;
    long: Formats;
    medium: Formats;
    short: Formats;
  };
  timeFormat: {
    full: Formats;
    long: Formats;
    medium: Formats;
    short: Formats;
  };
  dateTimeFormat: {
    full: string;
    long: string;
    medium: string;
    short: string;
  };
  /**
  * Interval format fallback pattern from CLDR (e.g., "{0} – {1}" for English, "{0}～{1}" for Japanese)
  * Used when no specific interval format is available for a given skeleton
  */
  intervalFormatFallback: string;
  formats: Record<string, Formats[]>;
  nu: string[];
  hc: string[];
  ca: string[];
}
type IntervalFormatsData = {
  intervalFormatFallback: string;
} & Record<string, Record<string, string>>;
interface DateTimeFormat$1 extends Omit<Intl.DateTimeFormat, "resolvedOptions" | "formatRange" | "formatRangeToParts" | "formatToParts"> {
  resolvedOptions(): ResolvedDateTimeFormatOptions;
  formatToParts(date?: Date | number): IntlDateTimeFormatPart[];
  formatRange(startDate: number | Date, endDate: number | Date): string;
  formatRangeToParts(startDate: number | Date, endDate: number | Date): IntlDateTimeFormatPart[];
}
interface ResolvedDateTimeFormatOptions extends Intl.ResolvedDateTimeFormatOptions {
  dateStyle?: "full" | "long" | "medium" | "short";
  timeStyle?: "full" | "long" | "medium" | "short";
  numberingSystem: string;
}
type UnpackedZoneData = [number, string, number, boolean];
type IntlDateTimeFormatPartType = Intl.DateTimeFormatPartTypes | "ampm" | "relatedYear" | "yearName" | "unknown" | "fractionalSecondDigits";
interface IntlDateTimeFormatPart {
  type: IntlDateTimeFormatPartType;
  value: string | undefined;
  source?: RangePatternType;
}
//#endregion
//#region packages/ecma402-abstract/types/core.d.ts
type Locale = string;
interface LocaleData<T> {
  data: T;
  locale: Locale;
}
//#endregion
//#region packages/intl-datetimeformat/types.d.ts
interface PackedData {
  zones: string[];
  abbrvs: string;
  offsets: string;
}
type RawDateTimeLocaleData = LocaleData<RawDateTimeLocaleInternalData>;
type RawDateTimeLocaleInternalData = Omit<DateTimeFormatLocaleInternalData, "dateFormat" | "timeFormat" | "dateTimeFormat" | "formats" | "intervalFormats"> & {
  formats: Record<string, Record<string, string>>;
  dateFormat: {
    full: string;
    long: string;
    medium: string;
    short: string;
  };
  timeFormat: {
    full: string;
    long: string;
    medium: string;
    short: string;
  };
  intervalFormats: IntervalFormatsData;
  dateTimeFormat: {
    full: string;
    long: string;
    medium: string;
    short: string;
  };
};
//#endregion
//#region packages/intl-datetimeformat/core.d.ts
interface DateTimeFormatConstructor {
  new (locales?: string | string[], options?: Intl.DateTimeFormatOptions): DateTimeFormat$1;
  (locales?: string | string[], options?: Intl.DateTimeFormatOptions): DateTimeFormat$1;
  __addLocaleData(...data: RawDateTimeLocaleData[]): void;
  supportedLocalesOf(locales: string | string[], options?: Pick<Intl.DateTimeFormatOptions, "localeMatcher">): string[];
  getDefaultLocale(): string;
  relevantExtensionKeys: string[];
  __defaultLocale: string;
  __defaultTimeZone: string;
  __setDefaultTimeZone(tz: string): void;
  getDefaultTimeZone(): string;
  localeData: Record<string, DateTimeFormatLocaleInternalData>;
  availableLocales: Set<string>;
  polyfilled: boolean;
  tzData: Record<string, UnpackedZoneData[]>;
  __addTZData(d: PackedData): void;
}
declare const DateTimeFormat: DateTimeFormatConstructor;
//#endregion
export { DateTimeFormat, DateTimeFormatConstructor };
//# sourceMappingURL=index.d.ts.map