declare interface ButtonClickEvent { elementId: string | null; element: HTMLElement; } declare interface ContactCapturedEvent { data: Record; } export declare function createTracker(options?: TrackerOptions): Tracker; declare interface ElementVisibleEvent { elementId: string; element: HTMLElement; } /** * Why: os três bundles do SDK (forms, tracking, routing) coexistem na mesma * página sem se conhecerem. O bus desacopla "quem detecta DOM" (collectors em * tracking/listeners/*) de "quem reage" (router de funnel em routing/, plugins * de pixel em tracking/plugins/*). * * Dois canais de entrega intencionais: * - `listeners`: assinantes tipados por evento (TrackingEventMap) — uso interno * do SDK, ex.: routing escuta `button_click`/`scroll` para resolver redirects. * - `plugins`: catch-all que recebe TODOS os eventos — usado por integrações * 3rd-party (Facebook Pixel etc.) que precisam observar o fluxo inteiro sem * listar cada tipo manualmente. */ export declare class EventBus { private listeners; private plugins; on(type: K, handler: EventHandler): void; on(type: string, handler: EventHandler): void; off(type: K, handler: EventHandler): void; off(type: string, handler: EventHandler): void; once(type: K, handler: EventHandler): void; once(type: string, handler: EventHandler): void; emit(type: K, data: TrackingEventMap[K]): void; emit(type: string, data: unknown): void; registerPlugin(plugin: TrackingPlugin): () => void; destroy(): void; } declare type EventHandler = (data: T) => void; export declare function facebookPixel(): TrackingPlugin; declare interface FormSubmitEvent { formId: string | null; } export declare function initTracking(): void; declare interface LinkClickEvent { elementId: string | null; element: HTMLElement; } declare interface PageViewEvent { url: string; } declare interface PurchaseEvent { value?: number; currency?: string; } declare interface ScrollEvent { percentage: number; } export declare interface Tracker { bus: EventBus; on: EventBus['on']; off: EventBus['off']; once: EventBus['once']; init(): void; destroy(): void; } export declare interface TrackerOptions { clicks?: boolean; forms?: boolean; scroll?: { thresholds?: number[]; } | boolean; visibility?: boolean; messages?: boolean; plugins?: TrackingPlugin[]; bus?: EventBus; } export declare interface TrackingEventMap { button_click: ButtonClickEvent; link_click: LinkClickEvent; scroll: ScrollEvent; form_submit: FormSubmitEvent; page_view: PageViewEvent; element_visible: ElementVisibleEvent; contact_captured: ContactCapturedEvent; purchase: PurchaseEvent; initiate_checkout: Record; } export declare interface TrackingPlugin { name: string; init?(): void; onEvent(type: string, data: unknown): void; destroy?(): void; } export { }