@progress/kendo-angular-scheduler 25.1.0-develop.2 → 25.1.0-develop.20

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.
@@ -18,10 +18,11 @@ import * as i1 from '@progress/kendo-angular-dialog';
18
18
  import { DialogCloseResult, DialogComponent, DialogActionsComponent, DialogContainerService, DialogService, WindowService, WindowContainerService } from '@progress/kendo-angular-dialog';
19
19
  import * as i4 from '@progress/kendo-angular-intl';
20
20
  import { formatDate, CldrIntlService, DatePipe, parseDate } from '@progress/kendo-angular-intl';
21
+ import * as i2$1 from '@progress/kendo-angular-buttons';
22
+ import { ButtonComponent, SegmentedControlComponent, DropDownButtonComponent, Button } from '@progress/kendo-angular-buttons';
21
23
  import { MultiSelectComponent, ItemTemplateDirective, TagTemplateDirective, DropDownListComponent } from '@progress/kendo-angular-dropdowns';
22
24
  import { NgStyle, NgTemplateOutlet, AsyncPipe, NgClass } from '@angular/common';
23
- import { rightDoubleQuotesIcon, clockIcon, commentIcon, globeIcon, arrowRotateCwIcon, trashIcon, calendarIcon, chevronRightIcon, chevronLeftIcon, plusIcon, filePdfIcon, arrowsNoRepeatIcon, xIcon, moreHorizontalIcon, chevronUpIcon, chevronDownIcon } from '@progress/kendo-svg-icons';
24
- import { ButtonComponent, SegmentedControlComponent, DropDownButtonComponent, Button } from '@progress/kendo-angular-buttons';
25
+ import { rightDoubleQuotesIcon, clockIcon, commentIcon, globeIcon, arrowRotateCwIcon, trashIcon, calendarIcon, chevronRightIcon, chevronLeftIcon, plusIcon, filePdfIcon, arrowsNoRepeatIcon, xIcon, chevronUpIcon, chevronDownIcon } from '@progress/kendo-svg-icons';
25
26
  import { NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, FormFieldComponent, TextBoxDirective, TextAreaComponent, SwitchComponent } from '@progress/kendo-angular-inputs';
26
27
  import { parseRule, serializeRule, expand } from '@progress/kendo-recurrence';
27
28
  import { DatePickerComponent, DatePickerCustomMessagesComponent, TimePickerComponent, TimePickerCustomMessagesComponent, CalendarComponent, CalendarCustomMessagesComponent, MultiViewCalendarComponent, MonthCellTemplateDirective, CalendarDOMService, CenturyViewService, DecadeViewService, MonthViewService, YearViewService, NavigationService, TimePickerDOMService, HoursService, MinutesService, SecondsService, MillisecondsService, DayPeriodService } from '@progress/kendo-angular-dateinputs';
@@ -33,7 +34,7 @@ import { drawDOM, exportPDF } from '@progress/kendo-drawing';
33
34
  import { saveAs } from '@progress/kendo-file-saver';
34
35
  import { orderBy, groupBy } from '@progress/kendo-data-query';
35
36
  import { Draggable } from '@progress/kendo-draggable';
36
- import { PopoverComponent, PopoverTitleTemplateDirective, PopoverBodyTemplateDirective, PopoverAnchorDirective, PopoverContainerDirective } from '@progress/kendo-angular-tooltip';
37
+ import { PopoverComponent, PopoverTitleTemplateDirective, PopoverBodyTemplateDirective, PopoverContainerDirective } from '@progress/kendo-angular-tooltip';
37
38
 
