import { DurationUnit } from './html/data_styles';
import { Cell, NestField, Field } from './data_tree';
export declare const NULL_SYMBOL = "\u2205";
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
export declare function deepMerge<T extends Record<string, unknown>[]>(...sources: [...T]): UnionToIntersection<T[number]>;
export declare function getTextWidthCanvas(text: string, font: string, canvasToUse?: HTMLCanvasElement): number;
export declare function getTextWidthDOM(text: string, styles: Record<string, string>): number;
export declare function clamp(s: number, e: number, v: number): number;
export declare function getRangeSize(range: [number, number]): number;
export declare function formatTimeUnit(value: number, unit: DurationUnit, options?: {
    numFormat?: string;
    terse?: boolean;
}): string;
export declare function getText(field: Field, value: number, options: {
    durationUnit?: string;
    terse?: boolean;
}): string | null;
export interface RenderTimeStringOptions {
    isDate?: boolean;
    timeframe?: string;
    extractFormat?: 'month-day' | 'quarter' | 'month' | 'week' | 'day';
    timezone?: string;
}
export declare function renderTimeString(value: Date, options?: RenderTimeStringOptions): string;
export declare function valueToMalloy(value: Cell): string;
export declare function walkFields(e: NestField, cb: (f: Field) => void): void;
export declare function notUndefined<T>(x: T | undefined): x is T;
export declare function formatBigNumber(value: number): string;
export type ScaleKey = 'k' | 'm' | 'b' | 't' | 'q';
export type SuffixFormatKey = 'letter' | 'lower' | 'word' | 'short' | 'finance' | 'scientific' | 'none';
export interface FormatScaledNumberOptions {
    scale?: ScaleKey | 'auto';
    decimals?: number;
    suffix?: SuffixFormatKey;
}
/**
 * Formats a number with scaling and suffix options.
 *
 * @example
 * formatScaledNumber(1234567, { scale: 'm', decimals: 1 }) // "1.2m"
 * formatScaledNumber(1234567, { scale: 'auto' }) // "1.2m"
 * formatScaledNumber(1234567, { scale: 'm', suffix: 'word' }) // "1.2 Million"
 */
export declare function formatScaledNumber(value: number, options?: FormatScaledNumberOptions): string;
export interface ParsedNumberFormat {
    decimals?: number;
    scale?: ScaleKey | 'auto';
    isId?: boolean;
}
export interface ParsedCurrencyFormat extends ParsedNumberFormat {
    currency: string;
    symbol: string;
}
/**
 * Parses a number shorthand format string.
 * Pattern: {decimals}{scale} or "auto" or "id"
 *
 * @example
 * parseNumberShorthand("1k") // { decimals: 1, scale: 'k' }
 * parseNumberShorthand("0m") // { decimals: 0, scale: 'm' }
 * parseNumberShorthand("2")  // { decimals: 2 }
 * parseNumberShorthand("auto") // { scale: 'auto' }
 * parseNumberShorthand("id") // { isId: true }
 *
 * Note: "big" is NOT handled here - it's a legacy format handled separately
 * in renderNumberField to preserve backward compatibility with formatBigNumber.
 */
export declare function parseNumberShorthand(format: string): ParsedNumberFormat | null;
/**
 * Parses a currency shorthand format string.
 * Pattern: {currency}{decimals}{scale} e.g., "usd2m", "eur0k", "gbp1b"
 *
 * @example
 * parseCurrencyShorthand("usd2m") // { currency: 'usd', symbol: '$', decimals: 2, scale: 'm' }
 * parseCurrencyShorthand("eur0k") // { currency: 'eur', symbol: '€', decimals: 0, scale: 'k' }
 * parseCurrencyShorthand("usd")   // { currency: 'usd', symbol: '$' }
 */
export declare function parseCurrencyShorthand(format: string): ParsedCurrencyFormat | null;
/**
 * Normalizes a scale value to a ScaleKey.
 * Supports single-letter scales: k, m, b, t, q, auto.
 */
export declare function normalizeScale(scale: string | undefined): ScaleKey | 'auto' | undefined;
export {};
