/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { GridApi, IRowNode, IServerSideDatasource, IServerSideGetRowsParams } from 'ag-grid-community';
import type { DataCubeGridState } from './DataCubeGridState.js';
import { DataCubeConfiguration, type DataCubeConfigurationColorKey } from '../../core/model/DataCubeConfiguration.js';
import { type DataCubeSnapshot } from '../../core/DataCubeSnapshot.js';
import type { DataCubeViewState } from '../DataCubeViewState.js';
import { DataCubeDimensionalMetadata, type DataCubeDimensionalTree } from './DataCubeGridDimensionalTree.js';
type DataCubeGridClientCellValue = string | number | boolean | Map<string, DataCubeDimensionalMetadata> | null | undefined;
type DataCubeGridClientRowData = {
    [key: string]: DataCubeGridClientCellValue;
};
export declare enum DataCubeGridClientExportFormat {
    CSV = "CSV",
    EXCEL = "EXCEL",
    PLAIN_TEXT = "PLAIN_TEXT",
    HTML = "HTML",
    PDF = "PDF"
}
export declare enum INTERNAL__GridClientUtilityCssClassName {
    ROOT = "data-cube-grid.ag-theme-quartz",
    HIGHLIGHT_ROW = "data-cube-grid__utility--highlight-row",
    SHOW_VERTICAL_GRID_LINES = "data-cube-grid__utility--show-vertical-grid-lines",
    SHOW_HORIZONTAL_GRID_LINES = "data-cube-grid__utility--show-horizontal-grid-lines",
    BLUR = "data-cube-grid__utility--blur",
    FONT_FAMILY_PREFIX = "data-cube-grid__utility--font-family-",
    FONT_SIZE_PREFIX = "data-cube-grid__utility--font-size-",
    FONT_BOLD = "data-cube-grid__utility--font-style-bold",
    FONT_ITALIC = "data-cube-grid__utility--font-style-italic",
    FONT_UNDERLINE_PREFIX = "data-cube-grid__utility--font-style-underline-",
    FONT_STRIKETHROUGH = "data-cube-grid__utility--font-style-strikethrough",
    FONT_CASE_PREFIX = "data-cube-grid__utility--font-style-case-",
    TEXT_ALIGN_PREFIX = "data-cube-grid__utility--text-align-",
    TEXT_COLOR_PREFIX = "data-cube-grid__utility--text-color-",
    BACKGROUND_COLOR_PREFIX = "data-cube-grid__utility--background-color-",
    PIVOT_COLUMN_GROUP = "data-cube-grid__utility--pivot-column-group",
    PIVOT_COLUMN_GROUP_PREFIX = "data-cube-grid__utility--pivot-column-group-"
}
export declare const generateFontFamilyUtilityClassName: (fontFamily: string) => string;
export declare const generateFontSizeUtilityClassName: (fontSize: number) => string;
export declare const generateFontUnderlineUtilityClassName: (variant: string | undefined) => string;
export declare const generateFontCaseUtilityClassName: (fontCase: string | undefined) => string;
export declare const generateTextAlignUtilityClassName: (alignment: string) => string;
export declare const generateTextColorUtilityClassName: (color: string, key: DataCubeConfigurationColorKey) => string;
export declare const generateBackgroundColorUtilityClassName: (color: string, key: DataCubeConfigurationColorKey) => string;
export declare const INTERNAL__GRID_CLIENT_DEFAULT_CACHE_BLOCK_SIZE = 500;
export declare const INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_PAGINATION = true;
export declare const INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_CACHING = false;
export declare const INTERNAL__GRID_CLIENT_MAX_CACHE_BLOCK_SIZE = 1000;
export declare const INTERNAL__GRID_CLIENT_PIVOT_COLUMN_GROUP_COLOR_ROTATION_SIZE = 5;
export declare const INTERNAL__GRID_CLIENT_SIDE_BAR_WIDTH = 200;
export declare const INTERNAL__GRID_CLIENT_COLUMN_MIN_WIDTH = 50;
export declare const INTERNAL__GRID_CLIENT_HEADER_HEIGHT = 24;
export declare const INTERNAL__GRID_CLIENT_ROW_HEIGHT = 20;
export declare const INTERNAL__GRID_CLIENT_TOOLTIP_SHOW_DELAY = 1500;
export declare const INTERNAL__GRID_CLIENT_AUTO_RESIZE_PADDING = 10;
export declare const INTERNAL__GRID_CLIENT_MISSING_VALUE = "__MISSING";
export declare const INTERNAL__GRID_CLIENT_TREE_COLUMN_ID = "ag-Grid-AutoColumn";
export declare const INTERNAL__GRID_CLIENT_ROOT_AGGREGATION_COLUMN_ID = "INTERNAL__rootAggregation";
export declare const INTERNAL__GRID_CLIENT_DATA_FETCH_MANUAL_TRIGGER_COLUMN_ID = "INTERNAL__dataFetchManualTrigger";
export declare const INTERNAL__GRID_CLIENT_ROW_GROUPING_COUNT_AGG_COLUMN_ID = "count";
export declare enum DataCubeGridClientPinnedAlignement {
    LEFT = "left",
    RIGHT = "right"
}
export declare enum DataCubeGridClientSortDirection {
    ASCENDING = "asc",
    DESCENDING = "desc"
}
export declare function getAllNodes<T>(client: GridApi<T>): IRowNode<T>[];
export declare function getDataForAllNodes<T>(client: GridApi<T>): T[];
/**
 * NOTE: this method does not work for server-side row model.
 * It only works when client-side filter is being applied
 */
