import React from 'react';
declare const ALIGN_TO_JUSTIFY: {
    left: string;
    center: string;
    right: string;
};
export declare type SortDirection = 'asc' | 'desc' | 'none';
export declare type SortRule = {
    column: string | null;
    direction: SortDirection;
};
export declare type ListViewProps<T, C extends string> = {
    data: T[];
    sort?: SortRule[];
    onClickHeader?: (column: C, sortTemplate: (item: T) => SortableValue) => void;
    onClickRow?: (item: T) => void;
    keyTemplate?: (item: T) => C;
    showHeaders?: boolean;
    fixedWidth?: boolean;
    padOuterColumns?: boolean;
    scrollX?: boolean;
    rowHeight?: React.CSSProperties['minHeight'];
    headerHeight?: React.CSSProperties['minHeight'];
    fontSize?: React.CSSProperties['fontSize'];
    headerFontSize?: React.CSSProperties['fontSize'];
    children: JSX.Element | JSX.Element[];
};
/**
 * `T` is the data type of each Row,
 * `C` is the column id type (probably a union of string literals)
 */
export default function ListView<T = any, C extends string = string>(props: ListViewProps<T, C>): JSX.Element;
declare type ListViewColumnProps<T> = {
    id: string;
    title?: React.ReactNode;
    template?: (item: T) => React.ReactNode;
    valueTemplate?: (item: T) => SortableValue;
    onClick?: (item: T) => void;
    disabled?: (item: T) => boolean;
    isRowHeader?: boolean;
    width?: React.CSSProperties['width'];
    minWidth?: React.CSSProperties['minWidth'];
    align?: keyof typeof ALIGN_TO_JUSTIFY;
};
/**
 * `T` is the data type of each Row,
 */
export declare function ListViewColumn<T = any>(props: ListViewColumnProps<T>): JSX.Element;
export declare const ListViewColumnSpacer: React.FunctionComponent<{
    id?: string;
}>;
export declare const ListViewClickableLink: React.FunctionComponent<{
    onClick?: (evt: React.MouseEvent<HTMLSpanElement>) => void;
}>;
export declare type SortableValue = number | string | boolean | null | undefined;
export declare function getDefaultSortFunction<T>(sortTemplate: (item: T) => SortableValue, sortDirection: SortDirection, nullsLast?: boolean): (a: T, b: T) => number;
export declare function getNextSortDirection(sortDirection: SortDirection, reverse?: boolean): any;
export {};
