@progress/kendo-angular-scheduler 25.4.0-develop.3 → 25.4.0-develop.30

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.
@@ -44,8 +44,8 @@ const packageMetadata = {
44
44
  productName: 'Kendo UI for Angular',
45
45
  productCode: 'KENDOUIANGULAR',
46
46
  productCodes: ['KENDOUIANGULAR'],
47
- publishDate: 1792066445,
48
- version: '25.4.0-develop.3',
47
+ publishDate: 1793898451,
48
+ version: '25.4.0-develop.30',
49
49
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
50
50
  };
51
51
 
@@ -2678,10 +2678,27 @@ const allDaysHidden = (days) => {
2678
2678
  return true;
2679
2679
  };
2680
2680
  /** @hidden */
2681
- const intersects = (startTime, endTime, periodStart, periodEnd) => (startTime < periodStart && endTime > periodEnd) ||
2681
+ const truncateToMinutes = (date) => {
2682
+ if (date.getSeconds() === 0 && date.getMilliseconds() === 0) {
2683
+ return date;
2684
+ }
2685
+ const result = new Date(date.getTime());
2686
+ result.setUTCSeconds(0, 0);
2687
+ return result;
2688
+ };
2689
+ /** @hidden */
2690
+ const eventsIntersect = (startTime, endTime, periodStart, periodEnd) => (startTime < periodStart && endTime > periodEnd) ||
2682
2691
  (periodStart <= startTime && startTime < periodEnd) ||
2683
2692
  (periodStart < endTime && endTime <= periodEnd && startTime < endTime);
2684
2693
  /** @hidden */
2694
+ const slotBoundaryEnd = (endTime, periodStart, periodEnd) => {
2695
+ const minuteAligned = periodStart.getSeconds() === 0 && periodStart.getMilliseconds() === 0 &&
2696
+ periodEnd.getSeconds() === 0 && periodEnd.getMilliseconds() === 0;
2697
+ return minuteAligned ? truncateToMinutes(endTime) : endTime;
2698
+ };
2699
+ /** @hidden */
2700
+ const intersects = (startTime, endTime, periodStart, periodEnd) => eventsIntersect(startTime, slotBoundaryEnd(endTime, periodStart, periodEnd), periodStart, periodEnd);
2701
+ /** @hidden */
2685
2702
  const dateInRange = (date, start, end) => start.getTime() <= date.getTime() && date.getTime() <= end.getTime();
2686
2703
  /** @hidden */
2687
2704
  const getVerticalPaddingAndBorder = (element) => {
@@ -2944,7 +2961,8 @@ function isRecurrenceException(task) {
2944
2961
  return task.event && isPresent(task.event.recurrenceId) && !task.event.recurrenceRule;
2945
2962
  }
2946
2963
  /** @hidden */
2947
- const rectContains = (rect, left, top, scaleX = 1) => rect.left * scaleX <= left && left <= rect.left * scaleX + rect.width * scaleX && rect.top * scaleX <= top && top <= rect.top * scaleX + rect.height * scaleX;
2964
+ const rectContains = (rect, left, top, scaleX = 1, scaleY = 1) => rect.left * scaleX <= left && left <= rect.left * scaleX + rect.width * scaleX &&
2965
+ rect.top * scaleY <= top && top <= rect.top * scaleY + rect.height * scaleY;
2948
2966
  /** @hidden */
2949
2967
  const rectContainsX = (rect, left, scaleX = 1) => rect.left * scaleX <= left && left <= rect.left * scaleX + rect.width * scaleX;
2950
2968
  /** @hidden */
@@ -3112,14 +3130,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
3112
3130
  type: Output
3113
3131
  }] } });
3114
3132
 
3115
- /**
3116
- * @hidden
3117
- */
3118
- const MULTIPLE_RESOURCE_VALUE_ACCESSOR = {
3119
- multi: true,
3120
- provide: NG_VALUE_ACCESSOR,
3121
- useExisting: forwardRef(() => MultipleResourceEditorComponent)
3122
- };
3123
3133
  /**
3124
3134
  * @hidden
3125
3135
  */
@@ -3135,7 +3145,7 @@ class MultipleResourceEditorComponent extends ResourceEditorBase {
3135
3145
  }
