@progress/kendo-angular-gantt 0.2.0-dev.202111231320 → 0.2.0-dev.202111241002

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 (61) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -2
  2. package/dist/cdn/main.js +2 -2
  3. package/dist/es/common/default-callbacks.js +4 -0
  4. package/dist/es/gantt.component.js +187 -32
  5. package/dist/es/gantt.module.js +3 -1
  6. package/dist/es/main.js +1 -0
  7. package/dist/es/package-metadata.js +1 -1
  8. package/dist/es/rendering/gantt-milestone-task.component.js +1 -1
  9. package/dist/es/rendering/gantt-summary-task.component.js +1 -1
  10. package/dist/es/rendering/gantt-task-base.js +8 -4
  11. package/dist/es/rendering/gantt-task.component.js +1 -1
  12. package/dist/es/rendering/gantt-tasks-table-body.component.js +3 -3
  13. package/dist/es/selection/selectable.directive.js +141 -0
  14. package/dist/es/selection/selection-change-event.js +4 -0
  15. package/dist/es/timeline/gantt-timeline.component.js +5 -1
  16. package/dist/es/utils.js +5 -1
  17. package/dist/es2015/common/default-callbacks.d.ts +4 -0
  18. package/dist/es2015/common/default-callbacks.js +4 -0
  19. package/dist/es2015/gantt.component.d.ts +66 -18
  20. package/dist/es2015/gantt.component.js +191 -34
  21. package/dist/es2015/gantt.module.js +3 -1
  22. package/dist/es2015/index.metadata.json +1 -1
  23. package/dist/es2015/main.d.ts +2 -0
  24. package/dist/es2015/main.js +1 -0
  25. package/dist/es2015/models/events/cell-click-event.interface.d.ts +31 -8
  26. package/dist/es2015/models/events/task-click-event.interface.d.ts +13 -5
  27. package/dist/es2015/models/models.d.ts +2 -0
  28. package/dist/es2015/package-metadata.js +1 -1
  29. package/dist/es2015/rendering/gantt-milestone-task.component.js +1 -0
  30. package/dist/es2015/rendering/gantt-summary-task.component.js +1 -0
  31. package/dist/es2015/rendering/gantt-task-base.d.ts +2 -1
  32. package/dist/es2015/rendering/gantt-task-base.js +8 -4
  33. package/dist/es2015/rendering/gantt-task.component.js +1 -0
  34. package/dist/es2015/rendering/gantt-tasks-table-body.component.d.ts +1 -1
  35. package/dist/es2015/rendering/gantt-tasks-table-body.component.js +5 -2
  36. package/dist/es2015/selection/selectable.directive.d.ts +42 -0
  37. package/dist/es2015/selection/selectable.directive.js +122 -0
  38. package/dist/es2015/selection/selection-change-event.d.ts +25 -0
  39. package/dist/es2015/selection/selection-change-event.js +4 -0
  40. package/dist/es2015/timeline/gantt-timeline.component.d.ts +1 -0
  41. package/dist/es2015/timeline/gantt-timeline.component.js +5 -0
  42. package/dist/es2015/utils.d.ts +5 -0
  43. package/dist/es2015/utils.js +5 -1
  44. package/dist/fesm2015/index.js +334 -39
  45. package/dist/fesm5/index.js +347 -42
  46. package/dist/npm/common/default-callbacks.js +4 -0
  47. package/dist/npm/gantt.component.js +187 -32
  48. package/dist/npm/gantt.module.js +3 -1
  49. package/dist/npm/main.js +2 -0
  50. package/dist/npm/package-metadata.js +1 -1
  51. package/dist/npm/rendering/gantt-milestone-task.component.js +1 -1
  52. package/dist/npm/rendering/gantt-summary-task.component.js +1 -1
  53. package/dist/npm/rendering/gantt-task-base.js +8 -4
  54. package/dist/npm/rendering/gantt-task.component.js +1 -1
  55. package/dist/npm/rendering/gantt-tasks-table-body.component.js +3 -3
  56. package/dist/npm/selection/selectable.directive.js +143 -0
  57. package/dist/npm/selection/selection-change-event.js +6 -0
  58. package/dist/npm/timeline/gantt-timeline.component.js +5 -1
  59. package/dist/npm/utils.js +4 -0
  60. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  61. package/package.json +1 -1
