/** * Content Engagement Tracking * * Tracks how users engage with content: scroll depth, time on page, copy events, session lifecycle. * Philosophy: Understand what content resonates without being invasive. * * @packageDocumentation */ import type { AnalyticsClient } from './client.js'; interface SessionTrackerOptions { /** Emit session_start event on initialization (default: true) */ emitSessionStart?: boolean; } /** * Creates a session lifecycle tracker with accurate active time measurement. * * Tracks cumulative active time by pausing when the tab is hidden and resuming * when visible. Reports session_end with activeTimeSeconds on page unload. * * Philosophy: Wall clock time doesn't reflect engagement. Active time does. */ export declare function createSessionTracker(client: AnalyticsClient, options?: SessionTrackerOptions): () => void; interface ScrollTrackerOptions { thresholds?: number[]; throttleMs?: number; } /** * Creates a scroll depth tracker that reports when users reach depth milestones. * Uses IntersectionObserver for performance. */ export declare function createScrollTracker(client: AnalyticsClient, options?: ScrollTrackerOptions): () => void; interface TimeTrackerOptions { /** Intervals in seconds to report (default: [30, 60, 120, 300]) */ intervals?: number[]; /** Track active time only (pauses when tab hidden) */ activeOnly?: boolean; } /** * Creates a time-on-page tracker that reports engagement duration. * Pauses when tab is hidden if activeOnly is true. */ export declare function createTimeTracker(client: AnalyticsClient, options?: TimeTrackerOptions): () => void; /** * Creates a tracker for text copy events. */ export declare function createCopyTracker(client: AnalyticsClient): () => void; /** * Creates a tracker for internal content link clicks. * Useful for understanding content navigation patterns. */ export declare function createLinkTracker(client: AnalyticsClient, options?: { /** Selector for content area (default: 'main') */ contentSelector?: string; /** Only track internal links (default: true) */ internalOnly?: boolean; }): () => void; export interface EngagementTrackerOptions { scroll?: ScrollTrackerOptions | false; time?: TimeTrackerOptions | false; copy?: boolean; links?: { contentSelector?: string; internalOnly?: boolean; } | false; } /** * Creates a combined engagement tracker with all content metrics. */ export declare function createEngagementTracker(client: AnalyticsClient, options?: EngagementTrackerOptions): () => void; export {};