@progress/kendo-angular-gantt 0.3.0-dev.202201111723 → 1.0.0

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 (138) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -2
  2. package/dist/cdn/main.js +1 -29
  3. package/dist/es/common/touch-enabled.js +9 -0
  4. package/dist/es/dependencies/utils.js +34 -0
  5. package/dist/es/dragging/dependency-drag-create.directive.js +347 -0
  6. package/dist/es/dragging/drag-validation-tooltip.component.js +27 -0
  7. package/dist/es/editing/dependencies-table.component.js +1 -1
  8. package/dist/es/editing/edit-dialog.component.js +3 -3
  9. package/dist/es/editing/edit.service.js +4 -2
  10. package/dist/es/editing/task-fields.component.js +1 -1
  11. package/dist/es/editing/{util.js → utils.js} +0 -0
  12. package/dist/es/gantt.component.js +313 -28
  13. package/dist/es/gantt.module.js +23 -6
  14. package/dist/es/index.js +5 -0
  15. package/dist/es/main.js +1 -0
  16. package/dist/es/models/events/dependency-add-event.interface.js +4 -0
  17. package/dist/es/models/events/task-delete-event.interface.js +4 -0
  18. package/dist/es/models/view-item.interface.js +4 -0
  19. package/dist/es/navigation/navigation-models.js +4 -0
  20. package/dist/es/navigation/navigation.service.js +390 -0
  21. package/dist/es/navigation/utils.js +77 -0
  22. package/dist/es/package-metadata.js +1 -1
  23. package/dist/es/rendering/gantt-milestone-task.component.js +12 -6
  24. package/dist/es/rendering/gantt-summary-task.component.js +27 -6
  25. package/dist/es/rendering/gantt-task-base.js +84 -22
  26. package/dist/es/rendering/gantt-task.component.js +13 -8
  27. package/dist/es/rendering/gantt-tasks-table-body.component.js +13 -5
  28. package/dist/es/scrolling/drag-scroll-settings.js +20 -0
  29. package/dist/es/scrolling/timeline-scroll.directive.js +89 -0
  30. package/dist/es/scrolling/timeline-scroll.service.js +39 -0
  31. package/dist/es/scrolling/utils.js +80 -0
  32. package/dist/es/timeline/gantt-timeline.component.js +50 -4
  33. package/dist/es/toolbar/toolbar.component.js +12 -13
  34. package/dist/es/toolbar/view-selector.component.js +1 -1
  35. package/dist/es/utils.js +153 -12
  36. package/dist/es2015/common/touch-enabled.d.ts +9 -0
  37. package/dist/es2015/common/touch-enabled.js +9 -0
  38. package/dist/es2015/dependencies/utils.d.ts +15 -0
  39. package/dist/es2015/dependencies/utils.js +34 -0
  40. package/dist/es2015/dragging/dependency-drag-create.directive.d.ts +72 -0
  41. package/dist/es2015/dragging/dependency-drag-create.directive.js +324 -0
  42. package/dist/es2015/dragging/drag-validation-tooltip.component.d.ts +29 -0
  43. package/dist/es2015/dragging/drag-validation-tooltip.component.js +76 -0
  44. package/dist/es2015/editing/dependencies-table.component.js +1 -1
  45. package/dist/es2015/editing/edit-dialog.component.d.ts +1 -1
  46. package/dist/es2015/editing/edit-dialog.component.js +12 -4
  47. package/dist/es2015/editing/edit.service.d.ts +2 -3
  48. package/dist/es2015/editing/edit.service.js +4 -2
  49. package/dist/es2015/editing/task-fields.component.js +1 -1
  50. package/dist/es2015/editing/{util.d.ts → utils.d.ts} +2 -2
  51. package/dist/es2015/editing/{util.js → utils.js} +0 -0
  52. package/dist/es2015/gantt.component.d.ts +112 -17
  53. package/dist/es2015/gantt.component.js +292 -30
  54. package/dist/es2015/gantt.module.js +23 -6
  55. package/dist/es2015/index.d.ts +5 -0
  56. package/dist/es2015/index.js +5 -0
  57. package/dist/es2015/index.metadata.json +1 -1
  58. package/dist/es2015/main.d.ts +1 -0
  59. package/dist/es2015/main.js +1 -0
  60. package/dist/es2015/models/events/dependency-add-event.interface.d.ts +26 -0
  61. package/dist/es2015/models/events/dependency-add-event.interface.js +4 -0
  62. package/dist/es2015/models/events/task-click-event.interface.d.ts +3 -3
  63. package/dist/es2015/models/events/task-delete-event.interface.d.ts +21 -0
  64. package/dist/es2015/models/events/task-delete-event.interface.js +4 -0
  65. package/dist/es2015/models/events/task-edit-event.interface.d.ts +27 -10
  66. package/dist/es2015/models/models.d.ts +4 -0
  67. package/dist/es2015/models/view-item.interface.d.ts +35 -0
  68. package/dist/es2015/models/view-item.interface.js +4 -0
  69. package/dist/es2015/navigation/navigation-models.d.ts +34 -0
  70. package/dist/es2015/navigation/navigation-models.js +4 -0
  71. package/dist/es2015/navigation/navigation.service.d.ts +126 -0
  72. package/dist/es2015/navigation/navigation.service.js +355 -0
  73. package/dist/es2015/navigation/utils.d.ts +26 -0
  74. package/dist/es2015/navigation/utils.js +69 -0
  75. package/dist/es2015/package-metadata.js +1 -1
  76. package/dist/es2015/rendering/gantt-milestone-task.component.d.ts +3 -1
  77. package/dist/es2015/rendering/gantt-milestone-task.component.js +35 -8
  78. package/dist/es2015/rendering/gantt-summary-task.component.d.ts +5 -1
  79. package/dist/es2015/rendering/gantt-summary-task.component.js +47 -8
  80. package/dist/es2015/rendering/gantt-task-base.d.ts +20 -6
  81. package/dist/es2015/rendering/gantt-task-base.js +75 -22
  82. package/dist/es2015/rendering/gantt-task.component.d.ts +4 -2
  83. package/dist/es2015/rendering/gantt-task.component.js +47 -13
  84. package/dist/es2015/rendering/gantt-tasks-table-body.component.d.ts +6 -3
  85. package/dist/es2015/rendering/gantt-tasks-table-body.component.js +27 -9
  86. package/dist/es2015/scrolling/drag-scroll-settings.d.ts +47 -0
  87. package/dist/es2015/scrolling/drag-scroll-settings.js +20 -0
  88. package/dist/es2015/scrolling/scroll-sync.service.d.ts +1 -1
  89. package/dist/es2015/scrolling/timeline-scroll.directive.d.ts +24 -0
  90. package/dist/es2015/scrolling/timeline-scroll.directive.js +78 -0
  91. package/dist/es2015/scrolling/timeline-scroll.service.d.ts +20 -0
  92. package/dist/es2015/scrolling/timeline-scroll.service.js +44 -0
  93. package/dist/es2015/scrolling/utils.d.ts +29 -0
  94. package/dist/es2015/scrolling/utils.js +80 -0
  95. package/dist/es2015/timeline/gantt-timeline.component.d.ts +29 -4
  96. package/dist/es2015/timeline/gantt-timeline.component.js +67 -5
  97. package/dist/es2015/toolbar/toolbar.component.d.ts +4 -5
  98. package/dist/es2015/toolbar/toolbar.component.js +12 -13
  99. package/dist/es2015/toolbar/view-selector.component.js +3 -1
  100. package/dist/es2015/utils.d.ts +77 -8
  101. package/dist/es2015/utils.js +153 -12
  102. package/dist/fesm2015/index.js +3033 -1367
  103. package/dist/fesm5/index.js +2447 -830
  104. package/dist/npm/common/touch-enabled.js +11 -0
  105. package/dist/npm/dependencies/utils.js +34 -0
  106. package/dist/npm/dragging/dependency-drag-create.directive.js +349 -0
  107. package/dist/npm/dragging/drag-validation-tooltip.component.js +29 -0
  108. package/dist/npm/editing/dependencies-table.component.js +1 -1
  109. package/dist/npm/editing/edit-dialog.component.js +3 -3
  110. package/dist/npm/editing/edit.service.js +4 -2
  111. package/dist/npm/editing/task-fields.component.js +1 -1
  112. package/dist/npm/editing/{util.js → utils.js} +0 -0
  113. package/dist/npm/gantt.component.js +315 -30
  114. package/dist/npm/gantt.module.js +22 -5
  115. package/dist/npm/index.js +10 -0
  116. package/dist/npm/main.js +2 -0
  117. package/dist/npm/models/events/dependency-add-event.interface.js +6 -0
  118. package/dist/npm/models/events/task-delete-event.interface.js +6 -0
  119. package/dist/npm/models/view-item.interface.js +6 -0
  120. package/dist/npm/navigation/navigation-models.js +6 -0
  121. package/dist/npm/navigation/navigation.service.js +392 -0
  122. package/dist/npm/navigation/utils.js +79 -0
  123. package/dist/npm/package-metadata.js +1 -1
  124. package/dist/npm/rendering/gantt-milestone-task.component.js +11 -5
  125. package/dist/npm/rendering/gantt-summary-task.component.js +26 -5
  126. package/dist/npm/rendering/gantt-task-base.js +84 -22
  127. package/dist/npm/rendering/gantt-task.component.js +12 -7
  128. package/dist/npm/rendering/gantt-tasks-table-body.component.js +13 -5
  129. package/dist/npm/scrolling/drag-scroll-settings.js +22 -0
  130. package/dist/npm/scrolling/timeline-scroll.directive.js +91 -0
  131. package/dist/npm/scrolling/timeline-scroll.service.js +41 -0
  132. package/dist/npm/scrolling/utils.js +83 -0
  133. package/dist/npm/timeline/gantt-timeline.component.js +49 -3
  134. package/dist/npm/toolbar/toolbar.component.js +10 -11
  135. package/dist/npm/toolbar/view-selector.component.js +1 -1
  136. package/dist/npm/utils.js +153 -12
  137. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  138. package/package.json +23 -21
