import { BooleanInput } from '@angular/cdk/coercion';
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { Destroy } from '@deja-js/component/core';
import { Rect } from '@deja-js/component/core/graphics';
import { MouseDroppableContext } from '@deja-js/component/v2/mouse-dragdrop';
import { Subject } from 'rxjs';
import { DejaTile } from './tile.class';
import { IDejaTilesAddedEvent, IDejaTilesAddEvent, IDejaTilesDeletedEvent, IDejaTilesEvent, IDejaTilesRemoveEvent } from './tiles.event';
import { DejaTilesLayoutProvider, ITileDragDropContext } from './tiles-layout.provider';
import { IDejaTilesRefreshParams } from './tiles-refresh-params.interface';
import * as i0 from "@angular/core";
export declare class DejaTilesComponent extends Destroy implements AfterViewInit, ControlValueAccessor, OnDestroy {
    private changeDetectorRef;
    private layoutProvider;
    control: NgControl;
    /**
     * Raised when the selected items has changed
     */
    readonly selectionChanged: EventEmitter<IDejaTilesEvent>;
    /**
     * Raised when the layout has changed with a drag and drop
     */
    readonly layoutChanged: EventEmitter<IDejaTilesEvent>;
    /**
     * Raised when the layout is completed and all tiles are binded
     */
    readonly layoutCompleted: EventEmitter<IDejaTilesEvent>;
    /**
     * Raised before some tiles will be added to the data model with a paste
     */
    readonly contentAdding: EventEmitter<IDejaTilesAddEvent>;
    /**
     * Raised before some tiles will be removed from the data model with a delete
     */
    readonly contentRemoving: EventEmitter<IDejaTilesRemoveEvent>;
    /**
     * Raised when tiles are added
     */
    readonly tilesAdded: EventEmitter<IDejaTilesAddedEvent>;
    /**
     * Raised when tiles are deleted
     */
    readonly tilesDeleted: EventEmitter<IDejaTilesDeletedEvent>;
    /**
     * Raised when some tiles are copied in the clipboard service. Can result from a copy or paste operation on the tiles.
     */
    readonly contentCopied: EventEmitter<IDejaTilesEvent>;
    /**
     * Tab index of the focusable element
     */
    tabIndex: number;
    tileTemplate: TemplateRef<unknown>;
    private tilesContainer;
    private _models;
    private delete$sub;
    private copy$sub;
    private cut$sub;
    private paste$sub;
    private keyup$;
    private hasFocus;
    get tiles(): DejaTile[];
    constructor(el: ElementRef, changeDetectorRef: ChangeDetectorRef, layoutProvider: DejaTilesLayoutProvider, control: NgControl);
    get selectionRect$(): Subject<Rect>;
    set tileminwidth(value: string);
    set tilemaxwidth(value: string);
    set tileminheight(value: string);
    set tilemaxheight(value: string);
    set maxwidth(value: string);
    set designMode(value: BooleanInput);
    get designMode(): BooleanInput;
    set models(models: DejaTile[]);
    set canDelete(value: BooleanInput);
    set canCopy(value: BooleanInput);
    set canCut(value: BooleanInput);
    set canPaste(value: BooleanInput);
    set selectedTiles(selectedTiles: Array<DejaTile | string>);
    writeValue(models: DejaTile[]): void;
    registerOnChange(fn: (_a: unknown) => void): void;
    registerOnTouched(fn: () => void): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    copySelection(): void;
    cutSelection(): void;
    deleteSelection(): DejaTile[];
    paste(): DejaTile[];
    ensureVisible(id: string): void;
    refresh(params?: IDejaTilesRefreshParams): void;
    addTiles(tiles: DejaTile[]): void;
    removeTiles(tileIds: string[]): void;
    hitTest(pageX: number, pageY: number): DejaTile;
    getFreePlace(pageX?: number, pageY?: number, width?: number, height?: number): Rect;
    moveTile(id: string, bounds: Rect): void;
    getDropContext(): MouseDroppableContext<ITileDragDropContext>;
    onTileClosed(tile: DejaTile): void;
    onFocus(): void;
    onBlur(): void;
    onTouchedCallback: () => void;
    onChangeCallback: (_a?: unknown) => void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DejaTilesComponent, [null, null, null, { optional: true; self: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DejaTilesComponent, "deja-tiles", never, { "tabIndex": "tabIndex"; "tileminwidth": "tileminwidth"; "tilemaxwidth": "tilemaxwidth"; "tileminheight": "tileminheight"; "tilemaxheight": "tilemaxheight"; "maxwidth": "maxwidth"; "designMode": "designMode"; "models": "models"; "canDelete": "canDelete"; "canCopy": "canCopy"; "canCut": "canCut"; "canPaste": "canPaste"; "selectedTiles": "selectedTiles"; }, { "selectionChanged": "selectionChanged"; "layoutChanged": "layoutChanged"; "layoutCompleted": "layoutCompleted"; "contentAdding": "contentAdding"; "contentRemoving": "contentRemoving"; "tilesAdded": "tilesAdded"; "tilesDeleted": "tilesDeleted"; "contentCopied": "contentCopied"; }, ["tileTemplate"], never, false>;
}
