@progress/kendo-angular-gantt 2.0.0-next.202204011501 → 2.0.0-next.202204121507

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 (229) hide show
  1. package/binding-directives/flat-binding.directive.d.ts +24 -0
  2. package/binding-directives/hierarchy-binding.directive.d.ts +22 -0
  3. package/bundles/kendo-angular-gantt.umd.js +1 -1
  4. package/columns/cell-template.directive.d.ts +28 -0
  5. package/columns/column-base.d.ts +85 -0
  6. package/columns/column-group.component.d.ts +103 -0
  7. package/columns/column-menu-template.directive.d.ts +22 -0
  8. package/columns/column.component.d.ts +130 -0
  9. package/columns/columns.d.ts +15 -0
  10. package/columns/edit-template.directive.d.ts +26 -0
  11. package/columns/filter-cell-template.directive.d.ts +21 -0
  12. package/columns/filter-menu-template.directive.d.ts +20 -0
  13. package/columns/footer-template.directive.d.ts +24 -0
  14. package/columns/header-template.directive.d.ts +22 -0
  15. package/columns/span-column.component.d.ts +112 -0
  16. package/common/default-callbacks.d.ts +25 -0
  17. package/common/mapping.service.d.ts +38 -0
  18. package/common/option-changes.service.d.ts +17 -0
  19. package/common/touch-enabled.d.ts +9 -0
  20. package/dependencies/dependency-dom.service.d.ts +46 -0
  21. package/dependencies/dom-dependency-args.d.ts +24 -0
  22. package/dependencies/gantt-dependency.directive.d.ts +29 -0
  23. package/dependencies/utils.d.ts +53 -0
  24. package/dragging/dependency-drag-create.directive.d.ts +75 -0
  25. package/dragging/drag-validation-tooltip.component.d.ts +32 -0
  26. package/editing/add-task.component.d.ts +47 -0
  27. package/editing/dependencies-table.component.d.ts +42 -0
  28. package/editing/edit-dialog.component.d.ts +33 -0
  29. package/editing/edit.service.d.ts +44 -0
  30. package/editing/task-fields.component.d.ts +25 -0
  31. package/editing/utils.d.ts +10 -0
  32. package/esm2015/binding-directives/flat-binding.directive.js +34 -0
  33. package/esm2015/binding-directives/hierarchy-binding.directive.js +32 -0
  34. package/esm2015/columns/cell-template.directive.js +37 -0
  35. package/esm2015/columns/column-base.js +52 -0
  36. package/esm2015/columns/column-group.component.js +94 -0
  37. package/esm2015/columns/column-menu-template.directive.js +31 -0
  38. package/esm2015/columns/column.component.js +133 -0
  39. package/esm2015/columns/columns.js +15 -0
  40. package/esm2015/columns/edit-template.directive.js +35 -0
  41. package/esm2015/columns/filter-cell-template.directive.js +30 -0
  42. package/esm2015/columns/filter-menu-template.directive.js +29 -0
  43. package/esm2015/columns/footer-template.directive.js +33 -0
  44. package/esm2015/columns/header-template.directive.js +31 -0
  45. package/esm2015/columns/span-column.component.js +86 -0
  46. package/esm2015/common/default-callbacks.js +25 -0
  47. package/esm2015/common/mapping.service.js +64 -0
  48. package/esm2015/common/option-changes.service.js +26 -0
  49. package/esm2015/common/touch-enabled.js +9 -0
  50. package/esm2015/dependencies/dependency-dom.service.js +70 -0
  51. package/esm2015/dependencies/dom-dependency-args.js +5 -0
  52. package/esm2015/dependencies/gantt-dependency.directive.js +82 -0
  53. package/esm2015/dependencies/utils.js +195 -0
  54. package/esm2015/dragging/dependency-drag-create.directive.js +318 -0
  55. package/esm2015/dragging/drag-validation-tooltip.component.js +90 -0
  56. package/esm2015/editing/add-task.component.js +109 -0
  57. package/esm2015/editing/dependencies-table.component.js +196 -0
  58. package/esm2015/editing/edit-dialog.component.js +170 -0
  59. package/esm2015/editing/edit.service.js +111 -0
  60. package/esm2015/editing/task-fields.component.js +101 -0
  61. package/esm2015/editing/utils.js +15 -0
  62. package/esm2015/expanded-state/expand-event.js +9 -0
  63. package/esm2015/expanded-state/expandable.directive.js +23 -0
  64. package/esm2015/gantt.component.js +2227 -0
  65. package/esm2015/gantt.module.js +264 -0
  66. package/esm2015/kendo-angular-gantt.js +8 -0
  67. package/esm2015/localization/custom-messages.component.js +41 -0
  68. package/esm2015/localization/gantt-localization.service.js +25 -0
  69. package/esm2015/localization/localized-messages.directive.js +36 -0
  70. package/esm2015/localization/messages.js +157 -0
  71. package/esm2015/main.js +37 -0
  72. package/esm2015/models/cell-content-type.interface.js +5 -0
  73. package/esm2015/models/class-callbacks.js +5 -0
  74. package/esm2015/models/column-menu-settings.interface.js +5 -0
  75. package/esm2015/models/column-reorder-config.js +5 -0
  76. package/esm2015/models/date-range.interface.js +5 -0
  77. package/esm2015/models/dependency-type.enum.js +20 -0
  78. package/esm2015/models/events/cell-click-event.interface.js +5 -0
  79. package/esm2015/models/events/cell-close-event.interface.js +14 -0
  80. package/esm2015/models/events/click-event.interface.js +5 -0
  81. package/esm2015/models/events/column-locked-change-event.interface.js +5 -0
  82. package/esm2015/models/events/column-reorder-event.interface.js +5 -0
  83. package/esm2015/models/events/column-resize-event.interface.js +5 -0
  84. package/esm2015/models/events/column-visibility-change-event.interface.js +5 -0
  85. package/esm2015/models/events/data-state-change-event.interface.js +5 -0
  86. package/esm2015/models/events/dependency-add-event.interface.js +5 -0
  87. package/esm2015/models/events/selected-view-change-event.interface.js +5 -0
  88. package/esm2015/models/events/task-add-event.interface.js +5 -0
  89. package/esm2015/models/events/task-click-event.interface.js +5 -0
  90. package/esm2015/models/events/task-delete-event.interface.js +5 -0
  91. package/esm2015/models/events/task-edit-event.interface.js +5 -0
  92. package/esm2015/models/events/task-move-end-event.interface.js +5 -0
  93. package/esm2015/models/events/task-move-event.interface.js +5 -0
  94. package/esm2015/models/events/task-move-start-event.interface.js +5 -0
  95. package/esm2015/models/events/task-resize-end-event.interface.js +5 -0
  96. package/esm2015/models/events/task-resize-event.interface.js +5 -0
  97. package/esm2015/models/events/task-resize-start-event.interface.js +5 -0
  98. package/esm2015/models/filterable-settings.js +5 -0
  99. package/esm2015/models/gantt-dependency-model-fields.interface.js +13 -0
  100. package/esm2015/models/gantt-dependency.interface.js +5 -0
  101. package/esm2015/models/gantt-task-model-fields.interface.js +15 -0
  102. package/esm2015/models/gantt-task.interface.js +5 -0
  103. package/esm2015/models/models.js +7 -0
  104. package/esm2015/models/slot.interface.js +5 -0
  105. package/esm2015/models/sort-settings.js +17 -0
  106. package/esm2015/models/splitter-pane-options.interface.js +20 -0
  107. package/esm2015/models/timeline-options.interface.js +5 -0
  108. package/esm2015/models/timeline-view.js +5 -0
  109. package/esm2015/models/toolbar-settings.js +5 -0
  110. package/esm2015/models/view-item.interface.js +5 -0
  111. package/esm2015/navigation/navigation-models.js +5 -0
  112. package/esm2015/navigation/navigation.service.js +265 -0
  113. package/esm2015/navigation/utils.js +69 -0
  114. package/esm2015/package-metadata.js +15 -0
  115. package/esm2015/rendering/gantt-header-table-body.component.js +42 -0
  116. package/esm2015/rendering/gantt-milestone-task.component.js +107 -0
  117. package/esm2015/rendering/gantt-summary-task.component.js +158 -0
  118. package/esm2015/rendering/gantt-task-base.js +148 -0
  119. package/esm2015/rendering/gantt-task.component.js +204 -0
  120. package/esm2015/rendering/gantt-tasks-table-body.component.js +160 -0
  121. package/esm2015/scrolling/drag-scroll-settings.js +20 -0
  122. package/esm2015/scrolling/scroll-sync.service.js +80 -0
  123. package/esm2015/scrolling/timeline-scroll.directive.js +75 -0
  124. package/esm2015/scrolling/timeline-scroll.service.js +39 -0
  125. package/esm2015/scrolling/utils.js +77 -0
  126. package/esm2015/selection/selectable.directive.js +112 -0
  127. package/esm2015/selection/selection-change-event.js +5 -0
  128. package/esm2015/template-directives/summary-task-template.directive.js +50 -0
  129. package/esm2015/template-directives/task-content-template.directive.js +45 -0
  130. package/esm2015/template-directives/task-template.directive.js +48 -0
  131. package/esm2015/timeline/gantt-timeline.component.js +334 -0
  132. package/esm2015/timeline/timeline-base-view.service.js +160 -0
  133. package/esm2015/timeline/timeline-day-view.component.js +38 -0
  134. package/esm2015/timeline/timeline-day-view.service.js +66 -0
  135. package/esm2015/timeline/timeline-month-view.component.js +38 -0
  136. package/esm2015/timeline/timeline-month-view.service.js +64 -0
  137. package/esm2015/timeline/timeline-view.service.js +35 -0
  138. package/esm2015/timeline/timeline-week-view.component.js +38 -0
  139. package/esm2015/timeline/timeline-week-view.service.js +60 -0
  140. package/esm2015/timeline/view-base.js +45 -0
  141. package/esm2015/toolbar/toolbar-template.directive.js +127 -0
  142. package/esm2015/toolbar/toolbar.component.js +94 -0
  143. package/esm2015/toolbar/view-selector.component.js +96 -0
  144. package/esm2015/utils.js +293 -0
  145. package/expanded-state/expand-event.d.ts +13 -0
  146. package/expanded-state/expandable.directive.d.ts +20 -0
  147. package/fesm2015/kendo-angular-gantt.js +7706 -0
  148. package/gantt.component.d.ts +750 -0
  149. package/gantt.module.d.ts +94 -0
  150. package/kendo-angular-gantt.d.ts +9 -0
  151. package/localization/custom-messages.component.d.ts +18 -0
  152. package/localization/gantt-localization.service.d.ts +18 -0
  153. package/localization/localized-messages.directive.d.ts +16 -0
  154. package/localization/messages.d.ts +293 -0
  155. package/main.d.ts +39 -0
  156. package/models/cell-content-type.interface.d.ts +10 -0
  157. package/models/class-callbacks.d.ts +43 -0
  158. package/models/column-menu-settings.interface.d.ts +26 -0
  159. package/models/column-reorder-config.d.ts +10 -0
  160. package/models/date-range.interface.d.ts +19 -0
  161. package/models/dependency-type.enum.d.ts +19 -0
  162. package/models/events/cell-click-event.interface.d.ts +43 -0
  163. package/models/events/cell-close-event.interface.d.ts +48 -0
  164. package/models/events/click-event.interface.d.ts +23 -0
  165. package/models/events/column-locked-change-event.interface.d.ts +16 -0
  166. package/models/events/column-reorder-event.interface.d.ts +10 -0
  167. package/models/events/column-resize-event.interface.d.ts +10 -0
  168. package/models/events/column-visibility-change-event.interface.d.ts +14 -0
  169. package/models/events/data-state-change-event.interface.d.ts +10 -0
  170. package/models/events/dependency-add-event.interface.d.ts +26 -0
  171. package/models/events/selected-view-change-event.interface.d.ts +19 -0
  172. package/models/events/task-add-event.interface.d.ts +31 -0
  173. package/models/events/task-click-event.interface.d.ts +30 -0
  174. package/models/events/task-delete-event.interface.d.ts +21 -0
  175. package/models/events/task-edit-event.interface.d.ts +76 -0
  176. package/models/events/task-move-end-event.interface.d.ts +12 -0
  177. package/models/events/task-move-event.interface.d.ts +23 -0
  178. package/models/events/task-move-start-event.interface.d.ts +15 -0
  179. package/models/events/task-resize-end-event.interface.d.ts +12 -0
  180. package/models/events/task-resize-event.interface.d.ts +23 -0
  181. package/models/events/task-resize-start-event.interface.d.ts +15 -0
  182. package/models/filterable-settings.d.ts +10 -0
  183. package/models/gantt-dependency-model-fields.interface.d.ts +35 -0
  184. package/models/gantt-dependency.interface.d.ts +26 -0
  185. package/models/gantt-task-model-fields.interface.d.ts +42 -0
  186. package/models/gantt-task.interface.d.ts +31 -0
  187. package/models/models.d.ts +42 -0
  188. package/models/slot.interface.d.ts +31 -0
  189. package/models/sort-settings.d.ts +42 -0
  190. package/models/splitter-pane-options.interface.d.ts +54 -0
  191. package/models/timeline-options.interface.d.ts +41 -0
  192. package/models/timeline-view.d.ts +8 -0
  193. package/models/toolbar-settings.d.ts +29 -0
  194. package/models/view-item.interface.d.ts +35 -0
  195. package/navigation/navigation-models.d.ts +38 -0
  196. package/navigation/navigation.service.d.ts +130 -0
  197. package/navigation/utils.d.ts +26 -0
  198. package/package-metadata.d.ts +9 -0
  199. package/package.json +9 -13
  200. package/rendering/gantt-header-table-body.component.d.ts +14 -0
  201. package/rendering/gantt-milestone-task.component.d.ts +22 -0
  202. package/rendering/gantt-summary-task.component.d.ts +25 -0
  203. package/rendering/gantt-task-base.d.ts +59 -0
  204. package/rendering/gantt-task.component.d.ts +26 -0
  205. package/rendering/gantt-tasks-table-body.component.d.ts +33 -0
  206. package/scrolling/drag-scroll-settings.d.ts +47 -0
  207. package/scrolling/scroll-sync.service.d.ts +33 -0
  208. package/scrolling/timeline-scroll.directive.d.ts +27 -0
  209. package/scrolling/timeline-scroll.service.d.ts +23 -0
  210. package/scrolling/utils.d.ts +29 -0
  211. package/selection/selectable.directive.d.ts +45 -0
  212. package/selection/selection-change-event.d.ts +25 -0
  213. package/template-directives/summary-task-template.directive.d.ts +41 -0
  214. package/template-directives/task-content-template.directive.d.ts +36 -0
  215. package/template-directives/task-template.directive.d.ts +39 -0
  216. package/timeline/gantt-timeline.component.d.ts +67 -0
  217. package/timeline/timeline-base-view.service.d.ts +77 -0
  218. package/timeline/timeline-day-view.component.d.ts +18 -0
  219. package/timeline/timeline-day-view.service.d.ts +38 -0
  220. package/timeline/timeline-month-view.component.d.ts +18 -0
  221. package/timeline/timeline-month-view.service.d.ts +38 -0
  222. package/timeline/timeline-view.service.d.ts +19 -0
  223. package/timeline/timeline-week-view.component.d.ts +18 -0
  224. package/timeline/timeline-week-view.service.d.ts +38 -0
  225. package/timeline/view-base.d.ts +34 -0
  226. package/toolbar/toolbar-template.directive.d.ts +112 -0
  227. package/toolbar/toolbar.component.d.ts +29 -0
  228. package/toolbar/view-selector.component.d.ts +43 -0
  229. package/utils.d.ts +166 -0
