@progress/kendo-angular-scheduler 25.1.0-develop.1 → 25.1.0-develop.10

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.
@@ -20,7 +20,7 @@ import * as i4 from '@progress/kendo-angular-intl';
20
20
  import { formatDate, CldrIntlService, DatePipe, parseDate } from '@progress/kendo-angular-intl';
21
21
  import { MultiSelectComponent, ItemTemplateDirective, TagTemplateDirective, DropDownListComponent } from '@progress/kendo-angular-dropdowns';
22
22
  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';
23
+ import { rightDoubleQuotesIcon, clockIcon, commentIcon, globeIcon, arrowRotateCwIcon, trashIcon, calendarIcon, chevronRightIcon, chevronLeftIcon, plusIcon, filePdfIcon, arrowsNoRepeatIcon, xIcon, chevronUpIcon, chevronDownIcon } from '@progress/kendo-svg-icons';
24
24
  import { ButtonComponent, SegmentedControlComponent, DropDownButtonComponent, Button } from '@progress/kendo-angular-buttons';
25
25
  import { NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, FormFieldComponent, TextBoxDirective, TextAreaComponent, SwitchComponent } from '@progress/kendo-angular-inputs';
26
26
  import { parseRule, serializeRule, expand } from '@progress/kendo-recurrence';
@@ -33,7 +33,7 @@ import { drawDOM, exportPDF } from '@progress/kendo-drawing';
33
33
  import { saveAs } from '@progress/kendo-file-saver';
34
34
  import { orderBy, groupBy } from '@progress/kendo-data-query';
35
35
  import { Draggable } from '@progress/kendo-draggable';
36
- import { PopoverComponent, PopoverTitleTemplateDirective, PopoverBodyTemplateDirective, PopoverAnchorDirective, PopoverContainerDirective } from '@progress/kendo-angular-tooltip';
36
+ import { PopoverComponent, PopoverTitleTemplateDirective, PopoverBodyTemplateDirective, PopoverContainerDirective } from '@progress/kendo-angular-tooltip';
37
37
 
