export interface LoadingSession { /** Session start timestamp */ startTime: number; /** Session end timestamp */ endTime?: number; /** Duration in milliseconds */ duration?: number; /** Whether the loading was successful */ success?: boolean; /** Whether the user abandoned (navigated away) */ abandoned?: boolean; } export interface LoadingMetrics { /** Total number of loading sessions */ totalSessions: number; /** Average loading duration in milliseconds */ averageDuration: number; /** Longest loading time in milliseconds */ maxDuration: number; /** Shortest loading time in milliseconds */ minDuration: number; /** Success rate (0-1) */ successRate: number; /** User abandonment rate (0-1) */ abandonmentRate: number; /** All sessions data */ sessions: LoadingSession[]; } export interface AnalyticsOptions { /** Track user interactions during loading */ trackInteractions?: boolean; /** Callback when metrics are updated */ onMetricsUpdate?: (metrics: LoadingMetrics) => void; /** Local storage key for persisting metrics */ storageKey?: string; /** Maximum number of sessions to store */ maxSessions?: number; } export interface UseLoadingAnalyticsReturn { /** Current metrics */ metrics: LoadingMetrics; /** Start tracking a loading session */ startTracking: () => void; /** Stop tracking and mark as success or failure */ stopTracking: (success: boolean) => void; /** Record user abandonment */ recordAbandonment: () => void; /** Clear all metrics */ clearMetrics: () => void; /** Export metrics as JSON */ exportMetrics: () => LoadingMetrics; /** Whether currently tracking */ isTracking: boolean; } /** * useLoadingAnalytics - Track loading performance and user experience * * Monitors loading sessions, calculates performance metrics, and tracks user behavior * like abandonment. Useful for optimizing loading UX and identifying bottlenecks. * * @param options - Configuration options * @returns Metrics and tracking control functions * * @example * ```tsx * function AnalyticsDemo() { * const { * metrics, * startTracking, * stopTracking, * isTracking, * } = useLoadingAnalytics({ * storageKey: 'my-app-loading-metrics', * onMetricsUpdate: (metrics) => { * console.log('Average load time:', metrics.averageDuration, 'ms'); * console.log('Success rate:', (metrics.successRate * 100).toFixed(1), '%'); * }, * }); * * const loadData = async () => { * startTracking(); * try { * await fetchData(); * stopTracking(true); * } catch (error) { * stopTracking(false); * } * }; * * return ( *
*

Total sessions: {metrics.totalSessions}

*

Avg duration: {metrics.averageDuration.toFixed(0)}ms

*

Success rate: {(metrics.successRate * 100).toFixed(1)}%

*
* ); * } * ``` */ export declare function useLoadingAnalytics(options?: AnalyticsOptions): UseLoadingAnalyticsReturn; //# sourceMappingURL=useLoadingAnalytics.d.ts.map