@progress/kendo-angular-layout 21.1.1-develop.1 → 21.2.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.
Files changed (28) hide show
  1. package/esm2022/avatar/avatar.component.mjs +63 -59
  2. package/esm2022/card/card-actions.component.mjs +51 -41
  3. package/esm2022/drawer/drawer-container.component.mjs +10 -8
  4. package/esm2022/drawer/drawer.component.mjs +69 -55
  5. package/esm2022/drawer/item.component.mjs +79 -69
  6. package/esm2022/drawer/list.component.mjs +28 -25
  7. package/esm2022/expansionpanel/expansionpanel.component.mjs +75 -65
  8. package/esm2022/package-metadata.mjs +2 -2
  9. package/esm2022/panelbar/panelbar-item.component.mjs +169 -135
  10. package/esm2022/panelbar/panelbar.component.mjs +56 -45
  11. package/esm2022/splitter/splitter-bar.component.mjs +32 -25
  12. package/esm2022/splitter/splitter-pane.component.mjs +16 -10
  13. package/esm2022/splitter/splitter.component.mjs +29 -31
  14. package/esm2022/stepper/list.component.mjs +33 -33
  15. package/esm2022/stepper/step.component.mjs +141 -111
  16. package/esm2022/stepper/stepper.component.mjs +59 -55
  17. package/esm2022/tabstrip/rendering/tab.component.mjs +49 -39
  18. package/esm2022/tabstrip/tabstrip.component.mjs +251 -233
  19. package/esm2022/tabstrip/util.mjs +1 -1
  20. package/esm2022/tilelayout/tilelayout-item.component.mjs +28 -23
  21. package/esm2022/tilelayout/tilelayout.component.mjs +24 -21
  22. package/esm2022/timeline/timeline-card.component.mjs +185 -151
  23. package/esm2022/timeline/timeline-horizontal.component.mjs +197 -183
  24. package/esm2022/timeline/timeline-vertical.component.mjs +79 -67
  25. package/esm2022/timeline/timeline.component.mjs +36 -33
  26. package/fesm2022/progress-kendo-angular-layout.mjs +1747 -1498
  27. package/package.json +9 -9
  28. package/schematics/ngAdd/index.js +4 -0
@@ -12,7 +12,6 @@ import { RESIZE_DIRECTIONS, RTL_RESIZE_DIRECTIONS } from './constants';
12
12
  import { TileLayoutItemHeaderComponent } from './tilelayout-item-header.component';
13
13
  import { getId } from './util';
14
14
  import { TileLayoutResizeHandleDirective } from './tilelayout-resize-handle.directive';
15
- import { NgIf, NgFor } from '@angular/common';
16
15
  import * as i0 from "@angular/core";
17
16
  import * as i1 from "@progress/kendo-angular-l10n";
18
17
  import * as i2 from "./dragging-service";
@@ -221,43 +220,49 @@ export class TileLayoutItemComponent {
221
220
  }
222
221
  }
