@progress/kendo-angular-gantt 21.4.1-develop.1 → 22.0.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 (127) hide show
  1. package/columns/column-base.component.d.ts +1 -1
  2. package/fesm2022/progress-kendo-angular-gantt.mjs +201 -201
  3. package/localization/messages.d.ts +1 -1
  4. package/package.json +22 -30
  5. package/rendering/gantt-task-base.d.ts +1 -1
  6. package/schematics/ngAdd/index.js +7 -7
  7. package/timeline/view-base.d.ts +1 -1
  8. package/esm2022/binding-directives/flat-binding.directive.mjs +0 -50
  9. package/esm2022/binding-directives/hierarchy-binding.directive.mjs +0 -49
  10. package/esm2022/columns/cell-template.directive.mjs +0 -47
  11. package/esm2022/columns/column-base.component.mjs +0 -22
  12. package/esm2022/columns/column-group.component.mjs +0 -80
  13. package/esm2022/columns/column-menu-template.directive.mjs +0 -40
  14. package/esm2022/columns/column.component.mjs +0 -122
  15. package/esm2022/columns/columns.mjs +0 -15
  16. package/esm2022/columns/edit-template.directive.mjs +0 -46
  17. package/esm2022/columns/filter-cell-template.directive.mjs +0 -32
  18. package/esm2022/columns/filter-menu-template.directive.mjs +0 -41
  19. package/esm2022/columns/footer-template.directive.mjs +0 -44
  20. package/esm2022/columns/header-template.directive.mjs +0 -43
  21. package/esm2022/columns/span-column.component.mjs +0 -82
  22. package/esm2022/common/default-callbacks.mjs +0 -25
  23. package/esm2022/common/mapping.service.mjs +0 -62
  24. package/esm2022/common/option-changes.service.mjs +0 -28
  25. package/esm2022/dependencies/dependency-dom.service.mjs +0 -80
  26. package/esm2022/dependencies/dom-dependency-args.mjs +0 -5
  27. package/esm2022/dependencies/gantt-dependency.directive.mjs +0 -91
  28. package/esm2022/dependencies/utils.mjs +0 -195
  29. package/esm2022/directives.mjs +0 -63
  30. package/esm2022/dragging/dependency-drag-create.directive.mjs +0 -337
  31. package/esm2022/dragging/drag-validation-tooltip.component.mjs +0 -70
  32. package/esm2022/dragging/task-drag.directive.mjs +0 -94
  33. package/esm2022/dragging/task-drag.service.mjs +0 -239
  34. package/esm2022/editing/add-task.component.mjs +0 -127
  35. package/esm2022/editing/dependencies-table.component.mjs +0 -233
  36. package/esm2022/editing/edit-dialog.component.mjs +0 -225
  37. package/esm2022/editing/edit.service.mjs +0 -118
  38. package/esm2022/editing/task-fields.component.mjs +0 -127
  39. package/esm2022/editing/utils.mjs +0 -15
  40. package/esm2022/expanded-state/expand-event.mjs +0 -18
  41. package/esm2022/expanded-state/expandable.directive.mjs +0 -39
  42. package/esm2022/gantt.component.mjs +0 -2415
  43. package/esm2022/gantt.module.mjs +0 -132
  44. package/esm2022/index.mjs +0 -42
  45. package/esm2022/localization/custom-messages.component.mjs +0 -52
  46. package/esm2022/localization/gantt-localization.service.mjs +0 -27
  47. package/esm2022/localization/localized-messages.directive.mjs +0 -39
  48. package/esm2022/localization/messages.mjs +0 -453
  49. package/esm2022/models/cell-content-type.interface.mjs +0 -5
  50. package/esm2022/models/class-callbacks.mjs +0 -5
  51. package/esm2022/models/column-menu-settings.interface.mjs +0 -5
  52. package/esm2022/models/column-reorder-config.mjs +0 -5
  53. package/esm2022/models/current-time-settings.interface.mjs +0 -5
  54. package/esm2022/models/date-range.interface.mjs +0 -5
  55. package/esm2022/models/dependency-type.enum.mjs +0 -32
  56. package/esm2022/models/events/cell-click-event.interface.mjs +0 -5
  57. package/esm2022/models/events/cell-close-event.interface.mjs +0 -44
  58. package/esm2022/models/events/click-event.interface.mjs +0 -5
  59. package/esm2022/models/events/column-locked-change-event.interface.mjs +0 -5
  60. package/esm2022/models/events/column-reorder-event.interface.mjs +0 -5
  61. package/esm2022/models/events/column-resize-event.interface.mjs +0 -5
  62. package/esm2022/models/events/column-visibility-change-event.interface.mjs +0 -5
  63. package/esm2022/models/events/data-state-change-event.interface.mjs +0 -5
  64. package/esm2022/models/events/dependency-add-event.interface.mjs +0 -5
  65. package/esm2022/models/events/index.mjs +0 -5
  66. package/esm2022/models/events/selected-view-change-event.interface.mjs +0 -5
  67. package/esm2022/models/events/task-add-event.interface.mjs +0 -5
  68. package/esm2022/models/events/task-click-event.interface.mjs +0 -5
  69. package/esm2022/models/events/task-delete-event.interface.mjs +0 -5
  70. package/esm2022/models/events/task-drag-event.interface.mjs +0 -5
  71. package/esm2022/models/events/task-edit-event.interface.mjs +0 -5
  72. package/esm2022/models/filterable-settings.mjs +0 -5
  73. package/esm2022/models/gantt-dependency-model-fields.interface.mjs +0 -13
  74. package/esm2022/models/gantt-dependency.interface.mjs +0 -5
  75. package/esm2022/models/gantt-task-model-fields.interface.mjs +0 -15
  76. package/esm2022/models/gantt-task.interface.mjs +0 -5
  77. package/esm2022/models/models.mjs +0 -8
  78. package/esm2022/models/slot.interface.mjs +0 -5
  79. package/esm2022/models/sort-settings.mjs +0 -17
  80. package/esm2022/models/splitter-pane-options.interface.mjs +0 -20
  81. package/esm2022/models/timeline-header-date-format.mjs +0 -5
  82. package/esm2022/models/timeline-options.interface.mjs +0 -5
  83. package/esm2022/models/timeline-view.mjs +0 -5
  84. package/esm2022/models/toolbar-settings.mjs +0 -5
  85. package/esm2022/models/tooltip-options.interface.mjs +0 -5
  86. package/esm2022/models/view-item.interface.mjs +0 -5
  87. package/esm2022/navigation/navigation-models.mjs +0 -5
  88. package/esm2022/navigation/navigation.service.mjs +0 -271
  89. package/esm2022/navigation/utils.mjs +0 -61
  90. package/esm2022/package-metadata.mjs +0 -16
  91. package/esm2022/progress-kendo-angular-gantt.mjs +0 -8
  92. package/esm2022/rendering/gantt-header-table-body.component.mjs +0 -61
  93. package/esm2022/rendering/gantt-milestone-task.component.mjs +0 -102
  94. package/esm2022/rendering/gantt-summary-task.component.mjs +0 -157
  95. package/esm2022/rendering/gantt-task-base.mjs +0 -230
  96. package/esm2022/rendering/gantt-task.component.mjs +0 -227
  97. package/esm2022/rendering/gantt-tasks-table-body.component.mjs +0 -206
  98. package/esm2022/scrolling/drag-scroll-settings.mjs +0 -20
  99. package/esm2022/scrolling/scroll-sync.service.mjs +0 -83
  100. package/esm2022/scrolling/timeline-scroll.directive.mjs +0 -83
  101. package/esm2022/scrolling/timeline-scroll.service.mjs +0 -37
  102. package/esm2022/scrolling/utils.mjs +0 -77
  103. package/esm2022/selection/selectable.directive.mjs +0 -126
  104. package/esm2022/selection/selection-change-event.mjs +0 -5
  105. package/esm2022/template-directives/summary-task-template.directive.mjs +0 -43
  106. package/esm2022/template-directives/task-content-template.directive.mjs +0 -46
  107. package/esm2022/template-directives/task-drag-tooltip-template.directive.mjs +0 -47
  108. package/esm2022/template-directives/task-template.directive.mjs +0 -41
  109. package/esm2022/template-directives/task-tooltip-template.directive.mjs +0 -48
  110. package/esm2022/timeline/current-time-marker.service.mjs +0 -90
  111. package/esm2022/timeline/gantt-timeline.component.mjs +0 -624
  112. package/esm2022/timeline/timeline-base-view.service.mjs +0 -201
  113. package/esm2022/timeline/timeline-day-view.component.mjs +0 -49
  114. package/esm2022/timeline/timeline-day-view.service.mjs +0 -68
  115. package/esm2022/timeline/timeline-month-view.component.mjs +0 -49
  116. package/esm2022/timeline/timeline-month-view.service.mjs +0 -66
  117. package/esm2022/timeline/timeline-view.service.mjs +0 -38
  118. package/esm2022/timeline/timeline-week-view.component.mjs +0 -49
  119. package/esm2022/timeline/timeline-week-view.service.mjs +0 -62
  120. package/esm2022/timeline/timeline-year-view.component.mjs +0 -49
  121. package/esm2022/timeline/timeline-year-view.service.mjs +0 -57
  122. package/esm2022/timeline/view-base.mjs +0 -73
  123. package/esm2022/toolbar/toolbar-navigation.service.mjs +0 -29
  124. package/esm2022/toolbar/toolbar-template.directive.mjs +0 -56
  125. package/esm2022/toolbar/toolbar.component.mjs +0 -181
  126. package/esm2022/toolbar/view-selector.component.mjs +0 -112
  127. package/esm2022/utils.mjs +0 -311
