@worktile/gantt 12.1.0 → 12.1.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.
@@ -21,6 +21,7 @@ export class GanttUpper {
21
21
  this.viewOptions = {};
22
22
  this.loadOnScroll = new EventEmitter();
23
23
  this.dragStarted = new EventEmitter();
24
+ this.dragMoved = new EventEmitter();
24
25
  this.dragEnded = new EventEmitter();
25
26
  this.barClick = new EventEmitter();
26
27
  this.linkDragEnded = new EventEmitter();
@@ -142,6 +143,9 @@ export class GanttUpper {
142
143
  this.dragContainer.dragStarted.subscribe((event) => {
143
144
  this.dragStarted.emit(event);
144
145
  });
146
+ this.dragContainer.dragMoved.subscribe((event) => {
147
+ this.dragMoved.emit(event);
148
+ });
145
149
  this.dragContainer.dragEnded.subscribe((event) => {
146
150
  this.dragEnded.emit(event);
147
151
  this.computeRefs();
@@ -182,7 +186,7 @@ export class GanttUpper {
182
186
  });
183
187
  });
184
188
  }
185
- trackBy(item, index) {
189
+ trackBy(index, item) {
186
190
  return item.id || index;
187
191
  }
188
192
  detectChanges() {
@@ -200,9 +204,22 @@ export class GanttUpper {
200
204
  collapseAll() {
201
205
  this.expandGroups(false);
202
206
  }
207
+ getGanttItem(id) {
208
+ return this.getGanttItems([id])[0] || null;
209
+ }
210
+ getGanttItems(ids) {
211
+ let items = [];
212
+ if (this.items.length > 0) {
213
+ items = recursiveItems(this.items);
214
+ }
215
+ else {
216
+ items = flatten(this.groups.map((group) => recursiveItems(group.items)));
217
+ }
218
+ return items.filter((item) => ids.includes(item.id));
219
+ }
203
220
  }
204
221
  GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
205
- GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.2", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", disabledLoadOnScroll: "disabledLoadOnScroll" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], ngImport: i0 });
222
+ GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.2", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", disabledLoadOnScroll: "disabledLoadOnScroll" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], ngImport: i0 });
206
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttUpper, decorators: [{
207
224
  type: Directive
208
225
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
@@ -234,6 +251,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImpor
234
251
  type: Output
235
252
  }], dragStarted: [{
236
253
  type: Output
254
+ }], dragMoved: [{
255
+ type: Output
237
256
  }], dragEnded: [{
238
257
  type: Output
239
258
  }], barClick: [{
@@ -258,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImpor
258
277
  args: ['class.gantt']
259
278
  }] } });