38
39
  /**
39
40
  * @hidden
@@ -43,8 +44,8 @@ const packageMetadata = {
43
44
  productName: 'Kendo UI for Angular',
44
45
  productCode: 'KENDOUIANGULAR',
45
46
  productCodes: ['KENDOUIANGULAR'],
46
- publishDate: 1786694233,
47
- version: '25.1.0-develop.2',
47
+ publishDate: 1787938506,
48
+ version: '25.1.0-develop.20',
48
49
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
49
50
  };
50
51
 
@@ -2142,6 +2143,7 @@ class FocusService {
2142
2143
  elementMap = new WeakMap();
2143
2144
  subs = new Subscription();
2144
2145
  hasContentRendered = false;
2146
+ toolbarEntered = false;
2145
2147
  constructor(renderer, wrapper, domEvents, zone) {
2146
2148
  this.renderer = renderer;
2147
2149
  this.wrapper = wrapper;
@@ -2161,6 +2163,14 @@ class FocusService {
2161
2163
  const items = Array.from(this.focusableItems);
2162
2164
  if (item.containerType !== 'content') {
2163
2165
  this.items.add(item);
2166
+ if (!this.toolbarEntered && this.activeItem.containerType === 'toolbar') {
2167
+ const leftmost = this.leftmostToolbarItem;
2168
+ if (leftmost && leftmost !== this.activeItem) {
2169
+ this.activeItem.toggle(false);
2170
+ this.activeItem = leftmost;
2171
+ leftmost.toggle(true);
2172
+ }
2173
+ }
2164
2174
  }
2165
2175
  else {
2166
2176
  const newContentIndex = items.map(item => item.containerType).lastIndexOf('content') + 1;
@@ -2178,8 +2188,7 @@ class FocusService {
2178
2188
  else {
2179
2189
  this.items.add(item);
2180
2190
  }
2181
- // activate the first content element if there is one; otherwise, keep the toolbar or footer active
2182
- if (!this.hasContentRendered) {
2191
+ if (!this.hasContentRendered && item.canFocus() && this.activeItem.containerType !== 'toolbar') {
2183
2192
  this.activeItem.toggle(false);
2184
2193
  this.activeItem = item;
2185
2194
  item.toggle(true);
@@ -2195,6 +2204,14 @@ class FocusService {
2195
2204
  }
2196
2205
  this.items.delete(item);
2197
2206
  this.elementMap.delete(item.element.nativeElement);
2207
+ if (!this.toolbarEntered && this.activeItem?.containerType === 'toolbar') {
2208
+ const leftmost = this.leftmostToolbarItem;
2209
+ if (leftmost && leftmost !== this.activeItem) {
2210
+ this.activeItem.toggle(false);
2211
+ this.activeItem = leftmost;
2212
+ leftmost.toggle(true);
2213
+ }
2214
+ }
2198
2215
  this.toggleWrapper();
2199
2216
  }
2200
2217
  /**
@@ -2243,11 +2260,13 @@ class FocusService {
2243
2260
  this.activeItem = firstFocusableTool;
2244
2261
  }
2245
2262
  focusNext(options, containerType) {
2263
+ this.toolbarEntered = true;
2246
2264
  const currentItem = this.activeItem;
2247
2265
  this.activateNext(options, true, containerType);
2248
2266
  return this.activeItem !== currentItem;
2249
2267
  }
2250
2268
  focusByIndex(index, preventScroll = true) {
2269
+ this.toolbarEntered = true;
2251
2270
  const item = Array.from(this.items.values())[index];
2252
2271
  if (!item) {
2253
2272
  return;
@@ -2274,6 +2293,12 @@ class FocusService {
2274
2293
  next?.focus(false);
2275
2294
  }
2276
2295
  }
2296
+ get leftmostToolbarItem() {
2297
+ const toolbarItems = Array.from(this.focusableItems)
2298
+ .filter(item => item.containerType === 'toolbar' && item.canFocus())
2299
+ .sort((a, b) => a.focusIndex - b.focusIndex);
2300
+ return toolbarItems[0];
2301
+ }
2277
2302
  findNext(position, containerType) {
2278
2303
  const { offset, nowrap } = { nowrap: false, offset: 1, ...position };
2279
2304
  let items = Array.from(this.items.values())
@@ -2316,6 +2341,7 @@ class FocusService {
2316
2341
  return this.wrapper.nativeElement.contains(document.activeElement);
2317
2342
  }
2318
2343
  onFocusIn(e) {
2344
+ this.toolbarEntered = true;
2319
2345
  const item = this.findRegisteredElement(e.target);
2320
2346
  if (!item || item === this.focusedItem) {
2321
2347
  return;
@@ -2541,6 +2567,7 @@ class FocusableDirective {
2541
2567
  element;
2542
2568
  renderer;
2543
2569
  focusService;
2570
+ segmentedControl;
2544
2571
  /**
2545
2572
  * The order of the element with respect to the other focusable elements.
2546
2573
  * If multiple elements share the same value, their relative to each other order follows their position in the component tree.
@@ -2554,10 +2581,11 @@ class FocusableDirective {
2554
2581
  return !this.element.nativeElement.disabled;
2555
2582
  }
2556
2583
  active;
2557
- constructor(element, renderer, focusService) {
2584
+ constructor(element, renderer, focusService, segmentedControl) {
2558
2585
  this.element = element;
2559
2586
  this.renderer = renderer;
2560
2587
  this.focusService = focusService;
2588
+ this.segmentedControl = segmentedControl;
2561
2589
  this.toggle(false);
2562
2590
  }
2563
2591
  ngAfterViewChecked() {
@@ -2576,8 +2604,13 @@ class FocusableDirective {
2576
2604
  }
2577
2605
  toggle(active) {
2578
2606
  if (active !== this.active) {
2579
- const index = active ? '0' : '-1';
2580
- this.renderer.setAttribute(this.element.nativeElement, 'tabIndex', index);
2607
+ if (this.segmentedControl) {
2608
+ this.segmentedControl.setIsActiveTabStop(active);
2609
+ }
2610
+ else {
2611
+ const index = active ? '0' : '-1';
2612
+ this.renderer.setAttribute(this.element.nativeElement, 'tabIndex', index);
2613
+ }
2581
2614
  this.active = active;
2582
2615
  }
2583
2616
  }
@@ -2585,7 +2618,12 @@ class FocusableDirective {
2585
2618
  return this.visible && this.enabled;
2586
2619
  }
2587
2620
  focus(preventScroll = true) {
2588
- this.element.nativeElement.focus({ preventScroll });
2621
+ if (this.segmentedControl) {
2622
+ this.segmentedControl.focusSelectedButton(preventScroll);
2623
+ }
2624
+ else {
2625
+ this.element.nativeElement.focus({ preventScroll });
2626
+ }
2589
2627
  }
2590
2628
  toggleFocus(value) {
2591
2629
  const element = this.element.nativeElement;
@@ -2610,7 +2648,7 @@ class FocusableDirective {
2610
2648
  this.renderer.setAttribute(element, 'aria-selected', value.toString());
2611
2649
  }
2612
2650
  }
2613
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: FocusableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: FocusService }], target: i0.ɵɵFactoryTarget.Directive });
2651
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: FocusableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: FocusService }, { token: i2$1.SegmentedControlComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
2614
2652
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: FocusableDirective, isStandalone: true, selector: "[kendoSchedulerFocusIndex]", inputs: { focusIndex: ["kendoSchedulerFocusIndex", "focusIndex"], containerType: "containerType" }, ngImport: i0 });
2615
2653
  }
2616
2654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: FocusableDirective, decorators: [{
@@ -2619,7 +2657,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
2619
2657
  selector: '[kendoSchedulerFocusIndex]',
2620
2658
  standalone: true
2621
2659
  }]
2622
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: FocusService }], propDecorators: { focusIndex: [{
2660
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: FocusService }, { type: i2$1.SegmentedControlComponent, decorators: [{
2661
+ type: Optional
2662
+ }] }], propDecorators: { focusIndex: [{
2623
2663
  type: Input,
2624
2664
  args: ['kendoSchedulerFocusIndex']
2625
2665
  }], containerType: [{
@@ -3271,7 +3311,7 @@ function noModifiers(e) {
3271
3311
 
3272
3312
  let uniqueIdCounter = 0;
3273
3313
  const offsetPositions = ['first', 'second', 'third', 'fourth', 'last'];
3274
- const frequencies = ['never', 'daily', 'weekly', 'monthly', 'yearly'];
3314
+ const frequencies = ['daily', 'weekly', 'monthly', 'yearly'];
3275
3315
  const endRules = ['never', 'count', 'until'];
3276
3316
  // Maps the `EndRule` values to their corresponding localization message keys.
3277
3317
  const endRuleMessageKeys = {
@@ -3337,6 +3377,9 @@ class RecurrenceService {
3337
3377
  recurrenceRule: rrule,
3338
3378
  weekStart: weekStart
3339
3379
  });
3380
+ if (!this.rrule || isNullOrEmptyString(this.rrule.freq)) {
3381
+ this.rrule = { freq: 'daily', interval: this.minInterval };
3382
+ }
3340
3383
  }
3341
3384
  /**
3342
3385
  * @hidden
@@ -4640,12 +4683,9 @@ class RecurrenceFrequencyEditorComponent {
4640
4683
  this.localization = localization;
4641
4684
  }
4642
4685
  ngOnInit() {
4643
- this.frequencies = this.recurrence.frequencies.filter(freq => freq.value !== 'never');
4686
+ this.frequencies = this.recurrence.frequencies;
4644
4687
  }
4645
4688
  get selected() {
4646
- if (!this.recurrence.rrule) {
4647
- this.recurrence.setFrequency(this.frequencies[0].value);
4648
- }
4649
4689
  return this.recurrence.frequency;
4650
4690
  }
4651
4691
  onFrequencyChange(newFreq) {
@@ -5324,16 +5364,16 @@ class RecurrenceEditorComponent {
5324
5364
  dailyInterval='day(s)'
5325
5365
 
5326
5366
  i18n-dailyRepeatEvery="kendo.recurrenceeditor.dailyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5327
- dailyRepeatEvery='Repeat every'
5367
+ dailyRepeatEvery='Repeats every'
5328
5368
 
5329
5369
  i18n-weeklyInterval="kendo.recurrenceeditor.weeklyInterval|The text similar to 'week(s)' displayed in the recurrence editor."
5330
5370
  weeklyInterval='week(s)'
5331
5371
 
5332
5372
  i18n-weeklyRepeatEvery="kendo.recurrenceeditor.weeklyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5333
- weeklyRepeatEvery='Repeat every'
5373
+ weeklyRepeatEvery='Repeats every'
5334
5374
 
5335
5375
  i18n-weeklyRepeatOn="kendo.recurrenceeditor.weeklyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5336
- weeklyRepeatOn='Repeat on'
5376
+ weeklyRepeatOn='On'
5337
5377
 
5338
5378
  i18n-monthlyDay="kendo.recurrenceeditor.monthlyDay|The text similar to 'Day' displayed in the recurrence editor."
5339
5379
  monthlyDay='Day'
@@ -5342,37 +5382,37 @@ class RecurrenceEditorComponent {
5342
5382
  monthlyInterval='month(s)'
5343
5383
 
5344
5384
  i18n-monthlyRepeatEvery="kendo.recurrenceeditor.monthlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5345
- monthlyRepeatEvery='Repeat every'
5385
+ monthlyRepeatEvery='Repeats every'
5346
5386
 
5347
5387
  i18n-monthlyRepeatOn="kendo.recurrenceeditor.monthlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5348
- monthlyRepeatOn='Repeat on'
5388
+ monthlyRepeatOn='On'
5349
5389
 
5350
5390
  i18n-yearlyOf="kendo.recurrenceeditor.yearlyOf|The text similar to 'of' displayed in the recurrence editor."
5351
5391
  yearlyOf='of'
5352
5392
 
5353
5393
  i18n-yearlyRepeatEvery="kendo.recurrenceeditor.yearlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5354
- yearlyRepeatEvery='Repeat every'
5394
+ yearlyRepeatEvery='Repeats every'
5355
5395
 
5356
5396
  i18n-yearlyRepeatOn="kendo.recurrenceeditor.yearlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5357
- yearlyRepeatOn='Repeat on'
5397
+ yearlyRepeatOn='On'
5358
5398
 
5359
5399
  i18n-yearlyInterval="kendo.recurrenceeditor.yearlyInterval|The text similar to 'year(s)' displayed in the recurrence editor."
5360
5400
  yearlyInterval='year(s)'
5361
5401
 
5362
5402
  i18n-frequenciesDaily="kendo.recurrenceeditor.frequenciesDaily|The text similar to 'Daily' displayed in the recurrence editor."
5363
- frequenciesDaily='Daily'
5403
+ frequenciesDaily='Day'
5364
5404
 
5365
5405
  i18n-frequenciesMonthly="kendo.recurrenceeditor.frequenciesMonthly|The text similar to 'Monthly' displayed in the recurrence editor."
5366
- frequenciesMonthly='Monthly'
5406
+ frequenciesMonthly='Month'
5367
5407
 
5368
5408
  i18n-frequenciesNever="kendo.recurrenceeditor.frequenciesNever|The text similar to 'Never' displayed in the recurrence editor."
5369
5409
  frequenciesNever='Never'
5370
5410
 
5371
5411
  i18n-frequenciesWeekly="kendo.recurrenceeditor.frequenciesWeekly|The text similar to 'Weekly' displayed in the recurrence editor."
5372
- frequenciesWeekly='Weekly'
5412
+ frequenciesWeekly='Week'
5373
5413
 
5374
5414
  i18n-frequenciesYearly="kendo.recurrenceeditor.frequenciesYearly|The text similar to 'Yearly' displayed in the recurrence editor."
5375
- frequenciesYearly='Yearly'
5415
+ frequenciesYearly='Year'
5376
5416
 
5377
5417
  i18n-offsetPositionsFirst="kendo.recurrenceeditor.offsetPositionsFirst|The text similar to 'First' displayed in the recurrence editor."
5378
5418
  offsetPositionsFirst='First'
@@ -5499,16 +5539,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
5499
5539
  dailyInterval='day(s)'
5500
5540
 
5501
5541
  i18n-dailyRepeatEvery="kendo.recurrenceeditor.dailyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5502
- dailyRepeatEvery='Repeat every'
5542
+ dailyRepeatEvery='Repeats every'
5503
5543
 
5504
5544
  i18n-weeklyInterval="kendo.recurrenceeditor.weeklyInterval|The text similar to 'week(s)' displayed in the recurrence editor."
5505
5545
  weeklyInterval='week(s)'
5506
5546
 
5507
5547
  i18n-weeklyRepeatEvery="kendo.recurrenceeditor.weeklyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5508
- weeklyRepeatEvery='Repeat every'
5548
+ weeklyRepeatEvery='Repeats every'
5509
5549
 
5510
5550
  i18n-weeklyRepeatOn="kendo.recurrenceeditor.weeklyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5511
- weeklyRepeatOn='Repeat on'
5551
+ weeklyRepeatOn='On'
5512
5552
 
5513
5553
  i18n-monthlyDay="kendo.recurrenceeditor.monthlyDay|The text similar to 'Day' displayed in the recurrence editor."
5514
5554
  monthlyDay='Day'
@@ -5517,37 +5557,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
5517
5557
  monthlyInterval='month(s)'
5518
5558
 
5519
5559
  i18n-monthlyRepeatEvery="kendo.recurrenceeditor.monthlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5520
- monthlyRepeatEvery='Repeat every'
5560
+ monthlyRepeatEvery='Repeats every'
5521
5561
 
5522
5562
  i18n-monthlyRepeatOn="kendo.recurrenceeditor.monthlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5523
- monthlyRepeatOn='Repeat on'
5563
+ monthlyRepeatOn='On'
5524
5564
 
5525
5565
  i18n-yearlyOf="kendo.recurrenceeditor.yearlyOf|The text similar to 'of' displayed in the recurrence editor."
5526
5566
  yearlyOf='of'
5527
5567
 
5528
5568
  i18n-yearlyRepeatEvery="kendo.recurrenceeditor.yearlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5529
- yearlyRepeatEvery='Repeat every'
5569
+ yearlyRepeatEvery='Repeats every'
5530
5570
 
5531
5571
  i18n-yearlyRepeatOn="kendo.recurrenceeditor.yearlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5532
- yearlyRepeatOn='Repeat on'
5572
+ yearlyRepeatOn='On'
5533
5573
 
5534
5574
  i18n-yearlyInterval="kendo.recurrenceeditor.yearlyInterval|The text similar to 'year(s)' displayed in the recurrence editor."
5535
5575
  yearlyInterval='year(s)'
5536
5576
 
5537
5577
  i18n-frequenciesDaily="kendo.recurrenceeditor.frequenciesDaily|The text similar to 'Daily' displayed in the recurrence editor."
5538
- frequenciesDaily='Daily'
5578
+ frequenciesDaily='Day'
5539
5579
 
5540
5580
  i18n-frequenciesMonthly="kendo.recurrenceeditor.frequenciesMonthly|The text similar to 'Monthly' displayed in the recurrence editor."
5541
- frequenciesMonthly='Monthly'
5581
+ frequenciesMonthly='Month'
5542
5582
 
5543
5583
  i18n-frequenciesNever="kendo.recurrenceeditor.frequenciesNever|The text similar to 'Never' displayed in the recurrence editor."
5544
5584
  frequenciesNever='Never'
5545
5585
 
5546
5586
  i18n-frequenciesWeekly="kendo.recurrenceeditor.frequenciesWeekly|The text similar to 'Weekly' displayed in the recurrence editor."
5547
- frequenciesWeekly='Weekly'
5587
+ frequenciesWeekly='Week'
5548
5588
 
5549
5589
  i18n-frequenciesYearly="kendo.recurrenceeditor.frequenciesYearly|The text similar to 'Yearly' displayed in the recurrence editor."
5550
- frequenciesYearly='Yearly'
5590
+ frequenciesYearly='Year'
5551
5591
 
5552
5592
  i18n-offsetPositionsFirst="kendo.recurrenceeditor.offsetPositionsFirst|The text similar to 'First' displayed in the recurrence editor."
5553
5593
  offsetPositionsFirst='First'
@@ -5955,7 +5995,7 @@ class EditDialogComponent {
5955
5995
  .pipe(filter(() => this.isActive))
5956
5996
  .subscribe((e) => {
5957
5997
  if (e.code === Keys.Escape) {
5958
- this.reset();
5998
+ this.onClose();
5959
5999
  }
5960
6000
  if ((e.code === Keys.Enter || e.code === Keys.NumpadEnter) && (withModifiers(e, Modifiers.CtrlKey) || withModifiers(e, Modifiers.MetaKey))) {
5961
6001
  this.onSave(e);
@@ -6526,7 +6566,7 @@ class EditDialogComponent {
6526
6566
  </kendo-dialog>
6527
6567
  }
6528
6568
  }
6529
- `, isInline: true, dependencies: [{ kind: "component", type: DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "closable", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors", "colSpan"] }, { kind: "directive", type: TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: TimeZoneEditorComponent, selector: "kendo-timezone-editor", inputs: ["width"], outputs: ["valueChange"] }, { kind: "component", type: RecurrenceEditorComponent, selector: "kendo-recurrence-editor", inputs: ["start", "timezone", "weekStart", "repeatEveryOptions", "endAfterOptions", "repeatOnOptions", "endOnOptions", "recurrenceSummaryTemplate", "recurrenceRule"], outputs: ["valueChange"], exportAs: ["kendoRecurrenceEditor"] }, { kind: "component", type: TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "component", type: MultipleResourceEditorComponent, selector: "kendo-multiple-resource-editor" }, { kind: "component", type: SingleResourceEditorComponent, selector: "kendo-single-resource-editor" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "component", type: SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "component", type: DatePickerCustomMessagesComponent, selector: "kendo-datepicker-messages" }, { kind: "component", type: TimePickerComponent, selector: "kendo-timepicker", inputs: ["focusableId", "disabled", "readonly", "readOnlyInput", "clearButton", "format", "formatPlaceholder", "placeholder", "min", "max", "incompleteDateValidation", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "cancelButton", "nowButton", "steps", "popupSettings", "tabindex", "tabIndex", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "adaptiveMode", "value", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-timepicker"] }, { kind: "component", type: TimePickerCustomMessagesComponent, selector: "kendo-timepicker-messages" }] });
6569
+ `, isInline: true, dependencies: [{ kind: "component", type: DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "closable", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors", "colSpan"] }, { kind: "directive", type: TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "component", type: TimeZoneEditorComponent, selector: "kendo-timezone-editor", inputs: ["width"], outputs: ["valueChange"] }, { kind: "component", type: RecurrenceEditorComponent, selector: "kendo-recurrence-editor", inputs: ["start", "timezone", "weekStart", "repeatEveryOptions", "endAfterOptions", "repeatOnOptions", "endOnOptions", "recurrenceSummaryTemplate", "recurrenceRule"], outputs: ["valueChange"], exportAs: ["kendoRecurrenceEditor"] }, { kind: "component", type: TextAreaComponent, selector: "kendo-textarea", inputs: ["focusableId", "flow", "inputAttributes", "adornmentsOrientation", "rows", "cols", "maxlength", "maxResizableRows", "tabindex", "tabIndex", "resizable", "size", "rounded", "fillMode", "showPrefixSeparator", "showSuffixSeparator", "value"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoTextArea"] }, { kind: "component", type: MultipleResourceEditorComponent, selector: "kendo-multiple-resource-editor" }, { kind: "component", type: SingleResourceEditorComponent, selector: "kendo-single-resource-editor" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "component", type: SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "component", type: DatePickerCustomMessagesComponent, selector: "kendo-datepicker-messages" }, { kind: "component", type: TimePickerComponent, selector: "kendo-timepicker", inputs: ["focusableId", "disabled", "readonly", "readOnlyInput", "clearButton", "format", "formatPlaceholder", "placeholder", "min", "max", "incompleteDateValidation", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "cancelButton", "nowButton", "steps", "popupSettings", "tabindex", "tabIndex", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "adaptiveMode", "value", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-timepicker"] }, { kind: "component", type: TimePickerCustomMessagesComponent, selector: "kendo-timepicker-messages" }] });
6530
6570
  }
6531
6571
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: EditDialogComponent, decorators: [{
6532
6572
  type: Component,
@@ -7679,6 +7719,11 @@ class Messages extends ComponentMessages {
7679
7719
  * The `{count}` placeholder is replaced with the number of additional events.
7680
7720
  */
