import { FocusableOption, FocusOrigin } from '@angular/cdk/a11y';
import { EventEmitter, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { FocusIndicatorService } from '../focus-indicator/focus-indicator.service';
import * as i0 from "@angular/core";
export declare class TabbableListItemDirective implements FocusableOption, OnDestroy {
    /** Access the service to programmatically control focus indicators */
    readonly focusIndicatorService: FocusIndicatorService;
    /** Access the tabbable list service */
    private readonly _tabbableList;
    /** Access the tabbable item element */
    private readonly _elementRef;
    /** Access the service responsible for handling focus in child elements */
    private readonly _managedFocusContainerService;
    /** Access the service which can provide us with browser identification */
    private readonly _platform;
    /** Access the change detector to ensure tabindex gets updated as expects */
    private readonly _changeDetector;
    /** Access the focus origin if one is provided */
    private readonly _focusOriginService;
    /** Access the renderer to make manual dom manipulations */
    private readonly _renderer;
    /** Indicate the parent tabbable list item if one is present. */
    parent: TabbableListItemDirective;
    rank: number;
    /** Indicate if this item is disabled */
    disabled: boolean;
    /** Indicate if the item is expanded if used as a hierarchical item. */
    expanded: boolean;
    /** Provide a unique key to help identify items when used in a virtual list */
    set key(key: any);
    get key(): any;
    /** Emit when the expanded state changes. */
    expandedChange: EventEmitter<boolean>;
    /** Emit when the element receives focus via the tabbable list. */
    activated: EventEmitter<FocusOrigin>;
    get tabindex(): number;
    /** Give each tabbable item a unique id */
    id: number;
    /** Each item in the list needs to be initialised by the service. When the item QueryList changes this is used to identify which items previously existed and which are new */
    initialized: boolean;
    /** Store a list of all child tabbable items */
    children: TabbableListItemDirective[];
    /** Emit whenever the expanded state changes */
    keyboardExpanded$: Subject<boolean>;
    /** Automatically unsubscribe from all observables */
    private readonly _onDestroy;
    /** Store a reference to the focus indicator instance */
    private readonly _focusIndicator;
    /** Store the current key - it may change in a ngFor/uxVirtualFor if the cell is reused. */
    private _key;
    /** Store a default key to use if one is not provided */
    private readonly _defaultKey;
    /** Determine if this element has a focus indicator visible */
    private _focusOrigin;
    constructor();
    onInit(): void;
    ngOnDestroy(): void;
    focus(): void;
    onFocus(): void;
    onBlur(): void;
    onKeydown(event: KeyboardEvent): void;
    getFocused(): boolean;
    /** We can programmatically focus an element but may want a different origin than 'programmatic' */
    focusWithOrigin(origin: FocusOrigin, preventScroll?: boolean): void;
    private isTabbable;
    private setTabIndex;
    static ɵfac: i0.ɵɵFactoryDeclaration<TabbableListItemDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<TabbableListItemDirective, "[uxTabbableListItem]", ["ux-tabbable-list-item"], { "parent": { "alias": "parent"; "required": false; }; "rank": { "alias": "rank"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "key": { "alias": "key"; "required": false; }; }, { "expandedChange": "expandedChange"; "activated": "activated"; }, never, never, false, never>;
}
