import { ComputedRef, MaybeRef } from 'vue'; import { Nullable } from '../../types'; /** * Shared event listener status enum used by all event listener composables */ export declare enum EventListenerStatus { NotAttached = "not-attached", Attached = "attached", Error = "error" } /** * Adapter functions for attaching/detaching events on different target types */ export interface EventListenerAdapter { attach: (target: TTarget, event: string, handler: (...args: any[]) => void) => void; detach: (target: TTarget, event: string, handler: (...args: any[]) => void) => void; /** Optional validation before attaching (e.g., hasLayer check) */ validate?: (target: TTarget) => boolean; } export interface EventListenerConfig { target: MaybeRef>; event: string; on: (...args: any[]) => void; debug?: boolean; once?: boolean; adapter: EventListenerAdapter; /** Additional reactive dependencies that trigger re-evaluation */ extraDeps?: () => any[]; } export interface EventListenerActions { removeListener: () => void; attachListener: () => void; isListenerAttached: ComputedRef; listenerStatus: ComputedRef; } /** * Generic factory for creating event listener composables. * Handles: status tracking, watchEffect lifecycle, onUnmounted cleanup, idempotent removal. * * @param config - Event listener configuration * @returns Actions and state for the event listener */ export declare function createEventListenerComposable(config: EventListenerConfig): EventListenerActions;