260
279
  export const GANTT_UPPER_TOKEN = new InjectionToken('GANTT_UPPER_TOKEN');
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtdXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBSVgsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBR0gsYUFBYSxFQUdiLGtCQUFrQixFQUNsQixpQkFBaUIsRUFHcEIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBcUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR3ZGLE1BQU0sT0FBZ0IsVUFBVTtJQW1FNUIsWUFDYyxVQUFtQyxFQUNuQyxHQUFzQixFQUN0QixNQUFjLEVBQ2UsTUFBeUI7UUFIdEQsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNlLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBdEVwRCxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFFN0IsaUJBQVksR0FBaUIs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Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWdDLFdBQVc7c0JBQWpELFlBQVk7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFSSxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUMsWUFBWTtzQkFBbkQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVHLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFUSxtQkFBbUI7c0JBQWpFLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkE0QmpCLFVBQVU7c0JBQXJDLFdBQVc7dUJBQUMsYUFBYTs7QUFrTTlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFhLG1CQUFtQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElucHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEluamVjdCxcbiAgICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFrZSwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgR2FudHRJdGVtLFxuICAgIEdhbnR0R3JvdXAsXG4gICAgR2FudHRWaWV3VHlwZSxcbiAgICBHYW50dExvYWRPblNjcm9sbEV2ZW50LFxuICAgIEdhbnR0RHJhZ0V2ZW50LFxuICAgIEdhbnR0R3JvdXBJbnRlcm5hbCxcbiAgICBHYW50dEl0ZW1JbnRlcm5hbCxcbiAgICBHYW50dEJhckNsaWNrRXZlbnQsXG4gICAgR2FudHRMaW5rRHJhZ0V2ZW50XG59IGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHsgR2FudHRWaWV3LCBHYW50dFZpZXdPcHRpb25zIH0gZnJvbSAnLi92aWV3cy92aWV3JztcbmltcG9ydCB7IGNyZWF0ZVZpZXdGYWN0b3J5IH0gZnJvbSAnLi92aWV3cy9mYWN0b3J5JztcbmltcG9ydCB7IEdhbnR0RGF0ZSB9IGZyb20gJy4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBHYW50dFN0eWxlcywgZGVmYXVsdFN0eWxlcyB9IGZyb20gJy4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IHVuaXFCeSwgZmxhdHRlbiwgcmVjdXJzaXZlSXRlbXMsIGdldEZsYXRJdGVtcyB9IGZyb20gJy4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIgfSBmcm9tICcuL2dhbnR0LWRyYWctY29udGFpbmVyJztcbmltcG9ydCB7IEdBTlRUX0dMT0JBTF9DT05GSUcsIEdhbnR0R2xvYmFsQ29uZmlnLCBkZWZhdWx0Q29uZmlnIH0gZnJvbSAnLi9nYW50dC5jb25maWcnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW50dFVwcGVyIHtcbiAgICBASW5wdXQoJ2l0ZW1zJykgb3JpZ2luSXRlbXM6IEdhbnR0SXRlbVtdID0gW107XG5cbiAgICBASW5wdXQoJ2dyb3VwcycpIG9yaWdpbkdyb3VwczogR2FudHRHcm91cFtdID0gW107XG5cbiAgICBASW5wdXQoKSB2aWV3VHlwZTogR2FudHRWaWV3VHlwZSA9IEdhbnR0Vmlld1R5cGUubW9udGg7XG5cbiAgICBASW5wdXQoKSBzdGFydDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgZW5kOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzaG93VG9kYXlMaW5lID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGRyYWdnYWJsZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHN0eWxlczogR2FudHRTdHlsZXM7XG5cbiAgICBASW5wdXQoKSB2aWV3T3B0aW9uczogR2FudHRWaWV3T3B0aW9ucyA9IHt9O1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWRMb2FkT25TY3JvbGw6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgbG9hZE9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dExvYWRPblNjcm9sbEV2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBkcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dEJhckNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBiYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3JhbmdlJywgeyBzdGF0aWM6IHRydWUgfSkgcmFuZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2l0ZW0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cEhlYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGdyb3VwSGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwdWJsaWMgbGlua2FibGU6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgbGlua0RyYWdFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRMaW5rRHJhZ0V2ZW50PigpO1xuXG4gICAgcHVibGljIHZpZXc6IEdhbnR0VmlldztcblxuICAgIHB1YmxpYyBpdGVtczogR2FudHRJdGVtSW50ZXJuYWxbXSA9IFtdO1xuXG4gICAgcHVibGljIGdyb3VwczogR2FudHRHcm91cEludGVybmFsW10gPSBbXTtcblxuICAgIHB1YmxpYyB2aWV3Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dFZpZXc+KCk7XG5cbiAgICBwdWJsaWMgZXhwYW5kQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgcHVibGljIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGZpcnN0Q2hhbmdlID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBkcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXI7XG5cbiAgICBwdWJsaWMgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgZ3JvdXBzTWFwOiB7IFtrZXk6IHN0cmluZ106IEdhbnR0R3JvdXBJbnRlcm5hbCB9O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dCcpIGdhbnR0Q2xhc3MgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChHQU5UVF9HTE9CQUxfQ09ORklHKSBwcm90ZWN0ZWQgY29uZmlnOiBHYW50dEdsb2JhbENvbmZpZ1xuICAgICkge31cblxuICAgIHByaXZhdGUgY3JlYXRlVmlldygpIHtcbiAgICAgICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmdldFZpZXdEYXRlKCk7XG4gICAgICAgIHRoaXMudmlldyA9IGNyZWF0ZVZpZXdGYWN0b3J5KHRoaXMudmlld1R5cGUsIHZpZXdEYXRlLnN0YXJ0LCB2aWV3RGF0ZS5lbmQsIHRoaXMudmlld09wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBHcm91cHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlZElkcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwLmV4cGFuZGVkID09PSBmYWxzZSkubWFwKChncm91cCkgPT4gZ3JvdXAuaWQpO1xuICAgICAgICB0aGlzLmdyb3Vwc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLm9yaWdpbkdyb3Vwcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEdhbnR0R3JvdXBJbnRlcm5hbChvcmlnaW4pO1xuICAgICAgICAgICAgZ3JvdXAuZXhwYW5kZWQgPSAhY29sbGFwc2VkSWRzLmluY2x1ZGVzKGdyb3VwLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzTWFwW2dyb3VwLmlkXSA9IGdyb3VwO1xuICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBJdGVtcygpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IHVuaXFCeSh0aGlzLm9yaWdpbkl0ZW1zLCAnaWQnKTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzTWFwW29yaWdpbi5ncm91cF9pZF07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgR2FudHRJdGVtSW50ZXJuYWwob3JpZ2luLCB7IHZpZXdUeXBlOiB0aGlzLnZpZXdUeXBlIH0pO1xuICAgICAgICAgICAgICAgICAgICBncm91cC5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChvcmlnaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0SXRlbUludGVybmFsKG9yaWdpbiwgeyB2aWV3VHlwZTogdGhpcy52aWV3VHlwZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBFeHBhbmRlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLm9yaWdpbkl0ZW1zID0gdW5pcUJ5KHRoaXMub3JpZ2luSXRlbXMsICdpZCcpO1xuICAgICAgICBsZXQgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmxhdE9yaWdpbkl0ZW1zID0gZ2V0RmxhdEl0ZW1zKHRoaXMub3JpZ2luSXRlbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtcyA9IGZsYXR0ZW4odGhpcy5ncm91cHMubWFwKChncm91cCkgPT4gcmVjdXJzaXZlSXRlbXMoZ3JvdXAuaXRlbXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ub3JpZ2luLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IGZsYXRPcmlnaW5JdGVtcy5maW5kKChvcmlnaW5JdGVtKSA9PiBvcmlnaW5JdGVtLmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SXRlbS5leHBhbmRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaWV3RGF0ZSgpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5zdGFydDtcbiAgICAgICAgbGV0IGVuZCA9IHRoaXMuZW5kO1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnQgfHwgIXRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbkl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5zdGFydCAmJiAhdGhpcy5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0ID8gTWF0aC5taW4oc3RhcnQsIGl0ZW0uc3RhcnQpIDogaXRlbS5zdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uZW5kICYmICF0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbmQgPyBNYXRoLm1heChlbmQsIGl0ZW0uZW5kKSA6IGl0ZW0uZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBHYW50dERhdGUoc3RhcnQpLFxuICAgICAgICAgICAgICAgIGlzQ3VzdG9tOiB0aGlzLnN0YXJ0ID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogbmV3IEdhbnR0RGF0ZShlbmQpLFxuICAgICAgICAgICAgICAgIGlzQ3VzdG9tOiB0aGlzLmVuZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXB1dGVSZWZzKCkge1xuICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBJdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi5ncm91cEl0ZW1zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcmVjdXJzaXZlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIHRoaXMuY29tcHV0ZUl0ZW1zUmVmcyguLi5pdGVtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmRHcm91cHMoZXhwYW5kZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGdyb3VwLnNldEV4cGFuZChleHBhbmRlZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5uZXh0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3R5bGVzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFN0eWxlcywgdGhpcy5zdHlsZXMpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRhdGVGb3JtYXQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLmRhdGVGb3JtYXQsIHRoaXMuY29uZmlnLmRhdGVGb3JtYXQsIHRoaXMudmlld09wdGlvbnMuZGF0ZUZvcm1hdCk7XG4gICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgIHRoaXMuZmlyc3RDaGFuZ2UgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcxJztcblxuICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdTdGFydGVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ0VuZGVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdFbmRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52aWV3LnN0YXJ0JC5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghdGhpcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMudmlld1R5cGUgJiYgY2hhbmdlcy52aWV3VHlwZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwR3JvdXBzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHRoaXMudmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5vcmlnaW5JdGVtcyB8fCBjaGFuZ2VzLm9yaWdpbkdyb3Vwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBFeHBhbmRlZFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZVJlZnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGNvbXB1dGVJdGVtc1JlZnMoLi4uaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10pIHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS51cGRhdGVSZWZzKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogaXRlbS5zdGFydCAmJiBpdGVtLmVuZCA/IHRoaXMudmlldy5nZXREYXRlUmFuZ2VXaWR0aChpdGVtLnN0YXJ0LnN0YXJ0T2ZEYXkoKSwgaXRlbS5lbmQuZW5kT2ZEYXkoKSkgOiAwLFxuICAgICAgICAgICAgICAgIHg6IGl0ZW0uc3RhcnQgPyB0aGlzLnZpZXcuZ2V0WFBvaW50QnlEYXRlKGl0ZW0uc3RhcnQpIDogMCxcbiAgICAgICAgICAgICAgICB5OiAodGhpcy5zdHlsZXMubGluZUhlaWdodCAtIHRoaXMuc3R5bGVzLmJhckhlaWdodCkgLyAyIC0gMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnkoaXRlbTogR2FudHRHcm91cEludGVybmFsIHwgR2FudHRJdGVtSW50ZXJuYWwsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQgfHwgaW5kZXg7XG4gICAgfVxuXG4gICAgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGV4cGFuZEdyb3VwKGdyb3VwOiBHYW50dEdyb3VwSW50ZXJuYWwpIHtcbiAgICAgICAgZ3JvdXAuc2V0RXhwYW5kKCFncm91cC5leHBhbmRlZCk7XG4gICAgICAgIHRoaXMuZXhwYW5kQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIHB1YmxpYyBmdW5jdGlvbnNcblxuICAgIGV4cGFuZEFsbCgpIHtcbiAgICAgICAgdGhpcy5leHBhbmRHcm91cHModHJ1ZSk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VBbGwoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBHQU5UVF9VUFBFUl9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxHYW50dFVwcGVyPignR0FOVFRfVVBQRVJfVE9LRU4nKTtcbiJdfQ==
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtdXBwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvZ2FudHQtdXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFFWixXQUFXLEVBSVgsY0FBYyxFQUNkLFNBQVMsRUFDVCxNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBR0gsYUFBYSxFQUdiLGtCQUFrQixFQUNsQixpQkFBaUIsRUFHcEIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxtQkFBbUIsRUFBcUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR3ZGLE1BQU0sT0FBZ0IsVUFBVTtJQXFFNUIsWUFDYyxVQUFtQyxFQUNuQyxHQUFzQixFQUN0QixNQUFjLEVBQ2UsTUFBeUI7UUFIdEQsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNlLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBeEVwRCxnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFFN0IsaUJBQVksR0FBaUIs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TUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFZ0MsV0FBVztzQkFBakQsWUFBWTt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVJLGFBQWE7c0JBQXJELFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFQyxZQUFZO3NCQUFuRCxZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRUcsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVRLG1CQUFtQjtzQkFBakUsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQTRCakIsVUFBVTtzQkFBckMsV0FBVzt1QkFBQyxhQUFhOztBQW9OOUIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWEsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBOZ1pvbmUsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5qZWN0LFxuICAgIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YWtlLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBHYW50dEl0ZW0sXG4gICAgR2FudHRHcm91cCxcbiAgICBHYW50dFZpZXdUeXBlLFxuICAgIEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQsXG4gICAgR2FudHREcmFnRXZlbnQsXG4gICAgR2FudHRHcm91cEludGVybmFsLFxuICAgIEdhbnR0SXRlbUludGVybmFsLFxuICAgIEdhbnR0QmFyQ2xpY2tFdmVudCxcbiAgICBHYW50dExpbmtEcmFnRXZlbnRcbn0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBHYW50dFZpZXcsIEdhbnR0Vmlld09wdGlvbnMgfSBmcm9tICcuL3ZpZXdzL3ZpZXcnO1xuaW1wb3J0IHsgY3JlYXRlVmlld0ZhY3RvcnkgfSBmcm9tICcuL3ZpZXdzL2ZhY3RvcnknO1xuaW1wb3J0IHsgR2FudHREYXRlIH0gZnJvbSAnLi91dGlscy9kYXRlJztcbmltcG9ydCB7IEdhbnR0U3R5bGVzLCBkZWZhdWx0U3R5bGVzIH0gZnJvbSAnLi9nYW50dC5zdHlsZXMnO1xuaW1wb3J0IHsgdW5pcUJ5LCBmbGF0dGVuLCByZWN1cnNpdmVJdGVtcywgZ2V0RmxhdEl0ZW1zIH0gZnJvbSAnLi91dGlscy9oZWxwZXJzJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciB9IGZyb20gJy4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgR0FOVFRfR0xPQkFMX0NPTkZJRywgR2FudHRHbG9iYWxDb25maWcsIGRlZmF1bHRDb25maWcgfSBmcm9tICcuL2dhbnR0LmNvbmZpZyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdhbnR0VXBwZXIge1xuICAgIEBJbnB1dCgnaXRlbXMnKSBvcmlnaW5JdGVtczogR2FudHRJdGVtW10gPSBbXTtcblxuICAgIEBJbnB1dCgnZ3JvdXBzJykgb3JpZ2luR3JvdXBzOiBHYW50dEdyb3VwW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHZpZXdUeXBlOiBHYW50dFZpZXdUeXBlID0gR2FudHRWaWV3VHlwZS5tb250aDtcblxuICAgIEBJbnB1dCgpIHN0YXJ0OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBlbmQ6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIHNob3dUb2RheUxpbmUgPSB0cnVlO1xuXG4gICAgQElucHV0KCkgZHJhZ2dhYmxlOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc3R5bGVzOiBHYW50dFN0eWxlcztcblxuICAgIEBJbnB1dCgpIHZpZXdPcHRpb25zOiBHYW50dFZpZXdPcHRpb25zID0ge307XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlZExvYWRPblNjcm9sbDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBsb2FkT25TY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TG9hZE9uU2Nyb2xsRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0RHJhZ0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGRyYWdNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHREcmFnRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgZHJhZ0VuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dERyYWdFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRCYXJDbGlja0V2ZW50PigpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgYmFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdyYW5nZScsIHsgc3RhdGljOiB0cnVlIH0pIHJhbmdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdpdGVtJywgeyBzdGF0aWM6IHRydWUgfSkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZ3JvdXBIZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBncm91cEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGxpbmthYmxlOiBib29sZWFuO1xuXG4gICAgcHVibGljIGxpbmtEcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0TGlua0RyYWdFdmVudD4oKTtcblxuICAgIHB1YmxpYyB2aWV3OiBHYW50dFZpZXc7XG5cbiAgICBwdWJsaWMgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcblxuICAgIHB1YmxpYyBncm91cHM6IEdhbnR0R3JvdXBJbnRlcm5hbFtdID0gW107XG5cbiAgICBwdWJsaWMgdmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2FudHRWaWV3PigpO1xuXG4gICAgcHVibGljIGV4cGFuZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBmaXJzdENoYW5nZSA9IHRydWU7XG5cbiAgICBwdWJsaWMgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyO1xuXG4gICAgcHVibGljIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIGdyb3Vwc01hcDogeyBba2V5OiBzdHJpbmddOiBHYW50dEdyb3VwSW50ZXJuYWwgfTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZ2FudHQnKSBnYW50dENsYXNzID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoR0FOVFRfR0xPQkFMX0NPTkZJRykgcHJvdGVjdGVkIGNvbmZpZzogR2FudHRHbG9iYWxDb25maWdcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVZpZXcoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5nZXRWaWV3RGF0ZSgpO1xuICAgICAgICB0aGlzLnZpZXcgPSBjcmVhdGVWaWV3RmFjdG9yeSh0aGlzLnZpZXdUeXBlLCB2aWV3RGF0ZS5zdGFydCwgdmlld0RhdGUuZW5kLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwR3JvdXBzKCkge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWRJZHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5leHBhbmRlZCA9PT0gZmFsc2UpLm1hcCgoZ3JvdXApID0+IGdyb3VwLmlkKTtcbiAgICAgICAgdGhpcy5ncm91cHNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5vcmlnaW5Hcm91cHMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG5ldyBHYW50dEdyb3VwSW50ZXJuYWwob3JpZ2luKTtcbiAgICAgICAgICAgIGdyb3VwLmV4cGFuZGVkID0gIWNvbGxhcHNlZElkcy5pbmNsdWRlcyhncm91cC5pZCk7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwc01hcFtncm91cC5pZF0gPSBncm91cDtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSXRlbXMoKSB7XG4gICAgICAgIHRoaXMub3JpZ2luSXRlbXMgPSB1bmlxQnkodGhpcy5vcmlnaW5JdGVtcywgJ2lkJyk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwc01hcFtvcmlnaW4uZ3JvdXBfaWRdO1xuICAgICAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEdhbnR0SXRlbUludGVybmFsKG9yaWdpbiwgeyB2aWV3VHlwZTogdGhpcy52aWV3VHlwZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luSXRlbXMuZm9yRWFjaCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBHYW50dEl0ZW1JbnRlcm5hbChvcmlnaW4sIHsgdmlld1R5cGU6IHRoaXMudmlld1R5cGUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRXhwYW5kZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IHVuaXFCeSh0aGlzLm9yaWdpbkl0ZW1zLCAnaWQnKTtcbiAgICAgICAgbGV0IGl0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdID0gW107XG4gICAgICAgIGNvbnN0IGZsYXRPcmlnaW5JdGVtcyA9IGdldEZsYXRJdGVtcyh0aGlzLm9yaWdpbkl0ZW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbXMgPSBmbGF0dGVuKHRoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IHJlY3Vyc2l2ZUl0ZW1zKGdyb3VwLml0ZW1zKSkpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLm9yaWdpbi5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSBmbGF0T3JpZ2luSXRlbXMuZmluZCgob3JpZ2luSXRlbSkgPT4gb3JpZ2luSXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0uZXhwYW5kZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Vmlld0RhdGUoKSB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgICAgIGxldCBlbmQgPSB0aGlzLmVuZDtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0IHx8ICF0aGlzLmVuZCkge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5JdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc3RhcnQgJiYgIXRoaXMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCA/IE1hdGgubWluKHN0YXJ0LCBpdGVtLnN0YXJ0KSA6IGl0ZW0uc3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmVuZCAmJiAhdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gZW5kID8gTWF0aC5tYXgoZW5kLCBpdGVtLmVuZCkgOiBpdGVtLmVuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgR2FudHREYXRlKHN0YXJ0KSxcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogdGhpcy5zdGFydCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBHYW50dERhdGUoZW5kKSxcbiAgICAgICAgICAgICAgICBpc0N1c3RvbTogdGhpcy5lbmQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wdXRlUmVmcygpIHtcbiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbXMgPSByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcyk7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4uZ3JvdXBJdGVtcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHJlY3Vyc2l2ZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB0aGlzLmNvbXB1dGVJdGVtc1JlZnMoLi4uaXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kR3JvdXBzKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICBncm91cC5zZXRFeHBhbmQoZXhwYW5kZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHBhbmRDaGFuZ2UubmV4dCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25Jbml0KCkge1xuICAgICAgICB0aGlzLnN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTdHlsZXMsIHRoaXMuc3R5bGVzKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kYXRlRm9ybWF0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0LCB0aGlzLmNvbmZpZy5kYXRlRm9ybWF0LCB0aGlzLnZpZXdPcHRpb25zLmRhdGVGb3JtYXQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG5cbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ01vdmVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdNb3ZlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdFbmRlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnRW5kZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlldy5zdGFydCQucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlUmVmcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnZpZXdUeXBlICYmIGNoYW5nZXMudmlld1R5cGUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWaWV3KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR1cEdyb3VwcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZVJlZnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh0aGlzLnZpZXcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMub3JpZ2luSXRlbXMgfHwgY2hhbmdlcy5vcmlnaW5Hcm91cHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwRXhwYW5kZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBHcm91cHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwSXRlbXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVSZWZzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBjb21wdXRlSXRlbXNSZWZzKC4uLml0ZW1zOiBHYW50dEl0ZW1JbnRlcm5hbFtdKSB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0udXBkYXRlUmVmcyh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0uc3RhcnQgJiYgaXRlbS5lbmQgPyB0aGlzLnZpZXcuZ2V0RGF0ZVJhbmdlV2lkdGgoaXRlbS5zdGFydC5zdGFydE9mRGF5KCksIGl0ZW0uZW5kLmVuZE9mRGF5KCkpIDogMCxcbiAgICAgICAgICAgICAgICB4OiBpdGVtLnN0YXJ0ID8gdGhpcy52aWV3LmdldFhQb2ludEJ5RGF0ZShpdGVtLnN0YXJ0KSA6IDAsXG4gICAgICAgICAgICAgICAgeTogKHRoaXMuc3R5bGVzLmxpbmVIZWlnaHQgLSB0aGlzLnN0eWxlcy5iYXJIZWlnaHQpIC8gMiAtIDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IEdhbnR0R3JvdXBJbnRlcm5hbCB8IEdhbnR0SXRlbUludGVybmFsKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkIHx8IGluZGV4O1xuICAgIH1cblxuICAgIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBleHBhbmRHcm91cChncm91cDogR2FudHRHcm91cEludGVybmFsKSB7XG4gICAgICAgIGdyb3VwLnNldEV4cGFuZCghZ3JvdXAuZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLmV4cGFuZENoYW5nZS5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvLyBwdWJsaWMgZnVuY3Rpb25zXG5cbiAgICBleHBhbmRBbGwoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kR3JvdXBzKHRydWUpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlQWxsKCkge1xuICAgICAgICB0aGlzLmV4cGFuZEdyb3VwcyhmYWxzZSk7XG4gICAgfVxuXG4gICAgZ2V0R2FudHRJdGVtKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2FudHRJdGVtcyhbaWRdKVswXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldEdhbnR0SXRlbXMoaWRzOiBzdHJpbmdbXSkge1xuICAgICAgICBsZXQgaXRlbXM6IEdhbnR0SXRlbUludGVybmFsW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaXRlbXMgPSByZWN1cnNpdmVJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW1zID0gZmxhdHRlbih0aGlzLmdyb3Vwcy5tYXAoKGdyb3VwKSA9PiByZWN1cnNpdmVJdGVtcyhncm91cC5pdGVtcykpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpZHMuaW5jbHVkZXMoaXRlbS5pZCkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IEdBTlRUX1VQUEVSX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEdhbnR0VXBwZXI+KCdHQU5UVF9VUFBFUl9UT0tFTicpO1xuIl19
@@ -760,6 +760,7 @@ class GanttUpper {
760
760
  this.viewOptions = {};
761
761
  this.loadOnScroll = new EventEmitter();
762
762
  this.dragStarted = new EventEmitter();
763
+ this.dragMoved = new EventEmitter();
763
764
  this.dragEnded = new EventEmitter();
764
765
  this.barClick = new EventEmitter();
765
766
  this.linkDragEnded = new EventEmitter();
@@ -881,6 +882,9 @@ class GanttUpper {
881
882
  this.dragContainer.dragStarted.subscribe((event) => {
882
883
  this.dragStarted.emit(event);
883
884
  });
885
+ this.dragContainer.dragMoved.subscribe((event) => {
886
+ this.dragMoved.emit(event);
887
+ });
884
888
  this.dragContainer.dragEnded.subscribe((event) => {
885
889
  this.dragEnded.emit(event);
886
890
  this.computeRefs();
@@ -921,7 +925,7 @@ class GanttUpper {
921
925
  });
922
926
  });
923
927
  }
