@progress/kendo-angular-gantt 16.5.0 → 16.6.0-develop.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/NOTICE.txt +12 -19
  2. package/binding-directives/flat-binding.directive.d.ts +1 -1
  3. package/binding-directives/hierarchy-binding.directive.d.ts +1 -1
  4. package/columns/cell-template.directive.d.ts +1 -1
  5. package/columns/column-group.component.d.ts +1 -1
  6. package/columns/column-menu-template.directive.d.ts +1 -1
  7. package/columns/column.component.d.ts +1 -1
  8. package/columns/edit-template.directive.d.ts +1 -1
  9. package/columns/filter-cell-template.directive.d.ts +1 -1
  10. package/columns/filter-menu-template.directive.d.ts +1 -1
  11. package/columns/footer-template.directive.d.ts +1 -1
  12. package/columns/header-template.directive.d.ts +1 -1
  13. package/columns/span-column.component.d.ts +1 -1
  14. package/dependencies/gantt-dependency.directive.d.ts +1 -1
  15. package/directives.d.ts +29 -0
  16. package/dragging/dependency-drag-create.directive.d.ts +1 -1
  17. package/dragging/drag-validation-tooltip.component.d.ts +1 -1
  18. package/editing/add-task.component.d.ts +1 -1
  19. package/editing/dependencies-table.component.d.ts +1 -1
  20. package/editing/edit-dialog.component.d.ts +1 -1
  21. package/editing/task-fields.component.d.ts +1 -1
  22. package/esm2020/binding-directives/flat-binding.directive.mjs +3 -2
  23. package/esm2020/binding-directives/hierarchy-binding.directive.mjs +3 -2
  24. package/esm2020/columns/cell-template.directive.mjs +3 -2
  25. package/esm2020/columns/column-group.component.mjs +3 -2
  26. package/esm2020/columns/column-menu-template.directive.mjs +3 -2
  27. package/esm2020/columns/column.component.mjs +3 -2
  28. package/esm2020/columns/edit-template.directive.mjs +3 -2
  29. package/esm2020/columns/filter-cell-template.directive.mjs +3 -2
  30. package/esm2020/columns/filter-menu-template.directive.mjs +3 -2
  31. package/esm2020/columns/footer-template.directive.mjs +3 -2
  32. package/esm2020/columns/header-template.directive.mjs +3 -2
  33. package/esm2020/columns/span-column.component.mjs +3 -2
  34. package/esm2020/dependencies/gantt-dependency.directive.mjs +3 -2
  35. package/esm2020/directives.mjs +57 -0
  36. package/esm2020/dragging/dependency-drag-create.directive.mjs +3 -2
  37. package/esm2020/dragging/drag-validation-tooltip.component.mjs +3 -2
  38. package/esm2020/editing/add-task.component.mjs +7 -5
  39. package/esm2020/editing/dependencies-table.component.mjs +9 -7
  40. package/esm2020/editing/edit-dialog.component.mjs +12 -10
  41. package/esm2020/editing/task-fields.component.mjs +12 -9
  42. package/esm2020/expanded-state/expandable.directive.mjs +3 -2
  43. package/esm2020/gantt.component.mjs +23 -16
  44. package/esm2020/gantt.module.mjs +90 -222
  45. package/esm2020/index.mjs +1 -0
  46. package/esm2020/localization/custom-messages.component.mjs +3 -2
  47. package/esm2020/localization/localized-messages.directive.mjs +3 -2
  48. package/esm2020/package-metadata.mjs +2 -2
  49. package/esm2020/rendering/gantt-header-table-body.component.mjs +6 -4
  50. package/esm2020/rendering/gantt-milestone-task.component.mjs +12 -13
  51. package/esm2020/rendering/gantt-summary-task.component.mjs +12 -13
  52. package/esm2020/rendering/gantt-task.component.mjs +14 -15
  53. package/esm2020/rendering/gantt-tasks-table-body.component.mjs +9 -7
  54. package/esm2020/scrolling/timeline-scroll.directive.mjs +3 -2
  55. package/esm2020/selection/selectable.directive.mjs +3 -2
  56. package/esm2020/template-directives/summary-task-template.directive.mjs +3 -2
  57. package/esm2020/template-directives/task-content-template.directive.mjs +3 -2
  58. package/esm2020/template-directives/task-template.directive.mjs +3 -2
  59. package/esm2020/timeline/gantt-timeline.component.mjs +12 -10
  60. package/esm2020/timeline/timeline-day-view.component.mjs +3 -2
  61. package/esm2020/timeline/timeline-month-view.component.mjs +3 -2
  62. package/esm2020/timeline/timeline-week-view.component.mjs +3 -2
  63. package/esm2020/timeline/timeline-year-view.component.mjs +3 -2
  64. package/esm2020/toolbar/toolbar-template.directive.mjs +3 -2
  65. package/esm2020/toolbar/toolbar.component.mjs +8 -6
  66. package/esm2020/toolbar/view-selector.component.mjs +9 -6
  67. package/expanded-state/expandable.directive.d.ts +1 -1
  68. package/fesm2015/progress-kendo-angular-gantt.mjs +1812 -1867
  69. package/fesm2020/progress-kendo-angular-gantt.mjs +1963 -2012
  70. package/gantt.component.d.ts +1 -1
  71. package/gantt.module.d.ts +25 -54
  72. package/index.d.ts +1 -0
  73. package/localization/custom-messages.component.d.ts +1 -1
  74. package/localization/localized-messages.directive.d.ts +1 -1
  75. package/package.json +15 -15
  76. package/rendering/gantt-header-table-body.component.d.ts +1 -1
  77. package/rendering/gantt-milestone-task.component.d.ts +3 -3
  78. package/rendering/gantt-summary-task.component.d.ts +3 -3
  79. package/rendering/gantt-task.component.d.ts +3 -3
  80. package/rendering/gantt-tasks-table-body.component.d.ts +1 -1
  81. package/schematics/ngAdd/index.js +7 -7
  82. package/scrolling/timeline-scroll.directive.d.ts +1 -1
  83. package/selection/selectable.directive.d.ts +1 -1
  84. package/template-directives/summary-task-template.directive.d.ts +1 -1
  85. package/template-directives/task-content-template.directive.d.ts +1 -1
  86. package/template-directives/task-template.directive.d.ts +1 -1
  87. package/timeline/gantt-timeline.component.d.ts +1 -1
  88. package/timeline/timeline-day-view.component.d.ts +1 -1
  89. package/timeline/timeline-month-view.component.d.ts +1 -1
  90. package/timeline/timeline-week-view.component.d.ts +1 -1
  91. package/timeline/timeline-year-view.component.d.ts +1 -1
  92. package/toolbar/toolbar-template.directive.d.ts +1 -1
  93. package/toolbar/toolbar.component.d.ts +1 -1
  94. package/toolbar/view-selector.component.d.ts +1 -1
  95. package/common/touch-enabled.d.ts +0 -9
  96. package/esm2020/common/touch-enabled.mjs +0 -9
@@ -3,47 +3,35 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { Injectable, InjectionToken, EventEmitter, Inject, LOCALE_ID, Directive, HostBinding, ViewChild, Input, forwardRef, Component, ViewContainerRef, Output, Optional, QueryList, SkipSelf, Host, ContentChildren, ContentChild, HostListener, isDevMode, NgModule } from '@angular/core';
7
- import * as i14 from '@progress/kendo-angular-treelist';
8
- import { ColumnBase, ColumnComponent, ColumnGroupComponent, SpanColumnComponent, DataBoundTreeComponent, ExpandableTreeComponent, TreeListComponent, FlatBindingDirective, HierarchyBindingDirective, ExpandableDirective, TreeListModule } from '@progress/kendo-angular-treelist';
6
+ import { Injectable, Directive, Input, EventEmitter, Inject, LOCALE_ID, HostBinding, ViewChild, forwardRef, Component, ViewContainerRef, Output, Optional, QueryList, SkipSelf, Host, ContentChildren, ContentChild, HostListener, isDevMode, NgModule } from '@angular/core';
7
+ import { TableDirective, ColumnBase, ColumnComponent, ColumnGroupComponent, SpanColumnComponent, TreeListSpacerComponent, DataBoundTreeComponent, ExpandableTreeComponent, TreeListComponent, CustomMessagesComponent as CustomMessagesComponent$2, FlatBindingDirective, HierarchyBindingDirective, ExpandableDirective, ColumnResizingService } from '@progress/kendo-angular-treelist';
9
8
  import { cloneDate, addWeeks, firstDayInWeek, addDays, lastDayOfMonth, getDate, firstDayOfMonth, addMonths, lastMonthOfYear, MS_PER_HOUR, MS_PER_DAY, isEqual } from '@progress/kendo-date-math';
10
9
  import { Subject, Subscription, fromEvent, forkJoin, EMPTY, isObservable, of } from 'rxjs';
11
10
  import { validatePackage } from '@progress/kendo-licensing';
12
- import * as i11 from '@progress/kendo-angular-common';
13
- import { Keys, isDocumentAvailable, closestInScope, matchesClasses, PreventableEvent, anyChanged, closest, isFocusable, focusableSelector, isVisible, shouldShowValidationUI, hasObservers, EventsModule, DraggableModule, WatermarkModule } from '@progress/kendo-angular-common';
14
- import { map, distinctUntilChanged, take, expand, reduce, switchMap, filter } from 'rxjs/operators';
11
+ import { Keys, isDocumentAvailable, closestInScope, matchesClasses, EventsOutsideAngularDirective, DraggableDirective, PreventableEvent, anyChanged, closest, isFocusable, focusableSelector, isVisible, shouldShowValidationUI, hasObservers, WatermarkOverlayComponent, ResizeBatchService } from '@progress/kendo-angular-common';
12
+ import { map, distinctUntilChanged, take, switchMap, expand, reduce, filter } from 'rxjs/operators';
15
13
  import { getter, touchEnabled } from '@progress/kendo-common';
16
- import * as i6 from '@angular/common';
17
- import { CommonModule } from '@angular/common';
18
14
  import * as i1 from '@progress/kendo-angular-intl';
19
- import { IntlService, IntlModule } from '@progress/kendo-angular-intl';
15
+ import { IntlService } from '@progress/kendo-angular-intl';
20
16
  import { __decorate, __param, __metadata } from 'tslib';
21
17
  import { orderBy } from '@progress/kendo-data-query';
22
18
  import { xIcon, plusIcon, minusIcon, saveIcon, cancelOutlineIcon, trashIcon } from '@progress/kendo-svg-icons';
23
- import * as i9 from '@progress/kendo-angular-icons';
24
- import { IconsModule } from '@progress/kendo-angular-icons';
19
+ import { NgClass, NgIf, NgTemplateOutlet, NgFor } from '@angular/common';
20
+ import { IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';
25
21
  import * as i1$1 from '@progress/kendo-angular-l10n';
26
22
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
27
- import * as i4 from '@progress/kendo-angular-buttons';
28
- import { ButtonsModule } from '@progress/kendo-angular-buttons';
29
- import * as i8$1 from '@progress/kendo-angular-layout';
30
- import { SplitterModule, TabStripModule } from '@progress/kendo-angular-layout';
31
- import * as i7$2 from '@progress/kendo-angular-dialog';
32
- import { DialogModule } from '@progress/kendo-angular-dialog';
33
- import * as i5 from '@angular/forms';
23
+ import * as i4 from '@angular/forms';
34
24
  import { FormArray, FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';
35
- import * as i6$1 from '@progress/kendo-angular-grid';
36
- import { GridModule } from '@progress/kendo-angular-grid';
37
- import * as i7 from '@progress/kendo-angular-dropdowns';
38
- import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
39
- import * as i6$2 from '@progress/kendo-angular-label';
40
- import { LabelModule } from '@progress/kendo-angular-label';
41
- import * as i7$1 from '@progress/kendo-angular-inputs';
42
- import { InputsModule } from '@progress/kendo-angular-inputs';
43
- import * as i8 from '@progress/kendo-angular-dateinputs';
44
- import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
25
+ import { GridComponent, SelectionDirective, ToolbarTemplateDirective as ToolbarTemplateDirective$1, ColumnComponent as ColumnComponent$1, CellTemplateDirective as CellTemplateDirective$1 } from '@progress/kendo-angular-grid';
26
+ import { ButtonComponent, ButtonGroupComponent, DropDownButtonComponent } from '@progress/kendo-angular-buttons';
27
+ import { DropDownListComponent } from '@progress/kendo-angular-dropdowns';
28
+ import { FormFieldComponent, TextBoxDirective, NumericTextBoxComponent } from '@progress/kendo-angular-inputs';
29
+ import { LabelComponent } from '@progress/kendo-angular-label';
30
+ import { DateTimePickerComponent, CalendarDOMService, CenturyViewService, DecadeViewService, MonthViewService, YearViewService, WeekNamesService, NavigationService as NavigationService$1, TimePickerDOMService, HoursService, MinutesService, SecondsService, MillisecondsService, DayPeriodService } from '@progress/kendo-angular-dateinputs';
31
+ import { DialogComponent, CustomMessagesComponent as CustomMessagesComponent$1, DialogActionsComponent, DialogContainerService, DialogService, WindowService, WindowContainerService } from '@progress/kendo-angular-dialog';
32
+ import { TabStripComponent, TabStripTabComponent, TabContentDirective, SplitterComponent, SplitterPaneComponent } from '@progress/kendo-angular-layout';
45
33
  import * as i3 from '@progress/kendo-angular-popup';
46
- import { PopupModule } from '@progress/kendo-angular-popup';
34
+ import { PopupService } from '@progress/kendo-angular-popup';
47
35
 
48
36
  /**
49
37
  * @hidden
@@ -52,8 +40,8 @@ const packageMetadata = {
52
40
  name: '@progress/kendo-angular-gantt',
53
41
  productName: 'Kendo UI for Angular',
54
42
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
55
- publishDate: 1721814434,
56
- version: '16.5.0',
43
+ publishDate: 1722607229,
44
+ version: '16.6.0-develop.10',
57
45
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
58
46
  };
59
47
 
@@ -732,6 +720,268 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
732
720
  type: Injectable
733
721
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; } });
734
722
 
723
+ /**
724
+ * @hidden
725
+ *
726
+ * Gets the offset (top and left values) relative to a target element.
727
+ */
728
+ const getOffsetRelativeToParent = (element, targetParent) => {
729
+ const offset = {
730
+ top: 0,
731
+ left: 0
732
+ };
733
+ if (!targetParent.contains(element)) {
734
+ return offset;
735
+ }
736
+ let offsetParent = element;
737
+ while (offsetParent && offsetParent !== targetParent) {
738
+ offset.top += offsetParent.offsetTop;
739
+ offset.left += offsetParent.offsetLeft;
740
+ offsetParent = offsetParent.offsetParent;
741
+ }
742
+ return offset;
743
+ };
744
+ /**
745
+ * @hidden
746
+ */
747
+ const getElementRect = (element, relativeContainer) => {
748
+ const { top, left } = getOffsetRelativeToParent(element, relativeContainer);
749
+ return {
750
+ top: top + element.offsetHeight / 2,
751
+ left: left,
752
+ right: left + element.offsetWidth
753
+ };
754
+ };
755
+ /**
756
+ * @hidden
757
+ */
758
+ const dependencyCoordinates = (from, to, rowHeight, type, minDistanceBeforeTurn, arrowSize) => {
759
+ const points = [];
760
+ const minTurnHeight = Math.floor(rowHeight / 2);
761
+ const drawingDown = from.top < to.top;
762
+ let top, left;
763
+ // FF and SS are composed of 4 connected polyline points (not counting the arrow)
764
+ /*
765
+ [[[]]]- -[[[]]]
766
+ | |
767
+ [[[]]]- -[[[]]]
768
+ */
769
+ if (type === DependencyType.FF || type === DependencyType.SS) {
770
+ // polyline start from first task
771
+ const dir = type === DependencyType.SS ? 'left' : 'right';
772
+ top = from.top;
773
+ left = from[dir];
774
+ points.push({ top, left });
775
+ // first turn point
776
+ left = Math[dir === 'left' ? 'min' : 'max'](from[dir], to[dir]);
777
+ left = dir === 'left' ? left - minDistanceBeforeTurn : left + minDistanceBeforeTurn;
778
+ points.push({ top, left });
779
+ // second turn point
780
+ top = to.top;
781
+ points.push({ top, left });
782
+ // second task reached
783
+ left = dir === 'left' ? to[dir] - arrowSize : to[dir] + arrowSize;
784
+ points.push({ top, left });
785
+ // arrow pointing to the second task
786
+ points.push(...getArrow(top, left, dir !== 'left', arrowSize));
787
+ }
788
+ else {
789
+ // FS and SF are composed of 4 or 6 connected polyline points (not counting the arrow), depending on the position of the tasks
790
+ /*
791
+ [[[]]]- [[[]]]-
792
+ | |
793
+ -[[[]]] -----
794
+ |
795
+ -[[[]]]
796
+ */
797
+ const startDir = type === DependencyType.SF ? 'left' : 'right';
798
+ const endDir = type === DependencyType.SF ? 'right' : 'left';
799
+ const additionalTurn = type === DependencyType.SF
800
+ ? from[startDir] - minDistanceBeforeTurn * 2 < to[endDir]
801
+ : from[startDir] + minDistanceBeforeTurn * 2 > to[endDir];
802
+ // polyline start from first task
803
+ top = from.top;
804
+ left = from[startDir];
805
+ points.push({ top, left });
806
+ // first turn point
807
+ left = startDir === 'left'
808
+ ? left - minDistanceBeforeTurn
809
+ : left + minDistanceBeforeTurn;
810
+ points.push({ top, left });
811
+ // if second task start is before the first task end in FS
812
+ // if second task end is after the first task start in SF
813
+ if (additionalTurn) {
814
+ // additional turn start
815
+ top = drawingDown
816
+ ? top + minTurnHeight
817
+ : top - minTurnHeight;
818
+ points.push({ top, left });
819
+ // additional turn end
820
+ left = startDir === 'left'
821
+ ? to[endDir] + minDistanceBeforeTurn
822
+ : to[endDir] - minDistanceBeforeTurn;
823
+ points.push({ top, left });
824
+ }
825
+ // second task level reached
826
+ top = to.top;
827
+ points.push({ top, left });
828
+ // second task element reached
829
+ left = endDir === 'left' ? to[endDir] - arrowSize : to[endDir] + arrowSize;
830
+ points.push({ top, left });
831
+ // arrow pointing to the second task
832
+ points.push(...getArrow(top, left, endDir !== 'left', arrowSize));
833
+ }
834
+ return points;
835
+ };
836
+ const getArrow = (top, left, isArrowWest, arrowSize) => {
837
+ const points = isArrowWest
838
+ ? getArrowWest(top, left, arrowSize)
839
+ : getArrowEast(top, left, arrowSize);
840
+ return points;
841
+ };
842
+ const getArrowWest = (top, left, arrowSize) => {
843
+ const points = [];
844
+ points.push({
845
+ top: top - arrowSize / 2,
846
+ left
847
+ });
848
+ points.push({
849
+ top,
850
+ left: left - arrowSize + 1
851
+ });
852
+ points.push({
853
+ top: top + arrowSize / 2,
854
+ left
855
+ });
856
+ points.push({
857
+ top,
858
+ left
859
+ });
860
+ return points;
861
+ };
862
+ const getArrowEast = (top, left, arrowSize) => {
863
+ const points = [];
864
+ points.push({
865
+ top: top + arrowSize / 2,
866
+ left
867
+ });
868
+ points.push({
869
+ top,
870
+ left: left + arrowSize - 1
871
+ });
872
+ points.push({
873
+ top: top - arrowSize / 2,
874
+ left
875
+ });
876
+ points.push({
877
+ top,
878
+ left
879
+ });
880
+ return points;
881
+ };
882
+ /**
883
+ * @hidden
884
+ *
885
+ * Translates the provided client `left` and `top` coords to coords relative to the provided container.
886
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/CSSOM_View/Coordinate_systems#standard_cssom_coordinate_systems
887
+ */
888
+ const clientToOffsetCoords = (clientLeft, clientTop, offsetContainer) => {
889
+ // client (viewport) coordinates of the target container
890
+ // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#value
891
+ const offsetContainerClientRect = offsetContainer.getBoundingClientRect();
892
+ return {
893
+ left: clientLeft - offsetContainerClientRect.left + offsetContainer.scrollLeft,
894
+ top: clientTop - offsetContainerClientRect.top + offsetContainer.scrollTop
895
+ };
896
+ };
897
+ /**
898
+ * @hidden
899
+ *
900
+ * Retrieves the `left` and `top` values of the center of the provided element.
901
+ * The retrieved values are relative to the current viewport (client values).
902
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/CSSOM_View/Coordinate_systems#standard_cssom_coordinate_systems
903
+ */
904
+ const getElementClientCenterCoords = (element) => {
905
+ // client (viewport) coordinates of the targeted element
906
+ // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#value
907
+ const { left, top, width, height } = element.getBoundingClientRect();
908
+ return {
909
+ left: left + (width / 2),
910
+ top: top + (height / 2)
911
+ };
912
+ };
913
+
914
+ /**
915
+ * Defines the size of the arrow that will be drawn at the end of each Gantt dependency.
916
+ */
917
+ const ARROW_SIZE = 4;
918
+ /**
919
+ * Defines the distance the polyline will cover from the task element before making a turn.
920
+ */
921
+ const MIN_DISTANCE_BEFORE_TURN = 10;
922
+ /**
923
+ * @hidden
924
+ */
925
+ class GanttDependencyDirective {
926
+ constructor(polyline, zone, renderer, mapper, dependencyDomService) {
927
+ this.polyline = polyline;
928
+ this.zone = zone;
929
+ this.renderer = renderer;
930
+ this.mapper = mapper;
931
+ this.dependencyDomService = dependencyDomService;
932
+ this.subscriptions = new Subscription();
933
+ this.subscriptions.add(dependencyDomService.taskChanges
934
+ .pipe(switchMap(changes =>
935
+ // reacts only on the very last event emission,
936
+ // ensures that the tasks are drawn in the DOM
937
+ this.zone.onStable.pipe(take(1), map(() => changes))))
938
+ .subscribe(changes => this.updatePoints(changes)));
939
+ }
940
+ ngOnDestroy() {
941
+ this.subscriptions.unsubscribe();
942
+ }
943
+ ngOnChanges(changes) {
944
+ if (isPresent(changes['dependency'])) {
945
+ this.updatePoints(this.dependencyDomService.dependencyDomArgs);
946
+ }
947
+ }
948
+ updatePoints({ timelineRow, contentContainer, tasks }) {
949
+ if (!isPresent(timelineRow) || !isPresent(contentContainer) ||
950
+ !isPresent(tasks) || tasks.size === 0 ||
951
+ !tasks.has(this.mapper.extractFromDependency(this.dependency, 'fromId')) || !tasks.has(this.mapper.extractFromDependency(this.dependency, 'toId'))) {
952
+ this.clearPoints();
953
+ return;
954
+ }
955
+ const fromCoordinates = getElementRect(tasks.get(this.mapper.extractFromDependency(this.dependency, 'fromId')), contentContainer);
956
+ const toCoordinates = getElementRect(tasks.get(this.mapper.extractFromDependency(this.dependency, 'toId')), contentContainer);
957
+ const timelineRowHeight = isDocumentAvailable() ? timelineRow.getBoundingClientRect().height : 0;
958
+ const points = dependencyCoordinates(fromCoordinates, toCoordinates, timelineRowHeight, this.dependency.type, MIN_DISTANCE_BEFORE_TURN, ARROW_SIZE);
959
+ this.drawPoints(points);
960
+ }
961
+ clearPoints() {
962
+ this.renderer.setAttribute(this.polyline.nativeElement, 'points', '');
963
+ }
964
+ drawPoints(points) {
965
+ if (!isPresent(points) || points.length === 0) {
966
+ this.clearPoints();
967
+ return;
968
+ }
969
+ const parsedCoords = points.map(({ left, top }) => `${left},${top}`).join(' ');
970
+ this.renderer.setAttribute(this.polyline.nativeElement, 'points', parsedCoords);
971
+ }
972
+ }
973
+ GanttDependencyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttDependencyDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: MappingService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Directive });
974
+ GanttDependencyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttDependencyDirective, isStandalone: true, selector: "[kendoGanttDependency]", inputs: { dependency: "dependency" }, usesOnChanges: true, ngImport: i0 });
975
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttDependencyDirective, decorators: [{
976
+ type: Directive,
977
+ args: [{
978
+ selector: '[kendoGanttDependency]',
979
+ standalone: true
980
+ }]
981
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: MappingService }, { type: DependencyDomService }]; }, propDecorators: { dependency: [{
982
+ type: Input
983
+ }] } });
984
+
735
985
  /**
736
986
  * @hidden
737
987
  */
@@ -1091,11 +1341,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1091
1341
  type: Injectable
1092
1342
  }], ctorParameters: function () { return [{ type: MappingService }]; } });
1093
1343
 
1094
- /**
1095
- * @hidden
1096
- */
1097
- const TOUCH_ENABLED = new InjectionToken('gantt-touch-enabled');
1098
-
1099
1344
  /**
1100
1345
  * @hidden
1101
1346
  */
@@ -1734,19 +1979,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1734
1979
  * @hidden
1735
1980
  */
