theme-lib
Version:
This is a simple example Angular Library published to npm.
295 lines • 20.8 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
*/
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==