import type { Tooltip as ITooltip } from '../../../../types/api'; import type { ModuleConfig } from '../../../types-internal/module-config'; import { Module } from '../../__module'; import type { TooltipOptions, TooltipContent } from '../../utils/tooltip'; import { hide, onHover, show } from '../../utils/tooltip'; /** * @class TooltipAPI * @classdesc Tooltip API */ export class TooltipAPI extends Module { /** * @class * @param moduleConfiguration - Module Configuration * @param moduleConfiguration.config - Blok's config * @param moduleConfiguration.eventsDispatcher - Blok's event dispatcher */ constructor({ config, eventsDispatcher }: ModuleConfig) { super({ config, eventsDispatcher, }); } /** * Available methods */ public get methods(): ITooltip { return { show: (element: HTMLElement, content: TooltipContent, options?: TooltipOptions ): void => this.show(element, content, options), hide: (): void => this.hide(), onHover: (element: HTMLElement, content: TooltipContent, options?: TooltipOptions ): void => this.onHover(element, content, options), }; } /** * Method show tooltip on element with passed HTML content * @param {HTMLElement} element - element on which tooltip should be shown * @param {TooltipContent} content - tooltip content * @param {TooltipOptions} options - tooltip options */ public show(element: HTMLElement, content: TooltipContent, options?: TooltipOptions): void { show(element, content, options); } /** * Method hides tooltip on HTML page */ public hide(): void { hide(); } /** * Decorator for showing Tooltip by mouseenter/mouseleave * @param {HTMLElement} element - element on which tooltip should be shown * @param {TooltipContent} content - tooltip content * @param {TooltipOptions} options - tooltip options */ public onHover(element: HTMLElement, content: TooltipContent, options?: TooltipOptions): void { onHover(element, content, options); } }