import { Tag } from '@malloydata/malloy-tag';
import { DurationUnit } from './html/data_styles';
import { Cell, NestField, Field } from './data_tree';
import type * as Malloy from '@malloydata/malloy-interfaces';
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 tagFromAnnotations(annotations: Malloy.Annotation[] | undefined, prefix?: string): Tag;
export declare function renderTagFromAnnotations(annotations: Malloy.Annotation[] | undefined): Tag;
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;
}): string | null;
export interface RenderTimeStringOptions {
    isDate?: boolean;
    timeframe?: string;
    extractFormat?: 'month-day' | 'quarter' | 'month' | 'week' | 'day';
}
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 {};
