{"version":3,"file":"daffodil-design-paginator.mjs","sources":["../../../libs/design/paginator/src/utils/paginator-errors.ts","../../../libs/design/paginator/src/paginator/paginator.component.ts","../../../libs/design/paginator/src/paginator/paginator.component.html","../../../libs/design/paginator/src/paginator.module.ts","../../../libs/design/paginator/src/paginator.ts","../../../libs/design/paginator/src/daffodil-design-paginator.ts"],"sourcesContent":["export const DaffPaginatorNumberOfPagesErrorMessage = 'The numberOfPages in the daff-paginator must not be less than 1';\nexport const DaffPaginatorPageOutOfRangeErrorMessage = 'The numberOfPages in the daff-paginator should not be less than the currentPage';\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  computed,\n} from '@angular/core';\nimport {\n  Params,\n  RouterLink,\n} from '@angular/router';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport {\n  faChevronRight,\n  faChevronLeft,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport {\n  DaffPaginatorNumberOfPagesErrorMessage,\n  DaffPaginatorPageOutOfRangeErrorMessage,\n} from '../utils/paginator-errors';\n\nconst visiblePageRange = 2;\n\n@Component({\n  selector: 'daff-paginator',\n  templateUrl: './paginator.component.html',\n  styleUrl: './paginator.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'daff-paginator',\n    role: 'navigation',\n  },\n  imports: [\n    FaIconComponent,\n    RouterLink,\n  ],\n})\nexport class DaffPaginatorComponent {\n  /**\n   * @docs-private\n   */\n  faChevronRight = faChevronRight;\n  /**\n   * @docs-private\n   */\n  faChevronLeft = faChevronLeft;\n\n  /**\n   * The total number of pages the paginator tracks. This number can change dynamically, but the end user is responsible for keeping `numberOfPages`\n   * and `currentPage` in sync.\n   *\n   * For example, if the `numberOfPages` is dynamically changed to a value less than the `currentPage`, the paginator will break.\n   */\n  numberOfPages = input.required<number>();\n\n  /**\n   * The currently selected page.\n   */\n  currentPage = input.required<number>();\n\n  /**\n   * Replace the paginator buttons with links. `url` is required if using this mode.\n   */\n  linkMode = input(false);\n\n  /**\n   * The url to which to navigate if the paginator is in link mode.\n   * This paginator component will set the page query param.\n   */\n  url = input<string>();\n\n  /**\n   * The query param to which the paginator component will set the current page value in link mode.\n   */\n  queryParam = input('page');\n\n  /**\n   * Emits when the current page changes with the new current page.\n   */\n  notifyPageChange = output<any>();\n\n  /**\n   * @docs-private\n   */\n  _numberOfPagesArray = computed<number[]>(() => {\n    const numberOfPages = this.numberOfPages();\n\n    if(numberOfPages < 1) {\n      throw new Error(DaffPaginatorNumberOfPagesErrorMessage);\n    } else if(numberOfPages < this.currentPage()) {\n      throw new Error(DaffPaginatorPageOutOfRangeErrorMessage);\n    }\n\n    return numberOfPages < 2 ? [] : Array(numberOfPages-2).fill(numberOfPages-2).map((x,i)=>i+2);\n  });\n\n  /**\n   * Determines when ellipsis after the first page number should show.\n   *\n   * @docs-private\n   */\n  _showFirstEllipsis = computed<boolean>(() => this.currentPage() >= visiblePageRange+2);\n\n  /**\n   * Determines when ellipsis before the final page number should show.\n   *\n   * @docs-private\n   */\n  _showLastEllipsis = computed<boolean>(() => this.currentPage() < (this.numberOfPages() - visiblePageRange));\n\n  /**\n   * Determines when the Previous button should be disabled.\n   *\n   * @docs-private\n   */\n  _disablePrev = computed<boolean>(() => this.currentPage() === 1);\n\n  /**\n   * Determines when the Next button should be disabled.\n   *\n   * @docs-private\n   */\n  _disableNext = computed<boolean>(() => this.currentPage() === this.numberOfPages());\n\n  /**\n   * Emits the previous page number through notifyPageChange Output.\n   *\n   * @docs-private\n   */\n  _onNotifyPrevPageChange() {\n    this.notifyPageChange.emit(this.currentPage() - 1);\n  }\n\n  /**\n   * Emits the next page number through notifyPageChange Output.\n   *\n   * @docs-private\n   */\n  _onNotifyNextPageChange() {\n    this.notifyPageChange.emit(this.currentPage() + 1);\n  }\n\n  /**\n   * Emits a pageNumber to notifyPageChange Output.\n   *\n   * @docs-private\n   */\n  _onNotifyPageChange(pageNumber: number) {\n    this.notifyPageChange.emit(pageNumber);\n  }\n\n  /**\n   * A simple function that determines if the given page number is the current page number.\n   *\n   * @docs-private\n   */\n  _isSelected(page: number): boolean {\n    return page === this.currentPage();\n  }\n\n  /**\n   * Determines if the given page number should be shown. The two additional 'or' conditionals are needed\n   * so the paginator retains the same total width at the extreme page numbers (1 and numberOfPages).\n   *\n   * @docs-private\n   */\n  _showNumber(pageNumber: number): boolean {\n    return Math.abs(this.currentPage() - pageNumber) < visiblePageRange\n      || (this.currentPage() <= visiblePageRange && pageNumber <= 2*visiblePageRange)\n      || (this.currentPage() > this.numberOfPages() - visiblePageRange && pageNumber > this.numberOfPages() - 2*visiblePageRange);\n  }\n\n  /**\n   * @docs-private\n   */\n  _buildPageQueryParams(page: number): Params {\n    return {\n      [this.queryParam()]: page,\n    };\n  }\n}\n","@if (!linkMode()) {\n  <button type=\"button\" class=\"daff-paginator__previous\"\n    [disabled]=\"_disablePrev()\"\n    tabindex=\"0\"\n    attr.aria-label=\"Go to Previous Page\"\n    (click)=\"_onNotifyPrevPageChange()\">\n    <fa-icon [icon]=\"faChevronLeft\" size=\"sm\"></fa-icon> Previous\n  </button>\n}\n@if (linkMode()) {\n  @if (!_disablePrev()) {\n    <a class=\"daff-paginator__previous\"\n      attr.aria-label=\"Go to Previous Page\"\n      [routerLink]=\"url()\"\n      queryParamsHandling=\"merge\"\n      [queryParams]=\"_buildPageQueryParams(currentPage() - 1)\">\n      <fa-icon [icon]=\"faChevronLeft\" size=\"sm\"></fa-icon><span>Previous</span>\n    </a>\n  }\n  @if (_disablePrev()) {\n    <span class=\"daff-paginator__previous disabled\"\n      attr.aria-label=\"Go to Previous Page\"\n      [attr.disabled]=\"true\">\n      <fa-icon [icon]=\"faChevronLeft\" size=\"sm\"></fa-icon><span>Previous</span>\n    </span>\n  }\n}\n\n@if (!linkMode()) {\n  <button type=\"button\" class=\"daff-paginator__page-link\"\n    [class.selected]=\"_isSelected(1)\"\n    tabindex=\"0\"\n    attr.aria-label=\"Go to Page 1\"\n    (click)=\"_onNotifyPageChange(1)\">\n      <span>1</span>\n  </button>\n}\n\n@if (linkMode()) {\n  <a class=\"daff-paginator__page-link\"\n    [routerLink]=\"url()\"\n    [queryParams]=\"_buildPageQueryParams(1)\"\n    queryParamsHandling=\"merge\"\n    [class.selected]=\"_isSelected(1)\"\n    attr.aria-label=\"Go to Page 1\">\n      <span>1</span>\n  </a>\n}\n\n@if (_showFirstEllipsis()) {\n  <span class=\"daff-paginator__ellipsis\">...</span>\n}\n\n@for (pageNumber of _numberOfPagesArray(); track pageNumber) {\n  @if (_showNumber(pageNumber)) {\n    @if (!linkMode()) {\n      <button type=\"button\" class=\"daff-paginator__page-link\"\n        [class.selected]=\"_isSelected(pageNumber)\"\n        [attr.data-page-number]=\"pageNumber\"\n        tabindex=\"0\"\n        attr.aria-label=\"Go to Page {{pageNumber}}\"\n        aria-current=\"_isSelected(pageNumber)\"\n        (click)=\"_onNotifyPageChange(pageNumber)\">\n        <span>{{ pageNumber }}</span>\n      </button>\n    }\n    @if (linkMode()) {\n      <a class=\"daff-paginator__page-link\"\n        [attr.data-page-number]=\"pageNumber\"\n        [routerLink]=\"url()\"\n        [queryParams]=\"_buildPageQueryParams(pageNumber)\"\n        queryParamsHandling=\"merge\"\n        [class.selected]=\"_isSelected(pageNumber)\"\n        attr.aria-label=\"Go to Page {{pageNumber}}\">\n          <span>{{ pageNumber }}</span>\n      </a>\n    }\n  }\n}\n\n@if (_showLastEllipsis()) {\n  <span class=\"daff-paginator__ellipsis\">...</span>\n}\n\n@if (!(numberOfPages() < 2)) {\n  @if (!linkMode()) {\n    <button type=\"button\" class=\"daff-paginator__page-link\"\n      [class.selected]=\"_isSelected(numberOfPages())\"\n      tabindex=\"0\"\n      attr.aria-label=\"Go To Page {{numberOfPages()}}\"\n      (click)=\"_onNotifyPageChange(numberOfPages())\">\n        <span>{{ numberOfPages() }}</span>\n    </button>\n  }\n  @if (linkMode()) {\n    <a class=\"daff-paginator__page-link\"\n      [routerLink]=\"url()\"\n      [queryParams]=\"_buildPageQueryParams(numberOfPages())\"\n      queryParamsHandling=\"merge\"\n      [class.selected]=\"_isSelected(numberOfPages())\"\n      attr.aria-label=\"Go to Page {{numberOfPages()}}\">\n        <span>{{ numberOfPages() }}</span>\n    </a>\n  }\n}\n\n@if (!linkMode()) {\n  <button class=\"daff-paginator__next\"\n    [disabled]=\"_disableNext()\"\n    tabindex=\"0\"\n    attr.aria-label=\"Go to Next Page\"\n    (click)=\"_onNotifyNextPageChange()\">\n    Next <fa-icon [icon]=\"faChevronRight\" size=\"sm\"></fa-icon>\n  </button>\n}\n@if (linkMode()) {\n  @if (!_disableNext()) {\n    <a class=\"daff-paginator__next\"\n      [routerLink]=\"url()\"\n      attr.aria-label=\"Go to Next Page\"\n      queryParamsHandling=\"merge\"\n      [queryParams]=\"_buildPageQueryParams(currentPage() + 1)\">\n      <span>Next</span><fa-icon [icon]=\"faChevronRight\" size=\"sm\"></fa-icon>\n    </a>\n  }\n\n  @if (_disableNext()) {\n    <span class=\"daff-paginator__next disabled\"\n      attr.aria-label=\"Go to Next Page\"\n      [attr.disabled]=\"true\">\n      <span>Next</span><fa-icon [icon]=\"faChevronRight\" size=\"sm\"></fa-icon>\n    </span>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\n\nimport { DaffPaginatorComponent } from './paginator/paginator.component';\n\n/**\n * @deprecated in favor of {@link DAFF_PAGINATOR_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    FontAwesomeModule,\n    DaffPaginatorComponent,\n  ],\n  exports: [\n    DaffPaginatorComponent,\n  ],\n})\nexport class DaffPaginatorModule {}\n","import { DaffPaginatorComponent } from './paginator/paginator.component';\n\n/**\n * @docs-private\n */\nexport const DAFF_PAGINATOR_COMPONENTS = <const> [\n  DaffPaginatorComponent,\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}