223
222
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TileLayoutItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i2.TileLayoutDraggingService }, { token: i3.TileLayoutKeyboardNavigationService }], target: i0.ɵɵFactoryTarget.Component });
224
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TileLayoutItemComponent, isStandalone: true, selector: "kendo-tilelayout-item", inputs: { title: "title", rowSpan: "rowSpan", colSpan: "colSpan", order: "order", col: "col", row: "row", reorderable: "reorderable", resizable: "resizable" }, host: { properties: { "class.k-tilelayout-item": "this.itemClass", "class.k-card": "this.itemClass", "attr.role": "this.hostRole", "attr.aria-dropeffect": "this.hostDropEffect", "attr.tabindex": "this.hostTabindex", "attr.aria-keyshortcuts": "this.ariaKeyShortcuts", "attr.aria-grabbed": "this.hostGrabbed", "attr.aria-labelledby": "this.hostLabelledBy", "style.grid-column-end": "this.colEnd", "style.grid-row-end": "this.rowEnd", "style.grid-column-start": "this.colStart", "style.grid-row-start": "this.rowStart" } }, queries: [{ propertyName: "headers", predicate: TileLayoutItemHeaderComponent }], usesOnChanges: true, ngImport: i0, template: `
225
- <kendo-tilelayout-item-header *ngIf="title">
223
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TileLayoutItemComponent, isStandalone: true, selector: "kendo-tilelayout-item", inputs: { title: "title", rowSpan: "rowSpan", colSpan: "colSpan", order: "order", col: "col", row: "row", reorderable: "reorderable", resizable: "resizable" }, host: { properties: { "class.k-tilelayout-item": "this.itemClass", "class.k-card": "this.itemClass", "attr.role": "this.hostRole", "attr.aria-dropeffect": "this.hostDropEffect", "attr.tabindex": "this.hostTabindex", "attr.aria-keyshortcuts": "this.ariaKeyShortcuts", "attr.aria-grabbed": "this.hostGrabbed", "attr.aria-labelledby": "this.hostLabelledBy", "style.grid-column-end": "this.colEnd", "style.grid-row-end": "this.rowEnd", "style.grid-column-start": "this.colStart", "style.grid-row-start": "this.rowStart" } }, queries: [{ propertyName: "headers", predicate: TileLayoutItemHeaderComponent }], usesOnChanges: true, ngImport: i0, template: `
224
+ @if (title) {
225
+ <kendo-tilelayout-item-header>
226
226
  <h5 [id]="titleId" class="k-card-title">{{ title }}</h5>
227
- </kendo-tilelayout-item-header>
227
+ </kendo-tilelayout-item-header>
228
+ }
228
229
  <ng-content></ng-content>
229
- <ng-container *ngIf="resizable">
230
+ @if (resizable) {
231
+ @for (dir of resizeDirections; track dir) {
230
232
  <div
231
- *ngFor="let dir of resizeDirections"
232
- class="k-resize-handle k-cursor-{{dir}}-resize"
233
- kendoTileLayoutResizeHandle
234
- [rtl]="rtl"
235
- [resizeDirection]="dir">
233
+ class="k-resize-handle k-cursor-{{dir}}-resize"
234
+ kendoTileLayoutResizeHandle
235
+ [rtl]="rtl"
236
+ [resizeDirection]="dir">
236
237
  </div>
237
- </ng-container>
238
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: TileLayoutResizeHandleDirective, selector: "[kendoTileLayoutResizeHandle]", inputs: ["resizeDirection", "rtl"] }] });
238
+ }
239
+ }
240
+ `, isInline: true, dependencies: [{ kind: "component", type: TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header" }, { kind: "directive", type: TileLayoutResizeHandleDirective, selector: "[kendoTileLayoutResizeHandle]", inputs: ["resizeDirection", "rtl"] }] });
239
241
  }
240
242
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TileLayoutItemComponent, decorators: [{
241
243
  type: Component,
242
244
  args: [{
243
245
  selector: 'kendo-tilelayout-item',
244
246
  template: `
245
- <kendo-tilelayout-item-header *ngIf="title">
247
+ @if (title) {
248
+ <kendo-tilelayout-item-header>
246
249
  <h5 [id]="titleId" class="k-card-title">{{ title }}</h5>
247
- </kendo-tilelayout-item-header>
250
+ </kendo-tilelayout-item-header>
251
+ }
248
252
  <ng-content></ng-content>
249
- <ng-container *ngIf="resizable">
253
+ @if (resizable) {
254
+ @for (dir of resizeDirections; track dir) {
250
255
  <div
251
- *ngFor="let dir of resizeDirections"
252
- class="k-resize-handle k-cursor-{{dir}}-resize"
253
- kendoTileLayoutResizeHandle
254
- [rtl]="rtl"
255
- [resizeDirection]="dir">
256
+ class="k-resize-handle k-cursor-{{dir}}-resize"
257
+ kendoTileLayoutResizeHandle
258
+ [rtl]="rtl"
259
+ [resizeDirection]="dir">
256
260
  </div>
257
- </ng-container>
258
- `,
261
+ }
262
+ }
263
+ `,
259
264
  standalone: true,
260
- imports: [NgIf, TileLayoutItemHeaderComponent, NgFor, TileLayoutResizeHandleDirective]
265
+ imports: [TileLayoutItemHeaderComponent, TileLayoutResizeHandleDirective]
261
266
  }]