1736
1981
  class GanttTaskComponent extends GanttTaskBase {
1737
- constructor(editService, touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
1982
+ constructor(editService, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
1738
1983
  super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
1739
1984
  this.editService = editService;
1740
- this.touchEnabled = touchEnabled;
1741
1985
  this.xIcon = xIcon;
1986
+ this.touchEnabled = touchEnabled;
1742
1987
  }
1743
1988
  onTaskDelete() {
1744
1989
  this.editService.dataItem = this.dataItem;
1745
1990
  this.editService.taskDelete.next(this.dataItem);
1746
1991
  }
1747
1992
  }
1748
- GanttTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskComponent, deps: [{ token: EditService }, { token: TOUCH_ENABLED }, { token: MappingService }, { token: TimelineViewService }, { token: DependencyDomService }, { token: OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
1749
- GanttTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskComponent, selector: "kendo-gantt-task", inputs: { taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate" }, providers: [
1993
+ GanttTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskComponent, deps: [{ token: EditService }, { token: MappingService }, { token: TimelineViewService }, { token: DependencyDomService }, { token: OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
1994
+ GanttTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskComponent, isStandalone: true, selector: "kendo-gantt-task", inputs: { taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate" }, providers: [
1750
1995
  {
1751
1996
  provide: GanttTaskBase,
1752
1997
  useExisting: forwardRef(() => GanttTaskComponent)
@@ -1822,7 +2067,7 @@ GanttTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
1822
2067
  >
1823
2068
  </div>
1824
2069
  </ng-container>
1825
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i11.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
2070
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
1826
2071
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskComponent, decorators: [{
1827
2072
  type: Component,
1828
2073
  args: [{
@@ -1876,147 +2121,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1876
2121
  [scope]="this"
1877
2122
  >
1878
2123
  <kendo-icon-wrapper
1879
- icon="x"
1880
- [svgIcon]="xIcon"></kendo-icon-wrapper>
1881
- </span>
1882
- </span>
1883
- </div>
1884
- </ng-container>
1885
- <ng-template
1886
- *ngIf="taskTemplate"
1887
- [ngTemplateOutlet]="taskTemplate"
1888
- [ngTemplateOutletContext]="{
1889
- $implicit: dataItem,
1890
- elementWidth: taskWidth
1891
- }"
1892
- >
1893
- </ng-template>
1894
- </div>
1895
- <ng-container *ngIf="renderDependencyDragClues">
1896
- <div
1897
- class="k-task-dot k-task-start k-touch-action-none"
1898
- [class.k-display-block]="touchEnabled"
1899
- >
1900
- </div>
1901
- <div
1902
- class="k-task-dot k-task-end k-touch-action-none"
1903
- [class.k-display-block]="touchEnabled"
1904
- >
1905
- </div>
1906
- </ng-container>
1907
- `
1908
- }]
1909
- }], ctorParameters: function () { return [{ type: EditService }, { type: undefined, decorators: [{
1910
- type: Inject,
1911
- args: [TOUCH_ENABLED]
1912
- }] }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { taskContentTemplate: [{
1913
- type: Input
1914
- }], taskTemplate: [{
1915
- type: Input
1916
- }] } });
1917
-
1918
- /**
1919
- * @hidden
1920
- */
1921
- class GanttSummaryTaskComponent extends GanttTaskBase {
1922
- constructor(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
1923
- super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
1924
- this.touchEnabled = touchEnabled;
1925
- this.summaryWrapperClass = true;
1926
- }
1927
- get ariaExpanded() {
1928
- // if no callback is provided, all child items are displayed and the item is regarded as expanded
1929
- // replicates the TreeList aria-expanded behavior
1930
- const isExpanded = !isPresent(this.isExpanded) || this.isExpanded(this.dataItem);
1931
- return String(isExpanded);
1932
- }
1933
- }
1934
- GanttSummaryTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskComponent, deps: [{ token: TOUCH_ENABLED }, { token: MappingService }, { token: TimelineViewService }, { token: DependencyDomService }, { token: OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
1935
- GanttSummaryTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttSummaryTaskComponent, selector: "kendo-gantt-summary-task", inputs: { template: "template", isExpanded: "isExpanded" }, host: { properties: { "class.k-summary-wrap": "this.summaryWrapperClass" } }, providers: [
1936
- {
1937
- provide: GanttTaskBase,
1938
- useExisting: forwardRef(() => GanttSummaryTaskComponent)
1939
- }
1940
- ], usesInheritance: true, ngImport: i0, template: `
1941
- <div
1942
- #task
1943
- role="treeitem"
1944
- class="k-task k-task-summary"
1945
- [ngClass]="taskClass(dataItem)"
1946
- [style.width.px]="taskWidth"
1947
- [attr.title]="mapper.extractFromTask(dataItem, 'title')"
1948
- [class.k-selected]="isSelected(dataItem)"
1949
- [attr.aria-selected]="ariaSelected"
1950
- [attr.aria-expanded]="ariaExpanded"
1951
- [attr.aria-level]="level + 1"
1952
- >
1953
- <div *ngIf="!template; else summaryTemplate"
1954
- class="k-task-summary-progress"
1955
- [style.width.px]="taskWidth">
1956
- <div
1957
- class="k-task-summary-complete"
1958
- [style.width.px]="completionOverlayWidth"
1959
- >
1960
- </div>
1961
- </div>
1962
- <ng-template
1963
- #summaryTemplate
1964
- [ngTemplateOutlet]="template"
1965
- [ngTemplateOutletContext]="{
1966
- $implicit: dataItem,
1967
- elementWidth: taskWidth
1968
- }"
1969
- >
1970
- </ng-template>
1971
- </div>
1972
- <ng-container *ngIf="renderDependencyDragClues">
1973
- <div
1974
- class="k-task-dot k-task-start k-touch-action-none"
1975
- [class.k-display-block]="touchEnabled"
1976
- >
1977
- </div>
1978
- <div
1979
- class="k-task-dot k-task-end k-touch-action-none"
1980
- [class.k-display-block]="touchEnabled"
1981
- >
1982
- </div>
1983
- </ng-container>
1984
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
1985
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskComponent, decorators: [{
1986
- type: Component,
1987
- args: [{
1988
- selector: 'kendo-gantt-summary-task',
1989
- providers: [
1990
- {
1991
- provide: GanttTaskBase,
1992
- useExisting: forwardRef(() => GanttSummaryTaskComponent)
1993
- }
1994
- ],
1995
- template: `
1996
- <div
1997
- #task
1998
- role="treeitem"
1999
- class="k-task k-task-summary"
2000
- [ngClass]="taskClass(dataItem)"
2001
- [style.width.px]="taskWidth"
2002
- [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2003
- [class.k-selected]="isSelected(dataItem)"
2004
- [attr.aria-selected]="ariaSelected"
2005
- [attr.aria-expanded]="ariaExpanded"
2006
- [attr.aria-level]="level + 1"
2007
- >
2008
- <div *ngIf="!template; else summaryTemplate"
2009
- class="k-task-summary-progress"
2010
- [style.width.px]="taskWidth">
2011
- <div
2012
- class="k-task-summary-complete"
2013
- [style.width.px]="completionOverlayWidth"
2014
- >
2124
+ icon="x"
2125
+ [svgIcon]="xIcon"></kendo-icon-wrapper>
2126
+ </span>
2127
+ </span>
2015
2128
  </div>
2016
- </div>
2129
+ </ng-container>
2017
2130
  <ng-template
2018
- #summaryTemplate
2019
- [ngTemplateOutlet]="template"
2131
+ *ngIf="taskTemplate"
2132
+ [ngTemplateOutlet]="taskTemplate"
2020
2133
  [ngTemplateOutletContext]="{
2021
2134
  $implicit: dataItem,
2022
2135
  elementWidth: taskWidth
@@ -2036,47 +2149,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2036
2149
  >
2037
2150
  </div>
2038
2151
  </ng-container>
2039
- `
2152
+ `,
2153
+ standalone: true,
2154
+ imports: [NgClass, NgIf, NgTemplateOutlet, EventsOutsideAngularDirective, IconWrapperComponent]
2040
2155
  }]
2041
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
2042
- type: Inject,
2043
- args: [TOUCH_ENABLED]
2044
- }] }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { summaryWrapperClass: [{
2045
- type: HostBinding,
2046
- args: ['class.k-summary-wrap']
2047
- }], template: [{
2156
+ }], ctorParameters: function () { return [{ type: EditService }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { taskContentTemplate: [{
2048
2157
  type: Input
2049
- }], isExpanded: [{
2158
+ }], taskTemplate: [{
2050
2159
  type: Input
2051
2160
  }] } });
2052
2161
 
2053
2162
  /**
2054
2163
  * @hidden
2055
2164
  */
2056
- class GanttMilestoneTaskComponent extends GanttTaskBase {
2057
- constructor(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
2165
+ class GanttSummaryTaskComponent extends GanttTaskBase {
2166
+ constructor(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
2058
2167
  super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
2168
+ this.summaryWrapperClass = true;
2059
2169
  this.touchEnabled = touchEnabled;
2060
- this.milestoneWrapperClass = true;
2170
+ }
2171
+ get ariaExpanded() {
2172
+ // if no callback is provided, all child items are displayed and the item is regarded as expanded
2173
+ // replicates the TreeList aria-expanded behavior
2174
+ const isExpanded = !isPresent(this.isExpanded) || this.isExpanded(this.dataItem);
2175
+ return String(isExpanded);
2061
2176
  }
2062
2177
  }
2063
- GanttMilestoneTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttMilestoneTaskComponent, deps: [{ token: TOUCH_ENABLED }, { token: MappingService }, { token: TimelineViewService }, { token: DependencyDomService }, { token: OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
2064
- GanttMilestoneTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttMilestoneTaskComponent, selector: "kendo-gantt-milestone-task", host: { properties: { "class.k-milestone-wrap": "this.milestoneWrapperClass" } }, providers: [
2178
+ GanttSummaryTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskComponent, deps: [{ token: MappingService }, { token: TimelineViewService }, { token: DependencyDomService }, { token: OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
2179
+ GanttSummaryTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttSummaryTaskComponent, isStandalone: true, selector: "kendo-gantt-summary-task", inputs: { template: "template", isExpanded: "isExpanded" }, host: { properties: { "class.k-summary-wrap": "this.summaryWrapperClass" } }, providers: [
2065
2180
  {
2066
2181
  provide: GanttTaskBase,
2067
- useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2182
+ useExisting: forwardRef(() => GanttSummaryTaskComponent)
2068
2183
  }
2069
2184
  ], usesInheritance: true, ngImport: i0, template: `
2070
2185
  <div
2071
2186
  #task
2072
2187
  role="treeitem"
2073
- class="k-task k-task-milestone"
2188
+ class="k-task k-task-summary"
2074
2189
  [ngClass]="taskClass(dataItem)"
2190
+ [style.width.px]="taskWidth"
2075
2191
  [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2076
2192
  [class.k-selected]="isSelected(dataItem)"
2077
2193
  [attr.aria-selected]="ariaSelected"
2194
+ [attr.aria-expanded]="ariaExpanded"
2078
2195
  [attr.aria-level]="level + 1"
2079
2196
  >
2197
+ <div *ngIf="!template; else summaryTemplate"
2198
+ class="k-task-summary-progress"
2199
+ [style.width.px]="taskWidth">
2200
+ <div
2201
+ class="k-task-summary-complete"
2202
+ [style.width.px]="completionOverlayWidth"
2203
+ >
2204
+ </div>
2205
+ </div>
2206
+ <ng-template
2207
+ #summaryTemplate
2208
+ [ngTemplateOutlet]="template"
2209
+ [ngTemplateOutletContext]="{
2210
+ $implicit: dataItem,
2211
+ elementWidth: taskWidth
2212
+ }"
2213
+ >
2214
+ </ng-template>
2080
2215
  </div>
2081
2216
  <ng-container *ngIf="renderDependencyDragClues">
2082
2217
  <div
@@ -2090,498 +2225,304 @@ GanttMilestoneTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2090
2225
  >
2091
2226
  </div>
2092
2227
  </ng-container>
2093
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2094
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttMilestoneTaskComponent, decorators: [{
2228
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
2229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskComponent, decorators: [{
2095
2230
  type: Component,
2096
2231
  args: [{
2097
- selector: 'kendo-gantt-milestone-task',
2232
+ selector: 'kendo-gantt-summary-task',
2098
2233
  providers: [
2099
2234
  {
2100
2235
  provide: GanttTaskBase,
2101
- useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2236
+ useExisting: forwardRef(() => GanttSummaryTaskComponent)
2102
2237
  }
2103
2238
  ],
2104
2239
  template: `
2105
2240
  <div
2106
2241
  #task
2107
2242
  role="treeitem"
2108
- class="k-task k-task-milestone"
2243
+ class="k-task k-task-summary"
2109
2244
  [ngClass]="taskClass(dataItem)"
2245
+ [style.width.px]="taskWidth"
2110
2246
  [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2111
2247
  [class.k-selected]="isSelected(dataItem)"
2112
2248
  [attr.aria-selected]="ariaSelected"
2249
+ [attr.aria-expanded]="ariaExpanded"
2113
2250
  [attr.aria-level]="level + 1"
2114
2251
  >
2115
- </div>
2116
- <ng-container *ngIf="renderDependencyDragClues">
2117
- <div
2118
- class="k-task-dot k-task-start k-touch-action-none"
2119
- [class.k-display-block]="touchEnabled"
2120
- >
2121
- </div>
2122
- <div
2123
- class="k-task-dot k-task-end k-touch-action-none"
2124
- [class.k-display-block]="touchEnabled"
2125
- >
2126
- </div>
2127
- </ng-container>
2128
- `
2129
- }]
2130
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
2131
- type: Inject,
2132
- args: [TOUCH_ENABLED]
2133
- }] }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { milestoneWrapperClass: [{
2134
- type: HostBinding,
2135
- args: ['class.k-milestone-wrap']
2136
- }] } });
2137
-
2138
- /**
2139
- * @hidden
2140
- */
2141
- class GanttTasksTableBodyComponent {
2142
- constructor(dependencyDomService, mapper) {
2143
- this.dependencyDomService = dependencyDomService;
2144
- this.mapper = mapper;
2145
- }
2146
- set timelineRow(timelineRow) {
2147
- // register the row value only when the first row is rendered
2148
- // with server-side data-binding, the rows rendering could be delayed
2149
- if (isPresent(timelineRow)) {
2150
- this.dependencyDomService.registerTimelineRow(timelineRow.nativeElement);
2151
- }
2152
- }
2153
- isMileStone(item) {
2154
- return !item.hasChildren && isEqual(this.mapper.extractFromTask(item.data, 'start'), this.mapper.extractFromTask(item.data, 'end'));
2155
- }
2156
- }
2157
- GanttTasksTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTasksTableBodyComponent, deps: [{ token: DependencyDomService }, { token: MappingService }], target: i0.ɵɵFactoryTarget.Component });
2158
- GanttTasksTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttTasksTableBodyComponent, selector: "[kendoGanttTasksTableBody]", inputs: { selectable: "selectable", rows: "rows", activeView: "activeView", taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate", summaryTaskTemplate: "summaryTaskTemplate", taskClass: "taskClass", isExpanded: "isExpanded", isTaskSelected: "isTaskSelected", renderDependencyDragClues: "renderDependencyDragClues" }, viewQueries: [{ propertyName: "timelineRow", first: true, predicate: ["timelineRow"], descendants: true }], ngImport: i0, template: `
2159
- <tr class="k-table-row" #timelineRow *ngFor="let item of rows; let index = index">
2160
- <td class="k-table-td">
2161
- <kendo-gantt-milestone-task
2162
- *ngIf="isMileStone(item); else task"
2163
- [dataItem]="item.data"
2164
- [level]="item.level"
2165
- [activeView]="activeView"
2166
- [taskClass]="taskClass"
2167
- [selectable]="selectable"
2168
- [isSelected]="isTaskSelected"
2169
- [index]="index"
2170
- [renderDependencyDragClues]="renderDependencyDragClues"
2171
- >
2172
- </kendo-gantt-milestone-task>
2173
- <ng-template #task>
2174
- <kendo-gantt-summary-task
2175
- *ngIf="item.hasChildren"
2176
- [dataItem]="item.data"
2177
- [level]="item.level"
2178
- [template]="summaryTaskTemplate"
2179
- [activeView]="activeView"
2180
- [taskClass]="taskClass"
2181
- [selectable]="selectable"
2182
- [isSelected]="isTaskSelected"
2183
- [isExpanded]="isExpanded"
2184
- [index]="index"
2185
- [renderDependencyDragClues]="renderDependencyDragClues"
2186
- >
2187
- </kendo-gantt-summary-task>
2188
- <kendo-gantt-task
2189
- *ngIf="!item.hasChildren"
2190
- [dataItem]="item.data"
2191
- [level]="item.level"
2192
- [taskContentTemplate]="taskContentTemplate"
2193
- [taskTemplate]="taskTemplate"
2194
- [activeView]="activeView"
2195
- [taskClass]="taskClass"
2196
- [selectable]="selectable"
2197
- [isSelected]="isTaskSelected"
2198
- [index]="index"
2199
- [renderDependencyDragClues]="renderDependencyDragClues"
2200
- >
2201
- </kendo-gantt-task>
2202
- </ng-template>
2203
- </td>
2204
- </tr>
2205
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttTaskComponent, selector: "kendo-gantt-task", inputs: ["taskContentTemplate", "taskTemplate"] }, { kind: "component", type: GanttSummaryTaskComponent, selector: "kendo-gantt-summary-task", inputs: ["template", "isExpanded"] }, { kind: "component", type: GanttMilestoneTaskComponent, selector: "kendo-gantt-milestone-task" }] });
2206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTasksTableBodyComponent, decorators: [{
2207
- type: Component,
2208
- args: [{
2209
- // eslint-disable-next-line @angular-eslint/component-selector
2210
- selector: '[kendoGanttTasksTableBody]',
2211
- template: `
2212
- <tr class="k-table-row" #timelineRow *ngFor="let item of rows; let index = index">
2213
- <td class="k-table-td">
2214
- <kendo-gantt-milestone-task
2215
- *ngIf="isMileStone(item); else task"
2216
- [dataItem]="item.data"
2217
- [level]="item.level"
2218
- [activeView]="activeView"
2219
- [taskClass]="taskClass"
2220
- [selectable]="selectable"
2221
- [isSelected]="isTaskSelected"
2222
- [index]="index"
2223
- [renderDependencyDragClues]="renderDependencyDragClues"
2224
- >
2225
- </kendo-gantt-milestone-task>
2226
- <ng-template #task>
2227
- <kendo-gantt-summary-task
2228
- *ngIf="item.hasChildren"
2229
- [dataItem]="item.data"
2230
- [level]="item.level"
2231
- [template]="summaryTaskTemplate"
2232
- [activeView]="activeView"
2233
- [taskClass]="taskClass"
2234
- [selectable]="selectable"
2235
- [isSelected]="isTaskSelected"
2236
- [isExpanded]="isExpanded"
2237
- [index]="index"
2238
- [renderDependencyDragClues]="renderDependencyDragClues"
2239
- >
2240
- </kendo-gantt-summary-task>
2241
- <kendo-gantt-task
2242
- *ngIf="!item.hasChildren"
2243
- [dataItem]="item.data"
2244
- [level]="item.level"
2245
- [taskContentTemplate]="taskContentTemplate"
2246
- [taskTemplate]="taskTemplate"
2247
- [activeView]="activeView"
2248
- [taskClass]="taskClass"
2249
- [selectable]="selectable"
2250
- [isSelected]="isTaskSelected"
2251
- [index]="index"
2252
- [renderDependencyDragClues]="renderDependencyDragClues"
2253
- >
2254
- </kendo-gantt-task>
2255
- </ng-template>
2256
- </td>
2257
- </tr>
2258
- `
2259
- }]
2260
- }], ctorParameters: function () { return [{ type: DependencyDomService }, { type: MappingService }]; }, propDecorators: { timelineRow: [{
2261
- type: ViewChild,
2262
- args: ['timelineRow', { static: false }]
2263
- }], selectable: [{
2264
- type: Input
2265
- }], rows: [{
2266
- type: Input
2267
- }], activeView: [{
2268
- type: Input
2269
- }], taskContentTemplate: [{
2270
- type: Input
2271
- }], taskTemplate: [{
2272
- type: Input
2273
- }], summaryTaskTemplate: [{
2274
- type: Input
2275
- }], taskClass: [{
2276
- type: Input
2277
- }], isExpanded: [{
2278
- type: Input
2279
- }], isTaskSelected: [{
2280
- type: Input
2281
- }], renderDependencyDragClues: [{
2282
- type: Input
2283
- }] } });
2284
-
2285
- /**
2286
- * @hidden
2287
- */
2288
- class GanttHeaderTableBodyComponent {
2289
- constructor() {
2290
- this.tbodyClass = true;
2291
- }
2292
- }
2293
- GanttHeaderTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHeaderTableBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2294
- GanttHeaderTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttHeaderTableBodyComponent, selector: "[kendoGanttHeaderTableBody]", inputs: { groupSlots: "groupSlots", slots: "slots" }, host: { properties: { "class.k-table-tbody": "this.tbodyClass" } }, ngImport: i0, template: `
2295
- <tr class="k-table-row">
2296
- <td *ngFor="let item of groupSlots" [attr.colspan]="item.span" class="k-header k-table-td">{{ item.text }}</td>
2297
- </tr>
2298
-
2299
- <tr class="k-table-row">
2300
- <td *ngFor="let item of slots" class="k-header k-table-td" [attr.colspan]="item.span === 7 ? item.span : 1" [attr.title]="item.text">{{ item.text }}</td>
2301
- </tr>
2302
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHeaderTableBodyComponent, decorators: [{
2304
- type: Component,
2305
- args: [{
2306
- // eslint-disable-next-line @angular-eslint/component-selector
2307
- selector: '[kendoGanttHeaderTableBody]',
2308
- template: `
2309
- <tr class="k-table-row">
2310
- <td *ngFor="let item of groupSlots" [attr.colspan]="item.span" class="k-header k-table-td">{{ item.text }}</td>
2311
- </tr>
2312
-
2313
- <tr class="k-table-row">
2314
- <td *ngFor="let item of slots" class="k-header k-table-td" [attr.colspan]="item.span === 7 ? item.span : 1" [attr.title]="item.text">{{ item.text }}</td>
2315
- </tr>
2316
- `
2252
+ <div *ngIf="!template; else summaryTemplate"
2253
+ class="k-task-summary-progress"
2254
+ [style.width.px]="taskWidth">
2255
+ <div
2256
+ class="k-task-summary-complete"
2257
+ [style.width.px]="completionOverlayWidth"
2258
+ >
2259
+ </div>
2260
+ </div>
2261
+ <ng-template
2262
+ #summaryTemplate
2263
+ [ngTemplateOutlet]="template"
2264
+ [ngTemplateOutletContext]="{
2265
+ $implicit: dataItem,
2266
+ elementWidth: taskWidth
2267
+ }"
2268
+ >
2269
+ </ng-template>
2270
+ </div>
2271
+ <ng-container *ngIf="renderDependencyDragClues">
2272
+ <div
2273
+ class="k-task-dot k-task-start k-touch-action-none"
2274
+ [class.k-display-block]="touchEnabled"
2275
+ >
2276
+ </div>
2277
+ <div
2278
+ class="k-task-dot k-task-end k-touch-action-none"
2279
+ [class.k-display-block]="touchEnabled"
2280
+ >
2281
+ </div>
2282
+ </ng-container>
2283
+ `,
2284
+ standalone: true,
2285
+ imports: [NgClass, NgIf, NgTemplateOutlet]
2317
2286
  }]
2318
- }], propDecorators: { tbodyClass: [{
2287
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { summaryWrapperClass: [{
2319
2288
  type: HostBinding,
2320
- args: ['class.k-table-tbody']
2321
- }], groupSlots: [{
2289
+ args: ['class.k-summary-wrap']
2290
+ }], template: [{
2322
2291
  type: Input
2323
- }], slots: [{
2292
+ }], isExpanded: [{
2324
2293
  type: Input
2325
2294
  }] } });
2326
2295
 
2327
- /**
2328
- * @hidden
2329
- *
2330
- * Gets the offset (top and left values) relative to a target element.
2331
- */
2332
- const getOffsetRelativeToParent = (element, targetParent) => {
2333
- const offset = {
2334
- top: 0,
2335
- left: 0
2336
- };
2337
- if (!targetParent.contains(element)) {
2338
- return offset;
2339
- }
2340
- let offsetParent = element;
2341
- while (offsetParent && offsetParent !== targetParent) {
2342
- offset.top += offsetParent.offsetTop;
2343
- offset.left += offsetParent.offsetLeft;
2344
- offsetParent = offsetParent.offsetParent;
2345
- }
2346
- return offset;
2347
- };
2348
- /**
2349
- * @hidden
2350
- */
2351
- const getElementRect = (element, relativeContainer) => {
2352
- const { top, left } = getOffsetRelativeToParent(element, relativeContainer);
2353
- return {
2354
- top: top + element.offsetHeight / 2,
2355
- left: left,
2356
- right: left + element.offsetWidth
2357
- };
2358
- };
2359
2296
  /**
2360
2297
  * @hidden
2361
2298
  */
2362
- const dependencyCoordinates = (from, to, rowHeight, type, minDistanceBeforeTurn, arrowSize) => {
2363
- const points = [];
2364
- const minTurnHeight = Math.floor(rowHeight / 2);
2365
- const drawingDown = from.top < to.top;
2366
- let top, left;
2367
- // FF and SS are composed of 4 connected polyline points (not counting the arrow)
2368
- /*
2369
- [[[]]]- -[[[]]]
2370
- | |
2371
- [[[]]]- -[[[]]]
2372
- */
2373
- if (type === DependencyType.FF || type === DependencyType.SS) {
2374
- // polyline start from first task
2375
- const dir = type === DependencyType.SS ? 'left' : 'right';
2376
- top = from.top;
2377
- left = from[dir];
2378
- points.push({ top, left });
2379
- // first turn point
2380
- left = Math[dir === 'left' ? 'min' : 'max'](from[dir], to[dir]);
2381
- left = dir === 'left' ? left - minDistanceBeforeTurn : left + minDistanceBeforeTurn;
2382
- points.push({ top, left });
2383
- // second turn point
2384
- top = to.top;
2385
- points.push({ top, left });
2386
- // second task reached
2387
- left = dir === 'left' ? to[dir] - arrowSize : to[dir] + arrowSize;
2388
- points.push({ top, left });
2389
- // arrow pointing to the second task
2390
- points.push(...getArrow(top, left, dir !== 'left', arrowSize));
2299
+ class GanttMilestoneTaskComponent extends GanttTaskBase {
2300
+ constructor(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
2301
+ super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
2302
+ this.milestoneWrapperClass = true;
2303
+ this.touchEnabled = touchEnabled;
2391
2304
  }
2392
- else {
2393
- // FS and SF are composed of 4 or 6 connected polyline points (not counting the arrow), depending on the position of the tasks
2394
- /*
2395
- [[[]]]- [[[]]]-
2396
- | |
2397
- -[[[]]] -----
2398
- |
2399
- -[[[]]]
2400
- */
2401
- const startDir = type === DependencyType.SF ? 'left' : 'right';
2402
- const endDir = type === DependencyType.SF ? 'right' : 'left';
2403
- const additionalTurn = type === DependencyType.SF
2404
- ? from[startDir] - minDistanceBeforeTurn * 2 < to[endDir]
2405
- : from[startDir] + minDistanceBeforeTurn * 2 > to[endDir];
2406
- // polyline start from first task
2407
- top = from.top;
2408
- left = from[startDir];
2409
- points.push({ top, left });
2410
- // first turn point
2411
- left = startDir === 'left'
2412
- ? left - minDistanceBeforeTurn
2413
- : left + minDistanceBeforeTurn;
2414
- points.push({ top, left });
2415
- // if second task start is before the first task end in FS
2416
- // if second task end is after the first task start in SF
2417
- if (additionalTurn) {
2418
- // additional turn start
2419
- top = drawingDown
2420
- ? top + minTurnHeight
2421
- : top - minTurnHeight;
2422
- points.push({ top, left });
2423
- // additional turn end
2424
- left = startDir === 'left'
2425
- ? to[endDir] + minDistanceBeforeTurn
2426
- : to[endDir] - minDistanceBeforeTurn;
2427
- points.push({ top, left });
2305
+ }
2306
+ GanttMilestoneTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttMilestoneTaskComponent, deps: [{ token: MappingService }, { token: TimelineViewService }, { token: DependencyDomService }, { token: OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
2307
+ GanttMilestoneTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttMilestoneTaskComponent, isStandalone: true, selector: "kendo-gantt-milestone-task", host: { properties: { "class.k-milestone-wrap": "this.milestoneWrapperClass" } }, providers: [
2308
+ {
2309
+ provide: GanttTaskBase,
2310
+ useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2428
2311
  }
2429
- // second task level reached
2430
- top = to.top;
2431
- points.push({ top, left });
2432
- // second task element reached
2433
- left = endDir === 'left' ? to[endDir] - arrowSize : to[endDir] + arrowSize;
2434
- points.push({ top, left });
2435
- // arrow pointing to the second task
2436
- points.push(...getArrow(top, left, endDir !== 'left', arrowSize));
2437
- }
2438
- return points;
2439
- };
2440
- const getArrow = (top, left, isArrowWest, arrowSize) => {
2441
- const points = isArrowWest
2442
- ? getArrowWest(top, left, arrowSize)
2443
- : getArrowEast(top, left, arrowSize);
2444
- return points;
2445
- };
2446
- const getArrowWest = (top, left, arrowSize) => {
2447
- const points = [];
2448
- points.push({
2449
- top: top - arrowSize / 2,
2450
- left
2451
- });
2452
- points.push({
2453
- top,
2454
- left: left - arrowSize + 1
2455
- });
2456
- points.push({
2457
- top: top + arrowSize / 2,
2458
- left
2459
- });
2460
- points.push({
2461
- top,
2462
- left
2463
- });
2464
- return points;
2465
- };
2466
- const getArrowEast = (top, left, arrowSize) => {
2467
- const points = [];
2468
- points.push({
2469
- top: top + arrowSize / 2,
2470
- left
2471
- });
2472
- points.push({
2473
- top,
2474
- left: left + arrowSize - 1
2475
- });
2476
- points.push({
2477
- top: top - arrowSize / 2,
2478
- left
2479
- });
2480
- points.push({
2481
- top,
2482
- left
2483
- });
2484
- return points;
2485
- };
2486
- /**
2487
- * @hidden
2488
- *
2489
- * Translates the provided client `left` and `top` coords to coords relative to the provided container.
2490
- * https://developer.mozilla.org/en-US/docs/Web/CSS/CSSOM_View/Coordinate_systems#standard_cssom_coordinate_systems
2491
- */
2492
- const clientToOffsetCoords = (clientLeft, clientTop, offsetContainer) => {
2493
- // client (viewport) coordinates of the target container
2494
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#value
2495
- const offsetContainerClientRect = offsetContainer.getBoundingClientRect();
2496
- return {
2497
- left: clientLeft - offsetContainerClientRect.left + offsetContainer.scrollLeft,
2498
- top: clientTop - offsetContainerClientRect.top + offsetContainer.scrollTop
2499
- };
2500
- };
2501
- /**
2502
- * @hidden
2503
- *
2504
- * Retrieves the `left` and `top` values of the center of the provided element.
2505
- * The retrieved values are relative to the current viewport (client values).
2506
- * https://developer.mozilla.org/en-US/docs/Web/CSS/CSSOM_View/Coordinate_systems#standard_cssom_coordinate_systems
2507
- */
2508
- const getElementClientCenterCoords = (element) => {
2509
- // client (viewport) coordinates of the targeted element
2510
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect#value
2511
- const { left, top, width, height } = element.getBoundingClientRect();
2512
- return {
2513
- left: left + (width / 2),
2514
- top: top + (height / 2)
2515
- };
2516
- };
2312
+ ], usesInheritance: true, ngImport: i0, template: `
2313
+ <div
2314
+ #task
2315
+ role="treeitem"
2316
+ class="k-task k-task-milestone"
2317
+ [ngClass]="taskClass(dataItem)"
2318
+ [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2319
+ [class.k-selected]="isSelected(dataItem)"
2320
+ [attr.aria-selected]="ariaSelected"
2321
+ [attr.aria-level]="level + 1"
2322
+ >
2323
+ </div>
2324
+ <ng-container *ngIf="renderDependencyDragClues">
2325
+ <div
2326
+ class="k-task-dot k-task-start k-touch-action-none"
2327
+ [class.k-display-block]="touchEnabled"
2328
+ >
2329
+ </div>
2330
+ <div
2331
+ class="k-task-dot k-task-end k-touch-action-none"
2332
+ [class.k-display-block]="touchEnabled"
2333
+ >
2334
+ </div>
2335
+ </ng-container>
2336
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttMilestoneTaskComponent, decorators: [{
2338
+ type: Component,
2339
+ args: [{
2340
+ selector: 'kendo-gantt-milestone-task',
2341
+ providers: [
2342
+ {
2343
+ provide: GanttTaskBase,
2344
+ useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2345
+ }
2346
+ ],
2347
+ template: `
2348
+ <div
2349
+ #task
2350
+ role="treeitem"
2351
+ class="k-task k-task-milestone"
2352
+ [ngClass]="taskClass(dataItem)"
2353
+ [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2354
+ [class.k-selected]="isSelected(dataItem)"
2355
+ [attr.aria-selected]="ariaSelected"
2356
+ [attr.aria-level]="level + 1"
2357
+ >
2358
+ </div>
2359
+ <ng-container *ngIf="renderDependencyDragClues">
2360
+ <div
2361
+ class="k-task-dot k-task-start k-touch-action-none"
2362
+ [class.k-display-block]="touchEnabled"
2363
+ >
2364
+ </div>
2365
+ <div
2366
+ class="k-task-dot k-task-end k-touch-action-none"
2367
+ [class.k-display-block]="touchEnabled"
2368
+ >
2369
+ </div>
2370
+ </ng-container>
2371
+ `,
2372
+ standalone: true,
2373
+ imports: [NgClass, NgIf]
2374
+ }]
2375
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { milestoneWrapperClass: [{
2376
+ type: HostBinding,
2377
+ args: ['class.k-milestone-wrap']
2378
+ }] } });
2517
2379
 
2518
- /**
2519
- * Defines the size of the arrow that will be drawn at the end of each Gantt dependency.
2520
- */
2521
- const ARROW_SIZE = 4;
2522
- /**
2523
- * Defines the distance the polyline will cover from the task element before making a turn.
2524
- */
2525
- const MIN_DISTANCE_BEFORE_TURN = 10;
2526
2380
  /**
2527
2381
  * @hidden
2528
2382
  */
2529
- class GanttDependencyDirective {
2530
- constructor(polyline, zone, renderer, mapper, dependencyDomService) {
2531
- this.polyline = polyline;
2532
- this.zone = zone;
2533
- this.renderer = renderer;
2534
- this.mapper = mapper;
2383
+ class GanttTasksTableBodyComponent {
2384
+ constructor(dependencyDomService, mapper) {
2535
2385
  this.dependencyDomService = dependencyDomService;
2536
- this.subscriptions = new Subscription();
2537
- this.subscriptions.add(dependencyDomService.taskChanges
2538
- .pipe(switchMap(changes =>
2539
- // reacts only on the very last event emission,
2540
- // ensures that the tasks are drawn in the DOM
2541
- this.zone.onStable.pipe(take(1), map(() => changes))))
2542
- .subscribe(changes => this.updatePoints(changes)));
2543
- }
2544
- ngOnDestroy() {
2545
- this.subscriptions.unsubscribe();
2546
- }
2547
- ngOnChanges(changes) {
2548
- if (isPresent(changes['dependency'])) {
2549
- this.updatePoints(this.dependencyDomService.dependencyDomArgs);
2550
- }
2386
+ this.mapper = mapper;
2551
2387
  }
2552
- updatePoints({ timelineRow, contentContainer, tasks }) {
2553
- if (!isPresent(timelineRow) || !isPresent(contentContainer) ||
2554
- !isPresent(tasks) || tasks.size === 0 ||
2555
- !tasks.has(this.mapper.extractFromDependency(this.dependency, 'fromId')) || !tasks.has(this.mapper.extractFromDependency(this.dependency, 'toId'))) {
2556
- this.clearPoints();
2557
- return;
2388
+ set timelineRow(timelineRow) {
2389
+ // register the row value only when the first row is rendered
2390
+ // with server-side data-binding, the rows rendering could be delayed
2391
+ if (isPresent(timelineRow)) {
2392
+ this.dependencyDomService.registerTimelineRow(timelineRow.nativeElement);
2558
2393
  }
2559
- const fromCoordinates = getElementRect(tasks.get(this.mapper.extractFromDependency(this.dependency, 'fromId')), contentContainer);
2560
- const toCoordinates = getElementRect(tasks.get(this.mapper.extractFromDependency(this.dependency, 'toId')), contentContainer);
2561
- const timelineRowHeight = isDocumentAvailable() ? timelineRow.getBoundingClientRect().height : 0;
2562
- const points = dependencyCoordinates(fromCoordinates, toCoordinates, timelineRowHeight, this.dependency.type, MIN_DISTANCE_BEFORE_TURN, ARROW_SIZE);
2563
- this.drawPoints(points);
2564
- }
2565
- clearPoints() {
2566
- this.renderer.setAttribute(this.polyline.nativeElement, 'points', '');
2567
2394
  }
2568
- drawPoints(points) {
2569
- if (!isPresent(points) || points.length === 0) {
2570
- this.clearPoints();
2571
- return;
2572
- }
2573
- const parsedCoords = points.map(({ left, top }) => `${left},${top}`).join(' ');
2574
- this.renderer.setAttribute(this.polyline.nativeElement, 'points', parsedCoords);
2395
+ isMileStone(item) {
2396
+ return !item.hasChildren && isEqual(this.mapper.extractFromTask(item.data, 'start'), this.mapper.extractFromTask(item.data, 'end'));
2575
2397
  }
2576
2398
  }
2577
- GanttDependencyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttDependencyDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: MappingService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Directive });
2578
- GanttDependencyDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttDependencyDirective, selector: "[kendoGanttDependency]", inputs: { dependency: "dependency" }, usesOnChanges: true, ngImport: i0 });
2579
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttDependencyDirective, decorators: [{
2580
- type: Directive,
2399
+ GanttTasksTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTasksTableBodyComponent, deps: [{ token: DependencyDomService }, { token: MappingService }], target: i0.ɵɵFactoryTarget.Component });
2400
+ GanttTasksTableBodyComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttTasksTableBodyComponent, isStandalone: true, selector: "[kendoGanttTasksTableBody]", inputs: { selectable: "selectable", rows: "rows", activeView: "activeView", taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate", summaryTaskTemplate: "summaryTaskTemplate", taskClass: "taskClass", isExpanded: "isExpanded", isTaskSelected: "isTaskSelected", renderDependencyDragClues: "renderDependencyDragClues" }, viewQueries: [{ propertyName: "timelineRow", first: true, predicate: ["timelineRow"], descendants: true }], ngImport: i0, template: `
2401
+ <tr class="k-table-row" #timelineRow *ngFor="let item of rows; let index = index">
2402
+ <td class="k-table-td">
2403
+ <kendo-gantt-milestone-task
2404
+ *ngIf="isMileStone(item); else task"
2405
+ [dataItem]="item.data"
2406
+ [level]="item.level"
2407
+ [activeView]="activeView"
2408
+ [taskClass]="taskClass"
2409
+ [selectable]="selectable"
2410
+ [isSelected]="isTaskSelected"
2411
+ [index]="index"
2412
+ [renderDependencyDragClues]="renderDependencyDragClues"
2413
+ >
2414
+ </kendo-gantt-milestone-task>
2415
+ <ng-template #task>
2416
+ <kendo-gantt-summary-task
2417
+ *ngIf="item.hasChildren"
2418
+ [dataItem]="item.data"
2419
+ [level]="item.level"
2420
+ [template]="summaryTaskTemplate"
2421
+ [activeView]="activeView"
2422
+ [taskClass]="taskClass"
2423
+ [selectable]="selectable"
2424
+ [isSelected]="isTaskSelected"
2425
+ [isExpanded]="isExpanded"
2426
+ [index]="index"
2427
+ [renderDependencyDragClues]="renderDependencyDragClues"
2428
+ >
2429
+ </kendo-gantt-summary-task>
2430
+ <kendo-gantt-task
2431
+ *ngIf="!item.hasChildren"
2432
+ [dataItem]="item.data"
2433
+ [level]="item.level"
2434
+ [taskContentTemplate]="taskContentTemplate"
2435
+ [taskTemplate]="taskTemplate"
2436
+ [activeView]="activeView"
2437
+ [taskClass]="taskClass"
2438
+ [selectable]="selectable"
2439
+ [isSelected]="isTaskSelected"
2440
+ [index]="index"
2441
+ [renderDependencyDragClues]="renderDependencyDragClues"
2442
+ >
2443
+ </kendo-gantt-task>
2444
+ </ng-template>
2445
+ </td>
2446
+ </tr>
2447
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttMilestoneTaskComponent, selector: "kendo-gantt-milestone-task" }, { kind: "component", type: GanttSummaryTaskComponent, selector: "kendo-gantt-summary-task", inputs: ["template", "isExpanded"] }, { kind: "component", type: GanttTaskComponent, selector: "kendo-gantt-task", inputs: ["taskContentTemplate", "taskTemplate"] }] });
2448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTasksTableBodyComponent, decorators: [{
2449
+ type: Component,
2581
2450
  args: [{
2582
- selector: '[kendoGanttDependency]'
2451
+ // eslint-disable-next-line @angular-eslint/component-selector
2452
+ selector: '[kendoGanttTasksTableBody]',
2453
+ template: `
2454
+ <tr class="k-table-row" #timelineRow *ngFor="let item of rows; let index = index">
2455
+ <td class="k-table-td">
2456
+ <kendo-gantt-milestone-task
2457
+ *ngIf="isMileStone(item); else task"
2458
+ [dataItem]="item.data"
2459
+ [level]="item.level"
2460
+ [activeView]="activeView"
2461
+ [taskClass]="taskClass"
2462
+ [selectable]="selectable"
2463
+ [isSelected]="isTaskSelected"
2464
+ [index]="index"
2465
+ [renderDependencyDragClues]="renderDependencyDragClues"
2466
+ >
2467
+ </kendo-gantt-milestone-task>
2468
+ <ng-template #task>
2469
+ <kendo-gantt-summary-task
2470
+ *ngIf="item.hasChildren"
2471
+ [dataItem]="item.data"
2472
+ [level]="item.level"
2473
+ [template]="summaryTaskTemplate"
2474
+ [activeView]="activeView"
2475
+ [taskClass]="taskClass"
2476
+ [selectable]="selectable"
2477
+ [isSelected]="isTaskSelected"
2478
+ [isExpanded]="isExpanded"
2479
+ [index]="index"
2480
+ [renderDependencyDragClues]="renderDependencyDragClues"
2481
+ >
2482
+ </kendo-gantt-summary-task>
2483
+ <kendo-gantt-task
2484
+ *ngIf="!item.hasChildren"
2485
+ [dataItem]="item.data"
2486
+ [level]="item.level"
2487
+ [taskContentTemplate]="taskContentTemplate"
2488
+ [taskTemplate]="taskTemplate"
2489
+ [activeView]="activeView"
2490
+ [taskClass]="taskClass"
2491
+ [selectable]="selectable"
2492
+ [isSelected]="isTaskSelected"
2493
+ [index]="index"
2494
+ [renderDependencyDragClues]="renderDependencyDragClues"
2495
+ >
2496
+ </kendo-gantt-task>
2497
+ </ng-template>
2498
+ </td>
2499
+ </tr>
2500
+ `,
2501
+ standalone: true,
2502
+ imports: [NgFor, NgIf, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskComponent]
2583
2503
  }]
2584
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: MappingService }, { type: DependencyDomService }]; }, propDecorators: { dependency: [{
2504
+ }], ctorParameters: function () { return [{ type: DependencyDomService }, { type: MappingService }]; }, propDecorators: { timelineRow: [{
2505
+ type: ViewChild,
2506
+ args: ['timelineRow', { static: false }]
2507
+ }], selectable: [{
2508
+ type: Input
2509
+ }], rows: [{
2510
+ type: Input
2511
+ }], activeView: [{
2512
+ type: Input
2513
+ }], taskContentTemplate: [{
2514
+ type: Input
2515
+ }], taskTemplate: [{
2516
+ type: Input
2517
+ }], summaryTaskTemplate: [{
2518
+ type: Input
2519
+ }], taskClass: [{
2520
+ type: Input
2521
+ }], isExpanded: [{
2522
+ type: Input
2523
+ }], isTaskSelected: [{
2524
+ type: Input
2525
+ }], renderDependencyDragClues: [{
2585
2526
  type: Input
2586
2527
  }] } });
2587
2528
 
@@ -2761,16 +2702,61 @@ class TimelineScrollableDirective {
2761
2702
  }
2762
2703
  }
2763
2704
  TimelineScrollableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineScrollableDirective, deps: [{ token: i0.ElementRef }, { token: TimelineScrollService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
2764
- TimelineScrollableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: TimelineScrollableDirective, selector: "[kendoGanttTimelineScrollable]", inputs: { scrollSettings: "scrollSettings" }, ngImport: i0 });
2705
+ TimelineScrollableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: TimelineScrollableDirective, isStandalone: true, selector: "[kendoGanttTimelineScrollable]", inputs: { scrollSettings: "scrollSettings" }, ngImport: i0 });
2765
2706
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineScrollableDirective, decorators: [{
2766
2707
  type: Directive,
2767
2708
  args: [{
2768
- selector: '[kendoGanttTimelineScrollable]'
2709
+ selector: '[kendoGanttTimelineScrollable]',
2710
+ standalone: true
2769
2711
  }]
2770
2712
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: TimelineScrollService }, { type: i0.NgZone }]; }, propDecorators: { scrollSettings: [{
2771
2713
  type: Input
2772
2714
  }] } });
