@progress/kendo-angular-gantt 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -76
  2. package/dist/cdn/main.js +23 -1
  3. package/dist/es/columns/column.component.js +5 -0
  4. package/dist/es/columns/columns.js +1 -0
  5. package/dist/es/columns/edit-template.directive.js +34 -0
  6. package/dist/es/columns/span-column.component.js +6 -0
  7. package/dist/es/common/default-callbacks.js +4 -0
  8. package/dist/es/editing/edit-dialog.component.js +44 -0
  9. package/dist/es/editing/edit.service.js +39 -0
  10. package/dist/es/editing/util.js +17 -0
  11. package/dist/es/gantt.component.js +478 -22
  12. package/dist/es/gantt.module.js +62 -5
  13. package/dist/es/index.js +6 -0
  14. package/dist/es/localization/custom-messages.component.js +44 -0
  15. package/dist/es/localization/localized-messages.directive.js +35 -0
  16. package/dist/es/localization/messages.js +246 -0
  17. package/dist/es/localization/treelist-messages.directive.js +31 -0
  18. package/dist/es/main.js +1 -0
  19. package/dist/es/models/events/cell-click-event.interface.js +4 -0
  20. package/dist/es/models/events/cell-close-event.interface.js +19 -0
  21. package/dist/es/models/events/preventable-event.js +32 -0
  22. package/dist/es/models/events/task-click-event.interface.js +4 -0
  23. package/dist/es/models/events/task-edit-event.interface.js +4 -0
  24. package/dist/es/models/gantt-task-model-fields.interface.js +2 -1
  25. package/dist/es/package-metadata.js +1 -1
  26. package/dist/es/rendering/gantt-milestone-task.component.js +1 -1
  27. package/dist/es/rendering/gantt-summary-task.component.js +1 -1
  28. package/dist/es/rendering/gantt-task-base.js +8 -0
  29. package/dist/es/rendering/gantt-task.component.js +12 -4
  30. package/dist/es/rendering/gantt-tasks-table-body.component.js +5 -1
  31. package/dist/es/selection/selectable.directive.js +141 -0
  32. package/dist/es/selection/selection-change-event.js +4 -0
  33. package/dist/es/timeline/gantt-timeline.component.js +5 -1
  34. package/dist/es/toolbar/view-selector.component.js +7 -4
  35. package/dist/es/utils.js +48 -1
  36. package/dist/es2015/columns/column.component.d.ts +2 -0
  37. package/dist/es2015/columns/column.component.js +5 -0
  38. package/dist/es2015/columns/columns.d.ts +1 -0
  39. package/dist/es2015/columns/columns.js +1 -0
  40. package/dist/es2015/columns/edit-template.directive.d.ts +23 -0
  41. package/dist/es2015/columns/edit-template.directive.js +33 -0
  42. package/dist/es2015/columns/span-column.component.d.ts +2 -0
  43. package/dist/es2015/columns/span-column.component.js +6 -0
  44. package/dist/es2015/common/default-callbacks.d.ts +4 -0
  45. package/dist/es2015/common/default-callbacks.js +4 -0
  46. package/dist/es2015/editing/edit-dialog.component.d.ts +21 -0
  47. package/dist/es2015/editing/edit-dialog.component.js +86 -0
  48. package/dist/es2015/editing/edit.service.d.ts +20 -0
  49. package/dist/es2015/editing/edit.service.js +41 -0
  50. package/dist/es2015/editing/util.d.ts +10 -0
  51. package/dist/es2015/editing/util.js +17 -0
  52. package/dist/es2015/gantt.component.d.ts +236 -12
  53. package/dist/es2015/gantt.component.js +662 -21
  54. package/dist/es2015/gantt.module.d.ts +29 -1
  55. package/dist/es2015/gantt.module.js +62 -5
  56. package/dist/es2015/index.d.ts +6 -0
  57. package/dist/es2015/index.js +6 -0
  58. package/dist/es2015/index.metadata.json +1 -1
  59. package/dist/es2015/localization/custom-messages.component.d.ts +15 -0
  60. package/dist/es2015/localization/custom-messages.component.js +36 -0
  61. package/dist/es2015/localization/localized-messages.directive.d.ts +13 -0
  62. package/dist/es2015/localization/localized-messages.directive.js +31 -0
  63. package/dist/es2015/localization/messages.d.ts +246 -0
  64. package/dist/es2015/localization/messages.js +240 -0
  65. package/dist/es2015/localization/treelist-messages.directive.d.ts +14 -0
  66. package/dist/es2015/localization/treelist-messages.directive.js +29 -0
  67. package/dist/es2015/main.d.ts +2 -0
  68. package/dist/es2015/main.js +1 -0
  69. package/dist/es2015/models/events/cell-click-event.interface.d.ts +43 -0
  70. package/dist/es2015/models/events/cell-click-event.interface.js +4 -0
  71. package/dist/es2015/models/events/cell-close-event.interface.d.ts +48 -0
  72. package/dist/es2015/models/events/cell-close-event.interface.js +14 -0
  73. package/dist/es2015/models/events/preventable-event.d.ts +24 -0
  74. package/dist/es2015/models/events/preventable-event.js +30 -0
  75. package/dist/es2015/models/events/task-click-event.interface.d.ts +30 -0
  76. package/dist/es2015/models/events/task-click-event.interface.js +4 -0
  77. package/dist/es2015/models/events/task-edit-event.interface.d.ts +46 -0
  78. package/dist/es2015/models/events/task-edit-event.interface.js +4 -0
  79. package/dist/es2015/models/gantt-task-model-fields.interface.d.ts +1 -0
  80. package/dist/es2015/models/gantt-task-model-fields.interface.js +2 -1
  81. package/dist/es2015/models/models.d.ts +2 -0
  82. package/dist/es2015/package-metadata.js +1 -1
  83. package/dist/es2015/rendering/gantt-milestone-task.component.js +2 -0
  84. package/dist/es2015/rendering/gantt-summary-task.component.js +2 -0
  85. package/dist/es2015/rendering/gantt-task-base.d.ts +2 -0
  86. package/dist/es2015/rendering/gantt-task-base.js +8 -0
  87. package/dist/es2015/rendering/gantt-task.component.d.ts +4 -1
  88. package/dist/es2015/rendering/gantt-task.component.js +18 -2
  89. package/dist/es2015/rendering/gantt-tasks-table-body.component.d.ts +1 -0
  90. package/dist/es2015/rendering/gantt-tasks-table-body.component.js +11 -1
  91. package/dist/es2015/selection/selectable.directive.d.ts +42 -0
  92. package/dist/es2015/selection/selectable.directive.js +122 -0
  93. package/dist/es2015/selection/selection-change-event.d.ts +25 -0
  94. package/dist/es2015/selection/selection-change-event.js +4 -0
  95. package/dist/es2015/timeline/gantt-timeline.component.d.ts +1 -0
  96. package/dist/es2015/timeline/gantt-timeline.component.js +5 -0
  97. package/dist/es2015/toolbar/view-selector.component.d.ts +3 -0
  98. package/dist/es2015/toolbar/view-selector.component.js +8 -7
  99. package/dist/es2015/utils.d.ts +39 -0
  100. package/dist/es2015/utils.js +48 -1
  101. package/dist/fesm2015/index.js +1388 -35
  102. package/dist/fesm5/index.js +1191 -45
  103. package/dist/npm/columns/column.component.js +5 -0
  104. package/dist/npm/columns/columns.js +2 -0
  105. package/dist/npm/columns/edit-template.directive.js +36 -0
  106. package/dist/npm/columns/span-column.component.js +6 -0
  107. package/dist/npm/common/default-callbacks.js +4 -0
  108. package/dist/npm/editing/edit-dialog.component.js +46 -0
  109. package/dist/npm/editing/edit.service.js +41 -0
  110. package/dist/npm/editing/util.js +19 -0
  111. package/dist/npm/gantt.component.js +475 -19
  112. package/dist/npm/gantt.module.js +61 -4
  113. package/dist/npm/index.js +12 -0
  114. package/dist/npm/localization/custom-messages.component.js +46 -0
  115. package/dist/npm/localization/localized-messages.directive.js +37 -0
  116. package/dist/npm/localization/messages.js +248 -0
  117. package/dist/npm/localization/treelist-messages.directive.js +33 -0
  118. package/dist/npm/main.js +2 -0
  119. package/dist/npm/models/events/cell-click-event.interface.js +6 -0
  120. package/dist/npm/models/events/cell-close-event.interface.js +21 -0
  121. package/dist/npm/models/events/preventable-event.js +34 -0
  122. package/dist/npm/models/events/task-click-event.interface.js +6 -0
  123. package/dist/npm/models/events/task-edit-event.interface.js +6 -0
  124. package/dist/npm/models/gantt-task-model-fields.interface.js +2 -1
  125. package/dist/npm/package-metadata.js +1 -1
  126. package/dist/npm/rendering/gantt-milestone-task.component.js +1 -1
  127. package/dist/npm/rendering/gantt-summary-task.component.js +1 -1
  128. package/dist/npm/rendering/gantt-task-base.js +8 -0
  129. package/dist/npm/rendering/gantt-task.component.js +12 -4
  130. package/dist/npm/rendering/gantt-tasks-table-body.component.js +5 -1
  131. package/dist/npm/selection/selectable.directive.js +143 -0
  132. package/dist/npm/selection/selection-change-event.js +6 -0
  133. package/dist/npm/timeline/gantt-timeline.component.js +5 -1
  134. package/dist/npm/toolbar/view-selector.component.js +7 -4
  135. package/dist/npm/utils.js +47 -0
  136. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  137. package/package.json +5 -2
@@ -5,17 +5,23 @@
5
5
  import { __decorate, __metadata, __param } from 'tslib';
6
6
  import { Input, EventEmitter, Injectable, Directive, Optional, TemplateRef, QueryList, ContentChildren, ContentChild, Component, forwardRef, SkipSelf, Host, Injector, NgZone, isDevMode, ViewChild, HostBinding, Output, Renderer2, ElementRef, ChangeDetectorRef, NgModule } from '@angular/core';
7
7
  import { ColumnBase, ColumnComponent, ColumnGroupComponent, SpanColumnComponent, TreeListComponent, DataBoundTreeComponent, ExpandableTreeComponent, FlatBindingDirective, HierarchyBindingDirective, ExpandableDirective, TreeListModule } from '@progress/kendo-angular-treelist';
8
+ import { cloneDate, addWeeks, firstDayInWeek, addDays, getDate, lastDayOfMonth, firstDayOfMonth, addMonths, isEqualDate, MS_PER_HOUR, MS_PER_DAY } from '@progress/kendo-date-math';
8
9
  import { of, Subject, Subscription, fromEvent } from 'rxjs';
9
10
  import { validatePackage } from '@progress/kendo-licensing';
10
- import { isDocumentAvailable, anyChanged } from '@progress/kendo-angular-common';
11
+ import { isDocumentAvailable, closestInScope, matchesClasses, anyChanged, hasObservers, EventsModule } from '@progress/kendo-angular-common';
11
12
  import { IntlService } from '@progress/kendo-angular-intl';
12
13
  import { orderBy } from '@progress/kendo-data-query';
13
- import { cloneDate, addWeeks, firstDayInWeek, addDays, getDate, lastDayOfMonth, firstDayOfMonth, addMonths, isEqualDate, MS_PER_HOUR, MS_PER_DAY } from '@progress/kendo-date-math';
14
14
  import { getter } from '@progress/kendo-common';
15
15
  import { map, distinctUntilChanged, take, filter, switchMap } from 'rxjs/operators';
16
+ import { LocalizationService, ComponentMessages, L10N_PREFIX } from '@progress/kendo-angular-l10n';
16
17
  import { CommonModule } from '@angular/common';
17
18
  import { SplitterModule } from '@progress/kendo-angular-layout';
