UNPKG

ngx-animating-datepicker

Version:

An Animating Datepicker for Angular 2+, for some smooth date picking :).

298 lines 22.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core'; var NavigationComponent = /** @class */ (function () { function NavigationComponent() { this.previousClick = new EventEmitter(); this.nextClick = new EventEmitter(); this.subNavigationClick = new EventEmitter(); this.monthFormat = 'long'; // "narrow", "short", "long"; this.animate = false; this.initialised = false; this.subNavigationOpen = false; } Object.defineProperty(NavigationComponent.prototype, "language", { get: /** * @private * @return {?} */ function () { return this._language; }, set: // "narrow", "short", "long"; /** * @private * @param {?} language * @return {?} */ function (language) { this.formatMonth = new Intl.DateTimeFormat(language, { month: this.monthFormat }); this._language = language; if (this.initialised) { this.titles = this.createNavigationItems(this._totalYearMonth); } }, enumerable: true, configurable: true }); Object.defineProperty(NavigationComponent.prototype, "totalYearMonth", { set: /** * @param {?} totalYearMonth * @return {?} */ function (totalYearMonth) { this._totalYearMonth = totalYearMonth; this.titles = this.createNavigationItems(totalYearMonth); }, enumerable: true, configurable: true }); /** * @return {?} */ NavigationComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.initialised = true; }; /** * @param {?} title * @return {?} */ NavigationComponent.prototype.onMonthClick = /** * @param {?} title * @return {?} */ function (title) { /** @type {?} */ var monthArray = this.createMonthArray(title); /** @type {?} */ var formatMonth = new Intl.DateTimeFormat(this.language, { month: 'short' }); this.navigationItems = this.createNavigationItems(monthArray, true, formatMonth); this.toggleSubNavigation(); }; /** * @param {?} title * @return {?} */ NavigationComponent.prototype.onYearClick = /** * @param {?} title * @return {?} */ function (title) { this.navigationItems = this.createYearArray(title); this.toggleSubNavigation(); }; /** * @return {?} */ NavigationComponent.prototype.toggleSubNavigation = /** * @return {?} */ function () { this.subNavigationOpen = !this.subNavigationOpen; }; /** * Sets the title * * @param totalMonthYear * @param monthType * @param formatMonth * @returns NavigationItem[] */ /** * Sets the title * * @param {?} totalMonthYear * @param {?=} monthType * @param {?=} formatMonth * @return {?} NavigationItem[] */ NavigationComponent.prototype.createNavigationItems = /** * Sets the title * * @param {?} totalMonthYear * @param {?=} monthType * @param {?=} formatMonth * @return {?} NavigationItem[] */ function (totalMonthYear, monthType, formatMonth) { if (monthType === void 0) { monthType = true; } if (formatMonth === void 0) { formatMonth = null; } /** @type {?} */ var _formatMonth = formatMonth || this.formatMonth; // TODO: copy the object / remove the reference return ((/** @type {?} */ (totalMonthYear))).map(function (s) { /** @type {?} */ var date = new Date(s.year, s.month); s.navigationTitle = monthType ? _formatMonth.format(date) : s.year; return s; }); }; /** * @param {?} navigationItem * @return {?} */ NavigationComponent.prototype.createMonthArray = /** * @param {?} navigationItem * @return {?} */ function (navigationItem) { /** @type {?} */ var months = []; /** @type {?} */ var currentYear = navigationItem.year; for (var i = 0; i < 11; i++) { months.push({ month: i, year: currentYear }); } return months; }; /** * Create an array of navigation items with year as label * * @param navigationItem * @returns NavigationItem[] */ /** * Create an array of navigation items with year as label * * @param {?} navigationItem * @return {?} NavigationItem[] */ NavigationComponent.prototype.createYearArray = /** * Create an array of navigation items with year as label * * @param {?} navigationItem * @return {?} NavigationItem[] */ function (navigationItem) { /** @type {?} */ var currentYear = navigationItem.year; /** @type {?} */ var years = [tslib_1.__assign({}, navigationItem, { navigationTitle: currentYear })]; for (var i = 0; i < 5; i++) { years.unshift(tslib_1.__assign({}, navigationItem, { navigationTitle: currentYear - (i + 1) })); years.push(tslib_1.__assign({}, navigationItem, { navigationTitle: currentYear + (i + 1) })); } return years; }; /** * @param {?} date * @return {?} */ NavigationComponent.prototype.onSubNavigationClick = /** * @param {?} date * @return {?} */ function (date) { this.subNavigationClick.emit(date); }; /** * Emits previous click event */ /** * Emits previous click event * @return {?} */ NavigationComponent.prototype.previous = /** * Emits previous click event * @return {?} */ function () { this.previousClick.emit(); }; /** * Emits next click event */ /** * Emits next click event * @return {?} */ NavigationComponent.prototype.next = /** * Emits next click event * @return {?} */ function () { this.nextClick.emit(); }; NavigationComponent.decorators = [ { type: Component, args: [{ selector: 'aa-navigation', template: "<button *ngIf=\"!hideNavigation\" class=\"navigation__button is-previous\" (click)=\"previous()\"></button>\n<div class=\"navigation__title-wrapper\" [ngStyle]=\"{\n 'transform': 'translateX(' + translateX + '%)',\n 'transition': transition,\n 'left.%': leftPosition\n}\">\n <div *ngFor=\"let title of titles\"\n class=\"navigation__title\"\n [ngStyle]=\"{\n 'width.%': (100 / titles.length)\n }\"\n ><span (click)=\"onMonthClick(title)\">{{title.navigationTitle}}</span>&nbsp;<span (click)=\"onYearClick(title)\">{{title.year}}</span></div>\n</div>\n<button *ngIf=\"!hideNavigation\" class=\"navigation__button is-next\" (click)=\"next()\"></button>", styles: [":host{display:block;padding:10px;height:52px}:host::after,:host::before{content:' ';display:table}:host::after{clear:both}:host .navigation__title-wrapper{position:absolute;left:0;width:100%}:host .navigation__title{width:100%;font-weight:700;text-align:center;float:left;line-height:2.2rem}:host .navigation__button{padding:0;border:1px solid #c0c0be;outline:0;font-style:inherit;cursor:pointer;position:relative;z-index:1;background-color:#fff;text-align:center;width:32px;height:32px;border-radius:4px}:host .navigation__button:hover{border-color:#8e8d8a}:host .navigation__button.is-previous{float:left}:host .navigation__button.is-previous::after{content:'<'}:host .navigation__button.is-next{float:right}:host .navigation__button.is-next::before{content:'>'}:host.is-animate .navigation__title-wrapper{width:200%}"] },] }, ]; NavigationComponent.propDecorators = { previousClick: [{ type: Output }], nextClick: [{ type: Output }], subNavigationClick: [{ type: Output }], monthFormat: [{ type: Input }], language: [{ type: Input }], totalYearMonth: [{ type: Input }], transition: [{ type: Input }], translateX: [{ type: Input }], leftPosition: [{ type: Input }], hideNavigation: [{ type: Input }], animate: [{ type: HostBinding, args: ['class.is-animate',] }, { type: Input }] }; return NavigationComponent; }()); export { NavigationComponent }; if (false) { /** @type {?} */ NavigationComponent.prototype.previousClick; /** @type {?} */ NavigationComponent.prototype.nextClick; /** @type {?} */ NavigationComponent.prototype.subNavigationClick; /** * @type {?} * @private */ NavigationComponent.prototype.monthFormat; /** * @type {?} * @private */ NavigationComponent.prototype._totalYearMonth; /** @type {?} */ NavigationComponent.prototype.transition; /** @type {?} */ NavigationComponent.prototype.translateX; /** @type {?} */ NavigationComponent.prototype.leftPosition; /** @type {?} */ NavigationComponent.prototype.hideNavigation; /** @type {?} */ NavigationComponent.prototype.animate; /** * @type {?} * @private */ NavigationComponent.prototype._language; /** * @type {?} * @private */ NavigationComponent.prototype.initialised; /** * @type {?} * @private */ NavigationComponent.prototype.formatMonth; /** * @type {?} * @private */ NavigationComponent.prototype.subNavigationOpen; /** @type {?} */ NavigationComponent.prototype.navigationItems; /** @type {?} */ NavigationComponent.prototype.titles; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYW5pbWF0aW5nLWRhdGVwaWNrZXIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHMUY7SUFBQTtRQW1Ca0Isa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2RCxjQUFTLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkQsdUJBQWtCLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBRSw2QkFBNkI7UUE4QjlELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHZixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7SUF3Rm5DLENBQUM7SUF6SEEsc0JBQ1kseUNBQVE7Ozs7O1FBU3BCO1lBQ0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLENBQUM7Ozs7Ozs7O1FBWkQsVUFDcUIsUUFBZ0I7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1lBRTFCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQy9EO1FBQ0YsQ0FBQzs7O09BQUE7SUFPRCxzQkFDVywrQ0FBYzs7Ozs7UUFEekIsVUFDMEIsY0FBMkI7WUFDcEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsQ0FBQzs7O09BQUE7Ozs7SUFrQkQsc0NBQVE7OztJQUFSO1FBQ0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFRCwwQ0FBWTs7OztJQUFaLFVBQWEsS0FBcUI7O1lBQzNCLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDOztZQUN6QyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7OztJQUVELHlDQUFXOzs7O0lBQVgsVUFBWSxLQUFxQjtRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDNUIsQ0FBQzs7OztJQUVELGlEQUFtQjs7O0lBQW5CO1FBQ0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7OztPQU9HOzs7Ozs7Ozs7SUFDSCxtREFBcUI7Ozs7Ozs7O0lBQXJCLFVBQXNCLGNBQTJCLEVBQUUsU0FBZ0IsRUFBRSxXQUFrQjtRQUFwQywwQkFBQSxFQUFBLGdCQUFnQjtRQUFFLDRCQUFBLEVBQUEsa0JBQWtCOztZQUNoRixZQUFZLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXO1FBRXBELCtDQUErQztRQUMvQyxPQUFPLENBQUMsbUJBQWtCLGNBQWMsRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQzs7Z0JBQ3hDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDdEMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkUsT0FBTyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7Ozs7O0lBRUQsOENBQWdCOzs7O0lBQWhCLFVBQWlCLGNBQThCOztZQUN4QyxNQUFNLEdBQUcsRUFBRTs7WUFDaEIsV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7U0FDM0M7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRzs7Ozs7OztJQUNILDZDQUFlOzs7Ozs7SUFBZixVQUFnQixjQUE4Qjs7WUFDdkMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJOztZQUN0QyxLQUFLLEdBQUcsc0JBQUssY0FBYyxJQUFFLGVBQWUsRUFBRSxXQUFXLElBQUU7UUFFNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixLQUFLLENBQUMsT0FBTyxzQkFBSyxjQUFjLElBQUUsZUFBZSxFQUFFLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBRSxDQUFDO1lBQzNFLEtBQUssQ0FBQyxJQUFJLHNCQUFLLGNBQWMsSUFBRSxlQUFlLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFFLENBQUM7U0FDeEU7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7Ozs7O0lBRUQsa0RBQW9COzs7O0lBQXBCLFVBQXFCLElBQVU7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0gsc0NBQVE7Ozs7SUFBUjtRQUNDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNILGtDQUFJOzs7O0lBQUo7UUFDQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7O2dCQWhKRCxTQUFTLFNBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxxckJBYW1GO29CQUM3RixNQUFNLEVBQUUsQ0FBQyxxekJBQXF6QixDQUFDO2lCQUMvekI7OztnQ0FFQyxNQUFNOzRCQUNOLE1BQU07cUNBQ04sTUFBTTs4QkFDTixLQUFLOzJCQUVMLEtBQUs7aUNBZUwsS0FBSzs2QkFNTCxLQUFLOzZCQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUVMLFdBQVcsU0FBQyxrQkFBa0IsY0FDOUIsS0FBSzs7SUE4RlAsMEJBQUM7Q0FBQSxBQWpKRCxJQWlKQztTQS9IWSxtQkFBbUI7OztJQUMvQiw0Q0FBd0U7O0lBQ3hFLHdDQUFvRTs7SUFDcEUsaURBQTZFOzs7OztJQUM3RSwwQ0FBc0M7Ozs7O0lBZ0J0Qyw4Q0FBcUM7O0lBT3JDLHlDQUFtQzs7SUFDbkMseUNBQW1DOztJQUNuQywyQ0FBcUM7O0lBQ3JDLDZDQUF3Qzs7SUFFeEMsc0NBRXVCOzs7OztJQUV2Qix3Q0FBMEI7Ozs7O0lBQzFCLDBDQUE0Qjs7Ozs7SUFDNUIsMENBQXlDOzs7OztJQUN6QyxnREFBa0M7O0lBQ2xDLDhDQUF5Qzs7SUFDekMscUNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1llYXJNb250aCwgTmF2aWdhdGlvbkl0ZW19IGZyb20gJy4uLy4uL21vZGVscy9kYXRlcGlja2VyLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYWEtbmF2aWdhdGlvbicsXG5cdHRlbXBsYXRlOiBgPGJ1dHRvbiAqbmdJZj1cIiFoaWRlTmF2aWdhdGlvblwiIGNsYXNzPVwibmF2aWdhdGlvbl9fYnV0dG9uIGlzLXByZXZpb3VzXCIgKGNsaWNrKT1cInByZXZpb3VzKClcIj48L2J1dHRvbj5cbjxkaXYgY2xhc3M9XCJuYXZpZ2F0aW9uX190aXRsZS13cmFwcGVyXCIgW25nU3R5bGVdPVwie1xuICAndHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIHRyYW5zbGF0ZVggKyAnJSknLFxuICAndHJhbnNpdGlvbic6IHRyYW5zaXRpb24sXG4gICdsZWZ0LiUnOiBsZWZ0UG9zaXRpb25cbn1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0aXRsZSBvZiB0aXRsZXNcIlxuICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uX190aXRsZVwiXG4gICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ3dpZHRoLiUnOiAoMTAwIC8gdGl0bGVzLmxlbmd0aClcbiAgICAgICAgfVwiXG4gICAgPjxzcGFuIChjbGljayk9XCJvbk1vbnRoQ2xpY2sodGl0bGUpXCI+e3t0aXRsZS5uYXZpZ2F0aW9uVGl0bGV9fTwvc3Bhbj4mbmJzcDs8c3BhbiAoY2xpY2spPVwib25ZZWFyQ2xpY2sodGl0bGUpXCI+e3t0aXRsZS55ZWFyfX08L3NwYW4+PC9kaXY+XG48L2Rpdj5cbjxidXR0b24gKm5nSWY9XCIhaGlkZU5hdmlnYXRpb25cIiBjbGFzcz1cIm5hdmlnYXRpb25fX2J1dHRvbiBpcy1uZXh0XCIgKGNsaWNrKT1cIm5leHQoKVwiPjwvYnV0dG9uPmAsXG5cdHN0eWxlczogW2A6aG9zdHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MTBweDtoZWlnaHQ6NTJweH06aG9zdDo6YWZ0ZXIsOmhvc3Q6OmJlZm9yZXtjb250ZW50OicgJztkaXNwbGF5OnRhYmxlfTpob3N0OjphZnRlcntjbGVhcjpib3RofTpob3N0IC5uYXZpZ2F0aW9uX190aXRsZS13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlfTpob3N0IC5uYXZpZ2F0aW9uX190aXRsZXt3aWR0aDoxMDAlO2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOmNlbnRlcjtmbG9hdDpsZWZ0O2xpbmUtaGVpZ2h0OjIuMnJlbX06aG9zdCAubmF2aWdhdGlvbl9fYnV0dG9ue3BhZGRpbmc6MDtib3JkZXI6MXB4IHNvbGlkICNjMGMwYmU7b3V0bGluZTowO2ZvbnQtc3R5bGU6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7YmFja2dyb3VuZC1jb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLm5hdmlnYXRpb25fX2J1dHRvbjpob3Zlcntib3JkZXItY29sb3I6IzhlOGQ4YX06aG9zdCAubmF2aWdhdGlvbl9fYnV0dG9uLmlzLXByZXZpb3Vze2Zsb2F0OmxlZnR9Omhvc3QgLm5hdmlnYXRpb25fX2J1dHRvbi5pcy1wcmV2aW91czo6YWZ0ZXJ7Y29udGVudDonPCd9Omhvc3QgLm5hdmlnYXRpb25fX2J1dHRvbi5pcy1uZXh0e2Zsb2F0OnJpZ2h0fTpob3N0IC5uYXZpZ2F0aW9uX19idXR0b24uaXMtbmV4dDo6YmVmb3Jle2NvbnRlbnQ6Jz4nfTpob3N0LmlzLWFuaW1hdGUgLm5hdmlnYXRpb25fX3RpdGxlLXdyYXBwZXJ7d2lkdGg6MjAwJX1gXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0QE91dHB1dCgpIHB1YmxpYyBwcmV2aW91c0NsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgbmV4dENsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgc3ViTmF2aWdhdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBJbnB1dCgpIHByaXZhdGUgbW9udGhGb3JtYXQgPSAnbG9uZyc7IFx0Ly8gXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBcImxvbmdcIjtcblxuXHRASW5wdXQoKVxuXHRwcml2YXRlIHNldCBsYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5mb3JtYXRNb250aCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxhbmd1YWdlLCB7bW9udGg6IHRoaXMubW9udGhGb3JtYXR9KTtcblx0XHR0aGlzLl9sYW5ndWFnZSA9IGxhbmd1YWdlO1xuXG5cdFx0aWYgKHRoaXMuaW5pdGlhbGlzZWQpIHtcblx0XHRcdHRoaXMudGl0bGVzID0gdGhpcy5jcmVhdGVOYXZpZ2F0aW9uSXRlbXModGhpcy5fdG90YWxZZWFyTW9udGgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0IGxhbmd1YWdlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2xhbmd1YWdlO1xuXHR9XG5cblx0cHJpdmF0ZSBfdG90YWxZZWFyTW9udGg6IFllYXJNb250aFtdO1xuXHRASW5wdXQoKVxuXHRwdWJsaWMgc2V0IHRvdGFsWWVhck1vbnRoKHRvdGFsWWVhck1vbnRoOiBZZWFyTW9udGhbXSkge1xuXHRcdHRoaXMuX3RvdGFsWWVhck1vbnRoID0gdG90YWxZZWFyTW9udGg7XG5cdFx0dGhpcy50aXRsZXMgPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25JdGVtcyh0b3RhbFllYXJNb250aCk7XG5cdH1cblxuXHRASW5wdXQoKSBwdWJsaWMgdHJhbnNpdGlvbjogc3RyaW5nO1xuXHRASW5wdXQoKSBwdWJsaWMgdHJhbnNsYXRlWDogbnVtYmVyO1xuXHRASW5wdXQoKSBwdWJsaWMgbGVmdFBvc2l0aW9uOiBudW1iZXI7XG5cdEBJbnB1dCgpIHB1YmxpYyBoaWRlTmF2aWdhdGlvbjogYm9vbGVhbjtcblxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWFuaW1hdGUnKVxuXHRASW5wdXQoKVxuXHRwdWJsaWMgYW5pbWF0ZSA9IGZhbHNlO1xuXG5cdHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmc7XG5cdHByaXZhdGUgaW5pdGlhbGlzZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBmb3JtYXRNb250aDogSW50bC5EYXRlVGltZUZvcm1hdDtcblx0cHJpdmF0ZSBzdWJOYXZpZ2F0aW9uT3BlbiA9IGZhbHNlO1xuXHRwdWJsaWMgbmF2aWdhdGlvbkl0ZW1zOiBOYXZpZ2F0aW9uSXRlbVtdO1xuXHRwdWJsaWMgdGl0bGVzOiBOYXZpZ2F0aW9uSXRlbVtdO1xuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuaW5pdGlhbGlzZWQgPSB0cnVlO1xuXHR9XG5cblx0b25Nb250aENsaWNrKHRpdGxlOiBOYXZpZ2F0aW9uSXRlbSkge1xuXHRcdGNvbnN0IG1vbnRoQXJyYXkgPSB0aGlzLmNyZWF0ZU1vbnRoQXJyYXkodGl0bGUpO1xuXHRcdGNvbnN0IGZvcm1hdE1vbnRoID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sYW5ndWFnZSwge21vbnRoOiAnc2hvcnQnfSk7XG5cdFx0dGhpcy5uYXZpZ2F0aW9uSXRlbXMgPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25JdGVtcyhtb250aEFycmF5LCB0cnVlLCBmb3JtYXRNb250aCk7XG5cdFx0dGhpcy50b2dnbGVTdWJOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHRvblllYXJDbGljayh0aXRsZTogTmF2aWdhdGlvbkl0ZW0pIHtcblx0XHR0aGlzLm5hdmlnYXRpb25JdGVtcyA9IHRoaXMuY3JlYXRlWWVhckFycmF5KHRpdGxlKTtcblx0XHR0aGlzLnRvZ2dsZVN1Yk5hdmlnYXRpb24oKTtcblx0fVxuXG5cdHRvZ2dsZVN1Yk5hdmlnYXRpb24oKSB7XG5cdFx0dGhpcy5zdWJOYXZpZ2F0aW9uT3BlbiA9ICF0aGlzLnN1Yk5hdmlnYXRpb25PcGVuO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHRpdGxlXG5cdCAqXG5cdCAqIEBwYXJhbSB0b3RhbE1vbnRoWWVhclxuXHQgKiBAcGFyYW0gbW9udGhUeXBlXG5cdCAqIEBwYXJhbSBmb3JtYXRNb250aFxuXHQgKiBAcmV0dXJucyBOYXZpZ2F0aW9uSXRlbVtdXG5cdCAqL1xuXHRjcmVhdGVOYXZpZ2F0aW9uSXRlbXModG90YWxNb250aFllYXI6IFllYXJNb250aFtdLCBtb250aFR5cGUgPSB0cnVlLCBmb3JtYXRNb250aCA9IG51bGwpOiBOYXZpZ2F0aW9uSXRlbVtdIHtcblx0XHRjb25zdCBfZm9ybWF0TW9udGggPSBmb3JtYXRNb250aCB8fCB0aGlzLmZvcm1hdE1vbnRoO1xuXG5cdFx0Ly8gVE9ETzogY29weSB0aGUgb2JqZWN0IC8gcmVtb3ZlIHRoZSByZWZlcmVuY2Vcblx0XHRyZXR1cm4gKDxOYXZpZ2F0aW9uSXRlbVtdPnRvdGFsTW9udGhZZWFyKS5tYXAocyA9PiB7XG5cdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUocy55ZWFyLCBzLm1vbnRoKTtcblx0XHRcdHMubmF2aWdhdGlvblRpdGxlID0gbW9udGhUeXBlID8gX2Zvcm1hdE1vbnRoLmZvcm1hdChkYXRlKSA6IHMueWVhcjtcblx0XHRcdHJldHVybiBzO1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlTW9udGhBcnJheShuYXZpZ2F0aW9uSXRlbTogTmF2aWdhdGlvbkl0ZW0pIHtcblx0XHRjb25zdCBtb250aHMgPSBbXSxcblx0XHRcdGN1cnJlbnRZZWFyID0gbmF2aWdhdGlvbkl0ZW0ueWVhcjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDExOyBpKyspIHtcblx0XHRcdG1vbnRocy5wdXNoKHttb250aDogaSwgeWVhcjogY3VycmVudFllYXJ9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbW9udGhzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhbiBhcnJheSBvZiBuYXZpZ2F0aW9uIGl0ZW1zIHdpdGggeWVhciBhcyBsYWJlbFxuXHQgKlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvbkl0ZW1cblx0ICogQHJldHVybnMgTmF2aWdhdGlvbkl0ZW1bXVxuXHQgKi9cblx0Y3JlYXRlWWVhckFycmF5KG5hdmlnYXRpb25JdGVtOiBOYXZpZ2F0aW9uSXRlbSk6IE5hdmlnYXRpb25JdGVtW10ge1xuXHRcdGNvbnN0IGN1cnJlbnRZZWFyID0gbmF2aWdhdGlvbkl0ZW0ueWVhcixcblx0XHRcdHllYXJzID0gW3suLi5uYXZpZ2F0aW9uSXRlbSwgbmF2aWdhdGlvblRpdGxlOiBjdXJyZW50WWVhcn1dO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcblx0XHRcdHllYXJzLnVuc2hpZnQoey4uLm5hdmlnYXRpb25JdGVtLCBuYXZpZ2F0aW9uVGl0bGU6IGN1cnJlbnRZZWFyIC0gKGkgKyAxKX0pO1xuXHRcdFx0eWVhcnMucHVzaCh7Li4ubmF2aWdhdGlvbkl0ZW0sIG5hdmlnYXRpb25UaXRsZTogY3VycmVudFllYXIgKyAoaSArIDEpfSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHllYXJzO1xuXHR9XG5cblx0b25TdWJOYXZpZ2F0aW9uQ2xpY2soZGF0ZTogRGF0ZSkge1xuXHRcdHRoaXMuc3ViTmF2aWdhdGlvbkNsaWNrLmVtaXQoZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgcHJldmlvdXMgY2xpY2sgZXZlbnRcblx0ICovXG5cdHByZXZpb3VzKCk6IHZvaWQge1xuXHRcdHRoaXMucHJldmlvdXNDbGljay5lbWl0KCk7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgbmV4dCBjbGljayBldmVudFxuXHQgKi9cblx0bmV4dCgpOiB2b2lkIHtcblx0XHR0aGlzLm5leHRDbGljay5lbWl0KCk7XG5cdH1cbn1cbiJdfQ==