@progress/kendo-angular-scheduler 16.11.0 → 17.0.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: 1728903665,
46
+ version: '17.0.0-develop.1',
47
47
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
48
48
  };
49
49
 
@@ -9945,6 +9945,10 @@ const ONGOING_EVENT_CSS_CLASS = 'k-event-ongoing';
9945
9945
  const DAYS_IN_WEEK_COUNT = 7;
9946
9946
  /** @hidden */
9947
9947
  const WEEKS_COUNT = 6;
9948
+ /** @hidden */
9949
+ const MORE_BUTTON_HEIGHT = 13;
9950
+ /** @hidden */
9951
+ const EVENT_SPACING = 2;
9948
9952
 
9949
9953
  /**
9950
9954
  * @hidden
@@ -10062,9 +10066,6 @@ class BaseSlotService {
10062
10066
  }
10063
10067
  }
10064
10068
 
10065
- //better try to measure this one
10066
- const MORE_BUTTON_HEIGHT = 13;
10067
- const EVENT_OFFSET = 2;
10068
10069
  /**
10069
10070
  * @hidden
10070
10071
  */
@@ -10128,8 +10129,17 @@ let SlotRange$1 = class SlotRange {
10128
10129
  unregisterSlot(slot) {
10129
10130
  this.slotMap.removeItem(slot.id.index, slot);
10130
10131
  }
10131
- layout(eventHeight) {
10132
+ layout(eventHeight, eventsPerDay, adaptiveSlotHeight) {
10133
+ const dateHeader = this.slots[0].element.nativeElement.firstElementChild;
10132
10134
  if (!this.hasItems) {
10135
+ if (eventHeight !== 'auto') {
10136
+ const eventsTotalHeight = adaptiveSlotHeight ? eventHeight : eventHeight * eventsPerDay;
10137
+ const height = (eventsTotalHeight + EVENT_SPACING) + dateHeader.offsetHeight + MORE_BUTTON_HEIGHT + EVENT_SPACING;
10138
+ this.slots.forEach(slot => {
10139
+ slot.height = height;
10140
+ slot.element.nativeElement.style.height = height + 'px';
10141
+ });
10142
+ }
10133
10143
  return;
10134
10144
  }
10135
10145
  const items = this.items;
@@ -10144,24 +10154,76 @@ let SlotRange$1 = class SlotRange {
10144
10154
  const rect = slot.rect;
10145
10155
  const data = event.item.data[event.resourceIndex];
10146
10156
  data.rowIndex = findRowIndex(value.events, data);
10147
- if (value.height + eventHeight + EVENT_OFFSET + MORE_BUTTON_HEIGHT > rect.height || data.hidden) {
10157
+ let showMore;
10158
+ const _eventHeight = eventHeight === 'auto' ? DEFAULT_EVENT_HEIGHT : eventHeight;
10159
+ if (eventHeight === 'auto' || eventsPerDay) {
10160
+ showMore = eventsPerDay && eventsPerDay !== 'auto' && data.rowIndex >= eventsPerDay;
10161
+ }
10162
+ else {
10163
+ showMore = value.height + _eventHeight + EVENT_SPACING + MORE_BUTTON_HEIGHT > rect.height || data.hidden;
10164
+ }
10165
+ if (showMore) {
10148
10166
  data.hidden = true;
10149
- slot.showMore({ width: rect.width, left: rect.left, top: rect.top + slot.linkHeight + ((data.rowIndex) * (eventHeight + EVENT_OFFSET)) });
10167
+ // Needed for when eventHeight is 'auto' in order to render the button at later point
10168
+ slot.hasShowMore = true;
10169
+ // If eventHeight is 'auto', showMore button needs to be displayed after slot accumulated height is calculated
10170
+ if (eventHeight !== 'auto') {
10171
+ slot.showMore({ width: rect.width, left: rect.left, top: rect.top + slot.linkHeight + ((data.rowIndex) * (eventHeight + EVENT_SPACING)) });
10172
+ }
10150
10173
  }
10151
10174
  else {
10175
+ if (eventHeight === 'auto') {
10176
+ // If multiday event spanning on new row (group), it will be rendered on top (1st item)
10177
+ // for simplicity and for consistency with jQuery's implementation
10178
+ if (event.item.tail) {
10179
+ event.item.data[event.resourceIndex].rowIndex = 0;
10180
+ }
10181
+ if (value.events[data.rowIndex]) {
10182
+ event.item.data[event.resourceIndex].rowIndex = value.events.length;
10183
+ }
10184
+ }
10152
10185
  value.events[data.rowIndex] = event;
10153
- if (!event.rect) {
10154
- event.rect = {
10155
- top: rect.top + slot.linkHeight + (data.rowIndex * (eventHeight + EVENT_OFFSET)),
10156
- left: rect.left,
10157
- height: eventHeight,
10158
- width: 0
10159
- };
10186
+ if (eventHeight !== 'auto') {
10187
+ // eventHeight is fixed => each event can be rendered on the go
10188
+ if (!event.rect) {
10189
+ event.rect = {
10190
+ top: rect.top + slot.linkHeight + (data.rowIndex * (eventHeight + EVENT_SPACING)),
10191
+ left: rect.left,
10192
+ height: eventHeight,
10193
+ width: 0
10194
+ };
10195
+ }
10196
+ event.rect.width += rect.width + BORDER_WIDTH;
10197
+ value.height += eventHeight + EVENT_SPACING;
10198
+ // Calculate tha actual rendered items to be able to calculate the height
10199
+ if (adaptiveSlotHeight) {
10200
+ slots.forEach(_slot => {
10201
+ if (_slot.key === slot.key) {
10202
+ _slot.eventsCount = !_slot.eventsCount || data.rowIndex + 1 > _slot.eventsCount ? data.rowIndex + 1 : _slot.eventsCount;
10203
+ }
10204
+ });
10205
+ }
10160
10206
  }
10161
- event.rect.width += rect.width + BORDER_WIDTH;
10162
- value.height += eventHeight + EVENT_OFFSET;
10163
10207
  }
10164
10208
  }));
10209
+ if (eventHeight === 'auto') {
10210
+ // eventHeight is 'auto' => first get all slotItems for a slot and then render them, after they are in the correct rendering order (L140-L146)
10211
+ this.renderAutoHeightEvents(slotItems, dateHeader);
10212
+ }
10213
+ else if (eventsPerDay) {
10214
+ slots.forEach(slot => {
10215
+ const multiplier = !adaptiveSlotHeight ? eventsPerDay : slot.eventsCount;
10216
+ const height = BORDER_WIDTH +
10217
+ dateHeader.offsetHeight +
10218
+ EVENT_SPACING +
10219
+ (multiplier * (eventHeight + EVENT_SPACING)) +
10220
+ MORE_BUTTON_HEIGHT +
10221
+ EVENT_SPACING;
10222
+ slot.eventsCount = 0;
10223
+ slot.height = height;
10224
+ slot.element.nativeElement.style.height = height + 'px';
10225
+ });
10226
+ }
10165
10227
  sorted.forEach(event => {
10166
10228
  if (event.rect) {
10167
10229
  event.rect.width -= BORDER_WIDTH;
@@ -10169,6 +10231,73 @@ let SlotRange$1 = class SlotRange {
10169
10231
  event.reflow();
10170
10232
  });
10171
10233
  }
10234
+ renderAutoHeightEvents(slotItems, dateHeader) {
10235
+ // Iterate through the slotItems
10236
+ Object.keys(slotItems).forEach((key) => {
10237
+ const slotItem = slotItems[key];
10238
+ const slotRect = slotItem.slot.rect;
10239
+ // Iterate over each event in the events array
10240
+ let accumulatedHeight = dateHeader.offsetHeight;
10241
+ slotItem.events.forEach((event, index) => {
10242
+ const prevEvent = slotItem.events[index - 1];
10243
+ if (!event.rect) {
10244
+ // Each event is position depending on where the previous event is already positioned
10245
+ const eventOffset = !prevEvent ? 0 : prevEvent.element.nativeElement.clientHeight + prevEvent.rect.top;
10246
+ const top = !prevEvent ? slotRect.top + slotItem.slot.linkHeight : eventOffset + EVENT_SPACING;
10247
+ event.rect = {
10248
+ top: top,
10249
+ left: slotRect.left,
10250
+ width: 0
10251
+ };
10252
+ }
10253
+ // The number of slots an event spans in current group
10254
+ let eventWidth;
10255
+ if (event.item.isMultiDay) {
10256
+ const slotMatch = this.slots.filter(slot => intersects(event.item.startTime, event.item.endTime, slot.start, slot.end));
10257
+ eventWidth = slotMatch.reduce((acc, currentValue) => acc + currentValue.rect.width + BORDER_WIDTH, 0) - BORDER_WIDTH;
10258
+ if (prevEvent) {
10259
+ const newHeight = prevEvent.element.nativeElement.clientHeight + prevEvent.rect.top;
10260
+ const newTop = newHeight + EVENT_SPACING;
10261
+ // If event is spanning in multiple slots, it needs to be positioned so that its top
10262
+ // is calculated based on the most 'accumulated height' among all slots
10263
+ if (event.rect.top < newTop) {
10264
+ event.rect.top = newTop;
10265
+ // Consequently, all previously renderd events (after that multi-span event) need to
10266
+ // be reposition so that they don't overlap
10267
+ slotMatch.forEach(slot => {
10268
+ const slotKey = slot.id.resourceIndex + ':' + slot.id.rangeIndex + ':' + slot.id.index;
10269
+ if (slotKey !== key) {
10270
+ slotItems[slotKey].events.forEach((e, index) => {
10271
+ if (index > event.item.data[event.resourceIndex].rowIndex) {
10272
+ e.rect.top = event.rect.top + event.element.nativeElement.clientHeight + EVENT_SPACING;
10273
+ }
10274
+ });
10275
+ }
10276
+ });
10277
+ }
10278
+ }
10279
+ }
10280
+ else {
10281
+ eventWidth = slotRect.width;
10282
+ }
10283
+ event.rect.width = eventWidth;
10284
+ event.element.nativeElement.style.width = event.rect.width + 'px';
10285
+ event.element.nativeElement.style.height = 'auto';
10286
+ accumulatedHeight += event.element.nativeElement.clientHeight + EVENT_SPACING;
10287
+ });
10288
+ const slotHeight = slotItem.height = BORDER_WIDTH +
10289
+ dateHeader.offsetHeight +
10290
+ EVENT_SPACING +
10291
+ accumulatedHeight +
10292
+ (slotItem.slot.hasShowMore ? 0 : MORE_BUTTON_HEIGHT);
10293
+ slotItem.slot.element.nativeElement.style.height = slotHeight + 'px';
10294
+ // After events are rendered, position the showMore button
10295
+ if (slotItem.slot.hasShowMore) {
10296
+ const top = slotRect.top + slotItem.slot.linkHeight + accumulatedHeight - MORE_BUTTON_HEIGHT;
10297
+ slotItem.slot.showMore({ width: slotRect.width, left: slotRect.left, top: top });
10298
+ }
10299
+ });
10300
+ }
10172
10301
  };
10173
10302
  /**
10174
10303
  * @hidden
@@ -10223,8 +10352,8 @@ class MonthResourceGroup {
10223
10352
  * @hidden
10224
10353
  */
10225
10354
  class MonthSlotService extends BaseSlotService {
10226
- layout(eventHeight) {
10227
- this.groups.forEach((group) => group.forEachRange(range => range.layout(eventHeight)));
10355
+ layout(eventHeight, eventsPerDay, adaptiveSlotHeight) {
10356
+ this.groups.forEach((group) => group.forEachRange(range => range.layout(eventHeight, eventsPerDay, adaptiveSlotHeight)));
10228
10357
  }
10229
10358
  slotByIndex(slotIndex) {
10230
10359
  const [resourceIndex, rangeIndex, index] = slotIndex.split(':').map(part => parseInt(part, 10));
@@ -10354,9 +10483,18 @@ const createTasks$3 = (periodStart, periodEnd, items, ranges) => {
10354
10483
  rangeIndex: rangeIdx,
10355
10484
  data: data
10356
10485
  };
10357
- tasks.push(task);
10358
10486
  task.head = task.endTime > rangeEnd;
10359
10487
  task.tail = task.startTime < rangeStart;
10488
+ let slotMatch;
10489
+ range.forEach(slot => {
10490
+ const slotStartTime = slot;
10491
+ const slotEndTime = addDays(slot, 1);
10492
+ if (task.event.start >= slotStartTime && task.event.start <= slotEndTime) {
10493
+ slotMatch = { start: slotStartTime, end: slotEndTime };
10494
+ }
10495
+ });
10496
+ task.isMultiDay = task.event.end > slotMatch?.end || task.head || task.tail;
10497
+ tasks.push(task);
10360
10498
  }
10361
10499
  }
10362
10500
  }
@@ -11506,9 +11644,7 @@ class BaseViewItem {
11506
11644
  this.subs.add(this.slotService.slotsChange.subscribe(() => {
11507
11645
  this.rect = null;
11508
11646
  this.setStyles({
11509
- width: 0,
11510
11647
  left: 0,
11511
- bottom: 0
11512
11648
  });
11513
11649
  const slotId = { index: this.index, resourceIndex: this.resourceIndex, rangeIndex: this.rangeIndex };
11514
11650
  this.slotService.unregisterItem(this, slotId);
@@ -12025,7 +12161,7 @@ class MonthSlotComponent extends BaseSlotDirective {
12025
12161
  }
12026
12162
  }
12027
12163
  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 });
12028
- 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: `
12164
+ 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: `
12029
12165
  <span *ngIf="!monthDaySlotTemplateRef" aria-hidden="true" class="k-link k-nav-day">
12030
12166
  {{ day | kendoDate: isFirstDayOfMonth(day) ? 'MMM dd' : 'dd' }}
12031
12167
  </span>
@@ -12075,6 +12211,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12075
12211
  type: Input
12076
12212
  }], monthDaySlotTemplateRef: [{
12077
12213
  type: Input
12214
+ }], eventsPerDay: [{
12215
+ type: Input
12216
+ }], eventHeight: [{
12217
+ type: Input
12218
+ }], adaptiveSlotHeight: [{
12219
+ type: Input
12078
12220
  }], day: [{
12079
12221
  type: Input,
12080
12222
  args: ['monthSlot']
@@ -12103,6 +12245,15 @@ class MonthViewRendererComponent extends BaseView {
12103
12245
  }
12104
12246
  super.ngOnChanges(changes);
12105
12247
  }
12248
+ ngOnInit() {
12249
+ this.viewState.layoutEnd.subscribe(() => {
12250
+ if (this.adaptiveSlotHeight) {
12251
+ this.slotService.invalidate();
12252
+ this.reflow();
12253
+ }
12254
+ });
12255
+ super.ngOnInit();
12256
+ }
12106
12257
  ngAfterViewInit() {
12107
12258
  this.updateOngoingEvents();
12108
12259
  super.ngAfterViewInit();
@@ -12181,7 +12332,7 @@ class MonthViewRendererComponent extends BaseView {
12181
12332
  // this changes the table and slots size during rendering before the browser re-adjusts the 100% table width
12182
12333
  content.style.overflow = 'visible';
12183
12334
  }
12184
- this.slotService.layout(this.eventHeight);
12335
+ this.slotService.layout(this.eventHeight, this.eventsPerDay, this.adaptiveSlotHeight);
12185
12336
  if (this.contentHeight === 'auto') {
12186
12337
  content.style.overflow = 'auto';
12187
12338
  }
@@ -12278,7 +12429,7 @@ class MonthViewRendererComponent extends BaseView {
12278
12429
  }
12279
12430
  }
12280
12431
  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 });
12281
- 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: [
12432
+ 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: [
12282
12433
  MonthSlotService
12283
12434
  ], viewQueries: [{ propertyName: "eventElements", predicate: MonthViewItemComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12284
12435
  <table class="k-scheduler-layout k-scheduler-monthview">
@@ -12355,13 +12506,16 @@ MonthViewRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
12355
12506
  [attr.aria-owns]="matchOwned(items | async)"
12356
12507
  [style.overflowY]="'auto'">
12357
12508
  <!-- Main content -->
12358
- <table class="k-scheduler-table" #contentTable role="presentation">
12509
+ <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable role="presentation">
12359
12510
  <tbody>
12360
12511
  <ng-container *ngFor="let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex">
12361
12512
  <tr *ngFor="let week of weeks; let rangeIndex = index; trackBy: itemIndex">
12362
12513
  <ng-container *ngFor="let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex">
12363
12514
  <td *ngFor="let day of week; let index = index; trackBy: itemIndex"
12364
12515
  [monthSlot]="day"
12516
+ [eventHeight]="eventHeight"
12517
+ [eventsPerDay]="eventsPerDay"
12518
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12365
12519
  [monthDaySlotTemplateRef]="monthDaySlotTemplateRef"
12366
12520
  [resourcesByIndex]="resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex)"
12367
12521
  [ngClass]="daySlotClass(day, verticalResources.length ? verticalIndex : horizontalIndex)"
@@ -12425,7 +12579,7 @@ MonthViewRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
12425
12579
  </tr>
12426
12580
  </tbody>
12427
12581
  </table>
12428
- `, 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" }] });
12582
+ `, 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" }] });
12429
12583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthViewRendererComponent, decorators: [{
12430
12584
  type: Component,
12431
12585
  args: [{
@@ -12509,13 +12663,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12509
12663
  [attr.aria-owns]="matchOwned(items | async)"
12510
12664
  [style.overflowY]="'auto'">
12511
12665
  <!-- Main content -->
12512
- <table class="k-scheduler-table" #contentTable role="presentation">
12666
+ <table class="k-scheduler-table" [class.k-scheduler-table-auto]="adaptiveSlotHeight" #contentTable role="presentation">
12513
12667
  <tbody>
12514
12668
  <ng-container *ngFor="let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex">
12515
12669
  <tr *ngFor="let week of weeks; let rangeIndex = index; trackBy: itemIndex">
12516
12670
  <ng-container *ngFor="let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex">
12517
12671
  <td *ngFor="let day of week; let index = index; trackBy: itemIndex"
12518
12672
  [monthSlot]="day"
12673
+ [eventHeight]="eventHeight"
12674
+ [eventsPerDay]="eventsPerDay"
12675
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12519
12676
  [monthDaySlotTemplateRef]="monthDaySlotTemplateRef"
12520
12677
  [resourcesByIndex]="resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex)"
12521
12678
  [ngClass]="daySlotClass(day, verticalResources.length ? verticalIndex : horizontalIndex)"
@@ -12589,6 +12746,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12589
12746
  type: Input
12590
12747
  }], type: [{
12591
12748
  type: Input
12749
+ }], eventsPerDay: [{
12750
+ type: Input
12751
+ }], adaptiveSlotHeight: [{
12752
+ type: Input
12592
12753
  }], numberOfWeeks: [{
12593
12754
  type: Input
12594
12755
  }], newRange: [{
@@ -12633,9 +12794,32 @@ class MonthViewComponent extends ConfigurationViewBase {
12633
12794
  get title() {
12634
12795
  return this.localization.get('monthViewTitle');
12635
12796
  }
12797
+ /**
12798
+ * The number of events to be rendered per day. Setting this property to 'auto'
12799
+ * will display all events in the respective slot.
12800
+ * > When set to `'auto'` it will automatically set the `adaptiveSlotHeight` property to `true`.
12801
+ * > If set to `0` it will be normalized internally to `1`.
12802
+ * @default 2
12803
+ */
12804
+ set eventsPerDay(events) {
12805
+ this._eventsPerDay = !events ? 1 : events;
12806
+ }
12807
+ get eventsPerDay() {
12808
+ return this._eventsPerDay;
12809
+ }
12636
12810
  get viewEventHeight() {
12637
12811
  return isPresent(this.eventHeight) ? this.eventHeight : (this.schedulerOptions.eventHeight || DEFAULT_EVENT_HEIGHT);
12638
12812
  }
12813
+ ngOnChanges(changes) {
12814
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto') ||
12815
+ (changes['eventsPerDay'] && changes['eventsPerDay'].currentValue === 'auto')) {
12816
+ this.adaptiveSlotHeight = true;
12817
+ }
12818
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto' && !this.eventsPerDay) ||
12819
+ (changes['adaptiveSlotHeight'] && changes['adaptiveSlotHeight'].currentValue === true && !this.eventsPerDay)) {
12820
+ this.eventsPerDay = 2;
12821
+ }
12822
+ }
12639
12823
  /**
12640
12824
  * @hidden
12641
12825
  */
@@ -12655,14 +12839,16 @@ class MonthViewComponent extends ConfigurationViewBase {
12655
12839
  }
12656
12840
  }
12657
12841
  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 });
12658
- 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: [{
12842
+ 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: [{
12659
12843
  provide: SchedulerView,
12660
12844
  useExisting: forwardRef(() => MonthViewComponent)
12661
- }], queries: [{ propertyName: "monthDaySlotTemplate", first: true, predicate: MonthDaySlotTemplateDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
12845
+ }], queries: [{ propertyName: "monthDaySlotTemplate", first: true, predicate: MonthDaySlotTemplateDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12662
12846
  <ng-template #content>
12663
12847
  <month-view
12664
12848
  type="month"
12665
12849
  [eventHeight]="viewEventHeight"
12850
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12851
+ [eventsPerDay]="eventsPerDay"
12666
12852
  [eventTemplate]="eventTemplate?.templateRef"
12667
12853
  [slotClass]="viewSlotClass"
12668
12854
  [eventClass]="viewEventClass"
@@ -12677,7 +12863,7 @@ MonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
12677
12863
  [newRange]="newRange">
12678
12864
  </month-view>
12679
12865
  </ng-template>
12680
- `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12866
+ `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "eventsPerDay", "adaptiveSlotHeight", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12681
12867
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MonthViewComponent, decorators: [{
12682
12868
  type: Component,
12683
12869
  args: [{
@@ -12692,6 +12878,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12692
12878
  <month-view
12693
12879
  type="month"
12694
12880
  [eventHeight]="viewEventHeight"
12881
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
12882
+ [eventsPerDay]="eventsPerDay"
12695
12883
  [eventTemplate]="eventTemplate?.templateRef"
12696
12884
  [slotClass]="viewSlotClass"
12697
12885
  [eventClass]="viewEventClass"
@@ -12710,7 +12898,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12710
12898
  standalone: true,
12711
12899
  imports: [MonthViewRendererComponent]
12712
12900
  }]
12713
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: ViewContextService }, { type: ViewStateService }, { type: i1$2.IntlService }]; }, propDecorators: { eventHeight: [{
12901
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: ViewContextService }, { type: ViewStateService }, { type: i1$2.IntlService }]; }, propDecorators: { eventsPerDay: [{
12902
+ type: Input
12903
+ }], eventHeight: [{
12904
+ type: Input
12905
+ }], adaptiveSlotHeight: [{
12714
12906
  type: Input
12715
12907
  }], selectedDateFormat: [{
12716
12908
  type: Input
@@ -12758,9 +12950,32 @@ class MultiWeekViewComponent extends ConfigurationViewBase {
12758
12950
  get title() {
12759
12951
  return this.localization.get('multiWeekViewTitle');
12760
12952
  }
12953
+ /**
12954
+ * The number of events to be rendered per day. Setting this property to 'auto'
12955
+ * will display all events in the respective slot.
12956
+ * > When set to `'auto'` it will automatically set the `adaptiveSlotHeight` property to `true`.
12957
+ * > If set to `0` it will be normalized internally to `1`.
12958
+ * @default 2
12959
+ */
12960
+ set eventsPerDay(events) {
12961
+ this._eventsPerDay = !events ? 1 : events;
12962
+ }
12963
+ get eventsPerDay() {
12964
+ return this._eventsPerDay;
12965
+ }
12761
12966
  get viewEventHeight() {
12762
12967
  return isPresent(this.eventHeight) ? this.eventHeight : (this.schedulerOptions.eventHeight || DEFAULT_EVENT_HEIGHT);
12763
12968
  }
12969
+ ngOnChanges(changes) {
12970
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto') ||
12971
+ (changes['eventsPerDay'] && changes['eventsPerDay'].currentValue === 'auto')) {
12972
+ this.adaptiveSlotHeight = true;
12973
+ }
12974
+ if ((changes['eventHeight'] && changes['eventHeight'].currentValue === 'auto' && !this.eventsPerDay) ||
12975
+ (changes['adaptiveSlotHeight'] && changes['adaptiveSlotHeight'].currentValue === true && !this.eventsPerDay)) {
12976
+ this.eventsPerDay = 2;
12977
+ }
12978
+ }
12764
12979
  /**
12765
12980
  * @hidden
12766
12981
  */
@@ -12780,14 +12995,16 @@ class MultiWeekViewComponent extends ConfigurationViewBase {
12780
12995
  }
12781
12996
  }
12782
12997
  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 });
12783
- 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: [{
12998
+ 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: [{
12784
12999
  provide: SchedulerView,
12785
13000
  useExisting: forwardRef(() => MultiWeekViewComponent)
12786
- }], queries: [{ propertyName: "multiWeekDaySlotTemplate", first: true, predicate: MultiWeekDaySlotTemplateDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
13001
+ }], queries: [{ propertyName: "multiWeekDaySlotTemplate", first: true, predicate: MultiWeekDaySlotTemplateDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
12787
13002
  <ng-template #content>
12788
13003
  <month-view
12789
13004
  type="multiWeek"
12790
13005
  [eventHeight]="viewEventHeight"
13006
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
13007
+ [eventsPerDay]="eventsPerDay"
12791
13008
  [eventTemplate]="eventTemplate?.templateRef"
12792
13009
  [slotClass]="viewSlotClass"
12793
13010
  [eventClass]="viewEventClass"
@@ -12803,7 +13020,7 @@ MultiWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
12803
13020
  [newRange]="newRange">
12804
13021
  </month-view>
12805
13022
  </ng-template>
12806
- `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13023
+ `, isInline: true, dependencies: [{ kind: "component", type: MonthViewRendererComponent, selector: "month-view", inputs: ["monthDaySlotTemplate", "highlightOngoingEvents", "type", "eventsPerDay", "adaptiveSlotHeight", "numberOfWeeks", "newRange", "dateRangeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12807
13024
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiWeekViewComponent, decorators: [{
12808
13025
  type: Component,
12809
13026
  args: [{
@@ -12818,6 +13035,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12818
13035
  <month-view
12819
13036
  type="multiWeek"
12820
13037
  [eventHeight]="viewEventHeight"
13038
+ [adaptiveSlotHeight]="adaptiveSlotHeight"
13039
+ [eventsPerDay]="eventsPerDay"
12821
13040
  [eventTemplate]="eventTemplate?.templateRef"
12822
13041
  [slotClass]="viewSlotClass"
12823
13042
  [eventClass]="viewEventClass"
@@ -12839,6 +13058,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12839
13058
  }]
12840
13059
  }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: ViewContextService }, { type: ViewStateService }, { type: i1$2.IntlService }]; }, propDecorators: { eventHeight: [{
12841
13060
  type: Input
13061
+ }], eventsPerDay: [{
13062
+ type: Input
13063
+ }], adaptiveSlotHeight: [{
13064
+ type: Input
12842
13065
  }], numberOfWeeks: [{
12843
13066
  type: Input
12844
13067
  }], selectedDateFormat: [{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-scheduler",
3
- "version": "16.11.0",
3
+ "version": "17.0.0-develop.1",
4
4
  "description": "Kendo UI Scheduler Angular - Outlook or Google-style angular scheduler calendar. Full-featured and customizable embedded scheduling from the creator developers trust for professional UI components.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -26,23 +26,23 @@
26
26
  "@progress/kendo-data-query": "^1.0.0",
27
27
  "@progress/kendo-drawing": "^1.20.4",
28
28
  "@progress/kendo-licensing": "^1.0.2",
29
- "@progress/kendo-angular-tooltip": "16.11.0",
30
- "@progress/kendo-angular-buttons": "16.11.0",
31
- "@progress/kendo-angular-common": "16.11.0",
32
- "@progress/kendo-angular-dateinputs": "16.11.0",
33
- "@progress/kendo-angular-dialog": "16.11.0",
34
- "@progress/kendo-angular-dropdowns": "16.11.0",
35
- "@progress/kendo-angular-icons": "16.11.0",
36
- "@progress/kendo-angular-inputs": "16.11.0",
37
- "@progress/kendo-angular-intl": "16.11.0",
38
- "@progress/kendo-angular-l10n": "16.11.0",
39
- "@progress/kendo-angular-label": "16.11.0",
40
- "@progress/kendo-angular-popup": "16.11.0",
29
+ "@progress/kendo-angular-tooltip": "17.0.0-develop.1",
30
+ "@progress/kendo-angular-buttons": "17.0.0-develop.1",
31
+ "@progress/kendo-angular-common": "17.0.0-develop.1",
32
+ "@progress/kendo-angular-dateinputs": "17.0.0-develop.1",
33
+ "@progress/kendo-angular-dialog": "17.0.0-develop.1",
34
+ "@progress/kendo-angular-dropdowns": "17.0.0-develop.1",
35
+ "@progress/kendo-angular-icons": "17.0.0-develop.1",
36
+ "@progress/kendo-angular-inputs": "17.0.0-develop.1",
37
+ "@progress/kendo-angular-intl": "17.0.0-develop.1",
38
+ "@progress/kendo-angular-l10n": "17.0.0-develop.1",
39
+ "@progress/kendo-angular-label": "17.0.0-develop.1",
40
+ "@progress/kendo-angular-popup": "17.0.0-develop.1",
41
41
  "rxjs": "^6.5.3 || ^7.0.0"
42
42
  },
43
43
  "dependencies": {
44
44
  "tslib": "^2.3.1",
45
- "@progress/kendo-angular-schematics": "16.11.0",
45
+ "@progress/kendo-angular-schematics": "17.0.0-develop.1",
46
46
  "@progress/kendo-date-math": "^1.3.2",
47
47
  "@progress/kendo-draggable": "^3.0.2",
48
48
  "@progress/kendo-file-saver": "^1.0.7",
@@ -4,10 +4,10 @@ const schematics_1 = require("@angular-devkit/schematics");
4
4
  function default_1(options) {
5
5
  const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'SchedulerModule', package: 'scheduler', peerDependencies: {
6
6
  // peer deps of the dropdowns
7
- '@progress/kendo-angular-treeview': '16.11.0',
8
- '@progress/kendo-angular-navigation': '16.11.0',
7
+ '@progress/kendo-angular-treeview': '17.0.0-develop.1',
8
+ '@progress/kendo-angular-navigation': '17.0.0-develop.1',
9
9
  // peer dependency of kendo-angular-inputs
10
- '@progress/kendo-angular-dialog': '16.11.0',
10
+ '@progress/kendo-angular-dialog': '17.0.0-develop.1',
11
11
  // peer dependency of kendo-angular-icons
12
12
  '@progress/kendo-svg-icons': '^3.0.0'
13
13
  } });
@@ -35,7 +35,7 @@ export declare abstract class BaseView implements OnInit, OnChanges, AfterViewIn
35
35
  groupHeaderTemplate: TemplateRef<any>;
36
36
  selectedDateFormat: string;
37
37
  selectedShortDateFormat: string;
38
- eventHeight: number;
38
+ eventHeight: number | 'auto';
39
39
  showToolbar: boolean;
40
40
  showFooter: boolean;
41
41
  slotClass: (args: any) => any;
@@ -24,3 +24,7 @@ export declare const ONGOING_EVENT_CSS_CLASS = "k-event-ongoing";
24
24
  export declare const DAYS_IN_WEEK_COUNT = 7;
25
25
  /** @hidden */
26
26
  export declare const WEEKS_COUNT = 6;
27
+ /** @hidden */
28
+ export declare const MORE_BUTTON_HEIGHT = 13;
29
+ /** @hidden */
30
+ export declare const EVENT_SPACING = 2;
@@ -18,6 +18,9 @@ export declare class MonthSlotComponent extends BaseSlotDirective {
18
18
  moreHorizontalIcon: SVGIcon;
19
19
  resourcesByIndex: any;
20
20
  monthDaySlotTemplateRef: any;
21
+ eventsPerDay: number | 'auto';
22
+ eventHeight: number | 'auto';
23
+ adaptiveSlotHeight: boolean;
21
24
  set day(value: Date);
22
25
  /**
23
26
  * For the slot template we need the day value without the UTC conversion
@@ -42,5 +45,5 @@ export declare class MonthSlotComponent extends BaseSlotDirective {
42
45
  invalidate(): void;
43
46
  private removeShowMore;
44
47
  static ɵfac: i0.ɵɵFactoryDeclaration<MonthSlotComponent, never>;
45
- static ɵcmp: i0.ɵɵComponentDeclaration<MonthSlotComponent, "[monthSlot]", never, { "resourcesByIndex": "resourcesByIndex"; "monthDaySlotTemplateRef": "monthDaySlotTemplateRef"; "day": "monthSlot"; }, {}, never, never, true, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<MonthSlotComponent, "[monthSlot]", never, { "resourcesByIndex": "resourcesByIndex"; "monthDaySlotTemplateRef": "monthDaySlotTemplateRef"; "eventsPerDay": "eventsPerDay"; "eventHeight": "eventHeight"; "adaptiveSlotHeight": "adaptiveSlotHeight"; "day": "monthSlot"; }, {}, never, never, true, never>;
46
49
  }