import { AgBeanStub } from '../core/agBeanStub';
import type { AgCoreBeanCollection } from '../interfaces/agCoreBeanCollection';
import type { BaseEvents } from '../interfaces/baseEvents';
import type { BaseProperties } from '../interfaces/baseProperties';
import type { IPropertiesService } from '../interfaces/iProperties';
import type { StopPropagationCallbacks } from './agManagedFocusFeature';
/** @internal AG_GRID_INTERNAL - Not for public use. Can change / be removed at any time. */
export declare const TabGuardClassNames: {
    readonly TAB_GUARD: "ag-tab-guard";
    readonly TAB_GUARD_TOP: "ag-tab-guard-top";
    readonly TAB_GUARD_BOTTOM: "ag-tab-guard-bottom";
};
/** @internal AG_GRID_INTERNAL - Not for public use. Can change / be removed at any time. */
export interface ITabGuard {
    setTabIndex(tabIndex?: string): void;
}
export interface TabGuardCtrlParams {
    comp: ITabGuard;
    eTopGuard: HTMLElement;
    eBottomGuard: HTMLElement;
    eFocusableElement: HTMLElement;
    focusTrapActive?: boolean;
    forceFocusOutWhenTabGuardsAreEmpty?: boolean;
    isFocusableContainer?: boolean;
    focusInnerElement?: (fromBottom: boolean) => boolean;
    onFocusIn?: (event: FocusEvent) => void;
    onFocusOut?: (event: FocusEvent) => void;
    shouldStopEventPropagation?: () => boolean;
    onTabKeyDown?: (e: KeyboardEvent) => void;
    handleKeyDown?: (e: KeyboardEvent) => void;
    isEmpty?: () => boolean;
}
export declare class AgTabGuardCtrl<TBeanCollection extends AgCoreBeanCollection<TProperties, TGlobalEvents, TCommon, TPropertiesService>, TProperties extends BaseProperties, TGlobalEvents extends BaseEvents, TCommon, TPropertiesService extends IPropertiesService<TProperties, TCommon>> extends AgBeanStub<TBeanCollection, TProperties, TGlobalEvents, TCommon, TPropertiesService> {
    private readonly stopPropagationCallbacks?;
    private readonly comp;
    private readonly eTopGuard;
    private readonly eBottomGuard;
    private readonly eFocusableElement;
    private readonly focusTrapActive;
    private readonly forceFocusOutWhenTabGuardsAreEmpty;
    private readonly isFocusableContainer;
    private readonly providedFocusInnerElement?;
    private readonly providedFocusIn?;
    private readonly providedFocusOut?;
    private readonly providedShouldStopEventPropagation?;
    private readonly providedOnTabKeyDown?;
    private readonly providedHandleKeyDown?;
    private readonly providedIsEmpty?;
    private skipTabGuardFocus;
    private forcingFocusOut;
    private allowFocus;
    constructor(params: TabGuardCtrlParams, stopPropagationCallbacks?: StopPropagationCallbacks | undefined);
    postConstruct(): void;
    private handleKeyDown;
    private tabGuardsAreActive;
    private shouldStopEventPropagation;
    private activateTabGuards;
    private deactivateTabGuards;
    private onFocus;
    private findNextElementOutsideAndFocus;
    private onFocusIn;
    private onFocusOut;
    onTabKeyDown(e: KeyboardEvent): void;
    focusInnerElement(fromBottom?: boolean): boolean;
    getNextFocusableElement(backwards?: boolean): HTMLElement | null;
    forceFocusOutOfContainer(up?: boolean): void;
    isTabGuard(element: HTMLElement, bottom?: boolean): boolean;
    setAllowFocus(allowFocus: boolean): void;
}
