web-ui-pack
Version:
Web package with UI elements
52 lines (51 loc) • 2.54 kB
TypeScript
import { PopupCloseCases, PopupOpenCases } from "./popupElement.types";
export interface PopupListenerOptions {
target: HTMLElement | SVGElement;
openCase?: PopupOpenCases;
hoverOpenTimeout?: number;
hoverCloseTimeout?: number;
focusDebounceMs?: number;
}
/** Listen for target according to openCase. If target removed call stopListen + don't forget to remove popup yourself;
* @tutorial Troubleshooting/rules:
* * To allow user close/open popup before previous action is ended provide for onOpen and onClose-
* callbacks results as fast as it's possible without waiting for animation */
export default class PopupListener {
#private;
options: PopupListenerOptions;
onOpen: (openCase: PopupOpenCases, ev: MouseEvent | FocusEvent | null) => HTMLElement | null | Promise<HTMLElement | null>;
onClose: (closeCase: PopupCloseCases, ev: MouseEvent | FocusEvent | KeyboardEvent | null) => boolean | Promise<boolean>;
static $defaults: {
openCase: PopupOpenCases;
hoverOpenTimeout: number;
hoverCloseTimeout: number;
};
constructor(options: PopupListenerOptions, onOpen: (openCase: PopupOpenCases, ev: MouseEvent | FocusEvent | null) => HTMLElement | null | Promise<HTMLElement | null>, onClose: (closeCase: PopupCloseCases, ev: MouseEvent | FocusEvent | KeyboardEvent | null) => boolean | Promise<boolean>);
openedEl: Element | null;
isOpening?: boolean | Promise<unknown>;
isClosing?: boolean | Promise<unknown>;
/** Called on open */
open(openCase: PopupOpenCases, e: MouseEvent | FocusEvent | null): Promise<void>;
/** Called on close */
close(closeCase: PopupCloseCases, e: MouseEvent | FocusEvent | KeyboardEvent | null): Promise<void>;
/** Returns focus back during the hiding */
focusBack(relatedTarget: Element | EventTarget | {
focus: () => void;
} | null): void;
/** Returns whether el is part of another */
includes(this: Element, el: unknown): boolean;
/** Returns whether element if part of openedElement */
isMe(el: unknown, openedEl?: Element | null): boolean;
/** Single event handler */
handleEventsDocument(e: Event): void;
/** Single event handler */
handleEvents(ev: Event): void;
/** Called on init to apply eventListeners */
listen(): void;
/** Called to add extra events when open */
listenOnOpen(): void;
/** Called to remove extra events when close */
disposeOnClose(): void;
/** Remove all event listeners */
stopListen(): void;
}