theme-lib
Version:
This is a simple example Angular Library published to npm.
324 lines • 22.6 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, Input, Output, Type } from '@angular/core';
import { NbCalendarSize, NbCalendarViewMode, NbDateService } from '../calendar-kit';
import { NbCalendarRangeDayCellComponent, NbCalendarRangeYearCellComponent } from './calendar-range-cells';
/**
* @record
* @template D
*/
export function NbCalendarRange() { }
if (false) {
/** @type {?} */
NbCalendarRange.prototype.start;
/** @type {?|undefined} */
NbCalendarRange.prototype.end;
}
/*
* CalendarRange component provides a capability to choose a date range.
*
* ```html
* <nb-calendar [(date)]="date"></nb-calendar>
* <nb-calendar [date]="date" (dateChange)="handleDateChange($event)"></nb-calendar>
* ```
*
* Basic usage example
* @stacked-example(Range, calendar/calendar-range-showcase.component)
*
* ### Installation
*
* Import `NbCalendarRangeModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbCalendarRangeModule,
* ],
* })
* export class PageModule { }
* ```
*
* ### Usage
*
* CalendarRange component supports all of the Calendar component customization properties. More defails can be found
* in the [Calendar component docs](docs/components/calendar).
*
* @styles
*
* calendar-width
* calendar-body-height
* calendar-header-title-font-size
* calendar-header-title-font-weight
* calendar-header-sub-title-font-size
* calendar-header-sub-title-font-weight
* calendar-navigation-button-width
* calendar-selected-item-bg
* calendar-hover-item-bg
* calendar-today-item-bg
* calendar-active-item-bg
* calendar-fg
* calendar-selected-fg
* calendar-day-cell-width
* calendar-day-cell-height
* calendar-month-cell-width
* calendar-month-cell-height
* calendar-year-cell-width
* calendar-year-cell-height
* calendar-inactive-opacity
* calendar-disabled-opacity
* calendar-border-radius
* calendar-weekday-width
* calendar-weekday-height
* calendar-weekday-font-size
* calendar-weekday-font-weight
* calendar-weekday-fg
* calendar-weekday-holiday-fg
* calendar-range-bg-in-range
* calendar-large-width
* calendar-large-body-height
* calendar-day-cell-large-width
* calendar-day-cell-large-height
* calendar-month-cell-large-width
* calendar-month-cell-large-height
* calendar-year-cell-large-width
* calendar-year-cell-large-height
* */
/**
* @template D
*/
var NbCalendarRangeComponent = /** @class */ (function () {
function NbCalendarRangeComponent(dateService) {
this.dateService = dateService;
/*
* Defines if we should render previous and next months
* in the current month view.
* */
this.boundingMonth = true;
/*
* Defines starting view for the calendar.
* */
this.startView = NbCalendarViewMode.DATE;
this.dayCellComponent = NbCalendarRangeDayCellComponent;
this.yearCellComponent = NbCalendarRangeYearCellComponent;
/*
* 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 range when start selected and emits again when end selected.
* */
this.rangeChange = new EventEmitter();
}
Object.defineProperty(NbCalendarRangeComponent.prototype, "_cellComponent", {
/*
* Custom day cell component. Have to implement `NbCalendarCell` interface.
* */
set: /*
* Custom day cell component. Have to implement `NbCalendarCell` interface.
* */
/**
* @param {?} cellComponent
* @return {?}
*/
function (cellComponent) {
if (cellComponent) {
this.dayCellComponent = cellComponent;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCalendarRangeComponent.prototype, "_yearCellComponent", {
/*
* Custom year cell component. Have to implement `NbCalendarCell` interface.
* */
set: /*
* Custom year cell component. Have to implement `NbCalendarCell` interface.
* */
/**
* @param {?} cellComponent
* @return {?}
*/
function (cellComponent) {
if (cellComponent) {
this.yearCellComponent = cellComponent;
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} date
* @return {?}
*/
NbCalendarRangeComponent.prototype.onChange = /**
* @param {?} date
* @return {?}
*/
function (date) {
this.initDateIfNull();
this.handleSelected(date);
};
/**
* @private
* @return {?}
*/
NbCalendarRangeComponent.prototype.initDateIfNull = /**
* @private
* @return {?}
*/
function () {
if (!this.range) {
this.range = { start: null, end: null };
}
};
/**
* @private
* @param {?} date
* @return {?}
*/
NbCalendarRangeComponent.prototype.handleSelected = /**
* @private
* @param {?} date
* @return {?}
*/
function (date) {
if (this.selectionStarted()) {
this.selectEnd(date);
}
else {
this.selectStart(date);
}
};
/**
* @private
* @return {?}
*/
NbCalendarRangeComponent.prototype.selectionStarted = /**
* @private
* @return {?}
*/
function () {
var _a = this.range, start = _a.start, end = _a.end;
return start && !end;
};
/**
* @private
* @param {?} start
* @return {?}
*/
NbCalendarRangeComponent.prototype.selectStart = /**
* @private
* @param {?} start
* @return {?}
*/
function (start) {
this.selectRange({ start: start });
};
/**
* @private
* @param {?} date
* @return {?}
*/
NbCalendarRangeComponent.prototype.selectEnd = /**
* @private
* @param {?} date
* @return {?}
*/
function (date) {
var start = this.range.start;
if (this.dateService.compareDates(date, start) > 0) {
this.selectRange({ start: start, end: date });
}
else {
this.selectRange({ start: date, end: start });
}
};
/**
* @private
* @param {?} range
* @return {?}
*/
NbCalendarRangeComponent.prototype.selectRange = /**
* @private
* @param {?} range
* @return {?}
*/
function (range) {
this.range = range;
this.rangeChange.emit(range);
};
NbCalendarRangeComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-calendar-range',
template: "\n <nb-base-calendar\n [date]=\"range\"\n (dateChange)=\"onChange($event)\"\n [min]=\"min\"\n [max]=\"max\"\n [filter]=\"filter\"\n [startView]=\"startView\"\n [boundingMonth]=\"boundingMonth\"\n [dayCellComponent]=\"dayCellComponent\"\n [monthCellComponent]=\"monthCellComponent\"\n [yearCellComponent]=\"yearCellComponent\"\n [visibleDate]=\"visibleDate\"\n [showHeader]=\"showHeader\"\n [size]=\"size\"\n ></nb-base-calendar>\n "
}] }
];
/** @nocollapse */
NbCalendarRangeComponent.ctorParameters = function () { return [
{ type: NbDateService }
]; };
NbCalendarRangeComponent.propDecorators = {
boundingMonth: [{ type: Input }],
startView: [{ type: Input }],
min: [{ type: Input }],
max: [{ type: Input }],
filter: [{ type: Input }],
_cellComponent: [{ type: Input, args: ['dayCellComponent',] }],
monthCellComponent: [{ type: Input }],
_yearCellComponent: [{ type: Input, args: ['yearCellComponent',] }],
size: [{ type: Input }],
visibleDate: [{ type: Input }],
showHeader: [{ type: Input }],
range: [{ type: Input }],
rangeChange: [{ type: Output }]
};
return NbCalendarRangeComponent;
}());
export { NbCalendarRangeComponent };
if (false) {
/** @type {?} */
NbCalendarRangeComponent.prototype.boundingMonth;
/** @type {?} */
NbCalendarRangeComponent.prototype.startView;
/** @type {?} */
NbCalendarRangeComponent.prototype.min;
/** @type {?} */
NbCalendarRangeComponent.prototype.max;
/** @type {?} */
NbCalendarRangeComponent.prototype.filter;
/** @type {?} */
NbCalendarRangeComponent.prototype.dayCellComponent;
/** @type {?} */
NbCalendarRangeComponent.prototype.monthCellComponent;
/** @type {?} */
NbCalendarRangeComponent.prototype.yearCellComponent;
/** @type {?} */
NbCalendarRangeComponent.prototype.size;
/** @type {?} */
NbCalendarRangeComponent.prototype.visibleDate;
/** @type {?} */
NbCalendarRangeComponent.prototype.showHeader;
/** @type {?} */
NbCalendarRangeComponent.prototype.range;
/** @type {?} */
NbCalendarRangeComponent.prototype.rangeChange;
/**
* @type {?}
* @protected
*/
NbCalendarRangeComponent.prototype.dateService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItcmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXItcmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdFLE9BQU8sRUFBa0IsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQUczRyxxQ0FHQzs7O0lBRkMsZ0NBQVM7O0lBQ1QsOEJBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0VWO0lBaUdFLGtDQUFzQixXQUE2QjtRQUE3QixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7Ozs7O1FBeEUxQyxrQkFBYSxHQUFZLElBQUksQ0FBQzs7OztRQUs5QixjQUFTLEdBQXVCLGtCQUFrQixDQUFDLElBQUksQ0FBQztRQTBCakUscUJBQWdCLEdBQWdELCtCQUErQixDQUFDO1FBZ0JoRyxzQkFBaUIsR0FBZ0QsZ0NBQWdDLENBQUM7Ozs7O1FBTXpGLFNBQUksR0FBbUIsY0FBYyxDQUFDLE1BQU0sQ0FBQzs7OztRQU83QyxlQUFVLEdBQVksSUFBSSxDQUFDOzs7O1FBVTFCLGdCQUFXLEdBQXFDLElBQUksWUFBWSxFQUFFLENBQUM7SUFHN0UsQ0FBQztJQWhERCxzQkFDSSxvREFBYztRQUpsQjs7YUFFSzs7Ozs7Ozs7UUFDTCxVQUNtQixhQUEwRDtZQUMzRSxJQUFJLGFBQWEsRUFBRTtnQkFDakIsSUFBSSxDQUFD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b3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE5iQ2FsZW5kYXJDZWxsLCBOYkNhbGVuZGFyU2l6ZSwgTmJDYWxlbmRhclZpZXdNb2RlLCBOYkRhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY2FsZW5kYXIta2l0JztcclxuaW1wb3J0IHsgTmJDYWxlbmRhclJhbmdlRGF5Q2VsbENvbXBvbmVudCwgTmJDYWxlbmRhclJhbmdlWWVhckNlbGxDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXJhbmdlLWNlbGxzJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5iQ2FsZW5kYXJSYW5nZTxEPiB7XHJcbiAgc3RhcnQ6IEQ7XHJcbiAgZW5kPzogRDtcclxufVxyXG5cclxuLypcclxuICogQ2FsZW5kYXJSYW5nZSBjb21wb25lbnQgcHJvdmlkZXMgYSBjYXBhYmlsaXR5IHRvIGNob29zZSBhIGRhdGUgcmFuZ2UuXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPG5iLWNhbGVuZGFyIFsoZGF0ZSldPVwiZGF0ZVwiPjwvbmItY2FsZW5kYXI+XHJcbiAqIDxuYi1jYWxlbmRhciBbZGF0ZV09XCJkYXRlXCIgKGRhdGVDaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCI+PC9uYi1jYWxlbmRhcj5cclxuICogYGBgXHJcbiAqXHJcbiAqIEJhc2ljIHVzYWdlIGV4YW1wbGVcclxuICogQHN0YWNrZWQtZXhhbXBsZShSYW5nZSwgY2FsZW5kYXIvY2FsZW5kYXItcmFuZ2Utc2hvd2Nhc2UuY29tcG9uZW50KVxyXG4gKlxyXG4gKiAjIyMgSW5zdGFsbGF0aW9uXHJcbiAqXHJcbiAqIEltcG9ydCBgTmJDYWxlbmRhclJhbmdlTW9kdWxlYCB0byB5b3VyIGZlYXR1cmUgbW9kdWxlLlxyXG4gKiBgYGB0c1xyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGltcG9ydHM6IFtcclxuICogICBcdC8vIC4uLlxyXG4gKiAgICAgTmJDYWxlbmRhclJhbmdlTW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICpcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIENhbGVuZGFyUmFuZ2UgY29tcG9uZW50IHN1cHBvcnRzIGFsbCBvZiB0aGUgQ2FsZW5kYXIgY29tcG9uZW50IGN1c3RvbWl6YXRpb24gcHJvcGVydGllcy4gTW9yZSBkZWZhaWxzIGNhbiBiZSBmb3VuZFxyXG4gKiBpbiB0aGUgW0NhbGVuZGFyIGNvbXBvbmVudCBkb2NzXShkb2NzL2NvbXBvbmVudHMvY2FsZW5kYXIpLlxyXG4gKlxyXG4gKiBAc3R5bGVzXHJcbiAqXHJcbiAqIGNhbGVuZGFyLXdpZHRoXHJcbiAqIGNhbGVuZGFyLWJvZHktaGVpZ2h0XHJcbiAqIGNhbGVuZGFyLWhlYWRlci10aXRsZS1mb250LXNpemVcclxuICogY2FsZW5kYXItaGVhZGVyLXRpdGxlLWZvbnQtd2VpZ2h0XHJcbiAqIGNhbGVuZGFyLWhlYWRlci1zdWItdGl0bGUtZm9udC1zaXplXHJcbiAqIGNhbGVuZGFyLWhlYWRlci1zdWItdGl0bGUtZm9udC13ZWlnaHRcclxuICogY2FsZW5kYXItbmF2aWdhdGlvbi1idXR0b24td2lkdGhcclxuICogY2FsZW5kYXItc2VsZWN0ZWQtaXRlbS1iZ1xyXG4gKiBjYWxlbmRhci1ob3Zlci1pdGVtLWJnXHJcbiAqIGNhbGVuZGFyLXRvZGF5LWl0ZW0tYmdcclxuICogY2FsZW5kYXItYWN0aXZlLWl0ZW0tYmdcclxuICogY2FsZW5kYXItZmdcclxuICogY2FsZW5kYXItc2VsZWN0ZWQtZmdcclxuICogY2FsZW5kYXItZGF5LWNlbGwtd2lkdGhcclxuICogY2FsZW5kYXItZGF5LWNlbGwtaGVpZ2h0XHJcbiAqIGNhbGVuZGFyLW1vbnRoLWNlbGwtd2lkdGhcclxuICogY2FsZW5kYXItbW9udGgtY2VsbC1oZWlnaHRcclxuICogY2FsZW5kYXIteWVhci1jZWxsLXdpZHRoXHJcbiAqIGNhbGVuZGFyLXllYXItY2VsbC1oZWlnaHRcclxuICogY2FsZW5kYXItaW5hY3RpdmUtb3BhY2l0eVxyXG4gKiBjYWxlbmRhci1kaXNhYmxlZC1vcGFjaXR5XHJcbiAqIGNhbGVuZGFyLWJvcmRlci1yYWRpdXNcclxuICogY2FsZW5kYXItd2Vla2RheS13aWR0aFxyXG4gKiBjYWxlbmRhci13ZWVrZGF5LWhlaWdodFxyXG4gKiBjYWxlbmRhci13ZWVrZGF5LWZvbnQtc2l6ZVxyXG4gKiBjYWxlbmRhci13ZWVrZGF5LWZvbnQtd2VpZ2h0XHJcbiAqIGNhbGVuZGFyLXdlZWtkYXktZmdcclxuICogY2FsZW5kYXItd2Vla2RheS1ob2xpZGF5LWZnXHJcbiAqIGNhbGVuZGFyLXJhbmdlLWJnLWluLXJhbmdlXHJcbiAqIGNhbGVuZGFyLWxhcmdlLXdpZHRoXHJcbiAqIGNhbGVuZGFyLWxhcmdlLWJvZHktaGVpZ2h0XHJcbiAqIGNhbGVuZGFyLWRheS1jZWxsLWxhcmdlLXdpZHRoXHJcbiAqIGNhbGVuZGFyLWRheS1jZWxsLWxhcmdlLWhlaWdodFxyXG4gKiBjYWxlbmRhci1tb250aC1jZWxsLWxhcmdlLXdpZHRoXHJcbiAqIGNhbGVuZGFyLW1vbnRoLWNlbGwtbGFyZ2UtaGVpZ2h0XHJcbiAqIGNhbGVuZGFyLXllYXItY2VsbC1sYXJnZS13aWR0aFxyXG4gKiBjYWxlbmRhci15ZWFyLWNlbGwtbGFyZ2UtaGVpZ2h0XHJcbiAqICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmItY2FsZW5kYXItcmFuZ2UnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmItYmFzZS1jYWxlbmRhclxyXG4gICAgICBbZGF0ZV09XCJyYW5nZVwiXHJcbiAgICAgIChkYXRlQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbbWluXT1cIm1pblwiXHJcbiAgICAgIFttYXhdPVwibWF4XCJcclxuICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICBbc3RhcnRWaWV3XT1cInN0YXJ0Vmlld1wiXHJcbiAgICAgIFtib3VuZGluZ01vbnRoXT1cImJvdW5kaW5nTW9udGhcIlxyXG4gICAgICBbZGF5Q2VsbENvbXBvbmVudF09XCJkYXlDZWxsQ29tcG9uZW50XCJcclxuICAgICAgW21vbnRoQ2VsbENvbXBvbmVudF09XCJtb250aENlbGxDb21wb25lbnRcIlxyXG4gICAgICBbeWVhckNlbGxDb21wb25lbnRdPVwieWVhckNlbGxDb21wb25lbnRcIlxyXG4gICAgICBbdmlzaWJsZURhdGVdPVwidmlzaWJsZURhdGVcIlxyXG4gICAgICBbc2hvd0hlYWRlcl09XCJzaG93SGVhZGVyXCJcclxuICAgICAgW3NpemVdPVwic2l6ZVwiXHJcbiAgICA+PC9uYi1iYXNlLWNhbGVuZGFyPlxyXG4gIGAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYkNhbGVuZGFyUmFuZ2VDb21wb25lbnQ8RD4ge1xyXG4gIC8qXHJcbiAgICogRGVmaW5lcyBpZiB3ZSBzaG91bGQgcmVuZGVyIHByZXZpb3VzIGFuZCBuZXh0IG1vbnRoc1xyXG4gICAqIGluIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBib3VuZGluZ01vbnRoOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLypcclxuICAgKiBEZWZpbmVzIHN0YXJ0aW5nIHZpZXcgZm9yIHRoZSBjYWxlbmRhci5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIHN0YXJ0VmlldzogTmJDYWxlbmRhclZpZXdNb2RlID0gTmJDYWxlbmRhclZpZXdNb2RlLkRBVEU7XHJcblxyXG4gIC8qXHJcbiAgICogQSBtaW5pbXVtIGF2YWlsYWJsZSBkYXRlIGZvciBzZWxlY3Rpb24uXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBtaW46IEQ7XHJcblxyXG4gIC8qXHJcbiAgICogQSBtYXhpbXVtIGF2YWlsYWJsZSBkYXRlIGZvciBzZWxlY3Rpb24uXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBtYXg6IEQ7XHJcblxyXG4gIC8qXHJcbiAgICogQSBwcmVkaWNhdGUgdGhhdCBkZWNpZGVzIHdoaWNoIGNlbGxzIHdpbGwgYmUgZGlzYWJsZWQuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBmaWx0ZXI6IChEKSA9PiBib29sZWFuO1xyXG5cclxuICAvKlxyXG4gICAqIEN1c3RvbSBkYXkgY2VsbCBjb21wb25lbnQuIEhhdmUgdG8gaW1wbGVtZW50IGBOYkNhbGVuZGFyQ2VsbGAgaW50ZXJmYWNlLlxyXG4gICAqICovXHJcbiAgQElucHV0KCdkYXlDZWxsQ29tcG9uZW50JylcclxuICBzZXQgX2NlbGxDb21wb25lbnQoY2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBOYkNhbGVuZGFyUmFuZ2U8RD4+Pikge1xyXG4gICAgaWYgKGNlbGxDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5kYXlDZWxsQ29tcG9uZW50ID0gY2VsbENvbXBvbmVudDtcclxuICAgIH1cclxuICB9XHJcbiAgZGF5Q2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBOYkNhbGVuZGFyUmFuZ2U8RD4+PiA9IE5iQ2FsZW5kYXJSYW5nZURheUNlbGxDb21wb25lbnQ7XHJcblxyXG4gIC8qXHJcbiAgICogQ3VzdG9tIG1vbnRoIGNlbGwgY29tcG9uZW50LiBIYXZlIHRvIGltcGxlbWVudCBgTmJDYWxlbmRhckNlbGxgIGludGVyZmFjZS5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIG1vbnRoQ2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBOYkNhbGVuZGFyUmFuZ2U8RD4+PjtcclxuXHJcbiAgLypcclxuICAgKiBDdXN0b20geWVhciBjZWxsIGNvbXBvbmVudC4gSGF2ZSB0byBpbXBsZW1lbnQgYE5iQ2FsZW5kYXJDZWxsYCBpbnRlcmZhY2UuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ3llYXJDZWxsQ29tcG9uZW50JylcclxuICBzZXQgX3llYXJDZWxsQ29tcG9uZW50KGNlbGxDb21wb25lbnQ6IFR5cGU8TmJDYWxlbmRhckNlbGw8RCwgTmJDYWxlbmRhclJhbmdlPEQ+Pj4pIHtcclxuICAgIGlmIChjZWxsQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMueWVhckNlbGxDb21wb25lbnQgPSBjZWxsQ29tcG9uZW50O1xyXG4gICAgfVxyXG4gIH1cclxuICB5ZWFyQ2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBOYkNhbGVuZGFyUmFuZ2U8RD4+PiA9IE5iQ2FsZW5kYXJSYW5nZVllYXJDZWxsQ29tcG9uZW50O1xyXG5cclxuICAvKlxyXG4gICAqIFNpemUgb2YgdGhlIGNhbGVuZGFyIGFuZCBlbnRpcmUgY29tcG9uZW50cy5cclxuICAgKiBDYW4gYmUgJ21lZGl1bScgd2hpY2ggaXMgZGVmYXVsdCBvciAnbGFyZ2UnLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgc2l6ZTogTmJDYWxlbmRhclNpemUgPSBOYkNhbGVuZGFyU2l6ZS5NRURJVU07XHJcblxyXG4gIEBJbnB1dCgpIHZpc2libGVEYXRlOiBEO1xyXG5cclxuICAvKlxyXG4gICAqIERldGVybWluZXMgc2hvdWxkIHdlIHNob3cgY2FsZW5kYXJzIGhlYWRlciBvciBub3QuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBzaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLypcclxuICAgKiBSYW5nZSB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGFzIHNlbGVjdGVkLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgcmFuZ2U6IE5iQ2FsZW5kYXJSYW5nZTxEPjtcclxuXHJcbiAgLypcclxuICAgKiBFbWl0cyByYW5nZSB3aGVuIHN0YXJ0IHNlbGVjdGVkIGFuZCBlbWl0cyBhZ2FpbiB3aGVuIGVuZCBzZWxlY3RlZC5cclxuICAgKiAqL1xyXG4gIEBPdXRwdXQoKSByYW5nZUNoYW5nZTogRXZlbnRFbWl0dGVyPE5iQ2FsZW5kYXJSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBkYXRlU2VydmljZTogTmJEYXRlU2VydmljZTxEPikge1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZGF0ZTogRCkge1xyXG4gICAgdGhpcy5pbml0RGF0ZUlmTnVsbCgpO1xyXG4gICAgdGhpcy5oYW5kbGVTZWxlY3RlZChkYXRlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdERhdGVJZk51bGwoKSB7XHJcbiAgICBpZiAoIXRoaXMucmFuZ2UpIHtcclxuICAgICAgdGhpcy5yYW5nZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3RlZChkYXRlOiBEKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGFydGVkKCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RFbmQoZGF0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdFN0YXJ0KGRhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TdGFydGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLnJhbmdlO1xyXG4gICAgcmV0dXJuIHN0YXJ0ICYmICFlbmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFN0YXJ0KHN0YXJ0OiBEKSB7XHJcbiAgICB0aGlzLnNlbGVjdFJhbmdlKHsgc3RhcnQgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdEVuZChkYXRlOiBEKSB7XHJcbiAgICBjb25zdCB7IHN0YXJ0IH0gPSB0aGlzLnJhbmdlO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGVTZXJ2aWNlLmNvbXBhcmVEYXRlcyhkYXRlLCBzdGFydCkgPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0UmFuZ2UoeyBzdGFydCwgZW5kOiBkYXRlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RSYW5nZSh7IHN0YXJ0OiBkYXRlLCBlbmQ6IHN0YXJ0IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RSYW5nZShyYW5nZTogTmJDYWxlbmRhclJhbmdlPEQ+KSB7XHJcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XHJcbiAgICB0aGlzLnJhbmdlQ2hhbmdlLmVtaXQocmFuZ2UpO1xyXG4gIH1cclxufVxyXG4iXX0=