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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -2
  2. package/dist/cdn/main.js +2 -2
  3. package/dist/es/common/default-callbacks.js +4 -0
  4. package/dist/es/gantt.component.js +187 -32
  5. package/dist/es/gantt.module.js +3 -1
  6. package/dist/es/main.js +1 -0
  7. package/dist/es/package-metadata.js +1 -1
  8. package/dist/es/rendering/gantt-milestone-task.component.js +1 -1
  9. package/dist/es/rendering/gantt-summary-task.component.js +1 -1
  10. package/dist/es/rendering/gantt-task-base.js +8 -4
  11. package/dist/es/rendering/gantt-task.component.js +1 -1
  12. package/dist/es/rendering/gantt-tasks-table-body.component.js +3 -3
  13. package/dist/es/selection/selectable.directive.js +141 -0
  14. package/dist/es/selection/selection-change-event.js +4 -0
  15. package/dist/es/timeline/gantt-timeline.component.js +5 -1
  16. package/dist/es/utils.js +5 -1
  17. package/dist/es2015/common/default-callbacks.d.ts +4 -0
  18. package/dist/es2015/common/default-callbacks.js +4 -0
  19. package/dist/es2015/gantt.component.d.ts +66 -18
  20. package/dist/es2015/gantt.component.js +191 -34
  21. package/dist/es2015/gantt.module.js +3 -1
  22. package/dist/es2015/index.metadata.json +1 -1
  23. package/dist/es2015/main.d.ts +2 -0
  24. package/dist/es2015/main.js +1 -0
  25. package/dist/es2015/models/events/cell-click-event.interface.d.ts +31 -8
  26. package/dist/es2015/models/events/task-click-event.interface.d.ts +13 -5
  27. package/dist/es2015/models/models.d.ts +2 -0
  28. package/dist/es2015/package-metadata.js +1 -1
  29. package/dist/es2015/rendering/gantt-milestone-task.component.js +1 -0
  30. package/dist/es2015/rendering/gantt-summary-task.component.js +1 -0
  31. package/dist/es2015/rendering/gantt-task-base.d.ts +2 -1
  32. package/dist/es2015/rendering/gantt-task-base.js +8 -4
  33. package/dist/es2015/rendering/gantt-task.component.js +1 -0
  34. package/dist/es2015/rendering/gantt-tasks-table-body.component.d.ts +1 -1
  35. package/dist/es2015/rendering/gantt-tasks-table-body.component.js +5 -2
  36. package/dist/es2015/selection/selectable.directive.d.ts +42 -0
  37. package/dist/es2015/selection/selectable.directive.js +122 -0
  38. package/dist/es2015/selection/selection-change-event.d.ts +25 -0
  39. package/dist/es2015/selection/selection-change-event.js +4 -0
  40. package/dist/es2015/timeline/gantt-timeline.component.d.ts +1 -0
  41. package/dist/es2015/timeline/gantt-timeline.component.js +5 -0
  42. package/dist/es2015/utils.d.ts +5 -0
  43. package/dist/es2015/utils.js +5 -1
  44. package/dist/fesm2015/index.js +334 -39
  45. package/dist/fesm5/index.js +347 -42
  46. package/dist/npm/common/default-callbacks.js +4 -0
  47. package/dist/npm/gantt.component.js +187 -32
  48. package/dist/npm/gantt.module.js +3 -1
  49. package/dist/npm/main.js +2 -0
  50. package/dist/npm/package-metadata.js +1 -1
  51. package/dist/npm/rendering/gantt-milestone-task.component.js +1 -1
  52. package/dist/npm/rendering/gantt-summary-task.component.js +1 -1
  53. package/dist/npm/rendering/gantt-task-base.js +8 -4
  54. package/dist/npm/rendering/gantt-task.component.js +1 -1
  55. package/dist/npm/rendering/gantt-tasks-table-body.component.js +3 -3
  56. package/dist/npm/selection/selectable.directive.js +143 -0
  57. package/dist/npm/selection/selection-change-event.js +6 -0
  58. package/dist/npm/timeline/gantt-timeline.component.js +5 -1
  59. package/dist/npm/utils.js +4 -0
  60. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  61. package/package.json +1 -1
@@ -5,12 +5,12 @@
5
5
  import { __extends, __decorate, __metadata, __param, __assign } from 'tslib';
6
6
  import { Input, Injectable, EventEmitter, 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, fromEvent, Subject, Subscription } from 'rxjs';
9
10
  import { validatePackage } from '@progress/kendo-licensing';
10
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
16
  import { LocalizationService, ComponentMessages, L10N_PREFIX } from '@progress/kendo-angular-l10n';
@@ -30,7 +30,7 @@ var packageMetadata = {
30
30
  name: '@progress/kendo-angular-gantt',
31
31
  productName: 'Kendo UI for Angular',
32
32
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
33
- publishDate: 1637673280,
33
+ publishDate: 1637747718,
34
34
  version: '',
35
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'
36
36
  };
@@ -647,6 +647,10 @@ var rowClassCallback = function () { return null; };
647
647
  * @hidden
648
648
  */
649
649
  var taskClassCallback = function () { return null; };
650
+ /**
651
+ * @hidden
652
+ */
653
+ var isSelected = function () { return false; };
650
654
 
651
655
  /**
652
656
  * @hidden
@@ -746,6 +750,10 @@ var isColumnGroup = function (column) { return column.isColumnGroup; };
746
750
  * @hidden
747
751
  */
748
752
  var isNumber = function (contender) { return typeof contender === 'number' && !isNaN(contender); };
