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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/binding-directives/flat-binding.directive.d.ts +1 -1
  2. package/binding-directives/hierarchy-binding.directive.d.ts +1 -1
  3. package/columns/cell-template.directive.d.ts +1 -1
  4. package/columns/column-group.component.d.ts +1 -1
  5. package/columns/column-menu-template.directive.d.ts +1 -1
  6. package/columns/column.component.d.ts +1 -1
  7. package/columns/edit-template.directive.d.ts +1 -1
  8. package/columns/filter-cell-template.directive.d.ts +1 -1
  9. package/columns/filter-menu-template.directive.d.ts +1 -1
  10. package/columns/footer-template.directive.d.ts +1 -1
  11. package/columns/header-template.directive.d.ts +1 -1
  12. package/columns/span-column.component.d.ts +1 -1
  13. package/dependencies/gantt-dependency.directive.d.ts +1 -1
  14. package/directives.d.ts +29 -0
  15. package/dragging/dependency-drag-create.directive.d.ts +1 -1
  16. package/dragging/drag-validation-tooltip.component.d.ts +1 -1
  17. package/editing/add-task.component.d.ts +1 -1
  18. package/editing/dependencies-table.component.d.ts +1 -1
  19. package/editing/edit-dialog.component.d.ts +1 -1
  20. package/editing/task-fields.component.d.ts +1 -1
  21. package/esm2020/binding-directives/flat-binding.directive.mjs +3 -2
  22. package/esm2020/binding-directives/hierarchy-binding.directive.mjs +3 -2
  23. package/esm2020/columns/cell-template.directive.mjs +3 -2
  24. package/esm2020/columns/column-group.component.mjs +3 -2
  25. package/esm2020/columns/column-menu-template.directive.mjs +3 -2
  26. package/esm2020/columns/column.component.mjs +3 -2
  27. package/esm2020/columns/edit-template.directive.mjs +3 -2
  28. package/esm2020/columns/filter-cell-template.directive.mjs +3 -2
  29. package/esm2020/columns/filter-menu-template.directive.mjs +3 -2
  30. package/esm2020/columns/footer-template.directive.mjs +3 -2
  31. package/esm2020/columns/header-template.directive.mjs +3 -2
  32. package/esm2020/columns/span-column.component.mjs +3 -2
  33. package/esm2020/dependencies/gantt-dependency.directive.mjs +3 -2
  34. package/esm2020/directives.mjs +57 -0
  35. package/esm2020/dragging/dependency-drag-create.directive.mjs +3 -2
  36. package/esm2020/dragging/drag-validation-tooltip.component.mjs +3 -2
  37. package/esm2020/editing/add-task.component.mjs +7 -5
  38. package/esm2020/editing/dependencies-table.component.mjs +9 -7
  39. package/esm2020/editing/edit-dialog.component.mjs +12 -10
  40. package/esm2020/editing/task-fields.component.mjs +12 -9
  41. package/esm2020/expanded-state/expandable.directive.mjs +3 -2
  42. package/esm2020/gantt.component.mjs +14 -15
  43. package/esm2020/gantt.module.mjs +90 -214
  44. package/esm2020/index.mjs +1 -0
  45. package/esm2020/localization/custom-messages.component.mjs +3 -2
  46. package/esm2020/localization/localized-messages.directive.mjs +3 -2
  47. package/esm2020/package-metadata.mjs +2 -2
  48. package/esm2020/rendering/gantt-header-table-body.component.mjs +6 -4
  49. package/esm2020/rendering/gantt-milestone-task.component.mjs +6 -4
  50. package/esm2020/rendering/gantt-summary-task.component.mjs +6 -4
  51. package/esm2020/rendering/gantt-task.component.mjs +8 -6
  52. package/esm2020/rendering/gantt-tasks-table-body.component.mjs +9 -7
  53. package/esm2020/scrolling/timeline-scroll.directive.mjs +3 -2
  54. package/esm2020/selection/selectable.directive.mjs +3 -2
  55. package/esm2020/template-directives/summary-task-template.directive.mjs +3 -2
  56. package/esm2020/template-directives/task-content-template.directive.mjs +3 -2
  57. package/esm2020/template-directives/task-template.directive.mjs +3 -2
  58. package/esm2020/timeline/gantt-timeline.component.mjs +12 -10
  59. package/esm2020/timeline/timeline-day-view.component.mjs +3 -2
  60. package/esm2020/timeline/timeline-month-view.component.mjs +3 -2
  61. package/esm2020/timeline/timeline-week-view.component.mjs +3 -2
  62. package/esm2020/timeline/timeline-year-view.component.mjs +3 -2
  63. package/esm2020/toolbar/toolbar-template.directive.mjs +3 -2
  64. package/esm2020/toolbar/toolbar.component.mjs +8 -6
  65. package/esm2020/toolbar/view-selector.component.mjs +9 -6
  66. package/expanded-state/expandable.directive.d.ts +1 -1
  67. package/fesm2015/progress-kendo-angular-gantt.mjs +1803 -1840
  68. package/fesm2020/progress-kendo-angular-gantt.mjs +1950 -1987
  69. package/gantt.component.d.ts +1 -1
  70. package/gantt.module.d.ts +25 -54
  71. package/index.d.ts +1 -0
  72. package/localization/custom-messages.component.d.ts +1 -1
  73. package/localization/localized-messages.directive.d.ts +1 -1
  74. package/package.json +15 -15
  75. package/rendering/gantt-header-table-body.component.d.ts +1 -1
  76. package/rendering/gantt-milestone-task.component.d.ts +1 -1
  77. package/rendering/gantt-summary-task.component.d.ts +1 -1
  78. package/rendering/gantt-task.component.d.ts +1 -1
  79. package/rendering/gantt-tasks-table-body.component.d.ts +1 -1
  80. package/schematics/ngAdd/index.js +7 -7
  81. package/scrolling/timeline-scroll.directive.d.ts +1 -1
  82. package/selection/selectable.directive.d.ts +1 -1
  83. package/template-directives/summary-task-template.directive.d.ts +1 -1
  84. package/template-directives/task-content-template.directive.d.ts +1 -1
  85. package/template-directives/task-template.directive.d.ts +1 -1
  86. package/timeline/gantt-timeline.component.d.ts +1 -1
  87. package/timeline/timeline-day-view.component.d.ts +1 -1
  88. package/timeline/timeline-month-view.component.d.ts +1 -1
  89. package/timeline/timeline-week-view.component.d.ts +1 -1
  90. package/timeline/timeline-year-view.component.d.ts +1 -1
  91. package/toolbar/toolbar-template.directive.d.ts +1 -1
  92. package/toolbar/toolbar.component.d.ts +1 -1
  93. package/toolbar/view-selector.component.d.ts +1 -1
@@ -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, InjectionToken, 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: 1721828061,
44
+ version: '16.6.0-develop.1',
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
  */
