/**
 * The object form of a page-size option, allowing a custom display label (e.g. "All").
 * Use `value: -1` to represent "show all items on a single page".
 */
export type VegaPaginationPageSizeLabeledOption = { value: number; label: string };

/**
 * Represents a single page-size option.
 *
 * - A plain `number` uses that number as both the value and the display label.
 * - An object with `value` and `label` allows a custom display label (e.g. "All").
 *   Use `value: -1` to represent "show all items on a single page".
 */
export type VegaPaginationPageSizeOption = number | VegaPaginationPageSizeLabeledOption;

/**
 * Identifies the various UI pieces that can appear in the pagination
 * component's item list.
 */
export type VegaPaginationItemType =
	| 'currentPageLabel'
	| 'pageSizeSelector'
	| 'pageSelector'
	| 'goTo'
	| 'pageSelectorMobile'
	| 'pageSizeSelectorMobile'
	| 'pageSelectorMobile_goTo'
	| 'pageSizeSelectorMobile_currentPageLabel';

/**
 * Additional dropdown properties that may be toggled when the pagination
 * component displays a dropdown.
 */
export type DropdownPropsForPagination = Partial<Pick<HTMLVegaDropdownElement, 'isScreenPosition'>>;

/**
 * Layout orientation options for the pagination component.
 */
export type VegaPaginationLayoutType = 'horizontal' | 'vertical';