7681
7721
  moreEvents;
7722
+ /**
7723
+ * Sets the `aria-label` for the **more events** button in the Month view.
7724
+ * The `{count}` placeholder is replaced with the number of additional events.
7725
+ */
7726
+ moreEventsLabel;
7682
7727
  /**
7683
7728
  * Sets the date-header text in the **Agenda** view.
7684
7729
  */
@@ -8133,7 +8178,7 @@ class Messages extends ComponentMessages {
8133
8178
  */
8134
8179
  newEventLabel;
8135
8180
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
8136
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: Messages, isStandalone: true, inputs: { allEvents: "allEvents", allDay: "allDay", moreEvents: "moreEvents", dateHeader: "dateHeader", timeHeader: "timeHeader", eventHeader: "eventHeader", resourceColumnHeaderLabel: "resourceColumnHeaderLabel", deleteTitle: "deleteTitle", nextTitle: "nextTitle", previousTitle: "previousTitle", toolbar: "toolbar", today: "today", calendarToday: "calendarToday", showFullDay: "showFullDay", showWorkDay: "showWorkDay", dayViewTitle: "dayViewTitle", multiDayViewTitle: "multiDayViewTitle", weekViewTitle: "weekViewTitle", workWeekViewTitle: "workWeekViewTitle", monthViewTitle: "monthViewTitle", multiWeekViewTitle: "multiWeekViewTitle", timelineViewTitle: "timelineViewTitle", timelineWeekViewTitle: "timelineWeekViewTitle", timelineMonthViewTitle: "timelineMonthViewTitle", agendaViewTitle: "agendaViewTitle", yearViewTitle: "yearViewTitle", yearViewNoEvents: "yearViewNoEvents", cancel: "cancel", save: "save", editorEventTitle: "editorEventTitle", editorEventStart: "editorEventStart", editorEventStartTime: "editorEventStartTime", editorEventStartTimeZone: "editorEventStartTimeZone", editorEventEnd: "editorEventEnd", editorEventEndTime: "editorEventEndTime", editorEventEndTimeZone: "editorEventEndTimeZone", editorEventAllDay: "editorEventAllDay", editorEventDescription: "editorEventDescription", editorEventTimeZone: "editorEventTimeZone", editorEventTimeZoneReset: "editorEventTimeZoneReset", editorEventDescriptionPlaceholder: "editorEventDescriptionPlaceholder", editorEventDateRangeSeparator: "editorEventDateRangeSeparator", editorEventDateRangeStart: "editorEventDateRangeStart", editorRecurrenceMakeRecurring: "editorRecurrenceMakeRecurring", editorRecurrenceEdit: "editorRecurrenceEdit", editorRecurrenceDialogTitle: "editorRecurrenceDialogTitle", editorRecurrenceRemove: "editorRecurrenceRemove", editorRecurrenceRemoveConfirmationTitle: "editorRecurrenceRemoveConfirmationTitle", editorRecurrenceRemoveConfirmation: "editorRecurrenceRemoveConfirmation", editorRecurrenceRemoveConfirmationNo: "editorRecurrenceRemoveConfirmationNo", editorRecurrenceRemoveConfirmationYes: "editorRecurrenceRemoveConfirmationYes", editorDateInputsToday: "editorDateInputsToday", editorDatePickersToggle: "editorDatePickersToggle", editorDateInputsParentViewButton: "editorDateInputsParentViewButton", editorDateInputsNow: "editorDateInputsNow", editorDateInputsNowLabel: "editorDateInputsNowLabel", editorDateInputsAccept: "editorDateInputsAccept", editorDateInputsAcceptLabel: "editorDateInputsAcceptLabel", editorDateInputsCancel: "editorDateInputsCancel", editorDateInputsCancelLabel: "editorDateInputsCancelLabel", editorTimePickersToggle: "editorTimePickersToggle", recurrenceEditorDateInputsToday: "recurrenceEditorDateInputsToday", recurrenceEditorDateInputsToggle: "recurrenceEditorDateInputsToggle", recurrenceEditorDateInputsParentViewButton: "recurrenceEditorDateInputsParentViewButton", recurrenceEditorNumericIncrement: "recurrenceEditorNumericIncrement", recurrenceEditorNumericDecrement: "recurrenceEditorNumericDecrement", recurrenceEditorRepeat: "recurrenceEditorRepeat", recurrenceEditorDailyInterval: "recurrenceEditorDailyInterval", recurrenceEditorDailyRepeatEvery: "recurrenceEditorDailyRepeatEvery", recurrenceEditorWeeklyInterval: "recurrenceEditorWeeklyInterval", recurrenceEditorWeeklyRepeatEvery: "recurrenceEditorWeeklyRepeatEvery", recurrenceEditorWeeklyRepeatOn: "recurrenceEditorWeeklyRepeatOn", recurrenceEditorMonthlyDay: "recurrenceEditorMonthlyDay", recurrenceEditorMonthlyInterval: "recurrenceEditorMonthlyInterval", recurrenceEditorMonthlyRepeatEvery: "recurrenceEditorMonthlyRepeatEvery", recurrenceEditorMonthlyRepeatOn: "recurrenceEditorMonthlyRepeatOn", recurrenceEditorYearlyOf: "recurrenceEditorYearlyOf", recurrenceEditorYearlyRepeatEvery: "recurrenceEditorYearlyRepeatEvery", recurrenceEditorYearlyRepeatOn: "recurrenceEditorYearlyRepeatOn", recurrenceEditorYearlyInterval: "recurrenceEditorYearlyInterval", recurrenceEditorFrequenciesDaily: "recurrenceEditorFrequenciesDaily", recurrenceEditorFrequenciesMonthly: "recurrenceEditorFrequenciesMonthly", recurrenceEditorFrequenciesNever: "recurrenceEditorFrequenciesNever", recurrenceEditorFrequenciesWeekly: "recurrenceEditorFrequenciesWeekly", recurrenceEditorFrequenciesYearly: "recurrenceEditorFrequenciesYearly", recurrenceEditorOffsetPositionsFirst: "recurrenceEditorOffsetPositionsFirst", recurrenceEditorOffsetPositionsSecond: "recurrenceEditorOffsetPositionsSecond", recurrenceEditorOffsetPositionsThird: "recurrenceEditorOffsetPositionsThird", recurrenceEditorOffsetPositionsFourth: "recurrenceEditorOffsetPositionsFourth", recurrenceEditorOffsetPositionsLast: "recurrenceEditorOffsetPositionsLast", recurrenceEditorWeekdaysDay: "recurrenceEditorWeekdaysDay", recurrenceEditorWeekdaysWeekday: "recurrenceEditorWeekdaysWeekday", recurrenceEditorWeekdaysWeekendday: "recurrenceEditorWeekdaysWeekendday", recurrenceEditorEndAfter: "recurrenceEditorEndAfter", recurrenceEditorEndOccurrence: "recurrenceEditorEndOccurrence", recurrenceEditorEndLabel: "recurrenceEditorEndLabel", recurrenceEditorEndNever: "recurrenceEditorEndNever", recurrenceEditorEndOn: "recurrenceEditorEndOn", editorTitle: "editorTitle", editorTitleNew: "editorTitleNew", destroy: "destroy", deleteConfirmation: "deleteConfirmation", editRecurringConfirmation: "editRecurringConfirmation", editOccurrence: "editOccurrence", editSeries: "editSeries", deleteRecurringConfirmation: "deleteRecurringConfirmation", deleteOccurrence: "deleteOccurrence", deleteSeries: "deleteSeries", deleteDialogTitle: "deleteDialogTitle", deleteRecurringDialogTitle: "deleteRecurringDialogTitle", editRecurringDialogTitle: "editRecurringDialogTitle", selectView: "selectView", newEvent: "newEvent", newEventLabel: "newEventLabel" }, usesInheritance: true, ngImport: i0 });
8181
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.27", type: Messages, isStandalone: true, inputs: { allEvents: "allEvents", allDay: "allDay", moreEvents: "moreEvents", moreEventsLabel: "moreEventsLabel", dateHeader: "dateHeader", timeHeader: "timeHeader", eventHeader: "eventHeader", resourceColumnHeaderLabel: "resourceColumnHeaderLabel", deleteTitle: "deleteTitle", nextTitle: "nextTitle", previousTitle: "previousTitle", toolbar: "toolbar", today: "today", calendarToday: "calendarToday", showFullDay: "showFullDay", showWorkDay: "showWorkDay", dayViewTitle: "dayViewTitle", multiDayViewTitle: "multiDayViewTitle", weekViewTitle: "weekViewTitle", workWeekViewTitle: "workWeekViewTitle", monthViewTitle: "monthViewTitle", multiWeekViewTitle: "multiWeekViewTitle", timelineViewTitle: "timelineViewTitle", timelineWeekViewTitle: "timelineWeekViewTitle", timelineMonthViewTitle: "timelineMonthViewTitle", agendaViewTitle: "agendaViewTitle", yearViewTitle: "yearViewTitle", yearViewNoEvents: "yearViewNoEvents", cancel: "cancel", save: "save", editorEventTitle: "editorEventTitle", editorEventStart: "editorEventStart", editorEventStartTime: "editorEventStartTime", editorEventStartTimeZone: "editorEventStartTimeZone", editorEventEnd: "editorEventEnd", editorEventEndTime: "editorEventEndTime", editorEventEndTimeZone: "editorEventEndTimeZone", editorEventAllDay: "editorEventAllDay", editorEventDescription: "editorEventDescription", editorEventTimeZone: "editorEventTimeZone", editorEventTimeZoneReset: "editorEventTimeZoneReset", editorEventDescriptionPlaceholder: "editorEventDescriptionPlaceholder", editorEventDateRangeSeparator: "editorEventDateRangeSeparator", editorEventDateRangeStart: "editorEventDateRangeStart", editorRecurrenceMakeRecurring: "editorRecurrenceMakeRecurring", editorRecurrenceEdit: "editorRecurrenceEdit", editorRecurrenceDialogTitle: "editorRecurrenceDialogTitle", editorRecurrenceRemove: "editorRecurrenceRemove", editorRecurrenceRemoveConfirmationTitle: "editorRecurrenceRemoveConfirmationTitle", editorRecurrenceRemoveConfirmation: "editorRecurrenceRemoveConfirmation", editorRecurrenceRemoveConfirmationNo: "editorRecurrenceRemoveConfirmationNo", editorRecurrenceRemoveConfirmationYes: "editorRecurrenceRemoveConfirmationYes", editorDateInputsToday: "editorDateInputsToday", editorDatePickersToggle: "editorDatePickersToggle", editorDateInputsParentViewButton: "editorDateInputsParentViewButton", editorDateInputsNow: "editorDateInputsNow", editorDateInputsNowLabel: "editorDateInputsNowLabel", editorDateInputsAccept: "editorDateInputsAccept", editorDateInputsAcceptLabel: "editorDateInputsAcceptLabel", editorDateInputsCancel: "editorDateInputsCancel", editorDateInputsCancelLabel: "editorDateInputsCancelLabel", editorTimePickersToggle: "editorTimePickersToggle", recurrenceEditorDateInputsToday: "recurrenceEditorDateInputsToday", recurrenceEditorDateInputsToggle: "recurrenceEditorDateInputsToggle", recurrenceEditorDateInputsParentViewButton: "recurrenceEditorDateInputsParentViewButton", recurrenceEditorNumericIncrement: "recurrenceEditorNumericIncrement", recurrenceEditorNumericDecrement: "recurrenceEditorNumericDecrement", recurrenceEditorRepeat: "recurrenceEditorRepeat", recurrenceEditorDailyInterval: "recurrenceEditorDailyInterval", recurrenceEditorDailyRepeatEvery: "recurrenceEditorDailyRepeatEvery", recurrenceEditorWeeklyInterval: "recurrenceEditorWeeklyInterval", recurrenceEditorWeeklyRepeatEvery: "recurrenceEditorWeeklyRepeatEvery", recurrenceEditorWeeklyRepeatOn: "recurrenceEditorWeeklyRepeatOn", recurrenceEditorMonthlyDay: "recurrenceEditorMonthlyDay", recurrenceEditorMonthlyInterval: "recurrenceEditorMonthlyInterval", recurrenceEditorMonthlyRepeatEvery: "recurrenceEditorMonthlyRepeatEvery", recurrenceEditorMonthlyRepeatOn: "recurrenceEditorMonthlyRepeatOn", recurrenceEditorYearlyOf: "recurrenceEditorYearlyOf", recurrenceEditorYearlyRepeatEvery: "recurrenceEditorYearlyRepeatEvery", recurrenceEditorYearlyRepeatOn: "recurrenceEditorYearlyRepeatOn", recurrenceEditorYearlyInterval: "recurrenceEditorYearlyInterval", recurrenceEditorFrequenciesDaily: "recurrenceEditorFrequenciesDaily", recurrenceEditorFrequenciesMonthly: "recurrenceEditorFrequenciesMonthly", recurrenceEditorFrequenciesNever: "recurrenceEditorFrequenciesNever", recurrenceEditorFrequenciesWeekly: "recurrenceEditorFrequenciesWeekly", recurrenceEditorFrequenciesYearly: "recurrenceEditorFrequenciesYearly", recurrenceEditorOffsetPositionsFirst: "recurrenceEditorOffsetPositionsFirst", recurrenceEditorOffsetPositionsSecond: "recurrenceEditorOffsetPositionsSecond", recurrenceEditorOffsetPositionsThird: "recurrenceEditorOffsetPositionsThird", recurrenceEditorOffsetPositionsFourth: "recurrenceEditorOffsetPositionsFourth", recurrenceEditorOffsetPositionsLast: "recurrenceEditorOffsetPositionsLast", recurrenceEditorWeekdaysDay: "recurrenceEditorWeekdaysDay", recurrenceEditorWeekdaysWeekday: "recurrenceEditorWeekdaysWeekday", recurrenceEditorWeekdaysWeekendday: "recurrenceEditorWeekdaysWeekendday", recurrenceEditorEndAfter: "recurrenceEditorEndAfter", recurrenceEditorEndOccurrence: "recurrenceEditorEndOccurrence", recurrenceEditorEndLabel: "recurrenceEditorEndLabel", recurrenceEditorEndNever: "recurrenceEditorEndNever", recurrenceEditorEndOn: "recurrenceEditorEndOn", editorTitle: "editorTitle", editorTitleNew: "editorTitleNew", destroy: "destroy", deleteConfirmation: "deleteConfirmation", editRecurringConfirmation: "editRecurringConfirmation", editOccurrence: "editOccurrence", editSeries: "editSeries", deleteRecurringConfirmation: "deleteRecurringConfirmation", deleteOccurrence: "deleteOccurrence", deleteSeries: "deleteSeries", deleteDialogTitle: "deleteDialogTitle", deleteRecurringDialogTitle: "deleteRecurringDialogTitle", editRecurringDialogTitle: "editRecurringDialogTitle", selectView: "selectView", newEvent: "newEvent", newEventLabel: "newEventLabel" }, usesInheritance: true, ngImport: i0 });
8137
8182
  }