@@ -1697,143 +1947,61 @@ GanttTaskBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version:
1697
1947
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskBase, decorators: [{
1698
1948
  type: Directive,
1699
1949
  args: [{
1700
- // eslint-disable-next-line @angular-eslint/directive-selector
1701
- selector: 'kendo-gantt-task-base'
1702
- }]
1703
- }], ctorParameters: function () { return [{ type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { wrapperClass: [{
1704
- type: HostBinding,
1705
- args: ['class.k-task-wrap']
1706
- }], taskIndexAttribute: [{
1707
- type: HostBinding,
1708
- args: ['attr.data-task-index']
1709
- }], taskElement: [{
1710
- type: ViewChild,
1711
- args: ['task', { static: true }]
1712
- }], dataItem: [{
1713
- type: Input
1714
- }], index: [{
1715
- type: Input
1716
- }], level: [{
1717
- type: Input
1718
- }], renderDependencyDragClues: [{
1719
- type: Input
1720
- }], selectable: [{
1721
- type: Input
1722
- }], isSelected: [{
1723
- type: Input
1724
- }], activeView: [{
1725
- type: Input
1726
- }], taskClass: [{
1727
- type: Input
1728
- }], taskOffset: [{
1729
- type: HostBinding,
1730
- args: ['style.left.px']
1731
- }] } });
1732
-
1733
- /**
1734
- * @hidden
1735
- */
1736
- class GanttTaskComponent extends GanttTaskBase {
1737
- constructor(editService, touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
1738
- super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
1739
- this.editService = editService;
1740
- this.touchEnabled = touchEnabled;
1741
- this.xIcon = xIcon;
1742
- }
1743
- onTaskDelete() {
1744
- this.editService.dataItem = this.dataItem;
1745
- this.editService.taskDelete.next(this.dataItem);
1746
- }
1747
- }
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: [
1750
- {
1751
- provide: GanttTaskBase,
1752
- useExisting: forwardRef(() => GanttTaskComponent)
1753
- }
1754
- ], usesInheritance: true, ngImport: i0, template: `
1755
- <div
1756
- #task
1757
- class="k-task k-task-single"
1758
- role="treeitem"
1759
- [ngClass]="taskClass(dataItem)"
1760
- [style.width.px]="taskWidth"
1761
- [attr.title]="mapper.extractFromTask(dataItem, 'title')"
1762
- [class.k-selected]="isSelected(dataItem)"
1763
- [attr.aria-selected]="ariaSelected"
1764
- [attr.aria-level]="level + 1"
1765
- >
1766
- <ng-container *ngIf="!taskTemplate">
1767
- <div
1768
- class="k-task-complete"
1769
- [style.width.px]="completionOverlayWidth"
1770
- aria-hidden="true"
1771
- >
1772
- </div>
1773
- <div class="k-task-content">
1774
- <div class="k-task-template">
1775
- <ng-container *ngIf="!taskContentTemplate; else taskContent">
1776
- {{ mapper.extractFromTask(dataItem, 'title') }}
1777
- </ng-container>
1778
- <ng-template
1779
- #taskContent
1780
- [ngTemplateOutlet]="taskContentTemplate"
1781
- [ngTemplateOutletContext]="{ $implicit: dataItem }"
1782
- >
1783
- </ng-template>
1784
- </div>
1785
- <span
1786
- class="k-task-actions"
1787
- aria-hidden="true"
1788
- >
1789
- <span
1790
- class="k-link k-task-delete"
1791
- [kendoEventsOutsideAngular]="{
1792
- click: onTaskDelete
1793
- }"
1794
- [scope]="this"
1795
- >
1796
- <kendo-icon-wrapper
1797
- icon="x"
1798
- [svgIcon]="xIcon"></kendo-icon-wrapper>
1799
- </span>
1800
- </span>
1801
- </div>
1802
- </ng-container>
1803
- <ng-template
1804
- *ngIf="taskTemplate"
1805
- [ngTemplateOutlet]="taskTemplate"
1806
- [ngTemplateOutletContext]="{
1807
- $implicit: dataItem,
1808
- elementWidth: taskWidth
1809
- }"
1810
- >
1811
- </ng-template>
1812
- </div>
1813
- <ng-container *ngIf="renderDependencyDragClues">
1814
- <div
1815
- class="k-task-dot k-task-start k-touch-action-none"
1816
- [class.k-display-block]="touchEnabled"
1817
- >
1818
- </div>
1819
- <div
1820
- class="k-task-dot k-task-end k-touch-action-none"
1821
- [class.k-display-block]="touchEnabled"
1822
- >
1823
- </div>
1824
- </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"] }] });
1826
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskComponent, decorators: [{
1827
- type: Component,
1828
- args: [{
1829
- selector: 'kendo-gantt-task',
1830
- providers: [
1831
- {
1832
- provide: GanttTaskBase,
1833
- useExisting: forwardRef(() => GanttTaskComponent)
1834
- }
1835
- ],
1836
- template: `
1950
+ // eslint-disable-next-line @angular-eslint/directive-selector
1951
+ selector: 'kendo-gantt-task-base'
1952
+ }]
1953
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { wrapperClass: [{
1954
+ type: HostBinding,
1955
+ args: ['class.k-task-wrap']
1956
+ }], taskIndexAttribute: [{
1957
+ type: HostBinding,
1958
+ args: ['attr.data-task-index']
1959
+ }], taskElement: [{
1960
+ type: ViewChild,
1961
+ args: ['task', { static: true }]
1962
+ }], dataItem: [{
1963
+ type: Input
1964
+ }], index: [{
1965
+ type: Input
1966
+ }], level: [{
1967
+ type: Input
1968
+ }], renderDependencyDragClues: [{
1969
+ type: Input
1970
+ }], selectable: [{
1971
+ type: Input
1972
+ }], isSelected: [{
1973
+ type: Input
1974
+ }], activeView: [{
1975
+ type: Input
1976
+ }], taskClass: [{
1977
+ type: Input
1978
+ }], taskOffset: [{
1979
+ type: HostBinding,
1980
+ args: ['style.left.px']
1981
+ }] } });
1982
+
1983
+ /**
1984
+ * @hidden
1985
+ */
1986
+ class GanttTaskComponent extends GanttTaskBase {
1987
+ constructor(editService, touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
1988
+ super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
1989
+ this.editService = editService;
1990
+ this.touchEnabled = touchEnabled;
1991
+ this.xIcon = xIcon;
1992
+ }
1993
+ onTaskDelete() {
1994
+ this.editService.dataItem = this.dataItem;
1995
+ this.editService.taskDelete.next(this.dataItem);
1996
+ }
1997
+ }
1998
+ 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 });
1999
+ 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: [
2000
+ {
2001
+ provide: GanttTaskBase,
2002
+ useExisting: forwardRef(() => GanttTaskComponent)
2003
+ }
2004
+ ], usesInheritance: true, ngImport: i0, template: `
1837
2005
  <div
1838
2006
  #task
1839
2007
  class="k-task k-task-single"
@@ -1878,205 +2046,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1878
2046
  <kendo-icon-wrapper
1879
2047
  icon="x"
1880
2048
  [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
- >
2015
- </div>
2016
- </div>
2017
- <ng-template
2018
- #summaryTemplate
2019
- [ngTemplateOutlet]="template"
2020
- [ngTemplateOutletContext]="{
2021
- $implicit: dataItem,
2022
- elementWidth: taskWidth
2023
- }"
2024
- >
2025
- </ng-template>
2026
- </div>
2027
- <ng-container *ngIf="renderDependencyDragClues">
2028
- <div
2029
- class="k-task-dot k-task-start k-touch-action-none"
2030
- [class.k-display-block]="touchEnabled"
2031
- >
2032
- </div>
2033
- <div
2034
- class="k-task-dot k-task-end k-touch-action-none"
2035
- [class.k-display-block]="touchEnabled"
2036
- >
2037
- </div>
2038
- </ng-container>
2039
- `
2040
- }]
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: [{
2048
- type: Input
2049
- }], isExpanded: [{
2050
- type: Input
2051
- }] } });
2052
-
2053
- /**
2054
- * @hidden
2055
- */
2056
- class GanttMilestoneTaskComponent extends GanttTaskBase {
2057
- constructor(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
2058
- super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
2059
- this.touchEnabled = touchEnabled;
2060
- this.milestoneWrapperClass = true;
2061
- }
2062
- }
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: [
2065
- {
2066
- provide: GanttTaskBase,
2067
- useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2068
- }
2069
- ], usesInheritance: true, ngImport: i0, template: `
2070
- <div
2071
- #task
2072
- role="treeitem"
2073
- class="k-task k-task-milestone"
2074
- [ngClass]="taskClass(dataItem)"
2075
- [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2076
- [class.k-selected]="isSelected(dataItem)"
2077
- [attr.aria-selected]="ariaSelected"
2078
- [attr.aria-level]="level + 1"
2079
- >
2049
+ </span>
2050
+ </span>
2051
+ </div>
2052
+ </ng-container>
2053
+ <ng-template
2054
+ *ngIf="taskTemplate"
2055
+ [ngTemplateOutlet]="taskTemplate"
2056
+ [ngTemplateOutletContext]="{
2057
+ $implicit: dataItem,
2058
+ elementWidth: taskWidth
2059
+ }"
2060
+ >
2061
+ </ng-template>
2080
2062
  </div>
2081
2063
  <ng-container *ngIf="renderDependencyDragClues">
2082
2064
  <div
@@ -2090,28 +2072,75 @@ GanttMilestoneTaskComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2090
2072
  >
2091
2073
  </div>
2092
2074
  </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: [{
2075
+ `, 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"] }] });
2076
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskComponent, decorators: [{
2095
2077
  type: Component,
2096
2078
  args: [{
2097
- selector: 'kendo-gantt-milestone-task',
2079
+ selector: 'kendo-gantt-task',
2098
2080
  providers: [
2099
2081
  {
2100
2082
  provide: GanttTaskBase,
2101
- useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2083
+ useExisting: forwardRef(() => GanttTaskComponent)
2102
2084
  }
2103
2085
  ],
2104
2086
  template: `
2105
2087
  <div
2106
2088
  #task
2089
+ class="k-task k-task-single"
2107
2090
  role="treeitem"
2108
- class="k-task k-task-milestone"
2109
2091
  [ngClass]="taskClass(dataItem)"
2092
+ [style.width.px]="taskWidth"
2110
2093
  [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2111
2094
  [class.k-selected]="isSelected(dataItem)"
2112
2095
  [attr.aria-selected]="ariaSelected"
2113
2096
  [attr.aria-level]="level + 1"
2114
2097
  >
2098
+ <ng-container *ngIf="!taskTemplate">
2099
+ <div
2100
+ class="k-task-complete"
2101
+ [style.width.px]="completionOverlayWidth"
2102
+ aria-hidden="true"
2103
+ >
2104
+ </div>
2105
+ <div class="k-task-content">
2106
+ <div class="k-task-template">
2107
+ <ng-container *ngIf="!taskContentTemplate; else taskContent">
2108
+ {{ mapper.extractFromTask(dataItem, 'title') }}
2109
+ </ng-container>
2110
+ <ng-template
2111
+ #taskContent
2112
+ [ngTemplateOutlet]="taskContentTemplate"
2113
+ [ngTemplateOutletContext]="{ $implicit: dataItem }"
2114
+ >
2115
+ </ng-template>
2116
+ </div>
2117
+ <span
2118
+ class="k-task-actions"
2119
+ aria-hidden="true"
2120
+ >
2121
+ <span
2122
+ class="k-link k-task-delete"
2123
+ [kendoEventsOutsideAngular]="{
2124
+ click: onTaskDelete
2125
+ }"
2126
+ [scope]="this"
2127
+ >
2128
+ <kendo-icon-wrapper
2129
+ icon="x"
2130
+ [svgIcon]="xIcon"></kendo-icon-wrapper>
2131
+ </span>
2132
+ </span>
2133
+ </div>
2134
+ </ng-container>
2135
+ <ng-template
2136
+ *ngIf="taskTemplate"
2137
+ [ngTemplateOutlet]="taskTemplate"
2138
+ [ngTemplateOutletContext]="{
2139
+ $implicit: dataItem,
2140
+ elementWidth: taskWidth
2141
+ }"
2142
+ >
2143
+ </ng-template>
2115
2144
  </div>
2116
2145
  <ng-container *ngIf="renderDependencyDragClues">
2117
2146
  <div
@@ -2119,469 +2148,395 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2119
2148
  [class.k-display-block]="touchEnabled"
2120
2149
  >
2121
2150
  </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
- `
2151
+ <div
2152
+ class="k-task-dot k-task-end k-touch-action-none"
2153
+ [class.k-display-block]="touchEnabled"
2154
+ >
2155
+ </div>
2156
+ </ng-container>
2157
+ `,
2158
+ standalone: true,
2159
+ imports: [NgClass, NgIf, NgTemplateOutlet, EventsOutsideAngularDirective, IconWrapperComponent]
2317
2160
  }]
2318
- }], propDecorators: { tbodyClass: [{
2319
- type: HostBinding,
2320
- args: ['class.k-table-tbody']
2321
- }], groupSlots: [{
2161
+ }], ctorParameters: function () { return [{ type: EditService }, { type: undefined, decorators: [{
2162
+ type: Inject,
2163
+ args: [TOUCH_ENABLED]
2164
+ }] }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { taskContentTemplate: [{
2322
2165
  type: Input
2323
- }], slots: [{
2166
+ }], taskTemplate: [{
2324
2167
  type: Input
2325
2168
  }] } });
2326
2169
 
2327
2170
  /**
2328
2171
  * @hidden
2329
- *
2330
- * Gets the offset (top and left values) relative to a target element.
2331
2172
  */
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;
2173
+ class GanttSummaryTaskComponent extends GanttTaskBase {
2174
+ constructor(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
2175
+ super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
2176
+ this.touchEnabled = touchEnabled;
2177
+ this.summaryWrapperClass = true;
2345
2178
  }
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
- /**
2360
- * @hidden
2361
- */
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));
2179
+ get ariaExpanded() {
2180
+ // if no callback is provided, all child items are displayed and the item is regarded as expanded
2181
+ // replicates the TreeList aria-expanded behavior
2182
+ const isExpanded = !isPresent(this.isExpanded) || this.isExpanded(this.dataItem);
2183
+ return String(isExpanded);
2391
2184
  }
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 });
2185
+ }
2186
+ 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 });
2187
+ 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: [
2188
+ {
2189
+ provide: GanttTaskBase,
2190
+ useExisting: forwardRef(() => GanttSummaryTaskComponent)
2428
2191
  }
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
- };
2192
+ ], usesInheritance: true, ngImport: i0, template: `
2193
+ <div
2194
+ #task
2195
+ role="treeitem"
2196
+ class="k-task k-task-summary"
2197
+ [ngClass]="taskClass(dataItem)"
2198
+ [style.width.px]="taskWidth"
2199
+ [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2200
+ [class.k-selected]="isSelected(dataItem)"
2201
+ [attr.aria-selected]="ariaSelected"
2202
+ [attr.aria-expanded]="ariaExpanded"
2203
+ [attr.aria-level]="level + 1"
2204
+ >
2205
+ <div *ngIf="!template; else summaryTemplate"
2206
+ class="k-task-summary-progress"
2207
+ [style.width.px]="taskWidth">
2208
+ <div
2209
+ class="k-task-summary-complete"
2210
+ [style.width.px]="completionOverlayWidth"
2211
+ >
2212
+ </div>
2213
+ </div>
2214
+ <ng-template
2215
+ #summaryTemplate
2216
+ [ngTemplateOutlet]="template"
2217
+ [ngTemplateOutletContext]="{
2218
+ $implicit: dataItem,
2219
+ elementWidth: taskWidth
2220
+ }"
2221
+ >
2222
+ </ng-template>
2223
+ </div>
2224
+ <ng-container *ngIf="renderDependencyDragClues">
2225
+ <div
2226
+ class="k-task-dot k-task-start k-touch-action-none"
2227
+ [class.k-display-block]="touchEnabled"
2228
+ >
2229
+ </div>
2230
+ <div
2231
+ class="k-task-dot k-task-end k-touch-action-none"
2232
+ [class.k-display-block]="touchEnabled"
2233
+ >
2234
+ </div>
2235
+ </ng-container>
2236
+ `, 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"] }] });
2237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskComponent, decorators: [{
2238
+ type: Component,
2239
+ args: [{
2240
+ selector: 'kendo-gantt-summary-task',
2241
+ providers: [
2242
+ {
2243
+ provide: GanttTaskBase,
2244
+ useExisting: forwardRef(() => GanttSummaryTaskComponent)
2245
+ }
2246
+ ],
2247
+ template: `
2248
+ <div
2249
+ #task
2250
+ role="treeitem"
2251
+ class="k-task k-task-summary"
2252
+ [ngClass]="taskClass(dataItem)"
2253
+ [style.width.px]="taskWidth"
2254
+ [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2255
+ [class.k-selected]="isSelected(dataItem)"
2256
+ [attr.aria-selected]="ariaSelected"
2257
+ [attr.aria-expanded]="ariaExpanded"
2258
+ [attr.aria-level]="level + 1"
2259
+ >
2260
+ <div *ngIf="!template; else summaryTemplate"
2261
+ class="k-task-summary-progress"
2262
+ [style.width.px]="taskWidth">
2263
+ <div
2264
+ class="k-task-summary-complete"
2265
+ [style.width.px]="completionOverlayWidth"
2266
+ >
2267
+ </div>
2268
+ </div>
2269
+ <ng-template
2270
+ #summaryTemplate
2271
+ [ngTemplateOutlet]="template"
2272
+ [ngTemplateOutletContext]="{
2273
+ $implicit: dataItem,
2274
+ elementWidth: taskWidth
2275
+ }"
2276
+ >
2277
+ </ng-template>
2278
+ </div>
2279
+ <ng-container *ngIf="renderDependencyDragClues">
2280
+ <div
2281
+ class="k-task-dot k-task-start k-touch-action-none"
2282
+ [class.k-display-block]="touchEnabled"
2283
+ >
2284
+ </div>
2285
+ <div
2286
+ class="k-task-dot k-task-end k-touch-action-none"
2287
+ [class.k-display-block]="touchEnabled"
2288
+ >
2289
+ </div>
2290
+ </ng-container>
2291
+ `,
2292
+ standalone: true,
2293
+ imports: [NgClass, NgIf, NgTemplateOutlet]
2294
+ }]
2295
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
2296
+ type: Inject,
2297
+ args: [TOUCH_ENABLED]
2298
+ }] }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { summaryWrapperClass: [{
2299
+ type: HostBinding,
2300
+ args: ['class.k-summary-wrap']
2301
+ }], template: [{
2302
+ type: Input
2303
+ }], isExpanded: [{
2304
+ type: Input
2305
+ }] } });
2306
+
2501
2307
  /**
2502
2308
  * @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
2309
  */
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
- };
2310
+ class GanttMilestoneTaskComponent extends GanttTaskBase {
2311
+ constructor(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
2312
+ super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
2313
+ this.touchEnabled = touchEnabled;
2314
+ this.milestoneWrapperClass = true;
2315
+ }
2316
+ }
2317
+ 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 });
2318
+ 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: [
2319
+ {
2320
+ provide: GanttTaskBase,
2321
+ useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2322
+ }
2323
+ ], usesInheritance: true, ngImport: i0, template: `
2324
+ <div
2325
+ #task
2326
+ role="treeitem"
2327
+ class="k-task k-task-milestone"
2328
+ [ngClass]="taskClass(dataItem)"
2329
+ [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2330
+ [class.k-selected]="isSelected(dataItem)"
2331
+ [attr.aria-selected]="ariaSelected"
2332
+ [attr.aria-level]="level + 1"
2333
+ >
2334
+ </div>
2335
+ <ng-container *ngIf="renderDependencyDragClues">
2336
+ <div
2337
+ class="k-task-dot k-task-start k-touch-action-none"
2338
+ [class.k-display-block]="touchEnabled"
2339
+ >
2340
+ </div>
2341
+ <div
2342
+ class="k-task-dot k-task-end k-touch-action-none"
2343
+ [class.k-display-block]="touchEnabled"
2344
+ >
2345
+ </div>
2346
+ </ng-container>
2347
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttMilestoneTaskComponent, decorators: [{
2349
+ type: Component,
2350
+ args: [{
2351
+ selector: 'kendo-gantt-milestone-task',
2352
+ providers: [
2353
+ {
2354
+ provide: GanttTaskBase,
2355
+ useExisting: forwardRef(() => GanttMilestoneTaskComponent)
2356
+ }
2357
+ ],
2358
+ template: `
2359
+ <div
2360
+ #task
2361
+ role="treeitem"
2362
+ class="k-task k-task-milestone"
2363
+ [ngClass]="taskClass(dataItem)"
2364
+ [attr.title]="mapper.extractFromTask(dataItem, 'title')"
2365
+ [class.k-selected]="isSelected(dataItem)"
2366
+ [attr.aria-selected]="ariaSelected"
2367
+ [attr.aria-level]="level + 1"
2368
+ >
2369
+ </div>
2370
+ <ng-container *ngIf="renderDependencyDragClues">
2371
+ <div
2372
+ class="k-task-dot k-task-start k-touch-action-none"
2373
+ [class.k-display-block]="touchEnabled"
2374
+ >
2375
+ </div>
2376
+ <div
2377
+ class="k-task-dot k-task-end k-touch-action-none"
2378
+ [class.k-display-block]="touchEnabled"
2379
+ >
2380
+ </div>
2381
+ </ng-container>
2382
+ `,
2383
+ standalone: true,
2384
+ imports: [NgClass, NgIf]
2385
+ }]
2386
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
2387
+ type: Inject,
2388
+ args: [TOUCH_ENABLED]
2389
+ }] }, { type: MappingService }, { type: TimelineViewService }, { type: DependencyDomService }, { type: OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { milestoneWrapperClass: [{
2390
+ type: HostBinding,
2391
+ args: ['class.k-milestone-wrap']
2392
+ }] } });
2517
2393
 
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
2394
  /**
2527
2395
  * @hidden
2528
2396
  */
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;
2397
+ class GanttTasksTableBodyComponent {
2398
+ constructor(dependencyDomService, mapper) {
2535
2399
  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
- }
2400
+ this.mapper = mapper;
2551
2401
  }
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;
2402
+ set timelineRow(timelineRow) {
2403
+ // register the row value only when the first row is rendered
2404
+ // with server-side data-binding, the rows rendering could be delayed
2405
+ if (isPresent(timelineRow)) {
2406
+ this.dependencyDomService.registerTimelineRow(timelineRow.nativeElement);
2558
2407
  }
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
2408
  }
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);
2409
+ isMileStone(item) {
2410
+ return !item.hasChildren && isEqual(this.mapper.extractFromTask(item.data, 'start'), this.mapper.extractFromTask(item.data, 'end'));
2575
2411
  }
2576
2412
  }
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,
2413
+ 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 });
2414
+ 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: `
2415
+ <tr class="k-table-row" #timelineRow *ngFor="let item of rows; let index = index">
2416
+ <td class="k-table-td">
2417
+ <kendo-gantt-milestone-task
2418
+ *ngIf="isMileStone(item); else task"
2419
+ [dataItem]="item.data"
2420
+ [level]="item.level"
2421
+ [activeView]="activeView"
2422
+ [taskClass]="taskClass"
2423
+ [selectable]="selectable"
2424
+ [isSelected]="isTaskSelected"
2425
+ [index]="index"
2426
+ [renderDependencyDragClues]="renderDependencyDragClues"
2427
+ >
2428
+ </kendo-gantt-milestone-task>
2429
+ <ng-template #task>
2430
+ <kendo-gantt-summary-task
2431
+ *ngIf="item.hasChildren"
2432
+ [dataItem]="item.data"
2433
+ [level]="item.level"
2434
+ [template]="summaryTaskTemplate"
2435
+ [activeView]="activeView"
2436
+ [taskClass]="taskClass"
2437
+ [selectable]="selectable"
2438
+ [isSelected]="isTaskSelected"
2439
+ [isExpanded]="isExpanded"
2440
+ [index]="index"
2441
+ [renderDependencyDragClues]="renderDependencyDragClues"
2442
+ >
2443
+ </kendo-gantt-summary-task>
2444
+ <kendo-gantt-task
2445
+ *ngIf="!item.hasChildren"
2446
+ [dataItem]="item.data"
2447
+ [level]="item.level"
2448
+ [taskContentTemplate]="taskContentTemplate"
2449
+ [taskTemplate]="taskTemplate"
2450
+ [activeView]="activeView"
2451
+ [taskClass]="taskClass"
2452
+ [selectable]="selectable"
2453
+ [isSelected]="isTaskSelected"
2454
+ [index]="index"
2455
+ [renderDependencyDragClues]="renderDependencyDragClues"
2456
+ >
2457
+ </kendo-gantt-task>
2458
+ </ng-template>
2459
+ </td>
2460
+ </tr>
2461
+ `, 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"] }] });
2462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTasksTableBodyComponent, decorators: [{
2463
+ type: Component,
2581
2464
  args: [{
2582
- selector: '[kendoGanttDependency]'
2465
+ // eslint-disable-next-line @angular-eslint/component-selector
2466
+ selector: '[kendoGanttTasksTableBody]',
2467
+ template: `
2468
+ <tr class="k-table-row" #timelineRow *ngFor="let item of rows; let index = index">
2469
+ <td class="k-table-td">
2470
+ <kendo-gantt-milestone-task
2471
+ *ngIf="isMileStone(item); else task"
2472
+ [dataItem]="item.data"
2473
+ [level]="item.level"
2474
+ [activeView]="activeView"
2475
+ [taskClass]="taskClass"
2476
+ [selectable]="selectable"
2477
+ [isSelected]="isTaskSelected"
2478
+ [index]="index"
2479
+ [renderDependencyDragClues]="renderDependencyDragClues"
2480
+ >
2481
+ </kendo-gantt-milestone-task>
2482
+ <ng-template #task>
2483
+ <kendo-gantt-summary-task
2484
+ *ngIf="item.hasChildren"
2485
+ [dataItem]="item.data"
2486
+ [level]="item.level"
2487
+ [template]="summaryTaskTemplate"
2488
+ [activeView]="activeView"
2489
+ [taskClass]="taskClass"
2490
+ [selectable]="selectable"
2491
+ [isSelected]="isTaskSelected"
2492
+ [isExpanded]="isExpanded"
2493
+ [index]="index"
2494
+ [renderDependencyDragClues]="renderDependencyDragClues"
2495
+ >
2496
+ </kendo-gantt-summary-task>
2497
+ <kendo-gantt-task
2498
+ *ngIf="!item.hasChildren"
2499
+ [dataItem]="item.data"
2500
+ [level]="item.level"
2501
+ [taskContentTemplate]="taskContentTemplate"
2502
+ [taskTemplate]="taskTemplate"
2503
+ [activeView]="activeView"
2504
+ [taskClass]="taskClass"
2505
+ [selectable]="selectable"
2506
+ [isSelected]="isTaskSelected"
2507
+ [index]="index"
2508
+ [renderDependencyDragClues]="renderDependencyDragClues"
2509
+ >
2510
+ </kendo-gantt-task>
2511
+ </ng-template>
2512
+ </td>
2513
+ </tr>
2514
+ `,
2515
+ standalone: true,
2516
+ imports: [NgFor, NgIf, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskComponent]
2583
2517
  }]
2584
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: MappingService }, { type: DependencyDomService }]; }, propDecorators: { dependency: [{
2518
+ }], ctorParameters: function () { return [{ type: DependencyDomService }, { type: MappingService }]; }, propDecorators: { timelineRow: [{
2519
+ type: ViewChild,
2520
+ args: ['timelineRow', { static: false }]
2521
+ }], selectable: [{
2522
+ type: Input
2523
+ }], rows: [{
2524
+ type: Input
2525
+ }], activeView: [{
2526
+ type: Input
2527
+ }], taskContentTemplate: [{
2528
+ type: Input
2529
+ }], taskTemplate: [{
2530
+ type: Input
2531
+ }], summaryTaskTemplate: [{
2532
+ type: Input
2533
+ }], taskClass: [{
2534
+ type: Input
2535
+ }], isExpanded: [{
2536
+ type: Input
2537
+ }], isTaskSelected: [{
2538
+ type: Input
2539
+ }], renderDependencyDragClues: [{
2585
2540
  type: Input
2586
2541
  }] } });
