UNPKG

flexipop

Version:
154 lines (147 loc) 5.53 kB
declare type Alignment = 'start' | 'middle' | 'end'; /** * CreateOverlay class for managing overlay/popup UI components * @example * const overlay = new CreateOverlay({ * trigger: '#triggerButton', * content: '#popupContent', * options: { * triggerStrategy: 'click', * placement: 'bottom', * offsetDistance: 10 * } * }); * * @type {OverlayOptions} * @property {'click' | 'hover'} [triggerStrategy='click'] - How the overlay is triggered * @property {string} [placement='bottom'] - Where the overlay is positioned relative to trigger * @property {number} [offsetDistance=6] - Distance between trigger and overlay * @property {boolean} [preventFromCloseOutside=false] - Prevents closing when clicking outside * @property {boolean} [preventCloseFromInside=false] - Prevents closing when clicking inside * @property {'open' | 'close'} [defaultState='close'] - Initial state of the overlay */ export declare class CreateOverlay { private triggerElement; private contentElement; private triggerStrategy; private placement; private offsetDistance; private preventFromCloseOutside; private preventFromCloseInside; private options; private defaultState; private popper; private eventEffect; /** * Creates an instance of CreateOverlay * @param {Object} params - The initialization parameters * @param {string | HTMLElement} params.trigger - The trigger element selector or HTMLElement * @param {string | HTMLElement} params.content - The content element selector or HTMLElement * @param {OverlayOptions} [params.options] - Configuration options for the overlay */ constructor({ trigger, content, options }: { trigger: string | HTMLElement; content: string | HTMLElement; options?: OverlayOptions; }); private getElement; private handleDocumentClick; private handleKeyDown; private onToggleState; private toggleStateOnClick; private hideOnMouseLeaseTrigger; private hideOnMouseLeave; private addEventOnMouseEnter; private showOnMouseEnter; /** * Shows the overlay * Positions the overlay, adds event listeners, and triggers related callbacks */ show(): void; /** * Updates the overlay's show options and displays it * @param {Object} params - The show options * @param {Placement} params.placement - The new placement position * @param {number} [params.offsetDistance] - The new offset distance */ setShowOptions: ({ placement, offsetDistance }: { placement: Placement; offsetDistance?: number; }) => void; /** * Updates the popper's positioning options * @param {Object} params - The popper options * @param {Placement} params.placement - The new placement position * @param {number} [params.offsetDistance] - The new offset distance */ setPopperOptions: ({ placement, offsetDistance }: { placement: Placement; offsetDistance?: number; }) => void; /** * Updates the popper's trigger reference Element and options * The new set trigger will be used as reference for the popper */ setPopperTrigger: (trigger: HTMLElement, options: { placement?: Placement; offsetDistance?: number; }) => void; /** * Hides the overlay * Removes event listeners and triggers related callbacks */ hide(): void; private initInstance; /** * Cleans up event listeners and related callbacks */ cleanup: () => void; } declare type Direction = 'top' | 'left' | 'bottom' | 'right'; /** * Configuration options for controlling event-based behaviors */ declare type EventEffect = { /** Disable popover response to scroll events */ disableOnScroll?: boolean; /** Disable popover response to window resize events */ disableOnResize?: boolean; }; /** * Configuration options for the Popover component */ export declare type OverlayOptions = { /** Initial state of the overlay ("open" or "close") */ defaultState?: "open" | "close"; /** Prevent overlay from closing when clicking outside */ preventFromCloseOutside?: boolean; /** Prevent overlay from closing when clicking inside */ preventCloseFromInside?: boolean; /** Position of the overlay relative to its trigger element */ placement?: Placement; /** Distance in pixels between overlay and trigger element */ offsetDistance?: number; /** How the overlay is triggered ("click" or "hover") */ triggerStrategy?: "click" | "hover"; /** Popper-specific configuration */ popper?: { /** Event-related effects configuration */ eventEffect: EventEffect; }; /** Callback function executed before Overlay shows */ beforeShow?: () => void; /** Callback function executed before Overlay hides */ beforeHide?: () => { cancelAction?: boolean; } | void; /** Callback function executed after Overlay shows */ onShow?: () => void; /** Callback function executed after Overlay hides */ onHide?: () => void; /** Callback function executed when Overlay visibility toggles */ onToggle?: ({ isHidden }: { isHidden?: boolean; }) => void; }; export declare type Placement = `${Direction}-${Alignment}` | Direction; export { }