@worktile/gantt 16.0.1 → 16.1.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.
@@ -100,14 +100,29 @@ export class GanttView {
100
100
  }
101
101
  // 根据X坐标获取对应时间
102
102
  getDateByXPoint(x) {
103
- const indexOfSecondaryDate = Math.max(Math.floor(x / this.getCellWidth()), 0);
104
- const matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
105
- const dayWidth = this.getDayOccupancyWidth(matchDate?.start);
103
+ let indexOfSecondaryDate;
104
+ let matchDate;
105
+ let dayWidth;
106
+ let day;
107
+ if (x >= 0) {
108
+ indexOfSecondaryDate = Math.floor(x / this.getCellWidth());
109
+ matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
110
+ dayWidth = this.getDayOccupancyWidth(matchDate?.start);
111
+ }
112
+ else {
113
+ const datePointTemp = this.secondaryDatePoints[0];
114
+ dayWidth = this.getDayOccupancyWidth(datePointTemp?.start);
115
+ day = Math.floor(x / dayWidth);
116
+ return datePointTemp?.start.addDays(day);
117
+ }
106
118
  if (dayWidth === this.getCellWidth()) {
107
119
  return matchDate?.start;
108
120
  }
109
121
  else {
110
- const day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
122
+ day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
123
+ if (indexOfSecondaryDate > this.secondaryDatePoints.length - 1) {
124
+ day += (indexOfSecondaryDate - (this.secondaryDatePoints.length - 1)) * 30;
125
+ }
111
126
  if (this.getCellWidth() / dayWidth === 7) {
112
127
  return matchDate?.start.addDays(day);
113
128
  }
@@ -120,4 +135,4 @@ export class GanttView {
120
135
  return this.getDateIntervalWidth(start, end.addSeconds(1));
121
136
  }
122
137
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy92aWV3cy92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBc0J4QyxNQUFNLFdBQVcsR0FBcUI7SUFDbEMsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0lBQy9DLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7SUFDNUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO0NBQ3ZDLENBQUM7QUFFRixNQUFNLE9BQWdCLFNBQVM7SUFPM0IsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQWtCRCxZQUFZLEtBQW9CLEVBQUUsR0FBa0IsRUFBRSxPQUF5QjtRQU4vRSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9oQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxLQUFL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Q0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDaEgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDbEMsT0FBTyxTQUFTLEVBQUUsS0FBSyxDQUFDO1NBQzNCO2FBQU07WUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUN0QyxPQUFPLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsT0FBTyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsaUJBQWlCLENBQUMsS0FBZ0IsRUFBRSxHQUFjO1FBQzlDLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbnR0RGF0ZSwgZGlmZmVyZW5jZUluRGF5cywgR2FudHREYXRlVXRpbCB9IGZyb20gJy4uL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgR2FudHREYXRlUG9pbnQgfSBmcm9tICcuLi9jbGFzcy9kYXRlLXBvaW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVmYXVsdENvbmZpZywgR2FudHREYXRlRm9ybWF0IH0gZnJvbSAnLi4vZ2FudHQuY29uZmlnJztcbmltcG9ydCB7IEdhbnR0Vmlld1R5cGUgfSBmcm9tICcuLi9jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBwcmltYXJ5RGF0ZVBvaW50VG9wID0gMTg7XG5cbmV4cG9ydCBjb25zdCBzZWNvbmRhcnlEYXRlUG9pbnRUb3AgPSAzNjtcblxuZXhwb3J0IGludGVyZmFjZSBHYW50dFZpZXdEYXRlIHtcbiAgICBkYXRlOiBHYW50dERhdGU7XG4gICAgaXNDdXN0b20/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdhbnR0Vmlld09wdGlvbnMge1xuICAgIHN0YXJ0PzogR2FudHREYXRlO1xuICAgIGVuZD86IEdhbnR0RGF0ZTtcbiAgICBtaW4/OiBHYW50dERhdGU7XG4gICAgbWF4PzogR2FudHREYXRlO1xuICAgIGNlbGxXaWR0aD86IG51bWJlcjtcbiAgICBhZGRBbW91bnQ/OiBudW1iZXI7XG4gICAgYWRkVW5pdD86IEdhbnR0RGF0ZVV0aWw7XG4gICAgZGF0ZUZvcm1hdD86IEdhbnR0RGF0ZUZvcm1hdDtcbiAgICAvLyBmaWxsIGRheXMgd2hlbiBzdGFydCBvciBlbmQgaXMgbnVsbFxuICAgIGZpbGxEYXlzPzogbnVtYmVyO1xuICAgIC8vIGN1c3RvbSBrZXkgYW5kIHZhbHVlXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5jb25zdCB2aWV3T3B0aW9uczogR2FudHRWaWV3T3B0aW9ucyA9IHtcbiAgICBtaW46IG5ldyBHYW50dERhdGUoKS5hZGRZZWFycygtMSkuc3RhcnRPZlllYXIoKSxcbiAgICBtYXg6IG5ldyBHYW50dERhdGUoKS5hZGRZZWFycygxKS5lbmRPZlllYXIoKSxcbiAgICBkYXRlRm9ybWF0OiBkZWZhdWx0Q29uZmlnLmRhdGVGb3JtYXRcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW50dFZpZXcge1xuICAgIHZpZXdUeXBlOiBHYW50dFZpZXdUeXBlO1xuXG4gICAgc3RhcnQkOiBCZWhhdmlvclN1YmplY3Q8R2FudHREYXRlPjtcblxuICAgIGVuZCQ6IEJlaGF2aW9yU3ViamVjdDxHYW50dERhdGU+O1xuXG4gICAgZ2V0IHN0YXJ0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBnZXQgZW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmQkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpbWFyeURhdGVQb2ludHM6IEdhbnR0RGF0ZVBvaW50W107XG5cbiAgICBzZWNvbmRhcnlEYXRlUG9pbnRzOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgd2lkdGg6IG51bWJlcjtcblxuICAgIGNlbGxXaWR0aDogbnVtYmVyO1xuXG4gICAgcHJpbWFyeVdpZHRoOiBudW1iZXI7XG5cbiAgICBzaG93VGltZWxpbmUgPSB0cnVlO1xuXG4gICAgc2hvd1dlZWtCYWNrZHJvcDogYm9vbGVhbjtcblxuICAgIG9wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFydDogR2FudHRWaWV3RGF0ZSwgZW5kOiBHYW50dFZpZXdEYXRlLCBvcHRpb25zOiBHYW50dFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHZpZXdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gc3RhcnQuaXNDdXN0b21cbiAgICAgICAgICAgID8gdGhpcy5zdGFydE9mKHN0YXJ0LmRhdGUpXG4gICAgICAgICAgICA6IHRoaXMuc3RhcnRPZihzdGFydC5kYXRlLnZhbHVlIDwgdGhpcy5vcHRpb25zLnN0YXJ0LnZhbHVlID8gc3RhcnQuZGF0ZSA6IHRoaXMub3B0aW9ucy5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBlbmQuaXNDdXN0b21cbiAgICAgICAgICAgID8gdGhpcy5lbmRPZihlbmQuZGF0ZSlcbiAgICAgICAgICAgIDogdGhpcy5lbmRPZihlbmQuZGF0ZS52YWx1ZSA+IHRoaXMub3B0aW9ucy5lbmQudmFsdWUgPyBlbmQuZGF0ZSA6IHRoaXMub3B0aW9ucy5lbmQpO1xuICAgICAgICB0aGlzLnN0YXJ0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8R2FudHREYXRlPihzdGFydERhdGUpO1xuICAgICAgICB0aGlzLmVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdhbnR0RGF0ZT4oZW5kRGF0ZSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHN0YXJ0T2YoZGF0ZTogR2FudHREYXRlKTogR2FudHREYXRlO1xuXG4gICAgYWJzdHJhY3QgZW5kT2YoZGF0ZTogR2FudHREYXRlKTogR2FudHREYXRlO1xuXG4gICAgLy8g6I635Y+W5LiA57qn5pe26Ze0572R5qC85ZCI5bm25ZCO55qE5a695bqmXG4gICAgYWJzdHJhY3QgZ2V0UHJpbWFyeVdpZHRoKCk6IG51bWJlcjtcblxuICAgIC8vIOiOt+WPluW9k+WJjeinhuWbvuS4i+avj+S4gOWkqeWNoOeUqOeahOWuveW6plxuICAgIGFic3RyYWN0IGdldERheU9jY3VwYW5jeVdpZHRoKGRhdGU6IEdhbnR0RGF0ZSk6IG51bWJlcjtcblxuICAgIC8vIOiOt+WPluS4gOe6p+aXtumXtOeCue+8iOWdkOagh++8jOaYvuekuuWQjeensO+8iVxuICAgIGFic3RyYWN0IGdldFByaW1hcnlEYXRlUG9pbnRzKCk6IEdhbnR0RGF0ZVBvaW50W107XG5cbiAgICAvLyDojrflj5bkuoznuqfml7bpl7TngrnvvIjlnZDmoIfvvIzmmL7npLrlkI3np7DvvIlcbiAgICBhYnN0cmFjdCBnZXRTZWNvbmRhcnlEYXRlUG9pbnRzKCk6IEdhbnR0RGF0ZVBvaW50W107XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0ZUludGVydmFsV2lkdGgoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkaWZmZXJlbmNlSW5EYXlzKGVuZC52YWx1ZSwgc3RhcnQudmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGguYWJzKGRheXMpOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmdldERheU9jY3VwYW5jeVdpZHRoKHN0YXJ0LmFkZERheXMoaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGRheXMgPj0gMCA/IHJlc3VsdCA6IC1yZXN1bHQ7XG4gICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0LnRvRml4ZWQoMykpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplKCkge1xuICAgICAgICB0aGlzLnByaW1hcnlEYXRlUG9pbnRzID0gdGhpcy5nZXRQcmltYXJ5RGF0ZVBvaW50cygpO1xuICAgICAgICB0aGlzLnNlY29uZGFyeURhdGVQb2ludHMgPSB0aGlzLmdldFNlY29uZGFyeURhdGVQb2ludHMoKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICAgICAgdGhpcy5jZWxsV2lkdGggPSB0aGlzLmdldENlbGxXaWR0aCgpO1xuICAgICAgICB0aGlzLnByaW1hcnlXaWR0aCA9IHRoaXMuZ2V0UHJpbWFyeVdpZHRoKCk7XG4gICAgfVxuXG4gICAgYWRkU3RhcnREYXRlKCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnRPZih0aGlzLnN0YXJ0LmFkZCh0aGlzLm9wdGlvbnMuYWRkQW1vdW50ICogLTEsIHRoaXMub3B0aW9ucy5hZGRVbml0KSk7XG4gICAgICAgIGlmIChzdGFydC52YWx1ZSA+PSB0aGlzLm9wdGlvbnMubWluLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLnN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5zdGFydCQubmV4dChzdGFydCk7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiB0aGlzLnN0YXJ0LCBlbmQ6IG9yaWdpbiB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFkZEVuZERhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZW5kT2YodGhpcy5lbmQuYWRkKHRoaXMub3B0aW9ucy5hZGRBbW91bnQsIHRoaXMub3B0aW9ucy5hZGRVbml0KSk7XG4gICAgICAgIGlmIChlbmQudmFsdWUgPD0gdGhpcy5vcHRpb25zLm1heC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5lbmQ7XG4gICAgICAgICAgICB0aGlzLmVuZCQubmV4dChlbmQpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogb3JpZ2luLCBlbmQ6IHRoaXMuZW5kIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlRGF0ZShzdGFydDogR2FudHREYXRlLCBlbmQ6IEdhbnR0RGF0ZSkge1xuICAgICAgICBzdGFydCA9IHRoaXMuc3RhcnRPZihzdGFydCk7XG4gICAgICAgIGVuZCA9IHRoaXMuZW5kT2YoZW5kKTtcbiAgICAgICAgaWYgKHN0YXJ0LnZhbHVlIDwgdGhpcy5zdGFydC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydCQubmV4dChzdGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZC52YWx1ZSA+IHRoaXMuZW5kLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZCQubmV4dChlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIH1cblxuICAgIC8vIOiOt+WPllZpZXfnmoTlrr3luqZcbiAgICBnZXRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbFdpZHRoKCkgKiB0aGlzLnNlY29uZGFyeURhdGVQb2ludHMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIOiOt+WPluWNleS4que9keagvOeahOWuveW6plxuICAgIGdldENlbGxXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jZWxsV2lkdGg7XG4gICAgfVxuXG4gICAgLy8g6I635Y+W5b2T5YmN5pe26Ze055qEWOWdkOagh1xuICAgIGdldFRvZGF5WFBvaW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRvYWR5ID0gbmV3IEdhbnR0RGF0ZSgpLnN0YXJ0T2ZEYXkoKTtcbiAgICAgICAgaWYgKHRvYWR5LnZhbHVlID4gdGhpcy5zdGFydC52YWx1ZSAmJiB0b2FkeS52YWx1ZSA8IHRoaXMuZW5kLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRYUG9pbnRCeURhdGUodG9hZHkpICsgdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aCh0b2FkeSkgLyAyO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOiOt+WPluaMh+WumuaXtumXtOeahFjlnZDmoIdcbiAgICBnZXRYUG9pbnRCeURhdGUoZGF0ZTogR2FudHREYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGVJbnRlcnZhbFdpZHRoKHRoaXMuc3RhcnQsIGRhdGUpO1xuICAgIH1cblxuICAgIC8vIOagueaNrljlnZDmoIfojrflj5blr7nlupTml7bpl7RcbiAgICBnZXREYXRlQnlYUG9pbnQoeDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTZWNvbmRhcnlEYXRlID0gTWF0aC5tYXgoTWF0aC5mbG9vcih4IC8gdGhpcy5nZXRDZWxsV2lkdGgoKSksIDApO1xuICAgICAgICBjb25zdCBtYXRjaERhdGUgPSB0aGlzLnNlY29uZGFyeURhdGVQb2ludHNbTWF0aC5taW4odGhpcy5zZWNvbmRhcnlEYXRlUG9pbnRzLmxlbmd0aCAtIDEsIGluZGV4T2ZTZWNvbmRhcnlEYXRlKV07XG4gICAgICAgIGNvbnN0IGRheVdpZHRoID0gdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aChtYXRjaERhdGU/LnN0YXJ0KTtcbiAgICAgICAgaWYgKGRheVdpZHRoID09PSB0aGlzLmdldENlbGxXaWR0aCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hEYXRlPy5zdGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRheSA9IE1hdGguZmxvb3IoKHggJSB0aGlzLmdldENlbGxXaWR0aCgpKSAvIGRheVdpZHRoKSArIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDZWxsV2lkdGgoKSAvIGRheVdpZHRoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuYWRkRGF5cyhkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuc2V0RGF0ZShkYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g6I635Y+W5oyH5a6a5pe26Ze06IyD5Zu055qE5a695bqmXG4gICAgZ2V0RGF0ZVJhbmdlV2lkdGgoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgLy8gYWRkU2Vjb25kcygxKSDmmK/lm6DkuLrorqHnrpfnm7jlt67lpKnkvJrku6XkuIDkuKrmlbTlpKnmnaXorqHnrpcgZW5k5pe26Ze05LiA6Iis5pivNTnliIY1OeenkuS4jeaYr+S4gOS4quaVtOWkqe+8jOaJgOS7pemcgOimgeWKoDFcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUludGVydmFsV2lkdGgoc3RhcnQsIGVuZC5hZGRTZWNvbmRzKDEpKTtcbiAgICB9XG59XG4iXX0=
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy92aWV3cy92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBc0J4QyxNQUFNLFdBQVcsR0FBcUI7SUFDbEMsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO0lBQy9DLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7SUFDNUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO0NBQ3ZDLENBQUM7QUFFRixNQUFNLE9BQWdCLFNBQVM7SUFPM0IsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQWtCRCxZQUFZLEtBQW9CLEVBQUUsR0FBa0IsRUFBRSxPQUF5QjtRQU4vRSxpQkFBWSxHQUFHLElBQUksQ0FBQztRQU9oQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxLQUFL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S0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsR0FBYztRQUM5Qyw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW50dERhdGUsIGRpZmZlcmVuY2VJbkRheXMsIEdhbnR0RGF0ZVV0aWwgfSBmcm9tICcuLi91dGlscy9kYXRlJztcbmltcG9ydCB7IEdhbnR0RGF0ZVBvaW50IH0gZnJvbSAnLi4vY2xhc3MvZGF0ZS1wb2ludCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIEdhbnR0RGF0ZUZvcm1hdCB9IGZyb20gJy4uL2dhbnR0LmNvbmZpZyc7XG5pbXBvcnQgeyBHYW50dFZpZXdUeXBlIH0gZnJvbSAnLi4vY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgcHJpbWFyeURhdGVQb2ludFRvcCA9IDE4O1xuXG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5RGF0ZVBvaW50VG9wID0gMzY7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2FudHRWaWV3RGF0ZSB7XG4gICAgZGF0ZTogR2FudHREYXRlO1xuICAgIGlzQ3VzdG9tPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYW50dFZpZXdPcHRpb25zIHtcbiAgICBzdGFydD86IEdhbnR0RGF0ZTtcbiAgICBlbmQ/OiBHYW50dERhdGU7XG4gICAgbWluPzogR2FudHREYXRlO1xuICAgIG1heD86IEdhbnR0RGF0ZTtcbiAgICBjZWxsV2lkdGg/OiBudW1iZXI7XG4gICAgYWRkQW1vdW50PzogbnVtYmVyO1xuICAgIGFkZFVuaXQ/OiBHYW50dERhdGVVdGlsO1xuICAgIGRhdGVGb3JtYXQ/OiBHYW50dERhdGVGb3JtYXQ7XG4gICAgLy8gZmlsbCBkYXlzIHdoZW4gc3RhcnQgb3IgZW5kIGlzIG51bGxcbiAgICBmaWxsRGF5cz86IG51bWJlcjtcbiAgICAvLyBjdXN0b20ga2V5IGFuZCB2YWx1ZVxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuY29uc3Qgdmlld09wdGlvbnM6IEdhbnR0Vmlld09wdGlvbnMgPSB7XG4gICAgbWluOiBuZXcgR2FudHREYXRlKCkuYWRkWWVhcnMoLTEpLnN0YXJ0T2ZZZWFyKCksXG4gICAgbWF4OiBuZXcgR2FudHREYXRlKCkuYWRkWWVhcnMoMSkuZW5kT2ZZZWFyKCksXG4gICAgZGF0ZUZvcm1hdDogZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0XG59O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2FudHRWaWV3IHtcbiAgICB2aWV3VHlwZTogR2FudHRWaWV3VHlwZTtcblxuICAgIHN0YXJ0JDogQmVoYXZpb3JTdWJqZWN0PEdhbnR0RGF0ZT47XG5cbiAgICBlbmQkOiBCZWhhdmlvclN1YmplY3Q8R2FudHREYXRlPjtcblxuICAgIGdldCBzdGFydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaW1hcnlEYXRlUG9pbnRzOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgc2Vjb25kYXJ5RGF0ZVBvaW50czogR2FudHREYXRlUG9pbnRbXTtcblxuICAgIHdpZHRoOiBudW1iZXI7XG5cbiAgICBjZWxsV2lkdGg6IG51bWJlcjtcblxuICAgIHByaW1hcnlXaWR0aDogbnVtYmVyO1xuXG4gICAgc2hvd1RpbWVsaW5lID0gdHJ1ZTtcblxuICAgIHNob3dXZWVrQmFja2Ryb3A6IGJvb2xlYW47XG5cbiAgICBvcHRpb25zOiBHYW50dFZpZXdPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3Ioc3RhcnQ6IEdhbnR0Vmlld0RhdGUsIGVuZDogR2FudHRWaWV3RGF0ZSwgb3B0aW9uczogR2FudHRWaWV3T3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB2aWV3T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0LmlzQ3VzdG9tXG4gICAgICAgICAgICA/IHRoaXMuc3RhcnRPZihzdGFydC5kYXRlKVxuICAgICAgICAgICAgOiB0aGlzLnN0YXJ0T2Yoc3RhcnQuZGF0ZS52YWx1ZSA8IHRoaXMub3B0aW9ucy5zdGFydC52YWx1ZSA/IHN0YXJ0LmRhdGUgOiB0aGlzLm9wdGlvbnMuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZW5kLmlzQ3VzdG9tXG4gICAgICAgICAgICA/IHRoaXMuZW5kT2YoZW5kLmRhdGUpXG4gICAgICAgICAgICA6IHRoaXMuZW5kT2YoZW5kLmRhdGUudmFsdWUgPiB0aGlzLm9wdGlvbnMuZW5kLnZhbHVlID8gZW5kLmRhdGUgOiB0aGlzLm9wdGlvbnMuZW5kKTtcbiAgICAgICAgdGhpcy5zdGFydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEdhbnR0RGF0ZT4oc3RhcnREYXRlKTtcbiAgICAgICAgdGhpcy5lbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHYW50dERhdGU+KGVuZERhdGUpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBzdGFydE9mKGRhdGU6IEdhbnR0RGF0ZSk6IEdhbnR0RGF0ZTtcblxuICAgIGFic3RyYWN0IGVuZE9mKGRhdGU6IEdhbnR0RGF0ZSk6IEdhbnR0RGF0ZTtcblxuICAgIC8vIOiOt+WPluS4gOe6p+aXtumXtOe9keagvOWQiOW5tuWQjueahOWuveW6plxuICAgIGFic3RyYWN0IGdldFByaW1hcnlXaWR0aCgpOiBudW1iZXI7XG5cbiAgICAvLyDojrflj5blvZPliY3op4blm77kuIvmr4/kuIDlpKnljaDnlKjnmoTlrr3luqZcbiAgICBhYnN0cmFjdCBnZXREYXlPY2N1cGFuY3lXaWR0aChkYXRlOiBHYW50dERhdGUpOiBudW1iZXI7XG5cbiAgICAvLyDojrflj5bkuIDnuqfml7bpl7TngrnvvIjlnZDmoIfvvIzmmL7npLrlkI3np7DvvIlcbiAgICBhYnN0cmFjdCBnZXRQcmltYXJ5RGF0ZVBvaW50cygpOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgLy8g6I635Y+W5LqM57qn5pe26Ze054K577yI5Z2Q5qCH77yM5pi+56S65ZCN56ew77yJXG4gICAgYWJzdHJhY3QgZ2V0U2Vjb25kYXJ5RGF0ZVBvaW50cygpOiBHYW50dERhdGVQb2ludFtdO1xuXG4gICAgcHJvdGVjdGVkIGdldERhdGVJbnRlcnZhbFdpZHRoKHN0YXJ0OiBHYW50dERhdGUsIGVuZDogR2FudHREYXRlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhlbmQudmFsdWUsIHN0YXJ0LnZhbHVlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmFicyhkYXlzKTsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aChzdGFydC5hZGREYXlzKGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBkYXlzID49IDAgPyByZXN1bHQgOiAtcmVzdWx0O1xuICAgICAgICByZXR1cm4gTnVtYmVyKHJlc3VsdC50b0ZpeGVkKDMpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5wcmltYXJ5RGF0ZVBvaW50cyA9IHRoaXMuZ2V0UHJpbWFyeURhdGVQb2ludHMoKTtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlEYXRlUG9pbnRzID0gdGhpcy5nZXRTZWNvbmRhcnlEYXRlUG9pbnRzKCk7XG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgICAgIHRoaXMuY2VsbFdpZHRoID0gdGhpcy5nZXRDZWxsV2lkdGgoKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5V2lkdGggPSB0aGlzLmdldFByaW1hcnlXaWR0aCgpO1xuICAgIH1cblxuICAgIGFkZFN0YXJ0RGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2YodGhpcy5zdGFydC5hZGQodGhpcy5vcHRpb25zLmFkZEFtb3VudCAqIC0xLCB0aGlzLm9wdGlvbnMuYWRkVW5pdCkpO1xuICAgICAgICBpZiAoc3RhcnQudmFsdWUgPj0gdGhpcy5vcHRpb25zLm1pbi52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5zdGFydDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQkLm5leHQoc3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogdGhpcy5zdGFydCwgZW5kOiBvcmlnaW4gfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhZGRFbmREYXRlKCkge1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmVuZE9mKHRoaXMuZW5kLmFkZCh0aGlzLm9wdGlvbnMuYWRkQW1vdW50LCB0aGlzLm9wdGlvbnMuYWRkVW5pdCkpO1xuICAgICAgICBpZiAoZW5kLnZhbHVlIDw9IHRoaXMub3B0aW9ucy5tYXgudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuZW5kO1xuICAgICAgICAgICAgdGhpcy5lbmQkLm5leHQoZW5kKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IG9yaWdpbiwgZW5kOiB0aGlzLmVuZCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGUoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0T2Yoc3RhcnQpO1xuICAgICAgICBlbmQgPSB0aGlzLmVuZE9mKGVuZCk7XG4gICAgICAgIGlmIChzdGFydC52YWx1ZSA8IHRoaXMuc3RhcnQudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnQkLm5leHQoc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQudmFsdWUgPiB0aGlzLmVuZC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lbmQkLm5leHQoZW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICAvLyDojrflj5ZWaWV355qE5a695bqmXG4gICAgZ2V0V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENlbGxXaWR0aCgpICogdGhpcy5zZWNvbmRhcnlEYXRlUG9pbnRzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyDojrflj5bljZXkuKrnvZHmoLznmoTlrr3luqZcbiAgICBnZXRDZWxsV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2VsbFdpZHRoO1xuICAgIH1cblxuICAgIC8vIOiOt+WPluW9k+WJjeaXtumXtOeahFjlnZDmoIdcbiAgICBnZXRUb2RheVhQb2ludCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0b2FkeSA9IG5ldyBHYW50dERhdGUoKS5zdGFydE9mRGF5KCk7XG4gICAgICAgIGlmICh0b2FkeS52YWx1ZSA+IHRoaXMuc3RhcnQudmFsdWUgJiYgdG9hZHkudmFsdWUgPCB0aGlzLmVuZC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2V0WFBvaW50QnlEYXRlKHRvYWR5KSArIHRoaXMuZ2V0RGF5T2NjdXBhbmN5V2lkdGgodG9hZHkpIC8gMjtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDojrflj5bmjIflrprml7bpl7TnmoRY5Z2Q5qCHXG4gICAgZ2V0WFBvaW50QnlEYXRlKGRhdGU6IEdhbnR0RGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlSW50ZXJ2YWxXaWR0aCh0aGlzLnN0YXJ0LCBkYXRlKTtcbiAgICB9XG5cbiAgICAvLyDmoLnmja5Y5Z2Q5qCH6I635Y+W5a+55bqU5pe26Ze0XG4gICAgZ2V0RGF0ZUJ5WFBvaW50KHg6IG51bWJlcik6IEdhbnR0RGF0ZSB7XG4gICAgICAgIGxldCBpbmRleE9mU2Vjb25kYXJ5RGF0ZTogbnVtYmVyO1xuICAgICAgICBsZXQgbWF0Y2hEYXRlOiBHYW50dERhdGVQb2ludDtcbiAgICAgICAgbGV0IGRheVdpZHRoOiBudW1iZXI7XG4gICAgICAgIGxldCBkYXk6IG51bWJlcjtcbiAgICAgICAgaWYgKHggPj0gMCkge1xuICAgICAgICAgICAgaW5kZXhPZlNlY29uZGFyeURhdGUgPSBNYXRoLmZsb29yKHggLyB0aGlzLmdldENlbGxXaWR0aCgpKTtcbiAgICAgICAgICAgIG1hdGNoRGF0ZSA9IHRoaXMuc2Vjb25kYXJ5RGF0ZVBvaW50c1tNYXRoLm1pbih0aGlzLnNlY29uZGFyeURhdGVQb2ludHMubGVuZ3RoIC0gMSwgaW5kZXhPZlNlY29uZGFyeURhdGUpXTtcbiAgICAgICAgICAgIGRheVdpZHRoID0gdGhpcy5nZXREYXlPY2N1cGFuY3lXaWR0aChtYXRjaERhdGU/LnN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQb2ludFRlbXAgPSB0aGlzLnNlY29uZGFyeURhdGVQb2ludHNbMF07XG4gICAgICAgICAgICBkYXlXaWR0aCA9IHRoaXMuZ2V0RGF5T2NjdXBhbmN5V2lkdGgoZGF0ZVBvaW50VGVtcD8uc3RhcnQpO1xuICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcih4IC8gZGF5V2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVQb2ludFRlbXA/LnN0YXJ0LmFkZERheXMoZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5V2lkdGggPT09IHRoaXMuZ2V0Q2VsbFdpZHRoKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaERhdGU/LnN0YXJ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcigoeCAlIHRoaXMuZ2V0Q2VsbFdpZHRoKCkpIC8gZGF5V2lkdGgpICsgMTtcbiAgICAgICAgICAgIGlmIChpbmRleE9mU2Vjb25kYXJ5RGF0ZSA+IHRoaXMuc2Vjb25kYXJ5RGF0ZVBvaW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgZGF5ICs9IChpbmRleE9mU2Vjb25kYXJ5RGF0ZSAtICh0aGlzLnNlY29uZGFyeURhdGVQb2ludHMubGVuZ3RoIC0gMSkpICogMzA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDZWxsV2lkdGgoKSAvIGRheVdpZHRoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuYWRkRGF5cyhkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoRGF0ZT8uc3RhcnQuc2V0RGF0ZShkYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g6I635Y+W5oyH5a6a5pe26Ze06IyD5Zu055qE5a695bqmXG4gICAgZ2V0RGF0ZVJhbmdlV2lkdGgoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgLy8gYWRkU2Vjb25kcygxKSDmmK/lm6DkuLrorqHnrpfnm7jlt67lpKnkvJrku6XkuIDkuKrmlbTlpKnmnaXorqHnrpcgZW5k5pe26Ze05LiA6Iis5pivNTnliIY1OeenkuS4jeaYr+S4gOS4quaVtOWkqe+8jOaJgOS7pemcgOimgeWKoDFcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZUludGVydmFsV2lkdGgoc3RhcnQsIGVuZC5hZGRTZWNvbmRzKDEpKTtcbiAgICB9XG59XG4iXX0=
@@ -491,14 +491,29 @@ class GanttView {
491
491
  }
492
492
  // 根据X坐标获取对应时间
493
493
  getDateByXPoint(x) {
494
- const indexOfSecondaryDate = Math.max(Math.floor(x / this.getCellWidth()), 0);
495
- const matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
496
- const dayWidth = this.getDayOccupancyWidth(matchDate?.start);
494
+ let indexOfSecondaryDate;
495
+ let matchDate;
496
+ let dayWidth;
497
+ let day;
498
+ if (x >= 0) {
499
+ indexOfSecondaryDate = Math.floor(x / this.getCellWidth());
500
+ matchDate = this.secondaryDatePoints[Math.min(this.secondaryDatePoints.length - 1, indexOfSecondaryDate)];
501
+ dayWidth = this.getDayOccupancyWidth(matchDate?.start);
502
+ }
503
+ else {
504
+ const datePointTemp = this.secondaryDatePoints[0];
505
+ dayWidth = this.getDayOccupancyWidth(datePointTemp?.start);
506
+ day = Math.floor(x / dayWidth);
507
+ return datePointTemp?.start.addDays(day);
508
+ }
497
509
  if (dayWidth === this.getCellWidth()) {
498
510
  return matchDate?.start;
499
511
  }
500
512
  else {
501
- const day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
513
+ day = Math.floor((x % this.getCellWidth()) / dayWidth) + 1;
514
+ if (indexOfSecondaryDate > this.secondaryDatePoints.length - 1) {
515
+ day += (indexOfSecondaryDate - (this.secondaryDatePoints.length - 1)) * 30;
516
+ }
502
517
  if (this.getCellWidth() / dayWidth === 7) {
503
518
  return matchDate?.start.addDays(day);
504
519
  }
@@ -905,6 +920,7 @@ class GanttUpper {
905
920
  this.viewType = GanttViewType.month;
906
921
  this.showTodayLine = true;
907
922
  this.showToolbar = false;
923
+ this.restrictToBounds = true;
908
924
  this.toolbarOptions = {
909
925
  viewTypes: [GanttViewType.day, GanttViewType.month, GanttViewType.year]
910
926
  };
@@ -1160,7 +1176,7 @@ class GanttUpper {
1160
1176
  this.changeView(this.viewType);
1161
1177
  }
1162
1178
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttUpper, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GANTT_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Directive }); }
1163
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", showToolbar: "showToolbar", toolbarOptions: "toolbarOptions", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick", viewChange: "viewChange", expandChange: "expandChange" }, 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: "baselineTemplate", first: true, predicate: ["baseline"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 }); }
1179
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: GanttUpper, inputs: { originItems: ["items", "originItems"], originGroups: ["groups", "originGroups"], originBaselineItems: ["baselineItems", "originBaselineItems"], viewType: "viewType", start: "start", end: "end", showTodayLine: "showTodayLine", draggable: "draggable", styles: "styles", showToolbar: "showToolbar", restrictToBounds: "restrictToBounds", toolbarOptions: "toolbarOptions", viewOptions: "viewOptions", linkOptions: "linkOptions", disabledLoadOnScroll: "disabledLoadOnScroll", selectable: "selectable", multiple: "multiple" }, outputs: { loadOnScroll: "loadOnScroll", dragStarted: "dragStarted", dragMoved: "dragMoved", dragEnded: "dragEnded", barClick: "barClick", viewChange: "viewChange", expandChange: "expandChange" }, 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: "baselineTemplate", first: true, predicate: ["baseline"], descendants: true, static: true }, { propertyName: "groupTemplate", first: true, predicate: ["group"], descendants: true, static: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: ["groupHeader"], descendants: true, static: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0 }); }
1164
1180
  }