18
19
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
20
+ import { DialogModule } from '@progress/kendo-angular-dialog';
21
+ import { FormGroup, ReactiveFormsModule } from '@angular/forms';
22
+ import { LabelModule } from '@progress/kendo-angular-label';
23
+ import { InputsModule } from '@progress/kendo-angular-inputs';
24
+ import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
19
25
 
20
26
  /**
21
27
  * @hidden
@@ -24,7 +30,7 @@ const packageMetadata = {
24
30
  name: '@progress/kendo-angular-gantt',
25
31
  productName: 'Kendo UI for Angular',
26
32
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
27
- publishDate: 1635941338,
33
+ publishDate: 1638864709,
28
34
  version: '',
29
35
  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'
30
36
  };
@@ -250,6 +256,33 @@ HeaderTemplateDirective = __decorate([
250
256
  __metadata("design:paramtypes", [TemplateRef])
251
257
  ], HeaderTemplateDirective);
252
258
 
259
+ /**
260
+ * Represents the column edit-cell template of the Gantt.
261
+ * Helps to customize the content of the edited cells. To define the cell template, nest an `<ng-template>`
262
+ * tag with the `kendoGanttEditTemplate` directive inside a `<kendo-gantt-column>` tag.
263
+ *
264
+ * The template context contains the following fields:
265
+ * - `column`&mdash;The current column instance.
266
+ * - `dataItem`&mdash;The current data item.
267
+ * - `cellContext`&mdash;An object used to pass context information to built-in directives.
268
+ * - `formGroup`&mdash;The current [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }}).
269
+ * If you use the Gantt inside [Template-Driven Forms]({{ site.data.urls.angular['forms'] }}), it will be `undefined`.
270
+ * - `isNew`&mdash;The state of the current item.
271
+ * - `rowIndex`&mdash;The current row index. If inside a new item row, `rowIndex` is `-1`.
272
+ */
273
+ let EditTemplateDirective = class EditTemplateDirective {
274
+ constructor(templateRef) {
275
+ this.templateRef = templateRef;
276
+ }
277
+ };
278
+ EditTemplateDirective = __decorate([
279
+ Directive({
280
+ selector: '[kendoGanttEditTemplate]'
281
+ }),
282
+ __param(0, Optional()),
283
+ __metadata("design:paramtypes", [TemplateRef])
284
+ ], EditTemplateDirective);
285
+
253
286
  var GanttColumnComponent_1;
