import { ElementRef, OnDestroy } from '@angular/core';
import { Observable } from 'rxjs';
import { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';
import { OverflowLayoutFocusableItem } from './interfaces/overflow-focusable-item.interface';
import { OverflowItemRef } from './interfaces/overflow-item-ref.interface';
import * as i0 from "@angular/core";
export interface OverflowLayoutConfig {
    items: OverflowItemRef[];
    focusableItems: OverflowLayoutFocusableItem[];
    visibleItems: OverflowLayoutItemContainerDirective[];
    itemsWrapper: HTMLElement;
    showMoreContainer?: HTMLElement;
    layoutContainerElement: HTMLElement;
    maxVisibleItems: number;
    direction: 'left' | 'right';
    enableKeyboardNavigation: boolean;
    reverseHiddenItems: boolean;
}
export declare class OverflowLayoutListeningResult {
    /** Whether to show more button */
    showMore: boolean;
    /** Overflow item s */
    items: OverflowItemRef[];
    /** Hidden overflow items */
    hiddenItems: OverflowItemRef[];
    /** Visible overflow items */
    visibleItems: OverflowItemRef[];
}
export declare class OverflowLayoutService implements OnDestroy {
    private _elRef;
    /**
     * Overflow Layout config.
     */
    config: OverflowLayoutConfig;
    /**
     * Overflow Layout calculation result.
     */
    result: OverflowLayoutListeningResult;
    /** @hidden */
    private _listenToItemResize;
    /** @hidden */
    private readonly _subscription;
    /** @hidden */
    private _allItems;
    /** @hidden */
    private _hiddenItems;
    /** @hidden */
    private _detectChanges$;
    /** @hidden */
    private _result$;
    /**
     * Observable which emits when changes detection is required.
     */
    get detectChanges(): Observable<void>;
    /**
     * Observable which emits when new calculation result is available.
     */
    get onResult(): Observable<OverflowLayoutListeningResult>;
    /** @hidden */
    constructor(_elRef: ElementRef<HTMLElement>);
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    startListening(config: OverflowLayoutConfig): void;
    /** @hidden */
    setConfig(config: OverflowLayoutConfig): void;
    /**
     * Calculates available space for items and hides items that are not fitting into the container.
     */
    fitVisibleItems(): void;
    /** @hidden */
    private _getForcedItemsIndexes;
    /**
     * @hidden
     * Returns combined width of the element including margins.
     * @param element Element to calculate width of.
     */
    private _getElementWidth;
    /** @hidden */
    private _emitResult;
    /** @hidden */
    private _listenToSizeChanges;
    static ɵfac: i0.ɵɵFactoryDeclaration<OverflowLayoutService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<OverflowLayoutService>;
}
