import type { PopinLayout } from 'sap/m/library';
import type { AnalyticalConfiguration, AnnotationPathAsObject, EnableMassEdit, RowCountMode, TableSettings, TableTypeV4 } from '.';
import type { Placement, ObjectPageTableColumn as ObjectPageTableColumnIF, ObjectPageTableColumnAction, TableCustomColumn } from '../webapp/manifest/ManifestSettings';
import type { ObjectPageToolBar } from './ObjectPageToolBar';
export interface PositionOP {
    /**
     * The key of another column to be used as placement anchor.
     *
     * @artifactType Manifest
     */
    anchor?: string;
    /**
     * Define the placement, either before or after the anchor column.
     *
     * @artifactType Manifest
     */
    placement: Placement;
}
export interface TableCustomColumnOP extends TableCustomColumn {
    /**
     * Defines the position of the column relative to the anchor column.
     *
     * @artifactType Manifest
     */
    position?: PositionOP;
}
export type AnyObjectPageTableType = ObjectPageTable;
export interface ObjectPageAnalyticalConfiguration extends AnalyticalConfiguration {
}
/**
 * Table
 *
 * @isViewNode true
 */
export interface ObjectPageTable extends TableSettingsOP {
    /**
     * Defines the table type. Note: Grid tables, analytical tables, and tree tables aren't rendered on small-screen devices. Responsive tables are shown instead.
     */
    type?: TableTypeV4;
    /**
     * Defines how the table handles the visible rows. Does not apply to responsive tables. Allowed values are Auto and Fixed.
     *  - Fixed: The table always has as many rows as defined in the rowCount property.
     *  - Auto (default): The number of rows is changed by the table automatically. It will then adjust its row count to the space it is allowed to cover (limited by the surrounding container) but it cannot have less than defined in the rowCount property.
     *  - Interactive: The user can change the number of displayed rows by dragging a resize handle.
     */
    rowCountMode?: RowCountMode;
    /**
     * Number of rows to be displayed in the table.
     *
     * @minimum 0
     */
    rowCount?: number;
    /**
     * Defines the layout options of the table popins. A popin layout defined at the table level takes precedence over a popin layout defined at the application level.
     *
     * @descriptionSrcURL https://help.sap.com/docs/SAPUI5/b1cda5dc7a7644eb886bc6ac04c0b438/7f844f1021cd4791b8f7408eac7c1cec.html
     */
    popinLayout?: PopinLayout.Block | PopinLayout.GridSmall | PopinLayout.GridLarge;
    analyticalConfiguration?: ObjectPageAnalyticalConfiguration;
    /**
     * Enables full screen mode for this table. This adds a button to the table toolbar which opens the table in a full screen dialog.
     */
    enableFullScreen?: boolean;
    /**
     * In the Object Page tables, it is possible to add several items at a time by copying and pasting data from an excel file, if this property is set to true.
     */
    enablePaste?: boolean;
    /**
     * Tool Bar
     */
    toolBar?: ObjectPageToolBar;
    /**
     * Defines the page behavior when a new record is created.
     * Note: Not available for AnalyticalTable.
     */
    creationMode?: TableCreationModeOP;
}
/**
 * Table Section
 *
 * @isViewNode true
 */
export interface ObjectPageSectionTableV4 {
    table?: AnyObjectPageTableType;
}
export declare enum TableCreationModeType {
    NewPage = "NewPage",
    InlineCreationRows = "InlineCreationRows",
    Inline = "Inline",
    CreationDialog = "CreationDialog",
    External = "External"
}
/**
 * Creation mode configuration for Object Page tables.
 * Visibility of specific properties is controlled by decorators in the specification package based on table type and creation mode.
 */
