@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
@@ -12,8 +12,11 @@ var rxjs_1 = require("rxjs");
12
12
  var kendo_licensing_1 = require("@progress/kendo-licensing");
13
13
  var package_metadata_1 = require("./package-metadata");
14
14
  var kendo_angular_common_1 = require("@progress/kendo-angular-common");
15
+ var gantt_timeline_component_1 = require("./timeline/gantt-timeline.component");
15
16
  var columns_1 = require("./columns/columns");
16
17
  var default_callbacks_1 = require("./common/default-callbacks");
18
+ var models_1 = require("./models/models");
19
+ var kendo_angular_l10n_1 = require("@progress/kendo-angular-l10n");
17
20
  var timeline_view_service_1 = require("./timeline/timeline-view.service");
18
21
  var timeline_day_view_service_1 = require("./timeline/timeline-day-view.service");
19
22
  var timeline_week_view_service_1 = require("./timeline/timeline-week-view.service");
@@ -23,7 +26,9 @@ var dependency_dom_service_1 = require("./dependencies/dependency-dom.service");
23
26
  var mapping_service_1 = require("./common/mapping.service");
24
27
  var option_changes_service_1 = require("./common/option-changes.service");
25
28
  var edit_service_1 = require("./editing/edit.service");
26
- var kendo_angular_l10n_1 = require("@progress/kendo-angular-l10n");
29
+ var timeline_scroll_service_1 = require("./scrolling/timeline-scroll.service");
30
+ var gantt_localization_service_1 = require("./localization/gantt-localization.service");
31
+ var navigation_service_1 = require("./navigation/navigation.service");
27
32
  var utils_1 = require("./utils");
28
33
  var splitter_pane_options_interface_1 = require("./models/splitter-pane-options.interface");
29
34
  var task_template_directive_1 = require("./template-directives/task-template.directive");
