import type { Worksheet } from 'exceljs';
import type { Writable } from 'svelte/store';
export type Cell = number | string | null | Date | object;
export interface Head {
    title?: string;
    name: string;
    width?: number | string;
    minWidth?: number;
    maxWidth?: number;
    type?: Types | string;
    unit?: string;
    class?: string;
    skipRender?: boolean;
    showTextModal?: boolean;
    modalMinTextLength?: number;
    sortable?: boolean;
    resizable?: boolean;
    pinnable?: boolean;
    pinned?: boolean;
    offsetLeft?: number;
    element?: HTMLElement;
    helpers?: boolean;
    index?: number;
    cast?: (cell: Cell) => string;
    renderValue?: (cell: Cell, type: string | undefined) => string;
    onSort?: SortCallback;
}
export declare enum Types {
    Number = "number",
    String = "string",
    Date = "date",
    Boolean = "boolean",
    List = "list",
    Object = "object"
}
export type totalValues = Array<number | string> | Record<string, number | string>;
export type RowData = Record<Head['name'], Cell>[];
export type ColData = Record<Head['name'], Cell[]>;
export declare namespace Props {
    type Data = RowData | ColData;
    type Columns = Head[] | Record<Head['name'], Head> | Record<Head['name'], Head['title']> | Head['name'][] | undefined;
    type Config = {
        virtualizer?: {
            overscan?: number;
            rowHeight: number;
        };
        enumerate?: boolean;
        fullScreen?: boolean;
        head?: {
            precision?: Record<string, number>;
            pinnable?: boolean;
            resizable?: boolean;
            sortable?: boolean;
            showPin?: boolean;
            showTextModal?: boolean;
            modalMinTextLength?: number;
            minWidth?: number;
            maxWidth?: number;
            width?: number | string;
        };
        onSort?: SortCallback;
        onPagination?: undefined;
        onFilter?: undefined;
        replaceNull?: string;
    };
    type All = {
        data: Data;
        columns: Columns | undefined;
        config: Config | undefined;
    };
}
export declare namespace Processed {
    type Data = RowData | RowProps;
    type Header = Head[];
    type Config = Props.Config;
}
export type RowProps = {
    [k: string]: unknown;
    class?: string;
} | undefined;
export type RowsConfig = Record<number | string, // Row index
RowProps> | RowProps[];
export type Sort = {
    by: Head | null;
    asc: boolean;
};
export type Controls = {
    sort: Sort;
    pinned: string[];
};
export type SortCallback = (data: Processed.Data, controls: Sort) => Promise<Processed.Data>;
export type Rendered = {
    header: Writable<Processed.Header>;
    body: Writable<Processed.Data>;
    config: Writable<Processed.Config>;
};
export type StyleTableCallback = (worksheet: Worksheet) => void;
