import { ReactNode, ComponentPropsWithRef, ComponentPropsWithoutRef, Ref, FC } from 'react';
import * as pagination from '@zag-js/pagination';
import * as react_jsx_runtime from 'react/jsx-runtime';

interface PaginationProviderProps {
    children: ReactNode;
    /**
     * Total number of data items available across all pages.
     */
    count: number;
    /**
     * Maximum amount of items displayed on a single page.
     */
    pageSize: number;
    /**
     * Number of visible pages (or ellipsis) between previous and next page triggers.
     */
    visiblePageItems?: number;
    /**
     * The current page (active page)
     */
    page?: pagination.Props['page'];
    /**
     * If your pagination contains buttons instead of links, set `type` to `button`, extra attributes will be applied on page items for a11y.
     */
    type?: pagination.Props['type'];
    onPageChange?: pagination.Props['onPageChange'];
    noEllipsis?: boolean;
}

type PaginationProps = PaginationProviderProps & {
    className?: string;
};

interface EllipsisProps extends ComponentPropsWithRef<'span'> {
    index: number;
}
declare const Ellipsis: {
    ({ children, index, className, ref, ...rest }: EllipsisProps): react_jsx_runtime.JSX.Element;
    displayName: string;
};

interface AnchorProps$4 extends ComponentPropsWithoutRef<'a'> {
    href: string;
}
interface ButtonProps$4 extends ComponentPropsWithoutRef<'button'> {
    href?: undefined;
}
type FirstPageTriggerProps = Omit<AnchorProps$4 | ButtonProps$4, 'aria-label'> & {
    'aria-label': string;
    ref?: Ref<HTMLButtonElement>;
};
declare const FirstPageTrigger: {
    ({ children, className, href, ref, ...props }: FirstPageTriggerProps): react_jsx_runtime.JSX.Element;
    displayName: string;
};

interface AnchorProps$3 extends ComponentPropsWithoutRef<'a'> {
    href: string;
}
interface ButtonProps$3 extends ComponentPropsWithoutRef<'button'> {
    href?: undefined;
}
type ItemProps = Omit<AnchorProps$3 | ButtonProps$3, 'aria-label'> & {
    'aria-label': string;
    value: number;
    ref?: Ref<HTMLButtonElement>;
};
declare const Item: {
    ({ children, value, className, href, ref, ...props }: ItemProps): react_jsx_runtime.JSX.Element;
    displayName: string;
};

interface AnchorProps$2 extends ComponentPropsWithoutRef<'a'> {
    href: string;
}
interface ButtonProps$2 extends ComponentPropsWithoutRef<'button'> {
    href?: undefined;
}
type LastPageTriggerProps = Omit<AnchorProps$2 | ButtonProps$2, 'aria-label'> & {
    'aria-label': string;
    ref?: Ref<HTMLButtonElement>;
};
declare const LastPageTrigger: {
    ({ children, className, href, ref, ...props }: LastPageTriggerProps): react_jsx_runtime.JSX.Element;
    displayName: string;
};

interface AnchorProps$1 extends ComponentPropsWithoutRef<'a'> {
    href: string;
}
interface ButtonProps$1 extends ComponentPropsWithoutRef<'button'> {
    href?: undefined;
}
type NextTriggerProps = Omit<AnchorProps$1 | ButtonProps$1, 'aria-label'> & {
    'aria-label': string;
    ref?: Ref<HTMLButtonElement>;
};
declare const NextTrigger: {
    ({ children, className, href, ref, ...props }: NextTriggerProps): react_jsx_runtime.JSX.Element;
    displayName: string;
};

type PageItem = Extract<pagination.Api['pages'][number], {
    type: 'page';
}>;
type TweakedPaginationApi<T extends 'noEllipsis' | ''> = Omit<pagination.Api, 'pages'> & {
    pages: T extends 'noEllipsis' ? PageItem[] : pagination.Api['pages'];
};
interface PagesProps<T extends 'noEllipsis' | ''> {
    children: (pagination: TweakedPaginationApi<T>) => ReactNode;
}
declare const Pages: {
    <T extends "noEllipsis" | "" = "">({ children }: PagesProps<T>): ReactNode;
    displayName: string;
};

interface AnchorProps extends ComponentPropsWithoutRef<'a'> {
    href: string;
}
interface ButtonProps extends ComponentPropsWithoutRef<'button'> {
    href?: undefined;
}
type PrevTriggerProps = Omit<AnchorProps | ButtonProps, 'aria-label'> & {
    'aria-label': string;
    ref?: Ref<HTMLButtonElement>;
};
declare const PrevTrigger: {
    ({ children, className, href, ref, ...props }: PrevTriggerProps): react_jsx_runtime.JSX.Element;
    displayName: string;
};

declare const Pagination: FC<PaginationProps> & {
    PrevTrigger: typeof PrevTrigger;
    NextTrigger: typeof NextTrigger;
    Pages: typeof Pages;
    Item: typeof Item;
    Ellipsis: typeof Ellipsis;
    FirstPageTrigger: typeof FirstPageTrigger;
    LastPageTrigger: typeof LastPageTrigger;
};

export { Pagination };