2773
2715
 
2716
+ /**
2717
+ * @hidden
2718
+ */
2719
+ class GanttHeaderTableBodyComponent {
2720
+ constructor() {
2721
+ this.tbodyClass = true;
2722
+ }
2723
+ }
2724
+ GanttHeaderTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHeaderTableBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2725
+ GanttHeaderTableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttHeaderTableBodyComponent, isStandalone: true, selector: "[kendoGanttHeaderTableBody]", inputs: { groupSlots: "groupSlots", slots: "slots" }, host: { properties: { "class.k-table-tbody": "this.tbodyClass" } }, ngImport: i0, template: `
2726
+ <tr class="k-table-row">
2727
+ <td *ngFor="let item of groupSlots" [attr.colspan]="item.span" class="k-header k-table-td">{{ item.text }}</td>
2728
+ </tr>
2729
+
2730
+ <tr class="k-table-row">
2731
+ <td *ngFor="let item of slots" class="k-header k-table-td" [attr.colspan]="item.span === 7 ? item.span : 1" [attr.title]="item.text">{{ item.text }}</td>
2732
+ </tr>
2733
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2734
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHeaderTableBodyComponent, decorators: [{
2735
+ type: Component,
2736
+ args: [{
2737
+ // eslint-disable-next-line @angular-eslint/component-selector
2738
+ selector: '[kendoGanttHeaderTableBody]',
2739
+ template: `
2740
+ <tr class="k-table-row">
2741
+ <td *ngFor="let item of groupSlots" [attr.colspan]="item.span" class="k-header k-table-td">{{ item.text }}</td>
2742
+ </tr>
2743
+
2744
+ <tr class="k-table-row">
2745
+ <td *ngFor="let item of slots" class="k-header k-table-td" [attr.colspan]="item.span === 7 ? item.span : 1" [attr.title]="item.text">{{ item.text }}</td>
2746
+ </tr>
2747
+ `,
2748
+ standalone: true,
2749
+ imports: [NgFor]
2750
+ }]
2751
+ }], propDecorators: { tbodyClass: [{
2752
+ type: HostBinding,
2753
+ args: ['class.k-table-tbody']
2754
+ }], groupSlots: [{
2755
+ type: Input
2756
+ }], slots: [{
2757
+ type: Input
2758
+ }] } });
2759
+
2774
2760
  /**
2775
2761
  * @hidden
2776
2762
  */
@@ -2840,7 +2826,7 @@ class GanttTimelineComponent {
2840
2826
  }
2841
2827
  }
2842
2828
  GanttTimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTimelineComponent, deps: [{ token: ScrollSyncService }, { token: DependencyDomService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: CurrentTimeMarkerService }], target: i0.ɵɵFactoryTarget.Component });
2843
- GanttTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttTimelineComponent, selector: "kendo-gantt-timeline", inputs: { rows: "rows", slots: "slots", groupSlots: "groupSlots", tableWidth: "tableWidth", activeView: "activeView", taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate", summaryTaskTemplate: "summaryTaskTemplate", taskClass: "taskClass", renderDependencyDragClues: "renderDependencyDragClues", dragScrollSettings: "dragScrollSettings", currentTimeMarker: "currentTimeMarker", selectable: "selectable", isTaskSelected: "isTaskSelected", isExpanded: "isExpanded", dependencies: "dependencies" }, outputs: { timelineContainerPress: "timelineContainerPress", timelineContainerDrag: "timelineContainerDrag", timelineContainerRelease: "timelineContainerRelease" }, viewQueries: [{ propertyName: "timelineContent", first: true, predicate: ["timelineContent"], descendants: true, static: true }, { propertyName: "timelineColumns", first: true, predicate: ["timelineColumns"], descendants: true, static: true }, { propertyName: "timelineHeaderWrap", first: true, predicate: ["timelineHeaderWrap"], descendants: true, static: true }, { propertyName: "tasksContainer", first: true, predicate: ["tasksContainer"], descendants: true, static: true }, { propertyName: "dragPopupContainer", first: true, predicate: ["dragPopupContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "dependencyDragCreatePolyline", first: true, predicate: ["dependencyDragCreatePolyline"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2829
+ GanttTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttTimelineComponent, isStandalone: true, selector: "kendo-gantt-timeline", inputs: { rows: "rows", slots: "slots", groupSlots: "groupSlots", tableWidth: "tableWidth", activeView: "activeView", taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate", summaryTaskTemplate: "summaryTaskTemplate", taskClass: "taskClass", renderDependencyDragClues: "renderDependencyDragClues", dragScrollSettings: "dragScrollSettings", currentTimeMarker: "currentTimeMarker", selectable: "selectable", isTaskSelected: "isTaskSelected", isExpanded: "isExpanded", dependencies: "dependencies" }, outputs: { timelineContainerPress: "timelineContainerPress", timelineContainerDrag: "timelineContainerDrag", timelineContainerRelease: "timelineContainerRelease" }, viewQueries: [{ propertyName: "timelineContent", first: true, predicate: ["timelineContent"], descendants: true, static: true }, { propertyName: "timelineColumns", first: true, predicate: ["timelineColumns"], descendants: true, static: true }, { propertyName: "timelineHeaderWrap", first: true, predicate: ["timelineHeaderWrap"], descendants: true, static: true }, { propertyName: "tasksContainer", first: true, predicate: ["tasksContainer"], descendants: true, static: true }, { propertyName: "dragPopupContainer", first: true, predicate: ["dragPopupContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "dependencyDragCreatePolyline", first: true, predicate: ["dependencyDragCreatePolyline"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2844
2830
  <div class="k-gantt-timeline k-grid k-grid-md">
2845
2831
  <div class="k-grid-header">
2846
2832
  <div #timelineHeaderWrap class="k-grid-header-wrap">
@@ -2943,7 +2929,7 @@ GanttTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
2943
2929
  <ng-container #dragPopupContainer></ng-container>
2944
2930
  </div>
2945
2931
  </div>
2946
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "component", type: GanttTasksTableBodyComponent, selector: "[kendoGanttTasksTableBody]", inputs: ["selectable", "rows", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "isExpanded", "isTaskSelected", "renderDependencyDragClues"] }, { kind: "component", type: GanttHeaderTableBodyComponent, selector: "[kendoGanttHeaderTableBody]", inputs: ["groupSlots", "slots"] }, { kind: "directive", type: GanttDependencyDirective, selector: "[kendoGanttDependency]", inputs: ["dependency"] }, { kind: "directive", type: TimelineScrollableDirective, selector: "[kendoGanttTimelineScrollable]", inputs: ["scrollSettings"] }] });
2932
+ `, isInline: true, dependencies: [{ kind: "directive", type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { kind: "component", type: GanttHeaderTableBodyComponent, selector: "[kendoGanttHeaderTableBody]", inputs: ["groupSlots", "slots"] }, { kind: "directive", type: TimelineScrollableDirective, selector: "[kendoGanttTimelineScrollable]", inputs: ["scrollSettings"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: GanttTasksTableBodyComponent, selector: "[kendoGanttTasksTableBody]", inputs: ["selectable", "rows", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "isExpanded", "isTaskSelected", "renderDependencyDragClues"] }, { kind: "directive", type: GanttDependencyDirective, selector: "[kendoGanttDependency]", inputs: ["dependency"] }] });
2947
2933
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTimelineComponent, decorators: [{
2948
2934
  type: Component,
2949
2935
  args: [{
@@ -3051,7 +3037,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3051
3037
  <ng-container #dragPopupContainer></ng-container>
3052
3038
  </div>
3053
3039
  </div>
3054
- `
3040
+ `,
3041
+ standalone: true,
3042
+ imports: [TableDirective, GanttHeaderTableBodyComponent, TimelineScrollableDirective, DraggableDirective, NgFor, GanttTasksTableBodyComponent, GanttDependencyDirective]
3055
3043
  }]
3056
3044
  }], ctorParameters: function () { return [{ type: ScrollSyncService }, { type: DependencyDomService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: CurrentTimeMarkerService }]; }, propDecorators: { timelineContent: [{
3057
3045
  type: ViewChild,
@@ -3182,11 +3170,12 @@ class CellTemplateDirective {
3182
3170
  }
3183
3171
  }
3184
3172
  CellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CellTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3185
- CellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: CellTemplateDirective, selector: "[kendoGanttCellTemplate]", ngImport: i0 });
3173
+ CellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: CellTemplateDirective, isStandalone: true, selector: "[kendoGanttCellTemplate]", ngImport: i0 });
3186
3174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CellTemplateDirective, decorators: [{
3187
3175
  type: Directive,
3188
3176
  args: [{
3189
- selector: '[kendoGanttCellTemplate]'
3177
+ selector: '[kendoGanttCellTemplate]',
3178
+ standalone: true
3190
3179
  }]
3191
3180
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3192
3181
  type: Optional
@@ -3208,11 +3197,12 @@ class ColumnMenuTemplateDirective {
3208
3197
  }
3209
3198
  }
3210
3199
  ColumnMenuTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColumnMenuTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3211
- ColumnMenuTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ColumnMenuTemplateDirective, selector: "[kendoGanttColumnMenuTemplate]", ngImport: i0 });
3200
+ ColumnMenuTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ColumnMenuTemplateDirective, isStandalone: true, selector: "[kendoGanttColumnMenuTemplate]", ngImport: i0 });
3212
3201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColumnMenuTemplateDirective, decorators: [{
3213
3202
  type: Directive,
3214
3203
  args: [{
3215
- selector: '[kendoGanttColumnMenuTemplate]'
3204
+ selector: '[kendoGanttColumnMenuTemplate]',
3205
+ standalone: true
3216
3206
  }]
3217
3207
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3218
3208
  type: Optional
@@ -3233,11 +3223,12 @@ class FilterCellTemplateDirective {
3233
3223
  }
3234
3224
  }
3235
3225
  FilterCellTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterCellTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3236
- FilterCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FilterCellTemplateDirective, selector: "[kendoGanttFilterCellTemplate]", ngImport: i0 });
3226
+ FilterCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FilterCellTemplateDirective, isStandalone: true, selector: "[kendoGanttFilterCellTemplate]", ngImport: i0 });
3237
3227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterCellTemplateDirective, decorators: [{
3238
3228
  type: Directive,
3239
3229
  args: [{
3240
- selector: '[kendoGanttFilterCellTemplate]'
3230
+ selector: '[kendoGanttFilterCellTemplate]',
3231
+ standalone: true
3241
3232
  }]
3242
3233
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3243
3234
  type: Optional
@@ -3257,11 +3248,12 @@ class FilterMenuTemplateDirective {
3257
3248
  }
3258
3249
  }
3259
3250
  FilterMenuTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterMenuTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3260
- FilterMenuTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FilterMenuTemplateDirective, selector: "[kendoGanttFilterMenuTemplate]", ngImport: i0 });
3251
+ FilterMenuTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FilterMenuTemplateDirective, isStandalone: true, selector: "[kendoGanttFilterMenuTemplate]", ngImport: i0 });
3261
3252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterMenuTemplateDirective, decorators: [{
3262
3253
  type: Directive,
3263
3254
  args: [{
3264
- selector: '[kendoGanttFilterMenuTemplate]'
3255
+ selector: '[kendoGanttFilterMenuTemplate]',
3256
+ standalone: true
3265
3257
  }]
3266
3258
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3267
3259
  type: Optional
@@ -3285,11 +3277,12 @@ class FooterTemplateDirective {
3285
3277
  }
3286
3278
  }
3287
3279
  FooterTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FooterTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3288
- FooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FooterTemplateDirective, selector: "[kendoGanttFooterTemplate]", ngImport: i0 });
3280
+ FooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FooterTemplateDirective, isStandalone: true, selector: "[kendoGanttFooterTemplate]", ngImport: i0 });
3289
3281
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FooterTemplateDirective, decorators: [{
3290
3282
  type: Directive,
3291
3283
  args: [{
3292
- selector: '[kendoGanttFooterTemplate]'
3284
+ selector: '[kendoGanttFooterTemplate]',
3285
+ standalone: true
3293
3286
  }]
3294
3287
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3295
3288
  type: Optional
@@ -3311,11 +3304,12 @@ class HeaderTemplateDirective {
3311
3304
  }
3312
3305
  }
3313
3306
  HeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3314
- HeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: HeaderTemplateDirective, selector: "[kendoGanttHeaderTemplate]", ngImport: i0 });
3307
+ HeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: HeaderTemplateDirective, isStandalone: true, selector: "[kendoGanttHeaderTemplate]", ngImport: i0 });
3315
3308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderTemplateDirective, decorators: [{
3316
3309
  type: Directive,
3317
3310
  args: [{
3318
- selector: '[kendoGanttHeaderTemplate]'
3311
+ selector: '[kendoGanttHeaderTemplate]',
3312
+ standalone: true
3319
3313
  }]
3320
3314
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3321
3315
  type: Optional
@@ -3341,11 +3335,12 @@ class EditTemplateDirective {
3341
3335
  }
3342
3336
  }
3343
3337
  EditTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3344
- EditTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: EditTemplateDirective, selector: "[kendoGanttEditTemplate]", ngImport: i0 });
3338
+ EditTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: EditTemplateDirective, isStandalone: true, selector: "[kendoGanttEditTemplate]", ngImport: i0 });
3345
3339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditTemplateDirective, decorators: [{
3346
3340
  type: Directive,
3347
3341
  args: [{
3348
- selector: '[kendoGanttEditTemplate]'
3342
+ selector: '[kendoGanttEditTemplate]',
3343
+ standalone: true
3349
3344
  }]
3350
3345
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3351
3346
  type: Optional
@@ -3395,7 +3390,7 @@ class GanttColumnComponent extends ColumnComponent {
3395
3390
  }
3396
3391
  }
3397
3392
  GanttColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttColumnComponent, deps: [{ token: OptionChangesService }, { token: GanttColumnBase, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
3398
- GanttColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttColumnComponent, selector: "kendo-gantt-column", inputs: { format: "format", filter: "filter", filterable: "filterable", editor: "editor", editable: "editable", locked: "locked", lockable: "lockable", hidden: "hidden", media: "media", style: "style", headerStyle: "headerStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", footerClass: "footerClass" }, providers: [
3393
+ GanttColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttColumnComponent, isStandalone: true, selector: "kendo-gantt-column", inputs: { format: "format", filter: "filter", filterable: "filterable", editor: "editor", editable: "editable", locked: "locked", lockable: "lockable", hidden: "hidden", media: "media", style: "style", headerStyle: "headerStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", footerClass: "footerClass" }, providers: [
3399
3394
  {
3400
3395
  provide: GanttColumnBase,
3401
3396
  useExisting: forwardRef(() => GanttColumnComponent)
@@ -3411,7 +3406,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3411
3406
  provide: GanttColumnBase,
3412
3407
  useExisting: forwardRef(() => GanttColumnComponent)
3413
3408
  }
3414
- ]
3409
+ ],
3410
+ standalone: true
3415
3411
  }]
3416
3412
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: GanttColumnBase, decorators: [{
3417
3413
  type: SkipSelf
@@ -3507,7 +3503,7 @@ class GanttColumnGroupComponent extends ColumnGroupComponent {
3507
3503
  }
3508
3504
  }
3509
3505
  GanttColumnGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttColumnGroupComponent, deps: [{ token: OptionChangesService }, { token: GanttColumnBase, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
3510
- GanttColumnGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttColumnGroupComponent, selector: "kendo-gantt-column-group", inputs: { locked: "locked", lockable: "lockable", hidden: "hidden", sortable: "sortable", media: "media", style: "style", headerStyle: "headerStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", footerClass: "footerClass" }, providers: [
3506
+ GanttColumnGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttColumnGroupComponent, isStandalone: true, selector: "kendo-gantt-column-group", inputs: { locked: "locked", lockable: "lockable", hidden: "hidden", sortable: "sortable", media: "media", style: "style", headerStyle: "headerStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", footerClass: "footerClass" }, providers: [
3511
3507
  {
3512
3508
  provide: GanttColumnBase,
3513
3509
  useExisting: forwardRef(() => GanttColumnGroupComponent)
@@ -3523,7 +3519,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3523
3519
  provide: GanttColumnBase,
3524
3520
  useExisting: forwardRef(() => GanttColumnGroupComponent)
3525
3521
  }
3526
- ]
3522
+ ],
3523
+ standalone: true
3527
3524
  }]
3528
3525
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: GanttColumnBase, decorators: [{
3529
3526
  type: SkipSelf
@@ -3610,7 +3607,7 @@ class GanttSpanColumnComponent extends SpanColumnComponent {
3610
3607
  }
3611
3608
  }
3612
3609
  GanttSpanColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSpanColumnComponent, deps: [{ token: OptionChangesService }, { token: GanttColumnBase, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
3613
- GanttSpanColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttSpanColumnComponent, selector: "kendo-gantt-span-column", inputs: { locked: "locked", lockable: "lockable", editable: "editable", hidden: "hidden", media: "media", style: "style", headerStyle: "headerStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", footerClass: "footerClass" }, providers: [
3610
+ GanttSpanColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttSpanColumnComponent, isStandalone: true, selector: "kendo-gantt-span-column", inputs: { locked: "locked", lockable: "lockable", editable: "editable", hidden: "hidden", media: "media", style: "style", headerStyle: "headerStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", footerClass: "footerClass" }, providers: [
3614
3611
  {
3615
3612
  provide: GanttColumnBase,
3616
3613
  useExisting: forwardRef(() => GanttSpanColumnComponent)
@@ -3626,7 +3623,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3626
3623
  provide: GanttColumnBase,
3627
3624
  useExisting: forwardRef(() => GanttSpanColumnComponent)
3628
3625
  }
3629
- ]
3626
+ ],
3627
+ standalone: true
3630
3628
  }]
3631
3629
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: GanttColumnBase, decorators: [{
3632
3630
  type: SkipSelf
@@ -3768,11 +3766,12 @@ class GanttTaskTemplateDirective {
3768
3766
  }
3769
3767
  }
3770
3768
  GanttTaskTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3771
- GanttTaskTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskTemplateDirective, selector: "[kendoGanttTaskTemplate]", ngImport: i0 });
3769
+ GanttTaskTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskTemplateDirective, isStandalone: true, selector: "[kendoGanttTaskTemplate]", ngImport: i0 });
3772
3770
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskTemplateDirective, decorators: [{
3773
3771
  type: Directive,
3774
3772
  args: [{
3775
- selector: '[kendoGanttTaskTemplate]'
3773
+ selector: '[kendoGanttTaskTemplate]',
3774
+ standalone: true
3776
3775
  }]
3777
3776
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3778
3777
  type: Optional
@@ -3787,619 +3786,263 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3787
3786
  * - `elementWidth`&mdash;The current summary task wrapper element's calculated width in pixels based on its start and end date.
3788
3787
  * Use it as an alias for a template variable by utilizing the `let-elementWidth="elementWidth"` syntax.
3789
3788
  * Useful for calculations related to rendering custom elements representing the task progress.
3790
- *
3791
- * @example
3792
- * ```ts-preview
3793
- * _@Component({
3794
- * selector: 'my-app',
3795
- * template: `
3796
- * <kendo-gantt [kendoGanttHierarchyBinding]="data">
3797
- * <ng-template kendoGanttSummaryTaskTemplate let-dataItem let-elementWidth="elementWidth">
3798
- * <div [style]="'color: white; font-size: 8px;'">
3799
- * {{ dataItem.title }} - {{ dataItem.completionRatio * 100 }}% complete; width: {{ elementWidth }}
3800
- * </div>
3801
- * </ng-template>
3802
- * </kendo-gantt>
3803
- * `
3804
- * })
3805
- * class AppComponent {
3806
- * public data: any[] = sampleTasks;
3807
- * }
3808
- * ```
3809
- */
3810
- class GanttSummaryTaskTemplateDirective {
3811
- constructor(templateRef) {
3812
- this.templateRef = templateRef;
3813
- }
3814
- }
3815
- GanttSummaryTaskTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3816
- GanttSummaryTaskTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttSummaryTaskTemplateDirective, selector: "[kendoGanttSummaryTaskTemplate]", ngImport: i0 });
3817
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskTemplateDirective, decorators: [{
3818
- type: Directive,
3819
- args: [{
3820
- selector: '[kendoGanttSummaryTaskTemplate]'
3821
- }]
3822
- }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3823
- type: Optional
3824
- }] }]; } });
3825
-
3826
- /**
3827
- * Represents a template that defines the text content section of the task component.
3828
- * To define the template, nest an `<ng-template>` tag
3829
- * with the `kendoGanttTaskContentTemplate` directive inside the `<kendo-gantt>` tag.
3830
- *
3831
- * The template context is set to the current data item.
3832
- *
3833
- * @example
3834
- * ```ts-preview
3835
- * _@Component({
3836
- * selector: 'my-app',
3837
- * template: `
3838
- * <kendo-gantt [kendoGanttHierarchyBinding]="data">
3839
- * <ng-template kendoGanttTaskContentTemplate let-dataItem>
3840
- * {{ dataItem.title }} - {{ dataItem.completionRatio * 100 }}% complete
3841
- * </ng-template>
3842
- * </kendo-gantt>
3843
- * `
3844
- * })
3845
- * class AppComponent {
3846
- * public data: any[] = sampleTasks;
3847
- * }
3848
- * ```
3849
- */
3850
- class GanttTaskContentTemplateDirective {
3851
- constructor(templateRef) {
3852
- this.templateRef = templateRef;
3853
- }
3854
- }
3855
- GanttTaskContentTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskContentTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3856
- GanttTaskContentTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskContentTemplateDirective, selector: "[kendoGanttTaskContentTemplate]", ngImport: i0 });
3857
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskContentTemplateDirective, decorators: [{
3858
- type: Directive,
3859
- args: [{
3860
- selector: '[kendoGanttTaskContentTemplate]'
3861
- }]
3862
- }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3863
- type: Optional
3864
- }] }]; } });
3865
-
3866
- /**
3867
- * Represents the toolbar template of the Gantt.
3868
- *
3869
- * The template context has the following field:
3870
- * - `position`&mdash;The position at which the toolbar template is rendered. The possible values are `'top'` and `'bottom'`.
3871
- *
3872
- * @example
3873
- * ```ts-preview
3874
- *
3875
- * _@Component({
3876
- * selector: 'my-app',
3877
- * template: `
3878
- * <div class="example-config">
3879
- * <input type="radio" kendoRadioButton id="top" name="position" value="top" checked (click)="positionChange($event)"/>
3880
- * <kendo-label class="k-radio-label" for="top">Top</kendo-label><br/>
3881
- * <input type="radio" kendoRadioButton id="bottom" name="position" value="bottom" (click)="positionChange($event)"/>
3882
- * <kendo-label class="k-radio-label" for="bottom">Bottom</kendo-label><br/>
3883
- * <input type="radio" kendoRadioButton id="both" name="position" value="both" (click)="positionChange($event)"/>
3884
- * <kendo-label class="k-radio-label" for="both">Both</kendo-label><br/>
3885
- * </div>
3886
- * <kendo-gantt [[kendoGanttHierarchyBinding]="data"]="data" [style.height.px]="400">
3887
- * <ng-template kendoGanttToolbarTemplate [position]="position" let-position="position">
3888
- * <button kendoButton (click)="onClick()">Custom action</button>
3889
- * </ng-template>
3890
- * </kendo-gantt>
3891
- * `
3892
- * })
3893
- *
3894
- * class AppComponent {
3895
- * public position: 'top' | 'bottom' | 'both' = 'top';
3896
- *
3897
- * public data = [{
3898
- * id: 7,
3899
- * title: "Software validation, research and implementation",
3900
- * orderId: 0,
3901
- * start: new Date("2014-06-02T00:00:00.000Z"),
3902
- * end: new Date("2014-07-12T00:00:00.000Z"),
3903
- * completionRatio: 0.45708333333333334,
3904
- * isExpanded: true,
3905
- * children: [{
3906
- * id: 11,
3907
- * title: "Research",
3908
- * orderId: 1,
3909
- * start: new Date("2014-06-02T00:00:00.000Z"),
3910
- * end: new Date("2014-06-07T00:00:00.000Z"),
3911
- * completionRatio: 0.5766666666666667,
3912
- * isExpanded: true,
3913
- * children: [{
3914
- * id: 19,
3915
- * title: "Validation with Customers",
3916
- * orderId: 0,
3917
- * start: new Date("2014-06-02T00:00:00.000Z"),
3918
- * end: new Date("2014-06-04T00:00:00.000Z"),
3919
- * completionRatio: 0.25,
3920
- * isExpanded: true
3921
- * },
3922
- * {
3923
- * id: 20,
3924
- * title: "Market Research",
3925
- * orderId: 1,
3926
- * start: new Date("2014-06-02T00:00:00.000Z"),
3927
- * end: new Date("2014-06-03T02:00:00.000Z"),
3928
- * completionRatio: 0.82,
3929
- * isExpanded: true
3930
- * },
3931
- * {
3932
- * id: 39,
3933
- * title: "Functional and Technical Specification",
3934
- * orderId: 2,
3935
- * start: new Date("2014-06-04T00:00:00.000Z"),
3936
- * end: new Date("2014-06-07T00:00:00.000Z"),
3937
- * completionRatio: 0.66,
3938
- * isExpanded: true
3939
- * }]
3940
- * }]
3941
- * };
3942
- *
3943
- * public positionChange(event: MouseEvent): void {
3944
- * this.position = event.target['defaultValue'];
3945
- * }
3946
- *
3947
- * public onClick(): void {
3948
- * console.log("button was clicked");
3949
- * }
3950
- * }
3951
- *
3952
- * ```
3953
- */
3954
- class ToolbarTemplateDirective {
3955
- constructor(templateRef) {
3956
- this.templateRef = templateRef;
3957
- this._position = "top";
3958
- }
3959
- /**
3960
- * Defines the Gantt Toolbar that will use this template.
3961
- *
3962
- * The possible values are:
3963
- * - `top`&mdash;The template will be rendered in the top toolbar (if present) only.
3964
- * - `bottom`&mdash;The template will be rendered in the bottom toolbar (if present) only.
3965
- * - `both`&mdash;The template will be rendered in both toolbars (if present).
3966
- */
3967
- set position(position) {
3968
- this._position = position;
3969
- }
3970
- get position() {
3971
- return this._position;
3972
- }
3973
- }
3974
- ToolbarTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3975
- ToolbarTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ToolbarTemplateDirective, selector: "[kendoGanttToolbarTemplate]", inputs: { position: "position" }, ngImport: i0 });
3976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarTemplateDirective, decorators: [{
3977
- type: Directive,
3978
- args: [{
3979
- selector: '[kendoGanttToolbarTemplate]'
3980
- }]
3981
- }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3982
- type: Optional
3983
- }] }]; }, propDecorators: { position: [{
3984
- type: Input,
3985
- args: ['position']
3986
- }] } });
3987
-
3988
- /**
3989
- * The base class for the timeline view components of the Gantt.
3990
- */
3991
- class ViewBase {
3992
- /**
3993
- *
3994
- * @hidden
3995
- */
3996
- constructor(optionChangesService, dependencyDomService) {
3997
- this.optionChangesService = optionChangesService;
3998
- this.dependencyDomService = dependencyDomService;
3999
- /**
4000
- * The width of the time slot headers. Values are treated as pixels.
4001
- *
4002
- * @default 100
4003
- */
4004
- this.slotWidth = 100;
4005
- }
4006
- ngOnChanges(changes) {
4007
- if (anyChanged(['slotWidth'], changes)) {
4008
- this.optionChangesService.notifyColumnChanges();
4009
- this.dependencyDomService.notifyChanges();
4010
- }
4011
- if (anyChanged(['timelineHeadersDateFormat'], changes)) {
4012
- this.optionChangesService.notifyDateFormatChanges();
4013
- }
4014
- }
4015
- }
4016
- ViewBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewBase, deps: [{ token: OptionChangesService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Directive });
4017
- ViewBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ViewBase, selector: "kendo-gantt-view-base", inputs: { slotWidth: "slotWidth", timelineHeadersDateFormat: "timelineHeadersDateFormat", currentTimeMarker: "currentTimeMarker" }, usesOnChanges: true, ngImport: i0 });
4018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewBase, decorators: [{
4019
- type: Directive,
4020
- args: [{
4021
- // eslint-disable-next-line @angular-eslint/directive-selector
4022
- selector: 'kendo-gantt-view-base'
4023
- }]
4024
- }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; }, propDecorators: { slotWidth: [{
4025
- type: Input
4026
- }], timelineHeadersDateFormat: [{
4027
- type: Input
4028
- }], currentTimeMarker: [{
4029
- type: Input
4030
- }] } });
4031
-
4032
- /**
4033
- * @hidden
4034
- */
4035
- const getEditItem = (dataItem, data, mapper) => {
4036
- const treeListDataItem = data.find(item => mapper.extractFromTask(item.data, 'id') === mapper.extractFromTask(dataItem, 'id'));
4037
- return mapPath(treeListDataItem);
4038
- };
4039
- const mapPath = (item) => ({
4040
- dataItem: item.data,
4041
- parent: item.parent.data ? mapPath(item.parent) : null
4042
- });
4043
-
4044
- /**
4045
- * @hidden
3789
+ *
3790
+ * @example
3791
+ * ```ts-preview
3792
+ * _@Component({
3793
+ * selector: 'my-app',
3794
+ * template: `
3795
+ * <kendo-gantt [kendoGanttHierarchyBinding]="data">
3796
+ * <ng-template kendoGanttSummaryTaskTemplate let-dataItem let-elementWidth="elementWidth">
3797
+ * <div [style]="'color: white; font-size: 8px;'">
3798
+ * {{ dataItem.title }} - {{ dataItem.completionRatio * 100 }}% complete; width: {{ elementWidth }}
3799
+ * </div>
3800
+ * </ng-template>
3801
+ * </kendo-gantt>
3802
+ * `
3803
+ * })
3804
+ * class AppComponent {
3805
+ * public data: any[] = sampleTasks;
3806
+ * }
3807
+ * ```
4046
3808
  */
