{"version":3,"file":"obliczeniowo-elementary-pagination.mjs","sources":["../../../../projects/components/pagination/components/pagination/pagination.component.ts","../../../../projects/components/pagination/components/pagination/pagination.component.html","../../../../projects/components/pagination/pagination.module.ts","../../../../projects/components/pagination/obliczeniowo-elementary-pagination.ts"],"sourcesContent":["import {\n  Component,\n  computed,\n  effect,\n  HostBinding,\n  input,\n  Input,\n  model,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { PaginationOptions } from '../../interfaces/pagination-options';\n\n@Component({\n    selector: 'obl-pagination',\n    templateUrl: './pagination.component.html',\n    styleUrl: './pagination.component.scss',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: PaginationComponent,\n        },\n    ],\n    standalone: false\n})\nexport class PaginationComponent implements ControlValueAccessor {\n  /** Current selected page starting from 1 to totalPages */\n  page = model<number>(1);\n\n  /** page size */\n  size = model<number>(20);\n\n  /** total records */\n  total = model<number>(0);\n\n  /**\n   * en: translation key value for text inside component\n   *\n   * @example\n   *\n   * <obl-pagination [translation]=\"{ 'Page': 'Strona' }></obl-pagination>\"\n   */\n  translations = input<{ [en: string]: string }>({});\n\n  options = model<PaginationOptions>({\n    itemsCount: 4,\n    nextPrevious: true,\n    lastFirst: true,\n    pageInput: true,\n    of: true,\n    total: false,\n  });\n\n  @Input()\n  @HostBinding('class.disabled')\n  disabled = false;\n\n  @Input()\n  @HostBinding('attr.small')\n  small?: boolean;\n\n  protected characters = 2;\n\n  constructor() {\n    effect(() => {\n      this.page();\n      this.setChars();\n    })\n  }\n\n  get totalPages() {\n    return Math.ceil(this.total() / this.size());\n  }\n\n  setChars() {\n    setTimeout(() => {\n      const length = this.page().toString().length;\n      this.characters = (length > 2 && length) || 2;\n    });\n  }\n\n  pages = computed(() => {\n    const { page } = this;\n    const { itemsCount } = this.options();\n    let start = Math.max(page() - itemsCount, 1);\n    const end = Math.min(start + itemsCount * 2, this.totalPages);\n\n    if (this.totalPages > end - start && end === this.totalPages) {\n      start = Math.max(end - (itemsCount * 2 + 1), 1);\n    }\n\n    return new Array(end - start + 1).fill(0).map((_, index) => start + index);\n  });\n\n  movePage(id: number) {\n    const { page, size, total } = this;\n    if (page() !== id) {\n      page.set(id);\n    }\n\n    this.onChange({\n      page: page(),\n      size: size(),\n      total: total(),\n    });\n\n    this.setChars();\n  }\n\n  changePage(event: any) {\n    let page = event.target.value;\n\n    if (page < 1) {\n      page = 1;\n      event.target.value = 1;\n    } else if (page > this.totalPages) {\n      page = this.totalPages;\n      event.target.value = this.totalPages;\n    }\n\n    this.movePage(+page);\n  }\n\n  onChange = (value: {\n    page: number,\n    size: number,\n    total: number,\n    options?: PaginationOptions\n  }) => {};\n\n  onTouched = () => {};\n\n  writeValue(value: {\n    page: number,\n    size: number,\n    total: number,\n    options?: PaginationOptions\n  }): void {\n    this.page.set(value.page);\n    this.size.set(value.size);\n    this.total.set(value.total);\n    this.options.set(value.options || this.options());\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n}\n","@if (options().total) {\n  <span [attr.small]=\"small\">\n    {{ 'Total' | oblTranslation : translations() }} {{ total() }}\n  </span>\n}\n\n@if (totalPages > 1) {\n  @if (options().lastFirst) {\n    <button\n      oblButton\n      [attr.small]=\"small\"\n      [disabled]=\"page() === 1\"\n      (click)=\"movePage(1)\"\n    >\n      <obl-icon name=\"left-more\"></obl-icon>\n    </button>\n  }\n  @if (options().nextPrevious) {\n    <button\n      oblButton\n      [attr.small]=\"small\"\n      [disabled]=\"page() === 1\"\n      (click)=\"movePage(page() - 1)\"\n    >\n      <obl-icon name=\"left\"></obl-icon>\n    </button>\n  }\n\n  @for (p of pages(); track $index) {\n    <button\n      [attr.small]=\"small\"\n      [class.selected]=\"p === page()\"\n      oblButton\n      (click)=\"movePage(p)\"\n    >\n      {{ p }}\n    </button>\n  }\n\n  @if (options().nextPrevious) {\n    <button\n      [attr.small]=\"small\"\n      oblButton\n      [disabled]=\"page() === totalPages\"\n      (click)=\"movePage(page() + 1)\"\n    >\n      <obl-icon name=\"right\"></obl-icon>\n    </button>\n  }\n\n  @if (options().lastFirst) {\n    <button\n      [attr.small]=\"small\"\n      oblButton\n      [disabled]=\"page() === totalPages\"\n      (click)=\"movePage(totalPages)\"\n    >\n      <obl-icon name=\"right-more\"></obl-icon>\n    </button>\n  }\n\n  @if (options().pageInput) {\n    <obl-input-wrapper\n      [small]=\"small\"\n      [label]=\"'Page' | oblTranslation : translations()\"\n    >\n      @if (options().of) {\n        <ng-container suffix>\n          <span>\n            {{ 'of' | oblTranslation : translations() }} {{ totalPages }}\n          </span>\n        </ng-container>\n      }\n      <input\n        oblInput\n        [class.of]=\"options().of\"\n        [style.width.ch]=\"characters\"\n        [value]=\"page()\"\n        [min]=\"1\"\n        [max]=\"totalPages\"\n        type=\"number\"\n        (change)=\"changePage($event)\"\n        #pageInput\n      />\n    </obl-input-wrapper>\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\nimport { InputModule } from '@obliczeniowo/elementary/input';\nimport { IconsModule } from '@obliczeniowo/elementary/icons';\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\n\nimport { PaginationComponent } from './components/pagination/pagination.component';\n\n@NgModule({\n  declarations: [\n    PaginationComponent\n  ],\n  imports: [\n    CommonModule,\n    ButtonsModule,\n    InputModule,\n    IconsModule,\n    TextPipesModule\n  ],\n  exports: [\n    PaginationComponent\n  ]\n})\nexport class PaginationModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}