2587
2542
 
@@ -2761,16 +2716,61 @@ class TimelineScrollableDirective {
2761
2716
  }
2762
2717
  }
2763
2718
  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 });
2719
+ TimelineScrollableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: TimelineScrollableDirective, isStandalone: true, selector: "[kendoGanttTimelineScrollable]", inputs: { scrollSettings: "scrollSettings" }, ngImport: i0 });
2765
2720
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TimelineScrollableDirective, decorators: [{
2766
2721
  type: Directive,
2767
2722
  args: [{
2768
- selector: '[kendoGanttTimelineScrollable]'
2723
+ selector: '[kendoGanttTimelineScrollable]',
2724
+ standalone: true
2769
2725
  }]
2770
2726
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: TimelineScrollService }, { type: i0.NgZone }]; }, propDecorators: { scrollSettings: [{
2771
2727
  type: Input
2772
2728
  }] } });
2773
2729
 
2730
+ /**
2731
+ * @hidden
2732
+ */
2733
+ class GanttHeaderTableBodyComponent {
2734
+ constructor() {
2735
+ this.tbodyClass = true;
2736
+ }
2737
+ }
2738
+ GanttHeaderTableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHeaderTableBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2739
+ 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: `
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
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHeaderTableBodyComponent, decorators: [{
2749
+ type: Component,
2750
+ args: [{
2751
+ // eslint-disable-next-line @angular-eslint/component-selector
2752
+ selector: '[kendoGanttHeaderTableBody]',
2753
+ template: `
2754
+ <tr class="k-table-row">
2755
+ <td *ngFor="let item of groupSlots" [attr.colspan]="item.span" class="k-header k-table-td">{{ item.text }}</td>
2756
+ </tr>
2757
+
2758
+ <tr class="k-table-row">
2759
+ <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>
2760
+ </tr>
2761
+ `,
2762
+ standalone: true,
2763
+ imports: [NgFor]
2764
+ }]
2765
+ }], propDecorators: { tbodyClass: [{
2766
+ type: HostBinding,
2767
+ args: ['class.k-table-tbody']
2768
+ }], groupSlots: [{
2769
+ type: Input
2770
+ }], slots: [{
2771
+ type: Input
2772
+ }] } });
2773
+
2774
2774
  /**
2775
2775
  * @hidden
2776
2776
  */
@@ -2840,7 +2840,7 @@ class GanttTimelineComponent {
2840
2840
  }
2841
2841
  }
2842
2842
  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: `
2843
+ 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
2844
  <div class="k-gantt-timeline k-grid k-grid-md">
2845
2845
  <div class="k-grid-header">
2846
2846
  <div #timelineHeaderWrap class="k-grid-header-wrap">
@@ -2943,7 +2943,7 @@ GanttTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
2943
2943
  <ng-container #dragPopupContainer></ng-container>
2944
2944
  </div>
2945
2945
  </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"] }] });
