{"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","/* eslint-disable quote-props */\nimport {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  ChangeDetectionStrategy,\n} from '@angular/core';\nimport {\n  Params,\n  RouterModule,\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  styleUrls: ['./paginator.component.scss'],\n  templateUrl: './paginator.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    'class': 'daff-paginator',\n    'role': 'navigation',\n  },\n  imports: [\n    FaIconComponent,\n    RouterModule,\n  ],\n})\nexport class DaffPaginatorComponent implements OnChanges {\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  @Input() numberOfPages: number;\n\n  /**\n   * The currently selected page.\n   */\n  @Input() currentPage: number;\n\n  /**\n   * Replace the paginator buttons with links. `url` is required if using this mode.\n   */\n  @Input() linkMode = 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  @Input() url?: string;\n\n  /**\n   * The query param to which the paginator component will set the current page value in link mode.\n   */\n  @Input() queryParam = 'page';\n\n  /**\n   * @docs-private\n   */\n  _numberOfPagesArray: number[];\n\n  /**\n   * Emits when the current page changes with the new current page.\n   */\n  @Output() notifyPageChange: EventEmitter<any> = new EventEmitter();\n\n  /**\n   * Determines when ellipsis after the first page number should show.\n   *\n   * @docs-private\n   */\n  get _showFirstEllipsis(): boolean {\n    return this.currentPage >= visiblePageRange+2;\n  }\n\n  /**\n   * Determines when ellipsis before the final page number should show.\n   *\n   * @docs-private\n   */\n  get _showLastEllipsis(): boolean {\n    return this.currentPage < (this.numberOfPages - visiblePageRange);\n  }\n\n  /**\n   * Determines when the Previous button should be disabled.\n   *\n   * @docs-private\n   */\n  get _disablePrev(): boolean {\n    return this.currentPage === 1;\n  }\n\n  /**\n   * Determines when the Next button should be disabled.\n   *\n   * @docs-private\n   */\n  get _disableNext(): boolean {\n    return this.currentPage === this.numberOfPages;\n  }\n\n  /**\n   * @docs-private\n   */\n  ngOnChanges() {\n    if(this.numberOfPages < 1) {\n      throw new Error(DaffPaginatorNumberOfPagesErrorMessage);\n    } else if(this.numberOfPages < this.currentPage) {\n      throw new Error(DaffPaginatorPageOutOfRangeErrorMessage);\n    }\n\n    this._numberOfPagesArray = this.numberOfPages < 2 ? [] : Array(this.numberOfPages-2).fill(this.numberOfPages-2).map((x,i)=>i+2);\n  }\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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"}