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

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 (96) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -2
  2. package/dist/cdn/main.js +10 -4
  3. package/dist/es/dependencies/utils.js +6 -5
  4. package/dist/es/editing/add-task.component.js +94 -0
  5. package/dist/es/editing/dependencies-table.component.js +131 -0
  6. package/dist/es/editing/edit-dialog.component.js +37 -6
  7. package/dist/es/editing/edit.service.js +89 -7
  8. package/dist/es/editing/task-fields.component.js +43 -0
  9. package/dist/es/expanded-state/expandable.directive.js +4 -6
  10. package/dist/es/gantt.component.js +116 -45
  11. package/dist/es/gantt.module.js +13 -4
  12. package/dist/es/index.js +5 -1
  13. package/dist/es/localization/gantt-localization.service.js +26 -0
  14. package/dist/es/localization/messages.js +45 -1
  15. package/dist/es/models/dependency-type.enum.js +16 -0
  16. package/dist/es/models/events/{add-event.interface.js → task-add-event.interface.js} +0 -0
  17. package/dist/es/models/models.js +2 -0
  18. package/dist/es/models/{events/edit-event.interface.js → toolbar-settings.js} +0 -0
  19. package/dist/es/package-metadata.js +1 -1
  20. package/dist/es/timeline/timeline-base-view.service.js +12 -3
  21. package/dist/es/toolbar/toolbar.component.js +9 -1
  22. package/dist/es2015/dependencies/utils.js +6 -5
  23. package/dist/es2015/editing/add-task.component.d.ts +45 -0
  24. package/dist/es2015/editing/add-task.component.js +102 -0
  25. package/dist/es2015/editing/dependencies-table.component.d.ts +39 -0
  26. package/dist/es2015/editing/dependencies-table.component.js +160 -0
  27. package/dist/es2015/editing/edit-dialog.component.d.ts +10 -3
  28. package/dist/es2015/editing/edit-dialog.component.js +55 -33
  29. package/dist/es2015/editing/edit.service.d.ts +24 -3
  30. package/dist/es2015/editing/edit.service.js +78 -10
  31. package/dist/es2015/editing/task-fields.component.d.ts +22 -0
  32. package/dist/es2015/editing/task-fields.component.js +67 -0
  33. package/dist/es2015/expanded-state/expandable.directive.d.ts +1 -2
  34. package/dist/es2015/expanded-state/expandable.directive.js +2 -7
  35. package/dist/es2015/gantt.component.d.ts +29 -18
  36. package/dist/es2015/gantt.component.js +183 -43
  37. package/dist/es2015/gantt.module.js +13 -4
  38. package/dist/es2015/index.d.ts +5 -1
  39. package/dist/es2015/index.js +5 -1
  40. package/dist/es2015/index.metadata.json +1 -1
  41. package/dist/es2015/localization/{treelist-messages.directive.d.ts → gantt-localization.service.d.ts} +4 -3
  42. package/dist/es2015/localization/gantt-localization.service.js +25 -0
  43. package/dist/es2015/localization/messages.d.ts +46 -2
  44. package/dist/es2015/localization/messages.js +45 -1
  45. package/dist/es2015/models/dependency-type.enum.d.ts +1 -1
  46. package/dist/es2015/models/dependency-type.enum.js +16 -0
  47. package/dist/es2015/models/events/cell-close-event.interface.d.ts +1 -1
  48. package/dist/es2015/models/events/task-add-event.interface.d.ts +31 -0
  49. package/dist/{es/models/events/remove-event.interface.js → es2015/models/events/task-add-event.interface.js} +0 -0
  50. package/dist/es2015/models/events/task-edit-event.interface.d.ts +15 -2
  51. package/dist/es2015/models/models.d.ts +5 -3
  52. package/dist/es2015/models/models.js +2 -0
  53. package/dist/es2015/models/toolbar-settings.d.ts +29 -0
  54. package/dist/{es/models/toolbar-position.js → es2015/models/toolbar-settings.js} +0 -0
  55. package/dist/es2015/package-metadata.js +1 -1
  56. package/dist/es2015/timeline/timeline-base-view.service.d.ts +12 -0
  57. package/dist/es2015/timeline/timeline-base-view.service.js +12 -3
  58. package/dist/es2015/toolbar/toolbar-template.directive.d.ts +1 -1
  59. package/dist/es2015/toolbar/toolbar.component.d.ts +2 -0
  60. package/dist/es2015/toolbar/toolbar.component.js +10 -0
  61. package/dist/fesm2015/index.js +757 -115
  62. package/dist/fesm5/index.js +627 -88
  63. package/dist/npm/dependencies/utils.js +6 -5
  64. package/dist/npm/editing/add-task.component.js +96 -0
  65. package/dist/npm/editing/dependencies-table.component.js +133 -0
  66. package/dist/npm/editing/edit-dialog.component.js +36 -5
  67. package/dist/npm/editing/edit.service.js +88 -6
  68. package/dist/npm/editing/task-fields.component.js +45 -0
  69. package/dist/npm/expanded-state/expandable.directive.js +3 -5
  70. package/dist/npm/gantt.component.js +116 -45
  71. package/dist/npm/gantt.module.js +12 -3
  72. package/dist/npm/index.js +10 -2
  73. package/dist/npm/localization/gantt-localization.service.js +28 -0
  74. package/dist/npm/localization/messages.js +45 -1
  75. package/dist/npm/models/dependency-type.enum.js +16 -0
  76. package/dist/npm/models/events/{add-event.interface.js → task-add-event.interface.js} +0 -0
  77. package/dist/npm/models/models.js +4 -0
  78. package/dist/npm/models/{events/edit-event.interface.js → toolbar-settings.js} +0 -0
  79. package/dist/npm/package-metadata.js +1 -1
  80. package/dist/npm/timeline/timeline-base-view.service.js +17 -8
  81. package/dist/npm/toolbar/toolbar.component.js +9 -1
  82. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  83. package/package.json +5 -3
  84. package/dist/es/localization/treelist-messages.directive.js +0 -31
  85. package/dist/es2015/localization/treelist-messages.directive.js +0 -29
  86. package/dist/es2015/models/events/add-event.interface.d.ts +0 -16
  87. package/dist/es2015/models/events/add-event.interface.js +0 -4
  88. package/dist/es2015/models/events/edit-event.interface.d.ts +0 -19
  89. package/dist/es2015/models/events/edit-event.interface.js +0 -4
  90. package/dist/es2015/models/events/remove-event.interface.d.ts +0 -16
  91. package/dist/es2015/models/events/remove-event.interface.js +0 -4
  92. package/dist/es2015/models/toolbar-position.d.ts +0 -9
  93. package/dist/es2015/models/toolbar-position.js +0 -4
  94. package/dist/npm/localization/treelist-messages.directive.js +0 -33
  95. package/dist/npm/models/events/remove-event.interface.js +0 -6
  96. package/dist/npm/models/toolbar-position.js +0 -6