262
267
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i2.TileLayoutDraggingService }, { type: i3.TileLayoutKeyboardNavigationService }], propDecorators: { title: [{
263
268
  type: Input
@@ -13,7 +13,6 @@ import { validatePackage } from '@progress/kendo-licensing';
13
13
  import { packageMetadata } from '../package-metadata';
14
14
  import { isPresent } from '../common/util';
15
15
  import { TileLayoutKeyboardNavigationService } from './keyboard-navigation.service';
16
- import { NgIf } from '@angular/common';
17
16
  import * as i0 from "@angular/core";
18
17
  import * as i1 from "@progress/kendo-angular-l10n";
19
18
  import * as i2 from "./dragging-service";
@@ -290,7 +289,7 @@ export class TileLayoutComponent {
290
289
  }
291
290
  };
292
291
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TileLayoutComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i2.TileLayoutDraggingService }, { token: i3.TileLayoutKeyboardNavigationService }], target: i0.ɵɵFactoryTarget.Component });
293
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TileLayoutComponent, isStandalone: true, selector: "kendo-tilelayout", inputs: { columns: "columns", columnWidth: "columnWidth", gap: "gap", reorderable: "reorderable", resizable: "resizable", rowHeight: "rowHeight", autoFlow: "autoFlow", navigable: "navigable" }, outputs: { reorder: "reorder", resize: "resize" }, host: { properties: { "class.k-tilelayout": "this.hostClass", "attr.role": "this.hostRole", "style.gap": "this.gapStyle", "style.padding": "this.gapStyle", "attr.dir": "this.direction" } }, providers: [
292
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TileLayoutComponent, isStandalone: true, selector: "kendo-tilelayout", inputs: { columns: "columns", columnWidth: "columnWidth", gap: "gap", reorderable: "reorderable", resizable: "resizable", rowHeight: "rowHeight", autoFlow: "autoFlow", navigable: "navigable" }, outputs: { reorder: "reorder", resize: "resize" }, host: { properties: { "class.k-tilelayout": "this.hostClass", "attr.role": "this.hostRole", "style.gap": "this.gapStyle", "style.padding": "this.gapStyle", "attr.dir": "this.direction" } }, providers: [
294
293
  LocalizationService,
295
294
  TileLayoutDraggingService,
296
295
  TileLayoutKeyboardNavigationService,
@@ -301,16 +300,18 @@ export class TileLayoutComponent {
301
300
  ], queries: [{ propertyName: "items", predicate: TileLayoutItemComponent }], viewQueries: [{ propertyName: "hint", first: true, predicate: ["hint"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
302
301
  <ng-content></ng-content>
303
302
  <div #hint class="k-layout-item-hint"
304
- [style.display]="'none'"
305
- [style.order]="targetOrder"
306
- [style.gridColumnEnd]="draggedItemWrapper?.style.gridColumnEnd"
307
- [style.gridRowEnd]="draggedItemWrapper?.style.gridRowEnd"
308
- [style.gridColumnStart]="currentColStart"
309
- [style.gridRowStart]="currentRowStart"
310
- [style.zIndex]="'1'">
303
+ [style.display]="'none'"
304
+ [style.order]="targetOrder"
305
+ [style.gridColumnEnd]="draggedItemWrapper?.style.gridColumnEnd"
306
+ [style.gridRowEnd]="draggedItemWrapper?.style.gridRowEnd"
307
+ [style.gridColumnStart]="currentColStart"
308
+ [style.gridRowStart]="currentRowStart"
309
+ [style.zIndex]="'1'">
311
310
  </div>
312
- <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
313
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }] });
311
+ @if (showLicenseWatermark) {
312
+ <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
313
+ }
314
+ `, isInline: true, dependencies: [{ kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }] });
314
315
  }
315
316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TileLayoutComponent, decorators: [{
316
317
  type: Component,
@@ -328,18 +329,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
328
329
  template: `
329
330
  <ng-content></ng-content>
330
331
  <div #hint class="k-layout-item-hint"
331
- [style.display]="'none'"
332
- [style.order]="targetOrder"
333
- [style.gridColumnEnd]="draggedItemWrapper?.style.gridColumnEnd"
334
- [style.gridRowEnd]="draggedItemWrapper?.style.gridRowEnd"
335
- [style.gridColumnStart]="currentColStart"
336
- [style.gridRowStart]="currentRowStart"
337
- [style.zIndex]="'1'">
332
+ [style.display]="'none'"
333
+ [style.order]="targetOrder"
334
+ [style.gridColumnEnd]="draggedItemWrapper?.style.gridColumnEnd"
335
+ [style.gridRowEnd]="draggedItemWrapper?.style.gridRowEnd"
336
+ [style.gridColumnStart]="currentColStart"
337
+ [style.gridRowStart]="currentRowStart"
338
+ [style.zIndex]="'1'">
338
339
  </div>
339
- <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
340
- `,
340
+ @if (showLicenseWatermark) {
341
+ <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
342
+ }
343
+ `,
341
344
  standalone: true,
342
- imports: [NgIf, WatermarkOverlayComponent]
345
+ imports: [WatermarkOverlayComponent]
343
346
  }]