@@ -0,0 +1,2227 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 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, forwardRef, HostBinding, Input, Output, EventEmitter, ViewChild, ContentChildren, ContentChild, QueryList, isDevMode } from '@angular/core';
6
+ import { TreeListComponent, DataBoundTreeComponent, ExpandableTreeComponent } from '@progress/kendo-angular-treelist';
7
+ import { Subscription } from 'rxjs';
8
+ import { validatePackage } from '@progress/kendo-licensing';
9
+ import { packageMetadata } from './package-metadata';
10
+ import { anyChanged, hasObservers, Keys } from '@progress/kendo-angular-common';
11
+ import { getIndexFromViewDigitKeyCode, isArrowUpDownKey, isExpandCollapseKey, isNavigationKey, isViewDigitKey } from './navigation/utils';
12
+ import { GanttTimelineComponent } from './timeline/gantt-timeline.component';
13
+ import { GanttColumnBase } from './columns/columns';
14
+ import { fetchChildren, hasChildren, isSelected, rowClassCallback, taskClassCallback } from './common/default-callbacks';
15
+ import { DependencyType } from './models/models';
16
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
17
+ import { TimelineViewService } from './timeline/timeline-view.service';
18
+ import { TimelineDayViewService } from './timeline/timeline-day-view.service';
19
+ import { TimelineWeekViewService } from './timeline/timeline-week-view.service';
20
+ import { TimelineMonthViewService } from './timeline/timeline-month-view.service';
21
+ import { ScrollSyncService } from './scrolling/scroll-sync.service';
22
+ import { DependencyDomService } from './dependencies/dependency-dom.service';
23
+ import { MappingService } from './common/mapping.service';
24
+ import { OptionChangesService } from './common/option-changes.service';
25
+ import { EditService } from './editing/edit.service';
26
+ import { TimelineScrollService } from './scrolling/timeline-scroll.service';
27
+ import { GanttLocalizationService } from './localization/gantt-localization.service';
28
+ import { NavigationService } from './navigation/navigation.service';
29
+ import { areParentChild, getClosestTaskIndex, isClearButton, isColumnGroup, isPresent, isTask, isToolbar, normalizeGanttData, scrollbarWidth } from './utils';
30
+ import { DEFAULT_TIMELINE_PANE_SETTINGS, DEFAULT_TREELIST_PANE_SETTINGS } from './models/splitter-pane-options.interface';
31
+ import { GanttTaskTemplateDirective } from './template-directives/task-template.directive';
32
+ import { GanttSummaryTaskTemplateDirective } from './template-directives/summary-task-template.directive';
33
+ import { GanttTaskContentTemplateDirective } from './template-directives/task-content-template.directive';
34
+ import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
35
+ import { ViewBase } from './timeline/view-base';
36
+ import { getEditItem } from './editing/utils';
37
+ import { CellCloseEvent } from './models/events/cell-close-event.interface';
38
+ import * as i0 from "@angular/core";
39
+ import * as i1 from "./timeline/timeline-view.service";
40
+ import * as i2 from "./scrolling/scroll-sync.service";
41
+ import * as i3 from "./common/mapping.service";
42
+ import * as i4 from "./common/option-changes.service";
43
+ import * as i5 from "./dependencies/dependency-dom.service";
44
+ import * as i6 from "./editing/edit.service";
45
+ import * as i7 from "@progress/kendo-angular-l10n";
46
+ import * as i8 from "./navigation/navigation.service";
47
+ import * as i9 from "./toolbar/toolbar.component";
48
+ import * as i10 from "@progress/kendo-angular-layout";
49
+ import * as i11 from "@progress/kendo-angular-treelist";
50
+ import * as i12 from "./timeline/gantt-timeline.component";
51
+ import * as i13 from "./editing/edit-dialog.component";
52
+ import * as i14 from "@progress/kendo-angular-dialog";
53
+ import * as i15 from "./localization/localized-messages.directive";
54
+ import * as i16 from "@angular/common";
55
+ import * as i17 from "@progress/kendo-angular-common";
56
+ import * as i18 from "@progress/kendo-angular-buttons";
57
+ const TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
58
+ const DEFAULT_VIEW = 'week';
59
+ const DEFAULT_DRAG_SCROLL_SETTINGS = {
60
+ enabled: true,
61
+ step: 3,
62
+ interval: 1,
63
+ threshold: 10
64
+ };
65
+ /**
66
+ * Represents the Kendo UI Gantt component for Angular.
67
+ *
68
+ * @example
69
+ * ```ts-preview
70
+ * _@Component({
71
+ * selector: 'my-app',
72
+ * template: `
73
+ * <kendo-gantt
74
+ * [style.height.px]="500"
75
+ * [kendoGanttHierarchyBinding]="data"
76
+ * childrenField="subtasks"
77
+ * [dependencies]="dependencies">
78
+ * <kendo-gantt-column
79
+ * field="title"
80
+ * title="Task"
81
+ * [width]="200"
82
+ * [expandable]="true"></kendo-gantt-column>
83
+ * <kendo-gantt-column
84
+ * field="start"
85
+ * title="Start"
86
+ * format="dd-MMM-yyyy"
87
+ * [width]="120"></kendo-gantt-column>
88
+ * <kendo-gantt-column
89
+ * field="end"
90
+ * title="End"
91
+ * format="dd-MMM-yyyy"
92
+ * [width]="120"></kendo-gantt-column>
93
+ * <kendo-gantt-timeline-day-view></kendo-gantt-timeline-day-view>
94
+ * <kendo-gantt-timeline-week-view></kendo-gantt-timeline-week-view>
95
+ * <kendo-gantt-timeline-month-view></kendo-gantt-timeline-month-view>
96
+ * </kendo-gantt>
97
+ * `
98
+ * })
99
+ * class AppComponent {
100
+ * public data: Task[] = [{
101
+ * id: 7, title: 'Validation and R&D', start: new Date('2014-06-02T00:00:00.000Z'),
102
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.45708333333333334,
103
+ * subtasks: [
104
+ * { id: 18, title: 'Project Kickoff', start: new Date('2014-06-02T00:00:00.000Z'),
105
+ * end: new Date('2014-06-02T00:00:00.000Z'), completionRatio: 0.23 },
106
+ * { id: 11, title: 'Research', start: new Date('2014-06-02T00:00:00.000Z'),
107
+ * end: new Date('2014-06-07T00:00:00.000Z'), completionRatio: 0.5766666666666667,
108
+ * subtasks: [
109
+ * { id: 19, title: 'Validation', start: new Date('2014-06-02T00:00:00.000Z'),
110
+ * end: new Date('2014-06-04T00:00:00.000Z'), completionRatio: 0.25 },
111
+ * { id: 39, title: 'Specification', start: new Date('2014-06-04T00:00:00.000Z'),
112
+ * end: new Date('2014-06-07T00:00:00.000Z'), completionRatio: 0.66 }]
113
+ * }, { id: 13, title: 'Implementation', start: new Date('2014-06-08T00:00:00.000Z'),
114
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.77,
115
+ * subtasks: [
116
+ * { id: 24, title: 'Prototype', start: new Date('2014-06-08T00:00:00.000Z'),
117
+ * end: new Date('2014-06-14T00:00:00.000Z'), completionRatio: 0.77 },
118
+ * { id: 29, title: 'UI and Interaction', start: new Date('2014-06-14T00:00:00.000Z'),
119
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.6 }]
120
+ * }, { id: 17, title: 'Release', start: new Date('2014-06-19T00:00:00.000Z'),
121
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0 }]
122
+ * }];
123
+ *
124
+ * public dependencies: GanttDependency[] = [
125
+ * { id: 528, fromId: 18, toId: 19, type: DependencyType.FS },
126
+ * { id: 529, fromId: 19, toId: 39, type: DependencyType.FS },
127
+ * { id: 535, fromId: 24, toId: 29, type: DependencyType.FS },
128
+ * { id: 551, fromId: 13, toId: 29, type: DependencyType.FF },
129
+ * { id: 777, fromId: 7, toId: 11, type: DependencyType.SF },
130
+ * { id: 556, fromId: 39, toId: 24, type: DependencyType.FS },
131
+ * { id: 546, fromId: 29, toId: 17, type: DependencyType.FS },
132
+ * ];
133
+ * }
134
+ * ```
135
+ */
136
+ export class GanttComponent {
137
+ constructor(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone, navigation) {
138
+ this.timelineViewService = timelineViewService;
139
+ this.scrollSyncService = scrollSyncService;
140
+ this.renderer = renderer;
141
+ this.mapper = mapper;
142
+ this.optionChangesService = optionChangesService;
143
+ this.dependencyDomService = dependencyDomService;
144
+ this.editService = editService;
145
+ this.localizationService = localizationService;
146
+ this.hostElement = hostElement;
147
+ this.zone = zone;
148
+ this.navigation = navigation;
149
+ /**
150
+ * @hidden
151
+ */
152
+ this.roleDescription = 'Gantt Chart';
153
+ /**
154
+ * @hidden
155
+ */
156
+ this.role = 'application';
157
+ this.hostClasses = true;
158
+ /**
159
+ * Specifies a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection)).
160
+ *
161
+ * > The [`selectable`]({% slug api_gantt_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
162
+ */
163
+ this.isSelected = isSelected;
164
+ /**
165
+ * Specifies a callback that determines if a new dependency is valid.
166
+ * Used when evaluating if an attempt to create a new dependency will result in a valid link between the two tasks
167
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-validation).
168
+ *
169
+ * By defalut, dependencies are deemed invalid when:
170
+ * - The two tasks are in a parent-child relationship.
171
+ * - The two tasks are already dependent on one another. Only one dependency is allowed per pair.
172
+ * - The start or end times of the two tasks are incompatible with the attempted dependency type.
173
+ */
174
+ this.validateNewDependency = this.defaultValidateNewDependencyCallback.bind(this);
175
+ /**
176
+ * Fires when the Gantt selection is changed through user interaction.
177
+ *
178
+ * Holds data about the affected [`items`]({% slug api_gantt_selectionchangeevent %}#toc-items) and the attempted [`action`]({% slug api_gantt_selectionchangeevent %}#toc-action):
179
+ * - `select` - Triggered on `click` or `ctrl + click` on deselected items.
180
+ * - `remove` - Triggered on `ctrl + click` on selected items.
181
+ */
182
+ this.selectionChange = new EventEmitter();
183
+ /**
184
+ * Enables or disables the Gantt selection mechanism ([see example]({% slug selection_gantt %}#toc-custom-selection)).
185
+ *
186
+ * > When set to `true`, the [`isSelected`]({% slug api_gantt_ganttcomponent %}#toc-isselected) callback has to be provided.
187
+ * > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
188
+ */
189
+ this.selectable = false;
190
+ /**
191
+ * Defines the dependencies that will be drawn between the rendered tasks.
192
+ *
193
+ * > The dependency data items should either conform to the [`GanttDependency`]({% slug api_gantt_ganttdependency %}) interface, or a [`dependencyModelFields`]({% slug api_gantt_ganttcomponent %}#toc-dependencymodelfields) object has to be provided.
194
+ */
195
+ this.dependencies = [];
196
+ /**
197
+ * Enables the sorting of the Gantt columns that have their `field` option set.
198
+ */
199
+ this.sortable = false;
200
+ /**
201
+ * The descriptors by which the data will be sorted.
202
+ */
203
+ this.sort = [];
204
+ /**
205
+ * Enables the filtering of the Gantt columns that have their `field` option set.
206
+ *
207
+ * @default false
208
+ */
209
+ this.filterable = false;
210
+ /**
211
+ * The start time of the work day.
212
+ * Accepts string values in the `HH:mm` format.
213
+ */
214
+ this.workDayStart = '08:00';
215
+ /**
216
+ * The end time of the work day.
217
+ * Accepts string values in the `HH:mm` format.
218
+ */
219
+ this.workDayEnd = '17:00';
220
+ /**
221
+ * The start of the work week (index based).
222
+ */
223
+ this.workWeekStart = 1;
224
+ /**
225
+ * The end of the work week (index based).
226
+ */
227
+ this.workWeekEnd = 5;
228
+ /**
229
+ * If set to `true`, the user can use dedicated shortcuts to interact with the Gantt.
230
+ * By default, navigation is disabled for the TreeList and Timeline parts of the component,
231
+ * ([see example]({% slug keyboard_navigation_gantt %})).
232
+ */
233
+ this.navigable = false;
234
+ /**
235
+ * Indicates whether the Gantt columns will be resized during initialization so that they fit their headers and row content.
236
+ * Columns with autoSize set to false are excluded.
237
+ *
238
+ * @default false
239
+ */
240
+ this.columnsAutoSize = false;
241
+ /**
242
+ * Specifies if the column menu of the columns will be displayed.
243
+ *
244
+ * @default false
245
+ */
246
+ this.columnMenu = false;
247
+ /**
248
+ * If set to true, the user can reorder columns by dragging their header cells.
249
+ *
250
+ * @default false
251
+ */
252
+ this.columnsReorderable = false;
253
+ /**
254
+ * If set to true, the user can resize columns by dragging the edges (resize handles) of their header cells.
255
+ *
256
+ * @default false
257
+ */
258
+ this.columnsResizable = false;
259
+ /**
260
+ * Fires when an item is expanded.
261
+ */
262
+ this.rowExpand = new EventEmitter();
263
+ /**
264
+ * Fires when a Gantt task in the timeline pane is double-clicked. The data item, associated with the clicked task,
265
+ * is available in the event data. Use the event handler to open a task editing dialog as necessary.
266
+ */
267
+ this.taskDblClick = new EventEmitter();
268
+ /**
269
+ * Fires when the user double clicks a cell.
270
+ */
271
+ this.cellDblClick = new EventEmitter();
272
+ /**
273
+ * Fires when the user leaves an edited cell.
274
+ */
275
+ this.cellClose = new EventEmitter();
276
+ /**
277
+ * Fires when the end user clicks the `Delete` button in the task editing dialog,
278
+ * the task delete icon, or presses the `Delete` key on the keyboard when a task in the timeline is focused.
279
+ * Use the event handler to open a confirmation dialog when necessary.
280
+ */
281
+ this.taskDelete = new EventEmitter();
282
+ /**
283
+ * Fires when an item is collapsed.
284
+ */
285
+ this.rowCollapse = new EventEmitter();
286
+ /**
287
+ * Fires when the user confirms deleting a task.
288
+ */
289
+ this.remove = new EventEmitter();
290
+ /**
291
+ * Fires when the user cancels editing a task.
292
+ */
293
+ this.cancel = new EventEmitter();
294
+ /**
295
+ * Fires when the user saves an edited task.
296
+ */
297
+ this.save = new EventEmitter();
298
+ /**
299
+ * Fires when the user adds a task.
300
+ */
301
+ this.taskAdd = new EventEmitter();
302
+ /**
303
+ * Fires when the user adds a dependency via dragging
304
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-basic-concepts).
305
+ */
306
+ this.dependencyAdd = new EventEmitter();
307
+ /**
308
+ * Fires when the sorting of the Gantt is changed.
309
+ * You have to handle the event yourself and sort the data.
310
+ */
311
+ this.sortChange = new EventEmitter();
312
+ /**
313
+ * Fires when the Gantt filter is modified.
314
+ * You have to handle the event yourself and filter the data.
315
+ */
316
+ this.filterChange = new EventEmitter();
317
+ /**
318
+ * Fires when the filter or sort state of the Gantt is changed.
319
+ */
320
+ this.dataStateChange = new EventEmitter();
321
+ /**
322
+ * Fires when the collapsed state of the treelist pane is changed.
323
+ */
324
+ this.treeListPaneCollapsedChange = new EventEmitter();
325
+ /**
326
+ * Fires when the collapsed state of the timeline pane is changed.
327
+ */
328
+ this.timelinePaneCollapsedChange = new EventEmitter();
329
+ /**
330
+ * Fires each time the user resizes the timeline pane.
331
+ */
332
+ this.timelinePaneSizeChange = new EventEmitter();
333
+ /**
334
+ * Fires each time the user selects a different view type. The event data contains the type of the newly selected view.
335
+ */
336
+ this.activeViewChange = new EventEmitter();
337
+ /**
338
+ * Fires when the user completes the resizing of the column.
339
+ */
340
+ this.columnResize = new EventEmitter();
341
+ /**
342
+ * Fires when the user completes the reordering of the column.
343
+ */
344
+ this.columnReorder = new EventEmitter();
345
+ /**
346
+ * Fires when the user changes the visibility of the columns from the column menu or column chooser.
347
+ */
348
+ this.columnVisibilityChange = new EventEmitter();
349
+ /**
350
+ * @hidden
351
+ *
352
+ * Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.
353
+ */
354
+ this.columnLockedChange = new EventEmitter();
355
+ /**
356
+ * Fires when a cell is clicked.
357
+ */
358
+ this.cellClick = new EventEmitter();
359
+ /**
360
+ * Fires when a task is clicked.
361
+ */
362
+ this.taskClick = new EventEmitter();
363
+ /**
364
+ * @hidden
365
+ *
366
+ * Specifies whether the dependency drag clues will be rendered.
367
+ * Set internally by the dependency-drag-create directive.
368
+ *
369
+ * @default false
370
+ */
371
+ this.renderDependencyDragClues = false;
372
+ /**
373
+ * @hidden
374
+ *
375
+ * Used by the GanttExpandableDirective.
376
+ */
377
+ this.expandStateChange = new EventEmitter();
378
+ /**
379
+ * @hidden
380
+ */
381
+ this.showEditingDialog = false;
382
+ /**
383
+ * @hidden
384
+ */
385
+ this.showConfirmationDialog = false;
386
+ this._columns = new QueryList();
387
+ this._data = [];
388
+ this._dragScrollSettings = Object.assign({}, DEFAULT_DRAG_SCROLL_SETTINGS);
389
+ this._timelinePaneOptions = Object.assign({}, DEFAULT_TIMELINE_PANE_SETTINGS);
390
+ this._treeListPaneOptions = Object.assign({}, DEFAULT_TREELIST_PANE_SETTINGS);
391
+ this._rowClass = rowClassCallback;
392
+ this._taskClass = taskClassCallback;
393
+ this._activeView = DEFAULT_VIEW;
394
+ this._toolbarSettings = {
395
+ position: 'top',
396
+ addTaskTool: 'none',
397
+ viewSelectorTool: 'top'
398
+ };
399
+ this._fetchChildren = fetchChildren;
400
+ this._hasChildren = hasChildren;
401
+ this.rtl = false;
402
+ this.optionChangesSubscriptions = new Subscription();
403
+ this.editServiceSubscription = new Subscription();
404
+ validatePackage(packageMetadata);
405
+ this.optionChangesSubscriptions.add(this.optionChangesService.viewChanges.subscribe(() => {
406
+ this.loadTimelineData();
407
+ }));
408
+ this.optionChangesSubscriptions.add(this.optionChangesService.columnChanges.subscribe(() => {
409
+ this.treeList.columns.notifyOnChanges();
410
+ }));
411
+ this.editService.getSelectedItem = this.getFirstSelectedItem.bind(this);
412
+ this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(show => this.showEditingDialog = show));
413
+ this.editServiceSubscription.add(this.editService.taskDelete.subscribe(task => {
414
+ if (hasObservers(this.taskDelete)) {
415
+ this.zone.run(() => this.notifyTaskDelete(task));
416
+ }
417
+ }));
418
+ this.editServiceSubscription.add(this.editService.editEvent.subscribe(args => {
419
+ this[args.editResultType].emit({
420
+ taskFormGroup: args.taskFormGroup,
421
+ item: getEditItem(args.dataItem, this.treeList.view.data, this.mapper),
422
+ dependencies: args.dependencies,
423
+ sender: this
424
+ });
425
+ this.showConfirmationDialog = this.showEditingDialog = false;
426
+ this.editService.dataItem = this.editService.taskFormGroup = null;
427
+ this.updateView();
428
+ if (this.navigable) {
429
+ this.focus();
430
+ }
431
+ }));
432
+ this.editServiceSubscription.add(this.editService.addEvent.subscribe(args => {
433
+ const selectedItem = this.getFirstSelectedItem();
434
+ this.taskAdd.emit({
435
+ actionType: args.actionType,
436
+ selectedItem: selectedItem ? getEditItem(selectedItem, this.treeList.view.data, this.mapper) : null
437
+ });
438
+ this.updateView();
439
+ }));
440
+ this.localizationSubscription = this.localizationService.changes.subscribe(({ rtl }) => {
441
+ this.rtl = rtl;
442
+ this.direction = this.rtl ? 'rtl' : 'ltr';
443
+ });
444
+ }
445
+ get toolbarTemplate() {
446
+ if (this._customToolbarTemplate) {
447
+ return this._customToolbarTemplate;
448
+ }
449
+ return this.toolbarTemplateChildren ? this.toolbarTemplateChildren.first : undefined;
450
+ }
451
+ set toolbarTemplate(customToolbarTemplate) {
452
+ this._customToolbarTemplate = customToolbarTemplate;
453
+ }
454
+ get hostRoleDescriptionAttr() {
455
+ return this.roleDescription;
456
+ }
457
+ get hostRoleAttr() {
458
+ return this.role;
459
+ }
460
+ get dir() {
461
+ return this.direction;
462
+ }
463
+ /**
464
+ * A query list of all declared columns.
465
+ */
466
+ set columns(columns) {
467
+ this._columns = columns;
468
+ this.updateTreeListGroupClass(columns);
469
+ }
470
+ get columns() {
471
+ return this._columns;
472
+ }
473
+ /**
474
+ * Sets the fields which will be used to extract the task data from the provided `data` array items.
475
+ * The `id` field is also used as a TreeList data item unique identifier (defaults to `'id'`).
476
+ *
477
+ * > If no object is provided, the Gantt task data items will have to conform to the [`GanttTask`]({% slug api_gantt_gantttask %}) interface.
478
+ */
479
+ set taskModelFields(fields) {
480
+ this.mapper.taskFields = fields;
481
+ }
482
+ /**
483
+ * Sets the fields which will be used to extract the dependency data from the provided `dependencies` array items.
484
+ *
485
+ * > If no object is provided, the Gantt dependency data items will have to conform to the [`GanttDependency`]({% slug api_gantt_ganttdependency %}) interface.
486
+ */
487
+ set dependencyModelFields(fields) {
488
+ this.mapper.dependencyFields = fields;
489
+ }
490
+ /**
491
+ * The active timeline view.
492
+ * @default 'week'
493
+ */
494
+ set activeView(view) {
495
+ this._activeView = view;
496
+ }
497
+ get activeView() {
498
+ /**
499
+ * If the default/provided activeView is not among the provided views,
500
+ * fallback to setting the first provided view as active
501
+ */
502
+ const view = this.views.find(view => view.type === this._activeView) ?
503
+ this._activeView :
504
+ this.views.first.type;
505
+ return view;
506
+ }
507
+ /**
508
+ * Gets or sets the data of the Gantt.
509
+ *
510
+ * > The task data items should either conform to the [`GanttTask`]({% slug api_gantt_gantttask %}) interface, or a [`taskModelFields`]({% slug api_gantt_ganttcomponent %}#toc-taskmodelfields) object has to be provided.
511
+ */
512
+ set data(data) {
513
+ this._data = normalizeGanttData(data);
514
+ this.loadTimelineData();
515
+ }
516
+ get data() {
517
+ return this._data;
518
+ }
519
+ /**
520
+ * The toolbar configuration. Defines the position and content of the toolbar(s).
521
+ * The available properties are `position`, `addTaskTool`, and `viewSelectorTool`.
522
+ * All are optional and default to `top`.
523
+ *
524
+ * The possible values for each option are:
525
+ * - `top`&mdash;Positions the toolbar above the Gantt panes. Renders the respective tool in the top toolbar.
526
+ * - `bottom`&mdash;Positions the toolbar below the Gantt panes. Renders the respective tool in the bottom toolbar.
527
+ * - `both`&mdash;Displays two toolbar instances. Positions the first one above,
528
+ * and the second one - below the Gantt panes. Renders the respective tool in the both toolbars.
529
+ * - `none`&mdash;No toolbar is rendered when used for setting `position`.
530
+ * No add task or view selector tool is rendered when used for setting `addTaskTool` or `viewSelectorTool`.
531
+ */
532
+ set toolbarSettings(value) {
533
+ this._toolbarSettings = {
534
+ position: value.position || 'top',
535
+ addTaskTool: value.addTaskTool || 'none',
536
+ viewSelectorTool: value.viewSelectorTool || 'top'
537
+ };
538
+ }
539
+ get toolbarSettings() {
540
+ return this._toolbarSettings;
541
+ }
542
+ /**
543
+ * Gets or sets the callback function that retrieves the child items for a particular item.
544
+ */
545
+ set fetchChildren(fn) {
546
+ this._fetchChildren = fn;
547
+ this.editService.fetchChildren = fn;
548
+ }
549
+ get fetchChildren() {
550
+ return this._fetchChildren;
551
+ }
552
+ /**
553
+ * Gets or sets the callback function that indicates if a particular item has child items.
554
+ */
555
+ set hasChildren(fn) {
556
+ this._hasChildren = fn;
557
+ this.editService.hasChildren = fn;
558
+ }
559
+ get hasChildren() {
560
+ return this._hasChildren;
561
+ }
562
+ /**
563
+ * The options of the timeline splitter pane. By default the pane is `collapsible`,
564
+ * `resizable`, not `collapsed`, and its `size` is `'50%'`.
565
+ */
566
+ set timelinePaneOptions(value) {
567
+ if (this._timelinePaneOptions.collapsed && !value.collapsed) {
568
+ this.dependencyDomService.notifyChanges();
569
+ }
570
+ this._timelinePaneOptions = Object.assign(Object.assign({}, DEFAULT_TIMELINE_PANE_SETTINGS), value);
571
+ }
572
+ get timelinePaneOptions() {
573
+ return Object.assign(Object.assign({}, this._timelinePaneOptions), { size: this.treeListPaneOptions.collapsed ? '100%' : this._timelinePaneOptions.size });
574
+ }
575
+ /**
576
+ * The options of the treelist splitter pane.
577
+ * By default the pane is `collapsible` and not `collapsed`.
578
+ */
579
+ set treeListPaneOptions(value) {
580
+ this._treeListPaneOptions = Object.assign(Object.assign({}, DEFAULT_TREELIST_PANE_SETTINGS), value);
581
+ }
582
+ get treeListPaneOptions() {
583
+ return this._treeListPaneOptions;
584
+ }
585
+ /**
586
+ * Defines a function that is executed for every task in the component.
587
+ * The classes returned from the function are applied to the task wrapper element.
588
+ */
589
+ set taskClass(fn) {
590
+ if (isDevMode() && typeof fn !== 'function') {
591
+ throw new Error(`taskClass must be a function, but received ${JSON.stringify(fn)}.`);
592
+ }
593
+ this._taskClass = fn;
594
+ }
595
+ get taskClass() {
596
+ return this._taskClass;
597
+ }
598
+ /**
599
+ * Defines a function that is executed for every data row in the component.
600
+ */
601
+ set rowClass(fn) {
602
+ if (isDevMode() && typeof fn !== 'function') {
603
+ throw new Error(`rowClass must be a function, but received ${JSON.stringify(fn)}.`);
604
+ }
605
+ this._rowClass = fn;
606
+ }
607
+ get rowClass() {
608
+ return this._rowClass;
609
+ }
610
+ /**
611
+ * The name of the field which contains the unique identifier of the task data item.
612
+ * Defaults to 'id'.
613
+ */
614
+ get taskIdField() {
615
+ return this.mapper.taskFields.id;
616
+ }
617
+ /**
618
+ * Specifies the settings for auto-scrolling during dragging
619
+ * when the pointer moves outside of the container bounderies
620
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-auto-scrolling).
621
+ */
622
+ set dragScrollSettings(settings) {
623
+ this._dragScrollSettings = Object.assign(Object.assign({}, DEFAULT_DRAG_SCROLL_SETTINGS), settings);
624
+ }
625
+ get dragScrollSettings() {
626
+ return this._dragScrollSettings;
627
+ }
628
+ /**
629
+ * @hidden
630
+ */
631
+ get renderedTreeListItems() {
632
+ if (!isPresent(this.treeList)) {
633
+ return [];
634
+ }
635
+ return this.treeList.view.data.map(item => item.data);
636
+ }
637
+ /**
638
+ * @hidden
639
+ */
640
+ get viewItems() {
641
+ if (!isPresent(this.treeList)) {
642
+ return [];
643
+ }
644
+ return this.treeList.view.data;
645
+ }
646
+ /**
647
+ * @hidden
648
+ */
649
+ get filterMenu() {
650
+ return this.filterable ? 'menu' : false;
651
+ }
652
+ /**
653
+ * @hidden
654
+ */
655
+ get viewService() {
656
+ if (!this.views || !this.views.length) {
657
+ return null;
658
+ }
659
+ // TODO: review if this is a performance concern?
660
+ return this.timelineViewService.service(this.activeView);
661
+ }
662
+ /**
663
+ * @hidden
664
+ *
665
+ * Retrieves the `isSelected` callback if `selectable` is set to `true`
666
+ * Otherwise returns the default callback, which always returns `false`.
667
+ */
668
+ get isTaskSelected() {
669
+ return this.selectable ? this.isSelected : isSelected;
670
+ }
671
+ /**
672
+ * @hidden
673
+ *
674
+ * Used by the GanttExpandableDirective.
675
+ */
676
+ get idGetter() {
677
+ if (isPresent(this.treeList)) {
678
+ return this.treeList.idGetter;
679
+ }
680
+ }
681
+ /**
682
+ * @hidden
683
+ *
684
+ * Used by the views selector.
685
+ */
686
+ get viewTypes() {
687
+ return this.views.map(view => view.type);
688
+ }
689
+ /**
690
+ * @hidden
691
+ */
692
+ get isInEditMode() {
693
+ return this.showEditingDialog || this.showConfirmationDialog || this.treeList.isEditing();
694
+ }
695
+ ngOnChanges(changes) {
696
+ if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
697
+ this.loadTimelineData();
698
+ }
699
+ }
700
+ ngAfterViewInit() {
701
+ this.updateTreeListMargin();
702
+ this.zone.runOutsideAngular(() => {
703
+ this.keydownListenerDisposers = this.renderer.listen(this.hostElement.nativeElement, 'keydown', this.handleKeydown.bind(this));
704
+ });
705
+ if (this.navigable) {
706
+ this.navigation.initialize({
707
+ treeList: this.treeList,
708
+ host: this.hostElement.nativeElement,
709
+ treeListElement: this.treeList.wrapper.nativeElement,
710
+ timelineElement: this.timeline.timelineContent.nativeElement,
711
+ columns: this.columns,
712
+ data: this.data
713
+ });
714
+ }
715
+ const leftContainer = this.treeList.wrapper.nativeElement.querySelector('kendo-treelist-list > div');
716
+ this.scrollSyncService.registerElement(leftContainer, 'treelist');
717
+ }
718
+ ngAfterContentInit() {
719
+ if (isDevMode() && this.views.length === 0) {
720
+ throw new Error('No views declared for <kendo-gantt>. Please, declare at least one view.');
721
+ }
722
+ this.loadTimelineData();
723
+ this.updateTreeListGroupClass();
724
+ }
725
+ ngOnDestroy() {
726
+ this.optionChangesSubscriptions.unsubscribe();
727
+ this.editServiceSubscription.unsubscribe();
728
+ if (this.localizationSubscription) {
729
+ this.localizationSubscription.unsubscribe();
730
+ }
731
+ if (isPresent(this.keydownListenerDisposers)) {
732
+ this.keydownListenerDisposers();
733
+ this.keydownListenerDisposers = null;
734
+ }
735
+ }
736
+ /**
737
+ * Focuses the last active cell or task in the Gantt.
738
+ * If no item has previously been focused, the first cell of the TreeList part will receive focus,
739
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
740
+ */
741
+ focus() {
742
+ if (this.navigable) {
743
+ this.navigation.focusLastActiveItem();
744
+ }
745
+ }
746
+ /**
747
+ * Focuses the targeted cell in the TreeList part of the component,
748
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
749
+ */
750
+ focusCell(rowIndex, colIndex) {
751
+ if (this.navigable) {
752
+ this.navigation.focusCell(rowIndex, colIndex);
753
+ }
754
+ }
755
+ /**
756
+ * Focuses the targeted task in the Timeline part of the component,
757
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
758
+ */
759
+ focusTask(taskIndex) {
760
+ if (this.navigable) {
761
+ this.navigation.focusTask(taskIndex);
762
+ }
763
+ }
764
+ /**
765
+ * Applies the minimum possible width for the specified column,
766
+ * so that the whole text fits without wrapping. This method expects the Gantt
767
+ * to be resizable (set `resizable` to `true`).
768
+ * Makes sense to execute this method only after the Gantt is already populated with data.
769
+ */
770
+ autoFitColumn(column) {
771
+ if (isPresent(this.treeList)) {
772
+ this.treeList.autoFitColumn(column);
773
+ }
774
+ }
775
+ /**
776
+ * Adjusts the width of the specified columns to fit the entire content, including headers, without wrapping.
777
+ * If no columns are specified, `autoFitColumns` is applied to all columns.
778
+ *
779
+ * This method requires the Gantt to be resizable (set `resizable` to `true`).
780
+ */
781
+ autoFitColumns(columns = this.columns) {
782
+ if (isPresent(this.treeList)) {
783
+ this.treeList.autoFitColumns(columns);
784
+ }
785
+ }
786
+ /**
787
+ * Clears the already loaded children for the dataItem so that the Gantt will fetch them again the next time it is rendered.
788
+ */
789
+ reload(dataItem, reloadChildren) {
790
+ if (isPresent(this.treeList)) {
791
+ this.treeList.reload(dataItem, reloadChildren);
792
+ }
793
+ }
794
+ /**
795
+ * Changes the position of the specified column.
796
+ * The reordering of columns operates only on the level
797
+ * which is inferred by the source column.
798
+ * For the `reorderColumn` method to work properly,
799
+ * the `source` column has to be visible.
800
+ *
801
+ * @param {ColumnBase} source - The column whose position will be changed.
802
+ * @param {number} destIndex - The new position of the column.
803
+ * @param {ColumnReorderConfig} options - Additional options.
804
+ */
805
+ reorderColumn(source, destIndex, options = { before: false }) {
806
+ if (isPresent(this.treeList)) {
807
+ this.treeList.reorderColumn(source, destIndex, options);
808
+ }
809
+ }
810
+ /**
811
+ * Forces the TreeList to evaluate if some data items have changed and re-renders the rows information, if needed.
812
+ * Recalculates and re-renders the Timeline period, if needed.
813
+ * Redraws changed dependencies, if needed.
814
+ * Executes all row-related callbacks anew.
815
+ */
816
+ updateView() {
817
+ if (isPresent(this.treeList)) {
818
+ this.treeList.updateView();
819
+ }
820
+ this.loadTimelineData();
821
+ this.dependencyDomService.notifyChanges();
822
+ }
823
+ /**
824
+ * Opens the task editing dialog.
825
+ */
826
+ editTask(dataItem, formGroup) {
827
+ if (!this.showEditingDialog) {
828
+ const taskId = this.mapper.extractFromTask(dataItem, 'id');
829
+ const dependencies = this.dependencies.filter(item => this.mapper.extractFromDependency(item, 'toId') === taskId
830
+ || this.mapper.extractFromDependency(item, 'fromId') === taskId);
831
+ this.editService.createEditDialog(dataItem, formGroup, dependencies);
832
+ }
833
+ }
834
+ /**
835
+ * Closes the task editing dialog.
836
+ */
837
+ closeTaskDialog() {
838
+ if (this.showEditingDialog) {
839
+ this.editService.closeEditDialog();
840
+ }
841
+ }
842
+ /**
843
+ * Opens the delete task confirmation dialog.
844
+ */
845
+ openConfirmationDialog() {
846
+ this.showConfirmationDialog = true;
847
+ }
848
+ /**
849
+ * @hidden
850
+ */
851
+ handleConfirmationDialogClose() {
852
+ this.showConfirmationDialog = false;
853
+ if (this.navigable) {
854
+ this.focus();
855
+ }
856
+ }
857
+ /**
858
+ * Opens a cell for editing.
859
+ */
860
+ editCell(dataItem, column, formGroup) {
861
+ this.treeList.editCell(dataItem, column, formGroup);
862
+ }
863
+ /**
864
+ * Closes an edited cell.
865
+ */
866
+ closeCell() {
867
+ this.treeList.closeCell();
868
+ }
869
+ /**
870
+ * @hidden
871
+ */
872
+ handleCellClose(e) {
873
+ this.cellClose.emit(new CellCloseEvent(Object.assign(Object.assign({}, e), { item: this.editItem, sender: this })));
874
+ this.dependencyDomService.notifyChanges();
875
+ }
876
+ /**
877
+ * @hidden
878
+ */
879
+ onTreeListCollapsedChange(collapsed) {
880
+ this.treeListPaneCollapsedChange.emit(collapsed);
881
+ if (!collapsed) {
882
+ this.scrollSyncService.syncScrollTop('timeline', 'treelist');
883
+ }
884
+ }
885
+ /**
886
+ * @hidden
887
+ */
888
+ onTimelineCollapsedChange(collapsed) {
889
+ this.timelinePaneCollapsedChange.emit(collapsed);
890
+ if (!collapsed) {
891
+ this.scrollSyncService.syncScrollTop('treelist', 'timeline');
892
+ this.dependencyDomService.notifyChanges();
893
+ }
894
+ }
895
+ /**
896
+ * @hidden
897
+ */
898
+ loadTimelineData() {
899
+ if (!isPresent(this.viewService)) {
900
+ return;
901
+ }
902
+ const activeViewOptions = this.getActiveViewOptions();
903
+ this.viewService.options = Object.assign({ workWeekStart: this.workWeekStart, workWeekEnd: this.workWeekEnd, workDayStart: this.workDayStart, workDayEnd: this.workDayEnd }, activeViewOptions);
904
+ this.tableWidth = this.viewService.getTableWidth(this.data);
905
+ const [groupedSlots, slots] = this.viewService.getSlots(this.data);
906
+ this.timelineSlots = slots;
907
+ this.timelineGroupSlots = groupedSlots;
908
+ }
909
+ /**
910
+ * @hidden
911
+ */
912
+ showToolbar(position) {
913
+ return this.toolbarSettings.position !== 'none' && ([position, 'both'].indexOf(this.toolbarSettings.position) > -1);
914
+ }
915
+ /**
916
+ * @hidden
917
+ */
918
+ handleColumnVisibilityChange(event) {
919
+ this.columnVisibilityChange.emit(event);
920
+ this.updateTreeListGroupClass();
921
+ }
922
+ /**
923
+ * @hidden
924
+ */
925
+ onTimelinePaneSizeChange(e) {
926
+ this._timelinePaneOptions.size = e;
927
+ this.timelinePaneSizeChange.emit(e);
928
+ }
929
+ /**
930
+ * @hidden
931
+ */
932
+ handleTimelineRightClick(event) {
933
+ const target = event.target;
934
+ const gantt = this.hostElement.nativeElement;
935
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
936
+ return;
937
+ }
938
+ if (hasObservers(this.taskClick)) {
939
+ const taskIndex = getClosestTaskIndex(target, gantt);
940
+ const task = this.renderedTreeListItems[taskIndex];
941
+ this.zone.run(() => this.notifyTaskClick(event, task, taskIndex));
942
+ }
943
+ }
944
+ /**
945
+ * @hidden
946
+ */
947
+ handleTimelineClick(event) {
948
+ const target = event.target;
949
+ const gantt = this.hostElement.nativeElement;
950
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
951
+ return;
952
+ }
953
+ const taskIndex = getClosestTaskIndex(target, gantt);
954
+ const task = this.renderedTreeListItems[taskIndex];
955
+ const selectionAction = this.getSelectionAction(event, task);
956
+ if ((hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
957
+ hasObservers(this.taskClick)) {
958
+ this.zone.run(() => {
959
+ this.notifySelectionChange(task, selectionAction);
960
+ this.notifyTaskClick(event, task, taskIndex);
961
+ });
962
+ }
963
+ }
964
+ /**
965
+ * @hidden
966
+ */
967
+ handleTreeListDoubleClick(event) {
968
+ if (!isPresent(this.lastTreeListCellClick) || event.target !== this.lastTreeListCellClick.originalEvent.target) {
969
+ return;
970
+ }
971
+ this.editItem = getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
972
+ if (hasObservers(this.cellDblClick)) {
973
+ this.zone.run(() => {
974
+ this.cellDblClick.emit({
975
+ column: this.lastTreeListCellClick.column,
976
+ columnIndex: this.lastTreeListCellClick.columnIndex,
977
+ dataItem: this.lastTreeListCellClick.dataItem,
978
+ isEdited: this.lastTreeListCellClick.isEdited,
979
+ originalEvent: this.lastTreeListCellClick.originalEvent,
980
+ rowIndex: this.lastTreeListCellClick.rowIndex,
981
+ type: 'dblclick',
982
+ sender: this
983
+ });
984
+ });
985
+ }
986
+ }
987
+ /**
988
+ * @hidden
989
+ */
990
+ handleTreeListSelectionChange(event) {
991
+ // prevent selection change from right-click
992
+ if (isPresent(this.lastTreeListCellClick) && this.lastTreeListCellClick.type === 'contextmenu') {
993
+ return;
994
+ }
995
+ const task = event.items.map(item => item.dataItem)[0]; // single selection only currently available
996
+ const action = event.action;
997
+ this.notifySelectionChange(task, action);
998
+ }
999
+ /**
1000
+ * @hidden
1001
+ */
1002
+ handleTreeListCellClick(event) {
1003
+ this.lastTreeListCellClick = event;
1004
+ this.cellClick.emit({
1005
+ column: event.column,
1006
+ columnIndex: event.columnIndex,
1007
+ dataItem: event.dataItem,
1008
+ isEdited: event.isEdited,
1009
+ originalEvent: event.originalEvent,
1010
+ rowIndex: event.rowIndex,
1011
+ type: event.type,
1012
+ sender: this
1013
+ });
1014
+ }
1015
+ /**
1016
+ * @hidden
1017
+ */
1018
+ handleDeleteConfirmation() {
1019
+ this.editService.triggerEditEvent('remove');
1020
+ }
1021
+ /**
1022
+ * @hidden
1023
+ */
1024
+ handleTimelineMouseDown(event) {
1025
+ const target = event.target;
1026
+ const gantt = this.hostElement.nativeElement;
1027
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
1028
+ return;
1029
+ }
1030
+ event.preventDefault();
1031
+ }
1032
+ /**
1033
+ * @hidden
1034
+ */
1035
+ handleTimelineDblClick(event) {
1036
+ const target = event.target;
1037
+ const gantt = this.hostElement.nativeElement;
1038
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
1039
+ return;
1040
+ }
1041
+ if (hasObservers(this.taskDblClick)) {
1042
+ const taskIndex = getClosestTaskIndex(target, gantt);
1043
+ const task = this.renderedTreeListItems[taskIndex];
1044
+ this.zone.run(() => this.taskDblClick.emit({
1045
+ dataItem: task,
1046
+ originalEvent: event,
1047
+ sender: this,
1048
+ index: taskIndex,
1049
+ type: 'dblclick'
1050
+ }));
1051
+ }
1052
+ }
1053
+ /**
1054
+ * @hidden
1055
+ */
1056
+ getText(token) {
1057
+ return this.localizationService.get(token);
1058
+ }
1059
+ /**
1060
+ * @hidden
1061
+ */
1062
+ changeActiveView(view) {
1063
+ if (view !== this.activeView) {
1064
+ this.activeView = view;
1065
+ this.loadTimelineData();
1066
+ this.scrollSyncService.resetTimelineScrollLeft();
1067
+ this.activeViewChange.emit(view);
1068
+ }
1069
+ }
1070
+ /**
1071
+ * @hidden
1072
+ */
1073
+ notifyTaskClick(event, dataItem, itemIndex) {
1074
+ // simulates the TreeList `cellClick` event triggered by enter press (type: 'click')
1075
+ const type = event instanceof KeyboardEvent ? 'click' : event.type;
1076
+ this.taskClick.emit({
1077
+ originalEvent: event,
1078
+ dataItem: dataItem,
1079
+ index: itemIndex,
1080
+ type: type,
1081
+ sender: this
1082
+ });
1083
+ }
1084
+ /**
1085
+ * @hidden
1086
+ */
1087
+ notifySelectionChange(dataItem, action) {
1088
+ if (this.isSameSelection(action, dataItem)) {
1089
+ return;
1090
+ }
1091
+ this.selectionChange.emit({
1092
+ action: action,
1093
+ items: [dataItem],
1094
+ sender: this
1095
+ });
1096
+ this.treeList.updateView();
1097
+ }
1098
+ /**
1099
+ * @hidden
1100
+ */
1101
+ notifyTaskDelete(task) {
1102
+ this.editService.dataItem = task;
1103
+ this.taskDelete.emit({
1104
+ item: getEditItem(task, this.treeList.view.data, this.mapper),
1105
+ sender: this
1106
+ });
1107
+ }
1108
+ /**
1109
+ * @hidden
1110
+ */
1111
+ isSameSelection(action, dataItem) {
1112
+ return action === 'select' && this.isSelected(dataItem);
1113
+ }
1114
+ /**
1115
+ * @hidden
1116
+ */
1117
+ getSelectionAction({ ctrlKey, metaKey }, dataItem) {
1118
+ const shouldToggleSelection = ctrlKey || metaKey;
1119
+ return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
1120
+ }
1121
+ updateTreeListGroupClass(columns = this.columns) {
1122
+ if (!isPresent(this.treeList)) {
1123
+ return;
1124
+ }
1125
+ const hasColumns = isPresent(columns) && columns.length > 0;
1126
+ const hasVisibleGroupedColumns = hasColumns && columns.some(column => isColumnGroup(column) && column.childrenArray.some(childColumn => childColumn.isVisible));
1127
+ if (hasVisibleGroupedColumns) {
1128
+ this.renderer.addClass(this.treeList.wrapper.nativeElement, TREELIST_GROUP_COLUMNS_CLASS);
1129
+ }
1130
+ else {
1131
+ this.renderer.removeClass(this.treeList.wrapper.nativeElement, TREELIST_GROUP_COLUMNS_CLASS);
1132
+ }
1133
+ }
1134
+ /**
1135
+ * Used to hide the vertical scrollbar
1136
+ */
1137
+ updateTreeListMargin() {
1138
+ const treeListContentEl = this.treeList.wrapper.nativeElement.querySelector('.k-treelist .k-grid-content');
1139
+ this.renderer.setStyle(treeListContentEl, 'margin-right', `${-Math.abs(scrollbarWidth() - 1)}px`);
1140
+ }
1141
+ get activeTimelineIndex() {
1142
+ return this.navigation.activeTimelineIndex;
1143
+ }
1144
+ getActiveViewOptions() {
1145
+ if (!this.views) {
1146
+ return;
1147
+ }
1148
+ return this.views.find(view => view.type === this.activeView);
1149
+ }
1150
+ getFirstSelectedItem() {
1151
+ const isSelectedCallback = this.isSelected || isSelected;
1152
+ const loadedItems = this.renderedTreeListItems || [];
1153
+ return loadedItems.find(isSelectedCallback);
1154
+ }
1155
+ defaultValidateNewDependencyCallback(dependency) {
1156
+ const fromTaskId = this.mapper.extractFromDependency(dependency, 'fromId');
1157
+ const toTaskId = this.mapper.extractFromDependency(dependency, 'toId');
1158
+ const fromTask = this.treeList.view.data.find(task => this.mapper.extractFromTask(task.data, 'id') === fromTaskId);
1159
+ const toTask = this.treeList.view.data.find(task => this.mapper.extractFromTask(task.data, 'id') === toTaskId);
1160
+ // mark as invalid if the attempted dependency is lacking valid from- and to-tasks
1161
+ // or when the from- and to-tasks are actually the same task
1162
+ if (!isPresent(fromTask) || !isPresent(fromTask.data) ||
1163
+ !isPresent(toTask) || !isPresent(toTask.data) ||
1164
+ fromTask.data === toTask.data) {
1165
+ return false;
1166
+ }
1167
+ const tasksDependentOnOneAnother = this.dependencies.some(current => {
1168
+ const currentFromId = this.mapper.extractFromDependency(current, 'fromId');
1169
+ const currentToId = this.mapper.extractFromDependency(current, 'toId');
1170
+ return (fromTaskId === currentFromId && toTaskId === currentToId) ||
1171
+ (toTaskId === currentFromId && fromTaskId === currentToId);
1172
+ });
1173
+ // mark as invalid if the attempted dependency is trying to connect already dependent tasks
1174
+ // mark as invalid if the two tasks are in parent-child relationship
1175
+ if (tasksDependentOnOneAnother || areParentChild(fromTask, toTask)) {
1176
+ return false;
1177
+ }
1178
+ const fromTaskStart = this.mapper.extractFromTask(fromTask.data, 'start');
1179
+ const fromTaskEnd = this.mapper.extractFromTask(fromTask.data, 'end');
1180
+ const toTaskStart = this.mapper.extractFromTask(toTask.data, 'start');
1181
+ const toTaskEnd = this.mapper.extractFromTask(toTask.data, 'end');
1182
+ // if the two tasks are available to be connected via a dependency,
1183
+ // check if their start and end time allow for the attempted dependency type
1184
+ switch (this.mapper.extractFromDependency(dependency, 'type')) {
1185
+ // finish to finish (FF) — the from-task ends before the to-task can end
1186
+ case DependencyType.FF:
1187
+ return fromTaskEnd <= toTaskEnd;
1188
+ // finish to start (FS) — the from-task ends before the to-task can begin
1189
+ case DependencyType.FS:
1190
+ return fromTaskEnd <= toTaskStart;
1191
+ // start to finish (SF) — the from-task begins before the to-task can end
1192
+ case DependencyType.SF:
1193
+ return fromTaskStart <= toTaskEnd;
1194
+ // start to start (SS) — the from-task begins before the to-task can begin
1195
+ case DependencyType.SS:
1196
+ return fromTaskStart <= toTaskStart;
1197
+ default: return false;
1198
+ }
1199
+ }
1200
+ handleKeydown(event) {
1201
+ const { keyCode, target, altKey } = event;
1202
+ const isTimelineActive = this.timeline.timelineContent.nativeElement.contains(target);
1203
+ if (isTimelineActive) {
1204
+ if (isArrowUpDownKey(keyCode)) {
1205
+ const direction = keyCode === Keys.ArrowUp ? -1 : 1;
1206
+ this.navigation.activeTimelineIndex = this.activeTimelineIndex + direction;
1207
+ this.navigation.updateActiveTreeListCell();
1208
+ }
1209
+ else if (keyCode === Keys.Home) {
1210
+ this.navigation.activeTimelineIndex = 0;
1211
+ this.navigation.updateActiveTreeListCell();
1212
+ }
1213
+ else if (keyCode === Keys.End) {
1214
+ const lastAvailableIndex = this.treeList.view.data.length - 1;
1215
+ this.navigation.activeTimelineIndex = lastAvailableIndex;
1216
+ this.navigation.updateActiveTreeListCell();
1217
+ }
1218
+ if (isNavigationKey(keyCode)) {
1219
+ this.navigation.scrollHorizontallyToTask();
1220
+ this.scrollSyncService.syncScrollTop('timeline', 'treelist');
1221
+ this.navigation.notifyTaskStatusChange();
1222
+ event.preventDefault();
1223
+ }
1224
+ if (keyCode === Keys.Space && hasObservers(this.selectionChange)) {
1225
+ const task = this.renderedTreeListItems[this.activeTimelineIndex];
1226
+ const selectionAction = this.getSelectionAction(event, task);
1227
+ if (isPresent(task) && !this.isSameSelection(selectionAction, task)) {
1228
+ this.zone.run(() => this.notifySelectionChange(task, selectionAction));
1229
+ }
1230
+ event.preventDefault();
1231
+ }
1232
+ if (keyCode === Keys.Enter && hasObservers(this.taskClick)) {
1233
+ const task = this.renderedTreeListItems[this.activeTimelineIndex];
1234
+ if (isPresent(task)) {
1235
+ this.zone.run(() => this.notifyTaskClick(event, task, this.activeTimelineIndex));
1236
+ }
1237
+ event.preventDefault();
1238
+ }
1239
+ if (isExpandCollapseKey(keyCode, altKey)) {
1240
+ const task = this.renderedTreeListItems[this.activeTimelineIndex];
1241
+ if (isPresent(task) && this.hasChildren(task)) {
1242
+ const shouldExpand = keyCode === Keys.ArrowRight;
1243
+ const isExpanded = this.isExpanded(task);
1244
+ const sameState = shouldExpand === isExpanded;
1245
+ if (!sameState) {
1246
+ this.zone.run(() => {
1247
+ const expandEvent = { dataItem: task };
1248
+ // order is not arbitrary
1249
+ // the TreeList emits the individual events first, then the combined `expandStateChange` event
1250
+ const individualEmitter = shouldExpand ? this.rowExpand : this.rowCollapse;
1251
+ individualEmitter.emit(expandEvent);
1252
+ this.expandStateChange.emit(Object.assign(Object.assign({}, expandEvent), { expand: shouldExpand }));
1253
+ this.updateView();
1254
+ this.navigation.scrollHorizontallyToTask();
1255
+ });
1256
+ }
1257
+ }
1258
+ event.preventDefault();
1259
+ }
1260
+ }
1261
+ const isTreeListActive = this.treeList.wrapper.nativeElement.contains(target);
1262
+ if (keyCode === Keys.Delete && (isTimelineActive || isTreeListActive) && hasObservers(this.taskDelete)) {
1263
+ const taskIndex = isTreeListActive ?
1264
+ this.treeList.activeCell.dataRowIndex :
1265
+ this.activeTimelineIndex;
1266
+ const task = this.renderedTreeListItems[taskIndex];
1267
+ if (isPresent(task)) {
1268
+ this.zone.run(() => this.notifyTaskDelete(task));
1269
+ }
1270
+ }
1271
+ if (isViewDigitKey(keyCode) && !isToolbar(target, this.hostElement.nativeElement) && !this.isInEditMode) {
1272
+ const targetViewIndex = getIndexFromViewDigitKeyCode(keyCode);
1273
+ const availableViews = this.views.toArray();
1274
+ const targetView = availableViews[targetViewIndex];
1275
+ if (isPresent(targetView) && targetView.type !== this.activeView) {
1276
+ this.zone.run(() => this.changeActiveView(targetView.type));
1277
+ }
1278
+ }
1279
+ }
1280
+ }
1281
+ GanttComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: GanttComponent, deps: [{ token: i1.TimelineViewService }, { token: i2.ScrollSyncService }, { token: i0.Renderer2 }, { token: i3.MappingService }, { token: i4.OptionChangesService }, { token: i5.DependencyDomService }, { token: i6.EditService }, { token: i7.LocalizationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i8.NavigationService }], target: i0.ɵɵFactoryTarget.Component });
1282
+ GanttComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", 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", 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", 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: [
1283
+ GanttLocalizationService,
1284
+ LocalizationService,
1285
+ {
1286
+ provide: DataBoundTreeComponent,
1287
+ useExisting: forwardRef(() => GanttComponent)
1288
+ },
1289
+ {
1290
+ provide: ExpandableTreeComponent,
1291
+ useExisting: forwardRef(() => GanttComponent)
1292
+ },
1293
+ TimelineViewService,
1294
+ TimelineDayViewService,
1295
+ TimelineWeekViewService,
1296
+ TimelineMonthViewService,
1297
+ ScrollSyncService,
1298
+ DependencyDomService,
1299
+ MappingService,
1300
+ OptionChangesService,
1301
+ EditService,
1302
+ TimelineScrollService,
1303
+ NavigationService
1304
+ ], queries: [{ propertyName: "taskContentTemplate", first: true, predicate: GanttTaskContentTemplateDirective, descendants: true }, { propertyName: "taskTemplate", first: true, predicate: GanttTaskTemplateDirective, descendants: true }, { propertyName: "summaryTaskTemplate", first: true, predicate: GanttSummaryTaskTemplateDirective, descendants: true }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columns", predicate: GanttColumnBase }, { propertyName: "views", predicate: ViewBase }], viewQueries: [{ propertyName: "treeList", first: true, predicate: TreeListComponent, descendants: true, static: true }, { propertyName: "timeline", first: true, predicate: GanttTimelineComponent, descendants: true }], exportAs: ["kendoGantt"], usesOnChanges: true, ngImport: i0, template: `
1305
+ <ng-container kendoGanttLocalizedMessages
1306
+ i18n-taskEditingGeneralTabTitle="kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip"
1307
+ taskEditingGeneralTabTitle="General"
1308
+
1309
+ i18n-taskEditingPredecessorsTabTitle="kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip"
1310
+ taskEditingPredecessorsTabTitle="Predecessors"
1311
+
1312
+ i18n-taskEditingSuccessorsTabTitle="kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip"
1313
+ taskEditingSuccessorsTabTitle="Successors"
1314
+
1315
+ i18n-taskEditingDependenciesAddButtonText="kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip"
1316
+ taskEditingDependenciesAddButtonText="Add"
1317
+
1318
+ i18n-taskEditingDependenciesRemoveButtonText="kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip"
1319
+ taskEditingDependenciesRemoveButtonText="Remove"
1320
+
1321
+ i18n-taskEditingDependenciesGridNameColumnTitle="kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip"
1322
+ taskEditingDependenciesGridNameColumnTitle="Task Title"
1323
+
1324
+ i18n-taskEditingDependenciesGridTypeColumnTitle="kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip"
1325
+ taskEditingDependenciesGridTypeColumnTitle="Type"
1326
+
1327
+ i18n-taskDeleteLabel="kendo.gantt.taskDeleteLabel|The label of the task delete icon"
1328
+ taskDeleteLabel="Delete"
1329
+
1330
+ i18n-taskEditingDialogTitle="kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog"
1331
+ taskEditingDialogTitle="Editing Task"
1332
+
1333
+ i18n-taskEditingDialogCloseTitle="kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button"
1334
+ taskEditingDialogCloseTitle="Close"
1335
+
1336
+ i18n-confirmationDialogCloseTitle="kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button"
1337
+ confirmationDialogCloseTitle="Close"
1338
+
1339
+ i18n-confirmationDialogTitle="kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog"
1340
+ confirmationDialogTitle="Delete Task"
1341
+
1342
+ i18n-confirmationDialogContent="kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog"
1343
+ confirmationDialogContent="Are you sure you want to delete this task?"
1344
+
1345
+ i18n-deleteButtonText="kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button"
1346
+ deleteButtonText="Delete"
1347
+
1348
+ i18n-cancelButtonText="kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button"
1349
+ cancelButtonText="Cancel"
1350
+
1351
+ i18n-saveButtonText="kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button"
1352
+ saveButtonText="Save"
1353
+
1354
+ i18n-titleFieldInputLabel="kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode"
1355
+ titleFieldInputLabel="Title"
1356
+
1357
+ i18n-startFieldInputLabel="kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode"
1358
+ startFieldInputLabel="Start"
1359
+
1360
+ i18n-endFieldInputLabel="kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode"
1361
+ endFieldInputLabel="End"
1362
+
1363
+ i18n-completionRatioFieldInputLabel="kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode"
1364
+ completionRatioFieldInputLabel="Progress"
1365
+
1366
+ i18n-dayViewText="kendo.gantt.dayViewText|The text of the day view in the ViewSelector component"
1367
+ dayViewText="Day"
1368
+
1369
+ i18n-weekViewText="kendo.gantt.weekViewText|The text of the week view in the ViewSelector component"
1370
+ weekViewText="Week"
1371
+
1372
+ i18n-monthViewText="kendo.gantt.monthViewText|The text of the month view in the ViewSelector component"
1373
+ monthViewText="Month"
1374
+
1375
+ i18n-yearViewText-disabled="kendo.gantt.yearViewText|The text of the year view in the ViewSelector component"
1376
+ yearViewText="Year"
1377
+
1378
+ i18n-addTaskText="kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component"
1379
+ addTaskText="Add Task"
1380
+
1381
+ i18n-addChildText="kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component"
1382
+ addChildText="Add Child"
1383
+
1384
+ i18n-addAboveText="kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component"
1385
+ addAboveText="Add Above"
1386
+
1387
+ i18n-addBelowText="kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component"
1388
+ addBelowText="Add Below"
1389
+
1390
+ i18n-noRecords="kendo.gantt.noRecords|The label visible in the TreeList when there are no records"
1391
+ noRecords="No records available."
1392
+
1393
+ i18n-filter="kendo.gantt.filter|The label of the filter cell or icon"
1394
+ filter="Filter"
1395
+
1396
+ i18n-filterEqOperator="kendo.gantt.filterEqOperator|The text of the equal filter operator"
1397
+ filterEqOperator="Is equal to"
1398
+
1399
+ i18n-filterNotEqOperator="kendo.gantt.filterNotEqOperator|The text of the not equal filter operator"
1400
+ filterNotEqOperator="Is not equal to"
1401
+
1402
+ i18n-filterIsNullOperator="kendo.gantt.filterIsNullOperator|The text of the is null filter operator"
1403
+ filterIsNullOperator="Is null"
1404
+
1405
+ i18n-filterIsNotNullOperator="kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator"
1406
+ filterIsNotNullOperator="Is not null"
1407
+
1408
+ i18n-filterIsEmptyOperator="kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator"
1409
+ filterIsEmptyOperator="Is empty"
1410
+
1411
+ i18n-filterIsNotEmptyOperator="kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator"
1412
+ filterIsNotEmptyOperator="Is not empty"
1413
+
1414
+ i18n-filterStartsWithOperator="kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator"
1415
+ filterStartsWithOperator="Starts with"
1416
+
1417
+ i18n-filterContainsOperator="kendo.gantt.filterContainsOperator|The text of the contains filter operator"
1418
+ filterContainsOperator="Contains"
1419
+
1420
+ i18n-filterNotContainsOperator="kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator"
1421
+ filterNotContainsOperator="Does not contain"
1422
+
1423
+ i18n-filterEndsWithOperator="kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator"
1424
+ filterEndsWithOperator="Ends with"
1425
+
1426
+ i18n-filterGteOperator="kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator"
1427
+ filterGteOperator="Is greater than or equal to"
1428
+
1429
+ i18n-filterGtOperator="kendo.gantt.filterGtOperator|The text of the greater than filter operator"
1430
+ filterGtOperator="Is greater than"
1431
+
1432
+ i18n-filterLteOperator="kendo.gantt.filterLteOperator|The text of the less than or equal filter operator"
1433
+ filterLteOperator="Is less than or equal to"
1434
+
1435
+ i18n-filterLtOperator="kendo.gantt.filterLtOperator|The text of the less than filter operator"
1436
+ filterLtOperator="Is less than"
1437
+
1438
+ i18n-filterIsTrue="kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option"
1439
+ filterIsTrue="Is True"
1440
+
1441
+ i18n-filterIsFalse="kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option"
1442
+ filterIsFalse="Is False"
1443
+
1444
+ i18n-filterBooleanAll="kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option"
1445
+ filterBooleanAll="(All)"
1446
+
1447
+ i18n-filterAfterOrEqualOperator="kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
1448
+ filterAfterOrEqualOperator="Is after or equal to"
1449
+
1450
+ i18n-filterAfterOperator="kendo.gantt.filterAfterOperator|The text of the after date filter operator"
1451
+ filterAfterOperator="Is after"
1452
+
1453
+ i18n-filterBeforeOperator="kendo.gantt.filterBeforeOperator|The text of the before date filter operator"
1454
+ filterBeforeOperator="Is before"
1455
+
1456
+ i18n-filterBeforeOrEqualOperator="kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
1457
+ filterBeforeOrEqualOperator="Is before or equal to"
1458
+
1459
+ i18n-filterFilterButton="kendo.gantt.filterFilterButton|The text of the filter button"
1460
+ filterFilterButton="Filter"
1461
+
1462
+ i18n-filterClearButton="kendo.gantt.filterClearButton|The text of the clear filter button"
1463
+ filterClearButton="Clear"
1464
+
1465
+ i18n-filterAndLogic="kendo.gantt.filterAndLogic|The text of the And filter logic"
1466
+ filterAndLogic="And"
1467
+
1468
+ i18n-filterOrLogic="kendo.gantt.filterOrLogic|The text of the Or filter logic"
1469
+ filterOrLogic="Or"
1470
+
1471
+ i18n-loading="kendo.gantt.loading|The loading text"
1472
+ loading="Loading"
1473
+
1474
+ i18n-columnMenu="kendo.gantt.columnMenu|The title of the column menu icon"
1475
+ columnMenu="Column Menu"
1476
+
1477
+ i18n-columns="kendo.gantt.columns|The text shown in the column menu for the columns item"
1478
+ columns="Columns"
1479
+
1480
+ i18n-lock-disabled="kendo.gantt.lock|The text shown in the column menu for the lock item"
1481
+ lock-disabled="Lock"
1482
+
1483
+ i18n-unlock-disabled="kendo.gantt.unlock|The text shown in the column menu for the unlock item"
1484
+ unlock-disabled="Unlock"
1485
+
1486
+ i18n-sortable="kendo.gantt.sortable|The label of the sort icon"
1487
+ sortable="Sortable"
1488
+
1489
+ i18n-sortAscending="kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item"
1490
+ sortAscending="Sort Ascending"
1491
+
1492
+ i18n-sortDescending="kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item"
1493
+ sortDescending="Sort Descending"
1494
+
1495
+ i18n-sortedAscending="kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending"
1496
+ sortedAscending="Sorted Ascending"
1497
+
1498
+ i18n-sortedDescending="kendo.gantt.sortedDescending|The status announcement when a column is sorted descending"
1499
+ sortedDescending="Sorted Descending"
1500
+
1501
+ i18n-sortedDefault="kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted"
1502
+ sortedDefault="Not Sorted"
1503
+
1504
+ i18n-columnsApply="kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
1505
+ columnsApply="Apply"
1506
+
1507
+ i18n-columnsReset="kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
1508
+ columnsReset="Reset"></ng-container>
1509
+ <kendo-gantt-toolbar
1510
+ *ngIf="showToolbar('top')"
1511
+ [showAddTask]="toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'"
1512
+ [showViewSelector]="toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'"
1513
+ [toolbarTemplate]="toolbarTemplate"
1514
+ [views]="viewTypes"
1515
+ [activeView]="activeView"
1516
+ class="k-gantt-header k-toolbar k-gantt-toolbar"
1517
+ position="top"
1518
+ (activeViewChange)="changeActiveView($event)"></kendo-gantt-toolbar>
1519
+ <div class="k-gantt-content">
1520
+ <kendo-splitter [style.border]="0">
1521
+ <kendo-splitter-pane
1522
+ class="k-gantt-treelist k-gantt-treelist-scrollable"
1523
+ [collapsible]="treeListPaneOptions?.collapsible"
1524
+ [collapsed]="treeListPaneOptions?.collapsed"
1525
+ (collapsedChange)="onTreeListCollapsedChange($event)"
1526
+ [scrollable]="false">
1527
+ <kendo-treelist
1528
+ [idField]="taskIdField"
1529
+ [columns]="columns"
1530
+ [data]="data"
1531
+ [hasChildren]="hasChildren"
1532
+ [fetchChildren]="fetchChildren"
1533
+ [navigable]="navigable"
1534
+ [isExpanded]="isExpanded"
1535
+ [autoSize]="columnsAutoSize"
1536
+ [columnMenu]="columnMenu"
1537
+ [reorderable]="columnsReorderable"
1538
+ [resizable]="columnsResizable"
1539
+ [rowClass]="rowClass"
1540
+ [isSelected]="isSelected"
1541
+ [selectable]="selectable"
1542
+ [sortable]="sortable"
1543
+ [sort]="sort"
1544
+ [filterable]="filterMenu"
1545
+ [filter]="filter"
1546
+ (filterChange)="filterChange.emit($event)"
1547
+ (sortChange)="sortChange.emit($event)"
1548
+ (dataStateChange)="dataStateChange.emit({
1549
+ filter: $event.filter,
1550
+ sort: $event.sort
1551
+ })"
1552
+ (expandStateChange)="expandStateChange.emit($event)"
1553
+ (expand)="rowExpand.emit({ dataItem: $event.dataItem })"
1554
+ (collapse)="rowCollapse.emit({ dataItem: $event.dataItem })"
1555
+ (columnReorder)="columnReorder.emit($event)"
1556
+ (columnResize)="columnResize.emit($event)"
1557
+ (columnVisibilityChange)="handleColumnVisibilityChange($event)"
1558
+ (columnLockedChange)="columnLockedChange.emit($event)"
1559
+ (selectionChange)="handleTreeListSelectionChange($event)"
1560
+ (cellClick)="handleTreeListCellClick($event)"
1561
+ (cellClose)="handleCellClose($event)"
1562
+ [kendoEventsOutsideAngular]="{
1563
+ dblclick: handleTreeListDoubleClick
1564
+ }"
1565
+ [scope]="this"
1566
+ >
1567
+ <kendo-treelist-messages
1568
+ [noRecords]="getText('noRecords')"
1569
+ [filter]="getText('filter')"
1570
+ [filterEqOperator]="getText('filterEqOperator')"
1571
+ [filterNotEqOperator]="getText('filterNotEqOperator')"
1572
+ [filterIsNullOperator]="getText('filterIsNullOperator')"
1573
+ [filterIsNotNullOperator]="getText('filterIsNotNullOperator')"
1574
+ [filterIsEmptyOperator]="getText('filterIsEmptyOperator')"
1575
+ [filterIsNotEmptyOperator]="getText('filterIsNotEmptyOperator')"
1576
+ [filterStartsWithOperator]="getText('filterStartsWithOperator')"
1577
+ [filterContainsOperator]="getText('filterContainsOperator')"
1578
+ [filterNotContainsOperator]="getText('filterNotContainsOperator')"
1579
+ [filterEndsWithOperator]="getText('filterEndsWithOperator')"
1580
+ [filterGteOperator]="getText('filterGteOperator')"
1581
+ [filterGtOperator]="getText('filterGtOperator')"
1582
+ [filterLteOperator]="getText('filterLteOperator')"
1583
+ [filterLtOperator]="getText('filterLtOperator')"
1584
+ [filterIsTrue]="getText('filterIsTrue')"
1585
+ [filterIsFalse]="getText('filterIsFalse')"
1586
+ [filterBooleanAll]="getText('filterBooleanAll')"
1587
+ [filterAfterOrEqualOperator]="getText('filterAfterOrEqualOperator')"
1588
+ [filterAfterOperator]="getText('filterAfterOperator')"
1589
+ [filterBeforeOperator]="getText('filterBeforeOperator')"
1590
+ [filterBeforeOrEqualOperator]="getText('filterBeforeOrEqualOperator')"
1591
+ [filterFilterButton]="getText('filterFilterButton')"
1592
+ [filterClearButton]="getText('filterClearButton')"
1593
+ [filterAndLogic]="getText('filterAndLogic')"
1594
+ [filterOrLogic]="getText('filterOrLogic')"
1595
+ [loading]="getText('loading')"
1596
+ [columnMenu]="getText('columnMenu')"
1597
+ [columns]="getText('columns')"
1598
+ [sortable]="getText('sortable')"
1599
+ [sortAscending]="getText('sortAscending')"
1600
+ [sortDescending]="getText('sortDescending')"
1601
+ [sortedAscending]="getText('sortedAscending')"
1602
+ [sortedDescending]="getText('sortedDescending')"
1603
+ [sortedDefault]="getText('sortedDefault')"
1604
+ [columnsApply]="getText('columnsApply')"
1605
+ [columnsReset]="getText('columnsReset')"
1606
+ >
1607
+ </kendo-treelist-messages>
1608
+ </kendo-treelist>
1609
+ </kendo-splitter-pane>
1610
+ <kendo-splitter-pane
1611
+ [collapsible]="timelinePaneOptions?.collapsible"
1612
+ [resizable]="timelinePaneOptions?.resizable"
1613
+ [collapsed]="timelinePaneOptions?.collapsed"
1614
+ [min]="timelinePaneOptions?.min"
1615
+ [max]="timelinePaneOptions?.max"
1616
+ [size]="timelinePaneOptions?.size"
1617
+ (collapsedChange)="onTimelineCollapsedChange($event)"
1618
+ (sizeChange)="onTimelinePaneSizeChange($event)"
1619
+ [scrollable]="false">
1620
+ <kendo-gantt-timeline
1621
+ *ngIf="views && views.length"
1622
+ [renderDependencyDragClues]="renderDependencyDragClues"
1623
+ [dragScrollSettings]="dragScrollSettings"
1624
+ [rows]="viewItems"
1625
+ [slots]="timelineSlots"
1626
+ [groupSlots]="timelineGroupSlots"
1627
+ [tableWidth]="tableWidth"
1628
+ [activeView]="activeView"
1629
+ [taskContentTemplate]="taskContentTemplate?.templateRef"
1630
+ [taskTemplate]="taskTemplate?.templateRef"
1631
+ [summaryTaskTemplate]="summaryTaskTemplate?.templateRef"
1632
+ [taskClass]="taskClass"
1633
+ [dependencies]="dependencies"
1634
+ [isExpanded]="isExpanded"
1635
+ [selectable]="selectable"
1636
+ [isTaskSelected]="isTaskSelected"
1637
+ [kendoEventsOutsideAngular]="{
1638
+ click: handleTimelineClick,
1639
+ contextmenu: handleTimelineRightClick,
1640
+ dblclick: handleTimelineDblClick,
1641
+ mousedown: handleTimelineMouseDown
1642
+ }"
1643
+ [scope]="this"
1644
+ ></kendo-gantt-timeline>
1645
+ </kendo-splitter-pane>
1646
+ </kendo-splitter>
1647
+ </div>
1648
+ <kendo-gantt-toolbar
1649
+ *ngIf="showToolbar('bottom')"
1650
+ [showAddTask]="toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'"
1651
+ [showViewSelector]="toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'"
1652
+ [toolbarTemplate]="toolbarTemplate"
1653
+ [views]="viewTypes"
1654
+ [activeView]="activeView"
1655
+ class="k-gantt-footer k-toolbar k-gantt-toolbar"
1656
+ position="bottom"></kendo-gantt-toolbar>
1657
+ <kendo-gantt-edit-dialog
1658
+ *ngIf="showEditingDialog"
1659
+ [data]="data">
1660
+ </kendo-gantt-edit-dialog>
1661
+ <kendo-dialog
1662
+ *ngIf="showConfirmationDialog"
1663
+ [width]="575"
1664
+ [height]="170"
1665
+ [title]="getText('confirmationDialogTitle')"
1666
+ (close)="handleConfirmationDialogClose()">
1667
+ <span>{{ getText('confirmationDialogContent') }}</span>
1668
+ <kendo-dialog-actions layout="normal">
1669
+ <kendo-treelist-spacer></kendo-treelist-spacer>
1670
+ <button kendoButton [primary]="true" (click)="handleDeleteConfirmation()">{{ getText('deleteButtonText') }}</button>
1671
+ <button kendoButton (click)="handleConfirmationDialogClose()">{{ getText('cancelButtonText') }}</button>
1672
+ </kendo-dialog-actions>
1673
+ </kendo-dialog>
1674
+ `, isInline: true, components: [{ type: i9.ToolbarComponent, selector: "kendo-gantt-toolbar", inputs: ["showAddTask", "showViewSelector", "views", "activeView", "toolbarTemplate", "position"], outputs: ["activeViewChange"] }, { type: i10.SplitterComponent, selector: "kendo-splitter", inputs: ["orientation"], outputs: ["layoutChange"], exportAs: ["kendoSplitter"] }, { type: i10.SplitterPaneComponent, selector: "kendo-splitter-pane", inputs: ["order", "size", "min", "max", "resizable", "collapsible", "scrollable", "collapsed", "orientation", "containsSplitter", "overlayContent"], outputs: ["sizeChange", "collapsedChange"], exportAs: ["kendoSplitterPane"] }, { type: i11.TreeListComponent, selector: "kendo-treelist", inputs: ["pageSize", "scrollable", "trackBy", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "autoSize", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "skip", "data", "sort", "navigatable", "rowClass", "idField", "selectable", "isSelected", "columns", "fetchChildren", "hasChildren", "isExpanded", "aria-label", "height", "rowHeight", "filter"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange"], exportAs: ["kendoTreeList"] }, { type: i11.CustomMessagesComponent, selector: "kendo-treelist-messages" }, { type: i12.GanttTimelineComponent, selector: "kendo-gantt-timeline", inputs: ["rows", "slots", "groupSlots", "tableWidth", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "renderDependencyDragClues", "dragScrollSettings", "selectable", "isTaskSelected", "isExpanded", "dependencies"], outputs: ["timelineContainerPress", "timelineContainerDrag", "timelineContainerRelease"] }, { type: i13.EditDialogComponent, selector: "kendo-gantt-edit-dialog", inputs: ["data"] }, { type: i14.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { type: i14.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { type: i11.TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }], directives: [{ type: i15.LocalizedMessagesDirective, selector: "[kendoGanttLocalizedMessages]" }, { type: i16.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i18.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
1675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: GanttComponent, decorators: [{
1676
+ type: Component,
1677
+ args: [{
1678
+ selector: 'kendo-gantt',
1679
+ exportAs: 'kendoGantt',
1680
+ providers: [
1681
+ GanttLocalizationService,
1682
+ LocalizationService,
1683
+ {
1684
+ provide: DataBoundTreeComponent,
1685
+ useExisting: forwardRef(() => GanttComponent)
1686
+ },
1687
+ {
1688
+ provide: ExpandableTreeComponent,
1689
+ useExisting: forwardRef(() => GanttComponent)
1690
+ },
1691
+ TimelineViewService,
1692
+ TimelineDayViewService,
1693
+ TimelineWeekViewService,
1694
+ TimelineMonthViewService,
1695
+ ScrollSyncService,
1696
+ DependencyDomService,
1697
+ MappingService,
1698
+ OptionChangesService,
1699
+ EditService,
1700
+ TimelineScrollService,
1701
+ NavigationService
1702
+ ],
1703
+ template: `
1704
+ <ng-container kendoGanttLocalizedMessages
1705
+ i18n-taskEditingGeneralTabTitle="kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip"
1706
+ taskEditingGeneralTabTitle="General"
1707
+
1708
+ i18n-taskEditingPredecessorsTabTitle="kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip"
1709
+ taskEditingPredecessorsTabTitle="Predecessors"
1710
+
1711
+ i18n-taskEditingSuccessorsTabTitle="kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip"
1712
+ taskEditingSuccessorsTabTitle="Successors"
1713
+
1714
+ i18n-taskEditingDependenciesAddButtonText="kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip"
1715
+ taskEditingDependenciesAddButtonText="Add"
1716
+
1717
+ i18n-taskEditingDependenciesRemoveButtonText="kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip"
1718
+ taskEditingDependenciesRemoveButtonText="Remove"
1719
+
1720
+ i18n-taskEditingDependenciesGridNameColumnTitle="kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip"
1721
+ taskEditingDependenciesGridNameColumnTitle="Task Title"
1722
+
1723
+ i18n-taskEditingDependenciesGridTypeColumnTitle="kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip"
1724
+ taskEditingDependenciesGridTypeColumnTitle="Type"
1725
+
1726
+ i18n-taskDeleteLabel="kendo.gantt.taskDeleteLabel|The label of the task delete icon"
1727
+ taskDeleteLabel="Delete"
1728
+
1729
+ i18n-taskEditingDialogTitle="kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog"
1730
+ taskEditingDialogTitle="Editing Task"
1731
+
1732
+ i18n-taskEditingDialogCloseTitle="kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button"
1733
+ taskEditingDialogCloseTitle="Close"
1734
+
1735
+ i18n-confirmationDialogCloseTitle="kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button"
1736
+ confirmationDialogCloseTitle="Close"
1737
+
1738
+ i18n-confirmationDialogTitle="kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog"
1739
+ confirmationDialogTitle="Delete Task"
1740
+
1741
+ i18n-confirmationDialogContent="kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog"
1742
+ confirmationDialogContent="Are you sure you want to delete this task?"
1743
+
1744
+ i18n-deleteButtonText="kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button"
1745
+ deleteButtonText="Delete"
1746
+
1747
+ i18n-cancelButtonText="kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button"
1748
+ cancelButtonText="Cancel"
1749
+
1750
+ i18n-saveButtonText="kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button"
1751
+ saveButtonText="Save"
1752
+
1753
+ i18n-titleFieldInputLabel="kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode"
1754
+ titleFieldInputLabel="Title"
1755
+
1756
+ i18n-startFieldInputLabel="kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode"
1757
+ startFieldInputLabel="Start"
1758
+
1759
+ i18n-endFieldInputLabel="kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode"
1760
+ endFieldInputLabel="End"
1761
+
1762
+ i18n-completionRatioFieldInputLabel="kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode"
1763
+ completionRatioFieldInputLabel="Progress"
1764
+
1765
+ i18n-dayViewText="kendo.gantt.dayViewText|The text of the day view in the ViewSelector component"
1766
+ dayViewText="Day"
1767
+
1768
+ i18n-weekViewText="kendo.gantt.weekViewText|The text of the week view in the ViewSelector component"
1769
+ weekViewText="Week"
1770
+
1771
+ i18n-monthViewText="kendo.gantt.monthViewText|The text of the month view in the ViewSelector component"
1772
+ monthViewText="Month"
1773
+
1774
+ i18n-yearViewText-disabled="kendo.gantt.yearViewText|The text of the year view in the ViewSelector component"
1775
+ yearViewText="Year"
1776
+
1777
+ i18n-addTaskText="kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component"
1778
+ addTaskText="Add Task"
1779
+
1780
+ i18n-addChildText="kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component"
1781
+ addChildText="Add Child"
1782
+
1783
+ i18n-addAboveText="kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component"
1784
+ addAboveText="Add Above"
1785
+
1786
+ i18n-addBelowText="kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component"
1787
+ addBelowText="Add Below"
1788
+
1789
+ i18n-noRecords="kendo.gantt.noRecords|The label visible in the TreeList when there are no records"
1790
+ noRecords="No records available."
1791
+
1792
+ i18n-filter="kendo.gantt.filter|The label of the filter cell or icon"
1793
+ filter="Filter"
1794
+
1795
+ i18n-filterEqOperator="kendo.gantt.filterEqOperator|The text of the equal filter operator"
1796
+ filterEqOperator="Is equal to"
1797
+
1798
+ i18n-filterNotEqOperator="kendo.gantt.filterNotEqOperator|The text of the not equal filter operator"
1799
+ filterNotEqOperator="Is not equal to"
1800
+
1801
+ i18n-filterIsNullOperator="kendo.gantt.filterIsNullOperator|The text of the is null filter operator"
1802
+ filterIsNullOperator="Is null"
1803
+
1804
+ i18n-filterIsNotNullOperator="kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator"
1805
+ filterIsNotNullOperator="Is not null"
1806
+
1807
+ i18n-filterIsEmptyOperator="kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator"
1808
+ filterIsEmptyOperator="Is empty"
1809
+
1810
+ i18n-filterIsNotEmptyOperator="kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator"
1811
+ filterIsNotEmptyOperator="Is not empty"
1812
+
1813
+ i18n-filterStartsWithOperator="kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator"
1814
+ filterStartsWithOperator="Starts with"
1815
+
1816
+ i18n-filterContainsOperator="kendo.gantt.filterContainsOperator|The text of the contains filter operator"
1817
+ filterContainsOperator="Contains"
1818
+
1819
+ i18n-filterNotContainsOperator="kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator"
1820
+ filterNotContainsOperator="Does not contain"
1821
+
1822
+ i18n-filterEndsWithOperator="kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator"
1823
+ filterEndsWithOperator="Ends with"
1824
+
1825
+ i18n-filterGteOperator="kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator"
1826
+ filterGteOperator="Is greater than or equal to"
1827
+
1828
+ i18n-filterGtOperator="kendo.gantt.filterGtOperator|The text of the greater than filter operator"
1829
+ filterGtOperator="Is greater than"
1830
+
1831
+ i18n-filterLteOperator="kendo.gantt.filterLteOperator|The text of the less than or equal filter operator"
1832
+ filterLteOperator="Is less than or equal to"
1833
+
1834
+ i18n-filterLtOperator="kendo.gantt.filterLtOperator|The text of the less than filter operator"
1835
+ filterLtOperator="Is less than"
1836
+
1837
+ i18n-filterIsTrue="kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option"
1838
+ filterIsTrue="Is True"
1839
+
1840
+ i18n-filterIsFalse="kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option"
1841
+ filterIsFalse="Is False"
1842
+
1843
+ i18n-filterBooleanAll="kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option"
1844
+ filterBooleanAll="(All)"
1845
+
1846
+ i18n-filterAfterOrEqualOperator="kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
1847
+ filterAfterOrEqualOperator="Is after or equal to"
1848
+
1849
+ i18n-filterAfterOperator="kendo.gantt.filterAfterOperator|The text of the after date filter operator"
1850
+ filterAfterOperator="Is after"
1851
+
1852
+ i18n-filterBeforeOperator="kendo.gantt.filterBeforeOperator|The text of the before date filter operator"
1853
+ filterBeforeOperator="Is before"
1854
+
1855
+ i18n-filterBeforeOrEqualOperator="kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
1856
+ filterBeforeOrEqualOperator="Is before or equal to"
1857
+
1858
+ i18n-filterFilterButton="kendo.gantt.filterFilterButton|The text of the filter button"
1859
+ filterFilterButton="Filter"
1860
+
1861
+ i18n-filterClearButton="kendo.gantt.filterClearButton|The text of the clear filter button"
1862
+ filterClearButton="Clear"
1863
+
1864
+ i18n-filterAndLogic="kendo.gantt.filterAndLogic|The text of the And filter logic"
1865
+ filterAndLogic="And"
1866
+
1867
+ i18n-filterOrLogic="kendo.gantt.filterOrLogic|The text of the Or filter logic"
1868
+ filterOrLogic="Or"
1869
+
1870
+ i18n-loading="kendo.gantt.loading|The loading text"
1871
+ loading="Loading"
1872
+
1873
+ i18n-columnMenu="kendo.gantt.columnMenu|The title of the column menu icon"
1874
+ columnMenu="Column Menu"
1875
+
1876
+ i18n-columns="kendo.gantt.columns|The text shown in the column menu for the columns item"
1877
+ columns="Columns"
1878
+
1879
+ i18n-lock-disabled="kendo.gantt.lock|The text shown in the column menu for the lock item"
1880
+ lock-disabled="Lock"
1881
+
1882
+ i18n-unlock-disabled="kendo.gantt.unlock|The text shown in the column menu for the unlock item"
1883
+ unlock-disabled="Unlock"
1884
+
1885
+ i18n-sortable="kendo.gantt.sortable|The label of the sort icon"
1886
+ sortable="Sortable"
1887
+
1888
+ i18n-sortAscending="kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item"
1889
+ sortAscending="Sort Ascending"
1890
+
1891
+ i18n-sortDescending="kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item"
1892
+ sortDescending="Sort Descending"
1893
+
1894
+ i18n-sortedAscending="kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending"
1895
+ sortedAscending="Sorted Ascending"
1896
+
1897
+ i18n-sortedDescending="kendo.gantt.sortedDescending|The status announcement when a column is sorted descending"
1898
+ sortedDescending="Sorted Descending"
1899
+
1900
+ i18n-sortedDefault="kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted"
1901
+ sortedDefault="Not Sorted"
1902
+
1903
+ i18n-columnsApply="kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
1904
+ columnsApply="Apply"
1905
+
1906
+ i18n-columnsReset="kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
1907
+ columnsReset="Reset"></ng-container>
1908
+ <kendo-gantt-toolbar
1909
+ *ngIf="showToolbar('top')"
1910
+ [showAddTask]="toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'"
1911
+ [showViewSelector]="toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'"
1912
+ [toolbarTemplate]="toolbarTemplate"
1913
+ [views]="viewTypes"
1914
+ [activeView]="activeView"
1915
+ class="k-gantt-header k-toolbar k-gantt-toolbar"
1916
+ position="top"
1917
+ (activeViewChange)="changeActiveView($event)"></kendo-gantt-toolbar>
1918
+ <div class="k-gantt-content">
1919
+ <kendo-splitter [style.border]="0">
1920
+ <kendo-splitter-pane
1921
+ class="k-gantt-treelist k-gantt-treelist-scrollable"
1922
+ [collapsible]="treeListPaneOptions?.collapsible"
1923
+ [collapsed]="treeListPaneOptions?.collapsed"
1924
+ (collapsedChange)="onTreeListCollapsedChange($event)"
1925
+ [scrollable]="false">
1926
+ <kendo-treelist
1927
+ [idField]="taskIdField"
1928
+ [columns]="columns"
1929
+ [data]="data"
1930
+ [hasChildren]="hasChildren"
1931
+ [fetchChildren]="fetchChildren"
1932
+ [navigable]="navigable"
1933
+ [isExpanded]="isExpanded"
1934
+ [autoSize]="columnsAutoSize"
1935
+ [columnMenu]="columnMenu"
1936
+ [reorderable]="columnsReorderable"
1937
+ [resizable]="columnsResizable"
1938
+ [rowClass]="rowClass"
1939
+ [isSelected]="isSelected"
1940
+ [selectable]="selectable"
1941
+ [sortable]="sortable"
1942
+ [sort]="sort"
1943
+ [filterable]="filterMenu"
1944
+ [filter]="filter"
1945
+ (filterChange)="filterChange.emit($event)"
1946
+ (sortChange)="sortChange.emit($event)"
1947
+ (dataStateChange)="dataStateChange.emit({
1948
+ filter: $event.filter,
1949
+ sort: $event.sort
1950
+ })"
1951
+ (expandStateChange)="expandStateChange.emit($event)"
1952
+ (expand)="rowExpand.emit({ dataItem: $event.dataItem })"
1953
+ (collapse)="rowCollapse.emit({ dataItem: $event.dataItem })"
1954
+ (columnReorder)="columnReorder.emit($event)"
1955
+ (columnResize)="columnResize.emit($event)"
1956
+ (columnVisibilityChange)="handleColumnVisibilityChange($event)"
1957
+ (columnLockedChange)="columnLockedChange.emit($event)"
1958
+ (selectionChange)="handleTreeListSelectionChange($event)"
1959
+ (cellClick)="handleTreeListCellClick($event)"
1960
+ (cellClose)="handleCellClose($event)"
1961
+ [kendoEventsOutsideAngular]="{
1962
+ dblclick: handleTreeListDoubleClick
1963
+ }"
1964
+ [scope]="this"
1965
+ >
1966
+ <kendo-treelist-messages
1967
+ [noRecords]="getText('noRecords')"
1968
+ [filter]="getText('filter')"
1969
+ [filterEqOperator]="getText('filterEqOperator')"
1970
+ [filterNotEqOperator]="getText('filterNotEqOperator')"
1971
+ [filterIsNullOperator]="getText('filterIsNullOperator')"
1972
+ [filterIsNotNullOperator]="getText('filterIsNotNullOperator')"
1973
+ [filterIsEmptyOperator]="getText('filterIsEmptyOperator')"
1974
+ [filterIsNotEmptyOperator]="getText('filterIsNotEmptyOperator')"
1975
+ [filterStartsWithOperator]="getText('filterStartsWithOperator')"
1976
+ [filterContainsOperator]="getText('filterContainsOperator')"
1977
+ [filterNotContainsOperator]="getText('filterNotContainsOperator')"
1978
+ [filterEndsWithOperator]="getText('filterEndsWithOperator')"
1979
+ [filterGteOperator]="getText('filterGteOperator')"
1980
+ [filterGtOperator]="getText('filterGtOperator')"
1981
+ [filterLteOperator]="getText('filterLteOperator')"
1982
+ [filterLtOperator]="getText('filterLtOperator')"
1983
+ [filterIsTrue]="getText('filterIsTrue')"
1984
+ [filterIsFalse]="getText('filterIsFalse')"
1985
+ [filterBooleanAll]="getText('filterBooleanAll')"
1986
+ [filterAfterOrEqualOperator]="getText('filterAfterOrEqualOperator')"
1987
+ [filterAfterOperator]="getText('filterAfterOperator')"
1988
+ [filterBeforeOperator]="getText('filterBeforeOperator')"
1989
+ [filterBeforeOrEqualOperator]="getText('filterBeforeOrEqualOperator')"
1990
+ [filterFilterButton]="getText('filterFilterButton')"
1991
+ [filterClearButton]="getText('filterClearButton')"
1992
+ [filterAndLogic]="getText('filterAndLogic')"
1993
+ [filterOrLogic]="getText('filterOrLogic')"
1994
+ [loading]="getText('loading')"
1995
+ [columnMenu]="getText('columnMenu')"
1996
+ [columns]="getText('columns')"
1997
+ [sortable]="getText('sortable')"
1998
+ [sortAscending]="getText('sortAscending')"
1999
+ [sortDescending]="getText('sortDescending')"
2000
+ [sortedAscending]="getText('sortedAscending')"
2001
+ [sortedDescending]="getText('sortedDescending')"
2002
+ [sortedDefault]="getText('sortedDefault')"
2003
+ [columnsApply]="getText('columnsApply')"
2004
+ [columnsReset]="getText('columnsReset')"
2005
+ >
2006
+ </kendo-treelist-messages>
2007
+ </kendo-treelist>
2008
+ </kendo-splitter-pane>
2009
+ <kendo-splitter-pane
2010
+ [collapsible]="timelinePaneOptions?.collapsible"
2011
+ [resizable]="timelinePaneOptions?.resizable"
2012
+ [collapsed]="timelinePaneOptions?.collapsed"
2013
+ [min]="timelinePaneOptions?.min"
2014
+ [max]="timelinePaneOptions?.max"
2015
+ [size]="timelinePaneOptions?.size"
2016
+ (collapsedChange)="onTimelineCollapsedChange($event)"
2017
+ (sizeChange)="onTimelinePaneSizeChange($event)"
2018
+ [scrollable]="false">
2019
+ <kendo-gantt-timeline
2020
+ *ngIf="views && views.length"
2021
+ [renderDependencyDragClues]="renderDependencyDragClues"
2022
+ [dragScrollSettings]="dragScrollSettings"
2023
+ [rows]="viewItems"
2024
+ [slots]="timelineSlots"
2025
+ [groupSlots]="timelineGroupSlots"
2026
+ [tableWidth]="tableWidth"
2027
+ [activeView]="activeView"
2028
+ [taskContentTemplate]="taskContentTemplate?.templateRef"
2029
+ [taskTemplate]="taskTemplate?.templateRef"
2030
+ [summaryTaskTemplate]="summaryTaskTemplate?.templateRef"
2031
+ [taskClass]="taskClass"
2032
+ [dependencies]="dependencies"
2033
+ [isExpanded]="isExpanded"
2034
+ [selectable]="selectable"
2035
+ [isTaskSelected]="isTaskSelected"
2036
+ [kendoEventsOutsideAngular]="{
2037
+ click: handleTimelineClick,
2038
+ contextmenu: handleTimelineRightClick,
2039
+ dblclick: handleTimelineDblClick,
2040
+ mousedown: handleTimelineMouseDown
2041
+ }"
2042
+ [scope]="this"
2043
+ ></kendo-gantt-timeline>
2044
+ </kendo-splitter-pane>
2045
+ </kendo-splitter>
2046
+ </div>
2047
+ <kendo-gantt-toolbar
2048
+ *ngIf="showToolbar('bottom')"
2049
+ [showAddTask]="toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'"
2050
+ [showViewSelector]="toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'"
2051
+ [toolbarTemplate]="toolbarTemplate"
2052
+ [views]="viewTypes"
2053
+ [activeView]="activeView"
2054
+ class="k-gantt-footer k-toolbar k-gantt-toolbar"
2055
+ position="bottom"></kendo-gantt-toolbar>
2056
+ <kendo-gantt-edit-dialog
2057
+ *ngIf="showEditingDialog"
2058
+ [data]="data">
2059
+ </kendo-gantt-edit-dialog>
2060
+ <kendo-dialog
2061
+ *ngIf="showConfirmationDialog"
2062
+ [width]="575"
2063
+ [height]="170"
2064
+ [title]="getText('confirmationDialogTitle')"
2065
+ (close)="handleConfirmationDialogClose()">
2066
+ <span>{{ getText('confirmationDialogContent') }}</span>
2067
+ <kendo-dialog-actions layout="normal">
2068
+ <kendo-treelist-spacer></kendo-treelist-spacer>
2069
+ <button kendoButton [primary]="true" (click)="handleDeleteConfirmation()">{{ getText('deleteButtonText') }}</button>
2070
+ <button kendoButton (click)="handleConfirmationDialogClose()">{{ getText('cancelButtonText') }}</button>
2071
+ </kendo-dialog-actions>
2072
+ </kendo-dialog>
2073
+ `
2074
+ }]
2075
+ }], ctorParameters: function () { return [{ type: i1.TimelineViewService }, { type: i2.ScrollSyncService }, { type: i0.Renderer2 }, { type: i3.MappingService }, { type: i4.OptionChangesService }, { type: i5.DependencyDomService }, { type: i6.EditService }, { type: i7.LocalizationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i8.NavigationService }]; }, propDecorators: { treeList: [{
2076
+ type: ViewChild,
2077
+ args: [TreeListComponent, { static: true }]
2078
+ }], timeline: [{
2079
+ type: ViewChild,
2080
+ args: [GanttTimelineComponent, { static: false }]
2081
+ }], taskContentTemplate: [{
2082
+ type: ContentChild,
2083
+ args: [GanttTaskContentTemplateDirective, { static: false }]
2084
+ }], taskTemplate: [{
2085
+ type: ContentChild,
2086
+ args: [GanttTaskTemplateDirective, { static: false }]
2087
+ }], summaryTaskTemplate: [{
2088
+ type: ContentChild,
2089
+ args: [GanttSummaryTaskTemplateDirective, { static: false }]
2090
+ }], toolbarTemplateChildren: [{
2091
+ type: ContentChildren,
2092
+ args: [ToolbarTemplateDirective]
2093
+ }], roleDescription: [{
2094
+ type: Input,
2095
+ args: ['aria-roledescription']
2096
+ }], hostRoleDescriptionAttr: [{
2097
+ type: HostBinding,
2098
+ args: ['attr.aria-roledescription']
2099
+ }], role: [{
2100
+ type: Input,
2101
+ args: ['role']
2102
+ }], hostRoleAttr: [{
2103
+ type: HostBinding,
2104
+ args: ['attr.role']
2105
+ }], hostClasses: [{
2106
+ type: HostBinding,
2107
+ args: ['class.k-gantt']
2108
+ }], dir: [{
2109
+ type: HostBinding,
2110
+ args: ['attr.dir']
2111
+ }], columns: [{
2112
+ type: ContentChildren,
2113
+ args: [GanttColumnBase]
2114
+ }], taskModelFields: [{
2115
+ type: Input
2116
+ }], dependencyModelFields: [{
2117
+ type: Input
2118
+ }], views: [{
2119
+ type: ContentChildren,
2120
+ args: [ViewBase]
2121
+ }], activeView: [{
2122
+ type: Input
2123
+ }], data: [{
2124
+ type: Input
2125
+ }], isSelected: [{
2126
+ type: Input
2127
+ }], validateNewDependency: [{
2128
+ type: Input
2129
+ }], selectionChange: [{
2130
+ type: Output
2131
+ }], selectable: [{
2132
+ type: Input
2133
+ }], toolbarSettings: [{
2134
+ type: Input
2135
+ }], fetchChildren: [{
2136
+ type: Input
2137
+ }], hasChildren: [{
2138
+ type: Input
2139
+ }], dependencies: [{
2140
+ type: Input
2141
+ }], sortable: [{
2142
+ type: Input
2143
+ }], sort: [{
2144
+ type: Input
2145
+ }], filterable: [{
2146
+ type: Input
2147
+ }], filter: [{
2148
+ type: Input
2149
+ }], workDayStart: [{
2150
+ type: Input
2151
+ }], workDayEnd: [{
2152
+ type: Input
2153
+ }], workWeekStart: [{
2154
+ type: Input
2155
+ }], workWeekEnd: [{
2156
+ type: Input
2157
+ }], navigable: [{
2158
+ type: Input
2159
+ }], timelinePaneOptions: [{
2160
+ type: Input
2161
+ }], treeListPaneOptions: [{
2162
+ type: Input
2163
+ }], taskClass: [{
2164
+ type: Input
2165
+ }], rowClass: [{
2166
+ type: Input
2167
+ }], isExpanded: [{
2168
+ type: Input
2169
+ }], columnsAutoSize: [{
2170
+ type: Input
2171
+ }], columnMenu: [{
2172
+ type: Input
2173
+ }], columnsReorderable: [{
2174
+ type: Input
2175
+ }], columnsResizable: [{
2176
+ type: Input
2177
+ }], dragScrollSettings: [{
2178
+ type: Input
2179
+ }], rowExpand: [{
2180
+ type: Output
2181
+ }], taskDblClick: [{
2182
+ type: Output
2183
+ }], cellDblClick: [{
2184
+ type: Output
2185
+ }], cellClose: [{
2186
+ type: Output
2187
+ }], taskDelete: [{
2188
+ type: Output
2189
+ }], rowCollapse: [{
2190
+ type: Output
2191
+ }], remove: [{
2192
+ type: Output
2193
+ }], cancel: [{
2194
+ type: Output
2195
+ }], save: [{
2196
+ type: Output
2197
+ }], taskAdd: [{
2198
+ type: Output
2199
+ }], dependencyAdd: [{
2200
+ type: Output
2201
+ }], sortChange: [{
2202
+ type: Output
2203
+ }], filterChange: [{
2204
+ type: Output
2205
+ }], dataStateChange: [{
2206
+ type: Output
2207
+ }], treeListPaneCollapsedChange: [{
2208
+ type: Output
2209
+ }], timelinePaneCollapsedChange: [{
2210
+ type: Output
2211
+ }], timelinePaneSizeChange: [{
2212
+ type: Output
2213
+ }], activeViewChange: [{
2214
+ type: Output
2215
+ }], columnResize: [{
2216
+ type: Output
2217
+ }], columnReorder: [{
2218
+ type: Output
2219
+ }], columnVisibilityChange: [{
2220
+ type: Output
2221
+ }], columnLockedChange: [{
2222
+ type: Output
2223
+ }], cellClick: [{
2224
+ type: Output
2225
+ }], taskClick: [{
2226
+ type: Output
2227
+ }] } });