4047
- class ToolbarNavigationService {
4048
- constructor(renderer) {
4049
- this.renderer = renderer;
4050
- this.focusIndex = 0;
4051
- }
4052
- updateFocus() {
4053
- this.focusableContent.forEach(el => {
4054
- this.renderer.setAttribute(el, 'tabindex', '-1');
4055
- });
4056
- this.renderer.setAttribute(this.focusableContent[this.focusIndex], 'tabindex', '0');
4057
- this.focusableContent[this.focusIndex].focus();
3809
+ class GanttSummaryTaskTemplateDirective {
3810
+ constructor(templateRef) {
3811
+ this.templateRef = templateRef;
4058
3812
  }
4059
3813
  }
4060
- ToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
4061
- ToolbarNavigationServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService });
4062
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService, decorators: [{
4063
- type: Injectable
4064
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
3814
+ GanttSummaryTaskTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3815
+ GanttSummaryTaskTemplateDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttSummaryTaskTemplateDirective, isStandalone: true, selector: "[kendoGanttSummaryTaskTemplate]", ngImport: i0 });
3816
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskTemplateDirective, decorators: [{
3817
+ type: Directive,
3818
+ args: [{
3819
+ selector: '[kendoGanttSummaryTaskTemplate]',
3820
+ standalone: true
3821
+ }]
3822
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3823
+ type: Optional
3824
+ }] }]; } });
4065
3825
 
4066
3826
  /**
4067
- * The Gantt ViewSelector component. Shows the currently active view type, and allows switching to another view type.
3827
+ * Represents a template that defines the text content section of the task component.
3828
+ * To define the template, nest an `<ng-template>` tag
3829
+ * with the `kendoGanttTaskContentTemplate` directive inside the `<kendo-gantt>` tag.
3830
+ *
3831
+ * The template context is set to the current data item.
3832
+ *
3833
+ * @example
3834
+ * ```ts-preview
3835
+ * _@Component({
3836
+ * selector: 'my-app',
3837
+ * template: `
3838
+ * <kendo-gantt [kendoGanttHierarchyBinding]="data">
3839
+ * <ng-template kendoGanttTaskContentTemplate let-dataItem>
3840
+ * {{ dataItem.title }} - {{ dataItem.completionRatio * 100 }}% complete
3841
+ * </ng-template>
3842
+ * </kendo-gantt>
3843
+ * `
3844
+ * })
3845
+ * class AppComponent {
3846
+ * public data: any[] = sampleTasks;
3847
+ * }
3848
+ * ```
4068
3849
  */