344
347
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i2.TileLayoutDraggingService }, { type: i3.TileLayoutKeyboardNavigationService }], propDecorators: { columns: [{
345
348
  type: Input
@@ -17,7 +17,7 @@ import { CardSubtitleDirective } from '../card/directives/card-subtitle.directiv
17
17
  import { ButtonComponent } from '@progress/kendo-angular-buttons';
18
18
  import { CardTitleDirective } from '../card/directives/card-title.directive';
19
19
  import { CardHeaderComponent } from '../card/card-header.component';
20
- import { NgStyle, NgClass, NgIf, NgTemplateOutlet, NgFor } from '@angular/common';
20
+ import { NgStyle, NgClass, NgTemplateOutlet } from '@angular/common';
21
21
  import { CardComponent } from '../card/card.component';
22
22
  import * as i0 from "@angular/core";
23
23
  import * as i1 from "./timeline.service";
@@ -139,101 +139,118 @@ export class TimelineCardComponent {
139
139
  }
140
140
  }
141
141
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineCardComponent, deps: [{ token: i0.ElementRef }, { token: i1.TimelineService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
142
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TimelineCardComponent, isStandalone: true, selector: "kendo-timeline-card", inputs: { event: "event", expanded: "expanded", collapsible: "collapsible", reversed: "reversed", orientation: "orientation", navigable: "navigable", tabIndex: "tabIndex", animationDuration: "animationDuration", index: "index", eventWidth: "eventWidth", eventHeight: "eventHeight", headerTemplate: "headerTemplate", bodyTemplate: "bodyTemplate", actionsTemplate: "actionsTemplate", calloutStyle: "calloutStyle" }, host: { listeners: { "keydown": "onComponentKeyDown($event)" }, properties: { "class.k-timeline-card": "this.hostClass", "class.k-collapsed": "this.collapsedClass" } }, providers: [], viewQueries: [{ propertyName: "calloutElementRef", first: true, predicate: ["callout"], descendants: true }], exportAs: ["kendoTimelineCard"], usesOnChanges: true, ngImport: i0, template: `
142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TimelineCardComponent, isStandalone: true, selector: "kendo-timeline-card", inputs: { event: "event", expanded: "expanded", collapsible: "collapsible", reversed: "reversed", orientation: "orientation", navigable: "navigable", tabIndex: "tabIndex", animationDuration: "animationDuration", index: "index", eventWidth: "eventWidth", eventHeight: "eventHeight", headerTemplate: "headerTemplate", bodyTemplate: "bodyTemplate", actionsTemplate: "actionsTemplate", calloutStyle: "calloutStyle" }, host: { listeners: { "keydown": "onComponentKeyDown($event)" }, properties: { "class.k-timeline-card": "this.hostClass", "class.k-collapsed": "this.collapsedClass" } }, providers: [], viewQueries: [{ propertyName: "calloutElementRef", first: true, predicate: ["callout"], descendants: true }], exportAs: ["kendoTimelineCard"], usesOnChanges: true, ngImport: i0, template: `
143
143
  <kendo-card
144
- [ngStyle]="{ 'height': orientation === 'horizontal' ? eventHeight + 'px' : null }"
145
- [width]="orientation === 'horizontal' ? 'auto' : eventWidth + 'px'"
146
- class="k-card-with-callout k-card-vertical"
147
- (click)="toggle()"
148
- [attr.role]="role"
149
- [attr.aria-live]="ariaLive"
150
- [attr.aria-expanded]="ariaExpanded"
151
- [attr.tabindex]="tabIndex"
152
- >
153
- <span
154
- #callout
155
- class="k-timeline-card-callout k-card-callout"
144
+ [ngStyle]="{ 'height': orientation === 'horizontal' ? eventHeight + 'px' : null }"
145
+ [width]="orientation === 'horizontal' ? 'auto' : eventWidth + 'px'"
146
+ class="k-card-with-callout k-card-vertical"
147
+ (click)="toggle()"
148
+ [attr.role]="role"
149
+ [attr.aria-live]="ariaLive"
150
+ [attr.aria-expanded]="ariaExpanded"
151
+ [attr.tabindex]="tabIndex"
152
+ >
153
+ <span
154
+ #callout
155
+ class="k-timeline-card-callout k-card-callout"
156
156
  [ngClass]="{
157
157
  'k-callout-n': orientation === 'horizontal',
158
158
  'k-callout-w': orientation === 'vertical' && !this.reversed,
159
159
  'k-callout-e': orientation === 'vertical' && this.reversed
160
160
  }"
161
161
  >
162
- </span>
163
- <div *ngIf="event" class="k-card-inner">
164
- <kendo-card-header>
165
- <ng-template
166
- *ngIf="headerTemplate"
167
- [ngTemplateOutlet]="headerTemplate?.templateRef"
168
- [ngTemplateOutletContext]="{ $implicit: event, index: index}">
162
+ </span>
163
+ @if (event) {
164
+ <div class="k-card-inner">
165
+ <kendo-card-header>
166
+ @if (headerTemplate) {
167
+ <ng-template
168
+ [ngTemplateOutlet]="headerTemplate?.templateRef"
169
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
169
170
  >
170
- </ng-template>
171
-
172
- <div kendoCardTitle *ngIf="!headerTemplate">
173
- <span class="k-event-title">{{ event.title }}</span>
174
- <button
175
- kendoButton
176
- *ngIf="collapsible && orientation === 'vertical'"
177
- [icon]="calloutFontIcon"
178
- [svgIcon]="calloutSvgIcon"
179
- class="k-event-collapse"
180
- fillMode="flat"
181
- [attr.aria-hidden]="true"
182
- tabindex="-1"
183
- type="button"
184
- ></button>
185
- </div>
186
- <div kendoCardSubtitle *ngIf="!headerTemplate">{{ event.subtitle }}</div>
187
- </kendo-card-header>
188
-
171
+ </ng-template>
172
+ }
173
+ @if (!headerTemplate) {
174
+ <div kendoCardTitle>
175
+ <span class="k-event-title">{{ event.title }}</span>
176
+ @if (collapsible && orientation === 'vertical') {
177
+ <button
178
+ kendoButton
179
+ [icon]="calloutFontIcon"
180
+ [svgIcon]="calloutSvgIcon"
181
+ class="k-event-collapse"
182
+ fillMode="flat"
183
+ [attr.aria-hidden]="true"
184
+ tabindex="-1"
185
+ type="button"
186
+ ></button>
187
+ }
188
+ </div>
189
+ }
190
+ @if (!headerTemplate) {
191
+ <div kendoCardSubtitle >{{ event.subtitle }}</div>
192
+ }
193
+ </kendo-card-header>
194
+ @if (event.description || event.images) {
189
195
  <kendo-card-body
190
- *ngIf="event.description || event.images"
191
- [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
192
- (@toggle.start)="animationStart()"
193
- (@toggle.done)="animationDone($event)"
194
- >
196
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
197
+ (@toggle.start)="animationStart()"
198
+ (@toggle.done)="animationDone($event)"
199
+ >
200
+ @if (bodyTemplate) {
195
201
  <ng-template
196
- *ngIf="bodyTemplate"
197
- [ngTemplateOutlet]="bodyTemplate?.templateRef"
198
- [ngTemplateOutletContext]="{ $implicit: event, index: index}">
199
- >
202
+ [ngTemplateOutlet]="bodyTemplate?.templateRef"
203
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
204
+ >
200
205
  </ng-template>
201
-
202
- <div *ngIf="!bodyTemplate" class="k-card-description">
203
- <p *ngIf="event.description">{{ event.description }}</p>
204
- <ng-container *ngFor="let image of event.images">
205
- <img *ngIf="image.alt" kendoCardMedia [src]="image.src" [alt]="image.alt" />
206
- <img *ngIf="!image.alt" kendoCardMedia [src]="image.src" />
207
- </ng-container>
206
+ }
207
+ @if (!bodyTemplate) {
208
+ <div class="k-card-description">
209
+ @if (event.description) {
210
+ <p>{{ event.description }}</p>
211
+ }
212
+ @for (image of event.images; track image) {
213
+ @if (image.alt) {
214
+ <img kendoCardMedia [src]="image.src" [alt]="image.alt" />
215
+ }
216
+ @if (!image.alt) {
217
+ <img kendoCardMedia [src]="image.src" />
218
+ }
219
+ }
208
220
  </div>
221
+ }
209
222
  </kendo-card-body>
210
-
223
+ }
224
+ @if (event.actions) {
211
225
  <kendo-card-actions
212
- *ngIf="event.actions"
213
- [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
214
- >
226
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
227
+ >
228
+ @if (actionsTemplate) {
215
229
  <ng-template
216
- *ngIf="actionsTemplate"
217
- [ngTemplateOutlet]="actionsTemplate?.templateRef"
218
- [ngTemplateOutletContext]="{ $implicit: event, index: index}">
219
- >
230
+ [ngTemplateOutlet]="actionsTemplate?.templateRef"
231
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
232
+ >
220
233
  </ng-template>
221
-
222
- <ng-container *ngIf="!actionsTemplate">
223
- <a *ngFor="let action of event.actions"
224
- [href]="action.url"
225
- [target]="action.target === 'blank' ? '_blank' : '_self'"
226
- (click)="onActionClick($event)"
227
- class="k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary"
228
- role="button"
234
+ }
235
+ @if (!actionsTemplate) {
236
+ @for (action of event.actions; track action) {
237
+ <a
238
+ [href]="action.url"
239
+ [target]="action.target === 'blank' ? '_blank' : '_self'"
240
+ (click)="onActionClick($event)"
241
+ class="k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary"
242
+ role="button"
229
243
  >
230
- {{ action.text }}
231
- </a>
232
- </ng-container>
244
+ {{ action.text }}
245
+ </a>
246
+ }
247
+ }
233
248
  </kendo-card-actions>
249
+ }
234
250
  </div>
251
+ }
235
252
  </kendo-card>
236
- `, isInline: true, dependencies: [{ kind: "component", type: CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CardHeaderComponent, selector: "kendo-card-header" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CardTitleDirective, selector: "[kendoCardTitle]" }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: CardSubtitleDirective, selector: "[kendoCardSubtitle]" }, { kind: "component", type: CardBodyComponent, selector: "kendo-card-body" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CardMediaDirective, selector: "[kendoCardMedia]" }, { kind: "component", type: CardActionsComponent, selector: "kendo-card-actions", inputs: ["orientation", "layout", "actions"], outputs: ["action"] }], animations: [
253
+ `, isInline: true, dependencies: [{ kind: "component", type: CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CardHeaderComponent, selector: "kendo-card-header" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CardTitleDirective, selector: "[kendoCardTitle]" }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: CardSubtitleDirective, selector: "[kendoCardSubtitle]" }, { kind: "component", type: CardBodyComponent, selector: "kendo-card-body" }, { kind: "directive", type: CardMediaDirective, selector: "[kendoCardMedia]" }, { kind: "component", type: CardActionsComponent, selector: "kendo-card-actions", inputs: ["orientation", "layout", "actions"], outputs: ["action"] }], animations: [
237
254
  trigger('toggle', [
238
255
  state('collapsed', style({
239
256
  height: '0',
@@ -276,101 +293,118 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
276
293
  selector: 'kendo-timeline-card',
277
294
  template: `
278
295
  <kendo-card
279
- [ngStyle]="{ 'height': orientation === 'horizontal' ? eventHeight + 'px' : null }"
280
- [width]="orientation === 'horizontal' ? 'auto' : eventWidth + 'px'"
281
- class="k-card-with-callout k-card-vertical"
282
- (click)="toggle()"
283
- [attr.role]="role"
284
- [attr.aria-live]="ariaLive"
285
- [attr.aria-expanded]="ariaExpanded"
286
- [attr.tabindex]="tabIndex"
287
- >
288
- <span
289
- #callout
290
- class="k-timeline-card-callout k-card-callout"
296
+ [ngStyle]="{ 'height': orientation === 'horizontal' ? eventHeight + 'px' : null }"
297
+ [width]="orientation === 'horizontal' ? 'auto' : eventWidth + 'px'"
298
+ class="k-card-with-callout k-card-vertical"
299
+ (click)="toggle()"
300
+ [attr.role]="role"
301
+ [attr.aria-live]="ariaLive"
302
+ [attr.aria-expanded]="ariaExpanded"
303
+ [attr.tabindex]="tabIndex"
304
+ >
305
+ <span
306
+ #callout
307
+ class="k-timeline-card-callout k-card-callout"
291
308
  [ngClass]="{
292
309
  'k-callout-n': orientation === 'horizontal',
293
310
  'k-callout-w': orientation === 'vertical' && !this.reversed,
294
311
  'k-callout-e': orientation === 'vertical' && this.reversed
295
312
  }"
296
313
  >
297
- </span>
298
- <div *ngIf="event" class="k-card-inner">
299
- <kendo-card-header>
300
- <ng-template
301
- *ngIf="headerTemplate"
302
- [ngTemplateOutlet]="headerTemplate?.templateRef"
303
- [ngTemplateOutletContext]="{ $implicit: event, index: index}">
314
+ </span>
315
+ @if (event) {
316
+ <div class="k-card-inner">
317
+ <kendo-card-header>
318
+ @if (headerTemplate) {
319
+ <ng-template
320
+ [ngTemplateOutlet]="headerTemplate?.templateRef"
321
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
304
322
  >
305
- </ng-template>
306
-
307
- <div kendoCardTitle *ngIf="!headerTemplate">
308
- <span class="k-event-title">{{ event.title }}</span>
309
- <button
310
- kendoButton
311
- *ngIf="collapsible && orientation === 'vertical'"
312
- [icon]="calloutFontIcon"
313
- [svgIcon]="calloutSvgIcon"
314
- class="k-event-collapse"
315
- fillMode="flat"
316
- [attr.aria-hidden]="true"
317
- tabindex="-1"
318
- type="button"
319
- ></button>
320
- </div>
321
- <div kendoCardSubtitle *ngIf="!headerTemplate">{{ event.subtitle }}</div>
322
- </kendo-card-header>
323
-
323
+ </ng-template>
324
+ }
325
+ @if (!headerTemplate) {
326
+ <div kendoCardTitle>
327
+ <span class="k-event-title">{{ event.title }}</span>
328
+ @if (collapsible && orientation === 'vertical') {
329
+ <button
330
+ kendoButton
331
+ [icon]="calloutFontIcon"
332
+ [svgIcon]="calloutSvgIcon"
333
+ class="k-event-collapse"
334
+ fillMode="flat"
335
+ [attr.aria-hidden]="true"
336
+ tabindex="-1"
337
+ type="button"
338
+ ></button>
339
+ }
340
+ </div>
341
+ }
342
+ @if (!headerTemplate) {
343
+ <div kendoCardSubtitle >{{ event.subtitle }}</div>
344
+ }
345
+ </kendo-card-header>
346
+ @if (event.description || event.images) {
324
347
  <kendo-card-body
325
- *ngIf="event.description || event.images"
326
- [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
327
- (@toggle.start)="animationStart()"
328
- (@toggle.done)="animationDone($event)"
329
- >
348
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
349
+ (@toggle.start)="animationStart()"
350
+ (@toggle.done)="animationDone($event)"
351
+ >
352
+ @if (bodyTemplate) {
330
353
  <ng-template
331
- *ngIf="bodyTemplate"
332
- [ngTemplateOutlet]="bodyTemplate?.templateRef"
333
- [ngTemplateOutletContext]="{ $implicit: event, index: index}">
334
- >
354
+ [ngTemplateOutlet]="bodyTemplate?.templateRef"
355
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
356
+ >
335
357
  </ng-template>
336
-
337
- <div *ngIf="!bodyTemplate" class="k-card-description">
338
- <p *ngIf="event.description">{{ event.description }}</p>
339
- <ng-container *ngFor="let image of event.images">
340
- <img *ngIf="image.alt" kendoCardMedia [src]="image.src" [alt]="image.alt" />
341
- <img *ngIf="!image.alt" kendoCardMedia [src]="image.src" />
342
- </ng-container>
358
+ }
359
+ @if (!bodyTemplate) {
360
+ <div class="k-card-description">
361
+ @if (event.description) {
362
+ <p>{{ event.description }}</p>
363
+ }
364
+ @for (image of event.images; track image) {
365
+ @if (image.alt) {
366
+ <img kendoCardMedia [src]="image.src" [alt]="image.alt" />
367
+ }
368
+ @if (!image.alt) {
369
+ <img kendoCardMedia [src]="image.src" />
370
+ }
371
+ }
343
372
  </div>
373
+ }
344
374
  </kendo-card-body>
345
-
375
+ }
376
+ @if (event.actions) {
346
377
  <kendo-card-actions
347
- *ngIf="event.actions"
348
- [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
349
- >
378
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
379
+ >
380
+ @if (actionsTemplate) {
350
381
  <ng-template
351
- *ngIf="actionsTemplate"
352
- [ngTemplateOutlet]="actionsTemplate?.templateRef"
353
- [ngTemplateOutletContext]="{ $implicit: event, index: index}">
354
- >
382
+ [ngTemplateOutlet]="actionsTemplate?.templateRef"
383
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
384
+ >
355
385
  </ng-template>
356
-
357
- <ng-container *ngIf="!actionsTemplate">
358
- <a *ngFor="let action of event.actions"
359
- [href]="action.url"
360
- [target]="action.target === 'blank' ? '_blank' : '_self'"
361
- (click)="onActionClick($event)"
362
- class="k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary"
363
- role="button"
386
+ }
387
+ @if (!actionsTemplate) {
388
+ @for (action of event.actions; track action) {
389
+ <a
390
+ [href]="action.url"
391
+ [target]="action.target === 'blank' ? '_blank' : '_self'"
392
+ (click)="onActionClick($event)"
393
+ class="k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary"
394
+ role="button"
364
395
  >
365
- {{ action.text }}
366
- </a>
367
- </ng-container>
396
+ {{ action.text }}
397
+ </a>
398
+ }
399
+ }
368
400
  </kendo-card-actions>
401
+ }
369
402
  </div>
403
+ }
370
404
  </kendo-card>
371
- `,
405
+ `,
372
406
  standalone: true,
373
- imports: [CardComponent, NgStyle, NgClass, NgIf, CardHeaderComponent, NgTemplateOutlet, CardTitleDirective, ButtonComponent, CardSubtitleDirective, CardBodyComponent, NgFor, CardMediaDirective, CardActionsComponent]
407
+ imports: [CardComponent, NgStyle, NgClass, CardHeaderComponent, NgTemplateOutlet, CardTitleDirective, ButtonComponent, CardSubtitleDirective, CardBodyComponent, CardMediaDirective, CardActionsComponent]
374
408
  }]
375
409
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TimelineService }, { type: i0.Renderer2 }], propDecorators: { event: [{
376
410
  type: Input