import { KbqOrientation } from '@koobiq/components/core';
import * as i0 from "@angular/core";
/**
 * Manages the visibility of the element.
 *
 * @docs-private
 */
export declare class ElementVisibilityManager {
    private readonly renderer;
    private readonly hiddenState;
    /**
     * @docs-private
     */
    readonly element: HTMLElement;
    /**
     * Whether the element is hidden.
     *
     * @docs-private
     */
    readonly hidden: import("@angular/core").Signal<boolean>;
    /**
     * Hides the element.
     *
     * @docs-private
     */
    hide(): void;
    /**
     * Shows the element.
     *
     * @docs-private
     */
    show(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ElementVisibilityManager, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<ElementVisibilityManager, never, never, {}, {}, never, never, false, never>;
}
/**
 * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.
 */
export declare class KbqOverflowItemsResult extends ElementVisibilityManager {
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqOverflowItemsResult, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqOverflowItemsResult, "[kbqOverflowItemsResult]", ["kbqOverflowItemsResult"], {}, {}, never, never, true, never>;
}
/**
 * Directive for the item that can be hidden by the `KbqOverflowItems` directive.
 */
export declare class KbqOverflowItem extends ElementVisibilityManager {
    /**
     * Unique identifier for the item.
     */
    readonly id: import("@angular/core").InputSignal<unknown>;
    /**
     * Defines the order in which the item is processed in the overflow container,
     * without changing its original position in the `QueryList`.
     */
    readonly order: import("@angular/core").InputSignalWithTransform<number | null, unknown>;
    /**
     * Element with this attribute will be ignored when hiding and will always remain visible.
     * @default false
     */
    readonly alwaysVisible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
    /**
     * @docs-private
     */
    hide(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqOverflowItem, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqOverflowItem, "[kbqOverflowItem]", ["kbqOverflowItem"], { "id": { "alias": "kbqOverflowItem"; "required": true; "isSignal": true; }; "order": { "alias": "order"; "required": false; "isSignal": true; }; "alwaysVisible": { "alias": "alwaysVisible"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}
/**
 * Directive for managing the visibility of items that overflow the container.
 */
export declare class KbqOverflowItems {
    private readonly element;
    private readonly resizeObserver;
    private readonly renderer;
    private readonly document;
    private readonly window;
    /**
     * `KbqOverflowItem` directive references.
     */
    private readonly items;
    /**
     * `KbqOverflowItemsResult` directive reference.
     */
    private readonly result;
    /**
     * Whether the overflow order should be reversed.
     *
     * @example
     * ```
     * [0, 1, hidden, hidden] ---> [hidden, hidden, 2, 3]
     * ```
     *
     * @default false
     */
    readonly reverseOverflowOrder: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
    /**
     * Debounce time for recalculating items visibility.
     *
     * @default 0
     */
    readonly debounceTime: import("@angular/core").InputSignalWithTransform<number, unknown>;
    /**
     * List of additional elements to observe for resize changes.
     *
     * @default document.body
     */
    readonly additionalResizeObserverTargets: import("@angular/core").InputSignal<Element | Element[]>;
    /**
     * Emits when the set of hidden items changes.
     */
    readonly changes: import("@angular/core").OutputEmitterRef<ReadonlySet<unknown>>;
    /**
     * Set of hidden item IDs.
     */
    readonly hiddenItemIDs: import("@angular/core").Signal<ReadonlySet<unknown>>;
    /**
     * Defines the orientation of the overflow items.
     *
     * @default 'horizontal'
     */
    readonly orientation: import("@angular/core").InputSignal<KbqOrientation>;
    private readonly orientationConfig;
    constructor();
    private setupObservers;
    /**
     * Sort items by their `order` attribute.
     * If an item does not have an `order` defined, its index is used as a fallback.
     */
    private sortItemsByOrder;
    /**
     * Manages the visibility of items based on the available space in the container and returns the hidden items.
     * Direction of hiding is determined by the `reverseOverflowOrder` attribute.
     */
    private getHiddenItems;
    /**
     * This method sets the necessary styles for the directive.
     */
    private setStyles;
    private hasOverflown;
    /**
     * @TODO Should be removed when `Array.prototype.findLast` is supported.
     */
    private findLast;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqOverflowItems, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqOverflowItems, "[kbqOverflowItems]", ["kbqOverflowItems"], { "reverseOverflowOrder": { "alias": "reverseOverflowOrder"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; "additionalResizeObserverTargets": { "alias": "additionalResizeObserverTargets"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "changes": "changes"; }, ["items", "result"], never, true, never>;
}
