@worktile/gantt 15.0.0 → 15.1.0-next.1
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/class/event.d.ts +13 -0
- package/class/item.d.ts +7 -1
- package/components/bar/bar-drag.d.ts +10 -0
- package/components/bar/bar.component.d.ts +2 -1
- package/components/bar/bar.component.scss +22 -0
- package/components/calendar/calendar.scss +91 -0
- package/components/calendar/grid/calendar-grid.component.d.ts +24 -0
- package/components/calendar/header/calendar-header.component.d.ts +21 -0
- package/components/icon/icons.d.ts +1 -0
- package/components/links/links.component.d.ts +5 -5
- package/components/loader/loader.component.d.ts +5 -0
- package/components/loader/loader.component.scss +90 -0
- package/components/main/gantt-main.component.d.ts +3 -3
- package/components/table/body/gantt-table-body.component.d.ts +58 -0
- package/components/table/gantt-table.component.scss +169 -85
- package/components/table/gantt-table.scss +271 -0
- package/components/table/header/gantt-table-header.component.d.ts +31 -0
- package/esm2020/class/event.mjs +5 -1
- package/esm2020/class/item.mjs +9 -4
- package/esm2020/components/bar/bar-drag.mjs +106 -42
- package/esm2020/components/bar/bar.component.mjs +8 -2
- package/esm2020/components/calendar/grid/calendar-grid.component.mjs +71 -0
- package/esm2020/components/calendar/header/calendar-header.component.mjs +67 -0
- package/esm2020/components/icon/icons.mjs +4 -2
- package/esm2020/components/links/links.component.mjs +72 -54
- package/esm2020/components/loader/loader.component.mjs +29 -0
- package/esm2020/components/main/gantt-main.component.mjs +5 -5
- package/esm2020/components/table/body/gantt-table-body.component.mjs +298 -0
- package/esm2020/components/table/header/gantt-table-header.component.mjs +140 -0
- package/esm2020/gantt-dom.service.mjs +8 -12
- package/esm2020/gantt-item-upper.mjs +15 -6
- package/esm2020/gantt-print.service.mjs +2 -2
- package/esm2020/gantt-upper.mjs +18 -15
- package/esm2020/gantt.component.mjs +143 -25
- package/esm2020/gantt.module.mjs +28 -10
- package/esm2020/public-api.mjs +2 -1
- package/esm2020/root.component.mjs +10 -8
- package/esm2020/table/gantt-table.component.mjs +12 -4
- package/esm2020/utils/helpers.mjs +11 -1
- package/fesm2015/worktile-gantt.mjs +969 -378
- package/fesm2015/worktile-gantt.mjs.map +1 -1
- package/fesm2020/worktile-gantt.mjs +959 -380
- package/fesm2020/worktile-gantt.mjs.map +1 -1
- package/gantt-dom.service.d.ts +1 -0
- package/gantt-item-upper.d.ts +3 -2
- package/gantt-upper.d.ts +4 -1
- package/gantt.component.d.ts +26 -8
- package/gantt.component.scss +39 -0
- package/gantt.module.d.ts +19 -15
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/root.component.d.ts +1 -1
- package/styles/index.scss +5 -2
- package/styles/variables.scss +12 -7
- package/table/gantt-table.component.d.ts +5 -2
- package/components/calendar/calendar.component.d.ts +0 -26
- package/components/table/gantt-table.component.d.ts +0 -42
- package/esm2020/components/calendar/calendar.component.mjs +0 -88
- package/esm2020/components/table/gantt-table.component.mjs +0 -166
package/gantt-dom.service.d.ts
CHANGED
package/gantt-item-upper.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef, TemplateRef, OnInit, OnChanges, OnDestroy } from '@angular/core';
|
|
1
|
+
import { ElementRef, TemplateRef, OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { GanttItemInternal } from './class';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { GanttUpper } from './gantt-upper';
|
|
@@ -12,7 +12,8 @@ export declare abstract class GanttItemUpper implements OnChanges, OnInit, OnDes
|
|
|
12
12
|
unsubscribe$: Subject<void>;
|
|
13
13
|
constructor(elementRef: ElementRef<HTMLElement>, ganttUpper: GanttUpper);
|
|
14
14
|
ngOnInit(): void;
|
|
15
|
-
ngOnChanges(): void;
|
|
15
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
16
|
+
private itemChange;
|
|
16
17
|
private setPositions;
|
|
17
18
|
ngOnDestroy(): void;
|
|
18
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<GanttItemUpper, never>;
|
package/gantt-upper.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { GanttLinkOptions } from './class/link';
|
|
|
10
10
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
11
11
|
import { BooleanInput } from '@angular/cdk/coercion';
|
|
12
12
|
import { GanttBaselineItem, GanttBaselineItemInternal } from './class/baseline';
|
|
13
|
+
import { NgxGanttTableComponent } from './table/gantt-table.component';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
export declare abstract class GanttUpper implements OnChanges, OnInit, OnDestroy {
|
|
15
16
|
protected elementRef: ElementRef<HTMLElement>;
|
|
@@ -49,6 +50,7 @@ export declare abstract class GanttUpper implements OnChanges, OnInit, OnDestroy
|
|
|
49
50
|
groupHeaderTemplate: TemplateRef<any>;
|
|
50
51
|
toolbarTemplate: TemplateRef<any>;
|
|
51
52
|
linkable: boolean;
|
|
53
|
+
computeAllRefs: boolean;
|
|
52
54
|
linkDragEnded: EventEmitter<GanttLinkDragEvent<unknown>>;
|
|
53
55
|
view: GanttView;
|
|
54
56
|
items: GanttItemInternal[];
|
|
@@ -60,6 +62,7 @@ export declare abstract class GanttUpper implements OnChanges, OnInit, OnDestroy
|
|
|
60
62
|
dragContainer: GanttDragContainer;
|
|
61
63
|
unsubscribe$: Subject<void>;
|
|
62
64
|
selectionModel: SelectionModel<string>;
|
|
65
|
+
table?: NgxGanttTableComponent;
|
|
63
66
|
private groupsMap;
|
|
64
67
|
private _selectable;
|
|
65
68
|
private _multiple;
|
|
@@ -73,8 +76,8 @@ export declare abstract class GanttUpper implements OnChanges, OnInit, OnDestroy
|
|
|
73
76
|
private setupExpandedState;
|
|
74
77
|
private getViewDate;
|
|
75
78
|
computeRefs(): void;
|
|
76
|
-
private expandGroups;
|
|
77
79
|
private initSelectionModel;
|
|
80
|
+
expandGroups(expanded: boolean): void;
|
|
78
81
|
ngOnInit(): void;
|
|
79
82
|
ngOnChanges(changes: SimpleChanges): void;
|
|
80
83
|
ngOnDestroy(): void;
|
package/gantt.component.d.ts
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
|
-
import { OnInit, ElementRef, EventEmitter, ChangeDetectorRef, NgZone, QueryList, AfterViewInit, TemplateRef } from '@angular/core';
|
|
1
|
+
import { OnInit, ElementRef, EventEmitter, ChangeDetectorRef, NgZone, QueryList, AfterViewInit, TemplateRef, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { GanttUpper } from './gantt-upper';
|
|
4
|
-
import { GanttLinkDragEvent, GanttLineClickEvent, GanttItemInternal, GanttItem, GanttSelectedEvent } from './class';
|
|
4
|
+
import { GanttLinkDragEvent, GanttLineClickEvent, GanttItemInternal, GanttItem, GanttSelectedEvent, GanttGroupInternal } from './class';
|
|
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
8
|
import { NgxGanttRootComponent } from './root.component';
|
|
9
9
|
import { GanttDate } from './utils/date';
|
|
10
|
+
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
11
|
+
import { GanttPrintService } from './gantt-print.service';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
|
-
export declare class NgxGanttComponent extends GanttUpper implements OnInit, AfterViewInit {
|
|
13
|
+
export declare class NgxGanttComponent extends GanttUpper implements OnInit, OnChanges, AfterViewInit {
|
|
14
|
+
private printService;
|
|
12
15
|
maxLevel: number;
|
|
13
16
|
async: boolean;
|
|
14
17
|
childrenResolve: (GanttItem: any) => Observable<GanttItem[]>;
|
|
15
18
|
linkable: boolean;
|
|
19
|
+
set loading(loading: boolean);
|
|
20
|
+
get loading(): boolean;
|
|
21
|
+
loadingDelay: number;
|
|
16
22
|
linkDragStarted: EventEmitter<GanttLinkDragEvent<unknown>>;
|
|
17
23
|
linkDragEnded: EventEmitter<GanttLinkDragEvent<unknown>>;
|
|
18
24
|
lineClick: EventEmitter<GanttLineClickEvent<unknown>>;
|
|
@@ -21,15 +27,27 @@ export declare class NgxGanttComponent extends GanttUpper implements OnInit, Aft
|
|
|
21
27
|
columns: QueryList<NgxGanttTableColumnComponent>;
|
|
22
28
|
tableEmptyTemplate: TemplateRef<any>;
|
|
23
29
|
ganttRoot: NgxGanttRootComponent;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
virtualScroll: CdkVirtualScrollViewport;
|
|
31
|
+
flatData: (GanttGroupInternal | GanttItemInternal)[];
|
|
32
|
+
renderData: (GanttGroupInternal | GanttItemInternal)[];
|
|
33
|
+
private _loading;
|
|
34
|
+
private loadingTimer;
|
|
35
|
+
private rangeStart;
|
|
36
|
+
private rangeEnd;
|
|
37
|
+
private flatDataMap;
|
|
38
|
+
constructor(elementRef: ElementRef<HTMLElement>, cdr: ChangeDetectorRef, ngZone: NgZone, printService: GanttPrintService, config: GanttGlobalConfig);
|
|
27
39
|
ngOnInit(): void;
|
|
40
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
28
41
|
ngAfterViewInit(): void;
|
|
42
|
+
private buildVirtualFlatData;
|
|
43
|
+
private afterExpand;
|
|
44
|
+
private computeTempDataRefs;
|
|
29
45
|
expandChildren(item: GanttItemInternal): void;
|
|
30
46
|
selectItem(selectEvent: GanttSelectedEvent): void;
|
|
31
47
|
scrollToToday(): void;
|
|
32
48
|
scrollToDate(date: number | GanttDate): void;
|
|
33
|
-
|
|
34
|
-
|
|
49
|
+
expandGroups(expanded: boolean): void;
|
|
50
|
+
expandGroup(group: GanttGroupInternal): void;
|
|
51
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttComponent, [null, null, null, { optional: true; }, null]>;
|
|
52
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttComponent, "ngx-gantt", never, { "maxLevel": "maxLevel"; "async": "async"; "childrenResolve": "childrenResolve"; "linkable": "linkable"; "loading": "loading"; "loadingDelay": "loadingDelay"; }, { "linkDragStarted": "linkDragStarted"; "linkDragEnded": "linkDragEnded"; "lineClick": "lineClick"; "selectedChange": "selectedChange"; }, ["table", "tableEmptyTemplate", "columns"], never, false, never>;
|
|
35
53
|
}
|
package/gantt.component.scss
CHANGED
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
background-color: variables.$gantt-bg-color;
|
|
32
32
|
overflow-y: auto;
|
|
33
33
|
|
|
34
|
+
.gantt-table {
|
|
35
|
+
height: 100%;
|
|
36
|
+
}
|
|
37
|
+
|
|
34
38
|
&::-webkit-scrollbar {
|
|
35
39
|
display: none;
|
|
36
40
|
}
|
|
@@ -82,4 +86,39 @@
|
|
|
82
86
|
}
|
|
83
87
|
}
|
|
84
88
|
}
|
|
89
|
+
|
|
90
|
+
.gantt-virtual-scroll-viewport {
|
|
91
|
+
position: absolute;
|
|
92
|
+
left: 0;
|
|
93
|
+
top: variables.$gantt-header-height;
|
|
94
|
+
right: 0;
|
|
95
|
+
bottom: 0;
|
|
96
|
+
z-index: 2;
|
|
97
|
+
// 兼容火狐浏览器
|
|
98
|
+
overflow: auto;
|
|
99
|
+
overflow: overlay;
|
|
100
|
+
.cdk-virtual-scroll-content-wrapper {
|
|
101
|
+
width: 100%;
|
|
102
|
+
min-width: unset;
|
|
103
|
+
display: flex;
|
|
104
|
+
min-height: 100%;
|
|
105
|
+
.gantt-container {
|
|
106
|
+
.gantt-main-container {
|
|
107
|
+
height: 100%;
|
|
108
|
+
top: 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.gantt-header {
|
|
116
|
+
display: flex;
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
height: 100%;
|
|
119
|
+
.gantt-container-header {
|
|
120
|
+
flex: 1;
|
|
121
|
+
overflow: hidden;
|
|
122
|
+
background-color: #fafafa;
|
|
123
|
+
}
|
|
85
124
|
}
|
package/gantt.module.d.ts
CHANGED
|
@@ -2,22 +2,26 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./gantt.component";
|
|
3
3
|
import * as i2 from "./table/gantt-table.component";
|
|
4
4
|
import * as i3 from "./table/gantt-column.component";
|
|
5
|
-
import * as i4 from "./components/table/gantt-table.component";
|
|
6
|
-
import * as i5 from "./components/
|
|
7
|
-
import * as i6 from "./components/
|
|
8
|
-
import * as i7 from "./components/
|
|
9
|
-
import * as i8 from "./components/
|
|
10
|
-
import * as i9 from "./components/
|
|
11
|
-
import * as i10 from "./components/
|
|
12
|
-
import * as i11 from "./components/
|
|
13
|
-
import * as i12 from "./
|
|
14
|
-
import * as i13 from "./components/
|
|
15
|
-
import * as i14 from "./components/
|
|
16
|
-
import * as i15 from "./
|
|
17
|
-
import * as i16 from "
|
|
18
|
-
import * as i17 from "
|
|
5
|
+
import * as i4 from "./components/table/header/gantt-table-header.component";
|
|
6
|
+
import * as i5 from "./components/table/body/gantt-table-body.component";
|
|
7
|
+
import * as i6 from "./components/main/gantt-main.component";
|
|
8
|
+
import * as i7 from "./components/calendar/header/calendar-header.component";
|
|
9
|
+
import * as i8 from "./components/calendar/grid/calendar-grid.component";
|
|
10
|
+
import * as i9 from "./components/links/links.component";
|
|
11
|
+
import * as i10 from "./components/loader/loader.component";
|
|
12
|
+
import * as i11 from "./components/bar/bar.component";
|
|
13
|
+
import * as i12 from "./components/icon/icon.component";
|
|
14
|
+
import * as i13 from "./components/drag-backdrop/drag-backdrop.component";
|
|
15
|
+
import * as i14 from "./components/range/range.component";
|
|
16
|
+
import * as i15 from "./root.component";
|
|
17
|
+
import * as i16 from "./components/baseline/baseline.component";
|
|
18
|
+
import * as i17 from "./components/toolbar/toolbar.component";
|
|
19
|
+
import * as i18 from "./gantt.pipe";
|
|
20
|
+
import * as i19 from "@angular/common";
|
|
21
|
+
import * as i20 from "@angular/cdk/drag-drop";
|
|
22
|
+
import * as i21 from "@angular/cdk/scrolling";
|
|
19
23
|
export declare class NgxGanttModule {
|
|
20
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttModule, never>;
|
|
21
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxGanttModule, [typeof i1.NgxGanttComponent, typeof i2.NgxGanttTableComponent, typeof i3.NgxGanttTableColumnComponent, typeof i4.
|
|
25
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgxGanttModule, [typeof i1.NgxGanttComponent, typeof i2.NgxGanttTableComponent, typeof i3.NgxGanttTableColumnComponent, typeof i4.GanttTableHeaderComponent, typeof i5.GanttTableBodyComponent, typeof i6.GanttMainComponent, typeof i7.GanttCalendarHeaderComponent, typeof i8.GanttCalendarGridComponent, typeof i9.GanttLinksComponent, typeof i10.GanttLoaderComponent, typeof i11.NgxGanttBarComponent, typeof i12.GanttIconComponent, typeof i13.GanttDragBackdropComponent, typeof i14.NgxGanttRangeComponent, typeof i15.NgxGanttRootComponent, typeof i16.NgxGanttBaselineComponent, typeof i17.NgxGanttToolbarComponent, typeof i18.IsGanttRangeItemPipe, typeof i18.IsGanttBarItemPipe, typeof i18.IsGanttCustomItemPipe], [typeof i19.CommonModule, typeof i20.DragDropModule, typeof i21.ScrollingModule], [typeof i1.NgxGanttComponent, typeof i2.NgxGanttTableComponent, typeof i3.NgxGanttTableColumnComponent, typeof i15.NgxGanttRootComponent, typeof i11.NgxGanttBarComponent, typeof i14.NgxGanttRangeComponent, typeof i16.NgxGanttBaselineComponent, typeof i17.NgxGanttToolbarComponent]>;
|
|
22
26
|
static ɵinj: i0.ɵɵInjectorDeclaration<NgxGanttModule>;
|
|
23
27
|
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from './components/bar/bar.component';
|
|
|
8
8
|
export * from './components/range/range.component';
|
|
9
9
|
export * from './components/baseline/baseline.component';
|
|
10
10
|
export * from './components/toolbar/toolbar.component';
|
|
11
|
+
export * from './components/loader/loader.component';
|
|
11
12
|
export * from './utils/date';
|
|
12
13
|
export * from './class';
|
|
13
14
|
export * from './views/view';
|
package/root.component.d.ts
CHANGED
|
@@ -28,5 +28,5 @@ export declare class NgxGanttRootComponent implements OnInit, OnDestroy {
|
|
|
28
28
|
scrollToToday(): void;
|
|
29
29
|
scrollToDate(date: number | GanttDate): void;
|
|
30
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttRootComponent, [null, null, null, null, null, { optional: true; }]>;
|
|
31
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttRootComponent, "ngx-gantt-root", never, { "sideWidth": "sideWidth"; }, {}, ["sideTemplate", "mainTemplate"],
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttRootComponent, "ngx-gantt-root", never, { "sideWidth": "sideWidth"; }, {}, ["sideTemplate", "mainTemplate"], ["*"], false, never>;
|
|
32
32
|
}
|
package/styles/index.scss
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
@use './variables.scss';
|
|
2
2
|
@use '../gantt.component.scss';
|
|
3
|
-
@use '../components/table/gantt-table.component.scss';
|
|
4
|
-
@use '../components/calendar/calendar.component.scss';
|
|
3
|
+
// @use '../components/table/gantt-table.component.scss';
|
|
4
|
+
// @use '../components/calendar/calendar.component.scss';
|
|
5
|
+
@use '../components/table/gantt-table.scss';
|
|
6
|
+
@use '../components/calendar/calendar.scss';
|
|
5
7
|
@use '../components/drag-backdrop/drag-backdrop.component.scss';
|
|
6
8
|
@use '../components/bar/bar.component.scss';
|
|
7
9
|
@use '../components/range/range.component.scss';
|
|
@@ -9,3 +11,4 @@
|
|
|
9
11
|
@use '../components/links/links.component.scss';
|
|
10
12
|
@use '../components/baseline/baseline.component.scss';
|
|
11
13
|
@use '../components/toolbar/toolbar.component.scss';
|
|
14
|
+
@use '../components/loader/loader.component.scss';
|
package/styles/variables.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// basic
|
|
2
2
|
$gantt-color: #333 !default;
|
|
3
|
+
$gantt-primary-color: #348fe4 !default;
|
|
3
4
|
$gantt-header-height: 44px !default;
|
|
4
5
|
$gantt-border-color: #eee !default;
|
|
5
6
|
$gantt-bg-color: #fff !default;
|
|
@@ -32,21 +33,25 @@ $gantt-bar-bg: #fff !default;
|
|
|
32
33
|
$gantt-bar-layer-bg: #fff !default;
|
|
33
34
|
$gantt-bar-handle-color: #cacaca !default;
|
|
34
35
|
$gantt-bar-handle-height: 12px !default;
|
|
35
|
-
$gantt-bar-background-color:
|
|
36
|
+
$gantt-bar-background-color: $gantt-primary-color !default;
|
|
36
37
|
|
|
37
38
|
// drag
|
|
38
|
-
$gantt-item-drag-mask-color:
|
|
39
|
-
$gantt-link-dragging-line-color:
|
|
39
|
+
$gantt-item-drag-mask-color: $gantt-primary-color !default;
|
|
40
|
+
$gantt-link-dragging-line-color: $gantt-primary-color !default;
|
|
40
41
|
|
|
41
42
|
// link
|
|
42
|
-
$gantt-link-line-color:
|
|
43
|
+
$gantt-link-line-color: $gantt-primary-color !default;
|
|
43
44
|
|
|
44
45
|
// table
|
|
45
46
|
$gantt-table-header-drag-line-width: 3px !default;
|
|
46
|
-
$gantt-table-header-drag-line-color:
|
|
47
|
+
$gantt-table-header-drag-line-color: $gantt-primary-color !default;
|
|
48
|
+
$gantt-table-items-drop-background-color: #f5f5f5 !default;
|
|
47
49
|
|
|
48
50
|
// baseline
|
|
49
51
|
$gantt-baseline-background-color: #cacaca !default;
|
|
50
52
|
|
|
51
|
-
//
|
|
52
|
-
$gantt-toolbar-view-active-color:
|
|
53
|
+
// toolbar
|
|
54
|
+
$gantt-toolbar-view-active-color: $gantt-primary-color !default;
|
|
55
|
+
|
|
56
|
+
// loader
|
|
57
|
+
$gantt-loader-loading-color: #6698ff !default;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { EventEmitter, TemplateRef } from '@angular/core';
|
|
2
|
-
import { GanttTableEvent } from '../class';
|
|
2
|
+
import { GanttTableDragEnterPredicateContext, GanttTableDragDroppedEvent, GanttTableEvent } from '../class';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class NgxGanttTableComponent {
|
|
5
|
+
draggable: boolean;
|
|
6
|
+
dropEnterPredicate?: (context: GanttTableDragEnterPredicateContext) => boolean;
|
|
7
|
+
dragDropped: EventEmitter<GanttTableDragDroppedEvent<unknown>>;
|
|
5
8
|
columnChanges: EventEmitter<GanttTableEvent>;
|
|
6
9
|
rowBeforeTemplate: TemplateRef<any>;
|
|
7
10
|
rowAfterTemplate: TemplateRef<any>;
|
|
8
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttTableComponent, never>;
|
|
9
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttTableComponent, "ngx-gantt-table", never, {}, { "columnChanges": "columnChanges"; }, ["rowBeforeTemplate", "rowAfterTemplate"], never, false, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttTableComponent, "ngx-gantt-table", never, { "draggable": "draggable"; "dropEnterPredicate": "dropEnterPredicate"; }, { "dragDropped": "dragDropped"; "columnChanges": "columnChanges"; }, ["rowBeforeTemplate", "rowAfterTemplate"], never, false, never>;
|
|
10
13
|
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { OnInit, OnDestroy, NgZone, ElementRef } from '@angular/core';
|
|
2
|
-
import { GanttDatePoint } from '../../class/date-point';
|
|
3
|
-
import { GanttUpper } from '../../gantt-upper';
|
|
4
|
-
import { GanttViewType } from './../../class/view-type';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class GanttCalendarComponent implements OnInit, OnDestroy {
|
|
7
|
-
ganttUpper: GanttUpper;
|
|
8
|
-
private ngZone;
|
|
9
|
-
private elementRef;
|
|
10
|
-
get view(): import("@worktile/gantt").GanttView;
|
|
11
|
-
headerHeight: number;
|
|
12
|
-
mainHeight: number;
|
|
13
|
-
todayHeight: number;
|
|
14
|
-
todayWidth: number;
|
|
15
|
-
todayBorderRadius: number;
|
|
16
|
-
viewTypes: typeof GanttViewType;
|
|
17
|
-
className: boolean;
|
|
18
|
-
private unsubscribe$;
|
|
19
|
-
constructor(ganttUpper: GanttUpper, ngZone: NgZone, elementRef: ElementRef<HTMLElement>);
|
|
20
|
-
setTodayPoint(): void;
|
|
21
|
-
ngOnInit(): void;
|
|
22
|
-
trackBy(index: number, point: GanttDatePoint): string | number;
|
|
23
|
-
ngOnDestroy(): void;
|
|
24
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GanttCalendarComponent, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GanttCalendarComponent, "gantt-calendar-overlay", never, {}, {}, never, never, false, never>;
|
|
26
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { TemplateRef, QueryList, ElementRef, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';
|
|
2
|
-
import { GanttItemInternal, GanttGroupInternal, GanttSelectedEvent } from '../../class';
|
|
3
|
-
import { NgxGanttTableColumnComponent } from '../../table/gantt-column.component';
|
|
4
|
-
import { CdkDragEnd, CdkDragMove, CdkDragStart } from '@angular/cdk/drag-drop';
|
|
5
|
-
import { GanttAbstractComponent } from '../../gantt-abstract';
|
|
6
|
-
import { GanttUpper } from '../../gantt-upper';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export declare const defaultColumnWidth = 100;
|
|
9
|
-
export declare const minColumnWidth = 80;
|
|
10
|
-
export declare class GanttTableComponent implements OnChanges {
|
|
11
|
-
gantt: GanttAbstractComponent;
|
|
12
|
-
ganttUpper: GanttUpper;
|
|
13
|
-
private elementRef;
|
|
14
|
-
columnList: QueryList<NgxGanttTableColumnComponent>;
|
|
15
|
-
dragStartLeft: number;
|
|
16
|
-
hasShowExpandIcon: boolean;
|
|
17
|
-
groups: GanttGroupInternal[];
|
|
18
|
-
items: GanttItemInternal[];
|
|
19
|
-
set columns(columns: QueryList<NgxGanttTableColumnComponent>);
|
|
20
|
-
groupTemplate: TemplateRef<any>;
|
|
21
|
-
emptyTemplate: TemplateRef<any>;
|
|
22
|
-
rowBeforeTemplate: TemplateRef<any>;
|
|
23
|
-
rowAfterTemplate: TemplateRef<any>;
|
|
24
|
-
itemClick: EventEmitter<GanttSelectedEvent<unknown>>;
|
|
25
|
-
draglineElementRef: ElementRef<HTMLElement>;
|
|
26
|
-
ganttTableClass: boolean;
|
|
27
|
-
ganttTableEmptyClass: boolean;
|
|
28
|
-
constructor(gantt: GanttAbstractComponent, ganttUpper: GanttUpper, elementRef: ElementRef);
|
|
29
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
30
|
-
private dragFixed;
|
|
31
|
-
expandGroup(group: GanttGroupInternal): void;
|
|
32
|
-
expandChildren(event: MouseEvent, item: GanttItemInternal): void;
|
|
33
|
-
dragStarted(event: CdkDragStart): void;
|
|
34
|
-
dragMoved(event: CdkDragMove, column?: NgxGanttTableColumnComponent): void;
|
|
35
|
-
columnDragEnded(event: CdkDragEnd, column: NgxGanttTableColumnComponent): void;
|
|
36
|
-
tableDragEnded(event: CdkDragEnd): void;
|
|
37
|
-
private showAuxiliaryLine;
|
|
38
|
-
private hideAuxiliaryLine;
|
|
39
|
-
trackBy(index: number, item: GanttGroupInternal | GanttItemInternal): string | number;
|
|
40
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<GanttTableComponent, never>;
|
|
41
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GanttTableComponent, "gantt-table", never, { "groups": "groups"; "items": "items"; "columns": "columns"; "groupTemplate": "groupTemplate"; "emptyTemplate": "emptyTemplate"; "rowBeforeTemplate": "rowBeforeTemplate"; "rowAfterTemplate": "rowAfterTemplate"; }, { "itemClick": "itemClick"; }, never, never, false, never>;
|
|
42
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { Component, HostBinding, Inject } from '@angular/core';
|
|
2
|
-
import { Subject, merge, from } from 'rxjs';
|
|
3
|
-
import { take, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { headerHeight, todayHeight, todayWidth, todayBorderRadius } from '../../gantt.styles';
|
|
5
|
-
import { isNumber } from '../../utils/helpers';
|
|
6
|
-
import { GanttDate } from '../../utils/date';
|
|
7
|
-
import { GANTT_UPPER_TOKEN } from '../../gantt-upper';
|
|
8
|
-
import { GanttViewType } from './../../class/view-type';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common";
|
|
11
|
-
import * as i2 from "../../gantt-upper";
|
|
12
|
-
const mainHeight = 5000;
|
|
13
|
-
export class GanttCalendarComponent {
|
|
14
|
-
get view() {
|
|
15
|
-
return this.ganttUpper.view;
|
|
16
|
-
}
|
|
17
|
-
constructor(ganttUpper, ngZone, elementRef) {
|
|
18
|
-
this.ganttUpper = ganttUpper;
|
|
19
|
-
this.ngZone = ngZone;
|
|
20
|
-
this.elementRef = elementRef;
|
|
21
|
-
this.headerHeight = headerHeight;
|
|
22
|
-
this.mainHeight = mainHeight;
|
|
23
|
-
this.todayHeight = todayHeight;
|
|
24
|
-
this.todayWidth = todayWidth;
|
|
25
|
-
this.todayBorderRadius = todayBorderRadius;
|
|
26
|
-
this.viewTypes = GanttViewType;
|
|
27
|
-
this.className = true;
|
|
28
|
-
this.unsubscribe$ = new Subject();
|
|
29
|
-
}
|
|
30
|
-
setTodayPoint() {
|
|
31
|
-
const x = this.view.getTodayXPoint();
|
|
32
|
-
const today = new GanttDate().getDate();
|
|
33
|
-
const todayEle = this.elementRef.nativeElement.getElementsByClassName('gantt-calendar-today-overlay')[0];
|
|
34
|
-
const rect = this.elementRef.nativeElement.getElementsByClassName('today-rect')[0];
|
|
35
|
-
const line = this.elementRef.nativeElement.getElementsByClassName('today-line')[0];
|
|
36
|
-
if (isNumber(x)) {
|
|
37
|
-
if (rect) {
|
|
38
|
-
rect.style.left = `${x - todayWidth / 2}px`;
|
|
39
|
-
rect.style.top = `${headerHeight - todayHeight}px`;
|
|
40
|
-
rect.innerHTML = today.toString();
|
|
41
|
-
}
|
|
42
|
-
if (line) {
|
|
43
|
-
line.style.left = `${x}px`;
|
|
44
|
-
line.style.top = `${headerHeight}px`;
|
|
45
|
-
line.style.bottom = `${-mainHeight}px`;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
todayEle.style.display = 'none';
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
ngOnInit() {
|
|
53
|
-
// Note: the zone may be nooped through `BootstrapOptions` when bootstrapping the root module. This means
|
|
54
|
-
// the `onStable` will never emit any value.
|
|
55
|
-
const onStable$ = this.ngZone.isStable ? from(Promise.resolve()) : this.ngZone.onStable.pipe(take(1));
|
|
56
|
-
// Normally this isn't in the zone, but it can cause performance regressions for apps
|
|
57
|
-
// using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
|
|
58
|
-
this.ngZone.runOutsideAngular(() => {
|
|
59
|
-
onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
60
|
-
merge(this.ganttUpper.viewChange, this.ganttUpper.view.start$)
|
|
61
|
-
.pipe(takeUntil(this.unsubscribe$))
|
|
62
|
-
.subscribe(() => {
|
|
63
|
-
this.setTodayPoint();
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
trackBy(index, point) {
|
|
69
|
-
return point.text || index;
|
|
70
|
-
}
|
|
71
|
-
ngOnDestroy() {
|
|
72
|
-
this.unsubscribe$.next();
|
|
73
|
-
this.unsubscribe$.complete();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
GanttCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttCalendarComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
-
GanttCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", 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\n class=\"primary-text\"\n [ngStyle]=\"point.style\"\n [class.today]=\"point.additions?.isToday\"\n [class.weekend]=\"point.additions?.isWeekend\"\n *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\"\n [attr.x]=\"point.x\"\n [attr.y]=\"point.y\"\n >\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text\n class=\"secondary-text\"\n [ngStyle]=\"point.style\"\n [class.today]=\"point.additions?.isToday\"\n [class.weekend]=\"point.additions?.isWeekend\"\n [attr.x]=\"point.x\"\n [attr.y]=\"point.y\"\n >\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"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttCalendarComponent, decorators: [{
|
|
79
|
-
type: Component,
|
|
80
|
-
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\n class=\"primary-text\"\n [ngStyle]=\"point.style\"\n [class.today]=\"point.additions?.isToday\"\n [class.weekend]=\"point.additions?.isWeekend\"\n *ngFor=\"let point of view.primaryDatePoints; trackBy: trackBy\"\n [attr.x]=\"point.x\"\n [attr.y]=\"point.y\"\n >\n {{ point.text }}\n </text>\n <ng-container *ngFor=\"let point of view.secondaryDatePoints; trackBy: trackBy\">\n <text\n class=\"secondary-text\"\n [ngStyle]=\"point.style\"\n [class.today]=\"point.additions?.isToday\"\n [class.weekend]=\"point.additions?.isWeekend\"\n [attr.x]=\"point.x\"\n [attr.y]=\"point.y\"\n >\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" }]
|
|
81
|
-
}], ctorParameters: function () { return [{ type: i2.GanttUpper, decorators: [{
|
|
82
|
-
type: Inject,
|
|
83
|
-
args: [GANTT_UPPER_TOKEN]
|
|
84
|
-
}] }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { className: [{
|
|
85
|
-
type: HostBinding,
|
|
86
|
-
args: ['class.gantt-calendar-overlay']
|
|
87
|
-
}] } });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxXQUFXLEVBQXFCLE1BQU0sRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUV4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFNeEIsTUFBTSxPQUFPLHNCQUFzQjtJQUMvQixJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFrQkQsWUFDc0MsVUFBc0IsRUFDaEQsTUFBYyxFQUNkLFVBQW1DO1FBRlQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNoRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFB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QUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWEsRUFBRSxLQUFxQjtRQUN4QyxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7O21IQTFFUSxzQkFBc0Isa0JBc0JuQixpQkFBaUI7dUdBdEJwQixzQkFBc0IsMElDaEJuQyxteEVBbUVBOzJGRG5EYSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0ksd0JBQXdCOzswQkF5QjdCLE1BQU07MkJBQUMsaUJBQWlCOzBGQUxnQixTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBIb3N0QmluZGluZywgT25EZXN0cm95LCBOZ1pvbmUsIEluamVjdCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2FudHREYXRlUG9pbnQgfSBmcm9tICcuLi8uLi9jbGFzcy9kYXRlLXBvaW50JztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBoZWFkZXJIZWlnaHQsIHRvZGF5SGVpZ2h0LCB0b2RheVdpZHRoLCB0b2RheUJvcmRlclJhZGl1cyB9IGZyb20gJy4uLy4uL2dhbnR0LnN0eWxlcyc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4uLy4uL3V0aWxzL2hlbHBlcnMnO1xuaW1wb3J0IHsgR2FudHREYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBHQU5UVF9VUFBFUl9UT0tFTiwgR2FudHRVcHBlciB9IGZyb20gJy4uLy4uL2dhbnR0LXVwcGVyJztcbmltcG9ydCB7IEdhbnR0Vmlld1R5cGUgfSBmcm9tICcuLy4uLy4uL2NsYXNzL3ZpZXctdHlwZSc7XG5cbmNvbnN0IG1haW5IZWlnaHQgPSA1MDAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dhbnR0LWNhbGVuZGFyLW92ZXJsYXknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBnZXQgdmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2FudHRVcHBlci52aWV3O1xuICAgIH1cblxuICAgIGhlYWRlckhlaWdodCA9IGhlYWRlckhlaWdodDtcblxuICAgIG1haW5IZWlnaHQgPSBtYWluSGVpZ2h0O1xuXG4gICAgdG9kYXlIZWlnaHQgPSB0b2RheUhlaWdodDtcblxuICAgIHRvZGF5V2lkdGggPSB0b2RheVdpZHRoO1xuXG4gICAgdG9kYXlCb3JkZXJSYWRpdXMgPSB0b2RheUJvcmRlclJhZGl1cztcblxuICAgIHZpZXdUeXBlcyA9IEdhbnR0Vmlld1R5cGU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LWNhbGVuZGFyLW92ZXJsYXknKSBjbGFzc05hbWUgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICAgKSB7fVxuXG4gICAgc2V0VG9kYXlQb2ludCgpIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMudmlldy5nZXRUb2RheVhQb2ludCgpO1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBHYW50dERhdGUoKS5nZXREYXRlKCk7XG4gICAgICAgIGNvbnN0IHRvZGF5RWxlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2FudHQtY2FsZW5kYXItdG9kYXktb3ZlcmxheScpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndG9kYXktcmVjdCcpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndG9kYXktbGluZScpWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChpc051bWJlcih4KSkge1xuICAgICAgICAgICAgaWYgKHJlY3QpIHtcbiAgICAgICAgICAgICAgICByZWN0LnN0eWxlLmxlZnQgPSBgJHt4IC0gdG9kYXlXaWR0aCAvIDJ9cHhgO1xuICAgICAgICAgICAgICAgIHJlY3Quc3R5bGUudG9wID0gYCR7aGVhZGVySGVpZ2h0IC0gdG9kYXlIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgIHJlY3QuaW5uZXJIVE1MID0gdG9kYXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgbGluZS5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG4gICAgICAgICAgICAgICAgbGluZS5zdHlsZS50b3AgPSBgJHtoZWFkZXJIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgIGxpbmUuc3R5bGUuYm90dG9tID0gYCR7LW1haW5IZWlnaHR9cHhgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9kYXlFbGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBOb3RlOiB0aGUgem9uZSBtYXkgYmUgbm9vcGVkIHRocm91Z2ggYEJvb3RzdHJhcE9wdGlvbnNgIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUgcm9vdCBtb2R1bGUuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gdGhlIGBvblN0YWJsZWAgd2lsbCBuZXZlciBlbWl0IGFueSB2YWx1ZS5cbiAgICAgICAgY29uc3Qgb25TdGFibGUkID0gdGhpcy5uZ1pvbmUuaXNTdGFibGUgPyBmcm9tKFByb21pc2UucmVzb2x2ZSgpKSA6IHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIC8vIE5vcm1hbGx5IHRoaXMgaXNuJ3QgaW4gdGhlIHpvbmUsIGJ1dCBpdCBjYW4gY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgZm9yIGFwcHNcbiAgICAgICAgLy8gdXNpbmcgYHpvbmUtcGF0Y2gtcnhqc2AgYmVjYXVzZSBpdCdsbCB0cmlnZ2VyIGEgY2hhbmdlIGRldGVjdGlvbiB3aGVuIGl0IHVuc3Vic2NyaWJlcy5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgb25TdGFibGUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBtZXJnZSh0aGlzLmdhbnR0VXBwZXIudmlld0NoYW5nZSwgdGhpcy5nYW50dFVwcGVyLnZpZXcuc3RhcnQkKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VG9kYXlQb2ludCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIHBvaW50OiBHYW50dERhdGVQb2ludCkge1xuICAgICAgICByZXR1cm4gcG9pbnQudGV4dCB8fCBpbmRleDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnYW50dC1jYWxlbmRhci10b2RheS1vdmVybGF5XCIgW3N0eWxlLndpZHRoLnB4XT1cInZpZXcud2lkdGhcIj5cbiAgPHNwYW4gY2xhc3M9XCJ0b2RheS1yZWN0XCIgW2hpZGRlbl09XCJnYW50dFVwcGVyLnZpZXdUeXBlICE9PSB2aWV3VHlwZXMuZGF5XCI+IDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJ0b2RheS1saW5lXCIgKm5nSWY9XCJnYW50dFVwcGVyLnNob3dUb2RheUxpbmVcIj4gPC9zcGFuPlxuPC9kaXY+XG5cbjxzdmcgY2xhc3M9XCJnYW50dC1jYWxlbmRhci1vdmVybGF5LW1haW5cIiBbYXR0ci53aWR0aF09XCJ2aWV3LndpZHRoXCIgW2F0dHIuaGVpZ2h0XT1cImhlYWRlckhlaWdodFwiPlxuICA8Zz5cbiAgICA8dGV4dFxuICAgICAgY2xhc3M9XCJwcmltYXJ5LXRleHRcIlxuICAgICAgW25nU3R5bGVdPVwicG9pbnQuc3R5bGVcIlxuICAgICAgW2NsYXNzLnRvZGF5XT1cInBvaW50LmFkZGl0aW9ucz8uaXNUb2RheVwiXG4gICAgICBbY2xhc3Mud2Vla2VuZF09XCJwb2ludC5hZGRpdGlvbnM/LmlzV2Vla2VuZFwiXG4gICAgICAqbmdGb3I9XCJsZXQgcG9pbnQgb2Ygdmlldy5wcmltYXJ5RGF0ZVBvaW50czsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICBbYXR0ci54XT1cInBvaW50LnhcIlxuICAgICAgW2F0dHIueV09XCJwb2ludC55XCJcbiAgICA+XG4gICAgICB7eyBwb2ludC50ZXh0IH19XG4gICAgPC90ZXh0PlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBvaW50IG9mIHZpZXcuc2Vjb25kYXJ5RGF0ZVBvaW50czsgdHJhY2tCeTogdHJhY2tCeVwiPlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJzZWNvbmRhcnktdGV4dFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInBvaW50LnN0eWxlXCJcbiAgICAgICAgW2NsYXNzLnRvZGF5XT1cInBvaW50LmFkZGl0aW9ucz8uaXNUb2RheVwiXG4gICAgICAgIFtjbGFzcy53ZWVrZW5kXT1cInBvaW50LmFkZGl0aW9ucz8uaXNXZWVrZW5kXCJcbiAgICAgICAgW2F0dHIueF09XCJwb2ludC54XCJcbiAgICAgICAgW2F0dHIueV09XCJwb2ludC55XCJcbiAgICAgID5cbiAgICAgICAge3sgcG9pbnQudGV4dCB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGc+XG4gICAgICA8bGluZVxuICAgICAgICAqbmdGb3I9XCJsZXQgcG9pbnQgb2Ygdmlldy5wcmltYXJ5RGF0ZVBvaW50czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgIFthdHRyLngxXT1cIihpICsgMSkgKiB2aWV3LnByaW1hcnlXaWR0aFwiXG4gICAgICAgIFthdHRyLngyXT1cIihpICsgMSkgKiB2aWV3LnByaW1hcnlXaWR0aFwiXG4gICAgICAgIFthdHRyLnkxXT1cIjBcIlxuICAgICAgICBbYXR0ci55Ml09XCJtYWluSGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJwcmltYXJ5LWxpbmVcIlxuICAgICAgPjwvbGluZT5cbiAgICA8L2c+XG5cbiAgICA8Zz5cbiAgICAgIDxsaW5lIFthdHRyLngxXT1cIjBcIiBbYXR0ci54Ml09XCJ2aWV3LndpZHRoXCIgW2F0dHIueTFdPVwiaGVhZGVySGVpZ2h0XCIgW2F0dHIueTJdPVwiaGVhZGVySGVpZ2h0XCIgY2xhc3M9XCJoZWFkZXItbGluZVwiPjwvbGluZT5cbiAgICA8L2c+XG4gIDwvZz5cbiAgPGc+XG4gICAgPGcgKm5nSWY9XCJ2aWV3LnNob3dUaW1lbGluZVwiPlxuICAgICAgPGxpbmVcbiAgICAgICAgKm5nRm9yPVwibGV0IHBvaW50IG9mIHZpZXcuc2Vjb25kYXJ5RGF0ZVBvaW50czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgIFthdHRyLngxXT1cIihpICsgMSkgKiB2aWV3LmNlbGxXaWR0aFwiXG4gICAgICAgIFthdHRyLngyXT1cIihpICsgMSkgKiB2aWV3LmNlbGxXaWR0aFwiXG4gICAgICAgIFthdHRyLnkxXT1cImhlYWRlckhlaWdodFwiXG4gICAgICAgIFthdHRyLnkyXT1cIm1haW5IZWlnaHRcIlxuICAgICAgICBjbGFzcz1cInNlY29uZGFyeS1saW5lXCJcbiAgICAgID48L2xpbmU+XG4gICAgICA8bGluZVxuICAgICAgICAqbmdGb3I9XCJsZXQgcG9pbnQgb2Ygdmlldy5wcmltYXJ5RGF0ZVBvaW50czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgIFthdHRyLngxXT1cIihpICsgMSkgKiB2aWV3LnByaW1hcnlXaWR0aFwiXG4gICAgICAgIFthdHRyLngyXT1cIihpICsgMSkgKiB2aWV3LnByaW1hcnlXaWR0aFwiXG4gICAgICAgIFthdHRyLnkxXT1cIjBcIlxuICAgICAgICBbYXR0ci55Ml09XCJtYWluSGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJwcmltYXJ5LWxpbmVcIlxuICAgICAgPjwvbGluZT5cbiAgICA8L2c+XG4gIDwvZz5cbjwvc3ZnPlxuIl19
|