web-ui-pack
Version:
Web package with UI elements
86 lines (85 loc) • 3.86 kB
TypeScript
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;
}