import { ColumnDef } from '@tanstack/react-table';
import { DatePickerProps, InputNumberProps, InputProps, SelectProps } from 'antd';
import { RangePickerProps } from 'antd/es/date-picker';
import { CSSProperties, ReactNode } from '../../../../node_modules/.pnpm/react@19.1.1/node_modules/react';
import { TTableCell } from './cell.types';
import { TTableFilterOption, TTableFilterType } from './filter.types';
import { TTableSortOrder } from './sort.types';
import { TTableItem } from './table.types';
export type TTableColumnSort = {
    enabled: boolean;
    default?: TTableSortOrder;
    id?: string;
};
export type TTableColumnFilterSelectProps = Omit<SelectProps, "value" | "onChange" | "options" | "className" | "style" | "styles">;
export type TTableColumnFilter = {
    type: "multiselect";
    options: TTableFilterOption[];
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: SelectProps["styles"];
    props?: Omit<SelectProps, "value" | "onChange" | "options" | "mode" | "className" | "style" | "styles">;
} | {
    type: "select";
    options: TTableFilterOption[];
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: SelectProps["styles"];
    props?: Omit<SelectProps, "value" | "onChange" | "options" | "className" | "style" | "styles">;
} | {
    type: "date";
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: DatePickerProps["styles"];
    props?: Omit<DatePickerProps, "value" | "onChange" | "open" | "onOpenChange" | "className" | "style" | "styles" | "format"> & {
        format: string;
    };
} | {
    type: "date-range";
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: DatePickerProps["styles"];
    props?: Omit<RangePickerProps, "value" | "onChange" | "open" | "onOpenChange" | "className" | "style" | "styles" | "format"> & {
        format: string;
    };
} | {
    type: "input";
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: CSSProperties;
    props?: Omit<InputProps, "value" | "onChange" | "className" | "style">;
} | {
    type: "input-number";
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: CSSProperties;
    props?: Omit<InputNumberProps, "value" | "onChange" | "className" | "style">;
} | {
    type: Exclude<TTableFilterType, "multiselect" | "select" | "custom" | "date" | "date-range" | "input" | "input-number">;
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: CSSProperties;
    props?: Record<string, unknown>;
} | {
    type: "custom";
    isMultiple?: false;
    render: (value: {
        value: string;
        label: string;
    }, onChange: (value: {
        value: string;
        label: string;
    }) => void, children: ReactNode) => ReactNode;
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: CSSProperties;
    props?: Record<string, unknown>;
} | {
    type: "custom";
    isMultiple: true;
    render: (value: {
        value: string;
        label: string;
    }[], onChange: (value: {
        value: string;
        label: string;
    }[]) => void, children: ReactNode) => ReactNode;
    id?: string;
    className?: string;
    style?: CSSProperties;
    styles?: CSSProperties;
    props?: Record<string, unknown>;
};
export type TTableColumnMapping = {
    value: string | number;
    label: string | number;
};
export type TTableColumn<TItem extends TTableItem> = {
    sort?: TTableColumnSort;
    filter?: TTableColumnFilter;
    dataType?: "string" | "number";
    definition: ColumnDef<TItem> & {
        id: string;
        cell: TTableCell<TItem>;
        headerTooltip?: {
            content: string;
        };
        mapping?: TTableColumnMapping[];
        headerRightBorder?: boolean;
    };
};
export type TTableColumnGroup<TItem extends TTableItem> = {
    header: string;
    headerTooltip?: {
        content: string;
    };
    columns: readonly TTableColumnOrGroup<TItem>[];
};
export type TTableColumnOrGroup<TItem extends TTableItem> = TTableColumn<TItem> | TTableColumnGroup<TItem>;
export declare const isColumnGroup: <TItem extends TTableItem>(col: TTableColumnOrGroup<TItem>) => col is TTableColumnGroup<TItem>;
export declare const flattenColumns: <TItem extends TTableItem>(cols: readonly TTableColumnOrGroup<TItem>[]) => TTableColumn<TItem>[];
//# sourceMappingURL=col.types.d.ts.map