//#region packages/ecma402-abstract/types/core.d.ts
type Locale = string;
interface LocaleData<T> {
  data: T;
  locale: Locale;
}
//#endregion
//#region packages/ecma402-abstract/types/displaynames.d.ts
type LanguageTag = string;
type RegionCode = string;
type ScriptCode = string;
type CurrencyCode = string;
type CalendarCode = string;
type DateTimeFieldCode = string;
interface DisplayNamesData {
  /**
  * Note that for style fields, `short` and `narrow` might not exist.
  * At runtime, the fallback order will be narrow -> short -> long.
  */
  types: {
    /**
    * Maps language subtag like `zh-CN` to their display names.
    */
    language: {
      dialect: {
        narrow: Record<LanguageTag, string>;
        short: Record<LanguageTag, string>;
        long: Record<LanguageTag, string>;
      };
      standard: {
        narrow: Record<LanguageTag, string>;
        short: Record<LanguageTag, string>;
        long: Record<LanguageTag, string>;
      };
    };
    region: {
      narrow: Record<RegionCode, string>;
      short: Record<RegionCode, string>;
      long: Record<RegionCode, string>;
    };
    script: {
      narrow: Record<ScriptCode, string>;
      short: Record<ScriptCode, string>;
      long: Record<ScriptCode, string>;
    };
    currency: {
      narrow: Record<CurrencyCode, string>;
      short: Record<CurrencyCode, string>;
      long: Record<CurrencyCode, string>;
    };
    calendar: {
      narrow: Record<CalendarCode, string>;
      short: Record<CalendarCode, string>;
      long: Record<CalendarCode, string>;
    };
    dateTimeField: {
      narrow: Record<DateTimeFieldCode, string>;
      short: Record<DateTimeFieldCode, string>;
      long: Record<DateTimeFieldCode, string>;
    };
  };
  /**
  * Not in spec, but we need this to display both language and region in display name.
  * e.g. zh-Hans-SG + "{0}（{1}）" -> 简体中文（新加坡）
  * Here {0} is replaced by language display name and {1} is replaced by region display name.
  */
  patterns: {
    locale: string;
  };
}
type DisplayNamesLocaleData = LocaleData<DisplayNamesData>;
//#endregion
//#region packages/intl-displaynames/index.d.ts
interface DisplayNamesOptions {
  localeMatcher?: "lookup" | "best fit";
  style?: "narrow" | "short" | "long";
  type: "language" | "region" | "script" | "currency" | "calendar" | "dateTimeField";
  fallback?: "code" | "none";
  languageDisplay?: "dialect" | "standard";
}
interface DisplayNamesResolvedOptions {
  locale: string;
  style: NonNullable<DisplayNamesOptions["style"]>;
  type: NonNullable<DisplayNamesOptions["type"]>;
  fallback: NonNullable<DisplayNamesOptions["fallback"]>;
  languageDisplay: NonNullable<DisplayNamesOptions["languageDisplay"]>;
}
declare class DisplayNames {
  constructor(locales: string | string[] | undefined, options: DisplayNamesOptions);
  static supportedLocalesOf(locales?: string | string[], options?: Pick<DisplayNamesOptions, "localeMatcher">): string[];
  static __addLocaleData(...data: DisplayNamesLocaleData[]): void;
  of(code: string | number | Record<string, unknown>): string | undefined;
  resolvedOptions(): DisplayNamesResolvedOptions;
  static localeData: Record<string, DisplayNamesData | undefined>;
  private static availableLocales;
  private static __defaultLocale;
  private static getDefaultLocale;
  static readonly polyfilled = true;
}
//#endregion
export { DisplayNames, DisplayNamesOptions, DisplayNamesResolvedOptions };
//# sourceMappingURL=index.d.ts.map