2946
+ `, 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
2947
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTimelineComponent, decorators: [{
2948
2948
  type: Component,
2949
2949
  args: [{
@@ -3051,7 +3051,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3051
3051
  <ng-container #dragPopupContainer></ng-container>
3052
3052
  </div>
3053
3053
  </div>
3054
- `
3054
+ `,
3055
+ standalone: true,
3056
+ imports: [TableDirective, GanttHeaderTableBodyComponent, TimelineScrollableDirective, DraggableDirective, NgFor, GanttTasksTableBodyComponent, GanttDependencyDirective]
3055
3057
  }]
3056
3058
  }], ctorParameters: function () { return [{ type: ScrollSyncService }, { type: DependencyDomService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: CurrentTimeMarkerService }]; }, propDecorators: { timelineContent: [{
3057
3059
  type: ViewChild,
@@ -3182,11 +3184,12 @@ class CellTemplateDirective {
3182
3184
  }
3183
3185
  }
3184
3186
  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 });
3187
+ CellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: CellTemplateDirective, isStandalone: true, selector: "[kendoGanttCellTemplate]", ngImport: i0 });
3186
3188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CellTemplateDirective, decorators: [{
3187
3189
  type: Directive,
3188
3190
  args: [{
3189
- selector: '[kendoGanttCellTemplate]'
3191
+ selector: '[kendoGanttCellTemplate]',
3192
+ standalone: true
3190
3193
  }]
3191
3194
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3192
3195
  type: Optional
@@ -3208,11 +3211,12 @@ class ColumnMenuTemplateDirective {
3208
3211
  }
3209
3212
  }
3210
3213
  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 });
3214
+ ColumnMenuTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ColumnMenuTemplateDirective, isStandalone: true, selector: "[kendoGanttColumnMenuTemplate]", ngImport: i0 });
3212
3215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ColumnMenuTemplateDirective, decorators: [{
3213
3216
  type: Directive,
3214
3217
  args: [{
3215
- selector: '[kendoGanttColumnMenuTemplate]'
3218
+ selector: '[kendoGanttColumnMenuTemplate]',
3219
+ standalone: true
3216
3220
  }]
3217
3221
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3218
3222
  type: Optional
@@ -3233,11 +3237,12 @@ class FilterCellTemplateDirective {
3233
3237
  }
3234
3238
  }
3235
3239
  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 });
3240
+ FilterCellTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FilterCellTemplateDirective, isStandalone: true, selector: "[kendoGanttFilterCellTemplate]", ngImport: i0 });
3237
3241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterCellTemplateDirective, decorators: [{
3238
3242
  type: Directive,
3239
3243
  args: [{
3240
- selector: '[kendoGanttFilterCellTemplate]'
3244
+ selector: '[kendoGanttFilterCellTemplate]',
3245
+ standalone: true
3241
3246
  }]
3242
3247
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3243
3248
  type: Optional
@@ -3257,11 +3262,12 @@ class FilterMenuTemplateDirective {
3257
3262
  }
3258
3263
  }
3259
3264
  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 });
3265
+ FilterMenuTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FilterMenuTemplateDirective, isStandalone: true, selector: "[kendoGanttFilterMenuTemplate]", ngImport: i0 });
3261
3266
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterMenuTemplateDirective, decorators: [{
3262
3267
  type: Directive,
3263
3268
  args: [{
3264
- selector: '[kendoGanttFilterMenuTemplate]'
3269
+ selector: '[kendoGanttFilterMenuTemplate]',
3270
+ standalone: true
3265
3271
  }]
3266
3272
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3267
3273
  type: Optional
@@ -3285,11 +3291,12 @@ class FooterTemplateDirective {
3285
3291
  }
3286
3292
  }
3287
3293
  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 });
3294
+ FooterTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FooterTemplateDirective, isStandalone: true, selector: "[kendoGanttFooterTemplate]", ngImport: i0 });
3289
3295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FooterTemplateDirective, decorators: [{
3290
3296
  type: Directive,
3291
3297
  args: [{
3292
- selector: '[kendoGanttFooterTemplate]'
3298
+ selector: '[kendoGanttFooterTemplate]',
3299
+ standalone: true
3293
3300
  }]
3294
3301
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3295
3302
  type: Optional
@@ -3311,11 +3318,12 @@ class HeaderTemplateDirective {
3311
3318
  }
3312
3319
  }
3313
3320
  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 });
3321
+ HeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: HeaderTemplateDirective, isStandalone: true, selector: "[kendoGanttHeaderTemplate]", ngImport: i0 });
3315
3322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderTemplateDirective, decorators: [{
3316
3323
  type: Directive,
3317
3324
  args: [{
3318
- selector: '[kendoGanttHeaderTemplate]'
3325
+ selector: '[kendoGanttHeaderTemplate]',
3326
+ standalone: true
3319
3327
  }]
3320
3328
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3321
3329
  type: Optional
@@ -3341,11 +3349,12 @@ class EditTemplateDirective {
3341
3349
  }
3342
3350
  }
3343
3351
  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 });
3352
+ EditTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: EditTemplateDirective, isStandalone: true, selector: "[kendoGanttEditTemplate]", ngImport: i0 });
3345
3353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditTemplateDirective, decorators: [{
3346
3354
  type: Directive,
3347
3355
  args: [{
3348
- selector: '[kendoGanttEditTemplate]'
3356
+ selector: '[kendoGanttEditTemplate]',
3357
+ standalone: true
3349
3358
  }]
3350
3359
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3351
3360
  type: Optional
@@ -3395,7 +3404,7 @@ class GanttColumnComponent extends ColumnComponent {
3395
3404
  }
3396
3405
  }
3397
3406
  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: [
3407
+ 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
3408
  {
3400
3409
  provide: GanttColumnBase,
3401
3410
  useExisting: forwardRef(() => GanttColumnComponent)
@@ -3411,7 +3420,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3411
3420
  provide: GanttColumnBase,
3412
3421
  useExisting: forwardRef(() => GanttColumnComponent)
3413
3422
  }
3414
- ]
3423
+ ],
3424
+ standalone: true
3415
3425
  }]
3416
3426
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: GanttColumnBase, decorators: [{
3417
3427
  type: SkipSelf
@@ -3507,7 +3517,7 @@ class GanttColumnGroupComponent extends ColumnGroupComponent {
3507
3517
  }
3508
3518
  }
3509
3519
  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: [
3520
+ 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
3521
  {
3512
3522
  provide: GanttColumnBase,
3513
3523
  useExisting: forwardRef(() => GanttColumnGroupComponent)
@@ -3523,7 +3533,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3523
3533
  provide: GanttColumnBase,
3524
3534
  useExisting: forwardRef(() => GanttColumnGroupComponent)
3525
3535
  }
3526
- ]
3536
+ ],
3537
+ standalone: true
3527
3538
  }]
3528
3539
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: GanttColumnBase, decorators: [{
3529
3540
  type: SkipSelf
@@ -3610,7 +3621,7 @@ class GanttSpanColumnComponent extends SpanColumnComponent {
3610
3621
  }
3611
3622
  }
3612
3623
  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: [
3624
+ 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
3625
  {
3615
3626
  provide: GanttColumnBase,
3616
3627
  useExisting: forwardRef(() => GanttSpanColumnComponent)
@@ -3626,7 +3637,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3626
3637
  provide: GanttColumnBase,
3627
3638
  useExisting: forwardRef(() => GanttSpanColumnComponent)
3628
3639
  }
3629
- ]
3640
+ ],
3641
+ standalone: true
3630
3642
  }]
3631
3643
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: GanttColumnBase, decorators: [{
3632
3644
  type: SkipSelf
@@ -3768,11 +3780,12 @@ class GanttTaskTemplateDirective {
3768
3780
  }
3769
3781
  }
3770
3782
  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 });
3783
+ GanttTaskTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskTemplateDirective, isStandalone: true, selector: "[kendoGanttTaskTemplate]", ngImport: i0 });
3772
3784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskTemplateDirective, decorators: [{
3773
3785
  type: Directive,
3774
3786
  args: [{
3775
- selector: '[kendoGanttTaskTemplate]'
3787
+ selector: '[kendoGanttTaskTemplate]',
3788
+ standalone: true
3776
3789
  }]
3777
3790
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3778
3791
  type: Optional
@@ -3813,11 +3826,12 @@ class GanttSummaryTaskTemplateDirective {
3813
3826
  }
3814
3827
  }
3815
3828
  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 });
3829
+ GanttSummaryTaskTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttSummaryTaskTemplateDirective, isStandalone: true, selector: "[kendoGanttSummaryTaskTemplate]", ngImport: i0 });
3817
3830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttSummaryTaskTemplateDirective, decorators: [{
3818
3831
  type: Directive,
3819
3832
  args: [{
3820
- selector: '[kendoGanttSummaryTaskTemplate]'
3833
+ selector: '[kendoGanttSummaryTaskTemplate]',
3834
+ standalone: true
3821
3835
  }]
3822
3836
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3823
3837
  type: Optional
@@ -3853,11 +3867,12 @@ class GanttTaskContentTemplateDirective {
3853
3867
  }
3854
3868
  }
3855
3869
  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 });
3870
+ GanttTaskContentTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: GanttTaskContentTemplateDirective, isStandalone: true, selector: "[kendoGanttTaskContentTemplate]", ngImport: i0 });
3857
3871
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttTaskContentTemplateDirective, decorators: [{
3858
3872
  type: Directive,
3859
3873
  args: [{
3860
- selector: '[kendoGanttTaskContentTemplate]'
3874
+ selector: '[kendoGanttTaskContentTemplate]',
3875
+ standalone: true
3861
3876
  }]
3862
3877
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3863
3878
  type: Optional
@@ -3972,11 +3987,12 @@ class ToolbarTemplateDirective {
3972
3987
  }
3973
3988
  }
3974
3989
  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 });
3990
+ ToolbarTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ToolbarTemplateDirective, isStandalone: true, selector: "[kendoGanttToolbarTemplate]", inputs: { position: "position" }, ngImport: i0 });
3976
3991
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarTemplateDirective, decorators: [{
3977
3992
  type: Directive,
3978
3993
  args: [{
3979
- selector: '[kendoGanttToolbarTemplate]'
3994
+ selector: '[kendoGanttToolbarTemplate]',
3995
+ standalone: true
3980
3996
  }]
3981
3997
  }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
3982
3998
  type: Optional
@@ -4044,851 +4060,863 @@ const mapPath = (item) => ({
4044
4060
  /**
4045
4061
  * @hidden
4046
4062
  */
4047
- class ToolbarNavigationService {
4048
- constructor(renderer) {
4049
- this.renderer = renderer;
4050
- this.focusIndex = 0;
4063
+ class DependenciesTableComponent {
4064
+ constructor(mapper, editService, localizationService) {
4065
+ this.mapper = mapper;
4066
+ this.editService = editService;
4067
+ this.localizationService = localizationService;
4068
+ this.dependenciesChange = new EventEmitter();
4069
+ this.selectedKeys = [];
4070
+ this.formGroups = new FormArray([]);
4071
+ this.dependencyTypes = this.getDependencyTypes();
4072
+ this.plusIcon = plusIcon;
4073
+ this.minusIcon = minusIcon;
4051
4074
  }
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();
4075
+ get taskId() {
4076
+ return this.editService.dataItem.id;
4058
4077
  }
4059
- }
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
- ToolbarNavigationService.ɵprov = 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 }]; } });
4065
-
4066
- /**
4067
- * The Gantt ViewSelector component. Shows the currently active view type, and allows switching to another view type.
4068
- */
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();
4078
+ // The target dependency id field
4079
+ // e.g. if Predecessors, we have the `fromId` which is the currently edited task,
4080
+ // while the `toId` is missing (needs to be selected by the user)
4081
+ get dependencyIdField() {
4082
+ return this.dependencyType === 'predecessor' ? 'fromId' : 'toId';
4082
4083
  }
4083
- /**
4084
- * @hidden
4085
- */
4086
- onClick(viewType) {
4087
- if (viewType !== this.activeView) {
4088
- this.activeViewChange.emit(viewType);
4084
+ ngOnInit() {
4085
+ // generate the FormGroups per each Grid row
4086
+ if (this.formGroups.controls.length === 0) {
4087
+ const fields = this.mapper.dependencyFields;
4088
+ this.dependencies.forEach(item => {
4089
+ const formGroup = new FormGroup({
4090
+ [fields.id]: new FormControl(this.mapper.extractFromDependency(item, 'id')),
4091
+ [fields.fromId]: new FormControl(this.mapper.extractFromDependency(item, 'fromId'), Validators.required),
4092
+ [fields.toId]: new FormControl(this.mapper.extractFromDependency(item, 'toId'), Validators.required),
4093
+ [fields.type]: new FormControl(this.mapper.extractFromDependency(item, 'type'), Validators.required)
4094
+ });
4095
+ this.formGroups.push(formGroup);
4096
+ });
4089
4097
  }
4098
+ this.formGroups.valueChanges.subscribe(val => {
4099
+ this.formGroups.controls.forEach(control => {
4100
+ if (control.dirty) {
4101
+ this.editService.updateDependencies(control.value);
4102
+ }
4103
+ });
4104
+ this.dependenciesChange.emit(val);
4105
+ });
4090
4106
  }
4091
- /**
4092
- * @hidden
4093
- */
4094
- getViewTypeText(viewType) {
4095
- return this.localizationService.get(`${viewType}ViewText`);
4107
+ getFormControl(dataItemIndex, field) {
4108
+ // return the FormControl for the respective column editor
4109
+ return this.formGroups.controls
4110
+ .find((_control, index) => index === dataItemIndex)
4111
+ .get(this.mapper.dependencyFields[field]);
4096
4112
  }
4097
- /**
4098
- * @hidden
4099
- */
4100
- onActiveViewChange(event) {
4101
- this.activeViewChange.emit(event.target.value);
4113
+ getText(token) {
4114
+ return this.localizationService.get(token);
4115
+ }
4116
+ getDependencyTypes() {
4117
+ const types = Object.keys(DependencyType)
4118
+ .filter(value => typeof DependencyType[value] === 'number')
4119
+ .map(type => {
4120
+ return {
4121
+ type,
4122
+ id: DependencyType[type]
4123
+ };
4124
+ });
4125
+ return types;
4126
+ }
4127
+ addHandler() {
4128
+ const fields = this.mapper.dependencyFields;
4129
+ const formGroup = new FormGroup({
4130
+ [fields.id]: new FormControl(),
4131
+ [fields.fromId]: new FormControl(this.dependencyIdField === 'toId' ? this.taskId : null, Validators.required),
4132
+ [fields.toId]: new FormControl(this.dependencyIdField === 'fromId' ? this.taskId : null, Validators.required),
4133
+ [fields.type]: new FormControl(null, Validators.required)
4134
+ });
4135
+ this.formGroups.push(formGroup);
4136
+ }
4137
+ removeHandler() {
4138
+ const [selectedIndex] = this.selectedKeys;
4139
+ const item = this.formGroups.at(selectedIndex).value;
4140
+ this.editService.deleteDependency(item);
4141
+ this.formGroups.removeAt(selectedIndex);
4102
4142
  }
4103
4143
  }
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
- ViewSelectorComponent.ɵcmp = 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: [{
4144
+ 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 });
4145
+ 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: `
4146
+ <kendo-grid
4147
+ [data]="dependencies"
4148
+ [selectable]="{ mode: 'single' }"
4149
+ [(selectedKeys)]="selectedKeys"
4150
+ kendoGridSelectBy
4151
+ [height]="275"
4152
+ >
4153
+ <ng-template kendoGridToolbarTemplate>
4154
+ <button
4155
+ kendoButton
4156
+ icon="plus"
4157
+ [svgIcon]="plusIcon"
4158
+ (click)="addHandler()"
4159
+ >
4160
+ {{ getText('taskEditingDependenciesAddButtonText') }}
4161
+ </button>
4162
+ <button
4163
+ kendoButton
4164
+ icon="minus"
4165
+ [svgIcon]="minusIcon"
4166
+ [disabled]="selectedKeys.length === 0"
4167
+ (click)="removeHandler()"
4168
+ >
4169
+ {{ getText('taskEditingDependenciesRemoveButtonText') }}
4170
+ </button>
4171
+ </ng-template>
4172
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
4173
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4174
+ <kendo-dropdownlist
4175
+ [data]="tasks"
4176
+ textField="title"
4177
+ valueField="id"
4178
+ [valuePrimitive]="true"
4179
+ [formControl]="getFormControl(rowIndex, column.field)"
4180
+ >
4181
+ </kendo-dropdownlist>
4182
+ </ng-template>
4183
+ </kendo-grid-column>
4184
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
4185
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4186
+ <kendo-dropdownlist
4187
+ [data]="dependencyTypes"
4188
+ textField="type"
4189
+ valueField="id"
4190
+ [valuePrimitive]="true"
4191
+ [formControl]="getFormControl(rowIndex, column.field)"
4192
+ >
4193
+ </kendo-dropdownlist>
4194
+ </ng-template>
4195
+ </kendo-grid-column>
4196
+ </kendo-grid>
4197
+ `, 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"] }] });
4198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependenciesTableComponent, decorators: [{
4122
4199
  type: Component,
4123
4200
  args: [{
4124
- selector: 'kendo-gantt-view-selector',
4201
+ selector: 'kendo-gantt-dependencies-table',
4125
4202
  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
- `
4203
+ <kendo-grid
4204
+ [data]="dependencies"
4205
+ [selectable]="{ mode: 'single' }"
4206
+ [(selectedKeys)]="selectedKeys"
4207
+ kendoGridSelectBy
4208
+ [height]="275"
4209
+ >
4210
+ <ng-template kendoGridToolbarTemplate>
4211
+ <button
4212
+ kendoButton
4213
+ icon="plus"
4214
+ [svgIcon]="plusIcon"
4215
+ (click)="addHandler()"
4216
+ >
4217
+ {{ getText('taskEditingDependenciesAddButtonText') }}
4218
+ </button>
4219
+ <button
4220
+ kendoButton
4221
+ icon="minus"
4222
+ [svgIcon]="minusIcon"
4223
+ [disabled]="selectedKeys.length === 0"
4224
+ (click)="removeHandler()"
4225
+ >
4226
+ {{ getText('taskEditingDependenciesRemoveButtonText') }}
4227
+ </button>
4228
+ </ng-template>
4229
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
4230
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4231
+ <kendo-dropdownlist
4232
+ [data]="tasks"
4233
+ textField="title"
4234
+ valueField="id"
4235
+ [valuePrimitive]="true"
4236
+ [formControl]="getFormControl(rowIndex, column.field)"
4237
+ >
4238
+ </kendo-dropdownlist>
4239
+ </ng-template>
4240
+ </kendo-grid-column>
4241
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
4242
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
4243
+ <kendo-dropdownlist
4244
+ [data]="dependencyTypes"
4245
+ textField="type"
4246
+ valueField="id"
4247
+ [valuePrimitive]="true"
4248
+ [formControl]="getFormControl(rowIndex, column.field)"
4249
+ >
4250
+ </kendo-dropdownlist>
4251
+ </ng-template>
4252
+ </kendo-grid-column>
4253
+ </kendo-grid>
4254
+ `,
4255
+ standalone: true,
4256
+ imports: [GridComponent, SelectionDirective, ToolbarTemplateDirective$1, ButtonComponent, ColumnComponent$1, CellTemplateDirective$1, DropDownListComponent, ReactiveFormsModule]
4141
4257
  }]
4142
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; }, propDecorators: { hostClass: [{
4143
- type: HostBinding,
4144
- args: ['class.k-gantt-views-wrapper']
4145
- }], views: [{
4258
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; }, propDecorators: { tasks: [{
4146
4259
  type: Input
4147
- }], activeView: [{
4260
+ }], dependencies: [{
4148
4261
  type: Input
4149
- }], activeViewChange: [{
4262
+ }], dependencyType: [{
4263
+ type: Input
4264
+ }], dependenciesChange: [{
4150
4265
  type: Output
4151
4266
  }] } });
4152
4267
 
4153
4268
  /**
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.
4269
+ * @hidden
4156
4270
  */
4157
- class GanttAddTaskComponent {
4158
- constructor(localizationService, editService, ngZone) {
4159
- this.localizationService = localizationService;
4271
+ class TaskFieldsComponent {
4272
+ constructor(mapper, editService, localizationService) {
4273
+ this.mapper = mapper;
4160
4274
  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
- }
4275
+ this.localizationService = localizationService;
4200
4276
  }
4201
4277
  /**
4202
4278
  * @hidden
4203
4279
  */
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
- }
4280
+ get formGroup() {
4281
+ return this.editService.taskFormGroup;
4213
4282
  }
4214
- /**
4215
- * @hidden
4216
- */
4217
- handleItemClick(e) {
4218
- this.editService.addEvent.next({
4219
- actionType: e.type,
4220
- selectedItem: null
4221
- });
4283
+ getText(token) {
4284
+ return this.localizationService.get(token);
4222
4285
  }
4223
4286
  }
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
- GanttAddTaskComponent.ɵcmp = 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: [{
4287
+ 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 });
4288
+ TaskFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TaskFieldsComponent, isStandalone: true, selector: "kendo-gantt-task-fields", ngImport: i0, template: `
4289
+ <form class="k-form k-form-md" [formGroup]="formGroup">
4290
+ <kendo-formfield *ngIf="formGroup.get(mapper.taskFields.title)">
4291
+ <kendo-label [for]="title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4292
+ <input #title kendoTextBox [formControlName]="mapper.taskFields.title" />
4293
+ </kendo-formfield>
4294
+ <div class="k-hstack">
4295
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.start)">
4296
+ <kendo-label [for]="start" [text]="getText('startFieldInputLabel')"></kendo-label>
4297
+ <kendo-datetimepicker #start [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4298
+ </kendo-formfield>
4299
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4300
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.end)">
4301
+ <kendo-label [for]="end" [text]="getText('endFieldInputLabel')"></kendo-label>
4302
+ <kendo-datetimepicker #end [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4303
+ </kendo-formfield>
4304
+ </div>
4305
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.completionRatio)">
4306
+ <kendo-label [for]="completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4307
+ <kendo-numerictextbox
4308
+ #completionRatio
4309
+ [formControlName]="mapper.taskFields.completionRatio"
4310
+ [min]="0"
4311
+ [max]="1"
4312
+ [decimals]="2"
4313
+ format="p2"
4314
+ [step]="0.01"
4315
+ ></kendo-numerictextbox>
4316
+ </kendo-formfield>
4317
+ </form>
4318
+ `, 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"] }] });
4319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TaskFieldsComponent, decorators: [{
4238
4320
  type: Component,
4239
4321
  args: [{
4240
- selector: 'kendo-gantt-add-task',
4322
+ selector: 'kendo-gantt-task-fields',
4241
4323
  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
- `
4324
+ <form class="k-form k-form-md" [formGroup]="formGroup">
4325
+ <kendo-formfield *ngIf="formGroup.get(mapper.taskFields.title)">
4326
+ <kendo-label [for]="title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4327
+ <input #title kendoTextBox [formControlName]="mapper.taskFields.title" />
4328
+ </kendo-formfield>
4329
+ <div class="k-hstack">
4330
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.start)">
4331
+ <kendo-label [for]="start" [text]="getText('startFieldInputLabel')"></kendo-label>
4332
+ <kendo-datetimepicker #start [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4333
+ </kendo-formfield>
4334
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4335
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.end)">
4336
+ <kendo-label [for]="end" [text]="getText('endFieldInputLabel')"></kendo-label>
4337
+ <kendo-datetimepicker #end [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4338
+ </kendo-formfield>
4339
+ </div>
4340
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.get(mapper.taskFields.completionRatio)">
4341
+ <kendo-label [for]="completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4342
+ <kendo-numerictextbox
4343
+ #completionRatio
4344
+ [formControlName]="mapper.taskFields.completionRatio"
4345
+ [min]="0"
4346
+ [max]="1"
4347
+ [decimals]="2"
4348
+ format="p2"
4349
+ [step]="0.01"
4350
+ ></kendo-numerictextbox>
4351
+ </kendo-formfield>
4352
+ </form>
4353
+ `,
4354
+ standalone: true,
4355
+ imports: [ReactiveFormsModule, NgIf, FormFieldComponent, LabelComponent, TextBoxDirective, DateTimePickerComponent, TreeListSpacerComponent, NumericTextBoxComponent]
4253
4356
  }]
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
4260
- }] } });
4357
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; } });
4261
4358
 
4262
4359
  /**
4263
4360
  * @hidden
4264
4361
  */
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();
4362
+ class EditDialogComponent {
4363
+ constructor(mapper, editService, cdr, localizationService) {
4364
+ this.mapper = mapper;
4365
+ this.editService = editService;
4366
+ this.cdr = cdr;
4367
+ this.localizationService = localizationService;
4368
+ this.saveIcon = saveIcon;
4369
+ this.cancelIcon = cancelOutlineIcon;
4370
+ this.deleteIcon = trashIcon;
4273
4371
  }
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
- }
4372
+ ngOnInit() {
4373
+ this.editService.loadTasks(this.data).subscribe(value => {
4374
+ this.loadedTasks = value;
4375
+ });
4283
4376
  }
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
- }
4377
+ get predecessors() {
4378
+ return this.editService.predecessors;
4292
4379
  }
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();
4300
- }
4380
+ set predecessors(items) {
4381
+ this.editService.predecessors = items;
4301
4382
  }
4302
- set position(value) {
4303
- this.context.position = this._position = value;
4383
+ get successors() {
4384
+ return this.editService.successors;
4304
4385
  }
4305
- get position() {
4306
- return this._position;
4386
+ set successors(items) {
4387
+ this.editService.successors = items;
4307
4388
  }
4308
- get toolbarTemplateRef() {
4309
- return this.toolbarTemplate ? this.toolbarTemplate.templateRef : undefined;
4389
+ getText(token) {
4390
+ return this.localizationService.get(token);
4310
4391
  }
4311
- get renderTemplate() {
4312
- const ganttToolbarTemplate = this.toolbarTemplate;
4313
- const templatePosition = ganttToolbarTemplate ? ganttToolbarTemplate.position : null;
4314
- return ganttToolbarTemplate && (templatePosition === 'both' || templatePosition === this.position);
4392
+ getDependencyType(typeId) {
4393
+ return DependencyType[typeId];
4315
4394
  }
4316
- handleViewChange(view) {
4317
- this.activeViewChange.emit(view);
4395
+ handleEditingResult(editResultType) {
4396
+ this.editService.triggerEditEvent(editResultType);
4318
4397
  }
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
- }
4326
- }
4398
+ handleTaskDelete() {
4399
+ this.editService.taskDelete.next(this.editService.dataItem);
4327
4400
  }
4328
4401
  }
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
- ToolbarComponent.ɵcmp = 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: [{
4402
+ 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 });
4403
+ 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: `
4404
+ <kendo-dialog
4405
+ [title]="getText('taskEditingDialogTitle')"
4406
+ [width]="575"
4407
+ [height]="470"
4408
+ [autoFocusedElement]="'.k-actions .k-button-solid-primary'"
4409
+ (close)="handleEditingResult('cancel')">
4410
+ <kendo-dialog-messages
4411
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4412
+
4413
+ <kendo-tabstrip [keepTabContent]="true" [style.height.px]="345">
4414
+ <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
4415
+ <ng-template kendoTabContent>
4416
+ <kendo-gantt-task-fields></kendo-gantt-task-fields>
4417
+ </ng-template>
4418
+ </kendo-tabstrip-tab>
4419
+ <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
4420
+ <ng-template kendoTabContent>
4421
+ <kendo-gantt-dependencies-table
4422
+ [tasks]="loadedTasks"
4423
+ [(dependencies)]="predecessors"
4424
+ dependencyType="predecessor"
4425
+ >
4426
+ </kendo-gantt-dependencies-table>
4427
+ </ng-template>
4428
+ </kendo-tabstrip-tab>
4429
+ <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
4430
+ <ng-template kendoTabContent>
4431
+ <kendo-gantt-dependencies-table
4432
+ [tasks]="loadedTasks"
4433
+ [(dependencies)]="successors"
4434
+ dependencyType="successor">
4435
+ </kendo-gantt-dependencies-table>
4436
+ </ng-template>
4437
+ </kendo-tabstrip-tab>
4438
+ </kendo-tabstrip>
4439
+
4440
+ <kendo-dialog-actions layout="start">
4441
+ <button
4442
+ kendoButton
4443
+ themeColor="primary"
4444
+ icon="save"
4445
+ [svgIcon]="saveIcon"
4446
+ (click)="handleEditingResult('save')"
4447
+ >
4448
+ {{ getText('saveButtonText') }}
4449
+ </button>
4450
+ <button
4451
+ kendoButton
4452
+ icon="cancel-outline"
4453
+ [svgIcon]="cancelIcon"
4454
+ (click)="handleEditingResult('cancel')"
4455
+ >
4456
+ {{ getText('cancelButtonText') }}
4457
+ </button>
4458
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4459
+ <button
4460
+ kendoButton
4461
+ themeColor="primary"
4462
+ fillMode="flat"
4463
+ icon="delete"
4464
+ [svgIcon]="deleteIcon"
4465
+ [kendoEventsOutsideAngular]="{
4466
+ click: handleTaskDelete
4467
+ }"
4468
+ [scope]="this"
4469
+ >
4470
+ {{ getText('deleteButtonText') }}
4471
+ </button>
4472
+ </kendo-dialog-actions>
4473
+ </kendo-dialog>
4474
+ `, 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"] }] });
4475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditDialogComponent, decorators: [{
4348
4476
  type: Component,
4349
4477
  args: [{
4350
- selector: 'kendo-gantt-toolbar',
4351
- providers: [ToolbarNavigationService],
4478
+ selector: 'kendo-gantt-edit-dialog',
4352
4479
  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
- `
4480
+ <kendo-dialog
4481
+ [title]="getText('taskEditingDialogTitle')"
4482
+ [width]="575"
4483
+ [height]="470"
4484
+ [autoFocusedElement]="'.k-actions .k-button-solid-primary'"
4485
+ (close)="handleEditingResult('cancel')">
4486
+ <kendo-dialog-messages
4487
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4488
+
4489
+ <kendo-tabstrip [keepTabContent]="true" [style.height.px]="345">
4490
+ <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
4491
+ <ng-template kendoTabContent>
4492
+ <kendo-gantt-task-fields></kendo-gantt-task-fields>
4493
+ </ng-template>
4494
+ </kendo-tabstrip-tab>
4495
+ <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
4496
+ <ng-template kendoTabContent>
4497
+ <kendo-gantt-dependencies-table
4498
+ [tasks]="loadedTasks"
4499
+ [(dependencies)]="predecessors"
4500
+ dependencyType="predecessor"
4501
+ >
4502
+ </kendo-gantt-dependencies-table>
4503
+ </ng-template>
4504
+ </kendo-tabstrip-tab>
4505
+ <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
4506
+ <ng-template kendoTabContent>
4507
+ <kendo-gantt-dependencies-table
4508
+ [tasks]="loadedTasks"
4509
+ [(dependencies)]="successors"
4510
+ dependencyType="successor">
4511
+ </kendo-gantt-dependencies-table>
4512
+ </ng-template>
4513
+ </kendo-tabstrip-tab>
4514
+ </kendo-tabstrip>
4515
+
4516
+ <kendo-dialog-actions layout="start">
4517
+ <button
4518
+ kendoButton
4519
+ themeColor="primary"
4520
+ icon="save"
4521
+ [svgIcon]="saveIcon"
4522
+ (click)="handleEditingResult('save')"
4523
+ >
4524
+ {{ getText('saveButtonText') }}
4525
+ </button>
4526
+ <button
4527
+ kendoButton
4528
+ icon="cancel-outline"
4529
+ [svgIcon]="cancelIcon"
4530
+ (click)="handleEditingResult('cancel')"
4531
+ >
4532
+ {{ getText('cancelButtonText') }}
4533
+ </button>
4534
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4535
+ <button
4536
+ kendoButton
4537
+ themeColor="primary"
4538
+ fillMode="flat"
4539
+ icon="delete"
4540
+ [svgIcon]="deleteIcon"
4541
+ [kendoEventsOutsideAngular]="{
4542
+ click: handleTaskDelete
4543
+ }"
4544
+ [scope]="this"
4545
+ >
4546
+ {{ getText('deleteButtonText') }}
4547
+ </button>
4548
+ </kendo-dialog-actions>
4549
+ </kendo-dialog>
4550
+ `,
4551
+ standalone: true,
4552
+ imports: [DialogComponent, CustomMessagesComponent$1, TabStripComponent, TabStripTabComponent, TabContentDirective, TaskFieldsComponent, DependenciesTableComponent, DialogActionsComponent, ButtonComponent, TreeListSpacerComponent, EventsOutsideAngularDirective]
4369
4553
  }]
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: [{
4396
- type: Input
4397
- }], navigable: [{
4398
- type: Input
4399
- }], position: [{
4554
+ }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: i0.ChangeDetectorRef }, { type: i1$1.LocalizationService }]; }, propDecorators: { data: [{
4400
4555
  type: Input
4401
4556
  }] } });
4402
4557
 
4403
4558
  /**
4404
4559
  * @hidden
4405
4560
  */
4406
- class DependenciesTableComponent {
4407
- constructor(mapper, editService, localizationService) {
4408
- this.mapper = mapper;
4409
- this.editService = editService;
4410
- this.localizationService = localizationService;
4411
- this.dependenciesChange = new EventEmitter();
4412
- this.selectedKeys = [];
4413
- this.formGroups = new FormArray([]);
4414
- this.dependencyTypes = this.getDependencyTypes();
4415
- this.plusIcon = plusIcon;
4416
- this.minusIcon = minusIcon;
4417
- }
4418
- get taskId() {
4419
- return this.editService.dataItem.id;
4420
- }
4421
- // The target dependency id field
4422
- // e.g. if Predecessors, we have the `fromId` which is the currently edited task,
4423
- // while the `toId` is missing (needs to be selected by the user)
4424
- get dependencyIdField() {
4425
- return this.dependencyType === 'predecessor' ? 'fromId' : 'toId';
4561
+ class ToolbarNavigationService {
4562
+ constructor(renderer) {
4563
+ this.renderer = renderer;
4564
+ this.focusIndex = 0;
4426
4565
  }
4427
- ngOnInit() {
4428
- // generate the FormGroups per each Grid row
4429
- if (this.formGroups.controls.length === 0) {
4430
- const fields = this.mapper.dependencyFields;
4431
- this.dependencies.forEach(item => {
4432
- const formGroup = new FormGroup({
4433
- [fields.id]: new FormControl(this.mapper.extractFromDependency(item, 'id')),
4434
- [fields.fromId]: new FormControl(this.mapper.extractFromDependency(item, 'fromId'), Validators.required),
4435
- [fields.toId]: new FormControl(this.mapper.extractFromDependency(item, 'toId'), Validators.required),
4436
- [fields.type]: new FormControl(this.mapper.extractFromDependency(item, 'type'), Validators.required)
4437
- });
4438
- this.formGroups.push(formGroup);
4439
- });
4440
- }
4441
- this.formGroups.valueChanges.subscribe(val => {
4442
- this.formGroups.controls.forEach(control => {
4443
- if (control.dirty) {
4444
- this.editService.updateDependencies(control.value);
4445
- }
4446
- });
4447
- this.dependenciesChange.emit(val);
4566
+ updateFocus() {
4567
+ this.focusableContent.forEach(el => {
4568
+ this.renderer.setAttribute(el, 'tabindex', '-1');
4448
4569
  });
4570
+ this.renderer.setAttribute(this.focusableContent[this.focusIndex], 'tabindex', '0');
4571
+ this.focusableContent[this.focusIndex].focus();
4449
4572
  }
4450
- getFormControl(dataItemIndex, field) {
4451
- // return the FormControl for the respective column editor
4452
- return this.formGroups.controls
4453
- .find((_control, index) => index === dataItemIndex)
4454
- .get(this.mapper.dependencyFields[field]);
4455
- }
4456
- getText(token) {
4457
- return this.localizationService.get(token);
4573
+ }
4574
+ ToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
4575
+ ToolbarNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService });
4576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarNavigationService, decorators: [{
4577
+ type: Injectable
4578
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
4579
+
4580
+ /**
4581
+ * The Gantt ViewSelector component. Shows the currently active view type, and allows switching to another view type.
4582
+ */
4583
+ class ViewSelectorComponent {
4584
+ constructor(localizationService) {
4585
+ this.localizationService = localizationService;
4586
+ this.hostClass = true;
4587
+ /**
4588
+ * The currently active view type.
4589
+ * @default 'week'
4590
+ */
4591
+ this.activeView = 'week';
4592
+ /**
4593
+ * Fires each time the user selects a different view type. The event data contains the type of the newly selected view.
4594
+ */
4595
+ this.activeViewChange = new EventEmitter();
4458
4596
  }
4459
- getDependencyTypes() {
4460
- const types = Object.keys(DependencyType)
4461
- .filter(value => typeof DependencyType[value] === 'number')
4462
- .map(type => {
4463
- return {
4464
- type,
4465
- id: DependencyType[type]
4466
- };
4467
- });
4468
- return types;
4597
+ /**
4598
+ * @hidden
4599
+ */
4600
+ onClick(viewType) {
4601
+ if (viewType !== this.activeView) {
4602
+ this.activeViewChange.emit(viewType);
4603
+ }
4469
4604
  }
4470
- addHandler() {
4471
- const fields = this.mapper.dependencyFields;
4472
- const formGroup = new FormGroup({
4473
- [fields.id]: new FormControl(),
4474
- [fields.fromId]: new FormControl(this.dependencyIdField === 'toId' ? this.taskId : null, Validators.required),
4475
- [fields.toId]: new FormControl(this.dependencyIdField === 'fromId' ? this.taskId : null, Validators.required),
4476
- [fields.type]: new FormControl(null, Validators.required)
4477
- });
4478
- this.formGroups.push(formGroup);
4605
+ /**
4606
+ * @hidden
4607
+ */
4608
+ getViewTypeText(viewType) {
4609
+ return this.localizationService.get(`${viewType}ViewText`);
4479
4610
  }
4480
- removeHandler() {
4481
- const [selectedIndex] = this.selectedKeys;
4482
- const item = this.formGroups.at(selectedIndex).value;
4483
- this.editService.deleteDependency(item);
4484
- this.formGroups.removeAt(selectedIndex);
4611
+ /**
4612
+ * @hidden
4613
+ */
4614
+ onActiveViewChange(event) {
4615
+ this.activeViewChange.emit(event.target.value);
4485
4616
  }
4486
4617
  }
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>
4497
- <button
4498
- kendoButton
4499
- icon="plus"
4500
- [svgIcon]="plusIcon"
4501
- (click)="addHandler()"
4502
- >
4503
- {{ getText('taskEditingDependenciesAddButtonText') }}
4504
- </button>
4505
- <button
4506
- kendoButton
4507
- icon="minus"
4508
- [svgIcon]="minusIcon"
4509
- [disabled]="selectedKeys.length === 0"
4510
- (click)="removeHandler()"
4511
- >
4512
- {{ getText('taskEditingDependenciesRemoveButtonText') }}
4513
- </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: [{
4618
+ 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 });
4619
+ 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: `
4620
+ <select
4621
+ class="k-dropdownlist k-picker k-rounded-md k-views-dropdown"
4622
+ aria-label="View Selector"
4623
+ [value]="activeView"
4624
+ (change)="onActiveViewChange($event)">
4625
+ <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
4626
+ </select>
4627
+ <kendo-buttongroup class="k-gantt-views" selection="single" [navigable]="false">
4628
+ <button *ngFor="let view of views"
4629
+ kendoButton
4630
+ type="button"
4631
+ [selected]="view === activeView"
4632
+ (click)="onClick(view)">{{getViewTypeText(view)}}</button>
4633
+ </kendo-buttongroup>
4634
+ `, 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"] }] });
4635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ViewSelectorComponent, decorators: [{
4542
4636
  type: Component,
4543
4637
  args: [{
4544
- selector: 'kendo-gantt-dependencies-table',
4638
+ selector: 'kendo-gantt-view-selector',
4545
4639
  template: `
