import { DomPortal } from '@angular/cdk/portal';
import * as i0 from '@angular/core';
import { AfterViewInit, ElementRef, EventEmitter, InjectionToken } from '@angular/core';
import * as i3 from '@fundamental-ngx/core/link';
import { LinkComponent } from '@fundamental-ngx/core/link';
import { HasElementRef } from '@fundamental-ngx/cdk/utils';
import { Placement } from '@fundamental-ngx/core/shared';
import * as i4 from '@fundamental-ngx/core/content-density';

/**
 * Breadcrumb item directive. Must have child breadcrumb link directives.
 *
 * ```html
 * <fd-breadcrumb-item>
 *     <a fd-link [routerLink]="'#'">Breadcrumb Link</a>
 * </fd-breadcrumb-item>
 * ```
 */
declare class BreadcrumbItemComponent implements AfterViewInit {
    readonly elementRef: ElementRef<HTMLElement>;
    /** @hidden */
    breadcrumbLink: LinkComponent;
    /** In case there is no link in Item and breadcrumb item is non-interactive, we move whole item content to menu item title */
    breadcrumbItemPortal: DomPortal<Element>;
    /** When breadcrumb item has link in it, we are moving link content to menu item title */
    linkContentPortal: DomPortal;
    /**
     * Breadcrumb item dom portal.
     */
    portal: DomPortal;
    /** @hidden */
    private _attached;
    /** @hidden */
    constructor(elementRef: ElementRef<HTMLElement>);
    /** @hidden */
    ngAfterViewInit(): void;
    /**
     * Sets breadcrumb item dom portal.
     */
    setPortal(): void;
    /** @hidden */
    _detach(): void;
    /** @hidden */
    _attach(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbItemComponent, "fd-breadcrumb-item", never, {}, {}, ["breadcrumbLink"], ["*"], true, never>;
}

type BreadcrumbSeparatorStyle = '' | 'backslash' | 'double-slash' | 'double-backslash' | 'greater-than' | 'double-greater-than';
/**
 * Breadcrumb parent wrapper directive. Must have breadcrumb item child directives.
 *
 * ```html
 * <fd-breadcrumb>
 *     <fd-breadcrumb-item>
 *         <a fd-link [routerLink]="'#'">Breadcrumb Link</a>
 *     </fd-breadcrumb-item>
 * </fd-breadcrumb>
 * ```
 */
declare class BreadcrumbComponent implements AfterViewInit, HasElementRef {
    /** Whether to append items to the overflow dropdown in reverse order. Default is true. */
    reverse: boolean;
    /** Tabindex of the breadcrumb. */
    tabIndex: string;
    /**
     * Event emitted when visible items count is changed.
     */
    visibleItemsCount: EventEmitter<number>;
    /**
     * Event emitted when hidden items count is changed.
     */
    hiddenItemsCount: EventEmitter<number>;
    /** @hidden */
    private readonly _contentItems;
    /** @hidden */
    private readonly _menuComponent;
    /** @hidden */
    private readonly _overflowLayout;
    /**
     * Separator style for the breadcrumb items.
     * Can be 'backslash' | 'double-slash' | 'double-backslash' | 'greater-than' | 'double-greater-than'
     * Omit for default (slash)
     */
    separatorStyle: i0.InputSignal<BreadcrumbSeparatorStyle>;
    /** @hidden */
    _ariaLabel: string;
    /**
     * @hidden
     * Array of breadcrumb items.
     */
    _items$: i0.WritableSignal<BreadcrumbItemComponent[]>;
    /** @hidden */
    readonly elementRef: ElementRef<HTMLElement>;
    /** @hidden */
    protected readonly placement: i0.Signal<Placement>;
    /** @hidden */
    protected readonly _cssClass: i0.Signal<string>;
    /** @hidden */
    private readonly _rtlService;
    /** @hidden */
    private readonly _langSignal;
    /** @hidden */
    private readonly _translationResolver;
    /** @hidden */
    private readonly _destroyRef;
    /** @hidden */
    constructor();
    /** @hidden */
    onResize(): void;
    /**
     * Function that handles click, touch, enter and space events.
     */
    itemClicked(breadcrumbItem: BreadcrumbItemComponent, $event: Event): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    _onHiddenChange(isHidden: boolean, breadcrumb: BreadcrumbItemComponent): void;
    /** @hidden */
    _onVisibleItemsCountChange(visibleItemsCount: number): void;
    /** @hidden */
    _onHiddenItemsCountChange(hiddenItemsCount: number): void;
    /**
     * @hidden
     * Opens the overflow menu on keyboard activation.
     * Bound to keyup (not keydown) so that by the time the menu opens and captures focus,
     * the key has been fully released and no stale key events reach the first menu item.
     */
    protected openOverflowMenu(event: Event): void;
    /** @hidden */
    protected onKeydown(event: KeyboardEvent): void;
    /**
     * @hidden
     * Returns all focusable breadcrumb elements in DOM order: visible link items,
     * the overflow "..." collapse button, and the aria-current page span.
     * Excludes items hidden by the overflow layout (soft-hidden).
     *
     * Uses querySelectorAll rather than Angular queries because:
     * - The overflow "..." button is rendered in the component template, not projected
     *   as a content child, so it cannot be captured via @ContentChildren.
     * - The aria-current span is user-provided content inside fd-breadcrumb-item and
     *   is not an Angular component/directive — there's no token to query it.
     * - querySelectorAll naturally returns elements in DOM (visual) order, which is
     *   exactly what arrow key navigation needs, without manual sorting.
     */
    private _getVisibleLinks;
    /**
     * @hidden
     * Applies roving tabindex: sets all focusable breadcrumb elements to tabindex="-1",
     * then promotes the first visible one to tabindex="0".
     * This ensures Tab enters/exits the breadcrumb as a single stop,
     * and non-href elements (click-only links, aria-current spans) are programmatically focusable.
     */
    private _updateTabIndexes;
    /** @hidden */
    private _setItems;
    /** @hidden */
    private _updateAriaLabels;
    static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbComponent, "fd-breadcrumb", never, { "reverse": { "alias": "reverse"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "separatorStyle": { "alias": "separatorStyle"; "required": false; "isSignal": true; }; }, { "visibleItemsCount": "visibleItemsCount"; "hiddenItemsCount": "hiddenItemsCount"; }, ["_contentItems"], ["*"], true, never>;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class BreadcrumbModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<BreadcrumbModule, never, [typeof BreadcrumbComponent, typeof BreadcrumbItemComponent, typeof i3.LinkComponent, typeof i4.ContentDensityModule], [typeof BreadcrumbComponent, typeof BreadcrumbItemComponent, typeof i3.LinkComponent, typeof i4.ContentDensityModule]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<BreadcrumbModule>;
}

declare const FD_BREADCRUMB_ITEM_COMPONENT: InjectionToken<unknown>;
declare const FD_BREADCRUMB_COMPONENT: InjectionToken<unknown>;

export { BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, FD_BREADCRUMB_COMPONENT, FD_BREADCRUMB_ITEM_COMPONENT };
export type { BreadcrumbSeparatorStyle };