8138
8183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Messages, decorators: [{
8139
8184
  type: Directive
@@ -8143,6 +8188,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
8143
8188
  type: Input
8144
8189
  }], moreEvents: [{
8145
8190
  type: Input
8191
+ }], moreEventsLabel: [{
8192
+ type: Input
8146
8193
  }], dateHeader: [{
8147
8194
  type: Input
8148
8195
  }], timeHeader: [{
@@ -9495,6 +9542,9 @@ class SchedulerComponent {
9495
9542
  i18n-moreEvents="kendo.scheduler.moreEvents|The text of the more events button in the month view. The {count} placeholder is replaced with the number of hidden events."
9496
9543
  moreEvents="{count} more"
9497
9544
 
9545
+ i18n-moreEventsLabel="kendo.scheduler.moreEventsLabel|The aria-label of the more events button in the month view. The {count} placeholder is replaced with the number of hidden events."
9546
+ moreEventsLabel="{count} more events"
9547
+
9498
9548
  i18n-dateHeader="kendo.scheduler.dateHeader|The date header text displayed in the agenda view."
9499
9549
  dateHeader="Date"
9500
9550
 
@@ -9917,6 +9967,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
9917
9967
  i18n-moreEvents="kendo.scheduler.moreEvents|The text of the more events button in the month view. The {count} placeholder is replaced with the number of hidden events."
9918
9968
  moreEvents="{count} more"
9919
9969
 
9970
+ i18n-moreEventsLabel="kendo.scheduler.moreEventsLabel|The aria-label of the more events button in the month view. The {count} placeholder is replaced with the number of hidden events."
9971
+ moreEventsLabel="{count} more events"
9972
+
9920
9973
  i18n-dateHeader="kendo.scheduler.dateHeader|The date header text displayed in the agenda view."
9921
9974
  dateHeader="Date"
9922
9975
 
@@ -11620,7 +11673,7 @@ function groupEvents(items, { taskResources, resourceGroups, spans, allResources
11620
11673
  class AgendaTaskItemComponent {
11621
11674
  localization;
11622
11675
  intl;
11623
- arrowRotateCWIcon = arrowRotateCwIcon;
11676
+ arrowRotateCwIcon = arrowRotateCwIcon;
11624
11677
  arrowsNoRepeatIcon = arrowsNoRepeatIcon;
11625
11678
  xIcon = xIcon;
11626
11679
  item;
@@ -11659,7 +11712,7 @@ class AgendaTaskItemComponent {
11659
11712
  <span class="k-scheduler-mark" [style.background-color]="eventColor"></span>
11660
11713
  }
11661
11714
  @if (isRecurrence) {
11662
- <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCWIcon"></kendo-icon-wrapper>
11715
+ <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon"></kendo-icon-wrapper>
11663
11716
  }
11664
11717
 
11665
11718
  @if (isRecurrenceException) {
@@ -11693,7 +11746,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
11693
11746
  <span class="k-scheduler-mark" [style.background-color]="eventColor"></span>
11694
11747
  }
11695
11748
  @if (isRecurrence) {
11696
- <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCWIcon"></kendo-icon-wrapper>
11749
+ <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon"></kendo-icon-wrapper>
11697
11750
  }
11698
11751
 
11699
11752
  @if (isRecurrenceException) {
@@ -13071,7 +13124,6 @@ class MonthResourceGroup {
13071
13124
  * @hidden
13072
13125
  */
13073
13126
  class MonthSlotService extends BaseSlotService {
13074
- currentPopover;
13075
13127
  layout(eventHeight, eventsPerDay, adaptiveSlotHeight) {
13076
13128
  this.groups.forEach((group) => group.forEachRange(range => range.layout(eventHeight, eventsPerDay, adaptiveSlotHeight)));
13077
13129
  }
@@ -14528,6 +14580,7 @@ class BaseViewItem {
14528
14580
  this.rect = null;
14529
14581
  this.setStyles({
14530
14582
  left: 0,
14583
+ top: 0
14531
14584
  });
14532
14585
  const slotId = { index: this.index, resourceIndex: this.resourceIndex, rangeIndex: this.rangeIndex };
14533
14586
  this.slotService.unregisterItem(this, slotId);
@@ -14657,9 +14710,11 @@ class MonthViewItemComponent extends BaseViewItem {
14657
14710
  <div [attr.title]="eventTitle">
14658
14711
  <div class="k-event-template k-event-title">{{ item.event.title }}</div>
14659
14712
  <div class="k-event-template k-event-time">
14713
+ @if (isRecurrence) {
14660
14714
  <span class="k-event-recurrence-icon">
14661
14715
  <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon" size="small"></kendo-icon-wrapper>
14662
14716
  </span>
14717
+ }
14663
14718
  {{ eventTime }}
14664
14719
  </div>
14665
14720
  </div>
@@ -14682,7 +14737,7 @@ class MonthViewItemComponent extends BaseViewItem {
14682
14737
  </span>
14683
14738
  }
14684
14739
 
14685
- @if (resizable) {
14740
+ @if (resizable && !isReadonly) {
14686
14741
  <span class="k-resize-handle k-resize-w"></span>
14687
14742
  <span class="k-resize-handle k-resize-e"></span>
14688
14743
  }
@@ -14708,9 +14763,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
14708
14763
  <div [attr.title]="eventTitle">
14709
14764
  <div class="k-event-template k-event-title">{{ item.event.title }}</div>
14710
14765
  <div class="k-event-template k-event-time">
14766
+ @if (isRecurrence) {
14711
14767
  <span class="k-event-recurrence-icon">
14712
14768
  <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon" size="small"></kendo-icon-wrapper>
14713
14769
  </span>
14770
+ }
14714
14771
  {{ eventTime }}
14715
14772
  </div>
14716
14773
  </div>
@@ -14733,7 +14790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
14733
14790
  </span>
14734
14791
  }
14735
14792
 
14736
- @if (resizable) {
14793
+ @if (resizable && !isReadonly) {
14737
14794
  <span class="k-resize-handle k-resize-w"></span>
14738
14795
  <span class="k-resize-handle k-resize-e"></span>
14739
14796
  }
@@ -14997,6 +15054,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
14997
15054
  args: ['attr.data-slot-index']
14998
15055
  }] } });
14999
15056
 
15057
+ /**
15058
+ * @hidden
15059
+ */
15060
+ class MonthSlotComponent extends BaseSlotDirective {
15061
+ cdr;
15062
+ moreEventsWidth;
15063
+ moreEventsLeft;
15064
+ moreEventsTop;
15065
+ showMoreButton;
15066
+ hiddenCount = 0;
15067
+ moreEvents = [];
15068
+ resourcesByIndex;
15069
+ monthDaySlotTemplateRef;
15070
+ eventsPerDay;
15071
+ eventHeight;
15072
+ adaptiveSlotHeight;
15073
+ set day(value) {
15074
+ this._day = value;
15075
+ this.start = value;
15076
+ }
15077
+ /**
15078
+ * For the slot template we need the day value without the UTC conversion
15079
+ * - timezone does not matter for the day part in this case as the calendar month view is the same for every timezone
15080
+ * otherwise the date is incorrect for some timezones (e.g. LA timezone) -
15081
+ * For example, it displays Feb. 8, 2023 to be Thursday, wherease it is Wednesday
15082
+ */
15083
+ get day() {
15084
+ return this._day;
15085
+ }
15086
+ set start(value) {
15087
+ this.startDate = toUTCDate(value);
15088
+ }
15089
+ get start() {
15090
+ return this.startDate;
15091
+ }
15092
+ isDaySlot = true;
15093
+ get end() {
15094
+ return addUTCDays(this.start, 1);
15095
+ }
15096
+ isFirstDayOfMonth(day) {
15097
+ return isEqualDate(day, firstDayOfMonth(day));
15098
+ }
15099
+ get linkHeight() {
15100
+ if (this._linkHeight === null) {
15101
+ const element = firstElementChild(this.nativeElement);
15102
+ this._linkHeight = element ? element.offsetHeight + element.offsetTop : 0;
15103
+ }
15104
+ return this._linkHeight;
15105
+ }
15106
+ startDate;
15107
+ _day;
15108
+ _linkHeight = null;
15109
+ constructor(element, slotService, localization, cdr) {
15110
+ super(element, slotService, localization);
15111
+ this.cdr = cdr;
15112
+ }
15113
+ ngOnDestroy() {
15114
+ super.ngOnDestroy();
15115
+ this.removeShowMore();
15116
+ }
15117
+ showMore(rect) {
15118
+ this.showMoreButton = true;
15119
+ this.moreEventsWidth = rect.width;
15120
+ this.moreEventsLeft = rect.left;
15121
+ this.moreEventsTop = rect.top;
15122
+ this.cdr.detectChanges();
15123
+ }
15124
+ hideMore() {
15125
+ this.hiddenCount = 0;
15126
+ this.showMoreButton = false;
15127
+ this.removeShowMore();
15128
+ }
15129
+ invalidate() {
15130
+ super.invalidate();
15131
+ this._linkHeight = null;
15132
+ this.hiddenCount = 0;
15133
+ this.showMoreButton = false;
15134
+ this.removeShowMore();
15135
+ }
15136
+ removeShowMore() {
15137
+ this.showMoreButton = false;
15138
+ this.cdr.detectChanges();
15139
+ }
15140
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthSlotComponent, deps: [{ token: i0.ElementRef }, { token: MonthSlotService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
15141
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.27", type: MonthSlotComponent, isStandalone: true, selector: "[monthSlot]", inputs: { moreEvents: "moreEvents", resourcesByIndex: "resourcesByIndex", monthDaySlotTemplateRef: "monthDaySlotTemplateRef", eventsPerDay: "eventsPerDay", eventHeight: "eventHeight", adaptiveSlotHeight: "adaptiveSlotHeight", day: ["monthSlot", "day"] }, usesInheritance: true, ngImport: i0, template: `
15142
+ @if (!monthDaySlotTemplateRef) {
15143
+ <span class="k-link k-nav-day">
15144
+ {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15145
+ </span>
15146
+ }
15147
+ @if (monthDaySlotTemplateRef) {
15148
+ <ng-container
15149
+ [ngTemplateOutlet]="monthDaySlotTemplateRef"
15150
+ [ngTemplateOutletContext]="{ date: day, resources: resourcesByIndex }"
15151
+ >
15152
+ </ng-container>
15153
+ }
15154
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DatePipe, name: "kendoDate" }] });
15155
+ }
15156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthSlotComponent, decorators: [{
15157
+ type: Component,
15158
+ args: [{
15159
+ selector: '[monthSlot]',
15160
+ template: `
15161
+ @if (!monthDaySlotTemplateRef) {
15162
+ <span class="k-link k-nav-day">
15163
+ {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15164
+ </span>
15165
+ }
15166
+ @if (monthDaySlotTemplateRef) {
15167
+ <ng-container
15168
+ [ngTemplateOutlet]="monthDaySlotTemplateRef"
15169
+ [ngTemplateOutletContext]="{ date: day, resources: resourcesByIndex }"
15170
+ >
15171
+ </ng-container>
15172
+ }
15173
+ `,
15174
+ standalone: true,
15175
+ imports: [NgTemplateOutlet, DatePipe]
15176
+ }]
15177
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: MonthSlotService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }], propDecorators: { moreEvents: [{
15178
+ type: Input
15179
+ }], resourcesByIndex: [{
15180
+ type: Input
15181
+ }], monthDaySlotTemplateRef: [{
15182
+ type: Input
15183
+ }], eventsPerDay: [{
15184
+ type: Input
15185
+ }], eventHeight: [{
15186
+ type: Input
15187
+ }], adaptiveSlotHeight: [{
15188
+ type: Input
15189
+ }], day: [{
15190
+ type: Input,
15191
+ args: ['monthSlot']
15192
+ }] } });
15193
+
15000
15194
  /**
15001
15195
  * @hidden
15002
15196
  */
@@ -15104,7 +15298,7 @@ class EventsPopoverComponent {
15104
15298
  }
15105
15299
  </ng-template>
15106
15300
  </kendo-popover>
15107
- `, isInline: true, dependencies: [{ kind: "component", type: PopoverComponent, selector: "kendo-popover", inputs: ["popupClass", "collision", "popupSettings", "position", "offset", "width", "height", "title", "subtitle", "body", "callout", "animation", "templateData"], outputs: ["show", "shown", "hide", "hidden", "closeOnKeyDown"] }, { kind: "directive", type: PopoverTitleTemplateDirective, selector: "[kendoPopoverTitleTemplate]" }, { kind: "directive", type: PopoverBodyTemplateDirective, selector: "[kendoPopoverBodyTemplate]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15301
+ `, isInline: true, dependencies: [{ kind: "component", type: PopoverComponent, selector: "kendo-popover", inputs: ["popupClass", "collision", "position", "offset", "width", "height", "title", "subtitle", "body", "callout", "animation", "templateData"], outputs: ["show", "shown", "hide", "hidden", "closeOnKeyDown"] }, { kind: "directive", type: PopoverTitleTemplateDirective, selector: "[kendoPopoverTitleTemplate]" }, { kind: "directive", type: PopoverBodyTemplateDirective, selector: "[kendoPopoverBodyTemplate]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15108
15302
  }
15109
15303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: EventsPopoverComponent, decorators: [{
15110
15304
  type: Component,
@@ -15189,249 +15383,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
15189
15383
  args: ['popover', { static: true }]
15190
15384
  }] } });
15191
15385
 
15192
- /**
15193
- * @hidden
15194
- */
15195
- class MonthSlotComponent extends BaseSlotDirective {
15196
- cdr;
15197
- focusService;
15198
- viewState;
15199
- showMoreFocusable;
15200
- popoverAnchor;
15201
- moreEventsWidth;
15202
- moreEventsLeft;
15203
- moreEventsTop;
15204
- showMoreButton;
15205
- moreHorizontalIcon = moreHorizontalIcon;
15206
- hiddenCount = 0;
15207
- moreEvents = [];
15208
- eventClass;
15209
- eventStyles;
15210
- resourcesByIndex;
15211
- monthDaySlotTemplateRef;
15212
- eventsPerDay;
15213
- eventHeight;
15214
- adaptiveSlotHeight;
15215
- set day(value) {
15216
- this._day = value;
15217
- this.start = value;
15218
- }
15219
- /**
15220
- * For the slot template we need the day value without the UTC conversion
15221
- * - timezone does not matter for the day part in this case as the calendar month view is the same for every timezone
15222
- * otherwise the date is incorrect for some timezones (e.g. LA timezone) -
15223
- * For example, it displays Feb. 8, 2023 to be Thursday, wherease it is Wednesday
15224
- */
15225
- get day() {
15226
- return this._day;
15227
- }
15228
- set start(value) {
15229
- this.startDate = toUTCDate(value);
15230
- }
15231
- get start() {
15232
- return this.startDate;
15233
- }
15234
- isDaySlot = true;
15235
- get end() {
15236
- return addUTCDays(this.start, 1);
15237
- }
15238
- isFirstDayOfMonth(day) {
15239
- return isEqualDate(day, firstDayOfMonth(day));
15240
- }
15241
- get linkHeight() {
15242
- if (this._linkHeight === null) {
15243
- const element = firstElementChild(this.nativeElement);
15244
- this._linkHeight = element ? element.offsetHeight + element.offsetTop : 0;
15245
- }
15246
- return this._linkHeight;
15247
- }
15248
- get moreEventsText() {
15249
- const message = this.localization.get('moreEvents') || '{count} more';
15250
- return message.replace('{count}', String(this.hiddenCount));
15251
- }
15252
- startDate;
15253
- _day;
15254
- _linkHeight = null;
15255
- constructor(element, slotService, localization, cdr, focusService, viewState) {
15256
- super(element, slotService, localization);
15257
- this.cdr = cdr;
15258
- this.focusService = focusService;
15259
- this.viewState = viewState;
15260
- }
15261
- ngOnDestroy() {
15262
- super.ngOnDestroy();
15263
- this.removeShowMore();
15264
- }
15265
- onNavigateToDay(date) {
15266
- this.hidePopover();
15267
- this.viewState.navigateTo({ viewName: 'day', date: new Date(date) });
15268
- }
15269
- showPopover() {
15270
- this.hidePopover();
15271
- this.popoverAnchor?.show();
15272
- this.slotService.currentPopover = this.popoverAnchor;
15273
- }
15274
- hidePopover() {
15275
- this.slotService.currentPopover?.hide();
15276
- }
15277
- showMore(rect) {
15278
- this.showMoreButton = true;
15279
- this.moreEventsWidth = rect.width;
15280
- this.moreEventsLeft = rect.left;
15281
- this.moreEventsTop = rect.top;
15282
- this.cdr.detectChanges();
15283
- this.repositionShowMoreInFocus();
15284
- }
15285
- repositionShowMoreInFocus() {
15286
- if (!this.showMoreFocusable) {
15287
- return;
15288
- }
15289
- let lastVisibleItem = null;
15290
- let maxRowIndex = -1;
15291
- const slotResourceIndex = this.id.resourceIndex;
15292
- this.slotService.forEachItem((viewItem) => {
15293
- if (viewItem.resourceIndex !== slotResourceIndex) {
15294
- return;
15295
- }
15296
- const data = viewItem.item.data[viewItem.resourceIndex];
15297
- if (data.hidden) {
15298
- return;
15299
- }
15300
- if (!intersects(viewItem.item.startTime, viewItem.item.endTime, this.start, this.end)) {
15301
- return;
15302
- }
15303
- if (data.rowIndex > maxRowIndex) {
15304
- maxRowIndex = data.rowIndex;
15305
- lastVisibleItem = viewItem;
15306
- }
15307
- });
15308
- if (!lastVisibleItem) {
15309
- return;
15310
- }
15311
- const anchor = this.focusService.getFocusableByElement(lastVisibleItem.nativeElement);
15312
- if (!anchor) {
15313
- return;
15314
- }
15315
- this.focusService.moveAfter(this.showMoreFocusable, anchor);
15316
- }
15317
- hideMore() {
15318
- this.hiddenCount = 0;
15319
- this.showMoreButton = false;
15320
- this.removeShowMore();
15321
- }
15322
- invalidate() {
15323
- super.invalidate();
15324
- this._linkHeight = null;
15325
- this.hiddenCount = 0;
15326
- this.showMoreButton = false;
15327
- this.removeShowMore();
15328
- }
15329
- removeShowMore() {
15330
- this.showMoreButton = false;
15331
- this.cdr.detectChanges();
15332
- }
15333
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthSlotComponent, deps: [{ token: i0.ElementRef }, { token: MonthSlotService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: FocusService }, { token: ViewStateService }], target: i0.ɵɵFactoryTarget.Component });
15334
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.27", type: MonthSlotComponent, isStandalone: true, selector: "[monthSlot]", inputs: { moreEvents: "moreEvents", eventClass: "eventClass", eventStyles: "eventStyles", resourcesByIndex: "resourcesByIndex", monthDaySlotTemplateRef: "monthDaySlotTemplateRef", eventsPerDay: "eventsPerDay", eventHeight: "eventHeight", adaptiveSlotHeight: "adaptiveSlotHeight", day: ["monthSlot", "day"] }, viewQueries: [{ propertyName: "showMoreFocusable", first: true, predicate: FocusableDirective, descendants: true }, { propertyName: "popoverAnchor", first: true, predicate: PopoverAnchorDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
15335
- @if (!monthDaySlotTemplateRef) {
15336
- <span class="k-link k-nav-day">
15337
- {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15338
- </span>
15339
- }
15340
- @if (monthDaySlotTemplateRef) {
15341
- <ng-container
15342
- [ngTemplateOutlet]="monthDaySlotTemplateRef"
15343
- [ngTemplateOutletContext]="{ date: day, resources: resourcesByIndex }"
15344
- >
15345
- </ng-container>
15346
- }
15347
-
15348
- @if (showMoreButton) {
15349
- <button kendoButton kendoPopoverAnchor [popover]="eventsPopoverComp.popover" showOn="none" [kendoSchedulerFocusIndex]="id?.resourceIndex ?? 0" class="k-more-events" size="xsmall" themeColor="primary" fillMode="flat" [style.width.px]="moreEventsWidth" [style.left.px]="moreEventsLeft" [style.top.px]="moreEventsTop">
15350
- {{ moreEventsText }}
15351
- </button>
15352
-
15353
- <kendo-scheduler-events-popover
15354
- #eventsPopoverComp
15355
- [date]="day"
15356
- [events]="moreEvents"
15357
- [eventClass]="eventClass"
15358
- [eventStyles]="eventStyles"
15359
- [noEventsMessage]="localization.get('yearViewNoEvents')"
15360
- (navigateToDay)="onNavigateToDay($event)"
15361
- (blur)="hidePopover()">
15362
- </kendo-scheduler-events-popover>
15363
- }
15364
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PopoverAnchorDirective, selector: "[kendoPopoverAnchor]", exportAs: ["kendoPopoverAnchor"] }, { kind: "component", type: EventsPopoverComponent, selector: "kendo-scheduler-events-popover", inputs: ["date", "events", "eventClass", "eventStyles", "noEventsMessage"], outputs: ["navigateToDay"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "pipe", type: DatePipe, name: "kendoDate" }] });
15365
- }
15366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthSlotComponent, decorators: [{
15367
- type: Component,
15368
- args: [{
15369
- selector: '[monthSlot]',
15370
- template: `
15371
- @if (!monthDaySlotTemplateRef) {
15372
- <span class="k-link k-nav-day">
15373
- {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15374
- </span>
15375
- }
15376
- @if (monthDaySlotTemplateRef) {
15377
- <ng-container
15378
- [ngTemplateOutlet]="monthDaySlotTemplateRef"
15379
- [ngTemplateOutletContext]="{ date: day, resources: resourcesByIndex }"
15380
- >
15381
- </ng-container>
15382
- }
15383
-
15384
- @if (showMoreButton) {
15385
- <button kendoButton kendoPopoverAnchor [popover]="eventsPopoverComp.popover" showOn="none" [kendoSchedulerFocusIndex]="id?.resourceIndex ?? 0" class="k-more-events" size="xsmall" themeColor="primary" fillMode="flat" [style.width.px]="moreEventsWidth" [style.left.px]="moreEventsLeft" [style.top.px]="moreEventsTop">
15386
- {{ moreEventsText }}
15387
- </button>
15388
-
15389
- <kendo-scheduler-events-popover
15390
- #eventsPopoverComp
15391
- [date]="day"
15392
- [events]="moreEvents"
15393
- [eventClass]="eventClass"
15394
- [eventStyles]="eventStyles"
15395
- [noEventsMessage]="localization.get('yearViewNoEvents')"
15396
- (navigateToDay)="onNavigateToDay($event)"
15397
- (blur)="hidePopover()">
15398
- </kendo-scheduler-events-popover>
15399
- }
15400
- `,
15401
- standalone: true,
15402
- imports: [NgTemplateOutlet, PopoverAnchorDirective, EventsPopoverComponent, DatePipe, ButtonComponent, FocusableDirective]
15403
- }]
15404
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: MonthSlotService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: FocusService }, { type: ViewStateService }], propDecorators: { showMoreFocusable: [{
15405
- type: ViewChild,
15406
- args: [FocusableDirective]
15407
- }], popoverAnchor: [{
15408
- type: ViewChild,
15409
- args: [PopoverAnchorDirective]
15410
- }], moreEvents: [{
15411
- type: Input
15412
- }], eventClass: [{
15413
- type: Input
15414
- }], eventStyles: [{
15415
- type: Input
15416
- }], resourcesByIndex: [{
15417
- type: Input
15418
- }], monthDaySlotTemplateRef: [{
15419
- type: Input
15420
- }], eventsPerDay: [{
15421
- type: Input
15422
- }], eventHeight: [{
15423
- type: Input
15424
- }], adaptiveSlotHeight: [{
15425
- type: Input
15426
- }], day: [{
15427
- type: Input,
15428
- args: ['monthSlot']
15429
- }] } });
15430
-
15431
15386
  /**
15432
15387
  * @hidden
15433
15388
  */