38
38
  /**
39
39
  * @hidden
@@ -43,8 +43,8 @@ const packageMetadata = {
43
43
  productName: 'Kendo UI for Angular',
44
44
  productCode: 'KENDOUIANGULAR',
45
45
  productCodes: ['KENDOUIANGULAR'],
46
- publishDate: 1786626847,
47
- version: '25.1.0-develop.1',
46
+ publishDate: 1787670094,
47
+ version: '25.1.0-develop.10',
48
48
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
49
49
  };
50
50
 
@@ -3271,7 +3271,7 @@ function noModifiers(e) {
3271
3271
 
3272
3272
  let uniqueIdCounter = 0;
3273
3273
  const offsetPositions = ['first', 'second', 'third', 'fourth', 'last'];
3274
- const frequencies = ['never', 'daily', 'weekly', 'monthly', 'yearly'];
3274
+ const frequencies = ['daily', 'weekly', 'monthly', 'yearly'];
3275
3275
  const endRules = ['never', 'count', 'until'];
3276
3276
  // Maps the `EndRule` values to their corresponding localization message keys.
3277
3277
  const endRuleMessageKeys = {
@@ -3337,6 +3337,9 @@ class RecurrenceService {
3337
3337
  recurrenceRule: rrule,
3338
3338
  weekStart: weekStart
3339
3339
  });
3340
+ if (!this.rrule || isNullOrEmptyString(this.rrule.freq)) {
3341
+ this.rrule = { freq: 'daily', interval: this.minInterval };
3342
+ }
3340
3343
  }
3341
3344
  /**
3342
3345
  * @hidden
@@ -4640,12 +4643,9 @@ class RecurrenceFrequencyEditorComponent {
4640
4643
  this.localization = localization;
4641
4644
  }
4642
4645
  ngOnInit() {
4643
- this.frequencies = this.recurrence.frequencies.filter(freq => freq.value !== 'never');
4646
+ this.frequencies = this.recurrence.frequencies;
4644
4647
  }
4645
4648
  get selected() {
4646
- if (!this.recurrence.rrule) {
4647
- this.recurrence.setFrequency(this.frequencies[0].value);
4648
- }
4649
4649
  return this.recurrence.frequency;
4650
4650
  }
4651
4651
  onFrequencyChange(newFreq) {
@@ -5324,16 +5324,16 @@ class RecurrenceEditorComponent {
5324
5324
  dailyInterval='day(s)'
5325
5325
 
5326
5326
  i18n-dailyRepeatEvery="kendo.recurrenceeditor.dailyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5327
- dailyRepeatEvery='Repeat every'
5327
+ dailyRepeatEvery='Repeats every'
5328
5328
 
5329
5329
  i18n-weeklyInterval="kendo.recurrenceeditor.weeklyInterval|The text similar to 'week(s)' displayed in the recurrence editor."
5330
5330
  weeklyInterval='week(s)'
5331
5331
 
5332
5332
  i18n-weeklyRepeatEvery="kendo.recurrenceeditor.weeklyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5333
- weeklyRepeatEvery='Repeat every'
5333
+ weeklyRepeatEvery='Repeats every'
5334
5334
 
5335
5335
  i18n-weeklyRepeatOn="kendo.recurrenceeditor.weeklyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5336
- weeklyRepeatOn='Repeat on'
5336
+ weeklyRepeatOn='On'
5337
5337
 
5338
5338
  i18n-monthlyDay="kendo.recurrenceeditor.monthlyDay|The text similar to 'Day' displayed in the recurrence editor."
5339
5339
  monthlyDay='Day'
@@ -5342,37 +5342,37 @@ class RecurrenceEditorComponent {
5342
5342
  monthlyInterval='month(s)'
5343
5343
 
5344
5344
  i18n-monthlyRepeatEvery="kendo.recurrenceeditor.monthlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5345
- monthlyRepeatEvery='Repeat every'
5345
+ monthlyRepeatEvery='Repeats every'
5346
5346
 
5347
5347
  i18n-monthlyRepeatOn="kendo.recurrenceeditor.monthlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5348
- monthlyRepeatOn='Repeat on'
5348
+ monthlyRepeatOn='On'
5349
5349
 
5350
5350
  i18n-yearlyOf="kendo.recurrenceeditor.yearlyOf|The text similar to 'of' displayed in the recurrence editor."
5351
5351
  yearlyOf='of'
5352
5352
 
5353
5353
  i18n-yearlyRepeatEvery="kendo.recurrenceeditor.yearlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5354
- yearlyRepeatEvery='Repeat every'
5354
+ yearlyRepeatEvery='Repeats every'
5355
5355
 
5356
5356
  i18n-yearlyRepeatOn="kendo.recurrenceeditor.yearlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5357
- yearlyRepeatOn='Repeat on'
5357
+ yearlyRepeatOn='On'
5358
5358
 
5359
5359
  i18n-yearlyInterval="kendo.recurrenceeditor.yearlyInterval|The text similar to 'year(s)' displayed in the recurrence editor."
5360
5360
  yearlyInterval='year(s)'
5361
5361
 
5362
5362
  i18n-frequenciesDaily="kendo.recurrenceeditor.frequenciesDaily|The text similar to 'Daily' displayed in the recurrence editor."
5363
- frequenciesDaily='Daily'
5363
+ frequenciesDaily='Day'
5364
5364
 
5365
5365
  i18n-frequenciesMonthly="kendo.recurrenceeditor.frequenciesMonthly|The text similar to 'Monthly' displayed in the recurrence editor."
5366
- frequenciesMonthly='Monthly'
5366
+ frequenciesMonthly='Month'
5367
5367
 
5368
5368
  i18n-frequenciesNever="kendo.recurrenceeditor.frequenciesNever|The text similar to 'Never' displayed in the recurrence editor."
5369
5369
  frequenciesNever='Never'
5370
5370
 
5371
5371
  i18n-frequenciesWeekly="kendo.recurrenceeditor.frequenciesWeekly|The text similar to 'Weekly' displayed in the recurrence editor."
5372
- frequenciesWeekly='Weekly'
5372
+ frequenciesWeekly='Week'
5373
5373
 
5374
5374
  i18n-frequenciesYearly="kendo.recurrenceeditor.frequenciesYearly|The text similar to 'Yearly' displayed in the recurrence editor."
5375
- frequenciesYearly='Yearly'
5375
+ frequenciesYearly='Year'
5376
5376
 
5377
5377
  i18n-offsetPositionsFirst="kendo.recurrenceeditor.offsetPositionsFirst|The text similar to 'First' displayed in the recurrence editor."
5378
5378
  offsetPositionsFirst='First'
@@ -5499,16 +5499,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
5499
5499
  dailyInterval='day(s)'
5500
5500
 
5501
5501
  i18n-dailyRepeatEvery="kendo.recurrenceeditor.dailyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5502
- dailyRepeatEvery='Repeat every'
5502
+ dailyRepeatEvery='Repeats every'
5503
5503
 
5504
5504
  i18n-weeklyInterval="kendo.recurrenceeditor.weeklyInterval|The text similar to 'week(s)' displayed in the recurrence editor."
5505
5505
  weeklyInterval='week(s)'
5506
5506
 
5507
5507
  i18n-weeklyRepeatEvery="kendo.recurrenceeditor.weeklyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5508
- weeklyRepeatEvery='Repeat every'
5508
+ weeklyRepeatEvery='Repeats every'
5509
5509
 
5510
5510
  i18n-weeklyRepeatOn="kendo.recurrenceeditor.weeklyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5511
- weeklyRepeatOn='Repeat on'
5511
+ weeklyRepeatOn='On'
5512
5512
 
5513
5513
  i18n-monthlyDay="kendo.recurrenceeditor.monthlyDay|The text similar to 'Day' displayed in the recurrence editor."
5514
5514
  monthlyDay='Day'
@@ -5517,37 +5517,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
5517
5517
  monthlyInterval='month(s)'
5518
5518
 
5519
5519
  i18n-monthlyRepeatEvery="kendo.recurrenceeditor.monthlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5520
- monthlyRepeatEvery='Repeat every'
5520
+ monthlyRepeatEvery='Repeats every'
5521
5521
 
5522
5522
  i18n-monthlyRepeatOn="kendo.recurrenceeditor.monthlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5523
- monthlyRepeatOn='Repeat on'
5523
+ monthlyRepeatOn='On'
5524
5524
 
5525
5525
  i18n-yearlyOf="kendo.recurrenceeditor.yearlyOf|The text similar to 'of' displayed in the recurrence editor."
5526
5526
  yearlyOf='of'
5527
5527
 
5528
5528
  i18n-yearlyRepeatEvery="kendo.recurrenceeditor.yearlyRepeatEvery|The text similar to 'Repeat every' displayed in the recurrence editor."
5529
- yearlyRepeatEvery='Repeat every'
5529
+ yearlyRepeatEvery='Repeats every'
5530
5530
 
5531
5531
  i18n-yearlyRepeatOn="kendo.recurrenceeditor.yearlyRepeatOn|The text similar to 'Repeat on' displayed in the recurrence editor."
5532
- yearlyRepeatOn='Repeat on'
5532
+ yearlyRepeatOn='On'
5533
5533
 
5534
5534
  i18n-yearlyInterval="kendo.recurrenceeditor.yearlyInterval|The text similar to 'year(s)' displayed in the recurrence editor."
5535
5535
  yearlyInterval='year(s)'
5536
5536
 
5537
5537
  i18n-frequenciesDaily="kendo.recurrenceeditor.frequenciesDaily|The text similar to 'Daily' displayed in the recurrence editor."
5538
- frequenciesDaily='Daily'
5538
+ frequenciesDaily='Day'
5539
5539
 
5540
5540
  i18n-frequenciesMonthly="kendo.recurrenceeditor.frequenciesMonthly|The text similar to 'Monthly' displayed in the recurrence editor."
5541
- frequenciesMonthly='Monthly'
5541
+ frequenciesMonthly='Month'
5542
5542
 
5543
5543
  i18n-frequenciesNever="kendo.recurrenceeditor.frequenciesNever|The text similar to 'Never' displayed in the recurrence editor."
5544
5544
  frequenciesNever='Never'
5545
5545
 
5546
5546
  i18n-frequenciesWeekly="kendo.recurrenceeditor.frequenciesWeekly|The text similar to 'Weekly' displayed in the recurrence editor."
5547
- frequenciesWeekly='Weekly'
5547
+ frequenciesWeekly='Week'
5548
5548
 
5549
5549
  i18n-frequenciesYearly="kendo.recurrenceeditor.frequenciesYearly|The text similar to 'Yearly' displayed in the recurrence editor."
5550
- frequenciesYearly='Yearly'
5550
+ frequenciesYearly='Year'
5551
5551
 
5552
5552
  i18n-offsetPositionsFirst="kendo.recurrenceeditor.offsetPositionsFirst|The text similar to 'First' displayed in the recurrence editor."
5553
5553
  offsetPositionsFirst='First'
@@ -6526,7 +6526,7 @@ class EditDialogComponent {
6526
6526
  </kendo-dialog>
6527
6527
  }
6528
6528
  }
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" }] });
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", "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
6530
  }
6531
6531
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: EditDialogComponent, decorators: [{
6532
6532
  type: Component,
@@ -7679,6 +7679,11 @@ class Messages extends ComponentMessages {
7679
7679
  * The `{count}` placeholder is replaced with the number of additional events.
7680
7680
  */
