import { IScrollOptions } from "./onScroll";
declare global {
    namespace WUP.Scrolled {
        interface State {
            /** Page index/value */
            index: number;
            /** Items related to page */
            items: HTMLElement[];
        }
        /** @index index of current/centered page, renderIndex - index of page the will be added */
        interface NextStateRender extends State {
            /** Index of added/rendered page; */
            renderIndex: number;
        }
        interface Options extends IScrollOptions {
            /** Scroll to target of click event;
             * @defaultValue false */
            scrollByClick?: boolean;
            /** Called when got click on the same item related to current page */
            onClickSkip?: (e: MouseEvent) => void;
            /** Page options; skip this if rendering on init doesn't required  */
            pages?: {
                /** Current page index */
                current: number;
                /** Total count of pages; skip this for infinite-scroll */
                total?: number;
                /** Whether scrolling must be cycled: when `pageIndex < 0 || pageIndex > last` */
                cycled?: boolean;
                /** Visible/rendered pages together with current page;
                 * @tutorial
                 * if it's pointed then provide rendering empty-item for pageIndex < 0
                 * @see {@link onRender} */
                before?: number;
                /** Visible/rendered pages together with current page;
                 * @tutorial if pointed `after` & `total` & missed `cycled` then provide rendering empty-item for pageIndex > last
                 * @see {@link onRender} */
                after?: number;
            };
            /** Render callback that must return new items or null if it's ended up
             * @param dir render direction: `1`-next, `-1`-prev
             * @param ind rendered page index
             * @param prev previous/current pageState
             * @param next next/expected pageState */
            onRender: (dir: number, ind: number, prev: State, next: State) => HTMLElement[] | null;
        }
    }
}
/** Makes pointed element as scrollable-carousel */
export default class WUPScrolled {
    #private;
    protected el: HTMLElement;
    options: WUP.Scrolled.Options;
    /** Current/centered page */
    state: WUP.Scrolled.State;
    /** All rendered pages */
    pages: WUP.Scrolled.State[];
    /** @param el target to that custom scroll must be applied */
    constructor(el: HTMLElement, options: WUP.Scrolled.Options);
    init(): void;
    /** Called on keydown event and processed if event isn't prevented */
    protected gotKeyDown(e: KeyboardEvent): void;
    /** Called on click event */
    protected gotClick(e: MouseEvent): void;
    /** Get next page according to options.pages */
    incrementPage(pIndex: number, inc: number, allowOverflow?: boolean): number;
    /** Set maxHeight, maxWidth otherwise new items affects on scroll-appearance */
    protected tryFixSize(): void;
    /** Returns nearest way between prev & next if cycled */
    getNearest(prev: number, next: number, total: number): {
        isForward: boolean;
        count: number;
    };
    /** Go to next/prev pages */
    goTo(isNext: boolean, smooth?: boolean): Promise<void>;
    /** Go to specific page */
    goTo(pageIndex: number, smooth?: boolean): Promise<void>;
    /** Returns function to restore scroll position related to elements */
    saveScroll(): () => void;
    /** Scroll to center of pointed items */
    scrollToRange(isSmooth: true, items: HTMLElement[]): Promise<void>;
    scrollToRange(isSmooth: false, items: HTMLElement[]): void;
    protected disposeLst: Array<() => void>;
    /** Remove event listeners */
    dispose(): void;
}
