
import { IgcGridBaseDirective } from './igc-grid-base-directive';
import { IgcForOfState } from './igc-for-of-state';
import { IgcGroupingExpression } from './igc-grouping-expression';
import { IgcGroupByExpandState } from './igc-group-by-expand-state';
import { IgcGroupingDoneEventArgs } from './igc-grouping-done-event-args';
import { IgcRenderFunction } from './common';
import { IgcGridMasterDetailContext } from './igc-grid-master-detail-context';
import { IgcGroupByRecord } from './igc-group-by-record';
import { IgcGridGroupingStrategy } from './igc-grid-grouping-strategy';
import { IgcGroupByRowSelectorTemplateContext } from './igc-group-by-row-selector-template-context';
import { IgcGroupByRowTemplateContext } from './igc-group-by-row-template-context';
import { IgcCellType } from './igc-cell-type';
import { IgcRowType } from './igc-row-type';
import { EventEmitterMixin, LitElement, Constructor, AbstractConstructor } from './common';
import { IgcGridBaseDirectiveEventMap } from './igc-grid-base-directive';


/* wcSkipComponentSuffix */


/* wcAlternateName: GridBase */
/* blazorIndirectRender
   blazorComponent
   omitModule
   wcSkipComponentSuffix */
/**
 * Grid provides a way to present and manipulate tabular data.
 */

    export declare class IgcGridBaseComponent extends EventEmitterMixin<IgcGridBaseComponentEventMap, AbstractConstructor<IgcGridBaseDirective>>(IgcGridBaseDirective)

    {

          

    /**
     * Gets/Sets whether created groups are rendered expanded or collapsed.
     */
    public set groupsExpanded(value: boolean);
          public get groupsExpanded(): boolean;
  
          

    /**
     * Gets/Sets the template that will be rendered as a GroupBy drop area.
     */
    public set dropAreaTemplate(value: IgcRenderFunction<void>);
          public get dropAreaTemplate(): IgcRenderFunction<void>;
  
          


    /**
     * Returns a reference to the master-detail template.
     */
    public set detailTemplate(value: IgcRenderFunction<IgcGridMasterDetailContext>);
          public get detailTemplate(): IgcRenderFunction<IgcGridMasterDetailContext>;
  
          

    /**
     * Gets/Sets the value of the `id` attribute.
     */
    public set id(value: string);
          public get id(): string;
  
                
    /**
     * Gets the hierarchical representation of the group by records.
     */
    public get groupsRecords(): IgcGroupByRecord[];
        
          

    /**
     * Gets/Sets the array of data that populates the component.
     */
    /* treatAsRef */
    public set data(value: any[]);
          public get data(): any[];
  
          

    /**
     * Gets/Sets the total number of records in the data source.
     */
    public set totalItemCount(value: number);
          public get totalItemCount(): number;
  
          

    /* mustSetInCodePlatforms: WebComponents;Blazor;React */
    /**
     * Gets/Sets the group by state.
     */
    public set groupingExpressions(value: IgcGroupingExpression[]);
          public get groupingExpressions(): IgcGroupingExpression[];
  
          

    /**
     * Gets/Sets a list of expansion states for group rows.
     */
    public set groupingExpansionState(value: IgcGroupByExpandState[]);
          public get groupingExpansionState(): IgcGroupByExpandState[];
  
          

    /**
     * Gets/Sets whether the grouped columns should be hidden.
     */
    public set hideGroupedColumns(value: boolean);
          public get hideGroupedColumns(): boolean;
  
          

    /**
     * Gets/Sets the grouping strategy of the grid.
     */
    public set groupStrategy(value: IgcGridGroupingStrategy);
          public get groupStrategy(): IgcGridGroupingStrategy;
  
          

    /**
     * Gets/Sets the message displayed inside the GroupBy drop area where columns can be dragged on.
     */
    public set dropAreaMessage(value: string);
          public get dropAreaMessage(): string;
  
          

    /**
     * Gets the group by row selector template.
     */
    public set groupByRowSelectorTemplate(value: IgcRenderFunction<IgcGroupByRowSelectorTemplateContext>);
          public get groupByRowSelectorTemplate(): IgcRenderFunction<IgcGroupByRowSelectorTemplateContext>;
  
          

    /**
     * Gets/Sets the template reference for the group row.
     */
    public set groupRowTemplate(value: IgcRenderFunction<IgcGroupByRowTemplateContext>);
          public get groupRowTemplate(): IgcRenderFunction<IgcGroupByRowTemplateContext>;
  
          

    /**
     * Returns whether the grid has group area.
     */
    public set showGroupArea(value: boolean);
          public get showGroupArea(): boolean;
  
                

    /**
     * Returns an array of the selected grid cells.
     */
    public get selectedCells(): IgcCellType[];
        
            

    /**
     * Groups by a new column based on the provided expression, or modifies an existing one.
     */
    public groupBy(expression: IgcGroupingExpression[]): void;

            

    /**
     * Clears grouping for particular column, array of columns or all columns.
     * @param name Name of column or array of column names to be ungrouped.
     */
    public clearGrouping(name?: string): void;

            

    /**
     * Returns if a group is expanded or not.
     * @param group The group record.
     */
    public isExpandedGroup(group: IgcGroupByRecord): boolean;

            

    /**
     * Toggles the expansion state of a group.
     * @param groupRow The group record to toggle.
     */
    public toggleGroup(groupRow: IgcGroupByRecord): void;

            

    /**
     * Select all rows within a group.
     * @param groupRow: The group record which rows would be selected.
     * @param clearCurrentSelection if true clears the current selection
     */
    public selectRowsInGroup(groupRow: IgcGroupByRecord, clearPrevSelection?: boolean): void;

            

    /**
     * Deselect all rows within a group.
     * @param groupRow The group record which rows would be deselected.
     */
    public deselectRowsInGroup(groupRow: IgcGroupByRecord): void;

            

    /**
     * Expands the specified group and all of its parent groups.
     * @param groupRow The group record to fully expand.
     */
    public fullyExpandGroup(groupRow: IgcGroupByRecord): void;

            

    /**
     * Toggles the expansion state of all group rows recursively.
     */
    public toggleAllGroupRows(): void;

            

    /**
     * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.
     */
    public getSelectedData(formatters?: boolean, headers?: boolean): any[];

            

    /**
     * Returns the grid row by index.
     * @param index
     */
    public getRowByIndex(index: number): IgcRowType;

            

    /**
     * Returns grid row object by the specified primary key.
     * @param keyValue
     */
    public getRowByKey(key: any): IgcRowType;

            

    /**
     * Returns a `CellType` object that matches the conditions.
     * @param rowIndex
     * @param columnField
     */
    public getCellByColumn(rowIndex: number, columnField: string): IgcCellType;

            

    /**
     * Returns a `CellType` object that matches the conditions.
     * @param rowSelector match any rowID
     * @param columnField
     */
    public getCellByKey(rowSelector: any, columnField: string): IgcCellType;

            

    public pinRow(rowID: any, index?: number): boolean;

            

    public unpinRow(rowID: any): boolean;

    }

export declare interface IgcGridBaseComponentEventMap extends IgcGridBaseDirectiveEventMap {
            
        		    /**
		     * Emitted when a new chunk of data is loaded from virtualization.
		     */
dataPreLoad: CustomEvent<IgcForOfState>;

        		    /**
		     * Emitted when grouping is performed.
		     */
groupingExpressionsChange: CustomEvent<IgcGroupingExpression[]>;

        		    /**
		     * Emitted when groups are expanded/collapsed.
		     */
groupingExpansionStateChange: CustomEvent<IgcGroupByExpandState[]>;

        		    /**
		     * Emitted when columns are grouped/ungrouped.
		     */
groupingDone: CustomEvent<IgcGroupingDoneEventArgs>;

}
        