4069
- class ViewSelectorComponent {
4070
- constructor(localizationService) {
4071
- this.localizationService = localizationService;
4072
- this.hostClass = true;
4073
- /**
4074
- * The currently active view type.
4075
- * @default 'week'
4076
- */
4077
- this.activeView = 'week';
4078
- /**
4079
- * Fires each time the user selects a different view type. The event data contains the type of the newly selected view.
4080
- */
4081
- this.activeViewChange = new EventEmitter();
4082
- }
4083
- /**
4084
- * @hidden
4085
- */
4086
- onClick(viewType) {
4087
- if (viewType !== this.activeView) {
4088
- this.activeViewChange.emit(viewType);
4089
- }
4090
- }
4091
- /**
4092
- * @hidden
4093
- */
4094
- getViewTypeText(viewType) {
4095
- return this.localizationService.get(`${viewType}ViewText`);
4096
- }
4097
- /**
4098
- * @hidden
4099
- */
4100
- onActiveViewChange(event) {
4101
- this.activeViewChange.emit(event.target.value);
3850
+ class GanttTaskContentTemplateDirective {
3851
+ constructor(templateRef) {
3852
+ this.templateRef = templateRef;
4102
3853
  }
4103
3854
  }
4104
- ViewSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewSelectorComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4105
- ViewSelectorComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ViewSelectorComponent, selector: "kendo-gantt-view-selector", inputs: { views: "views", activeView: "activeView" }, outputs: { activeViewChange: "activeViewChange" }, host: { properties: { "class.k-gantt-views-wrapper": "this.hostClass" } }, ngImport: i0, template: `
4106
- <select
4107
- class="k-dropdownlist k-picker k-rounded-md k-views-dropdown"
4108
- aria-label="View Selector"
4109
- [value]="activeView"
4110
- (change)="onActiveViewChange($event)">
4111
- <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
4112
- </select>
4113
- <kendo-buttongroup class="k-gantt-views" selection="single" [navigable]="false">
4114
- <button *ngFor="let view of views"
4115
- kendoButton
4116
- type="button"
4117
- [selected]="view === activeView"
4118
- (click)="onClick(view)">{{getViewTypeText(view)}}</button>
4119
- </kendo-buttongroup>
4120
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.ButtonGroupComponent, selector: "kendo-buttongroup", inputs: ["disabled", "selection", "width", "tabIndex", "navigable"], outputs: ["navigate"], exportAs: ["kendoButtonGroup"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
4121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewSelectorComponent, decorators: [{
4122
- type: Component,
3855
+ GanttTaskContentTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskContentTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3856
+ GanttTaskContentTemplateDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskContentTemplateDirective, isStandalone: true, selector: "[kendoGanttTaskContentTemplate]", ngImport: i0 });
3857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskContentTemplateDirective, decorators: [{
3858
+ type: Directive,
4123
3859
  args: [{
4124
- selector: 'kendo-gantt-view-selector',
4125
- template: `
4126
- <select
4127
- class="k-dropdownlist k-picker k-rounded-md k-views-dropdown"
4128
- aria-label="View Selector"
4129
- [value]="activeView"
4130
- (change)="onActiveViewChange($event)">
4131
- <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
4132
- </select>
4133
- <kendo-buttongroup class="k-gantt-views" selection="single" [navigable]="false">
4134
- <button *ngFor="let view of views"
4135
- kendoButton
4136
- type="button"
4137
- [selected]="view === activeView"
4138
- (click)="onClick(view)">{{getViewTypeText(view)}}</button>
4139
- </kendo-buttongroup>
4140
- `
3860
+ selector: '[kendoGanttTaskContentTemplate]',
3861
+ standalone: true
4141
3862
  }]
4142
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; }, propDecorators: { hostClass: [{
4143
- type: HostBinding,
4144
- args: ['class.k-gantt-views-wrapper']
4145
- }], views: [{
4146
- type: Input
4147
- }], activeView: [{
4148
- type: Input
4149
- }], activeViewChange: [{
4150
- type: Output
4151
- }] } });
3863
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3864
+ type: Optional
3865
+ }] }]; } });
4152
3866
 
4153
3867
  /**
4154
- * The UI for adding new items to the Gantt.
4155
- * Use it within a toolbar template to provide a custom icon or list of options.
4156
- */
4157
- class GanttAddTaskComponent {
4158
- constructor(localizationService, editService, ngZone) {
4159
- this.localizationService = localizationService;
4160
- this.editService = editService;
4161
- this.ngZone = ngZone;
4162
- /**
4163
- * Sets the data of the DropDownButton.
4164
- * > The data has to be provided in an array-like list.
4165
- */
4166
- this.data = [{
4167
- text: this.getText('addChildText'),
4168
- type: 'addChild'
4169
- }, {
4170
- text: this.getText('addAboveText'),
4171
- type: 'addAbove'
4172
- }, {
4173
- text: this.getText('addBelowText'),
4174
- type: 'addBelow'
4175
- }];
4176
- /**
4177
- * Defines the name of an existing icon in a Kendo UI theme.
4178
- * @default 'plus'
4179
- */
4180
- this.icon = 'plus';
4181
- /**
4182
- * Defines an [`SVGIcon`](slug:api_icons_svgicon) icon to be rendered inside the `GanttAddTaskComponent` using
4183
- * a [`KendoSVGIcon`](slug:api_icons_svgiconcomponent) component.
4184
- */
4185
- this.svgIcon = plusIcon;
4186
- }
4187
- /**
4188
- * @hidden
4189
- */
4190
- getText(message) {
4191
- return this.localizationService.get(message);
4192
- }
4193
- /**
4194
- * @hidden
4195
- */
4196
- handleOpen(e) {
4197
- if (!this.editService.getSelectedItem()) {
4198
- e.preventDefault();
4199
- }
3868
+ * Represents the toolbar template of the Gantt.
3869
+ *
3870
+ * The template context has the following field:
3871
+ * - `position`&mdash;The position at which the toolbar template is rendered. The possible values are `'top'` and `'bottom'`.
3872
+ *
3873
+ * @example
3874
+ * ```ts-preview
3875
+ *
3876
+ * _@Component({
3877
+ * selector: 'my-app',
3878
+ * template: `
3879
+ * <div class="example-config">
3880
+ * <input type="radio" kendoRadioButton id="top" name="position" value="top" checked (click)="positionChange($event)"/>
3881
+ * <kendo-label class="k-radio-label" for="top">Top</kendo-label><br/>
3882
+ * <input type="radio" kendoRadioButton id="bottom" name="position" value="bottom" (click)="positionChange($event)"/>
3883
+ * <kendo-label class="k-radio-label" for="bottom">Bottom</kendo-label><br/>
3884
+ * <input type="radio" kendoRadioButton id="both" name="position" value="both" (click)="positionChange($event)"/>
3885
+ * <kendo-label class="k-radio-label" for="both">Both</kendo-label><br/>
3886
+ * </div>
3887
+ * <kendo-gantt [[kendoGanttHierarchyBinding]="data"]="data" [style.height.px]="400">
3888
+ * <ng-template kendoGanttToolbarTemplate [position]="position" let-position="position">
3889
+ * <button kendoButton (click)="onClick()">Custom action</button>
3890
+ * </ng-template>
3891
+ * </kendo-gantt>
3892
+ * `
3893
+ * })
3894
+ *
3895
+ * class AppComponent {
3896
+ * public position: 'top' | 'bottom' | 'both' = 'top';
3897
+ *
3898
+ * public data = [{
3899
+ * id: 7,
3900
+ * title: "Software validation, research and implementation",
3901
+ * orderId: 0,
3902
+ * start: new Date("2014-06-02T00:00:00.000Z"),
3903
+ * end: new Date("2014-07-12T00:00:00.000Z"),
3904
+ * completionRatio: 0.45708333333333334,
3905
+ * isExpanded: true,
3906
+ * children: [{
3907
+ * id: 11,
3908
+ * title: "Research",
3909
+ * orderId: 1,
3910
+ * start: new Date("2014-06-02T00:00:00.000Z"),
3911
+ * end: new Date("2014-06-07T00:00:00.000Z"),
3912
+ * completionRatio: 0.5766666666666667,
3913
+ * isExpanded: true,
3914
+ * children: [{
3915
+ * id: 19,
3916
+ * title: "Validation with Customers",
3917
+ * orderId: 0,
3918
+ * start: new Date("2014-06-02T00:00:00.000Z"),
3919
+ * end: new Date("2014-06-04T00:00:00.000Z"),
3920
+ * completionRatio: 0.25,
3921
+ * isExpanded: true
3922
+ * },
3923
+ * {
3924
+ * id: 20,
3925
+ * title: "Market Research",
3926
+ * orderId: 1,
3927
+ * start: new Date("2014-06-02T00:00:00.000Z"),
3928
+ * end: new Date("2014-06-03T02:00:00.000Z"),
3929
+ * completionRatio: 0.82,
3930
+ * isExpanded: true
3931
+ * },
3932
+ * {
3933
+ * id: 39,
3934
+ * title: "Functional and Technical Specification",
3935
+ * orderId: 2,
3936
+ * start: new Date("2014-06-04T00:00:00.000Z"),
3937
+ * end: new Date("2014-06-07T00:00:00.000Z"),
3938
+ * completionRatio: 0.66,
3939
+ * isExpanded: true
3940
+ * }]
3941
+ * }]
3942
+ * };
3943
+ *
3944
+ * public positionChange(event: MouseEvent): void {
3945
+ * this.position = event.target['defaultValue'];
3946
+ * }
3947
+ *
3948
+ * public onClick(): void {
3949
+ * console.log("button was clicked");
3950
+ * }
3951
+ * }
3952
+ *
3953
+ * ```
3954
+ */
3955
+ class ToolbarTemplateDirective {
3956
+ constructor(templateRef) {
3957
+ this.templateRef = templateRef;
3958
+ this._position = "top";
4200
3959
  }
4201
3960
  /**
4202
- * @hidden
3961
+ * Defines the Gantt Toolbar that will use this template.
3962
+ *
3963
+ * The possible values are:
3964
+ * - `top`&mdash;The template will be rendered in the top toolbar (if present) only.
3965
+ * - `bottom`&mdash;The template will be rendered in the bottom toolbar (if present) only.
3966
+ * - `both`&mdash;The template will be rendered in both toolbars (if present).
4203
3967
  */
4204
- handleMouseClick() {
4205
- if (!this.editService.getSelectedItem()) {
4206
- this.ngZone.run(() => {
4207
- this.editService.addEvent.next({
4208
- selectedItem: null,
4209
- actionType: 'addTask'
4210
- });
4211
- });
4212
- }
3968
+ set position(position) {
3969
+ this._position = position;
4213
3970
  }
4214
- /**
4215
- * @hidden
4216
- */
4217
- handleItemClick(e) {
4218
- this.editService.addEvent.next({
4219
- actionType: e.type,
4220
- selectedItem: null
4221
- });
3971
+ get position() {
3972
+ return this._position;
4222
3973
  }
4223
3974
  }
4224
- GanttAddTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttAddTaskComponent, deps: [{ token: i1$1.LocalizationService }, { token: EditService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
4225
- GanttAddTaskComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttAddTaskComponent, selector: "kendo-gantt-add-task", inputs: { data: "data", icon: "icon", svgIcon: "svgIcon" }, ngImport: i0, template: `
4226
- <kendo-dropdownbutton
4227
- [data]="data"
4228
- [icon]="icon"
4229
- [svgIcon]="svgIcon"
4230
- [kendoEventsOutsideAngular]="{ click: handleMouseClick }"
4231
- [scope]="this"
4232
- (itemClick)="handleItemClick($event)"
4233
- (open)="handleOpen($event)">
4234
- {{ getText('addTaskText') }}
4235
- </kendo-dropdownbutton>
4236
- `, isInline: true, dependencies: [{ kind: "directive", type: i11.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i4.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }] });
4237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttAddTaskComponent, decorators: [{
4238
- type: Component,
3975
+ ToolbarTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
3976
+ ToolbarTemplateDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ToolbarTemplateDirective, isStandalone: true, selector: "[kendoGanttToolbarTemplate]", inputs: { position: "position" }, ngImport: i0 });
3977
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarTemplateDirective, decorators: [{
3978
+ type: Directive,
4239
3979
  args: [{
4240
- selector: 'kendo-gantt-add-task',
4241
- template: `
4242
- <kendo-dropdownbutton
4243
- [data]="data"
4244
- [icon]="icon"
4245
- [svgIcon]="svgIcon"
4246
- [kendoEventsOutsideAngular]="{ click: handleMouseClick }"
4247
- [scope]="this"
4248
- (itemClick)="handleItemClick($event)"
4249
- (open)="handleOpen($event)">
4250
- {{ getText('addTaskText') }}
4251
- </kendo-dropdownbutton>
4252
- `
3980
+ selector: '[kendoGanttToolbarTemplate]',
3981
+ standalone: true
4253
3982
  }]
4254
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: EditService }, { type: i0.NgZone }]; }, propDecorators: { data: [{
4255
- type: Input
4256
- }], icon: [{
4257
- type: Input
4258
- }], svgIcon: [{
4259
- type: Input
3983
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3984
+ type: Optional
3985
+ }] }]; }, propDecorators: { position: [{
3986
+ type: Input,
3987
+ args: ['position']
4260
3988
  }] } });
4261
3989
 
4262
3990
  /**
4263
- * @hidden
3991
+ * The base class for the timeline view components of the Gantt.
4264
3992
  */
4265
- class ToolbarComponent {
4266
- constructor(hostEl, navigationService) {
4267
- this.hostEl = hostEl;
4268
- this.navigationService = navigationService;
4269
- this.context = {};
4270
- this.role = 'toolbar';
4271
- this.toolbarSizingClass = true;
4272
- this.activeViewChange = new EventEmitter();
4273
- }
4274
- clickHandler(ev) {
4275
- if (this.navigable) {
4276
- const closestFocusable = closest(ev.target, isFocusable);
4277
- const targetIndex = this.navigationService.focusableContent.indexOf(closestFocusable);
4278
- if (targetIndex > -1) {
4279
- this.navigationService.focusIndex = targetIndex;
4280
- }
4281
- this.navigationService.updateFocus();
4282
- }
4283
- }
4284
- arrowLeftListener() {
4285
- if (this.navigable && isDocumentAvailable()) {
4286
- this.navigationService.focusIndex--;
4287
- if (this.navigationService.focusIndex < 0) {
4288
- this.navigationService.focusIndex = this.navigationService.focusableContent.length - 1;
4289
- }
4290
- this.navigationService.updateFocus();
4291
- }
3993
+ class ViewBase {
3994
+ /**
3995
+ *
3996
+ * @hidden
3997
+ */
3998
+ constructor(optionChangesService, dependencyDomService) {
3999
+ this.optionChangesService = optionChangesService;
4000
+ this.dependencyDomService = dependencyDomService;
4001
+ /**
4002
+ * The width of the time slot headers. Values are treated as pixels.
4003
+ *
4004
+ * @default 100
4005
+ */
4006
+ this.slotWidth = 100;
4292
4007
  }
4293
- arrowRightListener() {
4294
- if (this.navigable && isDocumentAvailable()) {
4295
- this.navigationService.focusIndex++;
4296
- if (this.navigationService.focusIndex >= this.navigationService.focusableContent.length) {
4297
- this.navigationService.focusIndex = 0;
4298
- }
4299
- this.navigationService.updateFocus();
4008
+ ngOnChanges(changes) {
4009
+ if (anyChanged(['slotWidth'], changes)) {
4010
+ this.optionChangesService.notifyColumnChanges();
4011
+ this.dependencyDomService.notifyChanges();
4300
4012
  }
4301
- }
4302
- set position(value) {
4303
- this.context.position = this._position = value;
4304
- }
4305
- get position() {
4306
- return this._position;
4307
- }
4308
- get toolbarTemplateRef() {
4309
- return this.toolbarTemplate ? this.toolbarTemplate.templateRef : undefined;
4310
- }
4311
- get renderTemplate() {
4312
- const ganttToolbarTemplate = this.toolbarTemplate;
4313
- const templatePosition = ganttToolbarTemplate ? ganttToolbarTemplate.position : null;
4314
- return ganttToolbarTemplate && (templatePosition === 'both' || templatePosition === this.position);
4315
- }
4316
- handleViewChange(view) {
4317
- this.activeViewChange.emit(view);
4318
- }
4319
- ngAfterViewInit() {
4320
- if (isDocumentAvailable()) {
4321
- const focusableElements = Array.from(this.hostEl.nativeElement.querySelectorAll(focusableSelector) || [])
4322
- .filter(el => isVisible(el));
4323
- if (focusableElements.length) {
4324
- this.navigationService.focusableContent = focusableElements;
4325
- }
4013
+ if (anyChanged(['timelineHeadersDateFormat'], changes)) {
4014
+ this.optionChangesService.notifyDateFormatChanges();
4326
4015
  }
4327
4016
  }
4328
4017
  }
4329
- ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ElementRef }, { token: ToolbarNavigationService }], target: i0.ɵɵFactoryTarget.Component });
4330
- ToolbarComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolbarComponent, selector: "kendo-gantt-toolbar", inputs: { showAddTask: "showAddTask", showViewSelector: "showViewSelector", views: "views", activeView: "activeView", toolbarTemplate: "toolbarTemplate", navigable: "navigable", position: "position" }, outputs: { activeViewChange: "activeViewChange" }, host: { listeners: { "click": "clickHandler($event)", "keydown.arrowleft": "arrowLeftListener($event)", "keydown.arrowright": "arrowRightListener($event)" }, properties: { "attr.role": "this.role", "class.k-toolbar-md": "this.toolbarSizingClass" } }, providers: [ToolbarNavigationService], ngImport: i0, template: `
4331
- <ng-container *ngIf="!renderTemplate">
4332
- <kendo-gantt-add-task *ngIf="showAddTask"></kendo-gantt-add-task>
4333
- <span class="k-spacer k-toolbar-spacer"></span>
4334
- <kendo-gantt-view-selector
4335
- *ngIf="showViewSelector"
4336
- [views]="views"
4337
- [activeView]="activeView"
4338
- (activeViewChange)="handleViewChange($event)"></kendo-gantt-view-selector>
4339
- </ng-container>
4340
- <ng-template
4341
- *ngIf="renderTemplate"
4342
- [ngTemplateOutlet]="toolbarTemplateRef"
4343
- [ngTemplateOutletContext]="context"
4344
- >
4345
- </ng-template>
4346
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ViewSelectorComponent, selector: "kendo-gantt-view-selector", inputs: ["views", "activeView"], outputs: ["activeViewChange"] }, { kind: "component", type: GanttAddTaskComponent, selector: "kendo-gantt-add-task", inputs: ["data", "icon", "svgIcon"] }] });
4347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarComponent, decorators: [{
4348
- type: Component,
4018
+ ViewBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewBase, deps: [{ token: OptionChangesService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Directive });
4019
+ ViewBasedir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ViewBase, selector: "kendo-gantt-view-base", inputs: { slotWidth: "slotWidth", timelineHeadersDateFormat: "timelineHeadersDateFormat", currentTimeMarker: "currentTimeMarker" }, usesOnChanges: true, ngImport: i0 });
4020
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewBase, decorators: [{
4021
+ type: Directive,
4349
4022
  args: [{
4350
- selector: 'kendo-gantt-toolbar',
4351
- providers: [ToolbarNavigationService],
4352
- template: `
4353
- <ng-container *ngIf="!renderTemplate">
4354
- <kendo-gantt-add-task *ngIf="showAddTask"></kendo-gantt-add-task>
4355
- <span class="k-spacer k-toolbar-spacer"></span>
4356
- <kendo-gantt-view-selector
4357
- *ngIf="showViewSelector"
4358
- [views]="views"
4359
- [activeView]="activeView"
4360
- (activeViewChange)="handleViewChange($event)"></kendo-gantt-view-selector>
4361
- </ng-container>
4362
- <ng-template
4363
- *ngIf="renderTemplate"
4364
- [ngTemplateOutlet]="toolbarTemplateRef"
4365
- [ngTemplateOutletContext]="context"
4366
- >
4367
- </ng-template>
4368
- `
4023
+ // eslint-disable-next-line @angular-eslint/directive-selector
4024
+ selector: 'kendo-gantt-view-base'
4369
4025
  }]
4370
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ToolbarNavigationService }]; }, propDecorators: { role: [{
4371
- type: HostBinding,
4372
- args: ['attr.role']
4373
- }], toolbarSizingClass: [{
4374
- type: HostBinding,
4375
- args: ['class.k-toolbar-md']
4376
- }], clickHandler: [{
4377
- type: HostListener,
4378
- args: ['click', ['$event']]
4379
- }], arrowLeftListener: [{
4380
- type: HostListener,
4381
- args: ['keydown.arrowleft', ['$event']]
4382
- }], arrowRightListener: [{
4383
- type: HostListener,
4384
- args: ['keydown.arrowright', ['$event']]
4385
- }], activeViewChange: [{
4386
- type: Output
4387
- }], showAddTask: [{
4388
- type: Input
4389
- }], showViewSelector: [{
4390
- type: Input
4391
- }], views: [{
4392
- type: Input
4393
- }], activeView: [{
4394
- type: Input
4395
- }], toolbarTemplate: [{
4026
+ }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; }, propDecorators: { slotWidth: [{
4396
4027
  type: Input
4397
- }], navigable: [{
4028
+ }], timelineHeadersDateFormat: [{
4398
4029
  type: Input
4399
- }], position: [{
4030
+ }], currentTimeMarker: [{
4400
4031
  type: Input
4401
4032
  }] } });
4402
4033
 
4034
+ /**
4035
+ * @hidden
4036
+ */
4037
+ const getEditItem = (dataItem, data, mapper) => {
4038
+ const treeListDataItem = data.find(item => mapper.extractFromTask(item.data, 'id') === mapper.extractFromTask(dataItem, 'id'));
4039
+ return mapPath(treeListDataItem);
4040
+ };
4041
+ const mapPath = (item) => ({
4042
+ dataItem: item.data,
4043
+ parent: item.parent.data ? mapPath(item.parent) : null
4044
+ });
4045
+
4403
4046
  /**
4404
4047
  * @hidden
4405
4048
  */
@@ -4484,411 +4127,782 @@ class DependenciesTableComponent {
4484
4127
  this.formGroups.removeAt(selectedIndex);
4485
4128
  }
4486
4129
  }
