import { State, CompositeFilterDescriptor, SortDescriptor, GroupDescriptor } from '@progress/kendo-data-query';
import * as i0 from '@angular/core';
import { OnInit, OnDestroy, AfterContentInit, EventEmitter, InjectionToken } from '@angular/core';
import { DataStateChangeEvent } from '@progress/kendo-angular-grid';

declare class Column {
    origIdx?: number;
    orderIndex?: number;
    leafIndex?: number;
    hidden?: boolean;
    width?: number;
    expanded?: boolean;
    title?: string;
    field?: string;
}

interface IGridState {
    columns: Column[];
    state: State;
    expandedRows?: boolean[];
}

declare class GridStateDirective implements OnInit, OnDestroy, AfterContentInit {
    private grid;
    private storageService;
    private subs;
    private _expandedRows;
    get expandedRows(): any[];
    set expandedRows(val: any[]);
    expandedRowsChange: EventEmitter<any[]>;
    stateReady: EventEmitter<DataStateChangeEvent>;
    filter: CompositeFilterDescriptor;
    filterChange: EventEmitter<CompositeFilterDescriptor>;
    gridState: string;
    sort: Array<SortDescriptor>;
    sortChange: EventEmitter<Array<SortDescriptor>>;
    skip?: number;
    skipChange: EventEmitter<number>;
    group?: Array<GroupDescriptor>;
    groupChange: EventEmitter<Array<GroupDescriptor>>;
    take?: number;
    takeChange: EventEmitter<number>;
    constructor();
    private expander;
    private get key();
    get state(): IGridState;
    set state(val: IGridState);
    get initState(): DataStateChangeEvent;
    ngOnInit(): void;
    private colMapper;
    ngAfterContentInit(): void;
    unload(e: BeforeUnloadEvent): void;
    private saveState;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<GridStateDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<GridStateDirective, "kendo-grid[gridState]", never, { "expandedRows": { "alias": "expandedRows"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "gridState": { "alias": "gridState"; "required": false; }; "sort": { "alias": "sort"; "required": false; }; "skip": { "alias": "skip"; "required": false; }; "group": { "alias": "group"; "required": false; }; "take": { "alias": "take"; "required": false; }; }, { "expandedRowsChange": "expandedRowsChange"; "stateReady": "stateReady"; "filterChange": "filterChange"; "sortChange": "sortChange"; "skipChange": "skipChange"; "groupChange": "groupChange"; "takeChange": "takeChange"; }, never, never, true, never>;
}

declare class GridStateModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<GridStateModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<GridStateModule, never, [typeof GridStateDirective], [typeof GridStateDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<GridStateModule>;
}

declare const APP_STORAGE: InjectionToken<Storage>;

declare class StorageService {
    private store;
    clear(): void;
    getItem(key: string): string;
    key(index: number): string;
    removeItem(key: string): void;
    setItem(key: string, value: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<StorageService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<StorageService>;
}

export { APP_STORAGE, Column, GridStateDirective, GridStateModule, StorageService };
export type { IGridState };
