angular-schedule
Version:
A simple and light schedule package for angular.
577 lines • 71.6 kB
JavaScript
/**
* @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