type LayerType = "dialog" | "popover" | "menu" | "listbox" | (string & {});
type LayerDismissEventDetail = {
    originalLayer: HTMLElement;
    targetLayer: HTMLElement | undefined;
    originalIndex: number;
    targetIndex: number;
};
type LayerDismissEvent = CustomEvent<LayerDismissEventDetail>;
type LayerStyleTarget = () => HTMLElement | null;
interface Layer {
    dismiss: VoidFunction;
    node: HTMLElement;
    type: LayerType;
    pointerBlocking?: boolean | undefined;
    requestDismiss?: ((event: LayerDismissEvent) => void) | undefined;
    styleTargets?: LayerStyleTarget[] | undefined;
}
declare const layerStack: {
    layers: Layer[];
    branches: HTMLElement[];
    recentlyRemoved: Set<HTMLElement>;
    count(): number;
    pointerBlockingLayers(): Layer[];
    topMostPointerBlockingLayer(): Layer | undefined;
    hasPointerBlockingLayer(): boolean;
    isBelowPointerBlockingLayer(node: HTMLElement): boolean;
    isTopMost(node: HTMLElement | null): boolean;
    getNestedLayers(node: HTMLElement): Layer[];
    getLayersByType(type: LayerType): Layer[];
    getNestedLayersByType(node: HTMLElement, type: LayerType): Layer[];
    getParentLayerOfType(node: HTMLElement, type: LayerType): Layer | undefined;
    countNestedLayersOfType(node: HTMLElement, type: LayerType): number;
    isInNestedLayer(node: HTMLElement, target: HTMLElement | EventTarget | null): boolean;
    isInBranch(target: HTMLElement | EventTarget | null): boolean;
    add(layer: Layer): void;
    addBranch(node: HTMLElement): void;
    remove(node: HTMLElement): void;
    removeBranch(node: HTMLElement): void;
    syncLayers(): void;
    indexOf(node: HTMLElement | undefined): number;
    dismiss(node: HTMLElement, parent?: HTMLElement): void;
    clear(): void;
};

export { type Layer, type LayerDismissEvent, type LayerDismissEventDetail, type LayerStyleTarget, type LayerType, layerStack };
