@worktile/gantt 13.1.0 → 14.0.0

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.
Files changed (58) hide show
  1. package/class/baseline.d.ts +26 -0
  2. package/class/index.d.ts +1 -0
  3. package/class/item.d.ts +1 -2
  4. package/components/bar/bar.component.d.ts +1 -2
  5. package/components/baseline/baseline.component.d.ts +17 -0
  6. package/components/baseline/baseline.component.scss +11 -0
  7. package/components/calendar/calendar.component.d.ts +1 -1
  8. package/components/drag-backdrop/drag-backdrop.component.d.ts +1 -1
  9. package/components/icon/icon.component.d.ts +1 -1
  10. package/components/links/links.component.d.ts +1 -1
  11. package/components/main/gantt-main.component.d.ts +1 -1
  12. package/components/range/range.component.d.ts +1 -1
  13. package/components/table/gantt-table.component.d.ts +1 -1
  14. package/esm2020/class/baseline.mjs +18 -0
  15. package/esm2020/class/index.mjs +2 -1
  16. package/esm2020/class/item.mjs +1 -1
  17. package/esm2020/components/bar/bar-drag.mjs +3 -3
  18. package/esm2020/components/bar/bar.component.mjs +4 -5
  19. package/esm2020/components/baseline/baseline.component.mjs +40 -0
  20. package/esm2020/components/calendar/calendar.component.mjs +3 -3
  21. package/esm2020/components/drag-backdrop/drag-backdrop.component.mjs +3 -3
  22. package/esm2020/components/icon/icon.component.mjs +3 -3
  23. package/esm2020/components/links/links.component.mjs +3 -3
  24. package/esm2020/components/main/gantt-main.component.mjs +12 -11
  25. package/esm2020/components/range/range.component.mjs +3 -3
  26. package/esm2020/components/table/gantt-table.component.mjs +6 -6
  27. package/esm2020/gantt-dom.service.mjs +3 -3
  28. package/esm2020/gantt-drag-container.mjs +3 -3
  29. package/esm2020/gantt-item-upper.mjs +4 -6
  30. package/esm2020/gantt-print.service.mjs +3 -3
  31. package/esm2020/gantt-upper.mjs +30 -5
  32. package/esm2020/gantt.component.mjs +14 -8
  33. package/esm2020/gantt.module.mjs +13 -8
  34. package/esm2020/gantt.pipe.mjs +9 -9
  35. package/esm2020/gantt.styles.mjs +1 -1
  36. package/esm2020/public-api.mjs +2 -1
  37. package/esm2020/root.component.mjs +18 -7
  38. package/esm2020/table/gantt-column.component.mjs +3 -3
  39. package/esm2020/table/gantt-table.component.mjs +3 -3
  40. package/esm2020/utils/helpers.mjs +9 -1
  41. package/fesm2015/worktile-gantt.mjs +890 -789
  42. package/fesm2015/worktile-gantt.mjs.map +1 -1
  43. package/fesm2020/worktile-gantt.mjs +905 -806
  44. package/fesm2020/worktile-gantt.mjs.map +1 -1
  45. package/gantt-item-upper.d.ts +1 -1
  46. package/gantt-upper.d.ts +8 -2
  47. package/gantt.component.d.ts +4 -1
  48. package/gantt.module.d.ts +5 -4
  49. package/gantt.pipe.d.ts +3 -3
  50. package/{worktile-gantt.d.ts → index.d.ts} +0 -0
  51. package/package.json +6 -6
  52. package/public-api.d.ts +1 -0
  53. package/root.component.d.ts +3 -1
  54. package/styles/index.scss +1 -0
  55. package/styles/variables.scss +3 -0
  56. package/table/gantt-column.component.d.ts +1 -1
  57. package/table/gantt-table.component.d.ts +1 -1
  58. package/utils/helpers.d.ts +3 -0
