import type { SAPUI5_FRAGMENT_CLASS } from '../../common/webapp/manifest/sapUi5';
import type { ToolBar } from './ToolBar';
import type { Action } from './Action';
import type { PopinLayout } from 'sap/m/library';
import type { smarttable } from 'sap/ui/comp/library';
import type { TextAlign } from 'sap/ui/core/library';
/**
 * Column
 *
 * @isViewNode true
 */
export interface TableColumn {
    /**
     * Defines the width of the column.
     */
    width?: string;
    /**
     * Defines the horizontal alignment of the column content.
     */
    hAlign?: TextAlign;
}
/**
 * Column Action
 *
 * @isViewNode true
 */
export interface TableColumnAction extends Action, TableColumn {
}
/**
 * Custom Column
 *
 * @isViewNode true
 */
export interface TableCustomColumn {
    /**
     * If the fragment needs to be reused for multiple tabs, the id property must be set to make the IDs unique.
     *
     * @artifactType XMLProperty
     */
    id?: string;
    /**
     * The label of the custom column, preferably as an i18n key.
     *
     * @i18nClassification COL: Custom column header text
     * @artifactType XMLProperty
     */
    text?: string;
    /**
     * The column key.
     *
     * @artifactType XMLProperty
     */
    columnKey: string;
    /**
     * The index of the column in the overall collection; if undefined, the custom column will be added at the end of the table.
     *
     * @minimum 0
     * @hidden true
     * @artifactType XMLProperty
     */
    columnIndex?: number;
    /**
     * If the content of your custom column refers to a property (such as{Price}), you need to include a corresponding 'leadingProperty' entry in the column definition.
     *
     * @artifactType XMLProperty
     */
    leadingProperty?: string;
    /**
     * The UI5 control used for your extension.
     *
     * @artifactType Manifest
     */
    className: typeof SAPUI5_FRAGMENT_CLASS;
    /**
     * The relative path to your fragment with path segments separated by '.'. The first element is the app ID.
     *
     * @artifactType Manifest
     */
    fragmentName: string;
    /**
     * In case of a responsive table, you additionally need to specify a fragment for the table cells.
     *
     * @artifactType Manifest
     */
    cellsFragmentName?: string;
    /**
     * If you use QuickVariantSelectionX, you need to define the extensions per tab. 'tabKey' is the key provided when defining the QuickVariantSelectionX.
     *
     * @hidden true
     * @artifactType Manifest
     */
    tabKey?: string;
    /**
     * Type of custom column view extension.
     *
     * @artifactType Manifest
     */
    extensionType: TableColumnExtensionTypeV2;
}
export declare enum customColumnViewTypes {
    XML = "XML"
}
export declare enum TableTypeV2 {
    ResponsiveTable = "ResponsiveTable",
    GridTable = "GridTable",
    AnalyticalTable = "AnalyticalTable",
    TreeTable = "TreeTable"
}
export declare enum TableColumnExtensionTypeV2 {
    ResponsiveTableColumnsExtension = "ResponsiveTableColumnsExtension",
    AnalyticalTableColumnsExtension = "AnalyticalTableColumnsExtension",
    TreeTableColumnsExtension = "TreeTableColumnsExtension",
    GridTableColumnsExtension = "GridTableColumnsExtension"
}
export type AnyTableType = TableTypeV2.AnalyticalTable | TableTypeV2.ResponsiveTable | TableTypeV2.GridTable | TableTypeV2.TreeTable;
export type AnyTable = AnalyticalTable | ResponsiveTable | GridTable | TreeTable;
/**
 * Custom Columns
 *
 * @isViewNode true
 */