@@ -30,6 +30,7 @@ import { GanttTaskContentTemplateDirective } from './template-directives/task-co
30
30
  import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
31
31
  import { ViewBase } from './timeline/view-base';
32
32
  import { getEditItem } from './editing/util';
33
+ import { GanttLocalizationService } from './localization/gantt-localization.service';
33
34
  var TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
34
35
  var DEFAULT_VIEW = 'week';
35
36
  /**
@@ -120,7 +121,7 @@ var GanttComponent = /** @class */ (function () {
120
121
  /**
121
122
  * Provides a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection))
122
123
  *
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
+ * > The [`selectable`]({% slug api_gantt_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
124
125
  */
125
126
  this.isSelected = isSelected;
126
127
  /**
@@ -134,29 +135,10 @@ var GanttComponent = /** @class */ (function () {
134
135
  /**
135
136
  * Enables or disables the Gantt selection mechanism ([see example]({% slug selection_gantt %}#toc-custom-selection)).
136
137
  *
137
- * > When set to `true`, the [`isSelected`]({% slug gantt_api_ganttcomponent %}#toc-isselected) callback has to be provided.
138
+ * > When set to `true`, the [`isSelected`]({% slug api_gantt_ganttcomponent %}#toc-isselected) callback has to be provided.
138
139
  * > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
139
140
  */
140
141
  this.selectable = false;
141
- /**
142
- * The position of the toolbar.
143
- *
144
- * The possible values are:
145
- * - `top`—Positions the toolbar above the Gantt panes.
146
- * - `bottom`—Positions the toolbar below the Gantt panes.
147
- * - `both`—Displays two toolbar instances. Positions the first one above,
148
- * and the second one - below the Gantt panes.
149
- * - `none`—No toolbar is rendered.
150
- */
151
- this.toolbarPosition = 'top';
152
- /**
153
- * Gets or sets the callback function that retrieves the child items for a particular item.
154
- */
155
- this.fetchChildren = fetchChildren;
156
- /**
157
- * Gets or sets the callback function that indicates if a particular item has child items.
158
- */
159
- this.hasChildren = hasChildren;
160
142
  /**
161
143
  * Defines the dependencies that will be drawn between the rendered tasks.
162
144
  *
@@ -258,6 +240,10 @@ var GanttComponent = /** @class */ (function () {
258
240
  * Fires when the user saves an edited task.
259
241
  */
260
242
  this.save = new EventEmitter();
243
+ /**
244
+ * Fires when the user adds a task.
245
+ */
246
+ this.taskAdd = new EventEmitter();
261
247
  /**
262
248
  * Fires when the sorting of the Gantt is changed.
263
249
  * You have to handle the event yourself and sort the data.
@@ -335,6 +321,13 @@ var GanttComponent = /** @class */ (function () {
335
321
  this._rowClass = rowClassCallback;
336
322
  this._taskClass = taskClassCallback;
337
323
  this._activeView = DEFAULT_VIEW;
324
+ this._toolbarSettings = {
325
+ position: 'top',
326
+ addTaskTool: 'none',
327
+ viewSelectorTool: 'top'
328
+ };
329
+ this._fetchChildren = fetchChildren;
330
+ this._hasChildren = hasChildren;
338
331
  this.rtl = false;
339
332
  this.optionChangesSubscriptions = new Subscription();
340
333
  this.editServiceSubscription = new Subscription();
@@ -345,18 +338,27 @@ var GanttComponent = /** @class */ (function () {
345
338
  this.optionChangesSubscriptions.add(this.optionChangesService.columnChanges.subscribe(function () {
346
339
  _this.treeList.columns.notifyOnChanges();
347
340
  }));
341
+ this.editService.getSelectedItem = this.getFirstSelectedItem.bind(this);
348
342
  this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(function (show) { return _this.showEditingDialog = show; }));
349
343
  this.editServiceSubscription.add(this.editService.showConfirmationDialog.subscribe(function () { return _this.taskDelete.emit(); }));
350
344
  this.editServiceSubscription.add(this.editService.editEvent.subscribe(function (args) {
351
345
  _this[args.editResultType].emit({
352
- formGroup: args.formGroup,
346
+ taskFormGroup: args.taskFormGroup,
353
347
  item: getEditItem(args.dataItem, _this.treeList.view.data, _this.mapper),
348
+ dependencies: args.dependencies,
354
349
  sender: _this
355
350
  });
356
351
  _this.showConfirmationDialog = _this.showEditingDialog = false;
357
- _this.editService.dataItem = _this.editService.formGroup = null;
352
+ _this.editService.dataItem = _this.editService.taskFormGroup = null;
353
+ _this.updateView();
354
+ }));
355
+ this.editServiceSubscription.add(this.editService.addEvent.subscribe(function (args) {
356
+ var selectedItem = _this.getFirstSelectedItem();
357
+ _this.taskAdd.emit({
358
+ actionType: args.actionType,
359
+ selectedItem: selectedItem ? getEditItem(selectedItem, _this.treeList.view.data, _this.mapper) : null
360
+ });
358
361
  _this.updateView();
359
- _this.dependencyDomService.notifyChanges();
360
362
  }));
361
363
  this.localizationSubscription = this.localizationService.changes.subscribe(function (_a) {
362
364
  var rtl = _a.rtl;
@@ -462,6 +464,61 @@ var GanttComponent = /** @class */ (function () {
462
464
  enumerable: true,
463
465
  configurable: true
464
466
  });
467
+ Object.defineProperty(GanttComponent.prototype, "toolbarSettings", {
468
+ get: function () {
469
+ return this._toolbarSettings;
470
+ },
471
+ /**
472
+ * The toolbar configuration. Defines the position and content of the toolbar(s).
473
+ * The available properties are `position`, `addTaskTool`, and `viewSelectorTool`.
474
+ * All are optional and default to `top`.
475
+ *
476
+ * The possible values for each option are:
477
+ * - `top`—Positions the toolbar above the Gantt panes. Renders the respective tool in the top toolbar.
478
+ * - `bottom`—Positions the toolbar below the Gantt panes. Renders the respective tool in the bottom toolbar.
479
+ * - `both`—Displays two toolbar instances. Positions the first one above,
480
+ * and the second one - below the Gantt panes. Renders the respective tool in the both toolbars.
481
+ * - `none`—No toolbar is rendered when used for setting `position`.
482
+ * No add task or view selector tool is rendered when used for setting `addTaskTool` or `viewSelectorTool`.
483
+ */
484
+ set: function (value) {
485
+ this._toolbarSettings = {
486
+ position: value.position || 'top',
487
+ addTaskTool: value.addTaskTool || 'none',
488
+ viewSelectorTool: value.viewSelectorTool || 'top'
489
+ };
490
+ },
491
+ enumerable: true,
492
+ configurable: true
493
+ });
494
+ Object.defineProperty(GanttComponent.prototype, "fetchChildren", {
495
+ get: function () {
496
+ return this._fetchChildren;
497
+ },
498
+ /**
499
+ * Gets or sets the callback function that retrieves the child items for a particular item.
500
+ */
501
+ set: function (fn) {
502
+ this._fetchChildren = fn;
503
+ this.editService.fetchChildren = fn;
504
+ },
505
+ enumerable: true,
506
+ configurable: true
507
+ });
508
+ Object.defineProperty(GanttComponent.prototype, "hasChildren", {
509
+ get: function () {
510
+ return this._hasChildren;
511
+ },
512
+ /**
513
+ * Gets or sets the callback function that indicates if a particular item has child items.
514
+ */
515
+ set: function (fn) {
516
+ this._hasChildren = fn;
517
+ this.editService.hasChildren = fn;
518
+ },
519
+ enumerable: true,
520
+ configurable: true
521
+ });
465
522
  Object.defineProperty(GanttComponent.prototype, "timelinePaneOptions", {
466
523
  get: function () {
467
524
  return tslib_1.__assign({}, this._timelinePaneOptions, { size: this.treeListPaneOptions.collapsed ? '100%' : this._timelinePaneOptions.size });
@@ -613,16 +670,6 @@ var GanttComponent = /** @class */ (function () {
613
670
  enumerable: true,
614
671
  configurable: true
615
672
  });
616
- Object.defineProperty(GanttComponent.prototype, "editDialogFormGroup", {
617
- /**
618
- * @hidden
619
- */
620
- get: function () {
621
- return this.editService.formGroup;
622
- },
623
- enumerable: true,
624
- configurable: true
625
- });
626
673
  GanttComponent.prototype.ngOnChanges = function (changes) {
627
674
  if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
628
675
  this.loadTimelineData();
@@ -696,19 +743,30 @@ var GanttComponent = /** @class */ (function () {
696
743
  }
697
744
  };
698
745
  /**
699
- * Updates the data of the Gantt and forces row-related callbacks to be called anew.
746
+ * Forces the TreeList to evaluate if some data items have changed and re-renders the rows information, if needed.
747
+ * Recalculates and re-renders the Timeline period, if needed.
748
+ * Redraws changed dependencies, if needed.
749
+ * Executes all row-related callbacks anew.
700
750
  */
701
751
  GanttComponent.prototype.updateView = function () {
702
752
  if (isPresent(this.treeList)) {
703
753
  this.treeList.updateView();
704
754
  }
755
+ this.loadTimelineData();
756
+ this.dependencyDomService.notifyChanges();
705
757
  };
706
758
  /**
707
759
  * Opens the task editing dialog.
708
760
  */
709
761
  GanttComponent.prototype.editTask = function (dataItem, formGroup) {
762
+ var _this = this;
710
763
  if (!this.showEditingDialog) {
711
- this.editService.createEditDialog(dataItem, formGroup);
764
+ var taskId_1 = this.mapper.extractFromTask(dataItem, 'id');
765
+ var dependencies = this.dependencies.filter(function (item) {
766
+ return _this.mapper.extractFromDependency(item, 'toId') === taskId_1
767
+ || _this.mapper.extractFromDependency(item, 'fromId') === taskId_1;
768
+ });
769
+ this.editService.createEditDialog(dataItem, formGroup, dependencies);
712
770
  }
713
771
  };
714
772
  /**
@@ -781,7 +839,7 @@ var GanttComponent = /** @class */ (function () {
781
839
  * @hidden
782
840
  */
783
841
  GanttComponent.prototype.showToolbar = function (position) {
784
- return this.toolbarPosition !== 'none' && ([position, 'both'].indexOf(this.toolbarPosition) > -1);
842
+ return this.toolbarSettings.position !== 'none' && ([position, 'both'].indexOf(this.toolbarSettings.position) > -1);
785
843
  };
786
844
  /**
787
845
  * @hidden
@@ -949,7 +1007,7 @@ var GanttComponent = /** @class */ (function () {
949
1007
  items: [dataItem],
950
1008
  sender: this
951
1009
  });
952
- this.updateView();
1010
+ this.treeList.updateView();
953
1011
  };
954
1012
  GanttComponent.prototype.updateTreeListGroupClass = function (columns) {
955
1013
  if (columns === void 0) { columns = this.columns; }
@@ -989,6 +1047,11 @@ var GanttComponent = /** @class */ (function () {
989
1047
  var shouldToggleSelection = ctrlKey || metaKey;
990
1048
  return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
991
1049
  };
1050
+ GanttComponent.prototype.getFirstSelectedItem = function () {
1051
+ var isSelectedCallback = this.isSelected || isSelected;
1052
+ var loadedItems = this.renderedTreeListItems || [];
1053
+ return loadedItems.find(isSelectedCallback);
1054
+ };
992
1055
  var GanttComponent_1;
993
1056
  tslib_1.__decorate([
994
1057
  ViewChild(TreeListComponent, { static: true }),
@@ -1062,16 +1125,19 @@ var GanttComponent = /** @class */ (function () {
1062
1125
  ], GanttComponent.prototype, "selectable", void 0);
1063
1126
  tslib_1.__decorate([
1064
1127
  Input(),
1065
- tslib_1.__metadata("design:type", String)
1066
- ], GanttComponent.prototype, "toolbarPosition", void 0);
1128
+ tslib_1.__metadata("design:type", Object),
1129
+ tslib_1.__metadata("design:paramtypes", [Object])
1130
+ ], GanttComponent.prototype, "toolbarSettings", null);
1067
1131
  tslib_1.__decorate([
1068
1132
  Input(),
1069
- tslib_1.__metadata("design:type", Function)
1070
- ], GanttComponent.prototype, "fetchChildren", void 0);
1133
+ tslib_1.__metadata("design:type", Function),
1134
+ tslib_1.__metadata("design:paramtypes", [Function])
1135
+ ], GanttComponent.prototype, "fetchChildren", null);
1071
1136
  tslib_1.__decorate([
1072
1137
  Input(),
1073
- tslib_1.__metadata("design:type", Function)
1074
- ], GanttComponent.prototype, "hasChildren", void 0);
1138
+ tslib_1.__metadata("design:type", Function),
1139
+ tslib_1.__metadata("design:paramtypes", [Function])
1140
+ ], GanttComponent.prototype, "hasChildren", null);
1075
1141
  tslib_1.__decorate([
1076
1142
  Input(),
1077
1143
  tslib_1.__metadata("design:type", Array)
@@ -1184,6 +1250,10 @@ var GanttComponent = /** @class */ (function () {
1184
1250
  Output(),
1185
1251
  tslib_1.__metadata("design:type", EventEmitter)
1186
1252
  ], GanttComponent.prototype, "save", void 0);
1253
+ tslib_1.__decorate([
1254
+ Output(),
1255
+ tslib_1.__metadata("design:type", EventEmitter)
1256
+ ], GanttComponent.prototype, "taskAdd", void 0);
1187
1257
  tslib_1.__decorate([
1188
1258
  Output(),
1189
1259
  tslib_1.__metadata("design:type", EventEmitter)
@@ -1241,6 +1311,7 @@ var GanttComponent = /** @class */ (function () {
1241
1311
  selector: 'kendo-gantt',
1242
1312
  exportAs: 'kendoGantt',
1243
1313
  providers: [
1314
+ GanttLocalizationService,
1244
1315
  LocalizationService,
1245
1316
  {
1246
1317
  provide: DataBoundTreeComponent,
@@ -1260,7 +1331,7 @@ var GanttComponent = /** @class */ (function () {
1260
1331
  OptionChangesService,
1261
1332
  EditService
1262
1333
  ],
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 "
1334
+ template: "\n <ng-container kendoGanttLocalizedMessages\n i18n-taskEditingGeneralTabTitle=\"kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip\"\n taskEditingGeneralTabTitle=\"General\"\n\n i18n-taskEditingPredecessorsTabTitle=\"kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip\"\n taskEditingPredecessorsTabTitle=\"Predecessors\"\n\n i18n-taskEditingSuccessorsTabTitle=\"kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip\"\n taskEditingSuccessorsTabTitle=\"Successors\"\n\n i18n-taskEditingDependenciesAddButtonText=\"kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesAddButtonText=\"Add\"\n\n i18n-taskEditingDependenciesRemoveButtonText=\"kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesRemoveButtonText=\"Remove\"\n\n i18n-taskEditingDependenciesGridNameColumnTitle=\"kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridNameColumnTitle=\"Task Title\"\n\n i18n-taskEditingDependenciesGridTypeColumnTitle=\"kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridTypeColumnTitle=\"Type\"\n\n i18n-taskDeleteLabel=\"kendo.gantt.taskDeleteLabel|The label of the task delete icon\"\n taskDeleteLabel=\"Delete\"\n\n i18n-taskEditingDialogTitle=\"kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog\"\n taskEditingDialogTitle=\"Editing Task\"\n\n i18n-taskEditingDialogCloseTitle=\"kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button\"\n taskEditingDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogCloseTitle=\"kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button\"\n confirmationDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogTitle=\"kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog\"\n confirmationDialogTitle=\"Delete Task\"\n\n i18n-confirmationDialogContent=\"kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog\"\n confirmationDialogContent=\"Are you sure you want to delete this task?\"\n\n i18n-deleteButtonText=\"kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button\"\n deleteButtonText=\"Delete\"\n\n i18n-cancelButtonText=\"kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button\"\n cancelButtonText=\"Cancel\"\n\n i18n-saveButtonText=\"kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button\"\n saveButtonText=\"Save\"\n\n i18n-titleFieldInputLabel=\"kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode\"\n titleFieldInputLabel=\"Title\"\n\n i18n-startFieldInputLabel=\"kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode\"\n startFieldInputLabel=\"Start\"\n\n i18n-endFieldInputLabel=\"kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode\"\n endFieldInputLabel=\"End\"\n\n i18n-completionRatioFieldInputLabel=\"kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode\"\n completionRatioFieldInputLabel=\"Progress\"\n\n i18n-dayViewText=\"kendo.gantt.dayViewText|The text of the day view in the ViewSelector component\"\n dayViewText=\"Day\"\n\n i18n-weekViewText=\"kendo.gantt.weekViewText|The text of the week view in the ViewSelector component\"\n weekViewText=\"Week\"\n\n i18n-monthViewText=\"kendo.gantt.monthViewText|The text of the month view in the ViewSelector component\"\n monthViewText=\"Month\"\n\n i18n-yearViewText-disabled=\"kendo.gantt.yearViewText|The text of the year view in the ViewSelector component\"\n yearViewText=\"Year\"\n\n i18n-addTaskText=\"kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component\"\n addTaskText=\"Add Task\"\n\n i18n-addChildText=\"kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component\"\n addChildText=\"Add Child\"\n\n i18n-addAboveText=\"kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component\"\n addAboveText=\"Add Above\"\n\n i18n-addBelowText=\"kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component\"\n addBelowText=\"Add Below\"\n\n i18n-noRecords=\"kendo.gantt.noRecords|The label visible in the TreeList when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-filter=\"kendo.gantt.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterEqOperator=\"kendo.gantt.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.gantt.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.gantt.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.gantt.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.gantt.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.gantt.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.gantt.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.gantt.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.gantt.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.gantt.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.gantt.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.gantt.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.gantt.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.gantt.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-columnMenu=\"kendo.gantt.columnMenu|The title of the column menu icon\"\n columnMenu=\"Column Menu\"\n\n i18n-columns=\"kendo.gantt.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock-disabled=\"kendo.gantt.lock|The text shown in the column menu for the lock item\"\n lock-disabled=\"Lock\"\n\n i18n-unlock-disabled=\"kendo.gantt.unlock|The text shown in the column menu for the unlock item\"\n unlock-disabled=\"Unlock\"\n\n i18n-sortable=\"kendo.gantt.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.gantt.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"></ng-container>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('top')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-header k-toolbar k-gantt-toolbar\"\n position=\"top\"></kendo-gantt-toolbar>\n <div class=\"k-gantt-content\">\n <kendo-splitter [style.border]=\"0\">\n <kendo-splitter-pane\n class=\"k-gantt-treelist k-gantt-treelist-scrollable\"\n [collapsible]=\"treeListPaneOptions?.collapsible\"\n [collapsed]=\"treeListPaneOptions?.collapsed\"\n (collapsedChange)=\"onTreeListCollapsedChange($event)\"\n [scrollable]=\"false\">\n <kendo-treelist\n [idField]=\"taskIdField\"\n [columns]=\"columns\"\n [data]=\"data\"\n [hasChildren]=\"hasChildren\"\n [fetchChildren]=\"fetchChildren\"\n [isExpanded]=\"isExpanded\"\n [autoSize]=\"columnsAutoSize\"\n [columnMenu]=\"columnMenu\"\n [reorderable]=\"columnsReorderable\"\n [resizable]=\"columnsResizable\"\n [rowClass]=\"rowClass\"\n [isSelected]=\"isSelected\"\n [selectable]=\"selectable\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n [filterable]=\"filterMenu\"\n [filter]=\"filter\"\n (filterChange)=\"filterChange.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (dataStateChange)=\"dataStateChange.emit({\n filter: $event.filter,\n sort: $event.sort\n })\"\n (expandStateChange)=\"expandStateChange.emit($event)\"\n (expand)=\"rowExpand.emit({ dataItem: $event.dataItem })\"\n (collapse)=\"rowCollapse.emit({ dataItem: $event.dataItem })\"\n (columnReorder)=\"columnReorder.emit($event)\"\n (columnResize)=\"columnResize.emit($event)\"\n (columnVisibilityChange)=\"handleColumnVisibilityChange($event)\"\n (columnLockedChange)=\"columnLockedChange.emit($event)\"\n (selectionChange)=\"handleTreeListSelectionChange($event)\"\n (cellClick)=\"handleTreeListCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleTreeListDoubleClick\n }\"\n [scope]=\"this\"\n >\n <kendo-treelist-messages\n [noRecords]=\"getText('noRecords')\"\n [filter]=\"getText('filter')\"\n [filterEqOperator]=\"getText('filterEqOperator')\"\n [filterNotEqOperator]=\"getText('filterNotEqOperator')\"\n [filterIsNullOperator]=\"getText('filterIsNullOperator')\"\n [filterIsNotNullOperator]=\"getText('filterIsNotNullOperator')\"\n [filterIsEmptyOperator]=\"getText('filterIsEmptyOperator')\"\n [filterIsNotEmptyOperator]=\"getText('filterIsNotEmptyOperator')\"\n [filterStartsWithOperator]=\"getText('filterStartsWithOperator')\"\n [filterContainsOperator]=\"getText('filterContainsOperator')\"\n [filterNotContainsOperator]=\"getText('filterNotContainsOperator')\"\n [filterEndsWithOperator]=\"getText('filterEndsWithOperator')\"\n [filterGteOperator]=\"getText('filterGteOperator')\"\n [filterGtOperator]=\"getText('filterGtOperator')\"\n [filterLteOperator]=\"getText('filterLteOperator')\"\n [filterLtOperator]=\"getText('filterLtOperator')\"\n [filterIsTrue]=\"getText('filterIsTrue')\"\n [filterIsFalse]=\"getText('filterIsFalse')\"\n [filterBooleanAll]=\"getText('filterBooleanAll')\"\n [filterAfterOrEqualOperator]=\"getText('filterAfterOrEqualOperator')\"\n [filterAfterOperator]=\"getText('filterAfterOperator')\"\n [filterBeforeOperator]=\"getText('filterBeforeOperator')\"\n [filterBeforeOrEqualOperator]=\"getText('filterBeforeOrEqualOperator')\"\n [filterFilterButton]=\"getText('filterFilterButton')\"\n [filterClearButton]=\"getText('filterClearButton')\"\n [filterAndLogic]=\"getText('filterAndLogic')\"\n [filterOrLogic]=\"getText('filterOrLogic')\"\n [loading]=\"getText('loading')\"\n [columnMenu]=\"getText('columnMenu')\"\n [columns]=\"getText('columns')\"\n [sortable]=\"getText('sortable')\"\n [sortAscending]=\"getText('sortAscending')\"\n [sortDescending]=\"getText('sortDescending')\"\n [sortedAscending]=\"getText('sortedAscending')\"\n [sortedDescending]=\"getText('sortedDescending')\"\n [sortedDefault]=\"getText('sortedDefault')\"\n [columnsApply]=\"getText('columnsApply')\"\n [columnsReset]=\"getText('columnsReset')\"\n >\n </kendo-treelist-messages>\n </kendo-treelist>\n </kendo-splitter-pane>\n <kendo-splitter-pane\n [collapsible]=\"timelinePaneOptions?.collapsible\"\n [resizable]=\"timelinePaneOptions?.resizable\"\n [collapsed]=\"timelinePaneOptions?.collapsed\"\n [min]=\"timelinePaneOptions?.min\"\n [max]=\"timelinePaneOptions?.max\"\n [size]=\"timelinePaneOptions?.size\"\n (collapsedChange)=\"onTimelineCollapsedChange($event)\"\n (sizeChange)=\"onTimelinePaneSizeChange($event)\"\n [scrollable]=\"false\">\n <kendo-gantt-timeline\n *ngIf=\"views && views.length\"\n [rows]=\"renderedTreeListItems\"\n [slots]=\"timelineSlots\"\n [groupSlots]=\"timelineGroupSlots\"\n [tableWidth]=\"tableWidth\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate?.templateRef\"\n [taskTemplate]=\"taskTemplate?.templateRef\"\n [summaryTaskTemplate]=\"summaryTaskTemplate?.templateRef\"\n [taskClass]=\"taskClass\"\n [dependencies]=\"dependencies\"\n [hasChildren]=\"hasChildren\"\n [isTaskSelected]=\"isTaskSelected\"\n [kendoEventsOutsideAngular]=\"{\n click: handleTimelineClick,\n contextmenu: handleTimelineRightClick,\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n [scope]=\"this\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog\n *ngIf=\"showEditingDialog\"\n [data]=\"data\">\n </kendo-gantt-edit-dialog>\n <kendo-dialog\n *ngIf=\"showConfirmationDialog\"\n [width]=\"575\"\n [height]=\"170\"\n [title]=\"getText('confirmationDialogTitle')\"\n (close)=\"showConfirmationDialog = false;\">\n <span>{{ getText('confirmationDialogContent') }}</span>\n <kendo-dialog-actions layout=\"normal\">\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleDeleteConfirmation()\">{{ getText('deleteButtonText') }}</button>\n <button kendoButton (click)=\"showConfirmationDialog = false;\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
1264
1335
  }),
1265
1336
  tslib_1.__metadata("design:paramtypes", [TimelineViewService,
1266
1337
  ScrollSyncService,
@@ -5,7 +5,7 @@
5
5
  import * as tslib_1 from "tslib";
6
6
  import { NgModule } from '@angular/core';
7
7
  import { CommonModule } from '@angular/common';
8
- import { SplitterModule } from '@progress/kendo-angular-layout';
8
+ import { SplitterModule, TabStripModule } from '@progress/kendo-angular-layout';
9
9
  import { TreeListModule } from '@progress/kendo-angular-treelist';
10
10
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
11
11
  import { EventsModule } from '@progress/kendo-angular-common';
@@ -40,7 +40,11 @@ import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
40
40
  import { CustomMessagesComponent } from './localization/custom-messages.component';
41
41
  import { L10N_PREFIX } from '@progress/kendo-angular-l10n';
42
42
  import { LocalizedMessagesDirective } from './localization/localized-messages.directive';
43
- import { GanttTreeListMessagesDirective } from './localization/treelist-messages.directive';
43
+ import { GanttAddTaskComponent } from './editing/add-task.component';
44
+ import { GridModule } from '@progress/kendo-angular-grid';
45
+ import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
46
+ import { DependenciesTableComponent } from './editing/dependencies-table.component';
47
+ import { TaskFieldsComponent } from './editing/task-fields.component';
44
48
  var IMPORTED_MODULES = [
45
49
  CommonModule,
46
50
  ReactiveFormsModule,
@@ -52,7 +56,10 @@ var IMPORTED_MODULES = [
52
56
  TreeListModule,
53
57
  ButtonsModule,
54
58
  DialogModule,
55
- EventsModule
59
+ EventsModule,
60
+ TabStripModule,
61
+ GridModule,
62
+ DropDownsModule
56
63
  ];
57
64
  var DECLARATIONS = [
58
65
  GanttComponent,
@@ -89,7 +96,9 @@ var DECLARATIONS = [
89
96
  EditDialogComponent,
90
97
  CustomMessagesComponent,
91
98
  LocalizedMessagesDirective,
92
- GanttTreeListMessagesDirective
99
+ GanttAddTaskComponent,
100
+ DependenciesTableComponent,
101
+ TaskFieldsComponent
93
102
  ];
94
103
  /**
95
104
  * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})
package/dist/es/index.js CHANGED
@@ -10,12 +10,16 @@ export { MappingService } from './common/mapping.service';
10
10
  export { OptionChangesService } from './common/option-changes.service';
11
11
  export { DependencyDomService } from './dependencies/dependency-dom.service';
12
12
  export { GanttDependencyDirective } from './dependencies/gantt-dependency.directive';
13
+ export { GanttAddTaskComponent } from './editing/add-task.component';
14
+ export { DependenciesTableComponent } from './editing/dependencies-table.component';
13
15
  export { EditDialogComponent } from './editing/edit-dialog.component';
14
16
  export { EditService } from './editing/edit.service';
17
+ export { TaskFieldsComponent } from './editing/task-fields.component';
15
18
  export { CustomMessagesComponent } from './localization/custom-messages.component';
19
+ export { GanttLocalizationService } from './localization/gantt-localization.service';
16
20
  export { LocalizedMessagesDirective } from './localization/localized-messages.directive';
17
21
  export { Messages } from './localization/messages';
18
- export { GanttTreeListMessagesDirective } from './localization/treelist-messages.directive';
22
+ export { PreventableEvent } from './models/events/preventable-event';
19
23
  export { GanttHeaderTableBodyComponent } from './rendering/gantt-header-table-body.component';
20
24
  export { GanttMilestoneTaskComponent } from './rendering/gantt-milestone-task.component';
21
25
  export { GanttSummaryTaskComponent } from './rendering/gantt-summary-task.component';
@@ -0,0 +1,26 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import * as tslib_1 from "tslib";
6
+ import { Injectable } from '@angular/core';
7
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
8
+ /**
9
+ * @hidden
10
+ *
11
+ * Needed to keep the Gantt's LocalizationService reference and be able to use it component's inside the TabStrip
12
+ */
13
+ var GanttLocalizationService = /** @class */ (function () {
14
+ function GanttLocalizationService(localizationService) {
15
+ this.localizationService = localizationService;
16
+ }
17
+ GanttLocalizationService.prototype.get = function (token) {
18
+ return this.localizationService.get(token);
19
+ };
20
+ GanttLocalizationService = tslib_1.__decorate([
21
+ Injectable(),
22
+ tslib_1.__metadata("design:paramtypes", [LocalizationService])
23
+ ], GanttLocalizationService);
24
+ return GanttLocalizationService;
25
+ }());
26
+ export { GanttLocalizationService };
@@ -13,6 +13,38 @@ var Messages = /** @class */ (function (_super) {
13
13
  function Messages() {
14
14
  return _super !== null && _super.apply(this, arguments) || this;
15
15
  }
16
+ tslib_1.__decorate([
17
+ Input(),
18
+ tslib_1.__metadata("design:type", String)
19
+ ], Messages.prototype, "taskEditingGeneralTabTitle", void 0);
20
+ tslib_1.__decorate([
21
+ Input(),
22
+ tslib_1.__metadata("design:type", String)
23
+ ], Messages.prototype, "taskEditingPredecessorsTabTitle", void 0);
24
+ tslib_1.__decorate([
25
+ Input(),
26
+ tslib_1.__metadata("design:type", String)
27
+ ], Messages.prototype, "taskEditingSuccessorsTabTitle", void 0);
28
+ tslib_1.__decorate([
29
+ Input(),
30
+ tslib_1.__metadata("design:type", String)
31
+ ], Messages.prototype, "taskEditingDependenciesAddButtonText", void 0);
32
+ tslib_1.__decorate([
33
+ Input(),
34
+ tslib_1.__metadata("design:type", String)
35
+ ], Messages.prototype, "taskEditingDependenciesRemoveButtonText", void 0);
36
+ tslib_1.__decorate([
37
+ Input(),
38
+ tslib_1.__metadata("design:type", String)
39
+ ], Messages.prototype, "taskEditingDependenciesGridNameColumnTitle", void 0);
40
+ tslib_1.__decorate([
41
+ Input(),
42
+ tslib_1.__metadata("design:type", String)
43
+ ], Messages.prototype, "taskEditingDependenciesGridTypeColumnTitle", void 0);
44
+ tslib_1.__decorate([
45
+ Input(),
46
+ tslib_1.__metadata("design:type", String)
47
+ ], Messages.prototype, "deleteButtonText", void 0);
16
48
  tslib_1.__decorate([
17
49
  Input(),
18
50
  tslib_1.__metadata("design:type", String)
@@ -36,7 +68,19 @@ var Messages = /** @class */ (function (_super) {
36
68
  tslib_1.__decorate([
37
69
  Input(),
38
70
  tslib_1.__metadata("design:type", String)
39
- ], Messages.prototype, "deleteButtonText", void 0);
71
+ ], Messages.prototype, "addTaskText", void 0);
72
+ tslib_1.__decorate([
73
+ Input(),
74
+ tslib_1.__metadata("design:type", String)
75
+ ], Messages.prototype, "addChildText", void 0);
76
+ tslib_1.__decorate([
77
+ Input(),
78
+ tslib_1.__metadata("design:type", String)
79
+ ], Messages.prototype, "addAboveText", void 0);
80
+ tslib_1.__decorate([
81
+ Input(),
82
+ tslib_1.__metadata("design:type", String)
83
+ ], Messages.prototype, "addBelowText", void 0);
40
84
  tslib_1.__decorate([
41
85
  Input(),
42
86
  tslib_1.__metadata("design:type", String)
@@ -2,3 +2,19 @@
2
2
  * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
+ /**
6
+ * The dependency type when two tasks are connected.
7
+ *
8
+ * The supported values are:
9
+ * * `FF`&mdash;from 'finish' to 'finish'
10
+ * * `FS`&mdash;from 'finish' to 'start'
11
+ * * `SS`&mdash;from 'start' to 'start'
12
+ * * `SF`&mdash;from 'start' to 'finish'
13
+ */
14
+ export var DependencyType;
15
+ (function (DependencyType) {
16
+ DependencyType[DependencyType["FF"] = 0] = "FF";
17
+ DependencyType[DependencyType["FS"] = 1] = "FS";
18
+ DependencyType[DependencyType["SF"] = 2] = "SF";
19
+ DependencyType[DependencyType["SS"] = 3] = "SS"; // task B can't start before task A starts
20
+ })(DependencyType || (DependencyType = {}));
@@ -2,3 +2,5 @@
2
2
  * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
+ export { DependencyType } from './dependency-type.enum';
6
+ export { CellCloseEvent } from './events/cell-close-event.interface';
@@ -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: 1639044748,
12
+ publishDate: 1641921322,
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
  };
@@ -5,9 +5,18 @@
5
5
  import { orderBy } from '@progress/kendo-data-query';
6
6
  import { isWorkDay, isWorkHour, lastDayOfWeek } from '../utils';
7
7
  import { addDays, firstDayInWeek, getDate, firstDayOfMonth, lastDayOfMonth, addMonths, addWeeks } from '@progress/kendo-date-math';
8
- var DAY_FORMAT = 'E d/MM';
9
- var HOUR_FORMAT = 'HH:mm aa';
10
- var MONTH_FORMAT = 'MMM';
8
+ /**
9
+ * @hidden
10
+ */
11
+ export var DAY_FORMAT = 'E d/MM';
12
+ /**
13
+ * @hidden
14
+ */
15
+ export var HOUR_FORMAT = 'HH:mm aa';
16
+ /**
17
+ * @hidden
18
+ */
19
+ export var MONTH_FORMAT = 'MMM';
11
20
  /**
12
21
  * @hidden
13
22
  */
@@ -47,6 +47,14 @@ var ToolbarComponent = /** @class */ (function () {
47
47
  this.gantt.activeViewChange.emit(e);
48
48
  this.scrollSyncService.resetTimelineScrollLeft();
49
49
  };
50
+ tslib_1.__decorate([
51
+ Input(),
52
+ tslib_1.__metadata("design:type", Boolean)
53
+ ], ToolbarComponent.prototype, "showAddTask", void 0);
54
+ tslib_1.__decorate([
55
+ Input(),
56
+ tslib_1.__metadata("design:type", Boolean)
57
+ ], ToolbarComponent.prototype, "showViewSelector", void 0);
50
58
  tslib_1.__decorate([
51
59
  Input(),
52
60
  tslib_1.__metadata("design:type", String),
@@ -55,7 +63,7 @@ var ToolbarComponent = /** @class */ (function () {
55
63
  ToolbarComponent = tslib_1.__decorate([
56
64
  Component({
57
65
  selector: 'kendo-gantt-toolbar',
58
- template: "\n <ng-container *ngIf=\"!renderTemplate\">\n <span class=\"k-spacer k-toolbar-spacer\"></span>\n <kendo-gantt-view-selector\n [views]=\"gantt.viewTypes\"\n [activeView]=\"gantt.activeView\"\n (activeViewChange)=\"onViewChange($event)\"></kendo-gantt-view-selector>\n </ng-container>\n <ng-template\n *ngIf=\"renderTemplate\"\n [ngTemplateOutlet]=\"toolbarTemplateRef\"\n [ngTemplateOutletContext]=\"context\"\n >\n </ng-template>\n "
66
+ template: "\n <ng-container *ngIf=\"!renderTemplate\">\n <kendo-gantt-add-task *ngIf=\"showAddTask\"></kendo-gantt-add-task>\n <span class=\"k-spacer k-toolbar-spacer\"></span>\n <kendo-gantt-view-selector\n *ngIf=\"showViewSelector\"\n [views]=\"gantt.viewTypes\"\n [activeView]=\"gantt.activeView\"\n (activeViewChange)=\"onViewChange($event)\"></kendo-gantt-view-selector>\n </ng-container>\n <ng-template\n *ngIf=\"renderTemplate\"\n [ngTemplateOutlet]=\"toolbarTemplateRef\"\n [ngTemplateOutletContext]=\"context\"\n >\n </ng-template>\n "
59
67
  }),
60
68
  tslib_1.__metadata("design:paramtypes", [GanttComponent,
61
69
  ScrollSyncService])