@progress/kendo-angular-scheduler 4.1.0 → 4.3.0-dev.202207131303

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 (35) hide show
  1. package/bundles/kendo-angular-scheduler.umd.js +1 -1
  2. package/common/dom-queries.d.ts +1 -1
  3. package/esm2015/editing/edit-dialog.component.js +1 -1
  4. package/esm2015/localization/messages.js +3 -1
  5. package/esm2015/main.js +10 -0
  6. package/esm2015/navigation/focus.service.js +14 -2
  7. package/esm2015/package-metadata.js +1 -1
  8. package/esm2015/scheduler.component.js +16 -1
  9. package/esm2015/toolbar/navigation.component.js +2 -0
  10. package/esm2015/toolbar/view-selector.component.js +26 -12
  11. package/esm2015/views/agenda/agenda-header-item.component.js +5 -1
  12. package/esm2015/views/agenda/agenda-header.component.js +14 -14
  13. package/esm2015/views/agenda/agenda-view-internal.component.js +8 -5
  14. package/esm2015/views/agenda/agenda-view-list.component.js +18 -16
  15. package/esm2015/views/agenda/tasks.collection.js +21 -14
  16. package/esm2015/views/common/base-view.js +3 -3
  17. package/esm2015/views/day-time/day-time-view.component.js +6 -3
  18. package/esm2015/views/month/month-view-renderer.component.js +19 -12
  19. package/esm2015/views/multi-day/multi-day-view-renderer.component.js +27 -12
  20. package/esm2015/views/timeline/timeline-multi-day-view.component.js +18 -13
  21. package/fesm2015/kendo-angular-scheduler.js +287 -201
  22. package/localization/messages.d.ts +5 -1
  23. package/main.d.ts +10 -0
  24. package/navigation/focus.service.d.ts +3 -1
  25. package/package.json +6 -6
  26. package/scheduler.component.d.ts +1 -0
  27. package/toolbar/view-selector.component.d.ts +7 -1
  28. package/views/agenda/agenda-header-item.component.d.ts +1 -0
  29. package/views/agenda/tasks.collection.d.ts +3 -1
  30. package/views/common/base-view.d.ts +1 -1
  31. package/views/common/scheduler-task.d.ts +4 -0
  32. package/views/day-time/day-time-view.component.d.ts +3 -1
  33. package/views/month/month-view-renderer.component.d.ts +3 -1
  34. package/views/multi-day/multi-day-view-renderer.component.d.ts +2 -1
  35. package/views/timeline/timeline-multi-day-view.component.d.ts +2 -1
@@ -21,7 +21,7 @@ export declare const firstElementChild: (node: any) => any;
21
21
  /**
22
22
  * @hidden
23
23
  */
24
- export declare const closestInScope: (node: any, predicate: any, scope: any) => any;
24
+ export declare const closestInScope: (node: any, predicate: any, scope: any) => HTMLElement;
25
25
  /**
26
26
  * @hidden
27
27
  */
@@ -366,7 +366,7 @@ EditDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
366
366
  <button kendoButton themeColor="primary" (click)="onSave($event)" [disabled]="!formGroup.valid">{{ textFor('save') }}</button>
367
367
  </kendo-dialog-actions>
368
368
  </kendo-dialog>
