UNPKG

@junte/ui

Version:

Quality Angular UI components kit

167 lines 38 kB
var GanttComponent_1; import { __decorate, __metadata } from "tslib"; import { Component, ContentChild, ContentChildren, ElementRef, forwardRef, HostBinding, HostListener, Input, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { addMonths, addYears, subMonths, subYears } from 'date-fns'; import { NGXLogger } from 'ngx-logger'; import { delay, filter, map } from 'rxjs/operators'; import { ContentApi, PropertyApi } from '../../core/decorators/api'; import { Breakpoint } from '../../core/enums/breakpoint'; import { UI } from '../../core/enums/ui'; import { Width } from '../../core/enums/width'; import { today } from '../../forms/calendar/utils'; import { BreakpointService } from '../../layout/responsive/breakpoint.service'; import { GanttTypes } from './enums'; import { GanttLineComponent } from './gantt-line/gantt-line.component'; let GanttComponent = GanttComponent_1 = class GanttComponent { constructor(logger, breakpoint, renderer) { this.logger = logger; this.breakpoint = breakpoint; this.renderer = renderer; this.host = 'jnt-gantt-host'; this.ui = UI; this.addMonths = addMonths; this.subMonths = subMonths; this.addYears = addYears; this.subYears = subYears; this.types = GanttTypes; this._current = new Date(); this._width = Width.fluid; this.type = GanttTypes.month; this.loading = false; this.sections = this.lines; this.today = today(); this.onChange = () => this.logger.error('value accessor is not registered'); this.onTouched = () => this.logger.error('value accessor is not registered'); this.registerOnChange = fn => this.onChange = fn; this.registerOnTouched = fn => this.onTouched = fn; this.onBlur = () => this.onTouched(); } get mobile() { return this.breakpoint.current === Breakpoint.mobile; } set width(width) { this._width = width || Width.fluid; } get width() { return this._width; } get current() { return this._current; } set current(current) { this._current = current; this.onChange(current); } ngAfterViewInit() { this.calendarDays.changes.pipe(delay(0), filter(() => !!this.currentLine && this.breakpoint.current !== Breakpoint.mobile), map(days => ({ days, line: this.currentLine.nativeElement }))).subscribe(({ days, line }) => { const day = days.find(day => day.nativeElement.attributes['data-current'].value === 'true'); if (!!day) { this.renderer.setStyle(line, 'display', 'block'); this.renderer.setStyle(line, 'left', `${day.nativeElement.offsetLeft + (day.nativeElement.offsetWidth / 2) - 2}px`); } }); } writeValue(date) { this._current = date; } }; GanttComponent.ctorParameters = () => [ { type: NGXLogger }, { type: BreakpointService }, { type: Renderer2 } ]; __decorate([ HostBinding('attr.host'), __metadata("design:type", Object) ], GanttComponent.prototype, "host", void 0); __decorate([ PropertyApi({ description: 'Type of gantt', type: 'ui.gantt.type.month | ui.gantt.type.year', default: GanttTypes.month, }), Input(), __metadata("design:type", String) ], GanttComponent.prototype, "type", void 0); __decorate([ PropertyApi({ description: 'Card width', path: 'ui.width', default: Width.fluid, options: [Width.default, Width.fluid] }), HostBinding('attr.data-width'), Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], GanttComponent.prototype, "width", null); __decorate([ PropertyApi({ description: 'Title', type: 'string', default: 'Test title', }), Input(), __metadata("design:type", String) ], GanttComponent.prototype, "title", void 0); __decorate([ PropertyApi({ description: 'Loading', type: 'boolean', default: 'false', }), Input(), __metadata("design:type", Object) ], GanttComponent.prototype, "loading", void 0); __decorate([ ContentApi({ selector: '#toolsTemplate', description: 'Tools template' }), ContentChild('toolsTemplate'), __metadata("design:type", TemplateRef) ], GanttComponent.prototype, "toolsTemplate", void 0); __decorate([ ContentApi({ selector: '#ganttTitleTemplate', description: 'title template' }), ContentChild('ganttTitleTemplate'), __metadata("design:type", TemplateRef) ], GanttComponent.prototype, "titleTemplate", void 0); __decorate([ ContentChildren(GanttLineComponent, { descendants: true }), __metadata("design:type", QueryList) ], GanttComponent.prototype, "lines", void 0); __decorate([ ViewChildren('calendarDay'), __metadata("design:type", QueryList) ], GanttComponent.prototype, "calendarDays", void 0); __decorate([ ViewChild('currentLine'), __metadata("design:type", ElementRef) ], GanttComponent.prototype, "currentLine", void 0); __decorate([ HostListener('blur'), __metadata("design:type", Object) ], GanttComponent.prototype, "onBlur", void 0); GanttComponent = GanttComponent_1 = __decorate([ Component({ selector: 'jnt-gantt', template: "<ng-template #noDataTemplate>\n <ng-container *ngIf=\"loading; else emptyDataTemplate\">\n <tr child-of=\"jnt-gantt-host\" data-loading>\n <td child-of=\"jnt-gantt-host\" [attr.colspan]=\"(current | jntGetDaysInMonth) + 2\">\n <jnt-skeleton child-of=\"jnt-gantt-host\" [type]=\"ui.skeleton.type.text\" [lines]=\"8\"></jnt-skeleton>\n </td>\n </tr>\n </ng-container>\n <ng-template #emptyDataTemplate>\n <tr child-of=\"jnt-gantt-host\" data-nodata>\n <td child-of=\"jnt-gantt-host\" [attr.colspan]=\"(current | jntGetDaysInMonth) + 1\">\n <jnt-icon child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.neutral\"></jnt-icon>\n </td>\n </tr>\n </ng-template>\n</ng-template>\n\n<ng-template #titleDefaultTemplate let-title=\"title\">\n {{title}}\n</ng-template>\n<ng-template #lineTitleDefaultTemplate let-title=\"title\">\n {{title}}\n</ng-template>\n\n<div child-of=\"jnt-gantt-host\" data-spinner *ngIf=\"!!lines.length && loading\">\n <jnt-spinner child-of=\"jnt-gantt-host\" [size]=\"ui.size.large\"></jnt-spinner>\n</div>\n\n<ng-template #ganttYearTemplate>\n <ng-container *jntMinFor=\"ui.breakpoint.tablet\">\n <table child-of=\"jnt-gantt-host\" data-year border=\"0\" cellpadding=\"5\" [cellSpacing]=\"0\">\n <thead child-of=\"jnt-gantt-host\" >\n <tr child-of=\"jnt-gantt-host\" >\n <td child-of=\"jnt-gantt-host\" data-gutter></td>\n <td child-of=\"jnt-gantt-host\" data-empty>\n <ng-container *ngIf=\"toolsTemplate\">\n <ng-container *ngTemplateOutlet=\"toolsTemplate\"></ng-container>\n </ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" data-controls [attr.colspan]=\"12\">\n <div child-of=\"jnt-gantt-host\" data-month>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronLeft\"\n [outline]=\"ui.outline.transparent\"\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n (click)=\"current = subYears(current, 1)\">\n </jnt-button>\n <div child-of=\"jnt-gantt-host\" >\n {{current | jntFormat: 'yyyy'}}\n </div>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronRight\"\n [outline]=\"ui.outline.transparent\"\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n (click)=\"current = addYears(current, 1)\">\n </jnt-button>\n </div>\n </td>\n </tr>\n <tr child-of=\"jnt-gantt-host\" data-timeline>\n <td child-of=\"jnt-gantt-host\" data-gutter></td>\n <td child-of=\"jnt-gantt-host\" >\n <ng-container *ngTemplateOutlet=\"!!titleTemplate ? titleTemplate : titleDefaultTemplate;context: this\"></ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" data-day *ngFor=\"let month of (current | jntStartOfYear | betweenMonths:(current | jntEndOfYear))\"\n [attr.current]=\"month\">\n {{month | monthName}}\n </td>\n </tr>\n </thead>\n <tbody child-of=\"jnt-gantt-host\" >\n\n <ng-container *ngIf=\"lines?.length > 0; else noDataTemplate\">\n <ng-container *ngFor=\"let line of lines\">\n\n <ng-template #emptyYearPeriodsTabletTemplate>\n <tr child-of=\"jnt-gantt-host\" >\n <td child-of=\"jnt-gantt-host\" data-gutter></td>\n <td child-of=\"jnt-gantt-host\" data-title>\n <ng-container *ngTemplateOutlet=\"line.titleTemplate || lineTitleDefaultTemplate; context: {title: line.title}\"></ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" data-day *ngFor=\"let day of (current | datesInMonth)\">\n </td>\n </tr>\n </ng-template>\n\n <ng-container *ngIf=\"line.periods?.length > 0; else emptyYearPeriodsTabletTemplate\">\n <tr child-of=\"jnt-gantt-host\" *ngFor=\"let period of line.periods; let i = index\">\n <ng-container *ngIf=\"i === 0\">\n <td child-of=\"jnt-gantt-host\" data-gutter [attr.rowspan]=\"line.periods.length\"></td>\n <td child-of=\"jnt-gantt-host\" data-title [attr.rowspan]=\"line.periods.length\">\n <ng-container *ngTemplateOutlet=\"line.titleTemplate || lineTitleDefaultTemplate; context: {title: line.title}\"></ng-container>\n </td>\n </ng-container>\n\n <ng-template #periodTemplate let-from=\"from\" let-to=\"to\" let-start=\"start\" let-end=\"end\" let-period=\"period\">\n <td child-of=\"jnt-gantt-host\" *ngFor=\"let d of start | betweenMonths:from | pop\"></td>\n <td child-of=\"jnt-gantt-host\" [attr.colspan]=\"(from | betweenMonths:to).length\">\n <ng-container *ngIf=\"!((period.to | jntIsBefore:start) || (period.from | jntIsAfter:end))\">\n <ng-container *ngTemplateOutlet=\"period.indicatorYearTemplate;\n context: {period: period, current: current, today: today}\">\n </ng-container>\n </ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" *ngFor=\"let d of to | betweenMonths:end | pop\"></td>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"periodTemplate;context:\n {start: current | jntStartOfYear,\n end: current | jntEndOfYear,\n period: period,\n current: current,\n from: [[period.from, current | jntStartOfYear] | jntMax, current | jntEndOfYear] | jntMin,\n to: [[period.to, current | jntEndOfYear] | jntMin, current | jntStartOfYear] | jntMax}\">\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </ng-container>\n\n </tbody>\n </table>\n </ng-container>\n\n \n\n <ng-container *jntFor=\"ui.breakpoint.mobile\">\n <jnt-stack child-of=\"jnt-gantt-host\" [align]=\"ui.align.stretch\">\n <ng-container *ngIf=\"toolsTemplate\">\n <ng-container *ngTemplateOutlet=\"toolsTemplate\"></ng-container>\n </ng-container>\n\n <jnt-accordion child-of=\"jnt-gantt-host\" *ngIf=\"lines?.length > 0\">\n <jnt-accordion-section child-of=\"jnt-gantt-host\" *ngFor=\"let line of lines\" [title]=\"line.title\">\n <ng-template #accordionContentTemplate>\n\n <table child-of=\"jnt-gantt-host\" cellpadding=\"3\" [cellSpacing]=\"0\" data-mobile>\n <tbody child-of=\"jnt-gantt-host\" >\n\n <ng-template #emptyYearPeriodsMobileTemplate>\n <tr child-of=\"jnt-gantt-host\" data-nodata>\n <td child-of=\"jnt-gantt-host\" [attr.colspan]=\"(current | jntGetDaysInMonth) + 1\">\n <jnt-icon child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.neutral\"></jnt-icon>\n </td>\n </tr>\n </ng-template>\n\n <ng-container *ngIf=\"line.periods?.length > 0; else emptyYearPeriodsMobileTemplate\">\n <div child-of=\"jnt-gantt-host\" data-controls>\n <div child-of=\"jnt-gantt-host\" data-month>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronLeft\"\n [outline]=\"ui.outline.transparent\"\n [size]=\"ui.size.small\"\n (click)=\"current = subYears(current, 1)\">\n </jnt-button>\n <div child-of=\"jnt-gantt-host\" >\n {{current | jntFormat: 'yyyy'}}\n </div>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronRight\"\n [outline]=\"ui.outline.transparent\"\n [size]=\"ui.size.small\"\n (click)=\"current = addYears(current, 1)\">\n </jnt-button>\n </div>\n </div>\n\n <tr child-of=\"jnt-gantt-host\" *ngFor=\"let month of (current | jntStartOfYear | betweenMonths:(current | jntEndOfYear))\"\n [attr.current]=\"month\">\n <td child-of=\"jnt-gantt-host\" data-day>{{month | monthName}}</td>\n <ng-container *ngFor=\"let period of line.periods; let i = index\">\n\n <ng-template #periodTemplate let-from=\"from\" let-to=\"to\" let-start=\"start\" let-end=\"end\"\n let-period=\"period\">\n <ng-container *ngIf=\"!(month | isWithinInterval:(from | jntStartOfMonth):(to | jntEndOfMonth))\">\n <td child-of=\"jnt-gantt-host\" ></td>\n </ng-container>\n <ng-container *ngIf=\"from | jntIsSameMonth:month\">\n <td child-of=\"jnt-gantt-host\" [attr.rowspan]=\"(from | betweenMonths:to).length\">\n <ng-container *ngIf=\"!((period.to | jntIsBefore:start) || (period.from | jntIsAfter:end))\">\n <ng-container *ngTemplateOutlet=\"period.indicatorYearTemplate;\n context: {period: period, current: current, today: today}\">\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"periodTemplate;context:\n { start: current | jntStartOfYear,\n end: current | jntEndOfYear,\n period: period,\n current: current,\n from: [[period.from, current | jntStartOfYear] | jntMax, current | jntEndOfYear] | jntMin,\n to: [[period.to, current | jntEndOfYear] | jntMin, current | jntStartOfYear] | jntMax}\">\n </ng-container>\n\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n\n </ng-template>\n </jnt-accordion-section>\n </jnt-accordion>\n </jnt-stack>\n\n </ng-container>\n</ng-template>\n\n<ng-container *ngIf=\"type === types.month; else ganttYearTemplate\">\n <ng-container *jntMinFor=\"ui.breakpoint.tablet\">\n <table child-of=\"jnt-gantt-host\" border=\"0\" cellpadding=\"5\" [cellSpacing]=\"0\">\n <thead child-of=\"jnt-gantt-host\" >\n <tr child-of=\"jnt-gantt-host\" >\n <td child-of=\"jnt-gantt-host\" data-gutter></td>\n <td child-of=\"jnt-gantt-host\" data-empty>\n <ng-container *ngIf=\"toolsTemplate\">\n <ng-container *ngTemplateOutlet=\"toolsTemplate\"></ng-container>\n </ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" data-controls [attr.colspan]=\"(current | jntGetDaysInMonth)\">\n <div child-of=\"jnt-gantt-host\" data-month>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronLeft\"\n [outline]=\"ui.outline.transparent\"\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n (click)=\"current = subMonths(current, 1)\">\n </jnt-button>\n <div child-of=\"jnt-gantt-host\" >\n {{current | jntFormat: 'MMMM'}}, {{current | jntFormat: 'yyyy'}}\n </div>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronRight\"\n [outline]=\"ui.outline.transparent\"\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n (click)=\"current = addMonths(current, 1)\">\n </jnt-button>\n </div>\n </td>\n </tr>\n <tr child-of=\"jnt-gantt-host\" data-timeline>\n <td child-of=\"jnt-gantt-host\" data-gutter></td>\n <td child-of=\"jnt-gantt-host\" >\n <ng-container *ngTemplateOutlet=\"!!titleTemplate ? titleTemplate : titleDefaultTemplate;context: this\"></ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" data-day *ngFor=\"let day of (current | datesInMonth)\"\n [attr.data-current]=\"day | jntIsToday\"\n [attr.data-weekend]=\"day | jntIsWeekend\"\n #calendarDay>\n {{day | jntGetDate}}\n </td>\n </tr>\n </thead>\n <tbody child-of=\"jnt-gantt-host\" >\n <div child-of=\"jnt-gantt-host\" data-current-line #currentLine></div>\n\n <ng-container *ngIf=\"lines?.length > 0; else noDataTemplate\">\n <ng-container *ngFor=\"let line of lines\">\n\n <ng-template #emptyMonthPeriodsTabletTemplate>\n <tr child-of=\"jnt-gantt-host\" >\n <td child-of=\"jnt-gantt-host\" data-gutter></td>\n <td child-of=\"jnt-gantt-host\" data-title>\n <ng-container *ngTemplateOutlet=\"line.titleTemplate || lineTitleDefaultTemplate; context: {title: line.title}\"></ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" data-day *ngFor=\"let day of (current | datesInMonth)\">\n </td>\n </tr>\n </ng-template>\n\n <ng-container *ngIf=\"line.periods?.length > 0; else emptyMonthPeriodsTabletTemplate\">\n <tr child-of=\"jnt-gantt-host\" *ngFor=\"let period of line.periods; let i = index\">\n\n <ng-container *ngIf=\"i === 0\">\n <td child-of=\"jnt-gantt-host\" data-gutter [attr.rowspan]=\"line.periods.length\"></td>\n <td child-of=\"jnt-gantt-host\" data-title [attr.rowspan]=\"line.periods.length\">\n <ng-container *ngTemplateOutlet=\"line.titleTemplate || lineTitleDefaultTemplate; context: {title: line.title}\"></ng-container>\n </td>\n </ng-container>\n\n <ng-template #periodTemplate let-from=\"from\" let-to=\"to\" let-start=\"start\" let-end=\"end\"\n let-period=\"period\">\n <td child-of=\"jnt-gantt-host\" *ngFor=\"let d of start | betweenDays:from | pop\"></td>\n <td child-of=\"jnt-gantt-host\" [attr.colspan]=\"(from | betweenDays:to).length\">\n <ng-container *ngIf=\"!((period.to | jntIsBefore:start) || (period.from | jntIsAfter:end))\">\n <ng-container *ngTemplateOutlet=\"period.indicatorMonthTemplate;\n context: {period: period, current: current, today: today}\">\n </ng-container>\n </ng-container>\n </td>\n <td child-of=\"jnt-gantt-host\" *ngFor=\"let d of to | betweenDays:end | pop\"></td>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"periodTemplate;context:\n {start: current | jntStartOfMonth,\n end: current | jntEndOfMonth,\n period: period,\n current: current,\n from: [[period.from, current | jntStartOfMonth] | jntMax, current | jntEndOfMonth] | jntMin,\n to: [[period.to, current | jntEndOfMonth] | jntMin, current | jntStartOfMonth] | jntMax}\">\n </ng-container>\n\n </tr>\n </ng-container>\n </ng-container>\n\n </ng-container>\n </tbody>\n </table>\n </ng-container>\n\n \n\n <ng-container *jntFor=\"ui.breakpoint.mobile\">\n <jnt-accordion child-of=\"jnt-gantt-host\" *ngIf=\"lines?.length > 0\">\n <jnt-accordion-section child-of=\"jnt-gantt-host\" *ngFor=\"let line of lines\" [title]=\"line.title\">\n <ng-template #accordionContentTemplate>\n <div child-of=\"jnt-gantt-host\" >\n <ng-container *ngIf=\"toolsTemplate\">\n <ng-container *ngTemplateOutlet=\"toolsTemplate\"></ng-container>\n </ng-container>\n </div>\n <div child-of=\"jnt-gantt-host\" data-controls>\n <div child-of=\"jnt-gantt-host\" data-month>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronLeft\"\n [outline]=\"ui.outline.transparent\"\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n (click)=\"current = subMonths(current, 1)\">\n </jnt-button>\n <div child-of=\"jnt-gantt-host\" >\n {{current | jntFormat: 'MMMM'}}, {{current | jntFormat: 'yyyy'}}\n </div>\n <jnt-button child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.chevronRight\"\n [outline]=\"ui.outline.transparent\"\n [scheme]=\"ui.scheme.secondary\"\n [size]=\"ui.size.small\"\n (click)=\"current = addMonths(current, 1)\">\n </jnt-button>\n </div>\n </div>\n <table child-of=\"jnt-gantt-host\" cellpadding=\"3\" [cellSpacing]=\"0\" data-mobile>\n <tbody child-of=\"jnt-gantt-host\" >\n\n <ng-template #emptyMonthPeriodsMobileTemplate>\n <tr child-of=\"jnt-gantt-host\" data-nodata>\n <td child-of=\"jnt-gantt-host\" >\n <jnt-icon child-of=\"jnt-gantt-host\" [icon]=\"ui.icons.neutral\"></jnt-icon>\n </td>\n </tr>\n </ng-template>\n\n <ng-container *ngIf=\"line.periods?.length > 0; else emptyMonthPeriodsMobileTemplate\">\n\n <tr child-of=\"jnt-gantt-host\" *ngFor=\"let day of (current | datesInMonth)\">\n <td child-of=\"jnt-gantt-host\" data-day\n [attr.data-current]=\"day | jntIsToday\"\n [attr.data-weekend]=\"day | jntIsWeekend\"\n #calendarDay>\n {{day | jntGetDate}}\n </td>\n <ng-container *ngFor=\"let period of line.periods; let i = index\">\n\n <ng-template #periodTemplate let-from=\"from\" let-to=\"to\" let-start=\"start\" let-end=\"end\"\n let-period=\"period\">\n\n <ng-container *ngIf=\"!(day | isWithinInterval:(from | jntStartOfDay):(to | jntEndOfDay))\">\n <td child-of=\"jnt-gantt-host\" ></td>\n </ng-container>\n <ng-container *ngIf=\"from | isSameDay:day\">\n <td child-of=\"jnt-gantt-host\" [attr.rowspan]=\"(from | betweenDays:to).length\">\n <ng-container *ngIf=\"!((period.to | jntIsBefore:start) || (period.from | jntIsAfter:end))\">\n <ng-container *ngTemplateOutlet=\"period.indicatorMonthTemplate;\n context: {period: period, current: current, today: today}\">\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"periodTemplate;context:\n {start: current | jntStartOfMonth,\n end: current | jntEndOfMonth,\n period: period,\n current: current,\n from: [[period.from, current | jntStartOfMonth] | jntMax, current | jntEndOfMonth] | jntMin,\n to: [[period.to, current | jntEndOfMonth] | jntMin, current | jntStartOfMonth] | jntMax}\">\n </ng-container>\n\n </ng-container>\n </tr>\n </ng-container>\n\n </tbody>\n </table>\n </ng-template>\n </jnt-accordion-section>\n </jnt-accordion>\n </ng-container>\n</ng-container>", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => GanttComponent_1), multi: true } ] }), __metadata("design:paramtypes", [NGXLogger, BreakpointService, Renderer2]) ], GanttComponent); export { GanttComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2NvbGxlY3Rpb25zL2dhbnR0L2dhbnR0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBYXZFLElBQWEsY0FBYyxzQkFBM0IsTUFBYSxjQUFjO0lBcUd6QixZQUFvQixNQUFpQixFQUNqQixVQUE2QixFQUM3QixRQUFtQjtRQUZuQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFyR0osU0FBSSxHQUFHLGdCQUFnQixDQUFDO1FBRTNELE9BQUUsR0FBRyxFQUFFLENBQUM7UUFDUixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNwQixhQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLFVBQUssR0FBRyxVQUFVLENBQUM7UUFFWCxhQUFRLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQVUsS0FBSyxDQUFDLEtBQUssQ0FBQztRQVlwQyxTQUFJLEdBQWUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQWlDcEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQXlCaEIsYUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEIsVUFBSyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBR2hCLGFBQVEsR0FBeUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUM3RixjQUFTLEdBQWUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNwRixxQkFBZ0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQzVDLHNCQUFpQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDeEIsV0FBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQWN0RCxDQUFDO0lBMUZELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUN2RCxDQUFDO0lBbUJELElBQUksS0FBSyxDQUFDLEtBQVk7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFtREQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFhO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQU9ELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQzVCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUNqRixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBQyxDQUFDLENBQUMsQ0FDNUQsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQ2pDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVU7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztDQUNGLENBQUE7O1lBdkI2QixTQUFTO1lBQ0wsaUJBQWlCO1lBQ25CLFNBQVM7O0FBckdiO0lBQXpCLFdBQVcsQ0FBQyxXQUFXLENBQUM7OzRDQUFrQztBQXNCM0Q7SUFOQyxXQUFXLENBQUM7UUFDWCxXQUFXLEVBQUUsZUFBZTtRQUM1QixJQUFJLEVBQUUsMENBQTBDO1FBQ2hELE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBSztLQUMxQixDQUFDO0lBQ0QsS0FBSyxFQUFFOzs0Q0FDNEI7QUFXcEM7SUFUQyxXQUFXLENBQUM7UUFDWCxXQUFXLEVBQUUsWUFBWTtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDcEIsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQztLQUNmLENBQUM7SUFDRCxXQUFXLENBQUMsaUJBQWlCLENBQUM7SUFDOUIsS0FBSyxFQUFFOzs7MkNBR1A7QUFZRDtJQU5DLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSxPQUFPO1FBQ3BCLElBQUksRUFBRSxRQUFRO1FBQ2QsT0FBTyxFQUFFLFlBQVk7S0FDdEIsQ0FBQztJQUNELEtBQUssRUFBRTs7NkNBQ007QUFRZDtJQU5DLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLE9BQU87S0FDakIsQ0FBQztJQUNELEtBQUssRUFBRTs7K0NBQ1E7QUFPaEI7SUFMQyxVQUFVLENBQUM7UUFDVixRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLFdBQVcsRUFBRSxnQkFBZ0I7S0FDOUIsQ0FBQztJQUNELFlBQVksQ0FBQyxlQUFlLENBQUM7OEJBQ2YsV0FBVztxREFBTTtBQU9oQztJQUxDLFVBQVUsQ0FBQztRQUNWLFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsV0FBVyxFQUFFLGdCQUFnQjtLQUM5QixDQUFDO0lBQ0QsWUFBWSxDQUFDLG9CQUFvQixDQUFDOzhCQUNwQixXQUFXO3FEQUFNO0FBR2hDO0lBREMsZUFBZSxDQUFDLGtCQUFrQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDOzhCQUNsRCxTQUFTOzZDQUFxQjtBQUdyQztJQURDLFlBQVksQ0FBQyxhQUFhLENBQUM7OEJBQ2QsU0FBUztvREFBYTtBQUdwQztJQURDLFNBQVMsQ0FBQyxhQUFhLENBQUM7OEJBQ1osVUFBVTttREFBQztBQVVGO0lBQXJCLFlBQVksQ0FBQyxNQUFNLENBQUM7OzhDQUFpQztBQTFGM0MsY0FBYztJQVgxQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsV0FBVztRQUNyQixtNW5CQUF3QztRQUN4QyxTQUFTLEVBQUU7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFjLENBQUM7Z0JBQzdDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjtLQUNGLENBQUM7cUNBc0c0QixTQUFTO1FBQ0wsaUJBQWlCO1FBQ25CLFNBQVM7R0F2RzVCLGNBQWMsQ0E0SDFCO1NBNUhZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGFkZE1vbnRocywgYWRkWWVhcnMsIHN1Yk1vbnRocywgc3ViWWVhcnMgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBOR1hMb2dnZXIgfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbnRlbnRBcGksIFByb3BlcnR5QXBpIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBCcmVha3BvaW50IH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9icmVha3BvaW50JztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBXaWR0aCB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvd2lkdGgnO1xuaW1wb3J0IHsgdG9kYXkgfSBmcm9tICcuLi8uLi9mb3Jtcy9jYWxlbmRhci91dGlscyc7XG5pbXBvcnQgeyBCcmVha3BvaW50U2VydmljZSB9IGZyb20gJy4uLy4uL2xheW91dC9yZXNwb25zaXZlL2JyZWFrcG9pbnQuc2VydmljZSc7XG5pbXBvcnQgeyBHYW50dFR5cGVzIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBHYW50dExpbmVDb21wb25lbnQgfSBmcm9tICcuL2dhbnR0LWxpbmUvZ2FudHQtbGluZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtZ2FudHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FudHQuZW5jYXBzdWxhdGVkLmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdhbnR0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEdhbnR0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JykgcmVhZG9ubHkgaG9zdCA9ICdqbnQtZ2FudHQtaG9zdCc7XG5cbiAgdWkgPSBVSTtcbiAgYWRkTW9udGhzID0gYWRkTW9udGhzO1xuICBzdWJNb250aHMgPSBzdWJNb250aHM7XG4gIGFkZFllYXJzID0gYWRkWWVhcnM7XG4gIHN1YlllYXJzID0gc3ViWWVhcnM7XG4gIHR5cGVzID0gR2FudHRUeXBlcztcblxuICBwcml2YXRlIF9jdXJyZW50OiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBfd2lkdGg6IFdpZHRoID0gV2lkdGguZmx1aWQ7XG5cbiAgZ2V0IG1vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5icmVha3BvaW50LmN1cnJlbnQgPT09IEJyZWFrcG9pbnQubW9iaWxlO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1R5cGUgb2YgZ2FudHQnLFxuICAgIHR5cGU6ICd1aS5nYW50dC50eXBlLm1vbnRoIHwgdWkuZ2FudHQudHlwZS55ZWFyJyxcbiAgICBkZWZhdWx0OiBHYW50dFR5cGVzLm1vbnRoLFxuICB9KVxuICBASW5wdXQoKVxuICB0eXBlOiBHYW50dFR5cGVzID0gR2FudHRUeXBlcy5tb250aDtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnQ2FyZCB3aWR0aCcsXG4gICAgcGF0aDogJ3VpLndpZHRoJyxcbiAgICBkZWZhdWx0OiBXaWR0aC5mbHVpZCxcbiAgICBvcHRpb25zOiBbV2lkdGguZGVmYXVsdCxcbiAgICAgIFdpZHRoLmZsdWlkXVxuICB9KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS13aWR0aCcpXG4gIEBJbnB1dCgpXG4gIHNldCB3aWR0aCh3aWR0aDogV2lkdGgpIHtcbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoIHx8IFdpZHRoLmZsdWlkO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdUaXRsZScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogJ1Rlc3QgdGl0bGUnLFxuICB9KVxuICBASW5wdXQoKVxuICB0aXRsZTogc3RyaW5nO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdMb2FkaW5nJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogJ2ZhbHNlJyxcbiAgfSlcbiAgQElucHV0KClcbiAgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBDb250ZW50QXBpKHtcbiAgICBzZWxlY3RvcjogJyN0b29sc1RlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Rvb2xzIHRlbXBsYXRlJ1xuICB9KVxuICBAQ29udGVudENoaWxkKCd0b29sc1RlbXBsYXRlJylcbiAgdG9vbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjZ2FudHRUaXRsZVRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ3RpdGxlIHRlbXBsYXRlJ1xuICB9KVxuICBAQ29udGVudENoaWxkKCdnYW50dFRpdGxlVGVtcGxhdGUnKVxuICB0aXRsZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oR2FudHRMaW5lQ29tcG9uZW50LCB7ZGVzY2VuZGFudHM6IHRydWV9KVxuICBsaW5lczogUXVlcnlMaXN0PEdhbnR0TGluZUNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZHJlbignY2FsZW5kYXJEYXknKVxuICBjYWxlbmRhckRheXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBAVmlld0NoaWxkKCdjdXJyZW50TGluZScpXG4gIGN1cnJlbnRMaW5lOiBFbGVtZW50UmVmO1xuXG4gIHNlY3Rpb25zID0gdGhpcy5saW5lcztcbiAgdG9kYXkgPSB0b2RheSgpO1xuICBlcnJvcjogRXJyb3I7XG5cbiAgb25DaGFuZ2U6IChkYXRlOiBEYXRlKSA9PiB2b2lkID0gKCkgPT4gdGhpcy5sb2dnZXIuZXJyb3IoJ3ZhbHVlIGFjY2Vzc29yIGlzIG5vdCByZWdpc3RlcmVkJyk7XG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHRoaXMubG9nZ2VyLmVycm9yKCd2YWx1ZSBhY2Nlc3NvciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICByZWdpc3Rlck9uQ2hhbmdlID0gZm4gPT4gdGhpcy5vbkNoYW5nZSA9IGZuO1xuICByZWdpc3Rlck9uVG91Y2hlZCA9IGZuID0+IHRoaXMub25Ub3VjaGVkID0gZm47XG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIgPSAoKSA9PiB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG5cbiAgc2V0IGN1cnJlbnQoY3VycmVudDogRGF0ZSkge1xuICAgIHRoaXMuX2N1cnJlbnQgPSBjdXJyZW50O1xuICAgIHRoaXMub25DaGFuZ2UoY3VycmVudCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgICAgICAgICAgICBwcml2YXRlIGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmNhbGVuZGFyRGF5cy5jaGFuZ2VzLnBpcGUoXG4gICAgICBkZWxheSgwKSxcbiAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuY3VycmVudExpbmUgJiYgdGhpcy5icmVha3BvaW50LmN1cnJlbnQgIT09IEJyZWFrcG9pbnQubW9iaWxlKSxcbiAgICAgIG1hcChkYXlzID0+ICh7ZGF5cywgbGluZTogdGhpcy5jdXJyZW50TGluZS5uYXRpdmVFbGVtZW50fSkpXG4gICAgKS5zdWJzY3JpYmUoKHtkYXlzLCBsaW5lfSkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gZGF5cy5maW5kKGRheSA9PiBkYXkubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzWydkYXRhLWN1cnJlbnQnXS52YWx1ZSA9PT0gJ3RydWUnKTtcbiAgICAgIGlmICghIWRheSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGxpbmUsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobGluZSwgJ2xlZnQnLFxuICAgICAgICAgIGAke2RheS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyAoZGF5Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSAtIDJ9cHhgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnQgPSBkYXRlO1xuICB9XG59XG4iXX0=