UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

324 lines 22.6 kB
/** * @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=