import { cx } from '@fuel-ui/css'; import { createContext, useContext } from 'react'; import { createComponent } from '../../utils'; import type { StackProps } from '../Box/Stack'; import { Stack } from '../Box/Stack'; import type { ButtonProps } from '../Button'; import { Focus } from '../Focus'; import { PaginationItems } from './PaginationItems'; import { PaginationNext } from './PaginationNext'; import { PaginationPrev } from './PaginationPrev'; import type { UsePaginationOpts, UsePaginationReturn } from './usePagination'; import { usePagination } from './usePagination'; // ---------------------------------------------------------------------------- // Context // ---------------------------------------------------------------------------- type Context = UsePaginationReturn & PaginationBaseProps; const ctx = createContext({} as Context); export function usePaginationContext() { return useContext(ctx); } // ---------------------------------------------------------------------------- // Component // ---------------------------------------------------------------------------- export type PaginationBaseProps = UsePaginationOpts & { autoFocus?: boolean; variant?: ButtonProps['variant']; color?: ButtonProps['color']; size?: ButtonProps['size']; }; export type PaginationProps = StackProps & PaginationBaseProps; type ObjProps = { Items: typeof PaginationItems; Next: typeof PaginationNext; Prev: typeof PaginationPrev; }; /** * Pagination component. * @param autoFocus Whether to focus on the first item. * @param variant The variant of pagination (same as Button). * @param color The color of pagination (same as Button). * @param size The size of pagination (same as Button). * @example * * * * * */ export const Pagination = createComponent( ({ children, className, as, variant = 'outlined', color, size = 'sm', pagesCount, pagesToDisplay = 6, onPageChange, initialState, autoFocus, ...props }) => { const classes = cx('fuel_Pagination', className); const pagination = usePagination({ pagesCount, pagesToDisplay, onPageChange, initialState, }); return ( {children} ); }, ); Pagination.Items = PaginationItems; Pagination.Next = PaginationNext; Pagination.Prev = PaginationPrev;