4546
- <kendo-grid
4547
- [data]="dependencies"
4548
- [selectable]="{ mode: 'single' }"
4549
- [(selectedKeys)]="selectedKeys"
4550
- kendoGridSelectBy
4551
- [height]="275"
4552
- >
4553
- <ng-template kendoGridToolbarTemplate>
4554
- <button
4555
- kendoButton
4556
- icon="plus"
4557
- [svgIcon]="plusIcon"
4558
- (click)="addHandler()"
4559
- >
4560
- {{ getText('taskEditingDependenciesAddButtonText') }}
4561
- </button>
4562
- <button
4563
- kendoButton
4564
- icon="minus"
4565
- [svgIcon]="minusIcon"
4566
- [disabled]="selectedKeys.length === 0"
4567
- (click)="removeHandler()"
4568
- >
4569
- {{ getText('taskEditingDependenciesRemoveButtonText') }}
4570
- </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
- `
4640
+ <select
4641
+ class="k-dropdownlist k-picker k-rounded-md k-views-dropdown"
4642
+ aria-label="View Selector"
4643
+ [value]="activeView"
4644
+ (change)="onActiveViewChange($event)">
4645
+ <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
4646
+ </select>
4647
+ <kendo-buttongroup class="k-gantt-views" selection="single" [navigable]="false">
4648
+ <button *ngFor="let view of views"
4649
+ kendoButton
4650
+ type="button"
4651
+ [selected]="view === activeView"
4652
+ (click)="onClick(view)">{{getViewTypeText(view)}}</button>
4653
+ </kendo-buttongroup>
4654
+ `,
4655
+ standalone: true,
4656
+ imports: [NgFor, ReactiveFormsModule, ButtonGroupComponent, ButtonComponent]
4598
4657
  }]
