{"version":3,"file":"sebgroup-green-angular-src-lib-pagination.mjs","sources":["../../../../libs/angular/src/lib/pagination/pagination.component.ts","../../../../libs/angular/src/lib/pagination/pagination.component.html","../../../../libs/angular/src/lib/pagination/pagination.module.ts","../../../../libs/angular/src/lib/pagination/sebgroup-green-angular-src-lib-pagination.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n} from '@angular/core'\n\ntype PaginationSize = 'small' | 'large'\n\nexport interface IPaginationEvent {\n  pageIndex: number\n  previousPageIndex: number\n}\n\nexport interface IPaginationI18n {\n  paginationLabel: string\n  nextPageLabel: string\n  previousPageLabel: string\n  firstPageLabel: string\n  lastPageLabel: string\n  jumpToPageLabel: string\n  getPageLabel: (index: number) => string\n}\n\nconst PaginationI18n: IPaginationI18n = {\n  paginationLabel: 'Pagination',\n  nextPageLabel: 'Next page',\n  previousPageLabel: 'Previous page',\n  firstPageLabel: 'First page',\n  lastPageLabel: 'Last page',\n  jumpToPageLabel: 'Go to page',\n  getPageLabel: (index: number) => {\n    return `Page ${index + 1}`\n  },\n}\n\n@Component({\n  selector: 'ngg-pagination',\n  templateUrl: './pagination.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: false,\n})\nexport class NggPaginationComponent implements OnChanges {\n  /** Internationalization labels */\n  @Input() i18n: IPaginationI18n = PaginationI18n\n\n  /** Rendered size */\n  @Input() size: PaginationSize = 'small'\n\n  /** Amount of pages to be displayed between the first and last  */\n  @Input() displayPages = 5\n\n  /** Total amount of items to be paginated */\n  @Input() length = 0\n\n  /** Displayed items per page */\n  @Input() pageSize = 10\n\n  /** The zero-based page index of the displayed list of pages. Defaulted to 0. */\n  @Input()\n  get pageIndex(): number {\n    return this._pageIndex\n  }\n  set pageIndex(value: number) {\n    this._pageIndex = Math.max(value, 0)\n  }\n  private _pageIndex = 0\n\n  /** All centric page indicies to be displayed. */\n  get pageIndicies(): number[] {\n    return this._pageIndicies\n  }\n  private _pageIndicies: number[] = []\n\n  get totalPages(): number {\n    if (!this.pageSize) {\n      return 0\n    }\n\n    return Math.ceil(this.length / this.pageSize)\n  }\n\n  /** Event emitted when a new page index is selected */\n  @Output() page = new EventEmitter<IPaginationEvent>()\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes.displayPages ||\n      changes.pageIndex ||\n      changes.pageSize ||\n      changes.length\n    ) {\n      this._pageIndicies = this.getDisplayedPageIndicies()\n    }\n  }\n\n  hasPrevious(): boolean {\n    return this.pageIndex >= 1\n  }\n\n  hasNext(): boolean {\n    return this.pageIndex < this.totalPages - 1\n  }\n\n  gotoFirst(): void {\n    if (!this.hasPrevious()) {\n      return\n    }\n    const previous = this.pageIndex\n    this.pageIndex = 0\n    this.emit(previous)\n  }\n\n  gotoLast(): void {\n    if (!this.hasNext()) {\n      return\n    }\n    const previous = this.pageIndex\n    this.pageIndex = this.totalPages - 1\n    this.emit(previous)\n  }\n\n  gotoPrevious(): void {\n    if (!this.hasPrevious()) {\n      return\n    }\n    const previous = this.pageIndex\n    this.pageIndex = previous - 1\n    this.emit(previous)\n  }\n\n  gotoNext(): void {\n    if (!this.hasNext()) {\n      return\n    }\n    const previous = this.pageIndex\n    this.pageIndex = previous + 1\n    this.emit(previous)\n  }\n\n  goto(index: number): void {\n    if (index === this.pageIndex || index < 0 || index >= this.totalPages) {\n      return\n    }\n    const previous = this.pageIndex\n    this.pageIndex = index\n    this.emit(previous)\n  }\n\n  private emit(previous: number) {\n    this._pageIndicies = this.getDisplayedPageIndicies()\n    this.page.emit({ pageIndex: this.pageIndex, previousPageIndex: previous })\n  }\n\n  private getDisplayedPageIndicies(): number[] {\n    // Do not render\n    if (this.totalPages <= 1) {\n      return []\n    }\n\n    // All pages can fit\n    if (this.totalPages <= this.displayPages)\n      return [...Array(this.totalPages - 2).keys()].map((index) => index + 1)\n\n    // Only first & last\n    if (this.totalPages === 2) return []\n\n    return this.getCenteredPageIndicies()\n  }\n\n  /**\n   * Find X (displayPages) amount of page indicies that are centered from the currently selected page index,\n   * but exclude the first and last indicies if they are within the range.\n   */\n  private getCenteredPageIndicies(): number[] {\n    const pages: number[] = []\n\n    if (this.pageIndex === 0) {\n      pages.push(this.pageIndex + 1)\n    } else if (this.pageIndex === this.totalPages - 1) {\n      pages.push(this.pageIndex - 1)\n    } else {\n      pages.push(this.pageIndex)\n    }\n\n    const addAfter = () => {\n      const next = pages[pages.length - 1] + 1\n      if (next < this.totalPages - 1 && counter > 0) {\n        pages.push(next)\n        return true\n      }\n      return false\n    }\n    const addBefore = () => {\n      const previous = pages[0] - 1\n      if (previous > 0 && counter > 0) {\n        pages.unshift(previous)\n        return true\n      }\n      return false\n    }\n\n    let counter = this.displayPages - 1\n    while (counter > 0) {\n      const addedAfter = addAfter()\n      if (addedAfter) counter--\n\n      const addedBefore = addBefore()\n      if (addedBefore) counter--\n\n      if (!addedAfter && !addedBefore) break\n    }\n\n    return pages\n  }\n}\n","<nav\n  [class]=\"'gds-pagination ' + size\"\n  role=\"navigation\"\n  [attr.aria-label]=\"i18n.paginationLabel\"\n  *ngIf=\"totalPages > 1\"\n>\n  <ul class=\"gds-reset\">\n    <li *ngIf=\"hasPrevious()\">\n      <a\n        class=\"gds-reset\"\n        tabindex=\"0\"\n        (click)=\"gotoPrevious()\"\n        (keydown.enter)=\"gotoPrevious()\"\n        [attr.aria-label]=\"i18n.previousPageLabel\"\n        role=\"button\"\n      >\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n          <path\n            d=\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\"\n          />\n        </svg>\n      </a>\n    </li>\n\n    <li>\n      <a\n        class=\"gds-reset\"\n        tabindex=\"0\"\n        (click)=\"gotoFirst()\"\n        (keydown.enter)=\"gotoFirst()\"\n        [attr.aria-current]=\"pageIndex === 0 ? 'page' : null\"\n        [attr.aria-label]=\"i18n.firstPageLabel\"\n        role=\"button\"\n      >\n        1\n      </a>\n    </li>\n    <li *ngIf=\"pageIndicies[0] > 1\" aria-hidden=\"true\">...</li>\n\n    <li *ngFor=\"let index of pageIndicies\">\n      <a\n        class=\"gds-reset\"\n        tabindex=\"0\"\n        (click)=\"goto(index)\"\n        (keydown.enter)=\"goto(index)\"\n        [attr.aria-current]=\"pageIndex === index ? 'page' : null\"\n        [attr.aria-label]=\"i18n.getPageLabel(index)\"\n        role=\"button\"\n      >\n        {{ index + 1 }}\n      </a>\n    </li>\n\n    <li\n      *ngIf=\"pageIndicies[pageIndicies.length - 1] < totalPages - 2\"\n      aria-hidden=\"true\"\n    >\n      ...\n    </li>\n\n    <li>\n      <a\n        class=\"gds-reset\"\n        tabindex=\"0\"\n        (click)=\"gotoLast()\"\n        (keydown.enter)=\"gotoLast()\"\n        [attr.aria-current]=\"pageIndex === totalPages - 1 ? 'page' : null\"\n        [attr.aria-label]=\"i18n.lastPageLabel\"\n        role=\"button\"\n      >\n        {{ totalPages }}\n      </a>\n    </li>\n    <li *ngIf=\"hasNext()\">\n      <a\n        class=\"gds-reset\"\n        tabindex=\"0\"\n        (click)=\"gotoNext()\"\n        (keydown.enter)=\"gotoNext()\"\n        [attr.aria-label]=\"i18n.nextPageLabel\"\n        role=\"button\"\n      >\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n          <path\n            d=\"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\n          />\n        </svg>\n      </a>\n    </li>\n  </ul>\n</nav>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggPaginationComponent } from './pagination.component'\n\n@NgModule({\n  declarations: [NggPaginationComponent],\n  imports: [CommonModule],\n  exports: [NggPaginationComponent],\n})\nexport class NggPaginationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}