@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,624 +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, ElementRef, EventEmitter, Input, NgZone, Optional, Output, Renderer2, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
6
- import { Subscription } from 'rxjs';
7
- import { filter, map, switchMap, take } from 'rxjs/operators';
8
- import { DraggableDirective, isDocumentAvailable } from '@progress/kendo-angular-common';
9
- import { ScrollSyncService } from '../scrolling/scroll-sync.service';
10
- import { DependencyDomService } from '../dependencies/dependency-dom.service';
11
- import { isPresent } from '../utils';
12
- import { CurrentTimeMarkerService } from './current-time-marker.service';
13
- import { GanttDependencyDirective } from '../dependencies/gantt-dependency.directive';
14
- import { GanttTasksTableBodyComponent } from '../rendering/gantt-tasks-table-body.component';
15
- import { NgTemplateOutlet } from '@angular/common';
16
- import { TimelineScrollableDirective } from '../scrolling/timeline-scroll.directive';
17
- import { GanttHeaderTableBodyComponent } from '../rendering/gantt-header-table-body.component';
18
- import { TaskDragService } from '../dragging/task-drag.service';
19
- import { KENDO_TOOLTIP, TooltipDirective } from '@progress/kendo-angular-tooltip';
20
- import { DatePipe, NumberPipe } from '@progress/kendo-angular-intl';
21
- import { GanttTaskTooltipTemplateDirective } from '../template-directives/task-tooltip-template.directive';
22
- import { GanttLocalizationService } from '../localization/gantt-localization.service';
23
- import { GanttTaskDragTooltipTemplateDirective } from '../template-directives/task-drag-tooltip-template.directive';
24
- import * as i0 from "@angular/core";
25
- import * as i1 from "../scrolling/scroll-sync.service";
26
- import * as i2 from "../dependencies/dependency-dom.service";
27
- import * as i3 from "./current-time-marker.service";
28
- import * as i4 from "../localization/gantt-localization.service";
29
- import * as i5 from "../dragging/task-drag.service";
30
- import * as i6 from "@progress/kendo-angular-tooltip";
31
- /**
32
- * @hidden
33
- */
34
- export class GanttTimelineComponent {
35
- scrollSyncService;
36
- dependencyDomService;
37
- renderer;
38
- zone;
39
- currentTimeMarkerService;
40
- localization;
41
- taskDragService;
42
- /**
43
- * Represents the scrollable container of the timeline content.
44
- * Used externally by the DependencyDragCreateDirective.
45
- */
46
- timelineContent;
47
- timelineColumns;
48
- timelineHeaderWrap;
49
- tasksContainer;
50
- tooltip;
51
- /**
52
- * Represents the view container ref used for rendering the dependency drag popop.
53
- * Used externally by the DependencyDragCreateDirective.
54
- */
55
- dragPopupContainer;
56
- /**
57
- * Represents the polyline element used for rendering the dependency drag editing interaction.
58
- * Used externally by the DependencyDragCreateDirective.
59
- */
60
- dependencyDragCreatePolyline;
61
- rows;
62
- slots;
63
- groupSlots;
64
- tableWidth;
65
- activeView;
66
- taskContentTemplate;
67
- taskTemplate;
68
- summaryTaskTemplate;
69
- taskClass;
70
- renderDependencyDragClues;
71
- dragScrollSettings;
72
- currentTimeMarker;
73
- customTooltipTemplate;
74
- customDragTooltipTemplate;
75
- tooltipOptions;
76
- selectable;
77
- isTaskSelected;
78
- isExpanded;
79
- dependencies = [];
80
- // as all drag-and-drop operations are on the timeline container, use a single draggable instance
81
- timelineContainerPress = new EventEmitter();
82
- timelineContainerDrag = new EventEmitter();
83
- timelineContainerRelease = new EventEmitter();
84
- /**
85
- * Specifies whether the draggable will attach or detach its pointer event listeners.
86
- */
87
- get draggableEnabled() {
88
- return this.renderDependencyDragClues;
89
- }
90
- task;
91
- dragResult;
92
- dragging = false;
93
- completion = false;
94
- marquee = {
95
- show: false,
96
- left: 0,
97
- width: 0
98
- };
99
- dragOffset;
100
- subscriptions = new Subscription();
101
- popupRef;
102
- constructor(scrollSyncService, dependencyDomService, renderer, zone, currentTimeMarkerService, localization, taskDragService) {
103
- this.scrollSyncService = scrollSyncService;
104
- this.dependencyDomService = dependencyDomService;
105
- this.renderer = renderer;
106
- this.zone = zone;
107
- this.currentTimeMarkerService = currentTimeMarkerService;
108
- this.localization = localization;
109
- this.taskDragService = taskDragService;
110
- this.subscriptions.add(
111
- // task changes indicates change in row content, number, height, etc.
112
- this.dependencyDomService.taskChanges
113
- .pipe(filter(args => isPresent(args.timelineRow)), switchMap(args => this.zone.onStable.pipe(take(1), map(() => args))) // ensure the content is rendered
114
- )
115
- .subscribe(({ timelineRow }) => {
116
- const timelineRowHeight = isDocumentAvailable() ? timelineRow.getBoundingClientRect().height : 0;
117
- this.currentTimeMarkerService.rowHeight = timelineRowHeight;
118
- this.currentTimeMarkerService.currentTimeMarker = this.currentTimeMarker;
119
- this.currentTimeMarkerService.slots = this.slots;
120
- this.currentTimeMarkerService.rows = this.rows;
121
- this.currentTimeMarkerService.activeView = this.activeView;
122
- this.createTimeMarker();
123
- this.renderer.setStyle(this.timelineColumns.nativeElement, 'height', `${(this.rows || []).length * timelineRowHeight}px`);
124
- }));
125
- if (!taskDragService) {
126
- return;
127
- }
128
- this.subscriptions.add(taskDragService.dragStart.subscribe((e) => {
129
- if (e.dragTarget.classList.contains('k-task-draghandle')) {
130
- this.completion = true;
131
- const taskRect = this.taskDragService.currentDragTaskRect;
132
- this.tooltip.position = 'top';
133
- this.tooltip.callout = true;
134
- this.tooltip.offset = taskRect.height + 6;
135
- this.tooltip.collision = {
136
- horizontal: 'fit',
137
- vertical: 'fit'
138
- };
139
- }
140
- else {
141
- this.dragging = true;
142
- }
143
- }));
144
- this.subscriptions.add(taskDragService.drag.subscribe((e) => {
145
- this.dragResult = {
146
- start: e.start,
147
- end: e.end,
148
- completionRatio: e.completionRatio,
149
- task: e.item
150
- };
151
- if (this.completion) {
152
- const dragHandle = e.dragEvent.dragTarget;
153
- this.tooltip.show(dragHandle);
154
- }
155
- else {
156
- this.marquee.show = true;
157
- this.marquee.left = e.offset;
158
- this.marquee.width = e.width;
159
- const taskEl = this.taskDragService.currentDragTask.taskElement;
160
- const taskRect = this.taskDragService.currentDragTaskRect;
161
- this.tooltip.hide();
162
- this.tooltip.position = this.taskDragService.rightDragHandle ? 'right' : 'left';
163
- this.tooltip.collision = {
164
- horizontal: 'fit',
165
- vertical: 'fit'
166
- };
167
- this.tooltip.show(taskEl);
168
- this.popupRef = this.tooltip.popupRef;
169
- const popup = this.popupRef?.popup.instance;
170
- const popupEl = popup?.container.nativeElement;
171
- const popupHeight = popupEl?.offsetHeight ?? 0;
172
- const popupWidth = popupEl?.offsetWidth ?? 0;
173
- const taskMove = !(this.taskDragService.leftDragHandle || this.taskDragService.rightDragHandle);
174
- // the theme does not provide zIndex for the marquee tooltip, thus it is applied here as an intentional exception
175
- this.popupRef && (this.popupRef.popupElement.style.zIndex += 1000000);
176
- this.popupRef && (popup.margin = {
177
- horizontal: taskMove ? taskRect.left - e.offset - this.taskDragService.tasksContainerRect.left - popupWidth / 2 : e.width - taskEl.nativeElement.clientWidth - popupWidth / 2,
178
- vertical: (taskEl.nativeElement.clientHeight + popupHeight) / 2
179
- });
180
- }
181
- }));
182
- this.subscriptions.add(taskDragService.dragEnd.subscribe(() => {
183
- this.marquee = {
184
- show: false,
185
- left: 0,
186
- width: 0
187
- };
188
- this.dragging = this.completion = false;
189
- this.tooltip.hide();
190
- this.dragResult = null;
191
- this.tooltip.position = this.tooltipOptions.position;
192
- this.tooltip.offset = 6;
193
- }));
194
- }
195
- ngOnChanges(changes) {
196
- if (changes['currentTimeMarker']) {
197
- this.createTimeMarker();
198
- }
199
- }
200
- trackBySlotIndex(index, item) {
201
- // Combine index with timestamp to ensure uniqueness
202
- // even when multiple slots have the same start time
203
- return `${index}-${item.start.getTime()}`;
204
- }
205
- ngAfterViewInit() {
206
- this.currentTimeMarkerService.slots = this.slots;
207
- this.currentTimeMarkerService.rows = this.rows;
208
- this.currentTimeMarkerService.container = this.timelineContent;
209
- const timelineHeader = this.timelineHeaderWrap.nativeElement;
210
- const rightContainer = this.timelineContent.nativeElement;
211
- this.scrollSyncService.registerElement(rightContainer, 'timeline');
212
- this.scrollSyncService.registerElement(timelineHeader, 'header');
213
- this.dependencyDomService.registerContentContainer(this.tasksContainer.nativeElement);
214
- if (this.taskDragService && isDocumentAvailable()) {
215
- this.zone.onStable.pipe(take(1)).subscribe(() => {
216
- this.taskDragService.tasksContainer = this.tasksContainer.nativeElement;
217
- this.taskDragService.scrollableContainer = this.tasksContainer.nativeElement.closest('.k-grid-content');
218
- this.taskDragService.tasksContainerRect = this.tasksContainer.nativeElement.getBoundingClientRect();
219
- });
220
- }
221
- }
222
- ngOnDestroy() {
223
- this.subscriptions.unsubscribe();
224
- }
225
- isNonWorking(item) {
226
- return item.hasOwnProperty('isWorking') && !item.isWorking;
227
- }
228
- messageFor(token) {
229
- return this.localization.get(token);
230
- }
231
- createTimeMarker() {
232
- this.zone.runOutsideAngular(() => {
233
- this.currentTimeMarkerService.removeTimeMarker();
234
- if ((typeof this.currentTimeMarker === 'boolean' && this.currentTimeMarker) || this.currentTimeMarker?.enabled) {
235
- this.currentTimeMarkerService.createTimeMarker();
236
- }
237
- });
238
- }
239
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTimelineComponent, deps: [{ token: i1.ScrollSyncService }, { token: i2.DependencyDomService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i3.CurrentTimeMarkerService }, { token: i4.GanttLocalizationService }, { token: i5.TaskDragService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
240
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", 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", customTooltipTemplate: "customTooltipTemplate", customDragTooltipTemplate: "customDragTooltipTemplate", tooltipOptions: "tooltipOptions", 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: "tooltip", first: true, predicate: TooltipDirective, descendants: true }, { propertyName: "dragPopupContainer", first: true, predicate: ["dragPopupContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "dependencyDragCreatePolyline", first: true, predicate: ["dependencyDragCreatePolyline"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
241
- <div class="k-gantt-timeline k-grid k-grid-md">
242
- <div class="k-grid-header">
243
- <div #timelineHeaderWrap class="k-grid-header-wrap">
244
- <table
245
- class="k-table k-table-md k-grid-header-table"
246
- role="presentation"
247
- [style.width.px]="tableWidth"
248
- >
249
- <tbody
250
- kendoGanttHeaderTableBody
251
- [groupSlots]="groupSlots"
252
- [slots]="slots">
253
- </tbody>
254
- </table>
255
- </div>
256
- </div>
257
- <!-- tabindex="-1" required for https://bugzilla.mozilla.org/show_bug.cgi?id=1069739 -->
258
- <div
259
- #timelineContent
260
- class="k-grid-content"
261
- tabindex="-1"
262
- role="tree"
263
- aria-roledescription="Timeline"
264
- kendoGanttTimelineScrollable
265
- [scrollSettings]="dragScrollSettings"
266
- kendoDraggable
267
- [enableDrag]="draggableEnabled"
268
- (kendoPress)="timelineContainerPress.emit($event)"
269
- (kendoDrag)="timelineContainerDrag.emit($event)"
270
- (kendoRelease)="timelineContainerRelease.emit($event)"
271
- >
272
- <div class="k-gantt-tables">
273
- <table
274
- class="k-table k-table-md k-grid-table k-gantt-rows"
275
- [style.width.px]="tableWidth"
276
- role="presentation"
277
- >
278
- <tbody class="k-table-tbody">
279
- @for (item of rows; track $index; let i = $index) {
280
- <tr
281
- class="k-table-row{{i % 2 ? ' k-table-alt-row' : ''}}">
282
- <td class="k-table-td"></td>
283
- </tr>
284
- }
285
- </tbody>
286
- </table>
287
-
288
- <table
289
- #timelineColumns
290
- class="k-table k-table-md k-gantt-columns"
291
- role="presentation"
292
- [style.width.px]="tableWidth"
293
- >
294
- <colgroup>
295
- @for (item of slots; track trackBySlotIndex($index, item)) {
296
- <col>
297
- }
298
- </colgroup>
299
-
300
- <tbody class="k-table-tbody">
301
- <tr class="k-table-row">
302
- @for (item of slots; track trackBySlotIndex($index, item)) {
303
- <td
304
- class="k-table-td"
305
- [class.k-nonwork-hour]="isNonWorking(item)"></td>
306
- }
307
- </tr>
308
- </tbody>
309
- </table>
310
-
311
- <table kendoTooltip
312
- #tooltip="kendoTooltip"
313
- [tooltipTemplate]="completion ? completionRatioTooltip : dragging ? (customDragTooltipTemplate ? customDragTooltip : resizingTooltip) : customTooltipTemplate ? customTooltip : tooltipTemplate"
314
- [position]="tooltipOptions.position"
315
- [callout]="!dragging"
316
- [tooltipClass]="dragging ? 'k-gantt-resize-hint' : undefined"
317
- filter=".k-task"
318
- [showOn]="dragging || completion ? 'none' : 'hover'"
319
- #tasksContainer
320
- class="k-table k-table-md k-gantt-tasks"
321
- role="presentation"
322
- [style.border-collapse]="'collapse'"
323
- [style.width.px]="tableWidth"
324
- >
325
- <tbody
326
- class="k-table-tbody"
327
- kendoGanttTasksTableBody
328
- [rows]="rows"
329
- [activeView]="activeView"
330
- [taskContentTemplate]="taskContentTemplate"
331
- [taskTemplate]="taskTemplate"
332
- [summaryTaskTemplate]="summaryTaskTemplate"
333
- [taskClass]="taskClass"
334
- [isExpanded]="isExpanded"
335
- [selectable]="selectable"
336
- [isTaskSelected]="isTaskSelected"
337
- [renderDependencyDragClues]="renderDependencyDragClues"
338
- (taskPointerEnter)="task = $event"
339
- (taskPointerLeave)="task = null"
340
- >
341
- </tbody>
342
- </table>
343
- </div>
344
- <ng-template #tooltipTemplate>
345
- <div class="k-task-content">
346
- <div class="k-task-details">
347
- <strong>{{task?.title}}</strong>
348
- <div class="k-task-pct">{{task?.completionRatio | kendoNumber: 'p'}}</div>
349
- <ul class="k-reset">
350
- <li>{{messageFor('tooltipStartDateText')}}: {{task?.start | kendoDate: 'HH:mm a EEE, MMM d'}}</li>
351
- <li>{{messageFor('tooltipEndDateText')}}: {{task?.end | kendoDate: 'HH:mm a EEE, MMM d'}}</li>
352
- </ul>
353
- </div>
354
- </div>
355
- </ng-template>
356
- <ng-template #customTooltip>
357
- <ng-container *ngTemplateOutlet="customTooltipTemplate.templateRef; context: { $implicit: task, task }"></ng-container>
358
- </ng-template>
359
- <ng-template #resizingTooltip>
360
- <div class="k-tooltip-content">
361
- <div>{{messageFor('tooltipStartDateText')}}: {{dragResult?.start | kendoDate: 'HH:mm a EEE, MMM d'}}</div>
362
- <div>{{messageFor('tooltipEndDateText')}}: {{dragResult?.end | kendoDate: 'HH:mm a EEE, MMM d'}}</div>
363
- </div>
364
- </ng-template>
365
- <ng-template #customDragTooltip>
366
- <ng-container *ngTemplateOutlet="customDragTooltipTemplate.templateRef; context: { $implicit: dragResult }"></ng-container>
367
- </ng-template>
368
- <ng-template #completionRatioTooltip>
369
- <div class="k-tooltip-content">
370
- <div>{{dragResult?.completionRatio | kendoNumber: 'p'}}</div>
371
- </div>
372
- </ng-template>
373
-
374
- <svg class="k-gantt-dependencies-svg">
375
- @for (dependency of dependencies; track dependency.id) {
376
- <polyline
377
- kendoGanttDependency
378
- [dependency]="dependency"
379
- />
380
- }
381
- <polyline #dependencyDragCreatePolyline />
382
- </svg>
383
- @if (marquee.show) {
384
- <div class="k-marquee k-gantt-marquee" style="top: 0px; height: {{tasksContainer.offsetHeight}}px; left: {{marquee.left}}px; width: {{marquee.width}}px;">
385
- <div class="k-marquee-color"></div>
386
- </div>
387
- }
388
- <!-- placeholder for the dependency drag popup; its position is not arbitrary - the popup is intended to be absolutely positioned inside the .k-grid-content element -->
389
- <ng-container #dragPopupContainer></ng-container>
390
- </div>
391
- </div>
392
-
393
- `, isInline: true, dependencies: [{ 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: "component", type: GanttTasksTableBodyComponent, selector: "[kendoGanttTasksTableBody]", inputs: ["selectable", "rows", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "isExpanded", "isTaskSelected", "renderDependencyDragClues"], outputs: ["taskPointerEnter", "taskPointerLeave"] }, { kind: "directive", type: GanttDependencyDirective, selector: "[kendoGanttDependency]", inputs: ["dependency"] }, { kind: "directive", type: i6.TooltipDirective, selector: "[kendoTooltip]", inputs: ["filter", "position", "titleTemplate", "showOn", "showAfter", "callout", "closable", "offset", "tooltipWidth", "tooltipHeight", "tooltipClass", "tooltipContentClass", "collision", "closeTitle", "tooltipTemplate"], exportAs: ["kendoTooltip"] }, { kind: "pipe", type: DatePipe, name: "kendoDate" }, { kind: "pipe", type: NumberPipe, name: "kendoNumber" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None });
394
- }
395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTimelineComponent, decorators: [{
396
- type: Component,
397
- args: [{
398
- selector: 'kendo-gantt-timeline',
399
- template: `
400
- <div class="k-gantt-timeline k-grid k-grid-md">
401
- <div class="k-grid-header">
402
- <div #timelineHeaderWrap class="k-grid-header-wrap">
403
- <table
404
- class="k-table k-table-md k-grid-header-table"
405
- role="presentation"
406
- [style.width.px]="tableWidth"
407
- >
408
- <tbody
409
- kendoGanttHeaderTableBody
410
- [groupSlots]="groupSlots"
411
- [slots]="slots">
412
- </tbody>
413
- </table>
414
- </div>
415
- </div>
416
- <!-- tabindex="-1" required for https://bugzilla.mozilla.org/show_bug.cgi?id=1069739 -->
417
- <div
418
- #timelineContent
419
- class="k-grid-content"
420
- tabindex="-1"
421
- role="tree"
422
- aria-roledescription="Timeline"
423
- kendoGanttTimelineScrollable
424
- [scrollSettings]="dragScrollSettings"
425
- kendoDraggable
426
- [enableDrag]="draggableEnabled"
427
- (kendoPress)="timelineContainerPress.emit($event)"
428
- (kendoDrag)="timelineContainerDrag.emit($event)"
429
- (kendoRelease)="timelineContainerRelease.emit($event)"
430
- >
431
- <div class="k-gantt-tables">
432
- <table
433
- class="k-table k-table-md k-grid-table k-gantt-rows"
434
- [style.width.px]="tableWidth"
435
- role="presentation"
436
- >
437
- <tbody class="k-table-tbody">
438
- @for (item of rows; track $index; let i = $index) {
439
- <tr
440
- class="k-table-row{{i % 2 ? ' k-table-alt-row' : ''}}">
441
- <td class="k-table-td"></td>
442
- </tr>
443
- }
444
- </tbody>
445
- </table>
446
-
447
- <table
448
- #timelineColumns
449
- class="k-table k-table-md k-gantt-columns"
450
- role="presentation"
451
- [style.width.px]="tableWidth"
452
- >
453
- <colgroup>
454
- @for (item of slots; track trackBySlotIndex($index, item)) {
455
- <col>
456
- }
457
- </colgroup>
458
-
459
- <tbody class="k-table-tbody">
460
- <tr class="k-table-row">
461
- @for (item of slots; track trackBySlotIndex($index, item)) {
462
- <td
463
- class="k-table-td"
464
- [class.k-nonwork-hour]="isNonWorking(item)"></td>
465
- }
466
- </tr>
467
- </tbody>
468
- </table>
469
-
470
- <table kendoTooltip
471
- #tooltip="kendoTooltip"
472
- [tooltipTemplate]="completion ? completionRatioTooltip : dragging ? (customDragTooltipTemplate ? customDragTooltip : resizingTooltip) : customTooltipTemplate ? customTooltip : tooltipTemplate"
473
- [position]="tooltipOptions.position"
474
- [callout]="!dragging"
475
- [tooltipClass]="dragging ? 'k-gantt-resize-hint' : undefined"
476
- filter=".k-task"
477
- [showOn]="dragging || completion ? 'none' : 'hover'"
478
- #tasksContainer
479
- class="k-table k-table-md k-gantt-tasks"
480
- role="presentation"
481
- [style.border-collapse]="'collapse'"
482
- [style.width.px]="tableWidth"
483
- >
484
- <tbody
485
- class="k-table-tbody"
486
- kendoGanttTasksTableBody
487
- [rows]="rows"
488
- [activeView]="activeView"
489
- [taskContentTemplate]="taskContentTemplate"
490
- [taskTemplate]="taskTemplate"
491
- [summaryTaskTemplate]="summaryTaskTemplate"
492
- [taskClass]="taskClass"
493
- [isExpanded]="isExpanded"
494
- [selectable]="selectable"
495
- [isTaskSelected]="isTaskSelected"
496
- [renderDependencyDragClues]="renderDependencyDragClues"
497
- (taskPointerEnter)="task = $event"
498
- (taskPointerLeave)="task = null"
499
- >
500
- </tbody>
501
- </table>
502
- </div>
503
- <ng-template #tooltipTemplate>
504
- <div class="k-task-content">
505
- <div class="k-task-details">
506
- <strong>{{task?.title}}</strong>
507
- <div class="k-task-pct">{{task?.completionRatio | kendoNumber: 'p'}}</div>
508
- <ul class="k-reset">
509
- <li>{{messageFor('tooltipStartDateText')}}: {{task?.start | kendoDate: 'HH:mm a EEE, MMM d'}}</li>
510
- <li>{{messageFor('tooltipEndDateText')}}: {{task?.end | kendoDate: 'HH:mm a EEE, MMM d'}}</li>
511
- </ul>
512
- </div>
513
- </div>
514
- </ng-template>
515
- <ng-template #customTooltip>
516
- <ng-container *ngTemplateOutlet="customTooltipTemplate.templateRef; context: { $implicit: task, task }"></ng-container>
517
- </ng-template>
518
- <ng-template #resizingTooltip>
519
- <div class="k-tooltip-content">
520
- <div>{{messageFor('tooltipStartDateText')}}: {{dragResult?.start | kendoDate: 'HH:mm a EEE, MMM d'}}</div>
521
- <div>{{messageFor('tooltipEndDateText')}}: {{dragResult?.end | kendoDate: 'HH:mm a EEE, MMM d'}}</div>
522
- </div>
523
- </ng-template>
524
- <ng-template #customDragTooltip>
525
- <ng-container *ngTemplateOutlet="customDragTooltipTemplate.templateRef; context: { $implicit: dragResult }"></ng-container>
526
- </ng-template>
527
- <ng-template #completionRatioTooltip>
528
- <div class="k-tooltip-content">
529
- <div>{{dragResult?.completionRatio | kendoNumber: 'p'}}</div>
530
- </div>
531
- </ng-template>
532
-
533
- <svg class="k-gantt-dependencies-svg">
534
- @for (dependency of dependencies; track dependency.id) {
535
- <polyline
536
- kendoGanttDependency
537
- [dependency]="dependency"
538
- />
539
- }
540
- <polyline #dependencyDragCreatePolyline />
541
- </svg>
542
- @if (marquee.show) {
543
- <div class="k-marquee k-gantt-marquee" style="top: 0px; height: {{tasksContainer.offsetHeight}}px; left: {{marquee.left}}px; width: {{marquee.width}}px;">
544
- <div class="k-marquee-color"></div>
545
- </div>
546
- }
547
- <!-- placeholder for the dependency drag popup; its position is not arbitrary - the popup is intended to be absolutely positioned inside the .k-grid-content element -->
548
- <ng-container #dragPopupContainer></ng-container>
549
- </div>
550
- </div>
551
-
552
- `,
553
- standalone: true,
554
- encapsulation: ViewEncapsulation.None,
555
- imports: [GanttHeaderTableBodyComponent, TimelineScrollableDirective, DraggableDirective, GanttTasksTableBodyComponent, GanttDependencyDirective, KENDO_TOOLTIP, DatePipe, NumberPipe, NgTemplateOutlet],
556
- }]
557
- }], ctorParameters: () => [{ type: i1.ScrollSyncService }, { type: i2.DependencyDomService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i3.CurrentTimeMarkerService }, { type: i4.GanttLocalizationService }, { type: i5.TaskDragService, decorators: [{
558
- type: Optional
559
- }] }], propDecorators: { timelineContent: [{
560
- type: ViewChild,
561
- args: ['timelineContent', { static: true }]
562
- }], timelineColumns: [{
563
- type: ViewChild,
564
- args: ['timelineColumns', { static: true }]
565
- }], timelineHeaderWrap: [{
566
- type: ViewChild,
567
- args: ['timelineHeaderWrap', { static: true }]
568
- }], tasksContainer: [{
569
- type: ViewChild,
570
- args: ['tasksContainer', { static: true }]
571
- }], tooltip: [{
572
- type: ViewChild,
573
- args: [TooltipDirective]
574
- }], dragPopupContainer: [{
575
- type: ViewChild,
576
- args: ['dragPopupContainer', { static: false, read: ViewContainerRef }]
577
- }], dependencyDragCreatePolyline: [{
578
- type: ViewChild,
579
- args: ['dependencyDragCreatePolyline']
580
- }], rows: [{
581
- type: Input
582
- }], slots: [{
583
- type: Input
584
- }], groupSlots: [{
585
- type: Input
586
- }], tableWidth: [{
587
- type: Input
588
- }], activeView: [{
589
- type: Input
590
- }], taskContentTemplate: [{
591
- type: Input
592
- }], taskTemplate: [{
593
- type: Input
594
- }], summaryTaskTemplate: [{
595
- type: Input
596
- }], taskClass: [{
597
- type: Input
598
- }], renderDependencyDragClues: [{
599
- type: Input
600
- }], dragScrollSettings: [{
601
- type: Input
602
- }], currentTimeMarker: [{
603
- type: Input
604
- }], customTooltipTemplate: [{
605
- type: Input
606
- }], customDragTooltipTemplate: [{
607
- type: Input
608
- }], tooltipOptions: [{
609
- type: Input
610
- }], selectable: [{
611
- type: Input
612
- }], isTaskSelected: [{
613
- type: Input
614
- }], isExpanded: [{
615
- type: Input
616
- }], dependencies: [{
617
- type: Input
618
- }], timelineContainerPress: [{
619
- type: Output
620
- }], timelineContainerDrag: [{
621
- type: Output
622
- }], timelineContainerRelease: [{
623
- type: Output
624
- }] } });