import { N as NumeralSystem } from '../types-CK7PVYeU.cjs'; import { C as CountedNoun } from '../count-C4U_RQ2h.cjs'; /** * How to render the currency symbol: * - `auto` — the safe default: a text symbol that renders in every font today. * - `new` — the dedicated Unicode sign (e.g. U+20C1 for SAR). Needs font support. * - `text` — always the Arabic text symbol (e.g. "ر.س"). * - `code` — the ISO 4217 code (e.g. "SAR"). */ type SymbolMode = "auto" | "new" | "text" | "code"; /** Where the symbol sits relative to the amount (before bidi resolution). */ type SymbolPosition = "before" | "after"; interface ResolveSymbolOptions { mode?: SymbolMode; /** Locale used only to look up a fallback symbol for non-Arab currencies. */ locale?: string; } /** * Resolve the display symbol for a currency under a given {@link SymbolMode}. * Falls back to `Intl`'s symbol for currencies outside the curated Arab set, and * to the ISO code when nothing else is available. */ declare function resolveCurrencySymbol(code: string, options?: ResolveSymbolOptions): string; interface FormatCurrencyOptions { /** ISO 4217 code. If omitted, derived from the locale's region. */ currency?: string; /** BCP-47 locale. Default `"ar"`. */ locale?: string; /** Symbol rendering strategy. Default `"auto"`. */ symbolMode?: SymbolMode; /** Digit shaping. Default `"latn"` (Eastern Arabic numerals are opt-in). */ numerals?: NumeralSystem; /** Force a fixed number of fraction digits (sets both min and max). */ fractionDigits?: number; minimumFractionDigits?: number; maximumFractionDigits?: number; /** Thousands grouping. Default `true`. */ grouping?: boolean; /** Include the symbol. Default `true`. */ showSymbol?: boolean; /** Override symbol placement. Default: locale-appropriate (via Intl). */ symbolPosition?: SymbolPosition; /** Separator between amount and symbol. Default non-breaking space. */ symbolSpacing?: string; /** Wrap the result in a directional isolate for safe embedding. Default false. */ isolate?: boolean; /** * Accounting notation: wrap negative values in parentheses instead of * using a minus sign. E.g. `(1,234.50 ر.س)`. Default `false`. */ accounting?: boolean; /** * Sign display. Default `"auto"` (negative sign only). * `"always"` always shows `+` / `−`. */ signDisplay?: "auto" | "always" | "exceptZero" | "never"; } /** * Format a monetary amount with the correct symbol and minor-unit precision for * its currency. * * @example formatCurrency(1234.5, { currency: "SAR" }) // "1,234.50 ر.س" * @example formatCurrency(1.2, { currency: "KWD" }) // "1.200 د.ك" (3 decimals) * @example formatCurrency(1234.5, { locale: "ar-SA", numerals: "arab" }) // Eastern digits */ declare function formatCurrency(amount: number, options?: FormatCurrencyOptions): string; interface CurrencyInfo { /** ISO 4217 code. */ code: string; /** Minor-unit (decimal) digits. */ digits: number; /** The symbol under each mode. `new` is present only when one exists. */ symbols: { auto: string; text: string; code: string; new?: string; }; /** Unicode transition metadata, when the currency has a dedicated sign. */ unicode?: { codepoint: string; unicodeVersion: string; released: string; live: boolean; autoDefault: boolean; }; /** Localized currency display name via Intl, when available. */ displayName?: string; } /** Everything arabicfmt knows about a currency, for a given display locale. */ declare function getCurrencyInfo(code: string, locale?: string): CurrencyInfo; /** Version of the CLDR dataset these tables were generated from. */ declare const CLDR_VERSION = "48.2.0"; /** * Deliberate precision overrides on top of CLDR. * * CLDR records the *practical* number of decimals shown for cash, which for the * Iraqi dinar is 0 (fils coins left circulation during hyperinflation). ISO 4217 * still defines IQD with **3** minor-unit digits, and a correctness-focused * formatter should preserve that, so we override it here. This is the only place * the library departs from CLDR precision — and it is asserted by the build-time * verifier so it can never drift silently. */ declare const PRECISION_OVERRIDES: Readonly>; /** Minor-unit (decimal) digit count for an ISO 4217 code. */ declare function currencyDigits(code: string): number; /** Primary currency for an ISO 3166-1 alpha-2 region, per CLDR. */ declare function currencyForRegion(region: string): string | undefined; /** Primary currency implied by a BCP-47 locale's region subtag, if any. */ declare function currencyForLocale(locale: string): string | undefined; /** * Curated currency-symbol data — the heart of arabicfmt. * * CLDR and `Intl` still ship the *old* symbols for the currencies caught up in * the 2025–2026 Unicode transition, so the symbols below are maintained by hand * and cross-checked against the Unicode proposals. Precision (minor-unit digits) * is NOT here — that comes from CLDR via ./data.generated.ts. */ /** * The legacy "Rial" ligature, U+FDFC (﷼). It encodes the **Iranian** rial and * must never be used for the Saudi riyal (which now has its own sign, U+20C1). * Exported so callers and tests can guard against it explicitly. */ declare const LEGACY_RIAL_LIGATURE = "\uFDFC"; interface UnicodeSymbol { /** The dedicated sign itself, e.g. "⃁" for the Saudi riyal. */ readonly char: string; /** Human-readable codepoint label, e.g. "U+20C1". */ readonly codepoint: string; /** Unicode version that introduces (or introduced) the sign. */ readonly unicodeVersion: string; /** Month the introducing Unicode version is/was released. */ readonly released: string; /** True once the introducing Unicode version has shipped. */ readonly live: boolean; /** * Whether `symbolMode: "auto"` should prefer this sign. Since Unicode 18.0 * (September 2026) this is `true` for the AED and OMR signs. The Saudi * riyal (U+20C1) deliberately stays `false` — it is the * most-traded Gulf currency, so its default remains the safe text symbol that * renders everywhere; opt into the sign with `symbolMode: "new"`. */ readonly autoDefault: boolean; } interface CurrencySymbolData { /** ISO 4217 code. */ readonly code: string; /** Arabic abbreviation that renders in every font, e.g. "ر.س". */ readonly text: string; /** Dedicated Unicode sign + transition metadata, when one exists. */ readonly unicode?: UnicodeSymbol; } /** * Curated symbols for the 22 Arab League currencies (plus ILS, which circulates * in the Palestinian territories). Keyed by ISO 4217 code. */ declare const CURRENCY_SYMBOLS: Readonly>; /** Look up curated symbol data for an ISO 4217 code (case-insensitive). */ declare function getSymbolData(code: string): CurrencySymbolData | undefined; interface ArabLeagueCountry { /** ISO 3166-1 alpha-2 region code. */ readonly region: string; /** English country name. */ readonly nameEn: string; /** Arabic country name. */ readonly nameAr: string; } /** * The 22 member states of the Arab League. Each country's primary currency is * resolved from CLDR via {@link countryCurrency} rather than stored here, so the * currency mapping has a single, verifiable source of truth. */ declare const ARAB_LEAGUE_COUNTRIES: readonly ArabLeagueCountry[]; /** Primary currency for an Arab League country (or any region), per CLDR. */ declare function countryCurrency(region: string): string | undefined; /** * التفقيط — spell a monetary amount in full Arabic words. * * This is the operation every Arabic invoice, cheque and contract needs: * turning `1234.50 SAR` into "ألف ومئتان وأربعة وثلاثون ريالاً وخمسون هللة". * * The grammar of the counted noun (العدد والمعدود) is non-trivial: * - 1 → singular (ريال واحد) * - 2 → dual (ريالان) * - n%100 3–10 → plural (ثلاثة ريالات) * - n%100 11–99 → accusative singular (أحد عشر ريالاً) * - n%100 0/1/2 → genitive singular (مئة ريال) * The number itself is produced by {@link arabicToWords}; this module only * supplies the correctly-inflected unit noun and joins the parts. */ /** * The four inflected forms a currency noun needs for Arabic number agreement. * Structurally identical to {@link CountedNoun} (re-exported for discoverability). */ type CurrencyNoun = CountedNoun; interface CurrencyWords { /** Major unit, e.g. the riyal. */ major: CurrencyNoun; /** Minor unit, e.g. the halala. Omitted for currencies with no subunit. */ minor?: CurrencyNoun; } /** * Arabic noun paradigms for the 22 Arab League currencies (+ neighbours). * The number of minor units per major is derived from CLDR precision, so it is * never stated twice — see {@link currencyDigits}. */ declare const CURRENCY_WORDS: Readonly>; interface SpellCurrencyOptions { /** ISO 4217 code (e.g. `"SAR"`). Required unless `locale` implies one. */ currency?: string; /** BCP-47 locale; its region selects a currency when `currency` is absent. */ locale?: string; /** * Append a closing phrase. `true` adds the classic cheque ending * "فقط لا غير"; a string appends that string verbatim. */ suffix?: boolean | string; /** Prefix for negative amounts. Default `"سالب"`. */ negativePrefix?: string; } /** * Spell a monetary amount in full Arabic words (التفقيط). * * Splits the amount into major and minor units using the currency's CLDR * precision (so KWD yields 1000 fils, SAR yields 100 halalas), inflects each * unit noun for correct agreement, and joins them with و. * * @example * spellCurrency(1234.5, { currency: "SAR" }) * // "ألف ومئتان وأربعة وثلاثون ريالاً وخمسون هللة" * * @example * spellCurrency(2, { currency: "KWD" }) // "ديناران" * spellCurrency(1.5, { currency: "KWD" }) // "دينار واحد وخمسمئة فلس" * spellCurrency(0.75, { currency: "SAR" }) // "خمسة وسبعون هللةً" * spellCurrency(100, { currency: "EGP", suffix: true }) * // "مئة جنيه فقط لا غير" * spellCurrency(-5, { locale: "ar-AE" }) // "سالب خمسة دراهم" */ declare function spellCurrency(amount: number, options?: SpellCurrencyOptions): string; export { ARAB_LEAGUE_COUNTRIES, type ArabLeagueCountry, CLDR_VERSION, CURRENCY_SYMBOLS, CURRENCY_WORDS, type CurrencyInfo, type CurrencyNoun, type CurrencySymbolData, type CurrencyWords, type FormatCurrencyOptions, LEGACY_RIAL_LIGATURE, PRECISION_OVERRIDES, type ResolveSymbolOptions, type SpellCurrencyOptions, type SymbolMode, type SymbolPosition, type UnicodeSymbol, countryCurrency, currencyDigits, currencyForLocale, currencyForRegion, formatCurrency, getCurrencyInfo, getSymbolData, resolveCurrencySymbol, spellCurrency };