{"version":3,"file":"Pagination.cjs","sources":["../../../../src/components/pagination/Pagination.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { useEffect } from \"react\";\nimport type { PolymorphicRef } from \"../../utilities/polymorphism/polymorphism.js\";\nimport { IconButton } from \"../icon-button/IconButton.js\";\nimport { ChevronLeftIcon } from \"../icon/icons/ChevronLeftIcon.js\";\nimport { ChevronRightIcon } from \"../icon/icons/ChevronRightIcon.js\";\nimport { PageButton } from \"./PageButton.js\";\nimport type { PaginationProps } from \"./types.js\";\n\ntype PaginationComponent = <ElementType extends React.ElementType = \"nav\">(\n    props: PaginationProps<ElementType>,\n) => React.ReactElement | null;\n\nexport const Pagination = React.forwardRef(function Pagination<\n    ElementType extends React.ElementType = \"nav\",\n>(\n    {\n        onPageChange,\n        currentPage,\n        numberOfPages,\n        labels = {\n            previous: \"Forrige side\",\n            next: \"Neste side\",\n        },\n        as,\n        className,\n        ...rest\n    }: PaginationProps<ElementType>,\n    ref?: PolymorphicRef<ElementType>,\n) {\n    useEffect(() => {\n        if (currentPage < 1) {\n            console.error(\n                \"[Pagination]: currentPage prop should be set to a value larger than 0\",\n            );\n        }\n        if (currentPage > numberOfPages) {\n            console.error(\n                \"[Pagination]: currentPage prop should not be set to a value larger than numberOfPages\",\n            );\n        }\n    }, [currentPage, numberOfPages]);\n\n    const Component = as || \"nav\";\n\n    if (numberOfPages <= 7) {\n        return (\n            <Component\n                ref={ref}\n                {...rest}\n                className={clsx(\"jkl-pagination\", className)}\n            >\n                <IconButton\n                    className=\"jkl-pagination-button\"\n                    title={labels.previous}\n                    onClick={() => onPageChange(currentPage - 1, currentPage)}\n                    aria-disabled={currentPage === 1}\n                    tabIndex={currentPage === 1 ? -1 : 0}\n                >\n                    <ChevronLeftIcon />\n                </IconButton>\n                <ol className=\"jkl-pagination__pages\">\n                    {Array.from({ length: numberOfPages }).map((_, index) => {\n                        const page = index + 1;\n                        return (\n                            <PageButton\n                                key={index}\n                                isActive={currentPage === page}\n                                number={page}\n                                total={numberOfPages}\n                                onClick={() => onPageChange(page, currentPage)}\n                            />\n                        );\n                    })}\n                </ol>\n                <IconButton\n                    className=\"jkl-pagination-button\"\n                    title={labels.next}\n                    onClick={() => onPageChange(currentPage + 1, currentPage)}\n                    aria-disabled={currentPage === numberOfPages}\n                    tabIndex={currentPage === numberOfPages ? -1 : 0}\n                >\n                    <ChevronRightIcon />\n                </IconButton>\n            </Component>\n        );\n    }\n\n    const showStartEllipsis = currentPage > 4;\n    const showEndEllipsis = currentPage < numberOfPages - 3;\n\n    const startEllipsis = Math.min(\n        Math.max(currentPage - 2, 2),\n        numberOfPages - 5,\n    );\n    const centerPageNumberStart = Math.min(\n        startEllipsis + 1,\n        numberOfPages - 4,\n    );\n    const centerPageNumber = Math.min(\n        centerPageNumberStart + 1,\n        numberOfPages - 3,\n    );\n    const centerPageNumberEnd = Math.min(\n        centerPageNumberStart + 2,\n        numberOfPages - 2,\n    );\n    const endEllipsis = Math.min(centerPageNumberStart + 3, numberOfPages - 1);\n\n    return (\n        <Component ref={ref} {...rest} className=\"jkl-pagination\">\n            <IconButton\n                className=\"jkl-pagination-button\"\n                title={labels.previous}\n                onClick={() => onPageChange(currentPage - 1, currentPage)}\n                aria-disabled={currentPage === 1}\n                tabIndex={currentPage === 1 ? -1 : 0}\n            >\n                <ChevronLeftIcon />\n            </IconButton>\n            <ol className=\"jkl-pagination__pages\">\n                <PageButton\n                    isActive={currentPage === 1}\n                    number={1}\n                    total={numberOfPages}\n                    onClick={() => onPageChange(1, currentPage)}\n                />\n                {showStartEllipsis ? (\n                    <span\n                        aria-hidden\n                        className=\"jkl-pagination-button--elipsis\"\n                    >\n                        {\"...\"}\n                    </span>\n                ) : (\n                    <PageButton\n                        isActive={currentPage === startEllipsis}\n                        number={startEllipsis}\n                        total={numberOfPages}\n                        onClick={() => onPageChange(startEllipsis, currentPage)}\n                    />\n                )}\n                <PageButton\n                    isActive={currentPage === centerPageNumberStart}\n                    number={centerPageNumberStart}\n                    total={numberOfPages}\n                    onClick={() =>\n                        onPageChange(centerPageNumberStart, currentPage)\n                    }\n                />\n                <PageButton\n                    isActive={currentPage === centerPageNumber}\n                    number={centerPageNumber}\n                    total={numberOfPages}\n                    onClick={() => onPageChange(centerPageNumber, currentPage)}\n                />\n                <PageButton\n                    isActive={currentPage === centerPageNumberEnd}\n                    number={centerPageNumberEnd}\n                    total={numberOfPages}\n                    onClick={() =>\n                        onPageChange(centerPageNumberEnd, currentPage)\n                    }\n                />\n                {showEndEllipsis ? (\n                    <span\n                        aria-hidden\n                        className=\"jkl-pagination-button--elipsis\"\n                    >\n                        {\"...\"}\n                    </span>\n                ) : (\n                    <PageButton\n                        isActive={currentPage === endEllipsis}\n                        number={endEllipsis}\n                        total={numberOfPages}\n                        onClick={() => onPageChange(endEllipsis, currentPage)}\n                    />\n                )}\n                <PageButton\n                    isActive={currentPage === numberOfPages}\n                    number={numberOfPages}\n                    total={numberOfPages}\n                    onClick={() => onPageChange(numberOfPages, currentPage)}\n                />\n            </ol>\n            <IconButton\n                className=\"jkl-pagination-button\"\n                title={labels.next}\n                onClick={() => onPageChange(currentPage + 1, currentPage)}\n                aria-disabled={currentPage === numberOfPages}\n                tabIndex={currentPage === numberOfPages ? -1 : 0}\n            >\n                <ChevronRightIcon />\n            </IconButton>\n        </Component>\n    );\n}) as PaginationComponent;\n"],"names":["Pagination","React","forwardRef","onPageChange","currentPage","numberOfPages","labels","previous","next","as","className","rest","ref","useEffect","console","error","Component","jsxs","clsx","children","jsx","IconButton","title","onClick","tabIndex","ChevronLeftIcon","from","length","map","_","index","page","PageButton","isActive","number","total","ChevronRightIcon","showStartEllipsis","showEndEllipsis","startEllipsis","Math","min","max","centerPageNumberStart","centerPageNumber","centerPageNumberEnd","endEllipsis"],"mappings":"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"}