UNPKG

web-ui-pack

Version:
52 lines (51 loc) 2.54 kB
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; }