theme-lib
Version:
This is a simple example Angular Library published to npm.
194 lines • 15.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Component, EventEmitter, HostBinding, Input, Output, Type } from '@angular/core';
import { NbDateService, NbCalendarSize, NbCalendarViewMode } from '../calendar-kit';
/*
* The basis for calendar and range calendar components.
* Encapsulates common behavior - store calendar state and perform navigation
* between pickers.
* */
/**
* @template D, T
*/
export class NbBaseCalendarComponent {
/**
* @param {?} dateService
*/
constructor(dateService) {
this.dateService = dateService;
/*
* Defines if we should render previous and next months
* in the current month view.
* */
this.boundingMonth = true;
/*
* Defines active view for calendar.
* */
this.activeViewMode = NbCalendarViewMode.DATE;
/*
* Size of the calendar and entire components.
* Can be 'medium' which is default or 'large'.
* */
this.size = NbCalendarSize.MEDIUM;
/*
* Determines should we show calendars header or not.
* */
this.showHeader = true;
/*
* Emits date when selected.
* */
this.dateChange = new EventEmitter();
this.ViewMode = NbCalendarViewMode;
}
/**
* @return {?}
*/
ngOnInit() {
if (!this.visibleDate) {
this.visibleDate = this.dateService.today();
}
}
/**
* @return {?}
*/
get medium() {
return this.size === NbCalendarSize.MEDIUM;
}
/**
* @return {?}
*/
get large() {
return this.size === NbCalendarSize.LARGE;
}
/**
* @param {?} viewMode
* @return {?}
*/
setViewMode(viewMode) {
this.activeViewMode = viewMode;
}
/**
* @param {?} visibleDate
* @return {?}
*/
setVisibleDate(visibleDate) {
this.visibleDate = visibleDate;
}
/**
* @return {?}
*/
prevMonth() {
this.changeVisibleMonth(-1);
}
/**
* @return {?}
*/
nextMonth() {
this.changeVisibleMonth(1);
}
/**
* @return {?}
*/
prevYears() {
this.changeVisibleYear(-1);
}
/**
* @return {?}
*/
nextYears() {
this.changeVisibleYear(1);
}
/**
* @return {?}
*/
navigateToday() {
this.setViewMode(NbCalendarViewMode.DATE);
this.visibleDate = this.dateService.today();
}
/**
* @private
* @param {?} direction
* @return {?}
*/
changeVisibleMonth(direction) {
this.visibleDate = this.dateService.addMonth(this.visibleDate, direction);
}
/**
* @private
* @param {?} direction
* @return {?}
*/
changeVisibleYear(direction) {
this.visibleDate = this.dateService.addYear(this.visibleDate, direction * 20);
}
}
NbBaseCalendarComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-base-calendar',
template: "<nb-card>\r\n <nb-card-header *ngIf=\"showHeader\">\r\n <nb-calendar-header (navigateToday)=\"navigateToday()\"></nb-calendar-header>\r\n </nb-card-header>\r\n\r\n <nb-card-body [ngSwitch]=\"activeViewMode\">\r\n\r\n <ng-container *ngSwitchCase=\"ViewMode.DATE\">\r\n\r\n <nb-calendar-pageable-navigation\r\n *ngSwitchCase=\"ViewMode.DATE\"\r\n [date]=\"visibleDate\"\r\n (next)=\"nextMonth()\"\r\n (prev)=\"prevMonth()\"\r\n (changeMode)=\"setViewMode(ViewMode.YEAR)\">\r\n </nb-calendar-pageable-navigation>\r\n\r\n <nb-calendar-day-picker\r\n [boundingMonths]=\"boundingMonth\"\r\n [cellComponent]=\"dayCellComponent\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [filter]=\"filter\"\r\n [visibleDate]=\"visibleDate\"\r\n [size]=\"size\"\r\n [date]=\"date\"\r\n (dateChange)=\"dateChange.emit($event)\">\r\n </nb-calendar-day-picker>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"ViewMode.YEAR\">\r\n\r\n <nb-calendar-pageable-navigation\r\n [date]=\"visibleDate\"\r\n (next)=\"nextYears()\"\r\n (prev)=\"prevYears()\"\r\n (changeMode)=\"setViewMode(ViewMode.DATE)\">\r\n </nb-calendar-pageable-navigation>\r\n\r\n <nb-calendar-year-picker\r\n [cellComponent]=\"yearCellComponent\"\r\n [date]=\"date\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [filter]=\"filter\"\r\n [size]=\"size\"\r\n [year]=\"visibleDate\"\r\n (yearChange)=\"setVisibleDate($event); setViewMode(ViewMode.MONTH)\">\r\n </nb-calendar-year-picker>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"ViewMode.MONTH\">\r\n\r\n <nb-calendar-navigation\r\n [date]=\"visibleDate\"\r\n (changeMode)=\"setViewMode(ViewMode.DATE)\">\r\n </nb-calendar-navigation>\r\n\r\n <nb-calendar-month-picker\r\n [cellComponent]=\"monthCellComponent\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [filter]=\"filter\"\r\n [size]=\"size\"\r\n [month]=\"visibleDate\"\r\n (monthChange)=\"setVisibleDate($event); setViewMode(ViewMode.DATE)\">\r\n </nb-calendar-month-picker>\r\n\r\n </ng-container>\r\n\r\n </nb-card-body>\r\n\r\n</nb-card>\r\n"
}] }
];
/** @nocollapse */
NbBaseCalendarComponent.ctorParameters = () => [
{ type: NbDateService }
];
NbBaseCalendarComponent.propDecorators = {
boundingMonth: [{ type: Input }],
activeViewMode: [{ type: Input, args: ['startView',] }],
min: [{ type: Input }],
max: [{ type: Input }],
filter: [{ type: Input }],
dayCellComponent: [{ type: Input }],
monthCellComponent: [{ type: Input }],
yearCellComponent: [{ type: Input }],
size: [{ type: Input }],
visibleDate: [{ type: Input }],
showHeader: [{ type: Input }],
date: [{ type: Input }],
dateChange: [{ type: Output }],
medium: [{ type: HostBinding, args: ['class.medium',] }],
large: [{ type: HostBinding, args: ['class.large',] }]
};
if (false) {
/** @type {?} */
NbBaseCalendarComponent.prototype.boundingMonth;
/** @type {?} */
NbBaseCalendarComponent.prototype.activeViewMode;
/** @type {?} */
NbBaseCalendarComponent.prototype.min;
/** @type {?} */
NbBaseCalendarComponent.prototype.max;
/** @type {?} */
NbBaseCalendarComponent.prototype.filter;
/** @type {?} */
NbBaseCalendarComponent.prototype.dayCellComponent;
/** @type {?} */
NbBaseCalendarComponent.prototype.monthCellComponent;
/** @type {?} */
NbBaseCalendarComponent.prototype.yearCellComponent;
/** @type {?} */
NbBaseCalendarComponent.prototype.size;
/** @type {?} */
NbBaseCalendarComponent.prototype.visibleDate;
/** @type {?} */
NbBaseCalendarComponent.prototype.showHeader;
/** @type {?} */
NbBaseCalendarComponent.prototype.date;
/** @type {?} */
NbBaseCalendarComponent.prototype.dateChange;
/** @type {?} */
NbBaseCalendarComponent.prototype.ViewMode;
/**
* @type {?}
* @protected
*/
NbBaseCalendarComponent.prototype.dateService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYWxlbmRhci9iYXNlLWNhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUFFLGFBQWEsRUFBa0IsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVlwRyxNQUFNLE9BQU8sdUJBQXVCOzs7O0lBa0VsQyxZQUFzQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7Ozs7O1FBNUQxQyxrQkFBYSxHQUFZLElBQUksQ0FBQzs7OztRQUtuQixtQkFBYyxHQUF1QixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Ozs7O1FBb0N4RSxTQUFJLEdBQW1CLGNBQWMsQ0FBQyxNQUFNLENBQUM7Ozs7UUFPN0MsZUFBVSxHQUFZLElBQUksQ0FBQzs7OztRQVUxQixlQUFVLEdBQW9CLElBQUksWUFBWSxFQUFFLENBQUM7UUFxQjNELGFBQVEsR0FBRyxrQkFBa0IsQ0FBQztJQWxCOUIsQ0FBQzs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDN0M7SUFDSCxDQUFDOzs7O0lBRUQsSUFDSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsQ0FBQzs7OztJQUVELElBQ00sS0FBSztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQzVDLENBQUM7Ozs7O0lBSUQsV0FBVyxDQUFDLFFBQTRCO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUM7Ozs7O0lBRUQsY0FBYyxDQUFDLFdBQWM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQzs7OztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDOzs7O0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7O0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Ozs7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Ozs7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7Ozs7O0lBRU8sa0JBQWtCLENBQUMsU0FBaUI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Ozs7OztJQUVPLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQzs7O1lBOUhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1Qiw0eUVBQTZDO2FBQzlDOzs7O1lBWFEsYUFBYTs7OzRCQWtCbkIsS0FBSzs2QkFLTCxLQUFLLFNBQUMsV0FBVztrQkFLakIsS0FBSztrQkFLTCxLQUFLO3FCQUtMLEtBQUs7K0JBS0wsS0FBSztpQ0FLTCxLQUFLO2dDQUtMLEtBQUs7bUJBTUwsS0FBSzswQkFFTCxLQUFLO3lCQUtMLEtBQUs7bUJBS0wsS0FBSzt5QkFLTCxNQUFNO3FCQVdOLFdBQVcsU0FBQyxjQUFjO29CQUsxQixXQUFXLFNBQUMsYUFBYTs7OztJQTFFMUIsZ0RBQXVDOztJQUt2QyxpREFBaUY7O0lBS2pGLHNDQUFnQjs7SUFLaEIsc0NBQWdCOztJQUtoQix5Q0FBZ0M7O0lBS2hDLG1EQUFzRDs7SUFLdEQscURBQXdEOztJQUt4RCxvREFBdUQ7O0lBTXZELHVDQUFzRDs7SUFFdEQsOENBQXdCOztJQUt4Qiw2Q0FBb0M7O0lBS3BDLHVDQUFpQjs7SUFLakIsNkNBQTJEOztJQXFCM0QsMkNBQThCOzs7OztJQW5CbEIsOENBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBOYkRhdGVTZXJ2aWNlLCBOYkNhbGVuZGFyQ2VsbCwgTmJDYWxlbmRhclNpemUsIE5iQ2FsZW5kYXJWaWV3TW9kZSB9IGZyb20gJy4uL2NhbGVuZGFyLWtpdCc7XHJcblxyXG5cclxuLypcclxuICogVGhlIGJhc2lzIGZvciBjYWxlbmRhciBhbmQgcmFuZ2UgY2FsZW5kYXIgY29tcG9uZW50cy5cclxuICogRW5jYXBzdWxhdGVzIGNvbW1vbiBiZWhhdmlvciAtIHN0b3JlIGNhbGVuZGFyIHN0YXRlIGFuZCBwZXJmb3JtIG5hdmlnYXRpb25cclxuICogYmV0d2VlbiBwaWNrZXJzLlxyXG4gKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLWJhc2UtY2FsZW5kYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXNlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQmFzZUNhbGVuZGFyQ29tcG9uZW50PEQsIFQ+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLypcclxuICAgKiBEZWZpbmVzIGlmIHdlIHNob3VsZCByZW5kZXIgcHJldmlvdXMgYW5kIG5leHQgbW9udGhzXHJcbiAgICogaW4gdGhlIGN1cnJlbnQgbW9udGggdmlldy5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIGJvdW5kaW5nTW9udGg6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKlxyXG4gICAqIERlZmluZXMgYWN0aXZlIHZpZXcgZm9yIGNhbGVuZGFyLlxyXG4gICAqICovXHJcbiAgQElucHV0KCdzdGFydFZpZXcnKSBhY3RpdmVWaWV3TW9kZTogTmJDYWxlbmRhclZpZXdNb2RlID0gTmJDYWxlbmRhclZpZXdNb2RlLkRBVEU7XHJcblxyXG4gIC8qXHJcbiAgICogTWluaW11bSBhdmFpbGFibGUgZGF0ZSBmb3Igc2VsZWN0aW9uLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgbWluOiBEO1xyXG5cclxuICAvKlxyXG4gICAqIE1heGltdW0gYXZhaWxhYmxlIGRhdGUgZm9yIHNlbGVjdGlvbi5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIG1heDogRDtcclxuXHJcbiAgLypcclxuICAgKiBQcmVkaWNhdGUgdGhhdCBkZWNpZGVzIHdoaWNoIGNlbGxzIHdpbGwgYmUgZGlzYWJsZWQuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBmaWx0ZXI6IChEKSA9PiBib29sZWFuO1xyXG5cclxuICAvKlxyXG4gICAqIEN1c3RvbSBkYXkgY2VsbCBjb21wb25lbnQuIEhhdmUgdG8gaW1wbGVtZW50IGBOYkNhbGVuZGFyQ2VsbGAgaW50ZXJmYWNlLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgZGF5Q2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBUPj47XHJcblxyXG4gIC8qXHJcbiAgICogQ3VzdG9tIG1vbnRoIGNlbGwgY29tcG9uZW50LiBIYXZlIHRvIGltcGxlbWVudCBgTmJDYWxlbmRhckNlbGxgIGludGVyZmFjZS5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIG1vbnRoQ2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBUPj47XHJcblxyXG4gIC8qXHJcbiAgICogQ3VzdG9tIHllYXIgY2VsbCBjb21wb25lbnQuIEhhdmUgdG8gaW1wbGVtZW50IGBOYkNhbGVuZGFyQ2VsbGAgaW50ZXJmYWNlLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgeWVhckNlbGxDb21wb25lbnQ6IFR5cGU8TmJDYWxlbmRhckNlbGw8RCwgVD4+O1xyXG5cclxuICAvKlxyXG4gICAqIFNpemUgb2YgdGhlIGNhbGVuZGFyIGFuZCBlbnRpcmUgY29tcG9uZW50cy5cclxuICAgKiBDYW4gYmUgJ21lZGl1bScgd2hpY2ggaXMgZGVmYXVsdCBvciAnbGFyZ2UnLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgc2l6ZTogTmJDYWxlbmRhclNpemUgPSBOYkNhbGVuZGFyU2l6ZS5NRURJVU07XHJcblxyXG4gIEBJbnB1dCgpIHZpc2libGVEYXRlOiBEO1xyXG5cclxuICAvKlxyXG4gICAqIERldGVybWluZXMgc2hvdWxkIHdlIHNob3cgY2FsZW5kYXJzIGhlYWRlciBvciBub3QuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBzaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLypcclxuICAgKiBWYWx1ZSB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGFzIHNlbGVjdGVkLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgZGF0ZTogVDtcclxuXHJcbiAgLypcclxuICAgKiBFbWl0cyBkYXRlIHdoZW4gc2VsZWN0ZWQuXHJcbiAgICogKi9cclxuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGF0ZVNlcnZpY2U6IE5iRGF0ZVNlcnZpY2U8RD4pIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLnZpc2libGVEYXRlKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnRvZGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1lZGl1bScpXHJcbiAgZ2V0IG1lZGl1bSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQ2FsZW5kYXJTaXplLk1FRElVTTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubGFyZ2UnKVxyXG4gICAgZ2V0IGxhcmdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJDYWxlbmRhclNpemUuTEFSR0U7XHJcbiAgfVxyXG5cclxuICBWaWV3TW9kZSA9IE5iQ2FsZW5kYXJWaWV3TW9kZTtcclxuXHJcbiAgc2V0Vmlld01vZGUodmlld01vZGU6IE5iQ2FsZW5kYXJWaWV3TW9kZSkge1xyXG4gICAgdGhpcy5hY3RpdmVWaWV3TW9kZSA9IHZpZXdNb2RlO1xyXG4gIH1cclxuXHJcbiAgc2V0VmlzaWJsZURhdGUodmlzaWJsZURhdGU6IEQpIHtcclxuICAgIHRoaXMudmlzaWJsZURhdGUgPSB2aXNpYmxlRGF0ZTtcclxuICB9XHJcblxyXG4gIHByZXZNb250aCgpIHtcclxuICAgIHRoaXMuY2hhbmdlVmlzaWJsZU1vbnRoKC0xKTtcclxuICB9XHJcblxyXG4gIG5leHRNb250aCgpIHtcclxuICAgIHRoaXMuY2hhbmdlVmlzaWJsZU1vbnRoKDEpO1xyXG4gIH1cclxuXHJcbiAgcHJldlllYXJzKCkge1xyXG4gICAgdGhpcy5jaGFuZ2VWaXNpYmxlWWVhcigtMSk7XHJcbiAgfVxyXG5cclxuICBuZXh0WWVhcnMoKSB7XHJcbiAgICB0aGlzLmNoYW5nZVZpc2libGVZZWFyKDEpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb2RheSgpIHtcclxuICAgIHRoaXMuc2V0Vmlld01vZGUoTmJDYWxlbmRhclZpZXdNb2RlLkRBVEUpO1xyXG4gICAgdGhpcy52aXNpYmxlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudG9kYXkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlVmlzaWJsZU1vbnRoKGRpcmVjdGlvbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnZpc2libGVEYXRlID0gdGhpcy5kYXRlU2VydmljZS5hZGRNb250aCh0aGlzLnZpc2libGVEYXRlLCBkaXJlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VWaXNpYmxlWWVhcihkaXJlY3Rpb246IG51bWJlcikge1xyXG4gICAgdGhpcy52aXNpYmxlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UuYWRkWWVhcih0aGlzLnZpc2libGVEYXRlLCBkaXJlY3Rpb24gKiAyMCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==