@worktile/gantt 12.2.3 → 13.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.
Files changed (75) hide show
  1. package/components/bar/bar.component.scss +201 -0
  2. package/components/calendar/calendar.component.scss +79 -0
  3. package/components/drag-backdrop/drag-backdrop.component.scss +50 -0
  4. package/components/icon/icon.component.scss +13 -0
  5. package/components/links/links.component.scss +29 -0
  6. package/components/range/range.component.scss +35 -0
  7. package/components/table/gantt-table.component.scss +153 -0
  8. package/{esm2015/class/date-point.js → esm2020/class/date-point.mjs} +0 -0
  9. package/{esm2015/class/event.js → esm2020/class/event.mjs} +0 -0
  10. package/{esm2015/class/group.js → esm2020/class/group.mjs} +0 -0
  11. package/{esm2015/class/index.js → esm2020/class/index.mjs} +0 -0
  12. package/{esm2015/class/item.js → esm2020/class/item.mjs} +0 -0
  13. package/{esm2015/class/link.js → esm2020/class/link.mjs} +0 -0
  14. package/{esm2015/class/view-type.js → esm2020/class/view-type.mjs} +0 -0
  15. package/esm2020/components/bar/bar-drag.mjs +308 -0
  16. package/{esm2015/components/bar/bar.component.js → esm2020/components/bar/bar.component.mjs} +5 -9
  17. package/{esm2015/components/calendar/calendar.component.js → esm2020/components/calendar/calendar.component.mjs} +5 -8
  18. package/{esm2015/components/drag-backdrop/drag-backdrop.component.js → esm2020/components/drag-backdrop/drag-backdrop.component.mjs} +6 -10
  19. package/{esm2015/components/icon/icon.component.js → esm2020/components/icon/icon.component.mjs} +3 -3
  20. package/{esm2015/components/icon/icons.js → esm2020/components/icon/icons.mjs} +0 -0
  21. package/esm2020/components/links/lines/curve.mjs +95 -0
  22. package/{esm2015/components/links/lines/factory.js → esm2020/components/links/lines/factory.mjs} +0 -0
  23. package/{esm2015/components/links/lines/line.js → esm2020/components/links/lines/line.mjs} +0 -0
  24. package/{esm2015/components/links/lines/straight.js → esm2020/components/links/lines/straight.mjs} +0 -0
  25. package/esm2020/components/links/links.component.mjs +178 -0
  26. package/{esm2015/components/main/gantt-main.component.js → esm2020/components/main/gantt-main.component.mjs} +5 -8
  27. package/{esm2015/components/range/range.component.js → esm2020/components/range/range.component.mjs} +5 -8
  28. package/esm2020/components/table/gantt-table.component.mjs +163 -0
  29. package/{esm2015/gantt-abstract.js → esm2020/gantt-abstract.mjs} +0 -0
  30. package/{esm2015/gantt-dom.service.js → esm2020/gantt-dom.service.mjs} +3 -3
  31. package/{esm2015/gantt-drag-container.js → esm2020/gantt-drag-container.mjs} +5 -6
  32. package/{esm2015/gantt-item-upper.js → esm2020/gantt-item-upper.mjs} +4 -4
  33. package/esm2020/gantt-print.service.mjs +94 -0
  34. package/esm2020/gantt-upper.mjs +339 -0
  35. package/{esm2015/gantt.component.js → esm2020/gantt.component.mjs} +7 -13
  36. package/{esm2015/gantt.config.js → esm2020/gantt.config.mjs} +0 -0
  37. package/{esm2015/gantt.module.js → esm2020/gantt.module.mjs} +4 -4
  38. package/{esm2015/gantt.pipe.js → esm2020/gantt.pipe.mjs} +9 -9
  39. package/{esm2015/gantt.styles.js → esm2020/gantt.styles.mjs} +0 -0
  40. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  41. package/{esm2015/root.component.js → esm2020/root.component.mjs} +6 -11
  42. package/{esm2015/table/gantt-column.component.js → esm2020/table/gantt-column.component.mjs} +3 -3
  43. package/{esm2015/table/gantt-table.component.js → esm2020/table/gantt-table.component.mjs} +3 -3
  44. package/{esm2015/utils/date.js → esm2020/utils/date.mjs} +0 -0
  45. package/{esm2015/utils/helpers.js → esm2020/utils/helpers.mjs} +0 -0
  46. package/{esm2015/utils/passive-listeners.js → esm2020/utils/passive-listeners.mjs} +0 -0
  47. package/{esm2015/utils/set-style-with-vendor-prefix.js → esm2020/utils/set-style-with-vendor-prefix.mjs} +0 -0
  48. package/{esm2015/views/day.js → esm2020/views/day.mjs} +0 -0
  49. package/{esm2015/views/factory.js → esm2020/views/factory.mjs} +0 -0
  50. package/{esm2015/views/month.js → esm2020/views/month.mjs} +0 -0
  51. package/{esm2015/views/quarter.js → esm2020/views/quarter.mjs} +0 -0
  52. package/{esm2015/views/view.js → esm2020/views/view.mjs} +5 -5
  53. package/{esm2015/views/week.js → esm2020/views/week.mjs} +0 -0
  54. package/{esm2015/views/year.js → esm2020/views/year.mjs} +0 -0
  55. package/{esm2015/worktile-gantt.js → esm2020/worktile-gantt.mjs} +0 -0
  56. package/fesm2015/worktile-gantt.mjs +3080 -0
  57. package/fesm2015/worktile-gantt.mjs.map +1 -0
  58. package/{fesm2015/worktile-gantt.js → fesm2020/worktile-gantt.mjs} +158 -188
  59. package/fesm2020/worktile-gantt.mjs.map +1 -0
  60. package/gantt-item-upper.d.ts +1 -1
  61. package/gantt-upper.d.ts +1 -1
  62. package/gantt.component.scss +83 -0
  63. package/package.json +23 -9
  64. package/styles/index.scss +10 -0
  65. package/styles/variables.scss +46 -0
  66. package/bundles/worktile-gantt.umd.js +0 -3723
  67. package/bundles/worktile-gantt.umd.js.map +0 -1
  68. package/esm2015/components/bar/bar-drag.js +0 -306
  69. package/esm2015/components/links/lines/curve.js +0 -96
  70. package/esm2015/components/links/links.component.js +0 -173
  71. package/esm2015/components/table/gantt-table.component.js +0 -167
  72. package/esm2015/gantt-print.service.js +0 -97
  73. package/esm2015/gantt-upper.js +0 -340
  74. package/fesm2015/worktile-gantt.js.map +0 -1
  75. package/main.bundle.scss +0 -688