4487
- DependenciesTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependenciesTableComponent, deps: [{ token: MappingService }, { token: EditService }, { token: GanttLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4488
- DependenciesTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DependenciesTableComponent, selector: "kendo-gantt-dependencies-table", inputs: { tasks: "tasks", dependencies: "dependencies", dependencyType: "dependencyType" }, outputs: { dependenciesChange: "dependenciesChange" }, ngImport: i0, template: `
4489
- <kendo-grid
4490
- [data]="dependencies"
4491
- [selectable]="{ mode: 'single' }"
4492
- [(selectedKeys)]="selectedKeys"
4493
- kendoGridSelectBy
4494
- [height]="275"
4495
- >
4496
- <ng-template kendoGridToolbarTemplate>
4130
+ DependenciesTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependenciesTableComponent, deps: [{ token: MappingService }, { token: EditService }, { token: GanttLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4131
+ DependenciesTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DependenciesTableComponent, isStandalone: true, selector: "kendo-gantt-dependencies-table", inputs: { tasks: "tasks", dependencies: "dependencies", dependencyType: "dependencyType" }, outputs: { dependenciesChange: "dependenciesChange" }, ngImport: i0, template: `
4132
+ <kendo-grid
4133
+ [data]="dependencies"
4134
+ [selectable]="{ mode: 'single' }"
4135
+ [(selectedKeys)]="selectedKeys"
4136
+ kendoGridSelectBy
4137
+ [height]="275"
4138
+ >
4139
+ <ng-template kendoGridToolbarTemplate>
4140
+ <button
4141
+ kendoButton
4142
+ icon="plus"
4143
+ [svgIcon]="plusIcon"
4144
+ (click)="addHandler()"
4145
+ >
4146
+ {{ getText('taskEditingDependenciesAddButtonText') }}
4147
+ </button>
4148
+ <button
4149
+ kendoButton
4150
+ icon="minus"
4151
+ [svgIcon]="minusIcon"
4152
+ [disabled]="selectedKeys.length === 0"
4153
+ (click)="removeHandler()"
4154
+ >
4155
+ {{ getText('taskEditingDependenciesRemoveButtonText') }}
4156
+ </button>
4157
+ </ng-template>
4158
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
4159
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4160
+ <kendo-dropdownlist
4161
+ [data]="tasks"
4162
+ textField="title"
4163
+ valueField="id"
4164
+ [valuePrimitive]="true"
4165
+ [formControl]="getFormControl(rowIndex, column.field)"
4166
+ >
4167
+ </kendo-dropdownlist>
4168
+ </ng-template>
4169
+ </kendo-grid-column>
4170
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
4171
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4172
+ <kendo-dropdownlist
4173
+ [data]="dependencyTypes"
4174
+ textField="type"
4175
+ valueField="id"
4176
+ [valuePrimitive]="true"
4177
+ [formControl]="getFormControl(rowIndex, column.field)"
4178
+ >
4179
+ </kendo-dropdownlist>
4180
+ </ng-template>
4181
+ </kendo-grid-column>
4182
+ </kendo-grid>
4183
+ `, isInline: true, dependencies: [{ kind: "component", type: GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "directive", type: ToolbarTemplateDirective$1, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: ColumnComponent$1, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: CellTemplateDirective$1, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
4184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependenciesTableComponent, decorators: [{
4185
+ type: Component,
4186
+ args: [{
4187
+ selector: 'kendo-gantt-dependencies-table',
4188
+ template: `
4189
+ <kendo-grid
4190
+ [data]="dependencies"
4191
+ [selectable]="{ mode: 'single' }"
4192
+ [(selectedKeys)]="selectedKeys"
4193
+ kendoGridSelectBy
4194
+ [height]="275"
4195
+ >
4196
+ <ng-template kendoGridToolbarTemplate>
4197
+ <button
4198
+ kendoButton
4199
+ icon="plus"
4200
+ [svgIcon]="plusIcon"
4201
+ (click)="addHandler()"
4202
+ >
4203
+ {{ getText('taskEditingDependenciesAddButtonText') }}
4204
+ </button>
4205
+ <button
4206
+ kendoButton
4207
+ icon="minus"
4208
+ [svgIcon]="minusIcon"
4209
+ [disabled]="selectedKeys.length === 0"
4210
+ (click)="removeHandler()"
4211
+ >
4212
+ {{ getText('taskEditingDependenciesRemoveButtonText') }}
4213
+ </button>
4214
+ </ng-template>
4215
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
4216
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4217
+ <kendo-dropdownlist
4218
+ [data]="tasks"
4219
+ textField="title"
4220
+ valueField="id"
4221
+ [valuePrimitive]="true"
4222
+ [formControl]="getFormControl(rowIndex, column.field)"
4223
+ >
4224
+ </kendo-dropdownlist>
4225
+ </ng-template>
4226
+ </kendo-grid-column>
4227
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
4228
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4229
+ <kendo-dropdownlist
4230
+ [data]="dependencyTypes"
4231
+ textField="type"
4232
+ valueField="id"
4233
+ [valuePrimitive]="true"
4234
+ [formControl]="getFormControl(rowIndex, column.field)"
4235
+ >
4236
+ </kendo-dropdownlist>
4237
+ </ng-template>
4238
+ </kendo-grid-column>
4239
+ </kendo-grid>
4240
+ `,
4241
+ standalone: true,
4242
+ imports: [GridComponent, SelectionDirective, ToolbarTemplateDirective$1, ButtonComponent, ColumnComponent$1, CellTemplateDirective$1, DropDownListComponent, ReactiveFormsModule]
4243
+ }]
4244
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; }, propDecorators: { tasks: [{
4245
+ type: Input
4246
+ }], dependencies: [{
4247
+ type: Input
4248
+ }], dependencyType: [{
4249
+ type: Input
4250
+ }], dependenciesChange: [{
4251
+ type: Output
4252
+ }] } });
4253
+
4254
+ /**
4255
+ * @hidden
4256
+ */
4257
+ class TaskFieldsComponent {
4258
+ constructor(mapper, editService, localizationService) {
4259
+ this.mapper = mapper;
4260
+ this.editService = editService;
4261
+ this.localizationService = localizationService;
4262
+ }
4263
+ /**
4264
+ * @hidden
4265
+ */
4266
+ get formGroup() {
4267
+ return this.editService.taskFormGroup;
4268
+ }
4269
+ getText(token) {
4270
+ return this.localizationService.get(token);
4271
+ }
4272
+ }
4273
+ TaskFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TaskFieldsComponent, deps: [{ token: MappingService }, { token: EditService }, { token: GanttLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4274
+ TaskFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TaskFieldsComponent, isStandalone: true, selector: "kendo-gantt-task-fields", ngImport: i0, template: `
4275
+ <form class="k-form k-form-md" [formGroup]="formGroup">
4276
+ <kendo-formfield *ngIf="formGroup.get(mapper.taskFields.title)">
4277
+ <kendo-label [for]="title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4278
+ <input #title kendoTextBox [formControlName]="mapper.taskFields.title" />
4279
+ </kendo-formfield>
4280
+ <div class="k-hstack">
4281
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.start)">
4282
+ <kendo-label [for]="start" [text]="getText('startFieldInputLabel')"></kendo-label>
4283
+ <kendo-datetimepicker #start [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4284
+ </kendo-formfield>
4285
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4286
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.end)">
4287
+ <kendo-label [for]="end" [text]="getText('endFieldInputLabel')"></kendo-label>
4288
+ <kendo-datetimepicker #end [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4289
+ </kendo-formfield>
4290
+ </div>
4291
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.completionRatio)">
4292
+ <kendo-label [for]="completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4293
+ <kendo-numerictextbox
4294
+ #completionRatio
4295
+ [formControlName]="mapper.taskFields.completionRatio"
4296
+ [min]="0"
4297
+ [max]="1"
4298
+ [decimals]="2"
4299
+ format="p2"
4300
+ [step]="0.01"
4301
+ ></kendo-numerictextbox>
4302
+ </kendo-formfield>
4303
+ </form>
4304
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors"] }, { kind: "component", type: LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "directive", type: TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["focusableId", "weekDaysFormat", "showOtherMonthDays", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "title", "subtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "clearButton", "autoFill", "adaptiveMode", "inputAttributes", "defaultTab", "size", "rounded", "fillMode", "headerTemplate", "footerTemplate", "footer"], outputs: ["valueChange", "open", "close", "focus", "blur", "escape"], exportAs: ["kendo-datetimepicker"] }, { kind: "component", type: TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }, { kind: "component", type: NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }] });
4305
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TaskFieldsComponent, decorators: [{
4306
+ type: Component,
4307
+ args: [{
4308
+ selector: 'kendo-gantt-task-fields',
4309
+ template: `
4310
+ <form class="k-form k-form-md" [formGroup]="formGroup">
4311
+ <kendo-formfield *ngIf="formGroup.get(mapper.taskFields.title)">
4312
+ <kendo-label [for]="title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4313
+ <input #title kendoTextBox [formControlName]="mapper.taskFields.title" />
4314
+ </kendo-formfield>
4315
+ <div class="k-hstack">
4316
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.start)">
4317
+ <kendo-label [for]="start" [text]="getText('startFieldInputLabel')"></kendo-label>
4318
+ <kendo-datetimepicker #start [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4319
+ </kendo-formfield>
4320
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4321
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.end)">
4322
+ <kendo-label [for]="end" [text]="getText('endFieldInputLabel')"></kendo-label>
4323
+ <kendo-datetimepicker #end [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4324
+ </kendo-formfield>
4325
+ </div>
4326
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.completionRatio)">
4327
+ <kendo-label [for]="completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4328
+ <kendo-numerictextbox
4329
+ #completionRatio
4330
+ [formControlName]="mapper.taskFields.completionRatio"
4331
+ [min]="0"
4332
+ [max]="1"
4333
+ [decimals]="2"
4334
+ format="p2"
4335
+ [step]="0.01"
4336
+ ></kendo-numerictextbox>
4337
+ </kendo-formfield>
4338
+ </form>
4339
+ `,
4340
+ standalone: true,
4341
+ imports: [ReactiveFormsModule, NgIf, FormFieldComponent, LabelComponent, TextBoxDirective, DateTimePickerComponent, TreeListSpacerComponent, NumericTextBoxComponent]
4342
+ }]
4343
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; } });
4344
+
4345
+ /**
4346
+ * @hidden
4347
+ */
4348
+ class EditDialogComponent {
4349
+ constructor(mapper, editService, cdr, localizationService) {
4350
+ this.mapper = mapper;
4351
+ this.editService = editService;
4352
+ this.cdr = cdr;
4353
+ this.localizationService = localizationService;
4354
+ this.saveIcon = saveIcon;
4355
+ this.cancelIcon = cancelOutlineIcon;
4356
+ this.deleteIcon = trashIcon;
4357
+ }
4358
+ ngOnInit() {
4359
+ this.editService.loadTasks(this.data).subscribe(value => {
4360
+ this.loadedTasks = value;
4361
+ });
4362
+ }
4363
+ get predecessors() {
4364
+ return this.editService.predecessors;
4365
+ }
4366
+ set predecessors(items) {
4367
+ this.editService.predecessors = items;
4368
+ }
4369
+ get successors() {
4370
+ return this.editService.successors;
4371
+ }
4372
+ set successors(items) {
4373
+ this.editService.successors = items;
4374
+ }
4375
+ getText(token) {
4376
+ return this.localizationService.get(token);
4377
+ }
4378
+ getDependencyType(typeId) {
4379
+ return DependencyType[typeId];
4380
+ }
4381
+ handleEditingResult(editResultType) {
4382
+ this.editService.triggerEditEvent(editResultType);
4383
+ }
4384
+ handleTaskDelete() {
4385
+ this.editService.taskDelete.next(this.editService.dataItem);
4386
+ }
4387
+ }
4388
+ EditDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDialogComponent, deps: [{ token: MappingService }, { token: EditService }, { token: i0.ChangeDetectorRef }, { token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4389
+ EditDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditDialogComponent, isStandalone: true, selector: "kendo-gantt-edit-dialog", inputs: { data: "data" }, ngImport: i0, template: `
4390
+ <kendo-dialog
4391
+ [title]="getText('taskEditingDialogTitle')"
4392
+ [width]="575"
4393
+ [height]="470"
4394
+ [autoFocusedElement]="'.k-actions .k-button-solid-primary'"
4395
+ (close)="handleEditingResult('cancel')">
4396
+ <kendo-dialog-messages
4397
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4398
+
4399
+ <kendo-tabstrip [keepTabContent]="true" [style.height.px]="345">
4400
+ <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
4401
+ <ng-template kendoTabContent>
4402
+ <kendo-gantt-task-fields></kendo-gantt-task-fields>
4403
+ </ng-template>
4404
+ </kendo-tabstrip-tab>
4405
+ <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
4406
+ <ng-template kendoTabContent>
4407
+ <kendo-gantt-dependencies-table
4408
+ [tasks]="loadedTasks"
4409
+ [(dependencies)]="predecessors"
4410
+ dependencyType="predecessor"
4411
+ >
4412
+ </kendo-gantt-dependencies-table>
4413
+ </ng-template>
4414
+ </kendo-tabstrip-tab>
4415
+ <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
4416
+ <ng-template kendoTabContent>
4417
+ <kendo-gantt-dependencies-table
4418
+ [tasks]="loadedTasks"
4419
+ [(dependencies)]="successors"
4420
+ dependencyType="successor">
4421
+ </kendo-gantt-dependencies-table>
4422
+ </ng-template>
4423
+ </kendo-tabstrip-tab>
4424
+ </kendo-tabstrip>
4425
+
4426
+ <kendo-dialog-actions layout="start">
4497
4427
  <button
4498
4428
  kendoButton
4499
- icon="plus"
4500
- [svgIcon]="plusIcon"
4501
- (click)="addHandler()"
4429
+ themeColor="primary"
4430
+ icon="save"
4431
+ [svgIcon]="saveIcon"
4432
+ (click)="handleEditingResult('save')"
4502
4433
  >
4503
- {{ getText('taskEditingDependenciesAddButtonText') }}
4434
+ {{ getText('saveButtonText') }}
4504
4435
  </button>
4505
4436
  <button
4506
4437
  kendoButton
4507
- icon="minus"
4508
- [svgIcon]="minusIcon"
4509
- [disabled]="selectedKeys.length === 0"
4510
- (click)="removeHandler()"
4438
+ icon="cancel-outline"
4439
+ [svgIcon]="cancelIcon"
4440
+ (click)="handleEditingResult('cancel')"
4511
4441
  >
4512
- {{ getText('taskEditingDependenciesRemoveButtonText') }}
4442
+ {{ getText('cancelButtonText') }}
4513
4443
  </button>
4514
- </ng-template>
4515
- <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
4516
- <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4517
- <kendo-dropdownlist
4518
- [data]="tasks"
4519
- textField="title"
4520
- valueField="id"
4521
- [valuePrimitive]="true"
4522
- [formControl]="getFormControl(rowIndex, column.field)"
4523
- >
4524
- </kendo-dropdownlist>
4525
- </ng-template>
4526
- </kendo-grid-column>
4527
- <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
4528
- <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4529
- <kendo-dropdownlist
4530
- [data]="dependencyTypes"
4531
- textField="type"
4532
- valueField="id"
4533
- [valuePrimitive]="true"
4534
- [formControl]="getFormControl(rowIndex, column.field)"
4535
- >
4536
- </kendo-dropdownlist>
4537
- </ng-template>
4538
- </kendo-grid-column>
4539
- </kendo-grid>
4540
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i6$1.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i6$1.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "directive", type: i6$1.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i6$1.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i6$1.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: i7.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }] });
4541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependenciesTableComponent, decorators: [{
4444
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4445
+ <button
4446
+ kendoButton
4447
+ themeColor="primary"
4448
+ fillMode="flat"
4449
+ icon="delete"
4450
+ [svgIcon]="deleteIcon"
4451
+ [kendoEventsOutsideAngular]="{
4452
+ click: handleTaskDelete
4453
+ }"
4454
+ [scope]="this"
4455
+ >
4456
+ {{ getText('deleteButtonText') }}
4457
+ </button>
4458
+ </kendo-dialog-actions>
4459
+ </kendo-dialog>
4460
+ `, isInline: true, dependencies: [{ kind: "component", type: DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "directive", type: CustomMessagesComponent$1, selector: "kendo-dialog-messages, kendo-window-messages" }, { kind: "component", type: TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: TaskFieldsComponent, selector: "kendo-gantt-task-fields" }, { kind: "component", type: DependenciesTableComponent, selector: "kendo-gantt-dependencies-table", inputs: ["tasks", "dependencies", "dependencyType"], outputs: ["dependenciesChange"] }, { kind: "component", type: DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
4461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDialogComponent, decorators: [{
4542
4462
  type: Component,
4543
4463
  args: [{
4544
- selector: 'kendo-gantt-dependencies-table',
4464
+ selector: 'kendo-gantt-edit-dialog',
4545
4465
  template: `
4546
- <kendo-grid
4547
- [data]="dependencies"
4548
- [selectable]="{ mode: 'single' }"
4549
- [(selectedKeys)]="selectedKeys"
4550
- kendoGridSelectBy
4551
- [height]="275"
4552
- >
4553
- <ng-template kendoGridToolbarTemplate>
4466
+ <kendo-dialog
4467
+ [title]="getText('taskEditingDialogTitle')"
4468
+ [width]="575"
4469
+ [height]="470"
4470
+ [autoFocusedElement]="'.k-actions .k-button-solid-primary'"
4471
+ (close)="handleEditingResult('cancel')">
4472
+ <kendo-dialog-messages
4473
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4474
+
4475
+ <kendo-tabstrip [keepTabContent]="true" [style.height.px]="345">
4476
+ <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
4477
+ <ng-template kendoTabContent>
4478
+ <kendo-gantt-task-fields></kendo-gantt-task-fields>
4479
+ </ng-template>
4480
+ </kendo-tabstrip-tab>
4481
+ <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
4482
+ <ng-template kendoTabContent>
4483
+ <kendo-gantt-dependencies-table
4484
+ [tasks]="loadedTasks"
4485
+ [(dependencies)]="predecessors"
4486
+ dependencyType="predecessor"
4487
+ >
4488
+ </kendo-gantt-dependencies-table>
4489
+ </ng-template>
4490
+ </kendo-tabstrip-tab>
4491
+ <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
4492
+ <ng-template kendoTabContent>
4493
+ <kendo-gantt-dependencies-table
4494
+ [tasks]="loadedTasks"
4495
+ [(dependencies)]="successors"
4496
+ dependencyType="successor">
4497
+ </kendo-gantt-dependencies-table>
4498
+ </ng-template>
4499
+ </kendo-tabstrip-tab>
4500
+ </kendo-tabstrip>
4501
+
4502
+ <kendo-dialog-actions layout="start">
4554
4503
  <button
4555
4504
  kendoButton
4556
- icon="plus"
4557
- [svgIcon]="plusIcon"
4558
- (click)="addHandler()"
4505
+ themeColor="primary"
4506
+ icon="save"
4507
+ [svgIcon]="saveIcon"
4508
+ (click)="handleEditingResult('save')"
4559
4509
  >
4560
- {{ getText('taskEditingDependenciesAddButtonText') }}
4510
+ {{ getText('saveButtonText') }}
4561
4511
  </button>
4562
4512
  <button
4563
4513
  kendoButton
4564
- icon="minus"
4565
- [svgIcon]="minusIcon"
4566
- [disabled]="selectedKeys.length === 0"
4567
- (click)="removeHandler()"
4514
+ icon="cancel-outline"
4515
+ [svgIcon]="cancelIcon"
4516
+ (click)="handleEditingResult('cancel')"
4568
4517
  >
4569
- {{ getText('taskEditingDependenciesRemoveButtonText') }}
4518
+ {{ getText('cancelButtonText') }}
4570
4519
  </button>
4571
- </ng-template>
4572
- <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
4573
- <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4574
- <kendo-dropdownlist
4575
- [data]="tasks"
4576
- textField="title"
4577
- valueField="id"
4578
- [valuePrimitive]="true"
4579
- [formControl]="getFormControl(rowIndex, column.field)"
4580
- >
4581
- </kendo-dropdownlist>
4582
- </ng-template>
4583
- </kendo-grid-column>
4584
- <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
4585
- <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4586
- <kendo-dropdownlist
4587
- [data]="dependencyTypes"
4588
- textField="type"
4589
- valueField="id"
4590
- [valuePrimitive]="true"
4591
- [formControl]="getFormControl(rowIndex, column.field)"
4592
- >
4593
- </kendo-dropdownlist>
4594
- </ng-template>
4595
- </kendo-grid-column>
4596
- </kendo-grid>
4597
- `
4520
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4521
+ <button
4522
+ kendoButton
4523
+ themeColor="primary"
4524
+ fillMode="flat"
4525
+ icon="delete"
4526
+ [svgIcon]="deleteIcon"
4527
+ [kendoEventsOutsideAngular]="{
4528
+ click: handleTaskDelete
4529
+ }"
4530
+ [scope]="this"
4531
+ >
4532
+ {{ getText('deleteButtonText') }}
4533
+ </button>
4534
+ </kendo-dialog-actions>
4535
+ </kendo-dialog>
4536
+ `,
4537
+ standalone: true,
4538
+ imports: [DialogComponent, CustomMessagesComponent$1, TabStripComponent, TabStripTabComponent, TabContentDirective, TaskFieldsComponent, DependenciesTableComponent, DialogActionsComponent, ButtonComponent, TreeListSpacerComponent, EventsOutsideAngularDirective]
4539
+ }]
4540
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: i0.ChangeDetectorRef }, { type: i1$1.LocalizationService }]; }, propDecorators: { data: [{
4541
+ type: Input
4542
+ }] } });
4543
+
4544
+ /**
4545
+ * @hidden
4546
+ */
4547
+ class ToolbarNavigationService {
4548
+ constructor(renderer) {
4549
+ this.renderer = renderer;
4550
+ this.focusIndex = 0;
4551
+ }
4552
+ updateFocus() {
4553
+ this.focusableContent.forEach(el => {
4554
+ this.renderer.setAttribute(el, 'tabindex', '-1');
4555
+ });
4556
+ this.renderer.setAttribute(this.focusableContent[this.focusIndex], 'tabindex', '0');
4557
+ this.focusableContent[this.focusIndex].focus();
4558
+ }
4559
+ }
4560
+ ToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
4561
+ ToolbarNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService });
4562
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService, decorators: [{
4563
+ type: Injectable
4564
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
4565
+
4566
+ /**
4567
+ * The Gantt ViewSelector component. Shows the currently active view type, and allows switching to another view type.
4568
+ */
4569
+ class ViewSelectorComponent {
4570
+ constructor(localizationService) {
4571
+ this.localizationService = localizationService;
4572
+ this.hostClass = true;
4573
+ /**
4574
+ * The currently active view type.
4575
+ * @default 'week'
4576
+ */
4577
+ this.activeView = 'week';
4578
+ /**
4579
+ * Fires each time the user selects a different view type. The event data contains the type of the newly selected view.
4580
+ */
4581
+ this.activeViewChange = new EventEmitter();
4582
+ }
4583
+ /**
4584
+ * @hidden
4585
+ */
4586
+ onClick(viewType) {
4587
+ if (viewType !== this.activeView) {
4588
+ this.activeViewChange.emit(viewType);
4589
+ }
4590
+ }
4591
+ /**
4592
+ * @hidden
4593
+ */
4594
+ getViewTypeText(viewType) {
4595
+ return this.localizationService.get(`${viewType}ViewText`);
4596
+ }
4597
+ /**
4598
+ * @hidden
4599
+ */
4600
+ onActiveViewChange(event) {
4601
+ this.activeViewChange.emit(event.target.value);
4602
+ }
4603
+ }
4604
+ ViewSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewSelectorComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4605
+ ViewSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ViewSelectorComponent, isStandalone: true, selector: "kendo-gantt-view-selector", inputs: { views: "views", activeView: "activeView" }, outputs: { activeViewChange: "activeViewChange" }, host: { properties: { "class.k-gantt-views-wrapper": "this.hostClass" } }, ngImport: i0, template: `
4606
+ <select
4607
+ class="k-dropdownlist k-picker k-rounded-md k-views-dropdown"
4608
+ aria-label="View Selector"
4609
+ [value]="activeView"
4610
+ (change)="onActiveViewChange($event)">
4611
+ <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
4612
+ </select>
4613
+ <kendo-buttongroup class="k-gantt-views" selection="single" [navigable]="false">
4614
+ <button *ngFor="let view of views"
4615
+ kendoButton
4616
+ type="button"
4617
+ [selected]="view === activeView"
4618
+ (click)="onClick(view)">{{getViewTypeText(view)}}</button>
4619
+ </kendo-buttongroup>
4620
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: ButtonGroupComponent, selector: "kendo-buttongroup", inputs: ["disabled", "selection", "width", "tabIndex", "navigable"], outputs: ["navigate"], exportAs: ["kendoButtonGroup"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
4621
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewSelectorComponent, decorators: [{
4622
+ type: Component,
4623
+ args: [{
4624
+ selector: 'kendo-gantt-view-selector',
4625
+ template: `
4626
+ <select
4627
+ class="k-dropdownlist k-picker k-rounded-md k-views-dropdown"
4628
+ aria-label="View Selector"
4629
+ [value]="activeView"
4630
+ (change)="onActiveViewChange($event)">
4631
+ <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
4632
+ </select>
4633
+ <kendo-buttongroup class="k-gantt-views" selection="single" [navigable]="false">
4634
+ <button *ngFor="let view of views"
4635
+ kendoButton
4636
+ type="button"
4637
+ [selected]="view === activeView"
4638
+ (click)="onClick(view)">{{getViewTypeText(view)}}</button>
4639
+ </kendo-buttongroup>
4640
+ `,
4641
+ standalone: true,
4642
+ imports: [NgFor, ReactiveFormsModule, ButtonGroupComponent, ButtonComponent]
4598
4643
  }]
4599
- }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; }, propDecorators: { tasks: [{
4600
- type: Input
4601
- }], dependencies: [{
4644
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; }, propDecorators: { hostClass: [{
4645
+ type: HostBinding,
4646
+ args: ['class.k-gantt-views-wrapper']
4647
+ }], views: [{
4602
4648
  type: Input
4603
- }], dependencyType: [{
4649
+ }], activeView: [{
4604
4650
  type: Input
4605
- }], dependenciesChange: [{
4651
+ }], activeViewChange: [{
4606
4652
  type: Output
4607
4653
  }] } });
4608
4654
 
4609
4655
  /**
4610
- * @hidden
4656
+ * The UI for adding new items to the Gantt.
4657
+ * Use it within a toolbar template to provide a custom icon or list of options.
4611
4658
  */
4612
- class TaskFieldsComponent {
4613
- constructor(mapper, editService, localizationService) {
4614
- this.mapper = mapper;
4615
- this.editService = editService;
4659
+ class GanttAddTaskComponent {
4660
+ constructor(localizationService, editService, ngZone) {
4616
4661
  this.localizationService = localizationService;
4662
+ this.editService = editService;
4663
+ this.ngZone = ngZone;
4664
+ /**
4665
+ * Sets the data of the DropDownButton.
4666
+ * > The data has to be provided in an array-like list.
4667
+ */
4668
+ this.data = [{
4669
+ text: this.getText('addChildText'),
4670
+ type: 'addChild'
4671
+ }, {
4672
+ text: this.getText('addAboveText'),
4673
+ type: 'addAbove'
4674
+ }, {
4675
+ text: this.getText('addBelowText'),
4676
+ type: 'addBelow'
4677
+ }];
4678
+ /**
4679
+ * Defines the name of an existing icon in a Kendo UI theme.
4680
+ * @default 'plus'
4681
+ */
4682
+ this.icon = 'plus';
4683
+ /**
4684
+ * Defines an [`SVGIcon`](slug:api_icons_svgicon) icon to be rendered inside the `GanttAddTaskComponent` using
4685
+ * a [`KendoSVGIcon`](slug:api_icons_svgiconcomponent) component.
4686
+ */
4687
+ this.svgIcon = plusIcon;
4617
4688
  }
4618
4689
  /**
4619
4690
  * @hidden
4620
4691
  */
4621
- get formGroup() {
4622
- return this.editService.taskFormGroup;
4692
+ getText(message) {
4693
+ return this.localizationService.get(message);
4623
4694
  }
4624
- getText(token) {
4625
- return this.localizationService.get(token);
4695
+ /**
4696
+ * @hidden
4697
+ */
4698
+ handleOpen(e) {
4699
+ if (!this.editService.getSelectedItem()) {
4700
+ e.preventDefault();
4701
+ }
4702
+ }
4703
+ /**
4704
+ * @hidden
4705
+ */
4706
+ handleMouseClick() {
4707
+ if (!this.editService.getSelectedItem()) {
4708
+ this.ngZone.run(() => {
4709
+ this.editService.addEvent.next({
4710
+ selectedItem: null,
4711
+ actionType: 'addTask'
4712
+ });
4713
+ });
4714
+ }
4715
+ }
4716
+ /**
4717
+ * @hidden
4718
+ */
4719
+ handleItemClick(e) {
4720
+ this.editService.addEvent.next({
4721
+ actionType: e.type,
4722
+ selectedItem: null
4723
+ });
4626
4724
  }
4627
4725
  }
4628
- TaskFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TaskFieldsComponent, deps: [{ token: MappingService }, { token: EditService }, { token: GanttLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4629
- TaskFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TaskFieldsComponent, selector: "kendo-gantt-task-fields", ngImport: i0, template: `
4630
- <form class="k-form k-form-md" [formGroup]="formGroup">
4631
- <kendo-formfield *ngIf="formGroup.get(mapper.taskFields.title)">
4632
- <kendo-label [for]="title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4633
- <input #title kendoTextBox [formControlName]="mapper.taskFields.title" />
4634
- </kendo-formfield>
4635
- <div class="k-hstack">
4636
- <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.start)">
4637
- <kendo-label [for]="start" [text]="getText('startFieldInputLabel')"></kendo-label>
4638
- <kendo-datetimepicker #start [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4639
- </kendo-formfield>
4640
- <kendo-treelist-spacer></kendo-treelist-spacer>
4641
- <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.end)">
4642
- <kendo-label [for]="end" [text]="getText('endFieldInputLabel')"></kendo-label>
4643
- <kendo-datetimepicker #end [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4644
- </kendo-formfield>
4645
- </div>
4646
- <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.completionRatio)">
4647
- <kendo-label [for]="completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4648
- <kendo-numerictextbox
4649
- #completionRatio
4650
- [formControlName]="mapper.taskFields.completionRatio"
4651
- [min]="0"
4652
- [max]="1"
4653
- [decimals]="2"
4654
- format="p2"
4655
- [step]="0.01"
4656
- ></kendo-numerictextbox>
4657
- </kendo-formfield>
4658
- </form>
4659
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6$2.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "directive", type: i7$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: i7$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: i7$1.FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors"] }, { kind: "component", type: i8.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["focusableId", "weekDaysFormat", "showOtherMonthDays", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "title", "subtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "clearButton", "autoFill", "adaptiveMode", "inputAttributes", "defaultTab", "size", "rounded", "fillMode", "headerTemplate", "footerTemplate", "footer"], outputs: ["valueChange", "open", "close", "focus", "blur", "escape"], exportAs: ["kendo-datetimepicker"] }, { kind: "component", type: i14.TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }] });
4660
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TaskFieldsComponent, decorators: [{
4726
+ GanttAddTaskComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttAddTaskComponent, deps: [{ token: i1$1.LocalizationService }, { token: EditService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
4727
+ GanttAddTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttAddTaskComponent, isStandalone: true, selector: "kendo-gantt-add-task", inputs: { data: "data", icon: "icon", svgIcon: "svgIcon" }, ngImport: i0, template: `
4728
+ <kendo-dropdownbutton
4729
+ [data]="data"
4730
+ [icon]="icon"
4731
+ [svgIcon]="svgIcon"
4732
+ [kendoEventsOutsideAngular]="{ click: handleMouseClick }"
4733
+ [scope]="this"
4734
+ (itemClick)="handleItemClick($event)"
4735
+ (open)="handleOpen($event)">
4736
+ {{ getText('addTaskText') }}
4737
+ </kendo-dropdownbutton>
4738
+ `, isInline: true, dependencies: [{ kind: "component", type: DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
4739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttAddTaskComponent, decorators: [{
4661
4740
  type: Component,
4662
4741
  args: [{
4663
- selector: 'kendo-gantt-task-fields',
4742
+ selector: 'kendo-gantt-add-task',
4664
4743
  template: `
4665
- <form class="k-form k-form-md" [formGroup]="formGroup">
4666
- <kendo-formfield *ngIf="formGroup.get(mapper.taskFields.title)">
4667
- <kendo-label [for]="title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4668
- <input #title kendoTextBox [formControlName]="mapper.taskFields.title" />
4669
- </kendo-formfield>
4670
- <div class="k-hstack">
4671
- <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.start)">
4672
- <kendo-label [for]="start" [text]="getText('startFieldInputLabel')"></kendo-label>
4673
- <kendo-datetimepicker #start [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4674
- </kendo-formfield>
4675
- <kendo-treelist-spacer></kendo-treelist-spacer>
4676
- <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.end)">
4677
- <kendo-label [for]="end" [text]="getText('endFieldInputLabel')"></kendo-label>
4678
- <kendo-datetimepicker #end [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4679
- </kendo-formfield>
4680
- </div>
4681
- <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.completionRatio)">
4682
- <kendo-label [for]="completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4683
- <kendo-numerictextbox
4684
- #completionRatio
4685
- [formControlName]="mapper.taskFields.completionRatio"
4686
- [min]="0"
4687
- [max]="1"
4688
- [decimals]="2"
4689
- format="p2"
4690
- [step]="0.01"
4691
- ></kendo-numerictextbox>
4692
- </kendo-formfield>
4693
- </form>
4694
- `
4744
+ <kendo-dropdownbutton
4745
+ [data]="data"
4746
+ [icon]="icon"
4747
+ [svgIcon]="svgIcon"
4748
+ [kendoEventsOutsideAngular]="{ click: handleMouseClick }"
4749
+ [scope]="this"
4750
+ (itemClick)="handleItemClick($event)"
4751
+ (open)="handleOpen($event)">
4752
+ {{ getText('addTaskText') }}
4753
+ </kendo-dropdownbutton>
4754
+ `,
4755
+ standalone: true,
4756
+ imports: [DropDownButtonComponent, EventsOutsideAngularDirective]
4695
4757
  }]
4696
- }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; } });
4758
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: EditService }, { type: i0.NgZone }]; }, propDecorators: { data: [{
4759
+ type: Input
4760
+ }], icon: [{
4761
+ type: Input
4762
+ }], svgIcon: [{
4763
+ type: Input
4764
+ }] } });
4697
4765
 
4698
4766
  /**
4699
4767
  * @hidden
4700
4768
  */
4701
- class EditDialogComponent {
4702
- constructor(mapper, editService, cdr, localizationService) {
4703
- this.mapper = mapper;
4704
- this.editService = editService;
4705
- this.cdr = cdr;
4706
- this.localizationService = localizationService;
4707
- this.saveIcon = saveIcon;
4708
- this.cancelIcon = cancelOutlineIcon;
4709
- this.deleteIcon = trashIcon;
4710
- }
4711
- ngOnInit() {
4712
- this.editService.loadTasks(this.data).subscribe(value => {
4713
- this.loadedTasks = value;
4714
- });
4769
+ class ToolbarComponent {
4770
+ constructor(hostEl, navigationService) {
4771
+ this.hostEl = hostEl;
4772
+ this.navigationService = navigationService;
4773
+ this.context = {};
4774
+ this.role = 'toolbar';
4775
+ this.toolbarSizingClass = true;
4776
+ this.activeViewChange = new EventEmitter();
4715
4777
  }
4716
- get predecessors() {
4717
- return this.editService.predecessors;
4778
+ clickHandler(ev) {
4779
+ if (this.navigable) {
4780
+ const closestFocusable = closest(ev.target, isFocusable);
4781
+ const targetIndex = this.navigationService.focusableContent.indexOf(closestFocusable);
4782
+ if (targetIndex > -1) {
4783
+ this.navigationService.focusIndex = targetIndex;
4784
+ }
4785
+ this.navigationService.updateFocus();
4786
+ }
4718
4787
  }
4719
- set predecessors(items) {
4720
- this.editService.predecessors = items;
4788
+ arrowLeftListener() {
4789
+ if (this.navigable && isDocumentAvailable()) {
4790
+ this.navigationService.focusIndex--;
4791
+ if (this.navigationService.focusIndex < 0) {
4792
+ this.navigationService.focusIndex = this.navigationService.focusableContent.length - 1;
4793
+ }
4794
+ this.navigationService.updateFocus();
4795
+ }
4721
4796
  }
4722
- get successors() {
4723
- return this.editService.successors;
4797
+ arrowRightListener() {
4798
+ if (this.navigable && isDocumentAvailable()) {
4799
+ this.navigationService.focusIndex++;
4800
+ if (this.navigationService.focusIndex >= this.navigationService.focusableContent.length) {
4801
+ this.navigationService.focusIndex = 0;
4802
+ }
4803
+ this.navigationService.updateFocus();
4804
+ }
4724
4805
  }
4725
- set successors(items) {
4726
- this.editService.successors = items;
4806
+ set position(value) {
4807
+ this.context.position = this._position = value;
4727
4808
  }
4728
- getText(token) {
4729
- return this.localizationService.get(token);
4809
+ get position() {
4810
+ return this._position;
4730
4811
  }
4731
- getDependencyType(typeId) {
4732
- return DependencyType[typeId];
4812
+ get toolbarTemplateRef() {
4813
+ return this.toolbarTemplate ? this.toolbarTemplate.templateRef : undefined;
4733
4814
  }
4734
- handleEditingResult(editResultType) {
4735
- this.editService.triggerEditEvent(editResultType);
4815
+ get renderTemplate() {
4816
+ const ganttToolbarTemplate = this.toolbarTemplate;
4817
+ const templatePosition = ganttToolbarTemplate ? ganttToolbarTemplate.position : null;
4818
+ return ganttToolbarTemplate && (templatePosition === 'both' || templatePosition === this.position);
4736
4819
  }
4737
- handleTaskDelete() {
4738
- this.editService.taskDelete.next(this.editService.dataItem);
4820
+ handleViewChange(view) {
4821
+ this.activeViewChange.emit(view);
4822
+ }
4823
+ ngAfterViewInit() {
4824
+ if (isDocumentAvailable()) {
4825
+ const focusableElements = Array.from(this.hostEl.nativeElement.querySelectorAll(focusableSelector) || [])
4826
+ .filter(el => isVisible(el));
4827
+ if (focusableElements.length) {
4828
+ this.navigationService.focusableContent = focusableElements;
4829
+ }
4830
+ }
4739
4831
  }
4740
4832
  }
4741
- EditDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDialogComponent, deps: [{ token: MappingService }, { token: EditService }, { token: i0.ChangeDetectorRef }, { token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
4742
- EditDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditDialogComponent, selector: "kendo-gantt-edit-dialog", inputs: { data: "data" }, ngImport: i0, template: `
4743
- <kendo-dialog
4744
- [title]="getText('taskEditingDialogTitle')"
4745
- [width]="575"
4746
- [height]="470"
4747
- [autoFocusedElement]="'.k-actions .k-button-solid-primary'"
4748
- (close)="handleEditingResult('cancel')">
4749
- <kendo-dialog-messages
4750
- [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4751
-
4752
- <kendo-tabstrip [keepTabContent]="true" [style.height.px]="345">
4753
- <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
4754
- <ng-template kendoTabContent>
4755
- <kendo-gantt-task-fields></kendo-gantt-task-fields>
4756
- </ng-template>
4757
- </kendo-tabstrip-tab>
4758
- <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
4759
- <ng-template kendoTabContent>
4760
- <kendo-gantt-dependencies-table
4761
- [tasks]="loadedTasks"
4762
- [(dependencies)]="predecessors"
4763
- dependencyType="predecessor"
4764
- >
4765
- </kendo-gantt-dependencies-table>
4766
- </ng-template>
4767
- </kendo-tabstrip-tab>
4768
- <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
4769
- <ng-template kendoTabContent>
4770
- <kendo-gantt-dependencies-table
4771
- [tasks]="loadedTasks"
4772
- [(dependencies)]="successors"
4773
- dependencyType="successor">
4774
- </kendo-gantt-dependencies-table>
4775
- </ng-template>
4776
- </kendo-tabstrip-tab>
4777
- </kendo-tabstrip>
4778
-
4779
- <kendo-dialog-actions layout="start">
4780
- <button
4781
- kendoButton
4782
- themeColor="primary"
4783
- icon="save"
4784
- [svgIcon]="saveIcon"
4785
- (click)="handleEditingResult('save')"
4786
- >
4787
- {{ getText('saveButtonText') }}
4788
- </button>
4789
- <button
4790
- kendoButton
4791
- icon="cancel-outline"
4792
- [svgIcon]="cancelIcon"
4793
- (click)="handleEditingResult('cancel')"
4794
- >
4795
- {{ getText('cancelButtonText') }}
4796
- </button>
4797
- <kendo-treelist-spacer></kendo-treelist-spacer>
4798
- <button
4799
- kendoButton
4800
- themeColor="primary"
4801
- fillMode="flat"
4802
- icon="delete"
4803
- [svgIcon]="deleteIcon"
4804
- [kendoEventsOutsideAngular]="{
4805
- click: handleTaskDelete
4806
- }"
4807
- [scope]="this"
4808
- >
4809
- {{ getText('deleteButtonText') }}
4810
- </button>
4811
- </kendo-dialog-actions>
4812
- </kendo-dialog>
4813
- `, isInline: true, dependencies: [{ kind: "directive", type: i11.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i14.TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }, { kind: "component", type: i7$2.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i7$2.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "directive", type: i7$2.CustomMessagesComponent, selector: "kendo-dialog-messages, kendo-window-messages" }, { kind: "component", type: i8$1.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i8$1.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i8$1.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: DependenciesTableComponent, selector: "kendo-gantt-dependencies-table", inputs: ["tasks", "dependencies", "dependencyType"], outputs: ["dependenciesChange"] }, { kind: "component", type: TaskFieldsComponent, selector: "kendo-gantt-task-fields" }] });
4814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDialogComponent, decorators: [{
4833
+ ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ElementRef }, { token: ToolbarNavigationService }], target: i0.ɵɵFactoryTarget.Component });
4834
+ ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolbarComponent, isStandalone: true, selector: "kendo-gantt-toolbar", inputs: { showAddTask: "showAddTask", showViewSelector: "showViewSelector", views: "views", activeView: "activeView", toolbarTemplate: "toolbarTemplate", navigable: "navigable", position: "position" }, outputs: { activeViewChange: "activeViewChange" }, host: { listeners: { "click": "clickHandler($event)", "keydown.arrowleft": "arrowLeftListener($event)", "keydown.arrowright": "arrowRightListener($event)" }, properties: { "attr.role": "this.role", "class.k-toolbar-md": "this.toolbarSizingClass" } }, providers: [ToolbarNavigationService], ngImport: i0, template: `
4835
+ <ng-container *ngIf="!renderTemplate">
4836
+ <kendo-gantt-add-task *ngIf="showAddTask"></kendo-gantt-add-task>
4837
+ <span class="k-spacer k-toolbar-spacer"></span>
4838
+ <kendo-gantt-view-selector
4839
+ *ngIf="showViewSelector"
4840
+ [views]="views"
4841
+ [activeView]="activeView"
4842
+ (activeViewChange)="handleViewChange($event)"></kendo-gantt-view-selector>
4843
+ </ng-container>
4844
+ <ng-template
4845
+ *ngIf="renderTemplate"
4846
+ [ngTemplateOutlet]="toolbarTemplateRef"
4847
+ [ngTemplateOutletContext]="context"
4848
+ >
4849
+ </ng-template>
4850
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GanttAddTaskComponent, selector: "kendo-gantt-add-task", inputs: ["data", "icon", "svgIcon"] }, { kind: "component", type: ViewSelectorComponent, selector: "kendo-gantt-view-selector", inputs: ["views", "activeView"], outputs: ["activeViewChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
4851
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarComponent, decorators: [{
4815
4852
  type: Component,
4816
4853
  args: [{
4817
- selector: 'kendo-gantt-edit-dialog',
4854
+ selector: 'kendo-gantt-toolbar',
4855
+ providers: [ToolbarNavigationService],
4818
4856
  template: `
4819
- <kendo-dialog
4820
- [title]="getText('taskEditingDialogTitle')"
4821
- [width]="575"
4822
- [height]="470"
4823
- [autoFocusedElement]="'.k-actions .k-button-solid-primary'"
4824
- (close)="handleEditingResult('cancel')">
4825
- <kendo-dialog-messages
4826
- [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4827
-
4828
- <kendo-tabstrip [keepTabContent]="true" [style.height.px]="345">
4829
- <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
4830
- <ng-template kendoTabContent>
4831
- <kendo-gantt-task-fields></kendo-gantt-task-fields>
4832
- </ng-template>
4833
- </kendo-tabstrip-tab>
4834
- <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
4835
- <ng-template kendoTabContent>
4836
- <kendo-gantt-dependencies-table
4837
- [tasks]="loadedTasks"
4838
- [(dependencies)]="predecessors"
4839
- dependencyType="predecessor"
4840
- >
4841
- </kendo-gantt-dependencies-table>
4842
- </ng-template>
4843
- </kendo-tabstrip-tab>
4844
- <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
4845
- <ng-template kendoTabContent>
4846
- <kendo-gantt-dependencies-table
4847
- [tasks]="loadedTasks"
4848
- [(dependencies)]="successors"
4849
- dependencyType="successor">
4850
- </kendo-gantt-dependencies-table>
4851
- </ng-template>
4852
- </kendo-tabstrip-tab>
4853
- </kendo-tabstrip>
4854
-
4855
- <kendo-dialog-actions layout="start">
4856
- <button
4857
- kendoButton
4858
- themeColor="primary"
4859
- icon="save"
4860
- [svgIcon]="saveIcon"
4861
- (click)="handleEditingResult('save')"
4862
- >
4863
- {{ getText('saveButtonText') }}
4864
- </button>
4865
- <button
4866
- kendoButton
4867
- icon="cancel-outline"
4868
- [svgIcon]="cancelIcon"
4869
- (click)="handleEditingResult('cancel')"
4870
- >
4871
- {{ getText('cancelButtonText') }}
4872
- </button>
4873
- <kendo-treelist-spacer></kendo-treelist-spacer>
4874
- <button
4875
- kendoButton
4876
- themeColor="primary"
4877
- fillMode="flat"
4878
- icon="delete"
4879
- [svgIcon]="deleteIcon"
4880
- [kendoEventsOutsideAngular]="{
4881
- click: handleTaskDelete
4882
- }"
4883
- [scope]="this"
4884
- >
4885
- {{ getText('deleteButtonText') }}
4886
- </button>
4887
- </kendo-dialog-actions>
4888
- </kendo-dialog>
4889
- `
4857
+ <ng-container *ngIf="!renderTemplate">
4858
+ <kendo-gantt-add-task *ngIf="showAddTask"></kendo-gantt-add-task>
4859
+ <span class="k-spacer k-toolbar-spacer"></span>
4860
+ <kendo-gantt-view-selector
4861
+ *ngIf="showViewSelector"
4862
+ [views]="views"
4863
+ [activeView]="activeView"
4864
+ (activeViewChange)="handleViewChange($event)"></kendo-gantt-view-selector>
4865
+ </ng-container>
4866
+ <ng-template
4867
+ *ngIf="renderTemplate"
4868
+ [ngTemplateOutlet]="toolbarTemplateRef"
4869
+ [ngTemplateOutletContext]="context"
4870
+ >
4871
+ </ng-template>
4872
+ `,
4873
+ standalone: true,
4874
+ imports: [NgIf, GanttAddTaskComponent, ViewSelectorComponent, NgTemplateOutlet]
4890
4875
  }]
4891
- }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: i0.ChangeDetectorRef }, { type: i1$1.LocalizationService }]; }, propDecorators: { data: [{
4876
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ToolbarNavigationService }]; }, propDecorators: { role: [{
4877
+ type: HostBinding,
4878
+ args: ['attr.role']
4879
+ }], toolbarSizingClass: [{
4880
+ type: HostBinding,
4881
+ args: ['class.k-toolbar-md']
4882
+ }], clickHandler: [{
4883
+ type: HostListener,
4884
+ args: ['click', ['$event']]
4885
+ }], arrowLeftListener: [{
4886
+ type: HostListener,
4887
+ args: ['keydown.arrowleft', ['$event']]
4888
+ }], arrowRightListener: [{
4889
+ type: HostListener,
4890
+ args: ['keydown.arrowright', ['$event']]
4891
+ }], activeViewChange: [{
4892
+ type: Output
4893
+ }], showAddTask: [{
4894
+ type: Input
4895
+ }], showViewSelector: [{
4896
+ type: Input
4897
+ }], views: [{
4898
+ type: Input
4899
+ }], activeView: [{
4900
+ type: Input
4901
+ }], toolbarTemplate: [{
4902
+ type: Input
4903
+ }], navigable: [{
4904
+ type: Input
4905
+ }], position: [{
4892
4906
  type: Input
4893
4907
  }] } });
