import { AfterViewInit, ElementRef, OnDestroy, QueryList, Type, ViewContainerRef } from '@angular/core';
import { TccET_IAM } from '../../../odata/models/iam.model';
import { TccTestForRoleService } from '../../../shared/services/tcc-test-for-role/tcc-test-for-role.service';
import { TccResizeObserverService } from '../../services/tcc-resize-observer/tcc-resize-observer.service';
import { Observable } from 'rxjs';
export declare namespace TccDashboard {
    export abstract class ITile {
        dimensions: [number, number];
        preventClick: boolean;
        static tileConfig: TileConfig;
        headerObs$: Observable<string>;
        constructor(...args: any[]);
    }
    export interface ShowTile {
        component: string;
        position?: tilePosition;
    }
    export interface GridTile extends tileSize, tilePosition {
        component: string;
    }
    export interface TileConfig extends tileSize {
        component: string;
        type: Type<ITile>;
        requiredRoles: Array<TccET_IAM.UserRoles>;
        header: string;
    }
    export interface internalTileConfig extends TileConfig, tilePosition {
        dimensions: [number, number];
        componentInstance?: ITile;
        headerObs$?: Observable<string>;
    }
    export interface tilePosition {
        top: number;
        left: number;
    }
    export interface tilePositioning {
        toppx: number;
        leftpx: number;
        heightpx: number;
        widthpx: number;
        innerwidth: number;
        innerheight: number;
    }
    export interface drag {
        positionbefore: TccDashboard.tilePosition;
        startX: number;
        startY: number;
        xStep: number;
        yStep: number;
        dragPreviewEle: HTMLDivElement;
    }
    interface tileSize {
        cols: number;
        rows: number;
    }
    export interface tileCoords extends tileSize, tilePosition {
    }
    export interface rows {
        [rownum: number]: {
            [colnum: number]: GridTile;
        };
    }
    export interface cols {
        [colnum: number]: {
            [rownum: number]: GridTile;
        };
    }
    export {};
}
export declare class TccOccupationGrid {
    private grid;
    private shapes;
    private columncount;
    private _keys;
    private get gridkeys();
    private _rows;
    private get rows();
    private _cols;
    private get cols();
    constructor(columns: number);
    private refresh;
    private extractRowNum;
    private extractColNum;
    private generateCoordstr;
    private _generateRows;
    get height(): number;
    private moveShape;
    private addToGrid;
    private writeInGrid;
    /**
     * returns coords that are in a but not in b
     * @param a
     * @param b
     */
    subtractShapes(a: TccDashboard.tileCoords, b: TccDashboard.tileCoords): string[];
    createShape(shape: TccDashboard.GridTile): boolean;
    private getShapeCoords;
    private isOccupied;
    private fitInSpace;
    private getLastShape;
    private appendShape;
    moveAllUp(): void;
    moveSingleUp(element: TccDashboard.GridTile, recursive?: boolean): boolean;
    private swapLeft;
    moveRight(element: TccDashboard.GridTile, swap?: boolean): boolean;
    private swapRight;
    moveLeft(element: TccDashboard.GridTile, swap?: boolean): boolean;
    private swapDown;
    moveUp(element: TccDashboard.GridTile, swap?: boolean): boolean;
    private swapUp;
    moveDown(element: TccDashboard.GridTile, swap?: boolean): boolean;
    private checkCoords;
    private checkCoord;
}
export declare class TccDashboardComponent implements AfterViewInit, OnDestroy {
    private testroles;
    private resizeService;
    private resizeSubscription;
    private columnCount;
    private sizeRatio;
    private standardWidth;
    private columnOffset;
    private currentDrag;
    private dashboardChanged;
    viewStep: number;
    maxViewStep: number;
    rowHeight: number;
    maxRowHeight: number;
    zoom: number;
    _customize: boolean;
    _positions: {
        [componentName: string]: TccDashboard.tilePositioning;
    };
    createComponents: QueryList<ViewContainerRef>;
    overviewCard: ElementRef;
    /**
     * All Tiles
     */
    private TileList;
    set TileComponents(components: Array<typeof TccDashboard.ITile>);
    private occupationGrid;
    _tiles: Array<TccDashboard.internalTileConfig>;
    private changeSubscription;
    constructor(testroles: TccTestForRoleService, resizeService: TccResizeObserverService);
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    toggleCustomize(on?: boolean): void;
    saveTiles(): Array<TccDashboard.ShowTile>;
    private get defaultTiles();
    private redraw;
    showTiles(tiles?: Array<TccDashboard.ShowTile>): void;
    private addTile;
    private addTiles;
    showTile(tile: TccDashboard.ShowTile): void;
    dragStart(event: DragEvent, tile: TccDashboard.internalTileConfig): void;
    drag(event: DragEvent, tile: TccDashboard.internalTileConfig): void;
    dragEnd(event: DragEvent, tile: TccDashboard.internalTileConfig): void;
    private generateTile;
    private generateAllDimensions;
    private generateDimensions;
}
