import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList } from '@angular/core';
import { RtlService } from '@fundamental-ngx/cdk/utils';
import { ResizableCardItemComponent, ResizableCardItemConfig, ResizedEvent } from './resizable-card-item/resizable-card-item.component';
import * as i0 from "@angular/core";
export type LayoutSize = 'sm' | 'md' | 'lg' | 'xl';
export type ResizableCardLayoutConfig = Array<ResizableCardItemConfig>;
export declare class ResizableCardLayoutComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {
    private readonly _cd;
    readonly elementRef: ElementRef;
    private readonly _rtlService;
    /** Object for setting each card property */
    layoutConfig: ResizableCardLayoutConfig;
    /** Emits when card resize is reached to one new step in horizontal or vertical direction */
    stepChange: EventEmitter<ResizedEvent>;
    /** Emits when card is still resizing */
    resizing: EventEmitter<ResizedEvent>;
    /** Emits when card resize is completed */
    resized: EventEmitter<ResizedEvent>;
    /** Emits when card height is reduced to show only header */
    miniHeaderReached: EventEmitter<ResizedEvent>;
    /** Emits when minimum height of card content area is reached */
    miniContentReached: EventEmitter<ResizedEvent>;
    /** Emits when layout changes */
    layoutChange: EventEmitter<ResizableCardLayoutConfig>;
    /** @hidden */
    resizeCardItems: QueryList<ResizableCardItemComponent>;
    /** width for layout */
    layoutWidth: number;
    /** height for layout */
    layoutHeight: number;
    /** @hidden Number of columns in layout. considering 1 column width 20rem */
    private _columns;
    /** @hidden Layout padding. will be added to first card padding in every row */
    private _paddingLeft;
    /** @hidden Stores height of each column on card arrangement */
    private _columnsHeight;
    /** @hidden Available screen layout */
    private _layout;
    /** @hidden Stores sorted card before placing in layout */
    private _sortedCards;
    /** @hidden FocusKeyManager instance */
    private _keyboardEventsManager;
    /** @hidden */
    private readonly _destroyRef;
    /** @hidden */
    private _layoutShifted;
    /** @hidden */
    private _directionPosition$;
    /** @hidden */
    constructor(_cd: ChangeDetectorRef, elementRef: ElementRef, _rtlService: RtlService);
    /** @hidden handles keyboard accessibility */
    _handleKeydown(event: KeyboardEvent): void;
    /** @hidden */
    onResize(): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** Layout size. Available options are 'sm', 'md', 'lg' and 'xl' */
    set layoutSize(layoutSize: LayoutSize);
    get layoutSize(): LayoutSize;
    /**
     * Arranges cards in layout based on rank, width and height of card
     * @param cards Array of ResizableCardItemComponent
     */
    arrangeCards(cards: Array<ResizableCardItemComponent>): void;
    /**
     * Handles shifting of cards with animation, while card is still resizing.
     * @param event {ResizedEvent}
     */
    cardResizing(event: ResizedEvent): void;
    /**
     * Handles arrangement of cards in layout
     * @param event {ResizedEvent}
     */
    cardResizeComplete(event: ResizedEvent): void;
    /** @hidden */
    updateLayout(): void;
    /**
     * method to get screen width
     * @returns Window width in px
     */
    getWidthAvailable(): number;
    /** @hidden Subscribe to events from items */
    private _initialSetup;
    /** @hidden */
    private _accessibilitySetup;
    /** @hidden create layout based on layout size */
    private _createLayout;
    /** @hidden Emit layoutChange event with updated card dimensions */
    private _emitLayoutChange;
    /**
     * @hidden Sets number of column in layout, based on LayoutSize passed
     * @param layoutSize {'sm' | 'md' | 'lg' | 'xl'}
     */
    private _setLayoutColumns;
    /**
     * @hidden Method to handle card vertical resize and trigger the layout change
     * @param event {ResizedEvent}
     */
    private _handleVerticalResize;
    /**
     * @hidden Method to handle card horizontal resize and trigger the layout change
     * @param event {ResizedEvent}
     */
    private _handleHorizontalResize;
    /**
     * @hidden Method to move card down, when another card width is increasing
     * Method to loop till this._columns -1 positions and exchange the rank
     * @param currentCardIndex Index of current card
     */
    private _moveCardDown;
    /**
     * @hidden updates array with new column heights
     * @param card {ResizableCardItemComponent}
     */
    private _updateColumnsHeight;
    /**
     * @hidden Try to set card at available heights
     * @param card ResizableCardItemComponent
     * @param index value of card in array of ResizableCardItemComponent
     */
    private _setCardPositionValues;
    /**
     * @hidden try to set card at given height.
     * @param height height at which card is getting positioned.
     * @param card ResizableCardItemComponent
     * @returns It returns true when card position id found otherwise it returns false.
     */
    private _isPositionSetSuccess;
    /**
     * @hidden Try to start card position from left most fit position.
     * @param card ResizableCardItemComponent
     * @param columnPositions {Array<number>} Array of available positions for cards.
     * @param height {number} height at which fixing the card
     * @returns {number} returns starting column position where card will fit.
     */
    private _fitCardColumnPosition;
    /** @hidden returns sorted unique height of columns */
    private _getSortedUniqueHeights;
    /**
     * @hidden Comparator to sort card based on rank.
     * @param firstCard ResizableCardItemComponent
     * @param secondCard ResizableCardItemComponent
     * @returns : returns difference between first card rank and other card rank.
     */
    private _sortCards;
    static ɵfac: i0.ɵɵFactoryDeclaration<ResizableCardLayoutComponent, [null, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ResizableCardLayoutComponent, "fd-resizable-card-layout", never, { "layoutConfig": { "alias": "layoutConfig"; "required": false; }; }, { "stepChange": "stepChange"; "resizing": "resizing"; "resized": "resized"; "miniHeaderReached": "miniHeaderReached"; "miniContentReached": "miniContentReached"; "layoutChange": "layoutChange"; }, ["resizeCardItems"], ["*"], true, never>;
}