1165
1181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: GanttUpper, decorators: [{
1166
1182
  type: Directive
@@ -1190,6 +1206,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
1190
1206
  type: Input
1191
1207
  }], showToolbar: [{
1192
1208
  type: Input
1209
+ }], restrictToBounds: [{
1210
+ type: Input
1193
1211
  }], toolbarOptions: [{
1194
1212
  type: Input
1195
1213
  }], viewOptions: [{
@@ -2717,7 +2735,9 @@ class GanttBarDrag {
2717
2735
  createBarDrag() {
2718
2736
  const dragRef = this.createDragRef(this.barElement);
2719
2737
  dragRef.lockAxis = 'x';
2720
- dragRef.withBoundaryElement(this.dom.mainItems);
2738
+ if (this.ganttUpper.restrictToBounds) {
2739
+ dragRef.withBoundaryElement(this.dom.mainItems);
2740
+ }
2721
2741
  dragRef.started.subscribe(() => {
2722
2742
  this.setDraggingStyles();
2723
2743
  this.containerScrollLeft = this.dom.mainContainer.scrollLeft;
@@ -3070,6 +3090,9 @@ class GanttBarDrag {
3070
3090
  const itemEnd = end.getUnixTime();
3071
3091
  const viewStart = this.ganttUpper.view.start.getUnixTime();
3072
3092
  const viewEnd = this.ganttUpper.view.end.getUnixTime();
3093
+ if (!this.ganttUpper.restrictToBounds) {
3094
+ return true;
3095
+ }
3073
3096
  if (itemStart < viewStart || itemEnd > viewEnd) {
3074
3097
  return false;
3075
3098
  }