{"version":3,"file":"talenra-ngx-base-paginator.mjs","sources":["../../../projects/ngx-base/paginator/src/paginator/paginator.translation.ts","../../../projects/ngx-base/paginator/src/paginator/paginator.types.ts","../../../projects/ngx-base/paginator/src/paginator/paginator.responsive-mode.ts","../../../projects/ngx-base/paginator/src/paginator/paginator.component.ts","../../../projects/ngx-base/paginator/src/paginator/paginator.component.html","../../../projects/ngx-base/paginator/talenra-ngx-base-paginator.ts"],"sourcesContent":["import { Dictionary } from '@talenra/ngx-base/shared';\n\n/** @internal */\nexport const translations: Dictionary = {\n  'de-CH': {\n    itemsPerPage: 'Einträge pro Seite',\n    of: 'von',\n  },\n  'fr-CH': {\n    itemsPerPage: 'Entrées par page',\n    of: 'de',\n  },\n  'it-CH': {\n    itemsPerPage: 'Voci per pagina',\n    of: 'di',\n  },\n  'en-US': {\n    itemsPerPage: 'Items per page',\n    of: 'of',\n  },\n};\n","/**\n * Determines the different attributes of the paginator state.\n *\n * ### Import\n *\n * ```typescript\n * import { PaginatorState } from '@talenra/ngx-base/paginator';\n * ```\n *\n * @see {@link PaginatorComponent}\n */\nexport interface PaginatorState {\n  /** The current page number. */\n  currentPage: number;\n  /** The number of items per page, that are to be displayed. */\n  itemsPerPage: number;\n  /** The total number of items. Used to calculate the last page number. */\n  totalItems: number;\n  /** The possible options for the items per page selection. Used to override the default options. */\n  itemsPerPageOptions?: number[];\n}\n\n/**\n * Alignment of the paginator. If Paginator is used with `useResponsiveMode` on, it will take the full width of the\n * container element. In this setup, use Paginator's `align` property to control its alignment.\n *\n * ```html\n * <talenra-paginator ... useResponsiveMode align=\"right\"></talenra-paginator>\n * ```\n *\n * ```typescript\n * import { PaginatorAlign } from '@otalenra/ngx-base/paginator';\n * ```\n *\n * @see {@link PaginatorComponent}\n */\nexport const PaginatorAlignment = {\n  Left: 'left',\n  Center: 'center',\n  Right: 'right',\n} as const;\n\n/**\n * Type of values accepted by Paginator's `align` property.\n *\n * ### Import\n *\n * ```typescript\n * import { TPaginatorAlignment } from '@talenra/ngx-base/paginator';\n * ```\n *\n * @see {@link PaginatorComponent}\n */\nexport type TPaginatorAlignment = (typeof PaginatorAlignment)[keyof typeof PaginatorAlignment];\n","import { PaginatorComponent } from './paginator.component';\nimport {\n  IPaginatorResponsiveModeElements,\n  IPaginatorResponsiveModeElementState,\n} from './paginator.responsive-mode.types';\n\n/**\n * PaginatorResponsiveMode is responsible for managing the visibility of paginator elements in responsive mode. It\n * calculates the available space and toggles the visibility of paginator elements accordingly.\n *\n * @internal\n */\nexport class PaginatorResponsiveMode {\n  /** Reference to the Paginator component instance. */\n  private paginator!: PaginatorComponent;\n\n  /** References to the relevant Paginator HTML elements. */\n  private elements: IPaginatorResponsiveModeElements = {};\n\n  /**\n   * State of the Paginator elements. Elements marked with `isPermanent` are never hidden.\n   *\n   * Important: Elements marked `isPermanent` must be _before_ any other elements in the array.\n   */\n  private states: IPaginatorResponsiveModeElementState[] = [\n    { identifier: 'buttons', isVisible: true, isPermanent: true },\n    { identifier: 'report', isVisible: true, isPermanent: false },\n    { identifier: 'selector', isVisible: true, isPermanent: false },\n    { identifier: 'selectorLabel', isVisible: true, isPermanent: false },\n  ];\n\n  /** @internal */\n  constructor(paginator: PaginatorComponent) {\n    this.paginator = paginator;\n  }\n\n  /** (Re-)initializes responsive mode. */\n  public init(elements: IPaginatorResponsiveModeElements): void {\n    this.elements = elements;\n    // Initially show all responsive elements\n    this.states.forEach((state) => {\n      state.isVisible = true;\n    });\n  }\n\n  /** Updates visibility of paginator elements. */\n  public update(): void {\n    // Exit if not initialized yet\n    if (!this.elements.host) return;\n    // Calculate the difference between the host and the content. Negative values → content is wider than the host\n    let gap: number = this.elements.host.clientWidth;\n    // Toggle visibility of each element based on the available space\n    for (let i: number = 0; i < this.states.length; i++) {\n      const state: IPaginatorResponsiveModeElementState = this.states[i];\n      const element: HTMLElement | undefined = this.elements[state.identifier];\n      if (!element) continue;\n      // Permanent elements are always visible. All other elements are visible if there is enough space _and_ if the\n      // preceding element is visible.\n      state.isVisible = state.isPermanent || (this.states[i - 1].isVisible && gap >= element.scrollWidth);\n      // Update the space available for the next iteration\n      gap -= state.isVisible ? element?.scrollWidth : 0;\n    }\n    // Trigger change detection\n    this.paginator['changeDetector'].markForCheck();\n  }\n\n  /** Template helper to determine whether a given Paginator element is hidden. */\n  public isHidden(elementKey: string): boolean {\n    const state: IPaginatorResponsiveModeElementState | undefined = this.states.find(\n      (state) => state.identifier === elementKey\n    );\n    return state ? !state.isVisible : false;\n  }\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  ElementRef,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  LOCALE_ID,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { deprecationWarning } from '@talenra/ngx-base/dev-kit';\nimport { ButtonComponent } from '@talenra/ngx-base/button';\nimport { OptionComponent, SelectComponent } from '@talenra/ngx-base/select';\nimport { TLocale } from '@talenra/ngx-base/shared';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { translations } from './paginator.translation';\nimport { PaginatorAlignment, PaginatorState, TPaginatorAlignment } from './paginator.types';\nimport { PaginatorResponsiveMode } from './paginator.responsive-mode';\n\n/** @internal */\nconst responsiveModeDeprecation = () =>\n  deprecationWarning({\n    packageName: '@talenra/ngx-base',\n    submodule: 'paginator',\n    member: 'useResponsiveMode',\n    instructions:\n      'With 9.5.0 responsive mode is default for Paginator. With 12.0.0 it cannot be deactivated and input property `useResponsiveMode` is deprecated.',\n  });\n\n/**\n * Paginator component provides pagination control to navigate through a list of items.\n *\n * ```html\n * <!-- Basic usage -->\n * <talenra-paginator\n *   [state]=\"paginatorState\"\n *   (stateChange)=\"onPaginatorStateChange($event)\"\n * ></talenra-paginator>\n *\n * <!-- With options -->\n * <talenra-paginator\n *   [state]=\"paginatorState\"\n *   dynamicLocale=\"de-CH\"\n *   (stateChange)=\"onPaginatorStateChange($event)\"\n *   showMoveFirstLastButtons\n *   disableItemsPerPageSelection\n * ></talenra-paginator>\n * ```\n */\n@Component({\n  selector: 'talenra-paginator',\n  imports: [ButtonComponent, OptionComponent, SelectComponent, ReactiveFormsModule, FormsModule],\n  templateUrl: './paginator.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrl: './paginator.component.scss',\n  host: {\n    '[class]': 'alignClass',\n  },\n})\nexport class PaginatorComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * The state of the paginator. Provides information about the current page, the number of items per page etc. Supports\n   * two-way binding.\n   *\n   * ```html\n   * <talenra-paginator [(state)]=\"paginatorState\"></talenra-paginator>\n   *```\n   */\n  @Input() state: PaginatorState = {\n    currentPage: 1,\n    itemsPerPage: 10,\n    totalItems: 1,\n    itemsPerPageOptions: [5, 10, 20, 50],\n  };\n\n  /**\n   * Locale to dynamically overwrite the app's locale. Allowed values, see: Locale\n   *\n   * ```html\n   * <talenra-paginator dynamicLocale=\"fr-CH\" />\n   * ```\n   *\n   * @see {@link Locale}\n   * @see {@link TLocale}\n   */\n  @Input() dynamicLocale: TLocale | null = null;\n\n  /**\n   * Determines whether the buttons to move to first/last page are shown.\n   *\n   * ```html\n   * <talenra-paginator showFirstLastButtons></talenra-paginator>\n   * ```\n   */\n  public showFirstLastButtons = input(false, { transform: booleanAttribute });\n\n  /**\n   * Determines whether the selection of items per page is hidden.\n   *\n   * ```html\n   * <talenra-paginator hideItemsPerPage></talenra-paginator>\n   * ```\n   */\n  public hideItemsPerPage = input(false, { transform: booleanAttribute });\n\n  /**\n   * Activates responsive mode. In responsive mode, Paginator takes the whole horizontal space available and does its\n   * best to fit the content. Features are hidden if there is not enough space.\n   *\n   * ```html\n   * <talenra-paginator ... useResponsiveMode></talenra-paginator>\n   * ```\n   */\n  @Input({ transform: booleanAttribute })\n  /** Get the instance's useResponsiveMode state. @deprecated */\n  public get useResponsiveMode(): boolean {\n    responsiveModeDeprecation();\n    return true;\n  }\n  /** Set the instance's useResponsiveMode state. @deprecated */\n  public set useResponsiveMode(value: boolean) {\n    responsiveModeDeprecation();\n  }\n\n  /**\n   * Alignment of the paginator. If Paginator is used with `useResponsiveMode` on, it will take the full width of the\n   * container element. In this setup, use Paginator's `align` property to control its alignment.\n   *\n   * ```html\n   * <talenra-paginator ... useResponsiveMode align=\"right\"></talenra-paginator>\n   * ```\n   */\n  public align = input<TPaginatorAlignment>(PaginatorAlignment.Left);\n\n  private get alignClass(): string {\n    return `align--${this.align()}`;\n  }\n\n  /**\n   * Emits changes in the paginator state. This is where you implement your logic to handle the changes in the\n   * paginator.\n   *\n   * ```typescript\n   * // Component class\n   * protected onPaginatorStateChange(state: PaginatorState) {\n   *   // Your app's logic\n   * }\n   * ```\n   *\n   * ```html\n   * <!-- Component template -->\n   * <talenra-paginator\n   *   [(state)]=\"paginatorState\"\n   *   (onStateChange)=\"onPaginatorStateChange($event)\"\n   * ></talenra-paginator>\n   * ```\n   */\n  @Output() stateChange = new EventEmitter<PaginatorState>();\n\n  /** The last page number. */\n  protected lastPage: number = 1;\n\n  /** The state of the paginator pageReport string. Indicates the current page and the total number of pages. */\n  protected pageReport: string = '';\n\n  /** The label to be shown in front of the items per page selection. */\n  protected itemsPerPageLabelString: string = '';\n\n  /** Retrieve the app's locale */\n  private appLocale: string = inject(LOCALE_ID);\n\n  /** Change detector reference */\n  private changeDetector: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  /** Destroy reference */\n  private destroyRef: DestroyRef = inject(DestroyRef);\n\n  /** Returns the locale actually used by the component (dynamic or app locale). */\n  private get locale(): string {\n    return this.dynamicLocale ? this.dynamicLocale : this.appLocale;\n  }\n\n  /** Handler for responsive mode */\n  protected responsiveMode!: PaginatorResponsiveMode;\n\n  /** Resize observer instance reference */\n  private resizeObserver?: ResizeObserver;\n\n  /** Element references required for responsive mode */\n  private hostRef: ElementRef = inject(ElementRef);\n  private selectorLabelRef = viewChild<ElementRef>('selectorLabel');\n  private selectorRef = viewChild<ElementRef>('selector');\n  private reportRef = viewChild<ElementRef>('report');\n  private buttonsRef = viewChild<ElementRef>('buttons');\n\n  /** @internal */\n  constructor() {\n    this.responsiveMode = new PaginatorResponsiveMode(this);\n    this.initResponsiveMode();\n    // Re-initialize responsive mode whenever hideItemsPerPage changes\n    toObservable(this.hideItemsPerPage)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.initResponsiveMode());\n    // Re-initialize responsive mode whenever showFirstLastButtons changes\n    toObservable(this.showFirstLastButtons)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.initResponsiveMode());\n  }\n\n  /** @internal */\n  ngOnInit(): void {\n    this.resizeObserver = new ResizeObserver(() => this.updateResponsiveMode());\n    this.resizeObserver.observe(this.hostRef.nativeElement);\n    this.setPaginatorAttributes();\n  }\n\n  /** @internal */\n  ngOnChanges(changes: SimpleChanges): void {\n    const { state, dynamicLocale } = changes;\n    if ((state && !state.firstChange) || (dynamicLocale && !dynamicLocale.firstChange)) {\n      this.setPaginatorAttributes();\n    }\n  }\n\n  /** @internal */\n  ngOnDestroy(): void {\n    this.resizeObserver?.unobserve(this.hostRef.nativeElement);\n  }\n\n  /**\n   * Handler for change in the items per page selection.\n   *\n   * @internal\n   */\n  itemPerPageSelection(itemsPerPage: number) {\n    // set the items per page\n    this.state.itemsPerPage = itemsPerPage;\n    // set the last page number\n    this.lastPage = Math.ceil(this.state.totalItems / this.state.itemsPerPage);\n    // check if the current page is still valid\n    if (this.state.currentPage > this.lastPage) {\n      // if not, set the current page to the last page\n      this.state.currentPage = this.lastPage;\n    }\n    // emit the changes in the paginator state\n    this.stateChange.emit(this.state);\n    // change the paginator attributes to update the pageReport string\n    this.setPaginatorAttributes();\n  }\n\n  /**\n   * Handler for the change in the current page.\n   *\n   * @internal\n   */\n  changeCurrentPage(changeTo: number) {\n    // set the current page\n    this.state.currentPage = changeTo;\n    // emit the changes in the paginator state\n    this.stateChange.emit(this.state);\n    // change the paginator attributes to update the pageReport string\n    this.setPaginatorAttributes();\n  }\n\n  /**\n   * Sets the paginator attributes to update the pageReport string.\n   */\n  private setPaginatorAttributes() {\n    // set the paginator attributes\n    if (this.state.itemsPerPageOptions === undefined) {\n      this.state.itemsPerPageOptions = [5, 10, 20, 50];\n    }\n\n    // check if chosen items per page is in the options\n    if (!this.state.itemsPerPageOptions.includes(this.state.itemsPerPage)) {\n      // if not, add it to the options\n      this.state.itemsPerPageOptions.push(this.state.itemsPerPage);\n    }\n\n    // sort the options. Using a custom sort function to enforce numeric sorting.\n    this.state.itemsPerPageOptions.sort((a, b) => a - b);\n\n    // set the items per page label according to the locale\n    this.itemsPerPageLabelString = translations[this.locale as TLocale].itemsPerPage;\n\n    // set the last page number\n    this.lastPage = Math.ceil(this.state.totalItems / this.state.itemsPerPage);\n\n    // set the number of items on this page\n    const itemsOnThisPage =\n      this.state.currentPage === this.lastPage\n        ? this.state.totalItems - (this.state.currentPage - 1) * this.state.itemsPerPage\n        : this.state.itemsPerPage;\n\n    // set multiplication for the current page\n    const currentPageMultiplication = (this.state.currentPage - 1) * this.state.itemsPerPage;\n\n    // if the last page is 0, set the page report to `1 - [itemsPerPage] of 0`\n    if (this.lastPage === 0) {\n      this.pageReport = `1–${this.state.itemsPerPage} ${translations[this.locale as TLocale]?.['of']} 0`;\n      return;\n    }\n\n    // set the state indicator string\n    this.pageReport = `${currentPageMultiplication + 1}–${\n      currentPageMultiplication + itemsOnThisPage\n    } ${translations[this.locale as TLocale]?.['of']} ${this.state.totalItems}`;\n\n    setTimeout(() => {\n      this.updateResponsiveMode();\n    });\n  }\n\n  // -- Responsive mode --\n\n  private initResponsiveMode(): void {\n    setTimeout(() => {\n      this.responsiveMode.init({\n        host: this.hostRef?.nativeElement,\n        selector: this.selectorRef()?.nativeElement,\n        selectorLabel: this.selectorLabelRef()?.nativeElement,\n        report: this.reportRef()?.nativeElement,\n        buttons: this.buttonsRef()?.nativeElement,\n      });\n      this.updateResponsiveMode();\n    });\n  }\n\n  private updateResponsiveMode(): void {\n    this.responsiveMode.update();\n  }\n}\n","@if (!hideItemsPerPage()) {\n  <span class=\"selector-label responsive\" [class.hidden]=\"responsiveMode.isHidden('selectorLabel')\" #selectorLabel>{{\n    itemsPerPageLabelString\n  }}</span>\n  <div class=\"selector responsive\" [class.hidden]=\"responsiveMode.isHidden('selector')\" #selector>\n    <talenra-select [ngModel]=\"state.itemsPerPage\" (ngModelChange)=\"itemPerPageSelection($event)\" kind=\"ghost\">\n      @for (itemPerPage of state.itemsPerPageOptions; track itemPerPage) {\n        <talenra-option [value]=\"itemPerPage\">{{ itemPerPage }}</talenra-option>\n      }\n    </talenra-select>\n  </div>\n}\n<span class=\"report responsive\" [class.hidden]=\"responsiveMode.isHidden('report')\" #report>{{ pageReport }}</span>\n<div #buttons>\n  @if (showFirstLastButtons()) {\n    <button\n      class=\"button\"\n      talenra-button\n      size=\"m\"\n      kind=\"ghost\"\n      icon=\"first-page\"\n      [disabled]=\"state.currentPage === 1 || lastPage === 0\"\n      (click)=\"changeCurrentPage(1)\"\n      #firstButton></button>\n  }\n  <button\n    class=\"button\"\n    talenra-button\n    size=\"m\"\n    kind=\"ghost\"\n    icon=\"chevron-left\"\n    [disabled]=\"state.currentPage === 1 || lastPage === 0\"\n    (click)=\"changeCurrentPage(state.currentPage - 1)\"></button>\n  <button\n    class=\"button\"\n    talenra-button\n    size=\"m\"\n    kind=\"ghost\"\n    icon=\"chevron-right\"\n    [disabled]=\"state.currentPage === lastPage || lastPage === 0\"\n    (click)=\"changeCurrentPage(state.currentPage + 1)\"></button>\n  @if (showFirstLastButtons()) {\n    <button\n      class=\"button\"\n      talenra-button\n      size=\"m\"\n      kind=\"ghost\"\n      icon=\"last-page\"\n      [disabled]=\"state.currentPage === lastPage || lastPage === 0\"\n      (click)=\"changeCurrentPage(lastPage)\"\n      #lastButton></button>\n  }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}