{"version":3,"file":"symbolFormatters.mjs","sources":["../../../src/valueFormats/symbolFormatters.ts"],"sourcesContent":["import { DecimalCount } from '../types/displayValue';\n\nimport { scaledUnits, ValueFormatter } from './valueFormats';\n\nexport function currency(symbol: string, asSuffix?: boolean): ValueFormatter {\n  const units = ['', 'K', 'M', 'B', 'T'];\n  const scaler = scaledUnits(1000, units);\n  return (value: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount) => {\n    if (value == null) {\n      return { text: '' };\n    }\n    const isNegative = value < 0;\n    if (isNegative) {\n      value = Math.abs(value);\n    }\n    const scaled = scaler(value, decimals, scaledDecimals);\n    if (asSuffix) {\n      scaled.suffix = scaled.suffix !== undefined ? `${scaled.suffix}${symbol}` : undefined;\n    } else {\n      scaled.prefix = symbol;\n    }\n    if (isNegative) {\n      scaled.prefix = `-${scaled.prefix?.length ? scaled.prefix : ''}`;\n    }\n    return scaled;\n  };\n}\n\n/**\n * Formats currency values without scaling abbreviations(K: Thousands, M: Millions, B: Billions), displaying full numeric values.\n * Uses cached Intl.NumberFormat objects for performance.\n *\n * @param symbol - Currency symbol (e.g., '$', '€', '£')\n * @param asSuffix - If true, places symbol after number\n *\n * @example\n * fullCurrency('$')(1234.56, 2) // { prefix: '$', text: '1,234.56' } - forces 2 decimals\n * fullCurrency('€', true)(42.5) // { suffix: '€', text: '42.5' }\n */\nexport function fullCurrency(symbol: string, asSuffix?: boolean): ValueFormatter {\n  const locale = Intl.NumberFormat().resolvedOptions().locale;\n  const defaultFormatter = new Intl.NumberFormat(locale, { minimumFractionDigits: 0, maximumFractionDigits: 1 });\n  const formattersCache = new Map<number, Intl.NumberFormat>();\n\n  return (value: number | null, decimals?: DecimalCount) => {\n    if (value === null) {\n      return { text: '' };\n    }\n\n    const numericValue: number = value;\n\n    let text: string;\n    if (decimals !== undefined && decimals !== null) {\n      let formatter = formattersCache.get(decimals);\n      if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, {\n          minimumFractionDigits: decimals,\n          maximumFractionDigits: decimals,\n        });\n        formattersCache.set(decimals, formatter);\n      }\n      text = formatter.format(numericValue);\n    } else {\n      text = defaultFormatter.format(numericValue);\n    }\n\n    return {\n      prefix: asSuffix ? '' : symbol,\n      suffix: asSuffix ? symbol : '',\n      text,\n    };\n  };\n}\n\nconst SI_PREFIXES = ['f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\nconst SI_BASE_INDEX = SI_PREFIXES.indexOf('');\n\nexport function getOffsetFromSIPrefix(c: string): number {\n  const charIndex = SI_PREFIXES.findIndex((prefix) => prefix.normalize('NFKD') === c.normalize('NFKD'));\n  return charIndex < 0 ? 0 : charIndex - SI_BASE_INDEX;\n}\n\nconst BIN_PREFIXES = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];\n\nexport function binaryPrefix(unit: string, offset = 0): ValueFormatter {\n  const units = BIN_PREFIXES.map((p) => ' ' + p + unit);\n  return scaledUnits(1024, units, offset);\n}\n\nexport function SIPrefix(unit: string, offset = 0): ValueFormatter {\n  const units = SI_PREFIXES.map((p) => ' ' + p + unit);\n  return scaledUnits(1000, units, SI_BASE_INDEX + offset);\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,QAAA,CAAS,QAAgB,QAAA,EAAoC;AAC3E,EAAA,MAAM,QAAQ,CAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,EAAM,KAAK,CAAA;AACtC,EAAA,OAAO,CAAC,KAAA,EAAe,QAAA,EAAyB,cAAA,KAAkC;AAPpF,IAAA,IAAA,EAAA;AAQI,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAO,EAAE,MAAM,EAAA,EAAG;AAAA,IACpB;AACA,IAAA,MAAM,aAAa,KAAA,GAAQ,CAAA;AAC3B,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,KAAA,GAAQ,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IACxB;AACA,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,cAAc,CAAA;AACrD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAA,CAAO,MAAA,GAAS,OAAO,MAAA,KAAW,KAAA,CAAA,GAAY,GAAG,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA,GAAK,KAAA,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,IAClB;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,MAAA,GAAS,MAAI,EAAA,GAAA,MAAA,CAAO,MAAA,KAAP,mBAAe,MAAA,IAAS,MAAA,CAAO,SAAS,EAAE,CAAA,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAaO,SAAS,YAAA,CAAa,QAAgB,QAAA,EAAoC;AAC/E,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,EAAa,CAAE,iBAAgB,CAAE,MAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,EAAE,qBAAA,EAAuB,CAAA,EAAG,qBAAA,EAAuB,CAAA,EAAG,CAAA;AAC7G,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAA+B;AAE3D,EAAA,OAAO,CAAC,OAAsB,QAAA,KAA4B;AACxD,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,EAAE,MAAM,EAAA,EAAG;AAAA,IACpB;AAEA,IAAA,MAAM,YAAA,GAAuB,KAAA;AAE7B,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,QAAA,KAAa,KAAA,CAAA,IAAa,QAAA,KAAa,IAAA,EAAM;AAC/C,MAAA,IAAI,SAAA,GAAY,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA;AAC5C,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,UACxC,qBAAA,EAAuB,QAAA;AAAA,UACvB,qBAAA,EAAuB;AAAA,SACxB,CAAA;AACD,QAAA,eAAA,CAAgB,GAAA,CAAI,UAAU,SAAS,CAAA;AAAA,MACzC;AACA,MAAA,IAAA,GAAO,SAAA,CAAU,OAAO,YAAY,CAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,IAAA,GAAO,gBAAA,CAAiB,OAAO,YAAY,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,WAAW,EAAA,GAAK,MAAA;AAAA,MACxB,MAAA,EAAQ,WAAW,MAAA,GAAS,EAAA;AAAA,MAC5B;AAAA,KACF;AAAA,EACF,CAAA;AACF;AAEA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAK,GAAA,EAAK,KAAK,MAAA,EAAK,GAAA,EAAK,EAAA,EAAI,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AACxF,MAAM,aAAA,GAAgB,WAAA,CAAY,OAAA,CAAQ,EAAE,CAAA;AAErC,SAAS,sBAAsB,CAAA,EAAmB;AACvD,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,SAAA,CAAU,CAAC,MAAA,KAAW,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,KAAM,CAAA,CAAE,SAAA,CAAU,MAAM,CAAC,CAAA;AACpG,EAAA,OAAO,SAAA,GAAY,CAAA,GAAI,CAAA,GAAI,SAAA,GAAY,aAAA;AACzC;AAEA,MAAM,YAAA,GAAe,CAAC,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAEjE,SAAS,YAAA,CAAa,IAAA,EAAc,MAAA,GAAS,CAAA,EAAmB;AACrE,EAAA,MAAM,QAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,GAAM,IAAI,IAAI,CAAA;AACpD,EAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACxC;AAEO,SAAS,QAAA,CAAS,IAAA,EAAc,MAAA,GAAS,CAAA,EAAmB;AACjE,EAAA,MAAM,QAAQ,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,GAAM,IAAI,IAAI,CAAA;AACnD,EAAA,OAAO,WAAA,CAAY,GAAA,EAAM,KAAA,EAAO,aAAA,GAAgB,MAAM,CAAA;AACxD;;;;"}