import { AfterViewInit, ElementRef, EventEmitter, 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, Subscription } from 'rxjs';
import { TccTopNavService } from '../../services/tcc-top-nav/tcc-top-nav.service';
import { TccUserPropertyService } from '../../../shared/services/tcc-user-property/tcc-user-property.service';
import { TccSnackBarService } from '../../services/tcc-snackbar/tcc-snackbar.service';
import { MatDialog } from '@angular/material/dialog';
import { TccDialogWindowService } from '../../services/tcc-dialog-window/tcc-dialog-window.service';
import { tccFilterbar } from '../tcc-filterbar/tcc-filterbar.component';
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;
    columncount: number;
    private _keys;
    get gridkeys(): string[];
    private _rows;
    get rows(): TccDashboard.rows;
    private _cols;
    get cols(): TccDashboard.rows;
    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;
    /**
     *
     * @param element
     * @param swap
     * @param coordStr Position to free up space
     * @param offset How far down space should be made
     * @returns
     */
    moveDown(element: TccDashboard.GridTile, swap?: boolean, coordStr?: string, offset?: number): boolean;
    private checkCoords;
    private checkCoord;
    reset(): void;
}
export declare class TccDashboardComponent implements AfterViewInit, OnDestroy {
    private testroles;
    private resizeService;
    private topnavService;
    private userPropertyService;
    private snackBar;
    private dialog;
    private dialogService;
    changed: EventEmitter<boolean>;
    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;
    };
    isCustomizeMode: boolean;
    private iconButtonConfig;
    _placeHolderpositions: {
        [componentName: string]: TccDashboard.tilePositioning;
    };
    _placeHolderTiles: Array<TccDashboard.internalTileConfig>;
    private backupTiles;
    hoverIndex: number | null;
    createComponents: QueryList<ViewContainerRef>;
    overviewCard: ElementRef;
    /**
     * All Tiles
     */
    private TileList;
    set TileComponents(components: Array<typeof TccDashboard.ITile>);
    private occupationGrid;
    _tiles: Array<TccDashboard.internalTileConfig>;
    private changeSubscription;
    dragItemId: string;
    uploadConfig: tccFilterbar.noContentSettings;
    constructor(testroles: TccTestForRoleService, resizeService: TccResizeObserverService, topnavService: TccTopNavService, userPropertyService: TccUserPropertyService, snackBar: TccSnackBarService, dialog: MatDialog, dialogService: TccDialogWindowService);
    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;
    onEditClick(): void;
    onDeleteClick(tilename: string): void;
    private deleteTileCallback;
    private getEmptyGridSpaces;
    private addPlaceholdersAndShowTiles;
    private removePlaceHolder;
    private onLeftIconButtonClick;
    private saveTileCallback;
    private onRightIconButtonClick;
    private cancelEditingTileCallback;
    private getTilePositions;
    private saveDashboard;
    addNewTile(tile: TccDashboard.internalTileConfig): Subscription;
    private mapTiles;
    createButtonEvent(event: any): void;
}
