@worktile/gantt 12.2.0-next.1 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bundles/worktile-gantt.umd.js +175 -145
  2. package/bundles/worktile-gantt.umd.js.map +1 -1
  3. package/class/event.d.ts +2 -0
  4. package/class/index.d.ts +1 -0
  5. package/class/item.d.ts +1 -1
  6. package/class/link.d.ts +5 -5
  7. package/components/links/{paths → lines}/curve.d.ts +2 -3
  8. package/components/links/lines/factory.d.ts +5 -0
  9. package/components/links/{paths/path.d.ts → lines/line.d.ts} +1 -4
  10. package/components/links/{paths/line.d.ts → lines/straight.d.ts} +2 -2
  11. package/components/links/links.component.d.ts +1 -1
  12. package/esm2015/class/event.js +1 -1
  13. package/esm2015/class/index.js +2 -1
  14. package/esm2015/class/item.js +4 -3
  15. package/esm2015/class/link.js +6 -6
  16. package/esm2015/components/bar/bar-drag.js +35 -12
  17. package/esm2015/components/bar/bar.component.js +1 -1
  18. package/esm2015/components/links/lines/curve.js +96 -0
  19. package/esm2015/components/links/lines/factory.js +14 -0
  20. package/esm2015/components/links/lines/line.js +24 -0
  21. package/esm2015/components/links/lines/straight.js +58 -0
  22. package/esm2015/components/links/links.component.js +4 -4
  23. package/esm2015/gantt-drag-container.js +55 -38
  24. package/esm2015/gantt-upper.js +10 -2
  25. package/esm2015/gantt.component.js +7 -11
  26. package/esm2015/gantt.config.js +3 -3
  27. package/fesm2015/worktile-gantt.js +136 -124
  28. package/fesm2015/worktile-gantt.js.map +1 -1
  29. package/gantt-drag-container.d.ts +20 -8
  30. package/gantt-upper.d.ts +5 -3
  31. package/gantt.component.d.ts +1 -3
  32. package/gantt.config.d.ts +2 -2
  33. package/main.bundle.scss +31 -1
  34. package/package.json +1 -1
  35. package/components/links/paths/factory.d.ts +0 -5
  36. package/esm2015/components/links/paths/curve.js +0 -118
  37. package/esm2015/components/links/paths/factory.js +0 -14
  38. package/esm2015/components/links/paths/line.js +0 -59
  39. package/esm2015/components/links/paths/path.js +0 -31
@@ -1,9 +1,23 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { GanttDragEvent, GanttLinkDragEvent } from './class/event';
3
3
  import { GanttItemInternal } from './class/item';
4
+ import { GanttUpper } from './gantt-upper';
4
5
  import * as i0 from "@angular/core";