753
+ /**
754
+ * @hidden
755
+ */
756
+ var isString = function (contender) { return typeof contender === 'string'; };
749
757
  /**
750
758
  * @hidden
751
759
  *
@@ -1786,6 +1794,27 @@ var GanttComponent = /** @class */ (function () {
1786
1794
  this.hostElement = hostElement;
1787
1795
  this.zone = zone;
1788
1796
  this.hostClasses = true;
1797
+ /**
1798
+ * Provides a callback that determines if the given task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection))
1799
+ *
1800
+ * > The [`selectable`]({% slug gantt_api_ganttcomponent %}#toc-selectable) prop has to be set to `true` in order for this callback to be executed.
1801
+ */
1802
+ this.isSelected = isSelected;
1803
+ /**
1804
+ * Fires when the Gantt selection is changed through user interaction.
1805
+ *
1806
+ * Holds data about the affected [`items`]({% slug api_gantt_selectionchangeevent %}#toc-items) and the attempted [`action`]({% slug api_gantt_selectionchangeevent %}#toc-action):
1807
+ * - `select` - Triggered on `click` or `ctrl + click` on deselected items.
1808
+ * - `remove` - Triggered on `ctrl + click` on selected items.
1809
+ */
1810
+ this.selectionChange = new EventEmitter();
1811
+ /**
1812
+ * Enables or disables the Gantt selection mechanism ([see example]({% slug selection_gantt %}#toc-custom-selection)).
1813
+ *
1814
+ * > When set to `true`, the [`isSelected`]({% slug gantt_api_ganttcomponent %}#toc-isselected) callback has to be provided.
1815
+ * > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
1816
+ */
1817
+ this.selectable = false;
1789
1818
  /**
1790
1819
  * The position of the toolbar.
1791
1820
  *
@@ -1954,6 +1983,14 @@ var GanttComponent = /** @class */ (function () {
1954
1983
  * Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.
1955
1984
  */
1956
1985
  this.columnLockedChange = new EventEmitter();
1986
+ /**
1987
+ * Fires when a cell is clicked.
1988
+ */
1989
+ this.cellClick = new EventEmitter();
1990
+ /**
1991
+ * Fires when a task is clicked.
1992
+ */
1993
+ this.taskClick = new EventEmitter();
1957
1994
  /**
1958
1995
  * @hidden
1959
1996
  *
@@ -1979,9 +2016,6 @@ var GanttComponent = /** @class */ (function () {
1979
2016
  this.optionChangesSubscriptions = new Subscription();
1980
2017
  this.editServiceSubscription = new Subscription();
1981
2018
  validatePackage(packageMetadata);
1982
- this.handleTimelineDblClick = this.handleTimelineDblClick.bind(this);
1983
- this.handleTimelineMouseDown = this.handleTimelineMouseDown.bind(this);
1984
- this.handleDoubleClick = this.handleDoubleClick.bind(this);
1985
2019
  this.optionChangesSubscriptions.add(this.optionChangesService.viewChanges.subscribe(function () {
1986
2020
  _this.loadTimelineData();
1987
2021
  }));
@@ -2217,6 +2251,19 @@ var GanttComponent = /** @class */ (function () {
2217
2251
  enumerable: true,
2218
2252
  configurable: true
2219
2253
  });
2254
+ Object.defineProperty(GanttComponent.prototype, "isTaskSelected", {
2255
+ /**
2256
+ * @hidden
2257
+ *
2258
+ * Retrieves the `isSelected` callback if `selectable` is set to `true`
2259
+ * Otherwise returns the default callback, which always returns `false`.
2260
+ */
2261
+ get: function () {
2262
+ return this.selectable ? this.isSelected : isSelected;
2263
+ },
2264
+ enumerable: true,
2265
+ configurable: true
2266
+ });
2220
2267
  Object.defineProperty(GanttComponent.prototype, "idGetter", {
2221
2268
  /**
2222
2269
  * @hidden
@@ -2325,6 +2372,14 @@ var GanttComponent = /** @class */ (function () {
2325
2372
  this.treeList.reorderColumn(source, destIndex, options);
2326
2373
  }
2327
2374
  };
2375
+ /**
2376
+ * Updates the data of the Gantt and forces row-related callbacks to be called anew.
2377
+ */
2378
+ GanttComponent.prototype.updateView = function () {
2379
+ if (isPresent(this.treeList)) {
2380
+ this.treeList.updateView();
2381
+ }
2382
+ };
2328
2383
  /**
2329
2384
  * Opens the task editing dialog.
2330
2385
  */
@@ -2385,16 +2440,6 @@ var GanttComponent = /** @class */ (function () {
2385
2440
  this.dependencyDomService.notifyChanges();
2386
2441
  }
2387
2442
  };
2388
- /**
2389
- * @hidden
2390
- *
2391
- * Used by the GanttExpandableDirective.
2392
- */
2393
- GanttComponent.prototype.updateView = function () {
2394
- if (isPresent(this.treeList)) {
2395
- this.treeList.updateView();
2396
- }
2397
- };
2398
2443
  /**
2399
2444
  * @hidden
2400
2445
  */
@@ -2432,25 +2477,92 @@ var GanttComponent = /** @class */ (function () {
2432
2477
  /**
2433
2478
  * @hidden
2434
2479
  */
2435
- GanttComponent.prototype.handleCellClick = function (event) {
2436
- this._cellClickEvent = event;
2480
+ GanttComponent.prototype.handleTimelineRightClick = function (event) {
2481
+ var _this = this;
2482
+ var target = event.target;
2483
+ var gantt = this.hostElement.nativeElement;
2484
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2485
+ return;
2486
+ }
2487
+ if (hasObservers(this.taskClick)) {
2488
+ var taskIndex_1 = getClosestTaskIndex(target, gantt);
2489
+ var task_1 = this.renderedTreeListItems[taskIndex_1];
2490
+ this.zone.run(function () { return _this.emitTaskClick(event, task_1, taskIndex_1); });
2491
+ }
2492
+ };
2493
+ /**
2494
+ * @hidden
2495
+ */
2496
+ GanttComponent.prototype.handleTimelineClick = function (event) {
2497
+ var _this = this;
2498
+ var target = event.target;
2499
+ var gantt = this.hostElement.nativeElement;
2500
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2501
+ return;
2502
+ }
2503
+ var taskIndex = getClosestTaskIndex(target, gantt);
2504
+ var task = this.renderedTreeListItems[taskIndex];
2505
+ var selectionAction = this.getSelectionAction(event, task);
2506
+ if ((hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
2507
+ hasObservers(this.taskClick)) {
2508
+ this.zone.run(function () {
2509
+ _this.emitSelectionChange(task, selectionAction);
2510
+ _this.emitTaskClick(event, task, taskIndex);
2511
+ });
2512
+ }
2437
2513
  };
2438
2514
  /**
2439
2515
  * @hidden
2440
2516
  */
2441
- GanttComponent.prototype.handleDoubleClick = function (event) {
2517
+ GanttComponent.prototype.handleTreeListDoubleClick = function (event) {
2442
2518
  var _this = this;
2443
- var cell = this._cellClickEvent.originalEvent.target;
2444
- if (event.target !== cell) {
2519
+ if (!isPresent(this.lastTreeListCellClick) || event.target !== this.lastTreeListCellClick.originalEvent.target) {
2445
2520
  return;
2446
2521
  }
2447
- this.editItem = getEditItem(this._cellClickEvent.dataItem, this.treeList.view.data, this.mapper);
2522
+ this.editItem = getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
2448
2523
  if (hasObservers(this.cellDblClick)) {
2449
2524
  this.zone.run(function () {
2450
- _this.cellDblClick.emit(__assign({}, _this._cellClickEvent, { sender: _this }));
2525
+ _this.cellDblClick.emit({
2526
+ column: _this.lastTreeListCellClick.column,
2527
+ columnIndex: _this.lastTreeListCellClick.columnIndex,
2528
+ dataItem: _this.lastTreeListCellClick.dataItem,
2529
+ isEdited: _this.lastTreeListCellClick.isEdited,
2530
+ originalEvent: _this.lastTreeListCellClick.originalEvent,
2531
+ rowIndex: _this.lastTreeListCellClick.rowIndex,
2532
+ type: 'dblclick',
2533
+ sender: _this
2534
+ });
2451
2535
  });
2452
2536
  }
2453
2537
  };
2538
+ /**
2539
+ * @hidden
2540
+ */
2541
+ GanttComponent.prototype.handleTreeListSelectionChange = function (event) {
2542
+ // prevent selection change from right-click
2543
+ if (isPresent(this.lastTreeListCellClick) && this.lastTreeListCellClick.type === 'contextmenu') {
2544
+ return;
2545
+ }
2546
+ var task = event.items.map(function (item) { return item.dataItem; })[0]; // single selection only currently available
2547
+ var action = event.action;
2548
+ this.emitSelectionChange(task, action);
2549
+ };
2550
+ /**
2551
+ * @hidden
2552
+ */
2553
+ GanttComponent.prototype.handleTreeListCellClick = function (event) {
2554
+ this.lastTreeListCellClick = event;
2555
+ this.cellClick.emit({
2556
+ column: event.column,
2557
+ columnIndex: event.columnIndex,
2558
+ dataItem: event.dataItem,
2559
+ isEdited: event.isEdited,
2560
+ originalEvent: event.originalEvent,
2561
+ rowIndex: event.rowIndex,
2562
+ type: event.type,
2563
+ sender: this
2564
+ });
2565
+ };
2454
2566
  /**
2455
2567
  * @hidden
2456
2568
  */
@@ -2478,13 +2590,17 @@ var GanttComponent = /** @class */ (function () {
2478
2590
  if (!isTask(target, gantt) || isClearButton(target, gantt)) {
2479
2591
  return;
2480
2592
  }
2481
- var taskIndex = getClosestTaskIndex(target, gantt);
2482
- var task = this.renderedTreeListItems[taskIndex];
2483
- this.zone.run(function () { return _this.taskDblClick.emit({
2484
- dataItem: task,
2485
- originalEvent: event,
2486
- sender: _this
2487
- }); });
2593
+ if (hasObservers(this.taskDblClick)) {
2594
+ var taskIndex_2 = getClosestTaskIndex(target, gantt);
2595
+ var task_2 = this.renderedTreeListItems[taskIndex_2];
2596
+ this.zone.run(function () { return _this.taskDblClick.emit({
2597
+ dataItem: task_2,
2598
+ originalEvent: event,
2599
+ sender: _this,
2600
+ rowIndex: taskIndex_2,
2601
+ type: 'dblclick'
2602
+ }); });
2603
+ }
2488
2604
  };
2489
2605
  /**
2490
2606
  * @hidden
@@ -2492,6 +2608,26 @@ var GanttComponent = /** @class */ (function () {
2492
2608
  GanttComponent.prototype.getText = function (token) {
2493
2609
  return this.localizationService.get(token);
2494
2610
  };
2611
+ GanttComponent.prototype.emitTaskClick = function (event, dataItem, itemIndex) {
2612
+ this.taskClick.emit({
2613
+ originalEvent: event,
2614
+ dataItem: dataItem,
2615
+ rowIndex: itemIndex,
2616
+ type: event.type,
2617
+ sender: this
2618
+ });
2619
+ };
2620
+ GanttComponent.prototype.emitSelectionChange = function (dataItem, action) {
2621
+ if (this.isSameSelection(action, dataItem)) {
2622
+ return;
2623
+ }
2624
+ this.selectionChange.emit({
2625
+ action: action,
2626
+ items: [dataItem],
2627
+ sender: this
2628
+ });
2629
+ this.updateView();
2630
+ };
2495
2631
  GanttComponent.prototype.updateTreeListGroupClass = function (columns) {
2496
2632
  if (columns === void 0) { columns = this.columns; }
2497
2633
  if (!isPresent(this.treeList)) {
@@ -2522,6 +2658,14 @@ var GanttComponent = /** @class */ (function () {
2522
2658
  }
2523
2659
  return this.views.find(function (view) { return view.type === _this.activeView; });
2524
2660
  };
2661
+ GanttComponent.prototype.isSameSelection = function (action, dataItem) {
2662
+ return action === 'select' && this.isSelected(dataItem);
2663
+ };
2664
+ GanttComponent.prototype.getSelectionAction = function (_a, dataItem) {
2665
+ var ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
2666
+ var shouldToggleSelection = ctrlKey || metaKey;
2667
+ return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
2668
+ };
2525
2669
  var GanttComponent_1;
2526
2670
  __decorate([
2527
2671
  ViewChild(TreeListComponent, { static: true }),
@@ -2581,6 +2725,18 @@ var GanttComponent = /** @class */ (function () {
2581
2725
  __metadata("design:type", Array),
2582
2726
  __metadata("design:paramtypes", [Array])
2583
2727
  ], GanttComponent.prototype, "data", null);
2728
+ __decorate([
2729
+ Input(),
2730
+ __metadata("design:type", Function)
2731
+ ], GanttComponent.prototype, "isSelected", void 0);
2732
+ __decorate([
2733
+ Output(),
2734
+ __metadata("design:type", EventEmitter)
2735
+ ], GanttComponent.prototype, "selectionChange", void 0);
2736
+ __decorate([
2737
+ Input(),
2738
+ __metadata("design:type", Boolean)
2739
+ ], GanttComponent.prototype, "selectable", void 0);
2584
2740
  __decorate([
2585
2741
  Input(),
2586
2742
  __metadata("design:type", String)
@@ -2749,6 +2905,14 @@ var GanttComponent = /** @class */ (function () {
2749
2905
  Output(),
2750
2906
  __metadata("design:type", EventEmitter)
2751
2907
  ], GanttComponent.prototype, "columnLockedChange", void 0);
2908
+ __decorate([
2909
+ Output(),
2910
+ __metadata("design:type", EventEmitter)
2911
+ ], GanttComponent.prototype, "cellClick", void 0);
2912
+ __decorate([
2913
+ Output(),
2914
+ __metadata("design:type", EventEmitter)
2915
+ ], GanttComponent.prototype, "taskClick", void 0);
2752
2916
  GanttComponent = GanttComponent_1 = __decorate([
2753
2917
  Component({
2754
2918
  selector: 'kendo-gantt',
@@ -2773,7 +2937,7 @@ var GanttComponent = /** @class */ (function () {
2773
2937
  OptionChangesService,
2774
2938
  EditService
2775
2939
  ],
2776
- template: "\n <ng-container kendoGanttLocalizedMessages\n i18n-taskDeleteLabel=\"kendo.gantt.taskDeleteLabel|The label of the task delete icon\"\n taskDeleteLabel=\"Delete\"\n\n i18n-taskEditingDialogTitle=\"kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog\"\n taskEditingDialogTitle=\"Editing Task\"\n\n i18n-taskEditingDialogCloseTitle=\"kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button\"\n taskEditingDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogCloseTitle=\"kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button\"\n confirmationDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogTitle=\"kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog\"\n confirmationDialogTitle=\"Delete Task\"\n\n i18n-confirmationDialogContent=\"kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog\"\n confirmationDialogContent=\"Are you sure you want to delete this task?\"\n\n i18n-deleteButtonText=\"kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button\"\n deleteButtonText=\"Delete\"\n\n i18n-cancelButtonText=\"kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button\"\n cancelButtonText=\"Cancel\"\n\n i18n-saveButtonText=\"kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button\"\n saveButtonText=\"Save\"\n\n i18n-titleFieldInputLabel=\"kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode\"\n titleFieldInputLabel=\"Title\"\n\n i18n-startFieldInputLabel=\"kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode\"\n startFieldInputLabel=\"Start\"\n\n i18n-endFieldInputLabel=\"kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode\"\n endFieldInputLabel=\"End\"\n\n i18n-completionRatioFieldInputLabel=\"kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode\"\n completionRatioFieldInputLabel=\"Progress\"\n\n i18n-dayViewText=\"kendo.gantt.dayViewText|The text of the day view in the ViewSelector component\"\n dayViewText=\"Day\"\n\n i18n-weekViewText=\"kendo.gantt.weekViewText|The text of the week view in the ViewSelector component\"\n weekViewText=\"Week\"\n\n i18n-monthViewText=\"kendo.gantt.monthViewText|The text of the month view in the ViewSelector component\"\n monthViewText=\"Month\"\n\n i18n-yearViewText-disabled=\"kendo.gantt.yearViewText|The text of the year view in the ViewSelector component\"\n yearViewText=\"Year\"\n\n i18n-noRecords=\"kendo.gantt.noRecords|The label visible in the TreeList when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-filter=\"kendo.gantt.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterEqOperator=\"kendo.gantt.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.gantt.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.gantt.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.gantt.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.gantt.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.gantt.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.gantt.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.gantt.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.gantt.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.gantt.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.gantt.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.gantt.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.gantt.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.gantt.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-columnMenu=\"kendo.gantt.columnMenu|The title of the column menu icon\"\n columnMenu=\"Column Menu\"\n\n i18n-columns=\"kendo.gantt.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock-disabled=\"kendo.gantt.lock|The text shown in the column menu for the lock item\"\n lock-disabled=\"Lock\"\n\n i18n-unlock-disabled=\"kendo.gantt.unlock|The text shown in the column menu for the unlock item\"\n unlock-disabled=\"Unlock\"\n\n i18n-sortable=\"kendo.gantt.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.gantt.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"></ng-container>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('top')\"\n class=\"k-gantt-header k-toolbar k-gantt-toolbar\"\n position=\"top\"></kendo-gantt-toolbar>\n <div class=\"k-gantt-content\">\n <kendo-splitter [style.border]=\"0\">\n <kendo-splitter-pane\n class=\"k-gantt-treelist k-gantt-treelist-scrollable\"\n [collapsible]=\"treeListPaneOptions?.collapsible\"\n [collapsed]=\"treeListPaneOptions?.collapsed\"\n (collapsedChange)=\"onTreeListCollapsedChange($event)\"\n [scrollable]=\"false\">\n <kendo-treelist\n [idField]=\"taskIdField\"\n [columns]=\"columns\"\n [data]=\"data\"\n [hasChildren]=\"hasChildren\"\n [fetchChildren]=\"fetchChildren\"\n [isExpanded]=\"isExpanded\"\n [autoSize]=\"columnsAutoSize\"\n [columnMenu]=\"columnMenu\"\n [reorderable]=\"columnsReorderable\"\n [resizable]=\"columnsResizable\"\n [rowClass]=\"rowClass\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n [filterable]=\"filterMenu\"\n [filter]=\"filter\"\n (filterChange)=\"filterChange.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (dataStateChange)=\"dataStateChange.emit({\n filter: $event.filter,\n sort: $event.sort\n })\"\n (expandStateChange)=\"expandStateChange.emit($event)\"\n (expand)=\"rowExpand.emit({ dataItem: $event.dataItem })\"\n (collapse)=\"rowCollapse.emit({ dataItem: $event.dataItem })\"\n (columnReorder)=\"columnReorder.emit($event)\"\n (columnResize)=\"columnResize.emit($event)\"\n (columnVisibilityChange)=\"handleColumnVisibilityChange($event)\"\n (columnLockedChange)=\"columnLockedChange.emit($event)\"\n (cellClick)=\"handleCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleDoubleClick\n }\">\n <kendo-treelist-messages [kendoGanttTreeListMessages]=\"localizationService\"></kendo-treelist-messages>\n </kendo-treelist>\n </kendo-splitter-pane>\n <kendo-splitter-pane\n [collapsible]=\"timelinePaneOptions?.collapsible\"\n [resizable]=\"timelinePaneOptions?.resizable\"\n [collapsed]=\"timelinePaneOptions?.collapsed\"\n [min]=\"timelinePaneOptions?.min\"\n [max]=\"timelinePaneOptions?.max\"\n [size]=\"timelinePaneOptions?.size\"\n (collapsedChange)=\"onTimelineCollapsedChange($event)\"\n (sizeChange)=\"onTimelinePaneSizeChange($event)\"\n [scrollable]=\"false\">\n <kendo-gantt-timeline\n *ngIf=\"views && views.length\"\n [rows]=\"renderedTreeListItems\"\n [slots]=\"timelineSlots\"\n [groupSlots]=\"timelineGroupSlots\"\n [tableWidth]=\"tableWidth\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate?.templateRef\"\n [taskTemplate]=\"taskTemplate?.templateRef\"\n [summaryTaskTemplate]=\"summaryTaskTemplate?.templateRef\"\n [taskClass]=\"taskClass\"\n [dependencies]=\"dependencies\"\n [hasChildren]=\"hasChildren\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog *ngIf=\"showEditingDialog\" [formGroup]=\"editDialogFormGroup\"></kendo-gantt-edit-dialog>\n <kendo-dialog\n *ngIf=\"showConfirmationDialog\"\n [width]=\"575\"\n [height]=\"170\"\n [title]=\"getText('confirmationDialogTitle')\"\n (close)=\"showConfirmationDialog = false;\">\n <span>{{getText('confirmationDialogContent')}}</span>\n <kendo-dialog-actions layout=\"normal\">\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleDeleteConfirmation()\">{{ getText('deleteButtonText') }}</button>\n <button kendoButton (click)=\"showConfirmationDialog = false;\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
2940
+ 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 "
2777
2941
  }),
2778
2942
  __metadata("design:paramtypes", [TimelineViewService,
2779
2943
  ScrollSyncService,
@@ -2882,6 +3046,10 @@ var GanttTimelineComponent = /** @class */ (function () {
2882
3046
  Input(),
2883
3047
  __metadata("design:type", Function)
2884
3048
  ], GanttTimelineComponent.prototype, "taskClass", void 0);
3049
+ __decorate([
3050
+ Input(),
3051
+ __metadata("design:type", Function)
3052
+ ], GanttTimelineComponent.prototype, "isTaskSelected", void 0);
2885
3053
  __decorate([
2886
3054
  Input(),
2887
3055
  __metadata("design:type", Function)
@@ -2893,7 +3061,7 @@ var GanttTimelineComponent = /** @class */ (function () {
2893
3061
  GanttTimelineComponent = __decorate([
2894
3062
  Component({
2895
3063
  selector: 'kendo-gantt-timeline',
2896
- template: "\n <div class=\"k-timeline k-grid k-widget\">\n <div class=\"k-grid-header\">\n <div #timelineHeaderWrap class=\"k-grid-header-wrap\">\n <table\n role=\"presentation\"\n [style.width.px]=\"tableWidth\"\n >\n <tbody\n kendoGanttHeaderTableBody\n [groupSlots]=\"groupSlots\"\n [slots]=\"slots\">\n </tbody>\n </table>\n </div>\n </div>\n <div #timelineContent class=\"k-grid-content\">\n <div class=\"k-gantt-tables\">\n <table\n class=\"k-gantt-rows\"\n [style.width.px]=\"tableWidth\"\n role=\"presentation\"\n >\n <tbody>\n <tr *ngFor=\"let item of rows; let i = index;\"\n [class.k-alt]=\"i % 2\"\n >\n <td></td>\n </tr>\n </tbody>\n </table>\n\n <table\n #timelineColumns\n class=\"k-gantt-columns\"\n role=\"presentation\"\n [style.width.px]=\"tableWidth\"\n >\n <colgroup>\n <col *ngFor=\"let item of slots\">\n </colgroup>\n\n <tbody>\n <tr>\n <td *ngFor=\"let item of slots\"\n [class.k-nonwork-hour]=\"isNonWorking(item)\"\n >\n </td>\n </tr>\n </tbody>\n </table>\n\n <table\n #tasksContainer\n class=\"k-gantt-tasks\"\n role=\"presentation\"\n style=\"border-collapse: collapse;\"\n [style.width.px]=\"tableWidth\"\n >\n <tbody\n kendoGanttTasksTableBody\n [rows]=\"rows\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [summaryTaskTemplate]=\"summaryTaskTemplate\"\n [taskClass]=\"taskClass\"\n [hasChildren]=\"hasChildren\"\n >\n </tbody>\n </table>\n </div>\n <svg class=\"k-gantt-dependencies-svg\">\n <polyline\n *ngFor=\"let dependency of dependencies\"\n kendoGanttDependency\n [dependency]=\"dependency\"\n />\n </svg>\n </div>\n </div>\n "
3064
+ template: "\n <div class=\"k-timeline k-grid k-widget\">\n <div class=\"k-grid-header\">\n <div #timelineHeaderWrap class=\"k-grid-header-wrap\">\n <table\n role=\"presentation\"\n [style.width.px]=\"tableWidth\"\n >\n <tbody\n kendoGanttHeaderTableBody\n [groupSlots]=\"groupSlots\"\n [slots]=\"slots\">\n </tbody>\n </table>\n </div>\n </div>\n <div #timelineContent class=\"k-grid-content\">\n <div class=\"k-gantt-tables\">\n <table\n class=\"k-gantt-rows\"\n [style.width.px]=\"tableWidth\"\n role=\"presentation\"\n >\n <tbody>\n <tr *ngFor=\"let item of rows; let i = index;\"\n [class.k-alt]=\"i % 2\"\n >\n <td></td>\n </tr>\n </tbody>\n </table>\n\n <table\n #timelineColumns\n class=\"k-gantt-columns\"\n role=\"presentation\"\n [style.width.px]=\"tableWidth\"\n >\n <colgroup>\n <col *ngFor=\"let item of slots\">\n </colgroup>\n\n <tbody>\n <tr>\n <td *ngFor=\"let item of slots\"\n [class.k-nonwork-hour]=\"isNonWorking(item)\"\n >\n </td>\n </tr>\n </tbody>\n </table>\n\n <table\n #tasksContainer\n class=\"k-gantt-tasks\"\n role=\"presentation\"\n style=\"border-collapse: collapse;\"\n [style.width.px]=\"tableWidth\"\n >\n <tbody\n kendoGanttTasksTableBody\n [rows]=\"rows\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [summaryTaskTemplate]=\"summaryTaskTemplate\"\n [taskClass]=\"taskClass\"\n [hasChildren]=\"hasChildren\"\n [isTaskSelected]=\"isTaskSelected\"\n >\n </tbody>\n </table>\n </div>\n <svg class=\"k-gantt-dependencies-svg\">\n <polyline\n *ngFor=\"let dependency of dependencies\"\n kendoGanttDependency\n [dependency]=\"dependency\"\n />\n </svg>\n </div>\n </div>\n "
2897
3065
  }),
2898
3066
  __metadata("design:paramtypes", [ScrollSyncService,
2899
3067
  DependencyDomService,
@@ -2960,12 +3128,12 @@ var GanttTasksTableBodyComponent = /** @class */ (function () {
2960
3128
  ], GanttTasksTableBodyComponent.prototype, "hasChildren", void 0);
2961
3129
  __decorate([
2962
3130
  Input(),
2963
- __metadata("design:type", Number)
2964
- ], GanttTasksTableBodyComponent.prototype, "index", void 0);
3131
+ __metadata("design:type", Function)
3132
+ ], GanttTasksTableBodyComponent.prototype, "isTaskSelected", void 0);
2965
3133
  GanttTasksTableBodyComponent = __decorate([
2966
3134
  Component({
2967
3135
  selector: '[kendoGanttTasksTableBody]',
2968
- template: "\n <tr #timelineRow *ngFor=\"let item of rows; let index = index\">\n <td>\n <kendo-gantt-milestone-task\n *ngIf=\"isMileStone(item); else task\"\n [dataItem]=\"item\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [index]=\"index\"\n >\n </kendo-gantt-milestone-task>\n <ng-template #task>\n <kendo-gantt-summary-task\n *ngIf=\"hasChildren(item)\"\n [dataItem]=\"item\"\n [template]=\"summaryTaskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [index]=\"index\"\n >\n </kendo-gantt-summary-task>\n <kendo-gantt-task\n *ngIf=\"!hasChildren(item)\"\n [dataItem]=\"item\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [index]=\"index\"\n >\n </kendo-gantt-task>\n </ng-template>\n </td>\n </tr>\n "
3136
+ template: "\n <tr #timelineRow *ngFor=\"let item of rows; let index = index\">\n <td>\n <kendo-gantt-milestone-task\n *ngIf=\"isMileStone(item); else task\"\n [dataItem]=\"item\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n >\n </kendo-gantt-milestone-task>\n <ng-template #task>\n <kendo-gantt-summary-task\n *ngIf=\"hasChildren(item)\"\n [dataItem]=\"item\"\n [template]=\"summaryTaskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n >\n </kendo-gantt-summary-task>\n <kendo-gantt-task\n *ngIf=\"!hasChildren(item)\"\n [dataItem]=\"item\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n >\n </kendo-gantt-task>\n </ng-template>\n </td>\n </tr>\n "
2969
3137
  }),
2970
3138
  __metadata("design:paramtypes", [DependencyDomService,
2971
3139
  MappingService])
@@ -3098,6 +3266,14 @@ var GanttTaskBase = /** @class */ (function () {
3098
3266
  Input(),
3099
3267
  __metadata("design:type", Object)
3100
3268
  ], GanttTaskBase.prototype, "dataItem", void 0);
3269
+ __decorate([
3270
+ Input(),
3271
+ __metadata("design:type", Number)
3272
+ ], GanttTaskBase.prototype, "index", void 0);
3273
+ __decorate([
3274
+ Input(),
3275
+ __metadata("design:type", Function)
3276
+ ], GanttTaskBase.prototype, "isSelected", void 0);
3101
3277
  __decorate([
3102
3278
  Input(),
3103
3279
  __metadata("design:type", String)
@@ -3106,10 +3282,6 @@ var GanttTaskBase = /** @class */ (function () {
3106
3282
  Input(),
3107
3283
  __metadata("design:type", Function)
3108
3284
  ], GanttTaskBase.prototype, "taskClass", void 0);
3109
- __decorate([
3110
- Input(),
3111
- __metadata("design:type", Number)
3112
- ], GanttTaskBase.prototype, "index", void 0);
3113
3285
  return GanttTaskBase;
3114
3286
  }());
3115
3287
 
@@ -3146,7 +3318,7 @@ var GanttTaskComponent = /** @class */ (function (_super) {
3146
3318
  useExisting: forwardRef(function () { return GanttTaskComponent_1; })
3147
3319
  }
3148
3320
  ],
3149
- template: "\n <div\n #task\n class=\"k-task k-task-single\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n >\n <ng-container *ngIf=\"!taskTemplate\">\n <div\n class=\"k-task-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n <div class=\"k-task-content\">\n <div class=\"k-task-template\">\n <ng-container *ngIf=\"!taskContentTemplate; else taskContent\">\n {{ mapper.extractFromTask(dataItem, 'title') }}\n </ng-container>\n <ng-template\n #taskContent\n [ngTemplateOutlet]=\"taskContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: dataItem }\"\n >\n </ng-template>\n </div>\n <span class=\"k-task-actions\">\n <span\n (click)=\"onTaskDelete()\"\n class=\"k-link k-task-delete\">\n <span class=\"k-icon k-i-close\"></span>\n </span>\n </span>\n </div>\n </ng-container>\n <ng-template\n *ngIf=\"taskTemplate\"\n [ngTemplateOutlet]=\"taskTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
3321
+ template: "\n <div\n #task\n class=\"k-task k-task-single\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n >\n <ng-container *ngIf=\"!taskTemplate\">\n <div\n class=\"k-task-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n <div class=\"k-task-content\">\n <div class=\"k-task-template\">\n <ng-container *ngIf=\"!taskContentTemplate; else taskContent\">\n {{ mapper.extractFromTask(dataItem, 'title') }}\n </ng-container>\n <ng-template\n #taskContent\n [ngTemplateOutlet]=\"taskContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: dataItem }\"\n >\n </ng-template>\n </div>\n <span class=\"k-task-actions\">\n <span\n (click)=\"onTaskDelete()\"\n class=\"k-link k-task-delete\">\n <span class=\"k-icon k-i-close\"></span>\n </span>\n </span>\n </div>\n </ng-container>\n <ng-template\n *ngIf=\"taskTemplate\"\n [ngTemplateOutlet]=\"taskTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
3150
3322
  }),
3151
3323
  __metadata("design:paramtypes", [MappingService,
3152
3324
  TimelineViewService,
@@ -3187,7 +3359,7 @@ var GanttSummaryTaskComponent = /** @class */ (function (_super) {
3187
3359
  useExisting: forwardRef(function () { return GanttSummaryTaskComponent_1; })
3188
3360
  }
3189
3361
  ],
3190
- template: "\n <div\n #task\n class=\"k-task k-task-summary\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n >\n <div *ngIf=\"!template; else summaryTemplate\"\n class=\"k-task-summary-progress\"\n [style.width.px]=\"taskWidth\">\n <div\n class=\"k-task-summary-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n </div>\n <ng-template\n #summaryTemplate\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
3362
+ template: "\n <div\n #task\n class=\"k-task k-task-summary\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n >\n <div *ngIf=\"!template; else summaryTemplate\"\n class=\"k-task-summary-progress\"\n [style.width.px]=\"taskWidth\">\n <div\n class=\"k-task-summary-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n >\n </div>\n </div>\n <ng-template\n #summaryTemplate\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n $implicit: dataItem,\n elementWidth: taskWidth\n }\"\n >\n </ng-template>\n </div>\n "
3191
3363
  }),
3192
3364
  __metadata("design:paramtypes", [MappingService,
3193
3365
  TimelineViewService,
@@ -3223,7 +3395,7 @@ var GanttMilestoneTaskComponent = /** @class */ (function (_super) {
3223
3395
  useExisting: forwardRef(function () { return GanttMilestoneTaskComponent_1; })
3224
3396
  }
3225
3397
  ],
3226
- template: "\n <div\n #task\n class=\"k-task k-task-milestone\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [attr.data-task-index]=\"index\"\n >\n </div>\n "
3398
+ template: "\n <div\n #task\n class=\"k-task k-task-milestone\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.left.px]=\"taskOffset\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n [attr.data-task-index]=\"index\"\n >\n </div>\n "
3227
3399
  }),
3228
3400
  __metadata("design:paramtypes", [MappingService,
3229
3401
  TimelineViewService,
@@ -3311,6 +3483,138 @@ var GanttExpandableDirective = /** @class */ (function (_super) {
3311
3483
  return GanttExpandableDirective;
3312
3484
  }(ExpandableDirective));
3313
3485
 
3486
+ /**
3487
+ * A directive which handles the [`selectionChange`]({% slug api_gantt_ganttcomponent %}#toc-selectionchange) event of the Gantt
3488
+ * ([see example]({% slug selection_gantt %}#toc-built-in-directive))
3489
+ */
3490
+ var SelectableDirective = /** @class */ (function () {
3491
+ function SelectableDirective(gantt) {
3492
+ this.gantt = gantt;
3493
+ /**
3494
+ * Fires when the selected keys are changed.
3495
+ */
3496
+ this.selectedKeysChange = new EventEmitter();
3497
+ this.state = new Set();
3498
+ this.isSelected = this.isSelected.bind(this);
3499
+ this.selectionChange = this.selectionChange.bind(this);
3500
+ this.selectable = true;
3501
+ }
3502
+ Object.defineProperty(SelectableDirective.prototype, "selectable", {
3503
+ /**
3504
+ * @hidden
3505
+ */
3506
+ set: function (value) {
3507
+ if (value) {
3508
+ this.gantt.isSelected = this.isSelected;
3509
+ this.subscribeSelection();
3510
+ }
3511
+ else {
3512
+ this.gantt.isSelected = function () { return false; };
3513
+ this.unsubscribeSelection();
3514
+ }
3515
+ this.gantt.selectable = value;
3516
+ this.gantt.updateView();
3517
+ },
3518
+ enumerable: true,
3519
+ configurable: true
3520
+ });
3521
+ Object.defineProperty(SelectableDirective.prototype, "selectedKeys", {
3522
+ /**
3523
+ * Sets the selected keys.
3524
+ */
3525
+ set: function (value) {
3526
+ if (isPresent(value) && value === this.lastChange) {
3527
+ return;
3528
+ }
3529
+ // prevent multiple items displayed as selected as multiple selection still not supported fully
3530
+ var keys = (value || []).slice(0, 1);
3531
+ this.state = new Set(keys);
3532
+ this.gantt.updateView();
3533
+ },
3534
+ enumerable: true,
3535
+ configurable: true
3536
+ });
3537
+ Object.defineProperty(SelectableDirective.prototype, "itemKey", {
3538
+ /**
3539
+ * The field name or a function that specifies the data item unique key identifier.
3540
+ * By default, the string field `id` is used.
3541
+ */
3542
+ set: function (value) {
3543
+ if (isString(value)) {
3544
+ this._keyGetter = getter(value);
3545
+ }
3546
+ else {
3547
+ this._keyGetter = value;
3548
+ }
3549
+ },
3550
+ enumerable: true,
3551
+ configurable: true
3552
+ });
3553
+ Object.defineProperty(SelectableDirective.prototype, "keyGetter", {
3554
+ get: function () {
3555
+ return this._keyGetter || this.gantt.idGetter;
3556
+ },
3557
+ enumerable: true,
3558
+ configurable: true
3559
+ });
3560
+ SelectableDirective.prototype.ngOnDestroy = function () {
3561
+ this.unsubscribeSelection();
3562
+ };
3563
+ SelectableDirective.prototype.isSelected = function (dataItem) {
3564
+ return this.state.has(this.keyGetter(dataItem));
3565
+ };
3566
+ SelectableDirective.prototype.selectionChange = function (_a) {
3567
+ var _this = this;
3568
+ var action = _a.action, items = _a.items;
3569
+ this.state.clear();
3570
+ if (action === 'select') {
3571
+ items.forEach(function (item) { return _this.state.add(_this.keyGetter(item)); });
3572
+ }
3573
+ this.emitSelectedItemsChange();
3574
+ };
3575
+ SelectableDirective.prototype.emitSelectedItemsChange = function () {
3576
+ this.lastChange = Array.from(this.state);
3577
+ this.selectedKeysChange.emit(this.lastChange);
3578
+ };
3579
+ SelectableDirective.prototype.subscribeSelection = function () {
3580
+ this.unsubscribeSelection();
3581
+ this.selectionSubscription = this.gantt.selectionChange.subscribe(this.selectionChange);
3582
+ };
3583
+ SelectableDirective.prototype.unsubscribeSelection = function () {
3584
+ if (this.selectionSubscription) {
3585
+ this.selectionSubscription.unsubscribe();
3586
+ this.selectionSubscription = null;
3587
+ }
3588
+ };
3589
+ __decorate([
3590
+ Input(),
3591
+ __metadata("design:type", Boolean),
3592
+ __metadata("design:paramtypes", [Boolean])
3593
+ ], SelectableDirective.prototype, "selectable", null);
3594
+ __decorate([
3595
+ Input(),
3596
+ __metadata("design:type", Array),
3597
+ __metadata("design:paramtypes", [Array])
3598
+ ], SelectableDirective.prototype, "selectedKeys", null);
3599
+ __decorate([
3600
+ Output(),
3601
+ __metadata("design:type", EventEmitter)
3602
+ ], SelectableDirective.prototype, "selectedKeysChange", void 0);
3603
+ __decorate([
3604
+ Input(),
3605
+ __metadata("design:type", Object),
3606
+ __metadata("design:paramtypes", [Object])
3607
+ ], SelectableDirective.prototype, "itemKey", null);
3608
+ SelectableDirective = __decorate([
3609
+ Directive({
3610
+ exportAs: 'kendoGanttSelectable',
3611
+ selector: '[kendoGanttSelectable]'
3612
+ }),
3613
+ __metadata("design:paramtypes", [GanttComponent])
3614
+ ], SelectableDirective);
3615
+ return SelectableDirective;
3616
+ }());
3617
+
3314
3618
  /**
3315
3619
  * @hidden
3316
3620
  */
@@ -4151,6 +4455,7 @@ var DECLARATIONS = [
4151
4455
  TimelineDayViewComponent,
4152
4456
  TimelineWeekViewComponent,
4153
4457
  TimelineMonthViewComponent,
4458
+ SelectableDirective,
4154
4459
  EditDialogComponent,
4155
4460
  CustomMessagesComponent,
4156
4461
  LocalizedMessagesDirective,
@@ -4208,4 +4513,4 @@ var GanttModule = /** @class */ (function () {
4208
4513
  * Generated bundle index. Do not edit.
4209
4514
  */
4210
4515
 
4211
- 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, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, ColumnMenuTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective, EditTemplateDirective };
4516
+ 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 };