ngx-obelisco-example
Version:
Componentes funcionales y reutilizables para Angular.
90 lines • 19.9 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "./components/pagination-number/pagination-number.component";
import * as i3 from "./components/pagination-item/pagination-item.component";
export class OPaginationComponent {
constructor() {
this.currentPage = 1;
this.isDiscriptiveType = false;
this.customClasses = '';
this.currentPageChange = new EventEmitter();
this.pagesArr = [];
this.isShowTopTrimmer = false;
this.isShowBottomTrimmer = false;
this.pagesToShow = [];
this.isBlockEvent = false;
}
get getIsFirstPage() {
return this.currentPage === 0;
}
get getIsLastPage() {
return this.currentPage === this.pagesArr.length - 1;
}
ngOnInit() {
this.pagesArr = Array.from(Array(this.totalPages).keys());
this.pagesToShow = this.pagesArr;
this.lastIndex = this.pagesArr.length - 1;
this.isShowTopTrimmer = true;
this.selectedPage(this.currentPage - 1);
}
selectedPage(page) {
if (this.currentPage === page)
return;
this.currentPage = page;
if (!this.isBlockEvent) {
this.currentPageChange.emit(page + 1);
}
if (this.pagesArr.length > 2) {
if (this.currentPage < 4) {
this.lastIndex = this.pagesArr.length - 1;
this.pagesToShow = [0, 1, 2, 3, 4];
this.isShowTopTrimmer = true;
this.isShowBottomTrimmer = false;
}
else if (this.currentPage > this.lastIndex - 4) {
this.pagesToShow = this.pagesArr.slice(-5);
this.isShowTopTrimmer = false;
this.isShowBottomTrimmer = true;
}
else {
this.pagesToShow = this.pagesArr.slice(this.currentPage - 1, this.currentPage + 2);
this.isShowBottomTrimmer = true;
this.isShowTopTrimmer = true;
}
}
}
onPrev() {
this.isBlockEvent = true;
this.currentPageChange.emit(this.currentPage);
if (this.currentPage > 0)
this.selectedPage(this.currentPage - 1);
this.isBlockEvent = false;
}
onNext() {
this.isBlockEvent = true;
if (this.currentPage < this.pagesArr.length - 1)
this.selectedPage(this.currentPage + 1);
this.currentPageChange.emit(this.currentPage + 1);
this.isBlockEvent = false;
}
}
OPaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
OPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OPaginationComponent, selector: "o-pagination", inputs: { totalPages: "totalPages", ariaLabel: "ariaLabel", currentPage: "currentPage", isDiscriptiveType: "isDiscriptiveType", customClasses: "customClasses" }, outputs: { currentPageChange: "currentPageChange" }, ngImport: i0, template: "<ng-container *ngIf=\"!isDiscriptiveType; else descriptive\">\r\n <nav [attr.aria-label]=\"ariaLabel\" [ngClass]=\"customClasses\">\r\n <ul class=\"pagination\">\r\n <o-pagination-item [class.hidden]=\"getIsFirstPage\" (click)=\"onPrev()\">\r\n <span class=\"page-previous-icon\" [attr.aria-hidden]=\"true\"></span>\r\n <span class=\"page-previous-text\">Anterior</span>\r\n </o-pagination-item>\r\n\r\n <ng-container *ngIf=\"isShowBottomTrimmer\">\r\n <o-pagination-number [index]=\"0\" [current]=\"currentPage\" (click)=\"selectedPage(0)\"> </o-pagination-number>\r\n <o-pagination-item [isDisabled]=\"true\" [isNoEvent]=\"true\"></o-pagination-item>\r\n </ng-container>\r\n\r\n <o-pagination-number *ngFor=\"let i of pagesToShow\" [index]=\"i\" [current]=\"currentPage\" (click)=\"selectedPage(i)\">\r\n </o-pagination-number>\r\n\r\n <ng-container *ngIf=\"isShowTopTrimmer\">\r\n <o-pagination-item [isDisabled]=\"true\" [isNoEvent]=\"true\"></o-pagination-item>\r\n <o-pagination-number [index]=\"lastIndex\" [current]=\"currentPage\" (click)=\"selectedPage(lastIndex)\">\r\n </o-pagination-number>\r\n </ng-container>\r\n\r\n <o-pagination-item [class.hidden]=\"getIsLastPage\" (click)=\"onNext()\">\r\n <span class=\"page-next-text\">Siguiente</span>\r\n <span class=\"page-next-icon\" [attr.aria-hidden]=\"true\"></span>\r\n </o-pagination-item>\r\n </ul>\r\n </nav>\r\n</ng-container>\r\n\r\n<ng-template #descriptive>\r\n <div class=\"pagination\" [ngClass]=\"customClasses\">\r\n <div class=\"page-navigation\">\r\n <div class=\"page-item\" [class.hidden]=\"getIsFirstPage\" (click)=\"onPrev()\">\r\n <a class=\"btn page-link\" href=\"#\">\r\n <span class=\"page-previous-icon\" [attr.aria-hidden]=\"true\"></span>\r\n <span class=\"page-next-text\">Anterior</span>\r\n </a>\r\n </div>\r\n <div class=\"page-item\" [class.hidden]=\"getIsLastPage\" (click)=\"onNext()\">\r\n <a class=\"btn page-link\" href=\"#\">\r\n <span class=\"page-next-text\">Siguiente</span>\r\n <span class=\"page-next-icon\" [attr.aria-hidden]=\"true\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".hidden{opacity:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PaginationNumberComponent, selector: "o-pagination-number", inputs: ["index", "current"] }, { kind: "component", type: i3.PaginationItemComponent, selector: "o-pagination-item", inputs: ["isActive", "isDisabled", "isNoEvent"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OPaginationComponent, decorators: [{
type: Component,
args: [{ selector: 'o-pagination', template: "<ng-container *ngIf=\"!isDiscriptiveType; else descriptive\">\r\n <nav [attr.aria-label]=\"ariaLabel\" [ngClass]=\"customClasses\">\r\n <ul class=\"pagination\">\r\n <o-pagination-item [class.hidden]=\"getIsFirstPage\" (click)=\"onPrev()\">\r\n <span class=\"page-previous-icon\" [attr.aria-hidden]=\"true\"></span>\r\n <span class=\"page-previous-text\">Anterior</span>\r\n </o-pagination-item>\r\n\r\n <ng-container *ngIf=\"isShowBottomTrimmer\">\r\n <o-pagination-number [index]=\"0\" [current]=\"currentPage\" (click)=\"selectedPage(0)\"> </o-pagination-number>\r\n <o-pagination-item [isDisabled]=\"true\" [isNoEvent]=\"true\"></o-pagination-item>\r\n </ng-container>\r\n\r\n <o-pagination-number *ngFor=\"let i of pagesToShow\" [index]=\"i\" [current]=\"currentPage\" (click)=\"selectedPage(i)\">\r\n </o-pagination-number>\r\n\r\n <ng-container *ngIf=\"isShowTopTrimmer\">\r\n <o-pagination-item [isDisabled]=\"true\" [isNoEvent]=\"true\"></o-pagination-item>\r\n <o-pagination-number [index]=\"lastIndex\" [current]=\"currentPage\" (click)=\"selectedPage(lastIndex)\">\r\n </o-pagination-number>\r\n </ng-container>\r\n\r\n <o-pagination-item [class.hidden]=\"getIsLastPage\" (click)=\"onNext()\">\r\n <span class=\"page-next-text\">Siguiente</span>\r\n <span class=\"page-next-icon\" [attr.aria-hidden]=\"true\"></span>\r\n </o-pagination-item>\r\n </ul>\r\n </nav>\r\n</ng-container>\r\n\r\n<ng-template #descriptive>\r\n <div class=\"pagination\" [ngClass]=\"customClasses\">\r\n <div class=\"page-navigation\">\r\n <div class=\"page-item\" [class.hidden]=\"getIsFirstPage\" (click)=\"onPrev()\">\r\n <a class=\"btn page-link\" href=\"#\">\r\n <span class=\"page-previous-icon\" [attr.aria-hidden]=\"true\"></span>\r\n <span class=\"page-next-text\">Anterior</span>\r\n </a>\r\n </div>\r\n <div class=\"page-item\" [class.hidden]=\"getIsLastPage\" (click)=\"onNext()\">\r\n <a class=\"btn page-link\" href=\"#\">\r\n <span class=\"page-next-text\">Siguiente</span>\r\n <span class=\"page-next-icon\" [attr.aria-hidden]=\"true\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".hidden{opacity:0}\n"] }]
}], propDecorators: { totalPages: [{
type: Input
}], ariaLabel: [{
type: Input
}], currentPage: [{
type: Input
}], isDiscriptiveType: [{
type: Input
}], customClasses: [{
type: Input
}], currentPageChange: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYmVsaXNjby9wYWdpbmF0aW9uL28tcGFnaW5hdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2JlbGlzY28vcGFnaW5hdGlvbi9vLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPL0UsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQVFrQixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDMUIsc0JBQWlCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFL0UsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUN4QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBRTNCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0tBeUQ3QjtJQXZEQyxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxD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LFNBQVM7K0JBQ0UsY0FBYzs4QkFLUixVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVyxpQkFBaUI7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ28tcGFnaW5hdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL28tcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vby1wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE9QYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBwdWJsaWMgdG90YWxQYWdlcyE6IG51bWJlcjtcclxuICBASW5wdXQoKSBwdWJsaWMgYXJpYUxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBASW5wdXQoKSBwdWJsaWMgaXNEaXNjcmlwdGl2ZVR5cGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQ2xhc3Nlczogc3RyaW5nID0gJyc7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjdXJyZW50UGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgcHVibGljIHBhZ2VzQXJyOiBudW1iZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBpc1Nob3dUb3BUcmltbWVyID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2hvd0JvdHRvbVRyaW1tZXIgPSBmYWxzZTtcclxuICBwdWJsaWMgcGFnZXNUb1Nob3c6IG51bWJlcltdID0gW107XHJcbiAgcHVibGljIGxhc3RJbmRleCE6IG51bWJlcjtcclxuICBwdWJsaWMgaXNCbG9ja0V2ZW50ID0gZmFsc2U7XHJcblxyXG4gIGdldCBnZXRJc0ZpcnN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldElzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlc0Fyci5sZW5ndGggLSAxO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2VzQXJyID0gQXJyYXkuZnJvbShBcnJheSh0aGlzLnRvdGFsUGFnZXMpLmtleXMoKSk7XHJcbiAgICB0aGlzLnBhZ2VzVG9TaG93ID0gdGhpcy5wYWdlc0FycjtcclxuICAgIHRoaXMubGFzdEluZGV4ID0gdGhpcy5wYWdlc0Fyci5sZW5ndGggLSAxO1xyXG4gICAgdGhpcy5pc1Nob3dUb3BUcmltbWVyID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQYWdlKHRoaXMuY3VycmVudFBhZ2UgLSAxKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RlZFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA9PT0gcGFnZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzQmxvY2tFdmVudCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlQ2hhbmdlLmVtaXQocGFnZSArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhZ2VzQXJyLmxlbmd0aCA+IDIpIHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPCA0KSB7XHJcbiAgICAgICAgdGhpcy5sYXN0SW5kZXggPSB0aGlzLnBhZ2VzQXJyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgdGhpcy5wYWdlc1RvU2hvdyA9IFswLCAxLCAyLCAzLCA0XTtcclxuICAgICAgICB0aGlzLmlzU2hvd1RvcFRyaW1tZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNTaG93Qm90dG9tVHJpbW1lciA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLmxhc3RJbmRleCAtIDQpIHtcclxuICAgICAgICB0aGlzLnBhZ2VzVG9TaG93ID0gdGhpcy5wYWdlc0Fyci5zbGljZSgtNSk7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dUb3BUcmltbWVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dCb3R0b21UcmltbWVyID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhZ2VzVG9TaG93ID0gdGhpcy5wYWdlc0Fyci5zbGljZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSwgdGhpcy5jdXJyZW50UGFnZSArIDIpO1xyXG4gICAgICAgIHRoaXMuaXNTaG93Qm90dG9tVHJpbW1lciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dUb3BUcmltbWVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUHJldigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNCbG9ja0V2ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2VDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gMCkgdGhpcy5zZWxlY3RlZFBhZ2UodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xyXG4gICAgdGhpcy5pc0Jsb2NrRXZlbnQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5leHQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQmxvY2tFdmVudCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8IHRoaXMucGFnZXNBcnIubGVuZ3RoIC0gMSkgdGhpcy5zZWxlY3RlZFBhZ2UodGhpcy5jdXJyZW50UGFnZSArIDEpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZUNoYW5nZS5lbWl0KHRoaXMuY3VycmVudFBhZ2UgKyAxKTtcclxuICAgIHRoaXMuaXNCbG9ja0V2ZW50ID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEaXNjcmlwdGl2ZVR5cGU7IGVsc2UgZGVzY3JpcHRpdmVcIj5cclxuICA8bmF2IFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCIgW25nQ2xhc3NdPVwiY3VzdG9tQ2xhc3Nlc1wiPlxyXG4gICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICA8by1wYWdpbmF0aW9uLWl0ZW0gW2NsYXNzLmhpZGRlbl09XCJnZXRJc0ZpcnN0UGFnZVwiIChjbGljayk9XCJvblByZXYoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1wcmV2aW91cy1pY29uXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtcHJldmlvdXMtdGV4dFwiPkFudGVyaW9yPC9zcGFuPlxyXG4gICAgICA8L28tcGFnaW5hdGlvbi1pdGVtPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2hvd0JvdHRvbVRyaW1tZXJcIj5cclxuICAgICAgICA8by1wYWdpbmF0aW9uLW51bWJlciBbaW5kZXhdPVwiMFwiIFtjdXJyZW50XT1cImN1cnJlbnRQYWdlXCIgKGNsaWNrKT1cInNlbGVjdGVkUGFnZSgwKVwiPiA8L28tcGFnaW5hdGlvbi1udW1iZXI+XHJcbiAgICAgICAgPG8tcGFnaW5hdGlvbi1pdGVtIFtpc0Rpc2FibGVkXT1cInRydWVcIiBbaXNOb0V2ZW50XT1cInRydWVcIj48L28tcGFnaW5hdGlvbi1pdGVtPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxvLXBhZ2luYXRpb24tbnVtYmVyICpuZ0Zvcj1cImxldCBpIG9mIHBhZ2VzVG9TaG93XCIgW2luZGV4XT1cImlcIiBbY3VycmVudF09XCJjdXJyZW50UGFnZVwiIChjbGljayk9XCJzZWxlY3RlZFBhZ2UoaSlcIj5cclxuICAgICAgPC9vLXBhZ2luYXRpb24tbnVtYmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2hvd1RvcFRyaW1tZXJcIj5cclxuICAgICAgICA8by1wYWdpbmF0aW9uLWl0ZW0gW2lzRGlzYWJsZWRdPVwidHJ1ZVwiIFtpc05vRXZlbnRdPVwidHJ1ZVwiPjwvby1wYWdpbmF0aW9uLWl0ZW0+XHJcbiAgICAgICAgPG8tcGFnaW5hdGlvbi1udW1iZXIgW2luZGV4XT1cImxhc3RJbmRleFwiIFtjdXJyZW50XT1cImN1cnJlbnRQYWdlXCIgKGNsaWNrKT1cInNlbGVjdGVkUGFnZShsYXN0SW5kZXgpXCI+XHJcbiAgICAgICAgPC9vLXBhZ2luYXRpb24tbnVtYmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxvLXBhZ2luYXRpb24taXRlbSBbY2xhc3MuaGlkZGVuXT1cImdldElzTGFzdFBhZ2VcIiAoY2xpY2spPVwib25OZXh0KClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbmV4dC10ZXh0XCI+U2lndWllbnRlPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1uZXh0LWljb25cIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICA8L28tcGFnaW5hdGlvbi1pdGVtPlxyXG4gICAgPC91bD5cclxuICA8L25hdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2Rlc2NyaXB0aXZlPlxyXG4gIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCIgW25nQ2xhc3NdPVwiY3VzdG9tQ2xhc3Nlc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtbmF2aWdhdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFnZS1pdGVtXCIgW2NsYXNzLmhpZGRlbl09XCJnZXRJc0ZpcnN0UGFnZVwiIChjbGljayk9XCJvblByZXYoKVwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiYnRuIHBhZ2UtbGlua1wiIGhyZWY9XCIjXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtcHJldmlvdXMtaWNvblwiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbmV4dC10ZXh0XCI+QW50ZXJpb3I8L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5oaWRkZW5dPVwiZ2V0SXNMYXN0UGFnZVwiIChjbGljayk9XCJvbk5leHQoKVwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiYnRuIHBhZ2UtbGlua1wiIGhyZWY9XCIjXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbmV4dC10ZXh0XCI+U2lndWllbnRlPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLW5leHQtaWNvblwiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=