{"version":3,"file":"Pagination.cjs","sources":["../../../../src/components/navigation/pagination/Pagination.tsx"],"sourcesContent":["import type { FC } from 'react'\r\n\r\nimport { Button } from '@components/actions/button'\r\nimport { IconButton } from '@components/actions/icon-button'\r\nimport ChevronLeftIcon from '@resources/asset/ChevronLeftIcon.svg?react'\r\nimport ChevronRightIcon from '@resources/asset/ChevronRightIcon.svg?react'\r\nimport { Flex } from '@components/layout/flex'\r\nimport { usePagination } from '@components/navigation/pagination/hooks/usePagination.hook.ts'\r\nimport { PAGINATION_STYLES } from '@components/navigation/pagination/styles/Pagination.css.ts'\r\nimport type { PaginationProps } from '@components/navigation/pagination/types/Pagination.props.ts'\r\n\r\n/**\r\n * Numbered page navigation rendered as a `<nav>` with Previous/Next icon\r\n * buttons and page buttons with ellipsis truncation. Requires `currentPage`,\r\n * `totalPages`, `onPageChange`, `previousLabel`, and `nextLabel`.\r\n */\r\nconst Pagination: FC<PaginationProps> = ({\r\n    'aria-label': ariaLabel,\r\n    currentPage,\r\n    totalPages,\r\n    onPageChange,\r\n    siblingCount = 1,\r\n    boundaryCount = 1,\r\n    previousLabel,\r\n    nextLabel,\r\n    className,\r\n    ref,\r\n    ...props\r\n}) => {\r\n    const {\r\n        pageItems,\r\n        isFirstPage,\r\n        isLastPage,\r\n        goToPreviousPage,\r\n        goToNextPage,\r\n    } = usePagination({\r\n        currentPage,\r\n        totalPages,\r\n        siblingCount,\r\n        boundaryCount,\r\n        onPageChange,\r\n    })\r\n\r\n    return (\r\n        <Flex\r\n            as={'nav'}\r\n            justifyContent={'center'}\r\n            ref={ref}\r\n            aria-label={ariaLabel}\r\n            className={className}\r\n            {...props}\r\n        >\r\n            <Flex\r\n                as={'ul'}\r\n                alignItems={'center'}\r\n                gap={'xs'}\r\n                className={PAGINATION_STYLES.list}\r\n            >\r\n                <li>\r\n                    <IconButton\r\n                        variant={'ghost'}\r\n                        color={'tertiary'}\r\n                        size={'sm'}\r\n                        icon={ChevronLeftIcon}\r\n                        disabled={isFirstPage}\r\n                        aria-label={previousLabel}\r\n                        onClick={goToPreviousPage}\r\n                    />\r\n                </li>\r\n                {pageItems.map((item, index) =>\r\n                    item === 'ellipsis' ? (\r\n                        <li\r\n                            key={`ellipsis-${index}`}\r\n                            aria-hidden={'true'}\r\n                        >\r\n                            <Flex\r\n                                as={'span'}\r\n                                alignItems={'center'}\r\n                                justifyContent={'center'}\r\n                                className={PAGINATION_STYLES.ellipsis}\r\n                            >\r\n                                ...\r\n                            </Flex>\r\n                        </li>\r\n                    ) : (\r\n                        <li key={item}>\r\n                            <Button\r\n                                variant={'ghost'}\r\n                                color={'primary'}\r\n                                size={'sm'}\r\n                                label={`${item}`}\r\n                                active={item === currentPage}\r\n                                aria-current={\r\n                                    item === currentPage ? 'page' : undefined\r\n                                }\r\n                                aria-label={`${item}`}\r\n                                onClick={() => onPageChange(item)}\r\n                            />\r\n                        </li>\r\n                    ),\r\n                )}\r\n                <li>\r\n                    <IconButton\r\n                        variant={'ghost'}\r\n                        color={'tertiary'}\r\n                        size={'sm'}\r\n                        icon={ChevronRightIcon}\r\n                        disabled={isLastPage}\r\n                        aria-label={nextLabel}\r\n                        onClick={goToNextPage}\r\n                    />\r\n                </li>\r\n            </Flex>\r\n        </Flex>\r\n    )\r\n}\r\n\r\nPagination.displayName = 'Pagination'\r\n\r\nexport default Pagination\r\n"],"names":["Pagination","ariaLabel","currentPage","totalPages","onPageChange","siblingCount","boundaryCount","previousLabel","nextLabel","className","ref","props","pageItems","isFirstPage","isLastPage","goToPreviousPage","goToNextPage","usePagination","jsx","Flex","jsxs","PAGINATION_STYLES","IconButton","ChevronLeftIcon","item","index","Button","ChevronRightIcon"],"mappings":"ukBAgBMA,EAAkC,CAAC,CACrC,aAAcC,EACd,YAAAC,EACA,WAAAC,EACA,aAAAC,EACA,aAAAC,EAAe,EACf,cAAAC,EAAgB,EAChB,cAAAC,EACA,UAAAC,EACA,UAAAC,EACA,IAAAC,EACA,GAAGC,CACP,IAAM,CACF,KAAM,CACF,UAAAC,EACA,YAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,aAAAC,CAAA,EACAC,gBAAc,CACd,YAAAf,EACA,WAAAC,EACA,aAAAE,EACA,cAAAC,EACA,aAAAF,CAAA,CACH,EAED,OACIc,EAAAA,IAACC,EAAA,CACG,GAAI,MACJ,eAAgB,SAChB,IAAAT,EACA,aAAYT,EACZ,UAAAQ,EACC,GAAGE,EAEJ,SAAAS,EAAAA,KAACD,EAAA,CACG,GAAI,KACJ,WAAY,SACZ,IAAK,KACL,UAAWE,EAAAA,kBAAkB,KAE7B,SAAA,CAAAH,MAAC,KAAA,CACG,SAAAA,EAAAA,IAACI,EAAA,CACG,QAAS,QACT,MAAO,WACP,KAAM,KACN,KAAMC,EACN,SAAUV,EACV,aAAYN,EACZ,QAASQ,CAAA,CAAA,EAEjB,EACCH,EAAU,IAAI,CAACY,EAAMC,IAClBD,IAAS,WACLN,EAAAA,IAAC,KAAA,CAEG,cAAa,OAEb,SAAAA,EAAAA,IAACC,EAAA,CACG,GAAI,OACJ,WAAY,SACZ,eAAgB,SAChB,UAAWE,EAAAA,kBAAkB,SAChC,SAAA,KAAA,CAAA,CAED,EAVK,YAAYI,CAAK,EAAA,QAazB,KAAA,CACG,SAAAP,EAAAA,IAACQ,EAAA,CACG,QAAS,QACT,MAAO,UACP,KAAM,KACN,MAAO,GAAGF,CAAI,GACd,OAAQA,IAAStB,EACjB,eACIsB,IAAStB,EAAc,OAAS,OAEpC,aAAY,GAAGsB,CAAI,GACnB,QAAS,IAAMpB,EAAaoB,CAAI,CAAA,CAAA,GAX/BA,CAaT,CAAA,QAGP,KAAA,CACG,SAAAN,EAAAA,IAACI,EAAA,CACG,QAAS,QACT,MAAO,WACP,KAAM,KACN,KAAMK,EACN,SAAUb,EACV,aAAYN,EACZ,QAASQ,CAAA,CAAA,CACb,CACJ,CAAA,CAAA,CAAA,CACJ,CAAA,CAGZ,EAEAhB,EAAW,YAAc"}