UNPKG

ivt

Version:

Ivt Components Library

1 lines 5.06 kB
{"version":3,"file":"format-numbers-BMHnFGse.mjs","sources":["../../src/utils/styles.ts","../../src/utils/format-numbers.ts"],"sourcesContent":["export const styleInput =\n\t\"border-input file:text-foreground placeholder:text-muted-foreground focus-visible:ring-ring flex h-10 w-full rounded-md border bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\";\n\nexport const styleSelect = \"hover:bg-accent hover:text-accent-foreground cursor-pointer\";\n\nexport const formatNegative = (value: number) => (value < 0 ? \"text-destructive\" : \"\");\n","export function formatNumberWithComma({\n\tvalue,\n\tminimumFractionDigits = 0,\n\tmaximumFractionDigits = 12,\n\tcurrency,\n}: {\n\tvalue: number;\n\tminimumFractionDigits?: number;\n\tmaximumFractionDigits?: number;\n\tcurrency?: string | null;\n}) {\n\tconst options: Intl.NumberFormatOptions = {\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t};\n\n\tif (currency) {\n\t\toptions.style = \"currency\";\n\t\toptions.currency = currency;\n\t}\n\n\tconst formatter = new Intl.NumberFormat(\"pt-BR\", options);\n\n\treturn formatter.format(value);\n}\n\nexport function numberFormatter(value: unknown) {\n\tif (value == null || value === \"\") return \"\";\n\treturn formatNumberWithComma({ value: Number(value) });\n}\n\n/**\n * Formata um número no padrão pt-BR (ex.: 1234.56 -> \"1.234,56\").\n * @param value Número a ser formatado\n * @param minimumFractionDigits Dígitos decimais mínimos\n * @param maximumFractionDigits Dígitos decimais máximos\n * @returns String formatada (ex.: \"1.234,56\")\n */\nexport function formatNumberPtBr(\n\tvalue: number,\n\tminimumFractionDigits?: number,\n\tmaximumFractionDigits?: number,\n): string {\n\treturn new Intl.NumberFormat(\"pt-BR\", {\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t}).format(value);\n}\n\n/**\n * Formata um número como string monetária no padrão pt-BR.\n * Usa o símbolo da API, se fornecido, ou tenta formatar com Intl.NumberFormat.\n * @param value Valor numérico a ser formatado\n * @param currency Código da moeda (ex.: \"BRL\", \"USD-PTAX\")\n * @param symbol Símbolo da moeda (ex.: \"R$\", \"$\")\n * @param minimumFractionDigits Dígitos decimais mínimos (padrão: 2)\n * @param maximumFractionDigits Dígitos decimais máximos (padrão: 2)\n * @returns String formatada (ex.: \"R$ 1.234,56\")\n */\nexport function formatMoney({\n\tvalue,\n\tcurrency = \"BRL\",\n\tsymbol,\n\tminimumFractionDigits = 2,\n\tmaximumFractionDigits = 2,\n}: {\n\tvalue: number;\n\tcurrency?: string | null;\n\tsymbol?: string;\n\tminimumFractionDigits?: number;\n\tmaximumFractionDigits?: number;\n}): string {\n\tconst isValidIntlCurrency = currency && /^[A-Z]{3}$/.test(currency);\n\n\tif (isValidIntlCurrency) {\n\t\tconst formatter = new Intl.NumberFormat(\"pt-BR\", {\n\t\t\tstyle: \"currency\",\n\t\t\tcurrency,\n\t\t\tminimumFractionDigits,\n\t\t\tmaximumFractionDigits,\n\t\t});\n\t\treturn formatter.format(value);\n\t}\n\n\tconst formattedValue = formatNumberPtBr(value, minimumFractionDigits, maximumFractionDigits);\n\n\tconst finalSymbol = symbol || \"$\";\n\treturn `${finalSymbol} ${formattedValue}`;\n}\n"],"names":["styleInput","styleSelect","formatNegative","value","formatNumberWithComma","minimumFractionDigits","maximumFractionDigits","currency","options","style","formatter","Intl","NumberFormat","format","formatNumberPtBr","formatMoney","symbol","isValidIntlCurrency","test","formattedValue","finalSymbol"],"mappings":"AAAO,MAAMA,aACZ;AAEM,MAAMC,cAAc;MAEdC,cAAAA,GAAiB,CAACC,QAAmBA,KAAAA,GAAQ,CAAA,GAAI,qBAAqB;;ACL5E,SAASC,qBAAAA,CAAsB,EACrCD,KAAK,EACLE,qBAAAA,GAAwB,CAAC,EACzBC,qBAAAA,GAAwB,EAAE,EAC1BC,QAAQ,EAMR,EAAA;AACA,IAAA,MAAMC,OAAAA,GAAoC;AACzCH,QAAAA,qBAAAA;AACAC,QAAAA;AACD,KAAA;AAEA,IAAA,IAAIC,QAAAA,EAAU;AACbC,QAAAA,OAAAA,CAAQC,KAAK,GAAG,UAAA;AAChBD,QAAAA,OAAAA,CAAQD,QAAQ,GAAGA,QAAAA;AACpB,IAAA;AAEA,IAAA,MAAMG,SAAAA,GAAY,IAAIC,IAAAA,CAAKC,YAAY,CAAC,OAAA,EAASJ,OAAAA,CAAAA;IAEjD,OAAOE,SAAAA,CAAUG,MAAM,CAACV,KAAAA,CAAAA;AACzB;AAOA;;;;;;AAMC,IACM,SAASW,gBAAAA,CACfX,KAAa,EACbE,qBAA8B,EAC9BC,qBAA8B,EAAA;AAE9B,IAAA,OAAO,IAAIK,IAAAA,CAAKC,YAAY,CAAC,OAAA,EAAS;AACrCP,QAAAA,qBAAAA;AACAC,QAAAA;AACD,KAAA,CAAA,CAAGO,MAAM,CAACV,KAAAA,CAAAA;AACX;AAEA;;;;;;;;;AASC,IACM,SAASY,WAAAA,CAAY,EAC3BZ,KAAK,EACLI,QAAAA,GAAW,KAAK,EAChBS,MAAM,EACNX,qBAAAA,GAAwB,CAAC,EACzBC,qBAAAA,GAAwB,CAAC,EAOzB,EAAA;AACA,IAAA,MAAMW,mBAAAA,GAAsBV,QAAAA,IAAY,YAAA,CAAaW,IAAI,CAACX,QAAAA,CAAAA;AAE1D,IAAA,IAAIU,mBAAAA,EAAqB;AACxB,QAAA,MAAMP,SAAAA,GAAY,IAAIC,IAAAA,CAAKC,YAAY,CAAC,OAAA,EAAS;YAChDH,KAAAA,EAAO,UAAA;AACPF,YAAAA,QAAAA;AACAF,YAAAA,qBAAAA;AACAC,YAAAA;AACD,SAAA,CAAA;QACA,OAAOI,SAAAA,CAAUG,MAAM,CAACV,KAAAA,CAAAA;AACzB,IAAA;IAEA,MAAMgB,cAAAA,GAAiBL,gBAAAA,CAAiBX,KAAAA,EAAOE,qBAAAA,EAAuBC,qBAAAA,CAAAA;AAEtE,IAAA,MAAMc,cAAcJ,MAAAA,IAAU,GAAA;AAC9B,IAAA,OAAO,CAAA,EAAGI,WAAAA,CAAY,CAAC,EAAED,cAAAA,CAAAA,CAAgB;AAC1C;;;;"}