4894
4908
 
@@ -5053,7 +5067,7 @@ class LocalizedMessagesDirective extends Messages {
5053
5067
  }
5054
5068
  }
5055
5069
  LocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
5056
- LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: LocalizedMessagesDirective, selector: "[kendoGanttLocalizedMessages]", providers: [
5070
+ LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: LocalizedMessagesDirective, isStandalone: true, selector: "[kendoGanttLocalizedMessages]", providers: [
5057
5071
  {
5058
5072
  provide: Messages,
5059
5073
  useExisting: forwardRef(() => LocalizedMessagesDirective)
@@ -5068,7 +5082,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5068
5082
  useExisting: forwardRef(() => LocalizedMessagesDirective)
5069
5083
  }
5070
5084
  ],
5071
- selector: '[kendoGanttLocalizedMessages]'
5085
+ selector: '[kendoGanttLocalizedMessages]',
5086
+ standalone: true
5072
5087
  }]
5073
5088
  }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });
5074
5089
 
@@ -6344,9 +6359,13 @@ class GanttComponent {
6344
6359
  }
6345
6360
  }
6346
6361
  GanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttComponent, deps: [{ token: TimelineViewService }, { token: ScrollSyncService }, { token: i0.Renderer2 }, { token: MappingService }, { token: OptionChangesService }, { token: DependencyDomService }, { token: EditService }, { token: i1$1.LocalizationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: NavigationService }, { token: CurrentTimeMarkerService }], target: i0.ɵɵFactoryTarget.Component });
6347
- GanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttComponent, selector: "kendo-gantt", inputs: { roleDescription: ["aria-roledescription", "roleDescription"], role: "role", taskModelFields: "taskModelFields", dependencyModelFields: "dependencyModelFields", activeView: "activeView", data: "data", isSelected: "isSelected", validateNewDependency: "validateNewDependency", selectable: "selectable", toolbarSettings: "toolbarSettings", toolbarAriaLabel: "toolbarAriaLabel", fetchChildren: "fetchChildren", hasChildren: "hasChildren", dependencies: "dependencies", sortable: "sortable", sort: "sort", filterable: "filterable", filter: "filter", workDayStart: "workDayStart", workDayEnd: "workDayEnd", workWeekStart: "workWeekStart", workWeekEnd: "workWeekEnd", navigable: "navigable", timelinePaneOptions: "timelinePaneOptions", treeListPaneOptions: "treeListPaneOptions", taskClass: "taskClass", rowClass: "rowClass", isExpanded: "isExpanded", columnsAutoSize: "columnsAutoSize", currentTimeMarker: "currentTimeMarker", columnMenu: "columnMenu", columnsReorderable: "columnsReorderable", columnsResizable: "columnsResizable", dragScrollSettings: "dragScrollSettings" }, outputs: { selectionChange: "selectionChange", rowExpand: "rowExpand", taskDblClick: "taskDblClick", cellDblClick: "cellDblClick", cellClose: "cellClose", taskDelete: "taskDelete", rowCollapse: "rowCollapse", remove: "remove", cancel: "cancel", save: "save", taskAdd: "taskAdd", dependencyAdd: "dependencyAdd", sortChange: "sortChange", filterChange: "filterChange", dataStateChange: "dataStateChange", treeListPaneCollapsedChange: "treeListPaneCollapsedChange", timelinePaneCollapsedChange: "timelinePaneCollapsedChange", timelinePaneSizeChange: "timelinePaneSizeChange", activeViewChange: "activeViewChange", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", cellClick: "cellClick", taskClick: "taskClick" }, host: { properties: { "attr.aria-roledescription": "this.hostRoleDescriptionAttr", "attr.role": "this.hostRoleAttr", "class.k-gantt": "this.hostClasses", "attr.dir": "this.dir" } }, providers: [
6362
+ GanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GanttComponent, isStandalone: true, selector: "kendo-gantt", inputs: { roleDescription: ["aria-roledescription", "roleDescription"], role: "role", taskModelFields: "taskModelFields", dependencyModelFields: "dependencyModelFields", activeView: "activeView", data: "data", isSelected: "isSelected", validateNewDependency: "validateNewDependency", selectable: "selectable", toolbarSettings: "toolbarSettings", toolbarAriaLabel: "toolbarAriaLabel", fetchChildren: "fetchChildren", hasChildren: "hasChildren", dependencies: "dependencies", sortable: "sortable", sort: "sort", filterable: "filterable", filter: "filter", workDayStart: "workDayStart", workDayEnd: "workDayEnd", workWeekStart: "workWeekStart", workWeekEnd: "workWeekEnd", navigable: "navigable", timelinePaneOptions: "timelinePaneOptions", treeListPaneOptions: "treeListPaneOptions", taskClass: "taskClass", rowClass: "rowClass", isExpanded: "isExpanded", columnsAutoSize: "columnsAutoSize", currentTimeMarker: "currentTimeMarker", columnMenu: "columnMenu", columnsReorderable: "columnsReorderable", columnsResizable: "columnsResizable", dragScrollSettings: "dragScrollSettings" }, outputs: { selectionChange: "selectionChange", rowExpand: "rowExpand", taskDblClick: "taskDblClick", cellDblClick: "cellDblClick", cellClose: "cellClose", taskDelete: "taskDelete", rowCollapse: "rowCollapse", remove: "remove", cancel: "cancel", save: "save", taskAdd: "taskAdd", dependencyAdd: "dependencyAdd", sortChange: "sortChange", filterChange: "filterChange", dataStateChange: "dataStateChange", treeListPaneCollapsedChange: "treeListPaneCollapsedChange", timelinePaneCollapsedChange: "timelinePaneCollapsedChange", timelinePaneSizeChange: "timelinePaneSizeChange", activeViewChange: "activeViewChange", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", cellClick: "cellClick", taskClick: "taskClick" }, host: { properties: { "attr.aria-roledescription": "this.hostRoleDescriptionAttr", "attr.role": "this.hostRoleAttr", "class.k-gantt": "this.hostClasses", "attr.dir": "this.dir" } }, providers: [
6348
6363
  GanttLocalizationService,
6349
6364
  LocalizationService,
6365
+ {
6366
+ provide: L10N_PREFIX,
6367
+ useValue: 'kendo.gantt'
6368
+ },
6350
6369
  {
6351
6370
  provide: DataBoundTreeComponent,
6352
6371
  useExisting: forwardRef(() => GanttComponent)
@@ -6740,7 +6759,7 @@ GanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
6740
6759
  </kendo-dialog>
6741
6760
 
6742
6761
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
6743
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i8$1.SplitterComponent, selector: "kendo-splitter", inputs: ["orientation", "splitbarWidth", "resizeStep"], outputs: ["layoutChange"], exportAs: ["kendoSplitter"] }, { kind: "component", type: i8$1.SplitterPaneComponent, selector: "kendo-splitter-pane", inputs: ["order", "size", "separatorLabel", "min", "max", "resizable", "collapsible", "scrollable", "collapsed", "orientation", "containsSplitter", "overlayContent"], outputs: ["sizeChange", "collapsedChange"], exportAs: ["kendoSplitterPane"] }, { kind: "component", type: i14.TreeListComponent, selector: "kendo-treelist", inputs: ["aria-label", "data", "pageSize", "height", "rowHeight", "skip", "scrollable", "sort", "trackBy", "filter", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "navigatable", "autoSize", "rowClass", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "idField", "selectable", "isSelected", "rowReorderable", "columns", "fetchChildren", "hasChildren", "isExpanded"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange", "rowReorder"], exportAs: ["kendoTreeList"] }, { kind: "component", type: i14.TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }, { kind: "component", type: i14.CustomMessagesComponent, selector: "kendo-treelist-messages" }, { kind: "component", type: i7$2.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i7$2.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: i11.WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }, { kind: "component", type: GanttTimelineComponent, selector: "kendo-gantt-timeline", inputs: ["rows", "slots", "groupSlots", "tableWidth", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "renderDependencyDragClues", "dragScrollSettings", "currentTimeMarker", "selectable", "isTaskSelected", "isExpanded", "dependencies"], outputs: ["timelineContainerPress", "timelineContainerDrag", "timelineContainerRelease"] }, { kind: "component", type: ToolbarComponent, selector: "kendo-gantt-toolbar", inputs: ["showAddTask", "showViewSelector", "views", "activeView", "toolbarTemplate", "navigable", "position"], outputs: ["activeViewChange"] }, { kind: "component", type: EditDialogComponent, selector: "kendo-gantt-edit-dialog", inputs: ["data"] }, { kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGanttLocalizedMessages]" }] });
6762
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGanttLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolbarComponent, selector: "kendo-gantt-toolbar", inputs: ["showAddTask", "showViewSelector", "views", "activeView", "toolbarTemplate", "navigable", "position"], outputs: ["activeViewChange"] }, { kind: "component", type: SplitterComponent, selector: "kendo-splitter", inputs: ["orientation", "splitbarWidth", "resizeStep"], outputs: ["layoutChange"], exportAs: ["kendoSplitter"] }, { kind: "component", type: SplitterPaneComponent, selector: "kendo-splitter-pane", inputs: ["order", "size", "separatorLabel", "min", "max", "resizable", "collapsible", "scrollable", "collapsed", "orientation", "containsSplitter", "overlayContent"], outputs: ["sizeChange", "collapsedChange"], exportAs: ["kendoSplitterPane"] }, { kind: "component", type: TreeListComponent, selector: "kendo-treelist", inputs: ["aria-label", "data", "pageSize", "height", "rowHeight", "skip", "scrollable", "sort", "trackBy", "filter", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "navigatable", "autoSize", "rowClass", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "idField", "selectable", "isSelected", "rowReorderable", "columns", "fetchChildren", "hasChildren", "isExpanded"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange", "rowReorder"], exportAs: ["kendoTreeList"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: CustomMessagesComponent$2, selector: "kendo-treelist-messages" }, { kind: "component", type: GanttTimelineComponent, selector: "kendo-gantt-timeline", inputs: ["rows", "slots", "groupSlots", "tableWidth", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "renderDependencyDragClues", "dragScrollSettings", "currentTimeMarker", "selectable", "isTaskSelected", "isExpanded", "dependencies"], outputs: ["timelineContainerPress", "timelineContainerDrag", "timelineContainerRelease"] }, { kind: "component", type: EditDialogComponent, selector: "kendo-gantt-edit-dialog", inputs: ["data"] }, { kind: "component", type: DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }] });
6744
6763
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttComponent, decorators: [{
6745
6764
  type: Component,
6746
6765
  args: [{
@@ -6749,6 +6768,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
6749
6768
  providers: [
6750
6769
  GanttLocalizationService,
6751
6770
  LocalizationService,
6771
+ {
6772
+ provide: L10N_PREFIX,
6773
+ useValue: 'kendo.gantt'
6774
+ },
6752
6775
  {
6753
6776
  provide: DataBoundTreeComponent,
6754
6777
  useExisting: forwardRef(() => GanttComponent)
@@ -7143,7 +7166,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7143
7166
  </kendo-dialog>
7144
7167
 
7145
7168
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
7146
- `
7169
+ `,
7170
+ standalone: true,
7171
+ imports: [LocalizedMessagesDirective, NgIf, ToolbarComponent, SplitterComponent, SplitterPaneComponent, TreeListComponent, EventsOutsideAngularDirective, CustomMessagesComponent$2, GanttTimelineComponent, EditDialogComponent, DialogComponent, DialogActionsComponent, TreeListSpacerComponent, ButtonComponent, WatermarkOverlayComponent]
7147
7172
  }]
7148
7173
  }], ctorParameters: function () { return [{ type: TimelineViewService }, { type: ScrollSyncService }, { type: i0.Renderer2 }, { type: MappingService }, { type: OptionChangesService }, { type: DependencyDomService }, { type: EditService }, { type: i1$1.LocalizationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: NavigationService }, { type: CurrentTimeMarkerService }]; }, propDecorators: { treeList: [{
7149
7174
  type: ViewChild,
@@ -7237,252 +7262,70 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7237
7262
  type: Input
7238
7263
  }], taskClass: [{
7239
7264
  type: Input
7240
- }], rowClass: [{
7241
- type: Input
7242
- }], isExpanded: [{
7243
- type: Input
7244
- }], columnsAutoSize: [{
7245
- type: Input
7246
- }], currentTimeMarker: [{
7247
- type: Input
7248
- }], columnMenu: [{
7249
- type: Input
7250
- }], columnsReorderable: [{
7251
- type: Input
7252
- }], columnsResizable: [{
7253
- type: Input
7254
- }], dragScrollSettings: [{
7255
- type: Input
7256
- }], rowExpand: [{
7257
- type: Output
7258
- }], taskDblClick: [{
7259
- type: Output
7260
- }], cellDblClick: [{
7261
- type: Output
7262
- }], cellClose: [{
7263
- type: Output
7264
- }], taskDelete: [{
7265
- type: Output
7266
- }], rowCollapse: [{
7267
- type: Output
7268
- }], remove: [{
7269
- type: Output
7270
- }], cancel: [{
7271
- type: Output
7272
- }], save: [{
7273
- type: Output
7274
- }], taskAdd: [{
7275
- type: Output
7276
- }], dependencyAdd: [{
7277
- type: Output
7278
- }], sortChange: [{
7279
- type: Output
7280
- }], filterChange: [{
7281
- type: Output
7282
- }], dataStateChange: [{
7283
- type: Output
7284
- }], treeListPaneCollapsedChange: [{
7285
- type: Output
7286
- }], timelinePaneCollapsedChange: [{
7287
- type: Output
7288
- }], timelinePaneSizeChange: [{
7289
- type: Output
7290
- }], activeViewChange: [{
7291
- type: Output
7292
- }], columnResize: [{
7293
- type: Output
7294
- }], columnReorder: [{
7295
- type: Output
7296
- }], columnVisibilityChange: [{
7297
- type: Output
7298
- }], columnLockedChange: [{
7299
- type: Output
7300
- }], cellClick: [{
7301
- type: Output
7302
- }], taskClick: [{
7303
- type: Output
7304
- }] } });
7305
-
7306
- /**
7307
- * A directive which binds the Gantt to an array of objects by using
7308
- * an ID and parent ID field to define the hierarchy.
7309
- *
7310
- * The directive encapsulates the in-memory handling of data operations such as sorting and filtering.
7311
- */
7312
- class GanttFlatBindingDirective extends FlatBindingDirective {
7313
- /**
7314
- * @hidden
7315
- */
7316
- set aggregate(value) {
7317
- super.aggregate = value;
7318
- }
7319
- }
7320
- GanttFlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttFlatBindingDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7321
- GanttFlatBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttFlatBindingDirective, selector: "[kendoGanttFlatBinding]", inputs: { data: ["kendoGanttFlatBinding", "data"] }, exportAs: ["kendoGanttFlatBinding"], usesInheritance: true, ngImport: i0 });
7322
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttFlatBindingDirective, decorators: [{
7323
- type: Directive,
7324
- args: [{
7325
- selector: '[kendoGanttFlatBinding]',
7326
- exportAs: 'kendoGanttFlatBinding'
7327
- }]
7328
- }], propDecorators: { data: [{
7329
- type: Input,
7330
- args: ['kendoGanttFlatBinding']
7331
- }] } });
7332
-
7333
- /**
7334
- * A directive which binds the Gantt to a tree of objects,
7335
- * which encapsulates the in-memory handling of data operations such as sorting and filtering.
7336
- */
7337
- class GanttHierarchyBindingDirective extends HierarchyBindingDirective {
7338
- /**
7339
- * @hidden
7340
- */
7341
- set aggregate(value) {
7342
- super.aggregate = value;
7343
- }
7344
- }
7345
- GanttHierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHierarchyBindingDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7346
- GanttHierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttHierarchyBindingDirective, selector: "[kendoGanttHierarchyBinding]", inputs: { data: ["kendoGanttHierarchyBinding", "data"] }, exportAs: ["kendoGanttHierarchyBinding"], usesInheritance: true, ngImport: i0 });
7347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHierarchyBindingDirective, decorators: [{
7348
- type: Directive,
7349
- args: [{
7350
- selector: '[kendoGanttHierarchyBinding]',
7351
- exportAs: 'kendoGanttHierarchyBinding'
7352
- }]
7353
- }], propDecorators: { data: [{
7354
- type: Input,
7355
- args: ['kendoGanttHierarchyBinding']
7356
- }] } });
7357
-
7358
- /**
7359
- * A directive which controls the expanded state of the items.
7360
- */
7361
- class GanttExpandableDirective extends ExpandableDirective {
7362
- /**
7363
- * Defines the item key that will be stored in the expandedKeys collection.
7364
- * Defaults to the task data item ID field,
7365
- * which is specified in the [`taskModelFields`]({% slug api_gantt_ganttcomponent %}#toc-taskmodelfields) object.
7366
- *
7367
- */
7368
- set expandBy(value) {
7369
- super.expandBy = value;
7370
- }
7371
- }
7372
- GanttExpandableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttExpandableDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7373
- GanttExpandableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttExpandableDirective, selector: "[kendoGanttExpandable]", inputs: { expandBy: "expandBy" }, exportAs: ["kendoGanttExpandable"], usesInheritance: true, ngImport: i0 });
7374
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttExpandableDirective, decorators: [{
7375
- type: Directive,
7376
- args: [{
7377
- exportAs: 'kendoGanttExpandable',
7378
- selector: '[kendoGanttExpandable]'
7379
- }]
7380
- }], propDecorators: { expandBy: [{
7381
- type: Input
7382
- }] } });
7383
-
7384
- /**
7385
- * A directive which handles the [`selectionChange`]({% slug api_gantt_ganttcomponent %}#toc-selectionchange) event of the Gantt
7386
- * ([see example]({% slug selection_gantt %}#toc-built-in-directive))
7387
- */
7388
- class SelectableDirective {
7389
- constructor(gantt) {
7390
- this.gantt = gantt;
7391
- /**
7392
- * Fires when the selected keys are changed.
7393
- */
7394
- this.selectedKeysChange = new EventEmitter();
7395
- this.state = new Set();
7396
- this.isSelected = this.isSelected.bind(this);
7397
- this.selectionChange = this.selectionChange.bind(this);
7398
- this.selectable = true;
7399
- }
7400
- /**
7401
- * @hidden
7402
- */
7403
- set selectable(value) {
7404
- if (value) {
7405
- this.gantt.isSelected = this.isSelected;
7406
- this.subscribeSelection();
7407
- }
7408
- else {
7409
- this.gantt.isSelected = () => false;
7410
- this.unsubscribeSelection();
7411
- }
7412
- this.gantt.selectable = value;
7413
- this.gantt.updateView();
7414
- }
7415
- /**
7416
- * Sets the selected keys.
7417
- */
7418
- set selectedKeys(value) {
7419
- if (isPresent(value) && value === this.lastChange) {
7420
- return;
7421
- }
7422
- // prevent multiple items displayed as selected as multiple selection still not supported fully
7423
- const keys = (value || []).slice(0, 1);
7424
- this.state = new Set(keys);
7425
- this.gantt.updateView();
7426
- }
7427
- /**
7428
- * The field name or a function that specifies the data item unique key identifier.
7429
- * By default, the string field `id` is used.
7430
- */
7431
- set itemKey(value) {
7432
- if (isString(value)) {
7433
- this._keyGetter = getter(value);
7434
- }
7435
- else {
7436
- this._keyGetter = value;
7437
- }
7438
- }
7439
- get keyGetter() {
7440
- return this._keyGetter || this.gantt.idGetter;
7441
- }
7442
- ngOnDestroy() {
7443
- this.unsubscribeSelection();
7444
- }
7445
- isSelected(dataItem) {
7446
- return this.state.has(this.keyGetter(dataItem));
7447
- }
7448
- selectionChange({ action, items }) {
7449
- this.state.clear();
7450
- if (action === 'select') {
7451
- items.forEach(item => this.state.add(this.keyGetter(item)));
7452
- }
7453
- this.emitSelectedItemsChange();
7454
- }
7455
- emitSelectedItemsChange() {
7456
- this.lastChange = Array.from(this.state);
7457
- this.selectedKeysChange.emit(this.lastChange);
7458
- }
7459
- subscribeSelection() {
7460
- this.unsubscribeSelection();
7461
- this.selectionSubscription = this.gantt.selectionChange.subscribe(this.selectionChange);
7462
- }
7463
- unsubscribeSelection() {
7464
- if (this.selectionSubscription) {
7465
- this.selectionSubscription.unsubscribe();
7466
- this.selectionSubscription = null;
7467
- }
7468
- }
7469
- }
7470
- SelectableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectableDirective, deps: [{ token: GanttComponent }], target: i0.ɵɵFactoryTarget.Directive });
7471
- SelectableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: SelectableDirective, selector: "[kendoGanttSelectable]", inputs: { selectable: "selectable", selectedKeys: "selectedKeys", itemKey: "itemKey" }, outputs: { selectedKeysChange: "selectedKeysChange" }, exportAs: ["kendoGanttSelectable"], ngImport: i0 });
7472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectableDirective, decorators: [{
7473
- type: Directive,
7474
- args: [{
7475
- exportAs: 'kendoGanttSelectable',
7476
- selector: '[kendoGanttSelectable]'
7477
- }]
7478
- }], ctorParameters: function () { return [{ type: GanttComponent }]; }, propDecorators: { selectable: [{
7479
- type: Input
7480
- }], selectedKeys: [{
7265
+ }], rowClass: [{
7481
7266
  type: Input
7482
- }], selectedKeysChange: [{
7483
- type: Output
7484
- }], itemKey: [{
7267
+ }], isExpanded: [{
7268
+ type: Input
7269
+ }], columnsAutoSize: [{
7270
+ type: Input
7271
+ }], currentTimeMarker: [{
7272
+ type: Input
7273
+ }], columnMenu: [{
7274
+ type: Input
7275
+ }], columnsReorderable: [{
7276
+ type: Input
7277
+ }], columnsResizable: [{
7485
7278
  type: Input
7279
+ }], dragScrollSettings: [{
7280
+ type: Input
7281
+ }], rowExpand: [{
7282
+ type: Output
7283
+ }], taskDblClick: [{
7284
+ type: Output
7285
+ }], cellDblClick: [{
7286
+ type: Output
7287
+ }], cellClose: [{
7288
+ type: Output
7289
+ }], taskDelete: [{
7290
+ type: Output
7291
+ }], rowCollapse: [{
7292
+ type: Output
7293
+ }], remove: [{
7294
+ type: Output
7295
+ }], cancel: [{
7296
+ type: Output
7297
+ }], save: [{
7298
+ type: Output
7299
+ }], taskAdd: [{
7300
+ type: Output
7301
+ }], dependencyAdd: [{
7302
+ type: Output
7303
+ }], sortChange: [{
7304
+ type: Output
7305
+ }], filterChange: [{
7306
+ type: Output
7307
+ }], dataStateChange: [{
7308
+ type: Output
7309
+ }], treeListPaneCollapsedChange: [{
7310
+ type: Output
7311
+ }], timelinePaneCollapsedChange: [{
7312
+ type: Output
7313
+ }], timelinePaneSizeChange: [{
7314
+ type: Output
7315
+ }], activeViewChange: [{
7316
+ type: Output
7317
+ }], columnResize: [{
7318
+ type: Output
7319
+ }], columnReorder: [{
7320
+ type: Output
7321
+ }], columnVisibilityChange: [{
7322
+ type: Output
7323
+ }], columnLockedChange: [{
7324
+ type: Output
7325
+ }], cellClick: [{
7326
+ type: Output
7327
+ }], taskClick: [{
7328
+ type: Output
7486
7329
  }] } });
7487
7330
 
