{"version":3,"file":"utils.cjs","sources":["../../src/Pagination/utils.ts"],"sourcesContent":["// reference https://github.com/chakra-ui/zag/blob/main/packages/machines/pagination/src/pagination.utils.ts\n\ntype Pages = Array<{ type: 'ellipsis' } | { type: 'page', value: number }>\n\nfunction range(start: number, end: number) {\n const length = end - start + 1\n return Array.from({ length }, (_, idx) => idx + start)\n}\n\nexport function transform(items: (string | number)[]): Pages {\n return items.map((value) => {\n if (typeof value === 'number')\n return { type: 'page', value }\n return { type: 'ellipsis' }\n })\n}\n\nconst ELLIPSIS = 'ellipsis'\n\nexport function getRange(currentPage: number, pageCount: number, siblingCount: number, showEdges: boolean) {\n const firstPageIndex = 1\n const lastPageIndex = pageCount\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, firstPageIndex)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, lastPageIndex)\n\n if (showEdges) {\n /**\n * `2 * siblingCount + 5` explanation:\n * 2 * siblingCount for left/right siblings\n * 5 for 2x left/right ellipsis, 2x first/last page + 1x current page\n *\n * For some page counts (e.g. totalPages: 8, siblingCount: 2),\n * calculated max page is higher than total pages,\n * so we need to take the minimum of both.\n */\n const totalPageNumbers = Math.min(2 * siblingCount + 5, pageCount)\n\n const itemCount = totalPageNumbers - 2 // 2 stands for one ellipsis and either first or last page\n\n const showLeftEllipsis\n // default condition\n = leftSiblingIndex > firstPageIndex + 2\n // if the current page is towards the end of the list\n && Math.abs(lastPageIndex - itemCount - firstPageIndex + 1) > 2\n // if the current page is towards the middle of the list\n && Math.abs(leftSiblingIndex - firstPageIndex) > 2\n\n const showRightEllipsis\n // default condition\n = rightSiblingIndex < lastPageIndex - 2\n // if the current page is towards the start of the list\n && Math.abs(lastPageIndex - itemCount) > 2\n // if the current page is towards the middle of the list\n && Math.abs(lastPageIndex - rightSiblingIndex) > 2\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = range(1, itemCount)\n\n return [...leftRange, ELLIPSIS, lastPageIndex]\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = range(lastPageIndex - itemCount + 1, lastPageIndex)\n\n return [firstPageIndex, ELLIPSIS, ...rightRange]\n }\n\n if (showLeftEllipsis && showRightEllipsis) {\n const middleRange = range(leftSiblingIndex, rightSiblingIndex)\n\n return [firstPageIndex, ELLIPSIS, ...middleRange, ELLIPSIS, lastPageIndex]\n }\n\n const fullRange = range(firstPageIndex, lastPageIndex)\n return fullRange\n }\n else {\n const itemCount = siblingCount * 2 + 1\n\n if (pageCount < itemCount)\n return range(1, lastPageIndex)\n\n else if (currentPage <= (siblingCount + 1))\n return range(firstPageIndex, itemCount)\n\n else if ((pageCount - currentPage) <= siblingCount)\n return range(pageCount - itemCount + 1, lastPageIndex)\n\n else\n return range(leftSiblingIndex, rightSiblingIndex)\n }\n}\n"],"names":[],"mappings":"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"}