15434
15389
  class MonthViewRendererComponent extends BaseView {
15390
+ focusService;
15435
15391
  hiddenDays;
15436
15392
  monthDaySlotTemplate;
15437
15393
  highlightOngoingEvents;
@@ -15453,7 +15409,11 @@ class MonthViewRendererComponent extends BaseView {
15453
15409
  moreEventsClick = new EventEmitter();
15454
15410
  resizeHintFormat = { skeleton: 'Md' };
15455
15411
  weeks = [];
15412
+ popoverDate;
15413
+ popoverEvents = [];
15414
+ moreButtons = [];
15456
15415
  eventElements;
15416
+ popoverContainer;
15457
15417
  get monthDaySlotTemplateRef() {
15458
15418
  return this.monthDaySlotTemplate || (this.schedulerMonthDaySlotTemplate || {}).templateRef;
15459
15419
  }
@@ -15465,10 +15425,20 @@ class MonthViewRendererComponent extends BaseView {
15465
15425
  return task.startTime < dayEnd && task.endTime > dayStart;
15466
15426
  });
15467
15427
  }
15428
+ onPopoverNavigateToDay(date) {
15429
+ this.popoverContainer?.hide();
15430
+ this.viewState.navigateTo({ viewName: 'day', date: new Date(date) });
15431
+ }
15432
+ setPopoverData(slot) {
15433
+ this.popoverDate = slot.day;
15434
+ this.popoverEvents = slot.moreEvents;
15435
+ }
15468
15436
  ongoingEventsTimeout;