4599
- }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; }, propDecorators: { tasks: [{
4600
- type: Input
4601
- }], dependencies: [{
4658
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; }, propDecorators: { hostClass: [{
4659
+ type: HostBinding,
4660
+ args: ['class.k-gantt-views-wrapper']
4661
+ }], views: [{
4602
4662
  type: Input
4603
- }], dependencyType: [{
4663
+ }], activeView: [{
4604
4664
  type: Input
4605
- }], dependenciesChange: [{
4665
+ }], activeViewChange: [{
4606
4666
  type: Output
4607
4667
  }] } });
4608
4668
 
4609
4669
  /**
4610
- * @hidden
4670
+ * The UI for adding new items to the Gantt.
4671
+ * Use it within a toolbar template to provide a custom icon or list of options.
4611
4672
  */
4612
- class TaskFieldsComponent {
4613
- constructor(mapper, editService, localizationService) {
4614
- this.mapper = mapper;
4615
- this.editService = editService;
4673
+ class GanttAddTaskComponent {
4674
+ constructor(localizationService, editService, ngZone) {
4616
4675
  this.localizationService = localizationService;
4676
+ this.editService = editService;
4677
+ this.ngZone = ngZone;
4678
+ /**
4679
+ * Sets the data of the DropDownButton.
4680
+ * > The data has to be provided in an array-like list.
4681
+ */
4682
+ this.data = [{
4683
+ text: this.getText('addChildText'),
4684
+ type: 'addChild'
4685
+ }, {
4686
+ text: this.getText('addAboveText'),
4687
+ type: 'addAbove'
4688
+ }, {
4689
+ text: this.getText('addBelowText'),
4690
+ type: 'addBelow'
4691
+ }];
4692
+ /**
4693
+ * Defines the name of an existing icon in a Kendo UI theme.
4694
+ * @default 'plus'
4695
+ */
4696
+ this.icon = 'plus';
4697
+ /**
4698
+ * Defines an [`SVGIcon`](slug:api_icons_svgicon) icon to be rendered inside the `GanttAddTaskComponent` using
4699
+ * a [`KendoSVGIcon`](slug:api_icons_svgiconcomponent) component.
4700
+ */
4701
+ this.svgIcon = plusIcon;
4617
4702
  }
4618
4703
  /**
4619
4704
  * @hidden
4620
4705
  */
4621
- get formGroup() {
4622
- return this.editService.taskFormGroup;
4706
+ getText(message) {
4707
+ return this.localizationService.get(message);
4623
4708
  }
4624
- getText(token) {
4625
- return this.localizationService.get(token);
4709
+ /**
4710
+ * @hidden
4711
+ */
4712
+ handleOpen(e) {
4713
+ if (!this.editService.getSelectedItem()) {
4714
+ e.preventDefault();
4715
+ }
4716
+ }
4717
+ /**
4718
+ * @hidden
4719
+ */
4720
+ handleMouseClick() {
4721
+ if (!this.editService.getSelectedItem()) {
4722
+ this.ngZone.run(() => {
4723
+ this.editService.addEvent.next({
4724
+ selectedItem: null,
4725
+ actionType: 'addTask'
4726
+ });
4727
+ });
4728
+ }
4729
+ }
4730
+ /**
4731
+ * @hidden
4732
+ */
4733
+ handleItemClick(e) {
4734
+ this.editService.addEvent.next({
4735
+ actionType: e.type,
4736
+ selectedItem: null
4737
+ });
4626
4738
  }
4627
4739
  }
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: [{
4740
+ 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 });
4741
+ 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: `
4742
+ <kendo-dropdownbutton
4743
+ [data]="data"
4744
+ [icon]="icon"
4745
+ [svgIcon]="svgIcon"
4746
+ [kendoEventsOutsideAngular]="{ click: handleMouseClick }"
4747
+ [scope]="this"
4748
+ (itemClick)="handleItemClick($event)"
4749
+ (open)="handleOpen($event)">
4750
+ {{ getText('addTaskText') }}
4751
+ </kendo-dropdownbutton>
4752
+ `, 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"] }] });
4753
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttAddTaskComponent, decorators: [{
4661
4754
  type: Component,
4662
4755
  args: [{
4663
- selector: 'kendo-gantt-task-fields',
4756
+ selector: 'kendo-gantt-add-task',
4664
4757
  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
- `
4758
+ <kendo-dropdownbutton
4759
+ [data]="data"
4760
+ [icon]="icon"
4761
+ [svgIcon]="svgIcon"
4762
+ [kendoEventsOutsideAngular]="{ click: handleMouseClick }"
4763
+ [scope]="this"
4764
+ (itemClick)="handleItemClick($event)"
4765
+ (open)="handleOpen($event)">
4766
+ {{ getText('addTaskText') }}
4767
+ </kendo-dropdownbutton>
4768
+ `,
4769
+ standalone: true,
4770
+ imports: [DropDownButtonComponent, EventsOutsideAngularDirective]
4695
4771
  }]
4696
- }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: GanttLocalizationService }]; } });
4772
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: EditService }, { type: i0.NgZone }]; }, propDecorators: { data: [{
4773
+ type: Input
4774
+ }], icon: [{
4775
+ type: Input
4776
+ }], svgIcon: [{
4777
+ type: Input
4778
+ }] } });
4697
4779
 
