arabicfmt
Version:
Arabic-first formatting for numbers, currency, dates and bidirectional text across all 22 Arab League countries — with correct handling of the 2025–2026 Unicode currency-symbol transition (Saudi Riyal U+20C1, UAE Dirham U+20C3, Omani Rial U+20C4).
651 lines (642 loc) • 20.2 kB
JavaScript
'use strict';
var chunkTNU35HB7_cjs = require('./chunk-TNU35HB7.cjs');
var chunkQQFKUSZ7_cjs = require('./chunk-QQFKUSZ7.cjs');
var chunkQ4F4Q7IO_cjs = require('./chunk-Q4F4Q7IO.cjs');
// src/currency/data.generated.ts
var CLDR_VERSION = "48.2.0";
var DEFAULT_CURRENCY_DIGITS = 2;
var CURRENCY_DIGITS = {
"ADP": 0,
"AFN": 0,
"ALL": 0,
"BHD": 3,
"BIF": 0,
"BYR": 0,
"CLF": 4,
"CLP": 0,
"COP": 0,
"DJF": 0,
"ESP": 0,
"GNF": 0,
"HUF": 0,
"IDR": 0,
"IQD": 0,
"IRR": 0,
"ISK": 0,
"ITL": 0,
"JOD": 3,
"JPY": 0,
"KMF": 0,
"KPW": 0,
"KRW": 0,
"KWD": 3,
"LAK": 0,
"LBP": 0,
"LUF": 0,
"LYD": 3,
"MGA": 0,
"MGF": 0,
"MMK": 0,
"MRO": 0,
"OMR": 3,
"PKR": 0,
"PYG": 0,
"RWF": 0,
"SLL": 0,
"SOS": 0,
"STD": 0,
"SYP": 0,
"TMM": 0,
"TND": 3,
"TRL": 0,
"UGX": 0,
"UYI": 0,
"UYW": 4,
"VND": 0,
"VUV": 0,
"XAF": 0,
"XOF": 0,
"XPF": 0,
"YER": 0,
"ZMK": 0,
"ZWD": 0
};
var REGION_CURRENCY = {
"AC": "SHP",
"AD": "EUR",
"AE": "AED",
"AF": "AFN",
"AG": "XCD",
"AI": "XCD",
"AL": "ALL",
"AM": "AMD",
"AO": "AOA",
"AR": "ARS",
"AS": "USD",
"AT": "EUR",
"AU": "AUD",
"AW": "AWG",
"AX": "EUR",
"AZ": "AZN",
"BA": "BAM",
"BB": "BBD",
"BD": "BDT",
"BE": "EUR",
"BF": "XOF",
"BG": "EUR",
"BH": "BHD",
"BI": "BIF",
"BJ": "XOF",
"BL": "EUR",
"BM": "BMD",
"BN": "BND",
"BO": "BOB",
"BQ": "USD",
"BR": "BRL",
"BS": "BSD",
"BT": "BTN",
"BV": "NOK",
"BW": "BWP",
"BY": "BYN",
"BZ": "BZD",
"CA": "CAD",
"CC": "AUD",
"CD": "CDF",
"CF": "XAF",
"CG": "XAF",
"CH": "CHF",
"CI": "XOF",
"CK": "NZD",
"CL": "CLP",
"CM": "XAF",
"CN": "CNH",
"CO": "COP",
"CR": "CRC",
"CU": "CUP",
"CV": "CVE",
"CW": "XCG",
"CX": "AUD",
"CY": "EUR",
"CZ": "CZK",
"DE": "EUR",
"DG": "USD",
"DJ": "DJF",
"DK": "DKK",
"DM": "XCD",
"DO": "DOP",
"DZ": "DZD",
"EA": "EUR",
"EC": "USD",
"EE": "EUR",
"EG": "EGP",
"EH": "MAD",
"ER": "ERN",
"ES": "EUR",
"ET": "ETB",
"EU": "EUR",
"FI": "EUR",
"FJ": "FJD",
"FK": "FKP",
"FM": "USD",
"FO": "DKK",
"FR": "EUR",
"GA": "XAF",
"GB": "GBP",
"GD": "XCD",
"GE": "GEL",
"GF": "EUR",
"GG": "GBP",
"GH": "GHS",
"GI": "GIP",
"GL": "DKK",
"GM": "GMD",
"GN": "GNF",
"GP": "EUR",
"GQ": "XAF",
"GR": "EUR",
"GS": "GBP",
"GT": "GTQ",
"GU": "USD",
"GW": "XOF",
"GY": "GYD",
"HK": "HKD",
"HM": "AUD",
"HN": "HNL",
"HR": "EUR",
"HT": "USD",
"HU": "HUF",
"IC": "EUR",
"ID": "IDR",
"IE": "EUR",
"IL": "ILS",
"IM": "GBP",
"IN": "INR",
"IO": "USD",
"IQ": "IQD",
"IR": "IRR",
"IS": "ISK",
"IT": "EUR",
"JE": "GBP",
"JM": "JMD",
"JO": "JOD",
"JP": "JPY",
"KE": "KES",
"KG": "KGS",
"KH": "KHR",
"KI": "AUD",
"KM": "KMF",
"KN": "XCD",
"KP": "KPW",
"KR": "KRW",
"KW": "KWD",
"KY": "KYD",
"KZ": "KZT",
"LA": "LAK",
"LB": "LBP",
"LC": "XCD",
"LI": "CHF",
"LK": "LKR",
"LR": "LRD",
"LS": "LSL",
"LT": "EUR",
"LU": "EUR",
"LV": "EUR",
"LY": "LYD",
"MA": "MAD",
"MC": "EUR",
"MD": "MDL",
"ME": "EUR",
"MF": "EUR",
"MG": "MGA",
"MH": "USD",
"MK": "MKD",
"ML": "XOF",
"MM": "MMK",
"MN": "MNT",
"MO": "MOP",
"MP": "USD",
"MQ": "EUR",
"MR": "MRU",
"MS": "XCD",
"MT": "EUR",
"MU": "MUR",
"MV": "MVR",
"MW": "MWK",
"MX": "MXN",
"MY": "MYR",
"MZ": "MZN",
"NA": "NAD",
"NC": "XPF",
"NE": "XOF",
"NF": "AUD",
"NG": "NGN",
"NI": "NIO",
"NL": "EUR",
"NO": "NOK",
"NP": "NPR",
"NR": "AUD",
"NU": "NZD",
"NZ": "NZD",
"OM": "OMR",
"PA": "USD",
"PE": "PEN",
"PF": "XPF",
"PG": "PGK",
"PH": "PHP",
"PK": "PKR",
"PL": "PLN",
"PM": "EUR",
"PN": "NZD",
"PR": "USD",
"PS": "JOD",
"PT": "EUR",
"PW": "USD",
"PY": "PYG",
"QA": "QAR",
"RE": "EUR",
"RO": "RON",
"RS": "RSD",
"RU": "RUB",
"RW": "RWF",
"SA": "SAR",
"SB": "SBD",
"SC": "SCR",
"SD": "SDG",
"SE": "SEK",
"SG": "SGD",
"SH": "SHP",
"SI": "EUR",
"SJ": "NOK",
"SK": "EUR",
"SL": "SLE",
"SM": "EUR",
"SN": "XOF",
"SO": "SOS",
"SR": "SRD",
"SS": "SSP",
"ST": "STN",
"SV": "USD",
"SX": "XCG",
"SY": "SYP",
"SZ": "SZL",
"TA": "GBP",
"TC": "USD",
"TD": "XAF",
"TF": "EUR",
"TG": "XOF",
"TH": "THB",
"TJ": "TJS",
"TK": "NZD",
"TL": "USD",
"TM": "TMT",
"TN": "TND",
"TO": "TOP",
"TR": "TRY",
"TT": "TTD",
"TV": "AUD",
"TW": "TWD",
"TZ": "TZS",
"UA": "UAH",
"UG": "UGX",
"UM": "USD",
"US": "USD",
"UY": "UYU",
"UZ": "UZS",
"VA": "EUR",
"VC": "XCD",
"VE": "VES",
"VG": "USD",
"VI": "USD",
"VN": "VND",
"VU": "VUV",
"WF": "XPF",
"WS": "WST",
"XK": "EUR",
"YE": "YER",
"YT": "EUR",
"ZA": "ZAR",
"ZM": "ZMW",
"ZW": "ZWG",
"ZZ": "XAD"
};
// src/currency/data.ts
var PRECISION_OVERRIDES = {
IQD: 3
};
function currencyDigits(code) {
const c = code.toUpperCase();
return PRECISION_OVERRIDES[c] ?? CURRENCY_DIGITS[c] ?? DEFAULT_CURRENCY_DIGITS;
}
function currencyForRegion(region) {
return REGION_CURRENCY[region.toUpperCase()];
}
function currencyForLocale(locale) {
const region = chunkQ4F4Q7IO_cjs.regionFromLocale(locale);
return region ? currencyForRegion(region) : void 0;
}
// src/currency/symbols.ts
var LEGACY_RIAL_LIGATURE = "\uFDFC";
var SAR_UNICODE = {
char: "\u20C1",
codepoint: "U+20C1",
unicodeVersion: "17.0",
released: "2025-09",
live: true,
// shipped in Unicode 17.0
autoDefault: false
// most system fonts still lack the glyph
};
var AED_UNICODE = {
char: "\u20C3",
codepoint: "U+20C3",
unicodeVersion: "18.0",
released: "2026-09",
live: true,
// shipped in Unicode 18.0
autoDefault: true
// `auto` prefers the dedicated dirham sign (Unicode 18.0)
};
var OMR_UNICODE = {
char: "\u20C4",
codepoint: "U+20C4",
unicodeVersion: "18.0",
released: "2026-09",
live: true,
// shipped in Unicode 18.0
autoDefault: true
// `auto` prefers the dedicated rial sign (Unicode 18.0)
};
var CURRENCY_SYMBOLS = {
// Gulf — the transition currencies
SAR: { code: "SAR", text: "\u0631.\u0633", unicode: SAR_UNICODE },
AED: { code: "AED", text: "\u062F.\u0625", unicode: AED_UNICODE },
OMR: { code: "OMR", text: "\u0631.\u0639.", unicode: OMR_UNICODE },
// Other dinars (3 decimals) and riyals
KWD: { code: "KWD", text: "\u062F.\u0643" },
BHD: { code: "BHD", text: "\u062F.\u0628" },
QAR: { code: "QAR", text: "\u0631.\u0642" },
JOD: { code: "JOD", text: "\u062F.\u0623" },
IQD: { code: "IQD", text: "\u062F.\u0639" },
LYD: { code: "LYD", text: "\u062F.\u0644" },
TND: { code: "TND", text: "\u062F.\u062A" },
YER: { code: "YER", text: "\u0631.\u064A" },
// Pounds / liras
EGP: { code: "EGP", text: "\u062C.\u0645" },
SDG: { code: "SDG", text: "\u062C.\u0633" },
LBP: { code: "LBP", text: "\u0644.\u0644" },
SYP: { code: "SYP", text: "\u0644.\u0633" },
// Dirham / dinar (Maghreb)
MAD: { code: "MAD", text: "\u062F.\u0645." },
DZD: { code: "DZD", text: "\u062F.\u062C" },
// Others
MRU: { code: "MRU", text: "\u0623.\u0645" },
SOS: { code: "SOS", text: "\u0634.\u0635" },
DJF: { code: "DJF", text: "\u0641.\u062C" },
KMF: { code: "KMF", text: "\u0641.\u062C.\u0642" },
ILS: { code: "ILS", text: "\u20AA" }
};
function getSymbolData(code) {
return CURRENCY_SYMBOLS[code.toUpperCase()];
}
// src/currency/format.ts
var NBSP = "\xA0";
function resolveCurrencySymbol(code, options = {}) {
const mode = options.mode ?? "auto";
const upper = code.toUpperCase();
if (mode === "code") return upper;
const data = getSymbolData(upper);
if (data) {
if (mode === "text") return data.text;
if (mode === "new") return data.unicode?.char ?? data.text;
if (data.unicode?.autoDefault) return data.unicode.char;
return data.text;
}
return intlSymbol(upper, options.locale ?? chunkQ4F4Q7IO_cjs.DEFAULT_LOCALE) ?? upper;
}
function formatCurrency(amount, options = {}) {
const locale = options.locale ?? chunkQ4F4Q7IO_cjs.DEFAULT_LOCALE;
const currency = (options.currency ?? currencyForLocale(locale))?.toUpperCase();
if (!currency) {
throw new Error(
'arabicfmt: could not resolve a currency. Pass { currency: "SAR" } or a locale with a region, e.g. "ar-SA".'
);
}
const numerals = options.numerals ?? "latn";
const digits = options.fractionDigits ?? currencyDigits(currency);
const min = options.minimumFractionDigits ?? digits;
const max = Math.max(min, options.maximumFractionDigits ?? digits);
const accounting = options.accounting ?? false;
const absAmount = accounting ? Math.abs(amount) : amount;
const fmtOpts = {
minimumFractionDigits: min,
maximumFractionDigits: max,
useGrouping: options.grouping ?? true
};
if (!accounting && options.signDisplay) fmtOpts.signDisplay = options.signDisplay;
const numberPart = new Intl.NumberFormat(
chunkQ4F4Q7IO_cjs.withNumberingSystem(locale, numerals),
fmtOpts
).format(absAmount);
if (options.showSymbol === false) {
return options.isolate ? chunkQQFKUSZ7_cjs.isolate(numberPart) : numberPart;
}
const symbol = resolveCurrencySymbol(currency, {
mode: options.symbolMode ?? "auto",
locale
});
const placement = resolvePlacement(locale, currency);
const spacing = options.symbolSpacing ?? placement.spacing;
const position = options.symbolPosition ?? placement.position;
let out = position === "before" ? `${symbol}${spacing}${numberPart}` : `${numberPart}${spacing}${symbol}`;
if (accounting && amount < 0) out = `(${out})`;
return options.isolate ? chunkQQFKUSZ7_cjs.isolate(out) : out;
}
function getCurrencyInfo(code, locale = chunkQ4F4Q7IO_cjs.DEFAULT_LOCALE) {
const upper = code.toUpperCase();
const data = getSymbolData(upper);
const info = {
code: upper,
digits: currencyDigits(upper),
symbols: {
auto: resolveCurrencySymbol(upper, { mode: "auto", locale }),
text: resolveCurrencySymbol(upper, { mode: "text", locale }),
code: upper
}
};
if (data?.unicode) {
info.symbols.new = data.unicode.char;
info.unicode = {
codepoint: data.unicode.codepoint,
unicodeVersion: data.unicode.unicodeVersion,
released: data.unicode.released,
live: data.unicode.live,
autoDefault: data.unicode.autoDefault
};
}
const name = intlDisplayName(upper, locale);
if (name) info.displayName = name;
return info;
}
function intlSymbol(code, locale) {
try {
const parts = new Intl.NumberFormat(locale, {
style: "currency",
currency: code,
currencyDisplay: "narrowSymbol"
}).formatToParts(0);
const sym = parts.find((p) => p.type === "currency")?.value;
return sym && sym !== code ? sym : void 0;
} catch {
return void 0;
}
}
function intlDisplayName(code, locale) {
const DisplayNames = Intl.DisplayNames;
if (!DisplayNames) return void 0;
try {
return new DisplayNames([locale], { type: "currency" }).of(code);
} catch {
return void 0;
}
}
var placementCache = /* @__PURE__ */ new Map();
function resolvePlacement(locale, currency) {
const key = `${locale}|${currency}`;
const cached = placementCache.get(key);
if (cached) return cached;
let placement = {
position: locale.toLowerCase().startsWith("ar") ? "after" : "before",
spacing: NBSP
};
try {
const parts = new Intl.NumberFormat(locale, {
style: "currency",
currency
}).formatToParts(1);
const curIdx = parts.findIndex((p) => p.type === "currency");
const numIdx = parts.findIndex(
(p) => p.type === "integer" || p.type === "decimal"
);
if (curIdx !== -1 && numIdx !== -1) {
const position = curIdx < numIdx ? "before" : "after";
const adjacent = position === "before" ? parts[curIdx + 1] : parts[curIdx - 1];
const hasGap = adjacent?.type === "literal" && /\s/.test(chunkQQFKUSZ7_cjs.stripBidi(adjacent.value));
placement = { position, spacing: hasGap ? NBSP : "" };
}
} catch {
}
placementCache.set(key, placement);
return placement;
}
// src/countries.ts
var ARAB_LEAGUE_COUNTRIES = [
{ region: "SA", nameEn: "Saudi Arabia", nameAr: "\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629" },
{ region: "AE", nameEn: "United Arab Emirates", nameAr: "\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A" },
{ region: "KW", nameEn: "Kuwait", nameAr: "\u0627\u0644\u0643\u0648\u064A\u062A" },
{ region: "BH", nameEn: "Bahrain", nameAr: "\u0627\u0644\u0628\u062D\u0631\u064A\u0646" },
{ region: "OM", nameEn: "Oman", nameAr: "\u0639\u064F\u0645\u0627\u0646" },
{ region: "QA", nameEn: "Qatar", nameAr: "\u0642\u0637\u0631" },
{ region: "JO", nameEn: "Jordan", nameAr: "\u0627\u0644\u0623\u0631\u062F\u0646" },
{ region: "IQ", nameEn: "Iraq", nameAr: "\u0627\u0644\u0639\u0631\u0627\u0642" },
{ region: "LY", nameEn: "Libya", nameAr: "\u0644\u064A\u0628\u064A\u0627" },
{ region: "TN", nameEn: "Tunisia", nameAr: "\u062A\u0648\u0646\u0633" },
{ region: "EG", nameEn: "Egypt", nameAr: "\u0645\u0635\u0631" },
{ region: "LB", nameEn: "Lebanon", nameAr: "\u0644\u0628\u0646\u0627\u0646" },
{ region: "SY", nameEn: "Syria", nameAr: "\u0633\u0648\u0631\u064A\u0627" },
{ region: "MA", nameEn: "Morocco", nameAr: "\u0627\u0644\u0645\u063A\u0631\u0628" },
{ region: "DZ", nameEn: "Algeria", nameAr: "\u0627\u0644\u062C\u0632\u0627\u0626\u0631" },
{ region: "SD", nameEn: "Sudan", nameAr: "\u0627\u0644\u0633\u0648\u062F\u0627\u0646" },
{ region: "YE", nameEn: "Yemen", nameAr: "\u0627\u0644\u064A\u0645\u0646" },
{ region: "PS", nameEn: "Palestine", nameAr: "\u0641\u0644\u0633\u0637\u064A\u0646" },
{ region: "MR", nameEn: "Mauritania", nameAr: "\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627" },
{ region: "SO", nameEn: "Somalia", nameAr: "\u0627\u0644\u0635\u0648\u0645\u0627\u0644" },
{ region: "DJ", nameEn: "Djibouti", nameAr: "\u062C\u064A\u0628\u0648\u062A\u064A" },
{ region: "KM", nameEn: "Comoros", nameAr: "\u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631" }
];
function countryCurrency(region) {
return currencyForRegion(region);
}
// src/currency/tafqit.ts
var RIYAL = { gender: "male", singular: "\u0631\u064A\u0627\u0644", dual: "\u0631\u064A\u0627\u0644\u0627\u0646", plural: "\u0631\u064A\u0627\u0644\u0627\u062A", accusative: "\u0631\u064A\u0627\u0644\u0627\u064B" };
var DINAR = { gender: "male", singular: "\u062F\u064A\u0646\u0627\u0631", dual: "\u062F\u064A\u0646\u0627\u0631\u0627\u0646", plural: "\u062F\u0646\u0627\u0646\u064A\u0631", accusative: "\u062F\u064A\u0646\u0627\u0631\u0627\u064B" };
var DIRHAM = { gender: "male", singular: "\u062F\u0631\u0647\u0645", dual: "\u062F\u0631\u0647\u0645\u0627\u0646", plural: "\u062F\u0631\u0627\u0647\u0645", accusative: "\u062F\u0631\u0647\u0645\u0627\u064B" };
var JUNAYH = { gender: "male", singular: "\u062C\u0646\u064A\u0647", dual: "\u062C\u0646\u064A\u0647\u0627\u0646", plural: "\u062C\u0646\u064A\u0647\u0627\u062A", accusative: "\u062C\u0646\u064A\u0647\u0627\u064B" };
var LIRA = { gender: "female", singular: "\u0644\u064A\u0631\u0629", dual: "\u0644\u064A\u0631\u062A\u0627\u0646", plural: "\u0644\u064A\u0631\u0627\u062A", accusative: "\u0644\u064A\u0631\u0629\u064B" };
var FRANC = { gender: "male", singular: "\u0641\u0631\u0646\u0643", dual: "\u0641\u0631\u0646\u0643\u0627\u0646", plural: "\u0641\u0631\u0646\u0643\u0627\u062A", accusative: "\u0641\u0631\u0646\u0643\u0627\u064B" };
var SHILLING = { gender: "male", singular: "\u0634\u0644\u0646", dual: "\u0634\u0644\u0646\u0627\u0646", plural: "\u0634\u0644\u0646\u0627\u062A", accusative: "\u0634\u0644\u0646\u0627\u064B" };
var OUGUIYA = { gender: "female", singular: "\u0623\u0648\u0642\u064A\u0629", dual: "\u0623\u0648\u0642\u064A\u062A\u0627\u0646", plural: "\u0623\u0648\u0642\u064A\u0627\u062A", accusative: "\u0623\u0648\u0642\u064A\u0629\u064B" };
var FILS = { gender: "male", singular: "\u0641\u0644\u0633", dual: "\u0641\u0644\u0633\u0627\u0646", plural: "\u0641\u0644\u0648\u0633", accusative: "\u0641\u0644\u0633\u0627\u064B" };
var HALALA = { gender: "female", singular: "\u0647\u0644\u0644\u0629", dual: "\u0647\u0644\u0644\u062A\u0627\u0646", plural: "\u0647\u0644\u0644\u0627\u062A", accusative: "\u0647\u0644\u0644\u0629\u064B" };
var QIRSH = { gender: "male", singular: "\u0642\u0631\u0634", dual: "\u0642\u0631\u0634\u0627\u0646", plural: "\u0642\u0631\u0648\u0634", accusative: "\u0642\u0631\u0634\u0627\u064B" };
var SANTEEM = { gender: "male", singular: "\u0633\u0646\u062A\u064A\u0645", dual: "\u0633\u0646\u062A\u064A\u0645\u0627\u0646", plural: "\u0633\u0646\u062A\u064A\u0645\u0627\u062A", accusative: "\u0633\u0646\u062A\u064A\u0645\u0627\u064B" };
var BAISA = { gender: "female", singular: "\u0628\u064A\u0633\u0629", dual: "\u0628\u064A\u0633\u062A\u0627\u0646", plural: "\u0628\u064A\u0633\u0627\u062A", accusative: "\u0628\u064A\u0633\u0629\u064B" };
var MILLIME = { gender: "male", singular: "\u0645\u0644\u064A\u0645", dual: "\u0645\u0644\u064A\u0645\u0627\u0646", plural: "\u0645\u0644\u064A\u0645\u0627\u062A", accusative: "\u0645\u0644\u064A\u0645\u0627\u064B" };
var CENT = { gender: "male", singular: "\u0633\u0646\u062A", dual: "\u0633\u0646\u062A\u0627\u0646", plural: "\u0633\u0646\u062A\u0627\u062A", accusative: "\u0633\u0646\u062A\u0627\u064B" };
var CURRENCY_WORDS = {
SAR: { major: RIYAL, minor: HALALA },
QAR: { major: RIYAL, minor: DIRHAM },
YER: { major: RIYAL, minor: FILS },
OMR: { major: RIYAL, minor: BAISA },
AED: { major: DIRHAM, minor: FILS },
MAD: { major: DIRHAM, minor: SANTEEM },
KWD: { major: DINAR, minor: FILS },
BHD: { major: DINAR, minor: FILS },
IQD: { major: DINAR, minor: FILS },
JOD: { major: DINAR, minor: FILS },
LYD: { major: DINAR, minor: DIRHAM },
TND: { major: DINAR, minor: MILLIME },
DZD: { major: DINAR, minor: SANTEEM },
EGP: { major: JUNAYH, minor: QIRSH },
SDG: { major: JUNAYH, minor: QIRSH },
LBP: { major: LIRA, minor: QIRSH },
SYP: { major: LIRA, minor: QIRSH },
SOS: { major: SHILLING, minor: CENT },
DJF: { major: FRANC },
KMF: { major: FRANC },
MRU: { major: OUGUIYA }
};
function genericWords(code) {
const noun = {
gender: "male",
singular: code,
dual: code,
plural: code,
accusative: code
};
return { major: noun };
}
function spellCurrency(amount, options = {}) {
if (!Number.isFinite(amount)) return "";
const code = (options.currency ?? currencyForLocale(options.locale ?? chunkQ4F4Q7IO_cjs.DEFAULT_LOCALE) ?? "").toUpperCase();
const words = CURRENCY_WORDS[code] ?? genericWords(code || "\u0648\u062D\u062F\u0629");
const digits = currencyDigits(code);
const minorPerMajor = digits > 0 ? 10 ** digits : 1;
const negative = amount < 0;
const abs = Math.abs(amount);
const scaled = Math.round(abs * minorPerMajor);
const major = Math.floor(scaled / minorPerMajor);
const minor = scaled - major * minorPerMajor;
const parts = [];
if (major > 0) parts.push(chunkTNU35HB7_cjs.countedNoun(major, words.major));
if (minor > 0 && words.minor) parts.push(chunkTNU35HB7_cjs.countedNoun(minor, words.minor));
let result = parts.length === 0 ? `\u0635\u0641\u0631 ${words.major.singular}` : parts.join(" \u0648");
if (options.suffix === true) result += " \u0641\u0642\u0637 \u0644\u0627 \u063A\u064A\u0631";
else if (typeof options.suffix === "string") result += ` ${options.suffix}`;
if (negative) result = `${options.negativePrefix ?? "\u0633\u0627\u0644\u0628"} ${result}`;
return result;
}
exports.ARAB_LEAGUE_COUNTRIES = ARAB_LEAGUE_COUNTRIES;
exports.CLDR_VERSION = CLDR_VERSION;
exports.CURRENCY_SYMBOLS = CURRENCY_SYMBOLS;
exports.CURRENCY_WORDS = CURRENCY_WORDS;
exports.LEGACY_RIAL_LIGATURE = LEGACY_RIAL_LIGATURE;
exports.PRECISION_OVERRIDES = PRECISION_OVERRIDES;
exports.countryCurrency = countryCurrency;
exports.currencyDigits = currencyDigits;
exports.currencyForLocale = currencyForLocale;
exports.currencyForRegion = currencyForRegion;
exports.formatCurrency = formatCurrency;
exports.getCurrencyInfo = getCurrencyInfo;
exports.getSymbolData = getSymbolData;
exports.resolveCurrencySymbol = resolveCurrencySymbol;
exports.spellCurrency = spellCurrency;