// Generated by dts-bundle-generator v9.5.1

/**
 * Very low-level access to strings in a bundle. Includes properties
 * needed to resolve locales within a pack.
 *
 * @public
 */
export interface PrimitiveBundle {
	id(): string;
	language(): string;
	region(): string;
	get(offset: number): string;
}
/**
 * Maps a name to a key index.
 *
 * @public
 */
export interface KeyIndexMap {
	[name: string]: KeyIndex<string>;
}
/**
 * Indexes each string in an array to its offset in the array.
 *
 * @public
 */
export interface KeyIndex<T extends string> {
	readonly index: {
		[P in T]: number;
	};
	readonly keys: T[];
	readonly size: number;
	readonly last: number;
	get(key: T): number;
}
/**
 * Function for fetching a single field.
 *
 * @public
 */
export interface FieldArrow {
	readonly offset: number;
	get(bundle: PrimitiveBundle): string;
}
/**
 * Function for entering a new scope.
 *
 * @public
 */
export interface ScopeArrow<T extends string, R> {
	readonly map: {
		[P in T]: R;
	};
	get(key: T): R | undefined;
}
/**
 * Function for fetching a field based on plural category and
 * number of digits.
 *
 * @public
 */
export interface DigitsArrow<T extends string> {
	readonly offset: number;
	readonly index: KeyIndex<T>;
	readonly values: number[];
	readonly size2: number;
	/**
	 * Gets the field for the given plural category and number of integer digits.
	 */
	get(bundle: PrimitiveBundle, key: T, digits: number): [
		string,
		number
	];
}
/**
 * Function representing a 1-dimensional vector.
 *
 * @public
 */
export interface Vector1Arrow<T extends string> {
	/**
	 * Indicates this vector exists in the bundle.
	 */
	exists(bundle: PrimitiveBundle): boolean;
	/**
	 * Fast way to check if a key is valid, even if it has no value.
	 */
	valid(key: T): boolean;
	/**
	 * Gets the field at the corresponding offset of the given key.
	 */
	get(bundle: PrimitiveBundle, key: T | T[]): string;
	/**
	 * Full mapping of all keys to the corresponding fields.
	 */
	mapping(bundle: PrimitiveBundle): {
		[P in T]: string;
	};
}
/**
 * Function representing a 2-dimensional vector.
 *
 * @public
 */
export interface Vector2Arrow<T extends string, S extends string> {
	/**
	 * Indicates this vector exists in the bundle.
	 */
	exists(bundle: PrimitiveBundle): boolean;
	/**
	 * Fast way to check if a key is valid, even if it has no value.
	 */
	valid(key1: T | T[], key2: S | S[]): boolean;
	/**
	 * Gets the field at the corresponding offset [key1, key2]
	 */
	get(bundle: PrimitiveBundle, key1: T | T[], key2: S | S[]): string;
	/**
	 * Full mapping of all keys to the corresponding fields.
	 */
	mapping(bundle: PrimitiveBundle): {
		[P in T]: {
			[Q in S]: string;
		};
	};
}
/**
 * Function representing a 3-dimensional vector.
 *
 * @public
 */