369
- `, isInline: true, components: [{ type: i4.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { type: i5.SchedulerDateTimePickerComponent, selector: "kendo-scheduler-datetime-picker", inputs: ["isAllDay"], outputs: ["valueChange"] }, { type: i6.TimeZoneEditorComponent, selector: "kendo-timezone-editor", inputs: ["width"], outputs: ["valueChange"] }, { type: i7.RecurrenceEditorComponent, selector: "kendo-recurrence-editor", inputs: ["start", "timezone", "weekStart", "repeatEveryOptions", "endAfterOptions", "repeatOnOptions", "endOnOptions"], outputs: ["valueChange"], exportAs: ["kendoRecurrenceEditor"] }, { type: i8.MultipleResourceEditorComponent, selector: "kendo-multiple-resource-editor" }, { type: i9.SingleResourceEditorComponent, selector: "kendo-single-resource-editor" }, { type: i4.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i11.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i12.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { type: i11.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i12.TextAreaDirective, selector: "textarea[kendoTextArea]", inputs: ["autoSize", "value"], outputs: ["valueChange"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
369
+ `, isInline: true, components: [{ type: i4.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { type: i5.SchedulerDateTimePickerComponent, selector: "kendo-scheduler-datetime-picker", inputs: ["isAllDay"], outputs: ["valueChange"] }, { type: i6.TimeZoneEditorComponent, selector: "kendo-timezone-editor", inputs: ["width"], outputs: ["valueChange"] }, { type: i7.RecurrenceEditorComponent, selector: "kendo-recurrence-editor", inputs: ["start", "timezone", "weekStart", "repeatEveryOptions", "endAfterOptions", "repeatOnOptions", "endOnOptions"], outputs: ["valueChange"], exportAs: ["kendoRecurrenceEditor"] }, { type: i8.MultipleResourceEditorComponent, selector: "kendo-multiple-resource-editor" }, { type: i9.SingleResourceEditorComponent, selector: "kendo-single-resource-editor" }, { type: i4.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i11.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i11.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i12.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { type: i11.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i12.TextAreaDirective, selector: "textarea[kendoTextArea]", inputs: ["autoSize", "value"], outputs: ["valueChange"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
370
370
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditDialogComponent, decorators: [{
371
371
  type: Component,
372
372
  args: [{
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  export class Messages extends ComponentMessages {
12
12
  }
13
13
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
14
- Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: Messages, inputs: { allEvents: "allEvents", allDay: "allDay", dateHeader: "dateHeader", timeHeader: "timeHeader", eventHeader: "eventHeader", deleteTitle: "deleteTitle", nextTitle: "nextTitle", previousTitle: "previousTitle", today: "today", calendarToday: "calendarToday", showFullDay: "showFullDay", showWorkDay: "showWorkDay", dayViewTitle: "dayViewTitle", multiDayViewTitle: "multiDayViewTitle", weekViewTitle: "weekViewTitle", workWeekViewTitle: "workWeekViewTitle", monthViewTitle: "monthViewTitle", timelineViewTitle: "timelineViewTitle", timelineWeekViewTitle: "timelineWeekViewTitle", timelineMonthViewTitle: "timelineMonthViewTitle", agendaViewTitle: "agendaViewTitle", cancel: "cancel", save: "save", editorEventTitle: "editorEventTitle", editorEventStart: "editorEventStart", editorEventStartTimeZone: "editorEventStartTimeZone", editorEventEnd: "editorEventEnd", editorEventEndTimeZone: "editorEventEndTimeZone", editorEventAllDay: "editorEventAllDay", editorEventDescription: "editorEventDescription", editorEventSeparateTimeZones: "editorEventSeparateTimeZones", editorEventTimeZone: "editorEventTimeZone", recurrenceEditorRepeat: "recurrenceEditorRepeat", recurrenceEditorDailyInterval: "recurrenceEditorDailyInterval", recurrenceEditorDailyRepeatEvery: "recurrenceEditorDailyRepeatEvery", recurrenceEditorWeeklyInterval: "recurrenceEditorWeeklyInterval", recurrenceEditorWeeklyRepeatEvery: "recurrenceEditorWeeklyRepeatEvery", recurrenceEditorWeeklyRepeatOn: "recurrenceEditorWeeklyRepeatOn", recurrenceEditorMonthlyDay: "recurrenceEditorMonthlyDay", recurrenceEditorMonthlyInterval: "recurrenceEditorMonthlyInterval", recurrenceEditorMonthlyRepeatEvery: "recurrenceEditorMonthlyRepeatEvery", recurrenceEditorMonthlyRepeatOn: "recurrenceEditorMonthlyRepeatOn", recurrenceEditorYearlyOf: "recurrenceEditorYearlyOf", recurrenceEditorYearlyRepeatEvery: "recurrenceEditorYearlyRepeatEvery", recurrenceEditorYearlyRepeatOn: "recurrenceEditorYearlyRepeatOn", recurrenceEditorYearlyInterval: "recurrenceEditorYearlyInterval", recurrenceEditorFrequenciesDaily: "recurrenceEditorFrequenciesDaily", recurrenceEditorFrequenciesMonthly: "recurrenceEditorFrequenciesMonthly", recurrenceEditorFrequenciesNever: "recurrenceEditorFrequenciesNever", recurrenceEditorFrequenciesWeekly: "recurrenceEditorFrequenciesWeekly", recurrenceEditorFrequenciesYearly: "recurrenceEditorFrequenciesYearly", recurrenceEditorOffsetPositionsFirst: "recurrenceEditorOffsetPositionsFirst", recurrenceEditorOffsetPositionsSecond: "recurrenceEditorOffsetPositionsSecond", recurrenceEditorOffsetPositionsThird: "recurrenceEditorOffsetPositionsThird", recurrenceEditorOffsetPositionsFourth: "recurrenceEditorOffsetPositionsFourth", recurrenceEditorOffsetPositionsLast: "recurrenceEditorOffsetPositionsLast", recurrenceEditorWeekdaysDay: "recurrenceEditorWeekdaysDay", recurrenceEditorWeekdaysWeekday: "recurrenceEditorWeekdaysWeekday", recurrenceEditorWeekdaysWeekendday: "recurrenceEditorWeekdaysWeekendday", recurrenceEditorEndAfter: "recurrenceEditorEndAfter", recurrenceEditorEndOccurrence: "recurrenceEditorEndOccurrence", recurrenceEditorEndLabel: "recurrenceEditorEndLabel", recurrenceEditorEndNever: "recurrenceEditorEndNever", recurrenceEditorEndOn: "recurrenceEditorEndOn", editorTitle: "editorTitle", destroy: "destroy", deleteConfirmation: "deleteConfirmation", editRecurringConfirmation: "editRecurringConfirmation", editOccurrence: "editOccurrence", editSeries: "editSeries", deleteRecurringConfirmation: "deleteRecurringConfirmation", deleteOccurrence: "deleteOccurrence", deleteSeries: "deleteSeries", deleteDialogTitle: "deleteDialogTitle", deleteRecurringDialogTitle: "deleteRecurringDialogTitle", editRecurringDialogTitle: "editRecurringDialogTitle" }, usesInheritance: true, ngImport: i0 });
14
+ Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: Messages, inputs: { allEvents: "allEvents", allDay: "allDay", dateHeader: "dateHeader", timeHeader: "timeHeader", eventHeader: "eventHeader", deleteTitle: "deleteTitle", nextTitle: "nextTitle", previousTitle: "previousTitle", today: "today", calendarToday: "calendarToday", showFullDay: "showFullDay", showWorkDay: "showWorkDay", dayViewTitle: "dayViewTitle", multiDayViewTitle: "multiDayViewTitle", weekViewTitle: "weekViewTitle", workWeekViewTitle: "workWeekViewTitle", monthViewTitle: "monthViewTitle", timelineViewTitle: "timelineViewTitle", timelineWeekViewTitle: "timelineWeekViewTitle", timelineMonthViewTitle: "timelineMonthViewTitle", agendaViewTitle: "agendaViewTitle", cancel: "cancel", save: "save", editorEventTitle: "editorEventTitle", editorEventStart: "editorEventStart", editorEventStartTimeZone: "editorEventStartTimeZone", editorEventEnd: "editorEventEnd", editorEventEndTimeZone: "editorEventEndTimeZone", editorEventAllDay: "editorEventAllDay", editorEventDescription: "editorEventDescription", editorEventSeparateTimeZones: "editorEventSeparateTimeZones", editorEventTimeZone: "editorEventTimeZone", recurrenceEditorRepeat: "recurrenceEditorRepeat", recurrenceEditorDailyInterval: "recurrenceEditorDailyInterval", recurrenceEditorDailyRepeatEvery: "recurrenceEditorDailyRepeatEvery", recurrenceEditorWeeklyInterval: "recurrenceEditorWeeklyInterval", recurrenceEditorWeeklyRepeatEvery: "recurrenceEditorWeeklyRepeatEvery", recurrenceEditorWeeklyRepeatOn: "recurrenceEditorWeeklyRepeatOn", recurrenceEditorMonthlyDay: "recurrenceEditorMonthlyDay", recurrenceEditorMonthlyInterval: "recurrenceEditorMonthlyInterval", recurrenceEditorMonthlyRepeatEvery: "recurrenceEditorMonthlyRepeatEvery", recurrenceEditorMonthlyRepeatOn: "recurrenceEditorMonthlyRepeatOn", recurrenceEditorYearlyOf: "recurrenceEditorYearlyOf", recurrenceEditorYearlyRepeatEvery: "recurrenceEditorYearlyRepeatEvery", recurrenceEditorYearlyRepeatOn: "recurrenceEditorYearlyRepeatOn", recurrenceEditorYearlyInterval: "recurrenceEditorYearlyInterval", recurrenceEditorFrequenciesDaily: "recurrenceEditorFrequenciesDaily", recurrenceEditorFrequenciesMonthly: "recurrenceEditorFrequenciesMonthly", recurrenceEditorFrequenciesNever: "recurrenceEditorFrequenciesNever", recurrenceEditorFrequenciesWeekly: "recurrenceEditorFrequenciesWeekly", recurrenceEditorFrequenciesYearly: "recurrenceEditorFrequenciesYearly", recurrenceEditorOffsetPositionsFirst: "recurrenceEditorOffsetPositionsFirst", recurrenceEditorOffsetPositionsSecond: "recurrenceEditorOffsetPositionsSecond", recurrenceEditorOffsetPositionsThird: "recurrenceEditorOffsetPositionsThird", recurrenceEditorOffsetPositionsFourth: "recurrenceEditorOffsetPositionsFourth", recurrenceEditorOffsetPositionsLast: "recurrenceEditorOffsetPositionsLast", recurrenceEditorWeekdaysDay: "recurrenceEditorWeekdaysDay", recurrenceEditorWeekdaysWeekday: "recurrenceEditorWeekdaysWeekday", recurrenceEditorWeekdaysWeekendday: "recurrenceEditorWeekdaysWeekendday", recurrenceEditorEndAfter: "recurrenceEditorEndAfter", recurrenceEditorEndOccurrence: "recurrenceEditorEndOccurrence", recurrenceEditorEndLabel: "recurrenceEditorEndLabel", recurrenceEditorEndNever: "recurrenceEditorEndNever", recurrenceEditorEndOn: "recurrenceEditorEndOn", editorTitle: "editorTitle", destroy: "destroy", deleteConfirmation: "deleteConfirmation", editRecurringConfirmation: "editRecurringConfirmation", editOccurrence: "editOccurrence", editSeries: "editSeries", deleteRecurringConfirmation: "deleteRecurringConfirmation", deleteOccurrence: "deleteOccurrence", deleteSeries: "deleteSeries", deleteDialogTitle: "deleteDialogTitle", deleteRecurringDialogTitle: "deleteRecurringDialogTitle", editRecurringDialogTitle: "editRecurringDialogTitle", selectView: "selectView" }, usesInheritance: true, ngImport: i0 });
15
15
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Messages, decorators: [{
16
16
  type: Directive
17
17
  }], propDecorators: { allEvents: [{
@@ -166,4 +166,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
166
166
  type: Input
167
167
  }], editRecurringDialogTitle: [{
168
168
  type: Input
169
+ }], selectView: [{
170
+ type: Input
169
171
  }] } });
package/esm2015/main.js CHANGED
@@ -65,5 +65,15 @@ export { PDFCommandDirective } from './pdf/pdf-command.directive';
65
65
  export { PDFExportEvent } from './pdf/pdf-export-event';
66
66
  export { FocusableDirective } from './navigation';
67
67
  export { SharedModule } from './shared.module';
68
+ export { ViewsSharedModule } from './views/common/views-shared.module';
69
+ export { HintContainerComponent } from './views/common/hint-container.component';
70
+ export { ViewFooterComponent } from './views/common/view-footer.component';
71
+ export { RepeatPipe } from './views/common/repeat.pipe';
72
+ export { WorkHoursFooterDirective } from './views/common/work-hours-footer.directive';
73
+ export { ResourceIteratorPipe } from './views/common/resource-iterator.pipe';
74
+ export { ResizeHintComponent } from './views/common/resize-hint.component';
75
+ export { TimelineBase } from './views/timeline/timeline-base';
76
+ export { TimelineMultiDayViewComponent } from './views/timeline/timeline-multi-day-view.component';
77
+ export { DayTimeSlotService } from './views/day-time/day-time-slot.service';
68
78
  export * from './types';
69
79
  export * from './events';
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Injectable, Optional } from '@angular/core';
5
+ import { Injectable, Optional, EventEmitter } from '@angular/core';
6
6
  import { Subscription } from 'rxjs';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../views/common/dom-events.service";
@@ -14,6 +14,7 @@ export class FocusService {
14
14
  this.renderer = renderer;
15
15
  this.wrapper = wrapper;
16
16
  this.domEvents = domEvents;
17
+ this.ariaActiveDescendant = new EventEmitter();
17
18
  this.items = new Set();
18
19
  this.elementMap = new WeakMap();
19
20
  this.subs = new Subscription();
@@ -61,8 +62,18 @@ export class FocusService {
61
62
  }
62
63
  return this.activeItem !== currentItem;
63
64
  }
65
+ clearActiveDescendant() {
66
+ this.ariaActiveDescendant.next(null);
67
+ }
68
+ ;
64
69
  activate(next) {
65
- this.items.forEach(item => item.toggle(item === next));
70
+ this.items.forEach(item => {
71
+ item.toggle(item === next);
72
+ if (item === next) {
73
+ const id = item.element.nativeElement.getAttribute('id');
74
+ this.ariaActiveDescendant.next(id);
75
+ }
76
+ });
66
77
  this.activeItem = next;
67
78
  }
68
79
  activateNext(position) {
@@ -115,6 +126,7 @@ export class FocusService {
115
126
  }
116
127
  this.focusedItem.toggleFocus(false);
117
128
  this.focusedItem = null;
129
+ this.ariaActiveDescendant.next(null);
118
130
  }
119
131
  }
120
132
  FocusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FocusService, deps: [{ token: i0.Renderer2, optional: true }, { token: i0.ElementRef, optional: true }, { token: i1.DomEventsService }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-scheduler',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1652259001,
12
+ publishDate: 1657717329,
13
13
  version: '',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
15
15
  };
@@ -96,6 +96,7 @@ export class SchedulerComponent {
96
96
  this.renderer = renderer;
97
97
  this.focusService = focusService;
98
98
  this.hostClasses = true;
99
+ this.ariaRole = 'application';
99
100
  this.rtl = false;
100
101
  /**
101
102
  * Specifies if the Scheduler is editable.
@@ -434,6 +435,10 @@ export class SchedulerComponent {
434
435
  });
435
436
  }
436
437
  }));
438
+ this.subs.add(this.focusService.ariaActiveDescendant.subscribe((id) => {
439
+ const method = id ? 'setAttribute' : 'removeAttribute';
440
+ this.renderer[method](this.wrapper.nativeElement, 'aria-activedescendant', id);
441
+ }));
437
442
  this.onViewIndexChange();
438
443
  this.notifyOptionsChange = this.notifyOptionsChange.bind(this);
439
444
  this.subs.add(this.allDayEventTemplate.changes.subscribe(this.notifyOptionsChange));
@@ -511,6 +516,7 @@ export class SchedulerComponent {
511
516
  if (args.isDefaultPrevented()) {
512
517
  return true;
513
518
  }
519
+ this.focusService.clearActiveDescendant();
514
520
  if (action.type === 'view-change') {
515
521
  const views = this.views.toArray();
516
522
  const index = views.indexOf(action.view);
@@ -865,7 +871,7 @@ export class SchedulerComponent {
865
871
  }
866
872
  }
867
873
  SchedulerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SchedulerComponent, deps: [{ token: i0.ElementRef }, { token: i1.ViewContextService }, { token: i2.ViewStateService }, { token: i3.EditService }, { token: i4.DialogsService }, { token: i5.IntlService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i6.PDFService }, { token: i7.LocalizationService }, { token: i8.DomEventsService }, { token: i0.Renderer2 }, { token: i9.FocusService }], target: i0.ɵɵFactoryTarget.Component });
868
- SchedulerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SchedulerComponent, selector: "kendo-scheduler", inputs: { selectedViewIndex: "selectedViewIndex", editable: "editable", selectable: "selectable", min: "min", max: "max", eventHeight: "eventHeight", columnWidth: "columnWidth", showWorkHours: "showWorkHours", startTime: "startTime", endTime: "endTime", workDayStart: "workDayStart", workDayEnd: "workDayEnd", workWeekStart: "workWeekStart", workWeekEnd: "workWeekEnd", weekStart: "weekStart", slotDuration: "slotDuration", slotDivisions: "slotDivisions", slotFill: "slotFill", scrollTime: "scrollTime", group: "group", resources: "resources", loading: "loading", timezone: "timezone", events: "events", selectedDate: "selectedDate", modelFields: "modelFields", currentTimeMarker: "currentTimeMarker", highlightOngoingEvents: "highlightOngoingEvents", slotClass: "slotClass", eventClass: "eventClass", eventStyles: "eventStyles", isSlotSelected: "isSlotSelected" }, outputs: { selectedViewIndexChange: "selectedViewIndexChange", navigate: "navigate", dateChange: "dateChange", slotClick: "slotClick", slotDblClick: "slotDblClick", create: "create", eventClick: "eventClick", eventDblClick: "eventDblClick", eventKeydown: "eventKeydown", cancel: "cancel", save: "save", remove: "remove", resizeStart: "resizeStart", resize: "resize", resizeEnd: "resizeEnd", dragStart: "dragStart", drag: "drag", dragEnd: "dragEnd", slotDragStart: "slotDragStart", slotDrag: "slotDrag", slotDragEnd: "slotDragEnd", pdfExport: "pdfExport" }, host: { properties: { "class.k-widget": "this.hostClasses", "class.k-scheduler": "this.hostClasses", "class.k-floatwrap": "this.hostClasses", "class.k-rtl": "this.rtl", "attr.dir": "this.dir" } }, providers: [
874
+ SchedulerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SchedulerComponent, selector: "kendo-scheduler", inputs: { selectedViewIndex: "selectedViewIndex", editable: "editable", selectable: "selectable", min: "min", max: "max", eventHeight: "eventHeight", columnWidth: "columnWidth", showWorkHours: "showWorkHours", startTime: "startTime", endTime: "endTime", workDayStart: "workDayStart", workDayEnd: "workDayEnd", workWeekStart: "workWeekStart", workWeekEnd: "workWeekEnd", weekStart: "weekStart", slotDuration: "slotDuration", slotDivisions: "slotDivisions", slotFill: "slotFill", scrollTime: "scrollTime", group: "group", resources: "resources", loading: "loading", timezone: "timezone", events: "events", selectedDate: "selectedDate", modelFields: "modelFields", currentTimeMarker: "currentTimeMarker", highlightOngoingEvents: "highlightOngoingEvents", slotClass: "slotClass", eventClass: "eventClass", eventStyles: "eventStyles", isSlotSelected: "isSlotSelected" }, outputs: { selectedViewIndexChange: "selectedViewIndexChange", navigate: "navigate", dateChange: "dateChange", slotClick: "slotClick", slotDblClick: "slotDblClick", create: "create", eventClick: "eventClick", eventDblClick: "eventDblClick", eventKeydown: "eventKeydown", cancel: "cancel", save: "save", remove: "remove", resizeStart: "resizeStart", resize: "resize", resizeEnd: "resizeEnd", dragStart: "dragStart", drag: "drag", dragEnd: "dragEnd", slotDragStart: "slotDragStart", slotDrag: "slotDrag", slotDragEnd: "slotDragEnd", pdfExport: "pdfExport" }, host: { properties: { "class.k-widget": "this.hostClasses", "class.k-scheduler": "this.hostClasses", "class.k-floatwrap": "this.hostClasses", "attr.role": "this.ariaRole", "class.k-rtl": "this.rtl", "attr.dir": "this.dir" } }, providers: [
869
875
  EditService,
870
876
  DialogsService,
871
877
  DomEventsService,
@@ -1113,6 +1119,9 @@ SchedulerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1113
1119
 
1114
1120
  i18n-editRecurringDialogTitle="kendo.scheduler.editRecurringDialogTitle|The title of the recurring edit confirmation dialog, similar to 'Edit Recurring Item'"
1115
1121
  editRecurringDialogTitle='Edit Recurring Item'
1122
+
1123
+ i18n-selectView="kendo.scheduler.selectView|The value of the aria-label attribute of the <select> element used for switching the Scheduler views."
1124
+ selectView='Select View'
1116
1125
  >
1117
1126
  </ng-container>
1118
1127
 
@@ -1403,6 +1412,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1403
1412
 
1404
1413
  i18n-editRecurringDialogTitle="kendo.scheduler.editRecurringDialogTitle|The title of the recurring edit confirmation dialog, similar to 'Edit Recurring Item'"
1405
1414
  editRecurringDialogTitle='Edit Recurring Item'
1415
+
1416
+ i18n-selectView="kendo.scheduler.selectView|The value of the aria-label attribute of the <select> element used for switching the Scheduler views."
1417
+ selectView='Select View'
1406
1418
  >
1407
1419
  </ng-container>
1408
1420
 
@@ -1446,6 +1458,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1446
1458
  }, {
1447
1459
  type: HostBinding,
1448
1460
  args: ['class.k-floatwrap']
1461
+ }], ariaRole: [{
1462
+ type: HostBinding,
1463
+ args: ['attr.role']
1449
1464
  }], rtl: [{
1450
1465
  type: HostBinding,
1451
1466
  args: ['class.k-rtl']
@@ -196,6 +196,7 @@ ToolbarNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
196
196
  href="#"
197
197
  class="k-nav-current"
198
198
  tabindex="-1"
199
+ [attr.aria-live]="'polite'"
199
200
  >
200
201
  <span class="k-icon k-i-calendar"></span>
201
202
  <span class="k-sm-date-format">{{ (ctx.dateRange | async)?.shortText }}</span>
@@ -252,6 +253,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
252
253
  href="#"
253
254
  class="k-nav-current"
254
255
  tabindex="-1"
256
+ [attr.aria-live]="'polite'"
255
257
  >
256
258
  <span class="k-icon k-i-calendar"></span>
257
259
  <span class="k-sm-date-format">{{ (ctx.dateRange | async)?.shortText }}</span>
@@ -5,8 +5,9 @@
5
5
  import { Component, HostBinding } from '@angular/core';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "./toolbar.service";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@progress/kendo-angular-buttons";
8
+ import * as i2 from "@progress/kendo-angular-l10n";
9
+ import * as i3 from "@angular/common";
10
+ import * as i4 from "@progress/kendo-angular-buttons";
10
11
  /**
11
12
  * A toolbar component which contains the controls for switching the views
12
13
  * ([see example]({% slug toolbar_scheduler %}#toc-including-the-built-in-components)).
@@ -23,8 +24,9 @@ import * as i3 from "@progress/kendo-angular-buttons";
23
24
  * {% endmeta %}
24
25
  */
25
26
  export class ToolbarViewSelectorComponent {
26
- constructor(service) {
27
+ constructor(service, localization) {
27
28
  this.service = service;
29
+ this.localization = localization;
28
30
  /**
29
31
  * @hidden
30
32
  */
@@ -36,6 +38,12 @@ export class ToolbarViewSelectorComponent {
36
38
  get ctx() {
37
39
  return this.service.context;
38
40
  }
41
+ /**
42
+ * @hidden
43
+ */
44
+ get selectView() {
45
+ return this.localization.get('selectView');
46
+ }
39
47
  ngOnDestroy() {
40
48
  if (this.detachDomEvents) {
41
49
  this.detachDomEvents();
@@ -68,11 +76,14 @@ export class ToolbarViewSelectorComponent {
68
76
  return this.ctx.selectedView === view;
69
77
  }
70
78
  }
71
- ToolbarViewSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ToolbarViewSelectorComponent, deps: [{ token: i1.ToolbarService }], target: i0.ɵɵFactoryTarget.Component });
79
+ ToolbarViewSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ToolbarViewSelectorComponent, deps: [{ token: i1.ToolbarService }, { token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
72
80
  ToolbarViewSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ToolbarViewSelectorComponent, selector: "[kendoSchedulerToolbarViewSelector]", host: { properties: { "class.k-scheduler-views-wrapper": "this.hostClasses" } }, ngImport: i0, template: `
73
- <select *ngIf="ctx.views?.length > 1"
74
- (change)="onChange($event)"
75
- class="k-views-dropdown k-picker-md k-rounded-md k-picker-solid k-dropdownlist k-picker">
81
+ <select
82
+ *ngIf="ctx.views?.length > 1"
83
+ (change)="onChange($event)"
84
+ class="k-views-dropdown k-picker-md k-rounded-md k-picker-solid k-dropdownlist k-picker"
85
+ [attr.aria-label]="selectView"
86
+ >
76
87
  <option *ngFor="let view of ctx.views"
77
88
  [selected]="isSelected(view) === true"
78
89
  [value]="view.name"
@@ -93,16 +104,19 @@ ToolbarViewSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
93
104
  </span>
94
105
  </button>
95
106
  </span>
96
- `, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
107
+ `, isInline: true, directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
97
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ToolbarViewSelectorComponent, decorators: [{
98
109
  type: Component,
99
110
  args: [{
100
111
  // eslint-disable-next-line @angular-eslint/component-selector
101
112
  selector: '[kendoSchedulerToolbarViewSelector]',
102
113
  template: `
103
- <select *ngIf="ctx.views?.length > 1"
104
- (change)="onChange($event)"
105
- class="k-views-dropdown k-picker-md k-rounded-md k-picker-solid k-dropdownlist k-picker">
114
+ <select
115
+ *ngIf="ctx.views?.length > 1"
116
+ (change)="onChange($event)"
117
+ class="k-views-dropdown k-picker-md k-rounded-md k-picker-solid k-dropdownlist k-picker"
118
+ [attr.aria-label]="selectView"
119
+ >
106
120
  <option *ngFor="let view of ctx.views"
107
121
  [selected]="isSelected(view) === true"
108
122
  [value]="view.name"
@@ -125,7 +139,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
125
139
  </span>
126
140
  `
127
141
  }]
128
- }], ctorParameters: function () { return [{ type: i1.ToolbarService }]; }, propDecorators: { hostClasses: [{
142
+ }], ctorParameters: function () { return [{ type: i1.ToolbarService }, { type: i2.LocalizationService }]; }, propDecorators: { hostClasses: [{
129
143
  type: HostBinding,
130
144
  args: ['class.k-scheduler-views-wrapper']
131
145
  }] } });
@@ -13,6 +13,7 @@ import * as i2 from "@progress/kendo-angular-intl";
13
13
  export class AgendaHeaderItemComponent {
14
14
  constructor() {
15
15
  this.classes = true;
16
+ this.roleAttribute = "rowheader";
16
17
  }
17
18
  get rowSpan() {
18
19
  return this.item.rowSpan;
@@ -22,7 +23,7 @@ export class AgendaHeaderItemComponent {
22
23
  }
23
24
  }
24
25
  AgendaHeaderItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AgendaHeaderItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
25
- AgendaHeaderItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AgendaHeaderItemComponent, selector: "[kendoSchedulerAgendaHeaderItem]", inputs: { item: ["kendoSchedulerAgendaHeaderItem", "item"], agendaDateTemplate: "agendaDateTemplate" }, host: { properties: { "class.k-scheduler-datecolumn": "this.classes", "attr.rowspan": "this.rowSpan" } }, ngImport: i0, template: `
26
+ AgendaHeaderItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AgendaHeaderItemComponent, selector: "[kendoSchedulerAgendaHeaderItem]", inputs: { item: ["kendoSchedulerAgendaHeaderItem", "item"], agendaDateTemplate: "agendaDateTemplate" }, host: { properties: { "class.k-scheduler-datecolumn": "this.classes", "attr.role": "this.roleAttribute", "attr.rowspan": "this.rowSpan" } }, ngImport: i0, template: `
26
27
  <ng-container *ngIf="!agendaDateTemplate">
27
28
  <strong class="k-scheduler-agendaday">{{itemDate | kendoDate: 'dd'}}</strong>
28
29
  <em class="k-scheduler-agendaweek">{{itemDate | kendoDate: 'EEEE'}}</em>
@@ -52,6 +53,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
52
53
  }], propDecorators: { classes: [{
53
54
  type: HostBinding,
54
55
  args: ["class.k-scheduler-datecolumn"]
56
+ }], roleAttribute: [{
57
+ type: HostBinding,
58
+ args: ["attr.role"]
55
59
  }], rowSpan: [{
56
60
  type: HostBinding,
57
61
  args: ["attr.rowspan"]
@@ -27,13 +27,13 @@ export class AgendaHeaderComponent {
27
27
  AgendaHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AgendaHeaderComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
28
28
  AgendaHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AgendaHeaderComponent, selector: "[kendoSchedulerAgendaHeader]", inputs: { resources: "resources" }, host: { properties: { "class.k-scheduler-header": "this.classes", "class.k-state-default": "this.classes" } }, ngImport: i0, template: `
29
29
  <div class="k-scheduler-header-wrap">
30
- <table class="k-scheduler-table" role="presentation">
31
- <tbody>
32
- <tr>
33
- <th *ngFor="let resource of resources" class="k-scheduler-groupcolumn"></th>
34
- <th class="k-scheduler-datecolumn">{{ dateMessage }}</th>
35
- <th class="k-scheduler-timecolumn">{{ timeMessage }}</th>
36
- <th>{{ eventMessage }}</th>
30
+ <table class="k-scheduler-table" role="rowgroup">
31
+ <tbody role="none">
32
+ <tr role="row">
33
+ <th *ngFor="let resource of resources" class="k-scheduler-groupcolumn" role="columnheader"></th>
34
+ <th class="k-scheduler-datecolumn" role="columnheader">{{ dateMessage }}</th>
35
+ <th class="k-scheduler-timecolumn" role="columnheader">{{ timeMessage }}</th>
36
+ <th role="columnheader">{{ eventMessage }}</th>
37
37
  </tr>
38
38
  </tbody>
39
39
  </table>
@@ -47,13 +47,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
47
47
  selector: '[kendoSchedulerAgendaHeader]',
48
48
  template: `
49
49
  <div class="k-scheduler-header-wrap">
50
- <table class="k-scheduler-table" role="presentation">
51
- <tbody>
52
- <tr>
53
- <th *ngFor="let resource of resources" class="k-scheduler-groupcolumn"></th>
54
- <th class="k-scheduler-datecolumn">{{ dateMessage }}</th>
55
- <th class="k-scheduler-timecolumn">{{ timeMessage }}</th>
56
- <th>{{ eventMessage }}</th>
50
+ <table class="k-scheduler-table" role="rowgroup">
51
+ <tbody role="none">
52
+ <tr role="row">
53
+ <th *ngFor="let resource of resources" class="k-scheduler-groupcolumn" role="columnheader"></th>
54
+ <th class="k-scheduler-datecolumn" role="columnheader">{{ dateMessage }}</th>
55
+ <th class="k-scheduler-timecolumn" role="columnheader">{{ timeMessage }}</th>
56
+ <th role="columnheader">{{ eventMessage }}</th>
57
57
  </tr>
58
58
  </tbody>
59
59
  </table>
@@ -52,7 +52,10 @@ export class AgendaViewInternalComponent {
52
52
  this.subs.add(this.viewContext.action.subscribe(this.onAction.bind(this)));
53
53
  this.subs.add(this.viewContext.execute.subscribe(this.execute.bind(this)));
54
54
  this.subs.add(this.viewContext.resize.subscribe(this.updateContentHeight));
55
- this.subs.add(combineLatest(this.viewContext.items, this.viewState.dateRange).pipe(map(([items, dateRange]) => {
55
+ this.subs.add(combineLatest([
56
+ this.viewContext.items,
57
+ this.viewState.dateRange
58
+ ]).pipe(map(([items, dateRange]) => {
56
59
  this.items = items;
57
60
  this.range = dateRange;
58
61
  return this.createEventGroups();
@@ -295,8 +298,8 @@ export class AgendaViewInternalComponent {
295
298
  }
296
299
  AgendaViewInternalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AgendaViewInternalComponent, deps: [{ token: i1.ViewContextService }, { token: i2.ViewStateService }, { token: i3.IntlService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i4.PDFService }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
297
300
  AgendaViewInternalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AgendaViewInternalComponent, selector: "agenda-view-internal", inputs: { eventTemplate: "eventTemplate", slotClass: "slotClass", eventClass: "eventClass", eventStyles: "eventStyles", agendaTimeTemplate: "agendaTimeTemplate", agendaDateTemplate: "agendaDateTemplate", selectedDateFormat: "selectedDateFormat", selectedShortDateFormat: "selectedShortDateFormat", numberOfDays: "numberOfDays" }, viewQueries: [{ propertyName: "headerWrap", first: true, predicate: ["headerWrap"], descendants: true, read: ElementRef, static: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
298
- <table class="k-scheduler-layout k-scheduler-agendaview k-scheduler-agenda">
299
- <tbody>
301
+ <table class="k-scheduler-layout k-scheduler-agendaview k-scheduler-agenda" role="grid">
302
+ <tbody role="none">
300
303
  <tr>
301
304
  <td>
302
305
  <div kendoSchedulerAgendaHeader [resources]="groupedResources" #headerWrap></div>
@@ -325,8 +328,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
325
328
  // eslint-disable-next-line @angular-eslint/component-selector
326
329
  selector: 'agenda-view-internal',
327
330
  template: `
328
- <table class="k-scheduler-layout k-scheduler-agendaview k-scheduler-agenda">
329
- <tbody>
331
+ <table class="k-scheduler-layout k-scheduler-agendaview k-scheduler-agenda" role="grid">
332
+ <tbody role="none">
330
333
  <tr>
331
334
  <td>
332
335
  <div kendoSchedulerAgendaHeader [resources]="groupedResources" #headerWrap></div>
@@ -71,12 +71,12 @@ export class AgendaListComponent {
71
71
  }
72
72
  AgendaListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AgendaListComponent, deps: [{ token: i1.IntlService }, { token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
73
73
  AgendaListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: AgendaListComponent, selector: "[kendoSchedulerAgendaList]", inputs: { tasks: "tasks", eventTemplate: "eventTemplate", slotClass: "slotClass", eventClass: "eventClass", eventStyles: "eventStyles", agendaTimeTemplate: "agendaTimeTemplate", agendaDateTemplate: "agendaDateTemplate", editable: "editable" }, host: { properties: { "class.k-scheduler-content": "this.classes" } }, ngImport: i0, template: `
74
- <table class="k-scheduler-table" role="presentation">
75
- <tbody>
74
+ <table class="k-scheduler-table" role="none">
75
+ <tbody role="rowgroup">
76
76
  <ng-container *ngFor="let group of tasks; let groupIndex = index;">
77
- <tr *ngFor="let item of group.tasks;let index = index; trackBy: trackByFn">
78
- <ng-container *ngFor="let resource of group.resources;let resourceIndex = index">
79
- <td *ngIf="group.spans[resourceIndex] && index === 0" class="k-scheduler-groupcolumn" [attr.rowspan]="group.spans[resourceIndex]">
77
+ <tr *ngFor="let item of group.tasks; let index = index; trackBy: trackByFn" role="row">
78
+ <ng-container *ngFor="let resource of group.resources; let resourceIndex = index">
79
+ <td *ngIf="group.spans[resourceIndex] && index === 0" class="k-scheduler-groupcolumn" [attr.rowspan]="group.spans[resourceIndex]" role="rowheader">
80
80
  {{ resource }}
81
81
  </td>
82
82
  </ng-container>
@@ -84,19 +84,20 @@ AgendaListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
84
84
  [kendoSchedulerAgendaHeaderItem]="item"
85
85
  [agendaDateTemplate]="agendaDateTemplate">
86
86
  </td>
87
- <td class="k-scheduler-timecolumn">
87
+ <td class="k-scheduler-timecolumn" role="gridcell">
88
88
  <div *ngIf="!agendaTimeTemplate">
89
89
  <span class="k-icon k-i-arrow-60-left" *ngIf="extractDataItem(item).tail"></span>
90
- {{formatTime(extractDataItem(item)) }}
90
+ {{ formatTime(extractDataItem(item)) }}
91
91
  <span class="k-icon k-i-arrow-60-right" *ngIf="extractDataItem(item).head"></span>
92
92
  </div>
93
93
  <ng-container *ngIf="agendaTimeTemplate" [ngTemplateOutlet]="agendaTimeTemplate"
94
94
  [ngTemplateOutletContext]="extractDataItem(item)">
95
95
  </ng-container>
96
96
  </td>
97
- <td [attr.data-group-index]="groupIndex" [attr.data-task-index]="index"
97
+ <td [attr.data-group-index]="groupIndex" [attr.data-task-index]="index" role="gridcell"
98
98
  [ngClass]="cellClasses(item)" [ngStyle]="getEventStyles(item)"
99
99
  [kendoSchedulerFocusIndex]="groupIndex"
100
+ [id]="item.elementId"
100
101
  [kendoSchedulerAgendaTaskItem]="extractDataItem(item)"
101
102
  [editable]="editable"
102
103
  [eventTemplate]="eventTemplate"
@@ -112,12 +113,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
112
113
  // eslint-disable-next-line @angular-eslint/component-selector
113
114
  selector: '[kendoSchedulerAgendaList]',
114
115
  template: `
115
- <table class="k-scheduler-table" role="presentation">
116
- <tbody>
116
+ <table class="k-scheduler-table" role="none">
117
+ <tbody role="rowgroup">
117
118
  <ng-container *ngFor="let group of tasks; let groupIndex = index;">
118
- <tr *ngFor="let item of group.tasks;let index = index; trackBy: trackByFn">
119
- <ng-container *ngFor="let resource of group.resources;let resourceIndex = index">
120
- <td *ngIf="group.spans[resourceIndex] && index === 0" class="k-scheduler-groupcolumn" [attr.rowspan]="group.spans[resourceIndex]">
119
+ <tr *ngFor="let item of group.tasks; let index = index; trackBy: trackByFn" role="row">
120
+ <ng-container *ngFor="let resource of group.resources; let resourceIndex = index">
121
+ <td *ngIf="group.spans[resourceIndex] && index === 0" class="k-scheduler-groupcolumn" [attr.rowspan]="group.spans[resourceIndex]" role="rowheader">
121
122
  {{ resource }}
122
123
  </td>
123
124
  </ng-container>
@@ -125,19 +126,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
125
126
  [kendoSchedulerAgendaHeaderItem]="item"
126
127
  [agendaDateTemplate]="agendaDateTemplate">
127
128
  </td>
128
- <td class="k-scheduler-timecolumn">
129
+ <td class="k-scheduler-timecolumn" role="gridcell">
129
130
  <div *ngIf="!agendaTimeTemplate">
130
131
  <span class="k-icon k-i-arrow-60-left" *ngIf="extractDataItem(item).tail"></span>
131
- {{formatTime(extractDataItem(item)) }}
132
+ {{ formatTime(extractDataItem(item)) }}
132
133
  <span class="k-icon k-i-arrow-60-right" *ngIf="extractDataItem(item).head"></span>
133
134
  </div>
134
135
  <ng-container *ngIf="agendaTimeTemplate" [ngTemplateOutlet]="agendaTimeTemplate"
135
136
  [ngTemplateOutletContext]="extractDataItem(item)">
136
137
  </ng-container>
137
138
  </td>
138
- <td [attr.data-group-index]="groupIndex" [attr.data-task-index]="index"
139
+ <td [attr.data-group-index]="groupIndex" [attr.data-task-index]="index" role="gridcell"
139
140
  [ngClass]="cellClasses(item)" [ngStyle]="getEventStyles(item)"
140
141
  [kendoSchedulerFocusIndex]="groupIndex"
142
+ [id]="item.elementId"
141
143
  [kendoSchedulerAgendaTaskItem]="extractDataItem(item)"
142
144
  [editable]="editable"
143
145
  [eventTemplate]="eventTemplate"
@@ -15,22 +15,26 @@ export const compose = (...args) => (data) => args.reduceRight((acc, curr) => cu
15
15
  * @hidden
16
16
  */
17
17
  export const processEvents = (_start, _end) => compose(group([{ field: "startDate" }]), sort([{ field: "start", dir: "asc" }, { field: "end", dir: "asc" }]));
18
- function* flattenGroups(groups) {
19
- for (let index = 0; index < groups.length; index++) {
20
- const groupItem = groups[index];
21
- yield {
22
- type: "group",
23
- dataItem: groupItem,
24
- rowSpan: groupItem.items.length
25
- };
26
- for (let itemIndex = 1; itemIndex < groupItem.items.length; itemIndex++) {
27
- const item = groupItem.items[itemIndex];
18
+ function flattenGroupsAndAddIds(scope) {
19
+ return function* flattenGroups(groups) {
20
+ for (let index = 0; index < groups.length; index++) {
21
+ const groupItem = groups[index];
28
22
  yield {
29
- type: "event",
30
- dataItem: item
23
+ type: "group",
24
+ dataItem: groupItem,
25
+ rowSpan: groupItem.items.length,
26
+ elementId: `k-scheduler-${scope.counter}-${index}`
31
27
  };
28
+ for (let itemIndex = 1; itemIndex < groupItem.items.length; itemIndex++) {
29
+ const item = groupItem.items[itemIndex];
30
+ yield {
31
+ type: "event",
32
+ dataItem: item,
33
+ elementId: `k-scheduler-${scope.counter}-${index}-item-${itemIndex}`
34
+ };
35
+ }
32
36
  }
33
- }
37
+ };
34
38
  }
35
39
  /** @hidden */
36
40
  export class EmptyIterator {
@@ -43,6 +47,7 @@ export class EmptyIterator {
43
47
  return "Empty Iterator";
44
48
  }
45
49
  }
50
+ let seed = 0;
46
51
  /**
47
52
  * @hidden
48
53
  */
@@ -51,7 +56,9 @@ export class TaskCollection {
51
56
  this.start = start;
52
57
  this.end = end;
53
58
  this.events = events;
54
- this.createIterator = compose(flattenGroups, processEvents(this.start, this.end));
59
+ this.createIterator = compose(flattenGroupsAndAddIds(this), processEvents(this.start, this.end));
60
+ this.counter = seed;
61
+ seed++;
55
62
  }
56
63
  static empty() {
57
64
  return (new EmptyIterator());
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { ViewChild, Input, Directive } from '@angular/core';
6
- import { anyChanged } from '@progress/kendo-angular-common';
6
+ import { anyChanged, guid } from '@progress/kendo-angular-common';
7
7
  import { ZonedDate } from '@progress/kendo-date-math';
8
8
  import { Subscription, BehaviorSubject, combineLatest, fromEvent, merge } from 'rxjs';
9
9
  import { switchMap, take, map, filter, tap } from 'rxjs/operators';
@@ -11,7 +11,7 @@ import { closestInScope, hasClasses, preventLockedScroll, scrollbarWidth, wheelD
11
11
  import { groupResources, getField, setField, fromClick, fromDoubleClick } from '../../common/util';
12
12
  import { assignTasksResources, toPx, elementOffset, pointDistance, ignoreContentChild, resourceItemByValue, convertNgClassBindings, toUTCDateTime, dateWithTime, normaliseRangeStartAndEnd } from '../utils';
13
13
  import { BORDER_WIDTH } from '../constants';
14
- import Draggable from '@telerik/kendo-draggable';
14
+ import Draggable from '@progress/kendo-draggable';
15
15
  import { slotDragEventName } from '../../types/slot-selection';
16
16
  import { SlotDragStartEvent } from '../../events/slot-drag-start-event';
17
17
  import * as i0 from "@angular/core";
@@ -92,7 +92,7 @@ export class BaseView {
92
92
  this.subs.add(combineLatest(this.viewContext.items, this.viewState.dateRange, this.viewRangeChange)
93
93
  .pipe(map(([items, dateRange]) => this.createTasks(items, dateRange)))
94
94
  .subscribe((tasks) => {
95
- this.tasks = tasks;
95
+ this.tasks = tasks.map(t => (Object.assign(Object.assign({}, t), { elementId: guid() })));
96
96
  this.assignResources();
97
97
  this.onTasksChange();
98
98
  }));