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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -2
  2. package/dist/cdn/main.js +1 -29
  3. package/dist/es/common/touch-enabled.js +9 -0
  4. package/dist/es/dependencies/utils.js +34 -0
  5. package/dist/es/dragging/dependency-drag-create.directive.js +347 -0
  6. package/dist/es/dragging/drag-validation-tooltip.component.js +27 -0
  7. package/dist/es/editing/dependencies-table.component.js +1 -1
  8. package/dist/es/editing/edit-dialog.component.js +3 -3
  9. package/dist/es/editing/edit.service.js +4 -2
  10. package/dist/es/editing/task-fields.component.js +1 -1
  11. package/dist/es/editing/{util.js → utils.js} +0 -0
  12. package/dist/es/gantt.component.js +313 -28
  13. package/dist/es/gantt.module.js +23 -6
  14. package/dist/es/index.js +5 -0
  15. package/dist/es/main.js +1 -0
  16. package/dist/es/models/events/dependency-add-event.interface.js +4 -0
  17. package/dist/es/models/events/task-delete-event.interface.js +4 -0
  18. package/dist/es/models/view-item.interface.js +4 -0
  19. package/dist/es/navigation/navigation-models.js +4 -0
  20. package/dist/es/navigation/navigation.service.js +390 -0
  21. package/dist/es/navigation/utils.js +77 -0
  22. package/dist/es/package-metadata.js +1 -1
  23. package/dist/es/rendering/gantt-milestone-task.component.js +12 -6
  24. package/dist/es/rendering/gantt-summary-task.component.js +27 -6
  25. package/dist/es/rendering/gantt-task-base.js +84 -22
  26. package/dist/es/rendering/gantt-task.component.js +13 -8
  27. package/dist/es/rendering/gantt-tasks-table-body.component.js +13 -5
  28. package/dist/es/scrolling/drag-scroll-settings.js +20 -0
  29. package/dist/es/scrolling/timeline-scroll.directive.js +89 -0
  30. package/dist/es/scrolling/timeline-scroll.service.js +39 -0
  31. package/dist/es/scrolling/utils.js +80 -0
  32. package/dist/es/timeline/gantt-timeline.component.js +50 -4
  33. package/dist/es/toolbar/toolbar.component.js +12 -13
  34. package/dist/es/toolbar/view-selector.component.js +1 -1
  35. package/dist/es/utils.js +153 -12
  36. package/dist/es2015/common/touch-enabled.d.ts +9 -0
  37. package/dist/es2015/common/touch-enabled.js +9 -0
  38. package/dist/es2015/dependencies/utils.d.ts +15 -0
  39. package/dist/es2015/dependencies/utils.js +34 -0
  40. package/dist/es2015/dragging/dependency-drag-create.directive.d.ts +72 -0
  41. package/dist/es2015/dragging/dependency-drag-create.directive.js +324 -0
  42. package/dist/es2015/dragging/drag-validation-tooltip.component.d.ts +29 -0
  43. package/dist/es2015/dragging/drag-validation-tooltip.component.js +76 -0
  44. package/dist/es2015/editing/dependencies-table.component.js +1 -1
  45. package/dist/es2015/editing/edit-dialog.component.d.ts +1 -1
  46. package/dist/es2015/editing/edit-dialog.component.js +12 -4
  47. package/dist/es2015/editing/edit.service.d.ts +2 -3
  48. package/dist/es2015/editing/edit.service.js +4 -2
  49. package/dist/es2015/editing/task-fields.component.js +1 -1
  50. package/dist/es2015/editing/{util.d.ts → utils.d.ts} +2 -2
  51. package/dist/es2015/editing/{util.js → utils.js} +0 -0
  52. package/dist/es2015/gantt.component.d.ts +112 -17
  53. package/dist/es2015/gantt.component.js +292 -30
  54. package/dist/es2015/gantt.module.js +23 -6
  55. package/dist/es2015/index.d.ts +5 -0
  56. package/dist/es2015/index.js +5 -0
  57. package/dist/es2015/index.metadata.json +1 -1
  58. package/dist/es2015/main.d.ts +1 -0
  59. package/dist/es2015/main.js +1 -0
  60. package/dist/es2015/models/events/dependency-add-event.interface.d.ts +26 -0
  61. package/dist/es2015/models/events/dependency-add-event.interface.js +4 -0
  62. package/dist/es2015/models/events/task-click-event.interface.d.ts +3 -3
  63. package/dist/es2015/models/events/task-delete-event.interface.d.ts +21 -0
  64. package/dist/es2015/models/events/task-delete-event.interface.js +4 -0
  65. package/dist/es2015/models/events/task-edit-event.interface.d.ts +27 -10
  66. package/dist/es2015/models/models.d.ts +4 -0
  67. package/dist/es2015/models/view-item.interface.d.ts +35 -0
  68. package/dist/es2015/models/view-item.interface.js +4 -0
  69. package/dist/es2015/navigation/navigation-models.d.ts +34 -0
  70. package/dist/es2015/navigation/navigation-models.js +4 -0
  71. package/dist/es2015/navigation/navigation.service.d.ts +126 -0
  72. package/dist/es2015/navigation/navigation.service.js +355 -0
  73. package/dist/es2015/navigation/utils.d.ts +26 -0
  74. package/dist/es2015/navigation/utils.js +69 -0
  75. package/dist/es2015/package-metadata.js +1 -1
  76. package/dist/es2015/rendering/gantt-milestone-task.component.d.ts +3 -1
  77. package/dist/es2015/rendering/gantt-milestone-task.component.js +35 -8
  78. package/dist/es2015/rendering/gantt-summary-task.component.d.ts +5 -1
  79. package/dist/es2015/rendering/gantt-summary-task.component.js +47 -8
  80. package/dist/es2015/rendering/gantt-task-base.d.ts +20 -6
  81. package/dist/es2015/rendering/gantt-task-base.js +75 -22
  82. package/dist/es2015/rendering/gantt-task.component.d.ts +4 -2
  83. package/dist/es2015/rendering/gantt-task.component.js +47 -13
  84. package/dist/es2015/rendering/gantt-tasks-table-body.component.d.ts +6 -3
  85. package/dist/es2015/rendering/gantt-tasks-table-body.component.js +27 -9
  86. package/dist/es2015/scrolling/drag-scroll-settings.d.ts +47 -0
  87. package/dist/es2015/scrolling/drag-scroll-settings.js +20 -0
  88. package/dist/es2015/scrolling/scroll-sync.service.d.ts +1 -1
  89. package/dist/es2015/scrolling/timeline-scroll.directive.d.ts +24 -0
  90. package/dist/es2015/scrolling/timeline-scroll.directive.js +78 -0
  91. package/dist/es2015/scrolling/timeline-scroll.service.d.ts +20 -0
  92. package/dist/es2015/scrolling/timeline-scroll.service.js +44 -0
  93. package/dist/es2015/scrolling/utils.d.ts +29 -0
  94. package/dist/es2015/scrolling/utils.js +80 -0
  95. package/dist/es2015/timeline/gantt-timeline.component.d.ts +29 -4
  96. package/dist/es2015/timeline/gantt-timeline.component.js +67 -5
  97. package/dist/es2015/toolbar/toolbar.component.d.ts +4 -5
  98. package/dist/es2015/toolbar/toolbar.component.js +12 -13
  99. package/dist/es2015/toolbar/view-selector.component.js +3 -1
  100. package/dist/es2015/utils.d.ts +77 -8
  101. package/dist/es2015/utils.js +153 -12
  102. package/dist/fesm2015/index.js +3033 -1367
  103. package/dist/fesm5/index.js +2447 -830
  104. package/dist/npm/common/touch-enabled.js +11 -0
  105. package/dist/npm/dependencies/utils.js +34 -0
  106. package/dist/npm/dragging/dependency-drag-create.directive.js +349 -0
  107. package/dist/npm/dragging/drag-validation-tooltip.component.js +29 -0
  108. package/dist/npm/editing/dependencies-table.component.js +1 -1
  109. package/dist/npm/editing/edit-dialog.component.js +3 -3
  110. package/dist/npm/editing/edit.service.js +4 -2
  111. package/dist/npm/editing/task-fields.component.js +1 -1
  112. package/dist/npm/editing/{util.js → utils.js} +0 -0
  113. package/dist/npm/gantt.component.js +315 -30
  114. package/dist/npm/gantt.module.js +22 -5
  115. package/dist/npm/index.js +10 -0
  116. package/dist/npm/main.js +2 -0
  117. package/dist/npm/models/events/dependency-add-event.interface.js +6 -0
  118. package/dist/npm/models/events/task-delete-event.interface.js +6 -0
  119. package/dist/npm/models/view-item.interface.js +6 -0
  120. package/dist/npm/navigation/navigation-models.js +6 -0
  121. package/dist/npm/navigation/navigation.service.js +392 -0
  122. package/dist/npm/navigation/utils.js +79 -0
  123. package/dist/npm/package-metadata.js +1 -1
  124. package/dist/npm/rendering/gantt-milestone-task.component.js +11 -5
  125. package/dist/npm/rendering/gantt-summary-task.component.js +26 -5
  126. package/dist/npm/rendering/gantt-task-base.js +84 -22
  127. package/dist/npm/rendering/gantt-task.component.js +12 -7
  128. package/dist/npm/rendering/gantt-tasks-table-body.component.js +13 -5
  129. package/dist/npm/scrolling/drag-scroll-settings.js +22 -0
  130. package/dist/npm/scrolling/timeline-scroll.directive.js +91 -0
  131. package/dist/npm/scrolling/timeline-scroll.service.js +41 -0
  132. package/dist/npm/scrolling/utils.js +83 -0
  133. package/dist/npm/timeline/gantt-timeline.component.js +49 -3
  134. package/dist/npm/toolbar/toolbar.component.js +10 -11
  135. package/dist/npm/toolbar/view-selector.component.js +1 -1
  136. package/dist/npm/utils.js +153 -12
  137. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  138. package/package.json +23 -21
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  var tslib_1 = require("tslib");
8
8
  var core_1 = require("@angular/core");
