import { Emoji } from 'eris'; import type { BaseContext } from '../../contexts/BaseContext'; import type { AgnosticMessageContent } from '../../interfaces/AgnosticMessageContent'; import { PossiblyTranslatable } from '../../interfaces/Translatable'; export interface PaginatorItem { label: PossiblyTranslatable; value?: T; description?: PossiblyTranslatable; emoji?: Partial; match?: Array; } /** * Returns item at requested index * @param index - The index * @returns [T, number] Tuple containing item, and count of total items */ export declare type PaginatorItemFunction = () => Promise>; export declare type PaginatorItems = Array | PaginatorItemFunction; export interface PaginatorOptions { /** How many items per page */ itemsPerPage?: number; /** Index of item that should be focused on open */ focused?: number; } export interface PaginatorPageItem { item: T; index: number; } export declare type PaginatorPage = Array>; export declare abstract class Paginator { protected readonly ctx: BaseContext; protected readonly items: PaginatorItems; protected itemCount: number; protected currentPage: number; readonly options: PaginatorOptions; constructor(ctx: BaseContext, items: PaginatorItems, options?: PaginatorOptions); get page(): number; set page(page: number); get pageCount(): number; get hasNext(): boolean; get hasPrev(): boolean; /** * Get item at given index * @param index Index * @returns PaginatorPageItem */ getItem(index: number): Promise>; getItems(page?: number): Promise>>; abstract render(): Promise; }