/**
* Formato numérico del tablero de indicadores.
*
* Por qué es un módulo y no un `toLocaleString` en cada widget. Hoy cada
* widget formatea a su manera: el KPI concatena prefijo y sufijo, los ejes de los
* gráficos llaman a `toLocaleString('es-CO')` por su cuenta y la tabla no formatea
* nada. El resultado es que la misma cifra se ve distinta en tres sitios de la
* misma pantalla.
*
* Las reglas de aquí salen de la especificación del tablero:
*
* - Se abrevia por magnitud (K, M, B), pero nunca en tablas ni en enteros
* de conteo: una tabla existe para comparar cifras exactas, y "20 pedidos" no
* se lee mejor como "20".
* - La moneda es un símbolo separado y más pequeño, no un prefijo pegado
* al número. Por eso `abbreviate` devuelve las piezas por separado en vez de
* una cadena: quien pinta decide el tamaño de cada una.
* - Todo número que se refresca se pinta con `tabular-nums`. Sin eso los dígitos
* cambian de ancho y la cifra tiembla en cada refresco.
*/
/**
* Locale por defecto del producto.
*
* Se exporta porque es el ÚNICO punto donde vive esa decisión: cualquier `toLocaleString`,
* `toLocaleDateString` o `localeCompare` del tablero lo usa en vez de cablear `'es-CO'` por su
* cuenta — que es lo que hacían el subtítulo del contenedor, el badge de alto volumen y el
* comparador de la tabla.
*/
export declare const DASHBOARD_LOCALE = "es-CO";
/**
* Moneda del alcance activo.
*
* Hoy el símbolo está cableado, y es a propósito. El endpoint de compañías
* no devuelve la moneda local (`CompanyDto = {id, code, name}`), aunque el dato
* exista en base (`segm_companies_prj.local_currency_id`). Mostrar un código de
* moneda que nadie verificó sería peor que no mostrarlo.
*
* El día que el API la exponga, este es el único sitio que cambia: ningún
* widget formatea moneda por su cuenta.
*/
export interface Currency {
/** Símbolo visible: `$`, `US$`. */
symbol: string;
/** Código ISO, para el selector de compañía. `null` mientras no sea confiable. */
iso: string | null;
locale: string;
}
export declare const DEFAULT_CURRENCY: Currency;
/** Lo mínimo que el tablero necesita saber de una compañía para resolver su moneda. */
export interface CurrencyScope {
/** Moneda local de la compañía. Hoy ningún host la envía. */
localCurrency?: {
symbol?: string;
iso?: string;
} | null;
}
/**
* El único punto donde se decide en qué moneda está una cifra.
*
* Ningún widget formatea moneda por su cuenta: todos pasan por aquí. Eso es lo que
* hace que el día que el API de compañías exponga `local_currency_id` haya que
* cambiar exactamente una función — y no rastrear cada `toLocaleString` del módulo.
*
* Mientras tanto devuelve el peso con `iso: null`, que es una afirmación honesta:
* "sé qué símbolo pintar, no sé de qué moneda es". Por eso el selector de compañía
* no muestra código de moneda todavía — mostrar "COP" para todas sería afirmar algo
* que nadie verificó.
*/
export declare function resolveCurrency(scope?: CurrencyScope): Currency;
/** Las tres piezas de una cifra, para que quien pinta decida el tamaño de cada una. */
export interface AbbreviatedValue {
/** Símbolo de moneda, o `null` si el indicador no es monetario. */
symbol: string | null;
/** El número ya formateado al locale. */
number: string;
/**
* Sufijo de magnitud, o `null` si no se abrevió.
*
* Es una cadena libre y NO una unión `K | M | B` a propósito: lo pone `Intl` según
* el locale, y las escalas no coinciden entre idiomas — en español 5.230.000.000
* lleva `M` (escala larga) y en inglés `B`.
*/
scale: string | null;
}
export interface AbbreviateOptions {
/** Símbolo de moneda a devolver en `symbol`. */
currency?: string | null;
/** Entero de conteo: nunca se abrevia (pedidos, documentos, registros). */
integer?: boolean;
locale?: string;
/**
* Fuerza la abreviatura desde los miles, ignorando {@link ABBREVIATE_FROM}.
*
* Es para los ejes de los gráficos y el centro de la dona, donde el espacio
* manda: un eje Y con `10.000.000` en cada marca se come el gráfico, y la cifra
* exacta ya está en el tooltip. En un KPI o en una celda de tabla, no.
*/
compact?: boolean;
}
/**
* Parte una cifra en símbolo + número + magnitud.
*
* Por debajo de {@link ABBREVIATE_FROM} devuelve la cifra completa con sus
* separadores de miles: en un ERP eso es lo que se espera leer.
*/
export declare function abbreviate(value: number, options?: AbbreviateOptions): AbbreviatedValue;
/**
* La cifra abreviada como una sola cadena.
*
* Para donde no se puede componer con varios elementos: ejes de gráficos,
* tooltips, el centro de una dona.
*/
export declare function formatCompact(value: number, options?: AbbreviateOptions): string;
/**
* La cifra completa, sin abreviar.
*
* Es lo que va en el `title` del número y en las celdas de tabla: donde el
* usuario compara magnitudes exactas, abreviar le quita justo lo que busca.
*/
export declare function formatExact(value: number, options?: {
currency?: string | null;
decimals?: number;
locale?: string;
}): string;
/** Porcentaje con un decimal. El signo lo pone quien pinta, junto con el icono de tendencia. */
export declare function formatPercent(value: number, locale?: string): string;
/**
* Fecha en formato de negocio: `19 ago 2026`.
*
* Nunca ISO crudo. Una fecha de máquina en una tabla que lee un gerente es un
* detalle de implementación que se escapó a la pantalla.
*/
export declare function formatDate(value: string | Date, locale?: string): string;
/**
* Estilo obligatorio de todo número que se refresque en vivo.
*
* `tabular-nums` fija el ancho de los dígitos: sin él, un `1` ocupa menos que un `8` y la cifra
* se desplaza en cada refresco.
*
* El tracking de las cifras grandes del KPI NO va aquí —aunque este comentario lo dijera—:
* lo decide el contenedor con `--dash-kpi-tracking`, porque el mismo componente se pinta a tres
* tamaños (compacto, ampliado y modo presentación) y el interletraje correcto depende del tamaño.
*/
export declare const NUMERIC_STYLE: {
readonly fontVariantNumeric: "tabular-nums";
};
/** @deprecated Usar {@link NUMERIC_STYLE}: son exactamente el mismo estilo. */
export declare const KPI_VALUE_STYLE: {
readonly fontVariantNumeric: "tabular-nums";
};
//# sourceMappingURL=formatNumber.d.ts.map