/** * Eventos de swipe suportados. * @typedef {('SWIPE_UP'|'SWIPE_DOWN'|'SWIPE_LEFT'|'SWIPE_RIGHT')} SwipeEvent */ export type SwipeEvent = 'SWIPE_UP' | 'SWIPE_DOWN' | 'SWIPE_LEFT' | 'SWIPE_RIGHT'; /** * Tipo de callback para eventos de swipe. * @typedef {Function} SwipeCallback * @param {unknown} [data] - Dados opcionais passados ao callback * @returns {void} */ export type SwipeCallback = (data?: unknown) => void; /** * UniversalSwipe - Detecção de gestos de swipe com suporte universal. * * Estratégia de detecção (prioridade): * 1. Pointer Events - API moderna universal (Chrome 55+, Firefox 59+, Safari 13+, Edge 12+) * 2. Touch Events - Fallback para dispositivos móveis sem Pointer Events * 3. Mouse Events - Fallback para navegadores antigos * * Compatibilidade: * - ✅ Firefox Desktop (mouse events) * - ✅ Chrome Desktop/Mobile (pointer/touch events) * - ✅ Safari Desktop/Mobile (pointer/touch events) * - ✅ Edge (pointer events) * - ✅ Navegadores antigos (touch/mouse events) * */ export declare class UniversalSwipe { /** * Mapa de eventos e seus callbacks. */ private evtMap; /** * Posição inicial do gesto. */ private startPoint; /** * Elemento alvo do swipe. */ private element; /** * Tipo de evento sendo usado (pointer, touch ou mouse). */ private eventType; /** * Flag indicando se o gesto está ativo. */ private isActive; /** * Pointer ID para captura de eventos (usado com Pointer Events). */ private pointerId; /** * Limiar mínimo de movimento para detectar swipe (em pixels). */ private readonly threshold; /** * Direção do swipe esperado ('horizontal' | 'vertical' | 'both'). */ private swipeDirection; /** * Bound handlers para remoção de listeners. */ private boundHandleStart; private boundHandleEnd; private boundHandleCancel; /** * Cria uma nova instância de UniversalSwipe. * @constructor * @param {HTMLElement} element - Elemento HTML que receberá os gestos de swipe * @param {Object} [options] - Opções de configuração * @param {'horizontal'|'vertical'|'both'} [options.direction='both'] - Direção do swipe a ser detectado */ constructor(element: HTMLElement, options?: { direction?: 'horizontal' | 'vertical' | 'both'; }); /** * Aplica CSS touch-action para prevenir gestos nativos do browser. * Usa 'pan-y' para permitir scroll vertical enquanto detecta swipes horizontais. * Usa 'pan-x' para permitir scroll horizontal enquanto detecta swipes verticais. * @private * @returns {void} */ private applyCSSFix; /** * Detecta qual tipo de evento usar e anexa os listeners apropriados. * Estratégia: Prioriza Pointer Events (universal), depois Touch, depois Mouse. * @private * @returns {void} */ private detectAndAttachListeners; /** * Remove todos os event listeners do elemento. * @private * @returns {void} */ private detachListeners; /** * Adiciona listeners de mouse ao document (necessário para rastrear fora do elemento). * @private * @returns {void} */ private addDocumentMouseListeners; /** * Remove listeners de mouse do document. * @private * @returns {void} */ private removeDocumentMouseListeners; /** * Extrai coordenadas do evento independente do tipo. * @private * @param {PointerEvent|TouchEvent|MouseEvent} evt - Evento de pointer, touch ou mouse * @returns {Point} Coordenadas {x, y} do evento */ private getCoordinates; /** * Handler do início do gesto (pointerdown, touchstart, mousedown). * @private * @param {PointerEvent|TouchEvent|MouseEvent} evt - Evento do browser * @returns {void} */ private handleStart; /** * Handler do fim do gesto (pointerup, touchend, mouseup). * @private * @param {PointerEvent|TouchEvent|MouseEvent} evt - Evento do browser * @returns {void} */ private handleEnd; /** * Handler de cancelamento do gesto (pointercancel, touchcancel, mouseleave). * @private * @param {PointerEvent|TouchEvent|MouseEvent} _evt - Evento do browser (não utilizado) * @returns {void} */ private handleCancel; /** * Limpa o estado do gesto e remove listeners temporários. * @private * @returns {void} */ private cleanup; /** * Registra um callback para um evento de swipe. * @param evt - Nome do evento ('SWIPE_UP', 'SWIPE_DOWN', 'SWIPE_LEFT', 'SWIPE_RIGHT') * @param cb - Função callback a ser executada quando o evento ocorrer */ on(evt: SwipeEvent, cb: SwipeCallback): void; /** * Remove um callback de um evento de swipe. * @param evt - Nome do evento * @param cb - Função callback a ser removida */ off(evt: SwipeEvent, cb: SwipeCallback): void; /** * Dispara um evento de swipe, executando todos os callbacks registrados. * @private * @param {SwipeEvent} evt - Nome do evento a ser disparado * @param {unknown} [data] - Dados opcionais a serem passados aos callbacks * @returns {void} */ private trigger; /** * Destrói a instância, removendo todos os event listeners. * Deve ser chamado quando o elemento for removido do DOM. * Remove o CSS touch-action aplicado no construtor. * @public * @returns {void} * @example * ```typescript * disconnectedCallback() { * this.swipe?.destroy(); * } * ``` */ destroy(): void; } export default UniversalSwipe;