@progress/kendo-angular-dateinputs 12.1.0-develop.1 → 12.1.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.
@@ -36,8 +36,8 @@ const packageMetadata = {
36
36
  name: '@progress/kendo-angular-dateinputs',
37
37
  productName: 'Kendo UI for Angular',
38
38
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
39
- publishDate: 1684148954,
40
- version: '12.1.0-develop.1',
39
+ publishDate: 1684310705,
40
+ version: '12.1.0',
41
41
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
42
42
  };
43
43
 
@@ -10926,7 +10926,9 @@ class TimeListComponent {
10926
10926
  this.max = cloneDate(MAX_TIME);
10927
10927
  this.step = 1;
10928
10928
  this.disabled = false;
10929
+ this.isLast = false;
10929
10930
  this.valueChange = new EventEmitter();
10931
+ this.tabOutLastPart = new EventEmitter();
10930
10932
  this.componentClass = true;
10931
10933
  this.animateToIndex = true;
10932
10934
  this.isActive = false;
@@ -11105,6 +11107,10 @@ class TimeListComponent {
11105
11107
  return oldData && newData && oldData.text !== newData.text;
11106
11108
  }
11107
11109
  handleKeyDown(e) {
11110
+ if (e.keyCode === Keys$1.Tab && !e.shiftKey && this.isLast) {
11111
+ e.preventDefault();
11112
+ this.tabOutLastPart.emit();
11113
+ }
11108
11114
  const getter = getters[e.keyCode] || nil;
11109
11115
  const dataItem = getter(this.data, this.service.selectedIndex(this.value));
11110
11116
  if (dataItem) {
@@ -11125,7 +11131,7 @@ class TimeListComponent {
11125
11131
  }
11126
11132
  }
11127
11133
  TimeListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TimeListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: TimePickerDOMService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
11128
- TimeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TimeListComponent, selector: "kendo-timelist", inputs: { min: "min", max: "max", part: "part", step: "step", disabled: "disabled", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.role": "this.roleAttribute", "attr.aria-label": "this.ariaLabel", "attr.tabindex": "this.tabIndex", "class.k-time-list": "this.componentClass" } }, viewQueries: [{ propertyName: "virtualization", first: true, predicate: VirtualizationComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
11134
+ TimeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TimeListComponent, selector: "kendo-timelist", inputs: { min: "min", max: "max", part: "part", step: "step", disabled: "disabled", value: "value", isLast: "isLast" }, outputs: { valueChange: "valueChange", tabOutLastPart: "tabOutLastPart" }, host: { properties: { "attr.role": "this.roleAttribute", "attr.aria-label": "this.ariaLabel", "attr.tabindex": "this.tabIndex", "class.k-time-list": "this.componentClass" } }, viewQueries: [{ propertyName: "virtualization", first: true, predicate: VirtualizationComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
11129
11135
  <kendo-virtualization
11130
11136
  [skip]="skip"
11131
11137
  [take]="total"
@@ -11200,8 +11206,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11200
11206
  type: Input
11201
11207
  }], value: [{
11202
11208
  type: Input
11209
+ }], isLast: [{
11210
+ type: Input
11203
11211
  }], valueChange: [{
11204
11212
  type: Output
11213
+ }], tabOutLastPart: [{
11214
+ type: Output
11205
11215
  }], virtualization: [{
11206
11216
  type: ViewChild,
11207
11217
  args: [VirtualizationComponent, { static: true }]
@@ -11423,6 +11433,7 @@ class TimeSelectorComponent {
11423
11433
  * Fires each time the user cancels the selected value.
11424
11434
  */
11425
11435
  this.valueReject = new EventEmitter();
11436
+ this.tabOutLastPart = new EventEmitter();
11426
11437
  this.isActive = false;
11427
11438
  this.showNowButton = true;
11428
11439
  this._activeListIndex = -1;
@@ -11512,6 +11523,22 @@ class TimeSelectorComponent {
11512
11523
  this.init();
11513
11524
  this.bindEvents();
11514
11525
  }
11526
+ ngAfterViewInit() {
11527
+ this.subscriptions.add(fromEvent(this.timeListWrappers.first.nativeElement, 'keydown').subscribe((event) => {
11528
+ const { keyCode, shiftKey } = event;
11529
+ if (keyCode === Keys$1.Tab && shiftKey) {
11530
+ event.preventDefault();
11531
+ this.renderer.removeClass(this.timeListWrappers.first.nativeElement, 'k-focus');
11532
+ this.accept.nativeElement.focus();
11533
+ }
11534
+ }));
11535
+ this.subscriptions.add(fromEvent(this.timeListWrappers.last.nativeElement, 'keydown').subscribe((event) => {
11536
+ const { keyCode, shiftKey } = event;
11537
+ if (keyCode === Keys$1.Tab && !shiftKey) {
11538
+ this.renderer.removeClass(this.timeListWrappers.last.nativeElement, 'k-focus');
11539
+ }
11540
+ }));
11541
+ }
11515
11542
  /**
11516
11543
  * @hidden
11517
11544
  */
@@ -11616,6 +11643,16 @@ class TimeSelectorComponent {
11616
11643
  containsElement(element) {
11617
11644
  return Boolean(closest(element, node => node === this.element.nativeElement));
11618
11645
  }
11646
+ /**
11647
+ * @hidden
11648
+ */
11649
+ handleTabOut(event) {
11650
+ const { keyCode, shiftKey } = event;
11651
+ if (keyCode === Keys$1.Tab && !shiftKey) {
11652
+ event.preventDefault();
11653
+ this.timeLists.first.focus();
11654
+ }
11655
+ }
11619
11656
  partStep(part) {
11620
11657
  return this.steps[part.type] || 1;
11621
11658
  }
@@ -11703,7 +11740,7 @@ class TimeSelectorComponent {
11703
11740
  }
11704
11741
  }
11705
11742
  TimeSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TimeSelectorComponent, deps: [{ token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.IntlService }, { token: TimePickerDOMService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: PickerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11706
- TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TimeSelectorComponent, selector: "kendo-timeselector", inputs: { format: "format", min: "min", max: "max", cancelButton: "cancelButton", setButton: "setButton", nowButton: "nowButton", disabled: "disabled", isAdaptiveEnabled: "isAdaptiveEnabled", isDateTimePicker: "isDateTimePicker", steps: "steps", value: "value" }, outputs: { valueChange: "valueChange", valueReject: "valueReject" }, host: { properties: { "class.k-disabled": "this.disabledClass" } }, providers: [
11743
+ TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TimeSelectorComponent, selector: "kendo-timeselector", inputs: { format: "format", min: "min", max: "max", cancelButton: "cancelButton", setButton: "setButton", nowButton: "nowButton", disabled: "disabled", isAdaptiveEnabled: "isAdaptiveEnabled", isDateTimePicker: "isDateTimePicker", steps: "steps", value: "value" }, outputs: { valueChange: "valueChange", valueReject: "valueReject", tabOutLastPart: "tabOutLastPart" }, host: { properties: { "class.k-disabled": "this.disabledClass" } }, providers: [
11707
11744
  LocalizationService,
11708
11745
  {
11709
11746
  provide: L10N_PREFIX,
@@ -11761,12 +11798,14 @@ TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11761
11798
  >
11762
11799
  <span class="k-title k-timeselector-title">{{intl.dateFieldName(part)}}</span>
11763
11800
  <kendo-timelist
11801
+ [isLast]="idx === dateFormatParts.length - 1"
11764
11802
  [min]="min"
11765
11803
  [max]="max"
11766
11804
  [part]="part"
11767
11805
  [step]="partStep(part)"
11768
11806
  [disabled]="disabled"
11769
11807
  [(value)]="current"
11808
+ (tabOutLastPart)="tabOutLastPart.emit()"
11770
11809
  [kendoEventsOutsideAngular]="{
11771
11810
  focus: handleListFocus,
11772
11811
  blur: handleBlur
@@ -11806,13 +11845,14 @@ TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11806
11845
  [kendoEventsOutsideAngular]="{
11807
11846
  click: handleAccept,
11808
11847
  focus: handleFocus,
11809
- blur: handleBlur
11848
+ blur: handleBlur,
11849
+ keydown: handleTabOut
11810
11850
  }"
11811
11851
  [scope]="this"
11812
11852
  [disabled]="disabled"
11813
11853
  >{{localization.get('accept')}}</button>
11814
11854
  </div>
11815
- `, isInline: true, components: [{ type: TimeListComponent, selector: "kendo-timelist", inputs: ["min", "max", "part", "step", "disabled", "value"], outputs: ["valueChange"] }], directives: [{ type: TimeSelectorLocalizedMessagesDirective, selector: "[kendoTimeSelectorLocalizedMessages]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11855
+ `, isInline: true, components: [{ type: TimeListComponent, selector: "kendo-timelist", inputs: ["min", "max", "part", "step", "disabled", "value", "isLast"], outputs: ["valueChange", "tabOutLastPart"] }], directives: [{ type: TimeSelectorLocalizedMessagesDirective, selector: "[kendoTimeSelectorLocalizedMessages]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11816
11856
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TimeSelectorComponent, decorators: [{
11817
11857
  type: Component,
11818
11858
  args: [{
@@ -11878,12 +11918,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11878
11918
  >
11879
11919
  <span class="k-title k-timeselector-title">{{intl.dateFieldName(part)}}</span>
11880
11920
  <kendo-timelist
11921
+ [isLast]="idx === dateFormatParts.length - 1"
11881
11922
  [min]="min"
11882
11923
  [max]="max"
11883
11924
  [part]="part"
11884
11925
  [step]="partStep(part)"
11885
11926
  [disabled]="disabled"
11886
11927
  [(value)]="current"
11928
+ (tabOutLastPart)="tabOutLastPart.emit()"
11887
11929
  [kendoEventsOutsideAngular]="{
11888
11930
  focus: handleListFocus,
11889
11931
  blur: handleBlur
@@ -11923,7 +11965,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11923
11965
  [kendoEventsOutsideAngular]="{
11924
11966
  click: handleAccept,
11925
11967
  focus: handleFocus,
11926
- blur: handleBlur
11968
+ blur: handleBlur,
11969
+ keydown: handleTabOut
11927
11970
  }"
11928
11971
  [scope]="this"
11929
11972
  [disabled]="disabled"
@@ -11979,6 +12022,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11979
12022
  type: Output
11980
12023
  }], valueReject: [{
11981
12024
  type: Output
12025
+ }], tabOutLastPart: [{
12026
+ type: Output
11982
12027
  }] } });
11983
12028
 
11984
12029
  /**
@@ -12753,6 +12798,17 @@ class TimePickerComponent {
12753
12798
  }
12754
12799
  this.windowSize = windowSize();
12755
12800
  }
12801
+ /**
12802
+ * @hidden
12803
+ */
12804
+ onTabOutLastPart() {
12805
+ if (this.cancelButton) {
12806
+ this.timeSelector.cancel.nativeElement.focus();
12807
+ }
12808
+ else {
12809
+ this.timeSelector.accept.nativeElement.focus();
12810
+ }
12811
+ }
12756
12812
  toggleTimeSelector(show) {
12757
12813
  this.windowSize = windowSize();
12758
12814
  if (this.isAdaptive) {
@@ -13111,6 +13167,7 @@ TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13111
13167
  [scope]="this"
13112
13168
  (valueChange)="handleChange($event)"
13113
13169
  (valueReject)="handleReject()"
13170
+ (tabOutLastPart)="onTabOutLastPart()"
13114
13171
  >
13115
13172
  <kendo-timeselector-messages
13116
13173
  [acceptLabel]="localization.get('acceptLabel')"
@@ -13128,7 +13185,7 @@ TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13128
13185
  </kendo-timeselector-messages>
13129
13186
  </kendo-timeselector>
13130
13187
  </ng-template>
13131
- `, isInline: true, components: [{ type: DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrect", "incompleteDateValidation", "twoDigitYearMax", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { type: i7$1.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i8.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: i9.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { type: i10.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject"], exportAs: ["kendo-timeselector"] }, { type: TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }], directives: [{ type: TimePickerLocalizedMessagesDirective, selector: "[kendoTimePickerLocalizedMessages]" }, { type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13188
+ `, isInline: true, components: [{ type: DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrect", "incompleteDateValidation", "twoDigitYearMax", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { type: i7$1.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i8.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: i9.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { type: i10.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject", "tabOutLastPart"], exportAs: ["kendo-timeselector"] }, { type: TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }], directives: [{ type: TimePickerLocalizedMessagesDirective, selector: "[kendoTimePickerLocalizedMessages]" }, { type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13132
13189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TimePickerComponent, decorators: [{
13133
13190
  type: Component,
13134
13191
  args: [{
@@ -13310,6 +13367,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13310
13367
  [scope]="this"
13311
13368
  (valueChange)="handleChange($event)"
13312
13369
  (valueReject)="handleReject()"
13370
+ (tabOutLastPart)="onTabOutLastPart()"
13313
13371
  >
13314
13372
  <kendo-timeselector-messages
13315
13373
  [acceptLabel]="localization.get('acceptLabel')"
@@ -13508,6 +13566,9 @@ const DEFAULT_ACTIVE_TAB = 'date';
13508
13566
  const DEFAULT_DATEINPUT_FORMAT = 'g';
13509
13567
  const DEFAULT_TIMESELECTOR_FORMAT = 't';
13510
13568
  const TWO_DIGIT_YEAR_MAX = 68;
13569
+ const ACCEPT_BUTTON_SELECTOR = '.k-button.k-time-accept';
13570
+ const CANCEL_BUTTON_SELECOTR = '.k-button.k-time-cancel';
13571
+ const DATE_TAB_BUTTON_SELECTOR = '.k-button.k-date-tab';
13511
13572
  /**
13512
13573
  * Represents the [Kendo UI DateTimePicker component for Angular]({% slug overview_datetimepicker %}).
13513
13574
  */
@@ -14031,6 +14092,21 @@ class DateTimePickerComponent {
14031
14092
  return (_a = this.calendar) === null || _a === void 0 ? void 0 : _a.popupId;
14032
14093
  }
14033
14094
  ;
14095
+ get acceptButton() {
14096
+ var _a;
14097
+ return (_a = this.popupRef) === null || _a === void 0 ? void 0 : _a.popup.instance.container.nativeElement.querySelector(ACCEPT_BUTTON_SELECTOR);
14098
+ }
14099
+ ;
14100
+ get cancelButtonElement() {
14101
+ var _a;
14102
+ return (_a = this.popupRef) === null || _a === void 0 ? void 0 : _a.popup.instance.container.nativeElement.querySelector(CANCEL_BUTTON_SELECOTR);
14103
+ }
14104
+ ;
14105
+ get dateTabButton() {
14106
+ var _a;
14107
+ return (_a = this.popupRef) === null || _a === void 0 ? void 0 : _a.popup.instance.container.nativeElement.querySelector(DATE_TAB_BUTTON_SELECTOR);
14108
+ }
14109
+ ;
14034
14110
  ngOnInit() {
14035
14111
  this.subscriptions.add(this.pickerService.onFocus
14036
14112
  // detect popup changes to disable the inactive view mark-up when the popup is open
@@ -14236,6 +14312,20 @@ class DateTimePickerComponent {
14236
14312
  }
14237
14313
  this.activeTabComponent.focus();
14238
14314
  }
14315
+ /**
14316
+ * @hidden
14317
+ */
14318
+ onTabOutLastPart() {
14319
+ if (!this.cancelButton && !this.calendarValue) {
14320
+ this.dateTabButton.focus();
14321
+ }
14322
+ else if (!this.cancelButton && this.calendarValue) {
14323
+ this.acceptButton.focus();
14324
+ }
14325
+ else if (this.cancelButton) {
14326
+ this.cancelButtonElement.focus();
14327
+ }
14328
+ }
14239
14329
  /**
14240
14330
  * @hidden
14241
14331
  */
@@ -14318,22 +14408,41 @@ class DateTimePickerComponent {
14318
14408
  /**
14319
14409
  * @hidden
14320
14410
  */
14321
- handleTabOut(event) {
14322
- const { keyCode, shiftKey, target } = event;
14323
- // if no focusable next sibling elements exist in the controls sections, the user is tabbing out of the popup
14324
- const focusableSiblingAvailable = isPresent(target.nextElementSibling) && !target.nextElementSibling.disabled;
14325
- if (keyCode === Keys$1.Tab && !shiftKey && !focusableSiblingAvailable) {
14326
- this.input.focus();
14327
- this.handleCancel();
14328
- }
14329
- }
14330
- /**
14331
- * @hidden
14332
- */
14333
- handleBackTabOut(event) {
14334
- const { keyCode, shiftKey } = event;
14335
- if (keyCode === Keys$1.Tab && shiftKey) {
14336
- this.input.focus();
14411
+ handleTab(event) {
14412
+ event.preventDefault();
14413
+ const { shiftKey } = event;
14414
+ switch (event.target) {
14415
+ case this.acceptButton:
14416
+ if (!shiftKey && this.calendarValue) {
14417
+ this.dateTabButton.focus();
14418
+ }
14419
+ break;
14420
+ case this.cancelButtonElement:
14421
+ if (!shiftKey && !this.calendarValue) {
14422
+ this.dateTabButton.focus();
14423
+ }
14424
+ else if (!shiftKey && this.calendarValue) {
14425
+ this.acceptButton.focus();
14426
+ }
14427
+ break;
14428
+ case this.dateTabButton:
14429
+ if (this.calendarValue) {
14430
+ this.acceptButton.focus();
14431
+ }
14432
+ else if (!this.calendarValue && this.cancelButton) {
14433
+ this.cancelButtonElement.focus();
14434
+ }
14435
+ else if (!this.calendarValue && !this.cancelButton) {
14436
+ if (this.activeTab === 'date') {
14437
+ this.calendar.monthView.list.nativeElement.focus();
14438
+ }
14439
+ else {
14440
+ this.timeSelector.focus();
14441
+ }
14442
+ }
14443
+ break;
14444
+ default:
14445
+ break;
14337
14446
  }
14338
14447
  }
14339
14448
  /**
@@ -14518,6 +14627,15 @@ class DateTimePickerComponent {
14518
14627
  this.renderer.setAttribute(this.inputElement, attributeNames.ariaControls, this.popupUID);
14519
14628
  this.setAriaActiveDescendant();
14520
14629
  this.popupRef.popupAnchorViewportLeave.subscribe(() => this.handleCancel());
14630
+ if (this.calendar.type === 'infinite') {
14631
+ this.subscriptions.add(fromEvent(this.calendar.monthView.list.nativeElement, 'keydown').subscribe((event) => {
14632
+ const { keyCode, shiftKey } = event;
14633
+ if (keyCode === Keys$1.Tab && !shiftKey && !this.cancelButton && !this.calendarValue) {
14634
+ event.preventDefault();
14635
+ this.dateTabButton.focus();
14636
+ }
14637
+ }));
14638
+ }
14521
14639
  }
14522
14640
  setAriaActiveDescendant() {
14523
14641
  const focusedCellChangeEvent = this.calendar.type === 'infinite' ?
@@ -14826,7 +14944,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14826
14944
  [attr.aria-label]="localization.get('dateTabLabel')"
14827
14945
  [kendoEventsOutsideAngular]="{
14828
14946
  click: changeActiveTab.bind(this, 'date'),
14829
- keydown: handleBackTabOut
14947
+ 'keydown.shift.tab': handleTab
14830
14948
  }"
14831
14949
  [scope]="this"
14832
14950
  >
@@ -14899,6 +15017,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14899
15017
  [disabled]="disableTimeSelector"
14900
15018
  [isAdaptiveEnabled]="isAdaptiveModeEnabled"
14901
15019
  [isDateTimePicker]="true"
15020
+ (tabOutLastPart)="onTabOutLastPart()"
14902
15021
  >
14903
15022
  <kendo-timeselector-messages
14904
15023
  [acceptLabel]="localization.get('acceptLabel')"
@@ -14921,7 +15040,6 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14921
15040
  *ngIf="!isAdaptive"
14922
15041
  class="k-datetime-footer k-action-buttons k-actions k-hstack k-justify-content-stretch"
14923
15042
  [kendoEventsOutsideAngular]="{
14924
- keydown: handleTabOut,
14925
15043
  focusin: handleFocus,
14926
15044
  focusout: handleBlur
14927
15045
  }"
@@ -14935,7 +15053,8 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14935
15053
  [attr.title]="localization.get('cancelLabel')"
14936
15054
  [attr.aria-label]="localization.get('cancelLabel')"
14937
15055
  [kendoEventsOutsideAngular]="{
14938
- click: handleCancel
15056
+ click: handleCancel,
15057
+ 'keydown.tab': handleTab
14939
15058
  }"
14940
15059
  [scope]="this"
14941
15060
  >
@@ -14949,7 +15068,8 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14949
15068
  [attr.aria-label]="localization.get('acceptLabel')"
14950
15069
  [disabled]="!calendarValue"
14951
15070
  [kendoEventsOutsideAngular]="{
14952
- click: handleAccept
15071
+ click: handleAccept,
15072
+ 'keydown.tab': handleTab
14953
15073
  }"
14954
15074
  [scope]="this"
14955
15075
  >
@@ -14958,7 +15078,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
14958
15078
  </div>
14959
15079
  </div>
14960
15080
  </ng-template>
14961
- `, isInline: true, components: [{ type: DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrect", "incompleteDateValidation", "twoDigitYearMax", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { type: i7$1.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i8.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: i9.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { type: i10.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: CalendarComponent, selector: "kendo-calendar", inputs: ["id", "focusedDate", "min", "max", "rangeValidation", "selection", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "size"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { type: CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { type: TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject"], exportAs: ["kendo-timeselector"] }, { type: TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoDateTimePickerLocalizedMessages]" }, { type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15081
+ `, isInline: true, components: [{ type: DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrect", "incompleteDateValidation", "twoDigitYearMax", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { type: i7$1.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i8.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: i9.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { type: i10.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: CalendarComponent, selector: "kendo-calendar", inputs: ["id", "focusedDate", "min", "max", "rangeValidation", "selection", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "size"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { type: CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { type: TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject", "tabOutLastPart"], exportAs: ["kendo-timeselector"] }, { type: TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoDateTimePickerLocalizedMessages]" }, { type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14962
15082
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateTimePickerComponent, decorators: [{
14963
15083
  type: Component,
14964
15084
  args: [{
@@ -15184,7 +15304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15184
15304
  [attr.aria-label]="localization.get('dateTabLabel')"
15185
15305
  [kendoEventsOutsideAngular]="{
15186
15306
  click: changeActiveTab.bind(this, 'date'),
15187
- keydown: handleBackTabOut
15307
+ 'keydown.shift.tab': handleTab
15188
15308
  }"
15189
15309
  [scope]="this"
15190
15310
  >
@@ -15257,6 +15377,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15257
15377
  [disabled]="disableTimeSelector"
15258
15378
  [isAdaptiveEnabled]="isAdaptiveModeEnabled"
15259
15379
  [isDateTimePicker]="true"
15380
+ (tabOutLastPart)="onTabOutLastPart()"
15260
15381
  >
15261
15382
  <kendo-timeselector-messages
15262
15383
  [acceptLabel]="localization.get('acceptLabel')"
@@ -15279,7 +15400,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15279
15400
  *ngIf="!isAdaptive"
15280
15401
  class="k-datetime-footer k-action-buttons k-actions k-hstack k-justify-content-stretch"
15281
15402
  [kendoEventsOutsideAngular]="{
15282
- keydown: handleTabOut,
15283
15403
  focusin: handleFocus,
15284
15404
  focusout: handleBlur
15285
15405
  }"
@@ -15293,7 +15413,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15293
15413
  [attr.title]="localization.get('cancelLabel')"
15294
15414
  [attr.aria-label]="localization.get('cancelLabel')"
15295
15415
  [kendoEventsOutsideAngular]="{
15296
- click: handleCancel
15416
+ click: handleCancel,
15417
+ 'keydown.tab': handleTab
15297
15418
  }"
15298
15419
  [scope]="this"
15299
15420
  >
@@ -15307,7 +15428,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15307
15428
  [attr.aria-label]="localization.get('acceptLabel')"
15308
15429
  [disabled]="!calendarValue"
15309
15430
  [kendoEventsOutsideAngular]="{
15310
- click: handleAccept
15431
+ click: handleAccept,
15432
+ 'keydown.tab': handleTab
15311
15433
  }"
15312
15434
  [scope]="this"
15313
15435
  >