declare module 'scrollreveal' {
    interface ScrollRevealObject {
        reveal(target: HTMLElement | NodeListOf<Element> | string, options?: ScrollRevealOptions): ScrollRevealObject;
        sync(): ScrollRevealObject;
        clean(target: HTMLElement | NodeListOf<Element> | string): ScrollRevealObject;
        destroy(): void;
    }

    interface ScrollRevealOptions {
        origin?: 'top' | 'bottom' | 'left' | 'right';
        distance?: string;
        duration?: number;
        delay?: number | ((element: HTMLElement) => number);
        rotate?: { x?: number; y?: number; z?: number };
        opacity?: number;
        scale?: number;
        easing?: string;
        reset?: boolean;
        mobile?: boolean;
        useDelay?: 'always' | 'once' | 'onload';
        viewFactor?: number;
        viewOffset?: { top?: number; right?: number; bottom?: number; left?: number };
        beforeReveal?: (element: HTMLElement) => void;
        afterReveal?: (element: HTMLElement) => void;
        beforeReset?: (element: HTMLElement) => void;
        afterReset?: (element: HTMLElement) => void;
    }

    function ScrollReveal(options?: ScrollRevealOptions): ScrollRevealObject;
    export default ScrollReveal;
}