924
- trackBy(item, index) {
928
+ trackBy(index, item) {
925
929
  return item.id || index;
926
930
  }
927
931
  detectChanges() {
@@ -939,9 +943,22 @@ class GanttUpper {
939
943
  collapseAll() {
940
944
  this.expandGroups(false);
941
945
  }
946
+ getGanttItem(id) {
947
+ return this.getGanttItems([id])[0] || null;
948
+ }
949
+ getGanttItems(ids) {
950
+ let items = [];
951
+ if (this.items.length > 0) {
952
+ items = recursiveItems(this.items);
953
+ }
954
+ else {
955
+ items = flatten(this.groups.map((group) => recursiveItems(group.items)));
956
+ }
957
+ return items.filter((item) => ids.includes(item.id));
958
+ }
942
959
  }
943
960
  GanttUpper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
944
- GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.2", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", disabledLoadOnScroll: "disabledLoadOnScroll" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], ngImport: i0 });
961
+ GanttUpper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.1.2", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", viewOptions: "viewOptions", disabledLoadOnScroll: "disabledLoadOnScroll" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick" }, host: { properties: { "class.gantt": "this.ganttClass" } }, queries: [{ propertyName: "barTemplate", first: true, predicate: ["bar"], descendants: true, static: true }, { propertyName: "rangeTemplate", first: true, predicate: ["range"], descendants: true, static: true }, { propertyName: "itemTemplate", first: true, predicate: ["item"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }], ngImport: i0 });
945
962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttUpper, decorators: [{
946
963
  type: Directive
947
964
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
@@ -973,6 +990,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImpor
973
990
  type: Output
974
991
  }], dragStarted: [{
975
992
  type: Output
993
+ }], dragMoved: [{
994
+ type: Output
976
995
  }], dragEnded: [{
977
996
  type: Output
978
997
  }], barClick: [{
@@ -1317,9 +1336,12 @@ class GanttTableComponent {
1317
1336
  hideAuxiliaryLine() {
1318
1337
  this.draglineElementRef.nativeElement.style.display = 'none';
1319
1338
  }
1339
+ trackBy(index, item) {
1340
+ return item.id || index;
1341
+ }
1320
1342
  }
1321
1343
  GanttTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttTableComponent, deps: [{ token: GANTT_ABSTRACT_TOKEN }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1322
- GanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: GanttTableComponent, selector: "gantt-table", inputs: { groups: "groups", items: "items", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate" }, 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\">\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\">\n <div\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 [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\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(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 </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", components: [{ type: GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.CdkDrag, selector: "[cdkDrag]", inputs: ["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": IsGanttRangeItemPipe } });
1344
+ GanttTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.2", type: GanttTableComponent, selector: "gantt-table", inputs: { groups: "groups", items: "items", columns: "columns", groupTemplate: "groupTemplate", emptyTemplate: "emptyTemplate" }, 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 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 [style.height.px]=\"gantt.styles.lineHeight\"\n [style.lineHeight.px]=\"gantt.styles.lineHeight\"\n >\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(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 </div>\n <ng-template\n *ngIf=\"item.children && item.expanded\"\n [ngTemplateOutlet]=\"ganttItems\"\n [ngTemplateOutletContext]=\"{ items: item.children, level: level + 1, group: group }\"\n ></ng-template>\n </ng-container>\n</ng-template>\n", components: [{ type: GanttIconComponent, selector: "gantt-icon", inputs: ["iconName"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.CdkDrag, selector: "[cdkDrag]", inputs: ["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": IsGanttRangeItemPipe } });
1323
1345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: GanttTableComponent, decorators: [{
1324
1346
  type: Component,
1325
1347
  args: [{
@@ -1451,6 +1473,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImpor
1451
1473
  class GanttDragContainer {
1452
1474
  constructor() {
1453
1475
  this.dragStarted = new EventEmitter();
1476
+ this.dragMoved = new EventEmitter();
1454
1477
  this.dragEnded = new EventEmitter();
1455
1478
  this.linkDragStarted = new EventEmitter();
1456
1479
  this.linkDragEntered = new EventEmitter();
@@ -1647,7 +1670,7 @@ class GanttCalendarComponent {
1647
1670
  }
1648
1671
  ngAfterViewInit() { }
1649
1672
  ngOnChanges(changes) { }
1650
- trackBy(point, index) {
1673
+ trackBy(index, point) {
1651
1674
  return point.text || index;
1652
1675
  }
1653
1676
  ngOnDestroy() {
@@ -2145,6 +2168,8 @@ class GanttBarDrag {
2145
2168
  const start = this.ganttUpper.view.getDateByXPoint(x);
2146
2169
  const end = start.addDays(days);
2147
2170
  this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(x), end);
2171
+ this.item.updateDate(start, end);
2172
+ this.dragContainer.dragMoved.emit({ item: this.item.origin });
2148
2173
  });
2149
2174
  dragRef.ended.subscribe((event) => {
2150
2175
  const days = differenceInCalendarDays(this.item.end.value, this.item.start.value);
@@ -2179,6 +2204,7 @@ class GanttBarDrag {
2179
2204
  this.barElement.style.width = width + 'px';
2180
2205
  this.barElement.style.left = x + 'px';
2181
2206
  this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(x), this.ganttUpper.view.getDateByXPoint(x + width));
2207
+ this.item.updateDate(this.ganttUpper.view.getDateByXPoint(x), this.item.end);
2182
2208
  }
2183
2209
  }
2184
2210
  else {
@@ -2187,7 +2213,9 @@ class GanttBarDrag {
2187
2213
  this.barElement.style.width = width + 'px';
2188
2214
  this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(this.item.refs.x), this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));
2189
2215
  }
2216
+ this.item.updateDate(this.item.start, this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));
2190
2217
  }
2218
+ this.dragContainer.dragMoved.emit({ item: this.item.origin });
2191
2219
  event.source.reset();
2192
2220
  });
2193
2221
  dragRef.ended.subscribe((event) => {
@@ -2434,7 +2462,7 @@ class GanttMainComponent {
2434
2462
  this.ganttMainClass = true;
2435
2463
  }
2436
2464
  ngOnInit() { }
2437
- trackBy(item, index) {
2465
+ trackBy(index, item) {
2438
2466
  return item.id || index;
2439
2467
  }
2440
2468
  }