9
9
  var mapping_service_1 = require("../common/mapping.service");
10
+ var navigation_service_1 = require("../navigation/navigation.service");
11
+ var touch_enabled_1 = require("../common/touch-enabled");
10
12
  var dependency_dom_service_1 = require("../dependencies/dependency-dom.service");
11
13
  var option_changes_service_1 = require("../common/option-changes.service");
12
14
  var timeline_view_service_1 = require("./../timeline/timeline-view.service");
@@ -16,8 +18,9 @@ var gantt_task_base_1 = require("./gantt-task-base");
16
18
  */
17
19
  var GanttMilestoneTaskComponent = /** @class */ (function (_super) {
18
20
  tslib_1.__extends(GanttMilestoneTaskComponent, _super);
19
- function GanttMilestoneTaskComponent(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr) {
20
- var _this = _super.call(this, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr) || this;
21
+ function GanttMilestoneTaskComponent(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
22
+ var _this = _super.call(this, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) || this;
23
+ _this.touchEnabled = touchEnabled;
21
24
  _this.milestoneWrapperClass = true;
22
25
  return _this;
23
26
  }
@@ -36,13 +39,16 @@ var GanttMilestoneTaskComponent = /** @class */ (function (_super) {
36
39
  useExisting: core_1.forwardRef(function () { return GanttMilestoneTaskComponent_1; })
37
40
  }
38
41
  ],
39
- 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 "
42
+ template: "\n <div\n #task\n role=\"treeitem\"\n class=\"k-task k-task-milestone\"\n [ngClass]=\"taskClass(dataItem)\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n [attr.aria-selected]=\"ariaSelected\"\n [attr.aria-level]=\"level + 1\"\n >\n </div>\n <ng-container *ngIf=\"renderDependencyDragClues\">\n <div\n class=\"k-task-dot k-task-start k-touch-action-none\"\n [class.k-display-block]=\"touchEnabled\"\n >\n </div>\n <div\n class=\"k-task-dot k-task-end k-touch-action-none\"\n [class.k-display-block]=\"touchEnabled\"\n >\n </div>\n </ng-container>\n ",
43
+ styles: ["\n .k-task.k-focus {\n box-shadow: 0 0 4px 3px grey;\n outline: none;\n }\n .k-task.k-focus.k-state-selected {\n box-shadow: 0 0 4px 3px #ffaea8;\n }\n "]
40
44
  }),
41
- tslib_1.__metadata("design:paramtypes", [mapping_service_1.MappingService,
45
+ tslib_1.__param(0, core_1.Inject(touch_enabled_1.TOUCH_ENABLED)),
46
+ tslib_1.__metadata("design:paramtypes", [Boolean, mapping_service_1.MappingService,
42
47
  timeline_view_service_1.TimelineViewService,
43
48
  dependency_dom_service_1.DependencyDomService,
44
49
  option_changes_service_1.OptionChangesService,
45
- core_1.ChangeDetectorRef])
50
+ core_1.ChangeDetectorRef,
51
+ navigation_service_1.NavigationService])
46
52
  ], GanttMilestoneTaskComponent);