4698
4780
  /**
4699
4781
  * @hidden
4700
4782
  */
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;
4783
+ class ToolbarComponent {
4784
+ constructor(hostEl, navigationService) {
4785
+ this.hostEl = hostEl;
4786
+ this.navigationService = navigationService;
4787
+ this.context = {};
4788
+ this.role = 'toolbar';
4789
+ this.toolbarSizingClass = true;
4790
+ this.activeViewChange = new EventEmitter();
4710
4791
  }
4711
- ngOnInit() {
4712
- this.editService.loadTasks(this.data).subscribe(value => {
4713
- this.loadedTasks = value;
4714
- });
4792
+ clickHandler(ev) {
4793
+ if (this.navigable) {
4794
+ const closestFocusable = closest(ev.target, isFocusable);
4795
+ const targetIndex = this.navigationService.focusableContent.indexOf(closestFocusable);
4796
+ if (targetIndex > -1) {
4797
+ this.navigationService.focusIndex = targetIndex;
4798
+ }
4799
+ this.navigationService.updateFocus();
4800
+ }
4715
4801
  }
4716
- get predecessors() {
4717
- return this.editService.predecessors;
4802
+ arrowLeftListener() {
4803
+ if (this.navigable && isDocumentAvailable()) {
4804
+ this.navigationService.focusIndex--;
4805
+ if (this.navigationService.focusIndex < 0) {
4806
+ this.navigationService.focusIndex = this.navigationService.focusableContent.length - 1;
4807
+ }
4808
+ this.navigationService.updateFocus();
4809
+ }
4718
4810
  }
4719
- set predecessors(items) {
4720
- this.editService.predecessors = items;
4811
+ arrowRightListener() {
4812
+ if (this.navigable && isDocumentAvailable()) {
4813
+ this.navigationService.focusIndex++;
4814
+ if (this.navigationService.focusIndex >= this.navigationService.focusableContent.length) {
4815
+ this.navigationService.focusIndex = 0;
4816
+ }
4817
+ this.navigationService.updateFocus();
4818
+ }
4721
4819
  }
4722
- get successors() {
4723
- return this.editService.successors;
4820
+ set position(value) {
4821
+ this.context.position = this._position = value;
4724
4822
  }
4725
- set successors(items) {
4726
- this.editService.successors = items;
4823
+ get position() {
4824
+ return this._position;
4727
4825
  }
4728
- getText(token) {
4729
- return this.localizationService.get(token);
4826
+ get toolbarTemplateRef() {
4827
+ return this.toolbarTemplate ? this.toolbarTemplate.templateRef : undefined;
4730
4828
  }
4731
- getDependencyType(typeId) {
4732
- return DependencyType[typeId];
4829
+ get renderTemplate() {
4830
+ const ganttToolbarTemplate = this.toolbarTemplate;
4831
+ const templatePosition = ganttToolbarTemplate ? ganttToolbarTemplate.position : null;
4832
+ return ganttToolbarTemplate && (templatePosition === 'both' || templatePosition === this.position);
4733
4833
  }
4734
- handleEditingResult(editResultType) {
4735
- this.editService.triggerEditEvent(editResultType);
4834
+ handleViewChange(view) {
4835
+ this.activeViewChange.emit(view);
4736
4836
  }
4737
- handleTaskDelete() {
4738
- this.editService.taskDelete.next(this.editService.dataItem);
4837
+ ngAfterViewInit() {
4838
+ if (isDocumentAvailable()) {
4839
+ const focusableElements = Array.from(this.hostEl.nativeElement.querySelectorAll(focusableSelector) || [])
4840
+ .filter(el => isVisible(el));
4841
+ if (focusableElements.length) {
4842
+ this.navigationService.focusableContent = focusableElements;
4843
+ }
4844
+ }
4739
4845
  }
4740
4846
  }
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: [{
4847
+ 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 });
4848
+ 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: `
4849
+ <ng-container *ngIf="!renderTemplate">
4850
+ <kendo-gantt-add-task *ngIf="showAddTask"></kendo-gantt-add-task>
4851
+ <span class="k-spacer k-toolbar-spacer"></span>
4852
+ <kendo-gantt-view-selector
4853
+ *ngIf="showViewSelector"
4854
+ [views]="views"
4855
+ [activeView]="activeView"
4856
+ (activeViewChange)="handleViewChange($event)"></kendo-gantt-view-selector>
4857
+ </ng-container>
4858
+ <ng-template
4859
+ *ngIf="renderTemplate"
4860
+ [ngTemplateOutlet]="toolbarTemplateRef"
4861
+ [ngTemplateOutletContext]="context"
4862
+ >
4863
+ </ng-template>
4864
+ `, 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"] }] });
4865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarComponent, decorators: [{
4815
4866
  type: Component,
4816
4867
  args: [{
4817
- selector: 'kendo-gantt-edit-dialog',
4868
+ selector: 'kendo-gantt-toolbar',
4869
+ providers: [ToolbarNavigationService],
4818
4870
  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
- `
4871
+ <ng-container *ngIf="!renderTemplate">
4872
+ <kendo-gantt-add-task *ngIf="showAddTask"></kendo-gantt-add-task>
4873
+ <span class="k-spacer k-toolbar-spacer"></span>
4874
+ <kendo-gantt-view-selector
4875
+ *ngIf="showViewSelector"
4876
+ [views]="views"
4877
+ [activeView]="activeView"
4878
+ (activeViewChange)="handleViewChange($event)"></kendo-gantt-view-selector>
4879
+ </ng-container>
4880
+ <ng-template
4881
+ *ngIf="renderTemplate"
4882
+ [ngTemplateOutlet]="toolbarTemplateRef"
4883
+ [ngTemplateOutletContext]="context"
4884
+ >
4885
+ </ng-template>
4886
+ `,
4887
+ standalone: true,
4888
+ imports: [NgIf, GanttAddTaskComponent, ViewSelectorComponent, NgTemplateOutlet]
4890
4889
  }]
4891
- }], ctorParameters: function () { return [{ type: MappingService }, { type: EditService }, { type: i0.ChangeDetectorRef }, { type: i1$1.LocalizationService }]; }, propDecorators: { data: [{
4890
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ToolbarNavigationService }]; }, propDecorators: { role: [{
4891
+ type: HostBinding,
4892
+ args: ['attr.role']
4893
+ }], toolbarSizingClass: [{
4894
+ type: HostBinding,
4895
+ args: ['class.k-toolbar-md']
4896
+ }], clickHandler: [{
4897
+ type: HostListener,
4898
+ args: ['click', ['$event']]
4899
+ }], arrowLeftListener: [{
4900
+ type: HostListener,
4901
+ args: ['keydown.arrowleft', ['$event']]
4902
+ }], arrowRightListener: [{
4903
+ type: HostListener,
4904
+ args: ['keydown.arrowright', ['$event']]
4905
+ }], activeViewChange: [{
4906
+ type: Output
4907
+ }], showAddTask: [{
4908
+ type: Input
4909
+ }], showViewSelector: [{
4910
+ type: Input
4911
+ }], views: [{
4912
+ type: Input
4913
+ }], activeView: [{
4914
+ type: Input
4915
+ }], toolbarTemplate: [{
4916
+ type: Input
4917
+ }], navigable: [{
4918
+ type: Input
4919
+ }], position: [{
4892
4920
  type: Input
4893
4921
  }] } });
4894
4922
 
@@ -5053,7 +5081,7 @@ class LocalizedMessagesDirective extends Messages {
5053
5081
  }
5054
5082
  }
5055
5083
  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: [
5084
+ LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: LocalizedMessagesDirective, isStandalone: true, selector: "[kendoGanttLocalizedMessages]", providers: [
5057
5085
  {
5058
5086
  provide: Messages,
5059
5087
  useExisting: forwardRef(() => LocalizedMessagesDirective)
@@ -5068,7 +5096,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5068
5096
  useExisting: forwardRef(() => LocalizedMessagesDirective)
5069
5097
  }
5070
5098
  ],
5071
- selector: '[kendoGanttLocalizedMessages]'
5099
+ selector: '[kendoGanttLocalizedMessages]',
5100
+ standalone: true
5072
5101
  }]
5073
5102
  }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });
5074
5103
 
@@ -6344,7 +6373,7 @@ class GanttComponent {
6344
6373
  }
6345
6374
  }
6346
6375
  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: [
6376
+ 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
6377
  GanttLocalizationService,
6349
6378
  LocalizationService,
6350
6379
  {
@@ -6740,7 +6769,7 @@ GanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
6740
6769
  </kendo-dialog>
6741
6770
 
6742
6771
  <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]" }] });
6772
+ `, 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
6773
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttComponent, decorators: [{
6745
6774
  type: Component,
6746
6775
  args: [{
@@ -7143,7 +7172,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7143
7172
  </kendo-dialog>
7144
7173
 
7145
7174
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
7146
- `
7175
+ `,
7176
+ standalone: true,
7177
+ imports: [LocalizedMessagesDirective, NgIf, ToolbarComponent, SplitterComponent, SplitterPaneComponent, TreeListComponent, EventsOutsideAngularDirective, CustomMessagesComponent$2, GanttTimelineComponent, EditDialogComponent, DialogComponent, DialogActionsComponent, TreeListSpacerComponent, ButtonComponent, WatermarkOverlayComponent]
7147
7178
  }]
7148
7179
  }], 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
7180
  type: ViewChild,
@@ -7237,252 +7268,70 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7237
7268
  type: Input
7238
7269
  }], taskClass: [{
7239
7270
  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: [{
7271
+ }], rowClass: [{
7481
7272
  type: Input
7482
- }], selectedKeysChange: [{
7483
- type: Output
7484
- }], itemKey: [{
7273
+ }], isExpanded: [{
7274
+ type: Input
7275
+ }], columnsAutoSize: [{
7276
+ type: Input
7277
+ }], currentTimeMarker: [{
7278
+ type: Input
7279
+ }], columnMenu: [{
7280
+ type: Input
7281
+ }], columnsReorderable: [{
7282
+ type: Input
7283
+ }], columnsResizable: [{
7485
7284
  type: Input
7285
+ }], dragScrollSettings: [{
7286
+ type: Input
7287
+ }], rowExpand: [{
7288
+ type: Output
7289
+ }], taskDblClick: [{
7290
+ type: Output
7291
+ }], cellDblClick: [{
7292
+ type: Output
7293
+ }], cellClose: [{
7294
+ type: Output
7295
+ }], taskDelete: [{
7296
+ type: Output
7297
+ }], rowCollapse: [{
7298
+ type: Output
7299
+ }], remove: [{
7300
+ type: Output
7301
+ }], cancel: [{
7302
+ type: Output
7303
+ }], save: [{
7304
+ type: Output
7305
+ }], taskAdd: [{
7306
+ type: Output
7307
+ }], dependencyAdd: [{
7308
+ type: Output
7309
+ }], sortChange: [{
7310
+ type: Output
7311
+ }], filterChange: [{
7312
+ type: Output
7313
+ }], dataStateChange: [{
7314
+ type: Output
7315
+ }], treeListPaneCollapsedChange: [{
7316
+ type: Output
7317
+ }], timelinePaneCollapsedChange: [{
7318
+ type: Output
7319
+ }], timelinePaneSizeChange: [{
7320
+ type: Output
7321
+ }], activeViewChange: [{
7322
+ type: Output
7323
+ }], columnResize: [{
7324
+ type: Output
7325
+ }], columnReorder: [{
7326
+ type: Output
7327
+ }], columnVisibilityChange: [{
7328
+ type: Output
7329
+ }], columnLockedChange: [{
7330
+ type: Output
7331
+ }], cellClick: [{
7332
+ type: Output
7333
+ }], taskClick: [{
7334
+ type: Output
7486
7335
  }] } });
7487
7336
 
7488
7337
  /**
@@ -7499,7 +7348,7 @@ class DragValidationTooltipComponent {
7499
7348
  }
7500
7349
  }
7501
7350
  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: `
7351
+ DragValidationTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DragValidationTooltipComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
7503
7352
  <div
7504
7353
  class="k-tooltip k-gantt-tooltip-validation"
7505
7354
  [class.k-gantt-tooltip-valid]="showValidityStatus && isValid"
@@ -7533,10 +7382,92 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7533
7382
  <span class="k-gantt-tooltip-validation-value">{{ toTaskName }}</span>
7534
7383
  </div>
7535
7384
  </div>
7536
- `
7385
+ `,
7386
+ standalone: true
7537
7387
  }]
7538
7388
  }] });
7539
7389
 
