import { LitElement } from "lit";
import { FocusClass, FocusClassInterface, FocusMixinReturnType } from "./FocusMixin";
export type AnyConstructor<A = LitElement> = new (...args: any[]) => A;
/**
 * Interface describing the public properties added by FocusTrapMixin.
 * Protected methods are intentionally omitted to allow subclasses to override with protected visibility.
 */
export interface FocusTrapClassInterface extends FocusClassInterface {
    activeFocusTrap: boolean;
    preventClickOutside: boolean;
    preventScroll: boolean;
    focusTrapIndex: number;
    handleKeydownFocusTrap: (event: KeyboardEvent) => void;
}
/**
 * Abstract class used internally for super calls within the mixin implementation.
 * Also used in tests via bracket notation to access protected methods.
 */
export declare abstract class FocusTrapClass extends FocusClass {
    activeFocusTrap: boolean;
    preventClickOutside: boolean;
    preventScroll: boolean;
    focusTrapIndex: number;
    handleKeydownFocusTrap: (event: KeyboardEvent) => void;
    protected focusableElements?: HTMLElement[];
    protected initialFocusComplete?: boolean;
    protected deactivateFocusTrap?(): void;
    protected activateFocusTrap?(): void;
    protected setFocusableElements?(): void;
    protected setInitialFocus?(prefferableElement?: HTMLElement | number, ignoreAutoFocus?: boolean): void;
    protected setFocusOnTrigger?(triggerElement?: HTMLElement): void;
    protected setFocusOnDeepestNestedElement?(element?: HTMLElement): void;
}
export type FocusTrapMixinReturnType<T extends AnyConstructor<LitElement>> = FocusMixinReturnType<T> & AnyConstructor<FocusTrapClassInterface & FocusTrapClass>;
export declare const FocusTrapMixin: <T extends AnyConstructor<LitElement>>(base: T) => FocusTrapMixinReturnType<T>;
