@progress/kendo-angular-dateinputs 16.0.0-develop.12 → 16.0.0-develop.14

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 (33) hide show
  1. package/calendar/calendar.component.d.ts +42 -8
  2. package/calendar/horizontal-view-list.component.d.ts +4 -3
  3. package/calendar/models/cell-context.interface.d.ts +4 -0
  4. package/calendar/models/selection-range.interface.d.ts +2 -2
  5. package/calendar/models/selection.d.ts +11 -1
  6. package/calendar/multiview-calendar.component.d.ts +40 -8
  7. package/calendar/view-list.component.d.ts +7 -1
  8. package/calendar/view.component.d.ts +2 -1
  9. package/common/utils.d.ts +4 -0
  10. package/daterange/date-range-popup.component.d.ts +15 -2
  11. package/datetimepicker/datetimepicker.component.d.ts +5 -0
  12. package/esm2020/calendar/calendar.component.mjs +233 -45
  13. package/esm2020/calendar/horizontal-view-list.component.mjs +9 -5
  14. package/esm2020/calendar/models/selection.mjs +34 -1
  15. package/esm2020/calendar/multiview-calendar.component.mjs +226 -45
  16. package/esm2020/calendar/services/century-view.service.mjs +26 -5
  17. package/esm2020/calendar/services/decade-view.service.mjs +26 -5
  18. package/esm2020/calendar/services/month-view.service.mjs +26 -5
  19. package/esm2020/calendar/services/year-view.service.mjs +26 -5
  20. package/esm2020/calendar/view-list.component.mjs +20 -3
  21. package/esm2020/calendar/view.component.mjs +6 -3
  22. package/esm2020/common/utils.mjs +4 -0
  23. package/esm2020/datepicker/datepicker.component.mjs +1 -1
  24. package/esm2020/daterange/date-range-popup.component.mjs +64 -11
  25. package/esm2020/daterange/date-range.component.mjs +1 -1
  26. package/esm2020/datetimepicker/datetimepicker.component.mjs +14 -2
  27. package/esm2020/package-metadata.mjs +2 -2
  28. package/esm2020/timepicker/timepicker.component.mjs +1 -1
  29. package/esm2020/timepicker/timeselector.component.mjs +22 -7
  30. package/fesm2015/progress-kendo-angular-dateinputs.mjs +748 -142
  31. package/fesm2020/progress-kendo-angular-dateinputs.mjs +736 -141
  32. package/package.json +8 -8
  33. package/timepicker/timeselector.component.d.ts +2 -1
@@ -50,7 +50,7 @@ export class YearViewService {
50
50
  return range(0, count).map(i => addYears(start, i));
51
51
  }
52
52
  data(options) {
53
- const { cellUID, focusedDate, isActiveView, max, min, selectedDates, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;
53
+ const { cellUID, focusedDate, isActiveView, max, min, selectedDates, selectionRange = EMPTY_SELECTIONRANGE, viewDate, allowReverse } = options;
54
54
  if (!viewDate) {
55
55
  return EMPTY_DATA;
56
56
  }
@@ -68,10 +68,30 @@ export class YearViewService {
68
68
  if (!this.isInRange(cellDate, min, max) || changedYear) {
69
69
  return null;
70
70
  }
71
- const isRangeStart = this.isEqual(cellDate, selectionRange.start);
72
- const isRangeEnd = this.isEqual(cellDate, selectionRange.end);
71
+ let isRangeStart = false;
72
+ let isRangeEnd = false;
73
+ if (allowReverse) {
74
+ if ((this.isEqual(cellDate, selectionRange.start) && selectionRange.start <= selectionRange.end) ||
75
+ (this.isEqual(cellDate, selectionRange.end) && selectionRange.end <= selectionRange.start)) {
76
+ isRangeStart = true;
77
+ }
78
+ if ((this.isEqual(cellDate, selectionRange.start) && selectionRange.start >= selectionRange.end) ||
79
+ (this.isEqual(cellDate, selectionRange.end) && selectionRange.end >= selectionRange.start)) {
80
+ isRangeEnd = true;
81
+ }
82
+ }
83
+ else {
84
+ isRangeStart = this.isEqual(cellDate, selectionRange.start);
85
+ isRangeEnd = this.isEqual(cellDate, selectionRange.end);
86
+ }
73
87
  const isInMiddle = !isRangeStart && !isRangeEnd;
74
- const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);
88
+ let isRangeMid;
89
+ if (allowReverse) {
90
+ isRangeMid = isInMiddle && (isInSelectionRange(cellDate, selectionRange) || isInSelectionRange(cellDate, { start: selectionRange.end, end: selectionRange.start }));
91
+ }
92
+ else {
93
+ isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);
94
+ }
75
95
  return {
76
96
  formattedValue: months[cellDate.getMonth()],
77
97
  id: `${cellUID}${cellDate.getTime()}`,
@@ -85,7 +105,8 @@ export class YearViewService {
85
105
  isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),
86
106
  isToday: this.isEqual(cellDate, today),
87
107
  title: this.cellTitle(cellDate),
88
- value: cellDate
108
+ value: cellDate,
109
+ allowReverse: allowReverse
89
110
  };
90
111
  });
91
112
  });
@@ -44,6 +44,7 @@ export class ViewListComponent {
44
44
  this.disabled = false;
45
45
  this.showFooter = false;
46
46
  this.weekDaysFormat = 'short';
47
+ this.cellEnter = new EventEmitter();
47
48
  this.cellClick = new EventEmitter();
48
49
  this.weekNumberCellClick = new EventEmitter();
49
50
  this.activeDateChange = new EventEmitter();
@@ -193,7 +194,7 @@ export class ViewListComponent {
193
194
  }
194
195
  }
