@worktile/gantt 13.1.0 → 14.0.0-next.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.
- package/components/bar/bar.component.d.ts +1 -1
- package/components/calendar/calendar.component.d.ts +1 -1
- package/components/drag-backdrop/drag-backdrop.component.d.ts +1 -1
- package/components/icon/icon.component.d.ts +1 -1
- package/components/links/links.component.d.ts +1 -1
- package/components/main/gantt-main.component.d.ts +1 -1
- package/components/range/range.component.d.ts +1 -1
- package/components/table/gantt-table.component.d.ts +1 -1
- package/esm2020/components/bar/bar-drag.mjs +3 -3
- package/esm2020/components/bar/bar.component.mjs +3 -3
- package/esm2020/components/calendar/calendar.component.mjs +3 -3
- package/esm2020/components/drag-backdrop/drag-backdrop.component.mjs +3 -3
- package/esm2020/components/icon/icon.component.mjs +3 -3
- package/esm2020/components/links/links.component.mjs +3 -3
- package/esm2020/components/main/gantt-main.component.mjs +6 -6
- package/esm2020/components/range/range.component.mjs +3 -3
- package/esm2020/components/table/gantt-table.component.mjs +6 -6
- package/esm2020/gantt-dom.service.mjs +3 -3
- package/esm2020/gantt-drag-container.mjs +3 -3
- package/esm2020/gantt-item-upper.mjs +3 -3
- package/esm2020/gantt-print.service.mjs +3 -3
- package/esm2020/gantt-upper.mjs +3 -3
- package/esm2020/gantt.component.mjs +7 -7
- package/esm2020/gantt.module.mjs +6 -6
- package/esm2020/gantt.pipe.mjs +9 -9
- package/esm2020/root.component.mjs +6 -6
- package/esm2020/table/gantt-column.component.mjs +3 -3
- package/esm2020/table/gantt-table.component.mjs +3 -3
- package/fesm2015/worktile-gantt.mjs +817 -817
- package/fesm2015/worktile-gantt.mjs.map +1 -1
- package/fesm2020/worktile-gantt.mjs +796 -796
- package/fesm2020/worktile-gantt.mjs.map +1 -1
- package/gantt-item-upper.d.ts +1 -1
- package/gantt-upper.d.ts +1 -1
- package/gantt.component.d.ts +1 -1
- package/gantt.pipe.d.ts +3 -3
- package/{worktile-gantt.d.ts → index.d.ts} +0 -0
- package/package.json +6 -6
- package/root.component.d.ts +1 -1
- package/table/gantt-column.component.d.ts +1 -1
- package/table/gantt-table.component.d.ts +1 -1
|
@@ -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,
|
|
3
|
-
import * as
|
|
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,
|
|
5
|
+
import { take, takeUntil, skip, debounceTime, map, pairwise, auditTime, startWith, switchMap, finalize } from 'rxjs/operators';
|
|
6
6
|
import { BehaviorSubject, Subject, from, merge, fromEvent, Observable, EMPTY } 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 {
|
|
13
|
+
import { __decorate, __param, __awaiter } from 'tslib';
|
|
14
14
|
|
|
15
15
|
class GanttDatePoint {
|
|
16
16
|
constructor(start, text, x, y, additions) {
|
|
@@ -1047,9 +1047,9 @@ class GanttUpper {
|
|
|
1047
1047
|
return this.selectionModel.isSelected(id);
|
|
1048
1048
|
}
|
|
1049
1049
|
}
|
|
1050
|
-
GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1051
|
-
GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
1052
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1050
|
+
GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", 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: "14.0.0", version: "14.1.0", 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: "14.1.0", ngImport: i0, type: GanttUpper, decorators: [{
|
|
1053
1053
|
type: Directive
|
|
1054
1054
|
}], ctorParameters: function () {
|
|
1055
1055
|
return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
|
|
@@ -1123,9 +1123,9 @@ class NgxGanttTableColumnComponent {
|
|
|
1123
1123
|
this.columnWidth = coerceCssPixelValue(width);
|
|
1124
1124
|
}
|
|
1125
1125
|
}
|
|
1126
|
-
NgxGanttTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1127
|
-
NgxGanttTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
1128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1126
|
+
NgxGanttTableColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttTableColumnComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
|
|
1127
|
+
NgxGanttTableColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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: "14.1.0", ngImport: i0, type: NgxGanttTableColumnComponent, decorators: [{
|
|
1129
1129
|
type: Component,
|
|
1130
1130
|
args: [{
|
|
1131
1131
|
selector: 'ngx-gantt-column',
|
|
@@ -1153,9 +1153,9 @@ class NgxGanttTableComponent {
|
|
|
1153
1153
|
this.columnChanges = new EventEmitter();
|
|
1154
1154
|
}
|
|
1155
1155
|
}
|
|
1156
|
-
NgxGanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1157
|
-
NgxGanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
1158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1156
|
+
NgxGanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1157
|
+
NgxGanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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: "14.1.0", ngImport: i0, type: NgxGanttTableComponent, decorators: [{
|
|
1159
1159
|
type: Component,
|
|
1160
1160
|
args: [{
|
|
1161
1161
|
selector: 'ngx-gantt-table',
|
|
@@ -1293,9 +1293,9 @@ class GanttIconComponent {
|
|
|
1293
1293
|
}
|
|
1294
1294
|
}
|
|
1295
1295
|
}
|
|
1296
|
-
GanttIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1297
|
-
GanttIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
1298
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1296
|
+
GanttIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttIconComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1297
|
+
GanttIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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: "14.1.0", ngImport: i0, type: GanttIconComponent, decorators: [{
|
|
1299
1299
|
type: Component,
|
|
1300
1300
|
args: [{
|
|
1301
1301
|
selector: 'gantt-icon',
|
|
@@ -1313,9 +1313,9 @@ class IsGanttRangeItemPipe {
|
|
|
1313
1313
|
return value === GanttItemType.range;
|
|
1314
1314
|
}
|
|
1315
1315
|
}
|
|
1316
|
-
IsGanttRangeItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1317
|
-
IsGanttRangeItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "
|
|
1318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1316
|
+
IsGanttRangeItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: IsGanttRangeItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1317
|
+
IsGanttRangeItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: IsGanttRangeItemPipe, name: "isGanttRangeItem" });
|
|
1318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: IsGanttRangeItemPipe, decorators: [{
|
|
1319
1319
|
type: Pipe,
|
|
1320
1320
|
args: [{
|
|
1321
1321
|
name: 'isGanttRangeItem'
|
|
@@ -1326,9 +1326,9 @@ class IsGanttBarItemPipe {
|
|
|
1326
1326
|
return value === GanttItemType.bar;
|
|
1327
1327
|
}
|
|
1328
1328
|
}
|
|
1329
|
-
IsGanttBarItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1330
|
-
IsGanttBarItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "
|
|
1331
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1329
|
+
IsGanttBarItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: IsGanttBarItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1330
|
+
IsGanttBarItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: IsGanttBarItemPipe, name: "isGanttBarItem" });
|
|
1331
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: IsGanttBarItemPipe, decorators: [{
|
|
1332
1332
|
type: Pipe,
|
|
1333
1333
|
args: [{
|
|
1334
1334
|
name: 'isGanttBarItem'
|
|
@@ -1339,9 +1339,9 @@ class IsGanttCustomItemPipe {
|
|
|
1339
1339
|
return value === GanttItemType.custom;
|
|
1340
1340
|
}
|
|
1341
1341
|
}
|
|
1342
|
-
IsGanttCustomItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1343
|
-
IsGanttCustomItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "
|
|
1344
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1342
|
+
IsGanttCustomItemPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: IsGanttCustomItemPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1343
|
+
IsGanttCustomItemPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: IsGanttCustomItemPipe, name: "isGanttCustomItem" });
|
|
1344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: IsGanttCustomItemPipe, decorators: [{
|
|
1345
1345
|
type: Pipe,
|
|
1346
1346
|
args: [{
|
|
1347
1347
|
name: 'isGanttCustomItem'
|
|
@@ -1461,9 +1461,9 @@ class GanttTableComponent {
|
|
|
1461
1461
|
return item.id || index;
|
|
1462
1462
|
}
|
|
1463
1463
|
}
|
|
1464
|
-
GanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1465
|
-
GanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
1466
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1464
|
+
GanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", 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: "14.0.0", version: "14.1.0", 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" }] });
|
|
1466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttTableComponent, decorators: [{
|
|
1467
1467
|
type: Component,
|
|
1468
1468
|
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
1469
|
}], ctorParameters: function () {
|
|
@@ -1501,164 +1501,202 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
|
|
|
1501
1501
|
args: ['class.gantt-table-empty']
|
|
1502
1502
|
}] } });
|
|
1503
1503
|
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1504
|
+
class GanttLinkLine {
|
|
1505
|
+
constructor() { }
|
|
1506
|
+
generatePath(source, target, type) {
|
|
1507
|
+
if (source.before && source.after && target.before && target.after) {
|
|
1508
|
+
let path = '';
|
|
1509
|
+
switch (type) {
|
|
1510
|
+
case GanttLinkType.ss:
|
|
1511
|
+
path = this.generateSSPath(source, target);
|
|
1512
|
+
break;
|
|
1513
|
+
case GanttLinkType.ff:
|
|
1514
|
+
path = this.generateFFPath(source, target);
|
|
1515
|
+
break;
|
|
1516
|
+
case GanttLinkType.sf:
|
|
1517
|
+
path = this.generateFSAndSFPath(source, target, type);
|
|
1518
|
+
break;
|
|
1519
|
+
default:
|
|
1520
|
+
path = this.generateFSAndSFPath(source, target);
|
|
1521
|
+
}
|
|
1522
|
+
return path;
|
|
1519
1523
|
}
|
|
1520
1524
|
}
|
|
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
1525
|
}
|
|
1531
|
-
/** Options used to bind passive event listeners. */
|
|
1532
|
-
const passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });
|
|
1533
1526
|
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
(
|
|
1537
|
-
|
|
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();
|
|
1546
|
-
}
|
|
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
|
-
// });
|
|
1562
|
-
}
|
|
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;
|
|
1527
|
+
let GanttLinkLineCurve = class GanttLinkLineCurve extends GanttLinkLine {
|
|
1528
|
+
constructor(ganttUpper) {
|
|
1529
|
+
super();
|
|
1530
|
+
this.ganttUpper = ganttUpper;
|
|
1568
1531
|
}
|
|
1569
|
-
|
|
1570
|
-
const
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
}
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1532
|
+
generateSSPath(source, target) {
|
|
1533
|
+
const x1 = source.before.x;
|
|
1534
|
+
const y1 = source.before.y;
|
|
1535
|
+
const x4 = target.before.x;
|
|
1536
|
+
const y4 = target.before.y;
|
|
1537
|
+
const isMirror = y4 > y1 ? 0 : 1;
|
|
1538
|
+
const radius = Math.abs(y4 - y1) / 2;
|
|
1539
|
+
if (x4 > x1) {
|
|
1540
|
+
return `M ${x1} ${y1}
|
|
1541
|
+
A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
|
|
1542
|
+
L ${x4} ${y4}`;
|
|
1543
|
+
}
|
|
1544
|
+
else {
|
|
1545
|
+
return `M ${x1} ${y1}
|
|
1546
|
+
L ${x4} ${y1}
|
|
1547
|
+
A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
|
|
1548
|
+
}
|
|
1583
1549
|
}
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1550
|
+
generateFFPath(source, target) {
|
|
1551
|
+
const x1 = source.after.x;
|
|
1552
|
+
const y1 = source.after.y;
|
|
1553
|
+
const x4 = target.after.x;
|
|
1554
|
+
const y4 = target.after.y;
|
|
1555
|
+
const isMirror = y4 > y1 ? 1 : 0;
|
|
1556
|
+
const radius = Math.abs(y4 - y1) / 2;
|
|
1557
|
+
if (x4 > x1) {
|
|
1558
|
+
return `M ${x1} ${y1}
|
|
1559
|
+
L ${x4} ${y1}
|
|
1560
|
+
A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
|
|
1561
|
+
}
|
|
1562
|
+
else {
|
|
1563
|
+
return `M ${x1} ${y1}
|
|
1564
|
+
A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
|
|
1565
|
+
L ${x4} ${y4}`;
|
|
1566
|
+
}
|
|
1593
1567
|
}
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1568
|
+
generateFSAndSFPath(source, target, type) {
|
|
1569
|
+
var _a;
|
|
1570
|
+
let x1 = source.after.x;
|
|
1571
|
+
let y1 = source.after.y;
|
|
1572
|
+
let x4 = target.before.x;
|
|
1573
|
+
let y4 = target.before.y;
|
|
1574
|
+
const bezierWeight = 0.5;
|
|
1575
|
+
if (type === GanttLinkType.sf) {
|
|
1576
|
+
x1 = target.after.x;
|
|
1577
|
+
y1 = target.after.y;
|
|
1578
|
+
x4 = source.before.x;
|
|
1579
|
+
y4 = source.before.y;
|
|
1580
|
+
}
|
|
1581
|
+
let dx = Math.abs(x4 - x1) * bezierWeight;
|
|
1582
|
+
let x2 = x1 + dx;
|
|
1583
|
+
let x3 = x4 - dx;
|
|
1584
|
+
const centerX = (x1 + x4) / 2;
|
|
1585
|
+
const centerY = (y1 + y4) / 2;
|
|
1586
|
+
let controlX = this.ganttUpper.styles.lineHeight / 2;
|
|
1587
|
+
const controlY = this.ganttUpper.styles.lineHeight / 2;
|
|
1588
|
+
if (x1 >= x4) {
|
|
1589
|
+
if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
|
|
1590
|
+
return `M ${x1} ${y1}
|
|
1591
|
+
C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${x1} ${y4 > y1 ? y1 + controlY : y1 - controlY}
|
|
1592
|
+
L ${x4} ${y4 > y1 ? y4 - controlY : y4 + controlY}
|
|
1593
|
+
C ${x4 - controlY} ${y4 > y1 ? y4 - controlY : y4 + controlY} ${x4 - controlX} ${y4} ${x4} ${y4}
|
|
1594
|
+
`;
|
|
1609
1595
|
}
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1596
|
+
else {
|
|
1597
|
+
controlX = this.ganttUpper.styles.lineHeight;
|
|
1598
|
+
return `M ${x1} ${y1}
|
|
1599
|
+
C ${x1 + controlX} ${y1} ${x1 + controlX} ${y4 > y1 ? y1 + controlX : y1 - controlX} ${centerX} ${centerY}
|
|
1600
|
+
C ${x4 - controlX} ${y4 > y1 ? y4 - controlX : y4 + controlX} ${x4 - controlX} ${y4} ${x4} ${y4}
|
|
1601
|
+
`;
|
|
1615
1602
|
}
|
|
1616
|
-
return event;
|
|
1617
|
-
}))
|
|
1618
|
-
.subscribe(subscriber)));
|
|
1619
|
-
}
|
|
1620
|
-
getResize() {
|
|
1621
|
-
return isPlatformServer(this.platformId) ? EMPTY : fromEvent(window, 'resize').pipe(auditTime(150));
|
|
1622
|
-
}
|
|
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;
|
|
1628
1603
|
}
|
|
1604
|
+
else if (((_a = this.ganttUpper.linkOptions) === null || _a === void 0 ? void 0 : _a.showArrow) && x4 - x1 < 200) {
|
|
1605
|
+
dx = Math.max(Math.abs(y4 - y1) * bezierWeight, 60);
|
|
1606
|
+
x2 = x1 + dx;
|
|
1607
|
+
x3 = x4 - dx;
|
|
1608
|
+
return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
|
|
1609
|
+
}
|
|
1610
|
+
return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
|
|
1629
1611
|
}
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
}
|
|
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
|
-
} });
|
|
1612
|
+
};
|
|
1613
|
+
GanttLinkLineCurve = __decorate([
|
|
1614
|
+
__param(0, Inject(GANTT_UPPER_TOKEN))
|
|
1615
|
+
], GanttLinkLineCurve);
|
|
1645
1616
|
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
if (dependencyTypes.includes(GanttLinkType.ff) && path.from.pos === InBarPosition.finish && path.to.pos === InBarPosition.finish) {
|
|
1651
|
-
return GanttLinkType.ff;
|
|
1617
|
+
class GanttLinkLineStraight extends GanttLinkLine {
|
|
1618
|
+
constructor() {
|
|
1619
|
+
super();
|
|
1620
|
+
this.pathControl = 20;
|
|
1652
1621
|
}
|
|
1653
|
-
|
|
1654
|
-
|
|
1622
|
+
generateSSPath(source, target) {
|
|
1623
|
+
const x1 = source.before.x;
|
|
1624
|
+
const y1 = source.before.y;
|
|
1625
|
+
const x4 = target.before.x;
|
|
1626
|
+
const y4 = target.before.y;
|
|
1627
|
+
const control = this.pathControl;
|
|
1628
|
+
return `M ${x1} ${y1}
|
|
1629
|
+
L ${x4 > x1 ? x1 - control : x4 - control} ${y1}
|
|
1630
|
+
L ${x4 > x1 ? x1 - control : x4 - control} ${y4}
|
|
1631
|
+
L ${x4} ${y4}`;
|
|
1655
1632
|
}
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1633
|
+
generateFFPath(source, target) {
|
|
1634
|
+
const x1 = source.after.x;
|
|
1635
|
+
const y1 = source.after.y;
|
|
1636
|
+
const x4 = target.after.x;
|
|
1637
|
+
const y4 = target.after.y;
|
|
1638
|
+
const control = this.pathControl;
|
|
1639
|
+
return `M ${x1} ${y1}
|
|
1640
|
+
L ${x4 > x1 ? x4 + control : x1 + control} ${y1}
|
|
1641
|
+
L ${x4 > x1 ? x4 + control : x1 + control} ${y4}
|
|
1642
|
+
L ${x4} ${y4}`;
|
|
1643
|
+
}
|
|
1644
|
+
generateFSAndSFPath(source, target, type) {
|
|
1645
|
+
let x1 = source.after.x;
|
|
1646
|
+
let y1 = source.after.y;
|
|
1647
|
+
let x4 = target.before.x;
|
|
1648
|
+
let y4 = target.before.y;
|
|
1649
|
+
const control = this.pathControl;
|
|
1650
|
+
if (type === GanttLinkType.sf) {
|
|
1651
|
+
x1 = target.after.x;
|
|
1652
|
+
y1 = target.after.y;
|
|
1653
|
+
x4 = source.before.x;
|
|
1654
|
+
y4 = source.before.y;
|
|
1655
|
+
}
|
|
1656
|
+
if (x4 - x1 >= 40) {
|
|
1657
|
+
return `M ${x1} ${y1}
|
|
1658
|
+
L ${x1 + control} ${y1}
|
|
1659
|
+
L ${x1 + control} ${y4}
|
|
1660
|
+
L ${x4} ${y4}`;
|
|
1661
|
+
}
|
|
1662
|
+
else {
|
|
1663
|
+
return `M ${x1} ${y1}
|
|
1664
|
+
L ${x1 + control} ${y1}
|
|
1665
|
+
L ${x1 + control} ${y4 > y1 ? y1 + control : y1 - control}
|
|
1666
|
+
L ${x4 - control} ${y4 > y1 ? y1 + control : y1 - control}
|
|
1667
|
+
L ${x4 - control} ${y4}
|
|
1668
|
+
L ${x4} ${y4}`;
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
function createLineGenerator(type, ganttUpper) {
|
|
1674
|
+
switch (type) {
|
|
1675
|
+
case GanttLinkLineType.curve:
|
|
1676
|
+
return new GanttLinkLineCurve(ganttUpper);
|
|
1677
|
+
case GanttLinkLineType.straight:
|
|
1678
|
+
return new GanttLinkLineStraight();
|
|
1679
|
+
default:
|
|
1680
|
+
throw new Error('gantt link path type invalid');
|
|
1681
|
+
}
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
function getDependencyType(path, dependencyTypes) {
|
|
1685
|
+
if (dependencyTypes.includes(GanttLinkType.ss) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.start) {
|
|
1686
|
+
return GanttLinkType.ss;
|
|
1687
|
+
}
|
|
1688
|
+
if (dependencyTypes.includes(GanttLinkType.ff) && path.from.pos === InBarPosition.finish && path.to.pos === InBarPosition.finish) {
|
|
1689
|
+
return GanttLinkType.ff;
|
|
1690
|
+
}
|
|
1691
|
+
if (dependencyTypes.includes(GanttLinkType.sf) && path.from.pos === InBarPosition.start && path.to.pos === InBarPosition.finish) {
|
|
1692
|
+
return GanttLinkType.sf;
|
|
1693
|
+
}
|
|
1694
|
+
return GanttLinkType.fs;
|
|
1695
|
+
}
|
|
1696
|
+
var InBarPosition;
|
|
1697
|
+
(function (InBarPosition) {
|
|
1698
|
+
InBarPosition["start"] = "start";
|
|
1699
|
+
InBarPosition["finish"] = "finish";
|
|
1662
1700
|
})(InBarPosition || (InBarPosition = {}));
|
|
1663
1701
|
class GanttDragContainer {
|
|
1664
1702
|
constructor(ganttUpper) {
|
|
@@ -1708,9 +1746,9 @@ class GanttDragContainer {
|
|
|
1708
1746
|
this.linkDragPath = { from: null, to: null };
|
|
1709
1747
|
}
|
|
1710
1748
|
}
|
|
1711
|
-
GanttDragContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1712
|
-
GanttDragContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
1713
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1749
|
+
GanttDragContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDragContainer, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1750
|
+
GanttDragContainer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDragContainer });
|
|
1751
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDragContainer, decorators: [{
|
|
1714
1752
|
type: Injectable
|
|
1715
1753
|
}], ctorParameters: function () {
|
|
1716
1754
|
return [{ type: GanttUpper, decorators: [{
|
|
@@ -1719,718 +1757,607 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
|
|
|
1719
1757
|
}] }];
|
|
1720
1758
|
} });
|
|
1721
1759
|
|
|
1722
|
-
class
|
|
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) {
|
|
1760
|
+
class GanttLinksComponent {
|
|
1761
|
+
constructor(ganttUpper, cdr, elementRef, ganttDragContainer) {
|
|
1830
1762
|
this.ganttUpper = ganttUpper;
|
|
1831
|
-
this.
|
|
1763
|
+
this.cdr = cdr;
|
|
1832
1764
|
this.elementRef = elementRef;
|
|
1833
|
-
this.
|
|
1834
|
-
this.
|
|
1835
|
-
this.
|
|
1836
|
-
this.
|
|
1837
|
-
this.
|
|
1838
|
-
this.
|
|
1839
|
-
this.
|
|
1765
|
+
this.ganttDragContainer = ganttDragContainer;
|
|
1766
|
+
this.groups = [];
|
|
1767
|
+
this.items = [];
|
|
1768
|
+
this.lineClick = new EventEmitter();
|
|
1769
|
+
this.links = [];
|
|
1770
|
+
this.ganttLinkTypes = GanttLinkType;
|
|
1771
|
+
this.showArrow = false;
|
|
1772
|
+
this.linkItems = [];
|
|
1773
|
+
this.firstChange = true;
|
|
1840
1774
|
this.unsubscribe$ = new Subject();
|
|
1841
|
-
|
|
1842
|
-
get view() {
|
|
1843
|
-
return this.ganttUpper.view;
|
|
1844
|
-
}
|
|
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
|
-
}
|
|
1862
|
-
}
|
|
1863
|
-
else {
|
|
1864
|
-
todayEle.style.display = 'none';
|
|
1865
|
-
}
|
|
1775
|
+
this.ganttLinksOverlay = true;
|
|
1866
1776
|
}
|
|
1867
1777
|
ngOnInit() {
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1778
|
+
this.linkLine = createLineGenerator(this.ganttUpper.linkOptions.lineType, this.ganttUpper);
|
|
1779
|
+
this.showArrow = this.ganttUpper.linkOptions.showArrow;
|
|
1780
|
+
this.buildLinks();
|
|
1781
|
+
this.firstChange = false;
|
|
1782
|
+
this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
1783
|
+
this.elementRef.nativeElement.style.visibility = 'hidden';
|
|
1784
|
+
});
|
|
1785
|
+
merge(this.ganttUpper.viewChange, this.ganttUpper.expandChange, this.ganttUpper.view.start$, this.ganttUpper.dragEnded, this.ganttUpper.linkDragEnded)
|
|
1786
|
+
.pipe(skip(1), debounceTime(0), takeUntil(this.unsubscribe$))
|
|
1787
|
+
.subscribe(() => {
|
|
1788
|
+
this.elementRef.nativeElement.style.visibility = 'visible';
|
|
1789
|
+
this.buildLinks();
|
|
1790
|
+
this.cdr.detectChanges();
|
|
1881
1791
|
});
|
|
1882
1792
|
}
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
this.unsubscribe$.next();
|
|
1888
|
-
this.unsubscribe$.complete();
|
|
1793
|
+
ngOnChanges() {
|
|
1794
|
+
if (!this.firstChange) {
|
|
1795
|
+
this.buildLinks();
|
|
1796
|
+
}
|
|
1889
1797
|
}
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
this.ganttUpper = ganttUpper;
|
|
1913
|
-
this.printService = printService;
|
|
1914
|
-
this.unsubscribe$ = new Subject();
|
|
1915
|
-
this.ganttUpper.dragContainer = dragContainer;
|
|
1916
|
-
}
|
|
1917
|
-
get view() {
|
|
1918
|
-
return this.ganttUpper.view;
|
|
1919
|
-
}
|
|
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);
|
|
1798
|
+
computeItemPosition() {
|
|
1799
|
+
const lineHeight = this.ganttUpper.styles.lineHeight;
|
|
1800
|
+
const barHeight = this.ganttUpper.styles.barHeight;
|
|
1801
|
+
this.linkItems = [];
|
|
1802
|
+
if (this.groups.length > 0) {
|
|
1803
|
+
let itemNum = 0;
|
|
1804
|
+
let groupNum = 0;
|
|
1805
|
+
this.groups.forEach((group) => {
|
|
1806
|
+
groupNum++;
|
|
1807
|
+
if (group.expanded) {
|
|
1808
|
+
const items = recursiveItems(group.items);
|
|
1809
|
+
items.forEach((item, itemIndex) => {
|
|
1810
|
+
const y = (groupNum + itemNum + itemIndex) * lineHeight + item.refs.y + barHeight / 2;
|
|
1811
|
+
this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
|
|
1812
|
+
x: item.refs.x,
|
|
1813
|
+
y
|
|
1814
|
+
}, after: {
|
|
1815
|
+
x: item.refs.x + item.refs.width,
|
|
1816
|
+
y
|
|
1817
|
+
} }));
|
|
1818
|
+
});
|
|
1819
|
+
itemNum += items.length;
|
|
1931
1820
|
}
|
|
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
1821
|
});
|
|
1941
|
-
});
|
|
1942
|
-
}
|
|
1943
|
-
ngOnDestroy() {
|
|
1944
|
-
this.unsubscribe$.next();
|
|
1945
|
-
}
|
|
1946
|
-
setupViewScroll() {
|
|
1947
|
-
if (this.ganttUpper.disabledLoadOnScroll) {
|
|
1948
|
-
return;
|
|
1949
1822
|
}
|
|
1950
|
-
|
|
1951
|
-
.
|
|
1952
|
-
.
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1823
|
+
else {
|
|
1824
|
+
const items = recursiveItems(this.items);
|
|
1825
|
+
items.forEach((item, itemIndex) => {
|
|
1826
|
+
const y = itemIndex * lineHeight + item.refs.y + barHeight / 2;
|
|
1827
|
+
this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
|
|
1828
|
+
x: item.refs.x,
|
|
1829
|
+
y
|
|
1830
|
+
}, after: {
|
|
1831
|
+
x: item.refs.x + item.refs.width,
|
|
1832
|
+
y
|
|
1833
|
+
} }));
|
|
1834
|
+
});
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
buildLinks() {
|
|
1838
|
+
this.computeItemPosition();
|
|
1839
|
+
this.links = [];
|
|
1840
|
+
this.linkItems.forEach((source) => {
|
|
1841
|
+
if (source.origin.start || source.origin.end) {
|
|
1842
|
+
source.links.forEach((link) => {
|
|
1843
|
+
const target = this.linkItems.find((item) => item.id === link.link);
|
|
1844
|
+
if (target && (target.origin.start || target.origin.end)) {
|
|
1845
|
+
let defaultColor = LinkColors.default;
|
|
1846
|
+
let activeColor = LinkColors.active;
|
|
1847
|
+
if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {
|
|
1848
|
+
defaultColor = LinkColors.blocked;
|
|
1849
|
+
activeColor = LinkColors.blocked;
|
|
1850
|
+
}
|
|
1851
|
+
if (link.color) {
|
|
1852
|
+
if (typeof link.color === 'string') {
|
|
1853
|
+
defaultColor = link.color;
|
|
1854
|
+
activeColor = link.color;
|
|
1855
|
+
}
|
|
1856
|
+
else {
|
|
1857
|
+
defaultColor = link.color.default;
|
|
1858
|
+
activeColor = link.color.active;
|
|
1859
|
+
}
|
|
1860
|
+
}
|
|
1861
|
+
this.links.push({
|
|
1862
|
+
path: this.linkLine.generatePath(source, target, link.type),
|
|
1863
|
+
source: source.origin,
|
|
1864
|
+
target: target.origin,
|
|
1865
|
+
type: link.type,
|
|
1866
|
+
color: defaultColor,
|
|
1867
|
+
defaultColor,
|
|
1868
|
+
activeColor
|
|
1869
|
+
});
|
|
1960
1870
|
}
|
|
1961
|
-
}
|
|
1962
|
-
}
|
|
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() }));
|
|
1967
|
-
}
|
|
1871
|
+
});
|
|
1968
1872
|
}
|
|
1969
1873
|
});
|
|
1970
1874
|
}
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1875
|
+
trackBy(index) {
|
|
1876
|
+
return index;
|
|
1877
|
+
}
|
|
1878
|
+
onLineClick(event, link) {
|
|
1879
|
+
this.lineClick.emit({
|
|
1880
|
+
event,
|
|
1881
|
+
source: link.source,
|
|
1882
|
+
target: link.target
|
|
1977
1883
|
});
|
|
1978
1884
|
}
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
this.elementRef.nativeElement.className = 'gantt gantt-scroll';
|
|
1985
|
-
}
|
|
1986
|
-
else {
|
|
1987
|
-
this.elementRef.nativeElement.className = 'gantt';
|
|
1885
|
+
mouseEnterPath(link, index) {
|
|
1886
|
+
link.color = link.activeColor || link.defaultColor;
|
|
1887
|
+
if (index < this.links.length - 1) {
|
|
1888
|
+
this.links.splice(index, 1);
|
|
1889
|
+
this.links.push(link);
|
|
1988
1890
|
}
|
|
1989
1891
|
}
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1892
|
+
mouseLeavePath(link) {
|
|
1893
|
+
link.color = link.defaultColor;
|
|
1894
|
+
}
|
|
1895
|
+
ngOnDestroy() {
|
|
1896
|
+
this.unsubscribe$.next();
|
|
1897
|
+
this.unsubscribe$.complete();
|
|
1993
1898
|
}
|
|
1994
1899
|
}
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1900
|
+
GanttLinksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttLinksComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: GanttDragContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
1901
|
+
GanttLinksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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"] }] });
|
|
1902
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttLinksComponent, decorators: [{
|
|
1998
1903
|
type: Component,
|
|
1999
|
-
args: [{ selector: '
|
|
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" }]
|
|
1904
|
+
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" }]
|
|
2002
1905
|
}], ctorParameters: function () {
|
|
2003
|
-
return [{ type:
|
|
1906
|
+
return [{ type: GanttUpper, decorators: [{
|
|
2004
1907
|
type: Inject,
|
|
2005
1908
|
args: [GANTT_UPPER_TOKEN]
|
|
2006
|
-
}] }, { type:
|
|
2007
|
-
|
|
2008
|
-
}] }];
|
|
2009
|
-
}, propDecorators: { sideWidth: [{
|
|
1909
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: GanttDragContainer }];
|
|
1910
|
+
}, propDecorators: { groups: [{
|
|
2010
1911
|
type: Input
|
|
2011
|
-
}],
|
|
2012
|
-
type:
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
type: ViewChild,
|
|
2019
|
-
args: [GanttDragBackdropComponent, { static: true, read: ElementRef }]
|
|
1912
|
+
}], items: [{
|
|
1913
|
+
type: Input
|
|
1914
|
+
}], lineClick: [{
|
|
1915
|
+
type: Output
|
|
1916
|
+
}], ganttLinksOverlay: [{
|
|
1917
|
+
type: HostBinding,
|
|
1918
|
+
args: ['class.gantt-links-overlay']
|
|
2020
1919
|
}] } });
|
|
2021
1920
|
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
default:
|
|
2038
|
-
path = this.generateFSAndSFPath(source, target);
|
|
2039
|
-
}
|
|
2040
|
-
return path;
|
|
1921
|
+
/** Cached result of whether the user's browser supports passive event listeners. */
|
|
1922
|
+
let supportsPassiveEvents;
|
|
1923
|
+
/**
|
|
1924
|
+
* Checks whether the user's browser supports passive event listeners.
|
|
1925
|
+
* See: https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
|
|
1926
|
+
*/
|
|
1927
|
+
function supportsPassiveEventListeners() {
|
|
1928
|
+
if (supportsPassiveEvents == null && typeof window !== 'undefined') {
|
|
1929
|
+
try {
|
|
1930
|
+
window.addEventListener('test', null, Object.defineProperty({}, 'passive', {
|
|
1931
|
+
get: () => (supportsPassiveEvents = true)
|
|
1932
|
+
}));
|
|
1933
|
+
}
|
|
1934
|
+
finally {
|
|
1935
|
+
supportsPassiveEvents = supportsPassiveEvents || false;
|
|
2041
1936
|
}
|
|
2042
1937
|
}
|
|
1938
|
+
return supportsPassiveEvents;
|
|
1939
|
+
}
|
|
1940
|
+
/**
|
|
1941
|
+
* Normalizes an `AddEventListener` object to something that can be passed
|
|
1942
|
+
* to `addEventListener` on any browser, no matter whether it supports the
|
|
1943
|
+
* `options` parameter.
|
|
1944
|
+
*/
|
|
1945
|
+
function normalizePassiveListenerOptions(options) {
|
|
1946
|
+
return supportsPassiveEventListeners() ? options : !!options.capture;
|
|
2043
1947
|
}
|
|
1948
|
+
/** Options used to bind passive event listeners. */
|
|
1949
|
+
const passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });
|
|
2044
1950
|
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
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
|
-
}
|
|
1951
|
+
const scrollThreshold = 50;
|
|
1952
|
+
var ScrollDirection;
|
|
1953
|
+
(function (ScrollDirection) {
|
|
1954
|
+
ScrollDirection[ScrollDirection["NONE"] = 0] = "NONE";
|
|
1955
|
+
ScrollDirection[ScrollDirection["LEFT"] = 1] = "LEFT";
|
|
1956
|
+
ScrollDirection[ScrollDirection["RIGHT"] = 2] = "RIGHT";
|
|
1957
|
+
})(ScrollDirection || (ScrollDirection = {}));
|
|
1958
|
+
class GanttDomService {
|
|
1959
|
+
constructor(ngZone, platformId) {
|
|
1960
|
+
this.ngZone = ngZone;
|
|
1961
|
+
this.platformId = platformId;
|
|
1962
|
+
this.unsubscribe$ = new Subject();
|
|
2067
1963
|
}
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
}
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
L ${x4} ${y4}`;
|
|
2084
|
-
}
|
|
1964
|
+
monitorScrollChange() {
|
|
1965
|
+
this.ngZone.runOutsideAngular(() => merge(fromEvent(this.mainContainer, 'scroll', passiveListenerOptions), fromEvent(this.sideContainer, 'scroll', passiveListenerOptions))
|
|
1966
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
1967
|
+
.subscribe((event) => {
|
|
1968
|
+
this.syncScroll(event);
|
|
1969
|
+
}));
|
|
1970
|
+
// fromEvent(this.mainContainer, 'scroll')
|
|
1971
|
+
// .pipe(startWith(), takeUntil(this.unsubscribe$))
|
|
1972
|
+
// .subscribe((event) => {
|
|
1973
|
+
// // if (this.mainContainer.scrollLeft > 0) {
|
|
1974
|
+
// // this.side.classList.add('gantt-side-has-shadow');
|
|
1975
|
+
// // } else {
|
|
1976
|
+
// // this.side.classList.remove('gantt-side-has-shadow');
|
|
1977
|
+
// // }
|
|
1978
|
+
// });
|
|
2085
1979
|
}
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
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
|
-
`;
|
|
1980
|
+
syncScroll(event) {
|
|
1981
|
+
const target = event.currentTarget;
|
|
1982
|
+
this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
|
|
1983
|
+
this.sideContainer.scrollTop = target.scrollTop;
|
|
1984
|
+
this.mainContainer.scrollTop = target.scrollTop;
|
|
1985
|
+
}
|
|
1986
|
+
disableBrowserWheelEvent() {
|
|
1987
|
+
const container = this.mainContainer;
|
|
1988
|
+
this.ngZone.runOutsideAngular(() => fromEvent(container, 'wheel')
|
|
1989
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
1990
|
+
.subscribe((event) => {
|
|
1991
|
+
const delta = event.deltaX;
|
|
1992
|
+
if (!delta) {
|
|
1993
|
+
return;
|
|
2113
1994
|
}
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
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
|
-
`;
|
|
1995
|
+
if ((container.scrollLeft + container.offsetWidth === container.scrollWidth && delta > 0) ||
|
|
1996
|
+
(container.scrollLeft === 0 && delta < 0)) {
|
|
1997
|
+
event.preventDefault();
|
|
2120
1998
|
}
|
|
2121
|
-
}
|
|
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}`;
|
|
2127
|
-
}
|
|
2128
|
-
return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
|
|
1999
|
+
}));
|
|
2129
2000
|
}
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
this.
|
|
2001
|
+
initialize(root) {
|
|
2002
|
+
this.root = root.nativeElement;
|
|
2003
|
+
this.side = this.root.getElementsByClassName('gantt-side')[0];
|
|
2004
|
+
this.container = this.root.getElementsByClassName('gantt-container')[0];
|
|
2005
|
+
this.sideContainer = this.root.getElementsByClassName('gantt-side-container')[0];
|
|
2006
|
+
this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
|
|
2007
|
+
this.calendarOverlay = this.root.getElementsByClassName('gantt-calendar-overlay')[0];
|
|
2008
|
+
this.monitorScrollChange();
|
|
2009
|
+
this.disableBrowserWheelEvent();
|
|
2139
2010
|
}
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2011
|
+
/**
|
|
2012
|
+
* @returns An observable that will emit outside the Angular zone. Note, consumers should re-enter the Angular zone
|
|
2013
|
+
* to run the change detection if needed.
|
|
2014
|
+
*/
|
|
2015
|
+
getViewerScroll(options) {
|
|
2016
|
+
return new Observable((subscriber) => this.ngZone.runOutsideAngular(() => fromEvent(this.mainContainer, 'scroll', options)
|
|
2017
|
+
.pipe(map(() => this.mainContainer.scrollLeft), pairwise(), map(([previous, current]) => {
|
|
2018
|
+
const event = {
|
|
2019
|
+
target: this.mainContainer,
|
|
2020
|
+
direction: ScrollDirection.NONE
|
|
2021
|
+
};
|
|
2022
|
+
if (current - previous < 0) {
|
|
2023
|
+
if (this.mainContainer.scrollLeft < scrollThreshold && this.mainContainer.scrollLeft > 0) {
|
|
2024
|
+
event.direction = ScrollDirection.LEFT;
|
|
2025
|
+
}
|
|
2026
|
+
}
|
|
2027
|
+
if (current - previous > 0) {
|
|
2028
|
+
if (this.mainContainer.scrollWidth - this.mainContainer.clientWidth - this.mainContainer.scrollLeft <
|
|
2029
|
+
scrollThreshold) {
|
|
2030
|
+
event.direction = ScrollDirection.RIGHT;
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
return event;
|
|
2034
|
+
}))
|
|
2035
|
+
.subscribe(subscriber)));
|
|
2150
2036
|
}
|
|
2151
|
-
|
|
2152
|
-
|
|
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}`;
|
|
2037
|
+
getResize() {
|
|
2038
|
+
return isPlatformServer(this.platformId) ? EMPTY : fromEvent(window, 'resize').pipe(auditTime(150));
|
|
2161
2039
|
}
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
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}`;
|
|
2040
|
+
scrollMainContainer(left) {
|
|
2041
|
+
if (isNumber(left)) {
|
|
2042
|
+
const scrollLeft = left - this.mainContainer.clientWidth / 2;
|
|
2043
|
+
this.mainContainer.scrollLeft = scrollLeft > scrollThreshold ? scrollLeft : 0;
|
|
2044
|
+
this.calendarOverlay.scrollLeft = this.mainContainer.scrollLeft;
|
|
2187
2045
|
}
|
|
2188
2046
|
}
|
|
2047
|
+
ngOnDestroy() {
|
|
2048
|
+
this.unsubscribe$.next();
|
|
2049
|
+
this.unsubscribe$.complete();
|
|
2050
|
+
}
|
|
2189
2051
|
}
|
|
2052
|
+
GanttDomService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDomService, deps: [{ token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2053
|
+
GanttDomService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDomService });
|
|
2054
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDomService, decorators: [{
|
|
2055
|
+
type: Injectable
|
|
2056
|
+
}], ctorParameters: function () {
|
|
2057
|
+
return [{ type: i0.NgZone }, { type: undefined, decorators: [{
|
|
2058
|
+
type: Inject,
|
|
2059
|
+
args: [PLATFORM_ID]
|
|
2060
|
+
}] }];
|
|
2061
|
+
} });
|
|
2190
2062
|
|
|
2191
|
-
|
|
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');
|
|
2199
|
-
}
|
|
2063
|
+
class GanttDragBackdropComponent {
|
|
2200
2064
|
}
|
|
2065
|
+
GanttDragBackdropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDragBackdropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2066
|
+
GanttDragBackdropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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" });
|
|
2067
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttDragBackdropComponent, decorators: [{
|
|
2068
|
+
type: Component,
|
|
2069
|
+
args: [{ selector: 'gantt-drag-backdrop', host: {
|
|
2070
|
+
class: 'gantt-drag-backdrop'
|
|
2071
|
+
}, 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" }]
|
|
2072
|
+
}] });
|
|
2201
2073
|
|
|
2202
|
-
class
|
|
2203
|
-
constructor(
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
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;
|
|
2216
|
-
this.unsubscribe$ = new Subject();
|
|
2217
|
-
this.ganttLinksOverlay = true;
|
|
2218
|
-
}
|
|
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();
|
|
2074
|
+
class GanttPrintService {
|
|
2075
|
+
constructor() { }
|
|
2076
|
+
setInlineStyles(targetElem) {
|
|
2077
|
+
const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
|
|
2078
|
+
for (const svgElement of svgElements) {
|
|
2079
|
+
this.recursElementChildren(svgElement);
|
|
2238
2080
|
}
|
|
2239
2081
|
}
|
|
2240
|
-
|
|
2241
|
-
const
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
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
|
-
});
|
|
2082
|
+
recursElementChildren(node) {
|
|
2083
|
+
const transformProperties = [
|
|
2084
|
+
'fill',
|
|
2085
|
+
'color',
|
|
2086
|
+
'font-size',
|
|
2087
|
+
'stroke',
|
|
2088
|
+
'font',
|
|
2089
|
+
'text-anchor',
|
|
2090
|
+
'stroke-dasharray',
|
|
2091
|
+
'shape-rendering',
|
|
2092
|
+
'stroke-width'
|
|
2093
|
+
];
|
|
2094
|
+
if (!node.style) {
|
|
2095
|
+
return;
|
|
2264
2096
|
}
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
y
|
|
2272
|
-
}, after: {
|
|
2273
|
-
x: item.refs.x + item.refs.width,
|
|
2274
|
-
y
|
|
2275
|
-
} }));
|
|
2276
|
-
});
|
|
2097
|
+
const styles = getComputedStyle(node);
|
|
2098
|
+
for (const transformProperty of transformProperties) {
|
|
2099
|
+
node.style[transformProperty] = styles[transformProperty];
|
|
2100
|
+
}
|
|
2101
|
+
for (const child of Array.from(node.childNodes)) {
|
|
2102
|
+
this.recursElementChildren(child);
|
|
2277
2103
|
}
|
|
2278
2104
|
}
|
|
2279
|
-
|
|
2280
|
-
this.
|
|
2281
|
-
this.
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
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
|
-
});
|
|
2105
|
+
register(root) {
|
|
2106
|
+
this.root = root.nativeElement;
|
|
2107
|
+
this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
|
|
2108
|
+
}
|
|
2109
|
+
print(name = 'download', ignoreElementClass) {
|
|
2110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2111
|
+
const root = this.root;
|
|
2112
|
+
const mainContainer = this.mainContainer;
|
|
2113
|
+
// set print width
|
|
2114
|
+
const printWidth = root.offsetWidth;
|
|
2115
|
+
// set print height
|
|
2116
|
+
const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
|
|
2117
|
+
const html2canvas = (yield import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
|
|
2118
|
+
html2canvas(root, {
|
|
2119
|
+
logging: false,
|
|
2120
|
+
allowTaint: true,
|
|
2121
|
+
useCORS: true,
|
|
2122
|
+
width: printWidth,
|
|
2123
|
+
height: printHeight,
|
|
2124
|
+
ignoreElements: (element) => {
|
|
2125
|
+
if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
|
|
2126
|
+
return true;
|
|
2312
2127
|
}
|
|
2313
|
-
|
|
2128
|
+
if (element.classList.contains('gantt-calendar-today-overlay')) {
|
|
2129
|
+
return true;
|
|
2130
|
+
}
|
|
2131
|
+
},
|
|
2132
|
+
onclone: (cloneDocument) => {
|
|
2133
|
+
const ganttClass = root.className;
|
|
2134
|
+
const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
|
|
2135
|
+
const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
|
|
2136
|
+
const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-overlay-main');
|
|
2137
|
+
const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
|
|
2138
|
+
// change targetDom width
|
|
2139
|
+
cloneGanttDom.style.width = `${printWidth}px`;
|
|
2140
|
+
cloneGanttDom.style.height = `${printHeight}px`;
|
|
2141
|
+
cloneGanttDom.style.overflow = `unset`;
|
|
2142
|
+
cloneGanttContainerDom.style.backgroundColor = '#fff';
|
|
2143
|
+
cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
|
|
2144
|
+
cloneCalendarOverlay.setAttribute('style', `background: transparent`);
|
|
2145
|
+
if (cloneLinksOverlay) {
|
|
2146
|
+
cloneLinksOverlay.setAttribute('height', `${printHeight}`);
|
|
2147
|
+
cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
|
|
2148
|
+
}
|
|
2149
|
+
// setInlineStyles for svg
|
|
2150
|
+
this.setInlineStyles(cloneGanttDom);
|
|
2151
|
+
}
|
|
2152
|
+
}).then((canvas) => {
|
|
2153
|
+
const link = document.createElement('a');
|
|
2154
|
+
const dataUrl = canvas.toDataURL('image/png');
|
|
2155
|
+
link.download = `${name}.png`;
|
|
2156
|
+
link.href = dataUrl;
|
|
2157
|
+
link.click();
|
|
2158
|
+
});
|
|
2159
|
+
});
|
|
2160
|
+
}
|
|
2161
|
+
}
|
|
2162
|
+
GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2163
|
+
GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttPrintService });
|
|
2164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttPrintService, decorators: [{
|
|
2165
|
+
type: Injectable
|
|
2166
|
+
}], ctorParameters: function () { return []; } });
|
|
2167
|
+
|
|
2168
|
+
const mainHeight = 5000;
|
|
2169
|
+
class GanttCalendarComponent {
|
|
2170
|
+
constructor(ganttUpper, ngZone, elementRef) {
|
|
2171
|
+
this.ganttUpper = ganttUpper;
|
|
2172
|
+
this.ngZone = ngZone;
|
|
2173
|
+
this.elementRef = elementRef;
|
|
2174
|
+
this.headerHeight = headerHeight;
|
|
2175
|
+
this.mainHeight = mainHeight;
|
|
2176
|
+
this.todayHeight = todayHeight;
|
|
2177
|
+
this.todayWidth = todayWidth;
|
|
2178
|
+
this.todayBorderRadius = todayBorderRadius;
|
|
2179
|
+
this.viewTypes = GanttViewType;
|
|
2180
|
+
this.className = true;
|
|
2181
|
+
this.unsubscribe$ = new Subject();
|
|
2182
|
+
}
|
|
2183
|
+
get view() {
|
|
2184
|
+
return this.ganttUpper.view;
|
|
2185
|
+
}
|
|
2186
|
+
setTodayPoint() {
|
|
2187
|
+
const x = this.view.getTodayXPoint();
|
|
2188
|
+
const today = new GanttDate().getDate();
|
|
2189
|
+
const todayEle = this.elementRef.nativeElement.getElementsByClassName('gantt-calendar-today-overlay')[0];
|
|
2190
|
+
const rect = this.elementRef.nativeElement.getElementsByClassName('today-rect')[0];
|
|
2191
|
+
const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[0];
|
|
2192
|
+
if (isNumber(x)) {
|
|
2193
|
+
if (rect) {
|
|
2194
|
+
rect.style.left = `${x - todayWidth / 2}px`;
|
|
2195
|
+
rect.style.top = `${headerHeight - todayHeight}px`;
|
|
2196
|
+
rect.innerHTML = today.toString();
|
|
2197
|
+
}
|
|
2198
|
+
if (line) {
|
|
2199
|
+
line.style.left = `${x}px`;
|
|
2200
|
+
line.style.top = `${headerHeight}px`;
|
|
2201
|
+
line.style.bottom = `${-mainHeight}px`;
|
|
2314
2202
|
}
|
|
2315
|
-
}
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2203
|
+
}
|
|
2204
|
+
else {
|
|
2205
|
+
todayEle.style.display = 'none';
|
|
2206
|
+
}
|
|
2319
2207
|
}
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2208
|
+
ngOnInit() {
|
|
2209
|
+
// Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
|
|
2210
|
+
// the `onStable` will never emit any value.
|
|
2211
|
+
const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
|
|
2212
|
+
// Normally this isn't in the zone, but it can cause performance regressions for apps
|
|
2213
|
+
// using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
|
|
2214
|
+
this.ngZone.runOutsideAngular(() => {
|
|
2215
|
+
onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
2216
|
+
merge(this.ganttUpper.viewChange, this.ganttUpper.view.start$)
|
|
2217
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
2218
|
+
.subscribe(() => {
|
|
2219
|
+
this.setTodayPoint();
|
|
2220
|
+
});
|
|
2221
|
+
});
|
|
2325
2222
|
});
|
|
2326
2223
|
}
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
if (index < this.links.length - 1) {
|
|
2330
|
-
this.links.splice(index, 1);
|
|
2331
|
-
this.links.push(link);
|
|
2332
|
-
}
|
|
2333
|
-
}
|
|
2334
|
-
mouseLeavePath(link) {
|
|
2335
|
-
link.color = link.defaultColor;
|
|
2224
|
+
trackBy(index, point) {
|
|
2225
|
+
return point.text || index;
|
|
2336
2226
|
}
|
|
2337
2227
|
ngOnDestroy() {
|
|
2338
2228
|
this.unsubscribe$.next();
|
|
2339
2229
|
this.unsubscribe$.complete();
|
|
2340
2230
|
}
|
|
2341
2231
|
}
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2232
|
+
GanttCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttCalendarComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2233
|
+
GanttCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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"] }] });
|
|
2234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttCalendarComponent, decorators: [{
|
|
2345
2235
|
type: Component,
|
|
2346
|
-
args: [{ selector: 'gantt-
|
|
2236
|
+
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
2237
|
}], ctorParameters: function () {
|
|
2348
2238
|
return [{ type: GanttUpper, decorators: [{
|
|
2349
2239
|
type: Inject,
|
|
2350
2240
|
args: [GANTT_UPPER_TOKEN]
|
|
2351
|
-
}] }, { type: i0.
|
|
2352
|
-
}, propDecorators: {
|
|
2353
|
-
type: Input
|
|
2354
|
-
}], items: [{
|
|
2355
|
-
type: Input
|
|
2356
|
-
}], lineClick: [{
|
|
2357
|
-
type: Output
|
|
2358
|
-
}], ganttLinksOverlay: [{
|
|
2241
|
+
}] }, { type: i0.NgZone }, { type: i0.ElementRef }];
|
|
2242
|
+
}, propDecorators: { className: [{
|
|
2359
2243
|
type: HostBinding,
|
|
2360
|
-
args: ['class.gantt-
|
|
2244
|
+
args: ['class.gantt-calendar-overlay']
|
|
2361
2245
|
}] } });
|
|
2362
2246
|
|
|
2363
|
-
class
|
|
2364
|
-
constructor(elementRef, ganttUpper) {
|
|
2247
|
+
class NgxGanttRootComponent {
|
|
2248
|
+
constructor(elementRef, ngZone, dom, dragContainer, ganttUpper, printService) {
|
|
2365
2249
|
this.elementRef = elementRef;
|
|
2250
|
+
this.ngZone = ngZone;
|
|
2251
|
+
this.dom = dom;
|
|
2252
|
+
this.dragContainer = dragContainer;
|
|
2366
2253
|
this.ganttUpper = ganttUpper;
|
|
2367
|
-
this.
|
|
2254
|
+
this.printService = printService;
|
|
2368
2255
|
this.unsubscribe$ = new Subject();
|
|
2256
|
+
this.ganttUpper.dragContainer = dragContainer;
|
|
2257
|
+
}
|
|
2258
|
+
get view() {
|
|
2259
|
+
return this.ganttUpper.view;
|
|
2369
2260
|
}
|
|
2370
2261
|
ngOnInit() {
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2262
|
+
// Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
|
|
2263
|
+
// the `onStable` will never emit any value.
|
|
2264
|
+
const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
|
|
2265
|
+
// Normally this isn't in the zone, but it can cause performance regressions for apps
|
|
2266
|
+
// using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
|
|
2267
|
+
this.ngZone.runOutsideAngular(() => {
|
|
2268
|
+
onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
2269
|
+
this.dom.initialize(this.elementRef);
|
|
2270
|
+
if (this.printService) {
|
|
2271
|
+
this.printService.register(this.elementRef);
|
|
2272
|
+
}
|
|
2273
|
+
this.setupScrollClass();
|
|
2274
|
+
this.setupResize();
|
|
2275
|
+
this.setupViewScroll();
|
|
2276
|
+
// 优化初始化时Scroll滚动体验问题,通过透明度解决,默认透明度为0,滚动结束后恢复
|
|
2277
|
+
this.elementRef.nativeElement.style.opacity = '1';
|
|
2278
|
+
this.ganttUpper.viewChange.pipe(startWith(null), takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
2279
|
+
this.scrollToToday();
|
|
2280
|
+
});
|
|
2281
|
+
});
|
|
2374
2282
|
});
|
|
2375
2283
|
}
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
this.setPositions();
|
|
2379
|
-
}
|
|
2284
|
+
ngOnDestroy() {
|
|
2285
|
+
this.unsubscribe$.next();
|
|
2380
2286
|
}
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
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';
|
|
2287
|
+
setupViewScroll() {
|
|
2288
|
+
if (this.ganttUpper.disabledLoadOnScroll) {
|
|
2289
|
+
return;
|
|
2388
2290
|
}
|
|
2389
|
-
|
|
2390
|
-
|
|
2291
|
+
this.dom
|
|
2292
|
+
.getViewerScroll(passiveListenerOptions)
|
|
2293
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
2294
|
+
.subscribe((event) => {
|
|
2295
|
+
if (event.direction === ScrollDirection.LEFT) {
|
|
2296
|
+
const dates = this.view.addStartDate();
|
|
2297
|
+
if (dates) {
|
|
2298
|
+
event.target.scrollLeft += this.view.getDateRangeWidth(dates.start, dates.end);
|
|
2299
|
+
if (this.ganttUpper.loadOnScroll.observers) {
|
|
2300
|
+
this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
}
|
|
2304
|
+
if (event.direction === ScrollDirection.RIGHT) {
|
|
2305
|
+
const dates = this.view.addEndDate();
|
|
2306
|
+
if (dates && this.ganttUpper.loadOnScroll.observers) {
|
|
2307
|
+
this.ngZone.run(() => this.ganttUpper.loadOnScroll.emit({ start: dates.start.getUnixTime(), end: dates.end.getUnixTime() }));
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
});
|
|
2311
|
+
}
|
|
2312
|
+
setupResize() {
|
|
2313
|
+
this.dom
|
|
2314
|
+
.getResize()
|
|
2315
|
+
.pipe(takeUntil(this.unsubscribe$))
|
|
2316
|
+
.subscribe(() => {
|
|
2317
|
+
this.setupScrollClass();
|
|
2318
|
+
});
|
|
2319
|
+
}
|
|
2320
|
+
setupScrollClass() {
|
|
2321
|
+
const mainContainer = this.dom.mainContainer;
|
|
2322
|
+
const height = mainContainer.offsetHeight;
|
|
2323
|
+
const scrollHeight = mainContainer.scrollHeight;
|
|
2324
|
+
if (scrollHeight > height) {
|
|
2325
|
+
this.elementRef.nativeElement.className = 'gantt gantt-scroll';
|
|
2391
2326
|
}
|
|
2392
2327
|
else {
|
|
2328
|
+
this.elementRef.nativeElement.className = 'gantt';
|
|
2393
2329
|
}
|
|
2394
2330
|
}
|
|
2395
|
-
|
|
2396
|
-
this.
|
|
2397
|
-
this.
|
|
2398
|
-
}
|
|
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;
|
|
2331
|
+
scrollToToday() {
|
|
2332
|
+
const x = this.view.getTodayXPoint();
|
|
2333
|
+
this.dom.scrollMainContainer(x);
|
|
2419
2334
|
}
|
|
2420
2335
|
}
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2336
|
+
NgxGanttRootComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", 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 });
|
|
2337
|
+
NgxGanttRootComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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" }] });
|
|
2338
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttRootComponent, decorators: [{
|
|
2424
2339
|
type: Component,
|
|
2425
|
-
args: [{ selector: 'ngx-gantt-
|
|
2340
|
+
args: [{ selector: 'ngx-gantt-root', providers: [GanttDomService, GanttDragContainer], host: {
|
|
2341
|
+
class: 'gantt'
|
|
2342
|
+
}, 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
2343
|
}], ctorParameters: function () {
|
|
2427
|
-
return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
|
|
2344
|
+
return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: GanttDomService }, { type: GanttDragContainer }, { type: GanttUpper, decorators: [{
|
|
2428
2345
|
type: Inject,
|
|
2429
2346
|
args: [GANTT_UPPER_TOKEN]
|
|
2347
|
+
}] }, { type: GanttPrintService, decorators: [{
|
|
2348
|
+
type: Optional
|
|
2430
2349
|
}] }];
|
|
2431
|
-
}, propDecorators: {
|
|
2432
|
-
type:
|
|
2433
|
-
|
|
2350
|
+
}, propDecorators: { sideWidth: [{
|
|
2351
|
+
type: Input
|
|
2352
|
+
}], sideTemplate: [{
|
|
2353
|
+
type: ContentChild,
|
|
2354
|
+
args: ['sideTemplate', { static: true }]
|
|
2355
|
+
}], mainTemplate: [{
|
|
2356
|
+
type: ContentChild,
|
|
2357
|
+
args: ['mainTemplate', { static: true }]
|
|
2358
|
+
}], backdrop: [{
|
|
2359
|
+
type: ViewChild,
|
|
2360
|
+
args: [GanttDragBackdropComponent, { static: true, read: ElementRef }]
|
|
2434
2361
|
}] } });
|
|
2435
2362
|
|
|
2436
2363
|
const dragMinWidth = 10;
|
|
@@ -2719,16 +2646,68 @@ class GanttBarDrag {
|
|
|
2719
2646
|
this.destroy$.complete();
|
|
2720
2647
|
}
|
|
2721
2648
|
}
|
|
2722
|
-
GanttBarDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2723
|
-
GanttBarDrag.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
2724
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2649
|
+
GanttBarDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttBarDrag, deps: [{ token: i1$1.DragDrop }, { token: GanttDomService }, { token: GanttDragContainer }, { token: NgxGanttRootComponent, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2650
|
+
GanttBarDrag.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttBarDrag });
|
|
2651
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttBarDrag, decorators: [{
|
|
2725
2652
|
type: Injectable
|
|
2726
2653
|
}], ctorParameters: function () {
|
|
2727
|
-
return [{ type: i1.DragDrop }, { type: GanttDomService }, { type: GanttDragContainer }, { type: NgxGanttRootComponent, decorators: [{
|
|
2654
|
+
return [{ type: i1$1.DragDrop }, { type: GanttDomService }, { type: GanttDragContainer }, { type: NgxGanttRootComponent, decorators: [{
|
|
2728
2655
|
type: SkipSelf
|
|
2729
2656
|
}] }];
|
|
2730
2657
|
} });
|
|
2731
2658
|
|
|
2659
|
+
class GanttItemUpper {
|
|
2660
|
+
constructor(elementRef, ganttUpper) {
|
|
2661
|
+
this.elementRef = elementRef;
|
|
2662
|
+
this.ganttUpper = ganttUpper;
|
|
2663
|
+
this.firstChange = true;
|
|
2664
|
+
this.unsubscribe$ = new Subject();
|
|
2665
|
+
}
|
|
2666
|
+
ngOnInit() {
|
|
2667
|
+
this.firstChange = false;
|
|
2668
|
+
this.item.refs$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
2669
|
+
this.setPositions();
|
|
2670
|
+
});
|
|
2671
|
+
}
|
|
2672
|
+
ngOnChanges() {
|
|
2673
|
+
if (!this.firstChange) {
|
|
2674
|
+
this.setPositions();
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
setPositions() {
|
|
2678
|
+
const itemElement = this.elementRef.nativeElement;
|
|
2679
|
+
itemElement.style.left = this.item.refs.x + 'px';
|
|
2680
|
+
itemElement.style.top = this.item.refs.y + 'px';
|
|
2681
|
+
itemElement.style.width = this.item.refs.width + 'px';
|
|
2682
|
+
if (this.item.type === GanttItemType.bar) {
|
|
2683
|
+
itemElement.style.height = this.ganttUpper.styles.barHeight + 'px';
|
|
2684
|
+
}
|
|
2685
|
+
else if (this.item.type === GanttItemType.range) {
|
|
2686
|
+
itemElement.style.height = rangeHeight + 'px';
|
|
2687
|
+
}
|
|
2688
|
+
else {
|
|
2689
|
+
}
|
|
2690
|
+
}
|
|
2691
|
+
ngOnDestroy() {
|
|
2692
|
+
this.unsubscribe$.next();
|
|
2693
|
+
this.unsubscribe$.complete();
|
|
2694
|
+
}
|
|
2695
|
+
}
|
|
2696
|
+
GanttItemUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttItemUpper, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2697
|
+
GanttItemUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: GanttItemUpper, inputs: { template: "template", item: "item" }, usesOnChanges: true, ngImport: i0 });
|
|
2698
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttItemUpper, decorators: [{
|
|
2699
|
+
type: Directive
|
|
2700
|
+
}], ctorParameters: function () {
|
|
2701
|
+
return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
|
|
2702
|
+
type: Inject,
|
|
2703
|
+
args: [GANTT_UPPER_TOKEN]
|
|
2704
|
+
}] }];
|
|
2705
|
+
}, propDecorators: { template: [{
|
|
2706
|
+
type: Input
|
|
2707
|
+
}], item: [{
|
|
2708
|
+
type: Input
|
|
2709
|
+
}] } });
|
|
2710
|
+
|
|
2732
2711
|
function linearGradient(sideOrCorner, color, stop) {
|
|
2733
2712
|
return `linear-gradient(${sideOrCorner},${color} 0%,${stop} 40%)`;
|
|
2734
2713
|
}
|
|
@@ -2796,9 +2775,9 @@ class NgxGanttBarComponent extends GanttItemUpper {
|
|
|
2796
2775
|
event.stopPropagation();
|
|
2797
2776
|
}
|
|
2798
2777
|
}
|
|
2799
|
-
NgxGanttBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2800
|
-
NgxGanttBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
2801
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2778
|
+
NgxGanttBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttBarComponent, deps: [{ token: GanttDragContainer }, { token: GanttBarDrag }, { token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
2779
|
+
NgxGanttBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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"] }] });
|
|
2780
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttBarComponent, decorators: [{
|
|
2802
2781
|
type: Component,
|
|
2803
2782
|
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
2783
|
}], ctorParameters: function () {
|
|
@@ -2819,6 +2798,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
|
|
|
2819
2798
|
args: ['handle']
|
|
2820
2799
|
}] } });
|
|
2821
2800
|
|
|
2801
|
+
class NgxGanttRangeComponent extends GanttItemUpper {
|
|
2802
|
+
constructor(elementRef, ganttUpper) {
|
|
2803
|
+
super(elementRef, ganttUpper);
|
|
2804
|
+
this.ganttRangeClass = true;
|
|
2805
|
+
}
|
|
2806
|
+
}
|
|
2807
|
+
NgxGanttRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttRangeComponent, deps: [{ token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
|
|
2808
|
+
NgxGanttRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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"] }] });
|
|
2809
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttRangeComponent, decorators: [{
|
|
2810
|
+
type: Component,
|
|
2811
|
+
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" }]
|
|
2812
|
+
}], ctorParameters: function () {
|
|
2813
|
+
return [{ type: i0.ElementRef }, { type: GanttUpper, decorators: [{
|
|
2814
|
+
type: Inject,
|
|
2815
|
+
args: [GANTT_UPPER_TOKEN]
|
|
2816
|
+
}] }];
|
|
2817
|
+
}, propDecorators: { ganttRangeClass: [{
|
|
2818
|
+
type: HostBinding,
|
|
2819
|
+
args: ['class.gantt-range']
|
|
2820
|
+
}] } });
|
|
2821
|
+
|
|
2822
2822
|
class GanttMainComponent {
|
|
2823
2823
|
constructor(ganttUpper) {
|
|
2824
2824
|
this.ganttUpper = ganttUpper;
|
|
@@ -2830,9 +2830,9 @@ class GanttMainComponent {
|
|
|
2830
2830
|
return item.id || index;
|
|
2831
2831
|
}
|
|
2832
2832
|
}
|
|
2833
|
-
GanttMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2834
|
-
GanttMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
2835
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2833
|
+
GanttMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttMainComponent, deps: [{ token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
|
|
2834
|
+
GanttMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", 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", 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: "pipe", type: IsGanttRangeItemPipe, name: "isGanttRangeItem" }, { kind: "pipe", type: IsGanttBarItemPipe, name: "isGanttBarItem" }, { kind: "pipe", type: IsGanttCustomItemPipe, name: "isGanttCustomItem" }] });
|
|
2835
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: GanttMainComponent, decorators: [{
|
|
2836
2836
|
type: Component,
|
|
2837
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" }]
|
|
2838
2838
|
}], ctorParameters: function () {
|
|
@@ -2944,8 +2944,8 @@ class NgxGanttComponent extends GanttUpper {
|
|
|
2944
2944
|
}
|
|
2945
2945
|
}
|
|
2946
2946
|
}
|
|
2947
|
-
NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2948
|
-
NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
2947
|
+
NgxGanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", 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: "14.0.0", version: "14.1.0", 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
2949
|
{
|
|
2950
2950
|
provide: GANTT_UPPER_TOKEN,
|
|
2951
2951
|
useExisting: NgxGanttComponent
|
|
@@ -2954,8 +2954,8 @@ NgxGanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
|
|
|
2954
2954
|
provide: GANTT_ABSTRACT_TOKEN,
|
|
2955
2955
|
useExisting: forwardRef(() => NgxGanttComponent)
|
|
2956
2956
|
}
|
|
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",
|
|
2958
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
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", 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 });
|
|
2958
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttComponent, decorators: [{
|
|
2959
2959
|
type: Component,
|
|
2960
2960
|
args: [{ selector: 'ngx-gantt', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
2961
2961
|
{
|
|
@@ -3004,8 +3004,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImpor
|
|
|
3004
3004
|
|
|
3005
3005
|
class NgxGanttModule {
|
|
3006
3006
|
}
|
|
3007
|
-
NgxGanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
3008
|
-
NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "
|
|
3007
|
+
NgxGanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
3008
|
+
NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttModule, declarations: [NgxGanttComponent,
|
|
3009
3009
|
NgxGanttTableComponent,
|
|
3010
3010
|
NgxGanttTableColumnComponent,
|
|
3011
3011
|
GanttTableComponent,
|
|
@@ -3025,13 +3025,13 @@ NgxGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
|
|
|
3025
3025
|
NgxGanttRootComponent,
|
|
3026
3026
|
NgxGanttBarComponent,
|
|
3027
3027
|
NgxGanttRangeComponent] });
|
|
3028
|
-
NgxGanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
3028
|
+
NgxGanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttModule, providers: [
|
|
3029
3029
|
{
|
|
3030
3030
|
provide: GANTT_GLOBAL_CONFIG,
|
|
3031
3031
|
useValue: defaultConfig
|
|
3032
3032
|
}
|
|
3033
|
-
], imports: [
|
|
3034
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
3033
|
+
], imports: [CommonModule, DragDropModule] });
|
|
3034
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgxGanttModule, decorators: [{
|
|
3035
3035
|
type: NgModule,
|
|
3036
3036
|
args: [{
|
|
3037
3037
|
imports: [CommonModule, DragDropModule],
|