@@ -1,227 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { ChangeDetectorRef, Component, forwardRef, Input, TemplateRef } from '@angular/core';
6
- import { MappingService } from '../common/mapping.service';
7
- import { NavigationService } from '../navigation/navigation.service';
8
- import { EditService } from '../editing/edit.service';
9
- import { DependencyDomService } from '../dependencies/dependency-dom.service';
10
- import { OptionChangesService } from '../common/option-changes.service';
11
- import { TimelineViewService } from './../timeline/timeline-view.service';
12
- import { GanttTaskBase } from './gantt-task-base';
13
- import { xIcon } from '@progress/kendo-svg-icons';
14
- import { NgClass, NgTemplateOutlet } from '@angular/common';
15
- import { EventsOutsideAngularDirective, isPresent } from '@progress/kendo-angular-common';
16
- import { IconWrapperComponent } from '@progress/kendo-angular-icons';
17
- import { touchEnabled } from '@progress/kendo-common';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "../editing/edit.service";
20
- import * as i2 from "../common/mapping.service";
21
- import * as i3 from "./../timeline/timeline-view.service";
22
- import * as i4 from "../dependencies/dependency-dom.service";
23
- import * as i5 from "../common/option-changes.service";
24
- import * as i6 from "../navigation/navigation.service";
25
- /**
26
- * @hidden
27
- */
28
- export class GanttTaskComponent extends GanttTaskBase {
29
- editService;
30
- taskContentTemplate;
31
- taskTemplate;
32
- xIcon = xIcon;
33
- touchEnabled = touchEnabled;
34
- get showDragHandles() {
35
- return isPresent(this.taskDragService);
36
- }
37
- constructor(editService, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
38
- super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService);
39
- this.editService = editService;
40
- }
41
- onTaskDelete() {
42
- this.editService.dataItem = this.dataItem;
43
- this.editService.taskDelete.next(this.dataItem);
44
- }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTaskComponent, deps: [{ token: i1.EditService }, { token: i2.MappingService }, { token: i3.TimelineViewService }, { token: i4.DependencyDomService }, { token: i5.OptionChangesService }, { token: i0.ChangeDetectorRef }, { token: i6.NavigationService }], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttTaskComponent, isStandalone: true, selector: "kendo-gantt-task", inputs: { taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate" }, providers: [
47
- {
48
- provide: GanttTaskBase,
49
- useExisting: forwardRef(() => GanttTaskComponent)
50
- }
51
- ], usesInheritance: true, ngImport: i0, template: `
52
- <div
53
- #task
54
- class="k-task k-task-single"
55
- role="treeitem"
56
- [ngClass]="taskClass(dataItem)"
57
- [style.width.px]="taskWidth"
58
- [attr.title]="mapper.extractFromTask(dataItem, 'title')"
59
- [class.k-selected]="isSelected(dataItem)"
60
- [attr.aria-selected]="ariaSelected"
61
- [attr.aria-level]="level + 1"
62
- >
63
- @if (!taskTemplate) {
64
- <div
65
- class="k-task-complete"
66
- [style.width.px]="draggedCompletionWidth ?? completionOverlayWidth"
67
- aria-hidden="true"
68
- >
69
- </div>
70
- <div class="k-task-content">
71
- <div class="k-task-template">
72
- @if (!taskContentTemplate) {
73
- {{ mapper.extractFromTask(dataItem, 'title') }}
74
- } @else {
75
- <ng-template
76
- [ngTemplateOutlet]="taskContentTemplate"
77
- [ngTemplateOutletContext]="{ $implicit: dataItem }"
78
- ></ng-template>
79
- }
80
- </div>
81
- <span
82
- class="k-task-actions"
83
- aria-hidden="true"
84
- >
85
- <span
86
- class="k-link k-task-delete"
87
- [kendoEventsOutsideAngular]="{
88
- click: onTaskDelete
89
- }"
90
- [scope]="this"
91
- >
92
- <kendo-icon-wrapper
93
- icon="x"
94
- [svgIcon]="xIcon"></kendo-icon-wrapper>
95
- </span>
96
- </span>
97
- @if (showDragHandles) {
98
- <span class="k-resize-handle k-resize-w"></span>
99
- <span class="k-resize-handle k-resize-e"></span>
100
- }
101
- </div>
102
- }
103
- @if (taskTemplate) {
104
- <ng-template
105
- [ngTemplateOutlet]="taskTemplate"
106
- [ngTemplateOutletContext]="{
107
- $implicit: dataItem,
108
- elementWidth: taskWidth
109
- }"
110
- ></ng-template>
111
- }
112
- </div>
113
- @if (showDragHandles) {
114
- <div class="k-task-draghandle"
115
- [style.left.px]="draggedCompletionWidth ?? completionOverlayWidth"></div>
116
- }
117
- @if (renderDependencyDragClues) {
118
- <div
119
- class="k-task-dot k-task-start k-touch-action-none"
120
- [class.k-display-block]="touchEnabled"
121
- >
122
- </div>
123
- <div
124
- class="k-task-dot k-task-end k-touch-action-none"
125
- [class.k-display-block]="touchEnabled"
126
- >
127
- </div>
128
- }
129
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }] });
130
- }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTaskComponent, decorators: [{
132
- type: Component,
133
- args: [{
134
- selector: 'kendo-gantt-task',
135
- providers: [
136
- {
137
- provide: GanttTaskBase,
138
- useExisting: forwardRef(() => GanttTaskComponent)
139
- }
140
- ],
141
- template: `
142
- <div
143
- #task
144
- class="k-task k-task-single"
145
- role="treeitem"
146
- [ngClass]="taskClass(dataItem)"
147
- [style.width.px]="taskWidth"
148
- [attr.title]="mapper.extractFromTask(dataItem, 'title')"
149
- [class.k-selected]="isSelected(dataItem)"
150
- [attr.aria-selected]="ariaSelected"
151
- [attr.aria-level]="level + 1"
152
- >
153
- @if (!taskTemplate) {
154
- <div
155
- class="k-task-complete"
156
- [style.width.px]="draggedCompletionWidth ?? completionOverlayWidth"
157
- aria-hidden="true"
158
- >
159
- </div>
160
- <div class="k-task-content">
161
- <div class="k-task-template">
162
- @if (!taskContentTemplate) {
163
- {{ mapper.extractFromTask(dataItem, 'title') }}
164
- } @else {
165
- <ng-template
166
- [ngTemplateOutlet]="taskContentTemplate"
167
- [ngTemplateOutletContext]="{ $implicit: dataItem }"
168
- ></ng-template>
169
- }
170
- </div>
171
- <span
172
- class="k-task-actions"
173
- aria-hidden="true"
174
- >
175
- <span
176
- class="k-link k-task-delete"
177
- [kendoEventsOutsideAngular]="{
178
- click: onTaskDelete
179
- }"
180
- [scope]="this"
181
- >
182
- <kendo-icon-wrapper
183
- icon="x"
184
- [svgIcon]="xIcon"></kendo-icon-wrapper>
185
- </span>
186
- </span>
187
- @if (showDragHandles) {
188
- <span class="k-resize-handle k-resize-w"></span>
189
- <span class="k-resize-handle k-resize-e"></span>
190
- }
191
- </div>
192
- }
193
- @if (taskTemplate) {
194
- <ng-template
195
- [ngTemplateOutlet]="taskTemplate"
196
- [ngTemplateOutletContext]="{
197
- $implicit: dataItem,
198
- elementWidth: taskWidth
199
- }"
200
- ></ng-template>
201
- }
202
- </div>
203
- @if (showDragHandles) {
204
- <div class="k-task-draghandle"
205
- [style.left.px]="draggedCompletionWidth ?? completionOverlayWidth"></div>
206
- }
207
- @if (renderDependencyDragClues) {
208
- <div
209
- class="k-task-dot k-task-start k-touch-action-none"
210
- [class.k-display-block]="touchEnabled"
211
- >
212
- </div>
213
- <div
214
- class="k-task-dot k-task-end k-touch-action-none"
215
- [class.k-display-block]="touchEnabled"
216
- >
217
- </div>
218
- }
219
- `,
220
- standalone: true,
221
- imports: [NgClass, NgTemplateOutlet, EventsOutsideAngularDirective, IconWrapperComponent]
222
- }]
223
- }], ctorParameters: () => [{ type: i1.EditService }, { type: i2.MappingService }, { type: i3.TimelineViewService }, { type: i4.DependencyDomService }, { type: i5.OptionChangesService }, { type: i0.ChangeDetectorRef }, { type: i6.NavigationService }], propDecorators: { taskContentTemplate: [{
224
- type: Input
225
- }], taskTemplate: [{
226
- type: Input
227
- }] } });
@@ -1,206 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Component, Input, TemplateRef, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';
6
- import { isEqual } from '@progress/kendo-date-math';
7
- import { DependencyDomService } from '../dependencies/dependency-dom.service';
8
- import { MappingService } from '../common/mapping.service';
9
- import { isPresent } from '../utils';
10
- import { GanttTaskComponent } from './gantt-task.component';
11
- import { GanttSummaryTaskComponent } from './gantt-summary-task.component';
12
- import { GanttMilestoneTaskComponent } from './gantt-milestone-task.component';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "../dependencies/dependency-dom.service";
15
- import * as i2 from "../common/mapping.service";
16
- /**
17
- * @hidden
18
- */
19
- export class GanttTasksTableBodyComponent {
20
- dependencyDomService;
21
- mapper;
22
- set timelineRow(timelineRow) {
23
- // register the row value only when the first row is rendered
24
- // with server-side data-binding, the rows rendering could be delayed
25
- if (isPresent(timelineRow)) {
26
- this.dependencyDomService.registerTimelineRow(timelineRow.nativeElement);
27
- }
28
- }
29
- selectable;
30
- rows;
31
- activeView;
32
- taskContentTemplate;
33
- taskTemplate;
34
- summaryTaskTemplate;
35
- taskClass;
36
- isExpanded;
37
- isTaskSelected;
38
- renderDependencyDragClues;
39
- taskPointerEnter = new EventEmitter();
40
- taskPointerLeave = new EventEmitter();
41
- constructor(dependencyDomService, mapper) {
42
- this.dependencyDomService = dependencyDomService;
43
- this.mapper = mapper;
44
- }
45
- trackBy = (_, item) => this.mapper.extractFromTask(item, 'id');
46
- isMileStone(item) {
47
- return !item.hasChildren && isEqual(this.mapper.extractFromTask(item.data, 'start'), this.mapper.extractFromTask(item.data, 'end'));
48
- }
49
- mapItemToTask(item) {
50
- const mappedItem = ['id', 'title', 'completionRatio', 'start', 'end']
51
- .reduce((acc, curr) => {
52
- acc[curr] = this.mapper.extractFromTask(item.data, curr);
53
- return acc;
54
- }, {});
55
- return mappedItem;
56
- }
57
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTasksTableBodyComponent, deps: [{ token: i1.DependencyDomService }, { token: i2.MappingService }], target: i0.ɵɵFactoryTarget.Component });
58
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", 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" }, outputs: { taskPointerEnter: "taskPointerEnter", taskPointerLeave: "taskPointerLeave" }, viewQueries: [{ propertyName: "timelineRow", first: true, predicate: ["timelineRow"], descendants: true }], ngImport: i0, template: `
59
- @for (item of rows; track trackBy($index, item); let index = $index) {
60
- <tr class="k-table-row" #timelineRow>
61
- <td class="k-table-td">
62
- @if (isMileStone(item)) {
63
- <kendo-gantt-milestone-task
64
- [dataItem]="item.data"
65
- [level]="item.level"
66
- [activeView]="activeView"
67
- [taskClass]="taskClass"
68
- [selectable]="selectable"
69
- [isSelected]="isTaskSelected"
70
- [index]="index"
71
- [renderDependencyDragClues]="renderDependencyDragClues"
72
- (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
73
- (pointerleave)="taskPointerLeave.emit()"
74
- >
75
- </kendo-gantt-milestone-task>
76
- } @else {
77
- @if (item.hasChildren) {
78
- <kendo-gantt-summary-task
79
- [dataItem]="item.data"
80
- [level]="item.level"
81
- [template]="summaryTaskTemplate"
82
- [activeView]="activeView"
83
- [taskClass]="taskClass"
84
- [selectable]="selectable"
85
- [isSelected]="isTaskSelected"
86
- [isExpanded]="isExpanded"
87
- [index]="index"
88
- [renderDependencyDragClues]="renderDependencyDragClues"
89
- (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
90
- (pointerleave)="taskPointerLeave.emit()"
91
- ></kendo-gantt-summary-task>
92
- }
93
- @if (!item.hasChildren) {
94
- <kendo-gantt-task
95
- [dataItem]="item.data"
96
- [level]="item.level"
97
- [taskContentTemplate]="taskContentTemplate"
98
- [taskTemplate]="taskTemplate"
99
- [activeView]="activeView"
100
- [taskClass]="taskClass"
101
- [selectable]="selectable"
102
- [isSelected]="isTaskSelected"
103
- [index]="index"
104
- [renderDependencyDragClues]="renderDependencyDragClues"
105
- (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
106
- (pointerleave)="taskPointerLeave.emit()"
107
- ></kendo-gantt-task>
108
- }
109
- }
110
- </td>
111
- </tr>
112
- }
113
- `, isInline: true, dependencies: [{ 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"] }] });
114
- }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTasksTableBodyComponent, decorators: [{
116
- type: Component,
117
- args: [{
118
- // eslint-disable-next-line @angular-eslint/component-selector
119
- selector: '[kendoGanttTasksTableBody]',
120
- template: `
121
- @for (item of rows; track trackBy($index, item); let index = $index) {
122
- <tr class="k-table-row" #timelineRow>
123
- <td class="k-table-td">
124
- @if (isMileStone(item)) {
125
- <kendo-gantt-milestone-task
126
- [dataItem]="item.data"
127
- [level]="item.level"
128
- [activeView]="activeView"
129
- [taskClass]="taskClass"
130
- [selectable]="selectable"
131
- [isSelected]="isTaskSelected"
132
- [index]="index"
133
- [renderDependencyDragClues]="renderDependencyDragClues"
134
- (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
135
- (pointerleave)="taskPointerLeave.emit()"
136
- >
137
- </kendo-gantt-milestone-task>
138
- } @else {
139
- @if (item.hasChildren) {
140
- <kendo-gantt-summary-task
141
- [dataItem]="item.data"
142
- [level]="item.level"
143
- [template]="summaryTaskTemplate"
144
- [activeView]="activeView"
145
- [taskClass]="taskClass"
146
- [selectable]="selectable"
147
- [isSelected]="isTaskSelected"
148
- [isExpanded]="isExpanded"
149
- [index]="index"
150
- [renderDependencyDragClues]="renderDependencyDragClues"
151
- (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
152
- (pointerleave)="taskPointerLeave.emit()"
153
- ></kendo-gantt-summary-task>
154
- }
155
- @if (!item.hasChildren) {
156
- <kendo-gantt-task
157
- [dataItem]="item.data"
158
- [level]="item.level"
159
- [taskContentTemplate]="taskContentTemplate"
160
- [taskTemplate]="taskTemplate"
161
- [activeView]="activeView"
162
- [taskClass]="taskClass"
163
- [selectable]="selectable"
164
- [isSelected]="isTaskSelected"
165
- [index]="index"
166
- [renderDependencyDragClues]="renderDependencyDragClues"
167
- (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
168
- (pointerleave)="taskPointerLeave.emit()"
169
- ></kendo-gantt-task>
170
- }
171
- }
172
- </td>
173
- </tr>
174
- }
175
- `,
176
- standalone: true,
177
- imports: [GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskComponent]
178
- }]
179
- }], ctorParameters: () => [{ type: i1.DependencyDomService }, { type: i2.MappingService }], propDecorators: { timelineRow: [{
180
- type: ViewChild,
181
- args: ['timelineRow', { static: false }]
182
- }], selectable: [{
183
- type: Input
184
- }], rows: [{
185
- type: Input
186
- }], activeView: [{
187
- type: Input
188
- }], taskContentTemplate: [{
189
- type: Input
190
- }], taskTemplate: [{
191
- type: Input
192
- }], summaryTaskTemplate: [{
193
- type: Input
194
- }], taskClass: [{
195
- type: Input
196
- }], isExpanded: [{
197
- type: Input
198
- }], isTaskSelected: [{
199
- type: Input
200
- }], renderDependencyDragClues: [{
201
- type: Input
202
- }], taskPointerEnter: [{
203
- type: Output
204
- }], taskPointerLeave: [{
205
- type: Output
206
- }] } });
@@ -1,20 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- /**
6
- * @hidden
7
- */
8
- export var ScrollDirection;
9
- (function (ScrollDirection) {
10
- ScrollDirection[ScrollDirection["Backwards"] = -1] = "Backwards";
11
- ScrollDirection[ScrollDirection["Forward"] = 1] = "Forward";
12
- })(ScrollDirection || (ScrollDirection = {}));
13
- /**
14
- * @hidden
15
- */
16
- export var ScrollAxis;
17
- (function (ScrollAxis) {
18
- ScrollAxis["Vertical"] = "scrollTop";
19
- ScrollAxis["Horizontal"] = "scrollLeft";
20
- })(ScrollAxis || (ScrollAxis = {}));
@@ -1,83 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Injectable, NgZone } from '@angular/core';
6
- import { Subscription, Subject, fromEvent } from 'rxjs';
7
- import { distinctUntilChanged, map, take } from 'rxjs/operators';
8
- import * as i0 from "@angular/core";
9
- /**
10
- * @hidden
11
- */
12
- export class ScrollSyncService {
13
- ngZone;
14
- changes = new Subject();
15
- elements = [];
16
- subscriptions = new Subscription();
17
- syncingTimeline;
18
- syncingTreeList;
19
- constructor(ngZone) {
20
- this.ngZone = ngZone;
21
- this.subscriptions.add(this.changes.subscribe(args => {
22
- this.scroll(args);
23
- }));
24
- }
25
- registerElement(el, sourceType) {
26
- this.elements.push({ element: el, sourceType });
27
- if (sourceType === "timeline" || sourceType === "treelist") {
28
- this.ngZone.runOutsideAngular(() => {
29
- const obs = fromEvent(el, 'scroll').pipe(map(({ target: { scrollTop, scrollLeft } }) => ({
30
- scrollTop,
31
- scrollLeft,
32
- sourceType
33
- })));
34
- const comparisonFn = sourceType === 'timeline' ?
35
- (x, y) => (x.scrollTop === y.scrollTop) && (x.scrollLeft === y.scrollLeft) :
36
- (x, y) => (x.scrollTop === y.scrollTop);
37
- this.subscriptions.add(obs.pipe(distinctUntilChanged(comparisonFn))
38
- .subscribe((event) => this.changes.next(event)));
39
- });
40
- }
41
- }
42
- ngOnDestroy() {
43
- this.subscriptions.unsubscribe();
44
- this.elements = null;
45
- }
46
- syncScrollTop(sourceType, targetType) {
47
- const source = this.elements.find(element => element.sourceType === sourceType);
48
- const target = this.elements.find(element => element.sourceType === targetType);
49
- // Need to wait for the splitter pane's content to be rendered
50
- this.ngZone.onStable.pipe(take(1)).subscribe(() => target.element.scrollTop = source.element.scrollTop);
51
- }
52
- resetTimelineScrollLeft() {
53
- const source = this.elements.find(element => element.sourceType === 'timeline');
54
- source.element.scrollLeft = 0;
55
- }
56
- scroll({ scrollTop, scrollLeft, sourceType }) {
57
- this.ngZone.runOutsideAngular(() => {
58
- if (sourceType === 'timeline') {
59
- const header = this.elements.find(element => element.sourceType === 'header').element;
60
- header.scrollLeft = scrollLeft;
61
- if (!this.syncingTimeline) {
62
- this.syncingTreeList = true;
63
- const treelist = this.elements.find(element => element.sourceType === 'treelist').element;
64
- treelist.scrollTop = scrollTop;
65
- }
66
- this.syncingTimeline = false;
67
- }
68
- if (sourceType === 'treelist') {
69
- if (!this.syncingTreeList) {
70
- this.syncingTimeline = true;
71
- const timeline = this.elements.find(element => element.sourceType === 'timeline').element;
72
- timeline.scrollTop = scrollTop;
73
- }
74
- this.syncingTreeList = false;
75
- }
76
- });
77
- }
78
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollSyncService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
79
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollSyncService });
80
- }
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollSyncService, decorators: [{
82
- type: Injectable
83
- }], ctorParameters: () => [{ type: i0.NgZone }] });
@@ -1,83 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Directive, ElementRef, Input, NgZone } from '@angular/core';
6
- import { Subscription } from 'rxjs';
7
- import { isPresent } from '../utils';
8
- import { ScrollAxis, ScrollDirection } from './drag-scroll-settings';
9
- import { TimelineScrollService } from './timeline-scroll.service';
10
- import { getViewportBoundaries, scrollElement } from './utils';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "./timeline-scroll.service";
13
- /**
14
- * @hidden
15
- */
16
- export class TimelineScrollableDirective {
17
- timelineScrollableContainer;
18
- scrollService;
19
- zone;
20
- scrollSettings;
21
- subscriptions = new Subscription();
22
- verticalScrollInterval;
23
- horizontalScrollInterval;
24
- constructor(timelineScrollableContainer, scrollService, zone) {
25
- this.timelineScrollableContainer = timelineScrollableContainer;
26
- this.scrollService = scrollService;
27
- this.zone = zone;
28
- this.subscriptions.add(this.scrollService.horizontalScroll
29
- .subscribe(this.scrollHorizontallyTo.bind(this)));
30
- this.subscriptions.add(this.scrollService.verticalScroll
31
- .subscribe(this.scrollVerticallyTo.bind(this)));
32
- this.subscriptions.add(this.scrollService.scrollCancel
33
- .subscribe(this.cancelScroll.bind(this)));
34
- }
35
- ngOnDestroy() {
36
- this.subscriptions.unsubscribe();
37
- }
38
- scrollHorizontallyTo(left) {
39
- this.zone.runOutsideAngular(() => {
40
- const container = this.timelineScrollableContainer.nativeElement;
41
- const visibleBoundaries = getViewportBoundaries(container);
42
- if (left < visibleBoundaries.left + this.scrollSettings.threshold) {
43
- this.horizontalScrollInterval = setInterval(() => scrollElement(container, this.scrollSettings.step, ScrollDirection.Backwards, ScrollAxis.Horizontal), this.scrollSettings.interval);
44
- }
45
- else if (left > visibleBoundaries.right - this.scrollSettings.threshold) {
46
- this.horizontalScrollInterval = setInterval(() => scrollElement(container, this.scrollSettings.step, ScrollDirection.Forward, ScrollAxis.Horizontal), this.scrollSettings.interval);
47
- }
48
- });
49
- }
50
- scrollVerticallyTo(top) {
51
- this.zone.runOutsideAngular(() => {
52
- const container = this.timelineScrollableContainer.nativeElement;
53
- const visibleBoundaries = getViewportBoundaries(container);
54
- if (top < visibleBoundaries.top + this.scrollSettings.threshold) {
55
- this.verticalScrollInterval = setInterval(() => scrollElement(container, this.scrollSettings.step, ScrollDirection.Backwards, ScrollAxis.Vertical), this.scrollSettings.interval);
56
- }
57
- else if (top > visibleBoundaries.bottom - this.scrollSettings.threshold) {
58
- this.verticalScrollInterval = setInterval(() => scrollElement(container, this.scrollSettings.step, ScrollDirection.Forward, ScrollAxis.Vertical), this.scrollSettings.interval);
59
- }
60
- });
61
- }
62
- cancelScroll() {
63
- if (isPresent(this.verticalScrollInterval)) {
64
- clearInterval(this.verticalScrollInterval);
65
- this.verticalScrollInterval = null;
66
- }
67
- if (isPresent(this.horizontalScrollInterval)) {
68
- clearInterval(this.horizontalScrollInterval);
69
- this.horizontalScrollInterval = null;
70
- }
71
- }
72
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineScrollableDirective, deps: [{ token: i0.ElementRef }, { token: i1.TimelineScrollService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
73
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TimelineScrollableDirective, isStandalone: true, selector: "[kendoGanttTimelineScrollable]", inputs: { scrollSettings: "scrollSettings" }, ngImport: i0 });
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineScrollableDirective, decorators: [{
76
- type: Directive,
77
- args: [{
78
- selector: '[kendoGanttTimelineScrollable]',
79
- standalone: true
80
- }]
81
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TimelineScrollService }, { type: i0.NgZone }], propDecorators: { scrollSettings: [{
82
- type: Input
83
- }] } });
@@ -1,37 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Injectable } from '@angular/core';
6
- import { Subject } from 'rxjs';
7
- import * as i0 from "@angular/core";
8
- /**
9
- * @hidden
10
- *
11
- * Notifies the timeline-scroll.directive to scroll into view to requested coordinates.
12
- * The scrolling is performed based on client (viewport) coordinates.
13
- */
14
- export class TimelineScrollService {
15
- horizontalScroll = new Subject();
16
- verticalScroll = new Subject();
17
- scrollCancel = new Subject();
18
- ngOnDestroy() {
19
- this.horizontalScroll.complete();
20
- this.verticalScroll.complete();
21
- this.scrollCancel.complete();
22
- }
23
- requestHorizontalScroll(clientTop) {
24
- this.horizontalScroll.next(clientTop);
25
- }
26
- requestVerticalScroll(clientLeft) {
27
- this.verticalScroll.next(clientLeft);
28
- }
29
- requestScrollCancel() {
30
- this.scrollCancel.next(undefined);
31
- }
32
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineScrollService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
33
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineScrollService });
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineScrollService, decorators: [{
36
- type: Injectable
37
- }] });