195
196
  ViewListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ViewListComponent, deps: [{ token: i1.BusViewService }, { token: i0.ChangeDetectorRef }, { token: i2.IntlService }, { token: i3.CalendarDOMService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
196
- ViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ViewListComponent, selector: "kendo-calendar-viewlist", inputs: { cellTemplateRef: "cellTemplateRef", weekNumberTemplateRef: "weekNumberTemplateRef", headerTitleTemplateRef: "headerTitleTemplateRef", headerTemplateRef: "headerTemplateRef", footerTemplateRef: "footerTemplateRef", showOtherMonthDays: "showOtherMonthDays", activeView: "activeView", cellUID: "cellUID", focusedDate: "focusedDate", isActive: "isActive", min: "min", max: "max", selectedDates: "selectedDates", tabIndex: "tabIndex", disabled: "disabled", id: "id", showFooter: "showFooter", weekDaysFormat: "weekDaysFormat", weekNumber: "weekNumber" }, outputs: { cellClick: "cellClick", weekNumberCellClick: "weekNumberCellClick", activeDateChange: "activeDateChange", todayButtonClick: "todayButtonClick", pageChange: "pageChange", focusCalendar: "focusCalendar", blurCalendar: "blurCalendar", focusedCellChange: "focusedCellChange" }, host: { properties: { "class.k-vstack": "this.getComponentClass", "class.k-calendar-view": "this.getComponentClass", "class.k-calendar-monthview": "this.getComponentMonthClass", "class.k-calendar-yearview": "this.getComponentYearClass", "class.k-calendar-decadeview": "this.getComponentDecadeClass", "class.k-calendar-centuryview": "this.getComponentCenturyClass" } }, viewQueries: [{ propertyName: "virtualization", first: true, predicate: VirtualizationComponent, descendants: true }, { propertyName: "headerComponent", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
197
+ ViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ViewListComponent, selector: "kendo-calendar-viewlist", inputs: { allowReverse: "allowReverse", cellTemplateRef: "cellTemplateRef", weekNumberTemplateRef: "weekNumberTemplateRef", headerTitleTemplateRef: "headerTitleTemplateRef", headerTemplateRef: "headerTemplateRef", footerTemplateRef: "footerTemplateRef", showOtherMonthDays: "showOtherMonthDays", activeView: "activeView", cellUID: "cellUID", focusedDate: "focusedDate", isActive: "isActive", min: "min", max: "max", selectedDates: "selectedDates", tabIndex: "tabIndex", disabled: "disabled", id: "id", showFooter: "showFooter", weekDaysFormat: "weekDaysFormat", activeRangeEnd: "activeRangeEnd", selectionRange: "selectionRange", weekNumber: "weekNumber" }, outputs: { cellEnter: "cellEnter", cellClick: "cellClick", weekNumberCellClick: "weekNumberCellClick", activeDateChange: "activeDateChange", todayButtonClick: "todayButtonClick", pageChange: "pageChange", focusCalendar: "focusCalendar", blurCalendar: "blurCalendar", focusedCellChange: "focusedCellChange" }, host: { properties: { "class.k-vstack": "this.getComponentClass", "class.k-calendar-view": "this.getComponentClass", "class.k-calendar-monthview": "this.getComponentMonthClass", "class.k-calendar-yearview": "this.getComponentYearClass", "class.k-calendar-decadeview": "this.getComponentDecadeClass", "class.k-calendar-centuryview": "this.getComponentCenturyClass" } }, viewQueries: [{ propertyName: "virtualization", first: true, predicate: VirtualizationComponent, descendants: true }, { propertyName: "headerComponent", first: true, predicate: HeaderComponent, descendants: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
197
198
  <kendo-calendar-header
198
199
  [currentDate]="activeDate"
199
200
  [min]="min"
@@ -240,6 +241,9 @@ ViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
240
241
  <tbody class="k-calendar-tbody"
241
242
  *kFor="let date of dates"
242
243
  kendoCalendarView
244
+ [allowReverse]="allowReverse"
245
+ [activeRangeEnd]="activeRangeEnd"
246
+ [selectionRange]="selectionRange"
243
247
  [showOtherMonthDays]="showOtherMonthDays"
244
248
  [headerTitle]="headerTitle"
245
249
  role="rowgroup"
@@ -256,6 +260,7 @@ ViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
256
260
  (cellClick)="cellClick.emit($event)"
257
261
  (weekNumberCellClick)="weekNumberCellClick.emit($event)"
258
262
  (focusedCellId)="focusedCellChange.emit($event)"
263
+ (cellEnter)="cellEnter.emit($event)"
259
264
  ></tbody>
260
265
  </table>
261
266
  </kendo-virtualization>
@@ -265,7 +270,7 @@ ViewListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
265
270
  [activeViewValue]="activeViewValue"
266
271
  [currentDate]="activeDate">
267
272
  </kendo-calendar-footer>
268
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.KForOf, selector: "[kFor][kForOf]", inputs: ["kForOf", "kForTrackBy", "kForTemplate"] }, { kind: "component", type: i6.HeaderComponent, selector: "kendo-calendar-header", inputs: ["activeView", "currentDate", "min", "max", "rangeLength", "titleTemplateRef", "headerTemplateRef", "isPrevDisabled", "isNextDisabled", "showNavigationButtons", "orientation", "id"], outputs: ["todayButtonClick", "prevButtonClick", "nextButtonClick"] }, { kind: "component", type: i7.FooterComponent, selector: "kendo-calendar-footer", inputs: ["footerTemplateRef", "activeViewValue", "currentDate"] }, { kind: "component", type: i8.ViewComponent, selector: "[kendoCalendarView]", inputs: ["showOtherMonthDays", "direction", "isActive", "activeView", "cellUID", "focusedDate", "viewDate", "activeRangeEnd", "selectionRange", "min", "max", "selectedDates", "weekNumber", "viewIndex", "templateRef", "weekNumberTemplateRef", "headerTitle"], outputs: ["cellClick", "weekNumberCellClick", "cellEnter", "cellLeave", "focusedCellId"] }, { kind: "component", type: i9.VirtualizationComponent, selector: "kendo-virtualization", inputs: ["direction", "itemHeight", "itemWidth", "topOffset", "bottomOffset", "maxScrollDifference", "scrollOffsetSize", "scrollDuration", "skip", "take", "total"], outputs: ["activeIndexChange", "pageChange", "scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
273
+ `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.KForOf, selector: "[kFor][kForOf]", inputs: ["kForOf", "kForTrackBy", "kForTemplate"] }, { kind: "component", type: i6.HeaderComponent, selector: "kendo-calendar-header", inputs: ["activeView", "currentDate", "min", "max", "rangeLength", "titleTemplateRef", "headerTemplateRef", "isPrevDisabled", "isNextDisabled", "showNavigationButtons", "orientation", "id"], outputs: ["todayButtonClick", "prevButtonClick", "nextButtonClick"] }, { kind: "component", type: i7.FooterComponent, selector: "kendo-calendar-footer", inputs: ["footerTemplateRef", "activeViewValue", "currentDate"] }, { kind: "component", type: i8.ViewComponent, selector: "[kendoCalendarView]", inputs: ["allowReverse", "showOtherMonthDays", "direction", "isActive", "activeView", "cellUID", "focusedDate", "viewDate", "activeRangeEnd", "selectionRange", "min", "max", "selectedDates", "weekNumber", "viewIndex", "templateRef", "weekNumberTemplateRef", "headerTitle"], outputs: ["cellClick", "weekNumberCellClick", "cellEnter", "cellLeave", "focusedCellId"] }, { kind: "component", type: i9.VirtualizationComponent, selector: "kendo-virtualization", inputs: ["direction", "itemHeight", "itemWidth", "topOffset", "bottomOffset", "maxScrollDifference", "scrollOffsetSize", "scrollDuration", "skip", "take", "total"], outputs: ["activeIndexChange", "pageChange", "scrollChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
269
274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ViewListComponent, decorators: [{
270
275
  type: Component,
271
276
  args: [{
@@ -318,6 +323,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
318
323
  <tbody class="k-calendar-tbody"
319
324
  *kFor="let date of dates"
320
325
  kendoCalendarView
326
+ [allowReverse]="allowReverse"
327
+ [activeRangeEnd]="activeRangeEnd"
328
+ [selectionRange]="selectionRange"
321
329
  [showOtherMonthDays]="showOtherMonthDays"
322
330
  [headerTitle]="headerTitle"
323
331
  role="rowgroup"
@@ -334,6 +342,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
334
342
  (cellClick)="cellClick.emit($event)"
335
343
  (weekNumberCellClick)="weekNumberCellClick.emit($event)"
336
344
  (focusedCellId)="focusedCellChange.emit($event)"
345
+ (cellEnter)="cellEnter.emit($event)"
337
346
  ></tbody>
338
347
  </table>
339
348
  </kendo-virtualization>
@@ -345,7 +354,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
345
354
  </kendo-calendar-footer>
346
355
  `
347
356
  }]
348
- }], ctorParameters: function () { return [{ type: i1.BusViewService }, { type: i0.ChangeDetectorRef }, { type: i2.IntlService }, { type: i3.CalendarDOMService }, { type: i0.Renderer2 }]; }, propDecorators: { cellTemplateRef: [{
357
+ }], ctorParameters: function () { return [{ type: i1.BusViewService }, { type: i0.ChangeDetectorRef }, { type: i2.IntlService }, { type: i3.CalendarDOMService }, { type: i0.Renderer2 }]; }, propDecorators: { allowReverse: [{
358
+ type: Input
359
+ }], cellTemplateRef: [{
349
360
  type: Input
350
361
  }], weekNumberTemplateRef: [{
351
362
  type: Input
@@ -381,8 +392,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
381
392
  type: Input
382
393
  }], weekDaysFormat: [{
383
394
  type: Input
395
+ }], activeRangeEnd: [{
396
+ type: Input
397
+ }], selectionRange: [{
398
+ type: Input
384
399
  }], weekNumber: [{
385
400
  type: Input
401
+ }], cellEnter: [{
402
+ type: Output
386
403
  }], cellClick: [{
387
404
  type: Output
388
405
  }], weekNumberCellClick: [{
@@ -168,7 +168,8 @@ export class ViewComponent {
168
168
  selectionRange: this.selectionRange,
169
169
  viewDate: viewDate,
170
170
  isDateDisabled: this.disabledDatesService.isDateDisabled,
171
- direction: this.direction
171
+ direction: this.direction,
172
+ allowReverse: this.allowReverse
172
173
  });
173
174
  }
174
175
  intlChange() {
@@ -234,7 +235,7 @@ export class ViewComponent {
234
235
  }
235
236
  }
236
237
  ViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ViewComponent, deps: [{ token: i1.BusViewService }, { token: i2.IntlService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i3.DisabledDatesService }], target: i0.ɵɵFactoryTarget.Component });
237
- ViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ViewComponent, selector: "[kendoCalendarView]", inputs: { showOtherMonthDays: "showOtherMonthDays", direction: "direction", isActive: "isActive", activeView: "activeView", cellUID: "cellUID", focusedDate: "focusedDate", viewDate: "viewDate", activeRangeEnd: "activeRangeEnd", selectionRange: "selectionRange", min: "min", max: "max", selectedDates: "selectedDates", weekNumber: "weekNumber", viewIndex: "viewIndex", templateRef: "templateRef", weekNumberTemplateRef: "weekNumberTemplateRef", headerTitle: "headerTitle" }, outputs: { cellClick: "cellClick", weekNumberCellClick: "weekNumberCellClick", cellEnter: "cellEnter", cellLeave: "cellLeave", focusedCellId: "focusedCellId" }, usesOnChanges: true, ngImport: i0, template: `
238
+ ViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ViewComponent, selector: "[kendoCalendarView]", inputs: { allowReverse: "allowReverse", showOtherMonthDays: "showOtherMonthDays", direction: "direction", isActive: "isActive", activeView: "activeView", cellUID: "cellUID", focusedDate: "focusedDate", viewDate: "viewDate", activeRangeEnd: "activeRangeEnd", selectionRange: "selectionRange", min: "min", max: "max", selectedDates: "selectedDates", weekNumber: "weekNumber", viewIndex: "viewIndex", templateRef: "templateRef", weekNumberTemplateRef: "weekNumberTemplateRef", headerTitle: "headerTitle" }, outputs: { cellClick: "cellClick", weekNumberCellClick: "weekNumberCellClick", cellEnter: "cellEnter", cellLeave: "cellLeave", focusedCellId: "focusedCellId" }, usesOnChanges: true, ngImport: i0, template: `
238
239
  <ng-template #emptyCell><td class="k-empty k-calendar-td" role="gridcell">&nbsp;</td></ng-template>
239
240
  <tr *ngIf="!isHorizontal()" class="k-calendar-tr" role="row" [attr.aria-hidden]="ariaHidden"><th class="k-calendar-caption" scope="col" [colSpan]="colSpan">{{title}}</th></tr>
240
241
  <tr *kFor="let row of data; let rowIndex = index" class="k-calendar-tr" role="row">
@@ -336,7 +337,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
336
337
  </tr>
337
338
  `
338
339
  }]
339
- }], ctorParameters: function () { return [{ type: i1.BusViewService }, { type: i2.IntlService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i3.DisabledDatesService }]; }, propDecorators: { showOtherMonthDays: [{
340
+ }], ctorParameters: function () { return [{ type: i1.BusViewService }, { type: i2.IntlService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i3.DisabledDatesService }]; }, propDecorators: { allowReverse: [{
341
+ type: Input
342
+ }], showOtherMonthDays: [{
340
343
  type: Input
341
344
  }], direction: [{
342
345
  type: Input
@@ -19,6 +19,10 @@ export const currentFocusTarget = (blurArgs) => blurArgs.relatedTarget || docume
19
19
  * @hidden
20
20
  */
21
21
  export const isPresent = (value) => value !== undefined && value !== null;
22
+ /**
23
+ * @hidden
24
+ */
25
+ export const isNullOrDate = (value) => value === null || value instanceof Date;
22
26
  /**
23
27
  * @hidden
24
28
  */
@@ -1249,7 +1249,7 @@ DatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
1249
1249
  </kendo-calendar-messages>
1250
1250
  </kendo-calendar>
1251
1251
  </ng-template>
1252
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "isRequired", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "allowCaretMode", "autoFill", "incompleteDateValidation", "twoDigitYearMax", "enableMouseWheel", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { kind: "component", type: i7.CalendarComponent, selector: "kendo-calendar", inputs: ["showOtherMonthDays", "id", "focusedDate", "min", "max", "rangeValidation", "weekDaysFormat", "footer", "selection", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "navigationItemTemplate", "size"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { kind: "component", type: i8.CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { kind: "directive", type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i10.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i11.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i11.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i12.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i13.DatePickerLocalizedMessagesDirective, selector: "[kendoDatePickerLocalizedMessages]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1252
+ `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "isRequired", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "allowCaretMode", "autoFill", "incompleteDateValidation", "twoDigitYearMax", "enableMouseWheel", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { kind: "component", type: i7.CalendarComponent, selector: "kendo-calendar", inputs: ["showOtherMonthDays", "id", "focusedDate", "min", "max", "rangeValidation", "weekDaysFormat", "footer", "selection", "allowReverse", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "navigationItemTemplate", "size", "activeRangeEnd"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { kind: "component", type: i8.CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { kind: "directive", type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i10.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i11.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i11.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i12.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i13.DatePickerLocalizedMessagesDirective, selector: "[kendoDatePickerLocalizedMessages]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1253
1253
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DatePickerComponent, decorators: [{
1254
1254
  type: Component,
1255
1255
  args: [{
@@ -26,8 +26,7 @@ import * as i5 from "../calendar/multiview-calendar.component";
26
26
  import * as i6 from "@progress/kendo-angular-navigation";
27
27
  import * as i7 from "@progress/kendo-angular-common";
28
28
  import * as i8 from "@progress/kendo-angular-buttons";
29
- import * as i9 from "./date-range-selection.directive";
30
- import * as i10 from "./localization/daterange-popup-localized-messages.directive";
29
+ import * as i9 from "./localization/daterange-popup-localized-messages.directive";
31
30
  /**
32
31
  * Represents the Kendo UI DateRangePopup component for Angular.
33
32
  *
@@ -56,6 +55,13 @@ export class DateRangePopupComponent {
56
55
  this.localization = localization;
57
56
  this.cdr = cdr;
58
57
  this.rtl = rtl;
58
+ /**
59
+ * Allows reverse selection when using `range` selection.
60
+ * If `allowReverse` is set to `true`, the component skips the validation of whether the start date is after the end date.
61
+ *
62
+ * @default false
63
+ */
64
+ this.allowReverse = false;
59
65
  /**
60
66
  * Controls the popup animation.
61
67
  * By default, the opening and closing animations are enabled.
@@ -204,6 +210,14 @@ export class DateRangePopupComponent {
204
210
  this.actionSheet.titleId = changes.first?.headerId;
205
211
  this.cdr.detectChanges();
206
212
  }));
213
+ this.calendarSubscriptions.add(this.dateRangeService.startInput$?.value?.valueChange.subscribe((res) => {
214
+ if (!res && this.dateRangeService.selectionRange.end) {
215
+ this.calendar.shouldHoverWhenNoStart = true;
216
+ }
217
+ else {
218
+ this.calendar.shouldHoverWhenNoStart = false;
219
+ }
220
+ }));
207
221
  if (isWindowAvailable()) {
208
222
  this.zone.runOutsideAngular(() => this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this)));
209
223
  }
@@ -227,6 +241,19 @@ export class DateRangePopupComponent {
227
241
  this.windowBlurSubscription.unsubscribe();
228
242
  }
229
243
  }
244
+ /**
245
+ * @hidden
246
+ *
247
+ */
248
+ onRangeSelectionChange(rangeSelection) {
249
+ this.dateRangeService.setActiveRangeEnd(rangeSelection.activeRangeEnd);
250
+ if (!this.isAdaptive) {
251
+ this.dateRangeService.setRange(rangeSelection.selectionRange);
252
+ }
253
+ else {
254
+ this._rangeSelection = rangeSelection.selectionRange;
255
+ }
256
+ }
230
257
  /**
231
258
  * Opens the popup component and focuses the calendar.
232
259
  */
@@ -294,7 +321,7 @@ export class DateRangePopupComponent {
294
321
  * @hidden
295
322
  */
296
323
  handleAccept() {
297
- this.dateRangeSelectionDirective.setRange(this.dateRangeService.selectionRange);
324
+ this.dateRangeService.setRange(this._rangeSelection);
298
325
  this.show = false;
299
326
  }
300
327
  /**
@@ -474,7 +501,7 @@ export class DateRangePopupComponent {
474
501
  }
475
502
  }
476
503
  DateRangePopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DateRangePopupComponent, deps: [{ token: i1.PopupService }, { token: i2.DateRangeService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i3.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: RTL, optional: true }], target: i0.ɵɵFactoryTarget.Component });
477
- DateRangePopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DateRangePopupComponent, selector: "kendo-daterange-popup", inputs: { animate: "animate", anchor: "anchor", anchorAlign: "anchorAlign", appendTo: "appendTo", collision: "collision", popupAlign: "popupAlign", margin: "margin", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle" }, outputs: { open: "open", close: "close", onBlur: "blur", onFocus: "focus", cancel: "cancel" }, providers: [
504
+ DateRangePopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DateRangePopupComponent, selector: "kendo-daterange-popup", inputs: { allowReverse: "allowReverse", animate: "animate", anchor: "anchor", anchorAlign: "anchorAlign", appendTo: "appendTo", collision: "collision", popupAlign: "popupAlign", margin: "margin", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle" }, outputs: { open: "open", close: "close", onBlur: "blur", onFocus: "focus", cancel: "cancel" }, providers: [
478
505
  LocalizationService,
479
506
  {
480
507
  provide: L10N_PREFIX,
@@ -497,7 +524,15 @@ DateRangePopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
497
524
  </ng-container>
498
525
  <ng-container #container></ng-container>
499
526
  <ng-template #defaultTemplate>
500
- <kendo-multiviewcalendar kendoDateRangeSelection (onClosePopup)="closePopup($event)" (onTabPress)="handleTab($event)" (onShiftTabPress)="handleShiftTab($event)"></kendo-multiviewcalendar>
527
+ <kendo-multiviewcalendar
528
+ [allowReverse]="allowReverse"
529
+ selection="range"
530
+ [value]="dateRangeService.selectionRange"
531
+ (onClosePopup)="closePopup($event)"
532
+ (onTabPress)="handleTab($event)"
533
+ (onShiftTabPress)="handleShiftTab($event)"
534
+ (rangeSelectionChange)="onRangeSelectionChange($event)"
535
+ ></kendo-multiviewcalendar>
501
536
  </ng-template>
502
537
 
503
538
  <kendo-actionsheet
@@ -538,8 +573,12 @@ DateRangePopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
538
573
  <kendo-multiviewcalendar
539
574
  class="k-calendar-lg"
540
575
  orientation="vertical"
541
- kendoDateRangeSelection
542
- [shouldSetRange]="false">
576
+ [allowReverse]="allowReverse"
577
+ [focusedDate]="dateRangeService.focusedDate"
578
+ [value]="dateRangeService.selectionRange"
579
+ selection="range"
580
+ (rangeSelectionChange)="onRangeSelectionChange($event)"
581
+ >
543
582
  </kendo-multiviewcalendar>
544
583
  </div>
545
584
  </div>
@@ -567,7 +606,7 @@ DateRangePopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
567
606
  </div>
568
607
  </ng-template>
569
608
  </kendo-actionsheet>
570
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MultiViewCalendarComponent, selector: "kendo-multiviewcalendar", inputs: ["showOtherMonthDays", "showCalendarHeader", "id", "focusedDate", "footer", "min", "max", "rangeValidation", "disabledDatesRangeValidation", "selection", "value", "disabled", "tabindex", "tabIndex", "weekDaysFormat", "isActive", "disabledDates", "activeView", "bottomView", "topView", "showViewHeader", "animateNavigation", "weekNumber", "activeRangeEnd", "selectionRange", "views", "orientation", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "footerTemplate", "headerTitleTemplate", "headerTemplate"], outputs: ["activeViewChange", "navigate", "cellEnter", "cellLeave", "valueChange", "blur", "focus", "focusCalendar", "onClosePopup", "onTabPress", "onShiftTabPress"], exportAs: ["kendo-multiviewcalendar"] }, { kind: "component", type: i6.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i6.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i7.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i9.DateRangeSelectionDirective, selector: "[kendoDateRangeSelection]", inputs: ["autoCorrectOn", "selectionRange", "activeRangeEnd", "shouldSetRange"], outputs: ["activeRangeEndChange", "selectionRangeChange"] }, { kind: "directive", type: i10.DateRangePopupLocalizedMessagesDirective, selector: "[kendoDateRangePopupLocalizedMessages]" }] });
609
+ `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MultiViewCalendarComponent, selector: "kendo-multiviewcalendar", inputs: ["showOtherMonthDays", "showCalendarHeader", "id", "focusedDate", "footer", "min", "max", "rangeValidation", "disabledDatesRangeValidation", "selection", "allowReverse", "value", "disabled", "tabindex", "tabIndex", "weekDaysFormat", "isActive", "disabledDates", "activeView", "bottomView", "topView", "showViewHeader", "animateNavigation", "weekNumber", "activeRangeEnd", "selectionRange", "views", "orientation", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "footerTemplate", "headerTitleTemplate", "headerTemplate"], outputs: ["activeViewChange", "navigate", "cellEnter", "cellLeave", "valueChange", "rangeSelectionChange", "blur", "focus", "focusCalendar", "onClosePopup", "onTabPress", "onShiftTabPress"], exportAs: ["kendo-multiviewcalendar"] }, { kind: "component", type: i6.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i6.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i7.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i9.DateRangePopupLocalizedMessagesDirective, selector: "[kendoDateRangePopupLocalizedMessages]" }] });
571
610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DateRangePopupComponent, decorators: [{
572
611
  type: Component,
573
612
  args: [{
@@ -597,7 +636,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
597
636
  </ng-container>
598
637
  <ng-container #container></ng-container>
599
638
  <ng-template #defaultTemplate>
600
- <kendo-multiviewcalendar kendoDateRangeSelection (onClosePopup)="closePopup($event)" (onTabPress)="handleTab($event)" (onShiftTabPress)="handleShiftTab($event)"></kendo-multiviewcalendar>
639
+ <kendo-multiviewcalendar
640
+ [allowReverse]="allowReverse"
641
+ selection="range"
642
+ [value]="dateRangeService.selectionRange"
643
+ (onClosePopup)="closePopup($event)"
644
+ (onTabPress)="handleTab($event)"
645
+ (onShiftTabPress)="handleShiftTab($event)"
646
+ (rangeSelectionChange)="onRangeSelectionChange($event)"
647
+ ></kendo-multiviewcalendar>
601
648
  </ng-template>
602
649
 
603
650
  <kendo-actionsheet
@@ -638,8 +685,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
638
685
  <kendo-multiviewcalendar
639
686
  class="k-calendar-lg"
640
687
  orientation="vertical"
641
- kendoDateRangeSelection
642
- [shouldSetRange]="false">
688
+ [allowReverse]="allowReverse"
689
+ [focusedDate]="dateRangeService.focusedDate"
690
+ [value]="dateRangeService.selectionRange"
691
+ selection="range"
692
+ (rangeSelectionChange)="onRangeSelectionChange($event)"
693
+ >
643
694
  </kendo-multiviewcalendar>
644
695
  </div>
645
696
  </div>
@@ -695,6 +746,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
695
746
  }], contentCalendar: [{
696
747
  type: ContentChildren,
697
748
  args: [MultiViewCalendarComponent]
749
+ }], allowReverse: [{
750
+ type: Input
698
751
  }], animate: [{
699
752
  type: Input
700
753
  }], anchor: [{
@@ -71,7 +71,7 @@ DateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", versi
71
71
  DateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: DateRangeComponent, selector: "kendo-daterange", host: { listeners: { "keydown": "keydown($event)" }, properties: { "class.k-daterangepicker": "this.wrapperClass" } }, providers: [DateRangeService], queries: [{ propertyName: "contentPopup", predicate: DateRangePopupComponent }], ngImport: i0, template: `
72
72
  <ng-content></ng-content>
73
73
  <kendo-daterange-popup *ngIf="showDefault"></kendo-daterange-popup>
74
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DateRangePopupComponent, selector: "kendo-daterange-popup", inputs: ["animate", "anchor", "anchorAlign", "appendTo", "collision", "popupAlign", "margin", "adaptiveMode", "title", "subtitle"], outputs: ["open", "close", "blur", "focus", "cancel"], exportAs: ["kendo-daterange-popup"] }] });
74
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DateRangePopupComponent, selector: "kendo-daterange-popup", inputs: ["allowReverse", "animate", "anchor", "anchorAlign", "appendTo", "collision", "popupAlign", "margin", "adaptiveMode", "title", "subtitle"], outputs: ["open", "close", "blur", "focus", "cancel"], exportAs: ["kendo-daterange-popup"] }] });
75
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DateRangeComponent, decorators: [{
76
76
  type: Component,
77
77
  args: [{
@@ -63,6 +63,7 @@ const TWO_DIGIT_YEAR_MAX = 68;
63
63
  const ACCEPT_BUTTON_SELECTOR = '.k-button.k-time-accept';
64
64
  const CANCEL_BUTTON_SELECOTR = '.k-button.k-time-cancel';
65
65
  const DATE_TAB_BUTTON_SELECTOR = '.k-button.k-date-tab';
66
+ const TIME_TAB_BUTTON_SELECTOR = '.k-button.k-time-tab';
66
67
  /**
67
68
  * Represents the [Kendo UI DateTimePicker component for Angular]({% slug overview_datetimepicker %}).
68
69
  */
@@ -659,6 +660,9 @@ export class DateTimePickerComponent {
659
660
  get dateTabButton() {
660
661
  return this.popupRef?.popup.instance.container.nativeElement.querySelector(DATE_TAB_BUTTON_SELECTOR);
661
662
  }
663
+ get timeTabButton() {
664
+ return this.popupRef?.popup.instance.container.nativeElement.querySelector(TIME_TAB_BUTTON_SELECTOR);
665
+ }
662
666
  /**
663
667
  * @hidden
664
668
  */
@@ -905,6 +909,12 @@ export class DateTimePickerComponent {
905
909
  this.dateTabButton.focus();
906
910
  }
907
911
  }
912
+ /**
913
+ * @hidden
914
+ */
915
+ onTabOutNow() {
916
+ this.timeTabButton.focus();
917
+ }
908
918
  /**
909
919
  * @hidden
910
920
  */
@@ -1028,7 +1038,7 @@ export class DateTimePickerComponent {
1028
1038
  this.calendar.monthView.list.nativeElement.focus();
1029
1039
  }
1030
1040
  else {
1031
- this.timeSelector.focus();
1041
+ this.timeSelector.timeLists.last.focus();
1032
1042
  }
1033
1043
  }
1034
1044
  break;
@@ -1644,6 +1654,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
1644
1654
  [isAdaptiveEnabled]="isAdaptiveModeEnabled"
1645
1655
  [isDateTimePicker]="true"
1646
1656
  (tabOutLastPart)="onTabOutLastPart()"
1657
+ (tabOutNow)="onTabOutNow()"
1647
1658
  >
1648
1659
  <kendo-timeselector-messages
1649
1660
  [acceptLabel]="localization.get('acceptLabel')"
@@ -1704,7 +1715,7 @@ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
1704
1715
  </div>
1705
1716
  </div>
1706
1717
  </ng-template>
1707
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "isRequired", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "allowCaretMode", "autoFill", "incompleteDateValidation", "twoDigitYearMax", "enableMouseWheel", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { kind: "component", type: i8.CalendarComponent, selector: "kendo-calendar", inputs: ["showOtherMonthDays", "id", "focusedDate", "min", "max", "rangeValidation", "weekDaysFormat", "footer", "selection", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "navigationItemTemplate", "size"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { kind: "component", type: i9.CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { kind: "component", type: i10.TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }, { kind: "component", type: i11.TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject", "tabOutLastPart"], exportAs: ["kendo-timeselector"] }, { kind: "directive", type: i12.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i13.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i14.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i14.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i12.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i15.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i16.LocalizedMessagesDirective, selector: "[kendoDateTimePickerLocalizedMessages]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1718
+ `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "isRequired", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "allowCaretMode", "autoFill", "incompleteDateValidation", "twoDigitYearMax", "enableMouseWheel", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { kind: "component", type: i8.CalendarComponent, selector: "kendo-calendar", inputs: ["showOtherMonthDays", "id", "focusedDate", "min", "max", "rangeValidation", "weekDaysFormat", "footer", "selection", "allowReverse", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "navigationItemTemplate", "size", "activeRangeEnd"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { kind: "component", type: i9.CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { kind: "component", type: i10.TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }, { kind: "component", type: i11.TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject", "tabOutLastPart", "tabOutNow"], exportAs: ["kendo-timeselector"] }, { kind: "directive", type: i12.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i13.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i14.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i14.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i12.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i15.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i16.LocalizedMessagesDirective, selector: "[kendoDateTimePickerLocalizedMessages]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1708
1719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DateTimePickerComponent, decorators: [{
1709
1720
  type: Component,
1710
1721
  args: [{
@@ -2032,6 +2043,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
2032
2043
  [isAdaptiveEnabled]="isAdaptiveModeEnabled"
2033
2044
  [isDateTimePicker]="true"
2034
2045
  (tabOutLastPart)="onTabOutLastPart()"
2046
+ (tabOutNow)="onTabOutNow()"
2035
2047
  >
2036
2048
  <kendo-timeselector-messages
2037
2049
  [acceptLabel]="localization.get('acceptLabel')"
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-dateinputs',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1714462722,
13
- version: '16.0.0-develop.12',
12
+ publishDate: 1715100988,
13
+ version: '16.0.0-develop.14',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };
@@ -1168,7 +1168,7 @@ TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
1168
1168
  </kendo-timeselector-messages>
1169
1169
  </kendo-timeselector>
1170
1170
  </ng-template>
1171
- `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "isRequired", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "allowCaretMode", "autoFill", "incompleteDateValidation", "twoDigitYearMax", "enableMouseWheel", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { kind: "directive", type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i10.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i10.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i8.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i11.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i12.TimePickerLocalizedMessagesDirective, selector: "[kendoTimePickerLocalizedMessages]" }, { kind: "component", type: i13.TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }, { kind: "component", type: i14.TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject", "tabOutLastPart"], exportAs: ["kendo-timeselector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1171
+ `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.DateInputComponent, selector: "kendo-dateinput", inputs: ["focusableId", "pickerType", "disabled", "readonly", "title", "tabindex", "role", "ariaReadOnly", "tabIndex", "isRequired", "format", "formatPlaceholder", "placeholder", "steps", "max", "min", "rangeValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "allowCaretMode", "autoFill", "incompleteDateValidation", "twoDigitYearMax", "enableMouseWheel", "value", "spinners", "isPopupOpen", "hasPopup", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "valueUpdate", "focus", "blur"], exportAs: ["kendo-dateinput"] }, { kind: "directive", type: i8.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: i10.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded", "titleId"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: i10.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: i8.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: i11.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i12.TimePickerLocalizedMessagesDirective, selector: "[kendoTimePickerLocalizedMessages]" }, { kind: "component", type: i13.TimeSelectorCustomMessagesComponent, selector: "kendo-timeselector-messages" }, { kind: "component", type: i14.TimeSelectorComponent, selector: "kendo-timeselector", inputs: ["format", "min", "max", "cancelButton", "setButton", "nowButton", "disabled", "isAdaptiveEnabled", "isDateTimePicker", "steps", "value"], outputs: ["valueChange", "valueReject", "tabOutLastPart", "tabOutNow"], exportAs: ["kendo-timeselector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1172
1172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimePickerComponent, decorators: [{
1173
1173
  type: Component,
1174
1174
  args: [{
@@ -97,6 +97,7 @@ export class TimeSelectorComponent {
97
97
  */
98
98
  this.valueReject = new EventEmitter();
99
99
  this.tabOutLastPart = new EventEmitter();
100
+ this.tabOutNow = new EventEmitter();
100
101
  this.isActive = false;
101
102
  this.showNowButton = true;
102
103
  this._activeListIndex = -1;
@@ -192,7 +193,7 @@ export class TimeSelectorComponent {
192
193
  if (keyCode === Keys.Tab && shiftKey) {
193
194
  event.preventDefault();
194
195
  this.renderer.removeClass(this.timeListWrappers.first.nativeElement, 'k-focus');
195
- this.cancel ? this.cancel.nativeElement.focus() : this.accept?.nativeElement.focus();
196
+ this.now ? this.now.nativeElement.focus() : this.cancel.nativeElement.focus();
196
197
  }
197
198
  }));
198
199
  this.subscriptions.add(fromEvent(this.timeListWrappers.last.nativeElement, 'keydown').subscribe((event) => {
@@ -311,13 +312,23 @@ export class TimeSelectorComponent {
311
312
  */
312
313
  handleTabOut(event) {
313
314
  const { keyCode, shiftKey } = event;
314
- if (keyCode === Keys.Tab && !shiftKey) {
315
+ if (event.target === this.now?.nativeElement && keyCode === Keys.Tab && shiftKey) {
316
+ event.preventDefault();
317
+ if (this.isDateTimePicker) {
318
+ this.tabOutNow.emit();
319
+ }
320
+ else {
321
+ this.cancel ? this.cancel.nativeElement.focus() : this.accept.nativeElement.focus();
322
+ }
323
+ return;
324
+ }
325
+ if (keyCode === Keys.Tab && !shiftKey && event.target !== this.now?.nativeElement) {
315
326
  event.preventDefault();
316
327
  if (document.activeElement === this.accept.nativeElement) {
317
- this.cancel ? this.cancel.nativeElement.focus() : this.timeLists.first.focus();
328
+ this.cancel ? this.cancel.nativeElement.focus() : this.now?.nativeElement.focus();
318
329
  }
319
330
  else {
320
- this.timeLists.first.focus();
331
+ this.now ? this.now.nativeElement.focus() : this.timeLists.first.focus();
321
332
  }
322
333
  }
323
334
  }
@@ -408,7 +419,7 @@ export class TimeSelectorComponent {
408
419
  }
409
420
  }
410
421
  TimeSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimeSelectorComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i2.IntlService }, { token: i3.TimePickerDOMService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i4.PickerService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
411
- TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", 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: [
422
+ TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", 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", tabOutNow: "tabOutNow" }, host: { properties: { "class.k-disabled": "this.disabledClass" } }, providers: [
412
423
  LocalizationService,
413
424
  {
414
425
  provide: L10N_PREFIX,
@@ -449,7 +460,8 @@ TimeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
449
460
  [kendoEventsOutsideAngular]="{
450
461
  click: handleNow,
451
462
  focus: handleFocus,
452
- blur: handleBlur
463
+ blur: handleBlur,
464
+ keydown: handleTabOut
453
465
  }"
454
466
  [scope]="this"
455
467
  [disabled]="disabled"
@@ -570,7 +582,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
570
582
  [kendoEventsOutsideAngular]="{
571
583
  click: handleNow,
572
584
  focus: handleFocus,
573
- blur: handleBlur
585
+ blur: handleBlur,
586
+ keydown: handleTabOut
574
587
  }"
575
588
  [scope]="this"
576
589
  [disabled]="disabled"
@@ -692,4 +705,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
692
705
  type: Output
693
706
  }], tabOutLastPart: [{
694
707
  type: Output
708
+ }], tabOutNow: [{
709
+ type: Output
695
710
  }] } });