@progress/kendo-angular-scheduler 25.4.0-develop.3 → 25.4.0-develop.31
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.
- package/codemods/libs/common/src/codemods/utils.js +16 -1
- package/fesm2022/progress-kendo-angular-scheduler.mjs +134 -98
- package/index.d.ts +7 -1
- package/package-metadata.mjs +2 -2
- package/package.json +16 -16
- package/schematics/ngAdd/index.js +3 -3
- package/EULA.pdf +0 -0
- package/EULA.rtf +0 -2730
|
@@ -44,8 +44,8 @@ const packageMetadata = {
|
|
|
44
44
|
productName: 'Kendo UI for Angular',
|
|
45
45
|
productCode: 'KENDOUIANGULAR',
|
|
46
46
|
productCodes: ['KENDOUIANGULAR'],
|
|
47
|
-
publishDate:
|
|
48
|
-
version: '25.4.0-develop.
|
|
47
|
+
publishDate: 1793955843,
|
|
48
|
+
version: '25.4.0-develop.31',
|
|
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
|
|
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 &&
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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", "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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", "
|
|
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", "
|
|
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", "
|
|
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
|
-
|
|
12810
|
+
calculateScale(axis) {
|
|
12821
12811
|
if (!isDocumentAvailable()) {
|
|
12822
12812
|
return;
|
|
12823
12813
|
}
|
|
12824
|
-
const schedulerEl =
|
|
12825
|
-
|
|
12826
|
-
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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 = {
|
|
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
|
-
|
|
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
|
|
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:
|
|
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:
|
|
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 = {
|
|
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", "
|
|
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", "
|
|
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 =
|
|
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 =
|
|
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
|
-
(
|
|
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 =
|
|
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 || !
|
|
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.
|
|
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.
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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 =
|
|
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
|
}
|