export interface TableCreationModeOP {
    /**
     * Defines the creation mode to be used by the table.
     *
     * For tree tables, allowed values are 'NewPage', 'Inline', or 'CreationDialog'.
     * For responsive and grid tables, allowed values are 'NewPage', 'Inline', 'InlineCreationRows', 'External', or 'CreationDialog'.
     *
     * - NewPage: The created document is shown in a new page, depending on whether 'Sync', 'Async', or 'Deferred' is specified in the metadata.
     * - Inline: The creation is performed inline
     * - InlineCreationRows: The creation is performed inline with an empty row (not available for tree tables)
     * - External: The creation is performed in a different application which is specified using the `outbound` parameter (not available for tree tables)
     * - CreationDialog: The creation is performed in the table using a dialog which allows you to specify some initial property values which are listed in 'creationFields'.
     *
     * If the 'name' property is not set:
     * If 'navigation' is defined, the default value is 'NewPage'. Otherwise it is 'Inline'.
     */
    name?: TableCreationModeType;
    /**
     * Specifies if the new entry should be created at the top or bottom of a table when `creationMode` is set to `Inline`.
     * The default value is `false`.
     */
    createAtEnd?: boolean;
    /**
     * Specifies if the new entry should be hidden when `creationMode` is set to `InlineCreationRows`. This only applies to responsive tables.
     * The default value is `false`.
     */
    inlineCreationRowsHiddenInEditMode?: boolean;
    /**
     * Specifies if the new entry should be placed at the position computed by the backend (e.g. taking sorting into account).
     * The default value is `false`. When set to `false`, the new entry is placed as the first child below its parent.
     */
    createInPlace?: boolean;
    /**
     * Defines the extension point to control the enablement of the "Create" button or "Create Menu" buttons.
     */
    isCreateEnabled?: string;
    /**
     * Defines the list of properties that will be displayed in the creation dialog, when the creation mode is set to 'CreationDialog'.
     * The value is a comma-separated list of property names.
     */
    creationFields?: string[];
    /**
     * The navigation target where the document is created when `creationMode` is set to `External`.
     */
    outbound?: string;
}
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeOPTreeTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeNewPageOPTreeTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeInlineOPTreeTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeCreationDialogOPTreeTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeInlineOPTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeInlineCreationsRowsOPResponsiveTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeInlineCreationsRowsOPGridTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeNewPageOPTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeCreationDialogOPTable = TableCreationModeOP;
/**
 * @deprecated Use TableCreationModeOP instead
 */
export type TableCreationModeExternalOPTable = TableCreationModeOP;
/**
 * @deprecated Use ObjectPageTable instead
 */
export type ObjectPageGridTableV4 = ObjectPageTable;
/**
 * @deprecated Use ObjectPageTable instead
 */
export type ObjectPageAnalyticalTableV4 = ObjectPageTable;
/**
 * @deprecated Use ObjectPageTable instead
 */
export type ObjectPageTreeTableV4 = ObjectPageTable;
/**
 * @deprecated Use ObjectPageTable instead
 */
export type ObjectPageResponsiveTableV4 = ObjectPageTable;
export interface PersonalizationTypeOP {
    /**
     * Defines whether the user can add and remove columns to a given table.
     */
    column?: boolean;
    /**
     * Defines whether the user can sort a given table.
     */
    sort?: boolean;
    /**
     * Defines whether the user can filter data of a given table.
     */
    filter?: boolean;
}
export interface QuickVariantSelectionV4OP {
    /**
     * List of annotation paths referring to SelectionVariant annotations.
     */
    paths: AnnotationPathAsObject[];
    /**
     * You can hide the table and display only the titles of the tabs. To do so, add the hideTableTitle option and set it to true.
     */
    hideTableTitle?: boolean;
    /**
     * You can show the counts of entries of each view. To do so, add the showCounts option and set it to true.
     */
    showCounts?: boolean;
}
export interface GenericColumnsOP {
    [key: string]: ObjectPageTableColumnIF | ObjectPageTableColumnAction | TableCustomColumnOP;
}
export interface TableSettingsOP extends TableSettings {
    /**
     * Defines the personalization mode which is only effective if the variant management on the page is set to `Page` or `Control`.
     * By default all table settings are enabled. You can change this for the different parts of the table by setting the properties 'Column', 'Sort' and 'Filter' accordingly.
     * Omitting a property is treated as false, this allows apps to avoid getting new features like grouping in upcoming releases.
     */
    personalization?: PersonalizationTypeOP | boolean;
    /**
     * With quickVariantSelection, you can switch to multiple views (single table mode). It links to a SelectionVariant (filters) or SelectionPresentationVariant (filters and sorters) that you have added to your annotations.
     */
    quickVariantSelection?: QuickVariantSelectionV4OP;
    columns?: GenericColumnsOP;
    /**
     * Mass editing allows end users to simultaneously change multiple objects that share the same editable properties.
     */
    enableMassEdit?: EnableMassEdit;
}
//# sourceMappingURL=ObjectPageTable.d.ts.map