7488
7331
  /**
@@ -7499,7 +7342,7 @@ class DragValidationTooltipComponent {
7499
7342
  }
7500
7343
  }
7501
7344
  DragValidationTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DragValidationTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7502
- DragValidationTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DragValidationTooltipComponent, selector: "ng-component", ngImport: i0, template: `
7345
+ DragValidationTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DragValidationTooltipComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
7503
7346
  <div
7504
7347
  class="k-tooltip k-gantt-tooltip-validation"
7505
7348
  [class.k-gantt-tooltip-valid]="showValidityStatus && isValid"
@@ -7533,10 +7376,92 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7533
7376
  <span class="k-gantt-tooltip-validation-value">{{ toTaskName }}</span>
7534
7377
  </div>
7535
7378
  </div>
7536
- `
7379
+ `,
7380
+ standalone: true
7537
7381
  }]
7538
7382
  }] });
7539
7383
 
7384
+ /**
7385
+ * A directive which binds the Gantt to an array of objects by using
7386
+ * an ID and parent ID field to define the hierarchy.
7387
+ *
7388
+ * The directive encapsulates the in-memory handling of data operations such as sorting and filtering.
7389
+ */
7390
+ class GanttFlatBindingDirective extends FlatBindingDirective {
7391
+ /**
7392
+ * @hidden
7393
+ */
7394
+ set aggregate(value) {
7395
+ super.aggregate = value;
7396
+ }
7397
+ }
7398
+ GanttFlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttFlatBindingDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7399
+ GanttFlatBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttFlatBindingDirective, isStandalone: true, selector: "[kendoGanttFlatBinding]", inputs: { data: ["kendoGanttFlatBinding", "data"] }, exportAs: ["kendoGanttFlatBinding"], usesInheritance: true, ngImport: i0 });
7400
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttFlatBindingDirective, decorators: [{
7401
+ type: Directive,
7402
+ args: [{
7403
+ selector: '[kendoGanttFlatBinding]',
7404
+ exportAs: 'kendoGanttFlatBinding',
7405
+ standalone: true
7406
+ }]
7407
+ }], propDecorators: { data: [{
7408
+ type: Input,
7409
+ args: ['kendoGanttFlatBinding']
7410
+ }] } });
7411
+
7412
+ /**
7413
+ * A directive which binds the Gantt to a tree of objects,
7414
+ * which encapsulates the in-memory handling of data operations such as sorting and filtering.
7415
+ */
7416
+ class GanttHierarchyBindingDirective extends HierarchyBindingDirective {
7417
+ /**
7418
+ * @hidden
7419
+ */
7420
+ set aggregate(value) {
7421
+ super.aggregate = value;
7422
+ }
7423
+ }
7424
+ GanttHierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHierarchyBindingDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7425
+ GanttHierarchyBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttHierarchyBindingDirective, isStandalone: true, selector: "[kendoGanttHierarchyBinding]", inputs: { data: ["kendoGanttHierarchyBinding", "data"] }, exportAs: ["kendoGanttHierarchyBinding"], usesInheritance: true, ngImport: i0 });
7426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHierarchyBindingDirective, decorators: [{
7427
+ type: Directive,
7428
+ args: [{
7429
+ selector: '[kendoGanttHierarchyBinding]',
7430
+ exportAs: 'kendoGanttHierarchyBinding',
7431
+ standalone: true
7432
+ }]
7433
+ }], propDecorators: { data: [{
7434
+ type: Input,
7435
+ args: ['kendoGanttHierarchyBinding']
7436
+ }] } });
7437
+
7438
+ /**
7439
+ * A directive which controls the expanded state of the items.
7440
+ */
7441
+ class GanttExpandableDirective extends ExpandableDirective {
7442
+ /**
7443
+ * Defines the item key that will be stored in the expandedKeys collection.
7444
+ * Defaults to the task data item ID field,
7445
+ * which is specified in the [`taskModelFields`]({% slug api_gantt_ganttcomponent %}#toc-taskmodelfields) object.
7446
+ *
7447
+ */
7448
+ set expandBy(value) {
7449
+ super.expandBy = value;
7450
+ }
7451
+ }
7452
+ GanttExpandableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttExpandableDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7453
+ GanttExpandableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttExpandableDirective, isStandalone: true, selector: "[kendoGanttExpandable]", inputs: { expandBy: "expandBy" }, exportAs: ["kendoGanttExpandable"], usesInheritance: true, ngImport: i0 });
7454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttExpandableDirective, decorators: [{
7455
+ type: Directive,
7456
+ args: [{
7457
+ exportAs: 'kendoGanttExpandable',
7458
+ selector: '[kendoGanttExpandable]',
7459
+ standalone: true
7460
+ }]
7461
+ }], propDecorators: { expandBy: [{
7462
+ type: Input
7463
+ }] } });
7464
+
7540
7465
  /**
7541
7466
  * When added to the .k-task-dot, the element will be kept with hover styles.
7542
7467
  * Used for the drag clue from which the dragging has started.
@@ -7831,11 +7756,12 @@ class DependencyDragCreateDirective {
7831
7756
  }
7832
7757
  }
7833
7758
  DependencyDragCreateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependencyDragCreateDirective, deps: [{ token: GanttComponent }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: MappingService }, { token: i3.PopupService }, { token: TimelineScrollService }], target: i0.ɵɵFactoryTarget.Directive });
7834
- DependencyDragCreateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: DependencyDragCreateDirective, selector: "[kendoGanttDependencyDragCreate]", inputs: { displayValidationTooltip: "displayValidationTooltip" }, ngImport: i0 });
7759
+ DependencyDragCreateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: DependencyDragCreateDirective, isStandalone: true, selector: "[kendoGanttDependencyDragCreate]", inputs: { displayValidationTooltip: "displayValidationTooltip" }, ngImport: i0 });
7835
7760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependencyDragCreateDirective, decorators: [{
7836
7761
  type: Directive,
7837
7762
  args: [{
7838
- selector: '[kendoGanttDependencyDragCreate]'
7763
+ selector: '[kendoGanttDependencyDragCreate]',
7764
+ standalone: true
7839
7765
  }]
7840
7766
  }], ctorParameters: function () { return [{ type: GanttComponent }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: MappingService }, { type: i3.PopupService }, { type: TimelineScrollService }]; }, propDecorators: { displayValidationTooltip: [{
7841
7767
  type: Input
@@ -7854,7 +7780,7 @@ class TimelineDayViewComponent extends ViewBase {
7854
7780
  }
7855
7781
  }
7856
7782
  TimelineDayViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineDayViewComponent, deps: [{ token: OptionChangesService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Component });
7857
- TimelineDayViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineDayViewComponent, selector: "kendo-gantt-timeline-day-view", providers: [
7783
+ TimelineDayViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineDayViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-day-view", providers: [
7858
7784
  {
7859
7785
  provide: ViewBase,
7860
7786
  useExisting: forwardRef(() => TimelineDayViewComponent)
@@ -7870,7 +7796,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7870
7796
  provide: ViewBase,
7871
7797
  useExisting: forwardRef(() => TimelineDayViewComponent)
7872
7798
  }
7873
- ]
7799
+ ],
7800
+ standalone: true
7874
7801
  }]
7875
7802
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7876
7803
 
@@ -7887,7 +7814,7 @@ class TimelineWeekViewComponent extends ViewBase {
7887
7814
  }
7888
7815
  }
7889
7816
  TimelineWeekViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineWeekViewComponent, deps: [{ token: OptionChangesService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Component });
7890
- TimelineWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineWeekViewComponent, selector: "kendo-gantt-timeline-week-view", providers: [
7817
+ TimelineWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineWeekViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-week-view", providers: [
7891
7818
  {
7892
7819
  provide: ViewBase,
7893
7820
  useExisting: forwardRef(() => TimelineWeekViewComponent)
@@ -7903,7 +7830,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7903
7830
  provide: ViewBase,
7904
7831
  useExisting: forwardRef(() => TimelineWeekViewComponent)
7905
7832
  }
7906
- ]
7833
+ ],
7834
+ standalone: true
7907
7835
  }]
7908
7836
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7909
7837
 
@@ -7920,7 +7848,7 @@ class TimelineMonthViewComponent extends ViewBase {
7920
7848
  }
7921
7849
  }
7922
7850
  TimelineMonthViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineMonthViewComponent, deps: [{ token: OptionChangesService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Component });
7923
- TimelineMonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineMonthViewComponent, selector: "kendo-gantt-timeline-month-view", providers: [
7851
+ TimelineMonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineMonthViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-month-view", providers: [
7924
7852
  {
7925
7853
  provide: ViewBase,
7926
7854
  useExisting: forwardRef(() => TimelineMonthViewComponent)
@@ -7936,7 +7864,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7936
7864
  provide: ViewBase,
7937
7865
  useExisting: forwardRef(() => TimelineMonthViewComponent)
7938
7866
  }
7939
- ]
7867
+ ],
7868
+ standalone: true
7940
7869
  }]
7941
7870
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7942
7871
 
@@ -7953,7 +7882,7 @@ class TimelineYearViewComponent extends ViewBase {
7953
7882
  }
7954
7883
  }
7955
7884
  TimelineYearViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineYearViewComponent, deps: [{ token: OptionChangesService }, { token: DependencyDomService }], target: i0.ɵɵFactoryTarget.Component });
7956
- TimelineYearViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineYearViewComponent, selector: "kendo-gantt-timeline-year-view", providers: [
7885
+ TimelineYearViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineYearViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-year-view", providers: [
7957
7886
  {
7958
7887
  provide: ViewBase,
7959
7888
  useExisting: forwardRef(() => TimelineYearViewComponent)
@@ -7969,10 +7898,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7969
7898
  provide: ViewBase,
7970
7899
  useExisting: forwardRef(() => TimelineYearViewComponent)
7971
7900
  }
7972
- ]
7901
+ ],
7902
+ standalone: true
7973
7903
  }]
7974
7904
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7975
7905
 
7906
+ /**
7907
+ * A directive which handles the [`selectionChange`]({% slug api_gantt_ganttcomponent %}#toc-selectionchange) event of the Gantt
7908
+ * ([see example]({% slug selection_gantt %}#toc-built-in-directive))
7909
+ */
7910
+ class SelectableDirective {
7911
+ constructor(gantt) {
7912
+ this.gantt = gantt;
7913
+ /**
7914
+ * Fires when the selected keys are changed.
7915
+ */
7916
+ this.selectedKeysChange = new EventEmitter();
7917
+ this.state = new Set();
7918
+ this.isSelected = this.isSelected.bind(this);
7919
+ this.selectionChange = this.selectionChange.bind(this);
7920
+ this.selectable = true;
7921
+ }
7922
+ /**
7923
+ * @hidden
7924
+ */
7925
+ set selectable(value) {
7926
+ if (value) {
7927
+ this.gantt.isSelected = this.isSelected;
7928
+ this.subscribeSelection();
7929
+ }
7930
+ else {
7931
+ this.gantt.isSelected = () => false;
7932
+ this.unsubscribeSelection();
7933
+ }
7934
+ this.gantt.selectable = value;
7935
+ this.gantt.updateView();
7936
+ }
7937
+ /**
7938
+ * Sets the selected keys.
7939
+ */
7940
+ set selectedKeys(value) {
7941
+ if (isPresent(value) && value === this.lastChange) {
7942
+ return;
7943
+ }
7944
+ // prevent multiple items displayed as selected as multiple selection still not supported fully
7945
+ const keys = (value || []).slice(0, 1);
7946
+ this.state = new Set(keys);
7947
+ this.gantt.updateView();
7948
+ }
7949
+ /**
7950
+ * The field name or a function that specifies the data item unique key identifier.
7951
+ * By default, the string field `id` is used.
7952
+ */
7953
+ set itemKey(value) {
7954
+ if (isString(value)) {
7955
+ this._keyGetter = getter(value);
7956
+ }
7957
+ else {
7958
+ this._keyGetter = value;
7959
+ }
7960
+ }
7961
+ get keyGetter() {
7962
+ return this._keyGetter || this.gantt.idGetter;
7963
+ }
7964
+ ngOnDestroy() {
7965
+ this.unsubscribeSelection();
7966
+ }
7967
+ isSelected(dataItem) {
7968
+ return this.state.has(this.keyGetter(dataItem));
7969
+ }
7970
+ selectionChange({ action, items }) {
7971
+ this.state.clear();
7972
+ if (action === 'select') {
7973
+ items.forEach(item => this.state.add(this.keyGetter(item)));
7974
+ }
7975
+ this.emitSelectedItemsChange();
7976
+ }
7977
+ emitSelectedItemsChange() {
7978
+ this.lastChange = Array.from(this.state);
7979
+ this.selectedKeysChange.emit(this.lastChange);
7980
+ }
7981
+ subscribeSelection() {
7982
+ this.unsubscribeSelection();
7983
+ this.selectionSubscription = this.gantt.selectionChange.subscribe(this.selectionChange);
7984
+ }
7985
+ unsubscribeSelection() {
7986
+ if (this.selectionSubscription) {
7987
+ this.selectionSubscription.unsubscribe();
7988
+ this.selectionSubscription = null;
7989
+ }
7990
+ }
7991
+ }
7992
+ SelectableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectableDirective, deps: [{ token: GanttComponent }], target: i0.ɵɵFactoryTarget.Directive });
7993
+ SelectableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: SelectableDirective, isStandalone: true, selector: "[kendoGanttSelectable]", inputs: { selectable: "selectable", selectedKeys: "selectedKeys", itemKey: "itemKey" }, outputs: { selectedKeysChange: "selectedKeysChange" }, exportAs: ["kendoGanttSelectable"], ngImport: i0 });
7994
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectableDirective, decorators: [{
7995
+ type: Directive,
7996
+ args: [{
7997
+ exportAs: 'kendoGanttSelectable',
7998
+ selector: '[kendoGanttSelectable]',
7999
+ standalone: true
8000
+ }]
8001
+ }], ctorParameters: function () { return [{ type: GanttComponent }]; }, propDecorators: { selectable: [{
8002
+ type: Input
8003
+ }], selectedKeys: [{
8004
+ type: Input
8005
+ }], selectedKeysChange: [{
8006
+ type: Output
8007
+ }], itemKey: [{
8008
+ type: Input
8009
+ }] } });
8010
+
7976
8011
  /**
7977
8012
  * Custom component messages override default component messages
7978
8013
  * ([see example](slug:globalization_treelist#toc-custom-messages)).
@@ -7987,7 +8022,7 @@ class CustomMessagesComponent extends Messages {
7987
8022
  }
7988
8023
  }
7989
8024
  CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
7990
- CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CustomMessagesComponent, selector: "kendo-gantt-messages", providers: [
8025
+ CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-gantt-messages", providers: [
7991
8026
  {
7992
8027
  provide: Messages,
7993
8028
  useExisting: forwardRef(() => CustomMessagesComponent)
@@ -8003,74 +8038,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
8003
8038
  }
8004
8039
  ],
8005
8040
  selector: 'kendo-gantt-messages',
8006
- template: ``
8041
+ template: ``,
8042
+ standalone: true
8007
8043
  }]
8008
8044
  }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });
8009
8045
 
8010
- const IMPORTED_MODULES = [
8011
- CommonModule,
8012
- ReactiveFormsModule,
8013
- LabelModule,
8014
- InputsModule,
8015
- DateInputsModule,
8016
- ButtonsModule,
8017
- SplitterModule,
8018
- TreeListModule,
8019
- ButtonsModule,
8020
- DialogModule,
8021
- EventsModule,
8022
- PopupModule,
8023
- DraggableModule,
8024
- TabStripModule,
8025
- GridModule,
8026
- DropDownsModule,
8027
- IconsModule,
8028
- IntlModule,
8029
- WatermarkModule
8030
- ];
8031
- const DECLARATIONS = [
8046
+ /**
8047
+ * Utility array that contains all `@progress/kendo-angular-gantt` related components and directives
8048
+ */
8049
+ const KENDO_GANTT = [
8032
8050
  GanttComponent,
8033
8051
  GanttFlatBindingDirective,
8034
8052
  GanttHierarchyBindingDirective,
8035
- GanttTaskComponent,
8036
- GanttSummaryTaskComponent,
8037
- GanttMilestoneTaskComponent,
8038
- GanttTimelineComponent,
8039
- GanttTasksTableBodyComponent,
8040
- GanttHeaderTableBodyComponent,
8041
8053
  GanttTaskContentTemplateDirective,
8042
8054
  GanttTaskTemplateDirective,
8043
8055
  GanttSummaryTaskTemplateDirective,
8044
8056
  ToolbarTemplateDirective,
8045
- ToolbarComponent,
8046
8057
  ViewSelectorComponent,
8047
8058
  GanttColumnComponent,
8048
8059
  GanttColumnGroupComponent,
8049
8060
  GanttSpanColumnComponent,
8050
- FilterMenuTemplateDirective,
8051
8061
  FilterCellTemplateDirective,
8062
+ FilterMenuTemplateDirective,
8052
8063
  CellTemplateDirective,
8053
8064
  EditTemplateDirective,
8054
8065
  ColumnMenuTemplateDirective,
8055
8066
  HeaderTemplateDirective,
8056
8067
  FooterTemplateDirective,
8057
8068
  GanttExpandableDirective,
8058
- GanttDependencyDirective,
8059
8069
  DependencyDragCreateDirective,
8060
8070
  TimelineDayViewComponent,
8061
8071
  TimelineWeekViewComponent,
8062
8072
  TimelineMonthViewComponent,
8063
8073
  TimelineYearViewComponent,
8064
8074
  SelectableDirective,
8065
- EditDialogComponent,
8066
8075
  CustomMessagesComponent,
8067
- LocalizedMessagesDirective,
8068
- GanttAddTaskComponent,
8069
- DragValidationTooltipComponent,
8070
- TimelineScrollableDirective,
8071
- DependenciesTableComponent,
8072
- TaskFieldsComponent
8076
+ GanttAddTaskComponent
8073
8077
  ];
8078
+
8079
+ // IMPORTANT: NgModule export kept for backwards compatibility
8074
8080
  /**
8075
8081
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
8076
8082
  * definition for the Gantt component.
@@ -8105,126 +8111,71 @@ const DECLARATIONS = [
8105
8111
  class GanttModule {
8106
8112
  }
8107
8113
  GanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8108
- GanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, declarations: [GanttComponent,
8109
- GanttFlatBindingDirective,
8110
- GanttHierarchyBindingDirective,
8111
- GanttTaskComponent,
8112
- GanttSummaryTaskComponent,
8113
- GanttMilestoneTaskComponent,
8114
- GanttTimelineComponent,
8115
- GanttTasksTableBodyComponent,
8116
- GanttHeaderTableBodyComponent,
8117
- GanttTaskContentTemplateDirective,
8118
- GanttTaskTemplateDirective,
8119
- GanttSummaryTaskTemplateDirective,
8120
- ToolbarTemplateDirective,
8121
- ToolbarComponent,
8122
- ViewSelectorComponent,
8123
- GanttColumnComponent,
8124
- GanttColumnGroupComponent,
8125
- GanttSpanColumnComponent,
8126
- FilterMenuTemplateDirective,
8127
- FilterCellTemplateDirective,
8128
- CellTemplateDirective,
8129
- EditTemplateDirective,
8130
- ColumnMenuTemplateDirective,
8131
- HeaderTemplateDirective,
8132
- FooterTemplateDirective,
8133
- GanttExpandableDirective,
8134
- GanttDependencyDirective,
8135
- DependencyDragCreateDirective,
8136
- TimelineDayViewComponent,
8137
- TimelineWeekViewComponent,
8138
- TimelineMonthViewComponent,
8139
- TimelineYearViewComponent,
8140
- SelectableDirective,
8141
- EditDialogComponent,
8142
- CustomMessagesComponent,
8143
- LocalizedMessagesDirective,
8144
- GanttAddTaskComponent,
8145
- DragValidationTooltipComponent,
8146
- TimelineScrollableDirective,
8147
- DependenciesTableComponent,
8148
- TaskFieldsComponent], imports: [CommonModule,
8149
- ReactiveFormsModule,
8150
- LabelModule,
8151
- InputsModule,
8152
- DateInputsModule,
8153
- ButtonsModule,
8154
- SplitterModule,
8155
- TreeListModule,
8156
- ButtonsModule,
8157
- DialogModule,
8158
- EventsModule,
8159
- PopupModule,
8160
- DraggableModule,
8161
- TabStripModule,
8162
- GridModule,
8163
- DropDownsModule,
8164
- IconsModule,
8165
- IntlModule,
8166
- WatermarkModule], exports: [GanttComponent,
8167
- GanttFlatBindingDirective,
8168
- GanttHierarchyBindingDirective,
8169
- GanttTaskComponent,
8170
- GanttSummaryTaskComponent,
8171
- GanttMilestoneTaskComponent,
8172
- GanttTimelineComponent,
8173
- GanttTasksTableBodyComponent,
8174
- GanttHeaderTableBodyComponent,
8175
- GanttTaskContentTemplateDirective,
8176
- GanttTaskTemplateDirective,
8177
- GanttSummaryTaskTemplateDirective,
8178
- ToolbarTemplateDirective,
8179
- ToolbarComponent,
8180
- ViewSelectorComponent,
8181
- GanttColumnComponent,
8182
- GanttColumnGroupComponent,
8183
- GanttSpanColumnComponent,
8184
- FilterMenuTemplateDirective,
8185
- FilterCellTemplateDirective,
8186
- CellTemplateDirective,
8187
- EditTemplateDirective,
8188
- ColumnMenuTemplateDirective,
8189
- HeaderTemplateDirective,
8190
- FooterTemplateDirective,
8191
- GanttExpandableDirective,
8192
- GanttDependencyDirective,
8193
- DependencyDragCreateDirective,
8194
- TimelineDayViewComponent,
8195
- TimelineWeekViewComponent,
8196
- TimelineMonthViewComponent,
8197
- TimelineYearViewComponent,
8198
- SelectableDirective,
8199
- EditDialogComponent,
8200
- CustomMessagesComponent,
8201
- LocalizedMessagesDirective,
8202
- GanttAddTaskComponent,
8203
- DragValidationTooltipComponent,
8204
- TimelineScrollableDirective,
8205
- DependenciesTableComponent,
8206
- TaskFieldsComponent] });
8114
+ GanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, imports: [GanttComponent, GanttFlatBindingDirective, GanttHierarchyBindingDirective, GanttTaskContentTemplateDirective, GanttTaskTemplateDirective, GanttSummaryTaskTemplateDirective, ToolbarTemplateDirective, ViewSelectorComponent, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, FilterCellTemplateDirective, FilterMenuTemplateDirective, CellTemplateDirective, EditTemplateDirective, ColumnMenuTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, GanttExpandableDirective, DependencyDragCreateDirective, TimelineDayViewComponent, TimelineWeekViewComponent, TimelineMonthViewComponent, TimelineYearViewComponent, SelectableDirective, CustomMessagesComponent, GanttAddTaskComponent], exports: [GanttComponent, GanttFlatBindingDirective, GanttHierarchyBindingDirective, GanttTaskContentTemplateDirective, GanttTaskTemplateDirective, GanttSummaryTaskTemplateDirective, ToolbarTemplateDirective, ViewSelectorComponent, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, FilterCellTemplateDirective, FilterMenuTemplateDirective, CellTemplateDirective, EditTemplateDirective, ColumnMenuTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, GanttExpandableDirective, DependencyDragCreateDirective, TimelineDayViewComponent, TimelineWeekViewComponent, TimelineMonthViewComponent, TimelineYearViewComponent, SelectableDirective, CustomMessagesComponent, GanttAddTaskComponent] });
8207
8115
  GanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, providers: [{
8208
8116
  provide: L10N_PREFIX,
8209
8117
  useValue: 'kendo.gantt'
8210
- }, {
8211
- provide: TOUCH_ENABLED,
8212
- useValue: touchEnabled
8213
- }], imports: [IMPORTED_MODULES] });
8118
+ },
8119
+ // InputsModule providers
8120
+ IconsService,
8121
+ PopupService,
8122
+ ResizeBatchService,
8123
+ DialogContainerService,
8124
+ DialogService,
8125
+ WindowService,
8126
+ WindowContainerService,
8127
+ // DateInputsModule providers
8128
+ CalendarDOMService,
8129
+ CenturyViewService,
8130
+ DecadeViewService,
8131
+ MonthViewService,
8132
+ YearViewService,
8133
+ WeekNamesService,
8134
+ NavigationService$1,
8135
+ TimePickerDOMService,
8136
+ HoursService,
8137
+ MinutesService,
8138
+ SecondsService,
8139
+ MillisecondsService,
8140
+ DayPeriodService,
8141
+ // TreeListModule providers
8142
+ ColumnResizingService
8143
+ ], imports: [GanttComponent, ViewSelectorComponent, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, TimelineDayViewComponent, TimelineWeekViewComponent, TimelineMonthViewComponent, TimelineYearViewComponent, CustomMessagesComponent, GanttAddTaskComponent] });
8214
8144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, decorators: [{
8215
8145
  type: NgModule,
8216
8146
  args: [{
8217
- imports: [...IMPORTED_MODULES],
8218
- declarations: [...DECLARATIONS],
8219
- exports: [...DECLARATIONS],
8147
+ imports: [...KENDO_GANTT],
8148
+ exports: [...KENDO_GANTT],
8220
8149
  entryComponents: [DragValidationTooltipComponent],
8221
8150
  providers: [{
8222
8151
  provide: L10N_PREFIX,
8223
8152
  useValue: 'kendo.gantt'
8224
- }, {
8225
- provide: TOUCH_ENABLED,
8226
- useValue: touchEnabled
8227
- }]
8153
+ },
8154
+ // InputsModule providers
8155
+ IconsService,
8156
+ PopupService,
8157
+ ResizeBatchService,
8158
+ DialogContainerService,
8159
+ DialogService,
8160
+ WindowService,
8161
+ WindowContainerService,
8162
+ // DateInputsModule providers
8163
+ CalendarDOMService,
8164
+ CenturyViewService,
8165
+ DecadeViewService,
8166
+ MonthViewService,
8167
+ YearViewService,
8168
+ WeekNamesService,
8169
+ NavigationService$1,
8170
+ TimePickerDOMService,
8171
+ HoursService,
8172
+ MinutesService,
8173
+ SecondsService,
8174
+ MillisecondsService,
8175
+ DayPeriodService,
8176
+ // TreeListModule providers
8177
+ ColumnResizingService
8178
+ ]
8228
8179
  }]
8229
8180
  }] });
8230
8181
 
@@ -8232,5 +8183,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
8232
8183
  * Generated bundle index. Do not edit.
8233
8184
  */
8234
8185
 
8235
- export { CellCloseEvent, CellTemplateDirective, ColumnMenuTemplateDirective, CustomMessagesComponent, DependenciesTableComponent, DependencyDragCreateDirective, DependencyType, DragValidationTooltipComponent, EditDialogComponent, EditTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective, FooterTemplateDirective, GanttAddTaskComponent, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttComponent, GanttDependencyDirective, GanttExpandableDirective, GanttFlatBindingDirective, GanttHeaderTableBodyComponent, GanttHierarchyBindingDirective, GanttMilestoneTaskComponent, GanttModule, GanttSpanColumnComponent, GanttSummaryTaskComponent, GanttSummaryTaskTemplateDirective, GanttTaskComponent, GanttTaskContentTemplateDirective, GanttTaskTemplateDirective, GanttTasksTableBodyComponent, GanttTimelineComponent, HeaderTemplateDirective, LocalizedMessagesDirective, SelectableDirective, TaskFieldsComponent, TimelineDayViewComponent, TimelineMonthViewComponent, TimelineScrollableDirective, TimelineWeekViewComponent, TimelineYearViewComponent, ToolbarComponent, ToolbarTemplateDirective, ViewSelectorComponent };
8186
+ export { CellCloseEvent, CellTemplateDirective, ColumnMenuTemplateDirective, CustomMessagesComponent, DependenciesTableComponent, DependencyDragCreateDirective, DependencyType, DragValidationTooltipComponent, EditDialogComponent, EditTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective, FooterTemplateDirective, GanttAddTaskComponent, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttComponent, GanttDependencyDirective, GanttExpandableDirective, GanttFlatBindingDirective, GanttHeaderTableBodyComponent, GanttHierarchyBindingDirective, GanttMilestoneTaskComponent, GanttModule, GanttSpanColumnComponent, GanttSummaryTaskComponent, GanttSummaryTaskTemplateDirective, GanttTaskComponent, GanttTaskContentTemplateDirective, GanttTaskTemplateDirective, GanttTasksTableBodyComponent, GanttTimelineComponent, HeaderTemplateDirective, KENDO_GANTT, LocalizedMessagesDirective, SelectableDirective, TaskFieldsComponent, TimelineDayViewComponent, TimelineMonthViewComponent, TimelineScrollableDirective, TimelineWeekViewComponent, TimelineYearViewComponent, ToolbarComponent, ToolbarTemplateDirective, ViewSelectorComponent };
8236
8187