@@ -1,173 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, HostBinding, Inject } from '@angular/core';
2
- import { merge, Subject } from 'rxjs';
3
- import { takeUntil, skip, debounceTime } from 'rxjs/operators';
4
- import { recursiveItems } from '../../utils/helpers';
5
- import { GANTT_UPPER_TOKEN } from '../../gantt-upper';
6
- import { LinkColors, GanttLinkType } from '../../class/link';
7
- import { createLineGenerator } from './lines/factory';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../../gantt-drag-container";
10
- import * as i2 from "@angular/common";
11
- import * as i3 from "../../gantt-upper";
12
- export class GanttLinksComponent {
13
- constructor(ganttUpper, cdr, elementRef, ganttDragContainer) {
14
- this.ganttUpper = ganttUpper;
15
- this.cdr = cdr;
16
- this.elementRef = elementRef;
17
- this.ganttDragContainer = ganttDragContainer;
18
- this.groups = [];
19
- this.items = [];
20
- this.lineClick = new EventEmitter();
21
- this.links = [];
22
- this.ganttLinkTypes = GanttLinkType;
23
- this.showArrow = false;
24
- this.linkItems = [];
25
- this.firstChange = true;
26
- this.unsubscribe$ = new Subject();
27
- this.ganttLinksOverlay = true;
28
- }
29
- ngOnInit() {
30
- this.linkLine = createLineGenerator(this.ganttUpper.linkOptions.lineType, this.ganttUpper);
31
- this.showArrow = this.ganttUpper.linkOptions.showArrow;
32
- this.buildLinks();
33
- this.firstChange = false;
34
- this.ganttDragContainer.dragStarted.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
35
- this.elementRef.nativeElement.style.visibility = 'hidden';
36
- });
37
- merge(this.ganttUpper.viewChange, this.ganttUpper.expandChange, this.ganttUpper.view.start$, this.ganttUpper.dragEnded, this.ganttUpper.linkDragEnded)
38
- .pipe(skip(1), debounceTime(0), takeUntil(this.unsubscribe$))
39
- .subscribe(() => {
40
- this.elementRef.nativeElement.style.visibility = 'visible';
41
- this.buildLinks();
42
- this.cdr.detectChanges();
43
- });
44
- }
45
- ngOnChanges() {
46
- if (!this.firstChange) {
47
- this.buildLinks();
48
- }
49
- }
50
- computeItemPosition() {
51
- const lineHeight = this.ganttUpper.styles.lineHeight;
52
- const barHeight = this.ganttUpper.styles.barHeight;
53
- this.linkItems = [];
54
- if (this.groups.length > 0) {
55
- let itemNum = 0;
56
- let groupNum = 0;
57
- this.groups.forEach((group) => {
58
- groupNum++;
59
- if (group.expanded) {
60
- const items = recursiveItems(group.items);
61
- items.forEach((item, itemIndex) => {
62
- const y = (groupNum + itemNum + itemIndex) * lineHeight + item.refs.y + barHeight / 2;
63
- this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
64
- x: item.refs.x,
65
- y
66
- }, after: {
67
- x: item.refs.x + item.refs.width,
68
- y
69
- } }));
70
- });
71
- itemNum += items.length;
72
- }
73
- });
74
- }
75
- else {
76
- const items = recursiveItems(this.items);
77
- items.forEach((item, itemIndex) => {
78
- const y = itemIndex * lineHeight + item.refs.y + barHeight / 2;
79
- this.linkItems.push(Object.assign(Object.assign({}, item), { before: {
80
- x: item.refs.x,
81
- y
82
- }, after: {
83
- x: item.refs.x + item.refs.width,
84
- y
85
- } }));
86
- });
87
- }
88
- }
89
- buildLinks() {
90
- this.computeItemPosition();
91
- this.links = [];
92
- this.linkItems.forEach((source) => {
93
- if (source.origin.start || source.origin.end) {
94
- source.links.forEach((link) => {
95
- const target = this.linkItems.find((item) => item.id === link.link);
96
- if (target && (target.origin.start || target.origin.end)) {
97
- let defaultColor = LinkColors.default;
98
- let activeColor = LinkColors.active;
99
- if (link.type === GanttLinkType.fs && source.end.getTime() > target.start.getTime()) {
100
- defaultColor = LinkColors.blocked;
101
- activeColor = LinkColors.blocked;
102
- }
103
- if (link.color) {
104
- if (typeof link.color === 'string') {
105
- defaultColor = link.color;
106
- activeColor = link.color;
107
- }
108
- else {
109
- defaultColor = link.color.default;
110
- activeColor = link.color.active;
111
- }
112
- }
113
- this.links.push({
114
- path: this.linkLine.generatePath(source, target, link.type),
115
- source: source.origin,
116
- target: target.origin,
117
- type: link.type,
118
- color: defaultColor,
119
- defaultColor,
120
- activeColor
121
- });
122
- }
123
- });
124
- }
125
- });
126
- }
127
- trackBy(index) {
128
- return index;
129
- }
130
- onLineClick(event, link) {
131
- this.lineClick.emit({
132
- event,
133
- source: link.source,
134
- target: link.target
135
- });
136
- }
137
- mouseEnterPath(link, index) {
138
- link.color = link.activeColor || link.defaultColor;
139
- if (index < this.links.length - 1) {
140
- this.links.splice(index, 1);
141
- this.links.push(link);
142
- }
143
- }
144
- mouseLeavePath(link) {
145
- link.color = link.defaultColor;
146
- }
147
- ngOnDestroy() {
148
- this.unsubscribe$.next();
149
- this.unsubscribe$.complete();
150
- }
151
- }
152
- GanttLinksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttLinksComponent, deps: [{ token: GANTT_UPPER_TOKEN }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.GanttDragContainer }], target: i0.ɵɵFactoryTarget.Component });
153
- GanttLinksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: GanttLinksComponent, selector: "gantt-links-overlay", inputs: { groups: "groups", items: "items" }, outputs: { lineClick: "lineClick" }, host: { properties: { "class.gantt-links-overlay": "this.ganttLinksOverlay" } }, usesOnChanges: true, ngImport: i0, template: "<svg [attr.width]=\"ganttUpper.view.width\" class=\"gantt-links-overlay-main\">\n <ng-container *ngFor=\"let link of links; let i = index; trackBy: trackBy\">\n <path\n [attr.d]=\"link.path\"\n fill=\"transparent\"\n stroke-width=\"2\"\n [attr.stroke]=\"link.color\"\n pointer-events=\"none\"\n [attr.style]=\"link.type === ganttLinkTypes.sf ? 'marker-start: url(#triangle' + i + ')' : 'marker-end: url(#triangle' + i + ')'\"\n ></path>\n\n <g>\n <path\n class=\"link-line\"\n (click)=\"onLineClick($event, link)\"\n [attr.d]=\"link.path\"\n (mouseenter)=\"mouseEnterPath(link, i)\"\n (mouseleave)=\"mouseLeavePath(link)\"\n stroke=\"transparent\"\n stroke-width=\"9\"\n fill=\"none\"\n cursor=\"pointer\"\n ></path>\n </g>\n <defs *ngIf=\"showArrow\">\n <marker\n *ngIf=\"link.type === ganttLinkTypes.sf; else markerEnd\"\n [id]=\"'triangle' + i\"\n markerUnits=\"strokeWidth\"\n markerWidth=\"5\"\n markerHeight=\"4\"\n refX=\"5\"\n refY=\"2\"\n orient=\"180\"\n >\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n\n <ng-template #markerEnd>\n <marker [id]=\"'triangle' + i\" markerUnits=\"strokeWidth\" markerWidth=\"5\" markerHeight=\"4\" refX=\"5\" refY=\"2\" orient=\"auto\">\n <path [attr.fill]=\"link.color\" [attr.stroke]=\"link.color\" d=\"M 0 0 L 5 2 L 0 4 z\" />\n </marker>\n </ng-template>\n </defs>\n </ng-container>\n <line class=\"link-dragging-line\"></line>\n</svg>\n", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttLinksComponent, decorators: [{
155
- type: Component,
156
- args: [{
157
- selector: 'gantt-links-overlay',
158
- templateUrl: './links.component.html'
159
- }]
160
- }], ctorParameters: function () { return [{ type: i3.GanttUpper, decorators: [{
161
- type: Inject,
162
- args: [GANTT_UPPER_TOKEN]
163
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.GanttDragContainer }]; }, propDecorators: { groups: [{
164
- type: Input
165
- }], items: [{
166
- type: Input
167
- }], lineClick: [{
168
- type: Output
169
- }], ganttLinksOverlay: [{
170
- type: HostBinding,
171
- args: ['class.gantt-links-overlay']
172
- }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvbGlua3MvbGlua3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUtULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQStCLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFNdEQsTUFBTSxPQUFPLG1CQUFtQjtJQXVCNUIsWUFDc0MsVUFBc0IsRUFDaEQsR0FBc0IsRUFDdEIsVUFBc0IsRUFDdEIsa0JBQXNDO1FBSFosZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNoRCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUExQnpDLFdBQU0sR0FBeUIsRUFBRSxDQUFDO1FBRWxDLFVBQUssR0FBd0IsRUFBRSxDQUFDO1FBRS9CLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUV2RCxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUUzQixtQkFBYyxHQUFHLGFBQWEsQ0FBQztRQUUvQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGNBQVMsR0FBb0IsRUFBRSxDQUFDO1FBRWhDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBSW5CLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVLLHNCQUFpQixHQUFHLElBQUksQ0FBQztJQU9oRSxDQUFDO0lBRUosUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUzRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FDaEM7YUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzVELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUMzRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3JCO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNoQixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMxQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO3dCQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQ3RGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxpQ0FDWixJQUFJLEtBQ1AsTUFBTSxFQUFFO2dDQUNKLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ2QsQ0FBQzs2QkFDSixFQUNELEtBQUssRUFBRTtnQ0FDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dDQUNoQyxDQUFDOzZCQUNKLElBQ0gsQ0FBQztvQkFDUCxDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDM0I7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGlDQUNaLElBQUksS0FDUCxNQUFNLEVBQUU7d0JBQ0osQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDZCxDQUFDO3FCQUNKLEVBQ0QsS0FBSyxFQUFFO3dCQUNILENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQ2hDLENBQUM7cUJBQ0osSUFDSCxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3BFLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDdEQsSUFBSSxZQUFZLEdBQVcsVUFBVSxDQUFDLE9BQU8sQ0FBQzt3QkFDOUMsSUFBSSxXQUFXLEdBQVcsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFFNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUNqRixZQUFZLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQzs0QkFDbEMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7eUJBQ3BDO3dCQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTs0QkFDWixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0NBQ2hDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dDQUMxQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs2QkFDNUI7aUNBQU07Z0NBQ0gsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dDQUNsQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7NkJBQ25DO3lCQUNKO3dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQzNELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTs0QkFDckIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNOzRCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ2YsS0FBSyxFQUFFLFlBQVk7NEJBQ25CLFlBQVk7NEJBQ1osV0FBVzt5QkFDZCxDQUFDLENBQUM7cUJBQ047Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUIsRUFBRSxJQUFrQjtRQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNoQixLQUFLO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWtCLEVBQUUsS0FBYTtRQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNuRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFrQjtRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQzs7Z0hBaExRLG1CQUFtQixrQkF3QmhCLGlCQUFpQjtvR0F4QnBCLG1CQUFtQixvUEM3QmhDLGdwREErQ0E7MkZEbEJhLG1CQUFtQjtrQkFKL0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixXQUFXLEVBQUUsd0JBQXdCO2lCQUN4Qzs7MEJBeUJRLE1BQU07MkJBQUMsaUJBQWlCO3NJQXZCcEIsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQWdCbUMsaUJBQWlCO3NCQUExRCxXQUFXO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBza2lwLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dEdyb3VwSW50ZXJuYWwgfSBmcm9tICcuLi8uLi9jbGFzcy9ncm91cCc7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCB9IGZyb20gJy4vLi4vLi4vY2xhc3MvaXRlbSc7XG5pbXBvcnQgeyBHYW50dExpbmVDbGlja0V2ZW50IH0gZnJvbSAnLi4vLi4vY2xhc3MvZXZlbnQnO1xuaW1wb3J0IHsgR2FudHREcmFnQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgcmVjdXJzaXZlSXRlbXMgfSBmcm9tICcuLi8uLi91dGlscy9oZWxwZXJzJztcbmltcG9ydCB7IEdBTlRUX1VQUEVSX1RPS0VOLCBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rSXRlbSwgTGlua0ludGVybmFsLCBMaW5rQ29sb3JzLCBHYW50dExpbmtUeXBlIH0gZnJvbSAnLi4vLi4vY2xhc3MvbGluayc7XG5pbXBvcnQgeyBHYW50dExpbmtMaW5lIH0gZnJvbSAnLi9saW5lcy9saW5lJztcbmltcG9ydCB7IGNyZWF0ZUxpbmVHZW5lcmF0b3IgfSBmcm9tICcuL2xpbmVzL2ZhY3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dhbnR0LWxpbmtzLW92ZXJsYXknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saW5rcy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRMaW5rc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGdyb3VwczogR2FudHRHcm91cEludGVybmFsW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG5cbiAgICBAT3V0cHV0KCkgbGluZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExpbmVDbGlja0V2ZW50PigpO1xuXG4gICAgcHVibGljIGxpbmtzOiBMaW5rSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHVibGljIGdhbnR0TGlua1R5cGVzID0gR2FudHRMaW5rVHlwZTtcblxuICAgIHB1YmxpYyBzaG93QXJyb3cgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgbGlua0l0ZW1zOiBHYW50dExpbmtJdGVtW10gPSBbXTtcblxuICAgIHByaXZhdGUgZmlyc3RDaGFuZ2UgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBsaW5rTGluZTogR2FudHRMaW5rTGluZTtcblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQtbGlua3Mtb3ZlcmxheScpIGdhbnR0TGlua3NPdmVybGF5ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEdBTlRUX1VQUEVSX1RPS0VOKSBwdWJsaWMgZ2FudHRVcHBlcjogR2FudHRVcHBlcixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgZ2FudHREcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXJcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5saW5rTGluZSA9IGNyZWF0ZUxpbmVHZW5lcmF0b3IodGhpcy5nYW50dFVwcGVyLmxpbmtPcHRpb25zLmxpbmVUeXBlLCB0aGlzLmdhbnR0VXBwZXIpO1xuXG4gICAgICAgIHRoaXMuc2hvd0Fycm93ID0gdGhpcy5nYW50dFVwcGVyLmxpbmtPcHRpb25zLnNob3dBcnJvdztcbiAgICAgICAgdGhpcy5idWlsZExpbmtzKCk7XG4gICAgICAgIHRoaXMuZmlyc3RDaGFuZ2UgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmdhbnR0RHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXdDaGFuZ2UsXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuZXhwYW5kQ2hhbmdlLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXcuc3RhcnQkLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmRyYWdFbmRlZCxcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5saW5rRHJhZ0VuZGVkXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHNraXAoMSksIGRlYm91bmNlVGltZSgwKSwgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZExpbmtzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5idWlsZExpbmtzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVJdGVtUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0aGlzLmdhbnR0VXBwZXIuc3R5bGVzLmxpbmVIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGJhckhlaWdodCA9IHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0O1xuICAgICAgICB0aGlzLmxpbmtJdGVtcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGl0ZW1OdW0gPSAwO1xuICAgICAgICAgICAgbGV0IGdyb3VwTnVtID0gMDtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgZ3JvdXBOdW0rKztcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IChncm91cE51bSArIGl0ZW1OdW0gKyBpdGVtSW5kZXgpICogbGluZUhlaWdodCArIGl0ZW0ucmVmcy55ICsgYmFySGVpZ2h0IC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlua0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGl0ZW0ucmVmcy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnJlZnMueCArIGl0ZW0ucmVmcy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU51bSArPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IGl0ZW1JbmRleCAqIGxpbmVIZWlnaHQgKyBpdGVtLnJlZnMueSArIGJhckhlaWdodCAvIDI7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogaXRlbS5yZWZzLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBpdGVtLnJlZnMueCArIGl0ZW0ucmVmcy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWlsZExpbmtzKCkge1xuICAgICAgICB0aGlzLmNvbXB1dGVJdGVtUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5saW5rcyA9IFtdO1xuICAgICAgICB0aGlzLmxpbmtJdGVtcy5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChzb3VyY2Uub3JpZ2luLnN0YXJ0IHx8IHNvdXJjZS5vcmlnaW4uZW5kKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLmxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5saW5rSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5saW5rKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0Lm9yaWdpbi5zdGFydCB8fCB0YXJnZXQub3JpZ2luLmVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0Q29sb3I6IHN0cmluZyA9IExpbmtDb2xvcnMuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3RpdmVDb2xvcjogc3RyaW5nID0gTGlua0NvbG9ycy5hY3RpdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rLnR5cGUgPT09IEdhbnR0TGlua1R5cGUuZnMgJiYgc291cmNlLmVuZC5nZXRUaW1lKCkgPiB0YXJnZXQuc3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yID0gTGlua0NvbG9ycy5ibG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yID0gTGlua0NvbG9ycy5ibG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmsuY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGxpbmsuY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2xvciA9IGxpbmsuY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yID0gbGluay5jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IgPSBsaW5rLmNvbG9yLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yID0gbGluay5jb2xvci5hY3RpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmtzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMubGlua0xpbmUuZ2VuZXJhdGVQYXRoKHNvdXJjZSwgdGFyZ2V0LCBsaW5rLnR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlLm9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldC5vcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogbGluay50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBkZWZhdWx0Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIG9uTGluZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBsaW5rOiBMaW5rSW50ZXJuYWwpIHtcbiAgICAgICAgdGhpcy5saW5lQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHNvdXJjZTogbGluay5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IGxpbmsudGFyZ2V0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1vdXNlRW50ZXJQYXRoKGxpbms6IExpbmtJbnRlcm5hbCwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBsaW5rLmNvbG9yID0gbGluay5hY3RpdmVDb2xvciB8fCBsaW5rLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5saW5rcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmxpbmtzLnB1c2gobGluayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3VzZUxlYXZlUGF0aChsaW5rOiBMaW5rSW50ZXJuYWwpIHtcbiAgICAgICAgbGluay5jb2xvciA9IGxpbmsuZGVmYXVsdENvbG9yO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPHN2ZyBbYXR0ci53aWR0aF09XCJnYW50dFVwcGVyLnZpZXcud2lkdGhcIiBjbGFzcz1cImdhbnR0LWxpbmtzLW92ZXJsYXktbWFpblwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaW5rIG9mIGxpbmtzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCI+XG4gICAgPHBhdGhcbiAgICAgIFthdHRyLmRdPVwibGluay5wYXRoXCJcbiAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJsaW5rLmNvbG9yXCJcbiAgICAgIHBvaW50ZXItZXZlbnRzPVwibm9uZVwiXG4gICAgICBbYXR0ci5zdHlsZV09XCJsaW5rLnR5cGUgPT09IGdhbnR0TGlua1R5cGVzLnNmID8gJ21hcmtlci1zdGFydDogdXJsKCN0cmlhbmdsZScgKyBpICsgJyknIDogJ21hcmtlci1lbmQ6IHVybCgjdHJpYW5nbGUnICsgaSArICcpJ1wiXG4gICAgPjwvcGF0aD5cblxuICAgIDxnPlxuICAgICAgPHBhdGhcbiAgICAgICAgY2xhc3M9XCJsaW5rLWxpbmVcIlxuICAgICAgICAoY2xpY2spPVwib25MaW5lQ2xpY2soJGV2ZW50LCBsaW5rKVwiXG4gICAgICAgIFthdHRyLmRdPVwibGluay5wYXRoXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlclBhdGgobGluaywgaSlcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlUGF0aChsaW5rKVwiXG4gICAgICAgIHN0cm9rZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiOVwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgY3Vyc29yPVwicG9pbnRlclwiXG4gICAgICA+PC9wYXRoPlxuICAgIDwvZz5cbiAgICA8ZGVmcyAqbmdJZj1cInNob3dBcnJvd1wiPlxuICAgICAgPG1hcmtlclxuICAgICAgICAqbmdJZj1cImxpbmsudHlwZSA9PT0gZ2FudHRMaW5rVHlwZXMuc2Y7IGVsc2UgbWFya2VyRW5kXCJcbiAgICAgICAgW2lkXT1cIid0cmlhbmdsZScgKyBpXCJcbiAgICAgICAgbWFya2VyVW5pdHM9XCJzdHJva2VXaWR0aFwiXG4gICAgICAgIG1hcmtlcldpZHRoPVwiNVwiXG4gICAgICAgIG1hcmtlckhlaWdodD1cIjRcIlxuICAgICAgICByZWZYPVwiNVwiXG4gICAgICAgIHJlZlk9XCIyXCJcbiAgICAgICAgb3JpZW50PVwiMTgwXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGggW2F0dHIuZmlsbF09XCJsaW5rLmNvbG9yXCIgW2F0dHIuc3Ryb2tlXT1cImxpbmsuY29sb3JcIiBkPVwiTSAwIDAgTCA1IDIgTCAwIDQgelwiIC8+XG4gICAgICA8L21hcmtlcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNtYXJrZXJFbmQ+XG4gICAgICAgIDxtYXJrZXIgW2lkXT1cIid0cmlhbmdsZScgKyBpXCIgbWFya2VyVW5pdHM9XCJzdHJva2VXaWR0aFwiIG1hcmtlcldpZHRoPVwiNVwiIG1hcmtlckhlaWdodD1cIjRcIiByZWZYPVwiNVwiIHJlZlk9XCIyXCIgb3JpZW50PVwiYXV0b1wiPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmZpbGxdPVwibGluay5jb2xvclwiIFthdHRyLnN0cm9rZV09XCJsaW5rLmNvbG9yXCIgZD1cIk0gMCAwIEwgNSAyIEwgMCA0IHpcIiAvPlxuICAgICAgICA8L21hcmtlcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kZWZzPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGxpbmUgY2xhc3M9XCJsaW5rLWRyYWdnaW5nLWxpbmVcIj48L2xpbmU+XG48L3N2Zz5cbiJdfQ==
@@ -1,167 +0,0 @@
1
- import { Component, HostBinding, Input, ViewChild, Inject, Output, EventEmitter } from '@angular/core';
2
- import { coerceCssPixelValue } from '@angular/cdk/coercion';
3
- import { GANTT_ABSTRACT_TOKEN } from '../../gantt-abstract';
4
- import { GANTT_UPPER_TOKEN } from '../../gantt-upper';
5
- import { setStyleWithVendorPrefix } from '../../utils/set-style-with-vendor-prefix';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../icon/icon.component";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@angular/cdk/drag-drop";
10
- import * as i4 from "../../gantt.pipe";
11
- import * as i5 from "../../gantt-upper";
12
- export const defaultColumnWidth = 100;
13
- export const minColumnWidth = 80;
14
- export class GanttTableComponent {
15
- constructor(gantt, ganttUpper, elementRef) {
16
- this.gantt = gantt;
17
- this.ganttUpper = ganttUpper;
18
- this.elementRef = elementRef;
19
- this.itemClick = new EventEmitter();
20
- this.ganttTableClass = true;
21
- this.ganttTableEmptyClass = false;
22
- }
23
- set columns(columns) {
24
- columns.forEach((column) => {
25
- if (!column.columnWidth) {
26
- column.columnWidth = coerceCssPixelValue(defaultColumnWidth);
27
- }
28
- });
29
- this.columnList = columns;
30
- }
31
- ngOnChanges(changes) {
32
- var _a, _b;
33
- if (!((_a = changes.groups.currentValue) === null || _a === void 0 ? void 0 : _a.length) && !((_b = changes.items.currentValue) === null || _b === void 0 ? void 0 : _b.length)) {
34
- this.ganttTableEmptyClass = true;
35
- }
36
- else {
37
- this.ganttTableEmptyClass = false;
38
- }
39
- }
40
- dragFixed(config) {
41
- if (config.movedWidth < config.minWidth) {
42
- setStyleWithVendorPrefix({
43
- element: config.target,
44
- style: 'transform',
45
- value: `translate3d(${config.minWidth - config.originWidth}px, 0, 0)`
46
- });
47
- }
48
- }
49
- expandGroup(group) {
50
- this.gantt.expandGroup(group);
51
- }
52
- expandChildren(event, item) {
53
- event.stopPropagation();
54
- this.gantt.expandChildren(item);
55
- }
56
- dragStarted(event) {
57
- const target = event.source.element.nativeElement;
58
- this.dragStartLeft = target.getBoundingClientRect().left;
59
- }
60
- dragMoved(event, column) {
61
- const target = event.source.element.nativeElement;
62
- const left = target.getBoundingClientRect().left;
63
- let originWidth;
64
- let movedWidth;
65
- let minWidth;
66
- if (column) {
67
- originWidth = parseInt(column.columnWidth, 10);
68
- movedWidth = originWidth + (left - this.dragStartLeft);
69
- minWidth = minColumnWidth;
70
- }
71
- else {
72
- originWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
73
- movedWidth = originWidth + (left - this.dragStartLeft);
74
- minWidth = minColumnWidth * this.columnList.length;
75
- }
76
- this.dragFixed({
77
- target,
78
- originWidth,
79
- movedWidth,
80
- minWidth
81
- });
82
- this.showAuxiliaryLine(event);
83
- }
84
- columnDragEnded(event, column) {
85
- const target = event.source.element.nativeElement;
86
- const left = target.getBoundingClientRect().left;
87
- const width = parseInt(column.columnWidth, 10) + (left - this.dragStartLeft);
88
- const columnWidth = Math.max(width || 0, minColumnWidth);
89
- column.columnWidth = coerceCssPixelValue(columnWidth);
90
- if (this.gantt.table) {
91
- this.gantt.table.columnChanges.emit({ columns: this.columnList });
92
- }
93
- this.hideAuxiliaryLine();
94
- event.source.reset();
95
- }
96
- tableDragEnded(event) {
97
- const target = event.source.element.nativeElement;
98
- const left = target.getBoundingClientRect().left;
99
- const tableWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
100
- const dragWidth = left - this.dragStartLeft;
101
- this.columnList.forEach((column) => {
102
- const lastColumnWidth = parseInt(column.columnWidth, 10);
103
- const distributeWidth = parseInt(String(dragWidth * (lastColumnWidth / tableWidth)), 10);
104
- const columnWidth = Math.max(lastColumnWidth + distributeWidth || 0, minColumnWidth);
105
- column.columnWidth = coerceCssPixelValue(columnWidth);
106
- });
107
- if (this.gantt.table) {
108
- this.gantt.table.columnChanges.emit({ columns: this.columnList });
109
- }
110
- this.hideAuxiliaryLine();
111
- event.source.reset();
112
- }
113
- showAuxiliaryLine(event) {
114
- const tableRect = this.elementRef.nativeElement.getBoundingClientRect();
115
- const targetRect = event.source.element.nativeElement.getBoundingClientRect();
116
- const distance = { x: targetRect.left - tableRect.left, y: targetRect.top - tableRect.top };
117
- this.draglineElementRef.nativeElement.style.left = `${distance.x}px`;
118
- this.draglineElementRef.nativeElement.style.display = 'block';
119
- }
120
- hideAuxiliaryLine() {
121
- this.draglineElementRef.nativeElement.style.display = 'none';
122
- }
123
- trackBy(index, item) {
124
- return item.id || index;
125
- }
126
- }
127
- GanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttTableComponent, deps: [{ token: GANTT_ABSTRACT_TOKEN }, { token: GANTT_UPPER_TOKEN }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
128
- GanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: GanttTableComponent, selector: "gantt-table", inputs: { groups: "groups", items: "items", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate", rowBeforeTemplate: "rowBeforeTemplate", rowAfterTemplate: "rowAfterTemplate" }, outputs: { itemClick: "itemClick" }, host: { properties: { "class.gantt-table": "this.ganttTableClass", "class.gantt-table-empty": "this.ganttTableEmptyClass" } }, viewQueries: [{ propertyName: "draglineElementRef", first: true, predicate: ["dragLine"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"gantt-table-header gantt-table-row\">\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let i = index\" [style.width]=\"column.columnWidth\">\n <ng-container *ngIf=\"column.headerTemplateRef; else default\" [ngTemplateOutlet]=\"column.headerTemplateRef\"></ng-container>\n <ng-template #default>\n {{ column.name }}\n </ng-template>\n <div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event, column)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"columnDragEnded($event, column)\"\n ></div>\n </div>\n</div>\n<div class=\"gantt-table-body\">\n <ng-container *ngIf=\"!groups.length && !items.length\">\n <ng-container *ngIf=\"!emptyTemplate\">\n <gantt-icon class=\"empty-icon\" iconName=\"empty\"></gantt-icon>\n <div class=\"empty-text\">\u6CA1\u6709\u6570\u636E</div>\n </ng-container>\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"groups && groups.length > 0; else itemsTemplate\">\n <ng-container *ngFor=\"let group of groups; trackBy: trackBy\">\n <div class=\"gantt-table-group\" [ngClass]=\"group.class\">\n <div class=\"gantt-table-group-title\" [class.expanded]=\"group.expanded\" (click)=\"expandGroup(group)\">\n <gantt-icon class=\"expand-icon\" [iconName]=\"group.expanded ? 'angle-down' : 'angle-right'\"></gantt-icon>\n <ng-container *ngIf=\"groupTemplate; else default\">\n <ng-template\n [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: group.origin, group: group.origin }\"\n ></ng-template>\n </ng-container>\n <ng-template #default>\n <span class=\"group-title\">{{ group.title }}</span>\n </ng-template>\n </div>\n </div>\n\n <ng-container *ngIf=\"group.expanded\">\n <ng-template\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ group: group, items: group.items, level: 0 }\"\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<div\n class=\"gantt-table-drag-trigger\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n cdkDragBoundary=\".gantt\"\n (cdkDragMoved)=\"dragMoved($event)\"\n (cdkDragStarted)=\"dragStarted($event)\"\n (cdkDragEnded)=\"tableDragEnded($event)\"\n></div>\n\n<div #dragLine class=\"gantt-table-drag-auxiliary-line\"></div>\n\n<ng-template #itemsTemplate>\n <ng-template [ngTemplateOutlet]=\"ganttItems\" [ngTemplateOutletContext]=\"{ items: items, level: 0 }\"></ng-template>\n</ng-template>\n\n<ng-template #ganttItems let-group=\"group\" let-items=\"items\" let-level=\"level\">\n <ng-container *ngFor=\"let item of items; trackBy: trackBy\">\n <div\n (click)=\"itemClick.emit({ event: $event, selectedValue: this.item.origin })\"\n class=\"gantt-table-item gantt-table-row\"\n [class.gantt-table-item-first-level-group]=\"level === 0 && (item.type | isGanttRangeItem)\"\n [class.gantt-table-item-with-group]=\"group\"\n [class.gantt-table-item-active]=\"ganttUpper.isSelected(item.id)\"\n [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\n <ng-template\n [ngTemplateOutlet]=\"rowBeforeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n <div class=\"gantt-table-column\" *ngFor=\"let column of columnList; let first = first\" [style.width]=\"column.columnWidth\">\n <div *ngIf=\"first\" class=\"gantt-expand-icon\" [style.marginLeft.px]=\"level * 20\">\n <ng-container *ngIf=\"level < gantt.maxLevel - 1 && item.expandable\">\n <gantt-icon\n *ngIf=\"!item.loading\"\n class=\"expand-icon\"\n [iconName]=\"item.expanded ? 'angle-down' : 'angle-right'\"\n (click)=\"expandChildren($event, item)\"\n ></gantt-icon>\n <gantt-icon *ngIf=\"item.loading\" [iconName]=\"'loading'\"></gantt-icon>\n </ng-container>\n </div>\n <div class=\"gantt-table-column-content\">\n <ng-template\n [ngTemplateOutlet]=\"column.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"rowAfterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.origin, item: item.origin }\"\n ></ng-template>\n </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", components: [{ type: i1.GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "isGanttRangeItem": i4.IsGanttRangeItemPipe } });
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttTableComponent, decorators: [{
130
- type: Component,
131
- args: [{
132
- selector: 'gantt-table',
133
- templateUrl: './gantt-table.component.html'
134
- }]
135
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
136
- type: Inject,
137
- args: [GANTT_ABSTRACT_TOKEN]
138
- }] }, { type: i5.GanttUpper, decorators: [{
139
- type: Inject,
140
- args: [GANTT_UPPER_TOKEN]
141
- }] }, { type: i0.ElementRef }]; }, propDecorators: { groups: [{
142
- type: Input
143
- }], items: [{
144
- type: Input
145
- }], columns: [{
146
- type: Input
147
- }], groupTemplate: [{
148
- type: Input
149
- }], emptyTemplate: [{
150
- type: Input
151
- }], rowBeforeTemplate: [{
152
- type: Input
153
- }], rowAfterTemplate: [{
154
- type: Input
155
- }], itemClick: [{
156
- type: Output
157
- }], draglineElementRef: [{
158
- type: ViewChild,
159
- args: ['dragLine', { static: true }]
160
- }], ganttTableClass: [{
161
- type: HostBinding,
162
- args: ['class.gantt-table']
163
- }], ganttTableEmptyClass: [{
164
- type: HostBinding,
165
- args: ['class.gantt-table-empty']
166
- }] } });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvdGFibGUvZ2FudHQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBR1gsS0FBSyxFQUNMLFNBQVMsRUFJVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQTBCLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEYsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7QUFFcEYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFZakMsTUFBTSxPQUFPLG1CQUFtQjtJQW1DNUIsWUFDeUMsS0FBNkIsRUFDaEMsVUFBc0IsRUFDaEQsVUFBc0I7UUFGTyxVQUFLLEdBQUwsS0FBSyxDQUF3QjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2hELGVBQVUsR0FBVixVQUFVLENBQVk7UUFYeEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBSTNCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRWpCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztJQU1sRSxDQUFDO0lBOUJKLElBQ0ksT0FBTyxDQUFDLE9BQWdE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dCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCwgR2FudHRHcm91cEludGVybmFsLCBHYW50dFNlbGVjdGVkRXZlbnQgfSBmcm9tICcuLi8uLi9jbGFzcyc7XG5pbXBvcnQgeyBOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFibGUvZ2FudHQtY29sdW1uLmNvbXBvbmVudCc7XG4vLyBpbXBvcnQgeyBkZWZhdWx0Q29sdW1uV2lkdGgsIG1pbkNvbHVtbldpZHRoIH0gZnJvbSAnLi4vLi4vZ2FudHQuY29tcG9uZW50JztcbmltcG9ydCB7IENka0RyYWdFbmQsIENka0RyYWdNb3ZlLCBDZGtEcmFnU3RhcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgR2FudHRBYnN0cmFjdENvbXBvbmVudCwgR0FOVFRfQUJTVFJBQ1RfVE9LRU4gfSBmcm9tICcuLi8uLi9nYW50dC1hYnN0cmFjdCc7XG5pbXBvcnQgeyBHYW50dFVwcGVyLCBHQU5UVF9VUFBFUl9UT0tFTiB9IGZyb20gJy4uLy4uL2dhbnR0LXVwcGVyJztcbmltcG9ydCB7IHNldFN0eWxlV2l0aFZlbmRvclByZWZpeCB9IGZyb20gJy4uLy4uL3V0aWxzL3NldC1zdHlsZS13aXRoLXZlbmRvci1wcmVmaXgnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbHVtbldpZHRoID0gMTAwO1xuZXhwb3J0IGNvbnN0IG1pbkNvbHVtbldpZHRoID0gODA7XG5cbmludGVyZmFjZSBEcmFnRml4ZWRDb25maWcge1xuICAgIHRhcmdldDogSFRNTEVsZW1lbnQ7XG4gICAgb3JpZ2luV2lkdGg6IG51bWJlcjtcbiAgICBtb3ZlZFdpZHRoOiBudW1iZXI7XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2FudHQtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nYW50dC10YWJsZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgR2FudHRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgcHVibGljIGNvbHVtbkxpc3Q6IFF1ZXJ5TGlzdDxOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50PjtcblxuICAgIHB1YmxpYyBkcmFnU3RhcnRMZWZ0OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBncm91cHM6IEdhbnR0R3JvdXBJbnRlcm5hbFtdO1xuXG4gICAgQElucHV0KCkgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW107XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2x1bW5zKGNvbHVtbnM6IFF1ZXJ5TGlzdDxOZ3hHYW50dFRhYmxlQ29sdW1uQ29tcG9uZW50Pikge1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb2x1bW4uY29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uY29sdW1uV2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGRlZmF1bHRDb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbkxpc3QgPSBjb2x1bW5zO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBlbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgcm93QmVmb3JlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSByb3dBZnRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQE91dHB1dCgpIGl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRTZWxlY3RlZEV2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZHJhZ0xpbmUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcmFnbGluZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dC10YWJsZScpIGdhbnR0VGFibGVDbGFzcyA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LXRhYmxlLWVtcHR5JykgZ2FudHRUYWJsZUVtcHR5Q2xhc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEdBTlRUX0FCU1RSQUNUX1RPS0VOKSBwdWJsaWMgZ2FudHQ6IEdhbnR0QWJzdHJhY3RDb21wb25lbnQsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghY2hhbmdlcy5ncm91cHMuY3VycmVudFZhbHVlPy5sZW5ndGggJiYgIWNoYW5nZXMuaXRlbXMuY3VycmVudFZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2FudHRUYWJsZUVtcHR5Q2xhc3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nYW50dFRhYmxlRW1wdHlDbGFzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmFnRml4ZWQoY29uZmlnOiBEcmFnRml4ZWRDb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5tb3ZlZFdpZHRoIDwgY29uZmlnLm1pbldpZHRoKSB7XG4gICAgICAgICAgICBzZXRTdHlsZVdpdGhWZW5kb3JQcmVmaXgoe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGNvbmZpZy50YXJnZXQsXG4gICAgICAgICAgICAgICAgc3R5bGU6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBgdHJhbnNsYXRlM2QoJHtjb25maWcubWluV2lkdGggLSBjb25maWcub3JpZ2luV2lkdGh9cHgsIDAsIDApYFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKSB7XG4gICAgICAgIHRoaXMuZ2FudHQuZXhwYW5kR3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIGV4cGFuZENoaWxkcmVuKGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5nYW50dC5leHBhbmRDaGlsZHJlbihpdGVtKTtcbiAgICB9XG5cbiAgICBkcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnNvdXJjZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0TGVmdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIH1cblxuICAgIGRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmUsIGNvbHVtbj86IE5neEdhbnR0VGFibGVDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgIGxldCBvcmlnaW5XaWR0aDogbnVtYmVyO1xuICAgICAgICBsZXQgbW92ZWRXaWR0aDogbnVtYmVyO1xuICAgICAgICBsZXQgbWluV2lkdGg6IG51bWJlcjtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgb3JpZ2luV2lkdGggPSBwYXJzZUludChjb2x1bW4uY29sdW1uV2lkdGgsIDEwKTtcbiAgICAgICAgICAgIG1vdmVkV2lkdGggPSBvcmlnaW5XaWR0aCArIChsZWZ0IC0gdGhpcy5kcmFnU3RhcnRMZWZ0KTtcbiAgICAgICAgICAgIG1pbldpZHRoID0gbWluQ29sdW1uV2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcmlnaW5XaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgbW92ZWRXaWR0aCA9IG9yaWdpbldpZHRoICsgKGxlZnQgLSB0aGlzLmRyYWdTdGFydExlZnQpO1xuICAgICAgICAgICAgbWluV2lkdGggPSBtaW5Db2x1bW5XaWR0aCAqIHRoaXMuY29sdW1uTGlzdC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyYWdGaXhlZCh7XG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBvcmlnaW5XaWR0aCxcbiAgICAgICAgICAgIG1vdmVkV2lkdGgsXG4gICAgICAgICAgICBtaW5XaWR0aFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNob3dBdXhpbGlhcnlMaW5lKGV2ZW50KTtcbiAgICB9XG5cbiAgICBjb2x1bW5EcmFnRW5kZWQoZXZlbnQ6IENka0RyYWdFbmQsIGNvbHVtbjogTmd4R2FudHRUYWJsZUNvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5zb3VyY2UuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoY29sdW1uLmNvbHVtbldpZHRoLCAxMCkgKyAobGVmdCAtIHRoaXMuZHJhZ1N0YXJ0TGVmdCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gTWF0aC5tYXgod2lkdGggfHwgMCwgbWluQ29sdW1uV2lkdGgpO1xuICAgICAgICBjb2x1bW4uY29sdW1uV2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGNvbHVtbldpZHRoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2FudHQudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2FudHQudGFibGUuY29sdW1uQ2hhbmdlcy5lbWl0KHsgY29sdW1uczogdGhpcy5jb2x1bW5MaXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWRlQXV4aWxpYXJ5TGluZSgpO1xuICAgICAgICBldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICB9XG5cbiAgICB0YWJsZURyYWdFbmRlZChldmVudDogQ2RrRHJhZ0VuZCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5zb3VyY2UuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgZHJhZ1dpZHRoID0gbGVmdCAtIHRoaXMuZHJhZ1N0YXJ0TGVmdDtcbiAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdENvbHVtbldpZHRoID0gcGFyc2VJbnQoY29sdW1uLmNvbHVtbldpZHRoLCAxMCk7XG4gICAgICAgICAgICBjb25zdCBkaXN0cmlidXRlV2lkdGggPSBwYXJzZUludChTdHJpbmcoZHJhZ1dpZHRoICogKGxhc3RDb2x1bW5XaWR0aCAvIHRhYmxlV2lkdGgpKSwgMTApO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBNYXRoLm1heChsYXN0Q29sdW1uV2lkdGggKyBkaXN0cmlidXRlV2lkdGggfHwgMCwgbWluQ29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgY29sdW1uLmNvbHVtbldpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShjb2x1bW5XaWR0aCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmdhbnR0LnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmdhbnR0LnRhYmxlLmNvbHVtbkNoYW5nZXMuZW1pdCh7IGNvbHVtbnM6IHRoaXMuY29sdW1uTGlzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGlkZUF1eGlsaWFyeUxpbmUoKTtcbiAgICAgICAgZXZlbnQuc291cmNlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93QXV4aWxpYXJ5TGluZShldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICAgICAgY29uc3QgdGFibGVSZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSBldmVudC5zb3VyY2UuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHsgeDogdGFyZ2V0UmVjdC5sZWZ0IC0gdGFibGVSZWN0LmxlZnQsIHk6IHRhcmdldFJlY3QudG9wIC0gdGFibGVSZWN0LnRvcCB9O1xuICAgICAgICB0aGlzLmRyYWdsaW5lRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtkaXN0YW5jZS54fXB4YDtcbiAgICAgICAgdGhpcy5kcmFnbGluZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVBdXhpbGlhcnlMaW5lKCkge1xuICAgICAgICB0aGlzLmRyYWdsaW5lRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHYW50dEdyb3VwSW50ZXJuYWwgfCBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtaGVhZGVyIGdhbnR0LXRhYmxlLXJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtY29sdW1uXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5MaXN0OyBsZXQgaSA9IGluZGV4XCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi5jb2x1bW5XaWR0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWY7IGVsc2UgZGVmYXVsdFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgIHt7IGNvbHVtbi5uYW1lIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdhbnR0LXRhYmxlLWRyYWctdHJpZ2dlclwiXG4gICAgICBjZGtEcmFnXG4gICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ4XCJcbiAgICAgIGNka0RyYWdCb3VuZGFyeT1cIi5nYW50dFwiXG4gICAgICAoY2RrRHJhZ01vdmVkKT1cImRyYWdNb3ZlZCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgKGNka0RyYWdFbmRlZCk9XCJjb2x1bW5EcmFnRW5kZWQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtYm9keVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3Vwcy5sZW5ndGggJiYgIWl0ZW1zLmxlbmd0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZW1wdHlUZW1wbGF0ZVwiPlxuICAgICAgPGdhbnR0LWljb24gY2xhc3M9XCJlbXB0eS1pY29uXCIgaWNvbk5hbWU9XCJlbXB0eVwiPjwvZ2FudHQtaWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS10ZXh0XCI+5rKh5pyJ5pWw5o2uPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBzICYmIGdyb3Vwcy5sZW5ndGggPiAwOyBlbHNlIGl0ZW1zVGVtcGxhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHM7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnYW50dC10YWJsZS1ncm91cFwiIFtuZ0NsYXNzXT1cImdyb3VwLmNsYXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnYW50dC10YWJsZS1ncm91cC10aXRsZVwiIFtjbGFzcy5leHBhbmRlZF09XCJncm91cC5leHBhbmRlZFwiIChjbGljayk9XCJleHBhbmRHcm91cChncm91cClcIj5cbiAgICAgICAgICA8Z2FudHQtaWNvbiBjbGFzcz1cImV4cGFuZC1pY29uXCIgW2ljb25OYW1lXT1cImdyb3VwLmV4cGFuZGVkID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiPjwvZ2FudHQtaWNvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZ3JvdXAub3JpZ2luLCBncm91cDogZ3JvdXAub3JpZ2luIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC10aXRsZVwiPnt7IGdyb3VwLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5leHBhbmRlZFwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnYW50dEl0ZW1zXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBncm91cDogZ3JvdXAsIGl0ZW1zOiBncm91cC5pdGVtcywgbGV2ZWw6IDAgfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXZcbiAgY2xhc3M9XCJnYW50dC10YWJsZS1kcmFnLXRyaWdnZXJcIlxuICBjZGtEcmFnXG4gIGNka0RyYWdMb2NrQXhpcz1cInhcIlxuICBjZGtEcmFnQm91bmRhcnk9XCIuZ2FudHRcIlxuICAoY2RrRHJhZ01vdmVkKT1cImRyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydGVkKCRldmVudClcIlxuICAoY2RrRHJhZ0VuZGVkKT1cInRhYmxlRHJhZ0VuZGVkKCRldmVudClcIlxuPjwvZGl2PlxuXG48ZGl2ICNkcmFnTGluZSBjbGFzcz1cImdhbnR0LXRhYmxlLWRyYWctYXV4aWxpYXJ5LWxpbmVcIj48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNpdGVtc1RlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2FudHRJdGVtc1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW1zOiBpdGVtcywgbGV2ZWw6IDAgfVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2dhbnR0SXRlbXMgbGV0LWdyb3VwPVwiZ3JvdXBcIiBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlcIj5cbiAgICA8ZGl2XG4gICAgICAoY2xpY2spPVwiaXRlbUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCBzZWxlY3RlZFZhbHVlOiB0aGlzLml0ZW0ub3JpZ2luIH0pXCJcbiAgICAgIGNsYXNzPVwiZ2FudHQtdGFibGUtaXRlbSBnYW50dC10YWJsZS1yb3dcIlxuICAgICAgW2NsYXNzLmdhbnR0LXRhYmxlLWl0ZW0tZmlyc3QtbGV2ZWwtZ3JvdXBdPVwibGV2ZWwgPT09IDAgJiYgKGl0ZW0udHlwZSB8IGlzR2FudHRSYW5nZUl0ZW0pXCJcbiAgICAgIFtjbGFzcy5nYW50dC10YWJsZS1pdGVtLXdpdGgtZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgW2NsYXNzLmdhbnR0LXRhYmxlLWl0ZW0tYWN0aXZlXT1cImdhbnR0VXBwZXIuaXNTZWxlY3RlZChpdGVtLmlkKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdhbnR0LnN0eWxlcy5saW5lSGVpZ2h0XCJcbiAgICAgIFtzdHlsZS5saW5lSGVpZ2h0LnB4XT1cImdhbnR0LnN0eWxlcy5saW5lSGVpZ2h0XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93QmVmb3JlVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0ub3JpZ2luLCBpdGVtOiBpdGVtLm9yaWdpbiB9XCJcbiAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImdhbnR0LXRhYmxlLWNvbHVtblwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uTGlzdDsgbGV0IGZpcnN0ID0gZmlyc3RcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLmNvbHVtbldpZHRoXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJmaXJzdFwiIGNsYXNzPVwiZ2FudHQtZXhwYW5kLWljb25cIiBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJsZXZlbCAqIDIwXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxldmVsIDwgZ2FudHQubWF4TGV2ZWwgLSAxICYmIGl0ZW0uZXhwYW5kYWJsZVwiPlxuICAgICAgICAgICAgPGdhbnR0LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJleHBhbmQtaWNvblwiXG4gICAgICAgICAgICAgIFtpY29uTmFtZV09XCJpdGVtLmV4cGFuZGVkID8gJ2FuZ2xlLWRvd24nIDogJ2FuZ2xlLXJpZ2h0J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRDaGlsZHJlbigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgID48L2dhbnR0LWljb24+XG4gICAgICAgICAgICA8Z2FudHQtaWNvbiAqbmdJZj1cIml0ZW0ubG9hZGluZ1wiIFtpY29uTmFtZV09XCInbG9hZGluZydcIj48L2dhbnR0LWljb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FudHQtdGFibGUtY29sdW1uLWNvbnRlbnRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0ub3JpZ2luLCBpdGVtOiBpdGVtLm9yaWdpbiB9XCJcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dBZnRlclRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtLm9yaWdpbiwgaXRlbTogaXRlbS5vcmlnaW4gfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmV4cGFuZGVkXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdhbnR0SXRlbXNcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbXM6IGl0ZW0uY2hpbGRyZW4sIGxldmVsOiBsZXZlbCArIDEsIGdyb3VwOiBncm91cCB9XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,97 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class GanttPrintService {
5
- constructor() { }
6
- setInlineStyles(targetElem) {
7
- const svgElements = Array.from(targetElem.getElementsByTagName('svg'));
8
- for (const svgElement of svgElements) {
9
- this.recursElementChildren(svgElement);
10
- }
11
- }
12
- recursElementChildren(node) {
13
- const transformProperties = [
14
- 'fill',
15
- 'color',
16
- 'font-size',
17
- 'stroke',
18
- 'font',
19
- 'text-anchor',
20
- 'stroke-dasharray',
21
- 'shape-rendering',
22
- 'stroke-width'
23
- ];
24
- if (!node.style) {
25
- return;
26
- }
27
- const styles = getComputedStyle(node);
28
- for (const transformProperty of transformProperties) {
29
- node.style[transformProperty] = styles[transformProperty];
30
- }
31
- for (const child of Array.from(node.childNodes)) {
32
- this.recursElementChildren(child);
33
- }
34
- }
35
- register(root) {
36
- this.root = root.nativeElement;
37
- this.mainContainer = this.root.getElementsByClassName('gantt-main-container')[0];
38
- }
39
- print(name = 'download', ignoreElementClass) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- const root = this.root;
42
- const mainContainer = this.mainContainer;
43
- // set print width
44
- const printWidth = root.offsetWidth;
45
- // set print height
46
- const printHeight = root.offsetHeight - mainContainer.offsetHeight + mainContainer.scrollHeight;
47
- const html2canvas = (yield import(/* webpackChunkName: 'html2canvas' */ 'html2canvas')).default;
48
- html2canvas(root, {
49
- logging: false,
50
- allowTaint: true,
51
- useCORS: true,
52
- width: printWidth,
53
- height: printHeight,
54
- ignoreElements: (element) => {
55
- if (ignoreElementClass && element.classList.contains(ignoreElementClass)) {
56
- return true;
57
- }
58
- if (element.classList.contains('gantt-calendar-today-overlay')) {
59
- return true;
60
- }
61
- },
62
- onclone: (cloneDocument) => {
63
- const ganttClass = root.className;
64
- const cloneGanttDom = cloneDocument.querySelector(`.${ganttClass.replace(/\s+/g, '.')}`);
65
- const cloneGanttContainerDom = cloneDocument.querySelector('.gantt-container');
66
- const cloneCalendarOverlay = cloneDocument.querySelector('.gantt-calendar-overlay-main');
67
- const cloneLinksOverlay = cloneDocument.querySelector('.gantt-links-overlay-main');
68
- // change targetDom width
69
- cloneGanttDom.style.width = `${printWidth}px`;
70
- cloneGanttDom.style.height = `${printHeight}px`;
71
- cloneGanttDom.style.overflow = `unset`;
72
- cloneGanttContainerDom.style.backgroundColor = '#fff';
73
- cloneCalendarOverlay.setAttribute('height', `${printHeight}`);
74
- cloneCalendarOverlay.setAttribute('style', `background: transparent`);
75
- if (cloneLinksOverlay) {
76
- cloneLinksOverlay.setAttribute('height', `${printHeight}`);
77
- cloneLinksOverlay.setAttribute('style', `height: ${printHeight}px`);
78
- }
79
- // setInlineStyles for svg
80
- this.setInlineStyles(cloneGanttDom);
81
- }
82
- }).then((canvas) => {
83
- const link = document.createElement('a');
84
- const dataUrl = canvas.toDataURL('image/png');
85
- link.download = `${name}.png`;
86
- link.href = dataUrl;
87
- link.click();
88
- });
89
- });
90
- }
91
- }
92
- GanttPrintService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttPrintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
93
- GanttPrintService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttPrintService });
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttPrintService, decorators: [{
95
- type: Injectable
96
- }], ctorParameters: function () { return []; } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtcHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9nYW50dC1wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sZUFBZSxDQUFDOztBQUd2RCxNQUFNLE9BQU8saUJBQWlCO0lBSzFCLGdCQUFlLENBQUM7SUFFUixlQUFlLENBQUMsVUFBbUI7UUFDdkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtZQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDMUM7SUFDTCxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBaUM7UUFDM0QsTUFBTSxtQkFBbUIsR0FBRztZQUN4QixNQUFNO1lBQ04sT0FBTztZQUNQLFdBQVc7WUFDWCxRQUFRO1lBQ1IsTUFBTTtZQUNOLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLGNBQWM7U0FDakIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBQ0QsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsS0FBSyxNQUFNLGlCQUFpQixJQUFJLG1CQUFtQixFQUFFO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM3RDtRQUNELEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQXNC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QkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMsQ0FBQzthQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUF5QixFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQztnQkFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7S0FBQTs7OEdBcEdRLGlCQUFpQjtrSEFBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHYW50dFByaW50U2VydmljZSB7XG4gICAgcHJpdmF0ZSByb290OiBIVE1MRWxlbWVudDtcblxuICAgIHByaXZhdGUgbWFpbkNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBwcml2YXRlIHNldElubGluZVN0eWxlcyh0YXJnZXRFbGVtOiBFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHN2Z0VsZW1lbnRzID0gQXJyYXkuZnJvbSh0YXJnZXRFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKSk7XG4gICAgICAgIGZvciAoY29uc3Qgc3ZnRWxlbWVudCBvZiBzdmdFbGVtZW50cykge1xuICAgICAgICAgICAgdGhpcy5yZWN1cnNFbGVtZW50Q2hpbGRyZW4oc3ZnRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY3Vyc0VsZW1lbnRDaGlsZHJlbihub2RlOiBTVkdTVkdFbGVtZW50IHwgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtUHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICdmaWxsJyxcbiAgICAgICAgICAgICdjb2xvcicsXG4gICAgICAgICAgICAnZm9udC1zaXplJyxcbiAgICAgICAgICAgICdzdHJva2UnLFxuICAgICAgICAgICAgJ2ZvbnQnLFxuICAgICAgICAgICAgJ3RleHQtYW5jaG9yJyxcbiAgICAgICAgICAgICdzdHJva2UtZGFzaGFycmF5JyxcbiAgICAgICAgICAgICdzaGFwZS1yZW5kZXJpbmcnLFxuICAgICAgICAgICAgJ3N0cm9rZS13aWR0aCdcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKCFub2RlLnN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICAgICAgZm9yIChjb25zdCB0cmFuc2Zvcm1Qcm9wZXJ0eSBvZiB0cmFuc2Zvcm1Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBub2RlLnN0eWxlW3RyYW5zZm9ybVByb3BlcnR5XSA9IHN0eWxlc1t0cmFuc2Zvcm1Qcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykpIHtcbiAgICAgICAgICAgIHRoaXMucmVjdXJzRWxlbWVudENoaWxkcmVuKGNoaWxkIGFzIFNWR1NWR0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXIocm9vdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLm1haW5Db250YWluZXIgPSB0aGlzLnJvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2FudHQtbWFpbi1jb250YWluZXInKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBhc3luYyBwcmludChuYW1lOiBzdHJpbmcgPSAnZG93bmxvYWQnLCBpZ25vcmVFbGVtZW50Q2xhc3M/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBjb25zdCBtYWluQ29udGFpbmVyID0gdGhpcy5tYWluQ29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAvLyBzZXQgcHJpbnQgd2lkdGhcbiAgICAgICAgY29uc3QgcHJpbnRXaWR0aCA9IHJvb3Qub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgLy8gc2V0IHByaW50IGhlaWdodFxuICAgICAgICBjb25zdCBwcmludEhlaWdodCA9IHJvb3Qub2Zmc2V0SGVpZ2h0IC0gbWFpbkNvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBtYWluQ29udGFpbmVyLnNjcm9sbEhlaWdodDtcblxuICAgICAgICBjb25zdCBodG1sMmNhbnZhcyA9IChhd2FpdCBpbXBvcnQoLyogd2VicGFja0NodW5rTmFtZTogJ2h0bWwyY2FudmFzJyAqLyAnaHRtbDJjYW52YXMnKSkuZGVmYXVsdDtcblxuICAgICAgICBodG1sMmNhbnZhcyhyb290LCB7XG4gICAgICAgICAgICBsb2dnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93VGFpbnQ6IHRydWUsXG4gICAgICAgICAgICB1c2VDT1JTOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6IHByaW50V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHByaW50SGVpZ2h0LFxuICAgICAgICAgICAgaWdub3JlRWxlbWVudHM6IChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlnbm9yZUVsZW1lbnRDbGFzcyAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhpZ25vcmVFbGVtZW50Q2xhc3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2dhbnR0LWNhbGVuZGFyLXRvZGF5LW92ZXJsYXknKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbmNsb25lOiAoY2xvbmVEb2N1bWVudDogRG9jdW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYW50dENsYXNzID0gcm9vdC5jbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVHYW50dERvbSA9IGNsb25lRG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7Z2FudHRDbGFzcy5yZXBsYWNlKC9cXHMrL2csICcuJyl9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVHYW50dENvbnRhaW5lckRvbSA9IGNsb25lRG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdhbnR0LWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lQ2FsZW5kYXJPdmVybGF5ID0gY2xvbmVEb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtY2FsZW5kYXItb3ZlcmxheS1tYWluJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVMaW5rc092ZXJsYXkgPSBjbG9uZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1saW5rcy1vdmVybGF5LW1haW4nKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0YXJnZXREb20gd2lkdGhcbiAgICAgICAgICAgICAgICBjbG9uZUdhbnR0RG9tLnN0eWxlLndpZHRoID0gYCR7cHJpbnRXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgY2xvbmVHYW50dERvbS5zdHlsZS5oZWlnaHQgPSBgJHtwcmludEhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgY2xvbmVHYW50dERvbS5zdHlsZS5vdmVyZmxvdyA9IGB1bnNldGA7XG4gICAgICAgICAgICAgICAgY2xvbmVHYW50dENvbnRhaW5lckRvbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XG4gICAgICAgICAgICAgICAgY2xvbmVDYWxlbmRhck92ZXJsYXkuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtwcmludEhlaWdodH1gKTtcbiAgICAgICAgICAgICAgICBjbG9uZUNhbGVuZGFyT3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYGJhY2tncm91bmQ6IHRyYW5zcGFyZW50YCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVMaW5rc092ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVMaW5rc092ZXJsYXkuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtwcmludEhlaWdodH1gKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVMaW5rc092ZXJsYXkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBoZWlnaHQ6ICR7cHJpbnRIZWlnaHR9cHhgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBzZXRJbmxpbmVTdHlsZXMgZm9yIHN2Z1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5saW5lU3R5bGVzKGNsb25lR2FudHREb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGAke25hbWV9LnBuZ2A7XG4gICAgICAgICAgICBsaW5rLmhyZWYgPSBkYXRhVXJsO1xuICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=