import { default as React } from 'react';
export type TableColumnDetails = {
    /**
     * Defined the current width of a column.
     *
     * @default 0
     */
    width?: number;
    /**
     * Defined the default width of a column which will be used when resetting to default.
     *
     * @default 0
     */
    defaultWidth?: number;
    /**
     * Defined the maximum width of a column.
     *
     * @default 1000
     */
    maxWidth?: number;
};
export type TableColumnsSettings = {
    columnOrder: string[];
    hiddenColumns: string[];
    columnsDetails: TableColumnDetailsMap;
};
export type TableColumnDetailsMap = Record<string, TableColumnDetails>;
export type ColumnLabelStrings = Record<string, string>;
export type TableSettingsItemProps = {
    columnLabels?: Record<string, React.ReactNode>;
    autoLabel?: string | React.ReactNode;
    disabledColumns?: string[];
    columnOrder: string[];
    hiddenColumns?: string[];
    columnSearchValue: string;
    columnsDetails: TableColumnDetailsMap;
    columnLabelStrings?: ColumnLabelStrings;
    openColumnsDetails?: Record<string, string>;
    onColumnWidthChange?: (column: keyof TableColumnDetailsMap, value: number) => void;
    onResetColumnWidth?: (column: keyof TableColumnDetailsMap) => void;
    onMoveColumn?: (columnName: string, newIndex: number, changeMovedColumn: boolean) => void;
    onOpenDetails?: (columnName: keyof TableColumnDetailsMap) => void;
    onToggleHideColumn?: (column: string) => void;
};
export type TableSettingsDialogProps = {
    /**
     * Defined whether to show the dialog or not.
     *
     * @default false
     */
    show: boolean;
    /**
     * The title for the dialog header.
     */
    title: React.ReactNode;
    /**
     * The subtitle for the dialog header.
     */
    subtitle?: React.ReactNode;
    /**
     * List of column names in default order. This will be used for resetting changes.
     *
     * @default []
     */
    defaultColumnOrder: string[];
    /**
     * List of hidden columns that are hidden by default. This will be used for resetting changes.
     *
     * @default []
     */
    defaultHiddenColumns?: string[];
    /**
     * Initial default configuration for the each columns with regards to column width.
     * Used to reset to this state when the configuration differs.
     *
     * @default {}
     */
    defaultColumnDetails?: TableColumnDetailsMap;
    /**
     * List of column names in current order. The "columnOrder" will be returned when the order changes.
     *
     * @default []
     */
    columnOrder: string[];
    /**
     * List of column names which are currently hidden. The "hiddenColumns
     * will be returned when the order changes.
     *
     * @default []
     */
    hiddenColumns?: string[];
    /**
     * List of column labels which will be shown in the table header. These labels are usually
     * translated labels that can be set as FormattedMessage components for instance.
     *
     * The object key is the column name and the object value is the translated message.
     *
     * @default {}
     * @example
     * { name: <FormattedMessage id='name' /> }
     */
    columnLabels: {
        [name: string]: React.ReactNode;
    };
    /**
     * Hide a sorted column will result in an error, so disable at least one important fallback column
     * or the sorted column (fallback column recommended)
     */
    disabledColumns: string[];
    /**
     * Optional object of detail properties to be shown in the details section of the respective
     * column item. If the prop is not given, the width sections won't be rendered.
     * The keys of this object are the column names / keys you use to identify a column.
     */
    columnsDetails?: TableColumnDetailsMap;
    /**
     * The label shown when the column width is unset, which means "auto".
     *
     * @default ''
     */
    autoLabel?: string | React.ReactNode;
    /**
     * Text for the "apply" button. This button will not be shown when
     * `immediateChange` is enabled.
     */
    applyButtonText?: string | React.ReactNode;
    /**
     * Text for the "cancel" button. This button will not be shown when
     * `immediateChange` is enabled.
     */
    cancelButtonText?: string | React.ReactNode;
    /**
     * Text for the "close" button. This button will only be shown when
     * `immediateChange` is enabled.
     */
    closeButtonText?: string | React.ReactNode;
    /**
     * Text for the "reset to default" button.
     */
    resetButtonText: string | React.ReactNode;
    /**
     * Callback function for when the column order or visibility changes.
     *
     * @param columnOrder
     * @param hiddenColumns
     * @param columnsDetails
     * @returns
     */
    onColumnChange?: (columnOrder: string[], hiddenColumns: string[], columnsDetails?: TableColumnDetailsMap) => void;
    /**
     * Callback function for when a single column details like width changes.
     *
     * @param column
     * @param columnsDetails
     * @returns
     */
    onColumnDetailsChange?: (column: string, columnsDetails: TableColumnDetails) => void;
    /**
     * Callback function for when the changes are discarded and the dialog should close.
     * Will not be triggered when `immediateChange` is enabled.
     *
     * @returns
     */
    onDiscard?: () => void;
    /**
     * Callback function for when the final changes should be applied and the dialog should close.
     * Will not be triggered when `immediateChange `is enabled.
     *
     * @param columnOrder
     * @param hiddenColumns
     * @param columnsDetails
     * @returns
     */
    onApply?: (columnOrder: string[], hiddenColumns: string[], columnsDetails: TableColumnDetailsMap) => void;
    /**
     * Callback function for when dialog should close.
     *
     * @returns
     */
    onHide: () => void;
    /**
     * Search value which should be set for the search field when the dialog opens.
     */
    columnSearchValue?: string;
    /**
     * Callback function for when the search value changes.
     *
     * @param value
     * @returns
     */
    onSearchChange?: (value: string) => void;
    /**
     * Placeholder text for the search input.
     */
    searchPlaceholder: React.ReactNode;
    /**
     * Message that should be shown when column search result is empty.
     */
    notFoundMessage?: string;
    /**
     * Defines whether or not all changes apply immediately. If so, no cancel and apply buttons are shown.
     * Enable this if you want to update the table after each change. Be aware of having side effects when
     * toggling columns where data need to be fetched from the backend.
     *
     * @default false
     */
    immediateChange?: boolean;
    /**
     * Optional class names for the wrapper element.
     */
    className?: string;
};
declare const TableSettingsDialog: (props: TableSettingsDialogProps) => import("react/jsx-runtime").JSX.Element | null;
export default TableSettingsDialog;
