UNPKG

angular-schedule

Version:

A simple and light schedule package for angular.

577 lines 71.6 kB
/** * @fileoverview added by tsickle * Generated from: lib/scheduler.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ViewChild, ElementRef, Input, Output, EventEmitter, ViewChildren, QueryList, ChangeDetectionStrategy, Inject, TemplateRef, ViewContainerRef, } from '@angular/core'; import { USER_OPTIONS } from './lib.config.token'; import { fromEvent } from 'rxjs'; import { Overlay } from '@angular/cdk/overlay'; import { TemplatePortal } from '@angular/cdk/portal'; import { take, filter } from 'rxjs/operators'; var SchedulerComponent = /** @class */ (function () { function SchedulerComponent(libConfig, elementRef, overlay, viewContainerRef) { this.libConfig = libConfig; this.elementRef = elementRef; this.overlay = overlay; this.viewContainerRef = viewContainerRef; this.isSelecting = false; this.finishedSelecting = new EventEmitter(); this.editInfo = new EventEmitter(); this.excludedDay = new EventEmitter(); this.includedDay = new EventEmitter(); } /** * @param {?} changes * @return {?} */ SchedulerComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.showBy) { this.generateAllDates(); } }; /** * @return {?} */ SchedulerComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ SchedulerComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.scrollToToday(); }; /** * @return {?} */ SchedulerComponent.prototype.generateAllDates = /** * @return {?} */ function () { /** @type {?} */ var CURRENT_MONTH = new Date().getMonth(); /** @type {?} */ var CURRENT_YEAR = new Date().getFullYear(); /** @type {?} */ var MONTHS_IN_PAST = this.libConfig.monthsInPast || 4; /** @type {?} */ var MONTHS_IN_FUTURE = this.libConfig.monthsInFuture || 12; /** @type {?} */ var pastMonth = CURRENT_MONTH - MONTHS_IN_PAST < 0 ? CURRENT_MONTH - MONTHS_IN_PAST + 12 : CURRENT_MONTH - MONTHS_IN_PAST; /** @type {?} */ var pastYear = pastMonth >= 9 ? CURRENT_YEAR - 1 : CURRENT_YEAR; /** @type {?} */ var TO_DATE = this.calculateToDate(CURRENT_YEAR, CURRENT_MONTH, MONTHS_IN_FUTURE); /** @type {?} */ var DATEOBJ = []; while (pastYear <= TO_DATE.getFullYear()) { /** @type {?} */ var FRAME = pastYear === TO_DATE.getFullYear() ? TO_DATE.getMonth() : 11; if (this.showBy === 'day') { for (var index = pastMonth; index <= FRAME; index++) { DATEOBJ.push({ month: new Date(Date.UTC(pastYear, pastMonth, 1)), weekDays: this.generateDates(pastYear, pastMonth), }); pastMonth = pastMonth === 11 ? 0 : pastMonth + 1; } } else { DATEOBJ.push({ month: new Date(Date.UTC(pastYear, pastMonth, 1)), weekDays: this.generateMonths(pastYear, pastMonth, FRAME), }); for (var index = pastMonth; index <= FRAME; index++) { pastMonth = pastMonth === 11 ? 0 : pastMonth + 1; } } pastYear += 1; } this.days = DATEOBJ; }; /** * @param {?} year * @param {?} month * @param {?} toMonths * @return {?} */ SchedulerComponent.prototype.calculateToDate = /** * @param {?} year * @param {?} month * @param {?} toMonths * @return {?} */ function (year, month, toMonths) { /** @type {?} */ var NEW_MONTH = month + toMonths > 12 ? (month + toMonths) % 12 : month + toMonths; /** @type {?} */ var ADD_TO_YEAR = month + toMonths > 12 ? Math.floor((month + toMonths) / 12) : 0; return new Date(Date.UTC(year + ADD_TO_YEAR, NEW_MONTH, 1)); }; /** * @param {?} year * @param {?} month * @return {?} */ SchedulerComponent.prototype.generateDates = /** * @param {?} year * @param {?} month * @return {?} */ function (year, month) { /** @type {?} */ var DATEOBJ = new Date(Date.UTC(year, month, 1)); /** @type {?} */ var WEEKDAYS = []; while (DATEOBJ.getMonth() === month) { WEEKDAYS.push(new Date(DATEOBJ)); DATEOBJ.setDate(DATEOBJ.getDate() + 1); } return WEEKDAYS; }; /** * @param {?} day * @return {?} */ SchedulerComponent.prototype.excludeIncludeCheck = /** * @param {?} day * @return {?} */ function (day) { return false; }; /** * @param {?} start * @param {?} end * @param {?} current * @return {?} */ SchedulerComponent.prototype.calculateFromTo = /** * @param {?} start * @param {?} end * @param {?} current * @return {?} */ function (start, end, current) { /** @type {?} */ var FROM = new Date(start); /** @type {?} */ var TO = new Date(end); /** @type {?} */ var CHECK = new Date(current); /** @type {?} */ var SKIP_DAYS = this.libConfig.skipDays || [0, 6]; if (this.showBy === 'day') { return (CHECK >= FROM && CHECK <= TO && !SKIP_DAYS.includes(CHECK.getDay())); } return CHECK >= FROM && CHECK <= TO; }; /** * @param {?} start * @param {?} end * @param {?} current * @return {?} */ SchedulerComponent.prototype.isDayOff = /** * @param {?} start * @param {?} end * @param {?} current * @return {?} */ function (start, end, current) { /** @type {?} */ var FROM = new Date(start); /** @type {?} */ var TO = new Date(end); /** @type {?} */ var CHECK = new Date(current); /** @type {?} */ var SKIP_DAYS = this.libConfig.skipDays || [0, 6]; return (CHECK >= FROM && CHECK <= TO && SKIP_DAYS.includes(CHECK.getDay()) && this.showBy !== 'month'); }; /** * @param {?} ev * @return {?} */ SchedulerComponent.prototype.enter = /** * @param {?} ev * @return {?} */ function (ev) { if (this.isSelecting) { if (ev.target.classList.contains('selected')) { ev.target.classList.remove('selected'); if (ev.target.parentNode.nextSibling.lastChild.classList.contains('selected')) { ev.target.parentNode.nextSibling.lastChild.classList.remove('selected'); } } else { ev.target.classList.add('selected'); if (!ev.target.parentNode.previousSibling.lastChild.classList.contains('selected')) { ev.target.parentNode.previousSibling.lastChild.classList.add('selected'); } } } }; /** * @param {?} ev * @param {?} day * @param {?} user * @return {?} */ SchedulerComponent.prototype.startSelect = /** * @param {?} ev * @param {?} day * @param {?} user * @return {?} */ function (ev, day, user) { // tslint:disable-next-line:curly if (ev.button !== 0) return; this.startUser = user; this.isSelecting = true; ev.target.classList.add('selected'); this.startDay = day; }; /** * @param {?} ev * @param {?} endDay * @param {?} user * @return {?} */ SchedulerComponent.prototype.endSelect = /** * @param {?} ev * @param {?} endDay * @param {?} user * @return {?} */ function (ev, endDay, user) { if (this.startUser !== user) { throw "Start and end row doesn't match! You might have started selecting in one row and ended up in another one."; } // tslint:disable-next-line:curly if (ev.button !== 0) return; ev.target.classList.add('selected'); this.isSelecting = false; this.selections.forEach((/** * @param {?} el * @return {?} */ function (el) { return el.nativeElement.classList.remove('selected'); })); /** @type {?} */ var DATA = { endDay: ((/** @type {?} */ (endDay))).toISOString(), user: user, startDay: this.startDay.toISOString(), }; this.finishedSelecting.emit(DATA); }; /** * @param {?} ev * @return {?} */ SchedulerComponent.prototype.reCalc = /** * @param {?} ev * @return {?} */ function (ev) { if (this.isSelecting) { /** @type {?} */ var RECT = this.container.nativeElement.getBoundingClientRect(); /** @type {?} */ var X = ev.clientX - RECT.left; if (X > 1000) { this.container.nativeElement.scrollLeft += 40; } } }; /** * @return {?} */ SchedulerComponent.prototype.scrollToToday = /** * @return {?} */ function () { /** @type {?} */ var ELEM = (/** @type {?} */ (this.elementRef.nativeElement.querySelector('.bottomData__title.today'))); ELEM.scrollIntoView(); }; /** * @param {?} year * @param {?} month * @param {?} toMonth * @return {?} */ SchedulerComponent.prototype.generateMonths = /** * @param {?} year * @param {?} month * @param {?} toMonth * @return {?} */ function (year, month, toMonth) { /** @type {?} */ var counter = month; /** @type {?} */ var months = []; while (counter <= toMonth) { ((/** @type {?} */ (months))) = tslib_1.__spread(months, [new Date(Date.UTC(year, counter, 1))]); counter++; } return months; }; /** * @param {?} ev * @param {?} user * @param {?} project * @param {?} weekday * @return {?} */ SchedulerComponent.prototype.open = /** * @param {?} ev * @param {?} user * @param {?} project * @param {?} weekday * @return {?} */ function (ev, user, project, weekday) { var _this = this; if (this.showBy === 'day') { var x = ev.x, y = ev.y; ev.preventDefault(); this.close(); /** @type {?} */ var positionStrategy = this.overlay .position() .flexibleConnectedTo({ x: x, y: y }) .withPositions([ { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', }, ]); this.overlayRef = this.overlay.create({ positionStrategy: positionStrategy, scrollStrategy: this.overlay.scrollStrategies.close(), }); this.overlayRef.attach(new TemplatePortal(this.userMenu, this.viewContainerRef, { $implicit: { user: user, project: project, weekday: weekday }, })); this.sub = fromEvent(document, 'click') .pipe(filter((/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var clickTarget = (/** @type {?} */ (event.target)); return (!!_this.overlayRef && !_this.overlayRef.overlayElement.contains(clickTarget)); })), take(1)) .subscribe((/** * @return {?} */ function () { return _this.close(); })); } }; /** * @return {?} */ SchedulerComponent.prototype.close = /** * @return {?} */ function () { this.sub && this.sub.unsubscribe(); if (this.overlayRef) { this.overlayRef.dispose(); this.overlayRef = null; } }; /** * @param {?} data * @return {?} */ SchedulerComponent.prototype.excludeDay = /** * @param {?} data * @return {?} */ function (data) { this.close(); this.excludedDay.emit(data); }; /** * @param {?} data * @return {?} */ SchedulerComponent.prototype.includeDay = /** * @param {?} data * @return {?} */ function (data) { this.close(); this.includedDay.emit(data); }; /** * @param {?} day * @return {?} */ SchedulerComponent.prototype.isToday = /** * @param {?} day * @return {?} */ function (day) { return new Date(day).toDateString() === new Date().toDateString(); }; /** * @param {?} index * @param {?} el * @return {?} */ SchedulerComponent.prototype.trackPersons = /** * @param {?} index * @param {?} el * @return {?} */ function (index, el) { return el.id; }; /** * @param {?} index * @return {?} */ SchedulerComponent.prototype.trackMonths = /** * @param {?} index * @return {?} */ function (index) { return index; }; /** * @param {?} index * @return {?} */ SchedulerComponent.prototype.trackDays = /** * @param {?} index * @return {?} */ function (index) { return index; }; /** * @param {?} index * @param {?} el * @return {?} */ SchedulerComponent.prototype.trackData = /** * @param {?} index * @param {?} el * @return {?} */ function (index, el) { return el.id; }; SchedulerComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-scheduler', template: "\n\t\t<button\n\t\t\t*ngIf=\"libConfig?.showToday\"\n\t\t\tclass=\"scrollToToday\"\n\t\t\t(click)=\"scrollToToday()\"\n\t\t>\n\t\t\t{{ todayButtonLabel || 'Today' }}\n\t\t</button>\n\t\t<div class=\"table\">\n\t\t\t<div class=\"left\">\n\t\t\t\t<div class=\"spacer\"></div>\n\t\t\t\t<div\n\t\t\t\t\t*ngFor=\"let person of persons; trackBy: trackPersons\"\n\t\t\t\t\t[ngStyle]=\"{\n\t\t\t\t\t\theight:\n\t\t\t\t\t\t\tperson.data.length * 30 >= 60\n\t\t\t\t\t\t\t\t? (person?.data.length + 3) * 30 + 'px'\n\t\t\t\t\t\t\t\t: '100px'\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"who\"\n\t\t\t\t>\n\t\t\t\t\t<strong>{{ person?.name }}</strong>\n\t\t\t\t\t<br />\n\t\t\t\t\t<small [innerText]=\"person?.departments || ''\"></small>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div #container class=\"right\">\n\t\t\t\t<div class=\"header\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngFor=\"let day of days; trackBy: trackMonths\"\n\t\t\t\t\t\tclass=\"headerData\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"topData\">\n\t\t\t\t\t\t\t<strong\n\t\t\t\t\t\t\t\t>{{\n\t\t\t\t\t\t\t\t\tshowBy === 'day'\n\t\t\t\t\t\t\t\t\t\t? (day.month | date: 'MMM yyyy')\n\t\t\t\t\t\t\t\t\t\t: (day.month | date: 'yyyy')\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"bottomData\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bottomData__title\"\n\t\t\t\t\t\t\t\t*ngFor=\"let weekday of day?.weekDays; trackBy: trackDays\"\n\t\t\t\t\t\t\t\t[class.today]=\"isToday(weekday)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<strong>{{\n\t\t\t\t\t\t\t\t\tshowBy === 'day'\n\t\t\t\t\t\t\t\t\t\t? (weekday | date: 'dd EEE')\n\t\t\t\t\t\t\t\t\t\t: (weekday | date: 'MMMM')\n\t\t\t\t\t\t\t\t}}</strong>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"pos-rel\"\n\t\t\t\t\t\t*ngFor=\"let person of persons; let i = index; trackBy: trackPersons\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div *ngFor=\"let day of days; trackBy: trackMonths\" class=\"body\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bodyData\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"{\n\t\t\t\t\t\t\t\t\theight:\n\t\t\t\t\t\t\t\t\t\tperson?.data.length * 30 >= 60\n\t\t\t\t\t\t\t\t\t\t\t? (person?.data.length + 3) * 30 + 'px'\n\t\t\t\t\t\t\t\t\t\t\t: '100px',\n\t\t\t\t\t\t\t\t\t'background-color': isToday(weekday)\n\t\t\t\t\t\t\t\t\t\t? 'rgba(241, 229, 188, .5)'\n\t\t\t\t\t\t\t\t\t\t: '#fff'\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t*ngFor=\"let weekday of day?.weekDays; trackBy: trackDays\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t\t\tclass=\"projectLabel\"\n\t\t\t\t\t\t\t\t\t*ngFor=\"let project of person?.data; trackBy: trackData\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t(contextmenu)=\"open($event, person.id, project, weekday)\"\n\t\t\t\t\t\t\t\t\t\t[showTooltip]=\"libConfig?.showTooltip\"\n\t\t\t\t\t\t\t\t\t\t[tooltip]=\"project?.description || ''\"\n\t\t\t\t\t\t\t\t\t\t[placement]=\"placement\"\n\t\t\t\t\t\t\t\t\t\t[delay]=\"delay\"\n\t\t\t\t\t\t\t\t\t\t[ngStyle]=\"{ backgroundColor: project?.color }\"\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\t\t(calculateFromTo(project?.from, project?.to, weekday) &&\n\t\t\t\t\t\t\t\t\t\t\t\t!project?.excludeDays.includes(weekday)) ||\n\t\t\t\t\t\t\t\t\t\t\tproject?.includeDays.includes(weekday)\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\t\t\t\t\teditInfo.emit({ person: person?.id, project: project })\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t>{{ project?.name }} {{ project?.hours }}</span\n\t\t\t\t\t\t\t\t\t>\n\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t(contextmenu)=\"\n\t\t\t\t\t\t\t\t\t\t\topen($event, person.id, project, weekday);\n\t\t\t\t\t\t\t\t\t\t\t$event.preventDefault()\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\t\t(isDayOff(project?.from, project?.to, weekday) &&\n\t\t\t\t\t\t\t\t\t\t\t\t!project?.includeDays.includes(weekday)) ||\n\t\t\t\t\t\t\t\t\t\t\tproject?.excludeDays.includes(weekday)\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\tclass=\"dayOff\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ dayOffLabel || 'Day off' }}</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t#selectionDiv\n\t\t\t\t\t\t\t\t\tclass=\"selectionDiv\"\n\t\t\t\t\t\t\t\t\t(mousedown)=\"startSelect($event, weekday, person?.id)\"\n\t\t\t\t\t\t\t\t\t(mouseenter)=\"enter($event)\"\n\t\t\t\t\t\t\t\t\t(mousemove)=\"reCalc($event)\"\n\t\t\t\t\t\t\t\t\t(mouseup)=\"endSelect($event, weekday, person?.id)\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"{\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t\theight:\n\t\t\t\t\t\t\t\t\t\t\tperson.data.length * 30 >= 60\n\t\t\t\t\t\t\t\t\t\t\t\t? (person?.data.length + 3) * 30 -\n\t\t\t\t\t\t\t\t\t\t\t\t person?.data.length * 30 +\n\t\t\t\t\t\t\t\t\t\t\t\t 'px'\n\t\t\t\t\t\t\t\t\t\t\t\t: 100 - person?.data.length * 30 + 'px'\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<ng-template #userMenu let-data>\n\t\t\t<section class=\"user-menu\">\n\t\t\t\t<div\n\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t(calculateFromTo(\n\t\t\t\t\t\t\tdata?.project?.from,\n\t\t\t\t\t\t\tdata?.project?.to,\n\t\t\t\t\t\t\tdata?.weekday\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t!data?.project?.excludeDays.includes(data?.weekday)) ||\n\t\t\t\t\t\tdata?.project?.includeDays.includes(data?.weekday)\n\t\t\t\t\t\"\n\t\t\t\t\t(click)=\"excludeDay(data)\"\n\t\t\t\t>\n\t\t\t\t\tExclude day\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t(isDayOff(data?.project?.from, data?.project?.to, data?.weekday) &&\n\t\t\t\t\t\t\t!data?.project?.includeDays.includes(data?.weekday)) ||\n\t\t\t\t\t\tdata?.project?.excludeDays.includes(data?.weekday)\n\t\t\t\t\t\"\n\t\t\t\t\t(click)=\"includeDay(data)\"\n\t\t\t\t>\n\t\t\t\t\tInclude day\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t</ng-template>\n\t", changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n\t\t\t* {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tborder-collapse: collapse;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t\t-moz-user-select: none;\n\t\t\t\t-ms-user-select: none;\n\t\t\t\tuser-select: none;\n\t\t\t}\n\t\t\t.table {\n\t\t\t\tborder: 1px solid #d5d5d5;\n\t\t\t\tbackground-color: #f5f5f5;\n\t\t\t\tborder-spacing: 0;\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t\t.table .spacer {\n\t\t\t\twidth: 300px;\n\t\t\t\theight: 70px;\n\t\t\t\tborder: 1px solid #d5d5d5;\n\t\t\t}\n\t\t\t.table .who {\n\t\t\t\theight: 100px;\n\t\t\t\tpadding: 8px 16px;\n\t\t\t\tborder: 1px solid #d5d5d5;\n\t\t\t\tbackground-color: #fff;\n\t\t\t}\n\t\t\t.table .who strong {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tcolor: #1a1a1a;\n\t\t\t}\n\n\t\t\t.table .right {\n\t\t\t\toverflow-x: auto;\n\t\t\t\toverflow-y: hidden;\n\t\t\t}\n\t\t\t.table .right .header {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t\t.table .right .header .topData {\n\t\t\t\theight: 40px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tborder-right: 1px solid #d5d5d5;\n\t\t\t\tborder-left: 1px solid #d5d5d5;\n\t\t\t}\n\t\t\t.table .right .header .bottomData {\n\t\t\t\theight: 30px;\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t\t.table .right .header .bottomData__title {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: 600;\n\t\t\t\tcolor: #1a1a1a;\n\t\t\t\tborder: 1px solid #d5d5d5;\n\t\t\t\twidth: 100px;\n\t\t\t\tmin-width: 100px;\n\t\t\t\tpadding: 9px;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.pos-rel {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t\t.selected {\n\t\t\t\tbackground-color: #f7f9fa;\n\t\t\t\tborder-bottom: 2px solid #dce2e6;\n\t\t\t\tborder-top: 2px solid #dce2e6;\n\t\t\t\tborder-left-color: transparent;\n\t\t\t\tborder-right-color: transparent;\n\t\t\t}\n\t\t\t.selected:first-of-type {\n\t\t\t\tborder-left-color: #dce2e6;\n\t\t\t}\n\t\t\t.body {\n\t\t\t\tdisplay: flex;\n\t\t\t\tposition: relative;\n\t\t\t}\n\t\t\t.bodyData {\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tborder: 1px solid #d5d5d5;\n\t\t\t\theight: 100px;\n\t\t\t\twidth: 100px;\n\t\t\t\tmin-width: 100px;\n\t\t\t}\n\t\t\t.projectLabel {\n\t\t\t\tposition: relative;\n\t\t\t\tmargin-bottom: 5px;\n\t\t\t\tdisplay: block;\n\t\t\t\theight: 25px;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t\t-moz-user-select: none;\n\t\t\t\t-ms-user-select: none;\n\t\t\t\tuser-select: none;\n\t\t\t}\n\t\t\t.projectLabel span {\n\t\t\t\tcolor: #fff;\n\t\t\t\twidth: 100%;\n\t\t\t\tdisplay: block;\n\t\t\t\tpadding: 5px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t\t-moz-user-select: none;\n\t\t\t\t-ms-user-select: none;\n\t\t\t\tuser-select: none;\n\t\t\t\tposition: relative;\n\t\t\t}\n\t\t\t.dayOff {\n\t\t\t\tbackground: #f2f0eb 0% 0% no-repeat padding-box;\n\t\t\t\tcolor: #27241d !important;\n\t\t\t}\n\t\t\t.today {\n\t\t\t\tbackground-color: rgba(241, 229, 188, 0.5);\n\t\t\t}\n\t\t\t.scrollToToday {\n\t\t\t\tbackground: #f2f0eb 0% 0% no-repeat padding-box;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tborder: 0;\n\t\t\t\theight: 36px;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tletter-spacing: 0px;\n\t\t\t\tcolor: #27241d;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tline-height: 21px;\n\t\t\t\tpadding: 0 15px;\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\n\t\t\t.ng-tooltip {\n\t\t\t\tposition: absolute;\n\t\t\t\tmax-width: 150px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\ttext-align: center;\n\t\t\t\tcolor: #f8f8f2;\n\t\t\t\tpadding: 3px 8px;\n\t\t\t\tbackground: #282a36;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tz-index: 1000;\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\t.ng-tooltip:after {\n\t\t\t\tcontent: '';\n\t\t\t\tposition: absolute;\n\t\t\t\tborder-style: solid;\n\t\t\t}\n\t\t\t.ng-tooltip-top:after {\n\t\t\t\ttop: 100%;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -5px;\n\t\t\t\tborder-width: 5px;\n\t\t\t\tborder-color: black transparent transparent transparent;\n\t\t\t}\n\t\t\t.ng-tooltip-bottom:after {\n\t\t\t\tbottom: 100%;\n\t\t\t\tleft: 50%;\n\t\t\t\tmargin-left: -5px;\n\t\t\t\tborder-width: 5px;\n\t\t\t\tborder-color: transparent transparent black transparent;\n\t\t\t}\n\t\t\t.ng-tooltip-left:after {\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 100%;\n\t\t\t\tmargin-top: -5px;\n\t\t\t\tborder-width: 5px;\n\t\t\t\tborder-color: transparent transparent transparent black;\n\t\t\t}\n\t\t\t.ng-tooltip-right:after {\n\t\t\t\ttop: 50%;\n\t\t\t\tright: 100%;\n\t\t\t\tmargin-top: -5px;\n\t\t\t\tborder-width: 5px;\n\t\t\t\tborder-color: transparent black transparent transparent;\n\t\t\t}\n\t\t\t.ng-tooltip-show {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.my-menu {\n\t\t\t\tbackground-color: #fff;\n\t\t\t\tborder: 1px solid rosybrown;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.user-menu {\n\t\t\t\tbackground-color: #fafafa;\n\t\t\t\tpadding: 4pt;\n\t\t\t\tfont-size: 10pt;\n\t\t\t\tz-index: 1000;\n\t\t\t\tbox-shadow: 0 0 12pt rgba(0, 0, 0, 0.25);\n\t\t\t\tborder-radius: 4pt;\n\t\t\t\tpadding: 0.5em 0 0.5em 0;\n\t\t\t\tanimation: fadeIn 0.1s ease-out;\n\t\t\t\topacity: 1;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.user-menu hr {\n\t\t\t\tborder: none;\n\t\t\t\tborder-bottom: 1px solid #eee;\n\t\t\t}\n\n\t\t\t.user-menu div {\n\t\t\t\tcursor: pointer;\n\t\t\t\tdisplay: block;\n\t\t\t\ttext-decoration: none;\n\t\t\t\tcolor: #333;\n\t\t\t\tpadding: 0.5em 2em 0.5em 0.75em;\n\t\t\t\tmax-width: 18em;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t}\n\n\t\t\t.user-menu div:hover {\n\t\t\t\tbackground-color: #333;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\t\t\t.user-menu div::before {\n\t\t\t\tcontent: '';\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-right: 0.75em;\n\t\t\t\twidth: 0.5em;\n\t\t\t\theight: 1em;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t/* Animatinons */\n\t\t\t@-webkit-keyframes fadeIn {\n\t\t\t\tfrom {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes fadeIn {\n\t\t\t\tfrom {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@-webkit-keyframes fadeOut {\n\t\t\t\tfrom {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@keyframes fadeOut {\n\t\t\t\tfrom {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.is-fadingIn {\n\t\t\t\t-webkit-animation: fadeIn 0.1s ease-out;\n\t\t\t\tanimation: fadeIn 0.1s ease-out;\n\t\t\t\topacity: 1;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.is-fadingOut {\n\t\t\t\t-webkit-animation: fadeOut 0.1s ease-out;\n\t\t\t\tanimation: fadeOut 0.1s ease-out;\n\t\t\t\topacity: 0;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t"] }] } ]; /** @nocollapse */ SchedulerComponent.ctorParameters = function () { return [ { type: undefined, decorators: [{ type: Inject, args: [USER_OPTIONS,] }] }, { type: ElementRef }, { type: Overlay }, { type: ViewContainerRef } ]; }; SchedulerComponent.propDecorators = { container: [{ type: ViewChild, args: ['container', { static: true },] }], userMenu: [{ type: ViewChild, args: ['userMenu', { static: true },] }], selections: [{ type: ViewChildren, args: ['selectionDiv',] }], persons: [{ type: Input }], showBy: [{ type: Input }], delay: [{ type: Input }], dayOffLabel: [{ type: Input }], todayButtonLabel: [{ type: Input }], placement: [{ type: Input }], finishedSelecting: [{ type: Output }], editInfo: [{ type: Output }], excludedDay: [{ type: Output }], includedDay: [{ type: Output }] }; return SchedulerComponent; }()); export { SchedulerComponent }; if (false) { /** @type {?} */ SchedulerComponent.prototype.days; /** @type {?} */ SchedulerComponent.prototype.isSelecting; /** @type {?} */ SchedulerComponent.prototype.startDay; /** @type {?} */ SchedulerComponent.prototype.startUser; /** @type {?} */ SchedulerComponent.prototype.sub; /** @type {?} */ SchedulerComponent.prototype.overlayRef; /** @type {?} */ SchedulerComponent.prototype.container; /** @type {?} */ SchedulerComponent.prototype.userMenu; /** @type {?} */ SchedulerComponent.prototype.selections; /** @type {?} */ SchedulerComponent.prototype.persons; /** @type {?} */ SchedulerComponent.prototype.showBy; /** @type {?} */ SchedulerComponent.prototype.delay; /** @type {?} */ SchedulerComponent.prototype.dayOffLabel; /** @type {?} */ SchedulerComponent.prototype.todayButtonLabel; /** @type {?} */ SchedulerComponent.prototype.placement; /** @type {?} */ SchedulerComponent.prototype.finishedSelecting; /** @type {?} */ SchedulerComponent.prototype.editInfo; /** @type {?} */ SchedulerComponent.prototype.excludedDay; /** @type {?} */ SchedulerComponent.prototype.includedDay; /** @type {?} */ SchedulerComponent.prototype.libConfig; /** * @type {?} * @private */ SchedulerComponent.prototype.elementRef; /** @type {?} */ SchedulerComponent.prototype.overlay; /** @type {?} */ SchedulerComponent.prototype.viewContainerRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItc2NoZWR1bGUvIiwic291cmNlcyI6WyJsaWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osWUFBWSxFQUNaLFNBQVMsRUFDVCx1QkFBdUIsRUFFdkIsTUFBTSxFQUdOLFdBQVcsRUFDWCxnQkFBZ0IsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5QztJQXVkQyw0QkFDOEIsU0FBb0IsRUFDekMsVUFBc0IsRUFDdkIsT0FBZ0IsRUFDaEIsZ0JBQWtDO1FBSFosY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXZCMUMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFjVixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFPeEMsQ0FBQzs7Ozs7SUFFSix3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QUFFLElBQUksRUFBRTs2QkFDdEMsWUFBWSxTQUFDLGNBQWM7MEJBQzNCLEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLOzhCQUNMLEtBQUs7bUNBQ0wsS0FBSzs0QkFDTCxLQUFLO29DQUNMLE1BQU07MkJBQ04sTUFBTTs4QkFDTixNQUFNOzhCQUNOLE1BQU07O0lBd1JSLHlCQUFDO0NBQUEsQUE3dUJELElBNnVCQztTQTNTWSxrQkFBa0I7OztJQUM5QixrQ0FBWTs7SUFDWix5Q0FBb0I7O0lBQ3BCLHNDQUFlOztJQUNmLHVDQUFrQjs7SUFDbEIsaUNBQWtCOztJQUNsQix3Q0FBOEI7O0lBQzlCLHVDQUFnRTs7SUFDaEUsc0NBQW9FOztJQUNwRSx3Q0FBeUQ7O0lBQ3pELHFDQUEyQjs7SUFDM0Isb0NBQWlDOztJQUNqQyxtQ0FBdUI7O0lBQ3ZCLHlDQUE2Qjs7SUFDN0IsOENBQWtDOztJQUNsQyx1Q0FBdUM7O0lBQ3ZDLCtDQUFpRDs7SUFDakQsc0NBQXdDOztJQUN4Qyx5Q0FBMkM7O0lBQzNDLHlDQUEyQzs7SUFHMUMsdUNBQWlEOzs7OztJQUNqRCx3Q0FBOEI7O0lBQzlCLHFDQUF1Qjs7SUFDdkIsOENBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRPbkluaXQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdFF1ZXJ5TGlzdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdEFmdGVyVmlld0luaXQsXG5cdEluamVjdCxcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVU0VSX09QVElPTlMgfSBmcm9tICcuL2xpYi5jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJsYXlSZWYsIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgdGFrZSwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF5LCBQZXJzb24sIFNob3dCeSwgUGxhY2VtZW50LCBMaWJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3gtc2NoZWR1bGVyJyxcblx0dGVtcGxhdGU6IGBcblx0XHQ8YnV0dG9uXG5cdFx0XHQqbmdJZj1cImxpYkNvbmZpZz8uc2hvd1RvZGF5XCJcblx0XHRcdGNsYXNzPVwic2Nyb2xsVG9Ub2RheVwiXG5cdFx0XHQoY2xpY2spPVwic2Nyb2xsVG9Ub2RheSgpXCJcblx0XHQ+XG5cdFx0XHR7eyB0b2RheUJ1dHRvbkxhYmVsIHx8ICdUb2RheScgfX1cblx0XHQ8L2J1dHRvbj5cblx0XHQ8ZGl2IGNsYXNzPVwidGFibGVcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJsZWZ0XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdCpuZ0Zvcj1cImxldCBwZXJzb24gb2YgcGVyc29uczsgdHJhY2tCeTogdHJhY2tQZXJzb25zXCJcblx0XHRcdFx0XHRbbmdTdHlsZV09XCJ7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6XG5cdFx0XHRcdFx0XHRcdHBlcnNvbi5kYXRhLmxlbmd0aCAqIDMwID49IDYwXG5cdFx0XHRcdFx0XHRcdFx0PyAocGVyc29uPy5kYXRhLmxlbmd0aCArIDMpICogMzAgKyAncHgnXG5cdFx0XHRcdFx0XHRcdFx0OiAnMTAwcHgnXG5cdFx0XHRcdFx0fVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJ3aG9cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHN0cm9uZz57eyBwZXJzb24/Lm5hbWUgfX08L3N0cm9uZz5cblx0XHRcdFx0XHQ8YnIgLz5cblx0XHRcdFx0XHQ8c21hbGwgW2lubmVyVGV4dF09XCJwZXJzb24/LmRlcGFydG1lbnRzIHx8ICcnXCI+PC9zbWFsbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgI2NvbnRhaW5lciBjbGFzcz1cInJpZ2h0XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXM7IHRyYWNrQnk6IHRyYWNrTW9udGhzXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiaGVhZGVyRGF0YVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRvcERhdGFcIj5cblx0XHRcdFx0XHRcdFx0PHN0cm9uZ1xuXHRcdFx0XHRcdFx0XHRcdD57e1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0J5ID09PSAnZGF5J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChkYXkubW9udGggfCBkYXRlOiAnTU1NIHl5eXknKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IChkYXkubW9udGggfCBkYXRlOiAneXl5eScpXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PC9zdHJvbmc+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJib3R0b21EYXRhXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJvdHRvbURhdGFfX3RpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiBkYXk/LndlZWtEYXlzOyB0cmFja0J5OiB0cmFja0RheXNcIlxuXHRcdFx0XHRcdFx0XHRcdFtjbGFzcy50b2RheV09XCJpc1RvZGF5KHdlZWtkYXkpXCJcblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxzdHJvbmc+e3tcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dCeSA9PT0gJ2RheSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyAod2Vla2RheSB8IGRhdGU6ICdkZCBFRUUnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6ICh3ZWVrZGF5IHwgZGF0ZTogJ01NTU0nKVxuXHRcdFx0XHRcdFx0XHRcdH19PC9zdHJvbmc+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzPVwicG9zLXJlbFwiXG5cdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgcGVyc29uIG9mIHBlcnNvbnM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUGVyc29uc1wiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXM7IHRyYWNrQnk6IHRyYWNrTW9udGhzXCIgY2xhc3M9XCJib2R5XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJvZHlEYXRhXCJcblx0XHRcdFx0XHRcdFx0XHRbbmdTdHlsZV09XCJ7XG5cdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBlcnNvbj8uZGF0YS5sZW5ndGggKiAzMCA+PSA2MFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKHBlcnNvbj8uZGF0YS5sZW5ndGggKyAzKSAqIDMwICsgJ3B4J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogJzEwMHB4Jyxcblx0XHRcdFx0XHRcdFx0XHRcdCdiYWNrZ3JvdW5kLWNvbG9yJzogaXNUb2RheSh3ZWVrZGF5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/ICdyZ2JhKDI0MSwgMjI5LCAxODgsIC41KSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiAnI2ZmZidcblx0XHRcdFx0XHRcdFx0XHR9XCJcblx0XHRcdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiBkYXk/LndlZWtEYXlzOyB0cmFja0J5OiB0cmFja0RheXNcIlxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInByb2plY3RMYWJlbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgcHJvamVjdCBvZiBwZXJzb24/LmRhdGE7IHRyYWNrQnk6IHRyYWNrRGF0YVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNvbnRleHRtZW51KT1cIm9wZW4oJGV2ZW50LCBwZXJzb24uaWQsIHByb2plY3QsIHdlZWtkYXkpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W3Nob3dUb29sdGlwXT1cImxpYkNvbmZpZz8uc2hvd1Rvb2x0aXBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbdG9vbHRpcF09XCJwcm9qZWN0Py5kZXNjcmlwdGlvbiB8fCAnJ1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2RlbGF5XT1cImRlbGF5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kQ29sb3I6IHByb2plY3Q/LmNvbG9yIH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjYWxjdWxhdGVGcm9tVG8ocHJvamVjdD8uZnJvbSwgcHJvamVjdD8udG8sIHdlZWtkYXkpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQhcHJvamVjdD8uZXhjbHVkZURheXMuaW5jbHVkZXMod2Vla2RheSkpIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvamVjdD8uaW5jbHVkZURheXMuaW5jbHVkZXMod2Vla2RheSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVkaXRJbmZvLmVtaXQoeyBwZXJzb246IHBlcnNvbj8uaWQsIHByb2plY3Q6IHByb2plY3QgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Pnt7IHByb2plY3Q/Lm5hbWUgfX0ge3sgcHJvamVjdD8uaG91cnMgfX08L3NwYW5cblx0XHRcdFx0XHRcdFx0XHRcdD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNvbnRleHRtZW51KT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW4oJGV2ZW50LCBwZXJzb24uaWQsIHByb2plY3QsIHdlZWtkYXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGlzRGF5T2ZmKHByb2plY3Q/LmZyb20sIHByb2plY3Q/LnRvLCB3ZWVrZGF5KSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IXByb2plY3Q/LmluY2x1ZGVEYXlzLmluY2x1ZGVzKHdlZWtkYXkpKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2plY3Q/LmV4Y2x1ZGVEYXlzLmluY2x1ZGVzKHdlZWtkYXkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZGF5T2ZmXCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3sgZGF5T2ZmTGFiZWwgfHwgJ0RheSBvZmYnIH19PC9zcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHQjc2VsZWN0aW9uRGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNlbGVjdGlvbkRpdlwiXG5cdFx0XHRcdFx0XHRcdFx0XHQobW91c2Vkb3duKT1cInN0YXJ0U2VsZWN0KCRldmVudCwgd2Vla2RheSwgcGVyc29uPy5pZClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0KG1vdXNlZW50ZXIpPVwiZW50ZXIoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQobW91c2Vtb3ZlKT1cInJlQ2FsYygkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0XHRcdChtb3VzZXVwKT1cImVuZFNlbGVjdCgkZXZlbnQsIHdlZWtkYXksIHBlcnNvbj8uaWQpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtuZ1N0eWxlXT1cIntcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg6ICcxMDAlJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBlcnNvbi5kYXRhLmxlbmd0aCAqIDMwID49IDYwXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChwZXJzb24/LmRhdGEubGVuZ3RoICsgMykgKiAzMCAtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHBlcnNvbj8uZGF0YS5sZW5ndGggKiAzMCArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgICdweCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogMTAwIC0gcGVyc29uPy5kYXRhLmxlbmd0aCAqIDMwICsgJ3B4J1xuXHRcdFx0XHRcdFx0XHRcdFx0fVwiXG5cdFx0XHRcdFx0XHRcdFx0PjwvZGl2PlxuXHRcdFx0XHRcdFx0X