5
- export declare type LinkDragFrom = 'source' | 'target';
6
+ export declare enum InBarPosition {
7
+ start = "start",
8
+ finish = "finish"
9
+ }
10
+ export declare type LinkDragPosition = {
11
+ element: HTMLElement;
12
+ item: GanttItemInternal;
13
+ pos?: InBarPosition;
14
+ };
15
+ export interface LinkDragPath {
16
+ from?: LinkDragPosition;
17
+ to?: LinkDragPosition;
18
+ }
6
19
  export declare class GanttDragContainer {
20
+ ganttUpper: GanttUpper;
7
21
  dragStarted: EventEmitter<GanttDragEvent<unknown>>;
8
22
  dragMoved: EventEmitter<GanttDragEvent<unknown>>;
9
23
  dragEnded: EventEmitter<GanttDragEvent<unknown>>;
@@ -11,14 +25,12 @@ export declare class GanttDragContainer {
11
25
  linkDragEntered: EventEmitter<GanttLinkDragEvent<unknown>>;
12
26
  linkDragEnded: EventEmitter<GanttLinkDragEvent<unknown>>;
13
27
  linkDraggingId: string;
14
- private linkDragSource;
15
- private linkDragTarget;
16
- private linkDragFrom;
17
- constructor();
18
- emitLinkDragStarted(from: LinkDragFrom, item: GanttItemInternal): void;
19
- emitLinkDragEntered(item: GanttItemInternal): void;
28
+ linkDragPath: LinkDragPath;
29
+ constructor(ganttUpper: GanttUpper);
30
+ emitLinkDragStarted(from: LinkDragPosition): void;
31
+ emitLinkDragEntered(to: LinkDragPosition): void;
20
32
  emitLinkDragLeaved(): void;
21
- emitLinkDragEnded(): void;
33
+ emitLinkDragEnded(to: LinkDragPosition): void;
22
34
  static ɵfac: i0.ɵɵFactoryDeclaration<GanttDragContainer, never>;
23
35
  static ɵprov: i0.ɵɵInjectableDeclaration<GanttDragContainer>;
24
36
  }
package/gantt-upper.d.ts CHANGED
@@ -13,7 +13,7 @@ export declare abstract class GanttUpper {
13
13
  protected elementRef: ElementRef<HTMLElement>;
14
14
  protected cdr: ChangeDetectorRef;
15
15
  protected ngZone: NgZone;
16
- protected config: GanttGlobalConfig;
16
+ config: GanttGlobalConfig;
17
17
  originItems: GanttItem[];
18
18
  originGroups: GanttGroup[];
19
19
  viewType: GanttViewType;
@@ -23,6 +23,8 @@ export declare abstract class GanttUpper {
23
23
  draggable: boolean;
24
24
  styles: GanttStyles;
25
25
  viewOptions: GanttViewOptions;
26
+ set linkOptions(options: GanttLinkOptions);
27
+ get linkOptions(): GanttLinkOptions;
26
28
  disabledLoadOnScroll: boolean;
27
29
  set selectable(value: BooleanInput);
28
30
  get selectable(): boolean;
@@ -39,7 +41,6 @@ export declare abstract class GanttUpper {
39
41
  groupTemplate: TemplateRef<any>;
40
42
  groupHeaderTemplate: TemplateRef<any>;
41
43
  linkable: boolean;
42
- linkOptions: GanttLinkOptions;
43
44
  linkDragEnded: EventEmitter<GanttLinkDragEvent<unknown>>;
44
45
  view: GanttView;
45
46
  items: GanttItemInternal[];
@@ -54,6 +55,7 @@ export declare abstract class GanttUpper {
54
55
  private groupsMap;
55
56
  private _selectable;
56
57
  private _multiple;
58
+ private _linkOptions;
57
59
  ganttClass: boolean;
58
60
  constructor(elementRef: ElementRef<HTMLElement>, cdr: ChangeDetectorRef, ngZone: NgZone, config: GanttGlobalConfig);
59
61
  private createView;
@@ -77,6 +79,6 @@ export declare abstract class GanttUpper {
77
79
  getGanttItems(ids: string[]): GanttItemInternal[];
78
80
  isSelected(id: string): boolean;
79
81
  static ɵfac: i0.ɵɵFactoryDeclaration<GanttUpper, never>;
80
- static ɵdir: i0.ɵɵDirectiveDeclaration<GanttUpper, never, never, { "originItems": "items"; "originGroups": "groups"; "viewType": "viewType"; "start": "start"; "end": "end"; "showTodayLine": "showTodayLine"; "draggable": "draggable"; "styles": "styles"; "viewOptions": "viewOptions"; "disabledLoadOnScroll": "disabledLoadOnScroll"; "selectable": "selectable"; "multiple": "multiple"; }, { "loadOnScroll": "loadOnScroll"; "dragStarted": "dragStarted"; "dragMoved": "dragMoved"; "dragEnded": "dragEnded"; "barClick": "barClick"; }, ["barTemplate", "rangeTemplate", "itemTemplate", "groupTemplate", "groupHeaderTemplate"]>;
82
+ static ɵdir: i0.ɵɵDirectiveDeclaration<GanttUpper, never, never, { "originItems": "items"; "originGroups": "groups"; "viewType": "viewType"; "start": "start"; "end": "end"; "showTodayLine": "showTodayLine"; "draggable": "draggable"; "styles": "styles"; "viewOptions": "viewOptions"; "linkOptions": "linkOptions"; "disabledLoadOnScroll": "disabledLoadOnScroll"; "selectable": "selectable"; "multiple": "multiple"; }, { "loadOnScroll": "loadOnScroll"; "dragStarted": "dragStarted"; "dragMoved": "dragMoved"; "dragEnded": "dragEnded"; "barClick": "barClick"; }, ["barTemplate", "rangeTemplate", "itemTemplate", "groupTemplate", "groupHeaderTemplate"]>;
81
83
  }
82
84
  export declare const GANTT_UPPER_TOKEN: InjectionToken<GanttUpper>;
@@ -5,14 +5,12 @@ import { GanttLinkDragEvent, GanttLineClickEvent, GanttItemInternal, GanttItem,
5
5
  import { NgxGanttTableColumnComponent } from './table/gantt-column.component';
6
6
  import { NgxGanttTableComponent } from './table/gantt-table.component';
7
7
  import { GanttGlobalConfig } from './gantt.config';
8
- import { GanttLinkOptions } from './class/link';
9
8
  import * as i0 from "@angular/core";
10
9
  export declare class NgxGanttComponent extends GanttUpper implements OnInit, AfterViewInit, OnChanges, OnDestroy {
11
10
  maxLevel: number;
12
11
  async: boolean;
13
12
  childrenResolve: (GanttItem: any) => Observable<GanttItem[]>;
14
13
  linkable: boolean;
15
- linkOptions: GanttLinkOptions;
16
14
  linkDragStarted: EventEmitter<GanttLinkDragEvent<unknown>>;
17
15
  linkDragEnded: EventEmitter<GanttLinkDragEvent<unknown>>;
18
16
  lineClick: EventEmitter<GanttLineClickEvent<unknown>>;
@@ -30,5 +28,5 @@ export declare class NgxGanttComponent extends GanttUpper implements OnInit, Aft
30
28
  selectItem(selectEvent: GanttSelectedEvent): void;
31
29
  ngOnDestroy(): void;
32
30
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttComponent, "ngx-gantt", never, { "maxLevel": "maxLevel"; "async": "async"; "childrenResolve": "childrenResolve"; "linkable": "linkable"; "linkOptions": "linkOptions"; }, { "linkDragStarted": "linkDragStarted"; "linkDragEnded": "linkDragEnded"; "lineClick": "lineClick"; "selectedChange": "selectedChange"; }, ["table", "tableEmptyTemplate", "columns"], never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttComponent, "ngx-gantt", never, { "maxLevel": "maxLevel"; "async": "async"; "childrenResolve": "childrenResolve"; "linkable": "linkable"; }, { "linkDragStarted": "linkDragStarted"; "linkDragEnded": "linkDragEnded"; "lineClick": "lineClick"; "selectedChange": "selectedChange"; }, ["table", "tableEmptyTemplate", "columns"], never>;
34
32
  }
package/gantt.config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { GanttLinkPathType, GanttLinkOptions, GanttLinkType } from './class/link';
1
+ import { GanttLinkType, GanttLinkOptions, GanttLinkLineType } from './class/link';
2
2
  import { InjectionToken } from '@angular/core';
3
3
  export interface GanttDateFormat {
4
4
  week?: string;
@@ -24,7 +24,7 @@ export declare const defaultConfig: {
24
24
  linkOptions: {
25
25
  dependencyTypes: GanttLinkType[];
26
26
  showArrow: boolean;
27
- linkPathType: GanttLinkPathType;
27
+ lineType: GanttLinkLineType;
28
28
  };
29
29
  };
30
30
  export declare const GANTT_GLOBAL_CONFIG: InjectionToken<GanttGlobalConfig>;
package/main.bundle.scss CHANGED
@@ -410,6 +410,7 @@ $gantt-table-header-drag-line-color: #348fe4 !default;
410
410
  $gantt-bar-layer-append-width: 32px;
411
411
  $gantt-bar-layer-append-height: 42px;
412
412
  $gantt-bar-link-height: 16px;
413
+ $gantt-bar-link-handle-size: 16px;
413
414
  $gantt-bar-link-drop-border: 5px;
414
415
 
415
416
  @mixin link-handles {
@@ -553,6 +554,7 @@ $gantt-bar-link-drop-border: 5px;
553
554
  background: $gantt-bar-background-color;
554
555
  overflow: hidden;
555
556
  box-sizing: border-box;
557
+
556
558
  .gantt-bar-content-progress {
557
559
  position: absolute;
558
560
  left: 0;
@@ -566,7 +568,7 @@ $gantt-bar-link-drop-border: 5px;
566
568
  @include active-bar();
567
569
  }
568
570
 
569
- &-link-drop {
571
+ &-single-drop-active {
570
572
  .gantt-bar-border {
571
573
  display: block;
572
574
  }
@@ -575,6 +577,34 @@ $gantt-bar-link-drop-border: 5px;
575
577
  box-shadow: none;
576
578
  }
577
579
  }
580
+
581
+ &-drop-active {
582
+ @include active-bar();
583
+
584
+ .gantt-bar-layer {
585
+ .link-handles {
586
+ .handle {
587
+ width: $gantt-bar-link-handle-size + 10px;
588
+ height: 100%;
589
+
590
+ &:first-child {
591
+ left: -$gantt-bar-link-handle-size - 5px;
592
+ }
593
+
594
+ &:last-child {
595
+ right: -$gantt-bar-link-handle-size - 5px;
596
+ }
597
+
598
+ &:hover {
599
+ .point {
600
+ width: 12px;
601
+ height: 12px;
602
+ }
603
+ }
604
+ }
605
+ }
606
+ }
607
+ }
578
608
  }
579
609
 
580
610
  .gantt-range {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worktile/gantt",
3
- "version": "12.2.0-next.1",
3
+ "version": "12.2.0",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^12.0.0",
@@ -1,5 +0,0 @@
1
- import { GanttLinkPathType } from '../../../class/link';
2
- import { GanttUpper } from '../../../gantt-upper';
3
- import { GanttLinkPathCurve } from './curve';
4
- import { GanttLinkPathLine } from './line';
5
- export declare function generatePathFactory(type: GanttLinkPathType, ganttUpper?: GanttUpper): GanttLinkPathCurve | GanttLinkPathLine;
@@ -1,118 +0,0 @@
1
- import { __decorate, __param } from "tslib";
2
- import { Inject } from '@angular/core';
3
- import { GanttLinkType } from '../../../class/link';
4
- import { GANTT_UPPER_TOKEN } from '../../../gantt-upper';
5
- import { GanttLinkPath } from './path';
6
- let GanttLinkPathCurve = class GanttLinkPathCurve extends GanttLinkPath {
7
- constructor(ganttUpper) {
8
- super();
9
- this.ganttUpper = ganttUpper;
10
- this.bezierWeight = -0.5;
11
- }
12
- generateSSPath(source, target) {
13
- const x1 = source.before.x;
14
- const y1 = source.before.y;
15
- const x4 = target.before.x;
16
- const y4 = target.before.y;
17
- const isMirror = y4 > y1 ? 0 : 1;
18
- const radius = Math.abs(y4 - y1) / 2;
19
- if (x4 > x1) {
20
- return `M ${x1} ${y1}
21
- A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
22
- L ${x4} ${y4}`;
23
- }
24
- else {
25
- return `M ${x1} ${y1}
26
- L ${x4} ${y1}
27
- A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
28
- }
29
- }
30
- generateFFPath(source, target) {
31
- const x1 = source.after.x;
32
- const y1 = source.after.y;
33
- const x4 = target.after.x;
34
- const y4 = target.after.y;
35
- const isMirror = y4 > y1 ? 1 : 0;
36
- const radius = Math.abs(y4 - y1) / 2;
37
- if (x4 > x1) {
38
- return `M ${x1} ${y1}
39
- L ${x4} ${y1}
40
- A ${radius} ${radius} 0 1 ${isMirror} ${x4} ${y4}`;
41
- }
42
- else {
43
- return `M ${x1} ${y1}
44
- A ${radius} ${radius} 0 1 ${isMirror} ${x1} ${y4}
45
- L ${x4} ${y4}`;
46
- }
47
- }
48
- generateFSAndSFPath(source, target, type) {
49
- let x1 = source.after.x;
50
- let y1 = source.after.y;
51
- let x4 = target.before.x;
52
- let y4 = target.before.y;
53
- if (type === GanttLinkType.sf) {
54
- x1 = target.after.x;
55
- y1 = target.after.y;
56
- x4 = source.before.x;
57
- y4 = source.before.y;
58
- }
59
- const dx = Math.abs(x4 - x1) * this.bezierWeight;
60
- const x2 = x1 - dx;
61
- const x3 = x4 + dx;
62
- const centerX = (x1 + x4) / 2;
63
- const centerY = (y1 + y4) / 2;
64
- let controlX = this.ganttUpper.styles.lineHeight / 2;
65
- const controlY = this.ganttUpper.styles.lineHeight / 2;
66
- if (x1 >= x4) {
67
- if (y4 > y1) {
68
- if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
69
- return `M ${x1} ${y1}
70
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 + controlX} ${x1} ${y1 + controlY}
71
- L ${x4} ${y4 - controlY}
72
- C ${x4 - controlY} ${y4 - controlY} ${x4 - controlX} ${y4} ${x4} ${y4}`;
73
- }
74
- else {
75
- controlX = this.ganttUpper.styles.lineHeight;
76
- return `M ${x1} ${y1}
77
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 + controlX} ${centerX} ${centerY}
78
- C ${x4 - controlX} ${y4 - controlX} ${x4 - controlX} ${y4} ${x4} ${y4}
79
- `;
80
- }
81
- }
82
- else {
83
- if (Math.abs(y4 - y1) <= this.ganttUpper.styles.lineHeight) {
84
- return `M ${x1} ${y1}
85
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 - controlX} ${x1} ${y1 - controlY}
86
- L ${x4} ${y4 + controlY}
87
- C ${x4 - controlY} ${y4 + controlY} ${x4 - controlX} ${y4} ${x4} ${y4}
88
- `;
89
- }
90
- else {
91
- controlX = this.ganttUpper.styles.lineHeight;
92
- return `M ${x1} ${y1}
93
- C ${x1 + controlX} ${y1} ${x1 + controlX} ${y1 - controlX} ${centerX} ${centerY}
94
- C ${x4 - controlX} ${y4 + controlX} ${x4 - controlX} ${y4} ${x4} ${y4}
95
- `;
96
- }
97
- }
98
- }
99
- else if (x4 - x1 < 100) {
100
- const radius = Math.abs(y4 - y1) / 4;
101
- let lindWidth = x4 - x1 - radius;
102
- lindWidth = Math.max(lindWidth, radius);
103
- return `M ${x1} ${y1}
104
- L ${x1 + lindWidth} ${y1}
105
- A ${radius} ${radius} 0 1 ${y4 > y1 ? 1 : 0} ${x1 + lindWidth} ${y4 > y1 ? y1 + 2 * radius : y1 - 2 * radius}
106
- L ${x4 - lindWidth} ${y4 > y1 ? y1 + 2 * radius : y1 - 2 * radius}
107
- A ${radius} ${radius} 0 1 ${y4 > y1 ? 0 : 1} ${x4 - lindWidth} ${y4}
108
- L ${x4} ${y4}
109
- `;
110
- }
111
- return `M ${x1} ${y1} C ${x2} ${y1} ${x3} ${y4} ${x4} ${y4}`;
112
- }
113
- };
114
- GanttLinkPathCurve = __decorate([
115
- __param(0, Inject(GANTT_UPPER_TOKEN))
116
- ], GanttLinkPathCurve);
117
- export { GanttLinkPathCurve };
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VydmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9saW5rcy9wYXRocy9jdXJ2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25FLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFdkMsSUFBYSxrQkFBa0IsR0FBL0IsTUFBYSxrQkFBbUIsU0FBUSxhQUFhO0lBR2pELFlBQStDLFVBQXNCO1FBQ2pFLEtBQUssRUFBRSxDQUFDO1FBRG1DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFGN0QsaUJBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUk1QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQXFCLEVBQUUsTUFBcUI7UUFDdkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU07d0JBQ3hHLEVBQUUsR0FBRyxTQUFTLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTTt3QkFDN0QsTUFBTSxJQUFJLE1BQU0sUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxJQUFJLEVBQUU7d0JBQy9ELEVBQUUsSUFBSSxFQUFFO3FCQUNYLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDakUsQ0FBQztDQUNKLENBQUE7QUE5R1ksa0JBQWtCO0lBR2QsV0FBQSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtHQUg3QixrQkFBa0IsQ0E4RzlCO1NBOUdZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHRMaW5rSXRlbSwgR2FudHRMaW5rVHlwZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzL2xpbmsnO1xuaW1wb3J0IHsgR2FudHRVcHBlciwgR0FOVFRfVVBQRVJfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi9nYW50dC11cHBlcic7XG5pbXBvcnQgeyBHYW50dExpbmtQYXRoIH0gZnJvbSAnLi9wYXRoJztcblxuZXhwb3J0IGNsYXNzIEdhbnR0TGlua1BhdGhDdXJ2ZSBleHRlbmRzIEdhbnR0TGlua1BhdGgge1xuICAgIHByaXZhdGUgYmV6aWVyV2VpZ2h0ID0gLTAuNTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHByaXZhdGUgZ2FudHRVcHBlcjogR2FudHRVcHBlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGdlbmVyYXRlU1NQYXRoKHNvdXJjZTogR2FudHRMaW5rSXRlbSwgdGFyZ2V0OiBHYW50dExpbmtJdGVtKSB7XG4gICAgICAgIGNvbnN0IHgxID0gc291cmNlLmJlZm9yZS54O1xuICAgICAgICBjb25zdCB5MSA9IHNvdXJjZS5iZWZvcmUueTtcbiAgICAgICAgY29uc3QgeDQgPSB0YXJnZXQuYmVmb3JlLng7XG4gICAgICAgIGNvbnN0IHk0ID0gdGFyZ2V0LmJlZm9yZS55O1xuICAgICAgICBjb25zdCBpc01pcnJvciA9IHk0ID4geTEgPyAwIDogMTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5hYnMoeTQgLSB5MSkgLyAyO1xuXG4gICAgICAgIGlmICh4NCA+IHgxKSB7XG4gICAgICAgICAgICByZXR1cm4gYE0gJHt4MX0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMSAke2lzTWlycm9yfSAke3gxfSAke3k0fVxuICAgICAgICAgICAgICAgICAgICBMICR7eDR9ICR7eTR9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfVxuICAgICAgICAgICAgICAgICAgICBMICR7eDR9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgIEEgJHtyYWRpdXN9ICR7cmFkaXVzfSAwIDEgJHtpc01pcnJvcn0gJHt4NH0gJHt5NH1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlbmVyYXRlRkZQYXRoKHNvdXJjZTogR2FudHRMaW5rSXRlbSwgdGFyZ2V0OiBHYW50dExpbmtJdGVtKSB7XG4gICAgICAgIGNvbnN0IHgxID0gc291cmNlLmFmdGVyLng7XG4gICAgICAgIGNvbnN0IHkxID0gc291cmNlLmFmdGVyLnk7XG4gICAgICAgIGNvbnN0IHg0ID0gdGFyZ2V0LmFmdGVyLng7XG4gICAgICAgIGNvbnN0IHk0ID0gdGFyZ2V0LmFmdGVyLnk7XG4gICAgICAgIGNvbnN0IGlzTWlycm9yID0geTQgPiB5MSA/IDEgOiAwO1xuICAgICAgICBjb25zdCByYWRpdXMgPSBNYXRoLmFicyh5NCAtIHkxKSAvIDI7XG4gICAgICAgIGlmICh4NCA+IHgxKSB7XG4gICAgICAgICAgICByZXR1cm4gYE0gJHt4MX0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3kxfVxuICAgICAgICAgICAgICAgICAgICBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAxICR7aXNNaXJyb3J9ICR7eDR9ICR7eTR9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfVxuICAgICAgICAgICAgICAgICAgICBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAxICR7aXNNaXJyb3J9ICR7eDF9ICR7eTR9XG4gICAgICAgICAgICAgICAgICAgIEwgJHt4NH0gJHt5NH1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVGU0FuZFNGUGF0aChzb3VyY2U6IEdhbnR0TGlua0l0ZW0sIHRhcmdldDogR2FudHRMaW5rSXRlbSwgdHlwZT86IEdhbnR0TGlua1R5cGUpIHtcbiAgICAgICAgbGV0IHgxID0gc291cmNlLmFmdGVyLng7XG4gICAgICAgIGxldCB5MSA9IHNvdXJjZS5hZnRlci55O1xuICAgICAgICBsZXQgeDQgPSB0YXJnZXQuYmVmb3JlLng7XG4gICAgICAgIGxldCB5NCA9IHRhcmdldC5iZWZvcmUueTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gR2FudHRMaW5rVHlwZS5zZikge1xuICAgICAgICAgICAgeDEgPSB0YXJnZXQuYWZ0ZXIueDtcbiAgICAgICAgICAgIHkxID0gdGFyZ2V0LmFmdGVyLnk7XG4gICAgICAgICAgICB4NCA9IHNvdXJjZS5iZWZvcmUueDtcbiAgICAgICAgICAgIHk0ID0gc291cmNlLmJlZm9yZS55O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHggPSBNYXRoLmFicyh4NCAtIHgxKSAqIHRoaXMuYmV6aWVyV2VpZ2h0O1xuXG4gICAgICAgIGNvbnN0IHgyID0geDEgLSBkeDtcbiAgICAgICAgY29uc3QgeDMgPSB4NCArIGR4O1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gKHgxICsgeDQpIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9ICh5MSArIHk0KSAvIDI7XG5cbiAgICAgICAgbGV0IGNvbnRyb2xYID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgY29udHJvbFkgPSB0aGlzLmdhbnR0VXBwZXIuc3R5bGVzLmxpbmVIZWlnaHQgLyAyO1xuXG4gICAgICAgIGlmICh4MSA+PSB4NCkge1xuICAgICAgICAgICAgaWYgKHk0ID4geTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeTQgLSB5MSkgPD0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfVxuICAgICAgICAgICAgICAgICAgICBDICR7eDEgKyBjb250cm9sWH0gJHt5MX0gJHt4MSArIGNvbnRyb2xYfSAke3kxICsgY29udHJvbFh9ICR7eDF9ICR7eTEgKyBjb250cm9sWX1cbiAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0IC0gY29udHJvbFl9XG4gICAgICAgICAgICAgICAgICAgIEMgJHt4NCAtIGNvbnRyb2xZfSAke3k0IC0gY29udHJvbFl9ICAke3g0IC0gY29udHJvbFh9ICR7eTR9ICR7eDR9ICR7eTR9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sWCA9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgIEMgJHt4MSArIGNvbnRyb2xYfSAke3kxfSAke3gxICsgY29udHJvbFh9ICR7eTEgKyBjb250cm9sWH0gJHtjZW50ZXJYfSAke2NlbnRlcll9XG4gICAgICAgICAgICAgICAgICAgIEMgJHt4NCAtIGNvbnRyb2xYfSAke3k0IC0gY29udHJvbFh9ICR7eDQgLSBjb250cm9sWH0gJHt5NH0gJHt4NH0gJHt5NH1cbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh5NCAtIHkxKSA8PSB0aGlzLmdhbnR0VXBwZXIuc3R5bGVzLmxpbmVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgIEMgJHt4MSArIGNvbnRyb2xYfSAke3kxfSAke3gxICsgY29udHJvbFh9ICR7eTEgLSBjb250cm9sWH0gJHt4MX0gJHt5MSAtIGNvbnRyb2xZfVxuICAgICAgICAgICAgICAgICAgICBMICR7eDR9ICR7eTQgKyBjb250cm9sWX1cbiAgICAgICAgICAgICAgICAgICAgQyAke3g0IC0gY29udHJvbFl9ICR7eTQgKyBjb250cm9sWX0gJHt4NCAtIGNvbnRyb2xYfSAke3k0fSAke3g0fSAke3k0fVxuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xYID0gdGhpcy5nYW50dFVwcGVyLnN0eWxlcy5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE0gJHt4MX0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgQyAke3gxICsgY29udHJvbFh9ICR7eTF9ICR7eDEgKyBjb250cm9sWH0gJHt5MSAtIGNvbnRyb2xYfSAke2NlbnRlclh9ICR7Y2VudGVyWX1cbiAgICAgICAgICAgICAgICAgICAgQyAke3g0IC0gY29udHJvbFh9ICR7eTQgKyBjb250cm9sWH0gJHt4NCAtIGNvbnRyb2xYfSAke3k0fSAke3g0fSAke3k0fVxuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh4NCAtIHgxIDwgMTAwKSB7XG4gICAgICAgICAgICBjb25zdCByYWRpdXMgPSBNYXRoLmFicyh5NCAtIHkxKSAvIDQ7XG4gICAgICAgICAgICBsZXQgbGluZFdpZHRoID0geDQgLSB4MSAtIHJhZGl1cztcbiAgICAgICAgICAgIGxpbmRXaWR0aCA9IE1hdGgubWF4KGxpbmRXaWR0aCwgcmFkaXVzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgIEwgJHt4MSArIGxpbmRXaWR0aH0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMSAke3k0ID4geTEgPyAxIDogMH0gJHt4MSArIGxpbmRXaWR0aH0gJHt5NCA+IHkxID8geTEgKyAyICogcmFkaXVzIDogeTEgLSAyICogcmFkaXVzfVxuICAgICAgICAgICAgICAgICAgICBMICR7eDQgLSBsaW5kV2lkdGh9ICR7eTQgPiB5MSA/IHkxICsgMiAqIHJhZGl1cyA6IHkxIC0gMiAqIHJhZGl1c31cbiAgICAgICAgICAgICAgICAgICAgQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMSAke3k0ID4geTEgPyAwIDogMX0gJHt4NCAtIGxpbmRXaWR0aH0gJHt5NH1cbiAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0fVxuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgTSAke3gxfSAke3kxfSBDICR7eDJ9ICR7eTF9ICR7eDN9ICR7eTR9ICR7eDR9ICR7eTR9YDtcbiAgICB9XG59XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { GanttLinkPathType } from '../../../class/link';
2
- import { GanttLinkPathCurve } from './curve';
3
- import { GanttLinkPathLine } from './line';
4
- export function generatePathFactory(type, ganttUpper) {
5
- switch (type) {
6
- case GanttLinkPathType.curve:
7
- return new GanttLinkPathCurve(ganttUpper);
8
- case GanttLinkPathType.line:
9
- return new GanttLinkPathLine();
10
- default:
11
- throw new Error('gantt link path type invalid');
12
- }
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2xpbmtzL3BhdGhzL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBdUIsRUFBRSxVQUF1QjtJQUNoRixRQUFRLElBQUksRUFBRTtRQUNWLEtBQUssaUJBQWlCLENBQUMsS0FBSztZQUN4QixPQUFPLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO1lBQ3ZCLE9BQU8sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ25DO1lBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbnR0TGlua1BhdGhUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3MvbGluayc7XG5pbXBvcnQgeyBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rUGF0aEN1cnZlIH0gZnJvbSAnLi9jdXJ2ZSc7XG5pbXBvcnQgeyBHYW50dExpbmtQYXRoTGluZSB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBhdGhGYWN0b3J5KHR5cGU6IEdhbnR0TGlua1BhdGhUeXBlLCBnYW50dFVwcGVyPzogR2FudHRVcHBlcikge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEdhbnR0TGlua1BhdGhUeXBlLmN1cnZlOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBHYW50dExpbmtQYXRoQ3VydmUoZ2FudHRVcHBlcik7XG4gICAgICAgIGNhc2UgR2FudHRMaW5rUGF0aFR5cGUubGluZTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgR2FudHRMaW5rUGF0aExpbmUoKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2FudHQgbGluayBwYXRoIHR5cGUgaW52YWxpZCcpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,59 +0,0 @@
1
- import { GanttLinkPath } from './path';
2
- import { GanttLinkType } from '../../../class/link';
3
- export class GanttLinkPathLine extends GanttLinkPath {
4
- constructor() {
5
- super();
6
- this.pathControl = 20;
7
- }
8
- generateSSPath(source, target) {
9
- const x1 = source.before.x;
10
- const y1 = source.before.y;
11
- const x4 = target.before.x;
12
- const y4 = target.before.y;
13
- const control = this.pathControl;
14
- const centerY = (y1 + y4) / 2;
15
- return `M ${x1} ${y1}
16
- L ${x4 > x1 ? x1 - control : x4 - control} ${y1}
17
- L ${x4 > x1 ? x1 - control : x4 - control} ${y4}
18
- L ${x4} ${y4}`;
19
- }
20
- generateFFPath(source, target) {
21
- const x1 = source.after.x;
22
- const y1 = source.after.y;
23
- const x4 = target.after.x;
24
- const y4 = target.after.y;
25
- const control = this.pathControl;
26
- return `M ${x1} ${y1}
27
- L ${x4 > x1 ? x4 + control : x1 + control} ${y1}
28
- L ${x4 > x1 ? x4 + control : x1 + control} ${y4}
29
- L ${x4} ${y4}`;
30
- }
31
- generateFSAndSFPath(source, target, type) {
32
- let x1 = source.after.x;
33
- let y1 = source.after.y;
34
- let x4 = target.before.x;
35
- let y4 = target.before.y;
36
- const control = this.pathControl;
37
- if (type === GanttLinkType.sf) {
38
- x1 = target.after.x;
39
- y1 = target.after.y;
40
- x4 = source.before.x;
41
- y4 = source.before.y;
42
- }
43
- if (x4 - x1 >= 40) {
44
- return `M ${x1} ${y1}
45
- L ${x1 + control} ${y1}
46
- L ${x1 + control} ${y4}
47
- L ${x4} ${y4}`;
48
- }
49
- else {
50
- return `M ${x1} ${y1}
51
- L ${x1 + control} ${y1}
52
- L ${x1 + control} ${y4 > y1 ? y1 + control : y1 - control}
53
- L ${x4 - control} ${y4 > y1 ? y1 + control : y1 - control}
54
- L ${x4 - control} ${y4}
55
- L ${x4} ${y4}`;
56
- }
57
- }
58
- }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2xpbmtzL3BhdGhzL2xpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5FLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxhQUFhO0lBR2hEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFISixnQkFBVyxHQUFHLEVBQUUsQ0FBQztJQUl6QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQXFCLEVBQUUsTUFBcUI7UUFDdkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUIsT0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFOzRCQUNBLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRTs0QkFDM0MsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFOzRCQUMzQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFxQixFQUFFLE1BQXFCO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFakMsT0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFOzRCQUNBLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRTs0QkFDM0MsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFOzRCQUMzQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQXFCLEVBQUUsTUFBcUIsRUFBRSxJQUFvQjtRQUNsRixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRWpDLElBQUksSUFBSSxLQUFLLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNwQixFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDckIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNmLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRTs0QkFDSixFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUU7NEJBQ2xCLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRTs0QkFDbEIsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQzlCO2FBQU07WUFDSCxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUU7NEJBQ0osRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFOzRCQUNsQixFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPOzRCQUNyRCxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPOzRCQUNyRCxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUU7NEJBQ2xCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgR2FudHRMaW5rUGF0aCB9IGZyb20gJy4vcGF0aCc7XG5pbXBvcnQgeyBHYW50dExpbmtJdGVtLCBHYW50dExpbmtUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3MvbGluayc7XG5cbmV4cG9ydCBjbGFzcyBHYW50dExpbmtQYXRoTGluZSBleHRlbmRzIEdhbnR0TGlua1BhdGgge1xuICAgIHByaXZhdGUgcGF0aENvbnRyb2wgPSAyMDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGdlbmVyYXRlU1NQYXRoKHNvdXJjZTogR2FudHRMaW5rSXRlbSwgdGFyZ2V0OiBHYW50dExpbmtJdGVtKSB7XG4gICAgICAgIGNvbnN0IHgxID0gc291cmNlLmJlZm9yZS54O1xuICAgICAgICBjb25zdCB5MSA9IHNvdXJjZS5iZWZvcmUueTtcbiAgICAgICAgY29uc3QgeDQgPSB0YXJnZXQuYmVmb3JlLng7XG4gICAgICAgIGNvbnN0IHk0ID0gdGFyZ2V0LmJlZm9yZS55O1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5wYXRoQ29udHJvbDtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9ICh5MSArIHk0KSAvIDI7XG5cbiAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDQgPiB4MSA/IHgxIC0gY29udHJvbCA6IHg0IC0gY29udHJvbH0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEwgJHt4NCA+IHgxID8geDEgLSBjb250cm9sIDogeDQgLSBjb250cm9sfSAke3k0fVxuICAgICAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0fWA7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVGRlBhdGgoc291cmNlOiBHYW50dExpbmtJdGVtLCB0YXJnZXQ6IEdhbnR0TGlua0l0ZW0pIHtcbiAgICAgICAgY29uc3QgeDEgPSBzb3VyY2UuYWZ0ZXIueDtcbiAgICAgICAgY29uc3QgeTEgPSBzb3VyY2UuYWZ0ZXIueTtcbiAgICAgICAgY29uc3QgeDQgPSB0YXJnZXQuYWZ0ZXIueDtcbiAgICAgICAgY29uc3QgeTQgPSB0YXJnZXQuYWZ0ZXIueTtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMucGF0aENvbnRyb2w7XG5cbiAgICAgICAgcmV0dXJuIGBNICR7eDF9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDQgPiB4MSA/IHg0ICsgY29udHJvbCA6IHgxICsgY29udHJvbH0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEwgJHt4NCA+IHgxID8geDQgKyBjb250cm9sIDogeDEgKyBjb250cm9sfSAke3k0fVxuICAgICAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0fWA7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVGU0FuZFNGUGF0aChzb3VyY2U6IEdhbnR0TGlua0l0ZW0sIHRhcmdldDogR2FudHRMaW5rSXRlbSwgdHlwZT86IEdhbnR0TGlua1R5cGUpIHtcbiAgICAgICAgbGV0IHgxID0gc291cmNlLmFmdGVyLng7XG4gICAgICAgIGxldCB5MSA9IHNvdXJjZS5hZnRlci55O1xuICAgICAgICBsZXQgeDQgPSB0YXJnZXQuYmVmb3JlLng7XG4gICAgICAgIGxldCB5NCA9IHRhcmdldC5iZWZvcmUueTtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMucGF0aENvbnRyb2w7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IEdhbnR0TGlua1R5cGUuc2YpIHtcbiAgICAgICAgICAgIHgxID0gdGFyZ2V0LmFmdGVyLng7XG4gICAgICAgICAgICB5MSA9IHRhcmdldC5hZnRlci55O1xuICAgICAgICAgICAgeDQgPSBzb3VyY2UuYmVmb3JlLng7XG4gICAgICAgICAgICB5NCA9IHNvdXJjZS5iZWZvcmUueTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh4NCAtIHgxID49IDQwKSB7XG4gICAgICAgICAgICByZXR1cm4gYE0gJHt4MX0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEwgJHt4MSArIGNvbnRyb2x9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDEgKyBjb250cm9sfSAke3k0fVxuICAgICAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYE0gJHt4MX0gJHt5MX1cbiAgICAgICAgICAgICAgICAgICAgICAgIEwgJHt4MSArIGNvbnRyb2x9ICR7eTF9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDEgKyBjb250cm9sfSAke3k0ID4geTEgPyB5MSArIGNvbnRyb2wgOiB5MSAtIGNvbnRyb2x9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDQgLSBjb250cm9sfSAke3k0ID4geTEgPyB5MSArIGNvbnRyb2wgOiB5MSAtIGNvbnRyb2x9XG4gICAgICAgICAgICAgICAgICAgICAgICBMICR7eDQgLSBjb250cm9sfSAke3k0fVxuICAgICAgICAgICAgICAgICAgICAgICAgTCAke3g0fSAke3k0fWA7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,31 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { GanttLinkType } from '../../../class/link';
3
- import * as i0 from "@angular/core";
4
- export class GanttLinkPath {
5
- constructor() { }
6
- generatePath(source, target, type) {
7
- if (source.before && source.after && target.before && target.after) {
8
- let path = '';
9
- switch (type) {
10
- case GanttLinkType.ss:
11
- path = this.generateSSPath(source, target);
12
- break;
13
- case GanttLinkType.ff:
14
- path = this.generateFFPath(source, target);
15
- break;
16
- case GanttLinkType.sf:
17
- path = this.generateFSAndSFPath(source, target, type);
18
- break;
19
- default:
20
- path = this.generateFSAndSFPath(source, target);
21
- }
22
- return path;
23
- }
24
- }
25
- }
26
- GanttLinkPath.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttLinkPath, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
27
- GanttLinkPath.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttLinkPath });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttLinkPath, decorators: [{
29
- type: Injectable
30
- }], ctorParameters: function () { return []; } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2xpbmtzL3BhdGhzL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWlCLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUduRSxNQUFNLE9BQWdCLGFBQWE7SUFDL0IsZ0JBQWUsQ0FBQztJQVFoQixZQUFZLENBQUMsTUFBcUIsRUFBRSxNQUFxQixFQUFFLElBQW1CO1FBQzFFLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNoRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFFZCxRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLGFBQWEsQ0FBQyxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzNDLE1BQU07Z0JBQ1YsS0FBSyxhQUFhLENBQUMsRUFBRTtvQkFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUMzQyxNQUFNO2dCQUVWLEtBQUssYUFBYSxDQUFDLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdEQsTUFBTTtnQkFDVjtvQkFDSSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN2RDtZQUVELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDOzswR0E5QmlCLGFBQWE7OEdBQWIsYUFBYTsyRkFBYixhQUFhO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHRMaW5rSXRlbSwgR2FudHRMaW5rVHlwZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzL2xpbmsnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2FudHRMaW5rUGF0aCB7XG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgYWJzdHJhY3QgZ2VuZXJhdGVTU1BhdGgoc291cmNlOiBHYW50dExpbmtJdGVtLCB0YXJnZXQ6IEdhbnR0TGlua0l0ZW0pOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBnZW5lcmF0ZUZGUGF0aChzb3VyY2U6IEdhbnR0TGlua0l0ZW0sIHRhcmdldDogR2FudHRMaW5rSXRlbSk6IHN0cmluZztcblxuICAgIGFic3RyYWN0IGdlbmVyYXRlRlNBbmRTRlBhdGgoc291cmNlOiBHYW50dExpbmtJdGVtLCB0YXJnZXQ6IEdhbnR0TGlua0l0ZW0sIHR5cGU/OiBHYW50dExpbmtUeXBlKTogc3RyaW5nO1xuXG4gICAgZ2VuZXJhdGVQYXRoKHNvdXJjZTogR2FudHRMaW5rSXRlbSwgdGFyZ2V0OiBHYW50dExpbmtJdGVtLCB0eXBlOiBHYW50dExpbmtUeXBlKSB7XG4gICAgICAgIGlmIChzb3VyY2UuYmVmb3JlICYmIHNvdXJjZS5hZnRlciAmJiB0YXJnZXQuYmVmb3JlICYmIHRhcmdldC5hZnRlcikge1xuICAgICAgICAgICAgbGV0IHBhdGggPSAnJztcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBHYW50dExpbmtUeXBlLnNzOlxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5nZW5lcmF0ZVNTUGF0aChzb3VyY2UsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgR2FudHRMaW5rVHlwZS5mZjpcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuZ2VuZXJhdGVGRlBhdGgoc291cmNlLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgR2FudHRMaW5rVHlwZS5zZjpcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuZ2VuZXJhdGVGU0FuZFNGUGF0aChzb3VyY2UsIHRhcmdldCwgdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmdlbmVyYXRlRlNBbmRTRlBhdGgoc291cmNlLCB0YXJnZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==