/** * TooltipAnimationController * * Controlador centralizado para animaciones de tooltip usando Web Animations API. * * Features: * - Cancelación inmediata de animaciones en hover rápido * - Orquestación de múltiples animaciones simultáneas * - Direction-aware animations (up/down) * - commitStyles() para persistir estados finales * - Promise-based API para sincronización * * @example * ```typescript * const controller = new TooltipAnimationController(); * * await controller.transitionTooltip({ * oldTitleEl: document.querySelector('.old-title'), * newTitleEl: document.querySelector('.new-title'), * oldItemsContainer: document.querySelector('.old-items'), * newItemsContainer: document.querySelector('.new-items'), * heightContainer: document.querySelector('.height-container'), * direction: 'down' * }); * ``` */ export type AnimationDirection = 'up' | 'down'; export interface TooltipTransitionParams { oldTitleEl: HTMLElement | null; newTitleEl: HTMLElement | null; oldItemsContainer: HTMLElement | null; newItemsContainer: HTMLElement | null; heightContainer: HTMLElement | null; direction: AnimationDirection; skipTitleAnimation?: boolean; } export interface AnimationTimings { titleDuration: number; itemExitDuration: number; itemEnterDuration: number; heightDuration: number; itemStaggerDelay: number; heightStartDelay: number; itemEnterStartDelay: number; } export declare class TooltipAnimationController { private currentAnimations; private timings; constructor(customTimings?: Partial); /** * Transición completa del tooltip con todas las animaciones */ transitionTooltip(params: TooltipTransitionParams): Promise; /** * Anima título con crossfade + rotación 3D */ private animateTitleCrossfade; /** * Anima salida de items existentes */ private animateItemsExit; /** * Anima entrada de items nuevos con stagger */ private animateItemsEnter; /** * Anima transición de height (requiere grid trick en CSS) * * Este método solo dispara la transición CSS cambiando el data-state. * El CSS debe tener el grid trick configurado: * * ```css * .tooltip-content-grid { * display: grid; * grid-template-rows: 0fr; * transition: grid-template-rows 200ms; * } * .tooltip-content-grid[data-state="open"] { * grid-template-rows: 1fr; * } * ``` */ private animateHeight; /** * Anima cubo 3D (Enfoque A: multi-cara) */ animateCube(cubeEl: HTMLElement, direction: AnimationDirection, targetFace: string): Animation; /** * Obtiene la rotación actual del cubo desde su data-face */ private getCurrentCubeRotation; /** * Cancela todas las animaciones activas */ cancelAll(): void; /** * Finaliza todas las animaciones inmediatamente (skip to end) */ finishAll(): void; /** * Obtiene el estado actual de las animaciones */ getStatus(): { active: number; finished: number; total: number; }; /** * Actualiza los timings */ updateTimings(newTimings: Partial): void; /** * Obtiene los timings actuales */ getTimings(): AnimationTimings; /** * Destructor - limpia todas las animaciones */ destroy(): void; } export default TooltipAnimationController; //# sourceMappingURL=TooltipAnimationController.d.ts.map