@progress/kendo-angular-scheduler 16.11.0 → 16.12.0-develop.1

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.
@@ -42,8 +42,8 @@ const packageMetadata = {
42
42
  name: '@progress/kendo-angular-scheduler',
43
43
  productName: 'Kendo UI for Angular',
44
44
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
45
- publishDate: 1728372694,
46
- version: '16.11.0',
45
+ publishDate: 1728573087,
46
+ version: '16.12.0-develop.1',
47
47
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
48
48
  };
49
49
 
@@ -9985,6 +9985,10 @@ const ONGOING_EVENT_CSS_CLASS = 'k-event-ongoing';
9985
9985
  const DAYS_IN_WEEK_COUNT = 7;
9986
9986
  /** @hidden */
9987
9987
  const WEEKS_COUNT = 6;
9988
+ /** @hidden */
9989
+ const MORE_BUTTON_HEIGHT = 13;
9990
+ /** @hidden */
9991
+ const EVENT_SPACING = 2;
9988
9992
 
9989
9993
  /**
9990
9994
  * @hidden
@@ -10102,9 +10106,6 @@ class BaseSlotService {
10102
10106
  }
10103
10107
  }
10104
10108
 
10105
- //better try to measure this one
10106
- const MORE_BUTTON_HEIGHT = 13;
10107
- const EVENT_OFFSET = 2;
10108
10109
  /**
10109
10110
  * @hidden
10110
10111
  */