15469
15437
  schedulerMonthDaySlotTemplate;
15470
- constructor(viewContext, viewState, intl, slotService, zone, element, renderer, pdfService, localization, changeDetector, scrollbarService) {
15438
+ disposeDocumentClick;
15439
+ constructor(viewContext, viewState, intl, slotService, zone, element, renderer, pdfService, localization, changeDetector, scrollbarService, focusService) {
15471
15440
  super(viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization, changeDetector, scrollbarService);
15441
+ this.focusService = focusService;
15472
15442
  this.updateOngoingEvents = this.updateOngoingEvents.bind(this);
15473
15443
  }
15474
15444
  ngOnChanges(changes) {
@@ -15492,8 +15462,21 @@ class MonthViewRendererComponent extends BaseView {
15492
15462
  ngAfterViewInit() {
15493
15463
  this.updateOngoingEvents();
15494
15464
  super.ngAfterViewInit();
15465
+ this.zone.runOutsideAngular(() => {
15466
+ this.disposeDocumentClick = this.renderer.listen('document', 'click', (e) => {
15467
+ if (!this.popoverContainer?.popupRef) {
15468
+ return;
15469
+ }
15470
+ const target = e.target;
15471
+ if (target.closest('.k-more-events') || target.closest('.k-popup')) {
15472
+ return;
15473
+ }
15474
+ this.popoverContainer.hide();
15475
+ });
15476
+ });
15495
15477
  }
15496
15478
  ngOnDestroy() {
15479
+ this.disposeDocumentClick?.();
15497
15480
  clearTimeout(this.ongoingEventsTimeout);
15498
15481
  super.ngOnDestroy();
15499
15482
  }
@@ -15572,6 +15555,7 @@ class MonthViewRendererComponent extends BaseView {
15572
15555
  if (isAutoHeight) {
15573
15556
  content.style.overflow = 'auto';
15574
15557
  }
15558
+ this.collectMoreButtons();
15575
15559
  this.syncTables();
15576
15560
  }
15577
15561
  syncTables() {
@@ -15594,20 +15578,16 @@ class MonthViewRendererComponent extends BaseView {
15594
15578
  }
15595
15579
  onClick(e, eventType = e.type) {
15596
15580
  if (eventType === 'click') {
15597
- this.slotService.currentPopover?.hide();
15598
- const eventSlot = closestInScope(e.target, node => node.hasAttribute('data-slot-index'), this.element.nativeElement);
15599
- const navigateToDay = closestInScope(e.target, node => hasClasses(node, 'k-more-events k-nav-day'), eventSlot);
15600
- if (eventSlot && navigateToDay) {
15601
- const index = eventSlot.getAttribute('data-slot-index');
15581
+ const moreBtn = closestInScope(e.target, node => hasClasses(node, 'k-more-events'), this.element.nativeElement);
15582
+ if (moreBtn) {
15583
+ const index = moreBtn.getAttribute('data-slot-index');
15584
+ if (!index) {
15585
+ return;
15586
+ }
15602
15587
  const slot = this.slotService.slotByIndex(index);
15603
15588
  const [resourceIndex, rangeIndex] = index.split(':').map(part => parseInt(part, 10));
15604
15589
  const group = this.slotService['groups'][resourceIndex];
15605
15590
  const range = group.dayRanges[rangeIndex];
15606
- const slotDateClicked = closestInScope(e.target, node => hasClasses(node, 'k-nav-day'), eventSlot);
15607
- if (slotDateClicked) {
15608
- this.viewState.navigateTo({ viewName: 'day', date: toLocalDate(slot.start) });
15609
- return;
15610
- }
15611
15591
  this.zone.run(() => {
15612
15592
  const moreEventsEvent = new MoreEventsClickEvent();
15613
15593
  const filterSlotEvents = (isHidden) => range.items
@@ -15623,11 +15603,22 @@ class MonthViewRendererComponent extends BaseView {
15623
15603
  moreEventsEvent.date = toLocalDate(slot.start);
15624
15604
  this.moreEventsClick.emit(moreEventsEvent);
15625
15605
  if (!moreEventsEvent.isDefaultPrevented()) {
15626
- slot.showPopover();
15606
+ this.popoverContainer.hide();
15607
+ this.setPopoverData(slot);
15608
+ this.popoverContainer.show(moreBtn);
15627
15609
  }
15628
15610
  });
15629
15611
  return;
15630
15612
  }
15613
+ const navDay = closestInScope(e.target, node => hasClasses(node, 'k-nav-day'), this.element.nativeElement);
15614
+ if (navDay) {
15615
+ const eventSlot = closestInScope(navDay, node => node.hasAttribute('data-slot-index'), this.element.nativeElement);
15616
+ if (eventSlot) {
15617
+ const slot = this.slotService.slotByIndex(eventSlot.getAttribute('data-slot-index'));
15618
+ this.viewState.navigateTo({ viewName: 'day', date: toLocalDate(slot.start) });
15619
+ return;
15620
+ }
15621
+ }
15631
15622
  }
15632
15623
  super.onClick(e, eventType);
15633
15624
  }
@@ -15707,10 +15698,70 @@ class MonthViewRendererComponent extends BaseView {
15707
15698
  }
15708
15699
  return weeks;
15709
15700
  }
15710
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthViewRendererComponent, deps: [{ token: ViewContextService }, { token: ViewStateService }, { token: i4.IntlService }, { token: MonthSlotService }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: PDFService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i7.ScrollbarService }], target: i0.ɵɵFactoryTarget.Component });
15701
+ collectMoreButtons() {
15702
+ const buttons = [];
15703
+ const message = this.localization.get('moreEvents');
15704
+ this.slotService.forEachSlot((slot) => {
15705
+ if (slot.showMoreButton) {
15706
+ const count = String(slot.hiddenCount);
15707
+ buttons.push({
15708
+ width: slot.moreEventsWidth,
15709
+ left: slot.moreEventsLeft,
15710
+ top: slot.moreEventsTop,
15711
+ text: message.replace('{count}', count),
15712
+ ariaLabel: (this.localization.get('moreEventsLabel')).replace('{count}', count),
15713
+ resourceIndex: slot.id?.resourceIndex ?? 0,
15714
+ slotIndex: slot.slotIndex
15715
+ });
15716
+ }
15717
+ });
15718
+ this.moreButtons = buttons;
15719
+ this.cdr.detectChanges();
15720
+ this.reorderButtonsFocus();
15721
+ }
15722
+ reorderButtonsFocus() {
15723
+ const contentEl = this.element.nativeElement.querySelector('.k-scheduler-content');
15724
+ if (!contentEl) {
15725
+ return;
15726
+ }
15727
+ const buttonEls = contentEl.querySelectorAll('.k-more-events');
15728
+ buttonEls.forEach((btnEl) => {
15729
+ const slotIndex = btnEl.getAttribute('data-slot-index');
15730
+ if (!slotIndex) {
15731
+ return;
15732
+ }
15733
+ const slot = this.slotService.slotByIndex(slotIndex);
15734
+ if (!slot) {
15735
+ return;
15736
+ }
15737
+ // Find the last visible event that intersects this slot
15738
+ let lastEvent;
15739
+ const events = this.eventElements?.toArray() || [];
15740
+ for (const event of events) {
15741
+ if (event.item.data[event.resourceIndex]?.hidden) {
15742
+ continue;
15743
+ }
15744
+ if (event.resourceIndex !== slot.id.resourceIndex) {
15745
+ continue;
15746
+ }
15747
+ if (intersects(event.item.startTime, event.item.endTime, slot.start, slot.end)) {
15748
+ lastEvent = event;
15749
+ }
15750
+ }
15751
+ if (!lastEvent) {
15752
+ return;
15753
+ }
15754
+ const btnFocusable = this.focusService.getFocusableByElement(btnEl);
15755
+ const eventFocusable = this.focusService.getFocusableByElement(lastEvent.nativeElement);
15756
+ if (btnFocusable && eventFocusable) {
15757
+ this.focusService.moveAfter(btnFocusable, eventFocusable);
15758
+ }
15759
+ });
15760
+ }
15761
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthViewRendererComponent, deps: [{ token: ViewContextService }, { token: ViewStateService }, { token: i4.IntlService }, { token: MonthSlotService }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: PDFService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i7.ScrollbarService }, { token: FocusService }], target: i0.ɵɵFactoryTarget.Component });
15711
15762
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.27", type: MonthViewRendererComponent, isStandalone: true, selector: "month-view", inputs: { hiddenDays: "hiddenDays", monthDaySlotTemplate: "monthDaySlotTemplate", highlightOngoingEvents: "highlightOngoingEvents", type: "type", eventsPerDay: "eventsPerDay", adaptiveSlotHeight: "adaptiveSlotHeight", numberOfWeeks: "numberOfWeeks", newRange: "newRange", dateRangeFn: "dateRangeFn" }, outputs: { moreEventsClick: "moreEventsClick" }, providers: [
15712
15763
  MonthSlotService