@@ -1,16 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EventEmitter, Directive, Inject, Input, Output, ContentChild, HostBinding, Component, Pipe, ViewChild, PLATFORM_ID, Injectable, ElementRef, Optional, SkipSelf, ViewChildren, forwardRef, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
3
- import * as i2 from '@angular/common';
2
+ import { InjectionToken, EventEmitter, Directive, Inject, Input, Output, ContentChild, HostBinding, Component, Pipe, ViewChild, Injectable, PLATFORM_ID, ElementRef, Optional, SkipSelf, ViewChildren, forwardRef, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
4
  import { isPlatformServer, CommonModule } from '@angular/common';
5
- import { take, takeUntil, skip, map, pairwise, auditTime, startWith, debounceTime, switchMap, finalize } from 'rxjs/operators';
6
- import { BehaviorSubject, Subject, from, merge, fromEvent, Observable, EMPTY } from 'rxjs';
5
+ import { take, takeUntil, skip, debounceTime, map, pairwise, auditTime, startWith, switchMap, finalize } from 'rxjs/operators';
6
+ import { BehaviorSubject, Subject, from, merge, fromEvent, Observable, EMPTY, takeUntil as takeUntil$1 } from 'rxjs';
7
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';
8
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';
9
9
  import { SelectionModel } from '@angular/cdk/collections';
10
10
  import { coerceBooleanProperty, coerceCssPixelValue } from '@angular/cdk/coercion';
11
- import * as i1 from '@angular/cdk/drag-drop';
11
+ import * as i1$1 from '@angular/cdk/drag-drop';
12
12
  import { DragDropModule } from '@angular/cdk/drag-drop';
13
- import { __awaiter, __decorate, __param } from 'tslib';
13
+ import { __decorate, __param, __awaiter } from 'tslib';
14
14
 
15
15
  class GanttDatePoint {
16
16
  constructor(start, text, x, y, additions) {
@@ -326,6 +326,22 @@ class GanttGroupInternal {
326
326
  }
327
327
  }
328
328
 
329
+ class GanttBaselineItemInternal {
330
+ constructor(item) {
331
+ this.refs$ = new BehaviorSubject(null);
332
+ this.origin = item;
333
+ this.id = this.origin.id;
334
+ this.start = item.start ? new GanttDate(item.start) : null;
335
+ this.end = item.end ? new GanttDate(item.end) : null;
336
+ }
337
+ get refs() {
338
+ return this.refs$.getValue();
339
+ }
340
+ updateRefs(refs) {
341
+ this.refs$.next(refs);
342
+ }
343
+ }
344
+
329
345
  const defaultConfig = {
330
346
  dateFormat: {
331
347
  week: '第w周',
@@ -784,6 +800,14 @@ function getFlatItems(items) {
784
800
  });
785
801
  return result;
786
802
  }
803
+ function keyBy(array, key) {
804
+ const result = {};
805
+ array.forEach((item) => {
806
+ const keyValue = item[key];
807
+ result[keyValue] = item;
808
+ });
809
+ return result;
810
+ }
787
811
 
788
812
  class GanttUpper {
789
813
  constructor(elementRef, cdr, ngZone, config) {
@@ -795,6 +819,8 @@ class GanttUpper {
795
819
  this.originItems = [];
796
820
  // eslint-disable-next-line @angular-eslint/no-input-rename
797
821
  this.originGroups = [];
822
+ // eslint-disable-next-line @angular-eslint/no-input-rename
823
+ this.originBaselineItems = [];
798
824
  this.viewType = GanttViewType.month;
799
825
  this.showTodayLine = true;
800
826
  this.viewOptions = {};
@@ -806,6 +832,8 @@ class GanttUpper {
806
832
  this.linkDragEnded = new EventEmitter();
807
833
  this.items = [];
808
834
  this.groups = [];
835
+ this.baselineItems = [];
836
+ this.baselineItemsMap = {};
809
837
  this.viewChange = new EventEmitter();
810
838
  this.expandChange = new EventEmitter();
811
839
  this.firstChange = true;
@@ -879,6 +907,15 @@ class GanttUpper {
879
907
  });
880
908
  }
881
909
  }
910
+ setupBaselineItems() {
911
+ this.originBaselineItems = uniqBy(this.originBaselineItems, 'id');
912
+ this.baselineItems = [];
913
+ this.originBaselineItems.forEach((origin) => {
914
+ const item = new GanttBaselineItemInternal(origin);
915
+ this.baselineItems.push(item);
916
+ });
917
+ this.baselineItemsMap = keyBy(this.baselineItems, 'id');
918
+ }
882
919
  setupExpandedState() {
883
920
  this.originItems = uniqBy(this.originItems, 'id');
884
921
  let items = [];
@@ -949,6 +986,8 @@ class GanttUpper {
949
986
  this.setupGroups();
950
987
  this.setupItems();
951
988
  this.computeRefs();
989
+ this.setupBaselineItems();
990
+ this.computeItemsRefs(...this.baselineItems);
952
991
  this.initSelectionModel();
953
992
  this.firstChange = false;
954
993
  // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
@@ -983,6 +1022,8 @@ class GanttUpper {
983
1022
  this.setupGroups();
984
1023
  this.setupItems();
985
1024
  this.computeRefs();
1025
+ this.setupBaselineItems();
1026
+ this.computeItemsRefs(...this.baselineItems);
986
1027
  this.viewChange.emit(this.view);
987
1028
  }
988
1029
  if (changes.originItems || changes.originGroups) {
@@ -991,6 +1032,10 @@ class GanttUpper {
991
1032
  this.setupItems();
992
1033
  this.computeRefs();
993
1034
  }
1035
+ if (changes.originBaselineItems) {
1036
+ this.setupBaselineItems();
1037
+ this.computeItemsRefs(...this.baselineItems);
1038
+ }
994
1039
  }
995
1040
  }
996
1041
  ngOnDestroy() {
@@ -1047,9 +1092,9 @@ class GanttUpper {
1047
1092
  return this.selectionModel.isSelected(id);
1048
1093
  }
1049
1094
  }
1050
- GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
1051
- GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 });
1052
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttUpper, decorators: [{
1095
+ GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
1096
+ GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 });
1097
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttUpper, decorators: [{
1053
1098
  type: Directive
1054
1099
  }], ctorParameters: function () {
1055
1100
  return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
@@ -1062,6 +1107,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
1062
1107
  }], originGroups: [{
1063
1108
  type: Input,
1064
1109
  args: ['groups']
1110
+ }], originBaselineItems: [{
1111
+ type: Input,
1112
+ args: ['baselineItems']
1065
1113
  }], viewType: [{
1066
1114
  type: Input
1067
1115
  }], start: [{
@@ -1123,9 +1171,9 @@ class NgxGanttTableColumnComponent {
1123
1171
  this.columnWidth = coerceCssPixelValue(width);
1124
1172
  }
1125
1173
  }
1126
- NgxGanttTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttTableColumnComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
1127
- NgxGanttTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: NgxGanttTableColumnComponent, selector: "ngx-gantt-column", inputs: { width: "width", name: "name" }, queries: [{ propertyName: "templateRef", first: true, predicate: ["cell"], descendants: true, static: true }, { propertyName: "headerTemplateRef", first: true, predicate: ["header"], descendants: true, static: true }], ngImport: i0, template: '', isInline: true });
1128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttTableColumnComponent, decorators: [{
1174
+ NgxGanttTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttTableColumnComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
1175
+ NgxGanttTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: NgxGanttTableColumnComponent, selector: "ngx-gantt-column", inputs: { width: "width", name: "name" }, queries: [{ propertyName: "templateRef", first: true, predicate: ["cell"], descendants: true, static: true }, { propertyName: "headerTemplateRef", first: true, predicate: ["header"], descendants: true, static: true }], ngImport: i0, template: '', isInline: true });
1176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttTableColumnComponent, decorators: [{
1129
1177
  type: Component,
1130
1178
  args: [{
1131
1179
  selector: 'ngx-gantt-column',
@@ -1153,9 +1201,9 @@ class NgxGanttTableComponent {
1153
1201
  this.columnChanges = new EventEmitter();
1154
1202
  }
1155
1203
  }
1156
- NgxGanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1157
- NgxGanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: NgxGanttTableComponent, selector: "ngx-gantt-table", outputs: { columnChanges: "columnChanges" }, queries: [{ propertyName: "rowBeforeTemplate", first: true, predicate: ["rowBeforeSlot"], descendants: true, static: true }, { propertyName: "rowAfterTemplate", first: true, predicate: ["rowAfterSlot"], descendants: true, static: true }], ngImport: i0, template: '', isInline: true });
1158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttTableComponent, decorators: [{
1204
+ NgxGanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1205
+ NgxGanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: NgxGanttTableComponent, selector: "ngx-gantt-table", outputs: { columnChanges: "columnChanges" }, queries: [{ propertyName: "rowBeforeTemplate", first: true, predicate: ["rowBeforeSlot"], descendants: true, static: true }, { propertyName: "rowAfterTemplate", first: true, predicate: ["rowAfterSlot"], descendants: true, static: true }], ngImport: i0, template: '', isInline: true });
1206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttTableComponent, decorators: [{
1159
1207
  type: Component,
1160
1208
  args: [{
1161
1209
  selector: 'ngx-gantt-table',
@@ -1293,9 +1341,9 @@ class GanttIconComponent {
1293
1341
  }
1294
1342
  }
1295
1343
  }
1296
- GanttIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttIconComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1297
- GanttIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: GanttIconComponent, selector: "gantt-icon", inputs: { iconName: "iconName" }, host: { properties: { "class.gantt-icon": "this.isIcon" } }, ngImport: i0, template: '', isInline: true });
1298
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttIconComponent, decorators: [{
1344
+ GanttIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttIconComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1345
+ GanttIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GanttIconComponent, selector: "gantt-icon", inputs: { iconName: "iconName" }, host: { properties: { "class.gantt-icon": "this.isIcon" } }, ngImport: i0, template: '', isInline: true });
1346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttIconComponent, decorators: [{
1299
1347
  type: Component,
1300
1348
  args: [{
1301
1349
  selector: 'gantt-icon',
@@ -1313,9 +1361,9 @@ class IsGanttRangeItemPipe {
1313
1361
  return value === GanttItemType.range;
1314
1362
  }
1315
1363
  }
1316
- IsGanttRangeItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttRangeItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1317
- IsGanttRangeItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttRangeItemPipe, name: "isGanttRangeItem" });
1318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttRangeItemPipe, decorators: [{
1364
+ IsGanttRangeItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: IsGanttRangeItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1365
+ IsGanttRangeItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: IsGanttRangeItemPipe, name: "isGanttRangeItem" });
1366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: IsGanttRangeItemPipe, decorators: [{
1319
1367
  type: Pipe,
1320
1368
  args: [{
1321
1369
  name: 'isGanttRangeItem'
@@ -1326,9 +1374,9 @@ class IsGanttBarItemPipe {
1326
1374
  return value === GanttItemType.bar;
1327
1375
  }
1328
1376
  }
1329
- IsGanttBarItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttBarItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1330
- IsGanttBarItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttBarItemPipe, name: "isGanttBarItem" });
1331
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttBarItemPipe, decorators: [{
1377
+ IsGanttBarItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: IsGanttBarItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1378
+ IsGanttBarItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: IsGanttBarItemPipe, name: "isGanttBarItem" });
1379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: IsGanttBarItemPipe, decorators: [{
1332
1380
  type: Pipe,
1333
1381
  args: [{
1334
1382
  name: 'isGanttBarItem'
@@ -1339,9 +1387,9 @@ class IsGanttCustomItemPipe {
1339
1387
  return value === GanttItemType.custom;
1340
1388
  }
1341
1389
  }
1342
- IsGanttCustomItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttCustomItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1343
- IsGanttCustomItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttCustomItemPipe, name: "isGanttCustomItem" });
1344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: IsGanttCustomItemPipe, decorators: [{
1390
+ IsGanttCustomItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: IsGanttCustomItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1391
+ IsGanttCustomItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: IsGanttCustomItemPipe, name: "isGanttCustomItem" });
1392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: IsGanttCustomItemPipe, decorators: [{
1345
1393
  type: Pipe,
1346
1394
  args: [{
1347
1395
  name: 'isGanttCustomItem'
@@ -1461,9 +1509,9 @@ class GanttTableComponent {
1461
1509
  return item.id || index;
1462
1510
  }
1463
1511
  }
1464
- GanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttTableComponent, deps: [{ token: GANTT_ABSTRACT_TOKEN }, { token: GANTT_UPPER_TOKEN }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1465
- GanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: GanttTableComponent, selector: "gantt-table", inputs: { groups: "groups", items: "items", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate", rowBeforeTemplate: "rowBeforeTemplate", rowAfterTemplate: "rowAfterTemplate" }, outputs: { itemClick: "itemClick" }, host: { properties: { "class.gantt-table": "this.ganttTableClass", "class.gantt-table-empty": "this.ganttTableEmptyClass" } }, viewQueries: [{ propertyName: "draglineElementRef", first: true, predicate: ["dragLine"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"></ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div\n (click)=\"itemClick.emit({ event: $event, selectedValue: this.item.origin })\"\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", components: [{ type: GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "isGanttRangeItem": IsGanttRangeItemPipe } });
1466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttTableComponent, decorators: [{
1512
+ GanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttTableComponent, deps: [{ token: GANTT_ABSTRACT_TOKEN }, { token: GANTT_UPPER_TOKEN }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1513
+ GanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GanttTableComponent, selector: "gantt-table", inputs: { groups: "groups", items: "items", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate", rowBeforeTemplate: "rowBeforeTemplate", rowAfterTemplate: "rowAfterTemplate" }, outputs: { itemClick: "itemClick" }, host: { properties: { "class.gantt-table": "this.ganttTableClass", "class.gantt-table-empty": "this.ganttTableEmptyClass" } }, viewQueries: [{ propertyName: "draglineElementRef", first: true, predicate: ["dragLine"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"></ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div\n (click)=\"itemClick.emit({ event: $event, selectedValue: this.item.origin })\"\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }, { kind: "pipe", type: IsGanttRangeItemPipe, name: "isGanttRangeItem" }] });
1514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttTableComponent, decorators: [{
1467
1515
  type: Component,
1468
1516
  args: [{ selector: 'gantt-table', template: "<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"></ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div\n (click)=\"itemClick.emit({ event: $event, selectedValue: this.item.origin })\"\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n" }]
1469
1517
  }], ctorParameters: function () {
@@ -1501,147 +1549,185 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
1501
1549
  args: ['class.gantt-table-empty']
1502
1550
  }] } });
1503
1551
 
1504
- /** Cached result of whether the user's browser supports passive event listeners. */
1505
- let supportsPassiveEvents;
1506
- /**
1507
- * Checks whether the user's browser supports passive event listeners.
1508
- * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
1509
- */
1510
- function supportsPassiveEventListeners() {
1511
- if (supportsPassiveEvents == null && typeof window !== 'undefined') {
1512
- try {
1513
- window.addEventListener('test', null, Object.defineProperty({}, 'passive', {
1514
- get: () => (supportsPassiveEvents = true)
1515
- }));
1516
- }
1517
- finally {
1518
- supportsPassiveEvents = supportsPassiveEvents || false;
1552
+ class GanttLinkLine {
1553
+ constructor() { }
1554
+ generatePath(source, target, type) {
1555
+ if (source.before && source.after && target.before && target.after) {
1556
+ let path = '';
1557
+ switch (type) {
1558
+ case GanttLinkType.ss:
1559
+ path = this.generateSSPath(source, target);
1560
+ break;
1561
+ case GanttLinkType.ff:
1562
+ path = this.generateFFPath(source, target);
1563
+ break;
1564
+ case GanttLinkType.sf:
1565
+ path = this.generateFSAndSFPath(source, target, type);
1566
+ break;
1567
+ default:
1568
+ path = this.generateFSAndSFPath(source, target);
1569
+ }
1570
+ return path;
1519
1571
  }
1520
1572
  }
1521
- return supportsPassiveEvents;
1522
- }
1523
- /**
1524
- * Normalizes an `AddEventListener` object to something that can be passed
1525
- * to `addEventListener` on any browser, no matter whether it supports the
1526
- * `options` parameter.
1527
- */
1528
- function normalizePassiveListenerOptions(options) {
1529
- return supportsPassiveEventListeners() ? options : !!options.capture;
1530
1573
  }
1531
- /** Options used to bind passive event listeners. */
1532
- const passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });
1533
1574
 
1534
- const scrollThreshold = 50;
1535
- var ScrollDirection;
1536
- (function (ScrollDirection) {
1537
- ScrollDirection[ScrollDirection["NONE"] = 0] = "NONE";
1538
- ScrollDirection[ScrollDirection["LEFT"] = 1] = "LEFT";
1539
- ScrollDirection[ScrollDirection["RIGHT"] = 2] = "RIGHT";
1540
- })(ScrollDirection || (ScrollDirection = {}));
1541
- class GanttDomService {
1542
- constructor(ngZone, platformId) {
1543
- this.ngZone = ngZone;
1544
- this.platformId = platformId;
1545
- this.unsubscribe$ = new Subject();
1575
+ let GanttLinkLineCurve = class GanttLinkLineCurve extends GanttLinkLine {
1576
+ constructor(ganttUpper) {
1577
+ super();
1578
+ this.ganttUpper = ganttUpper;
1546
1579
  }
1547
- monitorScrollChange() {
1548
- this.ngZone.runOutsideAngular(() => merge(fromEvent(this.mainContainer, 'scroll', passiveListenerOptions), fromEvent(this.sideContainer, 'scroll', passiveListenerOptions))
1549
- .pipe(takeUntil(this.unsubscribe$))
1550
- .subscribe((event) => {
1551
- this.syncScroll(event);
1552
- }));
1553
- // fromEvent(this.mainContainer, 'scroll')
1554
- // .pipe(startWith(), takeUntil(this.unsubscribe$))
1555
- // .subscribe((event) => {
1556
- // // if (this.mainContainer.scrollLeft > 0) {
1557
- // // this.side.classList.add('gantt-side-has-shadow');
1558
- // // } else {
1559
- // // this.side.classList.remove('gantt-side-has-shadow');
1560
- // // }
1561
- // });
1580
+ generateSSPath(source, target) {
1581
+ const x1 = source.before.x;
1582
+ const y1 = source.before.y;
1583
+ const x4 = target.before.x;
1584
+ const y4 = target.before.y;
1585
+ const isMirror = y4 > y1 ? 0 : 1;
1586
+ const radius = Math.abs(y4 - y1) / 2;
1587
+ if (x4 > x1) {
1588
+ return `M ${x1} ${y1}
1589
+ A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
1590
+ L ${x4} ${y4}`;
1591
+ }
1592
+ else {
1593
+ return `M ${x1} ${y1}
1594
+ L ${x4} ${y1}
1595
+ A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
1596
+ }
1562
1597
  }
1563
- syncScroll(event) {
1564
- const target = event.currentTarget;
1565
- this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
1566
- this.sideContainer.scrollTop = target.scrollTop;
1567
- this.mainContainer.scrollTop = target.scrollTop;
1598
+ generateFFPath(source, target) {
1599
+ const x1 = source.after.x;
1600
+ const y1 = source.after.y;
1601
+ const x4 = target.after.x;
1602
+ const y4 = target.after.y;
1603
+ const isMirror = y4 > y1 ? 1 : 0;
1604
+ const radius = Math.abs(y4 - y1) / 2;
1605
+ if (x4 > x1) {
1606
+ return `M ${x1} ${y1}
1607
+ L ${x4} ${y1}
1608
+ A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
1609
+ }
1610
+ else {
1611
+ return `M ${x1} ${y1}
1612
+ A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
1613
+ L ${x4} ${y4}`;
1614
+ }
1568
1615
  }
1569
- disableBrowserWheelEvent() {
1570
- const container = this.mainContainer;
1571
- this.ngZone.runOutsideAngular(() => fromEvent(container, 'wheel')
1572
- .pipe(takeUntil(this.unsubscribe$))
1573
- .subscribe((event) => {
1574
- const delta = event.deltaX;
1575
- if (!delta) {
1576
- return;
1616
+ generateFSAndSFPath(source, target, type) {
1617
+ var _a;
1618
+ let x1 = source.after.x;
1619
+ let y1 = source.after.y;
1620
+ let x4 = target.before.x;
1621
+ let y4 = target.before.y;
1622
+ const bezierWeight = 0.5;
1623
+ if (type === GanttLinkType.sf) {
1624
+ x1 = target.after.x;
1625
+ y1 = target.after.y;
1626
+ x4 = source.before.x;
1627
+ y4 = source.before.y;
1628
+ }
1629
+ let dx = Math.abs(x4 - x1) * bezierWeight;
1630
+ let x2 = x1 + dx;
1631
+ let x3 = x4 - dx;
1632
+ const centerX = (x1 + x4) / 2;
1633
+ const centerY = (y1 + y4) / 2;
1634
+ let controlX = this.ganttUpper.styles.lineHeight / 2;
1635
+ const controlY = this.ganttUpper.styles.lineHeight / 2;
1636
+ if (x1 >= x4) {
1637
+ if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
1638
+ return `M ${x1} ${y1}
1639
+ C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${x1} ${y4 > y1 ? y1 + controlY : y1 - controlY}
1640
+ L ${x4} ${y4 > y1 ? y4 - controlY : y4 + controlY}
1641
+ C ${x4 - controlY} ${y4 > y1 ? y4 - controlY : y4 + controlY} ${x4 - controlX} ${y4} ${x4} ${y4}
1642
+ `;
1577
1643
  }
1578
- if ((container.scrollLeft + container.offsetWidth === container.scrollWidth && delta > 0) ||
1579
- (container.scrollLeft === 0 && delta < 0)) {
1580
- event.preventDefault();
1644
+ else {
1645
+ controlX = this.ganttUpper.styles.lineHeight;
1646
+ return `M ${x1} ${y1}
1647
+ C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${centerX} ${centerY}
1648
+ C ${x4 - controlX} ${y4 > y1 ? y4 - controlX : y4 + controlX} ${x4 - controlX} ${y4} ${x4} ${y4}
1649
+ `;
1581
1650
  }
1582
- }));
1651
+ }
1652
+ else if (((_a = this.ganttUpper.linkOptions) === null || _a === void 0 ? void 0 : _a.showArrow) && x4 - x1 < 200) {
1653
+ dx = Math.max(Math.abs(y4 - y1) * bezierWeight, 60);
1654
+ x2 = x1 + dx;
1655
+ x3 = x4 - dx;
1656
+ return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
1657
+ }
1658
+ return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
1583
1659
  }
1584
- initialize(root) {
1585
- this.root = root.nativeElement;
1586
- this.side = this.root.getElementsByClassName('gantt-side')[0];
1587
- this.container = this.root.getElementsByClassName('gantt-container')[0];
1588
- this.sideContainer = this.root.getElementsByClassName('gantt-side-container')[0];
1589
- this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
1590
- this.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-overlay')[0];
1591
- this.monitorScrollChange();
1592
- this.disableBrowserWheelEvent();
1660
+ };
1661
+ GanttLinkLineCurve = __decorate([
1662
+ __param(0, Inject(GANTT_UPPER_TOKEN))
1663
+ ], GanttLinkLineCurve);
1664
+
1665
+ class GanttLinkLineStraight extends GanttLinkLine {
1666
+ constructor() {
1667
+ super();
1668
+ this.pathControl = 20;
1593
1669
  }
1594
- /**
1595
- * @returns An observable that will emit outside the Angular zone. Note, consumers should re-enter the Angular zone
1596
- * to run the change detection if needed.
1597
- */
1598
- getViewerScroll(options) {
1599
- return new Observable((subscriber) => this.ngZone.runOutsideAngular(() => fromEvent(this.mainContainer, 'scroll', options)
1600
- .pipe(map(() => this.mainContainer.scrollLeft), pairwise(), map(([previous, current]) => {
1601
- const event = {
1602
- target: this.mainContainer,
1603
- direction: ScrollDirection.NONE
1604
- };
1605
- if (current - previous < 0) {
1606
- if (this.mainContainer.scrollLeft < scrollThreshold && this.mainContainer.scrollLeft > 0) {
1607
- event.direction = ScrollDirection.LEFT;
1608
- }
1609
- }
1610
- if (current - previous > 0) {
1611
- if (this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft <
1612
- scrollThreshold) {
1613
- event.direction = ScrollDirection.RIGHT;
1614
- }
1615
- }
1616
- return event;
1617
- }))
1618
- .subscribe(subscriber)));
1670
+ generateSSPath(source, target) {
1671
+ const x1 = source.before.x;
1672
+ const y1 = source.before.y;
1673
+ const x4 = target.before.x;
1674
+ const y4 = target.before.y;
1675
+ const control = this.pathControl;
1676
+ return `M ${x1} ${y1}
1677
+ L ${x4 > x1 ? x1 - control : x4 - control} ${y1}
1678
+ L ${x4 > x1 ? x1 - control : x4 - control} ${y4}
1679
+ L ${x4} ${y4}`;
1619
1680
  }
1620
- getResize() {
1621
- return isPlatformServer(this.platformId) ? EMPTY : fromEvent(window, 'resize').pipe(auditTime(150));
1681
+ generateFFPath(source, target) {
1682
+ const x1 = source.after.x;
1683
+ const y1 = source.after.y;
1684
+ const x4 = target.after.x;
1685
+ const y4 = target.after.y;
1686
+ const control = this.pathControl;
1687
+ return `M ${x1} ${y1}
1688
+ L ${x4 > x1 ? x4 + control : x1 + control} ${y1}
1689
+ L ${x4 > x1 ? x4 + control : x1 + control} ${y4}
1690
+ L ${x4} ${y4}`;
1622
1691
  }
1623
- scrollMainContainer(left) {
1624
- if (isNumber(left)) {
1625
- const scrollLeft = left - this.mainContainer.clientWidth / 2;
1626
- this.mainContainer.scrollLeft = scrollLeft > scrollThreshold ? scrollLeft : 0;
1627
- this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
1692
+ generateFSAndSFPath(source, target, type) {
1693
+ let x1 = source.after.x;
1694
+ let y1 = source.after.y;
1695
+ let x4 = target.before.x;
1696
+ let y4 = target.before.y;
1697
+ const control = this.pathControl;
1698
+ if (type === GanttLinkType.sf) {
1699
+ x1 = target.after.x;
1700
+ y1 = target.after.y;
1701
+ x4 = source.before.x;
1702
+ y4 = source.before.y;
1703
+ }
1704
+ if (x4 - x1 >= 40) {
1705
+ return `M ${x1} ${y1}
1706
+ L ${x1 + control} ${y1}
1707
+ L ${x1 + control} ${y4}
1708
+ L ${x4} ${y4}`;
1709
+ }
1710
+ else {
1711
+ return `M ${x1} ${y1}
1712
+ L ${x1 + control} ${y1}
1713
+ L ${x1 + control} ${y4 > y1 ? y1 + control : y1 - control}
1714
+ L ${x4 - control} ${y4 > y1 ? y1 + control : y1 - control}
1715
+ L ${x4 - control} ${y4}
1716
+ L ${x4} ${y4}`;
1628
1717
  }
1629
1718
  }
1630
- ngOnDestroy() {
1631
- this.unsubscribe$.next();
1632
- this.unsubscribe$.complete();
1719
+ }
1720
+
1721
+ function createLineGenerator(type, ganttUpper) {
1722
+ switch (type) {
1723
+ case GanttLinkLineType.curve:
1724
+ return new GanttLinkLineCurve(ganttUpper);
1725
+ case GanttLinkLineType.straight:
1726
+ return new GanttLinkLineStraight();
1727
+ default:
1728
+ throw new Error('gantt link path type invalid');
1633
1729
  }
1634
1730
  }
1635
- GanttDomService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDomService, deps: [{ token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
1636
- GanttDomService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDomService });
1637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDomService, decorators: [{
1638
- type: Injectable
1639
- }], ctorParameters: function () {
1640
- return [{ type: i0.NgZone }, { type: undefined, decorators: [{
1641
- type: Inject,
1642
- args: [PLATFORM_ID]
1643
- }] }];
1644
- } });
1645
1731
 
1646
1732
  function getDependencyType(path, dependencyTypes) {
1647
1733
  if (dependencyTypes.includes(GanttLinkType.ss) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.start) {
@@ -1708,9 +1794,9 @@ class GanttDragContainer {
1708
1794
  this.linkDragPath = { from: null, to: null };
1709
1795
  }
1710
1796
  }
1711
- GanttDragContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragContainer, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
1712
- GanttDragContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragContainer });
1713
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragContainer, decorators: [{
1797
+ GanttDragContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDragContainer, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
1798
+ GanttDragContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDragContainer });
1799
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDragContainer, decorators: [{
1714
1800
  type: Injectable
1715
1801
  }], ctorParameters: function () {
1716
1802
  return [{ type: GanttUpper, decorators: [{
@@ -1719,718 +1805,617 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
1719
1805
  }] }];
1720
1806
  } });
1721
1807
 
1722
- class GanttDragBackdropComponent {
1723
- }
1724
- GanttDragBackdropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragBackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1725
- GanttDragBackdropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop", host: { classAttribute: "gantt-drag-backdrop" }, ngImport: i0, 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" });
1726
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttDragBackdropComponent, decorators: [{
1727
- type: Component,
1728
- args: [{ selector: 'gantt-drag-backdrop', host: {
1729
- class: 'gantt-drag-backdrop'
1730
- }, 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" }]
1731
- }] });
1732
-
1733
- class GanttPrintService {
1734
- constructor() { }
1735
- setInlineStyles(targetElem) {
1736
- const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
1737
- for (const svgElement of svgElements) {
1738
- this.recursElementChildren(svgElement);
1739
- }
1740
- }
1741
- recursElementChildren(node) {
1742
- const transformProperties = [
1743
- 'fill',
1744
- 'color',
1745
- 'font-size',
1746
- 'stroke',
1747
- 'font',
1748
- 'text-anchor',
1749
- 'stroke-dasharray',
1750
- 'shape-rendering',
1751
- 'stroke-width'
1752
- ];
1753
- if (!node.style) {
1754
- return;
1755
- }
1756
- const styles = getComputedStyle(node);
1757
- for (const transformProperty of transformProperties) {
1758
- node.style[transformProperty] = styles[transformProperty];
1759
- }
1760
- for (const child of Array.from(node.childNodes)) {
1761
- this.recursElementChildren(child);
1762
- }
1763
- }
1764
- register(root) {
1765
- this.root = root.nativeElement;
1766
- this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
1767
- }
1768
- print(name = 'download', ignoreElementClass) {
1769
- return __awaiter(this, void 0, void 0, function* () {
1770
- const root = this.root;
1771
- const mainContainer = this.mainContainer;
1772
- // set print width
1773
- const printWidth = root.offsetWidth;
1774
- // set print height
1775
- const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
1776
- const html2canvas = (yield import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
1777
- html2canvas(root, {
1778
- logging: false,
1779
- allowTaint: true,
1780
- useCORS: true,
1781
- width: printWidth,
1782
- height: printHeight,
1783
- ignoreElements: (element) => {
1784
- if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
1785
- return true;
1786
- }
1787
- if (element.classList.contains('gantt-calendar-today-overlay')) {
1788
- return true;
1789
- }
1790
- },
1791
- onclone: (cloneDocument) => {
1792
- const ganttClass = root.className;
1793
- const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
1794
- const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
1795
- const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-overlay-main');
1796
- const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
1797
- // change targetDom width
1798
- cloneGanttDom.style.width = `${printWidth}px`;
1799
- cloneGanttDom.style.height = `${printHeight}px`;
1800
- cloneGanttDom.style.overflow = `unset`;
1801
- cloneGanttContainerDom.style.backgroundColor = '#fff';
1802
- cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
1803
- cloneCalendarOverlay.setAttribute('style', `background: transparent`);
1804
- if (cloneLinksOverlay) {
1805
- cloneLinksOverlay.setAttribute('height', `${printHeight}`);
1806
- cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
1807
- }
1808
- // setInlineStyles for svg
1809
- this.setInlineStyles(cloneGanttDom);
1810
- }
1811
- }).then((canvas) => {
1812
- const link = document.createElement('a');
1813
- const dataUrl = canvas.toDataURL('image/png');
1814
- link.download = `${name}.png`;
1815
- link.href = dataUrl;
1816
- link.click();
1817
- });
1818
- });
1819
- }
1820
- }
1821
- GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1822
- GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttPrintService });
1823
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttPrintService, decorators: [{
1824
- type: Injectable
1825
- }], ctorParameters: function () { return []; } });
1826
-
1827
- const mainHeight = 5000;
1828
- class GanttCalendarComponent {
1829
- constructor(ganttUpper, ngZone, elementRef) {
1808
+ class GanttLinksComponent {
1809
+ constructor(ganttUpper, cdr, elementRef, ganttDragContainer) {
1830
1810
  this.ganttUpper = ganttUpper;
1831
- this.ngZone = ngZone;
1811
+ this.cdr = cdr;
1832
1812
  this.elementRef = elementRef;
1833
- this.headerHeight = headerHeight;
1834
- this.mainHeight = mainHeight;
1835
- this.todayHeight = todayHeight;
1836
- this.todayWidth = todayWidth;
1837
- this.todayBorderRadius = todayBorderRadius;
1838
- this.viewTypes = GanttViewType;
1839
- this.className = true;
1813
+ this.ganttDragContainer = ganttDragContainer;
1814
+ this.groups = [];
1815
+ this.items = [];
1816
+ this.lineClick = new EventEmitter();
1817
+ this.links = [];
1818
+ this.ganttLinkTypes = GanttLinkType;
1819
+ this.showArrow = false;
1820
+ this.linkItems = [];
1821
+ this.firstChange = true;
1840
1822
  this.unsubscribe$ = new Subject();
1823
+ this.ganttLinksOverlay = true;
1841
1824
  }
1842
- get view() {
1843
- return this.ganttUpper.view;
1825
+ ngOnInit() {
1826
+ this.linkLine = createLineGenerator(this.ganttUpper.linkOptions.lineType, this.ganttUpper);
1827
+ this.showArrow = this.ganttUpper.linkOptions.showArrow;
1828
+ this.buildLinks();
1829
+ this.firstChange = false;
1830
+ this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
1831
+ this.elementRef.nativeElement.style.visibility = 'hidden';
1832
+ });
1833
+ merge(this.ganttUpper.viewChange, this.ganttUpper.expandChange, this.ganttUpper.view.start$, this.ganttUpper.dragEnded, this.ganttUpper.linkDragEnded)
1834
+ .pipe(skip(1), debounceTime(0), takeUntil(this.unsubscribe$))
1835
+ .subscribe(() => {
1836
+ this.elementRef.nativeElement.style.visibility = 'visible';
1837
+ this.buildLinks();
1838
+ this.cdr.detectChanges();
1839
+ });
1844
1840
  }
1845
- setTodayPoint() {
1846
- const x = this.view.getTodayXPoint();
1847
- const today = new GanttDate().getDate();
1848
- const todayEle = this.elementRef.nativeElement.getElementsByClassName('gantt-calendar-today-overlay')[0];
1849
- const rect = this.elementRef.nativeElement.getElementsByClassName('today-rect')[0];
1850
- const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[0];
1851
- if (isNumber(x)) {
1852
- if (rect) {
1853
- rect.style.left = `${x - todayWidth / 2}px`;
1854
- rect.style.top = `${headerHeight - todayHeight}px`;
1855
- rect.innerHTML = today.toString();
1856
- }
1857
- if (line) {
1858
- line.style.left = `${x}px`;
1859
- line.style.top = `${headerHeight}px`;
1860
- line.style.bottom = `${-mainHeight}px`;
1861
- }
1841
+ ngOnChanges() {
1842
+ if (!this.firstChange) {
1843
+ this.buildLinks();
1844
+ }
1845
+ }
1846
+ computeItemPosition() {
1847
+ const lineHeight = this.ganttUpper.styles.lineHeight;
1848
+ const barHeight = this.ganttUpper.styles.barHeight;
1849
+ this.linkItems = [];
1850
+ if (this.groups.length > 0) {
1851
+ let itemNum = 0;
1852
+ let groupNum = 0;
1853
+ this.groups.forEach((group) => {
1854
+ groupNum++;
1855
+ if (group.expanded) {
1856
+ const items = recursiveItems(group.items);
1857
+ items.forEach((item, itemIndex) => {
1858
+ const y = (groupNum + itemNum + itemIndex) * lineHeight + item.refs.y + barHeight / 2;
1859
+ this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
1860
+ x: item.refs.x,
1861
+ y
1862
+ }, after: {
1863
+ x: item.refs.x + item.refs.width,
1864
+ y
1865
+ } }));
1866
+ });
1867
+ itemNum += items.length;
1868
+ }
1869
+ });
1862
1870
  }
1863
1871
  else {
1864
- todayEle.style.display = 'none';
1872
+ const items = recursiveItems(this.items);
1873
+ items.forEach((item, itemIndex) => {
1874
+ const y = itemIndex * lineHeight + item.refs.y + barHeight / 2;
1875
+ this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
1876
+ x: item.refs.x,
1877
+ y
1878
+ }, after: {
1879
+ x: item.refs.x + item.refs.width,
1880
+ y
1881
+ } }));
1882
+ });
1865
1883
  }
1866
1884
  }
1867
- ngOnInit() {
1868
- // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
1869
- // the `onStable` will never emit any value.
1870
- const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
1871
- // Normally this isn't in the zone, but it can cause performance regressions for apps
1872
- // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
1873
- this.ngZone.runOutsideAngular(() => {
1874
- onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
1875
- merge(this.ganttUpper.viewChange, this.ganttUpper.view.start$)
1876
- .pipe(takeUntil(this.unsubscribe$))
1877
- .subscribe(() => {
1878
- this.setTodayPoint();
1885
+ buildLinks() {
1886
+ this.computeItemPosition();
1887
+ this.links = [];
1888
+ this.linkItems.forEach((source) => {
1889
+ if (source.origin.start || source.origin.end) {
1890
+ source.links.forEach((link) => {
1891
+ const target = this.linkItems.find((item) => item.id === link.link);
1892
+ if (target && (target.origin.start || target.origin.end)) {
1893
+ let defaultColor = LinkColors.default;
1894
+ let activeColor = LinkColors.active;
1895
+ if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {
1896
+ defaultColor = LinkColors.blocked;
1897
+ activeColor = LinkColors.blocked;
1898
+ }
1899
+ if (link.color) {
1900
+ if (typeof link.color === 'string') {
1901
+ defaultColor = link.color;
1902
+ activeColor = link.color;
1903
+ }
1904
+ else {
1905
+ defaultColor = link.color.default;
1906
+ activeColor = link.color.active;
1907
+ }
1908
+ }
1909
+ this.links.push({
1910
+ path: this.linkLine.generatePath(source, target, link.type),
1911
+ source: source.origin,
1912
+ target: target.origin,
1913
+ type: link.type,
1914
+ color: defaultColor,
1915
+ defaultColor,
1916
+ activeColor
1917
+ });
1918
+ }
1879
1919
  });
1880
- });
1920
+ }
1881
1921
  });
1882
1922
  }
1883
- trackBy(index, point) {
1884
- return point.text || index;
1923
+ trackBy(index) {
1924
+ return index;
1925
+ }
1926
+ onLineClick(event, link) {
1927
+ this.lineClick.emit({
1928
+ event,
1929
+ source: link.source,
1930
+ target: link.target
1931
+ });
1932
+ }
1933
+ mouseEnterPath(link, index) {
1934
+ link.color = link.activeColor || link.defaultColor;
1935
+ if (index < this.links.length - 1) {
1936
+ this.links.splice(index, 1);
1937
+ this.links.push(link);
1938
+ }
1939
+ }
1940
+ mouseLeavePath(link) {
1941
+ link.color = link.defaultColor;
1885
1942
  }
1886
1943
  ngOnDestroy() {
1887
1944
  this.unsubscribe$.next();
1888
1945
  this.unsubscribe$.complete();
1889
1946
  }
1890
1947
  }
1891
- GanttCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttCalendarComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1892
- GanttCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: GanttCalendarComponent, selector: "gantt-calendar-overlay", host: { properties: { "class.gantt-calendar-overlay": "this.className" } }, ngImport: i0, template: "<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType !== viewTypes.day\"> </span>\n <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-overlay-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight\">\n <g>\n <text class=\"primary-text\" *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text class=\"secondary-text\" [class.secondary-text-weekend]=\"point.additions?.isWeekend\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n </ng-container>\n\n <g>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n\n <g>\n <line [attr.x1]=\"0\" [attr.x2]=\"view.width\" [attr.y1]=\"headerHeight\" [attr.y2]=\"headerHeight\" class=\"header-line\"></line>\n </g>\n </g>\n <g>\n <g *ngIf=\"view.showTimeline\">\n <line\n *ngFor=\"let point of view.secondaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.cellWidth\"\n [attr.x2]=\"(i + 1) * view.cellWidth\"\n [attr.y1]=\"headerHeight\"\n [attr.y2]=\"mainHeight\"\n class=\"secondary-line\"\n ></line>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n </g>\n</svg>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttCalendarComponent, decorators: [{
1948
+ GanttLinksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttLinksComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: GanttDragContainer }], target: i0.ɵɵFactoryTarget.Component });
1949
+ GanttLinksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: { groups: "groups", items: "items" }, outputs: { lineClick: "lineClick" }, host: { properties: { "class.gantt-links-overlay": "this.ganttLinksOverlay" } }, usesOnChanges: true, ngImport: i0, template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1950
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttLinksComponent, decorators: [{
1894
1951
  type: Component,
1895
- args: [{ selector: 'gantt-calendar-overlay', template: "<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType !== viewTypes.day\"> </span>\n <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-overlay-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight\">\n <g>\n <text class=\"primary-text\" *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text class=\"secondary-text\" [class.secondary-text-weekend]=\"point.additions?.isWeekend\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n </ng-container>\n\n <g>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n\n <g>\n <line [attr.x1]=\"0\" [attr.x2]=\"view.width\" [attr.y1]=\"headerHeight\" [attr.y2]=\"headerHeight\" class=\"header-line\"></line>\n </g>\n </g>\n <g>\n <g *ngIf=\"view.showTimeline\">\n <line\n *ngFor=\"let point of view.secondaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.cellWidth\"\n [attr.x2]=\"(i + 1) * view.cellWidth\"\n [attr.y1]=\"headerHeight\"\n [attr.y2]=\"mainHeight\"\n class=\"secondary-line\"\n ></line>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n </g>\n</svg>\n" }]
1952
+ args: [{ selector: 'gantt-links-overlay', template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n" }]
1896
1953
  }], ctorParameters: function () {
1897
1954
  return [{ type: GanttUpper, decorators: [{
1898
1955
  type: Inject,
1899
1956
  args: [GANTT_UPPER_TOKEN]
1900
- }] }, { type: i0.NgZone }, { type: i0.ElementRef }];
1901
- }, propDecorators: { className: [{
1957
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: GanttDragContainer }];
1958
+ }, propDecorators: { groups: [{
1959
+ type: Input
1960
+ }], items: [{
1961
+ type: Input
1962
+ }], lineClick: [{
1963
+ type: Output
1964
+ }], ganttLinksOverlay: [{
1902
1965
  type: HostBinding,
1903
- args: ['class.gantt-calendar-overlay']
1966
+ args: ['class.gantt-links-overlay']
1904
1967
  }] } });
1905
1968
 
1906
- class NgxGanttRootComponent {
1907
- constructor(elementRef, ngZone, dom, dragContainer, ganttUpper, printService) {
1908
- this.elementRef = elementRef;
1969
+ /** Cached result of whether the user's browser supports passive event listeners. */
1970
+ let supportsPassiveEvents;
1971
+ /**
1972
+ * Checks whether the user's browser supports passive event listeners.
1973
+ * See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
1974
+ */
1975
+ function supportsPassiveEventListeners() {
1976
+ if (supportsPassiveEvents == null && typeof window !== 'undefined') {
1977
+ try {
1978
+ window.addEventListener('test', null, Object.defineProperty({}, 'passive', {
1979
+ get: () => (supportsPassiveEvents = true)
1980
+ }));
1981
+ }
1982
+ finally {
1983
+ supportsPassiveEvents = supportsPassiveEvents || false;
1984
+ }
1985
+ }
1986
+ return supportsPassiveEvents;
1987
+ }
1988
+ /**
1989
+ * Normalizes an `AddEventListener` object to something that can be passed
1990
+ * to `addEventListener` on any browser, no matter whether it supports the
1991
+ * `options` parameter.
1992
+ */
1993
+ function normalizePassiveListenerOptions(options) {
1994
+ return supportsPassiveEventListeners() ? options : !!options.capture;
1995
+ }
1996
+ /** Options used to bind passive event listeners. */
1997
+ const passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });
1998
+
1999
+ const scrollThreshold = 50;
2000
+ var ScrollDirection;
2001
+ (function (ScrollDirection) {
2002
+ ScrollDirection[ScrollDirection["NONE"] = 0] = "NONE";
2003
+ ScrollDirection[ScrollDirection["LEFT"] = 1] = "LEFT";
2004
+ ScrollDirection[ScrollDirection["RIGHT"] = 2] = "RIGHT";
2005
+ })(ScrollDirection || (ScrollDirection = {}));
2006
+ class GanttDomService {
2007
+ constructor(ngZone, platformId) {
1909
2008
  this.ngZone = ngZone;
1910
- this.dom = dom;
1911
- this.dragContainer = dragContainer;
1912
- this.ganttUpper = ganttUpper;
1913
- this.printService = printService;
2009
+ this.platformId = platformId;
1914
2010
  this.unsubscribe$ = new Subject();
1915
- this.ganttUpper.dragContainer = dragContainer;
1916
- }
1917
- get view() {
1918
- return this.ganttUpper.view;
1919
2011
  }
1920
- ngOnInit() {
1921
- // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
1922
- // the `onStable` will never emit any value.
1923
- const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
1924
- // Normally this isn't in the zone, but it can cause performance regressions for apps
1925
- // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
1926
- this.ngZone.runOutsideAngular(() => {
1927
- onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
1928
- this.dom.initialize(this.elementRef);
1929
- if (this.printService) {
1930
- this.printService.register(this.elementRef);
1931
- }
1932
- this.setupScrollClass();
1933
- this.setupResize();
1934
- this.setupViewScroll();
1935
- // 优化初始化时Scroll滚动体验问题,通过透明度解决,默认透明度为0,滚动结束后恢复
1936
- this.elementRef.nativeElement.style.opacity = '1';
1937
- this.ganttUpper.viewChange.pipe(startWith(null), takeUntil(this.unsubscribe$)).subscribe(() => {
1938
- this.scrollToToday();
1939
- });
1940
- });
1941
- });
2012
+ monitorScrollChange() {
2013
+ this.ngZone.runOutsideAngular(() => merge(fromEvent(this.mainContainer, 'scroll', passiveListenerOptions), fromEvent(this.sideContainer, 'scroll', passiveListenerOptions))
2014
+ .pipe(takeUntil(this.unsubscribe$))
2015
+ .subscribe((event) => {
2016
+ this.syncScroll(event);
2017
+ }));
2018
+ // fromEvent(this.mainContainer, 'scroll')
2019
+ // .pipe(startWith(), takeUntil(this.unsubscribe$))
2020
+ // .subscribe((event) => {
2021
+ // // if (this.mainContainer.scrollLeft > 0) {
2022
+ // // this.side.classList.add('gantt-side-has-shadow');
2023
+ // // } else {
2024
+ // // this.side.classList.remove('gantt-side-has-shadow');
2025
+ // // }
2026
+ // });
1942
2027
  }
1943
- ngOnDestroy() {
1944
- this.unsubscribe$.next();
2028
+ syncScroll(event) {
2029
+ const target = event.currentTarget;
2030
+ this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
2031
+ this.sideContainer.scrollTop = target.scrollTop;
2032
+ this.mainContainer.scrollTop = target.scrollTop;
1945
2033
  }
1946
- setupViewScroll() {
1947
- if (this.ganttUpper.disabledLoadOnScroll) {
1948
- return;
1949
- }
1950
- this.dom
1951
- .getViewerScroll(passiveListenerOptions)
2034
+ disableBrowserWheelEvent() {
2035
+ const container = this.mainContainer;
2036
+ this.ngZone.runOutsideAngular(() => fromEvent(container, 'wheel')
1952
2037
  .pipe(takeUntil(this.unsubscribe$))
1953
2038
  .subscribe((event) => {
1954
- if (event.direction === ScrollDirection.LEFT) {
1955
- const dates = this.view.addStartDate();
1956
- if (dates) {
1957
- event.target.scrollLeft += this.view.getDateRangeWidth(dates.start, dates.end);
1958
- if (this.ganttUpper.loadOnScroll.observers) {
1959
- this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
1960
- }
2039
+ const delta = event.deltaX;
2040
+ if (!delta) {
2041
+ return;
2042
+ }
2043
+ if ((container.scrollLeft + container.offsetWidth === container.scrollWidth && delta > 0) ||
2044
+ (container.scrollLeft === 0 && delta < 0)) {
2045
+ event.preventDefault();
2046
+ }
2047
+ }));
2048
+ }
2049
+ initialize(root) {
2050
+ this.root = root.nativeElement;
2051
+ this.side = this.root.getElementsByClassName('gantt-side')[0];
2052
+ this.container = this.root.getElementsByClassName('gantt-container')[0];
2053
+ this.sideContainer = this.root.getElementsByClassName('gantt-side-container')[0];
2054
+ this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
2055
+ this.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-overlay')[0];
2056
+ this.monitorScrollChange();
2057
+ this.disableBrowserWheelEvent();
2058
+ }
2059
+ /**
2060
+ * @returns An observable that will emit outside the Angular zone. Note, consumers should re-enter the Angular zone
2061
+ * to run the change detection if needed.
2062
+ */
2063
+ getViewerScroll(options) {
2064
+ return new Observable((subscriber) => this.ngZone.runOutsideAngular(() => fromEvent(this.mainContainer, 'scroll', options)
2065
+ .pipe(map(() => this.mainContainer.scrollLeft), pairwise(), map(([previous, current]) => {
2066
+ const event = {
2067
+ target: this.mainContainer,
2068
+ direction: ScrollDirection.NONE
2069
+ };
2070
+ if (current - previous < 0) {
2071
+ if (this.mainContainer.scrollLeft < scrollThreshold && this.mainContainer.scrollLeft > 0) {
2072
+ event.direction = ScrollDirection.LEFT;
1961
2073
  }
1962
2074
  }
1963
- if (event.direction === ScrollDirection.RIGHT) {
1964
- const dates = this.view.addEndDate();
1965
- if (dates && this.ganttUpper.loadOnScroll.observers) {
1966
- this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
2075
+ if (current - previous > 0) {
2076
+ if (this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft <
2077
+ scrollThreshold) {
2078
+ event.direction = ScrollDirection.RIGHT;
1967
2079
  }
1968
2080
  }
1969
- });
2081
+ return event;
2082
+ }))
2083
+ .subscribe(subscriber)));
1970
2084
  }
1971
- setupResize() {
1972
- this.dom
1973
- .getResize()
1974
- .pipe(takeUntil(this.unsubscribe$))
1975
- .subscribe(() => {
1976
- this.setupScrollClass();
1977
- });
2085
+ getResize() {
2086
+ return isPlatformServer(this.platformId) ? EMPTY : fromEvent(window, 'resize').pipe(auditTime(150));
1978
2087
  }
1979
- setupScrollClass() {
1980
- const mainContainer = this.dom.mainContainer;
1981
- const height = mainContainer.offsetHeight;
1982
- const scrollHeight = mainContainer.scrollHeight;
1983
- if (scrollHeight > height) {
1984
- this.elementRef.nativeElement.className = 'gantt gantt-scroll';
1985
- }
1986
- else {
1987
- this.elementRef.nativeElement.className = 'gantt';
2088
+ scrollMainContainer(left) {
2089
+ if (isNumber(left)) {
2090
+ const scrollLeft = left - this.mainContainer.clientWidth / 2;
2091
+ this.mainContainer.scrollLeft = scrollLeft > scrollThreshold ? scrollLeft : 0;
2092
+ this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
1988
2093
  }
1989
2094
  }
1990
- scrollToToday() {
1991
- const x = this.view.getTodayXPoint();
1992
- this.dom.scrollMainContainer(x);
2095
+ ngOnDestroy() {
2096
+ this.unsubscribe$.next();
2097
+ this.unsubscribe$.complete();
1993
2098
  }
1994
2099
  }
1995
- NgxGanttRootComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", 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 });
1996
- NgxGanttRootComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", 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\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n", components: [{ type: GanttCalendarComponent, selector: "gantt-calendar-overlay" }, { type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }], directives: [{ type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
1997
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttRootComponent, decorators: [{
1998
- type: Component,
1999
- args: [{ selector: 'ngx-gantt-root', providers: [GanttDomService, GanttDragContainer], host: {
2000
- class: 'gantt'
2001
- }, template: "<div class=\"gantt-side\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n" }]
2100
+ GanttDomService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDomService, deps: [{ token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
2101
+ GanttDomServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDomService });
2102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDomService, decorators: [{
2103
+ type: Injectable
2002
2104
  }], ctorParameters: function () {
2003
- return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: GanttDomService }, { type: GanttDragContainer }, { type: GanttUpper, decorators: [{
2105
+ return [{ type: i0.NgZone }, { type: undefined, decorators: [{
2004
2106
  type: Inject,
2005
- args: [GANTT_UPPER_TOKEN]
2006
- }] }, { type: GanttPrintService, decorators: [{
2007
- type: Optional
2107
+ args: [PLATFORM_ID]
2008
2108
  }] }];
2009
- }, propDecorators: { sideWidth: [{
2010
- type: Input
2011
- }], sideTemplate: [{
2012
- type: ContentChild,
2013
- args: ['sideTemplate', { static: true }]
2014
- }], mainTemplate: [{
2015
- type: ContentChild,
2016
- args: ['mainTemplate', { static: true }]
2017
- }], backdrop: [{
2018
- type: ViewChild,
2019
- args: [GanttDragBackdropComponent, { static: true, read: ElementRef }]
2020
- }] } });
2109
+ } });
2021
2110
 
2022
- class GanttLinkLine {
2023
- constructor() { }
2024
- generatePath(source, target, type) {
2025
- if (source.before && source.after && target.before && target.after) {
2026
- let path = '';
2027
- switch (type) {
2028
- case GanttLinkType.ss:
2029
- path = this.generateSSPath(source, target);
2030
- break;
2031
- case GanttLinkType.ff:
2032
- path = this.generateFFPath(source, target);
2033
- break;
2034
- case GanttLinkType.sf:
2035
- path = this.generateFSAndSFPath(source, target, type);
2036
- break;
2037
- default:
2038
- path = this.generateFSAndSFPath(source, target);
2039
- }
2040
- return path;
2041
- }
2042
- }
2111
+ class GanttDragBackdropComponent {
2043
2112
  }
2113
+ GanttDragBackdropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDragBackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2114
+ GanttDragBackdropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop", host: { classAttribute: "gantt-drag-backdrop" }, ngImport: i0, 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" });
2115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttDragBackdropComponent, decorators: [{
2116
+ type: Component,
2117
+ args: [{ selector: 'gantt-drag-backdrop', host: {
2118
+ class: 'gantt-drag-backdrop'
2119
+ }, 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" }]
2120
+ }] });
2044
2121
 
2045
- let GanttLinkLineCurve = class GanttLinkLineCurve extends GanttLinkLine {
2046
- constructor(ganttUpper) {
2047
- super();
2048
- this.ganttUpper = ganttUpper;
2049
- }
2050
- generateSSPath(source, target) {
2051
- const x1 = source.before.x;
2052
- const y1 = source.before.y;
2053
- const x4 = target.before.x;
2054
- const y4 = target.before.y;
2055
- const isMirror = y4 > y1 ? 0 : 1;
2056
- const radius = Math.abs(y4 - y1) / 2;
2057
- if (x4 > x1) {
2058
- return `M ${x1} ${y1}
2059
- A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
2060
- L ${x4} ${y4}`;
2061
- }
2062
- else {
2063
- return `M ${x1} ${y1}
2064
- L ${x4} ${y1}
2065
- A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
2066
- }
2067
- }
2068
- generateFFPath(source, target) {
2069
- const x1 = source.after.x;
2070
- const y1 = source.after.y;
2071
- const x4 = target.after.x;
2072
- const y4 = target.after.y;
2073
- const isMirror = y4 > y1 ? 1 : 0;
2074
- const radius = Math.abs(y4 - y1) / 2;
2075
- if (x4 > x1) {
2076
- return `M ${x1} ${y1}
2077
- L ${x4} ${y1}
2078
- A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
2079
- }
2080
- else {
2081
- return `M ${x1} ${y1}
2082
- A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
2083
- L ${x4} ${y4}`;
2122
+ class GanttPrintService {
2123
+ constructor() { }
2124
+ setInlineStyles(targetElem) {
2125
+ const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
2126
+ for (const svgElement of svgElements) {
2127
+ this.recursElementChildren(svgElement);
2084
2128
  }
2085
2129
  }
2086
- generateFSAndSFPath(source, target, type) {
2087
- var _a;
2088
- let x1 = source.after.x;
2089
- let y1 = source.after.y;
2090
- let x4 = target.before.x;
2091
- let y4 = target.before.y;
2092
- const bezierWeight = 0.5;
2093
- if (type === GanttLinkType.sf) {
2094
- x1 = target.after.x;
2095
- y1 = target.after.y;
2096
- x4 = source.before.x;
2097
- y4 = source.before.y;
2130
+ recursElementChildren(node) {
2131
+ const transformProperties = [
2132
+ 'fill',
2133
+ 'color',
2134
+ 'font-size',
2135
+ 'stroke',
2136
+ 'font',
2137
+ 'text-anchor',
2138
+ 'stroke-dasharray',
2139
+ 'shape-rendering',
2140
+ 'stroke-width'
2141
+ ];
2142
+ if (!node.style) {
2143
+ return;
2098
2144
  }
2099
- let dx = Math.abs(x4 - x1) * bezierWeight;
2100
- let x2 = x1 + dx;
2101
- let x3 = x4 - dx;
2102
- const centerX = (x1 + x4) / 2;
2103
- const centerY = (y1 + y4) / 2;
2104
- let controlX = this.ganttUpper.styles.lineHeight / 2;
2105
- const controlY = this.ganttUpper.styles.lineHeight / 2;
2106
- if (x1 >= x4) {
2107
- if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
2108
- return `M ${x1} ${y1}
2109
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${x1} ${y4 > y1 ? y1 + controlY : y1 - controlY}
2110
- L ${x4} ${y4 > y1 ? y4 - controlY : y4 + controlY}
2111
- C ${x4 - controlY} ${y4 > y1 ? y4 - controlY : y4 + controlY} ${x4 - controlX} ${y4} ${x4} ${y4}
2112
- `;
2113
- }
2114
- else {
2115
- controlX = this.ganttUpper.styles.lineHeight;
2116
- return `M ${x1} ${y1}
2117
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${centerX} ${centerY}
2118
- C ${x4 - controlX} ${y4 > y1 ? y4 - controlX : y4 + controlX} ${x4 - controlX} ${y4} ${x4} ${y4}
2119
- `;
2120
- }
2145
+ const styles = getComputedStyle(node);
2146
+ for (const transformProperty of transformProperties) {
2147
+ node.style[transformProperty] = styles[transformProperty];
2121
2148
  }
2122
- else if (((_a = this.ganttUpper.linkOptions) === null || _a === void 0 ? void 0 : _a.showArrow) && x4 - x1 < 200) {
2123
- dx = Math.max(Math.abs(y4 - y1) * bezierWeight, 60);
2124
- x2 = x1 + dx;
2125
- x3 = x4 - dx;
2126
- return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
2149
+ for (const child of Array.from(node.childNodes)) {
2150
+ this.recursElementChildren(child);
2127
2151
  }
2128
- return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
2129
2152
  }
2130
- };
2131
- GanttLinkLineCurve = __decorate([
2132
- __param(0, Inject(GANTT_UPPER_TOKEN))
2133
- ], GanttLinkLineCurve);
2134
-
2135
- class GanttLinkLineStraight extends GanttLinkLine {
2136
- constructor() {
2137
- super();
2138
- this.pathControl = 20;
2139
- }
2140
- generateSSPath(source, target) {
2141
- const x1 = source.before.x;
2142
- const y1 = source.before.y;
2143
- const x4 = target.before.x;
2144
- const y4 = target.before.y;
2145
- const control = this.pathControl;
2146
- return `M ${x1} ${y1}
2147
- L ${x4 > x1 ? x1 - control : x4 - control} ${y1}
2148
- L ${x4 > x1 ? x1 - control : x4 - control} ${y4}
2149
- L ${x4} ${y4}`;
2150
- }
2151
- generateFFPath(source, target) {
2152
- const x1 = source.after.x;
2153
- const y1 = source.after.y;
2154
- const x4 = target.after.x;
2155
- const y4 = target.after.y;
2156
- const control = this.pathControl;
2157
- return `M ${x1} ${y1}
2158
- L ${x4 > x1 ? x4 + control : x1 + control} ${y1}
2159
- L ${x4 > x1 ? x4 + control : x1 + control} ${y4}
2160
- L ${x4} ${y4}`;
2161
- }
2162
- generateFSAndSFPath(source, target, type) {
2163
- let x1 = source.after.x;
2164
- let y1 = source.after.y;
2165
- let x4 = target.before.x;
2166
- let y4 = target.before.y;
2167
- const control = this.pathControl;
2168
- if (type === GanttLinkType.sf) {
2169
- x1 = target.after.x;
2170
- y1 = target.after.y;
2171
- x4 = source.before.x;
2172
- y4 = source.before.y;
2173
- }
2174
- if (x4 - x1 >= 40) {
2175
- return `M ${x1} ${y1}
2176
- L ${x1 + control} ${y1}
2177
- L ${x1 + control} ${y4}
2178
- L ${x4} ${y4}`;
2179
- }
2180
- else {
2181
- return `M ${x1} ${y1}
2182
- L ${x1 + control} ${y1}
2183
- L ${x1 + control} ${y4 > y1 ? y1 + control : y1 - control}
2184
- L ${x4 - control} ${y4 > y1 ? y1 + control : y1 - control}
2185
- L ${x4 - control} ${y4}
2186
- L ${x4} ${y4}`;
2187
- }
2153
+ register(root) {
2154
+ this.root = root.nativeElement;
2155
+ this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
2188
2156
  }
2189
- }
2190
-
2191
- function createLineGenerator(type, ganttUpper) {
2192
- switch (type) {
2193
- case GanttLinkLineType.curve:
2194
- return new GanttLinkLineCurve(ganttUpper);
2195
- case GanttLinkLineType.straight:
2196
- return new GanttLinkLineStraight();
2197
- default:
2198
- throw new Error('gantt link path type invalid');
2157
+ print(name = 'download', ignoreElementClass) {
2158
+ return __awaiter(this, void 0, void 0, function* () {
2159
+ const root = this.root;
2160
+ const mainContainer = this.mainContainer;
2161
+ // set print width
2162
+ const printWidth = root.offsetWidth;
2163
+ // set print height
2164
+ const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
2165
+ const html2canvas = (yield import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
2166
+ html2canvas(root, {
2167
+ logging: false,
2168
+ allowTaint: true,
2169
+ useCORS: true,
2170
+ width: printWidth,
2171
+ height: printHeight,
2172
+ ignoreElements: (element) => {
2173
+ if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
2174
+ return true;
2175
+ }
2176
+ if (element.classList.contains('gantt-calendar-today-overlay')) {
2177
+ return true;
2178
+ }
2179
+ },
2180
+ onclone: (cloneDocument) => {
2181
+ const ganttClass = root.className;
2182
+ const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
2183
+ const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
2184
+ const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-overlay-main');
2185
+ const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
2186
+ // change targetDom width
2187
+ cloneGanttDom.style.width = `${printWidth}px`;
2188
+ cloneGanttDom.style.height = `${printHeight}px`;
2189
+ cloneGanttDom.style.overflow = `unset`;
2190
+ cloneGanttContainerDom.style.backgroundColor = '#fff';
2191
+ cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
2192
+ cloneCalendarOverlay.setAttribute('style', `background: transparent`);
2193
+ if (cloneLinksOverlay) {
2194
+ cloneLinksOverlay.setAttribute('height', `${printHeight}`);
2195
+ cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
2196
+ }
2197
+ // setInlineStyles for svg
2198
+ this.setInlineStyles(cloneGanttDom);
2199
+ }
2200
+ }).then((canvas) => {
2201
+ const link = document.createElement('a');
2202
+ const dataUrl = canvas.toDataURL('image/png');
2203
+ link.download = `${name}.png`;
2204
+ link.href = dataUrl;
2205
+ link.click();
2206
+ });
2207
+ });
2199
2208
  }
2200
2209
  }
2210
+ GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2211
+ GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttPrintService });
2212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttPrintService, decorators: [{
2213
+ type: Injectable
2214
+ }], ctorParameters: function () { return []; } });
2201
2215
 
2202
- class GanttLinksComponent {
2203
- constructor(ganttUpper, cdr, elementRef, ganttDragContainer) {
2216
+ const mainHeight = 5000;
2217
+ class GanttCalendarComponent {
2218
+ constructor(ganttUpper, ngZone, elementRef) {
2204
2219
  this.ganttUpper = ganttUpper;
2205
- this.cdr = cdr;
2220
+ this.ngZone = ngZone;
2206
2221
  this.elementRef = elementRef;
2207
- this.ganttDragContainer = ganttDragContainer;
2208
- this.groups = [];
2209
- this.items = [];
2210
- this.lineClick = new EventEmitter();
2211
- this.links = [];
2212
- this.ganttLinkTypes = GanttLinkType;
2213
- this.showArrow = false;
2214
- this.linkItems = [];
2215
- this.firstChange = true;
2222
+ this.headerHeight = headerHeight;
2223
+ this.mainHeight = mainHeight;
2224
+ this.todayHeight = todayHeight;
2225
+ this.todayWidth = todayWidth;
2226
+ this.todayBorderRadius = todayBorderRadius;
2227
+ this.viewTypes = GanttViewType;
2228
+ this.className = true;
2216
2229
  this.unsubscribe$ = new Subject();
2217
- this.ganttLinksOverlay = true;
2218
2230
  }
2219
- ngOnInit() {
2220
- this.linkLine = createLineGenerator(this.ganttUpper.linkOptions.lineType, this.ganttUpper);
2221
- this.showArrow = this.ganttUpper.linkOptions.showArrow;
2222
- this.buildLinks();
2223
- this.firstChange = false;
2224
- this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
2225
- this.elementRef.nativeElement.style.visibility = 'hidden';
2226
- });
2227
- merge(this.ganttUpper.viewChange, this.ganttUpper.expandChange, this.ganttUpper.view.start$, this.ganttUpper.dragEnded, this.ganttUpper.linkDragEnded)
2228
- .pipe(skip(1), debounceTime(0), takeUntil(this.unsubscribe$))
2229
- .subscribe(() => {
2230
- this.elementRef.nativeElement.style.visibility = 'visible';
2231
- this.buildLinks();
2232
- this.cdr.detectChanges();
2233
- });
2234
- }
2235
- ngOnChanges() {
2236
- if (!this.firstChange) {
2237
- this.buildLinks();
2238
- }
2231
+ get view() {
2232
+ return this.ganttUpper.view;
2239
2233
  }
2240
- computeItemPosition() {
2241
- const lineHeight = this.ganttUpper.styles.lineHeight;
2242
- const barHeight = this.ganttUpper.styles.barHeight;
2243
- this.linkItems = [];
2244
- if (this.groups.length > 0) {
2245
- let itemNum = 0;
2246
- let groupNum = 0;
2247
- this.groups.forEach((group) => {
2248
- groupNum++;
2249
- if (group.expanded) {
2250
- const items = recursiveItems(group.items);
2251
- items.forEach((item, itemIndex) => {
2252
- const y = (groupNum + itemNum + itemIndex) * lineHeight + item.refs.y + barHeight / 2;
2253
- this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
2254
- x: item.refs.x,
2255
- y
2256
- }, after: {
2257
- x: item.refs.x + item.refs.width,
2258
- y
2259
- } }));
2260
- });
2261
- itemNum += items.length;
2262
- }
2263
- });
2234
+ setTodayPoint() {
2235
+ const x = this.view.getTodayXPoint();
2236
+ const today = new GanttDate().getDate();
2237
+ const todayEle = this.elementRef.nativeElement.getElementsByClassName('gantt-calendar-today-overlay')[0];
2238
+ const rect = this.elementRef.nativeElement.getElementsByClassName('today-rect')[0];
2239
+ const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[0];
2240
+ if (isNumber(x)) {
2241
+ if (rect) {
2242
+ rect.style.left = `${x - todayWidth / 2}px`;
2243
+ rect.style.top = `${headerHeight - todayHeight}px`;
2244
+ rect.innerHTML = today.toString();
2245
+ }
2246
+ if (line) {
2247
+ line.style.left = `${x}px`;
2248
+ line.style.top = `${headerHeight}px`;
2249
+ line.style.bottom = `${-mainHeight}px`;
2250
+ }
2264
2251
  }
2265
2252
  else {
2266
- const items = recursiveItems(this.items);
2267
- items.forEach((item, itemIndex) => {
2268
- const y = itemIndex * lineHeight + item.refs.y + barHeight / 2;
2269
- this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
2270
- x: item.refs.x,
2271
- y
2272
- }, after: {
2273
- x: item.refs.x + item.refs.width,
2274
- y
2275
- } }));
2276
- });
2253
+ todayEle.style.display = 'none';
2277
2254
  }
2278
2255
  }
2279
- buildLinks() {
2280
- this.computeItemPosition();
2281
- this.links = [];
2282
- this.linkItems.forEach((source) => {
2283
- if (source.origin.start || source.origin.end) {
2284
- source.links.forEach((link) => {
2285
- const target = this.linkItems.find((item) => item.id === link.link);
2286
- if (target && (target.origin.start || target.origin.end)) {
2287
- let defaultColor = LinkColors.default;
2288
- let activeColor = LinkColors.active;
2289
- if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {
2290
- defaultColor = LinkColors.blocked;
2291
- activeColor = LinkColors.blocked;
2292
- }
2293
- if (link.color) {
2294
- if (typeof link.color === 'string') {
2295
- defaultColor = link.color;
2296
- activeColor = link.color;
2297
- }
2298
- else {
2299
- defaultColor = link.color.default;
2300
- activeColor = link.color.active;
2301
- }
2302
- }
2303
- this.links.push({
2304
- path: this.linkLine.generatePath(source, target, link.type),
2305
- source: source.origin,
2306
- target: target.origin,
2307
- type: link.type,
2308
- color: defaultColor,
2309
- defaultColor,
2310
- activeColor
2311
- });
2312
- }
2313
- });
2314
- }
2315
- });
2316
- }
2317
- trackBy(index) {
2318
- return index;
2319
- }
2320
- onLineClick(event, link) {
2321
- this.lineClick.emit({
2322
- event,
2323
- source: link.source,
2324
- target: link.target
2325
- });
2326
- }
2327
- mouseEnterPath(link, index) {
2328
- link.color = link.activeColor || link.defaultColor;
2329
- if (index < this.links.length - 1) {
2330
- this.links.splice(index, 1);
2331
- this.links.push(link);
2332
- }
2256
+ ngOnInit() {
2257
+ // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
2258
+ // the `onStable` will never emit any value.
2259
+ const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
2260
+ // Normally this isn't in the zone, but it can cause performance regressions for apps
2261
+ // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
2262
+ this.ngZone.runOutsideAngular(() => {
2263
+ onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
2264
+ merge(this.ganttUpper.viewChange, this.ganttUpper.view.start$)
2265
+ .pipe(takeUntil(this.unsubscribe$))
2266
+ .subscribe(() => {
2267
+ this.setTodayPoint();
2268
+ });
2269
+ });
2270
+ });
2333
2271
  }
2334
- mouseLeavePath(link) {
2335
- link.color = link.defaultColor;
2272
+ trackBy(index, point) {
2273
+ return point.text || index;
2336
2274
  }
2337
2275
  ngOnDestroy() {
2338
2276
  this.unsubscribe$.next();
2339
2277
  this.unsubscribe$.complete();
2340
2278
  }
2341
2279
  }
2342
- GanttLinksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttLinksComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: GanttDragContainer }], target: i0.ɵɵFactoryTarget.Component });
2343
- GanttLinksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: { groups: "groups", items: "items" }, outputs: { lineClick: "lineClick" }, host: { properties: { "class.gantt-links-overlay": "this.ganttLinksOverlay" } }, usesOnChanges: true, ngImport: i0, template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttLinksComponent, decorators: [{
2280
+ GanttCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttCalendarComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2281
+ GanttCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GanttCalendarComponent, selector: "gantt-calendar-overlay", host: { properties: { "class.gantt-calendar-overlay": "this.className" } }, ngImport: i0, template: "<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType !== viewTypes.day\"> </span>\n <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-overlay-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight\">\n <g>\n <text class=\"primary-text\" *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text class=\"secondary-text\" [class.secondary-text-weekend]=\"point.additions?.isWeekend\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n </ng-container>\n\n <g>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n\n <g>\n <line [attr.x1]=\"0\" [attr.x2]=\"view.width\" [attr.y1]=\"headerHeight\" [attr.y2]=\"headerHeight\" class=\"header-line\"></line>\n </g>\n </g>\n <g>\n <g *ngIf=\"view.showTimeline\">\n <line\n *ngFor=\"let point of view.secondaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.cellWidth\"\n [attr.x2]=\"(i + 1) * view.cellWidth\"\n [attr.y1]=\"headerHeight\"\n [attr.y2]=\"mainHeight\"\n class=\"secondary-line\"\n ></line>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n </g>\n</svg>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttCalendarComponent, decorators: [{
2345
2283
  type: Component,
2346
- args: [{ selector: 'gantt-links-overlay', template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n" }]
2284
+ args: [{ selector: 'gantt-calendar-overlay', template: "<div class=\"gantt-calendar-today-overlay\" [style.width.px]=\"view.width\">\n <span class=\"today-rect\" [hidden]=\"ganttUpper.viewType !== viewTypes.day\"> </span>\n <span class=\"today-line\" *ngIf=\"ganttUpper.showTodayLine\"> </span>\n</div>\n\n<svg class=\"gantt-calendar-overlay-main\" [attr.width]=\"view.width\" [attr.height]=\"headerHeight\">\n <g>\n <text class=\"primary-text\" *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text class=\"secondary-text\" [class.secondary-text-weekend]=\"point.additions?.isWeekend\" [attr.x]=\"point.x\" [attr.y]=\"point.y\">\n {{ point.text }}\n </text>\n </ng-container>\n\n <g>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n\n <g>\n <line [attr.x1]=\"0\" [attr.x2]=\"view.width\" [attr.y1]=\"headerHeight\" [attr.y2]=\"headerHeight\" class=\"header-line\"></line>\n </g>\n </g>\n <g>\n <g *ngIf=\"view.showTimeline\">\n <line\n *ngFor=\"let point of view.secondaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.cellWidth\"\n [attr.x2]=\"(i + 1) * view.cellWidth\"\n [attr.y1]=\"headerHeight\"\n [attr.y2]=\"mainHeight\"\n class=\"secondary-line\"\n ></line>\n <line\n *ngFor=\"let point of view.primaryDatePoints; let i = index; trackBy: trackBy\"\n [attr.x1]=\"(i + 1) * view.primaryWidth\"\n [attr.x2]=\"(i + 1) * view.primaryWidth\"\n [attr.y1]=\"0\"\n [attr.y2]=\"mainHeight\"\n class=\"primary-line\"\n ></line>\n </g>\n </g>\n</svg>\n" }]
2347
2285
  }], ctorParameters: function () {
2348
2286
  return [{ type: GanttUpper, decorators: [{
2349
2287
  type: Inject,
2350
2288
  args: [GANTT_UPPER_TOKEN]
2351
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: GanttDragContainer }];
2352
- }, propDecorators: { groups: [{
2353
- type: Input
2354
- }], items: [{
2355
- type: Input
2356
- }], lineClick: [{
2357
- type: Output
2358
- }], ganttLinksOverlay: [{
2289
+ }] }, { type: i0.NgZone }, { type: i0.ElementRef }];
2290
+ }, propDecorators: { className: [{
2359
2291
  type: HostBinding,
2360
- args: ['class.gantt-links-overlay']
2292
+ args: ['class.gantt-calendar-overlay']
2361
2293
  }] } });
2362
2294
 
2363
- class GanttItemUpper {
2364
- constructor(elementRef, ganttUpper) {
2295
+ class NgxGanttRootComponent {
2296
+ constructor(elementRef, ngZone, dom, dragContainer, ganttUpper, printService) {
2365
2297
  this.elementRef = elementRef;
2298
+ this.ngZone = ngZone;
2299
+ this.dom = dom;
2300
+ this.dragContainer = dragContainer;
2366
2301
  this.ganttUpper = ganttUpper;
2367
- this.firstChange = true;
2302
+ this.printService = printService;
2368
2303
  this.unsubscribe$ = new Subject();
2304
+ this.ganttUpper.dragContainer = dragContainer;
2305
+ }
2306
+ get view() {
2307
+ return this.ganttUpper.view;
2369
2308
  }
2370
2309
  ngOnInit() {
2371
- this.firstChange = false;
2372
- this.item.refs$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
2373
- this.setPositions();
2310
+ // Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
2311
+ // the `onStable` will never emit any value.
2312
+ const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
2313
+ // Normally this isn't in the zone, but it can cause performance regressions for apps
2314
+ // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
2315
+ this.ngZone.runOutsideAngular(() => {
2316
+ onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
2317
+ this.dom.initialize(this.elementRef);
2318
+ if (this.printService) {
2319
+ this.printService.register(this.elementRef);
2320
+ }
2321
+ this.setupScrollClass();
2322
+ this.setupResize();
2323
+ this.setupViewScroll();
2324
+ // 优化初始化时Scroll滚动体验问题,通过透明度解决,默认透明度为0,滚动结束后恢复
2325
+ this.elementRef.nativeElement.style.opacity = '1';
2326
+ this.ganttUpper.viewChange.pipe(startWith(null), takeUntil(this.unsubscribe$)).subscribe(() => {
2327
+ this.scrollToToday();
2328
+ });
2329
+ });
2374
2330
  });
2375
2331
  }
2376
- ngOnChanges() {
2377
- if (!this.firstChange) {
2378
- this.setPositions();
2379
- }
2332
+ ngOnDestroy() {
2333
+ this.unsubscribe$.next();
2380
2334
  }
2381
- setPositions() {
2382
- const itemElement = this.elementRef.nativeElement;
2383
- itemElement.style.left = this.item.refs.x + 'px';
2384
- itemElement.style.top = this.item.refs.y + 'px';
2385
- itemElement.style.width = this.item.refs.width + 'px';
2386
- if (this.item.type === GanttItemType.bar) {
2387
- itemElement.style.height = this.ganttUpper.styles.barHeight + 'px';
2335
+ setupViewScroll() {
2336
+ if (this.ganttUpper.disabledLoadOnScroll) {
2337
+ return;
2388
2338
  }
2389
- else if (this.item.type === GanttItemType.range) {
2390
- itemElement.style.height = rangeHeight + 'px';
2339
+ this.dom
2340
+ .getViewerScroll(passiveListenerOptions)
2341
+ .pipe(takeUntil(this.unsubscribe$))
2342
+ .subscribe((event) => {
2343
+ if (event.direction === ScrollDirection.LEFT) {
2344
+ const dates = this.view.addStartDate();
2345
+ if (dates) {
2346
+ event.target.scrollLeft += this.view.getDateRangeWidth(dates.start, dates.end);
2347
+ if (this.ganttUpper.loadOnScroll.observers) {
2348
+ this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
2349
+ }
2350
+ }
2351
+ }
2352
+ if (event.direction === ScrollDirection.RIGHT) {
2353
+ const dates = this.view.addEndDate();
2354
+ if (dates && this.ganttUpper.loadOnScroll.observers) {
2355
+ this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
2356
+ }
2357
+ }
2358
+ });
2359
+ }
2360
+ setupResize() {
2361
+ this.dom
2362
+ .getResize()
2363
+ .pipe(takeUntil(this.unsubscribe$))
2364
+ .subscribe(() => {
2365
+ this.setupScrollClass();
2366
+ });
2367
+ }
2368
+ setupScrollClass() {
2369
+ const mainContainer = this.dom.mainContainer;
2370
+ const height = mainContainer.offsetHeight;
2371
+ const scrollHeight = mainContainer.scrollHeight;
2372
+ if (scrollHeight > height) {
2373
+ this.elementRef.nativeElement.className = 'gantt gantt-scroll';
2391
2374
  }
2392
2375
  else {
2376
+ this.elementRef.nativeElement.className = 'gantt';
2393
2377
  }
2394
2378
  }
2395
- ngOnDestroy() {
2396
- this.unsubscribe$.next();
2397
- this.unsubscribe$.complete();
2379
+ scrollToToday() {
2380
+ const x = this.view.getTodayXPoint();
2381
+ this.dom.scrollMainContainer(x);
2398
2382
  }
2399
- }
2400
- GanttItemUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttItemUpper, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Directive });
2401
- GanttItemUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: GanttItemUpper, inputs: { template: "template", item: "item" }, usesOnChanges: true, ngImport: i0 });
2402
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttItemUpper, decorators: [{
2403
- type: Directive
2404
- }], ctorParameters: function () {
2405
- return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
2406
- type: Inject,
2407
- args: [GANTT_UPPER_TOKEN]
2408
- }] }];
2409
- }, propDecorators: { template: [{
2410
- type: Input
2411
- }], item: [{
2412
- type: Input
2413
- }] } });
2414
-
2415
- class NgxGanttRangeComponent extends GanttItemUpper {
2416
- constructor(elementRef, ganttUpper) {
2417
- super(elementRef, ganttUpper);
2418
- this.ganttRangeClass = true;
2383
+ scrollToDate(date) {
2384
+ let x;
2385
+ if (typeof date === 'number') {
2386
+ x = this.view.getXPointByDate(new GanttDate(date));
2387
+ }
2388
+ else {
2389
+ x = this.view.getXPointByDate(date);
2390
+ }
2391
+ this.dom.scrollMainContainer(x);
2419
2392
  }
2420
2393
  }
2421
- NgxGanttRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttRangeComponent, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
2422
- NgxGanttRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: NgxGanttRangeComponent, selector: "ngx-gantt-range,gantt-range", host: { properties: { "class.gantt-range": "this.ganttRangeClass" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"item.start && item.end\">\n <div class=\"gantt-range-main\">\n <div class=\"gantt-range-main-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n </div>\n <div class=\"gantt-range-triangle left\"></div>\n <div class=\"gantt-range-triangle right\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</ng-container>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
2423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttRangeComponent, decorators: [{
2394
+ NgxGanttRootComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", 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 });
2395
+ NgxGanttRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", 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\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: GanttCalendarComponent, selector: "gantt-calendar-overlay" }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }] });
2396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttRootComponent, decorators: [{
2424
2397
  type: Component,
2425
- args: [{ selector: 'ngx-gantt-range,gantt-range', template: "<ng-container *ngIf=\"item.start && item.end\">\n <div class=\"gantt-range-main\">\n <div class=\"gantt-range-main-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n </div>\n <div class=\"gantt-range-triangle left\"></div>\n <div class=\"gantt-range-triangle right\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</ng-container>\n" }]
2398
+ args: [{ selector: 'ngx-gantt-root', providers: [GanttDomService, GanttDragContainer], host: {
2399
+ class: 'gantt'
2400
+ }, template: "<div class=\"gantt-side\" [style.width.px]=\"sideWidth\">\n <div class=\"gantt-side-container\">\n <ng-template [ngTemplateOutlet]=\"sideTemplate\"></ng-template>\n </div>\n</div>\n<div class=\"gantt-container\">\n <gantt-calendar-overlay></gantt-calendar-overlay>\n <gantt-drag-backdrop></gantt-drag-backdrop>\n <div class=\"gantt-main\">\n <ng-template [ngTemplateOutlet]=\"mainTemplate\"></ng-template>\n </div>\n</div>\n" }]
2426
2401
  }], ctorParameters: function () {
2427
- return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
2402
+ return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: GanttDomService }, { type: GanttDragContainer }, { type: GanttUpper, decorators: [{
2428
2403
  type: Inject,
2429
2404
  args: [GANTT_UPPER_TOKEN]
2405
+ }] }, { type: GanttPrintService, decorators: [{
2406
+ type: Optional
2430
2407
  }] }];
2431
- }, propDecorators: { ganttRangeClass: [{
2432
- type: HostBinding,
2433
- args: ['class.gantt-range']
2408
+ }, propDecorators: { sideWidth: [{
2409
+ type: Input
2410
+ }], sideTemplate: [{
2411
+ type: ContentChild,
2412
+ args: ['sideTemplate', { static: true }]
2413
+ }], mainTemplate: [{
2414
+ type: ContentChild,
2415
+ args: ['mainTemplate', { static: true }]
2416
+ }], backdrop: [{
2417
+ type: ViewChild,
2418
+ args: [GanttDragBackdropComponent, { static: true, read: ElementRef }]
2434
2419
  }] } });
2435
2420
 
2436
2421
  const dragMinWidth = 10;
@@ -2719,16 +2704,66 @@ class GanttBarDrag {
2719
2704
  this.destroy$.complete();
2720
2705
  }
2721
2706
  }
2722
- GanttBarDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttBarDrag, deps: [{ token: i1.DragDrop }, { token: GanttDomService }, { token: GanttDragContainer }, { token: NgxGanttRootComponent, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
2723
- GanttBarDrag.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttBarDrag });
2724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttBarDrag, decorators: [{
2707
+ GanttBarDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttBarDrag, deps: [{ token: i1$1.DragDrop }, { token: GanttDomService }, { token: GanttDragContainer }, { token: NgxGanttRootComponent, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
2708
+ GanttBarDrag.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttBarDrag });
2709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttBarDrag, decorators: [{
2725
2710
  type: Injectable
2726
2711
  }], ctorParameters: function () {
2727
- return [{ type: i1.DragDrop }, { type: GanttDomService }, { type: GanttDragContainer }, { type: NgxGanttRootComponent, decorators: [{
2712
+ return [{ type: i1$1.DragDrop }, { type: GanttDomService }, { type: GanttDragContainer }, { type: NgxGanttRootComponent, decorators: [{
2728
2713
  type: SkipSelf
2729
2714
  }] }];
2730
2715
  } });
2731
2716
 
2717
+ class GanttItemUpper {
2718
+ constructor(elementRef, ganttUpper) {
2719
+ this.elementRef = elementRef;
2720
+ this.ganttUpper = ganttUpper;
2721
+ this.firstChange = true;
2722
+ this.unsubscribe$ = new Subject();
2723
+ }
2724
+ ngOnInit() {
2725
+ this.firstChange = false;
2726
+ this.item.refs$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
2727
+ this.setPositions();
2728
+ });
2729
+ }
2730
+ ngOnChanges() {
2731
+ if (!this.firstChange) {
2732
+ this.setPositions();
2733
+ }
2734
+ }
2735
+ setPositions() {
2736
+ const itemElement = this.elementRef.nativeElement;
2737
+ itemElement.style.left = this.item.refs.x + 'px';
2738
+ itemElement.style.top = this.item.refs.y + 'px';
2739
+ itemElement.style.width = this.item.refs.width + 'px';
2740
+ if (this.item.type === GanttItemType.bar) {
2741
+ itemElement.style.height = this.ganttUpper.styles.barHeight + 'px';
2742
+ }
2743
+ else if (this.item.type === GanttItemType.range) {
2744
+ itemElement.style.height = rangeHeight + 'px';
2745
+ }
2746
+ }
2747
+ ngOnDestroy() {
2748
+ this.unsubscribe$.next();
2749
+ this.unsubscribe$.complete();
2750
+ }
2751
+ }
2752
+ GanttItemUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttItemUpper, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Directive });
2753
+ GanttItemUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.3", type: GanttItemUpper, inputs: { template: "template", item: "item" }, usesOnChanges: true, ngImport: i0 });
2754
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttItemUpper, decorators: [{
2755
+ type: Directive
2756
+ }], ctorParameters: function () {
2757
+ return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
2758
+ type: Inject,
2759
+ args: [GANTT_UPPER_TOKEN]
2760
+ }] }];
2761
+ }, propDecorators: { template: [{
2762
+ type: Input
2763
+ }], item: [{
2764
+ type: Input
2765
+ }] } });
2766
+
2732
2767
  function linearGradient(sideOrCorner, color, stop) {
2733
2768
  return `linear-gradient(${sideOrCorner},${color} 0%,${stop} 40%)`;
2734
2769
  }