47
53
  return GanttMilestoneTaskComponent;
48
54
  }(gantt_task_base_1.GanttTaskBase));
@@ -7,21 +7,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  var tslib_1 = require("tslib");
8
8
  var core_1 = require("@angular/core");
9
9
  var mapping_service_1 = require("../common/mapping.service");
10
+ var navigation_service_1 = require("../navigation/navigation.service");
11
+ var touch_enabled_1 = require("../common/touch-enabled");
10
12
  var dependency_dom_service_1 = require("../dependencies/dependency-dom.service");
11
13
  var option_changes_service_1 = require("../common/option-changes.service");
12
14
  var timeline_view_service_1 = require("./../timeline/timeline-view.service");
13
15
  var gantt_task_base_1 = require("./gantt-task-base");
16
+ var utils_1 = require("../utils");
14
17
  /**
15
18
  * @hidden
16
19
  */
17
20
  var GanttSummaryTaskComponent = /** @class */ (function (_super) {
18
21
  tslib_1.__extends(GanttSummaryTaskComponent, _super);
19
- function GanttSummaryTaskComponent(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr) {
20
- var _this = _super.call(this, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr) || this;
22
+ function GanttSummaryTaskComponent(touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
23
+ var _this = _super.call(this, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) || this;
24
+ _this.touchEnabled = touchEnabled;
21
25
  _this.summaryWrapperClass = true;
22
26
  return _this;
23
27
  }
24
28
  GanttSummaryTaskComponent_1 = GanttSummaryTaskComponent;
29
+ Object.defineProperty(GanttSummaryTaskComponent.prototype, "ariaExpanded", {
30
+ get: function () {
31
+ // if no callback is provided, all child items are displayed and the item is regarded as expanded
32
+ // replicates the TreeList aria-expanded behavior
33
+ var isExpanded = !utils_1.isPresent(this.isExpanded) || this.isExpanded(this.dataItem);
34
+ return String(isExpanded);
35
+ },
36
+ enumerable: true,
37
+ configurable: true
38
+ });
25
39
  var GanttSummaryTaskComponent_1;
26
40
  tslib_1.__decorate([
27
41
  core_1.HostBinding('class.k-summary-wrap'),
@@ -31,6 +45,10 @@ var GanttSummaryTaskComponent = /** @class */ (function (_super) {
31
45
  core_1.Input(),
32
46
  tslib_1.__metadata("design:type", core_1.TemplateRef)
33
47
  ], GanttSummaryTaskComponent.prototype, "template", void 0);
48
+ tslib_1.__decorate([
49
+ core_1.Input(),
50
+ tslib_1.__metadata("design:type", Function)
51
+ ], GanttSummaryTaskComponent.prototype, "isExpanded", void 0);
34
52
  GanttSummaryTaskComponent = GanttSummaryTaskComponent_1 = tslib_1.__decorate([
35
53
  core_1.Component({
36
54
  selector: 'kendo-gantt-summary-task',
@@ -40,13 +58,16 @@ var GanttSummaryTaskComponent = /** @class */ (function (_super) {
40
58
  useExisting: core_1.forwardRef(function () { return GanttSummaryTaskComponent_1; })
41
59
  }
42
60
  ],
43
- 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 "
61
+ template: "\n <div\n #task\n role=\"treeitem\"\n class=\"k-task k-task-summary\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n [attr.aria-selected]=\"ariaSelected\"\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-level]=\"level + 1\"\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 <ng-container *ngIf=\"renderDependencyDragClues\">\n <div\n class=\"k-task-dot k-task-start k-touch-action-none\"\n [class.k-display-block]=\"touchEnabled\"\n >\n </div>\n <div\n class=\"k-task-dot k-task-end k-touch-action-none\"\n [class.k-display-block]=\"touchEnabled\"\n >\n </div>\n </ng-container>\n ",
62
+ styles: ["\n .k-task.k-focus {\n box-shadow: 0 0 4px 3px grey;\n outline: none;\n }\n .k-task.k-focus.k-state-selected {\n box-shadow: 0 0 4px 3px #ffaea8;\n }\n "]
44
63
  }),
45
- tslib_1.__metadata("design:paramtypes", [mapping_service_1.MappingService,
64
+ tslib_1.__param(0, core_1.Inject(touch_enabled_1.TOUCH_ENABLED)),
65
+ tslib_1.__metadata("design:paramtypes", [Boolean, mapping_service_1.MappingService,
46
66
  timeline_view_service_1.TimelineViewService,
47
67
  dependency_dom_service_1.DependencyDomService,
48
68
  option_changes_service_1.OptionChangesService,
49
- core_1.ChangeDetectorRef])
69
+ core_1.ChangeDetectorRef,
70
+ navigation_service_1.NavigationService])
50
71
  ], GanttSummaryTaskComponent);
51
72
  return GanttSummaryTaskComponent;
52
73
  }(gantt_task_base_1.GanttTaskBase));
@@ -14,24 +14,42 @@ var slotUnitDuration = {
14
14
  week: kendo_date_math_1.MS_PER_DAY,
15
15
  month: kendo_date_math_1.MS_PER_DAY * 7
16
16
  };
17
+ var FOCUSED_CLASS = 'k-focus';
17
18
  /**
18
19
  * @hidden
19
20
  */
20
21
  var GanttTaskBase = /** @class */ (function () {
21
22
  function GanttTaskBase(mapper, // left public to be available for usage in the templates
22
- timelineViewService, dependencyDomService, optionChangesService, cdr) {
23
+ timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
23
24
  var _this = this;
24
25
  this.mapper = mapper;
25
26
  this.timelineViewService = timelineViewService;
26
27
  this.dependencyDomService = dependencyDomService;
27
28
  this.optionChangesService = optionChangesService;
28
29
  this.cdr = cdr;
30
+ this.navigationService = navigationService;
29
31
  this.wrapperClass = true;
30
- this.viewChangesSubscription = new rxjs_1.Subscription();
31
- this.viewChangesSubscription.add(this.optionChangesService.viewChanges.subscribe(function () {
32
- _this.cdr.markForCheck();
33
- }));
32
+ this.subscriptions = new rxjs_1.Subscription();
33
+ this.subscriptions.add(this.optionChangesService.viewChanges
34
+ .subscribe(function () { return _this.cdr.markForCheck(); }));
35
+ this.subscriptions.add(this.navigationService.taskStatusChanges
36
+ .subscribe(this.updateActiveState.bind(this)));
34
37
  }
38
+ Object.defineProperty(GanttTaskBase.prototype, "taskIndexAttribute", {
39
+ get: function () {
40
+ return this.index;
41
+ },
42
+ enumerable: true,
43
+ configurable: true
44
+ });
45
+ Object.defineProperty(GanttTaskBase.prototype, "ariaSelected", {
46
+ get: function () {
47
+ // assinging null will not render the attribute at all (desired in selectable="false" mode)
48
+ return this.selectable ? String(this.isSelected(this.dataItem)) : null;
49
+ },
50
+ enumerable: true,
51
+ configurable: true
52
+ });
35
53
  Object.defineProperty(GanttTaskBase.prototype, "slotUnitDuration", {
36
54
  get: function () {
37
55
  return slotUnitDuration[this.activeView];
@@ -53,23 +71,6 @@ var GanttTaskBase = /** @class */ (function () {
53
71
  enumerable: true,
54
72
  configurable: true
55
73
  });
56
- GanttTaskBase.prototype.ngOnChanges = function (changes) {
57
- if (utils_1.isPresent(changes.dataItem)) {
58
- if (utils_1.isPresent(changes.dataItem.previousValue)) {
59
- this.dependencyDomService.unregisterTask(changes.dataItem.previousValue);
60
- }
61
- this.dependencyDomService.registerTask(this.dataItem, this.taskElement.nativeElement);
62
- }
63
- else if (utils_1.isPresent(changes.activeView)) {
64
- this.dependencyDomService.notifyChanges();
65
- }
66
- };
67
- GanttTaskBase.prototype.ngOnDestroy = function () {
68
- if (utils_1.isPresent(this.dataItem)) {
69
- this.dependencyDomService.unregisterTask(this.dataItem);
70
- }
71
- this.viewChangesSubscription.unsubscribe();
72
- };
73
74
  Object.defineProperty(GanttTaskBase.prototype, "taskWidth", {
74
75
  get: function () {
75
76
  var itemDuration = this.mapper.extractFromTask(this.dataItem, 'end') - this.mapper.extractFromTask(this.dataItem, 'start');
@@ -81,6 +82,12 @@ var GanttTaskBase = /** @class */ (function () {
81
82
  configurable: true
82
83
  });
83
84
  Object.defineProperty(GanttTaskBase.prototype, "taskOffset", {
85
+ /**
86
+ * The `left` style prop has to be applied to the host element (.k-task-wrap), as the drag clue elements are displayed on .k-task-wrap hover.
87
+ * Applying the `left` offset to the inner .k-task element leaves the .k-task-wrap element rendered with an offset of 0 somewhere on the left
88
+ * and hovering just the .k-task element doesn't expose the drag clues.
89
+ * Additionally, positioning the entire container takes care of positioning the hints as well.
90
+ */
84
91
  get: function () {
85
92
  var timeAfterViewStart = this.mapper.extractFromTask(this.dataItem, 'start') - this.viewService.viewStart;
86
93
  var offsetInSlotUnits = timeAfterViewStart / this.slotUnitDuration;
@@ -99,10 +106,48 @@ var GanttTaskBase = /** @class */ (function () {
99
106
  enumerable: true,
100
107
  configurable: true
101
108
  });
109
+ GanttTaskBase.prototype.ngOnChanges = function (changes) {
110
+ if (utils_1.isPresent(changes.dataItem)) {
111
+ if (utils_1.isPresent(changes.dataItem.previousValue)) {
112
+ this.dependencyDomService.unregisterTask(changes.dataItem.previousValue);
113
+ }
114
+ this.dependencyDomService.registerTask(this.dataItem, this.taskElement.nativeElement);
115
+ }
116
+ else if (utils_1.isPresent(changes.activeView)) {
117
+ this.dependencyDomService.notifyChanges();
118
+ }
119
+ if (this.navigationService.enabled && utils_1.isPresent(changes.index)) {
120
+ this.updateActiveState(this.navigationService.activeTask);
121
+ }
122
+ };
123
+ GanttTaskBase.prototype.ngOnDestroy = function () {
124
+ if (utils_1.isPresent(this.dataItem)) {
125
+ this.dependencyDomService.unregisterTask(this.dataItem);
126
+ }
127
+ this.subscriptions.unsubscribe();
128
+ };
129
+ GanttTaskBase.prototype.updateActiveState = function (_a) {
130
+ var activeIndex = _a.activeIndex, isFocused = _a.isFocused;
131
+ var isActive = activeIndex === this.index;
132
+ var tabindex = isActive ? '0' : '-1';
133
+ this.taskElement.nativeElement.setAttribute('tabindex', tabindex);
134
+ if (isActive && isFocused) {
135
+ this.taskElement.nativeElement.focus();
136
+ this.taskElement.nativeElement.classList.add(FOCUSED_CLASS);
137
+ }
138
+ else {
139
+ this.taskElement.nativeElement.classList.remove(FOCUSED_CLASS);
140
+ }
141
+ };
102
142
  tslib_1.__decorate([
103
143
  core_1.HostBinding('class.k-task-wrap'),
104
144
  tslib_1.__metadata("design:type", Boolean)
105
145
  ], GanttTaskBase.prototype, "wrapperClass", void 0);
146
+ tslib_1.__decorate([
147
+ core_1.HostBinding('attr.data-task-index'),
148
+ tslib_1.__metadata("design:type", Number),
149
+ tslib_1.__metadata("design:paramtypes", [])
150
+ ], GanttTaskBase.prototype, "taskIndexAttribute", null);
106
151
  tslib_1.__decorate([
107
152
  core_1.ViewChild('task', { static: true }),
108
153
  tslib_1.__metadata("design:type", core_1.ElementRef)
@@ -115,6 +160,18 @@ var GanttTaskBase = /** @class */ (function () {
115
160
  core_1.Input(),
116
161
  tslib_1.__metadata("design:type", Number)
117
162
  ], GanttTaskBase.prototype, "index", void 0);
163
+ tslib_1.__decorate([
164
+ core_1.Input(),
165
+ tslib_1.__metadata("design:type", Number)
166
+ ], GanttTaskBase.prototype, "level", void 0);
167
+ tslib_1.__decorate([
168
+ core_1.Input(),
169
+ tslib_1.__metadata("design:type", Boolean)
170
+ ], GanttTaskBase.prototype, "renderDependencyDragClues", void 0);
171
+ tslib_1.__decorate([
172
+ core_1.Input(),
173
+ tslib_1.__metadata("design:type", Boolean)
174
+ ], GanttTaskBase.prototype, "selectable", void 0);
118
175
  tslib_1.__decorate([
119
176
  core_1.Input(),
120
177
  tslib_1.__metadata("design:type", Function)
@@ -127,6 +184,11 @@ var GanttTaskBase = /** @class */ (function () {
127
184
  core_1.Input(),
128
185
  tslib_1.__metadata("design:type", Function)
129
186
  ], GanttTaskBase.prototype, "taskClass", void 0);
187
+ tslib_1.__decorate([
188
+ core_1.HostBinding('style.left.px'),
189
+ tslib_1.__metadata("design:type", Number),
190
+ tslib_1.__metadata("design:paramtypes", [])
191
+ ], GanttTaskBase.prototype, "taskOffset", null);
130
192
  return GanttTaskBase;
131
193
  }());
132
194
  exports.GanttTaskBase = GanttTaskBase;
@@ -7,25 +7,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  var tslib_1 = require("tslib");
8
8
  var core_1 = require("@angular/core");
9
9
  var mapping_service_1 = require("../common/mapping.service");
10
+ var navigation_service_1 = require("../navigation/navigation.service");
11
+ var edit_service_1 = require("../editing/edit.service");
12
+ var touch_enabled_1 = require("../common/touch-enabled");
10
13
  var dependency_dom_service_1 = require("../dependencies/dependency-dom.service");
11
14
  var option_changes_service_1 = require("../common/option-changes.service");
12
15
  var timeline_view_service_1 = require("./../timeline/timeline-view.service");
13
16
  var gantt_task_base_1 = require("./gantt-task-base");
14
- var edit_service_1 = require("../editing/edit.service");
15
17
  /**
16
18
  * @hidden
17
19
  */
18
20
  var GanttTaskComponent = /** @class */ (function (_super) {
19
21
  tslib_1.__extends(GanttTaskComponent, _super);
20
- function GanttTaskComponent(mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, editService) {
21
- var _this = _super.call(this, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr) || this;
22
+ function GanttTaskComponent(editService, touchEnabled, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) {
23
+ var _this = _super.call(this, mapper, timelineViewService, dependencyDomService, optionChangesService, cdr, navigationService) || this;
22
24
  _this.editService = editService;
25
+ _this.touchEnabled = touchEnabled;
23
26
  return _this;
24
27
  }
25
28
  GanttTaskComponent_1 = GanttTaskComponent;
26
29
  GanttTaskComponent.prototype.onTaskDelete = function () {
27
30
  this.editService.dataItem = this.dataItem;
28
- this.editService.showConfirmationDialog.next();
31
+ this.editService.taskDelete.next(this.dataItem);
29
32
  };
30
33
  var GanttTaskComponent_1;
31
34
  tslib_1.__decorate([
@@ -45,14 +48,16 @@ var GanttTaskComponent = /** @class */ (function (_super) {
45
48
  useExisting: core_1.forwardRef(function () { return GanttTaskComponent_1; })
46
49
  }
47
50
  ],
48
- 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 "
51
+ template: "\n <div\n #task\n class=\"k-task k-task-single\"\n role=\"treeitem\"\n [ngClass]=\"taskClass(dataItem)\"\n [style.width.px]=\"taskWidth\"\n [attr.title]=\"mapper.extractFromTask(dataItem, 'title')\"\n [class.k-state-selected]=\"isSelected(dataItem)\"\n [attr.aria-selected]=\"ariaSelected\"\n [attr.aria-level]=\"level + 1\"\n >\n <ng-container *ngIf=\"!taskTemplate\">\n <div\n class=\"k-task-complete\"\n [style.width.px]=\"completionOverlayWidth\"\n aria-hidden=\"true\"\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\n class=\"k-task-actions\"\n aria-hidden=\"true\"\n >\n <span\n class=\"k-link k-task-delete\"\n [kendoEventsOutsideAngular]=\"{\n click: onTaskDelete\n }\"\n [scope]=\"this\"\n >\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 <ng-container *ngIf=\"renderDependencyDragClues\">\n <div\n class=\"k-task-dot k-task-start k-touch-action-none\"\n [class.k-display-block]=\"touchEnabled\"\n >\n </div>\n <div\n class=\"k-task-dot k-task-end k-touch-action-none\"\n [class.k-display-block]=\"touchEnabled\"\n >\n </div>\n </ng-container>\n ",
52
+ styles: ["\n .k-task.k-focus {\n box-shadow: 0 0 4px 3px grey;\n outline: none;\n }\n .k-task.k-focus.k-state-selected {\n box-shadow: 0 0 4px 3px #ffaea8;\n }\n "]
49
53
  }),
50
- tslib_1.__metadata("design:paramtypes", [mapping_service_1.MappingService,
54
+ tslib_1.__param(1, core_1.Inject(touch_enabled_1.TOUCH_ENABLED)),
55
+ tslib_1.__metadata("design:paramtypes", [edit_service_1.EditService, Boolean, mapping_service_1.MappingService,
51
56
  timeline_view_service_1.TimelineViewService,
52
57
  dependency_dom_service_1.DependencyDomService,
53
58
  option_changes_service_1.OptionChangesService,
54
59
  core_1.ChangeDetectorRef,
55
- edit_service_1.EditService])
60
+ navigation_service_1.NavigationService])
56
61
  ], GanttTaskComponent);
57
62
  return GanttTaskComponent;
58
63
  }(gantt_task_base_1.GanttTaskBase));
@@ -8,8 +8,8 @@ var tslib_1 = require("tslib");
8
8
  var core_1 = require("@angular/core");
9
9
  var kendo_date_math_1 = require("@progress/kendo-date-math");
10
10
  var dependency_dom_service_1 = require("../dependencies/dependency-dom.service");
11
- var utils_1 = require("../utils");
12
11
  var mapping_service_1 = require("../common/mapping.service");
12
+ var utils_1 = require("../utils");
13
13
  /**
14
14
  * @hidden
15
15
  */
@@ -29,14 +29,18 @@ var GanttTasksTableBodyComponent = /** @class */ (function () {
29
29
  enumerable: true,
30
30
  configurable: true
31
31
  });
32
- GanttTasksTableBodyComponent.prototype.isMileStone = function (task) {
33
- return !this.hasChildren(task) && kendo_date_math_1.isEqual(this.mapper.extractFromTask(task, 'start'), this.mapper.extractFromTask(task, 'end'));
32
+ GanttTasksTableBodyComponent.prototype.isMileStone = function (item) {
33
+ return !item.hasChildren && kendo_date_math_1.isEqual(this.mapper.extractFromTask(item.data, 'start'), this.mapper.extractFromTask(item.data, 'end'));
34
34
  };
35
35
  tslib_1.__decorate([
36
36
  core_1.ViewChild('timelineRow', { static: false }),
37
37
  tslib_1.__metadata("design:type", core_1.ElementRef),
38
38
  tslib_1.__metadata("design:paramtypes", [core_1.ElementRef])
39
39
  ], GanttTasksTableBodyComponent.prototype, "timelineRow", null);
40
+ tslib_1.__decorate([
41
+ core_1.Input(),
42
+ tslib_1.__metadata("design:type", Boolean)
43
+ ], GanttTasksTableBodyComponent.prototype, "selectable", void 0);
40
44
  tslib_1.__decorate([
41
45
  core_1.Input(),
42
46
  tslib_1.__metadata("design:type", Array)
@@ -64,15 +68,19 @@ var GanttTasksTableBodyComponent = /** @class */ (function () {
64
68
  tslib_1.__decorate([
65
69
  core_1.Input(),
66
70
  tslib_1.__metadata("design:type", Function)
67
- ], GanttTasksTableBodyComponent.prototype, "hasChildren", void 0);
71
+ ], GanttTasksTableBodyComponent.prototype, "isExpanded", void 0);
68
72
  tslib_1.__decorate([
69
73
  core_1.Input(),
70
74
  tslib_1.__metadata("design:type", Function)
71
75
  ], GanttTasksTableBodyComponent.prototype, "isTaskSelected", void 0);
76
+ tslib_1.__decorate([
77
+ core_1.Input(),
78
+ tslib_1.__metadata("design:type", Boolean)
79
+ ], GanttTasksTableBodyComponent.prototype, "renderDependencyDragClues", void 0);
72
80
  GanttTasksTableBodyComponent = tslib_1.__decorate([
73
81
  core_1.Component({
74
82
  selector: '[kendoGanttTasksTableBody]',
75
- 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 "
83
+ 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.data\"\n [level]=\"item.level\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [selectable]=\"selectable\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n [renderDependencyDragClues]=\"renderDependencyDragClues\"\n >\n </kendo-gantt-milestone-task>\n <ng-template #task>\n <kendo-gantt-summary-task\n *ngIf=\"item.hasChildren\"\n [dataItem]=\"item.data\"\n [level]=\"item.level\"\n [template]=\"summaryTaskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [selectable]=\"selectable\"\n [isSelected]=\"isTaskSelected\"\n [isExpanded]=\"isExpanded\"\n [index]=\"index\"\n [renderDependencyDragClues]=\"renderDependencyDragClues\"\n >\n </kendo-gantt-summary-task>\n <kendo-gantt-task\n *ngIf=\"!item.hasChildren\"\n [dataItem]=\"item.data\"\n [level]=\"item.level\"\n [taskContentTemplate]=\"taskContentTemplate\"\n [taskTemplate]=\"taskTemplate\"\n [activeView]=\"activeView\"\n [taskClass]=\"taskClass\"\n [selectable]=\"selectable\"\n [isSelected]=\"isTaskSelected\"\n [index]=\"index\"\n [renderDependencyDragClues]=\"renderDependencyDragClues\"\n >\n </kendo-gantt-task>\n </ng-template>\n </td>\n </tr>\n "
76
84
  }),
77
85
  tslib_1.__metadata("design:paramtypes", [dependency_dom_service_1.DependencyDomService,
78
86
  mapping_service_1.MappingService])
@@ -0,0 +1,22 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ /**
8
+ * @hidden
9
+ */
10
+ var ScrollDirection;
11
+ (function (ScrollDirection) {
12
+ ScrollDirection[ScrollDirection["Backwards"] = -1] = "Backwards";
13
+ ScrollDirection[ScrollDirection["Forward"] = 1] = "Forward";
14
+ })(ScrollDirection = exports.ScrollDirection || (exports.ScrollDirection = {}));
15
+ /**
16
+ * @hidden
17
+ */
18
+ var ScrollAxis;
19
+ (function (ScrollAxis) {
20
+ ScrollAxis["Vertical"] = "scrollTop";
21
+ ScrollAxis["Horizontal"] = "scrollLeft";
22
+ })(ScrollAxis = exports.ScrollAxis || (exports.ScrollAxis = {}));
@@ -0,0 +1,91 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var tslib_1 = require("tslib");
8
+ var core_1 = require("@angular/core");
9
+ var rxjs_1 = require("rxjs");
10
+ var utils_1 = require("../utils");
11
+ var drag_scroll_settings_1 = require("./drag-scroll-settings");
12
+ var timeline_scroll_service_1 = require("./timeline-scroll.service");
13
+ var utils_2 = require("./utils");
14
+ /**
15
+ * @hidden
16
+ */
17
+ var TimelineScrollableDirective = /** @class */ (function () {
18
+ function TimelineScrollableDirective(timelineScrollableContainer, scrollService, zone) {
19
+ this.timelineScrollableContainer = timelineScrollableContainer;
20
+ this.scrollService = scrollService;
21
+ this.zone = zone;
22
+ this.subscriptions = new rxjs_1.Subscription();
23
+ this.subscriptions.add(this.scrollService.horizontalScroll
24
+ .subscribe(this.scrollHorizontallyTo.bind(this)));
25
+ this.subscriptions.add(this.scrollService.verticalScroll
26
+ .subscribe(this.scrollVerticallyTo.bind(this)));
27
+ this.subscriptions.add(this.scrollService.scrollCancel
28
+ .subscribe(this.cancelScroll.bind(this)));
29
+ }
30
+ TimelineScrollableDirective.prototype.ngOnDestroy = function () {
31
+ this.subscriptions.unsubscribe();
32
+ };
33
+ TimelineScrollableDirective.prototype.scrollHorizontallyTo = function (left) {
34
+ var _this = this;
35
+ this.zone.runOutsideAngular(function () {
36
+ var container = _this.timelineScrollableContainer.nativeElement;
37
+ var visibleBoundaries = utils_2.getViewportBoundaries(container);
38
+ if (left < visibleBoundaries.left + _this.scrollSettings.threshold) {
39
+ _this.horizontalScrollInterval = setInterval(function () {
40
+ return utils_2.scrollElement(container, _this.scrollSettings.step, drag_scroll_settings_1.ScrollDirection.Backwards, drag_scroll_settings_1.ScrollAxis.Horizontal);
41
+ }, _this.scrollSettings.interval);
42
+ }
43
+ else if (left > visibleBoundaries.right - _this.scrollSettings.threshold) {
44
+ _this.horizontalScrollInterval = setInterval(function () {
45
+ return utils_2.scrollElement(container, _this.scrollSettings.step, drag_scroll_settings_1.ScrollDirection.Forward, drag_scroll_settings_1.ScrollAxis.Horizontal);
46
+ }, _this.scrollSettings.interval);
47
+ }
48
+ });
49
+ };
50
+ TimelineScrollableDirective.prototype.scrollVerticallyTo = function (top) {
51
+ var _this = this;
52
+ this.zone.runOutsideAngular(function () {
53
+ var container = _this.timelineScrollableContainer.nativeElement;
54
+ var visibleBoundaries = utils_2.getViewportBoundaries(container);
55
+ if (top < visibleBoundaries.top + _this.scrollSettings.threshold) {
56
+ _this.verticalScrollInterval = setInterval(function () {
57
+ return utils_2.scrollElement(container, _this.scrollSettings.step, drag_scroll_settings_1.ScrollDirection.Backwards, drag_scroll_settings_1.ScrollAxis.Vertical);
58
+ }, _this.scrollSettings.interval);
59
+ }
60
+ else if (top > visibleBoundaries.bottom - _this.scrollSettings.threshold) {
61
+ _this.verticalScrollInterval = setInterval(function () {
62
+ return utils_2.scrollElement(container, _this.scrollSettings.step, drag_scroll_settings_1.ScrollDirection.Forward, drag_scroll_settings_1.ScrollAxis.Vertical);
63
+ }, _this.scrollSettings.interval);
64
+ }
65
+ });
66
+ };
67
+ TimelineScrollableDirective.prototype.cancelScroll = function () {
68
+ if (utils_1.isPresent(this.verticalScrollInterval)) {
69
+ clearInterval(this.verticalScrollInterval);
70
+ this.verticalScrollInterval = null;
71
+ }
72
+ if (utils_1.isPresent(this.horizontalScrollInterval)) {
73
+ clearInterval(this.horizontalScrollInterval);
74
+ this.horizontalScrollInterval = null;
75
+ }
76
+ };
77
+ tslib_1.__decorate([
78
+ core_1.Input(),
79
+ tslib_1.__metadata("design:type", Object)
80
+ ], TimelineScrollableDirective.prototype, "scrollSettings", void 0);
81
+ TimelineScrollableDirective = tslib_1.__decorate([
82
+ core_1.Directive({
83
+ selector: '[kendoGanttTimelineScrollable]'
84
+ }),
85
+ tslib_1.__metadata("design:paramtypes", [core_1.ElementRef,
86
+ timeline_scroll_service_1.TimelineScrollService,
87
+ core_1.NgZone])
88
+ ], TimelineScrollableDirective);
89
+ return TimelineScrollableDirective;
90
+ }());
91
+ exports.TimelineScrollableDirective = TimelineScrollableDirective;
@@ -0,0 +1,41 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var tslib_1 = require("tslib");
8
+ var core_1 = require("@angular/core");
9
+ var rxjs_1 = require("rxjs");
10
+ /**
11
+ * @hidden
12
+ *
13
+ * Notifies the timeline-scroll.directive to scroll into view to requested coordinates.
14
+ * The scrolling is performed based on client (viewport) coordinates.
15
+ */
16
+ var TimelineScrollService = /** @class */ (function () {
17
+ function TimelineScrollService() {
18
+ this.horizontalScroll = new rxjs_1.Subject();
19
+ this.verticalScroll = new rxjs_1.Subject();
20
+ this.scrollCancel = new rxjs_1.Subject();
21
+ }
22
+ TimelineScrollService.prototype.ngOnDestroy = function () {
23
+ this.horizontalScroll.complete();
24
+ this.verticalScroll.complete();
25
+ this.scrollCancel.complete();
26
+ };
27
+ TimelineScrollService.prototype.requestHorizontalScroll = function (clientTop) {
28
+ this.horizontalScroll.next(clientTop);
29
+ };
30
+ TimelineScrollService.prototype.requestVerticalScroll = function (clientLeft) {
31
+ this.verticalScroll.next(clientLeft);
32
+ };
33
+ TimelineScrollService.prototype.requestScrollCancel = function () {
34
+ this.scrollCancel.next();
35
+ };
36
+ TimelineScrollService = tslib_1.__decorate([
37
+ core_1.Injectable()
38
+ ], TimelineScrollService);
39
+ return TimelineScrollService;
40
+ }());
41
+ exports.TimelineScrollService = TimelineScrollService;
@@ -0,0 +1,83 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var kendo_angular_common_1 = require("@progress/kendo-angular-common");
8
+ var drag_scroll_settings_1 = require("./drag-scroll-settings");
9
+ var utils_1 = require("../utils");
10
+ /**
11
+ * @hidden
12
+ *
13
+ * Checks if the beginning of the scrollable element is reached (top/left).
14
+ * Floors the top value.
15
+ */
16
+ var isUpperLimitReached = function (element, axis) { return Math.floor(element[axis]) <= 0; };
17
+ var ɵ0 = isUpperLimitReached;
18
+ exports.ɵ0 = ɵ0;
19
+ /**
20
+ * @hidden
21
+ *
22
+ * Checks if the end of the scrollable element is reached (bottom/right).
23
+ * Ceils the top value.
24
+ */
25
+ var isBottomLimitReached = function (element, axis) {
26
+ var elementSize = axis === drag_scroll_settings_1.ScrollAxis.Horizontal ?
27
+ element.scrollWidth - element.clientWidth :
28
+ element.scrollHeight - element.clientHeight;
29
+ return Math.ceil(element[axis]) >= elementSize;
30
+ };
31
+ var ɵ1 = isBottomLimitReached;
32
+ exports.ɵ1 = ɵ1;
33
+ /**
34
+ * @hidden
35
+ *
36
+ * Scrolls the element in the given direction by the provided step in the provided scroll axis.
37
+ *
38
+ * If the targeted scroll incrementation doesn't yield any result due to device pixel ratio issues (https://github.com/dimitar-pechev/RenderingIndependentScrollOffsets#readme),
39
+ * increments the step with 1px and again attempts to change the scrollTop of the element, until the content is actually scrolled.
40
+ *
41
+ * Cuts the operation short after 20 unsuccessful attempts to prevent infinite loops in possible corner-case scenarios.
42
+ */
43
+ exports.scrollElement = function (element, step, direction, scrollAxis) {
44
+ if (!(utils_1.isPresent(element) && kendo_angular_common_1.isDocumentAvailable())) {
45
+ return;
46
+ }
47
+ var initialScrollPosition = element[scrollAxis];
48
+ var currentStep = step;
49
+ var iterations = 0;
50
+ while (initialScrollPosition === element[scrollAxis] &&
51
+ !(direction === drag_scroll_settings_1.ScrollDirection.Backwards && isUpperLimitReached(element, scrollAxis)) &&
52
+ !(direction === drag_scroll_settings_1.ScrollDirection.Forward && isBottomLimitReached(element, scrollAxis)) &&
53
+ iterations < 20 // cut the operation short in 20 attempts - in case of a wild corner case
54
+ ) {
55
+ element[scrollAxis] += (currentStep * direction);
56
+ // try with a larger step if the current one doesn't update the scroll position successfully
57
+ currentStep += 1;
58
+ iterations += 1;
59
+ }
60
+ };
61
+ /**
62
+ * @hidden
63
+ *
64
+ * As client coordinates are not restricted to the range 0px - {viewportSize}px, but can have negative starting values or ending values greater than the viewport size,
65
+ * this function extracts the visible boundaries of the provided element - fall-backing to 0 when the top/left are below 0,
66
+ * and fall-backing to the actual visible size of the container for bottom/right.
67
+ */
68
+ exports.getViewportBoundaries = function (element) {
69
+ var elementRect = element.getBoundingClientRect();
70
+ // if the beginning of the scrollable container is above/before the current viewport, fall-back to 0
71
+ var topLimit = Math.max(elementRect.top, 0);
72
+ var leftLimit = Math.max(elementRect.left, 0);
73
+ // if the end of the scrollable container is beneath/after the current viewport, fall-back to its client height
74
+ // add the distance from the start of the viewport to the beginning of the container to ensure scrolling bottom begins when the actual end of the container is reached
75
+ var bottomLimit = topLimit + Math.min(elementRect.bottom, element.clientHeight);
76
+ var rightLimit = leftLimit + Math.min(elementRect.right, element.clientWidth);
77
+ return {
78
+ top: topLimit,
79
+ bottom: bottomLimit,
80
+ left: leftLimit,
81
+ right: rightLimit
82
+ };
83
+ };