15713
- ], viewQueries: [{ propertyName: "eventElements", predicate: MonthViewItemComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
15764
+ ], viewQueries: [{ propertyName: "popoverContainer", first: true, predicate: PopoverContainerDirective, descendants: true }, { propertyName: "eventElements", predicate: MonthViewItemComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
15714
15765
  <table class="k-scheduler-layout k-scheduler-monthview" role="none">
15715
15766
  <tbody>
15716
15767
  <tr class="k-scheduler-head">
@@ -15805,6 +15856,10 @@ class MonthViewRendererComponent extends BaseView {
15805
15856
  class="k-scheduler-content"
15806
15857
  tabindex="0"
15807
15858
  #content
15859
+ kendoPopoverContainer
15860
+ [popover]="eventsPopoverComp.popover"
15861
+ filter=".k-more-events"
15862
+ showOn="none"
15808
15863
  [style.overflowY]="'auto'">
15809
15864
  <!-- Main content -->
15810
15865
  <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable>
@@ -15817,8 +15872,6 @@ class MonthViewRendererComponent extends BaseView {
15817
15872
  <td
15818
15873
  [monthSlot]="day"
15819
15874
  [moreEvents]="moreEventsByIndex(rangeIndex, index)"
15820
- [eventClass]="eventClass"
15821
- [eventStyles]="eventStyles"
15822
15875
  [eventHeight]="eventHeight"
15823
15876
  [eventsPerDay]="eventsPerDay"
15824
15877
  [adaptiveSlotHeight]="adaptiveSlotHeight"
@@ -15864,6 +15917,22 @@ class MonthViewRendererComponent extends BaseView {
15864
15917
  </div>
15865
15918
  }
15866
15919
  }
15920
+ @for (btn of moreButtons; track itemIndex($index, btn)) {
15921
+ <button
15922
+ kendoButton
15923
+ [kendoSchedulerFocusIndex]="btn.resourceIndex"
15924
+ [attr.data-slot-index]="btn.slotIndex"
15925
+ [attr.aria-label]="btn.ariaLabel"
15926
+ class="k-more-events"
15927
+ size="xsmall"
15928
+ themeColor="primary"
15929
+ fillMode="flat"
15930
+ [style.width.px]="btn.width"
15931
+ [style.left.px]="btn.left"
15932
+ [style.top.px]="btn.top">
15933
+ {{ btn.text }}
15934
+ </button>
15935
+ }
15867
15936
  <kendo-hint-container #hintContainer>
15868
15937
  <ng-template>
15869
15938
  @for (hint of dragHints; track itemIndex($index, hint)) {
@@ -15889,12 +15958,21 @@ class MonthViewRendererComponent extends BaseView {
15889
15958
  }
15890
15959
  </ng-template>
15891
15960
  </kendo-hint-container>
15961
+ <kendo-scheduler-events-popover
15962
+ #eventsPopoverComp
15963
+ [date]="popoverDate"
15964
+ [events]="popoverEvents"
15965
+ [eventClass]="eventClass"
15966
+ [eventStyles]="eventStyles"
15967
+ [noEventsMessage]="localization.get('yearViewNoEvents')"
15968
+ (navigateToDay)="onPopoverNavigateToDay($event)">
15969
+ </kendo-scheduler-events-popover>
15892
15970
  </div>
15893
15971
  </td>
15894
15972
  </tr>
15895
15973
  </tbody>
15896
15974
  </table>
15897
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MonthSlotComponent, selector: "[monthSlot]", inputs: ["moreEvents", "eventClass", "eventStyles", "resourcesByIndex", "monthDaySlotTemplateRef", "eventsPerDay", "eventHeight", "adaptiveSlotHeight", "monthSlot"] }, { kind: "component", type: MonthViewItemComponent, selector: "[monthViewItem]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: HintContainerComponent, selector: "kendo-hint-container" }, { kind: "component", type: ResizeHintComponent, selector: "[kendoResizeHint]", inputs: ["hint", "format"] }, { kind: "pipe", type: RepeatPipe, name: "repeat" }, { kind: "pipe", type: ResourceIteratorPipe, name: "resourceIterator" }, { kind: "pipe", type: DatePipe, name: "kendoDate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
15975
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MonthSlotComponent, selector: "[monthSlot]", inputs: ["moreEvents", "resourcesByIndex", "monthDaySlotTemplateRef", "eventsPerDay", "eventHeight", "adaptiveSlotHeight", "monthSlot"] }, { kind: "component", type: MonthViewItemComponent, selector: "[monthViewItem]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: HintContainerComponent, selector: "kendo-hint-container" }, { kind: "component", type: ResizeHintComponent, selector: "[kendoResizeHint]", inputs: ["hint", "format"] }, { kind: "directive", type: PopoverContainerDirective, selector: "[kendoPopoverContainer]", inputs: ["filter"], exportAs: ["kendoPopoverContainer"] }, { kind: "component", type: EventsPopoverComponent, selector: "kendo-scheduler-events-popover", inputs: ["date", "events", "eventClass", "eventStyles", "noEventsMessage"], outputs: ["navigateToDay"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "pipe", type: RepeatPipe, name: "repeat" }, { kind: "pipe", type: ResourceIteratorPipe, name: "resourceIterator" }, { kind: "pipe", type: DatePipe, name: "kendoDate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
15898
15976
  }
15899
15977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthViewRendererComponent, decorators: [{
15900
15978
  type: Component,
@@ -15998,6 +16076,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
15998
16076
  class="k-scheduler-content"
15999
16077
  tabindex="0"
16000
16078
  #content
16079
+ kendoPopoverContainer
16080
+ [popover]="eventsPopoverComp.popover"
16081
+ filter=".k-more-events"
16082
+ showOn="none"
16001
16083
  [style.overflowY]="'auto'">
16002
16084
  <!-- Main content -->
16003
16085
  <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable>
@@ -16010,8 +16092,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16010
16092
  <td
16011
16093
  [monthSlot]="day"
16012
16094
  [moreEvents]="moreEventsByIndex(rangeIndex, index)"
16013
- [eventClass]="eventClass"
16014
- [eventStyles]="eventStyles"
16015
16095
  [eventHeight]="eventHeight"
16016
16096
  [eventsPerDay]="eventsPerDay"
16017
16097
  [adaptiveSlotHeight]="adaptiveSlotHeight"
@@ -16057,6 +16137,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16057
16137
  </div>
16058
16138
  }
16059
16139
  }
16140
+ @for (btn of moreButtons; track itemIndex($index, btn)) {
16141
+ <button
16142
+ kendoButton
16143
+ [kendoSchedulerFocusIndex]="btn.resourceIndex"
16144
+ [attr.data-slot-index]="btn.slotIndex"
16145
+ [attr.aria-label]="btn.ariaLabel"
16146
+ class="k-more-events"
16147
+ size="xsmall"
16148
+ themeColor="primary"
16149
+ fillMode="flat"
16150
+ [style.width.px]="btn.width"
16151
+ [style.left.px]="btn.left"
16152
+ [style.top.px]="btn.top">
16153
+ {{ btn.text }}
16154
+ </button>
16155
+ }
16060
16156
  <kendo-hint-container #hintContainer>
16061
16157
  <ng-template>
16062
16158
  @for (hint of dragHints; track itemIndex($index, hint)) {
@@ -16082,6 +16178,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16082
16178
  }
16083
16179
  </ng-template>
16084
16180
  </kendo-hint-container>
16181
+ <kendo-scheduler-events-popover
16182
+ #eventsPopoverComp
16183
+ [date]="popoverDate"
16184
+ [events]="popoverEvents"
16185
+ [eventClass]="eventClass"
16186
+ [eventStyles]="eventStyles"
16187
+ [noEventsMessage]="localization.get('yearViewNoEvents')"
16188
+ (navigateToDay)="onPopoverNavigateToDay($event)">
16189
+ </kendo-scheduler-events-popover>
16085
16190
  </div>
16086
16191
  </td>
16087
16192
  </tr>
@@ -16089,9 +16194,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16089
16194
  </table>
16090
16195
  `,
16091
16196
  standalone: true,
16092
- imports: [NgTemplateOutlet, NgClass, MonthSlotComponent, MonthViewItemComponent, NgStyle, FocusableDirective, HintContainerComponent, ResizeHintComponent, RepeatPipe, ResourceIteratorPipe, DatePipe, AsyncPipe]
16197
+ imports: [NgTemplateOutlet, NgClass, MonthSlotComponent, MonthViewItemComponent, NgStyle, FocusableDirective, HintContainerComponent, ResizeHintComponent, RepeatPipe, ResourceIteratorPipe, DatePipe, AsyncPipe, PopoverContainerDirective, EventsPopoverComponent, ButtonComponent]
16093
16198
  }]
16094
- }], ctorParameters: () => [{ type: ViewContextService }, { type: ViewStateService }, { type: i4.IntlService }, { type: MonthSlotService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: PDFService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i7.ScrollbarService }], propDecorators: { hiddenDays: [{
16199
+ }], ctorParameters: () => [{ type: ViewContextService }, { type: ViewStateService }, { type: i4.IntlService }, { type: MonthSlotService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: PDFService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i7.ScrollbarService }, { type: FocusService }], propDecorators: { hiddenDays: [{
16095
16200
  type: Input
16096
16201
  }], monthDaySlotTemplate: [{
16097
16202
  type: Input
@@ -16114,6 +16219,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16114
16219
  }], eventElements: [{
16115
16220
  type: ViewChildren,
16116
16221
  args: [MonthViewItemComponent]
16222
+ }], popoverContainer: [{
16223
+ type: ViewChild,
16224
+ args: [PopoverContainerDirective]
16117
16225
  }] } });
16118
16226
 
16119
16227
  /**
@@ -17206,6 +17314,7 @@ class SlotRange {
17206
17314
  }));
17207
17315
  addMinHeightOverflowEvents(sorted, slots, slotItems);
17208
17316
  const slotKeys = Object.keys(slotItems);
17317
+ slotKeys.forEach(key => { slotItems[key].slot.columns = undefined; });
17209
17318
  initTimeColumns(slotKeys, slotItems);
17210
17319
  slotKeys.forEach((key) => {
17211
17320
  const { slot, events } = slotItems[key];
@@ -17744,7 +17853,7 @@ class DayTimeViewItemComponent extends BaseViewItem {
17744
17853
  </span>
17745
17854
  }
17746
17855
 
17747
- @if (resizable && vertical) {
17856
+ @if (resizable && vertical && !isReadonly) {
17748
17857
  @if (!item.tail) {
17749
17858
  <span class="k-resize-handle k-resize-n"></span>
17750
17859
  }
@@ -17826,7 +17935,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
17826
17935
  </span>
17827
17936
  }
17828
17937
 
17829
- @if (resizable && vertical) {
17938
+ @if (resizable && vertical && !isReadonly) {
17830
17939
  @if (!item.tail) {
17831
17940
  <span class="k-resize-handle k-resize-n"></span>
17832
17941
  }
@@ -20185,7 +20294,7 @@ class TimelineMultiDayViewComponent extends DayTimeViewComponent {
20185
20294
  viewName = 'timeline';
20186
20295
  verticalResourceRows;
20187
20296
  get classNames() {
20188
- return `k-scheduler-${this.viewName}-view`;
20297
+ return `k-scheduler-${this.viewName}view`;
20189
20298
  }
20190
20299
  get contentWidthPercentage() {
20191
20300
  const expectedWidth = this.columnWidth * this.slotsCount;
@@ -22387,6 +22496,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
22387
22496
  }] } });
22388
22497
 
22389
22498
  const isContentWrapper = element => hasClasses(element, 'k-scheduler-content');
22499
+ const isArrowKeyHandledBySegmentedControl = (e) => e.defaultPrevented && Boolean(closest(e.target, node => hasClasses(node, 'k-segmented-control')));
22390
22500
  const CALENDAR_TAG = 'KENDO-CALENDAR-HORIZONTAL';
22391
22501
  /**
22392
22502
  * @hidden
@@ -22487,7 +22597,8 @@ class ShortcutsDirective {
22487
22597
  }, {
22488
22598
  match: e => {
22489
22599
  const code = normalizeKeys(e);
22490
- return (code === Keys.ArrowUp || code === Keys.ArrowLeft) && noModifiers(e) && !isContentWrapper(e.target);
22600
+ return (code === Keys.ArrowUp || code === Keys.ArrowLeft) && noModifiers(e) &&
22601
+ !isContentWrapper(e.target) && !isArrowKeyHandledBySegmentedControl(e);
22491
22602
  },
22492
22603
  action: e => {
22493
22604
  //use the MultiViewCalendar navigation for Year View
@@ -22513,7 +22624,8 @@ class ShortcutsDirective {
22513
22624
  }, {
22514
22625
  match: e => {
22515
22626
  const code = normalizeKeys(e);
22516
- return (code === Keys.ArrowDown || code === Keys.ArrowRight) && noModifiers(e) && !isContentWrapper(e.target);
22627
+ return (code === Keys.ArrowDown || code === Keys.ArrowRight) && noModifiers(e) &&
22628
+ !isContentWrapper(e.target) && !isArrowKeyHandledBySegmentedControl(e);
22517
22629
  },
22518
22630
  action: e => {
22519
22631
  //use the MultiViewCalendar navigation for Year View