@@ -10,8 +10,11 @@ import { Subscription } from 'rxjs';
10
10
  import { validatePackage } from '@progress/kendo-licensing';
11
11
  import { packageMetadata } from './package-metadata';
12
12
  import { anyChanged, hasObservers } from '@progress/kendo-angular-common';
13
+ import { GanttTimelineComponent } from './timeline/gantt-timeline.component';
13
14
  import { GanttColumnBase } from './columns/columns';
14
15
  import { fetchChildren, hasChildren, isSelected, rowClassCallback, taskClassCallback } from './common/default-callbacks';
16
+ import { DependencyType } from './models/models';
17
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
15
18
  import { TimelineViewService } from './timeline/timeline-view.service';
16
19
  import { TimelineDayViewService } from './timeline/timeline-day-view.service';
17
20
  import { TimelineWeekViewService } from './timeline/timeline-week-view.service';
@@ -21,18 +24,25 @@ import { DependencyDomService } from './dependencies/dependency-dom.service';
21
24
  import { MappingService } from './common/mapping.service';
22
25
  import { OptionChangesService } from './common/option-changes.service';
23
26
  import { EditService } from './editing/edit.service';
24
- import { LocalizationService } from '@progress/kendo-angular-l10n';
25
- import { getClosestTaskIndex, isClearButton, isColumnGroup, isPresent, isTask, normalizeGanttData, scrollbarWidth } from './utils';
27
+ import { TimelineScrollService } from './scrolling/timeline-scroll.service';
28
+ import { GanttLocalizationService } from './localization/gantt-localization.service';
29
+ import { NavigationService } from './navigation/navigation.service';
30
+ import { areParentChild, getClosestTaskIndex, isClearButton, isColumnGroup, isPresent, isTask, normalizeGanttData, scrollbarWidth } from './utils';
26
31
  import { DEFAULT_TIMELINE_PANE_SETTINGS, DEFAULT_TREELIST_PANE_SETTINGS } from './models/splitter-pane-options.interface';
27
32
  import { GanttTaskTemplateDirective } from './template-directives/task-template.directive';
28
33
  import { GanttSummaryTaskTemplateDirective } from './template-directives/summary-task-template.directive';
29
34
  import { GanttTaskContentTemplateDirective } from './template-directives/task-content-template.directive';
30
35
  import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
31
36
  import { ViewBase } from './timeline/view-base';
32
- import { getEditItem } from './editing/util';
33
- import { GanttLocalizationService } from './localization/gantt-localization.service';
37
+ import { getEditItem } from './editing/utils';
34
38
  var TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
35
39
  var DEFAULT_VIEW = 'week';
40
+ var DEFAULT_DRAG_SCROLL_SETTINGS = {
41
+ enabled: true,
42
+ step: 3,
43
+ interval: 1,
44
+ threshold: 10
45
+ };
36
46
  /**
37
47
  * Represents the Kendo UI Gantt component for Angular.
38
48
  *
@@ -105,7 +115,7 @@ var DEFAULT_VIEW = 'week';
105
115
  * ```
106
116
  */
