@zag-js/dismissable
Version:
Dismissable layer utilities for the DOM
44 lines (42 loc) • 1.78 kB
text/typescript
type LayerType = "dialog" | "popover" | "menu" | "listbox" | (string & {});
type LayerDismissEventDetail = {
originalLayer: HTMLElement;
targetLayer: HTMLElement | undefined;
originalIndex: number;
targetIndex: number;
};
type LayerDismissEvent = CustomEvent<LayerDismissEventDetail>;
interface Layer {
dismiss: VoidFunction;
node: HTMLElement;
type: LayerType;
pointerBlocking?: boolean | undefined;
requestDismiss?: ((event: LayerDismissEvent) => void) | 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 LayerType, layerStack };