@@ -19,3 +19,7 @@ export var rowClassCallback = function () { return null; };
19
19
  * @hidden
20
20
  */
21
21
  export var taskClassCallback = function () { return null; };
22
+ /**
23
+ * @hidden
24
+ */
25
+ export var isSelected = function () { return false; };
@@ -4,14 +4,14 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as tslib_1 from "tslib";
6
6
  import { Component, forwardRef, HostBinding, Input, Output, EventEmitter, ViewChild, ContentChildren, ContentChild, QueryList, isDevMode, Renderer2, ElementRef, NgZone } from '@angular/core';
7
- import { DataBoundTreeComponent, ExpandableTreeComponent } from '@progress/kendo-angular-treelist';
8
- import { TreeListComponent } from '@progress/kendo-angular-treelist';
7
+ import { TreeListComponent, DataBoundTreeComponent, ExpandableTreeComponent } from '@progress/kendo-angular-treelist';
8
+ import { Day } from '@progress/kendo-date-math';
9
9
  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
13
  import { GanttColumnBase } from './columns/columns';
14
- import { fetchChildren, hasChildren, rowClassCallback, taskClassCallback } from './common/default-callbacks';
14
+ import { fetchChildren, hasChildren, isSelected, rowClassCallback, taskClassCallback } from './common/default-callbacks';
15
15
  import { TimelineViewService } from './timeline/timeline-view.service';
16
16
  import { TimelineDayViewService } from './timeline/timeline-day-view.service';
17
17
  import { TimelineWeekViewService } from './timeline/timeline-week-view.service';
@@ -29,7 +29,6 @@ import { GanttSummaryTaskTemplateDirective } from './template-directives/summary
29
29
  import { GanttTaskContentTemplateDirective } from './template-directives/task-content-template.directive';
30
30
  import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
31
31
  import { ViewBase } from './timeline/view-base';
32
- import { Day } from '@progress/kendo-date-math';
33
32
  import { getEditItem } from './editing/util';
34
33
  var TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
35
34
  var DEFAULT_VIEW = 'week';