107
117
  var GanttComponent = /** @class */ (function () {
108
- function GanttComponent(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone) {
118
+ function GanttComponent(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone, navigationService) {
109
119
  var _this = this;
110
120
  this.timelineViewService = timelineViewService;
111
121
  this.scrollSyncService = scrollSyncService;
@@ -117,13 +127,33 @@ var GanttComponent = /** @class */ (function () {
117
127
  this.localizationService = localizationService;
118
128
  this.hostElement = hostElement;
119
129
  this.zone = zone;
130
+ this.navigationService = navigationService;
131
+ /**
132
+ * @hidden
133
+ */
134
+ this.roleDescription = 'Gantt Chart';
135
+ /**
136
+ * @hidden
137
+ */
138
+ this.role = 'application';
120
139
  this.hostClasses = true;
121
140
  /**
122
- * Provides a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection))
141
+ * Specifies a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection)).
123
142
  *
124
143
  * > The [`selectable`]({% slug api_gantt_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
125
144
  */
126
145
  this.isSelected = isSelected;
146
+ /**
147
+ * Specifies a callback that determines if a new dependency is valid.
148
+ * Used when evaluating if an attempt to create a new dependency will result in a valid link between the two tasks
149
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-validation).
150
+ *
151
+ * By defalut, dependencies are deemed invalid when:
152
+ * - The two tasks are in a parent-child relationship.
153
+ * - The two tasks are already dependent on one another. Only one dependency is allowed per pair.
154
+ * - The start or end times of the two tasks are incompatible with the attempted dependency type.
155
+ */
156
+ this.validateNewDependency = this.defaultValidateNewDependencyCallback.bind(this);
127
157
  /**
128
158
  * Fires when the Gantt selection is changed through user interaction.
129
159
  *
@@ -177,6 +207,12 @@ var GanttComponent = /** @class */ (function () {
177
207
  * The end of the work week (index based).
178
208
  */
179
209
  this.workWeekEnd = 5;
210
+ /**
211
+ * If set to `true`, the user can use dedicated shortcuts to interact with the Gantt.
212
+ * By default, navigation is disabled for the TreeList and Timeline parts of the component,
213
+ * ([see example]({% slug keyboard_navigation_gantt %})).
214
+ */
215
+ this.navigable = false;
180
216
  /**
181
217
  * Indicates whether the Gantt columns will be resized during initialization so that they fit their headers and row content.
182
218
  * Columns with autoSize set to false are excluded.
@@ -220,7 +256,8 @@ var GanttComponent = /** @class */ (function () {
220
256
  */
221
257
  this.cellClose = new EventEmitter();
222
258
  /**
223
- * Fires when the end user clicks the `Delete` button in the task editing dialog or the task delete icon.
259
+ * Fires when the end user clicks the `Delete` button in the task editing dialog,
260
+ * the task delete icon, or presses the `Delete` key on the keyboard when a task in the timeline is focused.
224
261
  * Use the event handler to open a confirmation dialog when necessary.
225
262
  */
226
263
  this.taskDelete = new EventEmitter();
@@ -244,6 +281,11 @@ var GanttComponent = /** @class */ (function () {
244
281
  * Fires when the user adds a task.
245
282
  */
246
283
  this.taskAdd = new EventEmitter();
284
+ /**
285
+ * Fires when the user adds a dependency via dragging
286
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-basic-concepts).
287
+ */
288
+ this.dependencyAdd = new EventEmitter();
247
289
  /**
248
290
  * Fires when the sorting of the Gantt is changed.
249
291
  * You have to handle the event yourself and sort the data.
@@ -300,6 +342,15 @@ var GanttComponent = /** @class */ (function () {
300
342
  * Fires when a task is clicked.
301
343
  */
302
344
  this.taskClick = new EventEmitter();
345
+ /**
346
+ * @hidden
347
+ *
348
+ * Specifies whether the dependency drag clues will be rendered.
349
+ * Set internally by the dependency-drag-create directive.
350
+ *
351
+ * @default false
352
+ */
353
+ this.renderDependencyDragClues = false;
303
354
  /**
304
355
  * @hidden
305
356
  *
@@ -316,6 +367,7 @@ var GanttComponent = /** @class */ (function () {
316
367
  this.showConfirmationDialog = false;
317
368
  this._columns = new QueryList();
318
369
  this._data = [];
370
+ this._dragScrollSettings = tslib_1.__assign({}, DEFAULT_DRAG_SCROLL_SETTINGS);
319
371
  this._timelinePaneOptions = tslib_1.__assign({}, DEFAULT_TIMELINE_PANE_SETTINGS);
320
372
  this._treeListPaneOptions = tslib_1.__assign({}, DEFAULT_TREELIST_PANE_SETTINGS);
321
373
  this._rowClass = rowClassCallback;
@@ -340,7 +392,13 @@ var GanttComponent = /** @class */ (function () {
340
392
  }));
341
393
  this.editService.getSelectedItem = this.getFirstSelectedItem.bind(this);
342
394
  this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(function (show) { return _this.showEditingDialog = show; }));
343
- this.editServiceSubscription.add(this.editService.showConfirmationDialog.subscribe(function () { return _this.taskDelete.emit(); }));
395
+ this.editServiceSubscription.add(this.editService.taskDelete.subscribe(function (task) {
396
+ if (hasObservers(_this.taskDelete)) {
397
+ _this.zone.run(function () {
398
+ return _this.notifyTaskDelete(task);
399
+ });
400
+ }
401
+ }));
344
402
  this.editServiceSubscription.add(this.editService.editEvent.subscribe(function (args) {
345
403
  _this[args.editResultType].emit({
346
404
  taskFormGroup: args.taskFormGroup,
@@ -351,6 +409,9 @@ var GanttComponent = /** @class */ (function () {
351
409
  _this.showConfirmationDialog = _this.showEditingDialog = false;
352
410
  _this.editService.dataItem = _this.editService.taskFormGroup = null;
353
411
  _this.updateView();
412
+ if (_this.navigable) {
413
+ _this.focus();
414
+ }
354
415
  }));
355
416
  this.editServiceSubscription.add(this.editService.addEvent.subscribe(function (args) {
356
417
  var selectedItem = _this.getFirstSelectedItem();
@@ -380,6 +441,20 @@ var GanttComponent = /** @class */ (function () {
380
441
  enumerable: true,
381
442
  configurable: true
382
443
  });
444
+ Object.defineProperty(GanttComponent.prototype, "hostRoleDescriptionAttr", {
445
+ get: function () {
446
+ return this.roleDescription;
447
+ },
448
+ enumerable: true,
449
+ configurable: true
450
+ });
451
+ Object.defineProperty(GanttComponent.prototype, "hostRoleAttr", {
452
+ get: function () {
453
+ return this.role;
454
+ },
455
+ enumerable: true,
456
+ configurable: true
457
+ });
383
458
  Object.defineProperty(GanttComponent.prototype, "dir", {
384
459
  get: function () {
385
460
  return this.direction;
@@ -594,6 +669,21 @@ var GanttComponent = /** @class */ (function () {
594
669
  enumerable: true,
595
670
  configurable: true
596
671
  });
672
+ Object.defineProperty(GanttComponent.prototype, "dragScrollSettings", {
673
+ get: function () {
674
+ return this._dragScrollSettings;
675
+ },
676
+ /**
677
+ * Specifies the settings for auto-scrolling during dragging
678
+ * when the pointer moves outside of the container bounderies
679
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-auto-scrolling).
680
+ */
681
+ set: function (settings) {
682
+ this._dragScrollSettings = tslib_1.__assign({}, DEFAULT_DRAG_SCROLL_SETTINGS, settings);
683
+ },
684
+ enumerable: true,
685
+ configurable: true
686
+ });
597
687
  Object.defineProperty(GanttComponent.prototype, "renderedTreeListItems", {
598
688
  /**
599
689
  * @hidden
@@ -607,6 +697,19 @@ var GanttComponent = /** @class */ (function () {
607
697
  enumerable: true,
608
698
  configurable: true
609
699
  });
700
+ Object.defineProperty(GanttComponent.prototype, "viewItems", {
701
+ /**
702
+ * @hidden
703
+ */
704
+ get: function () {
705
+ if (!isPresent(this.treeList)) {
706
+ return [];
707
+ }
708
+ return this.treeList.view.data;
709
+ },
710
+ enumerable: true,
711
+ configurable: true
712
+ });
610
713
  Object.defineProperty(GanttComponent.prototype, "filterMenu", {
611
714
  /**
612
715
  * @hidden
@@ -670,6 +773,16 @@ var GanttComponent = /** @class */ (function () {
670
773
  enumerable: true,
671
774
  configurable: true
672
775
  });
776
+ Object.defineProperty(GanttComponent.prototype, "isInEditMode", {
777
+ /**
778
+ * @hidden
779
+ */
780
+ get: function () {
781
+ return this.showEditingDialog || this.showConfirmationDialog || this.treeList.isEditing();
782
+ },
783
+ enumerable: true,
784
+ configurable: true
785
+ });
673
786
  GanttComponent.prototype.ngOnChanges = function (changes) {
674
787
  if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
675
788
  this.loadTimelineData();
@@ -677,6 +790,14 @@ var GanttComponent = /** @class */ (function () {
677
790
  };
678
791
  GanttComponent.prototype.ngAfterViewInit = function () {
679
792
  this.updateTreeListMargin();
793
+ if (this.navigable) {
794
+ this.navigationService.initialize({
795
+ gantt: this,
796
+ host: this.hostElement.nativeElement,
797
+ treeListElement: this.treeList.wrapper.nativeElement,
798
+ timelineElement: this.timeline.timelineContent.nativeElement
799
+ });
800
+ }
680
801
  var leftContainer = this.treeList.wrapper.nativeElement.querySelector('kendo-treelist-list > div');
681
802
  this.scrollSyncService.registerElement(leftContainer, 'treelist');
682
803
  };
@@ -694,6 +815,34 @@ var GanttComponent = /** @class */ (function () {
694
815
  this.localizationSubscription.unsubscribe();
695
816
  }
696
817
  };
818
+ /**
819
+ * Focuses the last active cell or task in the Gantt.
820
+ * If no item has previously been focused, the first cell of the TreeList part will receive focus,
821
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
822
+ */
823
+ GanttComponent.prototype.focus = function () {
824
+ if (this.navigable) {
825
+ this.navigationService.focusLastActiveItem();
826
+ }
827
+ };
828
+ /**
829
+ * Focuses the targeted cell in the TreeList part of the component,
830
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
831
+ */
832
+ GanttComponent.prototype.focusCell = function (rowIndex, colIndex) {
833
+ if (this.navigable) {
834
+ this.navigationService.focusCell(rowIndex, colIndex);
835
+ }
836
+ };
837
+ /**
838
+ * Focuses the targeted task in the Timeline part of the component,
839
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
840
+ */
841
+ GanttComponent.prototype.focusTask = function (taskIndex) {
842
+ if (this.navigable) {
843
+ this.navigationService.focusTask(taskIndex);
844
+ }
845
+ };
697
846
  /**
698
847
  * Applies the minimum possible width for the specified column,
699
848
  * so that the whole text fits without wrapping. This method expects the Gantt
@@ -783,6 +932,15 @@ var GanttComponent = /** @class */ (function () {
783
932
  GanttComponent.prototype.openConfirmationDialog = function () {
784
933
  this.showConfirmationDialog = true;
785
934
  };
935
+ /**
936
+ * @hidden
937
+ */
938
+ GanttComponent.prototype.handleConfirmationDialogClose = function () {
939
+ this.showConfirmationDialog = false;
940
+ if (this.navigable) {
941
+ this.focus();
942
+ }
943
+ };
786
944
  /**
787
945
  * Opens a cell for editing.
788
946
  */
@@ -868,7 +1026,7 @@ var GanttComponent = /** @class */ (function () {
868
1026
  if (hasObservers(this.taskClick)) {
869
1027
  var taskIndex_1 = getClosestTaskIndex(target, gantt);
870
1028
  var task_1 = this.renderedTreeListItems[taskIndex_1];
871
- this.zone.run(function () { return _this.emitTaskClick(event, task_1, taskIndex_1); });
1029
+ this.zone.run(function () { return _this.notifyTaskClick(event, task_1, taskIndex_1); });
872
1030
  }
873
1031
  };
874
1032
  /**
@@ -887,8 +1045,8 @@ var GanttComponent = /** @class */ (function () {
887
1045
  if ((hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
888
1046
  hasObservers(this.taskClick)) {
889
1047
  this.zone.run(function () {
890
- _this.emitSelectionChange(task, selectionAction);
891
- _this.emitTaskClick(event, task, taskIndex);
1048
+ _this.notifySelectionChange(task, selectionAction);
1049
+ _this.notifyTaskClick(event, task, taskIndex);
892
1050
  });
893
1051
  }
894
1052
  };
@@ -926,7 +1084,7 @@ var GanttComponent = /** @class */ (function () {
926
1084
  }
927
1085
  var task = event.items.map(function (item) { return item.dataItem; })[0]; // single selection only currently available
928
1086
  var action = event.action;
929
- this.emitSelectionChange(task, action);
1087
+ this.notifySelectionChange(task, action);
930
1088
  };
931
1089
  /**
932
1090
  * @hidden
@@ -978,7 +1136,7 @@ var GanttComponent = /** @class */ (function () {
978
1136
  dataItem: task_2,
979
1137
  originalEvent: event,
980
1138
  sender: _this,
981
- rowIndex: taskIndex_2,
1139
+ index: taskIndex_2,
982
1140
  type: 'dblclick'
983
1141
  }); });
984
1142
  }
@@ -989,16 +1147,35 @@ var GanttComponent = /** @class */ (function () {
989
1147
  GanttComponent.prototype.getText = function (token) {
990
1148
  return this.localizationService.get(token);
991
1149
  };
992
- GanttComponent.prototype.emitTaskClick = function (event, dataItem, itemIndex) {
1150
+ /**
1151
+ * @hidden
1152
+ */
1153
+ GanttComponent.prototype.changeActiveView = function (view) {
1154
+ if (view !== this.activeView) {
1155
+ this.activeView = view;
1156
+ this.loadTimelineData();
1157
+ this.scrollSyncService.resetTimelineScrollLeft();
1158
+ this.activeViewChange.emit(view);
1159
+ }
1160
+ };
1161
+ /**
1162
+ * @hidden
1163
+ */
1164
+ GanttComponent.prototype.notifyTaskClick = function (event, dataItem, itemIndex) {
1165
+ // simulates the TreeList `cellClick` event triggered by enter press (type: 'click')
1166
+ var type = event instanceof KeyboardEvent ? 'click' : event.type;
993
1167
  this.taskClick.emit({
994
1168
  originalEvent: event,
995
1169
  dataItem: dataItem,
996
- rowIndex: itemIndex,
997
- type: event.type,
1170
+ index: itemIndex,
1171
+ type: type,
998
1172
  sender: this
999
1173
  });
1000
1174
  };
1001
- GanttComponent.prototype.emitSelectionChange = function (dataItem, action) {
1175
+ /**
1176
+ * @hidden
1177
+ */
1178
+ GanttComponent.prototype.notifySelectionChange = function (dataItem, action) {
1002
1179
  if (this.isSameSelection(action, dataItem)) {
1003
1180
  return;
1004
1181
  }
@@ -1009,6 +1186,30 @@ var GanttComponent = /** @class */ (function () {
1009
1186
  });
1010
1187
  this.treeList.updateView();
1011
1188
  };
1189
+ /**
1190
+ * @hidden
1191
+ */
1192
+ GanttComponent.prototype.notifyTaskDelete = function (task) {
1193
+ this.editService.dataItem = task;
1194
+ this.taskDelete.emit({
1195
+ item: getEditItem(task, this.treeList.view.data, this.mapper),
1196
+ sender: this
1197
+ });
1198
+ };
1199
+ /**
1200
+ * @hidden
1201
+ */
1202
+ GanttComponent.prototype.isSameSelection = function (action, dataItem) {
1203
+ return action === 'select' && this.isSelected(dataItem);
1204
+ };
1205
+ /**
1206
+ * @hidden
1207
+ */
1208
+ GanttComponent.prototype.getSelectionAction = function (_a, dataItem) {
1209
+ var ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
1210
+ var shouldToggleSelection = ctrlKey || metaKey;
1211
+ return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
1212
+ };
1012
1213
  GanttComponent.prototype.updateTreeListGroupClass = function (columns) {
1013
1214
  if (columns === void 0) { columns = this.columns; }
1014
1215
  if (!isPresent(this.treeList)) {
@@ -1039,24 +1240,70 @@ var GanttComponent = /** @class */ (function () {
1039
1240
  }
1040
1241
  return this.views.find(function (view) { return view.type === _this.activeView; });
1041
1242
  };
1042
- GanttComponent.prototype.isSameSelection = function (action, dataItem) {
1043
- return action === 'select' && this.isSelected(dataItem);
1044
- };
1045
- GanttComponent.prototype.getSelectionAction = function (_a, dataItem) {
1046
- var ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
1047
- var shouldToggleSelection = ctrlKey || metaKey;
1048
- return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
1049
- };
1050
1243
  GanttComponent.prototype.getFirstSelectedItem = function () {
1051
1244
  var isSelectedCallback = this.isSelected || isSelected;
1052
1245
  var loadedItems = this.renderedTreeListItems || [];
1053
1246
  return loadedItems.find(isSelectedCallback);
1054
1247
  };
1248
+ GanttComponent.prototype.defaultValidateNewDependencyCallback = function (dependency) {
1249
+ var _this = this;
1250
+ var fromTaskId = this.mapper.extractFromDependency(dependency, 'fromId');
1251
+ var toTaskId = this.mapper.extractFromDependency(dependency, 'toId');
1252
+ var fromTask = this.treeList.view.data.find(function (task) {
1253
+ return _this.mapper.extractFromTask(task.data, 'id') === fromTaskId;
1254
+ });
1255
+ var toTask = this.treeList.view.data.find(function (task) {
1256
+ return _this.mapper.extractFromTask(task.data, 'id') === toTaskId;
1257
+ });
1258
+ // mark as invalid if the attempted dependency is lacking valid from- and to-tasks
1259
+ // or when the from- and to-tasks are actually the same task
1260
+ if (!isPresent(fromTask) || !isPresent(fromTask.data) ||
1261
+ !isPresent(toTask) || !isPresent(toTask.data) ||
1262
+ fromTask.data === toTask.data) {
1263
+ return false;
1264
+ }
1265
+ var tasksDependentOnOneAnother = this.dependencies.some(function (current) {
1266
+ var currentFromId = _this.mapper.extractFromDependency(current, 'fromId');
1267
+ var currentToId = _this.mapper.extractFromDependency(current, 'toId');
1268
+ return (fromTaskId === currentFromId && toTaskId === currentToId) ||
1269
+ (toTaskId === currentFromId && fromTaskId === currentToId);
1270
+ });
1271
+ // mark as invalid if the attempted dependency is trying to connect already dependent tasks
1272
+ // mark as invalid if the two tasks are in parent-child relationship
1273
+ if (tasksDependentOnOneAnother || areParentChild(fromTask, toTask)) {
1274
+ return false;
1275
+ }
1276
+ var fromTaskStart = this.mapper.extractFromTask(fromTask.data, 'start');
1277
+ var fromTaskEnd = this.mapper.extractFromTask(fromTask.data, 'end');
1278
+ var toTaskStart = this.mapper.extractFromTask(toTask.data, 'start');
1279
+ var toTaskEnd = this.mapper.extractFromTask(toTask.data, 'end');
1280
+ // if the two tasks are available to be connected via a dependency,
1281
+ // check if their start and end time allow for the attempted dependency type
1282
+ switch (this.mapper.extractFromDependency(dependency, 'type')) {
1283
+ // finish to finish (FF) — the from-task ends before the to-task can end
1284
+ case DependencyType.FF:
1285
+ return fromTaskEnd <= toTaskEnd;
1286
+ // finish to start (FS) — the from-task ends before the to-task can begin
1287
+ case DependencyType.FS:
1288
+ return fromTaskEnd <= toTaskStart;
1289
+ // start to finish (SF) — the from-task begins before the to-task can end
1290
+ case DependencyType.SF:
1291
+ return fromTaskStart <= toTaskEnd;
1292
+ // start to start (SS) — the from-task begins before the to-task can begin
1293
+ case DependencyType.SS:
1294
+ return fromTaskStart <= toTaskStart;
1295
+ default: return false;
1296
+ }
1297
+ };
1055
1298
  var GanttComponent_1;
1056
1299
  tslib_1.__decorate([
1057
1300
  ViewChild(TreeListComponent, { static: true }),
1058
1301
  tslib_1.__metadata("design:type", TreeListComponent)
1059
1302
  ], GanttComponent.prototype, "treeList", void 0);
1303
+ tslib_1.__decorate([
1304
+ ViewChild(GanttTimelineComponent, { static: false }),
1305
+ tslib_1.__metadata("design:type", GanttTimelineComponent)
1306
+ ], GanttComponent.prototype, "timeline", void 0);
1060
1307
  tslib_1.__decorate([
1061
1308
  ContentChild(GanttTaskContentTemplateDirective, { static: true }),
1062
1309
  tslib_1.__metadata("design:type", GanttTaskContentTemplateDirective)
@@ -1073,6 +1320,24 @@ var GanttComponent = /** @class */ (function () {
1073
1320
  ContentChildren(ToolbarTemplateDirective),
1074
1321
  tslib_1.__metadata("design:type", QueryList)
1075
1322
  ], GanttComponent.prototype, "toolbarTemplateChildren", void 0);
1323
+ tslib_1.__decorate([
1324
+ Input('aria-roledescription'),
1325
+ tslib_1.__metadata("design:type", String)
1326
+ ], GanttComponent.prototype, "roleDescription", void 0);
1327
+ tslib_1.__decorate([
1328
+ HostBinding('attr.aria-roledescription'),
1329
+ tslib_1.__metadata("design:type", String),
1330
+ tslib_1.__metadata("design:paramtypes", [])
1331
+ ], GanttComponent.prototype, "hostRoleDescriptionAttr", null);
1332
+ tslib_1.__decorate([
1333
+ Input('role'),
1334
+ tslib_1.__metadata("design:type", String)
1335
+ ], GanttComponent.prototype, "role", void 0);
1336
+ tslib_1.__decorate([
1337
+ HostBinding('attr.role'),
1338
+ tslib_1.__metadata("design:type", String),
1339
+ tslib_1.__metadata("design:paramtypes", [])
1340
+ ], GanttComponent.prototype, "hostRoleAttr", null);
1076
1341
  tslib_1.__decorate([
1077
1342
  HostBinding('class.k-gantt'),
1078
1343
  tslib_1.__metadata("design:type", Boolean)
@@ -1115,6 +1380,10 @@ var GanttComponent = /** @class */ (function () {
1115
1380
  Input(),
1116
1381
  tslib_1.__metadata("design:type", Function)
1117
1382
  ], GanttComponent.prototype, "isSelected", void 0);
1383
+ tslib_1.__decorate([
1384
+ Input(),
1385
+ tslib_1.__metadata("design:type", Function)
1386
+ ], GanttComponent.prototype, "validateNewDependency", void 0);
1118
1387
  tslib_1.__decorate([
1119
1388
  Output(),
1120
1389
  tslib_1.__metadata("design:type", EventEmitter)
@@ -1174,6 +1443,10 @@ var GanttComponent = /** @class */ (function () {
1174
1443
  Input(),
1175
1444
  tslib_1.__metadata("design:type", Number)
1176
1445
  ], GanttComponent.prototype, "workWeekEnd", void 0);
1446
+ tslib_1.__decorate([
1447
+ Input(),
1448
+ tslib_1.__metadata("design:type", Boolean)
1449
+ ], GanttComponent.prototype, "navigable", void 0);
1177
1450
  tslib_1.__decorate([
1178
1451
  Input(),
1179
1452
  tslib_1.__metadata("design:type", Object),
@@ -1214,6 +1487,11 @@ var GanttComponent = /** @class */ (function () {
1214
1487
  Input(),
1215
1488
  tslib_1.__metadata("design:type", Boolean)
1216
1489
  ], GanttComponent.prototype, "columnsResizable", void 0);
1490
+ tslib_1.__decorate([
1491
+ Input(),
1492
+ tslib_1.__metadata("design:type", Object),
1493
+ tslib_1.__metadata("design:paramtypes", [Object])
1494
+ ], GanttComponent.prototype, "dragScrollSettings", null);
1217
1495
  tslib_1.__decorate([
1218
1496
  Output(),
1219
1497
  tslib_1.__metadata("design:type", EventEmitter)
@@ -1254,6 +1532,10 @@ var GanttComponent = /** @class */ (function () {
1254
1532
  Output(),
1255
1533
  tslib_1.__metadata("design:type", EventEmitter)
1256
1534
  ], GanttComponent.prototype, "taskAdd", void 0);
1535
+ tslib_1.__decorate([
1536
+ Output(),
1537
+ tslib_1.__metadata("design:type", EventEmitter)
1538
+ ], GanttComponent.prototype, "dependencyAdd", void 0);
1257
1539
  tslib_1.__decorate([
1258
1540
  Output(),
1259
1541
  tslib_1.__metadata("design:type", EventEmitter)
@@ -1329,9 +1611,11 @@ var GanttComponent = /** @class */ (function () {
1329
1611
  DependencyDomService,
1330
1612
  MappingService,
1331
1613
  OptionChangesService,
1332
- EditService
1614
+ EditService,
1615
+ TimelineScrollService,
1616
+ NavigationService
1333
1617
  ],
1334
- template: "\n <ng-container kendoGanttLocalizedMessages\n i18n-taskEditingGeneralTabTitle=\"kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip\"\n taskEditingGeneralTabTitle=\"General\"\n\n i18n-taskEditingPredecessorsTabTitle=\"kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip\"\n taskEditingPredecessorsTabTitle=\"Predecessors\"\n\n i18n-taskEditingSuccessorsTabTitle=\"kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip\"\n taskEditingSuccessorsTabTitle=\"Successors\"\n\n i18n-taskEditingDependenciesAddButtonText=\"kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesAddButtonText=\"Add\"\n\n i18n-taskEditingDependenciesRemoveButtonText=\"kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesRemoveButtonText=\"Remove\"\n\n i18n-taskEditingDependenciesGridNameColumnTitle=\"kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridNameColumnTitle=\"Task Title\"\n\n i18n-taskEditingDependenciesGridTypeColumnTitle=\"kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridTypeColumnTitle=\"Type\"\n\n i18n-taskDeleteLabel=\"kendo.gantt.taskDeleteLabel|The label of the task delete icon\"\n taskDeleteLabel=\"Delete\"\n\n i18n-taskEditingDialogTitle=\"kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog\"\n taskEditingDialogTitle=\"Editing Task\"\n\n i18n-taskEditingDialogCloseTitle=\"kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button\"\n taskEditingDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogCloseTitle=\"kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button\"\n confirmationDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogTitle=\"kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog\"\n confirmationDialogTitle=\"Delete Task\"\n\n i18n-confirmationDialogContent=\"kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog\"\n confirmationDialogContent=\"Are you sure you want to delete this task?\"\n\n i18n-deleteButtonText=\"kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button\"\n deleteButtonText=\"Delete\"\n\n i18n-cancelButtonText=\"kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button\"\n cancelButtonText=\"Cancel\"\n\n i18n-saveButtonText=\"kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button\"\n saveButtonText=\"Save\"\n\n i18n-titleFieldInputLabel=\"kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode\"\n titleFieldInputLabel=\"Title\"\n\n i18n-startFieldInputLabel=\"kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode\"\n startFieldInputLabel=\"Start\"\n\n i18n-endFieldInputLabel=\"kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode\"\n endFieldInputLabel=\"End\"\n\n i18n-completionRatioFieldInputLabel=\"kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode\"\n completionRatioFieldInputLabel=\"Progress\"\n\n i18n-dayViewText=\"kendo.gantt.dayViewText|The text of the day view in the ViewSelector component\"\n dayViewText=\"Day\"\n\n i18n-weekViewText=\"kendo.gantt.weekViewText|The text of the week view in the ViewSelector component\"\n weekViewText=\"Week\"\n\n i18n-monthViewText=\"kendo.gantt.monthViewText|The text of the month view in the ViewSelector component\"\n monthViewText=\"Month\"\n\n i18n-yearViewText-disabled=\"kendo.gantt.yearViewText|The text of the year view in the ViewSelector component\"\n yearViewText=\"Year\"\n\n i18n-addTaskText=\"kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component\"\n addTaskText=\"Add Task\"\n\n i18n-addChildText=\"kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component\"\n addChildText=\"Add Child\"\n\n i18n-addAboveText=\"kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component\"\n addAboveText=\"Add Above\"\n\n i18n-addBelowText=\"kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component\"\n addBelowText=\"Add Below\"\n\n i18n-noRecords=\"kendo.gantt.noRecords|The label visible in the TreeList when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-filter=\"kendo.gantt.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterEqOperator=\"kendo.gantt.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.gantt.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.gantt.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.gantt.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.gantt.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.gantt.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.gantt.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.gantt.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.gantt.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.gantt.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.gantt.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.gantt.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.gantt.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.gantt.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-columnMenu=\"kendo.gantt.columnMenu|The title of the column menu icon\"\n columnMenu=\"Column Menu\"\n\n i18n-columns=\"kendo.gantt.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock-disabled=\"kendo.gantt.lock|The text shown in the column menu for the lock item\"\n lock-disabled=\"Lock\"\n\n i18n-unlock-disabled=\"kendo.gantt.unlock|The text shown in the column menu for the unlock item\"\n unlock-disabled=\"Unlock\"\n\n i18n-sortable=\"kendo.gantt.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.gantt.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"></ng-container>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('top')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-header k-toolbar k-gantt-toolbar\"\n position=\"top\"></kendo-gantt-toolbar>\n <div class=\"k-gantt-content\">\n <kendo-splitter [style.border]=\"0\">\n <kendo-splitter-pane\n class=\"k-gantt-treelist k-gantt-treelist-scrollable\"\n [collapsible]=\"treeListPaneOptions?.collapsible\"\n [collapsed]=\"treeListPaneOptions?.collapsed\"\n (collapsedChange)=\"onTreeListCollapsedChange($event)\"\n [scrollable]=\"false\">\n <kendo-treelist\n [idField]=\"taskIdField\"\n [columns]=\"columns\"\n [data]=\"data\"\n [hasChildren]=\"hasChildren\"\n [fetchChildren]=\"fetchChildren\"\n [isExpanded]=\"isExpanded\"\n [autoSize]=\"columnsAutoSize\"\n [columnMenu]=\"columnMenu\"\n [reorderable]=\"columnsReorderable\"\n [resizable]=\"columnsResizable\"\n [rowClass]=\"rowClass\"\n [isSelected]=\"isSelected\"\n [selectable]=\"selectable\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n [filterable]=\"filterMenu\"\n [filter]=\"filter\"\n (filterChange)=\"filterChange.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (dataStateChange)=\"dataStateChange.emit({\n filter: $event.filter,\n sort: $event.sort\n })\"\n (expandStateChange)=\"expandStateChange.emit($event)\"\n (expand)=\"rowExpand.emit({ dataItem: $event.dataItem })\"\n (collapse)=\"rowCollapse.emit({ dataItem: $event.dataItem })\"\n (columnReorder)=\"columnReorder.emit($event)\"\n (columnResize)=\"columnResize.emit($event)\"\n (columnVisibilityChange)=\"handleColumnVisibilityChange($event)\"\n (columnLockedChange)=\"columnLockedChange.emit($event)\"\n (selectionChange)=\"handleTreeListSelectionChange($event)\"\n (cellClick)=\"handleTreeListCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleTreeListDoubleClick\n }\"\n [scope]=\"this\"\n >\n <kendo-treelist-messages\n [noRecords]=\"getText('noRecords')\"\n [filter]=\"getText('filter')\"\n [filterEqOperator]=\"getText('filterEqOperator')\"\n [filterNotEqOperator]=\"getText('filterNotEqOperator')\"\n [filterIsNullOperator]=\"getText('filterIsNullOperator')\"\n [filterIsNotNullOperator]=\"getText('filterIsNotNullOperator')\"\n [filterIsEmptyOperator]=\"getText('filterIsEmptyOperator')\"\n [filterIsNotEmptyOperator]=\"getText('filterIsNotEmptyOperator')\"\n [filterStartsWithOperator]=\"getText('filterStartsWithOperator')\"\n [filterContainsOperator]=\"getText('filterContainsOperator')\"\n [filterNotContainsOperator]=\"getText('filterNotContainsOperator')\"\n [filterEndsWithOperator]=\"getText('filterEndsWithOperator')\"\n [filterGteOperator]=\"getText('filterGteOperator')\"\n [filterGtOperator]=\"getText('filterGtOperator')\"\n [filterLteOperator]=\"getText('filterLteOperator')\"\n [filterLtOperator]=\"getText('filterLtOperator')\"\n [filterIsTrue]=\"getText('filterIsTrue')\"\n [filterIsFalse]=\"getText('filterIsFalse')\"\n [filterBooleanAll]=\"getText('filterBooleanAll')\"\n [filterAfterOrEqualOperator]=\"getText('filterAfterOrEqualOperator')\"\n [filterAfterOperator]=\"getText('filterAfterOperator')\"\n [filterBeforeOperator]=\"getText('filterBeforeOperator')\"\n [filterBeforeOrEqualOperator]=\"getText('filterBeforeOrEqualOperator')\"\n [filterFilterButton]=\"getText('filterFilterButton')\"\n [filterClearButton]=\"getText('filterClearButton')\"\n [filterAndLogic]=\"getText('filterAndLogic')\"\n [filterOrLogic]=\"getText('filterOrLogic')\"\n [loading]=\"getText('loading')\"\n [columnMenu]=\"getText('columnMenu')\"\n [columns]=\"getText('columns')\"\n [sortable]=\"getText('sortable')\"\n [sortAscending]=\"getText('sortAscending')\"\n [sortDescending]=\"getText('sortDescending')\"\n [sortedAscending]=\"getText('sortedAscending')\"\n [sortedDescending]=\"getText('sortedDescending')\"\n [sortedDefault]=\"getText('sortedDefault')\"\n [columnsApply]=\"getText('columnsApply')\"\n [columnsReset]=\"getText('columnsReset')\"\n >\n </kendo-treelist-messages>\n </kendo-treelist>\n </kendo-splitter-pane>\n <kendo-splitter-pane\n [collapsible]=\"timelinePaneOptions?.collapsible\"\n [resizable]=\"timelinePaneOptions?.resizable\"\n [collapsed]=\"timelinePaneOptions?.collapsed\"\n [min]=\"timelinePaneOptions?.min\"\n [max]=\"timelinePaneOptions?.max\"\n [size]=\"timelinePaneOptions?.size\"\n (collapsedChange)=\"onTimelineCollapsedChange($event)\"\n (sizeChange)=\"onTimelinePaneSizeChange($event)\"\n [scrollable]=\"false\">\n <kendo-gantt-timeline\n *ngIf=\"views && views.length\"\n [rows]=\"renderedTreeListItems\"\n [slots]=\"timelineSlots\"\n [groupSlots]=\"timelineGroupSlots\"\n [tableWidth]=\"tableWidth\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate?.templateRef\"\n [taskTemplate]=\"taskTemplate?.templateRef\"\n [summaryTaskTemplate]=\"summaryTaskTemplate?.templateRef\"\n [taskClass]=\"taskClass\"\n [dependencies]=\"dependencies\"\n [hasChildren]=\"hasChildren\"\n [isTaskSelected]=\"isTaskSelected\"\n [kendoEventsOutsideAngular]=\"{\n click: handleTimelineClick,\n contextmenu: handleTimelineRightClick,\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n [scope]=\"this\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog\n *ngIf=\"showEditingDialog\"\n [data]=\"data\">\n </kendo-gantt-edit-dialog>\n <kendo-dialog\n *ngIf=\"showConfirmationDialog\"\n [width]=\"575\"\n [height]=\"170\"\n [title]=\"getText('confirmationDialogTitle')\"\n (close)=\"showConfirmationDialog = false;\">\n <span>{{ getText('confirmationDialogContent') }}</span>\n <kendo-dialog-actions layout=\"normal\">\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleDeleteConfirmation()\">{{ getText('deleteButtonText') }}</button>\n <button kendoButton (click)=\"showConfirmationDialog = false;\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
1618
+ template: "\n <ng-container kendoGanttLocalizedMessages\n i18n-taskEditingGeneralTabTitle=\"kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip\"\n taskEditingGeneralTabTitle=\"General\"\n\n i18n-taskEditingPredecessorsTabTitle=\"kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip\"\n taskEditingPredecessorsTabTitle=\"Predecessors\"\n\n i18n-taskEditingSuccessorsTabTitle=\"kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip\"\n taskEditingSuccessorsTabTitle=\"Successors\"\n\n i18n-taskEditingDependenciesAddButtonText=\"kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesAddButtonText=\"Add\"\n\n i18n-taskEditingDependenciesRemoveButtonText=\"kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesRemoveButtonText=\"Remove\"\n\n i18n-taskEditingDependenciesGridNameColumnTitle=\"kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridNameColumnTitle=\"Task Title\"\n\n i18n-taskEditingDependenciesGridTypeColumnTitle=\"kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridTypeColumnTitle=\"Type\"\n\n i18n-taskDeleteLabel=\"kendo.gantt.taskDeleteLabel|The label of the task delete icon\"\n taskDeleteLabel=\"Delete\"\n\n i18n-taskEditingDialogTitle=\"kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog\"\n taskEditingDialogTitle=\"Editing Task\"\n\n i18n-taskEditingDialogCloseTitle=\"kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button\"\n taskEditingDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogCloseTitle=\"kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button\"\n confirmationDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogTitle=\"kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog\"\n confirmationDialogTitle=\"Delete Task\"\n\n i18n-confirmationDialogContent=\"kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog\"\n confirmationDialogContent=\"Are you sure you want to delete this task?\"\n\n i18n-deleteButtonText=\"kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button\"\n deleteButtonText=\"Delete\"\n\n i18n-cancelButtonText=\"kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button\"\n cancelButtonText=\"Cancel\"\n\n i18n-saveButtonText=\"kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button\"\n saveButtonText=\"Save\"\n\n i18n-titleFieldInputLabel=\"kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode\"\n titleFieldInputLabel=\"Title\"\n\n i18n-startFieldInputLabel=\"kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode\"\n startFieldInputLabel=\"Start\"\n\n i18n-endFieldInputLabel=\"kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode\"\n endFieldInputLabel=\"End\"\n\n i18n-completionRatioFieldInputLabel=\"kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode\"\n completionRatioFieldInputLabel=\"Progress\"\n\n i18n-dayViewText=\"kendo.gantt.dayViewText|The text of the day view in the ViewSelector component\"\n dayViewText=\"Day\"\n\n i18n-weekViewText=\"kendo.gantt.weekViewText|The text of the week view in the ViewSelector component\"\n weekViewText=\"Week\"\n\n i18n-monthViewText=\"kendo.gantt.monthViewText|The text of the month view in the ViewSelector component\"\n monthViewText=\"Month\"\n\n i18n-yearViewText-disabled=\"kendo.gantt.yearViewText|The text of the year view in the ViewSelector component\"\n yearViewText=\"Year\"\n\n i18n-addTaskText=\"kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component\"\n addTaskText=\"Add Task\"\n\n i18n-addChildText=\"kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component\"\n addChildText=\"Add Child\"\n\n i18n-addAboveText=\"kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component\"\n addAboveText=\"Add Above\"\n\n i18n-addBelowText=\"kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component\"\n addBelowText=\"Add Below\"\n\n i18n-noRecords=\"kendo.gantt.noRecords|The label visible in the TreeList when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-filter=\"kendo.gantt.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterEqOperator=\"kendo.gantt.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.gantt.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.gantt.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.gantt.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.gantt.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.gantt.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.gantt.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.gantt.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.gantt.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.gantt.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.gantt.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.gantt.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.gantt.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.gantt.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-columnMenu=\"kendo.gantt.columnMenu|The title of the column menu icon\"\n columnMenu=\"Column Menu\"\n\n i18n-columns=\"kendo.gantt.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock-disabled=\"kendo.gantt.lock|The text shown in the column menu for the lock item\"\n lock-disabled=\"Lock\"\n\n i18n-unlock-disabled=\"kendo.gantt.unlock|The text shown in the column menu for the unlock item\"\n unlock-disabled=\"Unlock\"\n\n i18n-sortable=\"kendo.gantt.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.gantt.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"></ng-container>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('top')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-header k-toolbar k-gantt-toolbar\"\n position=\"top\"></kendo-gantt-toolbar>\n <div class=\"k-gantt-content\">\n <kendo-splitter [style.border]=\"0\">\n <kendo-splitter-pane\n class=\"k-gantt-treelist k-gantt-treelist-scrollable\"\n [collapsible]=\"treeListPaneOptions?.collapsible\"\n [collapsed]=\"treeListPaneOptions?.collapsed\"\n (collapsedChange)=\"onTreeListCollapsedChange($event)\"\n [scrollable]=\"false\">\n <kendo-treelist\n [idField]=\"taskIdField\"\n [columns]=\"columns\"\n [data]=\"data\"\n [hasChildren]=\"hasChildren\"\n [fetchChildren]=\"fetchChildren\"\n [navigable]=\"navigable\"\n [isExpanded]=\"isExpanded\"\n [autoSize]=\"columnsAutoSize\"\n [columnMenu]=\"columnMenu\"\n [reorderable]=\"columnsReorderable\"\n [resizable]=\"columnsResizable\"\n [rowClass]=\"rowClass\"\n [isSelected]=\"isSelected\"\n [selectable]=\"selectable\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n [filterable]=\"filterMenu\"\n [filter]=\"filter\"\n (filterChange)=\"filterChange.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (dataStateChange)=\"dataStateChange.emit({\n filter: $event.filter,\n sort: $event.sort\n })\"\n (expandStateChange)=\"expandStateChange.emit($event)\"\n (expand)=\"rowExpand.emit({ dataItem: $event.dataItem })\"\n (collapse)=\"rowCollapse.emit({ dataItem: $event.dataItem })\"\n (columnReorder)=\"columnReorder.emit($event)\"\n (columnResize)=\"columnResize.emit($event)\"\n (columnVisibilityChange)=\"handleColumnVisibilityChange($event)\"\n (columnLockedChange)=\"columnLockedChange.emit($event)\"\n (selectionChange)=\"handleTreeListSelectionChange($event)\"\n (cellClick)=\"handleTreeListCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleTreeListDoubleClick\n }\"\n [scope]=\"this\"\n >\n <kendo-treelist-messages\n [noRecords]=\"getText('noRecords')\"\n [filter]=\"getText('filter')\"\n [filterEqOperator]=\"getText('filterEqOperator')\"\n [filterNotEqOperator]=\"getText('filterNotEqOperator')\"\n [filterIsNullOperator]=\"getText('filterIsNullOperator')\"\n [filterIsNotNullOperator]=\"getText('filterIsNotNullOperator')\"\n [filterIsEmptyOperator]=\"getText('filterIsEmptyOperator')\"\n [filterIsNotEmptyOperator]=\"getText('filterIsNotEmptyOperator')\"\n [filterStartsWithOperator]=\"getText('filterStartsWithOperator')\"\n [filterContainsOperator]=\"getText('filterContainsOperator')\"\n [filterNotContainsOperator]=\"getText('filterNotContainsOperator')\"\n [filterEndsWithOperator]=\"getText('filterEndsWithOperator')\"\n [filterGteOperator]=\"getText('filterGteOperator')\"\n [filterGtOperator]=\"getText('filterGtOperator')\"\n [filterLteOperator]=\"getText('filterLteOperator')\"\n [filterLtOperator]=\"getText('filterLtOperator')\"\n [filterIsTrue]=\"getText('filterIsTrue')\"\n [filterIsFalse]=\"getText('filterIsFalse')\"\n [filterBooleanAll]=\"getText('filterBooleanAll')\"\n [filterAfterOrEqualOperator]=\"getText('filterAfterOrEqualOperator')\"\n [filterAfterOperator]=\"getText('filterAfterOperator')\"\n [filterBeforeOperator]=\"getText('filterBeforeOperator')\"\n [filterBeforeOrEqualOperator]=\"getText('filterBeforeOrEqualOperator')\"\n [filterFilterButton]=\"getText('filterFilterButton')\"\n [filterClearButton]=\"getText('filterClearButton')\"\n [filterAndLogic]=\"getText('filterAndLogic')\"\n [filterOrLogic]=\"getText('filterOrLogic')\"\n [loading]=\"getText('loading')\"\n [columnMenu]=\"getText('columnMenu')\"\n [columns]=\"getText('columns')\"\n [sortable]=\"getText('sortable')\"\n [sortAscending]=\"getText('sortAscending')\"\n [sortDescending]=\"getText('sortDescending')\"\n [sortedAscending]=\"getText('sortedAscending')\"\n [sortedDescending]=\"getText('sortedDescending')\"\n [sortedDefault]=\"getText('sortedDefault')\"\n [columnsApply]=\"getText('columnsApply')\"\n [columnsReset]=\"getText('columnsReset')\"\n >\n </kendo-treelist-messages>\n </kendo-treelist>\n </kendo-splitter-pane>\n <kendo-splitter-pane\n [collapsible]=\"timelinePaneOptions?.collapsible\"\n [resizable]=\"timelinePaneOptions?.resizable\"\n [collapsed]=\"timelinePaneOptions?.collapsed\"\n [min]=\"timelinePaneOptions?.min\"\n [max]=\"timelinePaneOptions?.max\"\n [size]=\"timelinePaneOptions?.size\"\n (collapsedChange)=\"onTimelineCollapsedChange($event)\"\n (sizeChange)=\"onTimelinePaneSizeChange($event)\"\n [scrollable]=\"false\">\n <kendo-gantt-timeline\n *ngIf=\"views && views.length\"\n [renderDependencyDragClues]=\"renderDependencyDragClues\"\n [dragScrollSettings]=\"dragScrollSettings\"\n [rows]=\"viewItems\"\n [slots]=\"timelineSlots\"\n [groupSlots]=\"timelineGroupSlots\"\n [tableWidth]=\"tableWidth\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate?.templateRef\"\n [taskTemplate]=\"taskTemplate?.templateRef\"\n [summaryTaskTemplate]=\"summaryTaskTemplate?.templateRef\"\n [taskClass]=\"taskClass\"\n [dependencies]=\"dependencies\"\n [isExpanded]=\"isExpanded\"\n [selectable]=\"selectable\"\n [isTaskSelected]=\"isTaskSelected\"\n [kendoEventsOutsideAngular]=\"{\n click: handleTimelineClick,\n contextmenu: handleTimelineRightClick,\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n [scope]=\"this\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog\n *ngIf=\"showEditingDialog\"\n [data]=\"data\">\n </kendo-gantt-edit-dialog>\n <kendo-dialog\n *ngIf=\"showConfirmationDialog\"\n [width]=\"575\"\n [height]=\"170\"\n [title]=\"getText('confirmationDialogTitle')\"\n (close)=\"handleConfirmationDialogClose()\">\n <span>{{ getText('confirmationDialogContent') }}</span>\n <kendo-dialog-actions layout=\"normal\">\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleDeleteConfirmation()\">{{ getText('deleteButtonText') }}</button>\n <button kendoButton (click)=\"handleConfirmationDialogClose()\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
1335
1619
  }),
1336
1620
  tslib_1.__metadata("design:paramtypes", [TimelineViewService,
1337
1621
  ScrollSyncService,
@@ -1342,7 +1626,8 @@ var GanttComponent = /** @class */ (function () {
1342
1626
  EditService,
1343
1627
  LocalizationService,
1344
1628
  ElementRef,
1345
- NgZone])
1629
+ NgZone,
1630
+ NavigationService])
1346
1631
  ], GanttComponent);
1347
1632
  return GanttComponent;
1348
1633
  }());