export declare function getDataForAllFilteredNodes<T>(client: GridApi<T>): T[];
/**
 * This method computes the hash code for the parts of the snapshot that should trigger data fetching.
 * This is used to manually trigger server-side row model data source getRows() method.
 */
export declare function computeHashCodeForDataFetchManualTrigger(snapshot: DataCubeSnapshot, configuration: DataCubeConfiguration): string;
export declare function fetchDimensionalQueryRows(snapshot: DataCubeSnapshot, view: DataCubeViewState, previousTree?: DataCubeDimensionalTree): Promise<{
    rowData: DataCubeGridClientRowData[];
    columnDefs: ({
        colId: string;
        field: string;
        type?: string | string[];
        cellDataType: boolean | string;
        valueGetter?: string | import("ag-grid-community").ValueGetterFunc<any, any>;
        valueFormatter: string | ((params: import("ag-grid-community").ValueFormatterParams<any, any>) => any);
        refData?: {
            [key: string]: string;
        };
        keyCreator?: (params: import("ag-grid-community").KeyCreatorParams<any, any>) => string;
        equals?: (valueA: any, valueB: any) => boolean;
        tooltipField?: string;
        tooltipValueGetter: (params: import("ag-grid-community").ITooltipParams<any, any, any>) => string | any;
        checkboxSelection?: boolean | import("ag-grid-community").CheckboxSelectionCallback<any, any>;
        showDisabledCheckboxes?: boolean;
        icons?: {
            [key: string]: ((...args: any[]) => any) | string;
        };
        suppressNavigable?: boolean | import("ag-grid-community").SuppressNavigableCallback<any, any>;
        suppressKeyboardEvent?: (params: import("ag-grid-community").SuppressKeyboardEventParams<any, any>) => boolean;
        suppressPaste?: boolean | import("ag-grid-community").SuppressPasteCallback<any, any>;
        suppressFillHandle?: boolean;
        hide: boolean;
        initialHide?: boolean;
        lockVisible: boolean;
        lockPosition?: boolean | "left" | "right";
        suppressMovable?: boolean;
        useValueFormatterForExport?: boolean;
        editable?: boolean | import("ag-grid-community").EditableCallback<any, any>;
        valueSetter?: string | import("ag-grid-community").ValueSetterFunc<any, any>;
        valueParser?: string | import("ag-grid-community").ValueParserFunc<any, any>;
        cellEditor?: any;
        cellEditorParams?: any;
        cellEditorSelector?: import("ag-grid-community").CellEditorSelectorFunc<any, any>;
        singleClickEdit?: boolean;
        cellEditorPopup?: boolean;
        cellEditorPopupPosition?: "over" | "under";
        useValueParserForImport?: boolean;
        onCellValueChanged?: (event: import("ag-grid-community").NewValueParams<any, any>) => void;
        onCellClicked?: (event: import("ag-grid-community").CellClickedEvent<any, any>) => void;
        onCellDoubleClicked?: (event: import("ag-grid-community").CellDoubleClickedEvent<any, any>) => void;
        onCellContextMenu?: (event: import("ag-grid-community").CellContextMenuEvent<any, any>) => void;
        getQuickFilterText?: (params: import("ag-grid-community").GetQuickFilterTextParams<any, any>) => string;
        filterValueGetter?: string | import("ag-grid-community").ValueGetterFunc<any, any>;
        floatingFilter?: boolean;
        suppressFloatingFilterButton?: boolean;
        headerComponent?: any;
        headerComponentParams?: any;
        menuTabs: import("ag-grid-community").ColumnMenuTab[];
        columnChooserParams?: import("ag-grid-community").ColumnChooserParams;
        suppressHeaderMenuButton?: boolean;
        suppressHeaderFilterButton?: boolean;
        mainMenuItems?: (import("ag-grid-community").DefaultMenuItem | import("ag-grid-community").MenuItemDef<any, any>)[] | import("ag-grid-community").GetMainMenuItems<any, any>;
        contextMenuItems?: import("ag-grid-community").GetContextMenuItems<any, any> | (import("ag-grid-community").DefaultMenuItem | import("ag-grid-community").MenuItemDef<any, any>)[];
        headerCheckboxSelection?: boolean | import("ag-grid-community").HeaderCheckboxSelectionCallback<any, any>;
        headerCheckboxSelectionFilteredOnly?: boolean;
        headerCheckboxSelectionCurrentPageOnly?: boolean;
        chartDataType?: "category" | "series" | "time" | "excluded";
        pinned: boolean | "left" | "right" | DataCubeGridClientPinnedAlignement | null;
        initialPinned?: boolean | "left" | "right";
        lockPinned?: boolean;
        pivot?: boolean;
        initialPivot?: boolean;
        pivotIndex?: number | null;
        initialPivotIndex?: number;
        pivotComparator?: (valueA: string, valueB: string) => number;
        enablePivot?: boolean;
        cellStyle?: import("ag-grid-community").CellStyle | import("ag-grid-community").CellStyleFunc<any, any>;
        cellClass?: string | string[] | import("ag-grid-community").CellClassFunc<any, any>;
        cellClassRules: import("ag-grid-community").CellClassRules<any, any>;
        cellRenderer: any;
        cellRendererParams?: any;
        cellRendererSelector?: import("ag-grid-community").CellRendererSelectorFunc<any, any>;
        loadingCellRenderer?: any;
        loadingCellRendererParams?: any;
        loadingCellRendererSelector?: import("ag-grid-community").CellRendererSelectorFunc<any, any>;
        autoHeight?: boolean;
        wrapText?: boolean;
        enableCellChangeFlash?: boolean;
        rowDrag?: boolean | import("ag-grid-community").RowDragCallback<any, any>;
        rowDragText?: (params: import("ag-grid-community").IRowDragItem, dragItemCount: number) => string;
        dndSource?: boolean | import("ag-grid-community").DndSourceCallback<any, any>;
        dndSourceOnRowDrag?: (params: import("ag-grid-community").DndSourceOnRowDragParams<any>) => void;
        rowGroup?: boolean;
        initialRowGroup?: boolean;
        rowGroupIndex?: number | null;
        initialRowGroupIndex?: number;
        enableRowGroup?: boolean;
        enableValue?: boolean;
        aggFunc?: string | import("ag-grid-community").IAggFunc<any, any> | null;
        initialAggFunc?: string | import("ag-grid-community").IAggFunc<any, any>;
        defaultAggFunc?: string;
        allowedAggFuncs?: string[];
        showRowGroup?: string | boolean;
        sortable?: boolean;
        sort?: import("ag-grid-community").SortDirection;
        initialSort?: import("ag-grid-community").SortDirection;
        sortIndex?: number | null;
        initialSortIndex?: number;
        sortingOrder?: import("ag-grid-community").SortDirection[];
        comparator?: (valueA: any, valueB: any, nodeA: IRowNode<any>, nodeB: IRowNode<any>, isDescending: boolean) => number;
        unSortIcon?: boolean;
        colSpan?: (params: import("ag-grid-community").ColSpanParams<any, any>) => number;
        rowSpan?: (params: import("ag-grid-community").RowSpanParams<any, any>) => number;
        spanRows?: boolean | ((params: import("ag-grid-community").SpanRowsParams<any, any>) => boolean);
        width?: number;
        initialWidth?: number;
        minWidth?: number;
        maxWidth?: number;
        flex?: number;
        initialFlex?: number;
        resizable?: boolean;
        suppressSizeToFit?: boolean;
        suppressAutoSize?: boolean;
        pivotValueColumn?: import("ag-grid-community").Column | null;
        pivotTotalColumnIds?: string[];
        suppressSpanHeaderHeight: boolean;
        headerName: string;
        headerValueGetter?: string | import("ag-grid-community").HeaderValueGetterFunc<any, any>;
        headerTooltip: string;
        headerStyle?: import("ag-grid-community").HeaderStyle | import("ag-grid-community").HeaderStyleFunc<any, any>;
        headerClass: import("ag-grid-community").HeaderClass<any, any>;
        suppressHeaderKeyboardEvent?: (params: import("ag-grid-community").SuppressHeaderKeyboardEventParams<any, any>) => boolean;
        columnGroupShow?: import("ag-grid-community").ColumnGroupShowType;
        toolPanelClass?: import("ag-grid-community").ToolPanelClass<any, any>;
        suppressColumnsToolPanel?: boolean;
        suppressFiltersToolPanel?: boolean;
        tooltipComponent?: any;
        tooltipComponentParams?: any;
        pivotKeys?: string[];
        cellAriaRole?: string;
        context?: any;
        wrapHeaderText?: boolean;
        autoHeaderHeight?: boolean;
        suppressHeaderContextMenu?: boolean;
        filter?: any;
        filterParams?: any;
        floatingFilterComponent?: any;
        floatingFilterComponentParams?: any;
    } | {
        colId: string;
        headerName: string;
        field: string;
        hide: true;
        enableValue: false;
        allowedAggFuncs: never[];
        enablePivot: false;
        enableRowGroup: false;
        suppressColumnsToolPanel: true;
        rowGroup: true;
        rowGroupIndex: number;
    })[];
}>;
export type DataCubeGridClientDataFetchRequest = {
    startRow: number | undefined;
    endRow: number | undefined;
    rowGroupColumns: string[];
    groupKeys: (string | null | undefined)[];
    pivotColumns: string[];
    sortColumns: {
        name: string;
        direction: DataCubeGridClientSortDirection;
    }[];
};
export declare class DataCubeGridClientServerSideDataSource implements IServerSideDatasource {
    private readonly _view;
    private readonly _grid;
    rowCount: number | undefined;
    constructor(grid: DataCubeGridState, view: DataCubeViewState);
    fetchRows(params: IServerSideGetRowsParams<unknown, unknown>): Promise<void>;
    getRows(params: IServerSideGetRowsParams<unknown, unknown>): void;
}
export {};
//# sourceMappingURL=DataCubeGridClientEngine.d.ts.map