7390
+ /**
7391
+ * A directive which binds the Gantt to an array of objects by using
7392
+ * an ID and parent ID field to define the hierarchy.
7393
+ *
7394
+ * The directive encapsulates the in-memory handling of data operations such as sorting and filtering.
7395
+ */
7396
+ class GanttFlatBindingDirective extends FlatBindingDirective {
7397
+ /**
7398
+ * @hidden
7399
+ */
7400
+ set aggregate(value) {
7401
+ super.aggregate = value;
7402
+ }
7403
+ }
7404
+ GanttFlatBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttFlatBindingDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7405
+ 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 });
7406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttFlatBindingDirective, decorators: [{
7407
+ type: Directive,
7408
+ args: [{
7409
+ selector: '[kendoGanttFlatBinding]',
7410
+ exportAs: 'kendoGanttFlatBinding',
7411
+ standalone: true
7412
+ }]
7413
+ }], propDecorators: { data: [{
7414
+ type: Input,
7415
+ args: ['kendoGanttFlatBinding']
7416
+ }] } });
7417
+
7418
+ /**
7419
+ * A directive which binds the Gantt to a tree of objects,
7420
+ * which encapsulates the in-memory handling of data operations such as sorting and filtering.
7421
+ */
7422
+ class GanttHierarchyBindingDirective extends HierarchyBindingDirective {
7423
+ /**
7424
+ * @hidden
7425
+ */
7426
+ set aggregate(value) {
7427
+ super.aggregate = value;
7428
+ }
7429
+ }
7430
+ GanttHierarchyBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHierarchyBindingDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7431
+ 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 });
7432
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttHierarchyBindingDirective, decorators: [{
7433
+ type: Directive,
7434
+ args: [{
7435
+ selector: '[kendoGanttHierarchyBinding]',
7436
+ exportAs: 'kendoGanttHierarchyBinding',
7437
+ standalone: true
7438
+ }]
7439
+ }], propDecorators: { data: [{
7440
+ type: Input,
7441
+ args: ['kendoGanttHierarchyBinding']
7442
+ }] } });
7443
+
7444
+ /**
7445
+ * A directive which controls the expanded state of the items.
7446
+ */
7447
+ class GanttExpandableDirective extends ExpandableDirective {
7448
+ /**
7449
+ * Defines the item key that will be stored in the expandedKeys collection.
7450
+ * Defaults to the task data item ID field,
7451
+ * which is specified in the [`taskModelFields`]({% slug api_gantt_ganttcomponent %}#toc-taskmodelfields) object.
7452
+ *
7453
+ */
7454
+ set expandBy(value) {
7455
+ super.expandBy = value;
7456
+ }
7457
+ }
7458
+ GanttExpandableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttExpandableDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7459
+ 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 });
7460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttExpandableDirective, decorators: [{
7461
+ type: Directive,
7462
+ args: [{
7463
+ exportAs: 'kendoGanttExpandable',
7464
+ selector: '[kendoGanttExpandable]',
7465
+ standalone: true
7466
+ }]
7467
+ }], propDecorators: { expandBy: [{
7468
+ type: Input
7469
+ }] } });
7470
+
7540
7471
  /**
7541
7472
  * When added to the .k-task-dot, the element will be kept with hover styles.
7542
7473
  * Used for the drag clue from which the dragging has started.
@@ -7831,11 +7762,12 @@ class DependencyDragCreateDirective {
7831
7762
  }
7832
7763
  }
7833
7764
  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 });
7765
+ DependencyDragCreateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: DependencyDragCreateDirective, isStandalone: true, selector: "[kendoGanttDependencyDragCreate]", inputs: { displayValidationTooltip: "displayValidationTooltip" }, ngImport: i0 });
7835
7766
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DependencyDragCreateDirective, decorators: [{
7836
7767
  type: Directive,
7837
7768
  args: [{
7838
- selector: '[kendoGanttDependencyDragCreate]'
7769
+ selector: '[kendoGanttDependencyDragCreate]',
7770
+ standalone: true
7839
7771
  }]
7840
7772
  }], ctorParameters: function () { return [{ type: GanttComponent }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: MappingService }, { type: i3.PopupService }, { type: TimelineScrollService }]; }, propDecorators: { displayValidationTooltip: [{
7841
7773
  type: Input
@@ -7854,7 +7786,7 @@ class TimelineDayViewComponent extends ViewBase {
7854
7786
  }
7855
7787
  }
7856
7788
  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: [
7789
+ TimelineDayViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineDayViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-day-view", providers: [
7858
7790
  {
7859
7791
  provide: ViewBase,
7860
7792
  useExisting: forwardRef(() => TimelineDayViewComponent)
@@ -7870,7 +7802,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7870
7802
  provide: ViewBase,
7871
7803
  useExisting: forwardRef(() => TimelineDayViewComponent)
7872
7804
  }
7873
- ]
7805
+ ],
7806
+ standalone: true
7874
7807
  }]
7875
7808
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7876
7809
 
@@ -7887,7 +7820,7 @@ class TimelineWeekViewComponent extends ViewBase {
7887
7820
  }
7888
7821
  }
7889
7822
  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: [
7823
+ TimelineWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineWeekViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-week-view", providers: [
7891
7824
  {
7892
7825
  provide: ViewBase,
7893
7826
  useExisting: forwardRef(() => TimelineWeekViewComponent)
@@ -7903,7 +7836,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7903
7836
  provide: ViewBase,
7904
7837
  useExisting: forwardRef(() => TimelineWeekViewComponent)
7905
7838
  }
7906
- ]
7839
+ ],
7840
+ standalone: true
7907
7841
  }]
7908
7842
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7909
7843
 
@@ -7920,7 +7854,7 @@ class TimelineMonthViewComponent extends ViewBase {
7920
7854
  }
7921
7855
  }
7922
7856
  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: [
7857
+ TimelineMonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineMonthViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-month-view", providers: [
7924
7858
  {
7925
7859
  provide: ViewBase,
7926
7860
  useExisting: forwardRef(() => TimelineMonthViewComponent)
@@ -7936,7 +7870,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7936
7870
  provide: ViewBase,
7937
7871
  useExisting: forwardRef(() => TimelineMonthViewComponent)
7938
7872
  }
7939
- ]
7873
+ ],
7874
+ standalone: true
7940
7875
  }]
7941
7876
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7942
7877
 
@@ -7953,7 +7888,7 @@ class TimelineYearViewComponent extends ViewBase {
7953
7888
  }
7954
7889
  }
7955
7890
  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: [
7891
+ TimelineYearViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TimelineYearViewComponent, isStandalone: true, selector: "kendo-gantt-timeline-year-view", providers: [
7957
7892
  {
7958
7893
  provide: ViewBase,
7959
7894
  useExisting: forwardRef(() => TimelineYearViewComponent)
@@ -7969,10 +7904,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
7969
7904
  provide: ViewBase,
7970
7905
  useExisting: forwardRef(() => TimelineYearViewComponent)
7971
7906
  }
7972
- ]
7907
+ ],
7908
+ standalone: true
7973
7909
  }]
7974
7910
  }], ctorParameters: function () { return [{ type: OptionChangesService }, { type: DependencyDomService }]; } });
7975
7911
 
7912
+ /**
7913
+ * A directive which handles the [`selectionChange`]({% slug api_gantt_ganttcomponent %}#toc-selectionchange) event of the Gantt
7914
+ * ([see example]({% slug selection_gantt %}#toc-built-in-directive))
7915
+ */
7916
+ class SelectableDirective {
7917
+ constructor(gantt) {
7918
+ this.gantt = gantt;
7919
+ /**
7920
+ * Fires when the selected keys are changed.
7921
+ */
7922
+ this.selectedKeysChange = new EventEmitter();
7923
+ this.state = new Set();
7924
+ this.isSelected = this.isSelected.bind(this);
7925
+ this.selectionChange = this.selectionChange.bind(this);
7926
+ this.selectable = true;
7927
+ }
7928
+ /**
7929
+ * @hidden
7930
+ */
7931
+ set selectable(value) {
7932
+ if (value) {
7933
+ this.gantt.isSelected = this.isSelected;
7934
+ this.subscribeSelection();
7935
+ }
7936
+ else {
7937
+ this.gantt.isSelected = () => false;
7938
+ this.unsubscribeSelection();
7939
+ }
7940
+ this.gantt.selectable = value;
7941
+ this.gantt.updateView();
7942
+ }
7943
+ /**
7944
+ * Sets the selected keys.
7945
+ */
7946
+ set selectedKeys(value) {
7947
+ if (isPresent(value) && value === this.lastChange) {
7948
+ return;
7949
+ }
7950
+ // prevent multiple items displayed as selected as multiple selection still not supported fully
7951
+ const keys = (value || []).slice(0, 1);
7952
+ this.state = new Set(keys);
7953
+ this.gantt.updateView();
7954
+ }
7955
+ /**
7956
+ * The field name or a function that specifies the data item unique key identifier.
7957
+ * By default, the string field `id` is used.
7958
+ */
7959
+ set itemKey(value) {
7960
+ if (isString(value)) {
7961
+ this._keyGetter = getter(value);
7962
+ }
7963
+ else {
7964
+ this._keyGetter = value;
7965
+ }
7966
+ }
7967
+ get keyGetter() {
7968
+ return this._keyGetter || this.gantt.idGetter;
7969
+ }
7970
+ ngOnDestroy() {
7971
+ this.unsubscribeSelection();
7972
+ }
7973
+ isSelected(dataItem) {
7974
+ return this.state.has(this.keyGetter(dataItem));
7975
+ }
7976
+ selectionChange({ action, items }) {
7977
+ this.state.clear();
7978
+ if (action === 'select') {
7979
+ items.forEach(item => this.state.add(this.keyGetter(item)));
7980
+ }
7981
+ this.emitSelectedItemsChange();
7982
+ }
7983
+ emitSelectedItemsChange() {
7984
+ this.lastChange = Array.from(this.state);
7985
+ this.selectedKeysChange.emit(this.lastChange);
7986
+ }
7987
+ subscribeSelection() {
7988
+ this.unsubscribeSelection();
7989
+ this.selectionSubscription = this.gantt.selectionChange.subscribe(this.selectionChange);
7990
+ }
7991
+ unsubscribeSelection() {
7992
+ if (this.selectionSubscription) {
7993
+ this.selectionSubscription.unsubscribe();
7994
+ this.selectionSubscription = null;
7995
+ }
7996
+ }
7997
+ }
7998
+ SelectableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectableDirective, deps: [{ token: GanttComponent }], target: i0.ɵɵFactoryTarget.Directive });
7999
+ 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 });
8000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectableDirective, decorators: [{
8001
+ type: Directive,
8002
+ args: [{
8003
+ exportAs: 'kendoGanttSelectable',
8004
+ selector: '[kendoGanttSelectable]',
8005
+ standalone: true
8006
+ }]
8007
+ }], ctorParameters: function () { return [{ type: GanttComponent }]; }, propDecorators: { selectable: [{
8008
+ type: Input
8009
+ }], selectedKeys: [{
8010
+ type: Input
8011
+ }], selectedKeysChange: [{
8012
+ type: Output
8013
+ }], itemKey: [{
8014
+ type: Input
8015
+ }] } });
8016
+
7976
8017
  /**
7977
8018
  * Custom component messages override default component messages
7978
8019
  * ([see example](slug:globalization_treelist#toc-custom-messages)).
@@ -7987,7 +8028,7 @@ class CustomMessagesComponent extends Messages {
7987
8028
  }
7988
8029
  }
7989
8030
  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: [
8031
+ CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CustomMessagesComponent, isStandalone: true, selector: "kendo-gantt-messages", providers: [
7991
8032
  {
7992
8033
  provide: Messages,
7993
8034
  useExisting: forwardRef(() => CustomMessagesComponent)
@@ -8003,74 +8044,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
8003
8044
  }
8004
8045
  ],
8005
8046
  selector: 'kendo-gantt-messages',
8006
- template: ``
8047
+ template: ``,
8048
+ standalone: true
8007
8049
  }]
8008
8050
  }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }]; } });
8009
8051
 
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 = [
8052
+ /**
8053
+ * Utility array that contains all `@progress/kendo-angular-gantt` related components and directives
8054
+ */
8055
+ const KENDO_GANTT = [
8032
8056
  GanttComponent,
8033
8057
  GanttFlatBindingDirective,
8034
8058
  GanttHierarchyBindingDirective,
8035
- GanttTaskComponent,
8036
- GanttSummaryTaskComponent,
8037
- GanttMilestoneTaskComponent,
8038
- GanttTimelineComponent,
8039
- GanttTasksTableBodyComponent,
8040
- GanttHeaderTableBodyComponent,
8041
8059
  GanttTaskContentTemplateDirective,
8042
8060
  GanttTaskTemplateDirective,
8043
8061
  GanttSummaryTaskTemplateDirective,
8044
8062
  ToolbarTemplateDirective,
8045
- ToolbarComponent,
8046
8063
  ViewSelectorComponent,
8047
8064
  GanttColumnComponent,
8048
8065
  GanttColumnGroupComponent,
8049
8066
  GanttSpanColumnComponent,
8050
- FilterMenuTemplateDirective,
8051
8067
  FilterCellTemplateDirective,
8068
+ FilterMenuTemplateDirective,
8052
8069
  CellTemplateDirective,
8053
8070
  EditTemplateDirective,
8054
8071
  ColumnMenuTemplateDirective,
8055
8072
  HeaderTemplateDirective,
8056
8073
  FooterTemplateDirective,
8057
8074
  GanttExpandableDirective,
8058
- GanttDependencyDirective,
8059
8075
  DependencyDragCreateDirective,
8060
8076
  TimelineDayViewComponent,
8061
8077
  TimelineWeekViewComponent,
8062
8078
  TimelineMonthViewComponent,
8063
8079
  TimelineYearViewComponent,
8064
8080
  SelectableDirective,
8065
- EditDialogComponent,
8066
8081
  CustomMessagesComponent,
8067
- LocalizedMessagesDirective,
8068
- GanttAddTaskComponent,
8069
- DragValidationTooltipComponent,
8070
- TimelineScrollableDirective,
8071
- DependenciesTableComponent,
8072
- TaskFieldsComponent
8082
+ GanttAddTaskComponent
8073
8083
  ];
8084
+
8085
+ // IMPORTANT: NgModule export kept for backwards compatibility
8074
8086
  /**
8075
8087
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
8076
8088
  * definition for the Gantt component.
@@ -8105,118 +8117,44 @@ const DECLARATIONS = [
8105
8117
  class GanttModule {
8106
8118
  }
8107
8119
  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] });
8120
+ 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
8121
  GanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, providers: [{
8208
8122
  provide: L10N_PREFIX,
8209
8123
  useValue: 'kendo.gantt'
8210
8124
  }, {
8211
8125
  provide: TOUCH_ENABLED,
8212
8126
  useValue: touchEnabled
8213
- }], imports: [IMPORTED_MODULES] });
8127
+ },
8128
+ // InputsModule providers
8129
+ IconsService,
8130
+ PopupService,
8131
+ ResizeBatchService,
8132
+ DialogContainerService,
8133
+ DialogService,
8134
+ WindowService,
8135
+ WindowContainerService,
8136
+ // DateInputsModule providers
8137
+ CalendarDOMService,
8138
+ CenturyViewService,
8139
+ DecadeViewService,
8140
+ MonthViewService,
8141
+ YearViewService,
8142
+ WeekNamesService,
8143
+ NavigationService$1,
8144
+ TimePickerDOMService,
8145
+ HoursService,
8146
+ MinutesService,
8147
+ SecondsService,
8148
+ MillisecondsService,
8149
+ DayPeriodService,
8150
+ // TreeListModule providers
8151
+ ColumnResizingService
8152
+ ], imports: [GanttComponent, ViewSelectorComponent, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, TimelineDayViewComponent, TimelineWeekViewComponent, TimelineMonthViewComponent, TimelineYearViewComponent, CustomMessagesComponent, GanttAddTaskComponent] });
8214
8153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GanttModule, decorators: [{
8215
8154
  type: NgModule,
8216
8155
  args: [{
8217
- imports: [...IMPORTED_MODULES],
8218
- declarations: [...DECLARATIONS],
8219
- exports: [...DECLARATIONS],
8156
+ imports: [...KENDO_GANTT],
8157
+ exports: [...KENDO_GANTT],
8220
8158
  entryComponents: [DragValidationTooltipComponent],
8221
8159
  providers: [{
8222
8160
  provide: L10N_PREFIX,
@@ -8224,7 +8162,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
8224
8162
  }, {
8225
8163
  provide: TOUCH_ENABLED,
8226
8164
  useValue: touchEnabled
8227
- }]
8165
+ },
8166
+ // InputsModule providers
8167
+ IconsService,
8168
+ PopupService,
8169
+ ResizeBatchService,
8170
+ DialogContainerService,
8171
+ DialogService,
8172
+ WindowService,
8173
+ WindowContainerService,
8174
+ // DateInputsModule providers
8175
+ CalendarDOMService,
8176
+ CenturyViewService,
8177
+ DecadeViewService,
8178
+ MonthViewService,
8179
+ YearViewService,
8180
+ WeekNamesService,
8181
+ NavigationService$1,
8182
+ TimePickerDOMService,
8183
+ HoursService,
8184
+ MinutesService,
8185
+ SecondsService,
8186
+ MillisecondsService,
8187
+ DayPeriodService,
8188
+ // TreeListModule providers
8189
+ ColumnResizingService
8190
+ ]
8228
8191
  }]
8229
8192
  }] });
8230
8193
 
@@ -8232,5 +8195,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
8232
8195
  * Generated bundle index. Do not edit.
8233
8196
  */
8234
8197
 
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 };
8198
+ 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
8199