@@ -10168,8 +10169,17 @@ let SlotRange$1 = class SlotRange {
10168
10169
  unregisterSlot(slot) {
10169
10170
  this.slotMap.removeItem(slot.id.index, slot);
10170
10171
  }
10171
- layout(eventHeight) {
10172
+ layout(eventHeight, eventsPerDay, adaptiveSlotHeight) {
10173
+ const dateHeader = this.slots[0].element.nativeElement.firstElementChild;
10172
10174
  if (!this.hasItems) {
10175
+ if (eventHeight !== 'auto') {
10176
+ const eventsTotalHeight = adaptiveSlotHeight ? eventHeight : eventHeight * eventsPerDay;
10177
+ const height = (eventsTotalHeight + EVENT_SPACING) + dateHeader.offsetHeight + MORE_BUTTON_HEIGHT + EVENT_SPACING;
10178
+ this.slots.forEach(slot => {
10179
+ slot.height = height;
10180
+ slot.element.nativeElement.style.height = height + 'px';
10181
+ });
10182
+ }
10173
10183
  return;
10174
10184
  }
10175
10185
  const items = this.items;
@@ -10184,24 +10194,76 @@ let SlotRange$1 = class SlotRange {
10184
10194
  const rect = slot.rect;
10185
10195
  const data = event.item.data[event.resourceIndex];
10186
10196
  data.rowIndex = findRowIndex(value.events, data);
10187
- if (value.height + eventHeight + EVENT_OFFSET + MORE_BUTTON_HEIGHT > rect.height || data.hidden) {
10197
+ let showMore;
10198
+ const _eventHeight = eventHeight === 'auto' ? DEFAULT_EVENT_HEIGHT : eventHeight;
10199
+ if (eventHeight === 'auto' || eventsPerDay) {
10200
+ showMore = eventsPerDay && eventsPerDay !== 'auto' && data.rowIndex >= eventsPerDay;
10201
+ }
10202
+ else {
10203
+ showMore = value.height + _eventHeight + EVENT_SPACING + MORE_BUTTON_HEIGHT > rect.height || data.hidden;
10204
+ }
10205
+ if (showMore) {
10188
10206
  data.hidden = true;
10189
- slot.showMore({ width: rect.width, left: rect.left, top: rect.top + slot.linkHeight + ((data.rowIndex) * (eventHeight + EVENT_OFFSET)) });
10207
+ // Needed for when eventHeight is 'auto' in order to render the button at later point
10208
+ slot.hasShowMore = true;
10209
+ // If eventHeight is 'auto', showMore button needs to be displayed after slot accumulated height is calculated
10210
+ if (eventHeight !== 'auto') {
10211
+ slot.showMore({ width: rect.width, left: rect.left, top: rect.top + slot.linkHeight + ((data.rowIndex) * (eventHeight + EVENT_SPACING)) });
10212
+ }
10190
10213
  }
10191
10214
  else {
10215
+ if (eventHeight === 'auto') {
10216
+ // If multiday event spanning on new row (group), it will be rendered on top (1st item)
10217
+ // for simplicity and for consistency with jQuery's implementation
10218
+ if (event.item.tail) {
10219
+ event.item.data[event.resourceIndex].rowIndex = 0;
10220
+ }
10221
+ if (value.events[data.rowIndex]) {
10222
+ event.item.data[event.resourceIndex].rowIndex = value.events.length;
10223
+ }
10224
+ }
10192
10225
  value.events[data.rowIndex] = event;
10193
- if (!event.rect) {
10194
- event.rect = {
10195
- top: rect.top + slot.linkHeight + (data.rowIndex * (eventHeight + EVENT_OFFSET)),
10196
- left: rect.left,
10197
- height: eventHeight,
10198
- width: 0
10199
- };
10226
+ if (eventHeight !== 'auto') {
10227
+ // eventHeight is fixed => each event can be rendered on the go
10228
+ if (!event.rect) {
10229
+ event.rect = {
10230
+ top: rect.top + slot.linkHeight + (data.rowIndex * (eventHeight + EVENT_SPACING)),
10231
+ left: rect.left,
10232
+ height: eventHeight,
10233
+ width: 0
10234
+ };
10235
+ }
10236
+ event.rect.width += rect.width + BORDER_WIDTH;
10237
+ value.height += eventHeight + EVENT_SPACING;
10238
+ // Calculate tha actual rendered items to be able to calculate the height
10239
+ if (adaptiveSlotHeight) {
10240
+ slots.forEach(_slot => {
10241
+ if (_slot.key === slot.key) {
10242
+ _slot.eventsCount = !_slot.eventsCount || data.rowIndex + 1 > _slot.eventsCount ? data.rowIndex + 1 : _slot.eventsCount;
10243
+ }
10244
+ });
10245
+ }
10200
10246
  }
10201
- event.rect.width += rect.width + BORDER_WIDTH;
10202
- value.height += eventHeight + EVENT_OFFSET;
10203
10247
  }
10204
10248
  }));
10249
+ if (eventHeight === 'auto') {
10250
+ // eventHeight is 'auto' => first get all slotItems for a slot and then render them, after they are in the correct rendering order (L140-L146)
10251
+ this.renderAutoHeightEvents(slotItems, dateHeader);
10252
+ }
10253
+ else if (eventsPerDay) {
10254
+ slots.forEach(slot => {
10255
+ const multiplier = !adaptiveSlotHeight ? eventsPerDay : slot.eventsCount;
10256
+ const height = BORDER_WIDTH +
10257
+ dateHeader.offsetHeight +
10258
+ EVENT_SPACING +
10259
+ (multiplier * (eventHeight + EVENT_SPACING)) +
10260
+ MORE_BUTTON_HEIGHT +
10261
+ EVENT_SPACING;
10262
+ slot.eventsCount = 0;
10263
+ slot.height = height;
10264
+ slot.element.nativeElement.style.height = height + 'px';
10265
+ });
10266
+ }
10205
10267
  sorted.forEach(event => {
10206
10268
  if (event.rect) {
10207
10269
  event.rect.width -= BORDER_WIDTH;
@@ -10209,6 +10271,73 @@ let SlotRange$1 = class SlotRange {
10209
10271
  event.reflow();
10210
10272
  });
10211
10273
  }
10274
+ renderAutoHeightEvents(slotItems, dateHeader) {
10275
+ // Iterate through the slotItems
10276
+ Object.keys(slotItems).forEach((key) => {
10277
+ const slotItem = slotItems[key];
10278
+ const slotRect = slotItem.slot.rect;
10279
+ // Iterate over each event in the events array
10280
+ let accumulatedHeight = dateHeader.offsetHeight;
10281
+ slotItem.events.forEach((event, index) => {
10282
+ const prevEvent = slotItem.events[index - 1];
10283
+ if (!event.rect) {
10284
+ // Each event is position depending on where the previous event is already positioned
10285
+ const eventOffset = !prevEvent ? 0 : prevEvent.element.nativeElement.clientHeight + prevEvent.rect.top;
10286
+ const top = !prevEvent ? slotRect.top + slotItem.slot.linkHeight : eventOffset + EVENT_SPACING;
10287
+ event.rect = {
10288
+ top: top,
10289
+ left: slotRect.left,
10290
+ width: 0
10291
+ };
10292
+ }
10293
+ // The number of slots an event spans in current group
10294
+ let eventWidth;
10295
+ if (event.item.isMultiDay) {
10296
+ const slotMatch = this.slots.filter(slot => intersects(event.item.startTime, event.item.endTime, slot.start, slot.end));
10297
+ eventWidth = slotMatch.reduce((acc, currentValue) => acc + currentValue.rect.width + BORDER_WIDTH, 0) - BORDER_WIDTH;
10298
+ if (prevEvent) {
10299
+ const newHeight = prevEvent.element.nativeElement.clientHeight + prevEvent.rect.top;
10300
+ const newTop = newHeight + EVENT_SPACING;
10301
+ // If event is spanning in multiple slots, it needs to be positioned so that its top
10302
+ // is calculated based on the most 'accumulated height' among all slots
10303
+ if (event.rect.top < newTop) {
10304
+ event.rect.top = newTop;
10305
+ // Consequently, all previously renderd events (after that multi-span event) need to
10306
+ // be reposition so that they don't overlap
10307
+ slotMatch.forEach(slot => {
10308
+ const slotKey = slot.id.resourceIndex + ':' + slot.id.rangeIndex + ':' + slot.id.index;
10309
+ if (slotKey !== key) {
10310
+ slotItems[slotKey].events.forEach((e, index) => {
10311
+ if (index > event.item.data[event.resourceIndex].rowIndex) {
10312
+ e.rect.top = event.rect.top + event.element.nativeElement.clientHeight + EVENT_SPACING;
10313
+ }
10314
+ });
10315
+ }
10316
+ });
10317
+ }
10318
+ }
10319
+ }
10320
+ else {
10321
+ eventWidth = slotRect.width;
10322
+ }
10323
+ event.rect.width = eventWidth;
10324
+ event.element.nativeElement.style.width = event.rect.width + 'px';
10325
+ event.element.nativeElement.style.height = 'auto';
10326
+ accumulatedHeight += event.element.nativeElement.clientHeight + EVENT_SPACING;
10327
+ });
10328
+ const slotHeight = slotItem.height = BORDER_WIDTH +
10329
+ dateHeader.offsetHeight +
10330
+ EVENT_SPACING +
10331
+ accumulatedHeight +
10332
+ (slotItem.slot.hasShowMore ? 0 : MORE_BUTTON_HEIGHT);
10333
+ slotItem.slot.element.nativeElement.style.height = slotHeight + 'px';
10334
+ // After events are rendered, position the showMore button
10335
+ if (slotItem.slot.hasShowMore) {
10336
+ const top = slotRect.top + slotItem.slot.linkHeight + accumulatedHeight - MORE_BUTTON_HEIGHT;
10337
+ slotItem.slot.showMore({ width: slotRect.width, left: slotRect.left, top: top });
10338
+ }
10339
+ });
10340
+ }
10212
10341
  };
10213
10342
  /**
10214
10343
  * @hidden
@@ -10263,8 +10392,8 @@ class MonthResourceGroup {
10263
10392
  * @hidden
10264
10393
  */
10265
10394
  class MonthSlotService extends BaseSlotService {
10266
- layout(eventHeight) {
10267
- this.groups.forEach((group) => group.forEachRange(range => range.layout(eventHeight)));
10395
+ layout(eventHeight, eventsPerDay, adaptiveSlotHeight) {
10396
+ this.groups.forEach((group) => group.forEachRange(range => range.layout(eventHeight, eventsPerDay, adaptiveSlotHeight)));
10268
10397
  }
10269
10398
  slotByIndex(slotIndex) {
10270
10399
  const [resourceIndex, rangeIndex, index] = slotIndex.split(':').map(part => parseInt(part, 10));
@@ -10394,9 +10523,18 @@ const createTasks$3 = (periodStart, periodEnd, items, ranges) => {
10394
10523
  rangeIndex: rangeIdx,
10395
10524
  data: data
10396
10525
  };
10397
- tasks.push(task);
10398
10526
  task.head = task.endTime > rangeEnd;
10399
10527
  task.tail = task.startTime < rangeStart;
10528
+ let slotMatch;
10529
+ range.forEach(slot => {
10530
+ const slotStartTime = slot;
10531
+ const slotEndTime = addDays(slot, 1);
10532
+ if (task.event.start >= slotStartTime && task.event.start <= slotEndTime) {
10533
+ slotMatch = { start: slotStartTime, end: slotEndTime };
10534
+ }
10535
+ });
10536
+ task.isMultiDay = task.event.end > (slotMatch === null || slotMatch === void 0 ? void 0 : slotMatch.end) || task.head || task.tail;
10537
+ tasks.push(task);
10400
10538
  }
10401
10539
  }
10402
10540
  }
@@ -11513,9 +11651,7 @@ class BaseViewItem {
11513
11651
  this.subs.add(this.slotService.slotsChange.subscribe(() => {
11514
11652
  this.rect = null;
11515
11653
  this.setStyles({
11516
- width: 0,
11517
11654
  left: 0,
11518
- bottom: 0
11519
11655
  });
11520
11656
  const slotId = { index: this.index, resourceIndex: this.resourceIndex, rangeIndex: this.rangeIndex };
11521
11657
  this.slotService.unregisterItem(this, slotId);
@@ -12067,7 +12203,7 @@ class MonthSlotComponent extends BaseSlotDirective {
12067
12203
  }
12068
12204
  }
12069
12205
  MonthSlotComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthSlotComponent, deps: [{ token: i0.ElementRef }, { token: MonthSlotService }, { token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12070
- MonthSlotComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonthSlotComponent, isStandalone: true, selector: "[monthSlot]", inputs: { resourcesByIndex: "resourcesByIndex", monthDaySlotTemplateRef: "monthDaySlotTemplateRef", day: ["monthSlot", "day"] }, usesInheritance: true, ngImport: i0, template: `
12206
+ MonthSlotComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonthSlotComponent, isStandalone: true, selector: "[monthSlot]", inputs: { resourcesByIndex: "resourcesByIndex", monthDaySlotTemplateRef: "monthDaySlotTemplateRef", eventsPerDay: "eventsPerDay", eventHeight: "eventHeight", adaptiveSlotHeight: "adaptiveSlotHeight", day: ["monthSlot", "day"] }, usesInheritance: true, ngImport: i0, template: `
12071
12207
  <span *ngIf="!monthDaySlotTemplateRef" aria-hidden="true" class="k-link k-nav-day">
12072
12208
  {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
12073
12209
  </span>
@@ -12117,6 +12253,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12117
12253
  type: Input
12118
12254
  }], monthDaySlotTemplateRef: [{
12119
12255
  type: Input
12256
+ }], eventsPerDay: [{
12257
+ type: Input
12258
+ }], eventHeight: [{
12259
+ type: Input
12260
+ }], adaptiveSlotHeight: [{
12261
+ type: Input
12120
12262
  }], day: [{
12121
12263
  type: Input,
12122
12264
  args: ['monthSlot']
@@ -12145,6 +12287,15 @@ class MonthViewRendererComponent extends BaseView {
12145
12287
  }
12146
12288
  super.ngOnChanges(changes);
12147
12289
  }
12290
+ ngOnInit() {
12291
+ this.viewState.layoutEnd.subscribe(() => {
12292
+ if (this.adaptiveSlotHeight) {
12293
+ this.slotService.invalidate();
12294
+ this.reflow();
12295
+ }
12296
+ });
12297
+ super.ngOnInit();
12298
+ }
12148
12299
  ngAfterViewInit() {
12149
12300
  this.updateOngoingEvents();
12150
12301
  super.ngAfterViewInit();
@@ -12223,7 +12374,7 @@ class MonthViewRendererComponent extends BaseView {
12223
12374
  // this changes the table and slots size during rendering before the browser re-adjusts the 100% table width
12224
12375
  content.style.overflow = 'visible';
12225
12376
  }
12226
- this.slotService.layout(this.eventHeight);
12377
+ this.slotService.layout(this.eventHeight, this.eventsPerDay, this.adaptiveSlotHeight);
12227
12378
  if (this.contentHeight === 'auto') {
12228
12379
  content.style.overflow = 'auto';
12229
12380
  }
@@ -12320,7 +12471,7 @@ class MonthViewRendererComponent extends BaseView {
12320
12471
  }
12321
12472
  }
12322
12473
  MonthViewRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthViewRendererComponent, deps: [{ token: ViewContextService }, { token: ViewStateService }, { token: i1$2.IntlService }, { token: MonthSlotService }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: PDFService }, { token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i7.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
12323
- MonthViewRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonthViewRendererComponent, isStandalone: true, selector: "month-view", inputs: { monthDaySlotTemplate: "monthDaySlotTemplate", highlightOngoingEvents: "highlightOngoingEvents", type: "type", numberOfWeeks: "numberOfWeeks", newRange: "newRange", dateRangeFn: "dateRangeFn" }, providers: [
12474
+ MonthViewRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonthViewRendererComponent, isStandalone: true, selector: "month-view", inputs: { monthDaySlotTemplate: "monthDaySlotTemplate", highlightOngoingEvents: "highlightOngoingEvents", type: "type", eventsPerDay: "eventsPerDay", adaptiveSlotHeight: "adaptiveSlotHeight", numberOfWeeks: "numberOfWeeks", newRange: "newRange", dateRangeFn: "dateRangeFn" }, providers: [
12324
12475
  MonthSlotService
12325
12476
  ], viewQueries: [{ propertyName: "eventElements", predicate: MonthViewItemComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12326
12477
  <table class="k-scheduler-layout k-scheduler-monthview">
@@ -12397,13 +12548,16 @@ MonthViewRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
12397
12548
  [attr.aria-owns]="matchOwned(items | async)"
12398
12549
  [style.overflowY]="'auto'">
12399
12550
  <!-- Main content -->
12400
- <table class="k-scheduler-table" #contentTable role="presentation">
12551
+ <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable role="presentation">
12401
12552
  <tbody>
12402
12553
  <ng-container *ngFor="let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex">
12403
12554
  <tr *ngFor="let week of weeks; let rangeIndex = index; trackBy: itemIndex">
12404
12555
  <ng-container *ngFor="let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex">
12405
12556
  <td *ngFor="let day of week; let index = index; trackBy: itemIndex"
12406
12557
  [monthSlot]="day"
12558
+ [eventHeight]="eventHeight"
12559
+ [eventsPerDay]="eventsPerDay"
12560
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12407
12561
  [monthDaySlotTemplateRef]="monthDaySlotTemplateRef"
12408
12562
  [resourcesByIndex]="resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex)"
12409
12563
  [ngClass]="daySlotClass(day, verticalResources.length ? verticalIndex : horizontalIndex)"
@@ -12467,7 +12621,7 @@ MonthViewRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
12467
12621
  </tr>
12468
12622
  </tbody>
12469
12623
  </table>
12470
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: ["resourcesByIndex", "monthDaySlotTemplateRef", "monthSlot"] }, { kind: "component", type: MonthViewItemComponent, selector: "[monthViewItem]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: HintContainerComponent, selector: "kendo-hint-container" }, { kind: "component", type: ResizeHintComponent, selector: "[kendoResizeHint]", inputs: ["hint", "format"] }, { kind: "pipe", type: RepeatPipe, name: "repeat" }, { kind: "pipe", type: ResourceIteratorPipe, name: "resourceIterator" }, { kind: "pipe", type: DatePipe, name: "kendoDate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
12624
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: ["resourcesByIndex", "monthDaySlotTemplateRef", "eventsPerDay", "eventHeight", "adaptiveSlotHeight", "monthSlot"] }, { kind: "component", type: MonthViewItemComponent, selector: "[monthViewItem]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoSchedulerFocusIndex]", inputs: ["kendoSchedulerFocusIndex", "containerType"] }, { kind: "component", type: HintContainerComponent, selector: "kendo-hint-container" }, { kind: "component", type: ResizeHintComponent, selector: "[kendoResizeHint]", inputs: ["hint", "format"] }, { kind: "pipe", type: RepeatPipe, name: "repeat" }, { kind: "pipe", type: ResourceIteratorPipe, name: "resourceIterator" }, { kind: "pipe", type: DatePipe, name: "kendoDate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
12471
12625
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthViewRendererComponent, decorators: [{
12472
12626
  type: Component,
12473
12627
  args: [{
@@ -12551,13 +12705,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12551
12705
  [attr.aria-owns]="matchOwned(items | async)"
12552
12706
  [style.overflowY]="'auto'">
12553
12707
  <!-- Main content -->
12554
- <table class="k-scheduler-table" #contentTable role="presentation">
12708
+ <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable role="presentation">
12555
12709
  <tbody>
12556
12710
  <ng-container *ngFor="let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex">
12557
12711
  <tr *ngFor="let week of weeks; let rangeIndex = index; trackBy: itemIndex">
12558
12712
  <ng-container *ngFor="let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex">
12559
12713
  <td *ngFor="let day of week; let index = index; trackBy: itemIndex"
12560
12714
  [monthSlot]="day"
12715
+ [eventHeight]="eventHeight"
12716
+ [eventsPerDay]="eventsPerDay"
12717
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12561
12718
  [monthDaySlotTemplateRef]="monthDaySlotTemplateRef"
12562
12719
  [resourcesByIndex]="resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex)"
12563
12720
  [ngClass]="daySlotClass(day, verticalResources.length ? verticalIndex : horizontalIndex)"
@@ -12631,6 +12788,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12631
12788
  type: Input
12632
12789
  }], type: [{
12633
12790
  type: Input
12791
+ }], eventsPerDay: [{
12792
+ type: Input
12793
+ }], adaptiveSlotHeight: [{
12794
+ type: Input
12634
12795
  }], numberOfWeeks: [{
12635
12796
  type: Input
12636
12797
  }], newRange: [{
@@ -12675,9 +12836,32 @@ class MonthViewComponent extends ConfigurationViewBase {
12675
12836
  get title() {
12676
12837
  return this.localization.get('monthViewTitle');
12677
12838
  }
12839
+ /**
12840
+ * The number of events to be rendered per day. Setting this property to 'auto'
12841
+ * will display all events in the respective slot.
12842
+ * > When set to `'auto'` it will automatically set the `adaptiveSlotHeight` property to `true`.
12843
+ * > If set to `0` it will be normalized internally to `1`.
12844
+ * @default 2
12845
+ */
12846
+ set eventsPerDay(events) {
12847
+ this._eventsPerDay = !events ? 1 : events;
12848
+ }
12849
+ get eventsPerDay() {
12850
+ return this._eventsPerDay;
12851
+ }
12678
12852
  get viewEventHeight() {
12679
12853
  return isPresent(this.eventHeight) ? this.eventHeight : (this.schedulerOptions.eventHeight || DEFAULT_EVENT_HEIGHT);
12680
12854
  }
12855
+ ngOnChanges(changes) {
12856
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto') ||
12857
+ (changes['eventsPerDay'] && changes['eventsPerDay'].currentValue === 'auto')) {
12858
+ this.adaptiveSlotHeight = true;
12859
+ }
12860
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto' && !this.eventsPerDay) ||
12861
+ (changes['adaptiveSlotHeight'] && changes['adaptiveSlotHeight'].currentValue === true && !this.eventsPerDay)) {
12862
+ this.eventsPerDay = 2;
12863
+ }
12864
+ }
12681
12865
  /**
12682
12866
  * @hidden
12683
12867
  */
@@ -12697,14 +12881,16 @@ class MonthViewComponent extends ConfigurationViewBase {
12697
12881
  }
12698
12882
  }
12699
12883
  MonthViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthViewComponent, deps: [{ token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: ViewContextService }, { token: ViewStateService }, { token: i1$2.IntlService }], target: i0.ɵɵFactoryTarget.Component });
12700
- MonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonthViewComponent, isStandalone: true, selector: "kendo-scheduler-month-view", inputs: { eventHeight: "eventHeight", selectedDateFormat: "selectedDateFormat", selectedShortDateFormat: "selectedShortDateFormat" }, providers: [{
12884
+ MonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MonthViewComponent, isStandalone: true, selector: "kendo-scheduler-month-view", inputs: { eventsPerDay: "eventsPerDay", eventHeight: "eventHeight", adaptiveSlotHeight: "adaptiveSlotHeight", selectedDateFormat: "selectedDateFormat", selectedShortDateFormat: "selectedShortDateFormat" }, providers: [{
12701
12885
  provide: SchedulerView,
12702
12886
  useExisting: forwardRef(() => MonthViewComponent)
12703
- }], queries: [{ propertyName: "monthDaySlotTemplate", first: true, predicate: MonthDaySlotTemplateDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
12887
+ }], queries: [{ propertyName: "monthDaySlotTemplate", first: true, predicate: MonthDaySlotTemplateDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12704
12888
  <ng-template #content>
12705
12889
  <month-view
12706
12890
  type="month"
12707
12891
  [eventHeight]="viewEventHeight"
12892
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12893
+ [eventsPerDay]="eventsPerDay"
12708
12894
  [eventTemplate]="eventTemplate?.templateRef"
12709
12895
  [slotClass]="viewSlotClass"
12710
12896
  [eventClass]="viewEventClass"
@@ -12719,7 +12905,7 @@ MonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
12719
12905
  [newRange]="newRange">
12720
12906
  </month-view>
12721
12907
  </ng-template>
12722
- `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12908
+ `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "eventsPerDay", "adaptiveSlotHeight", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12723
12909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthViewComponent, decorators: [{
12724
12910
  type: Component,
12725
12911
  args: [{
@@ -12734,6 +12920,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12734
12920
  <month-view
12735
12921
  type="month"
12736
12922
  [eventHeight]="viewEventHeight"
12923
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12924
+ [eventsPerDay]="eventsPerDay"
12737
12925
  [eventTemplate]="eventTemplate?.templateRef"
12738
12926
  [slotClass]="viewSlotClass"
12739
12927
  [eventClass]="viewEventClass"
@@ -12752,7 +12940,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12752
12940
  standalone: true,
12753
12941
  imports: [MonthViewRendererComponent]
12754
12942
  }]
12755
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: ViewContextService }, { type: ViewStateService }, { type: i1$2.IntlService }]; }, propDecorators: { eventHeight: [{
12943
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: ViewContextService }, { type: ViewStateService }, { type: i1$2.IntlService }]; }, propDecorators: { eventsPerDay: [{
12944
+ type: Input
12945
+ }], eventHeight: [{
12946
+ type: Input
12947
+ }], adaptiveSlotHeight: [{
12756
12948
  type: Input
12757
12949
  }], selectedDateFormat: [{
12758
12950
  type: Input
@@ -12800,9 +12992,32 @@ class MultiWeekViewComponent extends ConfigurationViewBase {
12800
12992
  get title() {
12801
12993
  return this.localization.get('multiWeekViewTitle');
12802
12994
  }
12995
+ /**
12996
+ * The number of events to be rendered per day. Setting this property to 'auto'
12997
+ * will display all events in the respective slot.
12998
+ * > When set to `'auto'` it will automatically set the `adaptiveSlotHeight` property to `true`.
12999
+ * > If set to `0` it will be normalized internally to `1`.
13000
+ * @default 2
13001
+ */
13002
+ set eventsPerDay(events) {
13003
+ this._eventsPerDay = !events ? 1 : events;
13004
+ }
13005
+ get eventsPerDay() {
13006
+ return this._eventsPerDay;
13007
+ }
12803
13008
  get viewEventHeight() {
12804
13009
  return isPresent(this.eventHeight) ? this.eventHeight : (this.schedulerOptions.eventHeight || DEFAULT_EVENT_HEIGHT);
12805
13010
  }
13011
+ ngOnChanges(changes) {
13012
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto') ||
13013
+ (changes['eventsPerDay'] && changes['eventsPerDay'].currentValue === 'auto')) {
13014
+ this.adaptiveSlotHeight = true;
13015
+ }
13016
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto' && !this.eventsPerDay) ||
13017
+ (changes['adaptiveSlotHeight'] && changes['adaptiveSlotHeight'].currentValue === true && !this.eventsPerDay)) {
13018
+ this.eventsPerDay = 2;
13019
+ }
13020
+ }
12806
13021
  /**
12807
13022
  * @hidden
12808
13023
  */
@@ -12822,14 +13037,16 @@ class MultiWeekViewComponent extends ConfigurationViewBase {
12822
13037
  }
12823
13038
  }
12824
13039
  MultiWeekViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiWeekViewComponent, deps: [{ token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: ViewContextService }, { token: ViewStateService }, { token: i1$2.IntlService }], target: i0.ɵɵFactoryTarget.Component });
12825
- MultiWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MultiWeekViewComponent, isStandalone: true, selector: "kendo-scheduler-multi-week-view", inputs: { eventHeight: "eventHeight", numberOfWeeks: "numberOfWeeks", selectedDateFormat: "selectedDateFormat", selectedShortDateFormat: "selectedShortDateFormat" }, providers: [{
13040
+ MultiWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MultiWeekViewComponent, isStandalone: true, selector: "kendo-scheduler-multi-week-view", inputs: { eventHeight: "eventHeight", eventsPerDay: "eventsPerDay", adaptiveSlotHeight: "adaptiveSlotHeight", numberOfWeeks: "numberOfWeeks", selectedDateFormat: "selectedDateFormat", selectedShortDateFormat: "selectedShortDateFormat" }, providers: [{
12826
13041
  provide: SchedulerView,
12827
13042
  useExisting: forwardRef(() => MultiWeekViewComponent)
12828
- }], queries: [{ propertyName: "multiWeekDaySlotTemplate", first: true, predicate: MultiWeekDaySlotTemplateDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
13043
+ }], queries: [{ propertyName: "multiWeekDaySlotTemplate", first: true, predicate: MultiWeekDaySlotTemplateDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12829
13044
  <ng-template #content>
12830
13045
  <month-view
12831
13046
  type="multiWeek"
12832
13047
  [eventHeight]="viewEventHeight"
13048
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
13049
+ [eventsPerDay]="eventsPerDay"
12833
13050
  [eventTemplate]="eventTemplate?.templateRef"
12834
13051
  [slotClass]="viewSlotClass"
12835
13052
  [eventClass]="viewEventClass"
@@ -12845,7 +13062,7 @@ MultiWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
12845
13062
  [newRange]="newRange">
12846
13063
  </month-view>
12847
13064
  </ng-template>
12848
- `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13065
+ `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "eventsPerDay", "adaptiveSlotHeight", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12849
13066
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiWeekViewComponent, decorators: [{
12850
13067
  type: Component,
12851
13068
  args: [{
@@ -12860,6 +13077,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12860
13077
  <month-view
12861
13078
  type="multiWeek"
12862
13079
  [eventHeight]="viewEventHeight"
13080
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
13081
+ [eventsPerDay]="eventsPerDay"
12863
13082
  [eventTemplate]="eventTemplate?.templateRef"
12864
13083
  [slotClass]="viewSlotClass"
12865
13084
  [eventClass]="viewEventClass"
@@ -12881,6 +13100,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12881
13100
  }]
12882
13101
  }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: ViewContextService }, { type: ViewStateService }, { type: i1$2.IntlService }]; }, propDecorators: { eventHeight: [{
12883
13102
  type: Input
13103
+ }], eventsPerDay: [{
13104
+ type: Input
13105
+ }], adaptiveSlotHeight: [{
13106
+ type: Input
12884
13107
  }], numberOfWeeks: [{
12885
13108
  type: Input
12886
13109
  }], selectedDateFormat: [{