@worktile/gantt 18.0.2 → 18.0.4

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.
@@ -4,7 +4,7 @@ import * as i1$1 from '@angular/cdk/scrolling';
4
4
  import { CdkScrollable, CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf, ScrollingModule } from '@angular/cdk/scrolling';
5
5
  import { isPlatformServer, NgIf, NgTemplateOutlet, NgFor, NgStyle, NgClass, DOCUMENT, CommonModule } from '@angular/common';
6
6
  import * as i0 from '@angular/core';
7
- import { InjectionToken, EventEmitter, Directive, Inject, Input, Output, ContentChild, HostBinding, Injectable, PLATFORM_ID, Component, ViewChild, ViewChildren, Pipe, ElementRef, Optional, HostListener, forwardRef, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
7
+ import { InjectionToken, EventEmitter, Directive, Inject, Input, Output, ContentChild, HostBinding, Injectable, PLATFORM_ID, signal, effect, Component, ViewChild, ViewChildren, Pipe, ElementRef, Optional, HostListener, forwardRef, ChangeDetectionStrategy, ContentChildren, NgModule } from '@angular/core';
8
8
  import { fromUnixTime, getWeek, getDaysInMonth, differenceInCalendarDays, setDate, addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addQuarters, addYears, startOfMinute, startOfHour, startOfDay, startOfWeek, startOfMonth, startOfQuarter, startOfYear, endOfMinute, endOfHour, endOfDay, endOfWeek, endOfMonth, endOfQuarter, endOfYear, getUnixTime, format, isWeekend, isToday, differenceInHours, differenceInMinutes, differenceInDays, differenceInCalendarQuarters, eachMonthOfInterval, eachYearOfInterval, eachWeekOfInterval, eachDayOfInterval, differenceInCalendarYears, eachHourOfInterval, setDefaultOptions } from 'date-fns';
9
9
  export { addDays, addHours, addMinutes, addMonths, addQuarters, addSeconds, addWeeks, addYears, differenceInCalendarDays, differenceInCalendarQuarters, differenceInDays, differenceInMinutes, eachDayOfInterval, eachHourOfInterval, eachMonthOfInterval, eachWeekOfInterval, endOfDay, endOfHour, endOfMinute, endOfMonth, endOfQuarter, endOfWeek, endOfYear, format, fromUnixTime, getDaysInMonth, getUnixTime, getWeek, isToday, isWeekend, setDate, startOfDay, startOfHour, startOfMinute, startOfMonth, startOfQuarter, startOfWeek, startOfYear } from 'date-fns';
10
10
  import { BehaviorSubject, Subject, from, fromEvent, merge, Observable, EMPTY, interval, animationFrameScheduler, takeUntil as takeUntil$1, startWith as startWith$1, auditTime as auditTime$1, filter } from 'rxjs';
@@ -1686,10 +1686,10 @@ function createSvgElement(qualifiedName, className) {
1686
1686
  }
1687
1687
  class GanttBarDrag {
1688
1688
  get dragDisabled() {
1689
- return !this.item.draggable || !this.ganttUpper.draggable;
1689
+ return !this.item().draggable || !this.ganttUpper.draggable;
1690
1690
  }
1691
1691
  get linkDragDisabled() {
1692
- return !this.item.linkable || !this.ganttUpper.linkable;
1692
+ return !this.item().linkable || !this.ganttUpper.linkable;
1693
1693
  }
1694
1694
  get barHandleDragMoveAndScrollDistance() {
1695
1695
  return this.barHandleDragMoveDistance + this.dragScrollDistance;
@@ -1702,7 +1702,9 @@ class GanttBarDrag {
1702
1702
  this.dom = dom;
1703
1703
  this.dragContainer = dragContainer;
1704
1704
  this._ngZone = _ngZone;
1705
- this.dragRefs = [];
1705
+ this.item = signal(null);
1706
+ this.linkDragRefs = [];
1707
+ this.barHandleDragRefs = [];
1706
1708
  this.destroy$ = new Subject();
1707
1709
  /** Used to signal to the current auto-scroll sequence when to stop. */
1708
1710
  this.stopScrollTimers$ = new Subject();
@@ -1733,6 +1735,12 @@ class GanttBarDrag {
1733
1735
  }
1734
1736
  });
1735
1737
  };
1738
+ effect(() => {
1739
+ const item = this.item();
1740
+ if (item) {
1741
+ this.createDrags();
1742
+ }
1743
+ });
1736
1744
  }