export interface Vector3Arrow<T extends string, S extends string, U extends string> {
	/**
	 * Indicates this vector exists in the bundle.
	 */
	exists(bundle: PrimitiveBundle): boolean;
	/**
	 * Gets the field at the corresponding offset [key1, key2, key3]
	 */
	get(bundle: PrimitiveBundle, key1: T | T[], key2: S | S[], key3: U | U[]): string;
	/**
	 * Full mapping of all keys to the corresponding fields.
	 */
	mapping(bundle: PrimitiveBundle): {
		[P in T]: {
			[Q in S]: {
				[R in U]: string;
			};
		};
	};
}
/** @public */
export type ContextTransformFieldType = ("calendar-field" | "currencyName" | "day-format-except-narrow" | "day-standalone-except-narrow" | "era-abbr" | "era-name" | "keyValue" | "languages" | "month-format-except-narrow" | "month-standalone-except-narrow" | "number-spellout" | "relative" | "script" | "typographicNames");
/** @public */
export type CurrencyType = ("ADP" | "AED" | "AFA" | "AFN" | "ALK" | "ALL" | "AMD" | "ANG" | "AOA" | "AOK" | "AON" | "AOR" | "ARA" | "ARL" | "ARM" | "ARP" | "ARS" | "ATS" | "AUD" | "AWG" | "AZM" | "AZN" | "BAD" | "BAM" | "BAN" | "BBD" | "BDT" | "BEC" | "BEF" | "BEL" | "BGL" | "BGM" | "BGN" | "BGO" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BOL" | "BOP" | "BOV" | "BRB" | "BRC" | "BRE" | "BRL" | "BRN" | "BRR" | "BRZ" | "BSD" | "BTN" | "BUK" | "BWP" | "BYB" | "BYN" | "BYR" | "BZD" | "CAD" | "CDF" | "CHE" | "CHF" | "CHW" | "CLE" | "CLF" | "CLP" | "CNH" | "CNX" | "CNY" | "COP" | "COU" | "CRC" | "CSD" | "CSK" | "CUC" | "CUP" | "CVE" | "CYP" | "CZK" | "DDM" | "DEM" | "DJF" | "DKK" | "DOP" | "DZD" | "ECS" | "ECV" | "EEK" | "EGP" | "ERN" | "ESA" | "ESB" | "ESP" | "ETB" | "EUR" | "FIM" | "FJD" | "FKP" | "FRF" | "GBP" | "GEK" | "GEL" | "GHC" | "GHS" | "GIP" | "GMD" | "GNF" | "GNS" | "GQE" | "GRD" | "GTQ" | "GWE" | "GWP" | "GYD" | "HKD" | "HNL" | "HRD" | "HRK" | "HTG" | "HUF" | "IDR" | "IEP" | "ILP" | "ILR" | "ILS" | "INR" | "IQD" | "IRR" | "ISJ" | "ISK" | "ITL" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRH" | "KRO" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LTL" | "LTT" | "LUC" | "LUF" | "LUL" | "LVL" | "LVR" | "LYD" | "MAD" | "MAF" | "MCF" | "MDC" | "MDL" | "MGA" | "MGF" | "MKD" | "MKN" | "MLF" | "MMK" | "MNT" | "MOP" | "MRO" | "MRU" | "MTL" | "MTP" | "MUR" | "MVP" | "MVR" | "MWK" | "MXN" | "MXP" | "MXV" | "MYR" | "MZE" | "MZM" | "MZN" | "NAD" | "NGN" | "NIC" | "NIO" | "NLG" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEI" | "PEN" | "PES" | "PGK" | "PHP" | "PKR" | "PLN" | "PLZ" | "PTE" | "PYG" | "QAR" | "RHD" | "ROL" | "RON" | "RSD" | "RUB" | "RUR" | "RWF" | "SAR" | "SBD" | "SCR" | "SDD" | "SDG" | "SDP" | "SEK" | "SGD" | "SHP" | "SIT" | "SKK" | "SLE" | "SLL" | "SOS" | "SRD" | "SRG" | "SSP" | "STD" | "STN" | "SUR" | "SVC" | "SYP" | "SZL" | "THB" | "TJR" | "TJS" | "TMM" | "TMT" | "TND" | "TOP" | "TPE" | "TRL" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UAK" | "UGS" | "UGX" | "USD" | "USN" | "USS" | "UYI" | "UYP" | "UYU" | "UYW" | "UZS" | "VEB" | "VED" | "VEF" | "VES" | "VND" | "VNN" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XBA" | "XBB" | "XBC" | "XBD" | "XCD" | "XCG" | "XDR" | "XEU" | "XFO" | "XFU" | "XOF" | "XPD" | "XPF" | "XPT" | "XRE" | "XSU" | "XTS" | "XUA" | "XXX" | "YDD" | "YER" | "YUD" | "YUM" | "YUN" | "YUR" | "ZAL" | "ZAR" | "ZMK" | "ZMW" | "ZRN" | "ZRZ" | "ZWD" | "ZWG" | "ZWL" | "ZWR");
/** @public */
export type LanguageIdType = ("aa" | "ab" | "ace" | "ach" | "ada" | "ady" | "ae" | "aeb" | "af" | "afh" | "agq" | "ain" | "ak" | "akk" | "akz" | "ale" | "aln" | "alt" | "am" | "an" | "ang" | "ann" | "anp" | "apc" | "ar" | "ar-001" | "arc" | "arn" | "aro" | "arp" | "arq" | "ars" | "arw" | "ary" | "arz" | "as" | "asa" | "ase" | "ast" | "atj" | "av" | "avk" | "awa" | "ay" | "az" | "az-Arab" | "ba" | "bal" | "ban" | "bar" | "bas" | "bax" | "bbc" | "bbj" | "be" | "bej" | "bem" | "bew" | "bez" | "bfd" | "bfq" | "bg" | "bgc" | "bgn" | "bho" | "bi" | "bik" | "bin" | "bjn" | "bkm" | "bla" | "blo" | "blt" | "bm" | "bn" | "bo" | "bpy" | "bqi" | "br" | "bra" | "brh" | "brx" | "bs" | "bss" | "bua" | "bug" | "bum" | "byn" | "byv" | "ca" | "cad" | "car" | "cay" | "cch" | "ccp" | "ce" | "ceb" | "cgg" | "ch" | "chb" | "chg" | "chk" | "chm" | "chn" | "cho" | "chp" | "chr" | "chy" | "cic" | "ckb" | "clc" | "co" | "cop" | "cps" | "cr" | "crg" | "crh" | "crj" | "crk" | "crl" | "crm" | "crr" | "crs" | "cs" | "csb" | "csw" | "cu" | "cv" | "cy" | "da" | "dak" | "dar" | "dav" | "de" | "de-AT" | "de-CH" | "del" | "den" | "dgr" | "din" | "dje" | "doi" | "dsb" | "dtp" | "dua" | "dum" | "dv" | "dyo" | "dyu" | "dz" | "dzg" | "ebu" | "ee" | "efi" | "egl" | "egy" | "eka" | "el" | "elx" | "en" | "en-AU" | "en-CA" | "en-GB" | "en-US" | "enm" | "eo" | "es" | "es-419" | "es-ES" | "es-MX" | "esu" | "et" | "eu" | "ewo" | "ext" | "fa" | "fa-AF" | "fan" | "fat" | "ff" | "fi" | "fil" | "fit" | "fj" | "fo" | "fon" | "fr" | "fr-CA" | "fr-CH" | "frc" | "frm" | "fro" | "frp" | "frr" | "frs" | "fur" | "fy" | "ga" | "gaa" | "gag" | "gan" | "gay" | "gba" | "gbz" | "gd" | "gez" | "gil" | "gl" | "glk" | "gmh" | "gn" | "goh" | "gon" | "gor" | "got" | "grb" | "grc" | "gsw" | "gu" | "guc" | "gur" | "guz" | "gv" | "gwi" | "ha" | "hai" | "hak" | "haw" | "hax" | "he" | "hi" | "hi-Latn" | "hif" | "hil" | "hit" | "hmn" | "hnj" | "ho" | "hr" | "hsb" | "hsn" | "ht" | "hu" | "hup" | "hur" | "hy" | "hz" | "ia" | "iba" | "ibb" | "id" | "ie" | "ig" | "ii" | "ik" | "ikt" | "ilo" | "inh" | "io" | "is" | "it" | "iu" | "izh" | "ja" | "jam" | "jbo" | "jgo" | "jmc" | "jpr" | "jrb" | "jut" | "jv" | "ka" | "kaa" | "kab" | "kac" | "kaj" | "kam" | "kaw" | "kbd" | "kbl" | "kcg" | "kde" | "kea" | "ken" | "kfo" | "kg" | "kgp" | "kha" | "kho" | "khq" | "khw" | "ki" | "kiu" | "kj" | "kk" | "kkj" | "kl" | "kln" | "km" | "kmb" | "kn" | "ko" | "koi" | "kok" | "kos" | "kpe" | "kr" | "krc" | "kri" | "krj" | "krl" | "kru" | "ks" | "ksb" | "ksf" | "ksh" | "ku" | "kum" | "kut" | "kv" | "kw" | "kwk" | "kxv" | "ky" | "la" | "lad" | "lag" | "lah" | "lam" | "lb" | "lez" | "lfn" | "lg" | "li" | "lij" | "lil" | "liv" | "lkt" | "lld" | "lmo" | "ln" | "lo" | "lol" | "lou" | "loz" | "lrc" | "lsm" | "lt" | "ltg" | "lu" | "lua" | "lui" | "lun" | "luo" | "lus" | "luy" | "lv" | "lzh" | "lzz" | "mad" | "maf" | "mag" | "mai" | "mak" | "man" | "mas" | "mde" | "mdf" | "mdr" | "men" | "mer" | "mfe" | "mg" | "mga" | "mgh" | "mgo" | "mh" | "mhn" | "mi" | "mic" | "min" | "mk" | "ml" | "mn" | "mnc" | "mni" | "moe" | "moh" | "mos" | "mr" | "mrj" | "ms" | "mt" | "mua" | "mul" | "mus" | "mwl" | "mwr" | "mwv" | "my" | "mye" | "myv" | "mzn" | "na" | "nan" | "nap" | "naq" | "nb" | "nd" | "nds" | "nds-NL" | "ne" | "new" | "ng" | "nia" | "niu" | "njo" | "nl" | "nl-BE" | "nmg" | "nn" | "nnh" | "no" | "nog" | "non" | "nov" | "nqo" | "nr" | "nso" | "nus" | "nv" | "nwc" | "ny" | "nym" | "nyn" | "nyo" | "nzi" | "oc" | "oj" | "ojb" | "ojc" | "ojs" | "ojw" | "oka" | "om" | "or" | "os" | "osa" | "ota" | "pa" | "pag" | "pal" | "pam" | "pap" | "pau" | "pcd" | "pcm" | "pdc" | "pdt" | "peo" | "pfl" | "phn" | "pi" | "pis" | "pl" | "pms" | "pnt" | "pon" | "pqm" | "prg" | "pro" | "ps" | "pt" | "pt-BR" | "pt-PT" | "qu" | "quc" | "qug" | "raj" | "rap" | "rar" | "rgn" | "rhg" | "rif" | "rm" | "rn" | "ro" | "ro-MD" | "rof" | "rom" | "rtm" | "ru" | "rue" | "rug" | "rup" | "rw" | "rwk" | "sa" | "sad" | "sah" | "sam" | "saq" | "sas" | "sat" | "saz" | "sba" | "sbp" | "sc" | "scn" | "sco" | "sd" | "sdc" | "sdh" | "se" | "see" | "seh" | "sei" | "sel" | "ses" | "sg" | "sga" | "sgs" | "sh" | "shi" | "shn" | "shu" | "si" | "sid" | "sk" | "skr" | "sl" | "slh" | "sli" | "sly" | "sm" | "sma" | "smj" | "smn" | "sms" | "sn" | "snk" | "so" | "sog" | "sq" | "sr" | "sr-ME" | "srn" | "srr" | "ss" | "ssy" | "st" | "stq" | "str" | "su" | "suk" | "sus" | "sux" | "sv" | "sw" | "sw-CD" | "swb" | "syc" | "syr" | "szl" | "ta" | "tce" | "tcy" | "te" | "tem" | "teo" | "ter" | "tet" | "tg" | "tgx" | "th" | "tht" | "ti" | "tig" | "tiv" | "tk" | "tkl" | "tkr" | "tl" | "tlh" | "tli" | "tly" | "tmh" | "tn" | "to" | "tog" | "tok" | "tpi" | "tr" | "tru" | "trv" | "trw" | "ts" | "tsd" | "tsi" | "tt" | "ttm" | "ttt" | "tum" | "tvl" | "tw" | "twq" | "ty" | "tyv" | "tzm" | "udm" | "ug" | "uga" | "uk" | "umb" | "und" | "ur" | "uz" | "vai" | "ve" | "vec" | "vep" | "vi" | "vls" | "vmf" | "vmw" | "vo" | "vot" | "vro" | "vun" | "wa" | "wae" | "wal" | "war" | "was" | "wbp" | "wo" | "wuu" | "xal" | "xh" | "xmf" | "xnr" | "xog" | "yao" | "yap" | "yav" | "ybb" | "yi" | "yo" | "yrl" | "yue" | "za" | "zap" | "zbl" | "zea" | "zen" | "zgh" | "zh" | "zh-Hans" | "zh-Hant" | "zu" | "zun" | "zxx" | "zza");
/** @public */
export type ScriptIdType = ("Adlm" | "Afak" | "Aghb" | "Ahom" | "Arab" | "Aran" | "Armi" | "Armn" | "Avst" | "Bali" | "Bamu" | "Bass" | "Batk" | "Beng" | "Bhks" | "Blis" | "Bopo" | "Brah" | "Brai" | "Bugi" | "Buhd" | "Cakm" | "Cans" | "Cari" | "Cham" | "Cher" | "Chrs" | "Cirt" | "Copt" | "Cpmn" | "Cprt" | "Cyrl" | "Cyrs" | "Deva" | "Diak" | "Dogr" | "Dsrt" | "Dupl" | "Egyd" | "Egyh" | "Egyp" | "Elba" | "Elym" | "Ethi" | "Gara" | "Geok" | "Geor" | "Glag" | "Gong" | "Gonm" | "Goth" | "Gran" | "Grek" | "Gujr" | "Gukh" | "Guru" | "Hanb" | "Hang" | "Hani" | "Hano" | "Hans" | "Hant" | "Hatr" | "Hebr" | "Hira" | "Hluw" | "Hmng" | "Hmnp" | "Hrkt" | "Hung" | "Inds" | "Ital" | "Jamo" | "Java" | "Jpan" | "Jurc" | "Kali" | "Kana" | "Kawi" | "Khar" | "Khmr" | "Khoj" | "Kits" | "Knda" | "Kore" | "Kpel" | "Krai" | "Kthi" | "Lana" | "Laoo" | "Latf" | "Latg" | "Latn" | "Lepc" | "Limb" | "Lina" | "Linb" | "Lisu" | "Loma" | "Lyci" | "Lydi" | "Mahj" | "Maka" | "Mand" | "Mani" | "Marc" | "Maya" | "Medf" | "Mend" | "Merc" | "Mero" | "Mlym" | "Modi" | "Mong" | "Moon" | "Mroo" | "Mtei" | "Mult" | "Mymr" | "Nagm" | "Nand" | "Narb" | "Nbat" | "Newa" | "Nkgb" | "Nkoo" | "Nshu" | "Ogam" | "Olck" | "Onao" | "Orkh" | "Orya" | "Osge" | "Osma" | "Ougr" | "Palm" | "Pauc" | "Perm" | "Phag" | "Phli" | "Phlp" | "Phlv" | "Phnx" | "Plrd" | "Prti" | "Qaag" | "Rjng" | "Rohg" | "Roro" | "Runr" | "Samr" | "Sara" | "Sarb" | "Saur" | "Sgnw" | "Shaw" | "Shrd" | "Sidd" | "Sind" | "Sinh" | "Sogd" | "Sogo" | "Sora" | "Soyo" | "Sund" | "Sunu" | "Sylo" | "Syrc" | "Syre" | "Syrj" | "Syrn" | "Tagb" | "Takr" | "Tale" | "Talu" | "Taml" | "Tang" | "Tavt" | "Telu" | "Teng" | "Tfng" | "Tglg" | "Thaa" | "Thai" | "Tibt" | "Tirh" | "Tnsa" | "Todr" | "Toto" | "Tutg" | "Ugar" | "Vaii" | "Visp" | "Vith" | "Wara" | "Wcho" | "Wole" | "Xpeo" | "Xsux" | "Yezi" | "Yiii" | "Zanb" | "Zinh" | "Zmth" | "Zsye" | "Zsym" | "Zxxx" | "Zyyy" | "Zzzz");
/** @public */
export type RegionIdType = ("001" | "002" | "003" | "005" | "009" | "011" | "013" | "014" | "015" | "017" | "018" | "019" | "021" | "029" | "030" | "034" | "035" | "039" | "053" | "054" | "057" | "061" | "142" | "143" | "145" | "150" | "151" | "154" | "155" | "202" | "419" | "AC" | "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AQ" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" | "BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CP" | "CQ" | "CR" | "CU" | "CV" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DG" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EA" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "EU" | "EZ" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "IC" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "QO" | "RE" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" | "SX" | "SY" | "SZ" | "TA" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "UM" | "UN" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WF" | "WS" | "XA" | "XB" | "XK" | "YE" | "YT" | "ZA" | "ZM" | "ZW" | "ZZ");
/** @public */
export type MetaZoneType = "Acre" | "Afghanistan" | "Africa_Central" | "Africa_Eastern" | "Africa_Southern" | "Africa_Western" | "Alaska" | "Almaty" | "Amazon" | "America_Central" | "America_Eastern" | "America_Mountain" | "America_Pacific" | "Anadyr" | "Apia" | "Aqtau" | "Aqtobe" | "Arabian" | "Argentina" | "Argentina_Western" | "Armenia" | "Atlantic" | "Australia_Central" | "Australia_CentralWestern" | "Australia_Eastern" | "Australia_Western" | "Azerbaijan" | "Azores" | "Bangladesh" | "Bhutan" | "Bolivia" | "Brasilia" | "Brunei" | "Cape_Verde" | "Casey" | "Chamorro" | "Chatham" | "Chile" | "China" | "Christmas" | "Cocos" | "Colombia" | "Cook" | "Cuba" | "Davis" | "DumontDUrville" | "East_Timor" | "Easter" | "Ecuador" | "Europe_Central" | "Europe_Eastern" | "Europe_Further_Eastern" | "Europe_Western" | "Falkland" | "Fiji" | "French_Guiana" | "French_Southern" | "GMT" | "Galapagos" | "Gambier" | "Georgia" | "Gilbert_Islands" | "Greenland" | "Greenland_Eastern" | "Greenland_Western" | "Guam" | "Gulf" | "Guyana" | "Hawaii_Aleutian" | "Hong_Kong" | "Hovd" | "India" | "Indian_Ocean" | "Indochina" | "Indonesia_Central" | "Indonesia_Eastern" | "Indonesia_Western" | "Iran" | "Irkutsk" | "Israel" | "Japan" | "Kamchatka" | "Kazakhstan" | "Kazakhstan_Eastern" | "Kazakhstan_Western" | "Korea" | "Kosrae" | "Krasnoyarsk" | "Kyrgystan" | "Lanka" | "Line_Islands" | "Lord_Howe" | "Macau" | "Magadan" | "Malaysia" | "Maldives" | "Marquesas" | "Marshall_Islands" | "Mauritius" | "Mawson" | "Mexico_Pacific" | "Mongolia" | "Moscow" | "Myanmar" | "Nauru" | "Nepal" | "New_Caledonia" | "New_Zealand" | "Newfoundland" | "Niue" | "Norfolk" | "Noronha" | "North_Mariana" | "Novosibirsk" | "Omsk" | "Pakistan" | "Palau" | "Papua_New_Guinea" | "Paraguay" | "Peru" | "Philippines" | "Phoenix_Islands" | "Pierre_Miquelon" | "Pitcairn" | "Ponape" | "Pyongyang" | "Qyzylorda" | "Reunion" | "Rothera" | "Sakhalin" | "Samara" | "Samoa" | "Seychelles" | "Singapore" | "Solomon" | "South_Georgia" | "Suriname" | "Syowa" | "Tahiti" | "Taipei" | "Tajikistan" | "Tokelau" | "Tonga" | "Truk" | "Turkmenistan" | "Tuvalu" | "Uruguay" | "Uzbekistan" | "Vanuatu" | "Venezuela" | "Vladivostok" | "Volgograd" | "Vostok" | "Wake" | "Wallis" | "Yakutsk" | "Yekaterinburg" | "Yukon";
/** @public */
export type UnitType = "g-force" | "meter-per-square-second" | "arc-minute" | "arc-second" | "degree" | "radian" | "revolution" | "acre" | "bu-jp" | "cho" | "dunam" | "hectare" | "se-jp" | "square-centimeter" | "square-foot" | "square-inch" | "square-kilometer" | "square-meter" | "square-mile" | "square-yard" | "item" | "karat" | "milligram-ofglucose-per-deciliter" | "millimole-per-liter" | "mole" | "percent" | "permille" | "permillion" | "permyriad" | "portion-per-1e9" | "liter-per-100-kilometer" | "liter-per-kilometer" | "mile-per-gallon" | "mile-per-gallon-imperial" | "bit" | "byte" | "gigabit" | "gigabyte" | "kilobit" | "kilobyte" | "megabit" | "megabyte" | "petabyte" | "terabit" | "terabyte" | "century" | "day" | "day-person" | "decade" | "hour" | "microsecond" | "millisecond" | "minute" | "month" | "nanosecond" | "night" | "quarter" | "second" | "week" | "year" | "ampere" | "milliampere" | "ohm" | "volt" | "british-thermal-unit" | "calorie" | "electronvolt" | "foodcalorie" | "joule" | "kilocalorie" | "kilojoule" | "kilowatt-hour" | "therm-us" | "kilowatt-hour-per-100-kilometer" | "newton" | "pound-force" | "gigahertz" | "hertz" | "kilohertz" | "megahertz" | "dot" | "dot-per-centimeter" | "dot-per-inch" | "em" | "megapixel" | "pixel" | "pixel-per-centimeter" | "pixel-per-inch" | "astronomical-unit" | "centimeter" | "decimeter" | "earth-radius" | "fathom" | "foot" | "furlong" | "inch" | "jo-jp" | "ken" | "kilometer" | "light-year" | "meter" | "micrometer" | "mile" | "mile-scandinavian" | "millimeter" | "nanometer" | "nautical-mile" | "parsec" | "picometer" | "point" | "ri-jp" | "rin" | "shaku-cloth" | "shaku-length" | "solar-radius" | "sun" | "yard" | "candela" | "lumen" | "lux" | "solar-luminosity" | "carat" | "dalton" | "earth-mass" | "fun" | "grain" | "gram" | "kilogram" | "microgram" | "milligram" | "ounce" | "ounce-troy" | "pound" | "solar-mass" | "stone" | "ton" | "tonne" | "gigawatt" | "horsepower" | "kilowatt" | "megawatt" | "milliwatt" | "watt" | "atmosphere" | "bar" | "gasoline-energy-density" | "hectopascal" | "inch-ofhg" | "kilopascal" | "megapascal" | "millibar" | "millimeter-ofhg" | "pascal" | "pound-force-per-square-inch" | "beaufort" | "kilometer-per-hour" | "knot" | "light-speed" | "meter-per-second" | "mile-per-hour" | "celsius" | "fahrenheit" | "temperature" | "kelvin" | "newton-meter" | "pound-force-foot" | "acre-foot" | "barrel" | "bushel" | "centiliter" | "cubic-centimeter" | "cubic-foot" | "cubic-inch" | "cubic-kilometer" | "cubic-meter" | "cubic-mile" | "cubic-yard" | "cup" | "cup-jp" | "cup-metric" | "deciliter" | "dessert-spoon" | "dessert-spoon-imperial" | "dram" | "drop" | "fluid-ounce" | "fluid-ounce-imperial" | "gallon" | "gallon-imperial" | "hectoliter" | "jigger" | "koku" | "kosaji" | "liter" | "megaliter" | "milliliter" | "osaji" | "pinch" | "pint" | "pint-metric" | "quart" | "quart-imperial" | "sai" | "shaku" | "tablespoon" | "teaspoon" | "to-jp";
/**
 * Values 'h' and 'H' for hours have been unified to 'H' for uniqueness
 *
 * @public
 */
export type DateTimePatternFieldType = "G" | "y" | "M" | "d" | "a" | "B" | "H" | "h" | "m" | "s";
/**
 * @public
 */
export type DayPeriodType = "noon" | "midnight" | "am" | "pm" | "morning1" | "morning2" | "afternoon1" | "afternoon2" | "evening1" | "evening2" | "night1" | "night2";
/**
 * @public
 */
export type EraWidthType = "names" | "abbr" | "narrow";
/**
 * @public
 */
export type FieldWidthType = "abbreviated" | "narrow" | "short" | "wide";
/**
 * @public
 */
export type FormatWidthType = "short" | "medium" | "long" | "full";
/**
 * @public
 */
export type DateFieldType = "era" | "year" | "quarter" | "month" | "week" | "weekday" | "weekdayOfMonth" | "sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "day" | "dayperiod" | "hour" | "minute" | "second" | "zone";
/**
 * @public
 */
export type DateFieldWidthType = "short" | "narrow" | "wide";
/**
 * @public
 */
export type RelativeTimeFieldType = "year" | "quarter" | "month" | "week" | "day" | "sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "hour" | "minute" | "second";
/**
 * @public
 */
export type CharacterOrderType = "ltr" | "rtl";
/**
 * @public
 */
export type ContextType = "middle-of-text" | "begin-sentence" | "standalone" | "ui-list-or-menu";
/**
 * @public
 */
export type LineOrderType = "ttb" | "btt";
/**
 * @public
 */
export type ListPatternPositionType = "start" | "middle" | "end" | "two";
/**
 * @public
 */
export type PluralType = "other" | "zero" | "one" | "two" | "few" | "many";
/**
 * @public
 */
export type AltType = "none" | "short" | "narrow" | "variant" | "stand-alone" | "long" | "menu";
/**
 * @public
 */
export type DayPeriodAltType = "none" | "casing";
/**
 * @public
 */
export type EraAltType = "none" | "sensitive";
/**
 * @public
 */
export type CurrencySpacingPos = "before" | "after";
/**
 * @public
 */
export type CurrencySpacingPattern = "currencyMatch" | "surroundingMatch" | "insertBetween";
/**
 * @public
 */
export type NumberSymbolType = "approximatelySign" | "currencyDecimal" | "currencyGroup" | "decimal" | "exponential" | "group" | "infinity" | "list" | "minusSign" | "nan" | "perMille" | "percentSign" | "plusSign" | "superscriptingExponent" | "timeSeparator";
/**
 * These are all of the possible numbering systems we've implemented. Just decimal for now.
 *
 * @public
 */
export type NumberSystemName = "adlm" | "ahom" | "arab" | "arabext" | "bali" | "beng" | "bhks" | "brah" | "cakm" | "cham" | "deva" | "fullwide" | "gonm" | "gujr" | "guru" | "hanidec" | "hmng" | "java" | "kali" | "khmr" | "knda" | "lana" | "lanatham" | "laoo" | "latn" | "lepc" | "limb" | "mathbold" | "mathdbl" | "mathmono" | "mathsanb" | "mathsans" | "mlym" | "modi" | "mong" | "mroo" | "mtei" | "mymr" | "mymrshan" | "mymrtlng" | "newa" | "nkoo" | "olck" | "orya" | "osma" | "saur" | "shrd" | "sind" | "sinh" | "sora" | "sund" | "takr" | "talu" | "tamldec" | "telu" | "thai" | "tibt" | "tirh" | "vaii" | "wara";
/**
 * @public
 */
export type NumberSystemCategory = "default" | "native" | "finance" | "traditional";
/**
 * @public
 */
export type NumberMiscPatternType = "at-least" | "at-most" | "approx" | "range";
/**
 * @public
 */
export interface CalendarFields {
	readonly weekdays: Vector2Arrow<string, string>;
	readonly months: Vector2Arrow<string, string>;
	readonly quarters: Vector2Arrow<string, string>;
	readonly dayPeriods: Vector3Arrow<string, string, DayPeriodAltType>;
}
/**
 * @public
 */
export interface CalendarSchema {
	readonly eras: Vector3Arrow<EraWidthType, string, EraAltType>;
	readonly format: CalendarFields;
	readonly standAlone: CalendarFields;
	readonly availableFormats: Vector1Arrow<string>;
	readonly pluralFormats: Vector2Arrow<PluralType, string>;
	readonly intervalFormats: Vector2Arrow<string, DateTimePatternFieldType>;
	readonly dateFormats: Vector1Arrow<FormatWidthType>;
	readonly timeFormats: Vector1Arrow<FormatWidthType>;
	readonly dateTimeFormats: Vector1Arrow<FormatWidthType>;
	readonly dateTimeFormatsAt: Vector1Arrow<FormatWidthType>;
	readonly intervalFormatFallback: FieldArrow;
}
/**
 * @public
 */
export interface BuddhistSchema extends CalendarSchema {
}
/**
 * @public
 */
export interface GregorianSchema extends CalendarSchema {
}
/**
 * @public
 */
export interface JapaneseSchema extends CalendarSchema {
}
/**
 * @public
 */
export interface PersianSchema extends CalendarSchema {
}
/**
 * @public
 */
export interface CurrenciesSchema {
	readonly displayName: Vector1Arrow<CurrencyType>;
	readonly decimal: Vector1Arrow<CurrencyType>;
	readonly pluralName: Vector2Arrow<PluralType, CurrencyType>;
	readonly symbol: Vector2Arrow<AltType, CurrencyType>;
}
/**
 * @public
 */
export interface RelativeTimeFields {
	readonly previous2: Vector1Arrow<RelativeTimeFieldType>;
	readonly previous: Vector1Arrow<RelativeTimeFieldType>;
	readonly current: Vector1Arrow<RelativeTimeFieldType>;
	readonly next: Vector1Arrow<RelativeTimeFieldType>;
	readonly next2: Vector1Arrow<RelativeTimeFieldType>;
	readonly future: Vector2Arrow<PluralType, RelativeTimeFieldType>;
	readonly past: Vector2Arrow<PluralType, RelativeTimeFieldType>;
}
/**
 * @public
 */
export interface RelativeTimes {
	readonly wide: RelativeTimeFields;
	readonly short: RelativeTimeFields;
	readonly narrow: RelativeTimeFields;
}
/**
 * @public
 */
export interface DateFieldsSchema {
	readonly relativeTimes: RelativeTimes;
	readonly displayName: Vector2Arrow<DateFieldType, DateFieldWidthType>;
}
/**
 * @public
 */
export interface LayoutSchema {
	readonly characterOrder: FieldArrow;
	readonly lineOrder: FieldArrow;
}
/**
 * @public
 */
export interface ListPatternsSchema {
	readonly and: Vector1Arrow<ListPatternPositionType>;
	readonly andShort: Vector1Arrow<ListPatternPositionType>;
	readonly or: Vector1Arrow<ListPatternPositionType>;
	readonly unitLong: Vector1Arrow<ListPatternPositionType>;
	readonly unitNarrow: Vector1Arrow<ListPatternPositionType>;
	readonly unitShort: Vector1Arrow<ListPatternPositionType>;
}
/**
 * @public
 */
export interface ContextTransformsSchema {
	readonly contextTransforms: Vector1Arrow<ContextTransformFieldType>;
}
/**
 * @public
 */
export interface LanguageNameInfo {
	readonly displayName: Vector2Arrow<AltType, LanguageIdType>;
}
/**
 * @public
 */
export interface ScriptNameInfo {
	readonly displayName: Vector2Arrow<AltType, ScriptIdType>;
}
/**
 * @public
 */
export interface RegionNameInfo {
	readonly displayName: Vector2Arrow<AltType, RegionIdType>;
}
/**
 * @public
 */
export interface NamesSchema {
	readonly languages: LanguageNameInfo;
	readonly scripts: ScriptNameInfo;
	readonly regions: RegionNameInfo;
}
/**
 * @public
 */
export interface CurrencyFormats {
	readonly standard: FieldArrow;
	readonly accounting: FieldArrow;
	readonly short: DigitsArrow<PluralType>;
	readonly spacing: Vector2Arrow<CurrencySpacingPos, CurrencySpacingPattern>;
	readonly unitPattern: Vector1Arrow<PluralType>;
}
/**
 * @public
 */
export interface DecimalFormats {
	readonly standard: FieldArrow;
	readonly short: DigitsArrow<PluralType>;
	readonly long: DigitsArrow<PluralType>;
}
/**
 * @public
 */
export interface NumberSystemInfo {
	readonly symbols: Vector1Arrow<NumberSymbolType>;
	readonly currencyFormats: CurrencyFormats;
	readonly decimalFormats: DecimalFormats;
	readonly percentFormat: FieldArrow;
	readonly scientificFormat: FieldArrow;
	readonly miscPatterns: Vector1Arrow<NumberMiscPatternType>;
}
/**
 * @public
 */
export interface NumbersSchema {
	readonly minimumGroupingDigits: FieldArrow;
	readonly numberSystems: Vector1Arrow<NumberSystemCategory>;
	readonly numberSystem: ScopeArrow<NumberSystemName, NumberSystemInfo>;
}
/**
 * @public
 */
export type TimeZoneNameType = "daylight" | "generic" | "standard";
/**
 * @public
 */
export interface MetaZoneInfo {
	readonly short: Vector2Arrow<TimeZoneNameType, MetaZoneType>;
	readonly long: Vector2Arrow<TimeZoneNameType, MetaZoneType>;
}
/**
 * @public
 */
export interface TimeZoneSchema {
	readonly metaZones: MetaZoneInfo;
	readonly exemplarCity: Vector1Arrow<string>;
	readonly gmtFormat: FieldArrow;
	readonly hourFormat: FieldArrow;
	readonly gmtZeroFormat: FieldArrow;
	readonly regionFormat: FieldArrow;
}
/**
 * @public
 */
export interface UnitInfo {
	readonly unitPattern: Vector2Arrow<PluralType, UnitType>;
	readonly displayName: Vector1Arrow<UnitType>;
	readonly perUnitPattern: Vector1Arrow<UnitType>;
	readonly perPattern: FieldArrow;
	readonly timesPattern: FieldArrow;
}
/**
 * @public
 */
export interface UnitsSchema {
	readonly long: UnitInfo;
	readonly narrow: UnitInfo;
	readonly short: UnitInfo;
}
/**
 * @public
 */
export interface Schema {
	readonly Names: NamesSchema;
	readonly Numbers: NumbersSchema;
	readonly DateFields: DateFieldsSchema;
	readonly Layout: LayoutSchema;
	readonly ListPatterns: ListPatternsSchema;
	readonly Buddhist: BuddhistSchema;
	readonly Gregorian: GregorianSchema;
	readonly Japanese: JapaneseSchema;
	readonly Persian: PersianSchema;
	readonly TimeZones: TimeZoneSchema;
	readonly Currencies: CurrenciesSchema;
	readonly Units: UnitsSchema;
	readonly ContextTransforms: ContextTransformsSchema;
}
/**
 * @public
 */
export interface SchemaConfig {
	/**
	 * Calendar types to include. Note that 'gregory' for the
	 * gregorian calendar will be included by default, even if
	 * omitted from this list.
	 *
	 * Ex: ['buddhist', 'japanese', 'persian']
	 */
	calendars?: string[];
	/**
	 * Control which skeleton date time formats are available at runtime.
	 */
	["gregorian-available-format"]?: string[];
	["gregorian-plural-format"]?: string[];
	["gregorian-interval-format"]?: string[];
	["buddhist-available-format"]?: string[];
	["buddhist-plural-format"]?: string[];
	["buddhist-interval-format"]?: string[];
	["japanese-available-format"]?: string[];
	["japanese-plural-format"]?: string[];
	["japanese-interval-format"]?: string[];
	["persian-available-format"]?: string[];
	["persian-plural-format"]?: string[];
	["persian-interval-format"]?: string[];
	/**
	 * Currency codes to include.
	 *
	 * Ex: ['USD', 'EUR', 'GBP', 'JPY', 'CAD', ... ]
	 */
	["currency-id"]?: string[];
	/**
	 * Language identifiers to include. This only controls
	 * inclusion of language display name data.
	 */
	["language-id"]?: string[];
	/**
	 * Script identifiers to include. This only controls
	 * inclusion of script display name data.
	 */
	["script-id"]?: string[];
	/**
	 * Region identifiers to include. This only controls
	 * inclusion of region display name data.
	 */
	["region-id"]?: string[];
	/**
	 * Units to include.
	 *
	 * Ex: ['meter', 'kilogram', 'foot']
	 */
	["unit-id"]?: string[];
	/**
	 * CLDR stable timezone identifiers to include. This only
	 * controls inclusion of exemplar city data. All timezone
	 * ids and offset data will work even if this array is
	 * empty.
	 *
	 * Ex: ['America/New_York', 'America/Adak', ... ]
	 */
	["timezone-id"]?: string[];
	/**
	 * Number system names to include. Note that 'latn' will be
	 * included by default, even if omitted from this list.
	 *
	 * Ex: ['arab', 'laoo']
	 */
	["number-system-name"]?: string[];
}
/**
 * A single part of a multi-part value.
 *
 * @public
 */
export interface Part {
	type: string;
	value: string;
}
/**
 * Formatting of decimal values.
 *
 * @public
 */
export interface DecimalFormatter<T> {
	/**
	 * Add a new part to the formatted value.
	 */
	add(c: string): void;
	/**
	 * Finalize and return the formatted value.
	 */
	render(): T;
}
/**
 * Flags indicate special values.
 *
 * @public
 */
export declare const enum DecimalFlag {
	NONE = 0,
	NAN = 1,
	INFINITY = 2
}
/**
 * Modes for controlling rounding.
 *
 * @public
 */
export type RoundingModeType = "up" | "down" | "ceiling" | "floor" | "half-up" | "half-down" | "half-even";
/**
 * Sets the scale or precision, and the rounding mode for a math operation.
 *
 * @public
 */
export interface MathContext {
	scale?: number;
	precision?: number;
	round?: RoundingModeType;
}
export declare const enum Op {
	ADDITION = 0,
	SUBTRACTION = 1,
	MULTIPLICATION = 2,
	DIVISION = 3,
	MOD = 4
}
/**
 * Valid argument for constructing a Decimal value.
 *
 * @public
 */
export type DecimalArg = number | string | Decimal;
/**
 * Arbitrary precision decimal type.
 *
 * @public
 */
export declare class Decimal {
	protected data: number[];
	protected sign: number;
	protected _exp: number;
	protected flag: DecimalFlag;
	constructor(num: DecimalArg);
	/**
	 * Return the decimal's exponent.
	 */
	exp(): number;
	/**
	 * Return true if this decimal is not a number (NaN).
	 */
	isNaN(): boolean;
	/**
	 * Return true if this decimal is finite (not infinity or NaN).
	 */
	isFinite(): boolean;
	/**
	 * Return true if this decimal is positive or negative infinity.
	 */
	isInfinity(): boolean;
	/**
	 * Compare decimal u to v, returning the following:
	 *
	 *  -1   if  u &lt; v
	 *   0   if  u = v
	 *   1   if  u &gt; v
	 *
	 * If the abs flag is true compare the absolute values.
	 *
	 * Any NAN argument will always return -1.
	 */
	compare(v: DecimalArg, abs?: boolean): number;
	/**
	 * Return the raw internal properties of the number. Use with caution.
	 */
	properties(): [
		number[],
		number,
		number,
		number
	];
	/**
	 * Return the absolute value of the number.
	 */
	abs(): Decimal;
	/**
	 * Invert this number's sign.
	 */
	negate(): Decimal;
	/**
	 * Indicates this number is negative.
	 */
	isNegative(): boolean;
	/**
	 * Signum.
	 */
	signum(): number;
	/**
	 * Check if this number can be represented as an integer without loss of precision.
	 * For example, '12.000' is the same number as '12'.
	 */
	isInteger(): boolean;
	/**
	 * Number is exactly zero. Exponent may exist, e.g. "0e-2" is "0.00".
	 */
	isZero(): boolean;
	/**
	 * Return the integer part.
	 */
	toInteger(): Decimal;
	/**
	 * Adds v.
	 */
	add(v: DecimalArg): Decimal;
	/**
	 * Subtracts v.
	 */
	subtract(v: DecimalArg): Decimal;
	/**
	 * Multiplies by v with optional math context.
	 */
	multiply(v: DecimalArg, context?: MathContext): Decimal;
	/**
	 * Divide by v with optional math context.
	 */
	divide(v: DecimalArg, context?: MathContext): Decimal;
	/**
	 * Divide by v and return the quotient and remainder.
	 */
	divmod(v: DecimalArg): [
		Decimal,
		Decimal
	];
	/**
	 * Divide by v and return the remainder.
	 */
	mod(v: DecimalArg): Decimal;
	/**
	 * Number of trailing zeros.
	 */
	trailingZeros(): number;
	/**
	 * Strip all trailing zeros.
	 */
	stripTrailingZeros(): Decimal;
	/**
	 * Return a scientific representation of the number,
	 * Decimal coefficient and adjusted exponent.
	 */
	scientific(minIntDigits?: number): [
		Decimal,
		number
	];
	/**
	 * Number of digits in the unscaled value.
	 */
	precision(): number;
	/**
	 * Scale is the number of digits to the right of the decimal point.
	 */
	scale(): number;
	/**
	 * Number of integer digits, 1 or higher.
	 */
	integerDigits(): number;
	/**
	 * Returns a new number with the given scale, shifting the coefficient as needed.
	 */
	setScale(scale: number, roundingMode?: RoundingModeType): Decimal;
	/**
	 * Adjusted exponent for alignment. Two numbers with the same aligned exponent are
	 * aligned for arithmetic operations. If the aligned exponents do not match one
	 * number must be shifted.
	 */
	alignexp(): number;
	/**
	 * Move the decimal point -n (left) or +n (right) places. Does not change
	 * precision, only affects the exponent.
	 */
	movePoint(n: number): Decimal;
	/**
	 * Shifts all digits to the left, increasing the precision.
	 */
	shiftleft(shift: number): Decimal;
	/**
	 * Shifts all digits to the right, reducing the precision. Result is rounded
	 * using the given rounding mode.
	 */
	shiftright(shift: number, mode?: RoundingModeType): Decimal;
	/**
	 * Increment the least-significant integer digit.
	 */
	increment(): Decimal;
	/**
	 * Decrement the least-significant integer digit.
	 */
	decrement(): Decimal;
	/**
	 * Format the number to a string, using fixed point.
	 */
	toString(): string;
	/**
	 * Format this number to scientific notation as a string.
	 */
	toScientificString(minIntegers?: number): string;
	/**
	 * Format this number to an array of parts.
	 */
	toParts(): Part[];
	/**
	 * Format this number to scientific notation as an array of parts.
	 */
	toScientificParts(minIntegers?: number): Part[];
	/**
	 * Low-level formatting of string and Part[] forms.
	 */
	format<R>(formatter: DecimalFormatter<R>, decimal: string, group: string, minInt: number, minGroup: number, priGroup: number, secGroup: number, zeroScale: boolean, digits?: string[]): void;
	protected formatFlags(): string;
	protected formatFlagsParts(): Part[];
	protected formatString(d: Decimal, minInt: number): string;
	protected formatParts(d: Decimal, minInt: number): Part[];
	/**
	 * Handle setting of flags for operations per the IEEE-754-2008 specification.
	 * These rules are also referenced in the EcmaScript specification:
	 *
	 * 12.7.3.1 - Applying the mul operator:
	 * https://tc39.github.io/ecma262/#sec-applying-the-mul-operator
	 *
	 * 12.7.3.2 - Applying the div operator:
	 * https://tc39.github.io/ecma262/#sec-applying-the-div-operator
	 *
	 * 12.7.3.3 - Applying the mod operator:
	 * https://tc39.github.io/ecma262/#sec-applying-the-mod-operator
	 *
	 * 12.8.5 - Applying the additive operators to numbers:
	 * https://tc39.github.io/ecma262/#sec-applying-the-additive-operators-to-numbers
	 *
	 */
	protected handleFlags(op: Op, v: Decimal): Decimal | undefined;
	protected static fromRaw(sign: number, _exp: number, data: number[], flag: DecimalFlag): Decimal;
	/**
	 * Mutating in-place shift left.
	 */
	protected _shiftleft(shift: number): void;
	/**
	 * Mutating in-place shift right.
	 */
	protected _shiftright(shift: number, mode: RoundingModeType): void;
	protected _setScale(scale: number, roundingMode?: RoundingModeType): void;
	protected _stripTrailingZeros(): void;
	/**
	 * Trim leading zeros from a result and reset sign and exponent accordingly.
	 */
	protected trim(): Decimal;
	/**
	 * Increment the least-significant digit of the coefficient.
	 */
	protected _increment(): void;
	/**
	 * Return a rounding indicator for a given rounding mode,
	 */
	protected round(rnd: number, rest: number, mode: RoundingModeType): number;
	/**
	 * Return true if this instance is odd.
	 */
	protected isodd(): boolean;
	/**
	 * Addition and subtraction.
	 */
	protected addsub(u: Decimal, v: Decimal, vsign: number): Decimal;
	/**
	 * Parse a number or string setting the fields on the current instance.
	 */
	protected parse(arg: string | number): void;
	/**
	 * Parse a string into a Decimal.
	 *
	 * Expects strings of the form:
	 *    "[-+][digits][.][digits][eE][-+][digits]"
	 * or:
	 *    "[nN]a[nN]"        for a NaN
	 *    "[-+]?[iI]nfinity" for positive or negative infinity
	 */
	protected _parse(str: string): string | undefined;
}
/**
 * Common Decimal values as constants.
 *
 * @public
 */
export declare const DecimalConstants: {
	ZERO: Decimal;
	ONE: Decimal;
	TWO: Decimal;
	PI: Decimal;
	E: Decimal;
	NAN: Decimal;
	POSITIVE_INFINITY: Decimal;
	NEGATIVE_INFINITY: Decimal;
};
/**
 * Valid argument for constructing a Rational value.
 *
 * @public
 */
export type RationalArg = Rational | Decimal | number | string;
/**
 * Arbitrary precision rational type.
 *
 * @public
 */
export declare class Rational {
	protected numer: Decimal;
	protected denom: Decimal;
	constructor(numerator: DecimalArg, denominator?: DecimalArg);
	numerator(): Decimal;
	denominator(): Decimal;
	compare(num: RationalArg, context?: MathContext): number;
	divide(num: RationalArg, context?: MathContext): Rational;
	multiply(num: RationalArg, context?: MathContext): Rational;
	inverse(): Rational;
	toDecimal(context?: MathContext): Decimal;
	toString(): string;
	private _parse;
}
/**
 * IETF BCP 47 language tag with static methods for parsing, adding likely
 * subtags, etc.
 *
 * @public
 */
export declare class LanguageTag {
	protected core: (undefined | string)[];
	protected _extensions: {
		[x: string]: string[];
	};
	protected _privateUse: string;
	protected _extlangs: string[];
	protected _compact?: string;
	protected _expanded?: string;
	constructor(language?: string, script?: string, region?: string, variant?: string, extensions?: {
		[x: string]: string[];
	}, privateUse?: string, extlangs?: string[]);
	/**
	 * Language subtag.
	 */
	language(): string;
	/**
	 * Returns true if the language subtag is defined.
	 */
	hasLanguage(): boolean;
	/**
	 * Script subtag.
	 */
	script(): string;
	/**
	 * Returns true if the script subtag is defined.
	 */
	hasScript(): boolean;
	/**
	 * Region subtag.
	 */
	region(): string;
	/**
	 * Returns true if the region subtag is defined.
	 */
	hasRegion(): boolean;
	/**
	 * Variant subtag.
	 */
	variant(): string;
	/**
	 * Return a copy of this language tag's extensions map.
	 */
	extensions(): {
		[x: string]: string[];
	};
	/**
	 * Return a copy of the extensions of the given type. Use 'u' for Unicode
	 * and 't' for Transforms.
	 */
	extensionSubtags(key: string): string[];
	/**
	 * Private use subtag.
	 */
	privateUse(): string;
	/**
	 * Extended language tags, used for BCP 47 canonicalization.
	 */
	extlangs(): string[];
	/**
	 * Return a compact string representation of the language tag. Any undefined
	 * fields will be omitted.
	 */
	compact(): string;
	/**
	 * Return an expanded string representation of the language tag. Any undefined
	 * fields will emit their undefined value.
	 */
	expanded(): string;
	/**
	 * Return a compact string representation of the language tag. Any undefined
	 * fields will be omitted.
	 */
	toString(): string;
	/**
	 * Render a tag in compact or expanded form.
	 */
	private render;
}
/**
 * Wrapper pairing an application's opaque locale identifier with a
 * parsed and resolved language tag object.
 *
 * @public
 */
export interface Locale {
	/**
	 * Application's own identifier for the locale, e.g. 'en_US', 'fr-CA', etc.
	 * We preserve this since applications may use it as a unique key to
	 * resolve translated messages, and may be forced to use a legacy
	 * identifier.
	 */
	readonly id: string;
	/**
	 * Language tag that has been parsed and resolved. Parsing canonicalizes
	 * the subtags, while resolution includes substituting language and
	 * territory aliases and adding likely subtags.
	 */
	readonly tag: LanguageTag;
}
/**
 * Merged declaration to add a resolve() method to Locale interface.
 *
 * @public
 */
export declare class LocaleResolver {
	/**
	 * Parses a language tag and resolves it, substituting aliases and
	 * adding likely subtags.
	 */
	static resolve(id: string): Locale;
}
/**
 * Methods for substituting language and region aliases, adding likely subtags, etc.
 *
 * @public
 */
export declare class LanguageResolver {
	/**
	 * Substitute aliases only.
	 */
	static substituteAliases(real: string | LanguageTag): LanguageTag;
	/**
	 * Substitute all relevant aliases, and then add likely subtags.
	 */
	static resolve(real: string | LanguageTag): LanguageTag;
	/**
	 * Add any missing subtags using the likely subtags mapping. For example,
	 * this would convert "en" to "en-Latn-US".
	 */
	static addLikelySubtags(real: string | LanguageTag): LanguageTag;
	/**
	 * Remove any subtags that would be added by addLikelySubtags() above. For example,
	 * this would convert "en-Latn-US" to "en".
	 */
	static removeLikelySubtags(real: string | LanguageTag): LanguageTag;
}
/**
 * A result returned by the LocaleMatcher.
 *
 * @public
 */
export interface LocaleMatch {
	/**
	 * The locale that was matched.
	 */
	locale: Locale;
	/**
	 * Distance of the match from the desired locale.
	 */
	distance: number;
}
/**
 * Options for the LocaleMatcher.
 *
 * @public
 */
export interface LocaleMatcherOptions {
	/**
	 * Resolve language tags. (default true)
	 */
	resolve?: boolean;
}
/**
 * Given a list of supported locales, and a list of a user's desired locales
 * (sorted in the order of preference, descending), returns the supported
 * locale closest to the user preference. The first locale in the list will
 * be used as the default. The default will be selected if no match is within
 * the distance threshold.
 *
 * Implementation of CLDR enhanced language matching:
 * http://www.unicode.org/reports/tr35/tr35.html#EnhancedLanguageMatching
 *
 * @public
 */
export declare class LocaleMatcher {
	private supported;
	private count;
	private default;
	private exactMap;
	constructor(supportedLocales: string | (Locale | LanguageTag | string)[], options?: LocaleMatcherOptions);
	/**
	 * Find the desired locale that is the closed match to a supported locale, within
	 * the given threshold. Any matches whose distance is greater than or equal to the
	 * threshold will be treated as having maximum distance.
	 */
	match(desiredLocales: string | string[], threshold?: number): LocaleMatch;
}
/**
 * Operands for use in evaluating localized plural rules:
 * See: http://www.unicode.org/reports/tr35/tr35-numbers.html#Plural_Operand_Meanings
 *
 * symbol    value
 * ----------------
 *   n       absolute value of the source number (integer and decimals)
 *   i       integer digits of n
 *   v       number of visible fraction digits in n, with trailing zeros
 *   w       number of visible fraction digits in n, without trailing zeros
 *   f       visible fractional digits in n, with trailing zeros
 *   t       visible fractional digits in n, without trailing zeros
 *   c       compact decimal exponent value
 *   e       synonym for 'c', may be redefined in the future
 *
 * @public
 */
export declare class NumberOperands {
	n: number;
	i: number;
	v: number;
	w: number;
	f: number;
	t: number;
	c: number;
	/**
	 * Compute the plural operands for the Decimal `d` with optional compact
	 * exponent `c`.
	 */
	constructor(d: Decimal, c?: number);
	toString(): string;
}
/**
 * Plural operations for a given language.
 *
 * @public
 */
export interface PluralRules {
	operands(d: Decimal): NumberOperands;
	cardinal(n: DecimalArg, c?: number): string;
	ordinal(n: DecimalArg): string;
	range(start: DecimalArg, end: DecimalArg): string;
}
/**
 * Global instance for fetching plural rules by language and region.
 *
 * @public
 */
export declare class Plurals {
	/**
	 * Get the plural rules for a given language and optional region.
	 */
	get(language: string, region?: string): PluralRules;
}
/**
 * Global instance for fetching plural rules by language and region.
 *
 * @public
 */
export declare const pluralRules: Plurals;
/**
 * An argument value can have any type. We cast at the time of evaluation.
 * This allows us to accept rich arguments for user-defined custom formatters.
 *
 * @public
 */
export type MessageArg = any;
/**
 * Named args where each argument is given an explicit associative index or name.
 * These can override positional arguments.
 *
 * @public
 */
export type MessageNamedArgs = {
	[s: string]: MessageArg;
	[n: number]: MessageArg;
};
/**
 * Interface for argument converters.
 *
 * @public
 */
export interface MessageArgConverter {
	asString(arg: MessageArg | undefined): string;
	asDecimal(arg: MessageArg | undefined): Decimal;
}
/**
 * Converts arguments to string or Decimal.
 *
 * @public
 */
export declare class DefaultMessageArgConverter implements MessageArgConverter {
	/**
	 * Convert to a string if possible.
	 */
	asString(arg: MessageArg | undefined): string;
	/**
	 * Convert to a Decimal if possible, or zero.
	 */
	asDecimal(arg: MessageArg | undefined): Decimal;
}
/**
 * A string and range of characters [s, e) (from 's' up to but not including 'e'),
 * representing the current state of the parse of a given scope inside a
 * message string.
 *
 * @public
 */
export interface MessageState {
	t: string;
	s: number;
	e: number;
}
/**
 * Matches message syntax fragments.
 *
 * @public
 */
export interface MessageMatcher {
	/**
	 * Return the next character.
	 */
	char(r: MessageState): string;
	/**
	 * Indicate if we've reached the end of input.
	 */
	complete(r: MessageState): boolean;
	/**
	 * Match one or more spaces.
	 */
	spaces(r: MessageState): boolean;
	/**
	 * Match a list of arguments.
	 */
	arguments(r: MessageState): (number | string)[] | undefined;
	/**
	 * Match variable identifier.
	 */
	identifier(r: MessageState): string | undefined;
	/**
	 * Match a list of options.
	 */
	options(r: MessageState): string[];
	/**
	 * Match a formatter name.
	 */
	formatter(r: MessageState): string | undefined;
	/**
	 * Match a plural offset.
	 */
	pluralOffset(r: MessageState): number;
	/**
	 * Match a plural choice (exact or category).
	 */
	pluralChoice(r: MessageState): string | undefined;
}
/**
 * Constructs the right instance of matcher based on the runtime environment's
 * support of sticky regexp, while allowing substring matcher to be selected for
 * testing.
 *
 * @public
 */
export declare const buildMessageMatcher: (names: string[], sticky?: boolean) => MessageMatcher;
/**
 * Argument reference inside a message instruction.
 *
 * @public
 */
export type Argument = string | number;
/**
 * Type of a message instruction.
 *
 * @public
 */
export declare const enum MessageOpType {
	TEXT = 0,
	ARG = 1,
	PLURAL = 2,
	SELECT = 3,
	BLOCK = 4,
	NOOP = 5,
	SIMPLE = 6,
	ARGSUB = 7
}
/**
 * Instruction representing "no operation".
 *
 * @public
 */
export interface MessageNoopCode {
	[0]: MessageOpType.NOOP;
}
/**
 * Instruction representing an argument.
 *
 * @public
 */
export interface MessageArgCode {
	[0]: MessageOpType.ARG;
	[1]: Argument;
}
/**
 * Instruction representing an argument substitution.
 *
 * @public
 */
export interface MessageArgSubCode {
	[0]: MessageOpType.ARGSUB;
}
/**
 * Instruction representing static text.
 *
 * @public
 */
export interface MessageTextCode {
	[0]: MessageOpType.TEXT;
	[1]: string;
}
/**
 * Instruction representing a block of instructions.
 *
 * @public
 */
export interface MessageBlockCode {
	[0]: MessageOpType.BLOCK;
	[1]: MessageCode[];
}
/**
 * Type of a plural instruction.
 *
 * @public
 */
export declare const enum PluralNumberType {
	CARDINAL = 0,
	ORDINAL = 1
}
/**
 * Instruction representing a plural formatter.
 *
 * @public
 */
export interface MessagePluralCode {
	[0]: MessageOpType.PLURAL;
	[1]: Argument[];
	[2]: number;
	[3]: PluralNumberType;
	[4]: PluralChoice[];
}
/**
 * Type of plural choice match.
 *
 * @public
 */
export declare const enum PluralChoiceType {
	EXACT = 0,
	CATEGORY = 1
}
/**
 * Instruction representing a plural exact choice.
 *
 * @public
 */
export interface PluralExactChoice {
	[0]: PluralChoiceType.EXACT;
	[1]: string;
	[2]: MessageCode;
}
/**
 * Instruction representing a plural category choice.
 *
 * @public
 */
export interface PluralCategoryChoice {
	[0]: PluralChoiceType.CATEGORY;
	[1]: string;
	[2]: MessageCode;
}
/**
 * Type of plural choice instruction.
 *
 * @public
 */
export type PluralChoice = PluralExactChoice | PluralCategoryChoice;
/**
 * Instruction representing a select formatter.
 *
 * @public
 */
export interface MessageSelectCode {
	[0]: MessageOpType.SELECT;
	[1]: Argument[];
	[2]: SelectChoice[];
}
/**
 * Choice in a select formatter.
 *
 * @public
 */
export interface SelectChoice {
	[0]: string;
	[1]: MessageCode;
}
/**
 * Instruction representing a custom user-defined formatter.
 *
 * User can plugin formatters that accept 1 or more arguments
 * and zero or more options.
 *
 * @public
 */
export interface MessageSimpleCode {
	[0]: MessageOpType.SIMPLE;
	[1]: string;
	[2]: Argument[];
	[3]: string[];
}
/**
 * Type of a message instruction.
 *
 * @public
 */
export type MessageCode = MessageArgCode | MessageTextCode | MessagePluralCode | MessageBlockCode | MessageSelectCode | MessageSimpleCode | MessageArgSubCode | MessageNoopCode;
/**
 * Parses a string into message code. The result can be used to evaluate the
 * message or serialized to JSON for later evaluation.
 *
 * @public
 */
export declare const parseMessagePattern: (raw: string, matcher: MessageMatcher, disableEscapes?: boolean) => MessageCode;
/**
 * User-defined message formatter function.
 *
 * @public
 */
export type MessageFormatFunc = (args: MessageArg[], options: string[]) => string;
/**
 * A map of user-defined formatter names to their implementations.
 *
 * @public
 */
export type MessageFormatFuncMap = {
	[name: string]: MessageFormatFunc;
};
/**
 * Evaluates a message format against a set of arguments, producing a string.
 *
 * @public
 */
export declare class MessageEngine {
	private plurals;
	private converter;
	private formatters;
	private code;
	private buf;
	constructor(plurals: PluralRules, converter: MessageArgConverter, formatters: MessageFormatFuncMap, code: MessageCode);
	/**
	 * Evaluate the message code against the given arguments.
	 */
	evaluate(positional: MessageArg[], named?: MessageNamedArgs): string;
	private _evaluate;
}
/**
 * Configures a MessageFormatter instance.
 *
 * @public
 */
export interface MessageFormatterOptions {
	/**
	 * Language code, e.g. "en"
	 */
	language?: string;
	/**
	 * Region code. e.g. "US"
	 */
	region?: string;
	/**
	 * The plural rules you want to use. Otherwise it will be selected
	 * using the language + region.
	 */
	plurals?: PluralRules;
	/**
	 * Functions to map raw arguments to the types required by the internal tags,
	 * 'plural', 'select', 'selectordinal'.
	 */
	converter?: MessageArgConverter;
	/**
	 * Custom formatting functions.
	 */
	formatters?: MessageFormatFuncMap;
	/**
	 * Number of parsed messages to cache internally.
	 */
	cacheSize?: number;
	/**
	 * Disables the escaping of text between matching apostrophes.
	 */
	disableEscapes?: boolean;
}
/**
 * Convenience class that caches parsed messages.
 *
 * @public
 */
export declare class MessageFormatter {
	private plurals;
	private converter;
	private formatters;
	private matcher;
	private cache;
	constructor(options?: MessageFormatterOptions);
	/**
	 * Parse and evaluate the message against the given argument. Internally caches parsed
	 * messages for reuse.
	 */
	format(message: string, positional: MessageArg[], named: MessageNamedArgs): string;
	/**
	 * String representation of this formatter.
	 */
	toString(): string;
}
/**
 * Represents abbreviation, daylight savings and timezone offset for
 * a single time zone.
 *
 * @public
 */
export interface ZoneInfo {
	/**
	 * Time zone identifier.
	 */
	zoneid: string;
	/**
	 * Time zone 3-character abbreviation.
	 */
	abbr: string;
	/**
	 * Flag indicating the zone is currently in daylight savings time.
	 */
	dst: number;
	/**
	 * Time zone offset from UTC.
	 */
	offset: number;
}
/**
 * @public
 */
export type NumberSystemType = NumberSystemCategory | NumberSystemName;
/**
 * @public
 */
export type NumberFormatErrorType = "nan" | "infinity";
/**
 * @public
 */
export interface NumberFormatOptions {
	nu?: NumberSystemType;
	round?: RoundingModeType;
	group?: boolean;
	minimumIntegerDigits?: number;
	maximumFractionDigits?: number;
	minimumFractionDigits?: number;
	maximumSignificantDigits?: number;
	minimumSignificantDigits?: number;
	/**
	 * Values whose fraction part is all zeros will format as a whole number,
	 * e.g. '10.00' formats as '$10'
	 */
	trimZeroFractions?: boolean;
}
/**
 * @public
 */
export type NumberFormatStyleType = "decimal" | "short" | "long" | "scientific";
/**
 * @public
 */
export type DecimalFormatStyleType = NumberFormatStyleType | "percent" | "percent-scaled" | "permille" | "permille-scaled";
/**
 * @public
 */
export type CurrencyFormatStyleType = "symbol" | "accounting" | "code" | "name" | "short";
/**
 * @public
 */
export type CurrencySymbolWidthType = "default" | "narrow";
/**
 * @public
 */
export interface DecimalFormatOptions extends NumberFormatOptions {
	divisor?: number;
	negativeZero?: boolean;
	style?: DecimalFormatStyleType;
	errors?: NumberFormatErrorType[];
}
/**
 * @public
 */
export interface DecimalAdjustOptions {
	round?: RoundingModeType;
	minimumIntegerDigits?: number;
	maximumFractionDigits?: number;
	minimumFractionDigits?: number;
	maximumSignificantDigits?: number;
	minimumSignificantDigits?: number;
}
/**
 * @public
 */
export interface CurrencyFormatOptions extends NumberFormatOptions {
	divisor?: number;
	cash?: boolean;
	style?: CurrencyFormatStyleType;
	symbolWidth?: CurrencySymbolWidthType;
}
/**
 * Information on rounding and number of decimal digits for a given currency.
 *
 * @public
 */
export interface CurrencyFractions {
	digits: number;
	rounding: number;
	cashDigits: number;
	cashRounding: number;
}
/**
 * The internal type name for Gregorian calendar is "gregory" so that it can fit
 * into a language tag ("zh-u-ca-gregory") as "gregorian" exceeds the 8-char
 * limit.
 * See https://www.unicode.org/reports/tr35/#Key_And_Type_Definitions_
 *
 * @public
 */
export type CalendarType = "buddhist" | "gregory" | "iso8601" | "japanese" | "persian";
/**
 * Fields on a CalendarDate.
 *
 * @public
 */
export interface CalendarDateFields {
	year: number;
	month: number;
	day: number;
	hour: number;
	minute: number;
	second: number;
	millis: number;
	zoneId: string;
}
interface ZoneInfo$1 {
	zoneid: string;
	stableid: string;
	abbr: string;
	dst: number;
	offset: number;
	metazoneid: string;
}
/**
 * @public
 */
export type TimePeriodField = "year" | "month" | "week" | "day" | "hour" | "minute" | "second" | "millis";
/**
 * @public
 */
export interface TimePeriod {
	year: number;
	month: number;
	week: number;
	day: number;
	hour: number;
	minute: number;
	second: number;
	millis: number;
}
export type CalendarDateModFields = keyof Pick<CalendarDateFields, "year" | "month" | "day" | "hour" | "minute" | "second">;
/**
 * Base class for dates in supported calendars.
 *
 * @public
 */
export declare abstract class CalendarDate {
	protected readonly _type: CalendarType;
	protected readonly _firstDay: number;
	protected readonly _minDays: number;
	protected static _gregorian: (d: CalendarDate, utc: boolean, firstDate: number, minDays: number) => CalendarDate;
	protected _fields: number[];
	protected _zoneInfo: ZoneInfo$1;
	/**
	 * Minimal fields required to construct any calendar date.
	 */
	protected constructor(_type: CalendarType, _firstDay: number, _minDays: number);
	/**
	 * Calendar type for this date, e.g. 'gregory' for Gregorian.
	 *
	 * @public
	 */
	type(): CalendarType;
	/**
	 * Returns a formatted ISO-8601 string of the date in UTC. Note that this
	 * always returns a date in the Gregorian calendar.
	 *
	 * @public
	 */
	toISOString(): string;
	/**
	 * Returns a formatted ISO 8601 string of the date with local timezone offset.
	 * Note that this always returns a date in the Gregorian calendar.
	 *
	 * @public
	 */
	toLocalISOString(): string;
	/**
	 * Unix epoch with no timezone offset.
	 *
	 * @public
	 */
	unixEpoch(): number;
	/**
	 * First day of week.
	 *
	 * @public
	 */
	firstDayOfWeek(): number;
	/**
	 * Minimum days in the first week.
	 *
	 * @public
	 */
	minDaysInFirstWeek(): number;
	/**
	 * Returns a floating point number representing the real Julian Day, UTC.
	 *
	 * @public
	 */
	julianDay(): number;
	/**
	 * CLDR's modified Julian day used as the basis for all date calculations.
	 *
	 * @public
	 */
	modifiedJulianDay(): number;
	/**
	 * Era
	 *
	 * @public
	 */
	era(): number;
	/**
	 * Extended year.
	 *
	 * @public
	 */
	extendedYear(): number;
	/**
	 * Year.
	 *
	 * @public
	 */
	year(): number;
	/**
	 * Related year.
	 *
	 * @public
	 */
	relatedYear(): number;
	/**
	 * Year of week of year.
	 *
	 * @public
	 */
	yearOfWeekOfYear(): number;
	/**
	 * Week of year.
	 *
	 * @public
	 */
	weekOfYear(): number;
	/**
	 * Year of week of year ISO.
	 *
	 * @public
	 */
	yearOfWeekOfYearISO(): number;
	/**
	 * Week of year ISO.
	 *
	 * @public
	 */
	weekOfYearISO(): number;
	/**
	 * Ordinal month, one-based, e.g. Gregorian JANUARY = 1.
	 */
	month(): number;
	/**
	 * Returns the week of the month computed using the locale's 'first day
	 * of week' and 'minimal days in first week' where applicable.
	 *
	 * For example, for the United States, weeks start on Sunday.
	 * Saturday 9/1/2018 would be in week 1, and Sunday 9/2/2018 would
	 * begin week 2.
	 *
	 *         September
	 *   Su Mo Tu We Th Fr Sa
	 *                      1
	 *    2  3  4  5  6  7  8
	 *    9 10 11 12 13 14 15
	 *   16 17 18 19 20 21 22
	 *   23 24 25 26 27 28 29
	 *   30
	 */
	weekOfMonth(): number;
	dayOfYear(): number;
	/**
	 * Day of the week. 1 = SUNDAY, 2 = MONDAY, ..., 7 = SATURDAY
	 */
	dayOfWeek(): number;
	/**
	 * Ordinal day of the week. 1 if this is the 1st day of the week,
	 * 2 if the 2nd, etc. Depends on the local starting day of the week.
	 */
	ordinalDayOfWeek(): number;
	/**
	 * Ordinal number indicating the day of the week in the current month.
	 * The result of this method can be used to format messages like
	 * "2nd Sunday in August".
	 */
	dayOfWeekInMonth(): number;
	/**
	 * Day of month.
	 *
	 * @public
	 */
	dayOfMonth(): number;
	/**
	 * Is AM.
	 *
	 * @public
	 */
	isAM(): boolean;
	/**
	 * Indicates the hour of the morning or afternoon, used for the 12-hour
	 * clock (0 - 11). Noon and midnight are 0, not 12.
	 */
	hour(): number;
	/**
	 * Indicates the hour of the day, used for the 24-hour clock (0 - 23).
	 * Noon is 12 and midnight is 0.
	 */
	hourOfDay(): number;
	/**
	 * Indicates the minute of the hour (0 - 59).
	 */
	minute(): number;
	/**
	 * Indicates the second of the minute (0 - 59).
	 */
	second(): number;
	/**
	 * Milliseconds.
	 *
	 * @public
	 */
	milliseconds(): number;
	/**
	 * Milliseconds in day.
	 *
	 * @public
	 */
	millisecondsInDay(): number;
	/**
	 * Metazone (CLDR) identifier.
	 *
	 * @public
	 */
	metaZoneId(): MetaZoneType;
	/**
	 * Timezone identifier.
	 *
	 * @public
	 */
	timeZoneId(): string;
	/**
	 * Timezone stable identifier (CLDR)
	 *
	 * @public
	 */
	timeZoneStableId(): string;
	/**
	 * Timezone offset
	 *
	 * @public
	 */
	timeZoneOffset(): number;
	/**
	 * Is leap year.
	 *
	 * @public
	 */
	isLeapYear(): boolean;
	/**
	 * Is daylight savings time.
	 *
	 * @public
	 */
	isDaylightSavings(): boolean;
	/**
	 * Computes the field of visual difference between the two dates.
	 * Note: This assumes the dates are of the same type and have the same
	 * timezone offset.
	 *
	 * @public
	 */
	fieldOfVisualDifference(other: CalendarDate): DateTimePatternFieldType | undefined;
	/**
	 * Compare two dates a and b, returning:
	 *
	 * ```
	 *   a < b  ->  -1
	 *   a = b  ->  0
	 *   a > b  ->  1
	 * ```
	 *
	 * @public
	 */
	compare(other: CalendarDate): number;
	/**
	 * Calculate the relative time between two dates. If a field is specified
	 * the time will be calculated in terms of that single field. Otherwise
	 * the field of greatest difference will be used.
	 *
	 * @public
	 */
	relativeTime(other: CalendarDate, field?: TimePeriodField): [
		TimePeriodField,
		number
	];
	/**
	 * Calculate the time period between two dates. Note this returns the
	 * absolute value of the difference.
	 *
	 * @public
	 */
	difference(other: CalendarDate, fields?: TimePeriodField[]): TimePeriod;
	/**
	 * Calculate the time period between two dates. If 'other' is before this date,
	 * the time period fields will be negative.
	 *
	 * @public
	 */
	differenceSigned(other: CalendarDate, fields?: TimePeriodField[]): TimePeriod;
	/**
	 * Return all of the date and time field values.
	 *
	 * @public
	 */
	fields(): CalendarDateFields;
	/**
	 * Return a JavaScript Date object with the same date and time.
	 *
	 * @public
	 */
	asJSDate(): Date;
	/**
	 * Start of date, e.g. `date.startOf('day')`
	 *
	 * @public
	 */
	startOf(field: CalendarDateModFields): CalendarDate;
	/**
	 * End of date, e.g. `date.endOf('day')`
	 *
	 * @public
	 */
	endOf(field: CalendarDateModFields): CalendarDate;
	/**
	 * Set one or more fields on this date explicitly, and return a new date.
	 *
	 * Note: when setting the 'year' field you must use the "extended year".
	 * For example, the extended year 0 is 1 B.C in the Gregorian calendar.
	 *
	 * @public
	 */
	abstract set(fields: Partial<CalendarDateFields>): CalendarDate;
	/**
	 * Add the fields to this date, returning a new date.
	 *
	 * @public
	 */
	abstract add(fields: Partial<TimePeriod>): CalendarDate;
	/**
	 * Subtract the fields from this date, returning a new date.
	 *
	 * @public
	 */
	abstract subtract(fields: Partial<TimePeriod>): CalendarDate;
	/**
	 * Change the timezone for this date, returning a new date.
	 *
	 * @public
	 */
	abstract withZone(zoneId: string): CalendarDate;
	protected abstract _new(): CalendarDate;
	protected abstract initFields(f: number[]): void;
	protected abstract monthCount(): number;
	protected abstract daysInMonth(y: number, m: number): number;
	protected abstract daysInYear(y: number): number;
	protected abstract monthStart(eyear: number, month: number, useMonth: boolean): number;
	protected _toISOString(d: CalendarDate, utc: boolean): string;
	/**
	 * Rollup just the time fields into number of milliseconds. This is internal
	 * and assumes all time fields are defined.
	 */
	protected _timeToMs(f: Partial<CalendarDateFields>): number;
	protected _invertPeriod(fields: Partial<TimePeriod>): Partial<TimePeriod>;
	/**
	 * Roll up time period fields into a subset of fields.
	 */
	protected _rollup(span: Partial<TimePeriod>, sf: number[], ef: number[], fields: TimePeriodField[]): TimePeriod;
	/**
	 * Compute the number of years, months, days, etc, between two dates. The result will
	 * have all fields as integers.
	 */
	protected _diff(s: CalendarDate, sf: number[], ef: number[]): TimePeriod;
	protected swap(other: CalendarDate): [
		CalendarDate,
		number[],
		CalendarDate,
		number[]
	];
	/**
	 * Compute a new Julian day and milliseconds UTC by updating one or more fields.
	 */
	protected _add(fields: Partial<TimePeriod>): [
		number,
		number
	];
	/**
	 * Converts all time fields into [days, milliseconds].
	 */
	protected _addTime(utcfields: number[], fields: Partial<TimePeriod>): [
		number,
		number
	];
	protected initFromUnixEpoch(ms: number, zoneId: string): void;
	protected initFromJD(jd: number, msDay: number, zoneId: string): void;
	protected _toString(type: string): string;
	/**
	 * Compute WEEK_OF_YEAR and YEAR_WOY on demand.
	 */
	protected computeWeekFields(): void;
	protected _computeWeekFields(woyfield: number, ywoyfield: number, firstDay: number, minDays: number, dow: number, _dom: number, doy: number): void;
	protected yearLength(y: number): number;
	protected weekNumber(firstDay: number, minDays: number, desiredDay: number, dayOfPeriod: number, dayOfWeek: number): number;
	protected utcfields(): number[];
}
/**
 * Construct a date using the rules of the Gregorian calendar.
 *
 * type: gregory
 *
 * @public
 */
export declare class GregorianDate extends CalendarDate {
	static _init: void;
	protected constructor(type: CalendarType, firstDay: number, minDays: number);
	/**
	 * Set fields
	 *
	 * @public
	 */
	set(fields: Partial<CalendarDateFields>): GregorianDate;
	/**
	 * Add the fields to this date.
	 *
	 * @public
	 */
	add(fields: Partial<TimePeriod>): GregorianDate;
	/**
	 * Subtract the fields from this date.
	 *
	 * @public
	 */
	subtract(fields: Partial<TimePeriod>): GregorianDate;
	/**
	 * Change the timezone, returning a new date.
	 *
	 * @public
	 */
	withZone(zoneId: string): GregorianDate;
	/**
	 * String representation of this date.
	 *
	 * @public
	 */
	toString(): string;
	/**
	 * Construct a new date from the given fields.
	 *
	 * @public
	 */
	static fromFields(fields: Partial<CalendarDateFields>, firstDay?: number, minDays?: number): GregorianDate;
	/**
	 * Construct a new date from the given UNIX epoch.
	 *
	 * @public
	 */
	static fromUnixEpoch(epoch: number, zoneId: string, firstDay?: number, minDays?: number): GregorianDate;
	protected _new(): GregorianDate;
	protected initFromUnixEpoch(epoch: number, zoneId: string): GregorianDate;
	protected initFromJD(jd: number, msDay: number, zoneId: string): GregorianDate;
	protected initFields(f: number[]): void;
	protected daysInMonth(y: number, m: number): number;
	protected daysInYear(y: number): number;
	protected monthCount(): number;
	protected monthStart(eyear: number, month: number, _useMonth: boolean): number;
	/**
	 * Convert integer (year, month, day) to Julian day.
	 */
	protected _ymdToJD(y: number, m: number, d: number): number;
	protected _set(f: Partial<CalendarDateFields>): GregorianDate;
}
/**
 * A date in the Buddhist calendar.
 *
 * type: buddhist
 *
 * @public
 */
export declare class BuddhistDate extends GregorianDate {
	protected constructor(firstDay: number, minDays: number);
	set(fields: Partial<CalendarDateFields>): GregorianDate;
	add(fields: Partial<TimePeriod>): BuddhistDate;
	withZone(zoneId: string): BuddhistDate;
	toString(): string;
	static fromFields(fields: Partial<CalendarDateFields>, firstDay: number, minDays: number): BuddhistDate;
	static fromUnixEpoch(epoch: number, zoneId: string, firstDay: number, minDays: number): BuddhistDate;
	protected _new(): BuddhistDate;
	protected initFromUnixEpoch(epoch: number, zoneId: string): BuddhistDate;
	protected initFromJD(jd: number, msDay: number, zoneId: string): BuddhistDate;
	protected initFields(f: number[]): void;
}
/**
 * Gregorian calendar with ISO-8601 first day of week and minimum days in week.
 *
 * type: iso8601
 *
 * @public
 */
export declare class ISO8601Date extends GregorianDate {
	protected constructor();
	add(fields: Partial<TimePeriod>): ISO8601Date;
	toString(): string;
	withZone(zoneId: string): ISO8601Date;
	static fromFields(fields: Partial<CalendarDateFields>, _firstDay: number, _minDays: number): ISO8601Date;
	static fromUnixEpoch(epoch: number, zoneId: string, _firstDay: number, _minDays: number): ISO8601Date;
	protected _new(): ISO8601Date;
	protected initFromUnixEpoch(epoch: number, zoneId: string): ISO8601Date;
}
/**
 * A date in the Japanese Imperial calendar.
 *
 * type: japanese
 *
 * @public
 */
export declare class JapaneseDate extends GregorianDate {
	protected constructor(firstDay: number, minDays: number);
	add(fields: Partial<TimePeriod>): JapaneseDate;
	withZone(zoneId: string): JapaneseDate;
	toString(): string;
	static fromFields(fields: Partial<CalendarDateFields>, firstDay: number, minDays: number): JapaneseDate;
	static fromUnixEpoch(epoch: number, zoneId: string, firstDay: number, minDays: number): JapaneseDate;
	protected _new(): JapaneseDate;
	protected initFromUnixEpoch(epoch: number, zoneId: string): JapaneseDate;
	protected initFromJD(jd: number, msDay: number, zoneId: string): JapaneseDate;
	protected initFields(f: number[]): void;
}
/**
 * Construct a date using the rules of the Persian calendar.
 *
 * type: persian
 *
 * @public
 */
export declare class PersianDate extends CalendarDate {
	protected constructor(firstDay: number, minDays: number);
	relatedYear(): number;
	set(fields: Partial<CalendarDateFields>): PersianDate;
	add(fields: Partial<TimePeriod>): PersianDate;
	subtract(fields: Partial<TimePeriod>): PersianDate;
	withZone(zoneId: string): PersianDate;
	toString(): string;
	static fromFields(fields: Partial<CalendarDateFields>, firstDay: number, minDays: number): PersianDate;
	static fromUnixEpoch(epoch: number, zoneId: string, firstDay: number, minDays: number): PersianDate;
	protected _new(): PersianDate;
	protected initFromUnixEpoch(epoch: number, zoneId: string): PersianDate;
	protected initFromJD(jd: number, msDay: number, zoneId: string): PersianDate;
	protected initFields(f: number[]): void;
	protected monthCount(): number;
	protected daysInMonth(y: number, m: number): number;
	protected daysInYear(y: number): number;
	protected monthStart(eyear: number, month: number, _useMonth: boolean): number;
	private _ymdToJD;
}
export type DateTimeField = [
	string,
	number
];
export type DateTimeNode = DateTimeField | string;
/**
 * @internal
 */
export type CurrencySpacingPatterns = {
	[Q in CurrencySpacingPattern]: string;
};
/**
 * @internal
 */
export type CurrencySpacing = {
	[P in CurrencySpacingPos]: CurrencySpacingPatterns;
};
/**
 * @internal
 */
export type NumberSymbols = {
	[P in NumberSymbolType]: string;
};
declare abstract class NumberingSystem {
	readonly name: string;
	readonly symbols: NumberSymbols;
	readonly minimumGroupingDigits: number;
	readonly primaryGroupingSize: number;
	readonly secondaryGroupingSize: number;
	constructor(name: string, symbols: NumberSymbols, minimumGroupingDigits: number, primaryGroupingSize: number, secondaryGroupingSize: number);
	/**
	 * Format a number directly to a string. This is used for things like low-level field
	 * formatting for Calendars.
	 */
	abstract formatString(n: DecimalArg, groupDigits: boolean, minInt: number): string;
}
/**
 * @internal
 */
export type ContextTransformInfo = {
	[x in ContextTransformFieldType]: string;
};
/**
 * @internal
 */
export interface NumberParams {
	numberSystemName: NumberSystemName;
	system: NumberingSystem;
	latnSystem: NumberingSystem;
	digits: string[];
	latinDigits: string[];
	symbols: NumberSymbols;
	minimumGroupingDigits: number;
	primaryGroupingSize: number;
	secondaryGroupingSize: number;
	currencySpacing: CurrencySpacing;
}
/**
 * @public
 */
export interface ZonedDateTime {
	/**
	 * Can be either a Date object or Unix epoch time in milliseconds.
	 * Both are interpreted as being relative to UTC.
	 */
	date: number | Date;
	/**
	 * Optional timezone identifier, defaulting to UTC.
	 */
	zoneId?: string;
}
/**
 * @public
 */
export interface CalendarFieldsOptions {
	/**
	 * Overrides which calendar to use
	 */
	ca?: CalendarType;
	/**
	 * Width of the fields.
	 */
	width?: FieldWidthType;
	/**
	 * Context in which the fields will be used
	 */
	context?: ContextType;
}
/**
 * @public
 */
export interface EraFieldOptions {
	/**
	 * Overrides which calendar to use
	 */
	ca?: CalendarType;
	/**
	 * Width of the fields.
	 */
	width?: EraWidthType;
	/**
	 * Context in which the fields will be displayed
	 */
	context?: ContextType;
}
/**
 * @public
 */
export interface DateFieldFormatOptions {
	/**
	 * Overrides which calendar to use
	 */
	ca?: CalendarType;
	/**
	 * Width of the field.
	 */
	width?: DateFieldWidthType;
	/**
	 * Context in which field will be displayed
	 */
	context?: ContextType;
}
/**
 * @public
 */
export interface DateFormatAltOptions {
	era?: EraAltType;
	dayPeriod?: DayPeriodAltType;
}
/**
 * @public
 */
export interface DateFormatOptions {
	/**
	 * Set format for both date and time.
	 */
	datetime?: FormatWidthType;
	/**
	 * Date format.
	 */
	date?: FormatWidthType;
	/**
	 * Time format.
	 */
	time?: FormatWidthType;
	/**
	 * Wrapper format to use, if both a date and time are being formatted.
	 */
	wrap?: FormatWidthType;
	/**
	 * A skeleton format containing date and/or time fields.
	 */
	skeleton?: string;
	/**
	 * Specify the calendar to use.
	 */
	ca?: CalendarType;
	/**
	 * Specify the number system to use.
	 */
	nu?: NumberSystemType;
	/**
	 * Context in which the formatted string will be used
	 */
	context?: ContextType;
	/**
	 * Selection of alternate fields.
	 */
	alt?: DateFormatAltOptions;
	/**
	 * Wrap with 'at' if available. This defaults to true since it was
	 * the default datetime wrapper format in CLDR releases prior to v42.
	 */
	atTime?: boolean;
}
/**
 * @public
 */
export interface DateRawFormatOptions {
	/**
	 * Raw date time pattern to use.
	 */
	pattern?: string;
	/**
	 * Specify the calendar to use.
	 */
	ca?: CalendarType;
	/**
	 * Specify the numbering system to use.
	 */
	nu?: NumberSystemType;
	/**
	 * Context in which the formatted string will be used
	 */
	context?: ContextType;
	/**
	 * Selection of alternate fields.
	 */
	alt?: DateFormatAltOptions;
}
/**
 * @public
 */
export interface DateIntervalFormatOptions {
	/**
	 * Enable strict mode. This will avoid adding any context to the user's
	 * choices.
	 *
	 * Certain cases can be ambiguous, where two dates:
	 *   start = 2025-02-15 12:30:00 PM
	 *     end = 2025-02-20 13:30:00 PM
	 *
	 * Formatting with `jm` would produce "12:30 - 1:30 PM" leaving out the
	 * fact that the two dates also differ by 5 days.
	 * In non-strict mode the skeleton will be augmented with `yMMMd` to
	 * provide important context.
	 */
	strict?: boolean;
	/**
	 * A skeleton format containing date and/or time fields. Note
	 * that if present, this overrides the 'date' and 'time' options below.
	 * If all are omitted a reasonable default will be selected.
	 */
	skeleton?: string;
	/**
	 * A skeleton containing fields to format if the difference
	 * between the start and end dates is 1 day or more.
	 */
	date?: string;
	/**
	 * A skeleton containing fields to format if the difference
	 * between the start and end dates is less than 1 day.
	 */
	time?: string;
	/**
	 * Specify the calendar to use
	 */
	ca?: CalendarType;
	/**
	 * Specify the number system to use
	 */
	nu?: NumberSystemType;
	/**
	 * Context in which the formatted string will be used
	 */
	context?: ContextType;
	/**
	 * Selection of alternate fields.
	 */
	alt?: DateFormatAltOptions;
	/**
	 * Wrapper format to use, if both a date and time are being formatted.
	 */
	wrap?: FormatWidthType;
	/**
	 * Wrap with 'at' if available. This defaults to true since it was
	 * the default datetime wrapper format in CLDR releases prior to v42.
	 */
	atTime?: boolean;
}
/**
 * Options used to format a relative time field.
 *
 * @public
 */
export interface RelativeTimeFieldFormatOptions extends NumberFormatOptions {
	/**
	 * Specify the format width.
	 */
	width?: DateFieldWidthType;
	/**
	 * Context in which the formatted string will be used
	 */
	context?: ContextType;
	/**
	 * Force format to always display in terms of numbers
	 */
	numericOnly?: boolean;
	/**
	 * In numeric mode, if the value is exactly 0 display "now" instead of "in 0 seconds"
	 */
	alwaysNow?: boolean;
}
/**
 * Options used to format a relative time.
 *
 * @public
 */
export interface RelativeTimeFormatOptions extends RelativeTimeFieldFormatOptions {
	/**
	 * Specify the calendar to use.
	 */
	ca?: CalendarType;
	/**
	 * Include day-of-week formatting when applicable.
	 */
	dayOfWeek?: boolean;
	/**
	 * Specify which field the relative time should be expressed in.
	 */
	field?: TimePeriodField;
}
/**
 * @public
 */
export interface DateWrapperFormatOptions {
	ca?: CalendarType;
	width?: FormatWidthType;
	/**
	 * Wrap with 'at' if available. This defaults to true since it was
	 * the default datetime wrapper format in CLDR releases prior to v42.
	 */
	atTime?: boolean;
}
/**
 * @public
 */
export interface TimeData {
	/**
	 * Preferred time cycle for the region.
	 */
	preferred: string;
	/**
	 * Allowed / acceptible time cycles for the region.
	 */
	allowed: string[];
}
/**
 * @public
 */
export interface ExemplarCity {
	name: string;
}
/**
 * @public
 */
export interface MetazoneName {
	generic: string;
	standard: string;
	daylight: string;
}
/**
 * @public
 */
export interface MetazoneNames {
	long: MetazoneName;
	short: MetazoneName;
}
/**
 * @public
 */
export interface TimeZoneInfo {
	id: string;
	city: ExemplarCity;
	countries: string[];
	latitude: number;
	longitude: number;
	stdoffset: number;
	metazone: string;
	names: MetazoneNames;
}
/**
 * @public
 */
export type ListPatternType = "and" | "and-short" | "or" | "unit-long" | "unit-narrow" | "unit-short";
/**
 * @public
 */
export type MeasurementSystem = "us" | "uk" | "metric";
/**
 * @public
 */
export type MeasurementCategory = "temperature";
/**
 * @public
 */
export interface DisplayNameOptions {
	type?: AltType;
	context?: ContextType;
}
/**
 * @public
 */
export interface CurrencyDisplayNameOptions {
	context?: ContextType;
}
/**
 * @public
 */
export interface Quantity {
	value: number | string | Decimal;
	unit?: UnitType;
	per?: UnitType;
	times?: UnitType;
}
/**
 * @public
 */
export type UnitFormatStyleType = NumberFormatStyleType;
/**
 * @public
 */
export type UnitLength = "short" | "narrow" | "long";
/**
 * @public
 */
export interface UnitFormatOptions extends NumberFormatOptions {
	divisor?: number;
	style?: UnitFormatStyleType;
	length?: UnitLength;
}
/**
 * @public
 */
export interface Bundle extends PrimitiveBundle {
	tag(): LanguageTag;
	calendarSystem(): string;
	numberSystem(): string;
	languageScript(): string;
	languageRegion(): string;
	spellout(): any;
	plurals(): PluralRules;
}
/**
 * Layer in the pack that supports all regions for a single language + script.
 *
 * @public
 */
export declare class PackScript {
	private _spellout;
	private _strings;
	private _exceptions;
	private _regions;
	private _cache;
	private _defaultRegion;
	constructor(strings: string, exceptions: string, regions: {
		[x: string]: string;
	}, defaultRegion: string, _spellout: any);
	get(tag: LanguageTag): Bundle;
	private decode;
}
/**
 * Runtime resource pack manager.
 *
 * @public
 */
export declare class Pack {
	readonly version: string;
	readonly cldrVersion: string;
	readonly checksum: string;
	readonly language: string;
	readonly defaultTag: LanguageTag;
	readonly scripts: {
		[x: string]: PackScript;
	};
	readonly spellout: any;
	constructor(data: string | any);
	get(tag: LanguageTag): Bundle;
}
/**
 * Calendar, date and time functions.
 *
 * @public
 */
export interface Calendars {
	/**
	 * First day of the week for this locale, e.g. 1=SUN, 2=MON, etc.
	 */
	firstDayOfWeek(): number;
	/**
	 * Minimum number of days to count as a new week in a month or year in this locale.
	 */
	minDaysInFirstWeek(): number;
	/**
	 * Date field's string representation for this locale.
	 */
	dateField(type: DateFieldType, options?: DateFieldFormatOptions): string;
	/**
	 * Mapping of all day periods for this locale.
	 */
	dayPeriods(options?: CalendarFieldsOptions): any;
	/**
	 * Mapping of all eras for this locale.
	 */
	eras(options?: EraFieldOptions): any;
	/**
	 * Mapping of all months for this locale.
	 */
	months(options?: CalendarFieldsOptions): any;
	/**
	 * Mapping of all quarters for this locale.
	 */
	quarters(options?: CalendarFieldsOptions): any;
	/**
	 * Mapping of all weekdays for this locale.
	 */
	weekdays(options?: CalendarFieldsOptions): any;
	/**
	 * Convert a date time into a date in the Buddhist calendar, with locale-specific
	 * week data.
	 */
	toBuddhistDate(date: CalendarDate | ZonedDateTime | Date): BuddhistDate;
	/**
	 * Construct a new date in the Buddhist calendar with the given fields.
	 */
	newBuddhistDate(fields: Partial<CalendarDateFields>): BuddhistDate;
	/**
	 * Convert a date time into a date in the Gregorian calendar, with locale-specific
	 * week data.
	 */
	toGregorianDate(date: CalendarDate | ZonedDateTime | Date): GregorianDate;
	/**
	 * Construct a new date in the Gregorian calendar with the given fields.
	 */
	newGregorianDate(fields: Partial<CalendarDateFields>): GregorianDate;
	/**
	 * Convert a date time into a date in the ISO-8601 calendar, with ISO week data.
	 */
	toISO8601Date(date: CalendarDate | ZonedDateTime | Date): ISO8601Date;
	/**
	 * Construct a new date in the ISO-8601 calendar with the given fields.
	 */
	newISO8601Date(fields: Partial<CalendarDateFields>): ISO8601Date;
	/**
	 * Convert a date time into a date in the Japanese calendar, with locale-specific
	 * week data.
	 */
	toJapaneseDate(date: CalendarDate | ZonedDateTime | Date): JapaneseDate;
	/**
	 * Construct a new date in the Japanese calendar with the given fields.
	 */
	newJapaneseDate(fields: Partial<CalendarDateFields>): JapaneseDate;
	/**
	 * Convert a date time into a date in the Persian calendar, with locale-specific
	 * week data.
	 */
	toPersianDate(date: CalendarDate | ZonedDateTime | Date): PersianDate;
	/**
	 * Construct a new date in the Persian calendar with the given fields.
	 */
	newPersianDate(fields: Partial<CalendarDateFields>): PersianDate;
	/**
	 * Calculate the field of visual difference between two dates. This can be used
	 * to choose an appropriate date or time skeleton for interval formatting.
	 * Returns undefined if the dates are equivalent down to the second.
	 */
	fieldOfVisualDifference(a: CalendarDate | ZonedDateTime | Date, b: CalendarDate | ZonedDateTime | Date): DateTimePatternFieldType | undefined;
	/**
	 * Formats a date-time value to string.
	 */
	formatDate(date: CalendarDate | ZonedDateTime | Date, options?: DateFormatOptions): string;
	/**
	 * Formats a date-time value to an array of parts.
	 */
	formatDateToParts(date: CalendarDate | ZonedDateTime | Date, options?: DateFormatOptions): Part[];
	/**
	 * Formats a date-time interval for the given skeleton to string.
	 */
	formatDateInterval(start: CalendarDate | ZonedDateTime | Date, end: CalendarDate | ZonedDateTime | Date, options?: DateIntervalFormatOptions): string;
	/**
	 * Formats a date-time interval for the given skeleton to an array of parts.
	 */
	formatDateIntervalToParts(start: CalendarDate | ZonedDateTime | Date, end: CalendarDate | ZonedDateTime | Date, options?: DateIntervalFormatOptions): Part[];
	/**
	 * Formats a relative time field to string.
	 */
	formatRelativeTimeField(value: DecimalArg, field: RelativeTimeFieldType, options?: RelativeTimeFieldFormatOptions): string;
	/**
	 * Formats the relative time from a start to end date.
	 */
	formatRelativeTime(start: CalendarDate | ZonedDateTime | Date, end: CalendarDate | ZonedDateTime | Date, options?: RelativeTimeFormatOptions): string;
	/**
	 * Formats a date-time value to string using a raw date-time pattern.
	 *
	 * Warning: You should not use this for general formatting.
	 */
	formatDateRaw(date: CalendarDate | ZonedDateTime | Date, options?: DateRawFormatOptions): string;
	/**
	 * Formats a date-time value to an array of parts using a raw date-time pattern.
	 *
	 * Warning: You should not use this for general formatting.
	 */
	formatDateRawToParts(date: CalendarDate | ZonedDateTime | Date, options?: DateRawFormatOptions): Part[];
	/**
	 * Formats a date and time string together using a wrapper format of the given width. This can be
	 * used when you need to format a date and time string separately and join them together.
	 */
	formatDateWrapper(date: string, time: string, options?: DateWrapperFormatOptions): string;
	/**
	 * Formats  date and time `Part[]` together using a wrapper format of the given width. This can be
	 * used when you need to format a date and time string separately and join them together.
	 */
	formatDateWrapperToParts(date: Part[], time: Part[], options?: DateWrapperFormatOptions): Part[];
	/**
	 * Alias for nowGregorian()
	 */
	now(zoneId?: string): GregorianDate;
	/**
	 * Construct a new date in the Buddhist calendar representing the current date and time.
	 */
	nowBuddhist(zoneId?: string): BuddhistDate;
	/**
	 * Construct a new date in the Gregorian calendar representing the current date and time.
	 */
	nowGregorian(zoneId?: string): GregorianDate;
	/**
	 * Construct a new date in the ISO8601 calendar representing the current date and time.
	 */
	nowISO8601(zoneId?: string): ISO8601Date;
	/**
	 * Construct a new date in the Japanese calendar representing the current date and time.
	 */
	nowJapanese(zoneId?: string): JapaneseDate;
	/**
	 * Construct a new date in the Persian calendar representing the current date and time.
	 */
	nowPersian(zoneId?: string): PersianDate;
	/**
	 * Return information about the locale's preferred and allowed time cycles.
	 */
	timeData(): TimeData;
	/**
	 * Return an array containing the official TZDB timezone identifiers.
	 */
	timeZoneIds(): string[];
	/**
	 * Resolve a timezone id / alias to the official TZDB identifier.
	 */
	resolveTimeZoneId(zoneid: string): string | undefined;
	/**
	 * Return additional information for a timezone id, including the
	 * localized exemplar city, e.g. `{ id: "America/New_York", city: { name: "New York" } }`
	 */
	timeZoneInfo(zoneid: string): TimeZoneInfo;
	/**
	 * Convert a time period into a quantiy sequence, for unit formatting, e.g. "1 year, 2 months".
	 */
	timePeriodToQuantity(period: Partial<TimePeriod>): Quantity[];
	/**
	 * Lookup the time zone info for the given UTC timestamp (in milliseconds).
	 * Info includes the abbreviation, offset, daylight savings flag. Returns undefined if the
	 * zoneid doesn't exist.
	 */
	timeZoneFromUTC(utc: number, zoneid: string): ZoneInfo | undefined;
	/**
	 * Lookup the time zone info for the given local "wall clock" timestamp (in milliseconds).
	 * It also returns the corresponding UTC timestamp. Info includes the abbreviation, offset,
	 * daylight savings flag. Returns undefined if the zoneid doesn't exist.
	 */
	timeZoneFromWall(wall: number, zoneid: string): [
		number,
		ZoneInfo
	] | undefined;
}
/**
 * General functions.
 *
 * @public
 */
export interface General {
	/**
	 * Returns the character order for the current locale, e.g. "ltr" for left-to-right
	 * or "rtl" for right-to-left.
	 */
	characterOrder(): CharacterOrderType;
	/**
	 * Returns the line order for the current locale, e.g. "ttb" for top-to-bottom
	 * or "btt" for bottom-to-top.
	 */
	lineOrder(): LineOrderType;
	/**
	 * Returns the resource bundle for the current locale.
	 */
	bundle(): Bundle;
	/**
	 * Returns the current locale.
	 */
	locale(): Locale;
	/**
	 * Resolves the given language tag into a locale.
	 */
	resolveLocale(id: string | LanguageTag): Locale;
	/**
	 * Parses a language tag and canonicalizes its fields.
	 */
	parseLanguageTag(tag: string): LanguageTag;
	/**
	 * Returns a message formatter instance for the current locale.
	 */
	messageFormatter(options?: MessageFormatterOptions): MessageFormatter;
	/**
	 * Returns the measurement system in use for the current locale generally,
	 * or for a specific measurement category. For example, to get the correct
	 * measurement system for temperature you must pass in the category 'temperature'.
	 */
	measurementSystem(category?: MeasurementCategory): MeasurementSystem;
	/**
	 * Format a message with the given arguments.
	 */
	/**
	 * Format a list of items to string using the given list type.
	 */
	formatList(items: string[], type?: ListPatternType): string;
	/**
	 * Format a list of items to an array of parts using the given list type.
	 */
	formatListToParts(items: string[], type?: ListPatternType): Part[];
	/**
	 * Returns the display name for the given language code.
	 */
	getLanguageDisplayName(code: string | LanguageTag, options?: DisplayNameOptions): string;
	/**
	 * Returns the display name for the given script code.
	 */
	getScriptDisplayName(code: string | LanguageTag, options?: DisplayNameOptions): string;
	/**
	 * Returns the display name for the given region code.
	 */
	getRegionDisplayName(code: string | LanguageTag, options?: DisplayNameOptions): string;
}
/**
 * Number and currency functions.
 *
 * @public
 */
export interface Numbers {
	/**
	 * Adjusts a decimal number using the given options.
	 */
	adjustDecimal(num: DecimalArg, options?: DecimalAdjustOptions): Decimal;
	/**
	 * Parses the string or JavaScript number and returns a Decimal instance.
	 */
	parseDecimal(num: number | string): Decimal;
	/**
	 * Formats a decimal number to string.
	 */
	formatDecimal(num: DecimalArg, options?: DecimalFormatOptions): string;
	/**
	 * Formats a decimal number to an array of parts.
	 */
	formatDecimalToParts(num: DecimalArg, options?: DecimalFormatOptions): Part[];
	/**
	 * Formats a currency value to string.
	 */
	formatCurrency(num: DecimalArg, code: CurrencyType, options?: CurrencyFormatOptions): string;
	/**
	 * Formats a currency value to an array of parts.
	 */
	formatCurrencyToParts(num: DecimalArg, code: CurrencyType, options?: CurrencyFormatOptions): Part[];
	/**
	 * Formats a decimal number using a rule-based number format.
	 */
	/**
	 * Returns the currency symbol of the given width.
	 */
	getCurrencySymbol(code: CurrencyType, width?: CurrencySymbolWidthType): string;
	/**
	 * Returns the display name of the currency.
	 */
	getCurrencyDisplayName(code: CurrencyType, options?: CurrencyDisplayNameOptions): string;
	/**
	 * Returns the pluralized display name of the currency.
	 */
	getCurrencyPluralName(num: DecimalArg, code: CurrencyType, options?: CurrencyDisplayNameOptions): string;
	/**
	 * Return the currency fraction info for a given currency code.
	 */
	getCurrencyFractions(code: CurrencyType): CurrencyFractions;
	/**
	 * Return the currency code to use for a given region.
	 */
	getCurrencyForRegion(region: string): CurrencyType;
	/**
	 * Returns the plural cardinal category of the given decimal number.
	 */
	getPluralCardinal(n: DecimalArg, options?: DecimalAdjustOptions): string;
	/**
	 * Returns the plural ordinal category of the given decimal number.
	 */
	getPluralOrdinal(num: DecimalArg, options?: DecimalAdjustOptions): string;
}
/**
 * Unit quantity functions.
 *
 * @public
 */
export interface Units {
	/**
	 * Returns an array of available units.
	 */
	availableUnits(): UnitType[];
	/**
	 * Convert a decimal value between units.
	 */
	/**
	 * Formats the given unit quantity to string.
	 */
	formatQuantity(qty: Quantity, options?: UnitFormatOptions): string;
	/**
	 * Formats the given unit quantity to an array of parts.
	 */
	formatQuantityToParts(qty: Quantity, options?: UnitFormatOptions): Part[];
	/**
	 * Formats the given unit quantity sequence to string.
	 */
	formatQuantitySequence(qty: Quantity[], options?: UnitFormatOptions): string;
	/**
	 * Formats the given unit quantity sequence to an array of parts.
	 */
	formatQuantitySequenceToParts(qty: Quantity[], options?: UnitFormatOptions): Part[];
	/**
	 * Returns the display name for the given unit.
	 */
	getUnitDisplayName(name: UnitType, length?: UnitLength): string;
}
export declare const enum NumberField {
	MINUS = 0,
	PERCENT = 1,
	CURRENCY = 2,
	NUMBER = 3,
	EXPONENT = 4,
	PLUS = 5
}
export interface NumberPattern {
	nodes: NumberNode[];
	minInt: number;
	maxFrac: number;
	minFrac: number;
	priGroup: number;
	secGroup: number;
}
export type NumberNode = string | NumberField;
export type WrapperNode = number | string;
export interface AbstractValue<R> {
	length(): number;
	add(type: string, value: string): void;
	get(i: number): string;
	append(value: R): void;
	insert(i: number, type: string, value: string): void;
	render(): R;
	reset(): void;
	join(...elems: R[]): R;
	wrap(pattern: WrapperNode[], args: R[]): void;
	empty(): R;
}
/**
 * All context needed for a single format operation.
 */
export interface CalendarContext<T extends CalendarDate> {
	/**
	 * Calendar-specific date
	 */
	date: T;
	/**
	 * Resource bundle for accessing strings
	 */
	bundle: Bundle;
	/**
	 * Numbering system for formatting decimal numbers into strings
	 */
	system: NumberingSystem;
	/**
	 * Latin decimal digit numbering system.
	 */
	latnSystem: NumberingSystem;
	/**
	 * Context in which we're formatting.
	 */
	context?: ContextType;
	/**
	 * Context transform info.
	 */
	transform: ContextTransformInfo;
	/**
	 * Specify alternate fields.
	 */
	alt: DateFormatAltOptions;
}
export interface CalendarFormatter<T extends CalendarDate> {
	format<R>(val: AbstractValue<R>, ctx: CalendarContext<T>, nodes: DateTimeNode[], first: boolean): void;
}
/**
 * @internal
 */
export interface CalendarInternals {
	getCalendarFormatter(type: CalendarType): CalendarFormatter<CalendarDate>;
	flexDayPeriod(bundle: Bundle, minutes: number): DayPeriodType | undefined;
	parseDatePattern(raw: string): DateTimeNode[];
	getHourPattern(raw: string, negative: boolean): DateTimeNode[];
	weekFirstDay(region: string): number;
	weekMinDays(region: string): number;
	selectCalendar(bundle: Bundle, ca?: CalendarType): CalendarType;
	formatDateTime<R>(calendar: CalendarType, ctx: CalendarContext<CalendarDate>, value: AbstractValue<R>, first: boolean, date?: DateTimeNode[], time?: DateTimeNode[], wrapper?: string): R;
	formatInterval<R>(calendar: CalendarType, ctx: CalendarContext<CalendarDate>, value: AbstractValue<R>, first: boolean, end: CalendarDate, pattern: DateTimeNode[]): R;
}
/**
 * @internal
 */
export interface DateFieldInternals {
	formatRelativeTimeField(bundle: Bundle, value: DecimalArg, field: DateFieldType, options: RelativeTimeFormatOptions, params: NumberParams, transform: ContextTransformInfo): string;
}
/**
 * @internal
 */
export interface GeneralInternals {
	characterOrder(bundle: Bundle): string;
	lineOrder(bundle: Bundle): string;
	contextTransform(value: string, info: ContextTransformInfo, context?: ContextType, field?: ContextTransformFieldType): string;
	formatList(bundle: Bundle, items: string[], type: ListPatternType): string;
	formatListToParts(bundle: Bundle, items: string[], type: ListPatternType): Part[];
	formatListImpl<R>(bundle: Bundle, value: AbstractValue<R>, items: R[], type: ListPatternType): R;
	formatWrapper(format: string, args: string[]): string;
	parseWrapper(raw: string): WrapperNode[];
}
/**
 * @internal
 */
export interface NumberInternals {
	adjustDecimal(num: DecimalArg, options?: DecimalAdjustOptions): Decimal;
	stringRenderer(params: NumberParams): NumberRenderer<string>;
	partsRenderer(params: NumberParams): NumberRenderer<Part[]>;
	formatDecimal<T>(bundle: Bundle, renderer: NumberRenderer<T>, n: Decimal, options: DecimalFormatOptions, params: NumberParams): [
		T,
		PluralType
	];
	formatCurrency<T>(bundle: Bundle, renderer: NumberRenderer<T>, n: Decimal, code: string, options: CurrencyFormatOptions, params: NumberParams): T;
	getCurrencySymbol(bundle: Bundle, code: CurrencyType, width?: CurrencySymbolWidthType): string;
	getCurrencyDisplayName(bundle: Bundle, code: CurrencyType): string;
	getCurrencyPluralName(bundle: Bundle, code: string, plural: PluralType): string;
	getNumberPattern(raw: string, negative: boolean): NumberPattern;
}
/**
 * @internal
 */
export interface UnitInternals {
	getDisplayName(bundle: Bundle, name: UnitType, length: string): string;
	getUnitInfo(length: string): UnitInfo;
	format<T>(bundle: Bundle, renderer: NumberRenderer<T>, q: Quantity, options: UnitFormatOptions, params: NumberParams): T;
}
/**
 * @internal
 */
export interface NumberRenderer<R> {
	empty(): R;
	make(type: string, value: string): R;
	render(n: Decimal, pattern: NumberPattern, currencySymbol: string, percentSymbol: string, decimalSymbol: string, minInt: number, grouping?: boolean, exponent?: number): R;
	wrap(internal: GeneralInternals, raw: string, ...args: R[]): R;
}
/**
 * Unified interface for accessing internal functionality.
 *
 * @internal
 */
export interface Internals {
	readonly config: SchemaConfig;
	readonly indices: KeyIndexMap;
	readonly checksum: string;
	readonly calendars: CalendarInternals;
	readonly dateFields: DateFieldInternals;
	readonly general: GeneralInternals;
	readonly numbers: NumberInternals;
	readonly schema: Schema;
	readonly units: UnitInternals;
}
/**
 * Type of the key used in the LRU.
 *
 * @public
 */
export type Key = string | number;
declare class LRU<V> {
	private readonly storage;
	private readonly root;
	private readonly capacity;
	constructor(capacity?: number);
	/**
	 * Number of items in the LRU.
	 */
	size(): number;
	/**
	 * Get the value associated with the key and move the
	 * key to the front of the LRU.
	 */
	get(key: Key): V | undefined;
	/**
	 * Set a value associated with the key. IF it already
	 * exists, the value is updated. Otherwise it is inserted
	 * into the LRU and moved to the front.
	 */
	set(key: Key, val: V): void;
	/**
	 * Show the contents of the LRU as a string.
	 */
	toString(): string;
	private moveFront;
	private insert;
	private remove;
}
/**
 * Interface exporting all functionality for a given locale.
 *
 * @public
 */
export interface CLDR {
	/**
	 * Calendar functions.
	 */
	readonly Calendars: Calendars;
	/**
	 * General functions.
	 */
	readonly General: General;
	/**
	 * Number and currency functions.
	 */
	readonly Numbers: Numbers;
	/**
	 * Unit quantity functions.
	 */
	readonly Units: Units;
	/**
	 * UNDOCUMENTED AND EXPERIMENTAL
	 *
	 * Provides access to the low-level schema for accessing CLDR fields.
	 *
	 * Currently undocumented. In the future an internal api can be
	 * exposed allowing access to low-level functions of the library.
	 *
	 * @internal
	 */
	readonly Schema: Schema;
	/**
	 * UNDOCUMENTED AND EXPERIMENTAL
	 *
	 * Provides access to the low-level library internals.
	 *
	 * @internal
	 */
	readonly Internals: Internals;
}
/**
 * Options to initialize the library.
 *
 * @public
 */
export interface CLDROptions {
	/**
	 * Log some messages.
	 */
	debug?: boolean;
	/**
	 * Customizing of the schema.
	 */
	config?: SchemaConfig;
	/**
	 * Given a language identifier, fetch the resource pack from the
	 * filesystem, webserver, etc, and return the raw decompressed string.
	 */
	loader?: (language: string) => any;
	asyncLoader?: (language: string) => Promise<any>;
	/**
	 * Number of language-wide resource packs to keep in memory.
	 *
	 * Note: a language pack will only be garbage collected once all instances
	 * using it are garbage collected, so if you hold onto instances the cache
	 * may be ineffective.
	 */
	packCacheSize?: number;
	/**
	 * Size of internal pattern caches.
	 */
	patternCacheSize?: number;
	/**
	 * Skip calculting the schema checksums. The checksum detects when the schema
	 * does not match the loaded resource pack and throws an error.
	 */
	skipChecksum?: boolean;
}
/**
 * Top-level entry point for the library. It's only purpose at the
 * moment is to construct API instances for a particular locale.
 * All other functionality should be available statically through
 * exported types and functions.
 *
 * @public
 */
export declare class CLDRFramework {
	protected options: CLDROptions;
	protected readonly packCache: LRU<Pack>;
	protected readonly loader?: (language: string) => any;
	protected readonly asyncLoader?: (language: string) => Promise<any>;
	protected readonly internals: Internals;
	protected readonly _config: SchemaConfig;
	protected static defaultConfig?: SchemaConfig;
	constructor(options: CLDROptions);
	/**
	 * Specify a configuration to use as a fallback.
	 */
	static setDefaultConfig(config: SchemaConfig): void;
	config(): SchemaConfig;
	info(): string;
	/**
	 * Return the library version.
	 */
	static version(): string;
	/**
	 * Return an array of the available locales.
	 */
	static availableLocales(): Locale[];
	/**
	 * Parse a locale identifier and resolve it. This returns a Locale object
	 * that includes the original id string or tag's compact form, and
	 * a resolved LanguageTag.
	 */
	static resolveLocale(id: string | LanguageTag): Locale;
	/**
	 * Parses a string into a BCP47 language tag
	 */
	static parseLanguageTag(s: string): LanguageTag;
	/**
	 * Synchronously load a bundle and construct an instance of an API for
	 * a given locale. Mainly used when you want to load a language statically
	 * when your application's state store is initialized.
	 */
	get(locale: Locale | string): CLDR;
	/**
	 * Asynchronously load a bundle and construct an instance of an API for
	 * a given locale.
	 */
	getAsync(locale: Locale | string): Promise<CLDR>;
	/**
	 * Builds an API instance.
	 */
	protected build(locale: Locale, pack: Pack): CLDR;
	/**
	 * Verify the resource pack is compatible with the schema config checksum.
	 */
	protected check(pack: Pack): void;
}

export {};