254
287
  let GanttColumnComponent = GanttColumnComponent_1 = class GanttColumnComponent extends ColumnComponent {
255
288
  constructor(options, parent) {
@@ -305,6 +338,10 @@ __decorate([
305
338
  ContentChild(CellTemplateDirective, { static: false }),
306
339
  __metadata("design:type", CellTemplateDirective)
307
340
  ], GanttColumnComponent.prototype, "template", void 0);
341
+ __decorate([
342
+ ContentChild(EditTemplateDirective, { static: false }),
343
+ __metadata("design:type", EditTemplateDirective)
344
+ ], GanttColumnComponent.prototype, "editTemplate", void 0);
308
345
  __decorate([
309
346
  ContentChild(FilterCellTemplateDirective, { static: false }),
310
347
  __metadata("design:type", FilterCellTemplateDirective)
@@ -496,6 +533,7 @@ let GanttSpanColumnComponent = GanttSpanColumnComponent_1 = class GanttSpanColum
496
533
  */
497
534
  this.childColumns = new QueryList();
498
535
  this.template = new QueryList();
536
+ this.editTemplate = new QueryList();
499
537
  }
500
538
  ngOnChanges() {
501
539
  this.options.notifyColumnChanges();
@@ -509,6 +547,10 @@ __decorate([
509
547
  ContentChildren(CellTemplateDirective, { descendants: false }),
510
548
  __metadata("design:type", QueryList)
511
549
  ], GanttSpanColumnComponent.prototype, "template", void 0);
550
+ __decorate([
551
+ ContentChildren(EditTemplateDirective, { descendants: false }),
552
+ __metadata("design:type", QueryList)
553
+ ], GanttSpanColumnComponent.prototype, "editTemplate", void 0);
512
554
  __decorate([
513
555
  Input(),
514
556
  __metadata("design:type", Boolean)
@@ -585,6 +627,10 @@ const rowClassCallback = () => null;
585
627
  * @hidden
586
628
  */
587
629
  const taskClassCallback = () => null;
630
+ /**
631
+ * @hidden
632
+ */
633
+ const isSelected = () => false;
588
634
 
589
635
  /**
590
636
  * @hidden
@@ -681,6 +727,44 @@ const isColumnGroup = (column) => column.isColumnGroup;
681
727
  * @hidden
682
728
  */
683
729
  const isNumber = (contender) => typeof contender === 'number' && !isNaN(contender);
730
+ /**
731
+ * @hidden
732
+ */
733
+ const isString = (contender) => typeof contender === 'string';
734
+ /**
735
+ * @hidden
736
+ *
737
+ * Gets the closest timeline task element index from an event target.
738
+ * Uses the `data-task-index` attribute assigned to each task.
739
+ * Restricts the search up to the provided gantt element from the second param.
740
+ */
741
+ const getClosestTaskIndex = (element, gantt) => {
742
+ const task = closestInScope(element, matchesClasses('k-task'), gantt);
743
+ if (!isPresent(task)) {
744
+ return null;
745
+ }
746
+ return Number(task.getAttribute('data-task-index'));
747
+ };
748
+ /**
749
+ * @hidden
750
+ *
751
+ * Checks whether the queried item or its parent items has a `k-task` selector.
752
+ * Restricts the search up to the provided gantt element from the second param.
753
+ */
754
+ const isTask = (contender, gantt) => {
755
+ const task = closestInScope(contender, matchesClasses('k-task'), gantt);
756
+ return isPresent(task);
757
+ };
758
+ /**
759
+ * @hidden
760
+ *
761
+ * Checks whether the queried item or its parent items has a `k-task-actions` selector - used for the clear button.
762
+ * Restricts the search up to the provided gantt element from the second param.
763
+ */
764
+ const isClearButton = (contender, gantt) => {
765
+ const clearButtonContainer = closestInScope(contender, matchesClasses('k-task-actions'), gantt);
766
+ return isPresent(clearButtonContainer);
767
+ };
684
768
 
685
769
  const DAY_FORMAT = 'E d/MM';
686
770
  const HOUR_FORMAT = 'HH:mm aa';
@@ -845,7 +929,8 @@ const DEFAULT_TASK_MODEL_FIELDS = Object.freeze({
845
929
  start: 'start',
846
930
  end: 'end',
847
931
  title: 'title',
848
- completionRatio: 'completionRatio'
932
+ completionRatio: 'completionRatio',
933
+ children: 'children'
849
934
  });
850
935
 
851
936
  /**
@@ -1224,6 +1309,40 @@ DependencyDomService = __decorate([
1224
1309
  __metadata("design:paramtypes", [MappingService])
1225
1310
  ], DependencyDomService);
1226
1311
 
1312
+ /**
1313
+ * @hidden
1314
+ */
1315
+ let EditService = class EditService {
1316
+ /**
1317
+ * @hidden
1318
+ */
1319
+ constructor() {
1320
+ this.showEditingDialog = new Subject();
1321
+ this.showConfirmationDialog = new Subject();
1322
+ this.editEvent = new Subject();
1323
+ }
1324
+ createEditDialog(dataItem, formGroup) {
1325
+ this.dataItem = dataItem;
1326
+ this.formGroup = formGroup;
1327
+ this.showEditingDialog.next(true);
1328
+ }
1329
+ closeEditDialog() {
1330
+ this.showEditingDialog.next(false);
1331
+ this.dataItem = undefined;
1332
+ this.formGroup = undefined;
1333
+ }
1334
+ triggerEditEvent(editResultType) {
1335
+ this.editEvent.next({
1336
+ formGroup: this.formGroup,
1337
+ dataItem: this.dataItem,
1338
+ editResultType
1339
+ });
1340
+ }
1341
+ };
1342
+ EditService = __decorate([
1343
+ Injectable()
1344
+ ], EditService);
1345
+
1227
1346
  /**
1228
1347
  * @hidden
1229
1348
  */
@@ -1511,21 +1630,126 @@ __decorate([
1511
1630
  __metadata("design:type", Number)
1512
1631
  ], ViewBase.prototype, "slotWidth", void 0);
1513
1632
 
1633
+ /**
1634
+ * @hidden
1635
+ */
1636
+ const getEditItem = (dataItem, data, mapper) => {
1637
+ const treeListDataItem = data.find(item => mapper.extractFromTask(item.data, 'id') === mapper.extractFromTask(dataItem, 'id'));
1638
+ return mapPath(treeListDataItem);
1639
+ };
1640
+ const mapPath = (item) => ({
1641
+ dataItem: item.data,
1642
+ parent: item.parent.data ? mapPath(item.parent) : null
1643
+ });
1644
+
1514
1645
  var GanttComponent_1;
1515
1646
  const TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
1516
1647
  const DEFAULT_VIEW = 'week';
1517
1648
  /**
1518
- * The GiGantt
1649
+ * Represents the Kendo UI Gantt component for Angular.
1650
+ *
1651
+ * @example
1652
+ * ```ts-preview
1653
+ * _@Component({
1654
+ * selector: 'my-app',
1655
+ * template: `
1656
+ * <kendo-gantt
1657
+ * [style.height.px]="500"
1658
+ * [kendoGanttHierarchyBinding]="data"
1659
+ * childrenField="subtasks"
1660
+ * [dependencies]="dependencies">
1661
+ * <kendo-gantt-column
1662
+ * field="title"
1663
+ * title="Task"
1664
+ * [width]="200"
1665
+ * [expandable]="true"></kendo-gantt-column>
1666
+ * <kendo-gantt-column
1667
+ * field="start"
1668
+ * title="Start"
1669
+ * format="dd-MMM-yyyy"
1670
+ * [width]="120"></kendo-gantt-column>
1671
+ * <kendo-gantt-column
1672
+ * field="end"
1673
+ * title="End"
1674
+ * format="dd-MMM-yyyy"
1675
+ * [width]="120"></kendo-gantt-column>
1676
+ * <kendo-gantt-timeline-day-view></kendo-gantt-timeline-day-view>
1677
+ * <kendo-gantt-timeline-week-view></kendo-gantt-timeline-week-view>
1678
+ * <kendo-gantt-timeline-month-view></kendo-gantt-timeline-month-view>
1679
+ * </kendo-gantt>
1680
+ * `
1681
+ * })
1682
+ * class AppComponent {
1683
+ * public data: Task[] = [{
1684
+ * id: 7, title: 'Validation and R&D', start: new Date('2014-06-02T00:00:00.000Z'),
1685
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.45708333333333334,
1686
+ * subtasks: [
1687
+ * { id: 18, title: 'Project Kickoff', start: new Date('2014-06-02T00:00:00.000Z'),
1688
+ * end: new Date('2014-06-02T00:00:00.000Z'), completionRatio: 0.23 },
1689
+ * { id: 11, title: 'Research', start: new Date('2014-06-02T00:00:00.000Z'),
1690
+ * end: new Date('2014-06-07T00:00:00.000Z'), completionRatio: 0.5766666666666667,
1691
+ * subtasks: [
1692
+ * { id: 19, title: 'Validation', start: new Date('2014-06-02T00:00:00.000Z'),
1693
+ * end: new Date('2014-06-04T00:00:00.000Z'), completionRatio: 0.25 },
1694
+ * { id: 39, title: 'Specification', start: new Date('2014-06-04T00:00:00.000Z'),
1695
+ * end: new Date('2014-06-07T00:00:00.000Z'), completionRatio: 0.66 }]
1696
+ * }, { id: 13, title: 'Implementation', start: new Date('2014-06-08T00:00:00.000Z'),
1697
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.77,
1698
+ * subtasks: [
1699
+ * { id: 24, title: 'Prototype', start: new Date('2014-06-08T00:00:00.000Z'),
1700
+ * end: new Date('2014-06-14T00:00:00.000Z'), completionRatio: 0.77 },
1701
+ * { id: 29, title: 'UI and Interaction', start: new Date('2014-06-14T00:00:00.000Z'),
1702
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.6 }]
1703
+ * }, { id: 17, title: 'Release', start: new Date('2014-06-19T00:00:00.000Z'),
1704
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0 }]
1705
+ * }];
1706
+ *
1707
+ * public dependencies: GanttDependency[] = [
1708
+ * { id: 528, fromId: 18, toId: 19, type: DependencyType.FS },
1709
+ * { id: 529, fromId: 19, toId: 39, type: DependencyType.FS },
1710
+ * { id: 535, fromId: 24, toId: 29, type: DependencyType.FS },
1711
+ * { id: 551, fromId: 13, toId: 29, type: DependencyType.FF },
1712
+ * { id: 777, fromId: 7, toId: 11, type: DependencyType.SF },
1713
+ * { id: 556, fromId: 39, toId: 24, type: DependencyType.FS },
1714
+ * { id: 546, fromId: 29, toId: 17, type: DependencyType.FS },
1715
+ * ];
1716
+ * }
1717
+ * ```
1519
1718
  */
1520
1719
  let GanttComponent = GanttComponent_1 = class GanttComponent {
1521
- constructor(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService) {
1720
+ constructor(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone) {
1522
1721
  this.timelineViewService = timelineViewService;
1523
1722
  this.scrollSyncService = scrollSyncService;
1524
1723
  this.renderer = renderer;
1525
1724
  this.mapper = mapper;
1526
1725
  this.optionChangesService = optionChangesService;
1527
1726
  this.dependencyDomService = dependencyDomService;
1727
+ this.editService = editService;
1728
+ this.localizationService = localizationService;
1729
+ this.hostElement = hostElement;
1730
+ this.zone = zone;
1528
1731
  this.hostClasses = true;
1732
+ /**
1733
+ * Provides a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection))
1734
+ *
1735
+ * > The [`selectable`]({% slug gantt_api_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
1736
+ */
1737
+ this.isSelected = isSelected;
1738
+ /**
1739
+ * Fires when the Gantt selection is changed through user interaction.
1740
+ *
1741
+ * Holds data about the affected [`items`]({% slug api_gantt_selectionchangeevent %}#toc-items) and the attempted [`action`]({% slug api_gantt_selectionchangeevent %}#toc-action):
1742
+ * - `select` - Triggered on `click` or `ctrl + click` on deselected items.
1743
+ * - `remove` - Triggered on `ctrl + click` on selected items.
1744
+ */
1745
+ this.selectionChange = new EventEmitter();
1746
+ /**
1747
+ * Enables or disables the Gantt selection mechanism ([see example]({% slug selection_gantt %}#toc-custom-selection)).
1748
+ *
1749
+ * > When set to `true`, the [`isSelected`]({% slug gantt_api_ganttcomponent %}#toc-isselected) callback has to be provided.
1750
+ * > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
1751
+ */
1752
+ this.selectable = false;
1529
1753
  /**
1530
1754
  * The position of the toolbar.
1531
1755
  *
@@ -1612,10 +1836,40 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1612
1836
  * Fires when an item is expanded.
1613
1837
  */
1614
1838
  this.rowExpand = new EventEmitter();
1839
+ /**
1840
+ * Fires when a Gantt task in the timeline pane is double-clicked. The data item, associated with the clicked task,
1841
+ * is available in the event data. Use the event handler to open a task editing dialog as necessary.
1842
+ */
1843
+ this.taskDblClick = new EventEmitter();
1844
+ /**
1845
+ * Fires when the user double clicks a cell.
1846
+ */
1847
+ this.cellDblClick = new EventEmitter();
1848
+ /**
1849
+ * Fires when the user leaves an edited cell.
1850
+ */
1851
+ this.cellClose = new EventEmitter();
1852
+ /**
1853
+ * Fires when the end user clicks the `Delete` button in the task editing dialog or the task delete icon.
1854
+ * Use the event handler to open a confirmation dialog when necessary.
1855
+ */
1856
+ this.taskDelete = new EventEmitter();
1615
1857
  /**
1616
1858
  * Fires when an item is collapsed.
1617
1859
  */
1618
1860
  this.rowCollapse = new EventEmitter();
1861
+ /**
1862
+ * Fires when the user confirms deleting a task.
1863
+ */
1864
+ this.remove = new EventEmitter();
1865
+ /**
1866
+ * Fires when the user cancels editing a task.
1867
+ */
1868
+ this.cancel = new EventEmitter();
1869
+ /**
1870
+ * Fires when the user saves an edited task.
1871
+ */
1872
+ this.save = new EventEmitter();
1619
1873
  /**
1620
1874
  * Fires when the sorting of the Gantt is changed.
1621
1875
  * You have to handle the event yourself and sort the data.
@@ -1664,12 +1918,28 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1664
1918
  * Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.
1665
1919
  */
1666
1920
  this.columnLockedChange = new EventEmitter();
1921
+ /**
1922
+ * Fires when a cell is clicked.
1923
+ */
1924
+ this.cellClick = new EventEmitter();
1925
+ /**
1926
+ * Fires when a task is clicked.
1927
+ */
1928
+ this.taskClick = new EventEmitter();
1667
1929
  /**
1668
1930
  * @hidden
1669
1931
  *
1670
1932
  * Used by the GanttExpandableDirective.
1671
1933
  */
1672
1934
  this.expandStateChange = new EventEmitter();
1935
+ /**
1936
+ * @hidden
1937
+ */
1938
+ this.showEditingDialog = false;
1939
+ /**
1940
+ * @hidden
1941
+ */
1942
+ this.showConfirmationDialog = false;
1673
1943
  this._columns = new QueryList();
1674
1944
  this._data = [];
1675
1945
  this._timelinePaneOptions = Object.assign({}, DEFAULT_TIMELINE_PANE_SETTINGS);
@@ -1677,7 +1947,9 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1677
1947
  this._rowClass = rowClassCallback;
1678
1948
  this._taskClass = taskClassCallback;
1679
1949
  this._activeView = DEFAULT_VIEW;
1950
+ this.rtl = false;
1680
1951
  this.optionChangesSubscriptions = new Subscription();
1952
+ this.editServiceSubscription = new Subscription();
1681
1953
  validatePackage(packageMetadata);
1682
1954
  this.optionChangesSubscriptions.add(this.optionChangesService.viewChanges.subscribe(() => {
1683
1955
  this.loadTimelineData();
@@ -1685,6 +1957,23 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1685
1957
  this.optionChangesSubscriptions.add(this.optionChangesService.columnChanges.subscribe(() => {
1686
1958
  this.treeList.columns.notifyOnChanges();
1687
1959
  }));
1960
+ this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(show => this.showEditingDialog = show));
1961
+ this.editServiceSubscription.add(this.editService.showConfirmationDialog.subscribe(() => this.taskDelete.emit()));
1962
+ this.editServiceSubscription.add(this.editService.editEvent.subscribe(args => {
1963
+ this[args.editResultType].emit({
1964
+ formGroup: args.formGroup,
1965
+ item: getEditItem(args.dataItem, this.treeList.view.data, this.mapper),
1966
+ sender: this
1967
+ });
1968
+ this.showConfirmationDialog = this.showEditingDialog = false;
1969
+ this.editService.dataItem = this.editService.formGroup = null;
1970
+ this.updateView();
1971
+ this.dependencyDomService.notifyChanges();
1972
+ }));
1973
+ this.localizationSubscription = this.localizationService.changes.subscribe(({ rtl }) => {
1974
+ this.rtl = rtl;
1975
+ this.direction = this.rtl ? 'rtl' : 'ltr';
1976
+ });
1688
1977
  }
1689
1978
  get toolbarTemplate() {
1690
1979
  if (this._customToolbarTemplate) {
@@ -1695,6 +1984,9 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1695
1984
  set toolbarTemplate(customToolbarTemplate) {
1696
1985
  this._customToolbarTemplate = customToolbarTemplate;
1697
1986
  }
1987
+ get dir() {
1988
+ return this.direction;
1989
+ }
1698
1990
  /**
1699
1991
  * A query list of all declared columns.
1700
1992
  */
@@ -1831,6 +2123,15 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1831
2123
  // TODO: review if this is a performance concern?
1832
2124
  return this.timelineViewService.service(this.activeView);
1833
2125
  }
2126
+ /**
2127
+ * @hidden
2128
+ *
2129
+ * Retrieves the `isSelected` callback if `selectable` is set to `true`
2130
+ * Otherwise returns the default callback, which always returns `false`.
2131
+ */
2132
+ get isTaskSelected() {
2133
+ return this.selectable ? this.isSelected : isSelected;
2134
+ }
1834
2135
  /**
1835
2136
  * @hidden
1836
2137
  *
@@ -1849,6 +2150,12 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1849
2150
  get viewTypes() {
1850
2151
  return this.views.map(view => view.type);
1851
2152
  }
2153
+ /**
2154
+ * @hidden
2155
+ */
2156
+ get editDialogFormGroup() {
2157
+ return this.editService.formGroup;
2158
+ }
1852
2159
  ngOnChanges(changes) {
1853
2160
  if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
1854
2161
  this.loadTimelineData();
@@ -1868,6 +2175,10 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1868
2175
  }
1869
2176
  ngOnDestroy() {
1870
2177
  this.optionChangesSubscriptions.unsubscribe();
2178
+ this.editServiceSubscription.unsubscribe();
2179
+ if (this.localizationSubscription) {
2180
+ this.localizationSubscription.unsubscribe();
2181
+ }
1871
2182
  }
1872
2183
  /**
1873
2184
  * Applies the minimum possible width for the specified column,
@@ -1915,6 +2226,55 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1915
2226
  this.treeList.reorderColumn(source, destIndex, options);
1916
2227
  }
1917
2228
  }
2229
+ /**
2230
+ * Updates the data of the Gantt and forces row-related callbacks to be called anew.
2231
+ */
2232
+ updateView() {
2233
+ if (isPresent(this.treeList)) {
2234
+ this.treeList.updateView();
2235
+ }
2236
+ }
2237
+ /**
2238
+ * Opens the task editing dialog.
2239
+ */
2240
+ editTask(dataItem, formGroup) {
2241
+ if (!this.showEditingDialog) {
2242
+ this.editService.createEditDialog(dataItem, formGroup);
2243
+ }
2244
+ }
2245
+ /**
2246
+ * Closes the task editing dialog.
2247
+ */
2248
+ closeTaskDialog() {
2249
+ if (this.showEditingDialog) {
2250
+ this.editService.closeEditDialog();
2251
+ }
2252
+ }
2253
+ /**
2254
+ * Opens the delete task confirmation dialog.
2255
+ */
2256
+ openConfirmationDialog() {
2257
+ this.showConfirmationDialog = true;
2258
+ }
2259
+ /**
2260
+ * Opens a cell for editing.
2261
+ */
2262
+ editCell(dataItem, column, formGroup) {
2263
+ this.treeList.editCell(dataItem, column, formGroup);
2264
+ }
2265
+ /**
2266
+ * Closes an edited cell.
2267
+ */
2268
+ closeCell() {
2269
+ this.treeList.closeCell();
2270
+ }
2271
+ /**
2272
+ * @hidden
2273
+ */
2274
+ handleCellClose(e) {
2275
+ this.cellClose.emit(Object.assign(e, { item: this.editItem, sender: this }));
2276
+ this.dependencyDomService.notifyChanges();
2277
+ }
1918
2278
  /**
1919
2279
  * @hidden
1920
2280
  */
@@ -1934,16 +2294,6 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1934
2294
  this.dependencyDomService.notifyChanges();
1935
2295
  }
1936
2296
  }
1937
- /**
1938
- * @hidden
1939
- *
1940
- * Used by the GanttExpandableDirective.
1941
- */
1942
- updateView() {
1943
- if (isPresent(this.treeList)) {
1944
- this.treeList.updateView();
1945
- }
1946
- }
1947
2297
  /**
1948
2298
  * @hidden
1949
2299
  */
@@ -1978,6 +2328,156 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
1978
2328
  this._timelinePaneOptions.size = e;
1979
2329
  this.timelinePaneSizeChange.emit(e);
1980
2330
  }
2331
+ /**
2332
+ * @hidden
2333
+ */
2334
+ handleTimelineRightClick(event) {
2335
+ const target = event.target;
2336
+ const gantt = this.hostElement.nativeElement;
2337
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2338
+ return;
2339
+ }
2340
+ if (hasObservers(this.taskClick)) {
2341
+ const taskIndex = getClosestTaskIndex(target, gantt);
2342
+ const task = this.renderedTreeListItems[taskIndex];
2343
+ this.zone.run(() => this.emitTaskClick(event, task, taskIndex));
2344
+ }
2345
+ }
2346
+ /**
2347
+ * @hidden
2348
+ */
2349
+ handleTimelineClick(event) {
2350
+ const target = event.target;
2351
+ const gantt = this.hostElement.nativeElement;
2352
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2353
+ return;
2354
+ }
2355
+ const taskIndex = getClosestTaskIndex(target, gantt);
2356
+ const task = this.renderedTreeListItems[taskIndex];
2357
+ const selectionAction = this.getSelectionAction(event, task);
2358
+ if ((hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
2359
+ hasObservers(this.taskClick)) {
2360
+ this.zone.run(() => {
2361
+ this.emitSelectionChange(task, selectionAction);
2362
+ this.emitTaskClick(event, task, taskIndex);
2363
+ });
2364
+ }
2365
+ }
2366
+ /**
2367
+ * @hidden
2368
+ */
2369
+ handleTreeListDoubleClick(event) {
2370
+ if (!isPresent(this.lastTreeListCellClick) || event.target !== this.lastTreeListCellClick.originalEvent.target) {
2371
+ return;
2372
+ }
2373
+ this.editItem = getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
2374
+ if (hasObservers(this.cellDblClick)) {
2375
+ this.zone.run(() => {
2376
+ this.cellDblClick.emit({
2377
+ column: this.lastTreeListCellClick.column,
2378
+ columnIndex: this.lastTreeListCellClick.columnIndex,
2379
+ dataItem: this.lastTreeListCellClick.dataItem,
2380
+ isEdited: this.lastTreeListCellClick.isEdited,
2381
+ originalEvent: this.lastTreeListCellClick.originalEvent,
2382
+ rowIndex: this.lastTreeListCellClick.rowIndex,
2383
+ type: 'dblclick',
2384
+ sender: this
2385
+ });
2386
+ });
2387
+ }
2388
+ }
2389
+ /**
2390
+ * @hidden
2391
+ */
2392
+ handleTreeListSelectionChange(event) {
2393
+ // prevent selection change from right-click
2394
+ if (isPresent(this.lastTreeListCellClick) && this.lastTreeListCellClick.type === 'contextmenu') {
2395
+ return;
2396
+ }
2397
+ const task = event.items.map(item => item.dataItem)[0]; // single selection only currently available
2398
+ const action = event.action;
2399
+ this.emitSelectionChange(task, action);
2400
+ }
2401
+ /**
2402
+ * @hidden
2403
+ */
2404
+ handleTreeListCellClick(event) {
2405
+ this.lastTreeListCellClick = event;
2406
+ this.cellClick.emit({
2407
+ column: event.column,
2408
+ columnIndex: event.columnIndex,
2409
+ dataItem: event.dataItem,
2410
+ isEdited: event.isEdited,
2411
+ originalEvent: event.originalEvent,
2412
+ rowIndex: event.rowIndex,
2413
+ type: event.type,
2414
+ sender: this
2415
+ });
2416
+ }
2417
+ /**
2418
+ * @hidden
2419
+ */
2420
+ handleDeleteConfirmation() {
2421
+ this.editService.triggerEditEvent('remove');
2422
+ }
2423
+ /**
2424
+ * @hidden
2425
+ */
2426
+ handleTimelineMouseDown(event) {
2427
+ const target = event.target;
2428
+ const gantt = this.hostElement.nativeElement;
2429
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2430
+ return;
2431
+ }
2432
+ event.preventDefault();
2433
+ }
2434
+ /**
2435
+ * @hidden
2436
+ */
2437
+ handleTimelineDblClick(event) {
2438
+ const target = event.target;
2439
+ const gantt = this.hostElement.nativeElement;
2440
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2441
+ return;
2442
+ }
2443
+ if (hasObservers(this.taskDblClick)) {
2444
+ const taskIndex = getClosestTaskIndex(target, gantt);
2445
+ const task = this.renderedTreeListItems[taskIndex];
2446
+ this.zone.run(() => this.taskDblClick.emit({
2447
+ dataItem: task,
2448
+ originalEvent: event,
2449
+ sender: this,
2450
+ rowIndex: taskIndex,
2451
+ type: 'dblclick'
2452
+ }));
2453
+ }
2454
+ }
2455
+ /**
2456
+ * @hidden
2457
+ */
2458
+ getText(token) {
2459
+ return this.localizationService.get(token);
2460
+ }
2461
+ emitTaskClick(event, dataItem, itemIndex) {
2462
+ this.taskClick.emit({
2463
+ originalEvent: event,
2464
+ dataItem: dataItem,
2465
+ rowIndex: itemIndex,
2466
+ type: event.type,
2467
+ sender: this
2468
+ });
2469
+ }
2470
+ emitSelectionChange(dataItem, action) {
2471
+ if (this.isSameSelection(action, dataItem)) {
2472
+ return;
2473
+ }
2474
+ this.selectionChange.emit({
2475
+ action: action,
2476
+ items: [dataItem],
2477
+ sender: this
2478
+ });
2479
+ this.updateView();
2480
+ }
1981
2481
  updateTreeListGroupClass(columns = this.columns) {
1982
2482
  if (!isPresent(this.treeList)) {
1983
2483
  return;
@@ -2004,6 +2504,13 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
2004
2504
  }
2005
2505
  return this.views.find(view => view.type === this.activeView);
2006
2506
  }
2507
+ isSameSelection(action, dataItem) {
2508
+ return action === 'select' && this.isSelected(dataItem);
2509
+ }
2510
+ getSelectionAction({ ctrlKey, metaKey }, dataItem) {
2511
+ const shouldToggleSelection = ctrlKey || metaKey;
2512
+ return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
2513
+ }
2007
2514
  };
2008
2515
  __decorate([
2009
2516
  ViewChild(TreeListComponent, { static: true }),
@@ -2029,6 +2536,11 @@ __decorate([
2029
2536
  HostBinding('class.k-gantt'),
2030
2537
  __metadata("design:type", Boolean)
2031
2538
  ], GanttComponent.prototype, "hostClasses", void 0);
2539
+ __decorate([
2540
+ HostBinding('attr.dir'),
2541
+ __metadata("design:type", String),
2542
+ __metadata("design:paramtypes", [])
2543
+ ], GanttComponent.prototype, "dir", null);
2032
2544
  __decorate([
2033
2545
  ContentChildren(GanttColumnBase),
2034
2546
  __metadata("design:type", QueryList),
@@ -2058,6 +2570,18 @@ __decorate([
2058
2570
  __metadata("design:type", Array),
2059
2571
  __metadata("design:paramtypes", [Array])
2060
2572
  ], GanttComponent.prototype, "data", null);
2573
+ __decorate([
2574
+ Input(),
2575
+ __metadata("design:type", Function)
2576
+ ], GanttComponent.prototype, "isSelected", void 0);
2577
+ __decorate([
2578
+ Output(),
2579
+ __metadata("design:type", EventEmitter)
2580
+ ], GanttComponent.prototype, "selectionChange", void 0);
2581
+ __decorate([
2582
+ Input(),
2583
+ __metadata("design:type", Boolean)
2584
+ ], GanttComponent.prototype, "selectable", void 0);
2061
2585
  __decorate([
2062
2586
  Input(),
2063
2587
  __metadata("design:type", String)
@@ -2150,10 +2674,38 @@ __decorate([
2150
2674
  Output(),
2151
2675
  __metadata("design:type", EventEmitter)
2152
2676
  ], GanttComponent.prototype, "rowExpand", void 0);
2677
+ __decorate([
2678
+ Output(),
2679
+ __metadata("design:type", EventEmitter)
2680
+ ], GanttComponent.prototype, "taskDblClick", void 0);
2681
+ __decorate([
2682
+ Output(),
2683
+ __metadata("design:type", EventEmitter)
2684
+ ], GanttComponent.prototype, "cellDblClick", void 0);
2685
+ __decorate([
2686
+ Output(),
2687
+ __metadata("design:type", EventEmitter)
2688
+ ], GanttComponent.prototype, "cellClose", void 0);
2689
+ __decorate([
2690
+ Output(),
2691
+ __metadata("design:type", EventEmitter)
2692
+ ], GanttComponent.prototype, "taskDelete", void 0);
2153
2693
  __decorate([
2154
2694
  Output(),
2155
2695
  __metadata("design:type", EventEmitter)
2156
2696
  ], GanttComponent.prototype, "rowCollapse", void 0);
2697
+ __decorate([
2698
+ Output(),
2699
+ __metadata("design:type", EventEmitter)
2700
+ ], GanttComponent.prototype, "remove", void 0);
2701
+ __decorate([
2702
+ Output(),
2703
+ __metadata("design:type", EventEmitter)
2704
+ ], GanttComponent.prototype, "cancel", void 0);
2705
+ __decorate([
2706
+ Output(),
2707
+ __metadata("design:type", EventEmitter)
2708
+ ], GanttComponent.prototype, "save", void 0);
2157
2709
  __decorate([
2158
2710
  Output(),
2159
2711
  __metadata("design:type", EventEmitter)
@@ -2198,10 +2750,20 @@ __decorate([
2198
2750
  Output(),
2199
2751
  __metadata("design:type", EventEmitter)
2200
2752
  ], GanttComponent.prototype, "columnLockedChange", void 0);
2201
- GanttComponent = GanttComponent_1 = __decorate([
2202
- Component({
2753
+ __decorate([
2754
+ Output(),
2755
+ __metadata("design:type", EventEmitter)
2756
+ ], GanttComponent.prototype, "cellClick", void 0);
2757
+ __decorate([
2758
+ Output(),
2759
+ __metadata("design:type", EventEmitter)
2760
+ ], GanttComponent.prototype, "taskClick", void 0);
2761
+ GanttComponent = GanttComponent_1 = __decorate([
2762
+ Component({
2203
2763
  selector: 'kendo-gantt',
2764
+ exportAs: 'kendoGantt',
2204
2765
  providers: [
2766
+ LocalizationService,
2205
2767
  {
2206
2768
  provide: DataBoundTreeComponent,
2207
2769
  useExisting: forwardRef(() => GanttComponent_1)
@@ -2217,9 +2779,181 @@ GanttComponent = GanttComponent_1 = __decorate([
2217
2779
  ScrollSyncService,
2218
2780
  DependencyDomService,
2219
2781
  MappingService,
2220
- OptionChangesService
2782
+ OptionChangesService,
2783
+ EditService
2221
2784
  ],
2222
2785
  template: `
2786
+ <ng-container kendoGanttLocalizedMessages
2787
+ i18n-taskDeleteLabel="kendo.gantt.taskDeleteLabel|The label of the task delete icon"
2788
+ taskDeleteLabel="Delete"
2789
+
2790
+ i18n-taskEditingDialogTitle="kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog"
2791
+ taskEditingDialogTitle="Editing Task"
2792
+
2793
+ i18n-taskEditingDialogCloseTitle="kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button"
2794
+ taskEditingDialogCloseTitle="Close"
2795
+
2796
+ i18n-confirmationDialogCloseTitle="kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button"
2797
+ confirmationDialogCloseTitle="Close"
2798
+
2799
+ i18n-confirmationDialogTitle="kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog"
2800
+ confirmationDialogTitle="Delete Task"
2801
+
2802
+ i18n-confirmationDialogContent="kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog"
2803
+ confirmationDialogContent="Are you sure you want to delete this task?"
2804
+
2805
+ i18n-deleteButtonText="kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button"
2806
+ deleteButtonText="Delete"
2807
+
2808
+ i18n-cancelButtonText="kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button"
2809
+ cancelButtonText="Cancel"
2810
+
2811
+ i18n-saveButtonText="kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button"
2812
+ saveButtonText="Save"
2813
+
2814
+ i18n-titleFieldInputLabel="kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode"
2815
+ titleFieldInputLabel="Title"
2816
+
2817
+ i18n-startFieldInputLabel="kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode"
2818
+ startFieldInputLabel="Start"
2819
+
2820
+ i18n-endFieldInputLabel="kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode"
2821
+ endFieldInputLabel="End"
2822
+
2823
+ i18n-completionRatioFieldInputLabel="kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode"
2824
+ completionRatioFieldInputLabel="Progress"
2825
+
2826
+ i18n-dayViewText="kendo.gantt.dayViewText|The text of the day view in the ViewSelector component"
2827
+ dayViewText="Day"
2828
+
2829
+ i18n-weekViewText="kendo.gantt.weekViewText|The text of the week view in the ViewSelector component"
2830
+ weekViewText="Week"
2831
+
2832
+ i18n-monthViewText="kendo.gantt.monthViewText|The text of the month view in the ViewSelector component"
2833
+ monthViewText="Month"
2834
+
2835
+ i18n-yearViewText-disabled="kendo.gantt.yearViewText|The text of the year view in the ViewSelector component"
2836
+ yearViewText="Year"
2837
+
2838
+ i18n-noRecords="kendo.gantt.noRecords|The label visible in the TreeList when there are no records"
2839
+ noRecords="No records available."
2840
+
2841
+ i18n-filter="kendo.gantt.filter|The label of the filter cell or icon"
2842
+ filter="Filter"
2843
+
2844
+ i18n-filterEqOperator="kendo.gantt.filterEqOperator|The text of the equal filter operator"
2845
+ filterEqOperator="Is equal to"
2846
+
2847
+ i18n-filterNotEqOperator="kendo.gantt.filterNotEqOperator|The text of the not equal filter operator"
2848
+ filterNotEqOperator="Is not equal to"
2849
+
2850
+ i18n-filterIsNullOperator="kendo.gantt.filterIsNullOperator|The text of the is null filter operator"
2851
+ filterIsNullOperator="Is null"
2852
+
2853
+ i18n-filterIsNotNullOperator="kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator"
2854
+ filterIsNotNullOperator="Is not null"
2855
+
2856
+ i18n-filterIsEmptyOperator="kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator"
2857
+ filterIsEmptyOperator="Is empty"
2858
+
2859
+ i18n-filterIsNotEmptyOperator="kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator"
2860
+ filterIsNotEmptyOperator="Is not empty"
2861
+
2862
+ i18n-filterStartsWithOperator="kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator"
2863
+ filterStartsWithOperator="Starts with"
2864
+
2865
+ i18n-filterContainsOperator="kendo.gantt.filterContainsOperator|The text of the contains filter operator"
2866
+ filterContainsOperator="Contains"
2867
+
2868
+ i18n-filterNotContainsOperator="kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator"
2869
+ filterNotContainsOperator="Does not contain"
2870
+
2871
+ i18n-filterEndsWithOperator="kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator"
2872
+ filterEndsWithOperator="Ends with"
2873
+
2874
+ i18n-filterGteOperator="kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator"
2875
+ filterGteOperator="Is greater than or equal to"
2876
+
2877
+ i18n-filterGtOperator="kendo.gantt.filterGtOperator|The text of the greater than filter operator"
2878
+ filterGtOperator="Is greater than"
2879
+
2880
+ i18n-filterLteOperator="kendo.gantt.filterLteOperator|The text of the less than or equal filter operator"
2881
+ filterLteOperator="Is less than or equal to"
2882
+
2883
+ i18n-filterLtOperator="kendo.gantt.filterLtOperator|The text of the less than filter operator"
2884
+ filterLtOperator="Is less than"
2885
+
2886
+ i18n-filterIsTrue="kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option"
2887
+ filterIsTrue="Is True"
2888
+
2889
+ i18n-filterIsFalse="kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option"
2890
+ filterIsFalse="Is False"
2891
+
2892
+ i18n-filterBooleanAll="kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option"
2893
+ filterBooleanAll="(All)"
2894
+
2895
+ i18n-filterAfterOrEqualOperator="kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
2896
+ filterAfterOrEqualOperator="Is after or equal to"
2897
+
2898
+ i18n-filterAfterOperator="kendo.gantt.filterAfterOperator|The text of the after date filter operator"
2899
+ filterAfterOperator="Is after"
2900
+
2901
+ i18n-filterBeforeOperator="kendo.gantt.filterBeforeOperator|The text of the before date filter operator"
2902
+ filterBeforeOperator="Is before"
2903
+
2904
+ i18n-filterBeforeOrEqualOperator="kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
2905
+ filterBeforeOrEqualOperator="Is before or equal to"
2906
+
2907
+ i18n-filterFilterButton="kendo.gantt.filterFilterButton|The text of the filter button"
2908
+ filterFilterButton="Filter"
2909
+
2910
+ i18n-filterClearButton="kendo.gantt.filterClearButton|The text of the clear filter button"
2911
+ filterClearButton="Clear"
2912
+
2913
+ i18n-filterAndLogic="kendo.gantt.filterAndLogic|The text of the And filter logic"
2914
+ filterAndLogic="And"
2915
+
2916
+ i18n-filterOrLogic="kendo.gantt.filterOrLogic|The text of the Or filter logic"
2917
+ filterOrLogic="Or"
2918
+
2919
+ i18n-loading="kendo.gantt.loading|The loading text"
2920
+ loading="Loading"
2921
+
2922
+ i18n-columnMenu="kendo.gantt.columnMenu|The title of the column menu icon"
2923
+ columnMenu="Column Menu"
2924
+
2925
+ i18n-columns="kendo.gantt.columns|The text shown in the column menu for the columns item"
2926
+ columns="Columns"
2927
+
2928
+ i18n-lock-disabled="kendo.gantt.lock|The text shown in the column menu for the lock item"
2929
+ lock-disabled="Lock"
2930
+
2931
+ i18n-unlock-disabled="kendo.gantt.unlock|The text shown in the column menu for the unlock item"
2932
+ unlock-disabled="Unlock"
2933
+
2934
+ i18n-sortable="kendo.gantt.sortable|The label of the sort icon"
2935
+ sortable="Sortable"
2936
+
2937
+ i18n-sortAscending="kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item"
2938
+ sortAscending="Sort Ascending"
2939
+
2940
+ i18n-sortDescending="kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item"
2941
+ sortDescending="Sort Descending"
2942
+
2943
+ i18n-sortedAscending="kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending"
2944
+ sortedAscending="Sorted Ascending"
2945
+
2946
+ i18n-sortedDescending="kendo.gantt.sortedDescending|The status announcement when a column is sorted descending"
2947
+ sortedDescending="Sorted Descending"
2948
+
2949
+ i18n-sortedDefault="kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted"
2950
+ sortedDefault="Not Sorted"
2951
+
2952
+ i18n-columnsApply="kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
2953
+ columnsApply="Apply"
2954
+
2955
+ i18n-columnsReset="kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
2956
+ columnsReset="Reset"></ng-container>
2223
2957
  <kendo-gantt-toolbar
2224
2958
  *ngIf="showToolbar('top')"
2225
2959
  class="k-gantt-header k-toolbar k-gantt-toolbar"
@@ -2244,6 +2978,8 @@ GanttComponent = GanttComponent_1 = __decorate([
2244
2978
  [reorderable]="columnsReorderable"
2245
2979
  [resizable]="columnsResizable"
2246
2980
  [rowClass]="rowClass"
2981
+ [isSelected]="isSelected"
2982
+ [selectable]="selectable"
2247
2983
  [sortable]="sortable"
2248
2984
  [sort]="sort"
2249
2985
  [filterable]="filterMenu"
@@ -2261,7 +2997,15 @@ GanttComponent = GanttComponent_1 = __decorate([
2261
2997
  (columnResize)="columnResize.emit($event)"
2262
2998
  (columnVisibilityChange)="handleColumnVisibilityChange($event)"
2263
2999
  (columnLockedChange)="columnLockedChange.emit($event)"
3000
+ (selectionChange)="handleTreeListSelectionChange($event)"
3001
+ (cellClick)="handleTreeListCellClick($event)"
3002
+ (cellClose)="handleCellClose($event)"
3003
+ [kendoEventsOutsideAngular]="{
3004
+ dblclick: handleTreeListDoubleClick
3005
+ }"
3006
+ [scope]="this"
2264
3007
  >
3008
+ <kendo-treelist-messages [kendoGanttTreeListMessages]="localizationService"></kendo-treelist-messages>
2265
3009
  </kendo-treelist>
2266
3010
  </kendo-splitter-pane>
2267
3011
  <kendo-splitter-pane
@@ -2287,6 +3031,14 @@ GanttComponent = GanttComponent_1 = __decorate([
2287
3031
  [taskClass]="taskClass"
2288
3032
  [dependencies]="dependencies"
2289
3033
  [hasChildren]="hasChildren"
3034
+ [isTaskSelected]="isTaskSelected"
3035
+ [kendoEventsOutsideAngular]="{
3036
+ click: handleTimelineClick,
3037
+ contextmenu: handleTimelineRightClick,
3038
+ dblclick: handleTimelineDblClick,
3039
+ mousedown: handleTimelineMouseDown
3040
+ }"
3041
+ [scope]="this"
2290
3042
  ></kendo-gantt-timeline>
2291
3043
  </kendo-splitter-pane>
2292
3044
  </kendo-splitter>
@@ -2295,6 +3047,20 @@ GanttComponent = GanttComponent_1 = __decorate([
2295
3047
  *ngIf="showToolbar('bottom')"
2296
3048
  class="k-gantt-footer k-toolbar k-gantt-toolbar"
2297
3049
  position="bottom"></kendo-gantt-toolbar>
3050
+ <kendo-gantt-edit-dialog *ngIf="showEditingDialog" [formGroup]="editDialogFormGroup"></kendo-gantt-edit-dialog>
3051
+ <kendo-dialog
3052
+ *ngIf="showConfirmationDialog"
3053
+ [width]="575"
3054
+ [height]="170"
3055
+ [title]="getText('confirmationDialogTitle')"
3056
+ (close)="showConfirmationDialog = false;">
3057
+ <span>{{getText('confirmationDialogContent')}}</span>
3058
+ <kendo-dialog-actions layout="normal">
3059
+ <kendo-treelist-spacer></kendo-treelist-spacer>
3060
+ <button kendoButton [primary]="true" (click)="handleDeleteConfirmation()">{{ getText('deleteButtonText') }}</button>
3061
+ <button kendoButton (click)="showConfirmationDialog = false;">{{ getText('cancelButtonText') }}</button>
3062
+ </kendo-dialog-actions>
3063
+ </kendo-dialog>
2298
3064
  `
2299
3065
  }),
2300
3066
  __metadata("design:paramtypes", [TimelineViewService,
@@ -2302,7 +3068,11 @@ GanttComponent = GanttComponent_1 = __decorate([
2302
3068
  Renderer2,
2303
3069
  MappingService,
2304
3070
  OptionChangesService,
2305
- DependencyDomService])
3071
+ DependencyDomService,
3072
+ EditService,
3073
+ LocalizationService,
3074
+ ElementRef,
3075
+ NgZone])
2306
3076
  ], GanttComponent);
2307
3077
 
2308
3078
  /**
@@ -2397,6 +3167,10 @@ __decorate([
2397
3167
  Input(),
2398
3168
  __metadata("design:type", Function)
2399
3169
  ], GanttTimelineComponent.prototype, "taskClass", void 0);
3170
+ __decorate([
3171
+ Input(),
3172
+ __metadata("design:type", Function)
3173
+ ], GanttTimelineComponent.prototype, "isTaskSelected", void 0);
2400
3174
  __decorate([
2401
3175
  Input(),
2402
3176
  __metadata("design:type", Function)
@@ -2476,6 +3250,7 @@ GanttTimelineComponent = __decorate([
2476
3250
  [summaryTaskTemplate]="summaryTaskTemplate"
2477
3251
  [taskClass]="taskClass"
2478
3252
  [hasChildren]="hasChildren"
3253
+ [isTaskSelected]="isTaskSelected"
2479
3254
  >
2480
3255
  </tbody>
2481
3256
  </table>
@@ -2549,17 +3324,23 @@ __decorate([
2549
3324
  Input(),
2550
3325
  __metadata("design:type", Function)
2551
3326
  ], GanttTasksTableBodyComponent.prototype, "hasChildren", void 0);
3327
+ __decorate([
3328
+ Input(),
3329
+ __metadata("design:type", Function)
3330
+ ], GanttTasksTableBodyComponent.prototype, "isTaskSelected", void 0);
2552
3331
  GanttTasksTableBodyComponent = __decorate([
2553
3332
  Component({
2554
3333
  selector: '[kendoGanttTasksTableBody]',
2555
3334
  template: `
2556
- <tr #timelineRow *ngFor="let item of rows">
3335
+ <tr #timelineRow *ngFor="let item of rows; let index = index">
2557
3336
  <td>
2558
3337
  <kendo-gantt-milestone-task
2559
3338
  *ngIf="isMileStone(item); else task"
2560
3339
  [dataItem]="item"
2561
3340
  [activeView]="activeView"
2562
3341
  [taskClass]="taskClass"
3342
+ [isSelected]="isTaskSelected"
3343
+ [index]="index"
2563
3344
  >
2564
3345
  </kendo-gantt-milestone-task>
2565
3346
  <ng-template #task>
@@ -2569,6 +3350,8 @@ GanttTasksTableBodyComponent = __decorate([
2569
3350
  [template]="summaryTaskTemplate"
2570
3351
  [activeView]="activeView"
2571
3352
  [taskClass]="taskClass"
3353
+ [isSelected]="isTaskSelected"
3354
+ [index]="index"
2572
3355
  >
2573
3356
  </kendo-gantt-summary-task>
2574
3357
  <kendo-gantt-task
@@ -2578,6 +3361,8 @@ GanttTasksTableBodyComponent = __decorate([
2578
3361
  [taskTemplate]="taskTemplate"
2579
3362
  [activeView]="activeView"
2580
3363
  [taskClass]="taskClass"
3364
+ [isSelected]="isTaskSelected"
3365
+ [index]="index"
2581
3366
  >
2582
3367
  </kendo-gantt-task>
2583
3368
  </ng-template>
@@ -2695,6 +3480,14 @@ __decorate([
2695
3480
  Input(),
2696
3481
  __metadata("design:type", Object)
2697
3482
  ], GanttTaskBase.prototype, "dataItem", void 0);
3483
+ __decorate([
3484
+ Input(),
3485
+ __metadata("design:type", Number)
3486
+ ], GanttTaskBase.prototype, "index", void 0);
3487
+ __decorate([
3488
+ Input(),
3489
+ __metadata("design:type", Function)
3490
+ ], GanttTaskBase.prototype, "isSelected", void 0);
2698
3491
  __decorate([
2699
3492
  Input(),
2700
3493
  __metadata("design:type", String)
@@ -2709,8 +3502,13 @@ var GanttTaskComponent_1;
2709
3502
  * @hidden
2710
3503
  */
2711
3504
  let GanttTaskComponent = GanttTaskComponent_1 = class GanttTaskComponent extends GanttTaskBase {
2712
- constructor(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr) {
3505
+ constructor(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, editService) {
2713
3506
  super(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr);
3507
+ this.editService = editService;
3508
+ }
3509
+ onTaskDelete() {
3510
+ this.editService.dataItem = this.dataItem;
3511
+ this.editService.showConfirmationDialog.next();
2714
3512
  }
2715
3513
  };
2716
3514
  __decorate([
@@ -2738,6 +3536,8 @@ GanttTaskComponent = GanttTaskComponent_1 = __decorate([
2738
3536
  [style.width.px]="taskWidth"
2739
3537
  [style.left.px]="taskOffset"
2740
3538
  [attr.title]="mapper.extractFromTask(dataItem, 'title')"
3539
+ [attr.data-task-index]="index"
3540
+ [class.k-state-selected]="isSelected(dataItem)"
2741
3541
  >
2742
3542
  <ng-container *ngIf="!taskTemplate">
2743
3543
  <div
@@ -2757,6 +3557,13 @@ GanttTaskComponent = GanttTaskComponent_1 = __decorate([
2757
3557
  >
2758
3558
  </ng-template>
2759
3559
  </div>
3560
+ <span class="k-task-actions">
3561
+ <span
3562
+ (click)="onTaskDelete()"
3563
+ class="k-link k-task-delete">
3564
+ <span class="k-icon k-i-close"></span>
3565
+ </span>
3566
+ </span>
2760
3567
  </div>
2761
3568
  </ng-container>
2762
3569
  <ng-template
@@ -2775,7 +3582,8 @@ GanttTaskComponent = GanttTaskComponent_1 = __decorate([
2775
3582
  TimelineViewService,
2776
3583
  DependencyDomService,
2777
3584
  OptionChangesService,
2778
- ChangeDetectorRef])
3585
+ ChangeDetectorRef,
3586
+ EditService])
2779
3587
  ], GanttTaskComponent);
2780
3588
 
2781
3589
  var GanttSummaryTaskComponent_1;
@@ -2813,6 +3621,8 @@ GanttSummaryTaskComponent = GanttSummaryTaskComponent_1 = __decorate([
2813
3621
  [style.width.px]="taskWidth"
2814
3622
  [style.left.px]="taskOffset"
2815
3623
  [attr.title]="mapper.extractFromTask(dataItem, 'title')"
3624
+ [attr.data-task-index]="index"
3625
+ [class.k-state-selected]="isSelected(dataItem)"
2816
3626
  >
2817
3627
  <div *ngIf="!template; else summaryTemplate"
2818
3628
  class="k-task-summary-progress"
@@ -2872,6 +3682,8 @@ GanttMilestoneTaskComponent = GanttMilestoneTaskComponent_1 = __decorate([
2872
3682
  [ngClass]="taskClass(dataItem)"
2873
3683
  [style.left.px]="taskOffset"
2874
3684
  [attr.title]="mapper.extractFromTask(dataItem, 'title')"
3685
+ [class.k-state-selected]="isSelected(dataItem)"
3686
+ [attr.data-task-index]="index"
2875
3687
  >
2876
3688
  </div>
2877
3689
  `
@@ -2959,6 +3771,119 @@ GanttExpandableDirective = __decorate([
2959
3771
  })
2960
3772
  ], GanttExpandableDirective);
2961
3773
 
3774
+ /**
3775
+ * A directive which handles the [`selectionChange`]({% slug api_gantt_ganttcomponent %}#toc-selectionchange) event of the Gantt
3776
+ * ([see example]({% slug selection_gantt %}#toc-built-in-directive))
3777
+ */
3778
+ let SelectableDirective = class SelectableDirective {
3779
+ constructor(gantt) {
3780
+ this.gantt = gantt;
3781
+ /**
3782
+ * Fires when the selected keys are changed.
3783
+ */
3784
+ this.selectedKeysChange = new EventEmitter();
3785
+ this.state = new Set();
3786
+ this.isSelected = this.isSelected.bind(this);
3787
+ this.selectionChange = this.selectionChange.bind(this);
3788
+ this.selectable = true;
3789
+ }
3790
+ /**
3791
+ * @hidden
3792
+ */
3793
+ set selectable(value) {
3794
+ if (value) {
3795
+ this.gantt.isSelected = this.isSelected;
3796
+ this.subscribeSelection();
3797
+ }
3798
+ else {
3799
+ this.gantt.isSelected = () => false;
3800
+ this.unsubscribeSelection();
3801
+ }
3802
+ this.gantt.selectable = value;
3803
+ this.gantt.updateView();
3804
+ }
3805
+ /**
3806
+ * Sets the selected keys.
3807
+ */
3808
+ set selectedKeys(value) {
3809
+ if (isPresent(value) && value === this.lastChange) {
3810
+ return;
3811
+ }
3812
+ // prevent multiple items displayed as selected as multiple selection still not supported fully
3813
+ const keys = (value || []).slice(0, 1);
3814
+ this.state = new Set(keys);
3815
+ this.gantt.updateView();
3816
+ }
3817
+ /**
3818
+ * The field name or a function that specifies the data item unique key identifier.
3819
+ * By default, the string field `id` is used.
3820
+ */
3821
+ set itemKey(value) {
3822
+ if (isString(value)) {
3823
+ this._keyGetter = getter(value);
3824
+ }
3825
+ else {
3826
+ this._keyGetter = value;
3827
+ }
3828
+ }
3829
+ get keyGetter() {
3830
+ return this._keyGetter || this.gantt.idGetter;
3831
+ }
3832
+ ngOnDestroy() {
3833
+ this.unsubscribeSelection();
3834
+ }
3835
+ isSelected(dataItem) {
3836
+ return this.state.has(this.keyGetter(dataItem));
3837
+ }
3838
+ selectionChange({ action, items }) {
3839
+ this.state.clear();
3840
+ if (action === 'select') {
3841
+ items.forEach(item => this.state.add(this.keyGetter(item)));
3842
+ }
3843
+ this.emitSelectedItemsChange();
3844
+ }
3845
+ emitSelectedItemsChange() {
3846
+ this.lastChange = Array.from(this.state);
3847
+ this.selectedKeysChange.emit(this.lastChange);
3848
+ }
3849
+ subscribeSelection() {
3850
+ this.unsubscribeSelection();
3851
+ this.selectionSubscription = this.gantt.selectionChange.subscribe(this.selectionChange);
3852
+ }
3853
+ unsubscribeSelection() {
3854
+ if (this.selectionSubscription) {
3855
+ this.selectionSubscription.unsubscribe();
3856
+ this.selectionSubscription = null;
3857
+ }
3858
+ }
3859
+ };
3860
+ __decorate([
3861
+ Input(),
3862
+ __metadata("design:type", Boolean),
3863
+ __metadata("design:paramtypes", [Boolean])
3864
+ ], SelectableDirective.prototype, "selectable", null);
3865
+ __decorate([
3866
+ Input(),
3867
+ __metadata("design:type", Array),
3868
+ __metadata("design:paramtypes", [Array])
3869
+ ], SelectableDirective.prototype, "selectedKeys", null);
3870
+ __decorate([
3871
+ Output(),
3872
+ __metadata("design:type", EventEmitter)
3873
+ ], SelectableDirective.prototype, "selectedKeysChange", void 0);
3874
+ __decorate([
3875
+ Input(),
3876
+ __metadata("design:type", Object),
3877
+ __metadata("design:paramtypes", [Object])
3878
+ ], SelectableDirective.prototype, "itemKey", null);
3879
+ SelectableDirective = __decorate([
3880
+ Directive({
3881
+ exportAs: 'kendoGanttSelectable',
3882
+ selector: '[kendoGanttSelectable]'
3883
+ }),
3884
+ __metadata("design:paramtypes", [GanttComponent])
3885
+ ], SelectableDirective);
3886
+
2962
3887
  /**
2963
3888
  * @hidden
2964
3889
  */
@@ -3021,10 +3946,8 @@ ToolbarComponent = __decorate([
3021
3946
  * The Gantt ViewSelector component. Shows the currently active view type, and allows switching to another view type.
3022
3947
  */
3023
3948
  let ViewSelectorComponent = class ViewSelectorComponent {
3024
- /**
3025
- * The Gantt ViewSelector component. Shows the currently active view type, and allows switching to another view type.
3026
- */
3027
- constructor() {
3949
+ constructor(localizationService) {
3950
+ this.localizationService = localizationService;
3028
3951
  this.hostClass = true;
3029
3952
  /**
3030
3953
  * The currently active view type.
@@ -3048,7 +3971,7 @@ let ViewSelectorComponent = class ViewSelectorComponent {
3048
3971
  * @hidden
3049
3972
  */
3050
3973
  getViewTypeText(viewType) {
3051
- return `${viewType[0].toLocaleUpperCase()}${viewType.slice(1)}`;
3974
+ return this.localizationService.get(`${viewType}ViewText`);
3052
3975
  }
3053
3976
  };
3054
3977
  __decorate([
@@ -3071,7 +3994,7 @@ ViewSelectorComponent = __decorate([
3071
3994
  Component({
3072
3995
  selector: 'kendo-gantt-view-selector',
3073
3996
  template: `
3074
- <select class="k-dropdown k-views-dropdown" style="text-transform: capitalize;"
3997
+ <select class="k-dropdown k-views-dropdown"
3075
3998
  [value]="activeView"
3076
3999
  (change)="activeViewChange.emit($event.target.value)">
3077
4000
  <option *ngFor="let view of views" [value]="view">{{getViewTypeText(view)}}</option>
@@ -3079,11 +4002,13 @@ ViewSelectorComponent = __decorate([
3079
4002
  <kendo-buttongroup class="k-gantt-views" selection="single">
3080
4003
  <button *ngFor="let view of views"
3081
4004
  kendoButton
4005
+ type="button"
3082
4006
  [selected]="view === activeView"
3083
4007
  (click)="onClick(view)">{{getViewTypeText(view)}}</button>
3084
4008
  </kendo-buttongroup>
3085
4009
  `
3086
- })
4010
+ }),
4011
+ __metadata("design:paramtypes", [LocalizationService])
3087
4012
  ], ViewSelectorComponent);
3088
4013
 
3089
4014
  /**
@@ -3389,11 +4314,401 @@ TimelineMonthViewComponent = TimelineMonthViewComponent_1 = __decorate([
3389
4314
  __metadata("design:paramtypes", [OptionChangesService, DependencyDomService])
3390
4315
  ], TimelineMonthViewComponent);
3391
4316
 
4317
+ /**
4318
+ * @hidden
4319
+ */
4320
+ let EditDialogComponent = class EditDialogComponent {
4321
+ constructor(mapper, editService, localizationService) {
4322
+ this.mapper = mapper;
4323
+ this.editService = editService;
4324
+ this.localizationService = localizationService;
4325
+ }
4326
+ getText(token) {
4327
+ return this.localizationService.get(token);
4328
+ }
4329
+ handleEditingResult(editResultType) {
4330
+ this.editService.triggerEditEvent(editResultType);
4331
+ }
4332
+ onTaskDelete() {
4333
+ this.editService.showConfirmationDialog.next();
4334
+ }
4335
+ };
4336
+ __decorate([
4337
+ Input(),
4338
+ __metadata("design:type", FormGroup)
4339
+ ], EditDialogComponent.prototype, "formGroup", void 0);
4340
+ EditDialogComponent = __decorate([
4341
+ Component({
4342
+ selector: 'kendo-gantt-edit-dialog',
4343
+ template: `
4344
+ <kendo-dialog
4345
+ [title]="getText('taskEditingDialogTitle')"
4346
+ [width]="575"
4347
+ [height]="470"
4348
+ (close)="handleEditingResult('cancel')">
4349
+ <kendo-dialog-messages
4350
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
4351
+ <form class="k-form" [formGroup]="formGroup">
4352
+ <kendo-formfield *ngIf="formGroup.contains(mapper.taskFields.title)">
4353
+ <kendo-label [for]="mapper.taskFields.title" [text]="getText('titleFieldInputLabel')"></kendo-label>
4354
+ <input class="k-textbox" [formControlName]="mapper.taskFields.title" />
4355
+ </kendo-formfield>
4356
+ <div class="k-hstack">
4357
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.start)">
4358
+ <kendo-label [for]="mapper.taskFields.start" [text]="getText('startFieldInputLabel')"></kendo-label>
4359
+ <kendo-datetimepicker [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
4360
+ </kendo-formfield>
4361
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4362
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.end)">
4363
+ <kendo-label [for]="mapper.taskFields.end" [text]="getText('endFieldInputLabel')"></kendo-label>
4364
+ <kendo-datetimepicker [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
4365
+ </kendo-formfield>
4366
+ </div>
4367
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.completionRatio)">
4368
+ <kendo-label [for]="mapper.taskFields.completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
4369
+ <kendo-numerictextbox
4370
+ [formControlName]="mapper.taskFields.completionRatio"
4371
+ [min]="0"
4372
+ [max]="1"
4373
+ [decimals]="2"
4374
+ format="p2"
4375
+ [step]="0.01"
4376
+ ></kendo-numerictextbox>
4377
+ </kendo-formfield>
4378
+ </form>
4379
+ <kendo-dialog-actions layout="normal">
4380
+ <button kendoButton (click)="onTaskDelete()">{{ getText('deleteButtonText') }}</button>
4381
+ <kendo-treelist-spacer></kendo-treelist-spacer>
4382
+ <button kendoButton [primary]="true" (click)="handleEditingResult('save')">{{ getText('saveButtonText') }}</button>
4383
+ <button kendoButton (click)="handleEditingResult('cancel')">{{ getText('cancelButtonText') }}</button>
4384
+ </kendo-dialog-actions>
4385
+ </kendo-dialog>
4386
+ `
4387
+ }),
4388
+ __metadata("design:paramtypes", [MappingService,
4389
+ EditService,
4390
+ LocalizationService])
4391
+ ], EditDialogComponent);
4392
+
4393
+ /**
4394
+ * @hidden
4395
+ */
4396
+ class Messages extends ComponentMessages {
4397
+ }
4398
+ __decorate([
4399
+ Input(),
4400
+ __metadata("design:type", String)
4401
+ ], Messages.prototype, "taskDeleteLabel", void 0);
4402
+ __decorate([
4403
+ Input(),
4404
+ __metadata("design:type", String)
4405
+ ], Messages.prototype, "taskEditingDialogTitle", void 0);
4406
+ __decorate([
4407
+ Input(),
4408
+ __metadata("design:type", String)
4409
+ ], Messages.prototype, "taskEditingDialogCloseTitle", void 0);
4410
+ __decorate([
4411
+ Input(),
4412
+ __metadata("design:type", String)
4413
+ ], Messages.prototype, "confirmationDialogCloseTitle", void 0);
4414
+ __decorate([
4415
+ Input(),
4416
+ __metadata("design:type", String)
4417
+ ], Messages.prototype, "confirmationDialogTitle", void 0);
4418
+ __decorate([
4419
+ Input(),
4420
+ __metadata("design:type", String)
4421
+ ], Messages.prototype, "deleteButtonText", void 0);
4422
+ __decorate([
4423
+ Input(),
4424
+ __metadata("design:type", String)
4425
+ ], Messages.prototype, "cancelButtonText", void 0);
4426
+ __decorate([
4427
+ Input(),
4428
+ __metadata("design:type", String)
4429
+ ], Messages.prototype, "saveButtonText", void 0);
4430
+ __decorate([
4431
+ Input(),
4432
+ __metadata("design:type", String)
4433
+ ], Messages.prototype, "titleFieldInputLabel", void 0);
4434
+ __decorate([
4435
+ Input(),
4436
+ __metadata("design:type", String)
4437
+ ], Messages.prototype, "startFieldInputLabel", void 0);
4438
+ __decorate([
4439
+ Input(),
4440
+ __metadata("design:type", String)
4441
+ ], Messages.prototype, "endFieldInputLabel", void 0);
4442
+ __decorate([
4443
+ Input(),
4444
+ __metadata("design:type", String)
4445
+ ], Messages.prototype, "completionRatioFieldInputLabel", void 0);
4446
+ __decorate([
4447
+ Input(),
4448
+ __metadata("design:type", String)
4449
+ ], Messages.prototype, "confirmationDialogContent", void 0);
4450
+ __decorate([
4451
+ Input(),
4452
+ __metadata("design:type", String)
4453
+ ], Messages.prototype, "dayViewText", void 0);
4454
+ __decorate([
4455
+ Input(),
4456
+ __metadata("design:type", String)
4457
+ ], Messages.prototype, "weekViewText", void 0);
4458
+ __decorate([
4459
+ Input(),
4460
+ __metadata("design:type", String)
4461
+ ], Messages.prototype, "monthViewText", void 0);
4462
+ __decorate([
4463
+ Input(),
4464
+ __metadata("design:type", String)
4465
+ ], Messages.prototype, "yearViewText", void 0);
4466
+ __decorate([
4467
+ Input(),
4468
+ __metadata("design:type", String)
4469
+ ], Messages.prototype, "noRecords", void 0);
4470
+ __decorate([
4471
+ Input(),
4472
+ __metadata("design:type", String)
4473
+ ], Messages.prototype, "filter", void 0);
4474
+ __decorate([
4475
+ Input(),
4476
+ __metadata("design:type", String)
4477
+ ], Messages.prototype, "filterEqOperator", void 0);
4478
+ __decorate([
4479
+ Input(),
4480
+ __metadata("design:type", String)
4481
+ ], Messages.prototype, "filterNotEqOperator", void 0);
4482
+ __decorate([
4483
+ Input(),
4484
+ __metadata("design:type", String)
4485
+ ], Messages.prototype, "filterIsNullOperator", void 0);
4486
+ __decorate([
4487
+ Input(),
4488
+ __metadata("design:type", String)
4489
+ ], Messages.prototype, "filterIsNotNullOperator", void 0);
4490
+ __decorate([
4491
+ Input(),
4492
+ __metadata("design:type", String)
4493
+ ], Messages.prototype, "filterIsEmptyOperator", void 0);
4494
+ __decorate([
4495
+ Input(),
4496
+ __metadata("design:type", String)
4497
+ ], Messages.prototype, "filterIsNotEmptyOperator", void 0);
4498
+ __decorate([
4499
+ Input(),
4500
+ __metadata("design:type", String)
4501
+ ], Messages.prototype, "filterStartsWithOperator", void 0);
4502
+ __decorate([
4503
+ Input(),
4504
+ __metadata("design:type", String)
4505
+ ], Messages.prototype, "filterContainsOperator", void 0);
4506
+ __decorate([
4507
+ Input(),
4508
+ __metadata("design:type", String)
4509
+ ], Messages.prototype, "filterNotContainsOperator", void 0);
4510
+ __decorate([
4511
+ Input(),
4512
+ __metadata("design:type", String)
4513
+ ], Messages.prototype, "filterEndsWithOperator", void 0);
4514
+ __decorate([
4515
+ Input(),
4516
+ __metadata("design:type", String)
4517
+ ], Messages.prototype, "filterGteOperator", void 0);
4518
+ __decorate([
4519
+ Input(),
4520
+ __metadata("design:type", String)
4521
+ ], Messages.prototype, "filterGtOperator", void 0);
4522
+ __decorate([
4523
+ Input(),
4524
+ __metadata("design:type", String)
4525
+ ], Messages.prototype, "filterLteOperator", void 0);
4526
+ __decorate([
4527
+ Input(),
4528
+ __metadata("design:type", String)
4529
+ ], Messages.prototype, "filterLtOperator", void 0);
4530
+ __decorate([
4531
+ Input(),
4532
+ __metadata("design:type", String)
4533
+ ], Messages.prototype, "filterIsTrue", void 0);
4534
+ __decorate([
4535
+ Input(),
4536
+ __metadata("design:type", String)
4537
+ ], Messages.prototype, "filterIsFalse", void 0);
4538
+ __decorate([
4539
+ Input(),
4540
+ __metadata("design:type", String)
4541
+ ], Messages.prototype, "filterBooleanAll", void 0);
4542
+ __decorate([
4543
+ Input(),
4544
+ __metadata("design:type", String)
4545
+ ], Messages.prototype, "filterAfterOrEqualOperator", void 0);
4546
+ __decorate([
4547
+ Input(),
4548
+ __metadata("design:type", String)
4549
+ ], Messages.prototype, "filterAfterOperator", void 0);
4550
+ __decorate([
4551
+ Input(),
4552
+ __metadata("design:type", String)
4553
+ ], Messages.prototype, "filterBeforeOperator", void 0);
4554
+ __decorate([
4555
+ Input(),
4556
+ __metadata("design:type", String)
4557
+ ], Messages.prototype, "filterBeforeOrEqualOperator", void 0);
4558
+ __decorate([
4559
+ Input(),
4560
+ __metadata("design:type", String)
4561
+ ], Messages.prototype, "filterFilterButton", void 0);
4562
+ __decorate([
4563
+ Input(),
4564
+ __metadata("design:type", String)
4565
+ ], Messages.prototype, "filterClearButton", void 0);
4566
+ __decorate([
4567
+ Input(),
4568
+ __metadata("design:type", String)
4569
+ ], Messages.prototype, "filterAndLogic", void 0);
4570
+ __decorate([
4571
+ Input(),
4572
+ __metadata("design:type", String)
4573
+ ], Messages.prototype, "filterOrLogic", void 0);
4574
+ __decorate([
4575
+ Input(),
4576
+ __metadata("design:type", String)
4577
+ ], Messages.prototype, "loading", void 0);
4578
+ __decorate([
4579
+ Input(),
4580
+ __metadata("design:type", String)
4581
+ ], Messages.prototype, "columnMenu", void 0);
4582
+ __decorate([
4583
+ Input(),
4584
+ __metadata("design:type", String)
4585
+ ], Messages.prototype, "columns", void 0);
4586
+ __decorate([
4587
+ Input(),
4588
+ __metadata("design:type", String)
4589
+ ], Messages.prototype, "lock", void 0);
4590
+ __decorate([
4591
+ Input(),
4592
+ __metadata("design:type", String)
4593
+ ], Messages.prototype, "unlock", void 0);
4594
+ __decorate([
4595
+ Input(),
4596
+ __metadata("design:type", String)
4597
+ ], Messages.prototype, "sortable", void 0);
4598
+ __decorate([
4599
+ Input(),
4600
+ __metadata("design:type", String)
4601
+ ], Messages.prototype, "sortAscending", void 0);
4602
+ __decorate([
4603
+ Input(),
4604
+ __metadata("design:type", String)
4605
+ ], Messages.prototype, "sortDescending", void 0);
4606
+ __decorate([
4607
+ Input(),
4608
+ __metadata("design:type", String)
4609
+ ], Messages.prototype, "sortedAscending", void 0);
4610
+ __decorate([
4611
+ Input(),
4612
+ __metadata("design:type", String)
4613
+ ], Messages.prototype, "sortedDescending", void 0);
4614
+ __decorate([
4615
+ Input(),
4616
+ __metadata("design:type", String)
4617
+ ], Messages.prototype, "sortedDefault", void 0);
4618
+ __decorate([
4619
+ Input(),
4620
+ __metadata("design:type", String)
4621
+ ], Messages.prototype, "columnsApply", void 0);
4622
+ __decorate([
4623
+ Input(),
4624
+ __metadata("design:type", String)
4625
+ ], Messages.prototype, "columnsReset", void 0);
4626
+
4627
+ var CustomMessagesComponent_1;
4628
+ /**
4629
+ * Custom component messages override default component messages
4630
+ * ([see example]({% slug globalization_treelist %}#toc-localization)).
4631
+ */
4632
+ let CustomMessagesComponent = CustomMessagesComponent_1 = class CustomMessagesComponent extends Messages {
4633
+ constructor(service) {
4634
+ super();
4635
+ this.service = service;
4636
+ }
4637
+ get override() {
4638
+ return true;
4639
+ }
4640
+ };
4641
+ CustomMessagesComponent = CustomMessagesComponent_1 = __decorate([
4642
+ Component({
4643
+ providers: [
4644
+ {
4645
+ provide: Messages,
4646
+ useExisting: forwardRef(() => CustomMessagesComponent_1)
4647
+ }
4648
+ ],
4649
+ selector: 'kendo-gantt-messages',
4650
+ template: ``
4651
+ }),
4652
+ __metadata("design:paramtypes", [LocalizationService])
4653
+ ], CustomMessagesComponent);
4654
+
4655
+ var LocalizedMessagesDirective_1;
4656
+ /**
4657
+ * @hidden
4658
+ */
4659
+ let LocalizedMessagesDirective = LocalizedMessagesDirective_1 = class LocalizedMessagesDirective extends Messages {
4660
+ constructor(service) {
4661
+ super();
4662
+ this.service = service;
4663
+ }
4664
+ };
4665
+ LocalizedMessagesDirective = LocalizedMessagesDirective_1 = __decorate([
4666
+ Directive({
4667
+ providers: [
4668
+ {
4669
+ provide: Messages,
4670
+ useExisting: forwardRef(() => LocalizedMessagesDirective_1)
4671
+ }
4672
+ ],
4673
+ selector: '[kendoGanttLocalizedMessages]'
4674
+ }),
4675
+ __metadata("design:paramtypes", [LocalizationService])
4676
+ ], LocalizedMessagesDirective);
4677
+
4678
+ /**
4679
+ * @hidden
4680
+ */
4681
+ let GanttTreeListMessagesDirective = class GanttTreeListMessagesDirective {
4682
+ constructor(localizationService) {
4683
+ this.localizationService = localizationService;
4684
+ }
4685
+ ngAfterViewInit() {
4686
+ const treeListServiceDictionary = this.localizationService.dictionary;
4687
+ Object.keys(treeListServiceDictionary)
4688
+ .forEach(token => treeListServiceDictionary[token] = this.kendoGanttTreeListMessages.get(token.replace('kendo.treelist.', '')));
4689
+ }
4690
+ };
4691
+ __decorate([
4692
+ Input(),
4693
+ __metadata("design:type", LocalizationService)
4694
+ ], GanttTreeListMessagesDirective.prototype, "kendoGanttTreeListMessages", void 0);
4695
+ GanttTreeListMessagesDirective = __decorate([
4696
+ Directive({ selector: '[kendoGanttTreeListMessages]' }),
4697
+ __metadata("design:paramtypes", [LocalizationService])
4698
+ ], GanttTreeListMessagesDirective);
4699
+
3392
4700
  const IMPORTED_MODULES = [
3393
4701
  CommonModule,
4702
+ ReactiveFormsModule,
4703
+ LabelModule,
4704
+ InputsModule,
4705
+ DateInputsModule,
4706
+ ButtonsModule,
3394
4707
  SplitterModule,
3395
4708
  TreeListModule,
3396
- ButtonsModule
4709
+ ButtonsModule,
4710
+ DialogModule,
4711
+ EventsModule
3397
4712
  ];
3398
4713
  const DECLARATIONS = [
3399
4714
  GanttComponent,
@@ -3417,6 +4732,7 @@ const DECLARATIONS = [
3417
4732
  FilterMenuTemplateDirective,
3418
4733
  FilterCellTemplateDirective,
3419
4734
  CellTemplateDirective,
4735
+ EditTemplateDirective,
3420
4736
  ColumnMenuTemplateDirective,
3421
4737
  HeaderTemplateDirective,
3422
4738
  FooterTemplateDirective,
@@ -3424,10 +4740,43 @@ const DECLARATIONS = [
3424
4740
  GanttDependencyDirective,
3425
4741
  TimelineDayViewComponent,
3426
4742
  TimelineWeekViewComponent,
3427
- TimelineMonthViewComponent
4743
+ TimelineMonthViewComponent,
4744
+ SelectableDirective,
4745
+ EditDialogComponent,
4746
+ CustomMessagesComponent,
4747
+ LocalizedMessagesDirective,
4748
+ GanttTreeListMessagesDirective
3428
4749
  ];
3429
4750
  /**
3430
- * Sample module
4751
+ * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})
4752
+ * definition for the Gantt component.
4753
+ *
4754
+ * @example
4755
+ *
4756
+ * ```ts-no-run
4757
+ * // Import the Gantt module
4758
+ * import { GanttModule } from '@progress/kendo-angular-gantt';
4759
+ *
4760
+ * // The browser platform with a compiler
4761
+ * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
4762
+ *
4763
+ * import { NgModule } from '@angular/core';
4764
+ *
4765
+ * // Import the app component
4766
+ * import { AppComponent } from './app.component';
4767
+ *
4768
+ * // Define the app module
4769
+ * _@NgModule({
4770
+ * declarations: [AppComponent], // declare app component
4771
+ * imports: [BrowserModule, GanttModule], // import Gantt module
4772
+ * bootstrap: [AppComponent]
4773
+ * })
4774
+ * export class AppModule {}
4775
+ *
4776
+ * // Compile and launch the module
4777
+ * platformBrowserDynamic().bootstrapModule(AppModule);
4778
+ *
4779
+ * ```
3431
4780
  */
3432
4781
  let GanttModule = class GanttModule {
3433
4782
  };
@@ -3435,7 +4784,11 @@ GanttModule = __decorate([
3435
4784
  NgModule({
3436
4785
  imports: [...IMPORTED_MODULES],
3437
4786
  declarations: [...DECLARATIONS],
3438
- exports: [...DECLARATIONS]
4787
+ exports: [...DECLARATIONS],
4788
+ providers: [{
4789
+ provide: L10N_PREFIX,
4790
+ useValue: 'kendo.gantt'
4791
+ }]
3439
4792
  })
3440
4793
  ], GanttModule);
3441
4794
 
@@ -3443,4 +4796,4 @@ GanttModule = __decorate([
3443
4796
  * Generated bundle index. Do not edit.
3444
4797
  */
3445
4798
 
3446
- export { MappingService, OptionChangesService, DependencyDomService, GanttDependencyDirective, GanttHeaderTableBodyComponent, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskBase, GanttTaskComponent, GanttTasksTableBodyComponent, ScrollSyncService, GanttTimelineComponent, TimelineBaseViewService, TimelineDayViewComponent, TimelineDayViewService, TimelineMonthViewComponent, TimelineMonthViewService, TimelineViewService, TimelineWeekViewComponent, TimelineWeekViewService, ViewBase, ToolbarComponent, ViewSelectorComponent, GanttComponent, GanttModule, GanttHierarchyBindingDirective, GanttFlatBindingDirective, GanttExpandableDirective, GanttTaskTemplateDirective, GanttTaskContentTemplateDirective, GanttSummaryTaskTemplateDirective, ToolbarTemplateDirective, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, ColumnMenuTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective };
4799
+ export { MappingService, OptionChangesService, DependencyDomService, GanttDependencyDirective, EditDialogComponent, EditService, CustomMessagesComponent, LocalizedMessagesDirective, Messages, GanttTreeListMessagesDirective, GanttHeaderTableBodyComponent, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskBase, GanttTaskComponent, GanttTasksTableBodyComponent, ScrollSyncService, GanttTimelineComponent, TimelineBaseViewService, TimelineDayViewComponent, TimelineDayViewService, TimelineMonthViewComponent, TimelineMonthViewService, TimelineViewService, TimelineWeekViewComponent, TimelineWeekViewService, ViewBase, ToolbarComponent, ViewSelectorComponent, GanttComponent, GanttModule, GanttHierarchyBindingDirective, GanttFlatBindingDirective, GanttExpandableDirective, GanttTaskTemplateDirective, GanttTaskContentTemplateDirective, GanttSummaryTaskTemplateDirective, ToolbarTemplateDirective, SelectableDirective, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, ColumnMenuTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective, EditTemplateDirective };