export type TableCustomColumns = Array<TableCustomColumn>;
export interface GenericColumns {
    [key: string]: TableColumn | TableCustomColumns | TableColumnAction;
}
export interface QuickVariant {
    /**
     * The key property is mandatory. It is used for initializing the corresponding SegmentedButton item.
     */
    key: string;
    /**
     * Use annotationPath to define a specific variant that points to a SelectionVariant or SelectionPresentationVariant annotation.
     */
    annotationPath: string;
}
export interface QuickVariantX extends QuickVariant {
    /**
     * Represents the entity set that is displayed in this variant.
     */
    entitySet: string;
    /**
     * Single selection in tables is enabled by default. If you want, you can enable multi-select.
     */
    multiSelect?: boolean;
    /**
     * The 'Select All' button is disabled by default. To enable it, set selectAll to true.
     */
    selectAll?: boolean;
    /**
     * When new data is loaded from the back-end system, the number of lines is restricted to the specified limit. The default value is 200.
     * If selectAll is true, the selection limit is not evaluated.
     */
    selectionLimit?: number;
    /**
     * Use type to define the table type. Note: Grid tables, analytical tables, and tree tables cannot be rendered on smartphones. Instead, responsive tables always show on smartphones.
     */
    type?: AnyTableType;
    /**
     * To enable navigation for charts, you have to set the property to "true" and maintain an internal navigation target in the manifest.
     */
    showItemNavigationOnChart?: boolean;
    /**
     *  Used to enable inline deletion in a responsive table of list report and object page
     */
    inlineDelete?: boolean;
}
export interface QuickVariantSelection {
    /**
     * To show the number of records available, set showCounts to true.
     */
    showCounts?: boolean;
    /**
     * The variants section contains a set of entries that point to a SelectionVariant or SelectionPresentationVariant annotation.
     */
    variants: {
        [key: string]: QuickVariant;
    };
}
export interface QuickVariantSelectionX extends QuickVariantSelection {
    /**
     * When set to true, this enables automatic binding of the table with either the tableBindingPath (if it exists) or the entitySet property.
     */
    enableAutoBinding?: boolean;
    /**
     * The variants section contains a set of entries that point to a SelectionVariant or SelectionPresentationVariant annotation.
     */
    variants: {
        [key: string]: QuickVariantX;
    };
}
export interface CreateWithFilters {
    /**
     * For the create action to use the filter settings as input, set this property to extension and implement the extension function as mentioned in help.sap.com for SAP S/4HANA, section "Prefilling Fields When Creating a New Entity Using an Extension Point".
     *
     * @descriptionSrcURL https://ui5.sap.com/sdk#/topic/189e2d8a59f04a2693a4fde7f4a91a65
     */
    strategy: Strategy;
}
export declare enum Strategy {
    extension = "extension"
}
export interface MultiEdit {
    /**
     * When multiEdit is enabled, by default the dialog displays editable fields corresponding to columns that are currently displayed in the table.
     */
    enabled?: boolean;
    /**
     * Use annotationPath to define a mass edit dialog that points to a FieldGroup annotation with a qualifier.
     */
    annotationPath?: string;
    /**
     * Determines which fields are hidden in key user adaptation and restricts them from being added to the Mass Edit dialog.
     */
    ignoredFields?: IgnoredFieldsType[];
}
export declare const enum IgnoredFieldsType {
    GENERICPROPERTY = "GENERICPROPERTY"
}
export declare enum DefaultContentView {
    charttable = "charttable",
    chart = "chart",
    table = "table"
}
export declare enum DefaultFilterMode {
    visual = "visual",
    compact = "compact"
}
export declare enum LoadDataOnAppLaunchSettings {
    always = "always",
    never = "never",
    ifAnyFilterExist = "ifAnyFilterExist"
}
export interface DataLoadSettings {
    /**
     * Changes the default behavior for autoloading data.
     * For multi-view scenarios, you can change the enableAutobinding property to False under quickVariantSelectionX instead.
     */
    loadDataOnAppLaunch: LoadDataOnAppLaunchSettings;
}
export interface Fields4Dialog {
    fields: string[];
}
export interface CommonTableSettings<COLS = GenericColumns> {
    /**
     * Enables the creation of objects that have a maximum of eight data fields through a dialog in the list report page.
     */
    createWithParameterDialog?: Fields4Dialog;
    /**
     * The Select All button is disabled by default. To enable it, set this property to true.
     */
    selectAll?: boolean;
    /**
     * When new data is loaded, the number of lines is restricted to the specified limit. The default value is 200.
     * If selectAll is true, the selection limit is not evaluated.
     */
    selectionLimit?: number;
    /**
     * The showTablePersonalisation attribute can be set to false to hide the table personalization button.
     */
    showTablePersonalisation?: boolean;
    /**
     * useExportToExcel must be set to true if you want to export data to a spreadsheet application, for example Microsoft Excel.
     */
    useExportToExcel?: boolean;
    /**
     * Specifies the type of export to be used in the SmartTable control. UI5Client is the default option.
     */
    exportType?: smarttable.ExportType;
    /**
     * With quickVariantSelection, you can switch to multiple views (single table mode).
     * Each view links to a variant you have added to your annotations.
     */
    quickVariantSelection?: QuickVariantSelection;
    /**
     * Switches to multiple views (multi-table mode), based on variants you have defined as annotations.
     */
    quickVariantSelectionX?: QuickVariantSelectionX;
    /**
     * Sets a condensed table layout for analytical tables, grid tables, and tree tables.
     */
    condensedTableLayout?: boolean;
    /**
     * If you have enabled harmonized variant management, by default, business users cannot set a filter in the table personalization settings.
     * To enable filtering for business users, you must set the enableTableFilterInPageVariant property to true.
     */
    enableTableFilterInPageVariant?: boolean;
    /**
     * Change the default behavior for autoloading of data.
     */
    dataLoadSettings?: DataLoadSettings;
    /**
     * Tool Bar
     */
    toolBar?: ToolBar;
    /**
     * Columns
     *
     * @isViewNode true
     */
    columns?: COLS;
}
export interface ResponsiveTableCommonSettings extends CommonTableSettings {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.ResponsiveTable;
    /**
     * Set this property to true if you want items to be selectable when they are clicked rather than after the selection control has been set.
     */
    includeItemInSelection?: boolean;
    /**
     * Defines the layout the table pop-in rows are rendered in.
     */
    popinLayout?: PopinLayout;
    /**
     * Adds a new create action that uses the filter settings as input.
     */
    createWithFilters?: CreateWithFilters;
    /**
     * Defines the number of items to be requested from the model for each grow. This property can only be used if the growing property is set to true.
     */
    growingThreshold?: number;
    /**
     * Allows you to edit multiple objects using a dialog.
     */
    multiEdit?: MultiEdit;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface ResponsiveTableWithMultiSelect extends ResponsiveTableCommonSettings {
    /**
     * Single selection in tables is enabled by default. If you want, you can enable multi-select.
     */
    multiSelect?: boolean;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface ResponsiveTableWithInlineDelete extends ResponsiveTableCommonSettings {
    /**
     *  Used to enable inline deletion in a responsive table.
     */
    inlineDelete?: boolean;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface ResponsiveTable extends ResponsiveTableCommonSettings, ResponsiveTableWithMultiSelect, ResponsiveTableWithInlineDelete {
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface TreeTable extends CommonTableSettings {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.TreeTable;
    /**
     * Single selection in tables is enabled by default. If you want, you can enable multi-select.
     */
    multiSelect?: boolean;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface AnalyticalTable extends CommonTableSettings {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.AnalyticalTable;
    /**
     * Represents the qualifier of an annotation. ALP looks for a SelectionPresentationVariant with this qualifier. If it's not found, it looks for a PresentationVariant with this qualifier instead.
     */
    qualifier?: string;
    /**
     * Determines the visualization of the content area.
     */
    defaultContentView?: DefaultContentView;
    /**
     * Determines the filter mode that is used.
     */
    defaultFilterMode?: DefaultFilterMode;
    /**
     * Lets you define a title for the content area.
     *
     * @i18nClassification TIT: Title for the content area
     */
    contentTitle?: string;
    /**
     * Determines if filter fields will be set as in parameter.
     */
    allFiltersAsInParameters?: boolean;
    /**
     * Adds a create action that uses the filter settings as input.
     */
    createWithFilters?: CreateWithFilters;
    /**
     * Single selection in tables is enabled by default. If you want, you can enable multi-select.
     */
    multiSelect?: boolean;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface TableALPCommonSettings extends CommonTableSettings {
    /**
     * Represents the qualifier of an annotation. ALP looks for SelectionPresentationVariant with this qualifier and if not found, it looks for PresentationVariant with this qualifier.
     */
    qualifier?: string;
    /**
     * Determines the visualization of content area.
     */
    defaultContentView?: DefaultContentView;
    /**
     * Determines the filter mode that is used.
     */
    defaultFilterMode?: DefaultFilterMode;
    /**
     * Lets you define a title for the content area.
     *
     * @i18nClassification TIT: Title for the content area
     */
    contentTitle?: string;
    /**
     * This property determines chart/table interaction.
     * When set to true, the chart acts as a filter for the table. When set to false', the matching table rows are highlighted but the table isn't filtered.
     */
    autoHide?: boolean;
    /**
     * Determines if filter fields will be set as in parameter.
     */
    allFiltersAsInParameters?: boolean;
    /**
     * Single selection in tables is enabled by default. If you want, you can enable multi-select.
     */
    multiSelect?: boolean;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface ALPResponsiveTable extends TableALPCommonSettings {
    /**
     * Use type to define the table type. Note: Grid tables, analytical tables, and tree tables cannot be rendered on smartphones. Instead, responsive tables always show on smartphones.
     */
    type?: TableTypeV2.ResponsiveTable;
    /**
     * Defines the number of items to be requested from the model for each grow. This property can only be used if the growing property is set to true.
     */
    growingThreshold?: number;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface ALPGridTable extends TableALPCommonSettings {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.GridTable;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface ALPAnalyticalTable extends TableALPCommonSettings {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.AnalyticalTable;
}
export interface TableALP extends ALPResponsiveTable, ALPGridTable, ALPAnalyticalTable {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.ResponsiveTable & TableTypeV2.GridTable & TableTypeV2.AnalyticalTable;
}
/**
 * Table
 *
 * @isViewNode true
 * @controlProperty type
 */
export interface GridTable extends CommonTableSettings {
    /**
     * Specifies the type of table.
     */
    type?: TableTypeV2.GridTable;
    /**
     * Adds a create action that uses the filter settings as input.
     */
    createWithFilters?: CreateWithFilters;
    /**
     * Single selection in tables is enabled by default. If you want, you can enable multi-select.
     */
    multiSelect?: boolean;
}
//# sourceMappingURL=Table.d.ts.map