@worktile/gantt 15.1.0 → 15.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EventEmitter, Directive, Inject, Input, Output, ContentChild, HostBinding, Component, Injectable, ViewChild, Pipe, ViewChildren, PLATFORM_ID, ElementRef, Optional, forwardRef, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
2
+ import { InjectionToken, EventEmitter, Directive, Inject, Input, Output, ContentChild, HostBinding, Component, ViewChild, Pipe, ViewChildren, Injectable, PLATFORM_ID, ElementRef, Optional, HostListener, forwardRef, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { DOCUMENT, isPlatformServer, CommonModule } from '@angular/common';
5
- import { __decorate, __param } from 'tslib';
6
5
  import { take, takeUntil, skip, switchMap, debounceTime, map, pairwise, auditTime as auditTime$1, startWith as startWith$1, finalize } from 'rxjs/operators';
7
6
  import { BehaviorSubject, Subject, from, takeUntil as takeUntil$1, startWith, auditTime, filter, merge, EMPTY, fromEvent, Observable, interval, animationFrameScheduler } from 'rxjs';
8
7
  import { fromUnixTime, getWeek, getDaysInMonth, differenceInCalendarDays, setDate, addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addQuarters, addYears, startOfDay, startOfWeek, startOfMonth, startOfQuarter, startOfYear, endOfDay, endOfWeek, endOfMonth, endOfQuarter, endOfYear, getUnixTime, format, isWeekend, isToday, differenceInDays, differenceInCalendarQuarters, eachMonthOfInterval, eachYearOfInterval, eachWeekOfInterval, eachDayOfInterval, differenceInCalendarYears } from 'date-fns';
9
8
  export { addDays, addHours, addMinutes, addMonths, addQuarters, addSeconds, addWeeks, addYears, differenceInCalendarDays, differenceInCalendarQuarters, differenceInDays, eachDayOfInterval, eachMonthOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, endOfQuarter, endOfWeek, endOfYear, format, fromUnixTime, getDaysInMonth, getUnixTime, getWeek, isToday, isWeekend, setDate, startOfDay, startOfMonth, startOfQuarter, startOfWeek, startOfYear } from 'date-fns';
10
9
  import { SelectionModel } from '@angular/cdk/collections';
11
10
  import { coerceBooleanProperty, coerceCssPixelValue } from '@angular/cdk/coercion';
12
- import * as i3 from '@angular/cdk/scrolling';
11
+ import * as i1$1 from '@angular/cdk/scrolling';
13
12
  import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
14
- import { InputBoolean } from 'ngx-tethys/core';
15
13
  import * as i2 from '@angular/cdk/drag-drop';
16
14
  import { CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';
15
+ import { __decorate, __param } from 'tslib';
17
16
 
18
17
  class GanttDatePoint {
19
18
  constructor(start, text, x, y, additions, style) {
@@ -1318,98 +1317,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
1318
1317
 
1319
1318
  const GANTT_ABSTRACT_TOKEN = new InjectionToken('gantt-abstract-token');
1320
1319
 
1321
- class GanttPrintService {
1322
- constructor() { }
1323
- setInlineStyles(targetElem) {
1324
- const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
1325
- for (const svgElement of svgElements) {
1326
- this.recursElementChildren(svgElement);
1327
- }
1328
- }
1329
- recursElementChildren(node) {
1330
- const transformProperties = [
1331
- 'fill',
1332
- 'color',
1333
- 'font-size',
1334
- 'stroke',
1335
- 'font',
1336
- 'text-anchor',
1337
- 'stroke-dasharray',
1338
- 'shape-rendering',
1339
- 'stroke-width'
1340
- ];
1341
- if (!node.style) {
1342
- return;
1343
- }
1344
- const styles = getComputedStyle(node);
1345
- for (const transformProperty of transformProperties) {
1346
- node.style[transformProperty] = styles[transformProperty];
1347
- }
1348
- for (const child of Array.from(node.childNodes)) {
1349
- this.recursElementChildren(child);
1350
- }
1351
- }
1352
- register(root) {
1353
- this.root = root.nativeElement;
1354
- this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
1355
- }
1356
- async print(name = 'download', ignoreElementClass) {
1357
- const root = this.root;
1358
- const mainContainer = this.mainContainer;
1359
- // set print width
1360
- const printWidth = root.offsetWidth;
1361
- // set print height
1362
- const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
1363
- const html2canvas = (await import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
1364
- html2canvas(root, {
1365
- logging: false,
1366
- allowTaint: true,
1367
- useCORS: true,
1368
- width: printWidth,
1369
- height: printHeight,
1370
- ignoreElements: (element) => {
1371
- if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
1372
- return true;
1373
- }
1374
- if (element.classList.contains('gantt-calendar-today-overlay')) {
1375
- return true;
1376
- }
1377
- },
1378
- onclone: (cloneDocument) => {
1379
- const ganttClass = root.className;
1380
- const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
1381
- const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
1382
- const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-grid-main');
1383
- const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
1384
- // change targetDom width
1385
- cloneGanttDom.style.width = `${printWidth}px`;
1386
- cloneGanttDom.style.height = `${printHeight}px`;
1387
- cloneGanttDom.style.overflow = `unset`;
1388
- cloneGanttContainerDom.style.backgroundColor = '#fff';
1389
- cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
1390
- cloneCalendarOverlay.setAttribute('style', `background: transparent`);
1391
- if (cloneLinksOverlay) {
1392
- cloneLinksOverlay.setAttribute('height', `${printHeight}`);
1393
- cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
1394
- }
1395
- // setInlineStyles for svg
1396
- this.setInlineStyles(cloneGanttDom);
1397
- }
1398
- }).then((canvas) => {
1399
- const link = document.createElement('a');
1400
- const dataUrl = canvas.toDataURL('image/png');
1401
- link.download = `${name}.png`;
1402
- link.href = dataUrl;
1403
- link.click();
1404
- });
1405
- }
1406
- }
1407
- GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1408
- GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttPrintService });
1409
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttPrintService, decorators: [{
1410
- type: Injectable
1411
- }], ctorParameters: function () { return []; } });
1412
-
1413
1320
  const supports = (typeof window !== 'undefined' && !!window.CSS && CSS.supports) || (() => false);