@@ -31,10 +36,15 @@ var summary_task_template_directive_1 = require("./template-directives/summary-t
31
36
  var task_content_template_directive_1 = require("./template-directives/task-content-template.directive");
32
37
  var toolbar_template_directive_1 = require("./toolbar/toolbar-template.directive");
33
38
  var view_base_1 = require("./timeline/view-base");
34
- var util_1 = require("./editing/util");
35
- var gantt_localization_service_1 = require("./localization/gantt-localization.service");
39
+ var utils_2 = require("./editing/utils");
36
40
  var TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
37
41
  var DEFAULT_VIEW = 'week';
42
+ var DEFAULT_DRAG_SCROLL_SETTINGS = {
43
+ enabled: true,
44
+ step: 3,
45
+ interval: 1,
46
+ threshold: 10
47
+ };
38
48
  /**
39
49
  * Represents the Kendo UI Gantt component for Angular.
40
50
  *
@@ -107,7 +117,7 @@ var DEFAULT_VIEW = 'week';
107
117
  * ```
108
118
  */
109
119
  var GanttComponent = /** @class */ (function () {
110
- function GanttComponent(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone) {
120
+ function GanttComponent(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone, navigationService) {
111
121
  var _this = this;
112
122
  this.timelineViewService = timelineViewService;
113
123
  this.scrollSyncService = scrollSyncService;
@@ -119,13 +129,33 @@ var GanttComponent = /** @class */ (function () {
119
129
  this.localizationService = localizationService;
120
130
  this.hostElement = hostElement;
121
131
  this.zone = zone;
132
+ this.navigationService = navigationService;
133
+ /**
134
+ * @hidden
135
+ */
136
+ this.roleDescription = 'Gantt Chart';
137
+ /**
138
+ * @hidden
139
+ */
140
+ this.role = 'application';
122
141
  this.hostClasses = true;
123
142
  /**
124
- * Provides a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection))
143
+ * Specifies a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection)).
125
144
  *
126
145
  * > The [`selectable`]({% slug api_gantt_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
127
146
  */
128
147
  this.isSelected = default_callbacks_1.isSelected;
148
+ /**
149
+ * Specifies a callback that determines if a new dependency is valid.
150
+ * Used when evaluating if an attempt to create a new dependency will result in a valid link between the two tasks
151
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-validation).
152
+ *
153
+ * By defalut, dependencies are deemed invalid when:
154
+ * - The two tasks are in a parent-child relationship.
155
+ * - The two tasks are already dependent on one another. Only one dependency is allowed per pair.
156
+ * - The start or end times of the two tasks are incompatible with the attempted dependency type.
157
+ */
158
+ this.validateNewDependency = this.defaultValidateNewDependencyCallback.bind(this);
129
159
  /**
130
160
  * Fires when the Gantt selection is changed through user interaction.
131
161
  *
@@ -179,6 +209,12 @@ var GanttComponent = /** @class */ (function () {
179
209
  * The end of the work week (index based).
180
210
  */
181
211
  this.workWeekEnd = 5;
212
+ /**
213
+ * If set to `true`, the user can use dedicated shortcuts to interact with the Gantt.
214
+ * By default, navigation is disabled for the TreeList and Timeline parts of the component,
215
+ * ([see example]({% slug keyboard_navigation_gantt %})).
216
+ */
217
+ this.navigable = false;
182
218
  /**
183
219
  * Indicates whether the Gantt columns will be resized during initialization so that they fit their headers and row content.
184
220
  * Columns with autoSize set to false are excluded.
@@ -222,7 +258,8 @@ var GanttComponent = /** @class */ (function () {
222
258
  */
223
259
  this.cellClose = new core_1.EventEmitter();
224
260
  /**
225
- * Fires when the end user clicks the `Delete` button in the task editing dialog or the task delete icon.
261
+ * Fires when the end user clicks the `Delete` button in the task editing dialog,
262
+ * the task delete icon, or presses the `Delete` key on the keyboard when a task in the timeline is focused.
226
263
  * Use the event handler to open a confirmation dialog when necessary.
227
264
  */
228
265
  this.taskDelete = new core_1.EventEmitter();
@@ -246,6 +283,11 @@ var GanttComponent = /** @class */ (function () {
246
283
  * Fires when the user adds a task.
247
284
  */
248
285
  this.taskAdd = new core_1.EventEmitter();
286
+ /**
287
+ * Fires when the user adds a dependency via dragging
288
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-basic-concepts).
289
+ */
290
+ this.dependencyAdd = new core_1.EventEmitter();
249
291
  /**
250
292
  * Fires when the sorting of the Gantt is changed.
251
293
  * You have to handle the event yourself and sort the data.
@@ -302,6 +344,15 @@ var GanttComponent = /** @class */ (function () {
302
344
  * Fires when a task is clicked.
303
345
  */
304
346
  this.taskClick = new core_1.EventEmitter();
347
+ /**
348
+ * @hidden
349
+ *
350
+ * Specifies whether the dependency drag clues will be rendered.
351
+ * Set internally by the dependency-drag-create directive.
352
+ *
353
+ * @default false
354
+ */
355
+ this.renderDependencyDragClues = false;
305
356
  /**
306
357
  * @hidden
307
358
  *
@@ -318,6 +369,7 @@ var GanttComponent = /** @class */ (function () {
318
369
  this.showConfirmationDialog = false;
319
370
  this._columns = new core_1.QueryList();
320
371
  this._data = [];
372
+ this._dragScrollSettings = tslib_1.__assign({}, DEFAULT_DRAG_SCROLL_SETTINGS);
321
373
  this._timelinePaneOptions = tslib_1.__assign({}, splitter_pane_options_interface_1.DEFAULT_TIMELINE_PANE_SETTINGS);
322
374
  this._treeListPaneOptions = tslib_1.__assign({}, splitter_pane_options_interface_1.DEFAULT_TREELIST_PANE_SETTINGS);
323
375
  this._rowClass = default_callbacks_1.rowClassCallback;
@@ -342,23 +394,32 @@ var GanttComponent = /** @class */ (function () {
342
394
  }));
343
395
  this.editService.getSelectedItem = this.getFirstSelectedItem.bind(this);
344
396
  this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(function (show) { return _this.showEditingDialog = show; }));
345
- this.editServiceSubscription.add(this.editService.showConfirmationDialog.subscribe(function () { return _this.taskDelete.emit(); }));
397
+ this.editServiceSubscription.add(this.editService.taskDelete.subscribe(function (task) {
398
+ if (kendo_angular_common_1.hasObservers(_this.taskDelete)) {
399
+ _this.zone.run(function () {
400
+ return _this.notifyTaskDelete(task);
401
+ });
402
+ }
403
+ }));
346
404
  this.editServiceSubscription.add(this.editService.editEvent.subscribe(function (args) {
347
405
  _this[args.editResultType].emit({
348
406
  taskFormGroup: args.taskFormGroup,
349
- item: util_1.getEditItem(args.dataItem, _this.treeList.view.data, _this.mapper),
407
+ item: utils_2.getEditItem(args.dataItem, _this.treeList.view.data, _this.mapper),
350
408
  dependencies: args.dependencies,
351
409
  sender: _this
352
410
  });
353
411
  _this.showConfirmationDialog = _this.showEditingDialog = false;
354
412
  _this.editService.dataItem = _this.editService.taskFormGroup = null;
355
413
  _this.updateView();
414
+ if (_this.navigable) {
415
+ _this.focus();
416
+ }
356
417
  }));
357
418
  this.editServiceSubscription.add(this.editService.addEvent.subscribe(function (args) {
358
419
  var selectedItem = _this.getFirstSelectedItem();
359
420
  _this.taskAdd.emit({
360
421
  actionType: args.actionType,
361
- selectedItem: selectedItem ? util_1.getEditItem(selectedItem, _this.treeList.view.data, _this.mapper) : null
422
+ selectedItem: selectedItem ? utils_2.getEditItem(selectedItem, _this.treeList.view.data, _this.mapper) : null
362
423
  });
363
424
  _this.updateView();
364
425
  }));
@@ -382,6 +443,20 @@ var GanttComponent = /** @class */ (function () {
382
443
  enumerable: true,
383
444
  configurable: true
384
445
  });
446
+ Object.defineProperty(GanttComponent.prototype, "hostRoleDescriptionAttr", {
447
+ get: function () {
448
+ return this.roleDescription;
449
+ },
450
+ enumerable: true,
451
+ configurable: true
452
+ });
453
+ Object.defineProperty(GanttComponent.prototype, "hostRoleAttr", {
454
+ get: function () {
455
+ return this.role;
456
+ },
457
+ enumerable: true,
458
+ configurable: true
459
+ });
385
460
  Object.defineProperty(GanttComponent.prototype, "dir", {
386
461
  get: function () {
387
462
  return this.direction;
@@ -596,6 +671,21 @@ var GanttComponent = /** @class */ (function () {
596
671
  enumerable: true,
597
672
  configurable: true
598
673
  });
674
+ Object.defineProperty(GanttComponent.prototype, "dragScrollSettings", {
675
+ get: function () {
676
+ return this._dragScrollSettings;
677
+ },
678
+ /**
679
+ * Specifies the settings for auto-scrolling during dragging
680
+ * when the pointer moves outside of the container bounderies
681
+ * [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-auto-scrolling).
682
+ */
683
+ set: function (settings) {
684
+ this._dragScrollSettings = tslib_1.__assign({}, DEFAULT_DRAG_SCROLL_SETTINGS, settings);
685
+ },
686
+ enumerable: true,
687
+ configurable: true
688
+ });
599
689
  Object.defineProperty(GanttComponent.prototype, "renderedTreeListItems", {
600
690
  /**
601
691
  * @hidden
@@ -609,6 +699,19 @@ var GanttComponent = /** @class */ (function () {
609
699
  enumerable: true,
610
700
  configurable: true
611
701
  });
702
+ Object.defineProperty(GanttComponent.prototype, "viewItems", {
703
+ /**
704
+ * @hidden
705
+ */
706
+ get: function () {
707
+ if (!utils_1.isPresent(this.treeList)) {
708
+ return [];
709
+ }
710
+ return this.treeList.view.data;
711
+ },
712
+ enumerable: true,
713
+ configurable: true
714
+ });
612
715
  Object.defineProperty(GanttComponent.prototype, "filterMenu", {
613
716
  /**
614
717
  * @hidden
@@ -672,6 +775,16 @@ var GanttComponent = /** @class */ (function () {
672
775
  enumerable: true,
673
776
  configurable: true
674
777
  });
778
+ Object.defineProperty(GanttComponent.prototype, "isInEditMode", {
779
+ /**
780
+ * @hidden
781
+ */
782
+ get: function () {
783
+ return this.showEditingDialog || this.showConfirmationDialog || this.treeList.isEditing();
784
+ },
785
+ enumerable: true,
786
+ configurable: true
787
+ });
675
788
  GanttComponent.prototype.ngOnChanges = function (changes) {
676
789
  if (kendo_angular_common_1.anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
677
790
  this.loadTimelineData();
@@ -679,6 +792,14 @@ var GanttComponent = /** @class */ (function () {
679
792
  };
680
793
  GanttComponent.prototype.ngAfterViewInit = function () {
681
794
  this.updateTreeListMargin();
795
+ if (this.navigable) {
796
+ this.navigationService.initialize({
797
+ gantt: this,
798
+ host: this.hostElement.nativeElement,
799
+ treeListElement: this.treeList.wrapper.nativeElement,
800
+ timelineElement: this.timeline.timelineContent.nativeElement
801
+ });
802
+ }
682
803
  var leftContainer = this.treeList.wrapper.nativeElement.querySelector('kendo-treelist-list > div');
683
804
  this.scrollSyncService.registerElement(leftContainer, 'treelist');
684
805
  };
@@ -696,6 +817,34 @@ var GanttComponent = /** @class */ (function () {
696
817
  this.localizationSubscription.unsubscribe();
697
818
  }
698
819
  };
820
+ /**
821
+ * Focuses the last active cell or task in the Gantt.
822
+ * If no item has previously been focused, the first cell of the TreeList part will receive focus,
823
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
824
+ */
825
+ GanttComponent.prototype.focus = function () {
826
+ if (this.navigable) {
827
+ this.navigationService.focusLastActiveItem();
828
+ }
829
+ };
830
+ /**
831
+ * Focuses the targeted cell in the TreeList part of the component,
832
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
833
+ */
834
+ GanttComponent.prototype.focusCell = function (rowIndex, colIndex) {
835
+ if (this.navigable) {
836
+ this.navigationService.focusCell(rowIndex, colIndex);
837
+ }
838
+ };
839
+ /**
840
+ * Focuses the targeted task in the Timeline part of the component,
841
+ * ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
842
+ */
843
+ GanttComponent.prototype.focusTask = function (taskIndex) {
844
+ if (this.navigable) {
845
+ this.navigationService.focusTask(taskIndex);
846
+ }
847
+ };
699
848
  /**
700
849
  * Applies the minimum possible width for the specified column,
701
850
  * so that the whole text fits without wrapping. This method expects the Gantt
@@ -785,6 +934,15 @@ var GanttComponent = /** @class */ (function () {
785
934
  GanttComponent.prototype.openConfirmationDialog = function () {
786
935
  this.showConfirmationDialog = true;
787
936
  };
937
+ /**
938
+ * @hidden
939
+ */
940
+ GanttComponent.prototype.handleConfirmationDialogClose = function () {
941
+ this.showConfirmationDialog = false;
942
+ if (this.navigable) {
943
+ this.focus();
944
+ }
945
+ };
788
946
  /**
789
947
  * Opens a cell for editing.
790
948
  */
@@ -870,7 +1028,7 @@ var GanttComponent = /** @class */ (function () {
870
1028
  if (kendo_angular_common_1.hasObservers(this.taskClick)) {
871
1029
  var taskIndex_1 = utils_1.getClosestTaskIndex(target, gantt);
872
1030
  var task_1 = this.renderedTreeListItems[taskIndex_1];
873
- this.zone.run(function () { return _this.emitTaskClick(event, task_1, taskIndex_1); });
1031
+ this.zone.run(function () { return _this.notifyTaskClick(event, task_1, taskIndex_1); });
874
1032
  }
875
1033
  };
876
1034
  /**
@@ -889,8 +1047,8 @@ var GanttComponent = /** @class */ (function () {
889
1047
  if ((kendo_angular_common_1.hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
890
1048
  kendo_angular_common_1.hasObservers(this.taskClick)) {
891
1049
  this.zone.run(function () {
892
- _this.emitSelectionChange(task, selectionAction);
893
- _this.emitTaskClick(event, task, taskIndex);
1050
+ _this.notifySelectionChange(task, selectionAction);
1051
+ _this.notifyTaskClick(event, task, taskIndex);
894
1052
  });
895
1053
  }
896
1054
  };
@@ -902,7 +1060,7 @@ var GanttComponent = /** @class */ (function () {
902
1060
  if (!utils_1.isPresent(this.lastTreeListCellClick) || event.target !== this.lastTreeListCellClick.originalEvent.target) {
903
1061
  return;
904
1062
  }
905
- this.editItem = util_1.getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
1063
+ this.editItem = utils_2.getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
906
1064
  if (kendo_angular_common_1.hasObservers(this.cellDblClick)) {
907
1065
  this.zone.run(function () {
908
1066
  _this.cellDblClick.emit({
@@ -928,7 +1086,7 @@ var GanttComponent = /** @class */ (function () {
928
1086
  }
929
1087
  var task = event.items.map(function (item) { return item.dataItem; })[0]; // single selection only currently available
930
1088
  var action = event.action;
931
- this.emitSelectionChange(task, action);
1089
+ this.notifySelectionChange(task, action);
932
1090
  };
933
1091
  /**
934
1092
  * @hidden
@@ -980,7 +1138,7 @@ var GanttComponent = /** @class */ (function () {
980
1138
  dataItem: task_2,
981
1139
  originalEvent: event,
982
1140
  sender: _this,
983
- rowIndex: taskIndex_2,
1141
+ index: taskIndex_2,
984
1142
  type: 'dblclick'
985
1143
  }); });
986
1144
  }
@@ -991,16 +1149,35 @@ var GanttComponent = /** @class */ (function () {
991
1149
  GanttComponent.prototype.getText = function (token) {
992
1150
  return this.localizationService.get(token);
993
1151
  };
994
- GanttComponent.prototype.emitTaskClick = function (event, dataItem, itemIndex) {
1152
+ /**
1153
+ * @hidden
1154
+ */
1155
+ GanttComponent.prototype.changeActiveView = function (view) {
1156
+ if (view !== this.activeView) {
1157
+ this.activeView = view;
1158
+ this.loadTimelineData();
1159
+ this.scrollSyncService.resetTimelineScrollLeft();
1160
+ this.activeViewChange.emit(view);
1161
+ }
1162
+ };
1163
+ /**
1164
+ * @hidden
1165
+ */
1166
+ GanttComponent.prototype.notifyTaskClick = function (event, dataItem, itemIndex) {
1167
+ // simulates the TreeList `cellClick` event triggered by enter press (type: 'click')
1168
+ var type = event instanceof KeyboardEvent ? 'click' : event.type;
995
1169
  this.taskClick.emit({
996
1170
  originalEvent: event,
997
1171
  dataItem: dataItem,
998
- rowIndex: itemIndex,
999
- type: event.type,
1172
+ index: itemIndex,
1173
+ type: type,
1000
1174
  sender: this
1001
1175
  });
1002
1176
  };
1003
- GanttComponent.prototype.emitSelectionChange = function (dataItem, action) {
1177
+ /**
1178
+ * @hidden
1179
+ */
1180
+ GanttComponent.prototype.notifySelectionChange = function (dataItem, action) {
1004
1181
  if (this.isSameSelection(action, dataItem)) {
1005
1182
  return;
1006
1183
  }
@@ -1011,6 +1188,30 @@ var GanttComponent = /** @class */ (function () {
1011
1188
  });
1012
1189
  this.treeList.updateView();
1013
1190
  };
1191
+ /**
1192
+ * @hidden
1193
+ */
1194
+ GanttComponent.prototype.notifyTaskDelete = function (task) {
1195
+ this.editService.dataItem = task;
1196
+ this.taskDelete.emit({
1197
+ item: utils_2.getEditItem(task, this.treeList.view.data, this.mapper),
1198
+ sender: this
1199
+ });
1200
+ };
1201
+ /**
1202
+ * @hidden
1203
+ */
1204
+ GanttComponent.prototype.isSameSelection = function (action, dataItem) {
1205
+ return action === 'select' && this.isSelected(dataItem);
1206
+ };
1207
+ /**
1208
+ * @hidden
1209
+ */
1210
+ GanttComponent.prototype.getSelectionAction = function (_a, dataItem) {
1211
+ var ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
1212
+ var shouldToggleSelection = ctrlKey || metaKey;
1213
+ return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
1214
+ };
1014
1215
  GanttComponent.prototype.updateTreeListGroupClass = function (columns) {
1015
1216
  if (columns === void 0) { columns = this.columns; }
1016
1217
  if (!utils_1.isPresent(this.treeList)) {
@@ -1041,24 +1242,70 @@ var GanttComponent = /** @class */ (function () {
1041
1242
  }
1042
1243
  return this.views.find(function (view) { return view.type === _this.activeView; });
1043
1244
  };
1044
- GanttComponent.prototype.isSameSelection = function (action, dataItem) {
1045
- return action === 'select' && this.isSelected(dataItem);
1046
- };
1047
- GanttComponent.prototype.getSelectionAction = function (_a, dataItem) {
1048
- var ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
1049
- var shouldToggleSelection = ctrlKey || metaKey;
1050
- return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
1051
- };
1052
1245
  GanttComponent.prototype.getFirstSelectedItem = function () {
1053
1246
  var isSelectedCallback = this.isSelected || default_callbacks_1.isSelected;
1054
1247
  var loadedItems = this.renderedTreeListItems || [];
1055
1248
  return loadedItems.find(isSelectedCallback);
1056
1249
  };
1250
+ GanttComponent.prototype.defaultValidateNewDependencyCallback = function (dependency) {
1251
+ var _this = this;
1252
+ var fromTaskId = this.mapper.extractFromDependency(dependency, 'fromId');
1253
+ var toTaskId = this.mapper.extractFromDependency(dependency, 'toId');
1254
+ var fromTask = this.treeList.view.data.find(function (task) {
1255
+ return _this.mapper.extractFromTask(task.data, 'id') === fromTaskId;
1256
+ });
1257
+ var toTask = this.treeList.view.data.find(function (task) {
1258
+ return _this.mapper.extractFromTask(task.data, 'id') === toTaskId;
1259
+ });
1260
+ // mark as invalid if the attempted dependency is lacking valid from- and to-tasks
1261
+ // or when the from- and to-tasks are actually the same task
1262
+ if (!utils_1.isPresent(fromTask) || !utils_1.isPresent(fromTask.data) ||
1263
+ !utils_1.isPresent(toTask) || !utils_1.isPresent(toTask.data) ||
1264
+ fromTask.data === toTask.data) {
1265
+ return false;
1266
+ }
1267
+ var tasksDependentOnOneAnother = this.dependencies.some(function (current) {
1268
+ var currentFromId = _this.mapper.extractFromDependency(current, 'fromId');
1269
+ var currentToId = _this.mapper.extractFromDependency(current, 'toId');
1270
+ return (fromTaskId === currentFromId && toTaskId === currentToId) ||
1271
+ (toTaskId === currentFromId && fromTaskId === currentToId);
1272
+ });
1273
+ // mark as invalid if the attempted dependency is trying to connect already dependent tasks
1274
+ // mark as invalid if the two tasks are in parent-child relationship
1275
+ if (tasksDependentOnOneAnother || utils_1.areParentChild(fromTask, toTask)) {
1276
+ return false;
1277
+ }
1278
+ var fromTaskStart = this.mapper.extractFromTask(fromTask.data, 'start');
1279
+ var fromTaskEnd = this.mapper.extractFromTask(fromTask.data, 'end');
1280
+ var toTaskStart = this.mapper.extractFromTask(toTask.data, 'start');
1281
+ var toTaskEnd = this.mapper.extractFromTask(toTask.data, 'end');
1282
+ // if the two tasks are available to be connected via a dependency,
1283
+ // check if their start and end time allow for the attempted dependency type
1284
+ switch (this.mapper.extractFromDependency(dependency, 'type')) {
1285
+ // finish to finish (FF) — the from-task ends before the to-task can end
1286
+ case models_1.DependencyType.FF:
1287
+ return fromTaskEnd <= toTaskEnd;
1288
+ // finish to start (FS) — the from-task ends before the to-task can begin
1289
+ case models_1.DependencyType.FS:
1290
+ return fromTaskEnd <= toTaskStart;
1291
+ // start to finish (SF) — the from-task begins before the to-task can end
1292
+ case models_1.DependencyType.SF:
1293
+ return fromTaskStart <= toTaskEnd;
1294
+ // start to start (SS) — the from-task begins before the to-task can begin
1295
+ case models_1.DependencyType.SS:
1296
+ return fromTaskStart <= toTaskStart;
1297
+ default: return false;
1298
+ }
1299
+ };
1057
1300
  var GanttComponent_1;
1058
1301
  tslib_1.__decorate([
1059
1302
  core_1.ViewChild(kendo_angular_treelist_1.TreeListComponent, { static: true }),
1060
1303
  tslib_1.__metadata("design:type", kendo_angular_treelist_1.TreeListComponent)
1061
1304
  ], GanttComponent.prototype, "treeList", void 0);
1305
+ tslib_1.__decorate([
1306
+ core_1.ViewChild(gantt_timeline_component_1.GanttTimelineComponent, { static: false }),
1307
+ tslib_1.__metadata("design:type", gantt_timeline_component_1.GanttTimelineComponent)
1308
+ ], GanttComponent.prototype, "timeline", void 0);
1062
1309
  tslib_1.__decorate([
1063
1310
  core_1.ContentChild(task_content_template_directive_1.GanttTaskContentTemplateDirective, { static: true }),
1064
1311
  tslib_1.__metadata("design:type", task_content_template_directive_1.GanttTaskContentTemplateDirective)
@@ -1075,6 +1322,24 @@ var GanttComponent = /** @class */ (function () {
1075
1322
  core_1.ContentChildren(toolbar_template_directive_1.ToolbarTemplateDirective),
1076
1323
  tslib_1.__metadata("design:type", core_1.QueryList)
1077
1324
  ], GanttComponent.prototype, "toolbarTemplateChildren", void 0);
1325
+ tslib_1.__decorate([
1326
+ core_1.Input('aria-roledescription'),
1327
+ tslib_1.__metadata("design:type", String)
1328
+ ], GanttComponent.prototype, "roleDescription", void 0);
1329
+ tslib_1.__decorate([
1330
+ core_1.HostBinding('attr.aria-roledescription'),
1331
+ tslib_1.__metadata("design:type", String),
1332
+ tslib_1.__metadata("design:paramtypes", [])
1333
+ ], GanttComponent.prototype, "hostRoleDescriptionAttr", null);
1334
+ tslib_1.__decorate([
1335
+ core_1.Input('role'),
1336
+ tslib_1.__metadata("design:type", String)
1337
+ ], GanttComponent.prototype, "role", void 0);
1338
+ tslib_1.__decorate([
1339
+ core_1.HostBinding('attr.role'),
1340
+ tslib_1.__metadata("design:type", String),
1341
+ tslib_1.__metadata("design:paramtypes", [])
1342
+ ], GanttComponent.prototype, "hostRoleAttr", null);
1078
1343
  tslib_1.__decorate([
1079
1344
  core_1.HostBinding('class.k-gantt'),
1080
1345
  tslib_1.__metadata("design:type", Boolean)
@@ -1117,6 +1382,10 @@ var GanttComponent = /** @class */ (function () {
1117
1382
  core_1.Input(),
1118
1383
  tslib_1.__metadata("design:type", Function)
1119
1384
  ], GanttComponent.prototype, "isSelected", void 0);
1385
+ tslib_1.__decorate([
1386
+ core_1.Input(),
1387
+ tslib_1.__metadata("design:type", Function)
1388
+ ], GanttComponent.prototype, "validateNewDependency", void 0);
1120
1389
  tslib_1.__decorate([
1121
1390
  core_1.Output(),
1122
1391
  tslib_1.__metadata("design:type", core_1.EventEmitter)
@@ -1176,6 +1445,10 @@ var GanttComponent = /** @class */ (function () {
1176
1445
  core_1.Input(),
1177
1446
  tslib_1.__metadata("design:type", Number)
1178
1447
  ], GanttComponent.prototype, "workWeekEnd", void 0);
1448
+ tslib_1.__decorate([
1449
+ core_1.Input(),
1450
+ tslib_1.__metadata("design:type", Boolean)
1451
+ ], GanttComponent.prototype, "navigable", void 0);
1179
1452
  tslib_1.__decorate([
1180
1453
  core_1.Input(),
1181
1454
  tslib_1.__metadata("design:type", Object),
@@ -1216,6 +1489,11 @@ var GanttComponent = /** @class */ (function () {
1216
1489
  core_1.Input(),
1217
1490
  tslib_1.__metadata("design:type", Boolean)
1218
1491
  ], GanttComponent.prototype, "columnsResizable", void 0);
1492
+ tslib_1.__decorate([
1493
+ core_1.Input(),
1494
+ tslib_1.__metadata("design:type", Object),
1495
+ tslib_1.__metadata("design:paramtypes", [Object])
1496
+ ], GanttComponent.prototype, "dragScrollSettings", null);
1219
1497
  tslib_1.__decorate([
1220
1498
  core_1.Output(),
1221
1499
  tslib_1.__metadata("design:type", core_1.EventEmitter)
@@ -1256,6 +1534,10 @@ var GanttComponent = /** @class */ (function () {
1256
1534
  core_1.Output(),
1257
1535
  tslib_1.__metadata("design:type", core_1.EventEmitter)
1258
1536
  ], GanttComponent.prototype, "taskAdd", void 0);
1537
+ tslib_1.__decorate([
1538
+ core_1.Output(),
1539
+ tslib_1.__metadata("design:type", core_1.EventEmitter)
1540
+ ], GanttComponent.prototype, "dependencyAdd", void 0);
1259
1541
  tslib_1.__decorate([
1260
1542
  core_1.Output(),
1261
1543
  tslib_1.__metadata("design:type", core_1.EventEmitter)
@@ -1331,9 +1613,11 @@ var GanttComponent = /** @class */ (function () {
1331
1613
  dependency_dom_service_1.DependencyDomService,
1332
1614
  mapping_service_1.MappingService,
1333
1615
  option_changes_service_1.OptionChangesService,
1334
- edit_service_1.EditService
1616
+ edit_service_1.EditService,
1617
+ timeline_scroll_service_1.TimelineScrollService,
1618
+ navigation_service_1.NavigationService
1335
1619
  ],
1336
- 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 "
1620
+ 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 "
1337
1621
  }),
1338
1622
  tslib_1.__metadata("design:paramtypes", [timeline_view_service_1.TimelineViewService,
1339
1623
  scroll_sync_service_1.ScrollSyncService,
@@ -1344,7 +1628,8 @@ var GanttComponent = /** @class */ (function () {
1344
1628
  edit_service_1.EditService,
1345
1629
  kendo_angular_l10n_1.LocalizationService,
1346
1630
  core_1.ElementRef,
1347
- core_1.NgZone])
1631
+ core_1.NgZone,
1632
+ navigation_service_1.NavigationService])
1348
1633
  ], GanttComponent);
1349
1634
  return GanttComponent;
1350
1635
  }());