import { CdsTooltip } from '../../CdsTooltip';
import { NTable } from '../interface';
import { ComponentProps } from '../../../utils';
import { PropType, Ref } from 'vue';
export interface ITableProps<RecordType = NTable.TDefaultRecord> {
    id?: string;
    data?: RecordType[];
    columns?: NTable.NColumn.TColumns<RecordType>;
    rowKey?: string | NTable.NRow.TGetRowKey<RecordType>;
    rowClassName?: string | NTable.NRow.TClassName<RecordType>;
    tableLayout?: NTable.TLayout;
    showHeader?: boolean;
    sticky?: boolean | NTable.NSticky.ISticky;
    loading?: boolean;
    hovered?: boolean;
    bordered?: boolean;
    borderless?: boolean;
    header?: NTable.NRender.TPanelRender<RecordType>;
    footer?: NTable.NRender.TPanelRender<RecordType>;
    components?: NTable.NCustomize.TableComponents<RecordType>;
    customRow?: NTable.NCustomize.TGetComponentProps<RecordType>;
    customHeaderRow?: NTable.NCustomize.TGetComponentProps<NTable.NColumn.IColumn<RecordType>[]>;
    pagination?: false | NTable.NPagination.IProps;
    scroll?: NTable.TScroll;
    sortDirections?: NTable.TSortOrder[];
    showSorterTooltip?: boolean | ComponentProps<typeof CdsTooltip>;
    expandFixed?: NTable.TFixed;
    expandColumnWidth?: number;
    expandedRowKeys?: NTable.TKey[];
    expandIconColumnIndex?: number;
    rowSelection?: NTable.NRow.IRowSelection<RecordType>;
    defaultExpandedRowKeys?: NTable.TKey[];
    defaultExpandAllRows?: boolean;
    canExpandable?: boolean;
    expandedRowRender?: NTable.NExpand.TExpandedRowRender<RecordType>;
    expandRowByClick?: boolean;
    expandIcon?: NTable.NExpand.TRenderExpandIcon<RecordType>;
    indentSize: number;
    showExpandColumn?: boolean;
    expandedRowClassName?: NTable.NRow.TClassName<RecordType>;
    childrenColumnName?: string;
    rowExpandable?: NTable.NExpand.IExpandable['rowExpandable'];
    transformCellText?: NTable.NCell.TTransformCellText<RecordType>;
    getPopupContainer?: NTable.NCustomize.TGetPopupContainer;
    onChange?: (pagination: NTable.NPagination.IProps, filters: Record<string, NTable.TFilterValue | null>, sorter: NTable.ISorterResult | NTable.ISorterResult[], extra: NTable.ICurrentData) => void;
    onExpand?: (expanded: boolean, record: RecordType) => void;
    onExpandedRowsChange?: (expandedKeys: NTable.TKey[]) => void;
    onResizeColumn?: (width: number, column: NTable.NColumn.IColumn<RecordType>) => void;
    /**
     * @private Internal usage, may remove by refactor. Should always use `columns` instead.
     *
     * !!! DO NOT USE IN PRODUCTION ENVIRONMENT !!!
     */
    internalHooks?: string;
    /**
     * @private Internal usage, may remove by refactor. Should always use `columns` instead.
     *
     * !!! DO NOT USE IN PRODUCTION ENVIRONMENT !!!
     */
    transformColumns?: (columns: NTable.NColumn.TColumns<RecordType>) => NTable.NColumn.TColumns<RecordType>;
    /**
     * @private Internal usage, may remove by refactor.
     *
     * !!! DO NOT USE IN PRODUCTION ENVIRONMENT !!!
     */
    internalRefs?: {
        body: HTMLDivElement | null;
    };
    /**
     * @private Internal usage, may remove by refactor.
     *
     * !!! DO NOT USE IN PRODUCTION ENVIRONMENT !!!
     */
    onUpdateInternalRefs?: (refs: Record<string, any>) => void;
}
export declare const makeTableProps: <Defaults extends {
    id?: unknown;
    data?: unknown;
    columns?: unknown;
    rowKey?: unknown;
    rowClassName?: unknown;
    tableLayout?: unknown;
    showHeader?: unknown;
    sticky?: unknown;
    loading?: unknown;
    hovered?: unknown;
    bordered?: unknown;
    borderless?: unknown;
    header?: unknown;
    toolbar?: unknown;
    footer?: unknown;
    components?: unknown;
    customRow?: unknown;
    customHeaderRow?: unknown;
    pagination?: unknown;
    scroll?: unknown;
    sortDirection?: unknown;
    showSorterTooltip?: unknown;
    expandFixed?: unknown;
    expandColumnWidth?: unknown;
    expandedRowKeys?: unknown;
    rowSelection?: unknown;
    defaultExpandedRowKeys?: unknown;
    defaultExpandAllRows?: unknown;
    canExpandable?: unknown;
    expandedRowRender?: unknown;
    expandRowByClick?: unknown;
    expandIconColumnIndex?: unknown;
    expandIcon?: unknown;
    indentSize?: unknown;
    showExpandColumn?: unknown;
    expandedRowClassName?: unknown;
    childrenColumnName?: unknown;
    rowExpandable?: unknown;
    transformCellText?: unknown;
    getPopupContainer?: unknown;
    onChange?: unknown;
    onResizeColumn?: unknown;
    onExpand?: unknown;
    onExpandedRowsChange?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../../../utils').AppendDefault<{
    /**
     * Идентификатор таблицы
     */
    id: {
        type: PropType<string>;
        default: undefined;
    };
    /**
     * Массив данных для отображения в таблице
     */
    data: {
        type: PropType<NTable.TDefaultRecord[]>;
        default: undefined;
    };
    /**
     * Колонки таблицы
     */
    columns: {
        type: PropType<NTable.NColumn.TColumns<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Уникальный ключ строки может быть строкой или функцией возвращающей строку
     */
    rowKey: {
        type: PropType<string | NTable.NRow.TGetRowKey<NTable.TDefaultRecord>>;
        default: string;
    };
    /**
     * Классы строки
     */
    rowClassName: {
        type: PropType<string | NTable.NRow.TClassName<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Фиксированный или авто лэйаут
     */
    tableLayout: {
        type: PropType<NTable.TLayout>;
        default: undefined;
    };
    /**
     * Показывать ли заголовок таблицы
     */
    showHeader: {
        type: PropType<boolean>;
        default: undefined;
    };
    /**
     * Sticky для заголовка и скроллбара
     */
    sticky: {
        type: PropType<boolean | NTable.NSticky.ISticky>;
        default: undefined;
    };
    /**
     * Загрузка таблицы
     */
    loading: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Подсвечивание строки при наведении
     */
    hovered: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Показывать все границы таблицы
     */
    bordered: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Убрать все границы таблицы
     */
    borderless: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Рендер заголовка таблицы
     */
    header: {
        type: PropType<NTable.NRender.TPanelRender<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Рендер тулбара таблицы
     */
    toolbar: {
        type: PropType<NTable.NRender.TPanelRender<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Рендер футера таблицы
     */
    footer: {
        type: PropType<NTable.NRender.TPanelRender<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Переопределить компоненты таблицы по умолчанию
     */
    components: {
        type: PropType<NTable.NCustomize.TableComponents<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Устанавливает свойства для каждой строки
     */
    customRow: {
        type: PropType<NTable.NCustomize.TGetComponentProps<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Устанавливает свойства для каждой строки заголовка
     */
    customHeaderRow: {
        type: PropType<NTable.NCustomize.TGetComponentProps<NTable.NColumn.IColumn<NTable.TDefaultRecord>[]>>;
        default: undefined;
    };
    /**
     * Конфигурация пагинации таблицы
     */
    pagination: {
        type: PropType<false | NTable.NPagination.IProps>;
        default: undefined;
    };
    /**
     * Можно ли скроллить таблицу
     */
    scroll: {
        type: PropType<NTable.TScroll & {
            scrollToFirstRowOnChange?: boolean;
        }>;
        default: undefined;
    };
    /**
     * Сортировка данных в таблице. 'ascend' | 'descend'
     */
    sortDirection: {
        type: PropType<NTable.TSortOrder[]>;
        default: undefined;
    };
    /**
     * Показывать ли тултипы для сортировки в заголовке. Можно передать объект со свойствами для CdsTooltip.
     */
    showSorterTooltip: {
        type: PropType<boolean | ComponentProps<typeof CdsTooltip>>;
        default: boolean;
    };
    /**
     * Сделать колонку с раскрытием фиксированной (left | right | boolean)
     */
    expandFixed: {
        type: PropType<NTable.TFixed>;
        default: undefined;
    };
    /**
     * Ширина колонки с раскрытием
     */
    expandColumnWidth: {
        type: PropType<number>;
        default: undefined;
    };
    /**
     * Ключи текущих раскрытых строк (поддерживает v-model)
     */
    expandedRowKeys: {
        type: PropType<NTable.TKey[]>;
        default: ITableProps["expandedRowKeys"];
    };
    /**
     * Конфигурация для выбора строк
     */
    rowSelection: {
        type: PropType<NTable.NRow.IRowSelection<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Ключи раскрытых строк по умолчанию
     */
    defaultExpandedRowKeys: {
        type: PropType<NTable.TKey[]>;
        default: ITableProps["defaultExpandedRowKeys"];
    };
    /**
     * По умолчанию все колонки раскрыты
     */
    defaultExpandAllRows: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Может раскрываться
     */
    canExpandable: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Рендер для каждой раскрытой строки
     */
    expandedRowRender: {
        type: PropType<NTable.NExpand.TExpandedRowRender<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Раскрытие строки по клику в любое место этой строки
     */
    expandRowByClick: {
        type: PropType<boolean>;
        default: boolean;
    };
    /**
     * Индекс колонки, в которой будет располагаться иконка раскрытия
     */
    expandIconColumnIndex: {
        type: PropType<number>;
        default: undefined;
    };
    /**
     * Своя иконка раскрытия
     */
    expandIcon: {
        type: PropType<NTable.NExpand.TRenderExpandIcon<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Размер отступа в пикселях для каждого уровня вложенности
     */
    indentSize: {
        type: PropType<number>;
        default: number;
    };
    /**
     * Показать раскрытую колонку
     */
    showExpandColumn: {
        type: PropType<boolean>;
        default: undefined;
    };
    /**
     * Классы для строк в раскрытом состоянии
     */
    expandedRowClassName: {
        type: PropType<NTable.NRow.TClassName<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Названия свойства для дочерних элементов
     */
    childrenColumnName: {
        type: PropType<string>;
        default: string;
    };
    /**
     * Строку можно раскрыть
     */
    rowExpandable: {
        type: PropType<NTable.NExpand.IExpandable["rowExpandable"]>;
        default: undefined;
    };
    /**
     * Трансформировать текст в ячейке
     */
    transformCellText: {
        type: PropType<NTable.NCell.TTransformCellText<NTable.TDefaultRecord>>;
        default: undefined;
    };
    /**
     * Контейнер рендеринга выпадающих списков
     */
    getPopupContainer: {
        type: PropType<NTable.NCustomize.TGetPopupContainer>;
        default: undefined;
    };
    /**
     * Событие при изменении пагинации, фильтров, сортировки
     */
    onChange: {
        type: PropType<(pagination: NTable.NPagination.IProps, filters: Record<string, NTable.TFilterValue | null>, sorters: NTable.ISorterResult | NTable.ISorterResult[], extra: NTable.ICurrentData) => void>;
        default: undefined;
    };
    /**
     * Событие изменения размера колонки
     */
    onResizeColumn: {
        type: PropType<(width: number, column: NTable.NColumn.IColumn) => void>;
        default: undefined;
    };
    /**
     * Событие при раскрытии строки
     */
    onExpand: {
        type: PropType<(expanded: boolean, record: NTable.TDefaultRecord) => void>;
        default: undefined;
    };
    /**
     * Событие при изменении раскрытых строк
     */
    onExpandedRowsChange: {
        type: PropType<(expandedKeys: NTable.TKey[]) => void>;
        default: undefined;
    };
}, Defaults>;
export declare function useLazyKVMap<RecordType>(dataRef: Ref<readonly RecordType[]>, childrenColumnNameRef: Ref<string>, getRowKeyRef: Ref<NTable.NRow.TGetRowKey<RecordType>>): {
    getRecordByKey: (key: NTable.TKey) => NonNullable<RecordType>;
};