@@ -2741,7 +2776,6 @@ class NgxGanttBarComponent extends GanttItemUpper {
2741
2776
  this.ngZone = ngZone;
2742
2777
  this.barClick = new EventEmitter();
2743
2778
  this.ganttItemClass = true;
2744
- this.color = 'red';
2745
2779
  }
2746
2780
  ngOnInit() {
2747
2781
  super.ngOnInit();
@@ -2796,9 +2830,9 @@ class NgxGanttBarComponent extends GanttItemUpper {
2796
2830
  event.stopPropagation();
2797
2831
  }
2798
2832
  }
2799
- NgxGanttBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttBarComponent, deps: [{ token: GanttDragContainer }, { token: GanttBarDrag }, { token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
2800
- NgxGanttBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: { barClick: "barClick" }, host: { properties: { "class.gantt-bar": "this.ganttItemClass" } }, providers: [GanttBarDrag], viewQueries: [{ propertyName: "contentElementRef", first: true, predicate: ["content"], descendants: true }, { propertyName: "handles", predicate: ["handle"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"gantt-bar-layer\">\n <div class=\"drag-handles\">\n <ng-container *ngIf=\"item.draggable && ganttUpper.draggable\">\n <span class=\"handle\" #handle></span>\n <span class=\"handle\" #handle></span>\n </ng-container>\n </div>\n <div *ngIf=\"item.linkable && ganttUpper.linkable\" class=\"link-handles\">\n <span class=\"handle\"><span class=\"point\"></span></span>\n <span class=\"handle\"> <span class=\"point\"></span></span>\n </div>\n</div>\n<div class=\"gantt-bar-border\"></div>\n<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
2801
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttBarComponent, decorators: [{
2833
+ NgxGanttBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttBarComponent, deps: [{ token: GanttDragContainer }, { token: GanttBarDrag }, { token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
2834
+ NgxGanttBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: { barClick: "barClick" }, host: { properties: { "class.gantt-bar": "this.ganttItemClass" } }, providers: [GanttBarDrag], viewQueries: [{ propertyName: "contentElementRef", first: true, predicate: ["content"], descendants: true }, { propertyName: "handles", predicate: ["handle"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"gantt-bar-layer\">\n <div class=\"drag-handles\">\n <ng-container *ngIf=\"item.draggable && ganttUpper.draggable\">\n <span class=\"handle\" #handle></span>\n <span class=\"handle\" #handle></span>\n </ng-container>\n </div>\n <div *ngIf=\"item.linkable && ganttUpper.linkable\" class=\"link-handles\">\n <span class=\"handle\"><span class=\"point\"></span></span>\n <span class=\"handle\"> <span class=\"point\"></span></span>\n </div>\n</div>\n<div class=\"gantt-bar-border\"></div>\n<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
2835
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttBarComponent, decorators: [{
2802
2836
  type: Component,
2803
2837
  args: [{ selector: 'ngx-gantt-bar,gantt-bar', providers: [GanttBarDrag], template: "<div class=\"gantt-bar-layer\">\n <div class=\"drag-handles\">\n <ng-container *ngIf=\"item.draggable && ganttUpper.draggable\">\n <span class=\"handle\" #handle></span>\n <span class=\"handle\" #handle></span>\n </ng-container>\n </div>\n <div *ngIf=\"item.linkable && ganttUpper.linkable\" class=\"link-handles\">\n <span class=\"handle\"><span class=\"point\"></span></span>\n <span class=\"handle\"> <span class=\"point\"></span></span>\n </div>\n</div>\n<div class=\"gantt-bar-border\"></div>\n<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n" }]
2804
2838
  }], ctorParameters: function () {
@@ -2819,6 +2853,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
2819
2853
  args: ['handle']
2820
2854
  }] } });
2821
2855
 
2856
+ class NgxGanttRangeComponent extends GanttItemUpper {
2857
+ constructor(elementRef, ganttUpper) {
2858
+ super(elementRef, ganttUpper);
2859
+ this.ganttRangeClass = true;
2860
+ }
2861
+ }
2862
+ NgxGanttRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttRangeComponent, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
2863
+ NgxGanttRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: NgxGanttRangeComponent, selector: "ngx-gantt-range,gantt-range", host: { properties: { "class.gantt-range": "this.ganttRangeClass" } }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"item.start && item.end\">\n <div class=\"gantt-range-main\">\n <div class=\"gantt-range-main-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n </div>\n <div class=\"gantt-range-triangle left\"></div>\n <div class=\"gantt-range-triangle right\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
2864
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttRangeComponent, decorators: [{
2865
+ type: Component,
2866
+ args: [{ selector: 'ngx-gantt-range,gantt-range', template: "<ng-container *ngIf=\"item.start && item.end\">\n <div class=\"gantt-range-main\">\n <div class=\"gantt-range-main-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n </div>\n <div class=\"gantt-range-triangle left\"></div>\n <div class=\"gantt-range-triangle right\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</ng-container>\n" }]
2867
+ }], ctorParameters: function () {
2868
+ return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
2869
+ type: Inject,
2870
+ args: [GANTT_UPPER_TOKEN]
2871
+ }] }];
2872
+ }, propDecorators: { ganttRangeClass: [{
2873
+ type: HostBinding,
2874
+ args: ['class.gantt-range']
2875
+ }] } });
2876
+
2877
+ class NgxGanttBaselineComponent {
2878
+ constructor(elementRef, ganttUpper) {
2879
+ this.elementRef = elementRef;
2880
+ this.ganttUpper = ganttUpper;
2881
+ this.unsubscribe$ = new Subject();
2882
+ this.ganttBaselineClass = true;
2883
+ }
2884
+ ngOnInit() {
2885
+ this.baselineItem.refs$.pipe(takeUntil$1(this.unsubscribe$)).subscribe(() => {
2886
+ this.setPositions();
2887
+ });
2888
+ }
2889
+ setPositions() {
2890
+ const itemElement = this.elementRef.nativeElement;
2891
+ itemElement.style.left = this.baselineItem.refs.x + 'px';
2892
+ itemElement.style.bottom = '2px';
2893
+ itemElement.style.width = this.baselineItem.refs.width + 'px';
2894
+ }
2895
+ }
2896
+ NgxGanttBaselineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttBaselineComponent, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
2897
+ NgxGanttBaselineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: NgxGanttBaselineComponent, selector: "ngx-gantt-baseline,gantt-baseline", inputs: { baselineItem: "baselineItem" }, host: { properties: { "class.gantt-baseline": "this.ganttBaselineClass" } }, ngImport: i0, template: "<div #content *ngIf=\"baselineItem\" class=\"baseline-content\"></div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2898
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttBaselineComponent, decorators: [{
2899
+ type: Component,
2900
+ args: [{ selector: 'ngx-gantt-baseline,gantt-baseline', template: "<div #content *ngIf=\"baselineItem\" class=\"baseline-content\"></div>\n" }]
2901
+ }], ctorParameters: function () {
2902
+ return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
2903
+ type: Inject,
2904
+ args: [GANTT_UPPER_TOKEN]
2905
+ }] }];
2906
+ }, propDecorators: { baselineItem: [{
2907
+ type: Input
2908
+ }], ganttBaselineClass: [{
2909
+ type: HostBinding,
2910
+ args: ['class.gantt-baseline']
2911
+ }] } });
2912
+
2822
2913
  class GanttMainComponent {
2823
2914
  constructor(ganttUpper) {
2824
2915
  this.ganttUpper = ganttUpper;
@@ -2830,11 +2921,11 @@ class GanttMainComponent {
2830
2921
  return item.id || index;
2831
2922
  }
2832
2923
  }
2833
- GanttMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttMainComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
2834
- GanttMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: GanttMainComponent, selector: "gantt-main", inputs: { groups: "groups", items: "items", groupHeaderTemplate: "groupHeaderTemplate", itemTemplate: "itemTemplate", barTemplate: "barTemplate", rangeTemplate: "rangeTemplate" }, outputs: { barClick: "barClick", lineClick: "lineClick" }, host: { properties: { "class.gantt-main-container": "this.ganttMainClass" } }, ngImport: i0, template: "<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items;\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n </ng-container>\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", components: [{ type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: ["groups", "items"], outputs: ["lineClick"] }, { type: NgxGanttRangeComponent, selector: "ngx-gantt-range,gantt-range" }, { type: NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: ["barClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "isGanttCustomItem": IsGanttCustomItemPipe, "isGanttRangeItem": IsGanttRangeItemPipe, "isGanttBarItem": IsGanttBarItemPipe } });
2835
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: GanttMainComponent, decorators: [{
2924
+ GanttMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttMainComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
2925
+ GanttMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: GanttMainComponent, selector: "gantt-main", inputs: { groups: "groups", items: "items", groupHeaderTemplate: "groupHeaderTemplate", itemTemplate: "itemTemplate", barTemplate: "barTemplate", rangeTemplate: "rangeTemplate" }, outputs: { barClick: "barClick", lineClick: "lineClick" }, host: { properties: { "class.gantt-main-container": "this.ganttMainClass" } }, ngImport: i0, template: "<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item.origin,\n refs: item.refs,\n baseline: ganttUpper.baselineItemsMap[item.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[item.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(item.type | isGanttRangeItem) || (item.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[item.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[item.id]\"></gantt-baseline>\n </ng-container>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: ["groups", "items"], outputs: ["lineClick"] }, { kind: "component", type: NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: ["barClick"] }, { kind: "component", type: NgxGanttRangeComponent, selector: "ngx-gantt-range,gantt-range" }, { kind: "component", type: NgxGanttBaselineComponent, selector: "ngx-gantt-baseline,gantt-baseline", inputs: ["baselineItem"] }, { kind: "pipe", type: IsGanttRangeItemPipe, name: "isGanttRangeItem" }, { kind: "pipe", type: IsGanttBarItemPipe, name: "isGanttBarItem" }, { kind: "pipe", type: IsGanttCustomItemPipe, name: "isGanttCustomItem" }] });
2926
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: GanttMainComponent, decorators: [{
2836
2927
  type: Component,
2837
- args: [{ selector: 'gantt-main', template: "<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items;\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n </ng-container>\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n" }]
2928
+ args: [{ selector: 'gantt-main', template: "<gantt-links-overlay [groups]=\"groups\" [items]=\"items\" (lineClick)=\"lineClick.emit($event)\"></gantt-links-overlay>\n<!-- groups -->\n<div class=\"gantt-main-groups\" *ngIf=\"groups && groups.length > 0; else itemsTemplate\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-group\" [ngClass]=\"group.class\">\n <ng-template [ngTemplateOutlet]=\"groupHeaderTemplate\" [ngTemplateOutletContext]=\"{ group: group }\"></ng-template>\n </div>\n <div *ngIf=\"group.expanded\" class=\"gantt-items\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: group.items }\"></ng-template>\n </div>\n </ng-container>\n</div>\n<!-- items -->\n<ng-template #itemsTemplate>\n <div class=\"gantt-main-items\" [style.width.px]=\"ganttUpper.view.width\">\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items }\"></ng-template>\n </div>\n</ng-template>\n\n<ng-template #ganttItems let-items=\"items\">\n <ng-container *ngFor=\"let item of items\">\n <div\n class=\"gantt-item\"\n [style.height.px]=\"ganttUpper.styles.lineHeight\"\n [class.gantt-main-item-active]=\"ganttUpper.isSelected(item.id)\"\n >\n <ng-container *ngIf=\"item.type | isGanttCustomItem\">\n <ng-template\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item.origin,\n refs: item.refs,\n baseline: ganttUpper.baselineItemsMap[item.id]?.origin,\n baselineRefs: ganttUpper.baselineItemsMap[item.id]?.refs\n }\"\n >\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"(item.type | isGanttRangeItem) || (item.type | isGanttBarItem)\">\n <gantt-range *ngIf=\"item.type | isGanttRangeItem\" [template]=\"rangeTemplate\" [item]=\"item\"></gantt-range>\n <gantt-bar *ngIf=\"item.type | isGanttBarItem\" [item]=\"item\" [template]=\"barTemplate\" (barClick)=\"barClick.emit($event)\"></gantt-bar>\n <gantt-baseline *ngIf=\"ganttUpper.baselineItemsMap[item.id]\" [baselineItem]=\"ganttUpper.baselineItemsMap[item.id]\"></gantt-baseline>\n </ng-container>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n" }]
2838
2929
  }], ctorParameters: function () {
2839
2930
  return [{ type: GanttUpper, decorators: [{
2840
2931
  type: Inject,
@@ -2943,9 +3034,15 @@ class NgxGanttComponent extends GanttUpper {
2943
3034
  this.selectedChange.emit({ event, selectedValue: _selectedValue });
2944
3035
  }
2945
3036
  }
3037
+ scrollToToday() {
3038
+ this.ganttRoot.scrollToToday();
3039
+ }
3040
+ scrollToDate(date) {
3041
+ this.ganttRoot.scrollToDate(date);
3042
+ }
2946
3043
  }
2947
- NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
2948
- NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: NgxGanttComponent, selector: "ngx-gantt", inputs: { maxLevel: "maxLevel", async: "async", childrenResolve: "childrenResolve", linkable: "linkable" }, outputs: { linkDragStarted: "linkDragStarted", linkDragEnded: "linkDragEnded", lineClick: "lineClick", selectedChange: "selectedChange" }, providers: [
3044
+ NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
3045
+ NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: NgxGanttComponent, selector: "ngx-gantt", inputs: { maxLevel: "maxLevel", async: "async", childrenResolve: "childrenResolve", linkable: "linkable" }, outputs: { linkDragStarted: "linkDragStarted", linkDragEnded: "linkDragEnded", lineClick: "lineClick", selectedChange: "selectedChange" }, providers: [
2949
3046
  {
2950
3047
  provide: GANTT_UPPER_TOKEN,
2951
3048
  useExisting: NgxGanttComponent
@@ -2954,8 +3051,8 @@ NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
2954
3051
  provide: GANTT_ABSTRACT_TOKEN,
2955
3052
  useExisting: forwardRef(() => NgxGanttComponent)
2956
3053
  }
2957
- ], 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 }], usesInheritance: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <ng-template #sideTemplate>\n <gantt-table\n [groups]=\"groups\"\n [items]=\"items\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n (itemClick)=\"selectItem($event)\"\n ></gantt-table>\n </ng-template>\n <ng-template #mainTemplate>\n <gantt-main\n [groups]=\"groups\"\n [items]=\"items\"\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 </ng-template>\n</ngx-gantt-root>\n", components: [{ type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { type: GanttTableComponent, selector: "gantt-table", inputs: ["groups", "items", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate"], outputs: ["itemClick"] }, { type: GanttMainComponent, selector: "gantt-main", inputs: ["groups", "items", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate"], outputs: ["barClick", "lineClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2958
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttComponent, decorators: [{
3054
+ ], 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 }], usesInheritance: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <ng-template #sideTemplate>\n <gantt-table\n [groups]=\"groups\"\n [items]=\"items\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n (itemClick)=\"selectItem($event)\"\n ></gantt-table>\n </ng-template>\n <ng-template #mainTemplate>\n <gantt-main\n [groups]=\"groups\"\n [items]=\"items\"\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 </ng-template>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: GanttTableComponent, selector: "gantt-table", inputs: ["groups", "items", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate"], outputs: ["itemClick"] }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["groups", "items", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3055
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttComponent, decorators: [{
2959
3056
  type: Component,
2960
3057
  args: [{ selector: 'ngx-gantt', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2961
3058
  {
@@ -3004,8 +3101,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
3004
3101
 
3005
3102
  class NgxGanttModule {
3006
3103
  }
3007
- NgxGanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3008
- NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttModule, declarations: [NgxGanttComponent,
3104
+ NgxGanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3105
+ NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttModule, declarations: [NgxGanttComponent,
3009
3106
  NgxGanttTableComponent,
3010
3107
  NgxGanttTableColumnComponent,
3011
3108
  GanttTableComponent,
@@ -3017,6 +3114,7 @@ NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
3017
3114
  GanttDragBackdropComponent,
3018
3115
  NgxGanttRangeComponent,
3019
3116
  NgxGanttRootComponent,
3117
+ NgxGanttBaselineComponent,
3020
3118
  IsGanttRangeItemPipe,
3021
3119
  IsGanttBarItemPipe,
3022
3120
  IsGanttCustomItemPipe], imports: [CommonModule, DragDropModule], exports: [NgxGanttComponent,
@@ -3024,14 +3122,15 @@ NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
3024
3122
  NgxGanttTableColumnComponent,
3025
3123
  NgxGanttRootComponent,
3026
3124
  NgxGanttBarComponent,
3027
- NgxGanttRangeComponent] });
3028
- NgxGanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttModule, providers: [
3125
+ NgxGanttRangeComponent,
3126
+ NgxGanttBaselineComponent] });
3127
+ NgxGanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttModule, providers: [
3029
3128
  {
3030
3129
  provide: GANTT_GLOBAL_CONFIG,
3031
3130
  useValue: defaultConfig
3032
3131
  }
3033
- ], imports: [[CommonModule, DragDropModule]] });
3034
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: NgxGanttModule, decorators: [{
3132
+ ], imports: [CommonModule, DragDropModule] });
3133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: NgxGanttModule, decorators: [{
3035
3134
  type: NgModule,
3036
3135
  args: [{
3037
3136
  imports: [CommonModule, DragDropModule],
@@ -3041,7 +3140,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
3041
3140
  NgxGanttTableColumnComponent,
3042
3141
  NgxGanttRootComponent,
3043
3142
  NgxGanttBarComponent,
3044
- NgxGanttRangeComponent
3143
+ NgxGanttRangeComponent,
3144
+ NgxGanttBaselineComponent
3045
3145
  ],
3046
3146
  declarations: [
3047
3147
  NgxGanttComponent,
@@ -3056,6 +3156,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
3056
3156
  GanttDragBackdropComponent,
3057
3157
  NgxGanttRangeComponent,
3058
3158
  NgxGanttRootComponent,
3159
+ NgxGanttBaselineComponent,
3059
3160
  IsGanttRangeItemPipe,
3060
3161
  IsGanttBarItemPipe,
3061
3162
  IsGanttCustomItemPipe
@@ -3077,5 +3178,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
3077
3178
  * Generated bundle index. Do not edit.
3078
3179
  */
3079
3180
 
3080
- export { GANTT_GLOBAL_CONFIG, GANTT_UPPER_TOKEN, GanttBarClickEvent, GanttDate, GanttDatePoint, GanttDragEvent, GanttGroupInternal, GanttItemInternal, GanttItemType, GanttItemUpper, GanttLineClickEvent, GanttLinkDragEvent, GanttLinkLineType, GanttLinkType, GanttLoadOnScrollEvent, GanttPrintService, GanttSelectedEvent, GanttTableEvent, GanttUpper, GanttView, GanttViewType, IsGanttBarItemPipe, IsGanttCustomItemPipe, IsGanttRangeItemPipe, LinkColors, NgxGanttBarComponent, NgxGanttComponent, NgxGanttModule, NgxGanttRangeComponent, NgxGanttRootComponent, NgxGanttTableColumnComponent, NgxGanttTableComponent, defaultConfig, primaryDatePointTop, secondaryDatePointTop };
3181
+ export { GANTT_GLOBAL_CONFIG, GANTT_UPPER_TOKEN, GanttBarClickEvent, GanttBaselineItemInternal, GanttDate, GanttDatePoint, GanttDragEvent, GanttGroupInternal, GanttItemInternal, GanttItemType, GanttItemUpper, GanttLineClickEvent, GanttLinkDragEvent, GanttLinkLineType, GanttLinkType, GanttLoadOnScrollEvent, GanttPrintService, GanttSelectedEvent, GanttTableEvent, GanttUpper, GanttView, GanttViewType, IsGanttBarItemPipe, IsGanttCustomItemPipe, IsGanttRangeItemPipe, LinkColors, NgxGanttBarComponent, NgxGanttBaselineComponent, NgxGanttComponent, NgxGanttModule, NgxGanttRangeComponent, NgxGanttRootComponent, NgxGanttTableColumnComponent, NgxGanttTableComponent, defaultConfig, primaryDatePointTop, secondaryDatePointTop };
3081
3182
  //# sourceMappingURL=worktile-gantt.mjs.map