7681
7681
  moreEvents;
7682
+ /**
7683
+ * Sets the `aria-label` for the **more events** button in the Month view.
7684
+ * The `{count}` placeholder is replaced with the number of additional events.
7685
+ */
7686
+ moreEventsLabel;
7682
7687
  /**
7683
7688
  * Sets the date-header text in the **Agenda** view.
7684
7689
  */
@@ -8133,7 +8138,7 @@ class Messages extends ComponentMessages {
8133
8138
  */
8134
8139
  newEventLabel;
8135
8140
  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 });
8141
+ 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
8142
  }
8138
8143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: Messages, decorators: [{
8139
8144
  type: Directive
@@ -8143,6 +8148,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
8143
8148
  type: Input
8144
8149
  }], moreEvents: [{
8145
8150
  type: Input
8151
+ }], moreEventsLabel: [{
8152
+ type: Input
8146
8153
  }], dateHeader: [{
8147
8154
  type: Input
8148
8155
  }], timeHeader: [{
@@ -9495,6 +9502,9 @@ class SchedulerComponent {
9495
9502
  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
9503
  moreEvents="{count} more"
9497
9504
 
9505
+ 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."
9506
+ moreEventsLabel="{count} more events"
9507
+
9498
9508
  i18n-dateHeader="kendo.scheduler.dateHeader|The date header text displayed in the agenda view."
9499
9509
  dateHeader="Date"
9500
9510
 
@@ -9917,6 +9927,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
9917
9927
  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
9928
  moreEvents="{count} more"
9919
9929
 
9930
+ 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."
9931
+ moreEventsLabel="{count} more events"
9932
+
9920
9933
  i18n-dateHeader="kendo.scheduler.dateHeader|The date header text displayed in the agenda view."
9921
9934
  dateHeader="Date"
9922
9935
 
@@ -11620,7 +11633,7 @@ function groupEvents(items, { taskResources, resourceGroups, spans, allResources
11620
11633
  class AgendaTaskItemComponent {
11621
11634
  localization;
11622
11635
  intl;
11623
- arrowRotateCWIcon = arrowRotateCwIcon;
11636
+ arrowRotateCwIcon = arrowRotateCwIcon;
11624
11637
  arrowsNoRepeatIcon = arrowsNoRepeatIcon;
11625
11638
  xIcon = xIcon;
11626
11639
  item;
@@ -11659,7 +11672,7 @@ class AgendaTaskItemComponent {
11659
11672
  <span class="k-scheduler-mark" [style.background-color]="eventColor"></span>
11660
11673
  }
11661
11674
  @if (isRecurrence) {
11662
- <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCWIcon"></kendo-icon-wrapper>
11675
+ <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon"></kendo-icon-wrapper>
11663
11676
  }
11664
11677
 
11665
11678
  @if (isRecurrenceException) {
@@ -11693,7 +11706,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
11693
11706
  <span class="k-scheduler-mark" [style.background-color]="eventColor"></span>
11694
11707
  }
11695
11708
  @if (isRecurrence) {
11696
- <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCWIcon"></kendo-icon-wrapper>
11709
+ <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon"></kendo-icon-wrapper>
11697
11710
  }
11698
11711
 
11699
11712
  @if (isRecurrenceException) {
@@ -13071,7 +13084,6 @@ class MonthResourceGroup {
13071
13084
  * @hidden
13072
13085
  */
13073
13086
  class MonthSlotService extends BaseSlotService {
13074
- currentPopover;
13075
13087
  layout(eventHeight, eventsPerDay, adaptiveSlotHeight) {
13076
13088
  this.groups.forEach((group) => group.forEachRange(range => range.layout(eventHeight, eventsPerDay, adaptiveSlotHeight)));
13077
13089
  }
@@ -14528,6 +14540,7 @@ class BaseViewItem {
14528
14540
  this.rect = null;
14529
14541
  this.setStyles({
14530
14542
  left: 0,
14543
+ top: 0
14531
14544
  });
14532
14545
  const slotId = { index: this.index, resourceIndex: this.resourceIndex, rangeIndex: this.rangeIndex };
14533
14546
  this.slotService.unregisterItem(this, slotId);
@@ -14657,9 +14670,11 @@ class MonthViewItemComponent extends BaseViewItem {
14657
14670
  <div [attr.title]="eventTitle">
14658
14671
  <div class="k-event-template k-event-title">{{ item.event.title }}</div>
14659
14672
  <div class="k-event-template k-event-time">
14673
+ @if (isRecurrence) {
14660
14674
  <span class="k-event-recurrence-icon">
14661
14675
  <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon" size="small"></kendo-icon-wrapper>
14662
14676
  </span>
14677
+ }
14663
14678
  {{ eventTime }}
14664
14679
  </div>
14665
14680
  </div>
@@ -14682,7 +14697,7 @@ class MonthViewItemComponent extends BaseViewItem {
14682
14697
  </span>
14683
14698
  }
14684
14699
 
14685
- @if (resizable) {
14700
+ @if (resizable && !isReadonly) {
14686
14701
  <span class="k-resize-handle k-resize-w"></span>
14687
14702
  <span class="k-resize-handle k-resize-e"></span>
14688
14703
  }
@@ -14708,9 +14723,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
14708
14723
  <div [attr.title]="eventTitle">
14709
14724
  <div class="k-event-template k-event-title">{{ item.event.title }}</div>
14710
14725
  <div class="k-event-template k-event-time">
14726
+ @if (isRecurrence) {
14711
14727
  <span class="k-event-recurrence-icon">
14712
14728
  <kendo-icon-wrapper name="arrow-rotate-cw" [svgIcon]="arrowRotateCwIcon" size="small"></kendo-icon-wrapper>
14713
14729
  </span>
14730
+ }
14714
14731
  {{ eventTime }}
14715
14732
  </div>
14716
14733
  </div>
@@ -14733,7 +14750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
14733
14750
  </span>
14734
14751
  }
14735
14752
 
14736
- @if (resizable) {
14753
+ @if (resizable && !isReadonly) {
14737
14754
  <span class="k-resize-handle k-resize-w"></span>
14738
14755
  <span class="k-resize-handle k-resize-e"></span>
14739
14756
  }
@@ -14997,6 +15014,143 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
14997
15014
  args: ['attr.data-slot-index']
14998
15015
  }] } });
14999
15016
 
15017
+ /**
15018
+ * @hidden
15019
+ */
15020
+ class MonthSlotComponent extends BaseSlotDirective {
15021
+ cdr;
15022
+ moreEventsWidth;
15023
+ moreEventsLeft;
15024
+ moreEventsTop;
15025
+ showMoreButton;
15026
+ hiddenCount = 0;
15027
+ moreEvents = [];
15028
+ resourcesByIndex;
15029
+ monthDaySlotTemplateRef;
15030
+ eventsPerDay;
15031
+ eventHeight;
15032
+ adaptiveSlotHeight;
15033
+ set day(value) {
15034
+ this._day = value;
15035
+ this.start = value;
15036
+ }
15037
+ /**
15038
+ * For the slot template we need the day value without the UTC conversion
15039
+ * - timezone does not matter for the day part in this case as the calendar month view is the same for every timezone
15040
+ * otherwise the date is incorrect for some timezones (e.g. LA timezone) -
15041
+ * For example, it displays Feb. 8, 2023 to be Thursday, wherease it is Wednesday
15042
+ */
15043
+ get day() {
15044
+ return this._day;
15045
+ }
15046
+ set start(value) {
15047
+ this.startDate = toUTCDate(value);
15048
+ }
15049
+ get start() {
15050
+ return this.startDate;
15051
+ }
15052
+ isDaySlot = true;
15053
+ get end() {
15054
+ return addUTCDays(this.start, 1);
15055
+ }
15056
+ isFirstDayOfMonth(day) {
15057
+ return isEqualDate(day, firstDayOfMonth(day));
15058
+ }
15059
+ get linkHeight() {
15060
+ if (this._linkHeight === null) {
15061
+ const element = firstElementChild(this.nativeElement);
15062
+ this._linkHeight = element ? element.offsetHeight + element.offsetTop : 0;
15063
+ }
15064
+ return this._linkHeight;
15065
+ }
15066
+ startDate;
15067
+ _day;
15068
+ _linkHeight = null;
15069
+ constructor(element, slotService, localization, cdr) {
15070
+ super(element, slotService, localization);
15071
+ this.cdr = cdr;
15072
+ }
15073
+ ngOnDestroy() {
15074
+ super.ngOnDestroy();
15075
+ this.removeShowMore();
15076
+ }
15077
+ showMore(rect) {
15078
+ this.showMoreButton = true;
15079
+ this.moreEventsWidth = rect.width;
15080
+ this.moreEventsLeft = rect.left;
15081
+ this.moreEventsTop = rect.top;
15082
+ this.cdr.detectChanges();
15083
+ }
15084
+ hideMore() {
15085
+ this.hiddenCount = 0;
15086
+ this.showMoreButton = false;
15087
+ this.removeShowMore();
15088
+ }
15089
+ invalidate() {
15090
+ super.invalidate();
15091
+ this._linkHeight = null;
15092
+ this.hiddenCount = 0;
15093
+ this.showMoreButton = false;
15094
+ this.removeShowMore();
15095
+ }
15096
+ removeShowMore() {
15097
+ this.showMoreButton = false;
15098
+ this.cdr.detectChanges();
15099
+ }
15100
+ 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 });
15101
+ 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: `
15102
+ @if (!monthDaySlotTemplateRef) {
15103
+ <span class="k-link k-nav-day">
15104
+ {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15105
+ </span>
15106
+ }
15107
+ @if (monthDaySlotTemplateRef) {
15108
+ <ng-container
15109
+ [ngTemplateOutlet]="monthDaySlotTemplateRef"
15110
+ [ngTemplateOutletContext]="{ date: day, resources: resourcesByIndex }"
15111
+ >
15112
+ </ng-container>
15113
+ }
15114
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DatePipe, name: "kendoDate" }] });
15115
+ }
15116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthSlotComponent, decorators: [{
15117
+ type: Component,
15118
+ args: [{
15119
+ selector: '[monthSlot]',
15120
+ template: `
15121
+ @if (!monthDaySlotTemplateRef) {
15122
+ <span class="k-link k-nav-day">
15123
+ {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15124
+ </span>
15125
+ }
15126
+ @if (monthDaySlotTemplateRef) {
15127
+ <ng-container
15128
+ [ngTemplateOutlet]="monthDaySlotTemplateRef"
15129
+ [ngTemplateOutletContext]="{ date: day, resources: resourcesByIndex }"
15130
+ >
15131
+ </ng-container>
15132
+ }
15133
+ `,
15134
+ standalone: true,
15135
+ imports: [NgTemplateOutlet, DatePipe]
15136
+ }]
15137
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: MonthSlotService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }], propDecorators: { moreEvents: [{
15138
+ type: Input
15139
+ }], resourcesByIndex: [{
15140
+ type: Input
15141
+ }], monthDaySlotTemplateRef: [{
15142
+ type: Input
15143
+ }], eventsPerDay: [{
15144
+ type: Input
15145
+ }], eventHeight: [{
15146
+ type: Input
15147
+ }], adaptiveSlotHeight: [{
15148
+ type: Input
15149
+ }], day: [{
15150
+ type: Input,
15151
+ args: ['monthSlot']
15152
+ }] } });
15153
+
15000
15154
  /**
15001
15155
  * @hidden
15002
15156
  */
@@ -15104,7 +15258,7 @@ class EventsPopoverComponent {
15104
15258
  }
15105
15259
  </ng-template>
15106
15260
  </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 });
15261
+ `, 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
15262
  }
15109
15263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: EventsPopoverComponent, decorators: [{
15110
15264
  type: Component,
@@ -15189,249 +15343,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
15189
15343
  args: ['popover', { static: true }]
15190
15344
  }] } });
15191
15345
 
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
15346
  /**
15432
15347
  * @hidden
15433
15348
  */
15434
15349
  class MonthViewRendererComponent extends BaseView {
15350
+ focusService;
15435
15351
  hiddenDays;
15436
15352
  monthDaySlotTemplate;
15437
15353
  highlightOngoingEvents;
@@ -15453,7 +15369,11 @@ class MonthViewRendererComponent extends BaseView {
15453
15369
  moreEventsClick = new EventEmitter();
15454
15370
  resizeHintFormat = { skeleton: 'Md' };
15455
15371
  weeks = [];
15372
+ popoverDate;
15373
+ popoverEvents = [];
15374
+ moreButtons = [];
15456
15375
  eventElements;
15376
+ popoverContainer;
15457
15377
  get monthDaySlotTemplateRef() {
15458
15378
  return this.monthDaySlotTemplate || (this.schedulerMonthDaySlotTemplate || {}).templateRef;
15459
15379
  }
@@ -15465,10 +15385,20 @@ class MonthViewRendererComponent extends BaseView {
15465
15385
  return task.startTime < dayEnd && task.endTime > dayStart;
15466
15386
  });
15467
15387
  }
15388
+ onPopoverNavigateToDay(date) {
15389
+ this.popoverContainer?.hide();
15390
+ this.viewState.navigateTo({ viewName: 'day', date: new Date(date) });
15391
+ }
15392
+ setPopoverData(slot) {
15393
+ this.popoverDate = slot.day;
15394
+ this.popoverEvents = slot.moreEvents;
15395
+ }
15468
15396
  ongoingEventsTimeout;
15469
15397
  schedulerMonthDaySlotTemplate;
15470
- constructor(viewContext, viewState, intl, slotService, zone, element, renderer, pdfService, localization, changeDetector, scrollbarService) {
15398
+ disposeDocumentClick;
15399
+ constructor(viewContext, viewState, intl, slotService, zone, element, renderer, pdfService, localization, changeDetector, scrollbarService, focusService) {
15471
15400
  super(viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization, changeDetector, scrollbarService);
15401
+ this.focusService = focusService;
15472
15402
  this.updateOngoingEvents = this.updateOngoingEvents.bind(this);
15473
15403
  }
15474
15404
  ngOnChanges(changes) {
@@ -15492,8 +15422,21 @@ class MonthViewRendererComponent extends BaseView {
15492
15422
  ngAfterViewInit() {
15493
15423
  this.updateOngoingEvents();
15494
15424
  super.ngAfterViewInit();
15425
+ this.zone.runOutsideAngular(() => {
15426
+ this.disposeDocumentClick = this.renderer.listen('document', 'click', (e) => {
15427
+ if (!this.popoverContainer?.popupRef) {
15428
+ return;
15429
+ }
15430
+ const target = e.target;
15431
+ if (target.closest('.k-more-events') || target.closest('.k-popup')) {
15432
+ return;
15433
+ }
15434
+ this.popoverContainer.hide();
15435
+ });
15436
+ });
15495
15437
  }
15496
15438
  ngOnDestroy() {
15439
+ this.disposeDocumentClick?.();
15497
15440
  clearTimeout(this.ongoingEventsTimeout);
15498
15441
  super.ngOnDestroy();
15499
15442
  }
@@ -15572,6 +15515,7 @@ class MonthViewRendererComponent extends BaseView {
15572
15515
  if (isAutoHeight) {
15573
15516
  content.style.overflow = 'auto';
15574
15517
  }
15518
+ this.collectMoreButtons();
15575
15519
  this.syncTables();
15576
15520
  }
15577
15521
  syncTables() {
@@ -15594,20 +15538,16 @@ class MonthViewRendererComponent extends BaseView {
15594
15538
  }
15595
15539
  onClick(e, eventType = e.type) {
15596
15540
  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');
15541
+ const moreBtn = closestInScope(e.target, node => hasClasses(node, 'k-more-events'), this.element.nativeElement);
15542
+ if (moreBtn) {
15543
+ const index = moreBtn.getAttribute('data-slot-index');
15544
+ if (!index) {
15545
+ return;
15546
+ }
15602
15547
  const slot = this.slotService.slotByIndex(index);
15603
15548
  const [resourceIndex, rangeIndex] = index.split(':').map(part => parseInt(part, 10));
15604
15549
  const group = this.slotService['groups'][resourceIndex];
15605
15550
  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
15551
  this.zone.run(() => {
15612
15552
  const moreEventsEvent = new MoreEventsClickEvent();
15613
15553
  const filterSlotEvents = (isHidden) => range.items
@@ -15623,11 +15563,22 @@ class MonthViewRendererComponent extends BaseView {
15623
15563
  moreEventsEvent.date = toLocalDate(slot.start);
15624
15564
  this.moreEventsClick.emit(moreEventsEvent);
15625
15565
  if (!moreEventsEvent.isDefaultPrevented()) {
15626
- slot.showPopover();
15566
+ this.popoverContainer.hide();
15567
+ this.setPopoverData(slot);
15568
+ this.popoverContainer.show(moreBtn);
15627
15569
  }
15628
15570
  });
15629
15571
  return;
15630
15572
  }
15573
+ const navDay = closestInScope(e.target, node => hasClasses(node, 'k-nav-day'), this.element.nativeElement);
15574
+ if (navDay) {
15575
+ const eventSlot = closestInScope(navDay, node => node.hasAttribute('data-slot-index'), this.element.nativeElement);
15576
+ if (eventSlot) {
15577
+ const slot = this.slotService.slotByIndex(eventSlot.getAttribute('data-slot-index'));
15578
+ this.viewState.navigateTo({ viewName: 'day', date: toLocalDate(slot.start) });
15579
+ return;
15580
+ }
15581
+ }
15631
15582
  }
15632
15583
  super.onClick(e, eventType);
15633
15584
  }
@@ -15707,10 +15658,70 @@ class MonthViewRendererComponent extends BaseView {
15707
15658
  }
15708
15659
  return weeks;
15709
15660
  }
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 });
15661
+ collectMoreButtons() {
15662
+ const buttons = [];
15663
+ const message = this.localization.get('moreEvents');
15664
+ this.slotService.forEachSlot((slot) => {
15665
+ if (slot.showMoreButton) {
15666
+ const count = String(slot.hiddenCount);
15667
+ buttons.push({
15668
+ width: slot.moreEventsWidth,
15669
+ left: slot.moreEventsLeft,
15670
+ top: slot.moreEventsTop,
15671
+ text: message.replace('{count}', count),
15672
+ ariaLabel: (this.localization.get('moreEventsLabel')).replace('{count}', count),
15673
+ resourceIndex: slot.id?.resourceIndex ?? 0,
15674
+ slotIndex: slot.slotIndex
15675
+ });
15676
+ }
15677
+ });
15678
+ this.moreButtons = buttons;
15679
+ this.cdr.detectChanges();
15680
+ this.reorderButtonsFocus();
15681
+ }
15682
+ reorderButtonsFocus() {
15683
+ const contentEl = this.element.nativeElement.querySelector('.k-scheduler-content');
15684
+ if (!contentEl) {
15685
+ return;
15686
+ }
15687
+ const buttonEls = contentEl.querySelectorAll('.k-more-events');
15688
+ buttonEls.forEach((btnEl) => {
15689
+ const slotIndex = btnEl.getAttribute('data-slot-index');
15690
+ if (!slotIndex) {
15691
+ return;
15692
+ }
15693
+ const slot = this.slotService.slotByIndex(slotIndex);
15694
+ if (!slot) {
15695
+ return;
15696
+ }
15697
+ // Find the last visible event that intersects this slot
15698
+ let lastEvent;
15699
+ const events = this.eventElements?.toArray() || [];
15700
+ for (const event of events) {
15701
+ if (event.item.data[event.resourceIndex]?.hidden) {
15702
+ continue;
15703
+ }
15704
+ if (event.resourceIndex !== slot.id.resourceIndex) {
15705
+ continue;
15706
+ }
15707
+ if (intersects(event.item.startTime, event.item.endTime, slot.start, slot.end)) {
15708
+ lastEvent = event;
15709
+ }
15710
+ }
15711
+ if (!lastEvent) {
15712
+ return;
15713
+ }
15714
+ const btnFocusable = this.focusService.getFocusableByElement(btnEl);
15715
+ const eventFocusable = this.focusService.getFocusableByElement(lastEvent.nativeElement);
15716
+ if (btnFocusable && eventFocusable) {
15717
+ this.focusService.moveAfter(btnFocusable, eventFocusable);
15718
+ }
15719
+ });
15720
+ }
15721
+ 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
15722
  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
15723
  MonthSlotService
15713
- ], viewQueries: [{ propertyName: "eventElements", predicate: MonthViewItemComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
15724
+ ], viewQueries: [{ propertyName: "popoverContainer", first: true, predicate: PopoverContainerDirective, descendants: true }, { propertyName: "eventElements", predicate: MonthViewItemComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
15714
15725
  <table class="k-scheduler-layout k-scheduler-monthview" role="none">
15715
15726
  <tbody>
15716
15727
  <tr class="k-scheduler-head">
@@ -15805,6 +15816,10 @@ class MonthViewRendererComponent extends BaseView {
15805
15816
  class="k-scheduler-content"
15806
15817
  tabindex="0"
15807
15818
  #content
15819
+ kendoPopoverContainer
15820
+ [popover]="eventsPopoverComp.popover"
15821
+ filter=".k-more-events"
15822
+ showOn="none"
15808
15823
  [style.overflowY]="'auto'">
15809
15824
  <!-- Main content -->
15810
15825
  <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable>
@@ -15817,8 +15832,6 @@ class MonthViewRendererComponent extends BaseView {
15817
15832
  <td
15818
15833
  [monthSlot]="day"
15819
15834
  [moreEvents]="moreEventsByIndex(rangeIndex, index)"
15820
- [eventClass]="eventClass"
15821
- [eventStyles]="eventStyles"
15822
15835
  [eventHeight]="eventHeight"
15823
15836
  [eventsPerDay]="eventsPerDay"
15824
15837
  [adaptiveSlotHeight]="adaptiveSlotHeight"
@@ -15864,6 +15877,22 @@ class MonthViewRendererComponent extends BaseView {
15864
15877
  </div>
15865
15878
  }
15866
15879
  }
15880
+ @for (btn of moreButtons; track itemIndex($index, btn)) {
15881
+ <button
15882
+ kendoButton
15883
+ [kendoSchedulerFocusIndex]="btn.resourceIndex"
15884
+ [attr.data-slot-index]="btn.slotIndex"
15885
+ [attr.aria-label]="btn.ariaLabel"
15886
+ class="k-more-events"
15887
+ size="xsmall"
15888
+ themeColor="primary"
15889
+ fillMode="flat"
15890
+ [style.width.px]="btn.width"
15891
+ [style.left.px]="btn.left"
15892
+ [style.top.px]="btn.top">
15893
+ {{ btn.text }}
15894
+ </button>
15895
+ }
15867
15896
  <kendo-hint-container #hintContainer>
15868
15897
  <ng-template>
15869
15898
  @for (hint of dragHints; track itemIndex($index, hint)) {
@@ -15889,12 +15918,21 @@ class MonthViewRendererComponent extends BaseView {
15889
15918
  }
15890
15919
  </ng-template>
15891
15920
  </kendo-hint-container>
15921
+ <kendo-scheduler-events-popover
15922
+ #eventsPopoverComp
15923
+ [date]="popoverDate"
15924
+ [events]="popoverEvents"
15925
+ [eventClass]="eventClass"
15926
+ [eventStyles]="eventStyles"
15927
+ [noEventsMessage]="localization.get('yearViewNoEvents')"
15928
+ (navigateToDay)="onPopoverNavigateToDay($event)">
15929
+ </kendo-scheduler-events-popover>
15892
15930
  </div>
15893
15931
  </td>
15894
15932
  </tr>
15895
15933
  </tbody>
15896
15934
  </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" }] });
15935
+ `, 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
15936
  }
15899
15937
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImport: i0, type: MonthViewRendererComponent, decorators: [{
15900
15938
  type: Component,
@@ -15998,6 +16036,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
15998
16036
  class="k-scheduler-content"
15999
16037
  tabindex="0"
16000
16038
  #content
16039
+ kendoPopoverContainer
16040
+ [popover]="eventsPopoverComp.popover"
16041
+ filter=".k-more-events"
16042
+ showOn="none"
16001
16043
  [style.overflowY]="'auto'">
16002
16044
  <!-- Main content -->
16003
16045
  <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable>
@@ -16010,8 +16052,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16010
16052
  <td
16011
16053
  [monthSlot]="day"
16012
16054
  [moreEvents]="moreEventsByIndex(rangeIndex, index)"
16013
- [eventClass]="eventClass"
16014
- [eventStyles]="eventStyles"
16015
16055
  [eventHeight]="eventHeight"
16016
16056
  [eventsPerDay]="eventsPerDay"
16017
16057
  [adaptiveSlotHeight]="adaptiveSlotHeight"
@@ -16057,6 +16097,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16057
16097
  </div>
16058
16098
  }
16059
16099
  }
16100
+ @for (btn of moreButtons; track itemIndex($index, btn)) {
16101
+ <button
16102
+ kendoButton
16103
+ [kendoSchedulerFocusIndex]="btn.resourceIndex"
16104
+ [attr.data-slot-index]="btn.slotIndex"
16105
+ [attr.aria-label]="btn.ariaLabel"
16106
+ class="k-more-events"
16107
+ size="xsmall"
16108
+ themeColor="primary"
16109
+ fillMode="flat"
16110
+ [style.width.px]="btn.width"
16111
+ [style.left.px]="btn.left"
16112
+ [style.top.px]="btn.top">
16113
+ {{ btn.text }}
16114
+ </button>
16115
+ }
16060
16116
  <kendo-hint-container #hintContainer>
16061
16117
  <ng-template>
16062
16118
  @for (hint of dragHints; track itemIndex($index, hint)) {
@@ -16082,6 +16138,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16082
16138
  }
16083
16139
  </ng-template>
16084
16140
  </kendo-hint-container>
16141
+ <kendo-scheduler-events-popover
16142
+ #eventsPopoverComp
16143
+ [date]="popoverDate"
16144
+ [events]="popoverEvents"
16145
+ [eventClass]="eventClass"
16146
+ [eventStyles]="eventStyles"
16147
+ [noEventsMessage]="localization.get('yearViewNoEvents')"
16148
+ (navigateToDay)="onPopoverNavigateToDay($event)">
16149
+ </kendo-scheduler-events-popover>
16085
16150
  </div>
16086
16151
  </td>
16087
16152
  </tr>
@@ -16089,9 +16154,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16089
16154
  </table>
16090
16155
  `,
16091
16156
  standalone: true,
16092
- imports: [NgTemplateOutlet, NgClass, MonthSlotComponent, MonthViewItemComponent, NgStyle, FocusableDirective, HintContainerComponent, ResizeHintComponent, RepeatPipe, ResourceIteratorPipe, DatePipe, AsyncPipe]
16157
+ imports: [NgTemplateOutlet, NgClass, MonthSlotComponent, MonthViewItemComponent, NgStyle, FocusableDirective, HintContainerComponent, ResizeHintComponent, RepeatPipe, ResourceIteratorPipe, DatePipe, AsyncPipe, PopoverContainerDirective, EventsPopoverComponent, ButtonComponent]
16093
16158
  }]
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: [{
16159
+ }], 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
16160
  type: Input
16096
16161
  }], monthDaySlotTemplate: [{
16097
16162
  type: Input
@@ -16114,6 +16179,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
16114
16179
  }], eventElements: [{
16115
16180
  type: ViewChildren,
16116
16181
  args: [MonthViewItemComponent]
16182
+ }], popoverContainer: [{
16183
+ type: ViewChild,
16184
+ args: [PopoverContainerDirective]
16117
16185
  }] } });
16118
16186
 
16119
16187
  /**
@@ -17744,7 +17812,7 @@ class DayTimeViewItemComponent extends BaseViewItem {
17744
17812
  </span>
17745
17813
  }
17746
17814
 
17747
- @if (resizable && vertical) {
17815
+ @if (resizable && vertical && !isReadonly) {
17748
17816
  @if (!item.tail) {
17749
17817
  <span class="k-resize-handle k-resize-n"></span>
17750
17818
  }
@@ -17826,7 +17894,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
17826
17894
  </span>
17827
17895
  }
17828
17896
 
17829
- @if (resizable && vertical) {
17897
+ @if (resizable && vertical && !isReadonly) {
17830
17898
  @if (!item.tail) {
17831
17899
  <span class="k-resize-handle k-resize-n"></span>
17832
17900
  }
@@ -20185,7 +20253,7 @@ class TimelineMultiDayViewComponent extends DayTimeViewComponent {
20185
20253
  viewName = 'timeline';
20186
20254
  verticalResourceRows;
20187
20255
  get classNames() {
20188
- return `k-scheduler-${this.viewName}-view`;
20256
+ return `k-scheduler-${this.viewName}view`;
20189
20257
  }
20190
20258
  get contentWidthPercentage() {
20191
20259
  const expectedWidth = this.columnWidth * this.slotsCount;