3136
3146
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: MultipleResourceEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3137
3147
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: MultipleResourceEditorComponent, isStandalone: true, selector: "kendo-multiple-resource-editor", providers: [
3138
- MULTIPLE_RESOURCE_VALUE_ACCESSOR
3148
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MultipleResourceEditorComponent) }
3139
3149
  ], viewQueries: [{ propertyName: "resourceMultiSelect", first: true, predicate: ["resourceMultiSelect"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
3140
3150
  <kendo-multiselect
3141
3151
  #resourceMultiSelect
@@ -3168,7 +3178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
3168
3178
  type: Component,
3169
3179
  args: [{
3170
3180
  providers: [
3171
- MULTIPLE_RESOURCE_VALUE_ACCESSOR
3181
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MultipleResourceEditorComponent) }
3172
3182
  ],
3173
3183
  selector: 'kendo-multiple-resource-editor',
3174
3184
  template: `
@@ -3206,14 +3216,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
3206
3216
  args: ['resourceMultiSelect', { static: true }]
3207
3217
  }] } });
3208
3218
 
3209
- /**
3210
- * @hidden
3211
- */
3212
- const SINGLE_RESOURCE_VALUE_ACCESSOR = {
3213
- multi: true,
3214
- provide: NG_VALUE_ACCESSOR,
3215
- useExisting: forwardRef(() => SingleResourceEditorComponent)
3216
- };
3217
3219
  /**
3218
3220
  * @hidden
3219
3221
  */
@@ -3224,7 +3226,7 @@ class SingleResourceEditorComponent extends ResourceEditorBase {
3224
3226
  }
3225
3227
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: SingleResourceEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3226
3228
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: SingleResourceEditorComponent, isStandalone: true, selector: "kendo-single-resource-editor", providers: [
3227
- SINGLE_RESOURCE_VALUE_ACCESSOR
3229
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SingleResourceEditorComponent) }
3228
3230
  ], viewQueries: [{ propertyName: "resourceDropDown", first: true, predicate: ["resourceDropDown"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
3229
3231
  <kendo-dropdownlist
3230
3232
  #resourceDropDown
@@ -3250,7 +3252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
3250
3252
  type: Component,
3251
3253
  args: [{
3252
3254
  providers: [
3253
- SINGLE_RESOURCE_VALUE_ACCESSOR
3255
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SingleResourceEditorComponent) }
3254
3256
  ],
3255
3257
  selector: 'kendo-single-resource-editor',
3256
3258
  template: `
@@ -4632,7 +4634,7 @@ class RecurrenceWeekdayRuleEditorComponent {
4632
4634
  </div>
4633
4635
  </div>
4634
4636
  </div>
4635
- `, isInline: true, dependencies: [{ kind: "component", type: LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { 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"] }] });
4637
+ `, isInline: true, dependencies: [{ kind: "component", type: LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "endIcon", "endSvgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
4636
4638
  }
4637
4639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: RecurrenceWeekdayRuleEditorComponent, decorators: [{
4638
4640
  type: Component,
@@ -5182,14 +5184,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
5182
5184
  type: Optional
5183
5185
  }] }] });
5184
5186
 
5185
- /**
5186
- * @hidden
5187
- */
5188
- const RECURRENCE_VALUE_ACCESSOR = {
5189
- multi: true,
5190
- provide: NG_VALUE_ACCESSOR,
5191
- useExisting: forwardRef(() => RecurrenceEditorComponent)
5192
- };
5193
5187
  /**
5194
5188
  * Represents the Kendo UI Recurrence Editor component for Angular. Use this component to let users set recurrence rules for Scheduler events.
5195
5189
  *
@@ -5353,7 +5347,7 @@ class RecurrenceEditorComponent {
5353
5347
  provide: L10N_PREFIX,
5354
5348
  useValue: 'kendo.recurrenceeditor'
5355
5349
  },
5356
- RECURRENCE_VALUE_ACCESSOR,
5350
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RecurrenceEditorComponent) },
5357
5351
  RecurrenceService
5358
5352
  ], exportAs: ["kendoRecurrenceEditor"], usesOnChanges: true, ngImport: i0, template: `
5359
5353
  <ng-container kendoRecurrenceEditorLocalizedMessages
@@ -5526,7 +5520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
5526
5520
  provide: L10N_PREFIX,
5527
5521
  useValue: 'kendo.recurrenceeditor'
5528
5522
  },
5529
- RECURRENCE_VALUE_ACCESSOR,
5523
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RecurrenceEditorComponent) },
5530
5524
  RecurrenceService
5531
5525
  ],
5532
5526
  selector: 'kendo-recurrence-editor',
@@ -5711,14 +5705,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
5711
5705
  type: Output
5712
5706
  }] } });
5713
5707
 
5714
- /**
5715
- * @hidden
5716
- */
5717
- const TIME_ZONE_VALUE_ACCESSOR = {
5718
- multi: true,
5719
- provide: NG_VALUE_ACCESSOR,
5720
- useExisting: forwardRef(() => TimeZoneEditorComponent)
5721
- };
5722
5708
  /**
5723
5709
  * Represents the Kendo UI TimeZone Editor component for Angular.
5724
5710
  *
@@ -5812,7 +5798,7 @@ class TimeZoneEditorComponent {
5812
5798
  }
5813
5799
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: TimeZoneEditorComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5814
5800
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: TimeZoneEditorComponent, isStandalone: true, selector: "kendo-timezone-editor", inputs: { width: "width" }, outputs: { valueChange: "valueChange" }, providers: [
5815
- TIME_ZONE_VALUE_ACCESSOR
5801
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimeZoneEditorComponent) }
5816
5802
  ], viewQueries: [{ propertyName: "tzComboBox", first: true, predicate: ["tzcombobox"], descendants: true, static: true }, { propertyName: "tzComboBoxControl", first: true, predicate: ["tzcomboboxControl"], descendants: true, static: true }], ngImport: i0, template: `
5817
5803
  @if (!formControl) {
5818
5804
  <kendo-dropdownlist
@@ -5845,7 +5831,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
5845
5831
  type: Component,
5846
5832
  args: [{
5847
5833
  providers: [
5848
- TIME_ZONE_VALUE_ACCESSOR
5834
+ { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimeZoneEditorComponent) }
5849
5835
  ],
5850
5836
  selector: 'kendo-timezone-editor',
5851
5837
  template: `
@@ -6566,7 +6552,7 @@ class EditDialogComponent {
6566
6552
  </kendo-dialog>
6567
6553
  }
6568
6554
  }
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" }] });
6555
+ `, 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", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "endIcon", "endSvgIcon"], 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" }] });
6570
6556
  }
6571
6557
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: EditDialogComponent, decorators: [{
6572
6558
  type: Component,
@@ -7002,7 +6988,7 @@ class ToolbarViewSelectorComponent {
7002
6988
  </kendo-segmented-control>
7003
6989
  }
7004
6990
  }
7005
- `, isInline: true, dependencies: [{ kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: SegmentedControlComponent, selector: "kendo-segmented-control", inputs: ["items", "layoutMode", "size", "rounded", "selected"], outputs: ["selectedChange"] }, { kind: "component", type: DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }] });
6991
+ `, isInline: true, dependencies: [{ kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: SegmentedControlComponent, selector: "kendo-segmented-control", inputs: ["items", "layoutMode", "size", "rounded", "selected"], outputs: ["selectedChange"] }, { kind: "component", type: DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "endIcon", "endSvgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }] });
7006
6992
  }
7007
6993
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ToolbarViewSelectorComponent, decorators: [{
7008
6994
  type: Component,
@@ -7335,7 +7321,7 @@ class ToolbarNavigationComponent {
7335
7321
  </kendo-calendar-messages>
7336
7322
  </kendo-calendar>
7337
7323
  </ng-template>
7338
- `, isInline: true, dependencies: [{ 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: "component", type: CalendarComponent, selector: "kendo-calendar", inputs: ["showOtherMonthDays", "id", "focusedDate", "min", "max", "rangeValidation", "weekDaysFormat", "footer", "selection", "allowReverse", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "navigationItemTemplate", "size", "activeRangeEnd"], outputs: ["closePopup", "activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { kind: "component", type: CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7324
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "endIcon", "endSvgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: CalendarComponent, selector: "kendo-calendar", inputs: ["showOtherMonthDays", "id", "focusedDate", "min", "max", "rangeValidation", "weekDaysFormat", "footer", "selection", "allowReverse", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "navigationItemTemplate", "size", "activeRangeEnd"], outputs: ["closePopup", "activeViewChange", "navigate", "activeViewDateChange", "blur", "focus", "valueChange"], exportAs: ["kendo-calendar"] }, { kind: "component", type: CalendarCustomMessagesComponent, selector: "kendo-calendar-messages" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7339
7325
  }
7340
7326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ToolbarNavigationComponent, decorators: [{
7341
7327
  type: Component,
@@ -7620,7 +7606,7 @@ class ToolbarComponent {
7620
7606
  }
7621
7607
 
7622
7608
  <kendo-resize-sensor (resize)="resizeHandler()" [style]="'display: contents;'"></kendo-resize-sensor>
7623
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ToolbarNavigationComponent, selector: "[kendoSchedulerToolbarNavigation]", inputs: ["min", "max", "activeView", "bottomView", "responsiveLevel"] }, { kind: "component", type: ToolbarViewSelectorComponent, selector: "[kendoSchedulerToolbarViewSelector]", inputs: ["displayMode", "focusIndex", "responsiveLevel"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { 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"] }] });
7609
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ToolbarNavigationComponent, selector: "[kendoSchedulerToolbarNavigation]", inputs: ["min", "max", "activeView", "bottomView", "responsiveLevel"] }, { kind: "component", type: ToolbarViewSelectorComponent, selector: "[kendoSchedulerToolbarViewSelector]", inputs: ["displayMode", "focusIndex", "responsiveLevel"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "endIcon", "endSvgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }] });
7624
7610
  }
7625
7611
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ToolbarComponent, decorators: [{
7626
7612
  type: Component,
@@ -8945,7 +8931,7 @@ class SchedulerComponent {
8945
8931
  this.focusService = focusService;
8946
8932
  const isValid = validatePackage(packageMetadata);
8947
8933
  this.licenseMessage = getLicenseMessage(packageMetadata);
8948
- this.showLicenseWatermark = shouldShowValidationUI(isValid);
8934
+ this.showLicenseWatermark = shouldShowValidationUI(isValid, packageMetadata);
8949
8935
  this.dateRangeStream = viewState.dateRange;
8950
8936
  this.selectedDateStream = viewContext.selectedDate;
8951
8937
  }
@@ -12757,6 +12743,7 @@ class BaseSlotService {
12757
12743
  containerSize = 0;
12758
12744
  slotsChange = new EventEmitter();
12759
12745
  groups = [];
12746
+ schedulerElement = null;
12760
12747
  registerItem(component) {
12761
12748
  const group = this.itemGroup(component);
12762
12749
  group.registerItem(component);
@@ -12773,6 +12760,9 @@ class BaseSlotService {
12773
12760
  }
12774
12761
  }
12775
12762
  registerSlot(slot) {
12763
+ if (slot.nativeElement) {
12764
+ this.schedulerElement = slot.nativeElement.closest('.k-scheduler');
12765
+ }
12776
12766
  const group = this.slotGroup(slot);
12777
12767
  group.registerSlot(slot);
12778
12768
  }
@@ -12817,13 +12807,17 @@ class BaseSlotService {
12817
12807
  }
12818
12808
  return this.groups[index];
12819
12809
  }
12820
- calculateScaleX() {
12810
+ calculateScale(axis) {
12821
12811
  if (!isDocumentAvailable()) {
12822
12812
  return;
12823
12813
  }
12824
- const schedulerEl = document.querySelector('.k-scheduler');
12825
- const scaleX = schedulerEl.getBoundingClientRect().width / schedulerEl.offsetWidth;
12826
- return scaleX;
12814
+ const schedulerEl = this.schedulerElement?.closest('.k-scheduler');
12815
+ if (!schedulerEl) {
12816
+ return;
12817
+ }
12818
+ const bounds = schedulerEl.getBoundingClientRect();
12819
+ const scale = axis === 'x' ? bounds.width / schedulerEl.offsetWidth : bounds.height / schedulerEl.offsetHeight;
12820
+ return scale;
12827
12821
  }
12828
12822
  }
12829
12823
 
@@ -13161,11 +13155,13 @@ class MonthSlotService extends BaseSlotService {
13161
13155
  }
13162
13156
  slotByPosition(x, y) {
13163
13157
  let range;
13158
+ const scaleX = this.calculateScale('x');
13159
+ const scaleY = this.calculateScale('y');
13164
13160
  for (let i = 0; i < this.groups.length; i++) {
13165
13161
  const group = this.groups[i];
13166
- range = group.dayRanges.find(r => rectContains(r.rect, x, y, this.calculateScaleX()));
13162
+ range = group.dayRanges.find(r => rectContains(r.rect, x, y, scaleX, scaleY));
13167
13163
  if (range) {
13168
- return range.slots.find(slot => rectContains(slot.rect, x, y, this.calculateScaleX()));
13164
+ return range.slots.find(slot => rectContains(slot.rect, x, y, scaleX, scaleY));
13169
13165
  }
13170
13166
  }
13171
13167
  }
@@ -13187,9 +13183,11 @@ class MonthSlotService extends BaseSlotService {
13187
13183
  };
13188
13184
  }
13189
13185
  groupSlotByPosition(currentSlot, x, y) {
13190
- const range = this.groups[currentSlot.id.resourceIndex].dayRanges.find(r => rectContains(r.rect, x, y, this.calculateScaleX()));
13186
+ const scaleX = this.calculateScale('x');
13187
+ const scaleY = this.calculateScale('y');
13188
+ const range = this.groups[currentSlot.id.resourceIndex].dayRanges.find(r => rectContains(r.rect, x, y, scaleX, scaleY));
13191
13189
  if (range) {
13192
- return range.slots.find(slot => rectContains(slot.rect, x, y, this.calculateScaleX()));
13190
+ return range.slots.find(slot => rectContains(slot.rect, x, y, scaleX, scaleY));
13193
13191
  }
13194
13192
  }
13195
13193
  resizeRanges(currentSlot, task, resizeStart, offset) {
@@ -13199,16 +13197,16 @@ class MonthSlotService extends BaseSlotService {
13199
13197
  const endDate = task.end.toUTCDate();
13200
13198
  let start, end;
13201
13199
  if (resizeStart) {
13202
- start = currentSlot.start.getTime() + offset.start;
13203
- if (start > endDate.getTime()) {
13200
+ start = new Date(currentSlot.start.getTime() + offset.start);
13201
+ if (start.getTime() > endDate.getTime()) {
13204
13202
  start = new Date(Math.min(dateWithTime(endDate, startDate).getTime(), endDate.getTime()));
13205
13203
  }
13206
13204
  end = endDate;
13207
13205
  }
13208
13206
  else {
13209
13207
  start = startDate;
13210
- end = currentSlot.start.getTime() + offset.end;
13211
- if (end < start.getTime()) {
13208
+ end = new Date(currentSlot.start.getTime() + offset.end);
13209
+ if (end.getTime() < start.getTime()) {
13212
13210
  end = new Date(Math.max(dateWithTime(startDate, endDate).getTime(), start.getTime()));
13213
13211
  }
13214
13212
  }
@@ -13588,7 +13586,7 @@ class BaseView {
13588
13586
  }
13589
13587
  }
13590
13588
  getEventStyles(item, itemResource, isAllDay) {
13591
- const result = { backgroundColor: itemResource.color, borderColor: itemResource.color };
13589
+ const result = { '--kendo-scheduler-event-color': itemResource.color };
13592
13590
  if (this.eventStyles) {
13593
13591
  Object.assign(result, this.eventStyles({
13594
13592
  event: item.event,
@@ -13918,8 +13916,7 @@ class BaseView {
13918
13916
  right: !this.localization.rtl ? '' : toPx(origin),
13919
13917
  width: size.width,
13920
13918
  height: size.height,
13921
- backgroundColor: color,
13922
- borderColor: color
13919
+ '--kendo-scheduler-event-color': color
13923
13920
  };
13924
13921
  if (this.eventStyles) {
13925
13922
  Object.assign(styles, this.eventStyles(this.dragHintEventStyleArgs()));
@@ -14063,19 +14060,21 @@ class BaseView {
14063
14060
  this.updateDragContainer(args);
14064
14061
  const eventRect = resizing.target.getBoundingClientRect();
14065
14062
  const handleOffset = 2;
14063
+ const pageOffsetX = args.pageX - args.clientX;
14064
+ const pageOffsetY = args.pageY - args.clientY;
14066
14065
  let pageX = args.pageX;
14067
14066
  let pageY = args.pageY;
14068
14067
  if (resizing.direction === 'w') {
14069
- pageX = eventRect.left + handleOffset;
14068
+ pageX = eventRect.left + pageOffsetX + handleOffset;
14070
14069
  }
14071
14070
  else if (resizing.direction === 'e') {
14072
- pageX = eventRect.right - handleOffset;
14071
+ pageX = eventRect.right + pageOffsetX - handleOffset;
14073
14072
  }
14074
14073
  else if (resizing.direction === 'n') {
14075
- pageY = eventRect.top + handleOffset;
14074
+ pageY = eventRect.top + pageOffsetY + handleOffset;
14076
14075
  }
14077
14076
  else if (resizing.direction === 's') {
14078
- pageY = eventRect.bottom - handleOffset;
14077
+ pageY = eventRect.bottom + pageOffsetY - handleOffset;
14079
14078
  }
14080
14079
  const { x, y } = this.coordinatesOffset(pageX, pageY);
14081
14080
  resizing.slot = this.slotByPosition(Math.ceil(x), Math.ceil(y), this.container);
@@ -14117,6 +14116,7 @@ class BaseView {
14117
14116
  const direction = resizing.direction;
14118
14117
  const horizontal = direction === 'w' || direction === 'e';
14119
14118
  const resizeStart = direction === 'w' || direction === 'n';
14119
+ const color = this.resizeResourceColor(resizing.task, resizing.slot);
14120
14120
  this.resizeHints = [];
14121
14121
  for (let idx = 0; idx < ranges.length; idx++) {
14122
14122
  const range = ranges[idx];
@@ -14135,15 +14135,26 @@ class BaseView {
14135
14135
  },
14136
14136
  start: first && !resizeStart ? resizing.start : firstSlot.start,
14137
14137
  end: last && resizeStart ? resizing.end : lastSlot.end,
14138
- class: resizing.hintClass
14138
+ class: resizing.hintClass,
14139
+ color
14139
14140
  });
14140
14141
  }
14141
14142
  }
14143
+ resizeResourceColor(task, slot) {
14144
+ const taskResources = task?.resources || [];
14145
+ const resourceIndex = slot?.id?.resourceIndex;
14146
+ const itemResource = taskResources.find(r => r.leafIdx === resourceIndex) || taskResources[0];
14147
+ return itemResource?.color;
14148
+ }
14142
14149
  coordinatesOffset(x, y, container = this.container, offset = this.containerOffset) {
14143
- const position = x - offset.left + container.scrollLeft;
14150
+ const schedulerEl = container?.closest('.k-scheduler');
14151
+ const schedulerRect = schedulerEl?.getBoundingClientRect();
14152
+ const scaleX = schedulerRect ? schedulerRect.width / schedulerEl.offsetWidth : 1;
14153
+ const scaleY = schedulerRect ? schedulerRect.height / schedulerEl.offsetHeight : 1;
14154
+ const position = x - offset.left + container.scrollLeft * scaleX;
14144
14155
  return {
14145
14156
  x: !this.localization.rtl ? position : this.slotService.containerSize - position,
14146
- y: y - offset.top + container.scrollTop
14157
+ y: y - offset.top + container.scrollTop * scaleY
14147
14158
  };
14148
14159
  }
14149
14160
  scrollContainer(callback, args) {
@@ -14369,6 +14380,7 @@ class BaseView {
14369
14380
  }
14370
14381
  const element = this.element.nativeElement.cloneNode(true);
14371
14382
  element.style.width = `${this.pdfWidth()}px`;
14383
+ this.preparePDFElement(element);
14372
14384
  if (contentHeight !== 'auto') {
14373
14385
  this.autoHeight = false;
14374
14386
  this.updateView();
@@ -14381,6 +14393,7 @@ class BaseView {
14381
14393
  pdfWidth() {
14382
14394
  return this.element.nativeElement.offsetWidth;
14383
14395
  }
14396
+ preparePDFElement(_element) { }
14384
14397
  containerByPosition({ x, y }) {
14385
14398
  const content = this.content.nativeElement;
14386
14399
  const offset = elementOffset(content);
@@ -14882,6 +14895,9 @@ class ResizeHintComponent {
14882
14895
  hint;
14883
14896
  format;
14884
14897
  marqueeClasses = true;
14898
+ get color() {
14899
+ return this.hint.color || null;
14900
+ }
14885
14901
  get left() {
14886
14902
  return this.hint.rect.left;
14887
14903
  }
@@ -14901,7 +14917,7 @@ class ResizeHintComponent {
14901
14917
  return toLocalDate(this.hint.end);
14902
14918
  }
14903
14919
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ResizeHintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14904
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: ResizeHintComponent, isStandalone: true, selector: "[kendoResizeHint]", inputs: { hint: "hint", format: "format" }, host: { properties: { "class.k-marquee": "this.marqueeClasses", "class.k-scheduler-marquee": "this.marqueeClasses", "class.k-first": "this.marqueeClasses", "class.k-last": "this.marqueeClasses", "style.left.px": "this.left", "style.right.px": "this.left", "style.top.px": "this.top", "style.width.px": "this.width", "style.height.px": "this.height" } }, ngImport: i0, template: `
14920
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: ResizeHintComponent, isStandalone: true, selector: "[kendoResizeHint]", inputs: { hint: "hint", format: "format" }, host: { properties: { "class.k-marquee": "this.marqueeClasses", "class.k-scheduler-marquee": "this.marqueeClasses", "class.k-first": "this.marqueeClasses", "class.k-last": "this.marqueeClasses", "style.--kendo-marquee-color": "this.color", "style.left.px": "this.left", "style.right.px": "this.left", "style.top.px": "this.top", "style.width.px": "this.width", "style.height.px": "this.height" } }, ngImport: i0, template: `
14905
14921
  <div class="k-marquee-color"></div>
14906
14922
  <div class="k-marquee-text">
14907
14923
  @if (hint.first) {
@@ -14947,6 +14963,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
14947
14963
  }, {
14948
14964
  type: HostBinding,
14949
14965
  args: ['class.k-last']
14966
+ }], color: [{
14967
+ type: HostBinding,
14968
+ args: ['style.--kendo-marquee-color']
14950
14969
  }], left: [{
14951
14970
  type: HostBinding,
14952
14971
  args: ['style.left.px']
@@ -15097,9 +15116,6 @@ class MonthSlotComponent extends BaseSlotDirective {
15097
15116
  get end() {
15098
15117
  return addUTCDays(this.start, 1);
15099
15118
  }
15100
- isFirstDayOfMonth(day) {
15101
- return isEqualDate(day, firstDayOfMonth(day));
15102
- }
15103
15119
  get linkHeight() {
15104
15120
  if (this._linkHeight === null) {
15105
15121
  const element = firstElementChild(this.nativeElement);
@@ -15145,7 +15161,7 @@ class MonthSlotComponent extends BaseSlotDirective {
15145
15161
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", 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: `
15146
15162
  @if (!monthDaySlotTemplateRef) {
15147
15163
  <span class="k-link k-nav-day">
15148
- {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15164
+ {{ day | kendoDate: 'dd' }}
15149
15165
  </span>
15150
15166
  }
15151
15167
  @if (monthDaySlotTemplateRef) {
@@ -15164,7 +15180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
15164
15180
  template: `
15165
15181
  @if (!monthDaySlotTemplateRef) {
15166
15182
  <span class="k-link k-nav-day">
15167
- {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
15183
+ {{ day | kendoDate: 'dd' }}
15168
15184
  </span>
15169
15185
  }
15170
15186
  @if (monthDaySlotTemplateRef) {
@@ -15250,7 +15266,7 @@ class EventsPopoverComponent {
15250
15266
  }
15251
15267
  getEventStyles(event) {
15252
15268
  const itemResource = event.resources?.[0];
15253
- const result = { backgroundColor: itemResource?.color, borderColor: itemResource?.color };
15269
+ const result = { '--kendo-scheduler-event-color': itemResource?.color };
15254
15270
  if (this.eventStyles) {
15255
15271
  Object.assign(result, this.eventStyles({
15256
15272
  event: event.event,
@@ -16011,7 +16027,7 @@ class MonthViewRendererComponent extends BaseView {
16011
16027
  </tr>
16012
16028
  </tbody>
16013
16029
  </table>
16014
- `, 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", "editable"], outputs: ["navigateToDay", "eventClick", "eventDblClick"] }, { 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" }] });
16030
+ `, 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", "editable"], outputs: ["navigateToDay", "eventClick", "eventDblClick"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "endIcon", "endSvgIcon"], 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" }] });
16015
16031
  }
16016
16032
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: MonthViewRendererComponent, decorators: [{
16017
16033
  type: Component,
@@ -16949,7 +16965,7 @@ class ViewFooterComponent {
16949
16965
  </button>
16950
16966
  }
16951
16967
  </span>
16952
- `, isInline: true, dependencies: [{ 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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }] });
16968
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "endIcon", "endSvgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }] });
16953
16969
  }
16954
16970
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ViewFooterComponent, decorators: [{
16955
16971
  type: Component,
@@ -17089,6 +17105,7 @@ function addMinHeightOverflowEvents(sorted, slots, slotItems) {
17089
17105
  function initTimeColumns(slotKeys, slotItems) {
17090
17106
  // Break slots into groups with overlapping events.
17091
17107
  let columns = 0;
17108
+ let maxGroupColumns = 0;
17092
17109
  let groupSlots = [];
17093
17110
  slotKeys.forEach(key => {
17094
17111
  const { slot, events } = slotItems[key];
@@ -17099,7 +17116,7 @@ function initTimeColumns(slotKeys, slotItems) {
17099
17116
  groupSlots.push(slot);
17100
17117
  for (let eventIdx = 0; eventIdx < count; eventIdx++) {
17101
17118
  const event = events[eventIdx];
17102
- const endsInSlot = event.item.endTime.getTime() <= slot.end.getTime();
17119
+ const endsInSlot = slotBoundaryEnd(event.item.endTime, slot.start, slot.end).getTime() <= slot.end.getTime();
17103
17120
  // Grouping needs to consider the enforced minimum rendered height with MIN_EVENT_HEIGHT.
17104
17121
  let visuallyEndsInSlot = true;
17105
17122
  if (endsInSlot) {
@@ -17128,11 +17145,11 @@ function initTimeColumns(slotKeys, slotItems) {
17128
17145
  }
17129
17146
  // Events that don't intersect their start or end times but overlap in rendered height due to the minimum event height
17130
17147
  const anyOverlappingEvents = events.filter(e => e !== current && e.rect).some(event => {
17131
- const areIntersecting = intersects(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime);
17148
+ const areIntersecting = eventsIntersect(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime);
17132
17149
  const areOverlapping = minHeightOverlaps(current.rect.top, event.rect.top);
17133
17150
  return !areIntersecting && areOverlapping;
17134
17151
  });
17135
- const intersectingEvents = intersects(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime);
17152
+ const intersectingEvents = eventsIntersect(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime);
17136
17153
  const overlappingEvents = minHeightOverlaps(current.rect.top, event.rect.top);
17137
17154
  if (!(anyOverlappingEvents || intersectingEvents || overlappingEvents)) {
17138
17155
  const targetColumn = current.columnIndex;
@@ -17140,7 +17157,7 @@ function initTimeColumns(slotKeys, slotItems) {
17140
17157
  const hasColumnConflict = events.some(e => e !== current &&
17141
17158
  isNumber(e.columnIndex) &&
17142
17159
  e.columnIndex === targetColumn &&
17143
- (intersects(event.item.startTime, event.item.endTime, e.item.startTime, e.item.endTime) ||
17160
+ (eventsIntersect(event.item.startTime, event.item.endTime, e.item.startTime, e.item.endTime) ||
17144
17161
  (e.rect && event.rect && minHeightOverlaps(e.rect.top, event.rect.top))));
17145
17162
  if (hasColumnConflict) {
17146
17163
  previousIdx = current.columnIndex;
@@ -17162,7 +17179,7 @@ function initTimeColumns(slotKeys, slotItems) {
17162
17179
  event.lastColumn = !events.some((e) => {
17163
17180
  const hasColumnIndex = e.columnIndex;
17164
17181
  const isBeforeCurrentIndex = targetColumn < e.columnIndex;
17165
- const areIntersecting = intersects(event.item.startTime, event.item.endTime, e.item.startTime, e.item.endTime);
17182
+ const areIntersecting = eventsIntersect(event.item.startTime, event.item.endTime, e.item.startTime, e.item.endTime);
17166
17183
  return hasColumnIndex && isBeforeCurrentIndex && areIntersecting;
17167
17184
  });
17168
17185
  events.splice(eventIdx, 1);
@@ -17185,14 +17202,24 @@ function initTimeColumns(slotKeys, slotItems) {
17185
17202
  event.columnIndex = maxColumn + 1;
17186
17203
  }
17187
17204
  }
17205
+ const slotColumnCount = events.reduce((maximumColumnCount, event) => {
17206
+ const eventColumnIndex = event.columnIndex;
17207
+ if (!isNumber(eventColumnIndex)) {
17208
+ return maximumColumnCount;
17209
+ }
17210
+ const eventColumnCount = eventColumnIndex + 1;
17211
+ return Math.max(maximumColumnCount, eventColumnCount);
17212
+ }, 0);
17213
+ maxGroupColumns = Math.max(maxGroupColumns, slotColumnCount);
17188
17214
  if (groupEnd) {
17189
- groupSlots.forEach(item => item.columns = columns);
17215
+ groupSlots.forEach(item => item.columns = Math.max(columns, maxGroupColumns));
17190
17216
  groupSlots = [];
17191
17217
  columns = 0;
17218
+ maxGroupColumns = 0;
17192
17219
  }
17193
17220
  });
17194
17221
  // The maximum number of overlapping events in the group is used to create the same number of columns.
17195
- groupSlots.forEach(slot => slot.columns = columns);
17222
+ groupSlots.forEach(slot => slot.columns = Math.max(columns, maxGroupColumns));
17196
17223
  }
17197
17224
  function findTimeRowIndex(events, event) {
17198
17225
  if (event.rowIndex !== undefined) {
@@ -17200,7 +17227,7 @@ function findTimeRowIndex(events, event) {
17200
17227
  }
17201
17228
  for (let idx = 0; idx < events.length; idx++) {
17202
17229
  const current = events[idx];
17203
- if (!current || !intersects(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime)) {
17230
+ if (!current || !eventsIntersect(event.item.startTime, event.item.endTime, current.item.startTime, current.item.endTime)) {
17204
17231
  return idx;
17205
17232
  }
17206
17233
  }
@@ -17593,38 +17620,42 @@ class DayTimeSlotService extends BaseSlotService {
17593
17620
  slotByPosition(x, y, isDaySlot, includeDayRanges) {
17594
17621
  if (isDaySlot) {
17595
17622
  for (let i = 0; i < this.groups.length; i++) {
17596
- const foundRange = this.groups[i].dayRanges.find(r => rectContainsX(r.rect, x, this.calculateScaleX()));
17623
+ const foundRange = this.groups[i].dayRanges.find(r => rectContainsX(r.rect, x, this.calculateScale('x')));
17597
17624
  if (foundRange) {
17598
- return foundRange.slots.find(slot => rectContainsX(slot.rect, x, this.calculateScaleX()));
17625
+ return foundRange.slots.find(slot => rectContainsX(slot.rect, x, this.calculateScale('x')));
17599
17626
  }
17600
17627
  }
17601
17628
  }
17602
17629
  else {
17630
+ const scaleX = this.calculateScale('x');
17631
+ const scaleY = this.calculateScale('y');
17603
17632
  for (let i = 0; i < this.groups.length; i++) {
17604
17633
  let range;
17605
17634
  if (includeDayRanges) {
17606
- range = this.groups[i].dayRanges.find(r => rectContains(r.rect, x, y, this.calculateScaleX()));
17635
+ range = this.groups[i].dayRanges.find(r => rectContains(r.rect, x, y, scaleX, scaleY));
17607
17636
  }
17608
17637
  if (!range) {
17609
- range = this.groups[i].timeRanges.find(r => rectContains(r.rect, x, y, this.calculateScaleX()));
17638
+ range = this.groups[i].timeRanges.find(r => rectContains(r.rect, x, y, scaleX, scaleY));
17610
17639
  }
17611
17640
  if (range) {
17612
- return range.slots.find(slot => rectContains(slot.rect, x, y, this.calculateScaleX()));
17641
+ return range.slots.find(slot => rectContains(slot.rect, x, y, scaleX, scaleY));
17613
17642
  }
17614
17643
  }
17615
17644
  }
17616
17645
  }
17617
17646
  groupSlotByPosition(currentSlot, x, y) {
17618
17647
  const group = this.groups[currentSlot.id.resourceIndex];
17648
+ const scaleX = this.calculateScale('x');
17649
+ const scaleY = this.calculateScale('y');
17619
17650
  let range;
17620
17651
  if (currentSlot.isDaySlot) {
17621
- range = group.dayRanges.find(r => rectContains(r.rect, x, y, this.calculateScaleX()));
17652
+ range = group.dayRanges.find(r => rectContains(r.rect, x, y, scaleX, scaleY));
17622
17653
  }
17623
17654
  else {
17624
- range = group.timeRanges.find(r => rectContains(r.rect, x, y, this.calculateScaleX()));
17655
+ range = group.timeRanges.find(r => rectContains(r.rect, x, y, scaleX, scaleY));
17625
17656
  }
17626
17657
  if (range) {
17627
- return range.slots.find(slot => rectContains(slot.rect, x, y, this.calculateScaleX()));
17658
+ return range.slots.find(slot => rectContains(slot.rect, x, y, scaleX, scaleY));
17628
17659
  }
17629
17660
  }
17630
17661
  dragRanges(currentSlot, offset, timeRanges) {
@@ -18695,7 +18726,7 @@ class MultiDayViewRendererComponent extends DayTimeViewComponent {
18695
18726
  createTasks(items, dateRange) {
18696
18727
  const startTimeSlot = this.timeSlots[0];
18697
18728
  const endTimeSlot = this.timeSlots[this.timeSlots.length - 1].end;
18698
- const nextDateEnd = !(endTimeSlot.getHours() || endTimeSlot.getMinutes());
18729
+ const nextDateEnd = endTimeSlot.getDate() !== startTimeSlot.start.getDate();
18699
18730
  const ranges = this.daySlots.map(daySlot => ({
18700
18731
  start: toUTCTime(daySlot.start, startTimeSlot.start),
18701
18732
  end: nextDateEnd ? toUTCDate(daySlot.end) : toUTCTime(daySlot.start, endTimeSlot)
@@ -20458,6 +20489,11 @@ class TimelineMultiDayViewComponent extends DayTimeViewComponent {
20458
20489
  const timesWidth = this.times.nativeElement.offsetWidth;
20459
20490
  return contentWidth + timesWidth;
20460
20491
  }
20492
+ preparePDFElement(element) {
20493
+ const tableWidth = `${this.content.nativeElement.scrollWidth}px`;
20494
+ const tables = element.querySelectorAll('.k-scheduler-header-wrap > .k-scheduler-table, .k-scheduler-content > .k-scheduler-table');
20495
+ tables.forEach(table => table.style.width = tableWidth);
20496
+ }
20461
20497
  currentTimeArrowOffset() {
20462
20498
  return this.headerWrap.nativeElement.querySelector('tr:last-child').offsetTop;
20463
20499
  }