UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

295 lines 20.8 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 */ export class NbCalendarRangeComponent { /** * @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 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(); } /* * Custom day cell component. Have to implement `NbCalendarCell` interface. * */ /** * @param {?} cellComponent * @return {?} */ set _cellComponent(cellComponent) { if (cellComponent) { this.dayCellComponent = cellComponent; } } /* * Custom year cell component. Have to implement `NbCalendarCell` interface. * */ /** * @param {?} cellComponent * @return {?} */ set _yearCellComponent(cellComponent) { if (cellComponent) { this.yearCellComponent = cellComponent; } } /** * @param {?} date * @return {?} */ onChange(date) { this.initDateIfNull(); this.handleSelected(date); } /** * @private * @return {?} */ initDateIfNull() { if (!this.range) { this.range = { start: null, end: null }; } } /** * @private * @param {?} date * @return {?} */ handleSelected(date) { if (this.selectionStarted()) { this.selectEnd(date); } else { this.selectStart(date); } } /** * @private * @return {?} */ selectionStarted() { const { start, end } = this.range; return start && !end; } /** * @private * @param {?} start * @return {?} */ selectStart(start) { this.selectRange({ start }); } /** * @private * @param {?} date * @return {?} */ selectEnd(date) { const { start } = this.range; if (this.dateService.compareDates(date, start) > 0) { this.selectRange({ start, end: date }); } else { this.selectRange({ start: date, end: start }); } } /** * @private * @param {?} range * @return {?} */ selectRange(range) { this.range = range; this.rangeChange.emit(range); } } NbCalendarRangeComponent.decorators = [ { type: Component, args: [{ selector: 'nb-calendar-range', template: ` <nb-base-calendar [date]="range" (dateChange)="onChange($event)" [min]="min" [max]="max" [filter]="filter" [startView]="startView" [boundingMonth]="boundingMonth" [dayCellComponent]="dayCellComponent" [monthCellComponent]="monthCellComponent" [yearCellComponent]="yearCellComponent" [visibleDate]="visibleDate" [showHeader]="showHeader" [size]="size" ></nb-base-calendar> ` }] } ]; /** @nocollapse */ NbCalendarRangeComponent.ctorParameters = () => [ { 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItcmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXItcmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdFLE9BQU8sRUFBa0IsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQUczRyxxQ0FHQzs7O0lBRkMsZ0NBQVM7O0lBQ1QsOEJBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEZWLE1BQU0sT0FBTyx3QkFBd0I7Ozs7SUE2RW5DLFlBQXNCLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjs7Ozs7UUF4RTFDLGtCQUFhLEdBQVksSUFBSSxDQUFDOzs7O1FBSzlCLGNBQVMsR0FBdUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1FBMEJqRSxxQkFBZ0IsR0FBZ0QsK0JBQStCLENBQUM7UUFnQmhHLHNCQUFpQixHQUFnRCxnQ0FBZ0MsQ0FBQzs7Ozs7UUFNekYsU0FBSSxHQUFtQixjQUFjLENBQUMsTUFBTSxDQUFDOzs7O1FBTzdDLGVBQVUsR0FBWSxJQUFJLENBQUM7Ozs7UUFVMUIsZ0JBQVcsR0FBcUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUc3RSxDQUFDOzs7Ozs7OztJQWhERCxJQUNJLGNBQWMsQ0FBQyxhQUEwRDtRQUMzRSxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQzs7Ozs7Ozs7SUFXRCxJQUNJLGtCQUFrQixDQUFDLGFBQTBEO1FBQy9FLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7U0FDeEM7SUFDSCxDQUFDOzs7OztJQTZCRCxRQUFRLENBQUMsSUFBTztRQUNkLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7Ozs7O0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7Ozs7OztJQUVPLGNBQWMsQ0FBQyxJQUFPO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7Ozs7O0lBRU8sZ0JBQWdCO2NBQ2hCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLO1FBQ2pDLE9BQU8sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7Ozs7OztJQUVPLFdBQVcsQ0FBQyxLQUFRO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7Ozs7OztJQUVPLFNBQVMsQ0FBQyxJQUFPO2NBQ2pCLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFFNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDeEM7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sV0FBVyxDQUFDLEtBQXlCO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7OztZQTdJRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JUO2FBQ0Y7Ozs7WUFqRzRELGFBQWE7Ozs0QkF1R3ZFLEtBQUs7d0JBS0wsS0FBSztrQkFLTCxLQUFLO2tCQUtMLEtBQUs7cUJBS0wsS0FBSzs2QkFLTCxLQUFLLFNBQUMsa0JBQWtCO2lDQVd4QixLQUFLO2lDQUtMLEtBQUssU0FBQyxtQkFBbUI7bUJBWXpCLEtBQUs7MEJBRUwsS0FBSzt5QkFLTCxLQUFLO29CQUtMLEtBQUs7MEJBS0wsTUFBTTs7OztJQXRFUCxpREFBdUM7O0lBS3ZDLDZDQUFpRTs7SUFLakUsdUNBQWdCOztJQUtoQix1Q0FBZ0I7O0lBS2hCLDBDQUFnQzs7SUFXaEMsb0RBQWdHOztJQUtoRyxzREFBeUU7O0lBV3pFLHFEQUFrRzs7SUFNbEcsd0NBQXNEOztJQUV0RCwrQ0FBd0I7O0lBS3hCLDhDQUFvQzs7SUFLcEMseUNBQW1DOztJQUtuQywrQ0FBNkU7Ozs7O0lBRWpFLCtDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTmJDYWxlbmRhckNlbGwsIE5iQ2FsZW5kYXJTaXplLCBOYkNhbGVuZGFyVmlld01vZGUsIE5iRGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci1raXQnO1xyXG5pbXBvcnQgeyBOYkNhbGVuZGFyUmFuZ2VEYXlDZWxsQ29tcG9uZW50LCBOYkNhbGVuZGFyUmFuZ2VZZWFyQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItcmFuZ2UtY2VsbHMnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmJDYWxlbmRhclJhbmdlPEQ+IHtcclxuICBzdGFydDogRDtcclxuICBlbmQ/OiBEO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDYWxlbmRhclJhbmdlIGNvbXBvbmVudCBwcm92aWRlcyBhIGNhcGFiaWxpdHkgdG8gY2hvb3NlIGEgZGF0ZSByYW5nZS5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8bmItY2FsZW5kYXIgWyhkYXRlKV09XCJkYXRlXCI+PC9uYi1jYWxlbmRhcj5cclxuICogPG5iLWNhbGVuZGFyIFtkYXRlXT1cImRhdGVcIiAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIj48L25iLWNhbGVuZGFyPlxyXG4gKiBgYGBcclxuICpcclxuICogQmFzaWMgdXNhZ2UgZXhhbXBsZVxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKFJhbmdlLCBjYWxlbmRhci9jYWxlbmRhci1yYW5nZS1zaG93Y2FzZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqICMjIyBJbnN0YWxsYXRpb25cclxuICpcclxuICogSW1wb3J0IGBOYkNhbGVuZGFyUmFuZ2VNb2R1bGVgIHRvIHlvdXIgZmVhdHVyZSBtb2R1bGUuXHJcbiAqIGBgYHRzXHJcbiAqIEBOZ01vZHVsZSh7XHJcbiAqICAgaW1wb3J0czogW1xyXG4gKiAgIFx0Ly8gLi4uXHJcbiAqICAgICBOYkNhbGVuZGFyUmFuZ2VNb2R1bGUsXHJcbiAqICAgXSxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFBhZ2VNb2R1bGUgeyB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiAjIyMgVXNhZ2VcclxuICpcclxuICogQ2FsZW5kYXJSYW5nZSBjb21wb25lbnQgc3VwcG9ydHMgYWxsIG9mIHRoZSBDYWxlbmRhciBjb21wb25lbnQgY3VzdG9taXphdGlvbiBwcm9wZXJ0aWVzLiBNb3JlIGRlZmFpbHMgY2FuIGJlIGZvdW5kXHJcbiAqIGluIHRoZSBbQ2FsZW5kYXIgY29tcG9uZW50IGRvY3NdKGRvY3MvY29tcG9uZW50cy9jYWxlbmRhcikuXHJcbiAqXHJcbiAqIEBzdHlsZXNcclxuICpcclxuICogY2FsZW5kYXItd2lkdGhcclxuICogY2FsZW5kYXItYm9keS1oZWlnaHRcclxuICogY2FsZW5kYXItaGVhZGVyLXRpdGxlLWZvbnQtc2l6ZVxyXG4gKiBjYWxlbmRhci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHRcclxuICogY2FsZW5kYXItaGVhZGVyLXN1Yi10aXRsZS1mb250LXNpemVcclxuICogY2FsZW5kYXItaGVhZGVyLXN1Yi10aXRsZS1mb250LXdlaWdodFxyXG4gKiBjYWxlbmRhci1uYXZpZ2F0aW9uLWJ1dHRvbi13aWR0aFxyXG4gKiBjYWxlbmRhci1zZWxlY3RlZC1pdGVtLWJnXHJcbiAqIGNhbGVuZGFyLWhvdmVyLWl0ZW0tYmdcclxuICogY2FsZW5kYXItdG9kYXktaXRlbS1iZ1xyXG4gKiBjYWxlbmRhci1hY3RpdmUtaXRlbS1iZ1xyXG4gKiBjYWxlbmRhci1mZ1xyXG4gKiBjYWxlbmRhci1zZWxlY3RlZC1mZ1xyXG4gKiBjYWxlbmRhci1kYXktY2VsbC13aWR0aFxyXG4gKiBjYWxlbmRhci1kYXktY2VsbC1oZWlnaHRcclxuICogY2FsZW5kYXItbW9udGgtY2VsbC13aWR0aFxyXG4gKiBjYWxlbmRhci1tb250aC1jZWxsLWhlaWdodFxyXG4gKiBjYWxlbmRhci15ZWFyLWNlbGwtd2lkdGhcclxuICogY2FsZW5kYXIteWVhci1jZWxsLWhlaWdodFxyXG4gKiBjYWxlbmRhci1pbmFjdGl2ZS1vcGFjaXR5XHJcbiAqIGNhbGVuZGFyLWRpc2FibGVkLW9wYWNpdHlcclxuICogY2FsZW5kYXItYm9yZGVyLXJhZGl1c1xyXG4gKiBjYWxlbmRhci13ZWVrZGF5LXdpZHRoXHJcbiAqIGNhbGVuZGFyLXdlZWtkYXktaGVpZ2h0XHJcbiAqIGNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplXHJcbiAqIGNhbGVuZGFyLXdlZWtkYXktZm9udC13ZWlnaHRcclxuICogY2FsZW5kYXItd2Vla2RheS1mZ1xyXG4gKiBjYWxlbmRhci13ZWVrZGF5LWhvbGlkYXktZmdcclxuICogY2FsZW5kYXItcmFuZ2UtYmctaW4tcmFuZ2VcclxuICogY2FsZW5kYXItbGFyZ2Utd2lkdGhcclxuICogY2FsZW5kYXItbGFyZ2UtYm9keS1oZWlnaHRcclxuICogY2FsZW5kYXItZGF5LWNlbGwtbGFyZ2Utd2lkdGhcclxuICogY2FsZW5kYXItZGF5LWNlbGwtbGFyZ2UtaGVpZ2h0XHJcbiAqIGNhbGVuZGFyLW1vbnRoLWNlbGwtbGFyZ2Utd2lkdGhcclxuICogY2FsZW5kYXItbW9udGgtY2VsbC1sYXJnZS1oZWlnaHRcclxuICogY2FsZW5kYXIteWVhci1jZWxsLWxhcmdlLXdpZHRoXHJcbiAqIGNhbGVuZGFyLXllYXItY2VsbC1sYXJnZS1oZWlnaHRcclxuICogKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYi1jYWxlbmRhci1yYW5nZScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuYi1iYXNlLWNhbGVuZGFyXHJcbiAgICAgIFtkYXRlXT1cInJhbmdlXCJcclxuICAgICAgKGRhdGVDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIFttaW5dPVwibWluXCJcclxuICAgICAgW21heF09XCJtYXhcIlxyXG4gICAgICBbZmlsdGVyXT1cImZpbHRlclwiXHJcbiAgICAgIFtzdGFydFZpZXddPVwic3RhcnRWaWV3XCJcclxuICAgICAgW2JvdW5kaW5nTW9udGhdPVwiYm91bmRpbmdNb250aFwiXHJcbiAgICAgIFtkYXlDZWxsQ29tcG9uZW50XT1cImRheUNlbGxDb21wb25lbnRcIlxyXG4gICAgICBbbW9udGhDZWxsQ29tcG9uZW50XT1cIm1vbnRoQ2VsbENvbXBvbmVudFwiXHJcbiAgICAgIFt5ZWFyQ2VsbENvbXBvbmVudF09XCJ5ZWFyQ2VsbENvbXBvbmVudFwiXHJcbiAgICAgIFt2aXNpYmxlRGF0ZV09XCJ2aXNpYmxlRGF0ZVwiXHJcbiAgICAgIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxyXG4gICAgICBbc2l6ZV09XCJzaXplXCJcclxuICAgID48L25iLWJhc2UtY2FsZW5kYXI+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQ2FsZW5kYXJSYW5nZUNvbXBvbmVudDxEPiB7XHJcbiAgLypcclxuICAgKiBEZWZpbmVzIGlmIHdlIHNob3VsZCByZW5kZXIgcHJldmlvdXMgYW5kIG5leHQgbW9udGhzXHJcbiAgICogaW4gdGhlIGN1cnJlbnQgbW9udGggdmlldy5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIGJvdW5kaW5nTW9udGg6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKlxyXG4gICAqIERlZmluZXMgc3RhcnRpbmcgdmlldyBmb3IgdGhlIGNhbGVuZGFyLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgc3RhcnRWaWV3OiBOYkNhbGVuZGFyVmlld01vZGUgPSBOYkNhbGVuZGFyVmlld01vZGUuREFURTtcclxuXHJcbiAgLypcclxuICAgKiBBIG1pbmltdW0gYXZhaWxhYmxlIGRhdGUgZm9yIHNlbGVjdGlvbi5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIG1pbjogRDtcclxuXHJcbiAgLypcclxuICAgKiBBIG1heGltdW0gYXZhaWxhYmxlIGRhdGUgZm9yIHNlbGVjdGlvbi5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIG1heDogRDtcclxuXHJcbiAgLypcclxuICAgKiBBIHByZWRpY2F0ZSB0aGF0IGRlY2lkZXMgd2hpY2ggY2VsbHMgd2lsbCBiZSBkaXNhYmxlZC5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIGZpbHRlcjogKEQpID0+IGJvb2xlYW47XHJcblxyXG4gIC8qXHJcbiAgICogQ3VzdG9tIGRheSBjZWxsIGNvbXBvbmVudC4gSGF2ZSB0byBpbXBsZW1lbnQgYE5iQ2FsZW5kYXJDZWxsYCBpbnRlcmZhY2UuXHJcbiAgICogKi9cclxuICBASW5wdXQoJ2RheUNlbGxDb21wb25lbnQnKVxyXG4gIHNldCBfY2VsbENvbXBvbmVudChjZWxsQ29tcG9uZW50OiBUeXBlPE5iQ2FsZW5kYXJDZWxsPEQsIE5iQ2FsZW5kYXJSYW5nZTxEPj4+KSB7XHJcbiAgICBpZiAoY2VsbENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRheUNlbGxDb21wb25lbnQgPSBjZWxsQ29tcG9uZW50O1xyXG4gICAgfVxyXG4gIH1cclxuICBkYXlDZWxsQ29tcG9uZW50OiBUeXBlPE5iQ2FsZW5kYXJDZWxsPEQsIE5iQ2FsZW5kYXJSYW5nZTxEPj4+ID0gTmJDYWxlbmRhclJhbmdlRGF5Q2VsbENvbXBvbmVudDtcclxuXHJcbiAgLypcclxuICAgKiBDdXN0b20gbW9udGggY2VsbCBjb21wb25lbnQuIEhhdmUgdG8gaW1wbGVtZW50IGBOYkNhbGVuZGFyQ2VsbGAgaW50ZXJmYWNlLlxyXG4gICAqICovXHJcbiAgQElucHV0KCkgbW9udGhDZWxsQ29tcG9uZW50OiBUeXBlPE5iQ2FsZW5kYXJDZWxsPEQsIE5iQ2FsZW5kYXJSYW5nZTxEPj4+O1xyXG5cclxuICAvKlxyXG4gICAqIEN1c3RvbSB5ZWFyIGNlbGwgY29tcG9uZW50LiBIYXZlIHRvIGltcGxlbWVudCBgTmJDYWxlbmRhckNlbGxgIGludGVyZmFjZS5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgneWVhckNlbGxDb21wb25lbnQnKVxyXG4gIHNldCBfeWVhckNlbGxDb21wb25lbnQoY2VsbENvbXBvbmVudDogVHlwZTxOYkNhbGVuZGFyQ2VsbDxELCBOYkNhbGVuZGFyUmFuZ2U8RD4+Pikge1xyXG4gICAgaWYgKGNlbGxDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy55ZWFyQ2VsbENvbXBvbmVudCA9IGNlbGxDb21wb25lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHllYXJDZWxsQ29tcG9uZW50OiBUeXBlPE5iQ2FsZW5kYXJDZWxsPEQsIE5iQ2FsZW5kYXJSYW5nZTxEPj4+ID0gTmJDYWxlbmRhclJhbmdlWWVhckNlbGxDb21wb25lbnQ7XHJcblxyXG4gIC8qXHJcbiAgICogU2l6ZSBvZiB0aGUgY2FsZW5kYXIgYW5kIGVudGlyZSBjb21wb25lbnRzLlxyXG4gICAqIENhbiBiZSAnbWVkaXVtJyB3aGljaCBpcyBkZWZhdWx0IG9yICdsYXJnZScuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSBzaXplOiBOYkNhbGVuZGFyU2l6ZSA9IE5iQ2FsZW5kYXJTaXplLk1FRElVTTtcclxuXHJcbiAgQElucHV0KCkgdmlzaWJsZURhdGU6IEQ7XHJcblxyXG4gIC8qXHJcbiAgICogRGV0ZXJtaW5lcyBzaG91bGQgd2Ugc2hvdyBjYWxlbmRhcnMgaGVhZGVyIG9yIG5vdC5cclxuICAgKiAqL1xyXG4gIEBJbnB1dCgpIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKlxyXG4gICAqIFJhbmdlIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgYXMgc2VsZWN0ZWQuXHJcbiAgICogKi9cclxuICBASW5wdXQoKSByYW5nZTogTmJDYWxlbmRhclJhbmdlPEQ+O1xyXG5cclxuICAvKlxyXG4gICAqIEVtaXRzIHJhbmdlIHdoZW4gc3RhcnQgc2VsZWN0ZWQgYW5kIGVtaXRzIGFnYWluIHdoZW4gZW5kIHNlbGVjdGVkLlxyXG4gICAqICovXHJcbiAgQE91dHB1dCgpIHJhbmdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TmJDYWxlbmRhclJhbmdlPEQ+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGRhdGVTZXJ2aWNlOiBOYkRhdGVTZXJ2aWNlPEQ+KSB7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShkYXRlOiBEKSB7XHJcbiAgICB0aGlzLmluaXREYXRlSWZOdWxsKCk7XHJcbiAgICB0aGlzLmhhbmRsZVNlbGVjdGVkKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RGF0ZUlmTnVsbCgpIHtcclxuICAgIGlmICghdGhpcy5yYW5nZSkge1xyXG4gICAgICB0aGlzLnJhbmdlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGVkKGRhdGU6IEQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXJ0ZWQoKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdEVuZChkYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0U3RhcnQoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdGlvblN0YXJ0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMucmFuZ2U7XHJcbiAgICByZXR1cm4gc3RhcnQgJiYgIWVuZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0U3RhcnQoc3RhcnQ6IEQpIHtcclxuICAgIHRoaXMuc2VsZWN0UmFuZ2UoeyBzdGFydCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0RW5kKGRhdGU6IEQpIHtcclxuICAgIGNvbnN0IHsgc3RhcnQgfSA9IHRoaXMucmFuZ2U7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuY29tcGFyZURhdGVzKGRhdGUsIHN0YXJ0KSA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RSYW5nZSh7IHN0YXJ0LCBlbmQ6IGRhdGUgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdFJhbmdlKHsgc3RhcnQ6IGRhdGUsIGVuZDogc3RhcnQgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFJhbmdlKHJhbmdlOiBOYkNhbGVuZGFyUmFuZ2U8RD4pIHtcclxuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcclxuICAgIHRoaXMucmFuZ2VDaGFuZ2UuZW1pdChyYW5nZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==