{"version":3,"file":"angular-paginator.mjs","sources":["../../../projects/angular-paginator/src/lib/services/angular-paginator.service.ts","../../../projects/angular-paginator/src/lib/pipes/angular-paginator.pipe.ts","../../../projects/angular-paginator/src/lib/directives/angular-paginator.directive.ts","../../../projects/angular-paginator/src/lib/angular-paginator.module.ts","../../../projects/angular-paginator/src/public-api.ts","../../../projects/angular-paginator/src/angular-paginator.ts"],"sourcesContent":["import { Injectable, EventEmitter } from '@angular/core';\n\nimport { AngularPaginatorInstance } from '../others/angular-paginator.interface';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AngularPaginatorService {\n  /** id is used to identify pagination instances */\n  static id = 'ANGULAR_PAGINATOR_DEFAULT';\n\n  /** instances is the collection of pagination componetns */\n  instances: Record<string, AngularPaginatorInstance> = {};\n\n  /** emits an event with instance id whenever the page number changes */\n  change: EventEmitter<string> = new EventEmitter<string>();\n\n  /**\n   * creates an instance for every pipe differentiated with id\n   *\n   * @param instance each instance refers to a unique pagination component\n   */\n  registerInstance(instance: AngularPaginatorInstance): void {\n    if (!this.instances[instance.id]) {\n      this.instances[instance.id] = instance;\n      this.change.emit(instance.id);\n    } else {\n      const changed = this.updateInstance(instance);\n      if (changed) {\n        this.change.emit(instance.id);\n      }\n    }\n  }\n\n  /**\n   * updates existing pagination instances available\n   * and returns true if value has changed\n   *\n   * @param instance an unique pagination component\n   */\n  private updateInstance(instance: AngularPaginatorInstance): boolean {\n    let updated = false;\n    const currentInstance = this.instances[instance.id];\n\n    for (const [k, v] of Object.entries(instance)) {\n      const key = k as keyof AngularPaginatorInstance;\n\n      if (\n        key !== 'id'\n        && currentInstance[k as keyof AngularPaginatorInstance] !== v\n        && !updated\n      ) {\n        this.instances[instance.id] = {\n          ...instance,\n          id: instance.id,\n        };\n        updated = true;\n      }\n    }\n\n    return updated;\n  }\n\n  /**\n   * return instance with given id\n   *\n   * @param id unique id of the pagination component\n   */\n  getInstance(id: string): AngularPaginatorInstance {\n    return this.instances[id];\n  }\n\n  /**\n   * return currentPage for given id\n   *\n   * @param id unique id of the pagination component\n   */\n  getCurrentPage(id: string): number {\n    return this.instances[id].currentPage;\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\n\nimport { AngularPaginatorService } from '../services/angular-paginator.service';\nimport { AngularPaginatorInstance, PaginatorPipeArgs } from '../others/angular-paginator.interface';\n\n/**\n * Pagination Pipe which paginates the array for the provided arguments such as `itemsPerPage` and `currentPage`\n */\n@Pipe({\n  name: 'angularPaginator',\n  standalone: true,\n})\n\nexport class AngularPaginatorPipe implements PipeTransform {\n  private angularPaginatorService = inject(AngularPaginatorService);\n\n  /**\n   * this pipes paginates the array for the provided arguments such as `itemsPerPage` and `currentPage`\n   *\n   * @param array input array for which the manipulation happens\n   * @param args input arguments for the paginator pipe\n   */\n  transform<T>(array: T[], args?: PaginatorPipeArgs): T[] {\n    const instance: AngularPaginatorInstance = this.createInstance(array, args);\n\n    // create pagination information\n    this.angularPaginatorService.registerInstance(instance);\n\n    // set the slicing range\n    const start = (instance.currentPage - 1) * instance.itemsPerPage;\n    const end = instance.currentPage * instance.itemsPerPage;\n\n    return array.slice(start, end);\n  }\n\n  /**\n   * create an instance for each pipe\n   *\n   * @param array input array for which the manipulation happens\n   * @param args input arguments for the paginator pipe\n   */\n  private createInstance(array: unknown[], args?: PaginatorPipeArgs): AngularPaginatorInstance {\n    return {\n      id: args?.id ? args.id : AngularPaginatorService.id,\n      currentPage: args?.currentPage ? args.currentPage : 1,\n      itemsPerPage: args?.itemsPerPage ? args.itemsPerPage : 10,\n      totalItems: array.length,\n    };\n  }\n}\n","import { Directive, OnInit, OnDestroy, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { AngularPaginatorService } from '../services/angular-paginator.service';\nimport { AngularPaginatorInstance, Page } from '../others/angular-paginator.interface';\nimport { Subscription } from 'rxjs';\n\n/**\n * This is the directive where the actual pagination takes place, it provides a sync between the\n * pipes and the pagination component\n */\n@Directive({\n  selector: 'angularPaginator, [angularPaginator]',\n  exportAs: 'angularPaginator',\n  standalone: true,\n})\n\nexport class AngularPaginatorDirective implements OnInit, OnDestroy {\n  private angularPaginatorService = inject(AngularPaginatorService);\n\n  /**\n   * Use unique id when multiple paginations are being used on the same page.\n   * By Default Paginator uses id `ANGULAR_PAGINATOR_DEFAULT`\n   */\n  @Input() id: string = AngularPaginatorService.id;\n\n  /**\n   * Limit number for pagination size, i.e., the maximum page numbers to be displayed\n   */\n  @Input() maxSize?: number;\n\n  /**\n   * Whether to keep current page in the middle of the visible ones\n   */\n  @Input() rotate = false;\n\n  /**\n   * Whether to always display the first and last page numbers.\n   * If max-size is smaller than the number of pages, then the first and last page numbers are still shown with ellipses\n   * in-between as necessary. NOTE: max-size refers to the center of the range.\n   * This option may add up to 2 more numbers on each side of the displayed range for the end value and\n   * what would be an ellipsis but is replaced by a number because it is sequential\n   */\n  @Input() boundaryLinkNumbers = false;\n\n  /**\n   * Also displays ellipses when rotate is true and maxSize is smaller than the number of pages forceEllipses\n   */\n  @Input() forceEllipses = false;\n\n  currentPage!: number;\n  firstPage = 1;\n  lastPage!: number;\n  pages: Page[] = [];\n\n  private subscription: Subscription;\n\n  /**\n   * Emits an event whenever the current page is changed, It emits the current page number\n   */\n  @Output() pageChange: EventEmitter<number> = new EventEmitter<number>(true);\n\n  /**\n   *\n   * @param angularPaginatorService serivce for angular paginator\n   */\n  constructor() {\n    // subscribe to changes\n    this.subscription = this.angularPaginatorService.change.subscribe((id: string) => {\n      if (id === this.id) {\n        this.updatePages();\n      }\n    });\n  }\n\n  /**\n   * Navigate to prevoius page\n   */\n  toPreviousPage(): void {\n    if (this.currentPage > this.firstPage) {\n      this.setPage(this.currentPage - 1);\n    }\n  }\n\n  /**\n   * Navigate to next page\n   */\n  toNextPage(): void {\n    if (this.currentPage < this.lastPage) {\n      this.setPage(this.currentPage + 1);\n    }\n  }\n\n  /**\n   * Navigate to first page\n   */\n  toFirstPage(): void {\n    this.setPage(this.firstPage);\n  }\n\n  /**\n   * Navigate to last page\n   */\n  toLastPage(): void {\n    this.setPage(this.lastPage);\n  }\n\n  /**\n   * Sets current page\n   *\n   * @param page page number to set as currentPage\n   */\n  setCurrentPage(page: number): void {\n    this.setPage(page);\n  }\n\n  /**\n   *\n   * @param page  page number to set\n   */\n  private setPage(page: number): void {\n    if (page && this.currentPage !== page) {\n      this.currentPage = page;\n      this.pageChange.emit(page);\n    }\n  }\n\n  /**\n   * create page object used for template\n   *\n   * @param pageNumber page number\n   * @param text page number, text to be displayed\n   * @param isActive whether the page is active or not, true for currentPage\n   */\n  private makePage(pageNumber: number, text: string, isActive: boolean): Page {\n    return {\n      number: pageNumber,\n      text,\n      active: isActive,\n    };\n  }\n\n  /**\n   *  computes the page limit\n   *\n   * @param currentPage current page number\n   * @param itemsPerPage total items per page\n   * @param totalItems no of items for pagination, usually array length\n   */\n  private computePageLimits(currentPage: number, totalItems: number, itemsPerPage: number) {\n    const totalPages = Math.ceil(totalItems / itemsPerPage);\n\n    // Default page limits\n    let startPage = 1;\n    let endPage = totalPages;\n\n    const isMaxSized = this.maxSize ? this.maxSize < totalPages : false;\n\n    // recompute if maxSize\n    if (isMaxSized && this.maxSize) {\n      if (this.rotate) {\n        // current page is displayed in the middle of the visible ones\n        startPage = Math.max(currentPage - Math.floor(this.maxSize / 2), 1);\n        endPage = startPage + this.maxSize - 1;\n\n        // Adjust if limit is exceeded\n        if (endPage > totalPages) {\n          endPage = totalPages;\n          startPage = endPage - this.maxSize + 1;\n        }\n      } else {\n        // Visible pages are paginated with maxSize\n        startPage = ((Math.ceil(currentPage / this.maxSize) - 1) * this.maxSize) + 1;\n\n        // adjust last page if limit is exceeded\n        endPage = Math.min(startPage + this.maxSize - 1, totalPages);\n      }\n    }\n\n    return {\n      startPage,\n      endPage,\n      totalPages,\n      isMaxSized,\n    };\n  }\n\n  /**\n   *  create page array\n   *\n   * @param currentPage current page number\n   * @param itemsPerPage total items per page\n   * @param totalItems no of items for pagination, usually array length\n   */\n  private getPages(currentPage: number, itemsPerPage: number, totalItems: number): Page[] {\n    const pages: Page[] = [];\n\n    const pageLimits = this.computePageLimits(currentPage, totalItems, itemsPerPage);\n    const { startPage, endPage, totalPages, isMaxSized } = pageLimits;\n\n    this.lastPage = totalPages;\n\n    // add page number links\n    for (let pageNumber = startPage; pageNumber <= endPage; pageNumber += 1) {\n      const page = this.makePage(pageNumber, pageNumber.toString(), pageNumber === currentPage);\n      pages.push(page);\n    }\n\n    // add links to move between page sets\n    if (\n      isMaxSized\n      && (this.maxSize && this.maxSize > 0)\n      && (!this.rotate || this.forceEllipses || this.boundaryLinkNumbers)\n    ) {\n      if (startPage > 1) {\n        // need ellipsis for all options unless range is too close to beginning\n        if (!this.boundaryLinkNumbers || startPage > 3) {\n          const previousPageSet = this.makePage(startPage - 1, '...', false);\n          pages.unshift(previousPageSet);\n        }\n\n        if (this.boundaryLinkNumbers) {\n          if (startPage === 3) { // need to replace ellipsis when the buttons would be sequential\n            const secondPageLink = this.makePage(2, '2', false);\n            pages.unshift(secondPageLink);\n          }\n\n          // add the first page\n          const firstPageLink = this.makePage(1, '1', false);\n          pages.unshift(firstPageLink);\n        }\n      }\n\n      if (endPage < totalPages) {\n        // need ellipsis for all options unless range is too close to end\n        if (!this.boundaryLinkNumbers || endPage < totalPages - 2) {\n          const nextPageSet = this.makePage(endPage + 1, '...', false);\n          pages.push(nextPageSet);\n        }\n\n        if (this.boundaryLinkNumbers) {\n          // need to replace ellipsis when the buttons would be sequential\n          if (endPage === totalPages - 2) {\n            const secondToLastPageLink = this.makePage(totalPages - 1, (totalPages - 1).toString(), false);\n            pages.push(secondToLastPageLink);\n          }\n\n          // add the last page\n          const lastPageLink = this.makePage(totalPages, totalPages.toString(), false);\n          pages.push(lastPageLink);\n        }\n      }\n    }\n    return pages;\n  }\n\n  /**\n   * Updates the pagination component\n   */\n  private updatePages(): void {\n    const instance: AngularPaginatorInstance = this.angularPaginatorService.getInstance(this.id);\n\n    const correctedCurrentPage = this.outOfBoundCorrection(instance);\n\n    if (correctedCurrentPage !== instance.currentPage || this.currentPage !== instance.currentPage) {\n      this.setPage(correctedCurrentPage);\n    }\n\n    this.pages = this.getPages(instance.currentPage, instance.itemsPerPage, instance.totalItems);\n  }\n\n  /**\n   * Check if currentPage is out of bound with totalPages\n   *\n   * @param instance instance for which the range is to be corrected\n   */\n  private outOfBoundCorrection(instance: AngularPaginatorInstance): number {\n    const totalPages = Math.ceil(instance.totalItems / instance.itemsPerPage);\n\n    if (totalPages < instance.currentPage && totalPages > 0) {\n      return totalPages;\n    } else if (instance.currentPage < 1) {\n      return 1;\n    }\n\n    return instance.currentPage;\n  }\n\n  /**\n   * check if there is any instance registered with the id\n   */\n  isValidId(): void {\n    if (!this.angularPaginatorService.getInstance(this.id)) {\n      throw new Error(`There is no instance registered with id \\`${this.id}\\``);\n    }\n  }\n\n  ngOnInit(): void {\n    this.isValidId();\n    this.updatePages();\n  }\n\n  ngOnDestroy(): void {\n    /** destroy the subscription when the directive is destroyed */\n    this.subscription.unsubscribe();\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { AngularPaginatorPipe } from './pipes/angular-paginator.pipe';\nimport { AngularPaginatorDirective } from './directives/angular-paginator.directive';\n\n@NgModule({\n  imports: [AngularPaginatorDirective, AngularPaginatorPipe],\n  exports: [AngularPaginatorDirective, AngularPaginatorPipe],\n})\n\nexport class AngularPaginatorModule { }\n","/*\n * Public API Surface of angular-paginator\n */\n\nexport * from './lib/angular-paginator.module';\nexport * from './lib/pipes/angular-paginator.pipe';\nexport * from './lib/directives/angular-paginator.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAOa,uBAAuB,CAAA;;AAElC,IAAA,OAAO,EAAE,GAAG,2BAA2B;;IAGvC,SAAS,GAA6C,EAAE;;AAGxD,IAAA,MAAM,GAAyB,IAAI,YAAY,EAAU;AAEzD;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,QAAkC,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ;YACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;;aACxB;YACL,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC7C,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;;;;AAKnC;;;;;AAKG;AACK,IAAA,cAAc,CAAC,QAAkC,EAAA;QACvD,IAAI,OAAO,GAAG,KAAK;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;AAEnD,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC7C,MAAM,GAAG,GAAG,CAAmC;YAE/C,IACE,GAAG,KAAK;AACL,mBAAA,eAAe,CAAC,CAAmC,CAAC,KAAK;mBACzD,CAAC,OAAO,EACX;AACA,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;AAC5B,oBAAA,GAAG,QAAQ;oBACX,EAAE,EAAE,QAAQ,CAAC,EAAE;iBAChB;gBACD,OAAO,GAAG,IAAI;;;AAIlB,QAAA,OAAO,OAAO;;AAGhB;;;;AAIG;AACH,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;;AAG3B;;;;AAIG;AACH,IAAA,cAAc,CAAC,EAAU,EAAA;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW;;uGAvE5B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA;;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACDD;;AAEG;MAMU,oBAAoB,CAAA;AACvB,IAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAEjE;;;;;AAKG;IACH,SAAS,CAAI,KAAU,EAAE,IAAwB,EAAA;QAC/C,MAAM,QAAQ,GAA6B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC;;AAG3E,QAAA,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ,CAAC;;AAGvD,QAAA,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAI,QAAQ,CAAC,YAAY;QAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,YAAY;QAExD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;;AAGhC;;;;;AAKG;IACK,cAAc,CAAC,KAAgB,EAAE,IAAwB,EAAA;QAC/D,OAAO;AACL,YAAA,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,uBAAuB,CAAC,EAAE;AACnD,YAAA,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACrD,YAAA,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE;YACzD,UAAU,EAAE,KAAK,CAAC,MAAM;SACzB;;uGAlCQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kBAAkB;AACxB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACND;;;AAGG;MAOU,yBAAyB,CAAA;AAC5B,IAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAEjE;;;AAGG;AACM,IAAA,EAAE,GAAW,uBAAuB,CAAC,EAAE;AAEhD;;AAEG;AACM,IAAA,OAAO;AAEhB;;AAEG;IACM,MAAM,GAAG,KAAK;AAEvB;;;;;;AAMG;IACM,mBAAmB,GAAG,KAAK;AAEpC;;AAEG;IACM,aAAa,GAAG,KAAK;AAE9B,IAAA,WAAW;IACX,SAAS,GAAG,CAAC;AACb,IAAA,QAAQ;IACR,KAAK,GAAW,EAAE;AAEV,IAAA,YAAY;AAEpB;;AAEG;AACO,IAAA,UAAU,GAAyB,IAAI,YAAY,CAAS,IAAI,CAAC;AAE3E;;;AAGG;AACH,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAU,KAAI;AAC/E,YAAA,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;gBAClB,IAAI,CAAC,WAAW,EAAE;;AAEtB,SAAC,CAAC;;AAGJ;;AAEG;IACH,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;;AAItC;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;;AAItC;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG9B;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAG7B;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGpB;;;AAGG;AACK,IAAA,OAAO,CAAC,IAAY,EAAA;QAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI9B;;;;;;AAMG;AACK,IAAA,QAAQ,CAAC,UAAkB,EAAE,IAAY,EAAE,QAAiB,EAAA;QAClE,OAAO;AACL,YAAA,MAAM,EAAE,UAAU;YAClB,IAAI;AACJ,YAAA,MAAM,EAAE,QAAQ;SACjB;;AAGH;;;;;;AAMG;AACK,IAAA,iBAAiB,CAAC,WAAmB,EAAE,UAAkB,EAAE,YAAoB,EAAA;QACrF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;;QAGvD,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,OAAO,GAAG,UAAU;AAExB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,GAAG,KAAK;;AAGnE,QAAA,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;;gBAEf,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;;AAGtC,gBAAA,IAAI,OAAO,GAAG,UAAU,EAAE;oBACxB,OAAO,GAAG,UAAU;oBACpB,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;;;iBAEnC;;gBAEL,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC;;AAG5E,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC;;;QAIhE,OAAO;YACL,SAAS;YACT,OAAO;YACP,UAAU;YACV,UAAU;SACX;;AAGH;;;;;;AAMG;AACK,IAAA,QAAQ,CAAC,WAAmB,EAAE,YAAoB,EAAE,UAAkB,EAAA;QAC5E,MAAM,KAAK,GAAW,EAAE;AAExB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;QAChF,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,UAAU;AAEjE,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAG1B,QAAA,KAAK,IAAI,UAAU,GAAG,SAAS,EAAE,UAAU,IAAI,OAAO,EAAE,UAAU,IAAI,CAAC,EAAE;AACvE,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,KAAK,WAAW,CAAC;AACzF,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIlB,QAAA,IACE;gBACI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;AACjC,gBAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,CAAC,EACnE;AACA,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE;;gBAEjB,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,SAAS,GAAG,CAAC,EAAE;AAC9C,oBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AAClE,oBAAA,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;;AAGhC,gBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,oBAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACnB,wBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AACnD,wBAAA,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;;;AAI/B,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;AAClD,oBAAA,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;;;AAIhC,YAAA,IAAI,OAAO,GAAG,UAAU,EAAE;;gBAExB,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,EAAE;AACzD,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AAC5D,oBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGzB,gBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;;AAE5B,oBAAA,IAAI,OAAO,KAAK,UAAU,GAAG,CAAC,EAAE;wBAC9B,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC;AAC9F,wBAAA,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;;;AAIlC,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;AAC5E,oBAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;;;;AAI9B,QAAA,OAAO,KAAK;;AAGd;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,MAAM,QAAQ,GAA6B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAE5F,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAEhE,QAAA,IAAI,oBAAoB,KAAK,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE;AAC9F,YAAA,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;;AAGpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC;;AAG9F;;;;AAIG;AACK,IAAA,oBAAoB,CAAC,QAAkC,EAAA;AAC7D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC;QAEzE,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,IAAI,UAAU,GAAG,CAAC,EAAE;AACvD,YAAA,OAAO,UAAU;;AACZ,aAAA,IAAI,QAAQ,CAAC,WAAW,GAAG,CAAC,EAAE;AACnC,YAAA,OAAO,CAAC;;QAGV,OAAO,QAAQ,CAAC,WAAW;;AAG7B;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACtD,MAAM,IAAI,KAAK,CAAC,CAAA,0CAAA,EAA6C,IAAI,CAAC,EAAE,CAAI,EAAA,CAAA,CAAC;;;IAI7E,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,WAAW,EAAE;;IAGpB,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;uGA/RtB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;wDASU,EAAE,EAAA,CAAA;sBAAV;gBAKQ,OAAO,EAAA,CAAA;sBAAf;gBAKQ,MAAM,EAAA,CAAA;sBAAd;gBASQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAKQ,aAAa,EAAA,CAAA;sBAArB;gBAYS,UAAU,EAAA,CAAA;sBAAnB;;;MChDU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAJvB,yBAAyB,EAAE,oBAAoB,CAC/C,EAAA,OAAA,EAAA,CAAA,yBAAyB,EAAE,oBAAoB,CAAA,EAAA,CAAA;wGAG9C,sBAAsB,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;AAC1D,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;AAC3D,iBAAA;;;ACRD;;AAEG;;ACFH;;AAEG;;;;"}