import { WithNormalizedProps } from "../../global";
import { CheckboxEvent } from "../ebay-checkbox/component-browser";
export type TableSort = "asc" | "desc" | "none";
export interface TableHeader extends Omit<Marko.HTML.TH, `on${string}`> {
    "column-type"?: "normal" | "numeric" | "layout" | "icon-action";
    "row-header"?: boolean;
    name?: string;
    sort?: TableSort | boolean;
    href?: Marko.HTML.A["href"];
    renderBody: Marko.Body;
}
export interface TableCell extends Omit<Marko.HTML.TD & Marko.HTML.TH, `on${string}`> {
}
export interface TableRow extends Omit<Marko.HTML.TR, `on${string}`> {
    name?: string;
    selected?: boolean;
    cell?: Marko.AttrTag<TableCell>;
}
export interface TableInput extends Omit<Marko.HTML.Div, `on${string}`> {
    header: Marko.AttrTag<WithNormalizedProps<TableHeader>>;
    mode?: "none" | "selection";
    "body-state"?: "loading" | "none";
    "all-selected"?: Marko.HTMLAttributes["aria-checked"];
    row?: Marko.AttrTag<TableRow>;
    "frozen-header"?: boolean;
    density?: "compact" | "relaxed" | "none";
    "a11y-loading-text"?: string;
    "a11y-select-all-text"?: string;
    "a11y-select-row-text"?: string;
    "on-select"?: (event: {
        selected: Record<string, boolean>;
        allSelected?: Marko.HTMLAttributes["aria-checked"];
    }) => void;
    "on-sort"?: (event: {
        sorted: Record<string, TableSort>;
    }) => void;
}
export interface Input extends WithNormalizedProps<TableInput> {
}
interface State {
    selected: Record<string, boolean>;
    sorted: Record<string, TableSort | undefined>;
    allSelected: Marko.HTMLAttributes["aria-checked"];
}
export default class EbayTable extends Marko.Component<Input, State> {
    disabledItems: Set<HTMLElement>;
    tbody: HTMLElement;
    animationFrame: number;
    onCreate(): void;
    onMount(): void;
    onInput(input: Input): void;
    onUpdate(): void;
    onRender(): void;
    onDestroy(): void;
    getSelectedRowStateFromInput(input: Input): Record<string, boolean>;
    getSortedColStateFromInput(input: Input): Record<string, TableSort>;
    getAllSelectedState(input: Input): Marko.HTMLAttributes["aria-checked"];
    headerSelect(): void;
    rowSelect(name: string, { checked }: CheckboxEvent): void;
    setLoading(): void;
    sortColumn(name: string): void;
}
export {};
