UNPKG

react-visibility-tracking-hooks

Version:
50 lines (49 loc) 1.84 kB
/// <reference types="node" /> /// <reference types="node" /> export interface Offset { top?: number; left?: number; bottom?: number; right?: number; } export interface VisibilityRect { top: number; left: number; bottom: number; right: number; } export interface VisibilityPercent { verticalPercent: number; horizontalPercent: number; overallPercent: number; } export interface VisibilityObject { rect: ClientRect | DOMRect | null; isVisible: boolean; percentVisible: VisibilityPercent; } export declare type RefCallback = (node: HTMLElement | null) => void; interface EventListenerInfo { eventListenerFn: () => void; getTimeout: () => NodeJS.Timeout | null; } interface EventListeners { scroll?: EventListenerInfo; resize?: EventListenerInfo; } export declare type ObservedEvent = keyof EventListeners; export interface VisibilityTrackingProps { onVisibilityChange?: (isVisible: boolean, percentVisible: VisibilityPercent) => any; partiallyVisible?: boolean | keyof VisibilityRect; scrollCheck?: boolean; scrollDelay?: number; scrollThrottleLimit?: number; resizeCheck?: boolean; resizeDelay?: number; resizeThrottleLimit?: number; minElementOffset?: Offset; } export declare function checkIsVisible(nodeRect: VisibilityRect, containmentRect: VisibilityRect, minElementOffset: Offset, partiallyVisible: boolean | keyof VisibilityRect): boolean; export declare function computePercentVisible(nodeRect: VisibilityRect, containmentRect: VisibilityRect): VisibilityPercent; declare function useVisibilityTracking({ onVisibilityChange, partiallyVisible, scrollCheck, scrollThrottleLimit, resizeCheck, resizeThrottleLimit, minElementOffset, }?: VisibilityTrackingProps): [RefCallback, VisibilityObject]; export default useVisibilityTracking;