1414
1321
  /**
1415
1322
  * Note: we don't need to add vendor prefixes within `.scss` files since they're added automatically.
@@ -1850,6 +1757,11 @@ class GanttTableBodyComponent {
1850
1757
  source: event.source.data?.origin,
1851
1758
  sourceParent: this.getParentByItem(event.source.data)?.origin
1852
1759
  });
1760
+ // dropEnterPredicate 方法返回值为 false 时,始终未执行 onListDropped,所以只能在 dragEnded 中移除 drag-item-hide
1761
+ const children = this.getChildrenElementsByElement(event.source.element.nativeElement);
1762
+ children.forEach((element) => {
1763
+ element.classList.remove('drag-item-hide');
1764
+ });
1853
1765
  }
1854
1766
  onListDropped(event) {
1855
1767
  if (!this.itemDropTarget) {
@@ -2601,6 +2513,7 @@ class GanttDomService {
2601
2513
  this.container = this.root.getElementsByClassName('gantt-container')[0];
2602
2514
  this.sideContainer = this.root.getElementsByClassName('gantt-side-container')[0];
2603
2515
  this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
2516
+ this.verticalScrollContainer = this.root.getElementsByClassName('gantt-scroll-container')[0];
2604
2517
  const mainItems = this.mainContainer.getElementsByClassName('gantt-main-items')[0];
2605
2518
  const mainGroups = this.mainContainer.getElementsByClassName('gantt-main-groups')[0];
2606
2519
  this.mainItems = mainItems || mainGroups;
@@ -3585,6 +3498,98 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
3585
3498
  }, template: "<div class=\"gantt-drag-mask\">\n <div class=\"date-range\">\n <span class=\"start\"></span>\n <span class=\"end\"></span>\n </div>\n</div>\n" }]
3586
3499
  }] });
3587
3500
 
3501
+ class GanttPrintService {
3502
+ constructor() { }
3503
+ setInlineStyles(targetElem) {
3504
+ const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
3505
+ for (const svgElement of svgElements) {
3506
+ this.recursElementChildren(svgElement);
3507
+ }
3508
+ }
3509
+ recursElementChildren(node) {
3510
+ const transformProperties = [
3511
+ 'fill',
3512
+ 'color',
3513
+ 'font-size',
3514
+ 'stroke',
3515
+ 'font',
3516
+ 'text-anchor',
3517
+ 'stroke-dasharray',
3518
+ 'shape-rendering',
3519
+ 'stroke-width'
3520
+ ];
3521
+ if (!node.style) {
3522
+ return;
3523
+ }
3524
+ const styles = getComputedStyle(node);
3525
+ for (const transformProperty of transformProperties) {
3526
+ node.style[transformProperty] = styles[transformProperty];
3527
+ }
3528
+ for (const child of Array.from(node.childNodes)) {
3529
+ this.recursElementChildren(child);
3530
+ }
3531
+ }
3532
+ register(root) {
3533
+ this.root = root.nativeElement;
3534
+ this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
3535
+ }
3536
+ async print(name = 'download', ignoreElementClass) {
3537
+ const root = this.root;
3538
+ const mainContainer = this.mainContainer;
3539
+ // set print width
3540
+ const printWidth = root.offsetWidth;
3541
+ // set print height
3542
+ const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
3543
+ const html2canvas = (await import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
3544
+ html2canvas(root, {
3545
+ logging: false,
3546
+ allowTaint: true,
3547
+ useCORS: true,
3548
+ width: printWidth,
3549
+ height: printHeight,
3550
+ ignoreElements: (element) => {
3551
+ if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
3552
+ return true;
3553
+ }
3554
+ if (element.classList.contains('gantt-calendar-today-overlay')) {
3555
+ return true;
3556
+ }
3557
+ },
3558
+ onclone: (cloneDocument) => {
3559
+ const ganttClass = root.className;
3560
+ const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
3561
+ const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
3562
+ const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-grid-main');
3563
+ const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
3564
+ // change targetDom width
3565
+ cloneGanttDom.style.width = `${printWidth}px`;
3566
+ cloneGanttDom.style.height = `${printHeight}px`;
3567
+ cloneGanttDom.style.overflow = `unset`;
3568
+ cloneGanttContainerDom.style.backgroundColor = '#fff';
3569
+ cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
3570
+ cloneCalendarOverlay.setAttribute('style', `background: transparent`);
3571
+ if (cloneLinksOverlay) {
3572
+ cloneLinksOverlay.setAttribute('height', `${printHeight}`);
3573
+ cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
3574
+ }
3575
+ // setInlineStyles for svg
3576
+ this.setInlineStyles(cloneGanttDom);
3577
+ }
3578
+ }).then((canvas) => {
3579
+ const link = document.createElement('a');
3580
+ const dataUrl = canvas.toDataURL('image/png');
3581
+ link.download = `${name}.png`;
3582
+ link.href = dataUrl;
3583
+ link.click();
3584
+ });
3585
+ }
3586
+ }
3587
+ GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3588
+ GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttPrintService });
3589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttPrintService, decorators: [{
3590
+ type: Injectable
3591
+ }], ctorParameters: function () { return []; } });
3592
+
3588
3593
  class NgxGanttToolbarComponent {
3589
3594
  constructor(ganttUpper) {
3590
3595
  this.ganttUpper = ganttUpper;
@@ -3614,6 +3619,9 @@ class NgxGanttRootComponent {
3614
3619
  get view() {
3615
3620
  return this.ganttUpper.view;
3616
3621
  }
3622
+ onWindowResize() {
3623
+ this.computeScrollBarOffset();
3624
+ }
3617
3625
  constructor(elementRef, ngZone, dom, dragContainer, ganttUpper, printService) {
3618
3626
  this.elementRef = elementRef;
3619
3627
  this.ngZone = ngZone;
@@ -3621,6 +3629,8 @@ class NgxGanttRootComponent {
3621
3629
  this.dragContainer = dragContainer;
3622
3630
  this.ganttUpper = ganttUpper;
3623
3631
  this.printService = printService;
3632
+ this.verticalScrollbarWidth = 0;
3633
+ this.horizontalScrollbarHeight = 0;
3624
3634
  this.unsubscribe$ = new Subject();
3625
3635
  this.ganttUpper.dragContainer = dragContainer;
3626
3636
  }
@@ -3644,9 +3654,24 @@ class NgxGanttRootComponent {
3644
3654
  this.ganttUpper.viewChange.pipe(startWith$1(null), takeUntil(this.unsubscribe$)).subscribe(() => {
3645
3655
  this.scrollToToday();
3646
3656
  });
3657
+ this.computeScrollBarOffset();
3647
3658
  });
3648
3659
  });
3649
3660
  }
3661
+ computeScrollBarOffset() {
3662
+ const ganttMainContainer = this.dom.mainContainer;
3663
+ const ganttVerticalScrollContainer = this.dom.verticalScrollContainer;
3664
+ let verticalScrollbarWidth = 0;
3665
+ if (ganttVerticalScrollContainer) {
3666
+ verticalScrollbarWidth = ganttVerticalScrollContainer.offsetWidth - ganttVerticalScrollContainer.clientWidth;
3667
+ }
3668
+ else {
3669
+ verticalScrollbarWidth = ganttMainContainer?.offsetWidth - ganttMainContainer?.clientWidth;
3670
+ }
3671
+ const horizontalScrollbarHeight = ganttMainContainer?.offsetHeight - ganttMainContainer?.clientHeight;
3672
+ this.verticalScrollbarWidth = verticalScrollbarWidth;
3673
+ this.horizontalScrollbarHeight = horizontalScrollbarHeight;
3674
+ }
3650
3675
  ngOnDestroy() {
3651
3676
  this.unsubscribe$.next();
3652
3677
  }
@@ -3710,12 +3735,12 @@ class NgxGanttRootComponent {
3710
3735
  }
3711
3736
  }
3712
3737
  NgxGanttRootComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgxGanttRootComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: GanttDomService }, { token: GanttDragContainer }, { token: GANTT_UPPER_TOKEN }, { token: GanttPrintService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
3713
- NgxGanttRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: { sideWidth: "sideWidth" }, host: { classAttribute: "gantt" }, providers: [GanttDomService, GanttDragContainer], queries: [{ propertyName: "sideTemplate", first: true, predicate: ["sideTemplate"], descendants: true, static: true }, { propertyName: "mainTemplate", first: true, predicate: ["mainTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "backdrop", first: true, predicate: GanttDragBackdropComponent, descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"gantt-side\" *ngIf=\"sideTemplate\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\" cdkScrollable>\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\" *ngIf=\"mainTemplate\">\n <gantt-calendar-header></gantt-calendar-header>\n <gantt-calendar-grid></gantt-calendar-grid>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n<ng-content></ng-content>\n<gantt-toolbar *ngIf=\"ganttUpper.showToolbar || ganttUpper.toolbarTemplate\" [template]=\"ganttUpper.toolbarTemplate\"> </gantt-toolbar>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "component", type: NgxGanttToolbarComponent, selector: "ngx-gantt-toolbar,gantt-toolbar", inputs: ["template"] }] });
3738
+ NgxGanttRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: { sideWidth: "sideWidth" }, host: { listeners: { "window:resize": "onWindowResize()" }, classAttribute: "gantt" }, providers: [GanttDomService, GanttDragContainer], queries: [{ propertyName: "sideTemplate", first: true, predicate: ["sideTemplate"], descendants: true, static: true }, { propertyName: "mainTemplate", first: true, predicate: ["mainTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "backdrop", first: true, predicate: GanttDragBackdropComponent, descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"gantt-side\" *ngIf=\"sideTemplate\" [style.width.px]=\"sideWidth\" [style.padding-bottom.px]=\"horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\" cdkScrollable>\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\" *ngIf=\"mainTemplate\">\n <gantt-calendar-header [style.padding-right.px]=\"verticalScrollbarWidth\"></gantt-calendar-header>\n <gantt-calendar-grid\n [style.padding-right.px]=\"verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n<ng-content></ng-content>\n<gantt-toolbar *ngIf=\"ganttUpper.showToolbar || ganttUpper.toolbarTemplate\" [template]=\"ganttUpper.toolbarTemplate\"> </gantt-toolbar>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "component", type: NgxGanttToolbarComponent, selector: "ngx-gantt-toolbar,gantt-toolbar", inputs: ["template"] }] });
3714
3739
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgxGanttRootComponent, decorators: [{
3715
3740
  type: Component,
3716
3741
  args: [{ selector: 'ngx-gantt-root', providers: [GanttDomService, GanttDragContainer], host: {
3717
3742
  class: 'gantt'
3718
- }, template: "<div class=\"gantt-side\" *ngIf=\"sideTemplate\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\" cdkScrollable>\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\" *ngIf=\"mainTemplate\">\n <gantt-calendar-header></gantt-calendar-header>\n <gantt-calendar-grid></gantt-calendar-grid>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n<ng-content></ng-content>\n<gantt-toolbar *ngIf=\"ganttUpper.showToolbar || ganttUpper.toolbarTemplate\" [template]=\"ganttUpper.toolbarTemplate\"> </gantt-toolbar>\n" }]
3743
+ }, template: "<div class=\"gantt-side\" *ngIf=\"sideTemplate\" [style.width.px]=\"sideWidth\" [style.padding-bottom.px]=\"horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\" cdkScrollable>\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\" *ngIf=\"mainTemplate\">\n <gantt-calendar-header [style.padding-right.px]=\"verticalScrollbarWidth\"></gantt-calendar-header>\n <gantt-calendar-grid\n [style.padding-right.px]=\"verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n<ng-content></ng-content>\n<gantt-toolbar *ngIf=\"ganttUpper.showToolbar || ganttUpper.toolbarTemplate\" [template]=\"ganttUpper.toolbarTemplate\"> </gantt-toolbar>\n" }]
3719
3744
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: GanttDomService }, { type: GanttDragContainer }, { type: GanttUpper, decorators: [{
3720
3745
  type: Inject,
3721
3746
  args: [GANTT_UPPER_TOKEN]
@@ -3732,6 +3757,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
3732
3757
  }], backdrop: [{
3733
3758
  type: ViewChild,
3734
3759
  args: [GanttDragBackdropComponent, { static: true, read: ElementRef }]
3760
+ }], onWindowResize: [{
3761
+ type: HostListener,
3762
+ args: ['window:resize']
3735
3763
  }] } });
3736
3764
 
3737
3765
  class NgxGanttComponent extends GanttUpper {
@@ -3755,9 +3783,9 @@ class NgxGanttComponent extends GanttUpper {
3755
3783
  get loading() {
3756
3784
  return this._loading;
3757
3785
  }
3758
- constructor(elementRef, cdr, ngZone, printService, config) {
3786
+ constructor(elementRef, cdr, ngZone, viewportRuler, config) {
3759
3787
  super(elementRef, cdr, ngZone, config);
3760
- this.printService = printService;
3788
+ this.viewportRuler = viewportRuler;
3761
3789
  this.maxLevel = 2;
3762
3790
  this.virtualScrollEnabled = true;
3763
3791
  this.loadingDelay = 0;
@@ -3825,6 +3853,19 @@ class NgxGanttComponent extends GanttUpper {
3825
3853
  });
3826
3854
  }
3827
3855
  }
3856
+ ngAfterViewChecked() {
3857
+ if (this.virtualScrollEnabled && this.viewportRuler && this.virtualScroll.getRenderedRange().end > 0) {
3858
+ const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
3859
+ this.ngZone.runOutsideAngular(() => {
3860
+ onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
3861
+ if (!this.ganttRoot.verticalScrollbarWidth) {
3862
+ this.ganttRoot.computeScrollBarOffset();
3863
+ this.cdr.markForCheck();
3864
+ }
3865
+ });
3866
+ });
3867
+ }
3868
+ }
3828
3869
  buildFlatItems() {
3829
3870
  const virtualData = [];
3830
3871
  if (this.groups.length) {
@@ -3935,7 +3976,7 @@ class NgxGanttComponent extends GanttUpper {
3935
3976
  this.cdr.detectChanges();
3936
3977
  }
3937
3978
  }
3938
- NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgxGanttComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GanttPrintService, optional: true }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
3979
+ NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgxGanttComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1$1.ViewportRuler }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
3939
3980
  NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgxGanttComponent, selector: "ngx-gantt", inputs: { maxLevel: "maxLevel", async: "async", childrenResolve: "childrenResolve", linkable: "linkable", loading: "loading", virtualScrollEnabled: "virtualScrollEnabled", loadingDelay: "loadingDelay" }, outputs: { linkDragStarted: "linkDragStarted", linkDragEnded: "linkDragEnded", lineClick: "lineClick", selectedChange: "selectedChange" }, providers: [
3940
3981
  {
3941
3982
  provide: GANTT_UPPER_TOKEN,
@@ -3945,10 +3986,7 @@ NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
3945
3986
  provide: GANTT_ABSTRACT_TOKEN,
3946
3987
  useExisting: forwardRef(() => NgxGanttComponent)
3947
3988
  }
3948
- ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{ 'gantt-normal-viewport': !virtualScrollEnabled }\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"table.dragStarted.emit($event)\"\n (dragEnded)=\"table.dragEnded.emit($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n</ngx-gantt-root>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3949
- __decorate([
3950
- InputBoolean()
3951
- ], NgxGanttComponent.prototype, "virtualScrollEnabled", void 0);
3989
+ ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{ 'gantt-normal-viewport': !virtualScrollEnabled, 'gantt-scroll-container': virtualScrollEnabled }\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"table.dragStarted.emit($event)\"\n (dragEnded)=\"table.dragEnded.emit($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n</ngx-gantt-root>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3952
3990
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgxGanttComponent, decorators: [{
3953
3991
  type: Component,
3954
3992
  args: [{ selector: 'ngx-gantt', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -3960,10 +3998,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
3960
3998
  provide: GANTT_ABSTRACT_TOKEN,
3961
3999
  useExisting: forwardRef(() => NgxGanttComponent)
3962
4000
  }
3963
- ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{ 'gantt-normal-viewport': !virtualScrollEnabled }\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"table.dragStarted.emit($event)\"\n (dragEnded)=\"table.dragEnded.emit($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n</ngx-gantt-root>\n" }]
3964
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: GanttPrintService, decorators: [{
3965
- type: Optional
3966
- }] }, { type: undefined, decorators: [{
4001
+ ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{ 'gantt-normal-viewport': !virtualScrollEnabled, 'gantt-scroll-container': virtualScrollEnabled }\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"table.dragStarted.emit($event)\"\n (dragEnded)=\"table.dragEnded.emit($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n</ngx-gantt-root>\n" }]
4002
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1$1.ViewportRuler }, { type: undefined, decorators: [{
3967
4003
  type: Inject,
3968
4004
  args: [GANTT_GLOBAL_CONFIG]
3969
4005
  }] }]; }, propDecorators: { maxLevel: [{