@@ -118,6 +117,27 @@ var GanttComponent = /** @class */ (function () {
118
117
  this.hostElement = hostElement;
119
118
  this.zone = zone;
120
119
  this.hostClasses = true;
120
+ /**
121
+ * Provides a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection))
122
+ *
123
+ * > The [`selectable`]({% slug gantt_api_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
124
+ */
125
+ this.isSelected = isSelected;
126
+ /**
127
+ * Fires when the Gantt selection is changed through user interaction.
128
+ *
129
+ * Holds data about the affected [`items`]({% slug api_gantt_selectionchangeevent %}#toc-items) and the attempted [`action`]({% slug api_gantt_selectionchangeevent %}#toc-action):
130
+ * - `select` - Triggered on `click` or `ctrl + click` on deselected items.
131
+ * - `remove` - Triggered on `ctrl + click` on selected items.
132
+ */
133
+ this.selectionChange = new EventEmitter();
134
+ /**
135
+ * Enables or disables the Gantt selection mechanism ([see example]({% slug selection_gantt %}#toc-custom-selection)).
136
+ *
137
+ * > When set to `true`, the [`isSelected`]({% slug gantt_api_ganttcomponent %}#toc-isselected) callback has to be provided.
138
+ * > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
139
+ */
140
+ this.selectable = false;
121
141
  /**
122
142
  * The position of the toolbar.
123
143
  *
@@ -286,6 +306,14 @@ var GanttComponent = /** @class */ (function () {
286
306
  * Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.
287
307
  */
288
308
  this.columnLockedChange = new EventEmitter();
309
+ /**
310
+ * Fires when a cell is clicked.
311
+ */
312
+ this.cellClick = new EventEmitter();
313
+ /**
314
+ * Fires when a task is clicked.
315
+ */
316
+ this.taskClick = new EventEmitter();
289
317
  /**
290
318
  * @hidden
291
319
  *
@@ -311,9 +339,6 @@ var GanttComponent = /** @class */ (function () {
311
339
  this.optionChangesSubscriptions = new Subscription();
312
340
  this.editServiceSubscription = new Subscription();
313
341
  validatePackage(packageMetadata);
314
- this.handleTimelineDblClick = this.handleTimelineDblClick.bind(this);
315
- this.handleTimelineMouseDown = this.handleTimelineMouseDown.bind(this);
316
- this.handleDoubleClick = this.handleDoubleClick.bind(this);
317
342
  this.optionChangesSubscriptions.add(this.optionChangesService.viewChanges.subscribe(function () {
318
343
  _this.loadTimelineData();
319
344
  }));
@@ -549,6 +574,19 @@ var GanttComponent = /** @class */ (function () {
549
574
  enumerable: true,
550
575
  configurable: true
551
576
  });
577
+ Object.defineProperty(GanttComponent.prototype, "isTaskSelected", {
578
+ /**
579
+ * @hidden
580
+ *
581
+ * Retrieves the `isSelected` callback if `selectable` is set to `true`
582
+ * Otherwise returns the default callback, which always returns `false`.
583
+ */
584
+ get: function () {
585
+ return this.selectable ? this.isSelected : isSelected;
586
+ },
587
+ enumerable: true,
588
+ configurable: true
589
+ });
552
590
  Object.defineProperty(GanttComponent.prototype, "idGetter", {
553
591
  /**
554
592
  * @hidden
@@ -657,6 +695,14 @@ var GanttComponent = /** @class */ (function () {
657
695
  this.treeList.reorderColumn(source, destIndex, options);
658
696
  }
659
697
  };
698
+ /**
699
+ * Updates the data of the Gantt and forces row-related callbacks to be called anew.
700
+ */
701
+ GanttComponent.prototype.updateView = function () {
702
+ if (isPresent(this.treeList)) {
703
+ this.treeList.updateView();
704
+ }
705
+ };
660
706
  /**
661
707
  * Opens the task editing dialog.
662
708
  */
@@ -717,16 +763,6 @@ var GanttComponent = /** @class */ (function () {
717
763
  this.dependencyDomService.notifyChanges();
718
764
  }
719
765
  };
720
- /**
721
- * @hidden
722
- *
723
- * Used by the GanttExpandableDirective.
724
- */
725
- GanttComponent.prototype.updateView = function () {
726
- if (isPresent(this.treeList)) {
727
- this.treeList.updateView();
728
- }
729
- };
730
766
  /**
731
767
  * @hidden
732
768
  */
@@ -764,25 +800,92 @@ var GanttComponent = /** @class */ (function () {
764
800
  /**
765
801
  * @hidden
766
802
  */
767
- GanttComponent.prototype.handleCellClick = function (event) {
768
- this._cellClickEvent = event;
803
+ GanttComponent.prototype.handleTimelineRightClick = function (event) {
804
+ var _this = this;
805
+ var target = event.target;
806
+ var gantt = this.hostElement.nativeElement;
807
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
808
+ return;
809
+ }
810
+ if (hasObservers(this.taskClick)) {
811
+ var taskIndex_1 = getClosestTaskIndex(target, gantt);
812
+ var task_1 = this.renderedTreeListItems[taskIndex_1];
813
+ this.zone.run(function () { return _this.emitTaskClick(event, task_1, taskIndex_1); });
814
+ }
769
815
  };
770
816
  /**
771
817
  * @hidden
772
818
  */
773
- GanttComponent.prototype.handleDoubleClick = function (event) {
819
+ GanttComponent.prototype.handleTimelineClick = function (event) {
774
820
  var _this = this;
775
- var cell = this._cellClickEvent.originalEvent.target;
776
- if (event.target !== cell) {
821
+ var target = event.target;
822
+ var gantt = this.hostElement.nativeElement;
823
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
777
824
  return;
778
825
  }
779
- this.editItem = getEditItem(this._cellClickEvent.dataItem, this.treeList.view.data, this.mapper);
826
+ var taskIndex = getClosestTaskIndex(target, gantt);
827
+ var task = this.renderedTreeListItems[taskIndex];
828
+ var selectionAction = this.getSelectionAction(event, task);
829
+ if ((hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
830
+ hasObservers(this.taskClick)) {
831
+ this.zone.run(function () {
832
+ _this.emitSelectionChange(task, selectionAction);
833
+ _this.emitTaskClick(event, task, taskIndex);
834
+ });
835
+ }
836
+ };
837
+ /**
838
+ * @hidden
839
+ */
840
+ GanttComponent.prototype.handleTreeListDoubleClick = function (event) {
841
+ var _this = this;
842
+ if (!isPresent(this.lastTreeListCellClick) || event.target !== this.lastTreeListCellClick.originalEvent.target) {
843
+ return;
844
+ }
845
+ this.editItem = getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
780
846
  if (hasObservers(this.cellDblClick)) {
781
847
  this.zone.run(function () {
782
- _this.cellDblClick.emit(tslib_1.__assign({}, _this._cellClickEvent, { sender: _this }));
848
+ _this.cellDblClick.emit({
849
+ column: _this.lastTreeListCellClick.column,
850
+ columnIndex: _this.lastTreeListCellClick.columnIndex,
851
+ dataItem: _this.lastTreeListCellClick.dataItem,
852
+ isEdited: _this.lastTreeListCellClick.isEdited,
853
+ originalEvent: _this.lastTreeListCellClick.originalEvent,
854
+ rowIndex: _this.lastTreeListCellClick.rowIndex,
855
+ type: 'dblclick',
856
+ sender: _this
857
+ });
783
858
  });
784
859
  }
785
860
  };
861
+ /**
862
+ * @hidden
863
+ */
864
+ GanttComponent.prototype.handleTreeListSelectionChange = function (event) {
865
+ // prevent selection change from right-click
866
+ if (isPresent(this.lastTreeListCellClick) && this.lastTreeListCellClick.type === 'contextmenu') {
867
+ return;
868
+ }
869
+ var task = event.items.map(function (item) { return item.dataItem; })[0]; // single selection only currently available
870
+ var action = event.action;
871
+ this.emitSelectionChange(task, action);
872
+ };
873
+ /**
874
+ * @hidden
875
+ */
876
+ GanttComponent.prototype.handleTreeListCellClick = function (event) {
877
+ this.lastTreeListCellClick = event;
878
+ this.cellClick.emit({
879
+ column: event.column,
880
+ columnIndex: event.columnIndex,
881
+ dataItem: event.dataItem,
882
+ isEdited: event.isEdited,
883
+ originalEvent: event.originalEvent,
884
+ rowIndex: event.rowIndex,
885
+ type: event.type,
886
+ sender: this
887
+ });
888
+ };
786
889
  /**
787
890
  * @hidden
788
891
  */
@@ -810,13 +913,17 @@ var GanttComponent = /** @class */ (function () {
810
913
  if (!isTask(target, gantt) || isClearButton(target, gantt)) {
811
914
  return;
812
915
  }
813
- var taskIndex = getClosestTaskIndex(target, gantt);
814
- var task = this.renderedTreeListItems[taskIndex];
815
- this.zone.run(function () { return _this.taskDblClick.emit({
816
- dataItem: task,
817
- originalEvent: event,
818
- sender: _this
819
- }); });
916
+ if (hasObservers(this.taskDblClick)) {
917
+ var taskIndex_2 = getClosestTaskIndex(target, gantt);
918
+ var task_2 = this.renderedTreeListItems[taskIndex_2];
919
+ this.zone.run(function () { return _this.taskDblClick.emit({
920
+ dataItem: task_2,
921
+ originalEvent: event,
922
+ sender: _this,
923
+ rowIndex: taskIndex_2,
924
+ type: 'dblclick'
925
+ }); });
926
+ }
820
927
  };
821
928
  /**
822
929
  * @hidden
@@ -824,6 +931,26 @@ var GanttComponent = /** @class */ (function () {
824
931
  GanttComponent.prototype.getText = function (token) {
825
932
  return this.localizationService.get(token);
826
933
  };
934
+ GanttComponent.prototype.emitTaskClick = function (event, dataItem, itemIndex) {
935
+ this.taskClick.emit({
936
+ originalEvent: event,
937
+ dataItem: dataItem,
938
+ rowIndex: itemIndex,
939
+ type: event.type,
940
+ sender: this
941
+ });
942
+ };
943
+ GanttComponent.prototype.emitSelectionChange = function (dataItem, action) {
944
+ if (this.isSameSelection(action, dataItem)) {
945
+ return;
946
+ }
947
+ this.selectionChange.emit({
948
+ action: action,
949
+ items: [dataItem],
950
+ sender: this
951
+ });
952
+ this.updateView();
953
+ };
827
954
  GanttComponent.prototype.updateTreeListGroupClass = function (columns) {
828
955
  if (columns === void 0) { columns = this.columns; }
829
956
  if (!isPresent(this.treeList)) {
@@ -854,6 +981,14 @@ var GanttComponent = /** @class */ (function () {
854
981
  }
855
982
  return this.views.find(function (view) { return view.type === _this.activeView; });
856
983
  };
984
+ GanttComponent.prototype.isSameSelection = function (action, dataItem) {
985
+ return action === 'select' && this.isSelected(dataItem);
986
+ };
987
+ GanttComponent.prototype.getSelectionAction = function (_a, dataItem) {
988
+ var ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
989
+ var shouldToggleSelection = ctrlKey || metaKey;
990
+ return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
991
+ };
857
992
  var GanttComponent_1;
858
993
  tslib_1.__decorate([
859
994
  ViewChild(TreeListComponent, { static: true }),
@@ -913,6 +1048,18 @@ var GanttComponent = /** @class */ (function () {
913
1048
  tslib_1.__metadata("design:type", Array),
914
1049
  tslib_1.__metadata("design:paramtypes", [Array])
915
1050
  ], GanttComponent.prototype, "data", null);
1051
+ tslib_1.__decorate([
1052
+ Input(),
1053
+ tslib_1.__metadata("design:type", Function)
1054
+ ], GanttComponent.prototype, "isSelected", void 0);
1055
+ tslib_1.__decorate([
1056
+ Output(),
1057
+ tslib_1.__metadata("design:type", EventEmitter)
1058
+ ], GanttComponent.prototype, "selectionChange", void 0);
1059
+ tslib_1.__decorate([
1060
+ Input(),
1061
+ tslib_1.__metadata("design:type", Boolean)
1062
+ ], GanttComponent.prototype, "selectable", void 0);
916
1063
  tslib_1.__decorate([
917
1064
  Input(),
918
1065
  tslib_1.__metadata("design:type", String)
@@ -1081,6 +1228,14 @@ var GanttComponent = /** @class */ (function () {
1081
1228
  Output(),
1082
1229
  tslib_1.__metadata("design:type", EventEmitter)
1083
1230
  ], GanttComponent.prototype, "columnLockedChange", void 0);
1231
+ tslib_1.__decorate([
1232
+ Output(),
1233
+ tslib_1.__metadata("design:type", EventEmitter)
1234
+ ], GanttComponent.prototype, "cellClick", void 0);
1235
+ tslib_1.__decorate([
1236
+ Output(),
1237
+ tslib_1.__metadata("design:type", EventEmitter)
1238
+ ], GanttComponent.prototype, "taskClick", void 0);
1084
1239
  GanttComponent = GanttComponent_1 = tslib_1.__decorate([
1085
1240
  Component({
1086
1241
  selector: 'kendo-gantt',
@@ -1105,7 +1260,7 @@ var GanttComponent = /** @class */ (function () {
1105
1260
  OptionChangesService,
1106
1261
  EditService
1107
1262
  ],
1108
- template: "\n <ng-container kendoGanttLocalizedMessages\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-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 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 [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 (cellClick)=\"handleCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleDoubleClick\n }\">\n <kendo-treelist-messages [kendoGanttTreeListMessages]=\"localizationService\"></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 [kendoEventsOutsideAngular]=\"{\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog *ngIf=\"showEditingDialog\" [formGroup]=\"editDialogFormGroup\"></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 "
1263
+ template: "\n <ng-container kendoGanttLocalizedMessages\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-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 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 [kendoGanttTreeListMessages]=\"localizationService\"></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 class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog *ngIf=\"showEditingDialog\" [formGroup]=\"editDialogFormGroup\"></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 "
1109
1264
  }),
1110
1265
  tslib_1.__metadata("design:paramtypes", [TimelineViewService,
1111
1266
  ScrollSyncService,
@@ -8,6 +8,7 @@ import { CommonModule } from '@angular/common';
8
8
  import { SplitterModule } from '@progress/kendo-angular-layout';
9
9
  import { TreeListModule } from '@progress/kendo-angular-treelist';
10
10
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
11
+ import { EventsModule } from '@progress/kendo-angular-common';
11
12
  import { DialogModule } from '@progress/kendo-angular-dialog';
12
13
  import { GanttComponent } from './gantt.component';
13
14
  import { GanttTimelineComponent } from './timeline/gantt-timeline.component';
@@ -22,6 +23,7 @@ import { GanttMilestoneTaskComponent } from './rendering/gantt-milestone-task.co
22
23
  import { GanttFlatBindingDirective } from './binding-directives/flat-binding.directive';
23
24
  import { GanttHierarchyBindingDirective } from './binding-directives/hierarchy-binding.directive';
24
25
  import { GanttExpandableDirective } from './expanded-state/expandable.directive';
26
+ import { SelectableDirective } from './selection/selectable.directive';
25
27
  import { ToolbarComponent } from './toolbar/toolbar.component';
26
28
  import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
27
29
  import { ViewSelectorComponent } from './toolbar/view-selector.component';
@@ -39,7 +41,6 @@ import { CustomMessagesComponent } from './localization/custom-messages.componen
39
41
  import { L10N_PREFIX } from '@progress/kendo-angular-l10n';
40
42
  import { LocalizedMessagesDirective } from './localization/localized-messages.directive';
41
43
  import { GanttTreeListMessagesDirective } from './localization/treelist-messages.directive';
42
- import { EventsModule } from '@progress/kendo-angular-common';
43
44
  var IMPORTED_MODULES = [
44
45
  CommonModule,
45
46
  ReactiveFormsModule,
@@ -84,6 +85,7 @@ var DECLARATIONS = [
84
85
  TimelineDayViewComponent,
85
86
  TimelineWeekViewComponent,
86
87
  TimelineMonthViewComponent,
88
+ SelectableDirective,
87
89
  EditDialogComponent,
88
90
  CustomMessagesComponent,
89
91
  LocalizedMessagesDirective,
package/dist/es/main.js CHANGED
@@ -11,5 +11,6 @@ export { GanttTaskTemplateDirective } from './template-directives/task-template.
11
11
  export { GanttTaskContentTemplateDirective } from './template-directives/task-content-template.directive';
12
12
  export { GanttSummaryTaskTemplateDirective } from './template-directives/summary-task-template.directive';
13
13
  export { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
14
+ export { SelectableDirective } from './selection/selectable.directive';
14
15
  export * from './models/models';
15
16
  export * from './columns/columns';
@@ -9,7 +9,7 @@ export var packageMetadata = {
9
9
  name: '@progress/kendo-angular-gantt',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1637673280,
12
+ publishDate: 1637747718,
13
13
  version: '',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
15
15
  };
@@ -34,7 +34,7 @@ var GanttMilestoneTaskComponent = /** @class */ (function (_super) {
34
34
  useExisting: forwardRef(function () { return GanttMilestoneTaskComponent_1; })
35
35
  }
36
36
  ],
37
- template: "\n <div\n #task\n class=\"k-task k-task-milestone\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n >\n </div>\n "
37
+ template: "\n <div\n #task\n class=\"k-task k-task-milestone\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n [attr.data-task-index]=\"index\"\n >\n </div>\n "
38
38
  }),
39
39
  tslib_1.__metadata("design:paramtypes", [MappingService,
40
40
  TimelineViewService,
@@ -38,7 +38,7 @@ var GanttSummaryTaskComponent = /** @class */ (function (_super) {
38
38
  useExisting: forwardRef(function () { return GanttSummaryTaskComponent_1; })
39
39
  }
40
40
  ],
41
- template: "\n <div\n #task\n class=\"k-task k-task-summary\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n >\n <div *ngIf=\"!template; else summaryTemplate\"\n class=\"k-task-summary-progress\"\n [style.width.px]=\"taskWidth\">\n <div\n class=\"k-task-summary-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n </div>\n <ng-template\n #summaryTemplate\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
41
+ template: "\n <div\n #task\n class=\"k-task k-task-summary\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n >\n <div *ngIf=\"!template; else summaryTemplate\"\n class=\"k-task-summary-progress\"\n [style.width.px]=\"taskWidth\">\n <div\n class=\"k-task-summary-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n </div>\n <ng-template\n #summaryTemplate\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
42
42
  }),
43
43
  tslib_1.__metadata("design:paramtypes", [MappingService,
44
44
  TimelineViewService,
@@ -109,6 +109,14 @@ var GanttTaskBase = /** @class */ (function () {
109
109
  Input(),
110
110
  tslib_1.__metadata("design:type", Object)
111
111
  ], GanttTaskBase.prototype, "dataItem", void 0);
112
+ tslib_1.__decorate([
113
+ Input(),
114
+ tslib_1.__metadata("design:type", Number)
115
+ ], GanttTaskBase.prototype, "index", void 0);
116
+ tslib_1.__decorate([
117
+ Input(),
118
+ tslib_1.__metadata("design:type", Function)
119
+ ], GanttTaskBase.prototype, "isSelected", void 0);
112
120
  tslib_1.__decorate([
113
121
  Input(),
114
122
  tslib_1.__metadata("design:type", String)
@@ -117,10 +125,6 @@ var GanttTaskBase = /** @class */ (function () {
117
125
  Input(),
118
126
  tslib_1.__metadata("design:type", Function)
119
127
  ], GanttTaskBase.prototype, "taskClass", void 0);
120
- tslib_1.__decorate([
121
- Input(),
122
- tslib_1.__metadata("design:type", Number)
123
- ], GanttTaskBase.prototype, "index", void 0);
124
128
  return GanttTaskBase;
125
129
  }());
126
130
  export { GanttTaskBase };
@@ -43,7 +43,7 @@ var GanttTaskComponent = /** @class */ (function (_super) {
43
43
  useExisting: forwardRef(function () { return GanttTaskComponent_1; })
44
44
  }
45
45
  ],
46
- template: "\n <div\n #task\n class=\"k-task k-task-single\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n >\n <ng-container *ngIf=\"!taskTemplate\">\n <div\n class=\"k-task-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n <div class=\"k-task-content\">\n <div class=\"k-task-template\">\n <ng-container *ngIf=\"!taskContentTemplate; else taskContent\">\n {{ mapper.extractFromTask(dataItem, 'title') }}\n </ng-container>\n <ng-template\n #taskContent\n [ngTemplateOutlet]=\"taskContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: dataItem }\"\n >\n </ng-template>\n </div>\n <span class=\"k-task-actions\">\n <span\n (click)=\"onTaskDelete()\"\n class=\"k-link k-task-delete\">\n <span class=\"k-icon k-i-close\"></span>\n </span>\n </span>\n </div>\n </ng-container>\n <ng-template\n *ngIf=\"taskTemplate\"\n [ngTemplateOutlet]=\"taskTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
46
+ template: "\n <div\n #task\n class=\"k-task k-task-single\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n >\n <ng-container *ngIf=\"!taskTemplate\">\n <div\n class=\"k-task-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n <div class=\"k-task-content\">\n <div class=\"k-task-template\">\n <ng-container *ngIf=\"!taskContentTemplate; else taskContent\">\n {{ mapper.extractFromTask(dataItem, 'title') }}\n </ng-container>\n <ng-template\n #taskContent\n [ngTemplateOutlet]=\"taskContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: dataItem }\"\n >\n </ng-template>\n </div>\n <span class=\"k-task-actions\">\n <span\n (click)=\"onTaskDelete()\"\n class=\"k-link k-task-delete\">\n <span class=\"k-icon k-i-close\"></span>\n </span>\n </span>\n </div>\n </ng-container>\n <ng-template\n *ngIf=\"taskTemplate\"\n [ngTemplateOutlet]=\"taskTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
47
47
  }),
48
48
  tslib_1.__metadata("design:paramtypes", [MappingService,
49
49
  TimelineViewService,
@@ -65,12 +65,12 @@ var GanttTasksTableBodyComponent = /** @class */ (function () {
65
65
  ], GanttTasksTableBodyComponent.prototype, "hasChildren", void 0);
66
66
  tslib_1.__decorate([
67
67
  Input(),
68
- tslib_1.__metadata("design:type", Number)
69
- ], GanttTasksTableBodyComponent.prototype, "index", void 0);
68
+ tslib_1.__metadata("design:type", Function)
69
+ ], GanttTasksTableBodyComponent.prototype, "isTaskSelected", void 0);
70
70
  GanttTasksTableBodyComponent = tslib_1.__decorate([
71
71
  Component({
72
72
  selector: '[kendoGanttTasksTableBody]',
73
- template: "\n <tr #timelineRow *ngFor=\"let item of rows; let index = index\">\n <td>\n <kendo-gantt-milestone-task\n *ngIf=\"isMileStone(item); else task\"\n [dataItem]=\"item\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [index]=\"index\"\n >\n </kendo-gantt-milestone-task>\n <ng-template #task>\n <kendo-gantt-summary-task\n *ngIf=\"hasChildren(item)\"\n [dataItem]=\"item\"\n [template]=\"summaryTaskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [index]=\"index\"\n >\n </kendo-gantt-summary-task>\n <kendo-gantt-task\n *ngIf=\"!hasChildren(item)\"\n [dataItem]=\"item\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [index]=\"index\"\n >\n </kendo-gantt-task>\n </ng-template>\n </td>\n </tr>\n "
73
+ template: "\n <tr #timelineRow *ngFor=\"let item of rows; let index = index\">\n <td>\n <kendo-gantt-milestone-task\n *ngIf=\"isMileStone(item); else task\"\n [dataItem]=\"item\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n >\n </kendo-gantt-milestone-task>\n <ng-template #task>\n <kendo-gantt-summary-task\n *ngIf=\"hasChildren(item)\"\n [dataItem]=\"item\"\n [template]=\"summaryTaskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n >\n </kendo-gantt-summary-task>\n <kendo-gantt-task\n *ngIf=\"!hasChildren(item)\"\n [dataItem]=\"item\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n >\n </kendo-gantt-task>\n </ng-template>\n </td>\n </tr>\n "
74
74
  }),
75
75
  tslib_1.__metadata("design:paramtypes", [DependencyDomService,
76
76
  MappingService])