1737
1745
  createDragRef(element) {
1738
1746
  const dragRef = this.dragDrop.createDrag(element);
@@ -1742,40 +1750,46 @@ class GanttBarDrag {
1742
1750
  return fromEvent(this.dom.mainContainer, 'scroll', passiveListenerOptions).pipe(takeUntil(dragRef.ended));
1743
1751
  }
1744
1752
  createMouseEvents() {
1745
- const dropClass = this.ganttUpper.config.linkOptions?.dependencyTypes?.length === 1 &&
1746
- this.ganttUpper.config.linkOptions?.dependencyTypes[0] === GanttLinkType.fs
1747
- ? singleDropActiveClass
1748
- : dropActiveClass;
1749
- fromEvent(this.barElement, 'mouseenter', passiveListenerOptions)
1750
- .pipe(takeUntil(this.destroy$))
1751
- .subscribe(() => {
1752
- if (this.dragContainer.linkDraggingId && this.dragContainer.linkDraggingId !== this.item.id) {
1753
- if (this.item.linkable) {
1754
- this.barElement.classList.add(dropClass);
1755
- this.dragContainer.emitLinkDragEntered({
1756
- item: this.item,
1757
- element: this.barElement
1758
- });
1753
+ if (!this.hasMonitorMouseEvent && (!this.dragDisabled || !this.linkDragDisabled)) {
1754
+ this.hasMonitorMouseEvent = true;
1755
+ const dropClass = this.ganttUpper.config.linkOptions?.dependencyTypes?.length === 1 &&
1756
+ this.ganttUpper.config.linkOptions?.dependencyTypes[0] === GanttLinkType.fs
1757
+ ? singleDropActiveClass
1758
+ : dropActiveClass;
1759
+ fromEvent(this.barElement, 'mouseenter', passiveListenerOptions)
1760
+ .pipe(takeUntil(this.destroy$))
1761
+ .subscribe(() => {
1762
+ if (this.dragContainer.linkDraggingId && this.dragContainer.linkDraggingId !== this.item().id) {
1763
+ if (!this.linkDragDisabled) {
1764
+ this.barElement.classList.add(dropClass);
1765
+ this.dragContainer.emitLinkDragEntered({
1766
+ item: this.item(),
1767
+ element: this.barElement
1768
+ });
1769
+ }
1759
1770
  }
1760
- }
1761
- else {
1762
- this.barElement.classList.add(activeClass);
1763
- }
1764
- });
1765
- fromEvent(this.barElement, 'mouseleave', passiveListenerOptions)
1766
- .pipe(takeUntil(this.destroy$))
1767
- .subscribe(() => {
1768
- if (!this.dragContainer.linkDraggingId) {
1769
- this.barElement.classList.remove(activeClass);
1770
- }
1771
- else {
1772
- this.dragContainer.emitLinkDragLeaved();
1773
- }
1774
- this.barElement.classList.remove(dropClass);
1775
- });
1771
+ else {
1772
+ if (!this.dragDisabled || !this.linkDragDisabled) {
1773
+ this.barElement.classList.add(activeClass);
1774
+ }
1775
+ }
1776
+ });
1777
+ fromEvent(this.barElement, 'mouseleave', passiveListenerOptions)
1778
+ .pipe(takeUntil(this.destroy$))
1779
+ .subscribe(() => {
1780
+ if (!this.dragContainer.linkDraggingId) {
1781
+ this.barElement.classList.remove(activeClass);
1782
+ }
1783
+ else {
1784
+ this.dragContainer.emitLinkDragLeaved();
1785
+ }
1786
+ this.barElement.classList.remove(dropClass);
1787
+ });
1788
+ }
1776
1789
  }
1777
1790
  createBarDrag() {
1778
1791
  const dragRef = this.createDragRef(this.barElement);
1792
+ dragRef.disabled = this.dragDisabled;
1779
1793
  dragRef.lockAxis = 'x';
1780
1794
  dragRef.withBoundaryElement(this.dom.mainItems);
1781
1795
  dragRef.started.subscribe(() => {
@@ -1789,7 +1803,7 @@ class GanttBarDrag {
1789
1803
  this.barDragMove();
1790
1804
  }
1791
1805
  });
1792
- this.dragContainer.dragStarted.emit({ item: this.item.origin });
1806
+ this.dragContainer.dragStarted.emit({ item: this.item().origin });
1793
1807
  });
1794
1808
  dragRef.moved.subscribe((event) => {
1795
1809
  this.startScrollingIfNecessary(event.pointerPosition.x, event.pointerPosition.y);
@@ -1806,14 +1820,13 @@ class GanttBarDrag {
1806
1820
  this.dragScrolling = false;
1807
1821
  this.dragScrollDistance = 0;
1808
1822
  this.barDragMoveDistance = 0;
1809
- this.item.updateRefs({
1810
- width: this.ganttUpper.view.getDateRangeWidth(this.item.start, this.item.end),
1811
- x: this.ganttUpper.view.getXPointByDate(this.item.start),
1823
+ this.item().updateRefs({
1824
+ width: this.ganttUpper.view.getDateRangeWidth(this.item().start, this.item().end),
1825
+ x: this.ganttUpper.view.getXPointByDate(this.item().start),
1812
1826
  y: (this.ganttUpper.styles.lineHeight - this.ganttUpper.styles.barHeight) / 2 - 1
1813
1827
  });
1814
- this.dragContainer.dragEnded.emit({ item: this.item.origin });
1828
+ this.dragContainer.dragEnded.emit({ item: this.item().origin });
1815
1829
  });
1816
- this.barDragRef = dragRef;
1817
1830
  return dragRef;
1818
1831
  }
1819
1832
  createBarHandleDrags() {
@@ -1822,6 +1835,7 @@ class GanttBarDrag {
1822
1835
  handles.forEach((handle, index) => {
1823
1836
  const isBefore = index === 0;
1824
1837
  const dragRef = this.createDragRef(handle);
1838
+ dragRef.disabled = this.dragDisabled;
1825
1839
  dragRef.lockAxis = 'x';
1826
1840
  dragRef.withBoundaryElement(this.dom.mainItems);
1827
1841
  dragRef.started.subscribe(() => {
@@ -1844,7 +1858,7 @@ class GanttBarDrag {
1844
1858
  }
1845
1859
  }
1846
1860
  });
1847
- this.dragContainer.dragStarted.emit({ item: this.item.origin });
1861
+ this.dragContainer.dragStarted.emit({ item: this.item().origin });
1848
1862
  });
1849
1863
  dragRef.moved.subscribe((event) => {
1850
1864
  if (this.barHandleDragMoveRecordDiffs && this.barHandleDragMoveRecordDiffs > 0) {
@@ -1868,12 +1882,12 @@ class GanttBarDrag {
1868
1882
  this.dragScrolling = false;
1869
1883
  this.dragScrollDistance = 0;
1870
1884
  this.barHandleDragMoveDistance = 0;
1871
- this.item.updateRefs({
1872
- width: this.ganttUpper.view.getDateRangeWidth(this.item.start, this.item.end),
1873
- x: this.ganttUpper.view.getXPointByDate(this.item.start),
1885
+ this.item().updateRefs({
1886
+ width: this.ganttUpper.view.getDateRangeWidth(this.item().start, this.item().end),
1887
+ x: this.ganttUpper.view.getXPointByDate(this.item().start),
1874
1888
  y: (this.ganttUpper.styles.lineHeight - this.ganttUpper.styles.barHeight) / 2 - 1
1875
1889
  });
1876
- this.dragContainer.dragEnded.emit({ item: this.item.origin });
1890
+ this.dragContainer.dragEnded.emit({ item: this.item().origin });
1877
1891
  });
1878
1892
  dragRefs.push(dragRef);
1879
1893
  });
@@ -1885,6 +1899,7 @@ class GanttBarDrag {
1885
1899
  handles.forEach((handle, index) => {
1886
1900
  const isBegin = index === 0;
1887
1901
  const dragRef = this.dragDrop.createDrag(handle);
1902
+ dragRef.disabled = this.linkDragDisabled;
1888
1903
  dragRef.withBoundaryElement(this.dom.root);
1889
1904
  dragRef.beforeStarted.subscribe(() => {
1890
1905
  handle.style.pointerEvents = 'none';
@@ -1894,7 +1909,7 @@ class GanttBarDrag {
1894
1909
  this.createLinkDraggingLine();
1895
1910
  this.dragContainer.emitLinkDragStarted({
1896
1911
  element: this.barElement,
1897
- item: this.item,
1912
+ item: this.item(),
1898
1913
  pos: isBegin ? InBarPosition.start : InBarPosition.finish
1899
1914
  });
1900
1915
  });
@@ -1969,10 +1984,10 @@ class GanttBarDrag {
1969
1984
  this.barElement.classList.remove('gantt-bar-draggable-drag');
1970
1985
  }
1971
1986
  barDragMove() {
1972
- const currentX = this.item.refs.x + this.barDragMoveDistance + this.dragScrollDistance;
1987
+ const currentX = this.item().refs.x + this.barDragMoveDistance + this.dragScrollDistance;
1973
1988
  const currentDate = this.ganttUpper.view.getDateByXPoint(currentX);
1974
1989
  const currentStartX = this.ganttUpper.view.getXPointByDate(currentDate);
1975
- const diffs = this.ganttUpper.view.differenceByPrecisionUnit(this.item.end, this.item.start);
1990
+ const diffs = this.ganttUpper.view.differenceByPrecisionUnit(this.item().end, this.item().start);
1976
1991
  let start = currentDate;
1977
1992
  let end = currentDate.add(diffs, this.ganttUpper.view?.options?.datePrecisionUnit);
1978
1993
  // 日视图特殊逻辑处理
@@ -1987,59 +2002,59 @@ class GanttBarDrag {
1987
2002
  const left = currentX - this.barDragMoveDistance;
1988
2003
  this.barElement.style.left = left + 'px';
1989
2004
  }
1990
- this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(currentX), this.ganttUpper.view.getDateByXPoint(currentX + this.item.refs.width));
2005
+ this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(currentX), this.ganttUpper.view.getDateByXPoint(currentX + this.item().refs.width));
1991
2006
  if (!this.isStartOrEndInsideView(start, end)) {
1992
2007
  return;
1993
2008
  }
1994
2009
  this.updateItemDate(start, end);
1995
- this.dragContainer.dragMoved.emit({ item: this.item.origin });
2010
+ this.dragContainer.dragMoved.emit({ item: this.item().origin });
1996
2011
  }
1997
2012
  barBeforeHandleDragMove() {
1998
2013
  const { x, start, minRangeWidthWidth } = this.startOfBarHandle();
1999
- const width = this.item.refs.width + this.barHandleDragMoveAndScrollDistance * -1;
2000
- const diffs = this.ganttUpper.view.differenceByPrecisionUnit(this.item.end, start);
2014
+ const width = this.item().refs.width + this.barHandleDragMoveAndScrollDistance * -1;
2015
+ const diffs = this.ganttUpper.view.differenceByPrecisionUnit(this.item().end, start);
2001
2016
  if (width > dragMinWidth && diffs > 0) {
2002
2017
  this.barElement.style.width = width + 'px';
2003
2018
  this.barElement.style.left = x + 'px';
2004
- this.openDragBackdrop(this.barElement, start, this.item.end);
2005
- if (!this.isStartOrEndInsideView(start, this.item.end)) {
2019
+ this.openDragBackdrop(this.barElement, start, this.item().end);
2020
+ if (!this.isStartOrEndInsideView(start, this.item().end)) {
2006
2021
  return;
2007
2022
  }
2008
- this.updateItemDate(start, this.item.end);
2023
+ this.updateItemDate(start, this.item().end);
2009
2024
  }
2010
2025
  else {
2011
2026
  if (this.barHandleDragMoveRecordDiffs > 0 && diffs <= 0) {
2012
2027
  this.barElement.style.width = minRangeWidthWidth + 'px';
2013
- const x = this.ganttUpper.view.getXPointByDate(this.item.end);
2028
+ const x = this.ganttUpper.view.getXPointByDate(this.item().end);
2014
2029
  this.barElement.style.left = x + 'px';
2015
2030
  }
2016
- this.openDragBackdrop(this.barElement, this.item.end, this.item.end);
2017
- this.updateItemDate(this.item.end, this.item.end);
2031
+ this.openDragBackdrop(this.barElement, this.item().end, this.item().end);
2032
+ this.updateItemDate(this.item().end, this.item().end);
2018
2033
  }
2019
2034
  this.barHandleDragMoveRecordDiffs = diffs;
2020
- this.dragContainer.dragMoved.emit({ item: this.item.origin });
2035
+ this.dragContainer.dragMoved.emit({ item: this.item().origin });
2021
2036
  }
2022
2037
  barAfterHandleDragMove() {
2023
2038
  const { width, end } = this.endOfBarHandle();
2024
- const diffs = this.ganttUpper.view.differenceByPrecisionUnit(end, this.item.start);
2039
+ const diffs = this.ganttUpper.view.differenceByPrecisionUnit(end, this.item().start);
2025
2040
  if (width > dragMinWidth && diffs > 0) {
2026
2041
  this.barElement.style.width = width + 'px';
2027
- this.openDragBackdrop(this.barElement, this.item.start, end);
2028
- if (!this.isStartOrEndInsideView(this.item.start, end)) {
2042
+ this.openDragBackdrop(this.barElement, this.item().start, end);
2043
+ if (!this.isStartOrEndInsideView(this.item().start, end)) {
2029
2044
  return;
2030
2045
  }
2031
- this.updateItemDate(this.item.start, end);
2046
+ this.updateItemDate(this.item().start, end);
2032
2047
  }
2033
2048
  else {
2034
2049
  if (this.barHandleDragMoveRecordDiffs > 0 && diffs <= 0) {
2035
- const minRangeWidth = this.ganttUpper.view.getMinRangeWidthByPrecisionUnit(this.item.start);
2050
+ const minRangeWidth = this.ganttUpper.view.getMinRangeWidthByPrecisionUnit(this.item().start);
2036
2051
  this.barElement.style.width = minRangeWidth + 'px';
2037
2052
  }
2038
- this.openDragBackdrop(this.barElement, this.item.start, this.item.start);
2039
- this.updateItemDate(this.item.start, this.item.start);
2053
+ this.openDragBackdrop(this.barElement, this.item().start, this.item().start);
2054
+ this.updateItemDate(this.item().start, this.item().start);
2040
2055
  }
2041
2056
  this.barHandleDragMoveRecordDiffs = diffs;
2042
- this.dragContainer.dragMoved.emit({ item: this.item.origin });
2057
+ this.dragContainer.dragMoved.emit({ item: this.item().origin });
2043
2058
  }
2044
2059
  calcLinkLinePositions(target, isBefore) {
2045
2060
  const rootRect = this.dom.root.getBoundingClientRect();
@@ -2096,33 +2111,33 @@ class GanttBarDrag {
2096
2111
  const xThreshold = clientWidth * DROP_PROXIMITY_THRESHOLD;
2097
2112
  if (isBefore) {
2098
2113
  const { start, minRangeWidthWidth } = this.startOfBarHandle();
2099
- const xPointerByEndDate = this.ganttUpper.view.getXPointByDate(this.item.end);
2100
- isStartGreaterThanEnd = start.value > this.item.end.value;
2114
+ const xPointerByEndDate = this.ganttUpper.view.getXPointByDate(this.item().end);
2115
+ isStartGreaterThanEnd = start.value > this.item().end.value;
2101
2116
  isBarAppearsInView = xPointerByEndDate + minRangeWidthWidth + xThreshold <= scrollLeft + clientWidth;
2102
2117
  }
2103
2118
  else {
2104
2119
  const { end } = this.endOfBarHandle();
2105
- const xPointerByStartDate = this.ganttUpper.view.getXPointByDate(this.item.start);
2106
- isStartGreaterThanEnd = end.value < this.item.start.value;
2120
+ const xPointerByStartDate = this.ganttUpper.view.getXPointByDate(this.item().start);
2121
+ isStartGreaterThanEnd = end.value < this.item().start.value;
2107
2122
  isBarAppearsInView = scrollLeft + xThreshold <= xPointerByStartDate;
2108
2123
  }
2109
2124
  return isStartGreaterThanEnd && isBarAppearsInView ? true : false;
2110
2125
  }
2111
2126
  // Some data information about dragging start until it is equal to or greater than end
2112
2127
  startOfBarHandle() {
2113
- const x = this.item.refs.x + this.barHandleDragMoveAndScrollDistance;
2128
+ const x = this.item().refs.x + this.barHandleDragMoveAndScrollDistance;
2114
2129
  return {
2115
2130
  x,
2116
2131
  start: this.ganttUpper.view.getDateByXPoint(x),
2117
- minRangeWidthWidth: this.ganttUpper.view.getMinRangeWidthByPrecisionUnit(this.item.end)
2132
+ minRangeWidthWidth: this.ganttUpper.view.getMinRangeWidthByPrecisionUnit(this.item().end)
2118
2133
  };
2119
2134
  }
2120
2135
  // Some data information about dragging end of bar handle
2121
2136
  endOfBarHandle() {
2122
- const width = this.item.refs.width + this.barHandleDragMoveAndScrollDistance;
2137
+ const width = this.item().refs.width + this.barHandleDragMoveAndScrollDistance;
2123
2138
  return {
2124
2139
  width,
2125
- end: this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width)
2140
+ end: this.ganttUpper.view.getDateByXPoint(this.item().refs.x + width)
2126
2141
  };
2127
2142
  }
2128
2143
  stopScrolling() {
@@ -2141,34 +2156,55 @@ class GanttBarDrag {
2141
2156
  }
2142
2157
  }
2143
2158
  updateItemDate(start, end) {
2144
- this.item.updateDate(this.ganttUpper.view.startOfPrecision(start), this.ganttUpper.view.endOfPrecision(end));
2159
+ this.item().updateDate(this.ganttUpper.view.startOfPrecision(start), this.ganttUpper.view.endOfPrecision(end));
2145
2160
  }
2146
- createDrags(elementRef, item, ganttUpper) {
2147
- this.item = item;
2161
+ initialize(elementRef, item, ganttUpper) {
2148
2162
  this.barElement = elementRef.nativeElement;
2149
2163
  this.ganttUpper = ganttUpper;
2150
- if (this.dragDisabled && this.linkDragDisabled) {
2151
- return;
2164
+ this.item.set(item);
2165
+ }
2166
+ createBarDragRef() {
2167
+ if (this.barDragRef) {
2168
+ this.barDragRef.disabled = this.dragDisabled;
2152
2169
  }
2153
- else {
2154
- this.createMouseEvents();
2155
- if (!this.dragDisabled) {
2156
- const dragRef = this.createBarDrag();
2157
- const dragHandlesRefs = this.createBarHandleDrags();
2158
- this.dragRefs.push(dragRef, ...dragHandlesRefs);
2159
- }
2160
- if (!this.linkDragDisabled) {
2161
- const linkDragRefs = this.createLinkHandleDrags();
2162
- this.dragRefs.push(...linkDragRefs);
2163
- }
2170
+ else if (!this.dragDisabled) {
2171
+ this.barDragRef = this.createBarDrag();
2164
2172
  }
2165
2173
  }
2174
+ createBarHandleDragRefs() {
2175
+ if (this.barHandleDragRefs.length > 0) {
2176
+ this.barHandleDragRefs.forEach((dragRef) => {
2177
+ dragRef.disabled = this.dragDisabled;
2178
+ });
2179
+ }
2180
+ else if (!this.dragDisabled) {
2181
+ this.barHandleDragRefs = this.createBarHandleDrags();
2182
+ }
2183
+ }
2184
+ createLinkDragRefs() {
2185
+ if (this.linkDragRefs.length > 0) {
2186
+ this.linkDragRefs.forEach((dragRef) => {
2187
+ dragRef.disabled = this.linkDragDisabled;
2188
+ });
2189
+ }
2190
+ else if (!this.linkDragDisabled) {
2191
+ this.linkDragRefs = this.createLinkHandleDrags();
2192
+ }
2193
+ }
2194
+ createDrags() {
2195
+ this.createMouseEvents();
2196
+ this.createBarDragRef();
2197
+ this.createBarHandleDragRefs();
2198
+ this.createLinkDragRefs();
2199
+ }
2166
2200
  updateItem(item) {
2167
- this.item = item;
2201
+ this.item.set(item);
2168
2202
  }
2169
2203
  ngOnDestroy() {
2170
2204
  this.closeDragBackdrop();
2171
- this.dragRefs.forEach((dragRef) => dragRef.dispose());
2205
+ this.barDragRef?.dispose();
2206
+ this.linkDragRefs?.forEach((dragRef) => dragRef.dispose());
2207
+ this.barHandleDragRefs?.forEach((dragRef) => dragRef.dispose());
2172
2208
  this.destroy$.next();
2173
2209
  this.destroy$.complete();
2174
2210
  this.stopScrolling();
@@ -2293,7 +2329,7 @@ class NgxGanttBarComponent extends GanttItemUpper {
2293
2329
  // using `zone-patch-rxjs` because it'll trigger a change detection when it unsubscribes.
2294
2330
  this.ngZone.runOutsideAngular(() => {
2295
2331
  onStable$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
2296
- this.drag.createDrags(this.elementRef, this.item, this.ganttUpper);
2332
+ this.drag.initialize(this.elementRef, this.item, this.ganttUpper);
2297
2333
  });
2298
2334
  });
2299
2335
  this.setContentBackground();
@@ -4296,7 +4332,7 @@ class NgxGanttComponent extends GanttUpper {
4296
4332
  provide: GANTT_ABSTRACT_TOKEN,
4297
4333
  useExisting: forwardRef(() => NgxGanttComponent)
4298
4334
  }
4299
- ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <gantt-scrollbar\n [ganttRoot]=\"ganttRoot\"\n [hasFooter]=\"!!table?.tableFooterTemplate\"\n [tableWidth]=\"tableHeader.tableWidth\"\n ></gantt-scrollbar>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate", "baselineTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "component", type: GanttScrollbarComponent, selector: "gantt-scrollbar", inputs: ["hasFooter", "tableWidth", "ganttRoot"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4335
+ ], queries: [{ propertyName: "table", first: true, predicate: NgxGanttTableComponent, descendants: true }, { propertyName: "tableEmptyTemplate", first: true, predicate: ["tableEmpty"], descendants: true, static: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true, static: true }, { propertyName: "columns", predicate: NgxGanttTableColumnComponent, descendants: true }], viewQueries: [{ propertyName: "ganttRoot", first: true, predicate: ["ganttRoot"], descendants: true }, { propertyName: "virtualScroll", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <gantt-scrollbar\n [ganttRoot]=\"ganttRoot\"\n [hasFooter]=\"!!table?.tableFooterTemplate\"\n [tableWidth]=\"tableHeader.tableWidth\"\n ></gantt-scrollbar>\n\n <div\n class=\"gantt-footer\"\n *ngIf=\"table?.tableFooterTemplate || footerTemplate\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n >\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n", dependencies: [{ kind: "component", type: NgxGanttRootComponent, selector: "ngx-gantt-root", inputs: ["sideWidth"] }, { kind: "component", type: GanttTableHeaderComponent, selector: "gantt-table-header", inputs: ["columns"] }, { kind: "component", type: GanttCalendarHeaderComponent, selector: "gantt-calendar-header" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttLoaderComponent, selector: "gantt-loader" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: GanttTableBodyComponent, selector: "gantt-table-body", inputs: ["viewportItems", "flatItems", "columns", "groupTemplate", "emptyTemplate", "rowBeforeTemplate", "rowAfterTemplate", "draggable", "dropEnterPredicate"], outputs: ["dragDropped", "dragStarted", "dragEnded", "itemClick"] }, { kind: "component", type: GanttCalendarGridComponent, selector: "gantt-calendar-grid" }, { kind: "component", type: GanttMainComponent, selector: "gantt-main", inputs: ["viewportItems", "flatItems", "groupHeaderTemplate", "itemTemplate", "barTemplate", "rangeTemplate", "baselineTemplate"], outputs: ["barClick", "lineClick"] }, { kind: "component", type: GanttDragBackdropComponent, selector: "gantt-drag-backdrop" }, { kind: "component", type: GanttScrollbarComponent, selector: "gantt-scrollbar", inputs: ["hasFooter", "tableWidth", "ganttRoot"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4300
4336
  }
4301
4337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxGanttComponent, decorators: [{
4302
4338
  type: Component,
@@ -4325,7 +4361,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
4325
4361
  GanttDragBackdropComponent,
4326
4362
  GanttScrollbarComponent,
4327
4363
  NgTemplateOutlet
4328
- ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <gantt-scrollbar\n [ganttRoot]=\"ganttRoot\"\n [hasFooter]=\"!!table?.tableFooterTemplate\"\n [tableWidth]=\"tableHeader.tableWidth\"\n ></gantt-scrollbar>\n\n <div class=\"gantt-footer\" [style.right.px]=\"ganttRoot.verticalScrollbarWidth\" [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n" }]
4364
+ ], template: "<ngx-gantt-root #ganttRoot>\n <div class=\"gantt-header\">\n <gantt-table-header #tableHeader [columns]=\"columns\"></gantt-table-header>\n <div class=\"gantt-container-header\">\n <gantt-calendar-header [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"></gantt-calendar-header>\n </div>\n </div>\n <gantt-loader *ngIf=\"loading\"></gantt-loader>\n\n <cdk-virtual-scroll-viewport\n class=\"gantt-virtual-scroll-viewport\"\n [ngClass]=\"{\n 'gantt-normal-viewport': !virtualScrollEnabled,\n 'gantt-scroll-container': virtualScrollEnabled,\n 'with-footer': table?.tableFooterTemplate || footerTemplate\n }\"\n [style.top.px]=\"styles.headerHeight\"\n [itemSize]=\"styles.lineHeight\"\n [minBufferPx]=\"styles.lineHeight * 10\"\n [maxBufferPx]=\"styles.lineHeight * 20\"\n (scrolledIndexChange)=\"scrolledIndexChange($event)\"\n >\n <ng-container *cdkVirtualFor=\"let item of flatItems; trackBy: trackBy\"></ng-container>\n <div class=\"gantt-side\" [style.width.px]=\"tableHeader.tableWidth + 1\" [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\">\n <div class=\"gantt-side-container\">\n <div class=\"gantt-table\">\n <gantt-table-body\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [columns]=\"columns\"\n [groupTemplate]=\"groupTemplate\"\n [emptyTemplate]=\"table.tableEmptyTemplate || tableEmptyTemplate\"\n [rowBeforeTemplate]=\"table?.rowBeforeTemplate\"\n [rowAfterTemplate]=\"table?.rowAfterTemplate\"\n [draggable]=\"table.draggable\"\n [dropEnterPredicate]=\"table.dropEnterPredicate\"\n (dragDropped)=\"table.dragDropped.emit($event)\"\n (dragStarted)=\"itemDragStarted($event)\"\n (dragEnded)=\"itemDragEnded($event)\"\n (itemClick)=\"selectItem($event)\"\n >\n </gantt-table-body>\n </div>\n </div>\n </div>\n <div class=\"gantt-container\">\n <gantt-calendar-grid\n [style.padding-right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.padding-bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n ></gantt-calendar-grid>\n <div class=\"gantt-main\">\n <gantt-main\n [flatItems]=\"flatItems\"\n [viewportItems]=\"viewportItems\"\n [groupHeaderTemplate]=\"groupHeaderTemplate\"\n [itemTemplate]=\"itemTemplate\"\n [barTemplate]=\"barTemplate\"\n [rangeTemplate]=\"rangeTemplate\"\n [baselineTemplate]=\"baselineTemplate\"\n (barClick)=\"barClick.emit($event)\"\n (lineClick)=\"lineClick.emit($event)\"\n >\n </gantt-main>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <gantt-drag-backdrop [style.left.px]=\"tableHeader.tableWidth + 1\"></gantt-drag-backdrop>\n\n <gantt-scrollbar\n [ganttRoot]=\"ganttRoot\"\n [hasFooter]=\"!!table?.tableFooterTemplate\"\n [tableWidth]=\"tableHeader.tableWidth\"\n ></gantt-scrollbar>\n\n <div\n class=\"gantt-footer\"\n *ngIf=\"table?.tableFooterTemplate || footerTemplate\"\n [style.right.px]=\"ganttRoot.verticalScrollbarWidth\"\n [style.bottom.px]=\"ganttRoot.horizontalScrollbarHeight\"\n >\n <div class=\"gantt-table-footer\" [style.width.px]=\"tableHeader.tableWidth + 1\" *ngIf=\"table?.tableFooterTemplate\">\n <ng-template [ngTemplateOutlet]=\"table?.tableFooterTemplate\" [ngTemplateOutletContext]=\"{ columns: columns }\"> </ng-template>\n </div>\n <div class=\"gantt-container-footer\" *ngIf=\"footerTemplate\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"> </ng-template>\n </div>\n </div>\n</ngx-gantt-root>\n" }]
4329
4365
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1$1.ViewportRuler }, { type: undefined, decorators: [{
4330
4366
  type: Inject,
4331
4367
  args: [GANTT_GLOBAL_CONFIG]