UNPKG

lucy-calendar

Version:

LucyCalendar is a powerful and flexible date picker library for Angular applications, specifically designed for Ethiopian dates. It provides a user-friendly interface for selecting dates and supports various customization options to fit your needs.

78 lines 15.7 kB
import { CommonModule } from '@angular/common'; import { Component, Input, Output, EventEmitter } from '@angular/core'; import { LucyCalendarComponent } from '../lucy-calendar.component'; import { FormsModule } from '@angular/forms'; import { toEthiopian } from '../date-convertor'; import * as i0 from "@angular/core"; export class LucyDateComponent { label = ''; placeholder = null; dateFormat = 'DD/MM/YYYY'; selectedDay = 0; selectedYear = 0; selectedMonth = 0; readonly = true; disabled = false; value = null; valueChange = new EventEmitter(); dateValue = new Date(); dateValueChange = new EventEmitter(); showCalendar = false; toggleCalendar() { this.showCalendar = !this.showCalendar; } dateChange(date) { if (date === null) return; const et = toEthiopian(date); this.valueChange.emit(this.formatDate(et.year, et.month, et.day)); this.dateValueChange.emit(date); } formatDate(year, month, day) { const formattedMonth = this.padZero(month); const formattedDay = this.padZero(day); return this.dateFormat .replace(/YYYY/i, year.toString()) .replace(/MM/i, formattedMonth) .replace(/dd/i, formattedDay); } padZero(num) { return num.toString().padStart(2, '0'); } ngOnChanges(changes) { if (changes['dateValue']) { this.dateValue = changes['dateValue'].currentValue; } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LucyDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LucyDateComponent, isStandalone: true, selector: "lucy-date", inputs: { label: "label", placeholder: "placeholder", dateFormat: "dateFormat", selectedDay: "selectedDay", selectedYear: "selectedYear", selectedMonth: "selectedMonth", readonly: "readonly", disabled: "disabled", value: "value", dateValue: "dateValue" }, outputs: { valueChange: "valueChange", dateValueChange: "dateValueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\r\n <label for=\"date-picker\" class=\"block text-sm font-medium text-gray-700 mb-1\">\r\n {{ label }}\r\n </label>\r\n\r\n <div class=\"relative\">\r\n <input type=\"text\" id=\"date-picker\" [attr.readonly]=\"readonly ? true : null\"\r\n class=\"block w-full px-4 py-2 text-gray-700 bg-white border disabled:cursor-not-allowed disabled:text-red-700 border-gray-300 rounded-lg shadow-sm cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-800\"\r\n [placeholder]=\"placeholder ?? dateFormat\" [(value)]=\"value\" [attr.disabled]=\"disabled ? true : null\"\r\n (click)=\"readonly ? toggleCalendar() : null\" />\r\n <button\r\n class=\"absolute inset-y-0 right-0 flex items-center pr-3 cursor-pointer disabled:cursor-not-allowed disabled:text-gray-300\"\r\n [disabled]=\"disabled\" (click)=\"toggleCalendar()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"h-6 w-6 text-gray-500 hover:text-gray-700 disabled:hover:text-gray-500\" fill=\"none\"\r\n viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <lucy-calendar [calendarVisible]=\"showCalendar\" [label]=\"label\" [placeholder]=\"placeholder\" [dateValue]=\"dateValue\"\r\n (dateValueChange)=\"dateChange($event)\" (valueChange)=\"valueChange.emit($event)\" [dateFormat]=\"dateFormat\"\r\n [dateFormat]=\"dateFormat\"></lucy-calendar>\r\n <!-- } -->\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: LucyCalendarComponent, selector: "lucy-calendar", inputs: ["label", "dateValue", "placeholder", "min", "max", "dateFormat", "calendarVisible"], outputs: ["valueChange", "dateValueChange"] }, { kind: "ngmodule", type: FormsModule }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LucyDateComponent, decorators: [{ type: Component, args: [{ selector: 'lucy-date', standalone: true, imports: [CommonModule, LucyCalendarComponent, FormsModule], template: "<div class=\"relative\">\r\n <label for=\"date-picker\" class=\"block text-sm font-medium text-gray-700 mb-1\">\r\n {{ label }}\r\n </label>\r\n\r\n <div class=\"relative\">\r\n <input type=\"text\" id=\"date-picker\" [attr.readonly]=\"readonly ? true : null\"\r\n class=\"block w-full px-4 py-2 text-gray-700 bg-white border disabled:cursor-not-allowed disabled:text-red-700 border-gray-300 rounded-lg shadow-sm cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-800\"\r\n [placeholder]=\"placeholder ?? dateFormat\" [(value)]=\"value\" [attr.disabled]=\"disabled ? true : null\"\r\n (click)=\"readonly ? toggleCalendar() : null\" />\r\n <button\r\n class=\"absolute inset-y-0 right-0 flex items-center pr-3 cursor-pointer disabled:cursor-not-allowed disabled:text-gray-300\"\r\n [disabled]=\"disabled\" (click)=\"toggleCalendar()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"h-6 w-6 text-gray-500 hover:text-gray-700 disabled:hover:text-gray-500\" fill=\"none\"\r\n viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <lucy-calendar [calendarVisible]=\"showCalendar\" [label]=\"label\" [placeholder]=\"placeholder\" [dateValue]=\"dateValue\"\r\n (dateValueChange)=\"dateChange($event)\" (valueChange)=\"valueChange.emit($event)\" [dateFormat]=\"dateFormat\"\r\n [dateFormat]=\"dateFormat\"></lucy-calendar>\r\n <!-- } -->\r\n</div>" }] }], propDecorators: { label: [{ type: Input }], placeholder: [{ type: Input }], dateFormat: [{ type: Input }], selectedDay: [{ type: Input }], selectedYear: [{ type: Input }], selectedMonth: [{ type: Input }], readonly: [{ type: Input }], disabled: [{ type: Input }], value: [{ type: Input }], valueChange: [{ type: Output }], dateValue: [{ type: Input }], dateValueChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVjeS1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2x1Y3ktY2FsZW5kYXIvc3JjL2xpYi9sdWN5LWRhdGUvbHVjeS1kYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2x1Y3ktY2FsZW5kYXIvc3JjL2xpYi9sdWN5LWRhdGUvbHVjeS1kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQVNoRCxNQUFNLE9BQU8saUJBQWlCO0lBQ2pCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsVUFBVSxHQUFXLFlBQVksQ0FBQztJQUNsQyxXQUFXLEdBQVcsQ0FBQyxDQUFDO0lBQ3hCLFlBQVksR0FBVyxDQUFDLENBQUM7SUFDekIsYUFBYSxHQUFXLENBQUMsQ0FBQztJQUMxQixRQUFRLEdBQVksSUFBSSxDQUFDO0lBQ3pCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFDM0IsV0FBVyxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUM5RSxTQUFTLEdBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbkMsZUFBZSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO0lBRXZGLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsY0FBYztRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBaUI7UUFDeEIsSUFBSSxJQUFJLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDMUIsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ2pCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDO2FBQzlCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFXO1FBQ2YsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3ZELENBQUM7SUFDTCxDQUFDO3dHQTNDUSxpQkFBaUI7NEZBQWpCLGlCQUFpQix1YUNiOUIsbXZEQXlCTSx5RERoQlEsWUFBWSwrQkFBRSxxQkFBcUIsb01BQUUsV0FBVzs7NEZBSWpELGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDSSxXQUFXLGNBQ1QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLFdBQVcsQ0FBQzs4QkFLbEQsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsU0FBUztzQkFBakIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMdWN5Q2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9sdWN5LWNhbGVuZGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0b0V0aGlvcGlhbiB9IGZyb20gJy4uL2RhdGUtY29udmVydG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsdWN5LWRhdGUnLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEx1Y3lDYWxlbmRhckNvbXBvbmVudCwgRm9ybXNNb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2x1Y3ktZGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9sdWN5LWRhdGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMdWN5RGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmcgPSAnREQvTU0vWVlZWSc7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZERheTogbnVtYmVyID0gMDtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkWWVhcjogbnVtYmVyID0gMDtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkTW9udGg6IG51bWJlciA9IDA7XHJcbiAgICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XHJcbiAgICBASW5wdXQoKSBkYXRlVmFsdWU6IERhdGUgfCBudWxsID0gbmV3IERhdGUoKTtcclxuICAgIEBPdXRwdXQoKSBkYXRlVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xyXG5cclxuICAgIHNob3dDYWxlbmRhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgdG9nZ2xlQ2FsZW5kYXIoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSAhdGhpcy5zaG93Q2FsZW5kYXI7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0ZUNoYW5nZShkYXRlOiBEYXRlIHwgbnVsbCkge1xyXG4gICAgICAgIGlmIChkYXRlID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZXQgPSB0b0V0aGlvcGlhbihkYXRlKTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5mb3JtYXREYXRlKGV0LnllYXIsIGV0Lm1vbnRoLCBldC5kYXkpKTtcclxuICAgICAgICB0aGlzLmRhdGVWYWx1ZUNoYW5nZS5lbWl0KGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdERhdGUoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkTW9udGggPSB0aGlzLnBhZFplcm8obW9udGgpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERheSA9IHRoaXMucGFkWmVybyhkYXkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXRcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1lZWVkvaSwgeWVhci50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvTU0vaSwgZm9ybWF0dGVkTW9udGgpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9kZC9pLCBmb3JtYXR0ZWREYXkpO1xyXG4gICAgfVxyXG4gICAgcGFkWmVybyhudW06IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1snZGF0ZVZhbHVlJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRlVmFsdWUgPSBjaGFuZ2VzWydkYXRlVmFsdWUnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICA8bGFiZWwgZm9yPVwiZGF0ZS1waWNrZXJcIiBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0xXCI+XHJcbiAgICAgICAge3sgbGFiZWwgfX1cclxuICAgIDwvbGFiZWw+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJkYXRlLXBpY2tlclwiIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJsb2NrIHctZnVsbCBweC00IHB5LTIgdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOnRleHQtcmVkLTcwMCBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBzaGFkb3ctc20gY3Vyc29yLXBvaW50ZXIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJsdWUtODAwXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyID8/IGRhdGVGb3JtYXRcIiBbKHZhbHVlKV09XCJ2YWx1ZVwiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicmVhZG9ubHkgPyB0b2dnbGVDYWxlbmRhcigpIDogbnVsbFwiIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LXktMCByaWdodC0wIGZsZXggaXRlbXMtY2VudGVyIHByLTMgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOnRleHQtZ3JheS0zMDBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTYgdy02IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBkaXNhYmxlZDpob3Zlcjp0ZXh0LWdyYXktNTAwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk04IDdWM204IDRWM20tOSA4aDEwTTUgMjFoMTRhMiAyIDAgMDAyLTJWN2EyIDIgMCAwMC0yLTJINWEyIDIgMCAwMC0yIDJ2MTJhMiAyIDAgMDAyIDJ6XCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxsdWN5LWNhbGVuZGFyIFtjYWxlbmRhclZpc2libGVdPVwic2hvd0NhbGVuZGFyXCIgW2xhYmVsXT1cImxhYmVsXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2RhdGVWYWx1ZV09XCJkYXRlVmFsdWVcIlxyXG4gICAgICAgIChkYXRlVmFsdWVDaGFuZ2UpPVwiZGF0ZUNoYW5nZSgkZXZlbnQpXCIgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIlxyXG4gICAgICAgIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIj48L2x1Y3ktY2FsZW5kYXI+XHJcbiAgICA8IS0tIH0gLS0+XHJcbjwvZGl2PiJdfQ==