UNPKG

web-ui-pack

Version:
86 lines (85 loc) 3.86 kB
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; }