{"version":3,"file":"create-pagination.mjs","names":["start","end"],"sources":["../src/create-pagination.ts"],"sourcesContent":["import { range } from \"./range.ts\";\n\nexport interface PaginationParams {\n\tpage: number;\n\tpages: number;\n\tedges?: number;\n\tneighbors?: number;\n}\n\nexport type PaginationItem =\n\t| { type: \"ellipsis\"; position: \"end\" | \"start\" }\n\t| { type: \"page\"; page: number };\n\n/**\n * @see https://github.com/bramus/js-pagination-sequence/blob/main/src/index.js\n */\nexport function createPagination(params: PaginationParams): Array<PaginationItem> {\n\tconst { page, pages, edges = 2, neighbors = 2 } = params;\n\n\tconst length = 1 + neighbors * 2 + edges * 2 + 2;\n\n\tif (pages <= length) {\n\t\treturn range(1, pages).map(createPage);\n\t}\n\n\tconst half = length / 2;\n\tconst currentPage = Math.min(page, pages);\n\n\tif (currentPage < half) {\n\t\tconst start = range(1, Math.ceil(half) + neighbors);\n\t\tconst end = edges > 0 ? range(pages - (edges - 1), pages) : [];\n\n\t\treturn [...start.map(createPage), createEllipsis(\"end\"), ...end.map(createPage)];\n\t}\n\n\tif (currentPage > pages - half) {\n\t\tconst start = edges > 0 ? range(1, edges) : [];\n\t\tconst end = range(\n\t\t\tMath.min(pages - Math.floor(half) - neighbors, currentPage - neighbors),\n\t\t\tpages,\n\t\t);\n\n\t\treturn [...start.map(createPage), createEllipsis(\"start\"), ...end.map(createPage)];\n\t}\n\n\tconst start = range(1, edges);\n\tconst center = range(currentPage - neighbors, currentPage + neighbors);\n\tconst end = range(pages - (edges - 1), pages);\n\n\treturn [\n\t\t...start.map(createPage),\n\t\tcenter[0] === edges + 2 ? createPage(edges + 1) : createEllipsis(\"start\"),\n\t\t...center.map(createPage),\n\t\tcreateEllipsis(\"end\"),\n\t\t...end.map(createPage),\n\t];\n}\n\nfunction createPage(page: number): PaginationItem {\n\treturn { type: \"page\", page };\n}\n\nfunction createEllipsis(position: \"end\" | \"start\"): PaginationItem {\n\treturn { type: \"ellipsis\", position };\n}\n"],"mappings":";;;;;;AAgBA,SAAgB,iBAAiB,QAAiD;CACjF,MAAM,EAAE,MAAM,OAAO,QAAQ,GAAG,YAAY,MAAM;CAElD,MAAM,SAAS,IAAI,YAAY,IAAI,QAAQ,IAAI;AAE/C,KAAI,SAAS,OACZ,QAAO,MAAM,GAAG,MAAM,CAAC,IAAI,WAAW;CAGvC,MAAM,OAAO,SAAS;CACtB,MAAM,cAAc,KAAK,IAAI,MAAM,MAAM;AAEzC,KAAI,cAAc,MAAM;EACvB,MAAMA,UAAQ,MAAM,GAAG,KAAK,KAAK,KAAK,GAAG,UAAU;EACnD,MAAMC,QAAM,QAAQ,IAAI,MAAM,SAAS,QAAQ,IAAI,MAAM,GAAG,EAAE;AAE9D,SAAO;GAAC,GAAGD,QAAM,IAAI,WAAW;GAAE,eAAe,MAAM;GAAE,GAAGC,MAAI,IAAI,WAAW;GAAC;;AAGjF,KAAI,cAAc,QAAQ,MAAM;EAC/B,MAAMD,UAAQ,QAAQ,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE;EAC9C,MAAMC,QAAM,MACX,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK,GAAG,WAAW,cAAc,UAAU,EACvE,MACA;AAED,SAAO;GAAC,GAAGD,QAAM,IAAI,WAAW;GAAE,eAAe,QAAQ;GAAE,GAAGC,MAAI,IAAI,WAAW;GAAC;;CAGnF,MAAM,QAAQ,MAAM,GAAG,MAAM;CAC7B,MAAM,SAAS,MAAM,cAAc,WAAW,cAAc,UAAU;CACtE,MAAM,MAAM,MAAM,SAAS,QAAQ,IAAI,MAAM;AAE7C,QAAO;EACN,GAAG,MAAM,IAAI,WAAW;EACxB,OAAO,OAAO,QAAQ,IAAI,WAAW,QAAQ,EAAE,GAAG,eAAe,QAAQ;EACzE,GAAG,OAAO,IAAI,WAAW;EACzB,eAAe,MAAM;EACrB,GAAG,IAAI,IAAI,WAAW;EACtB;;AAGF,SAAS,WAAW,MAA8B;AACjD,QAAO;EAAE,MAAM;EAAQ;EAAM;;AAG9B,SAAS,eAAe,UAA2C;AAClE,QAAO;EAAE,MAAM;EAAY;EAAU"}