@progress/kendo-angular-layout 16.0.0-develop.4 → 16.0.0-develop.5

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 (44) hide show
  1. package/esm2020/index.mjs +7 -0
  2. package/esm2020/layout.module.mjs +7 -3
  3. package/esm2020/package-metadata.mjs +2 -2
  4. package/esm2020/timeline/events/navigation-direction.mjs +5 -0
  5. package/esm2020/timeline/localization/custom-messages.component.mjs +41 -0
  6. package/esm2020/timeline/localization/localized-messages.directive.mjs +37 -0
  7. package/esm2020/timeline/localization/messages.mjs +25 -0
  8. package/esm2020/timeline/models/anchor-target.mjs +5 -0
  9. package/esm2020/timeline/models/default-model-fields.mjs +16 -0
  10. package/esm2020/timeline/models/model-fields.mjs +5 -0
  11. package/esm2020/timeline/models/timeline-event.mjs +5 -0
  12. package/esm2020/timeline/templates/timeline-card-actions.directive.mjs +29 -0
  13. package/esm2020/timeline/templates/timeline-card-body.directive.mjs +29 -0
  14. package/esm2020/timeline/templates/timeline-card-header.directive.mjs +29 -0
  15. package/esm2020/timeline/timeline-card.component.mjs +402 -0
  16. package/esm2020/timeline/timeline-horizontal.component.mjs +722 -0
  17. package/esm2020/timeline/timeline-vertical.component.mjs +175 -0
  18. package/esm2020/timeline/timeline.component.mjs +418 -0
  19. package/esm2020/timeline/timeline.service.mjs +31 -0
  20. package/esm2020/timeline/util.mjs +26 -0
  21. package/esm2020/timeline.module.mjs +65 -0
  22. package/fesm2015/progress-kendo-angular-layout.mjs +1996 -63
  23. package/fesm2020/progress-kendo-angular-layout.mjs +1969 -63
  24. package/index.d.ts +10 -0
  25. package/layout.module.d.ts +2 -1
  26. package/package.json +7 -7
  27. package/timeline/events/navigation-direction.d.ts +5 -0
  28. package/timeline/localization/custom-messages.component.d.ts +17 -0
  29. package/timeline/localization/localized-messages.directive.d.ts +16 -0
  30. package/timeline/localization/messages.d.ts +21 -0
  31. package/timeline/models/anchor-target.d.ts +5 -0
  32. package/timeline/models/default-model-fields.d.ts +9 -0
  33. package/timeline/models/model-fields.d.ts +51 -0
  34. package/timeline/models/timeline-event.d.ts +49 -0
  35. package/timeline/templates/timeline-card-actions.directive.d.ts +20 -0
  36. package/timeline/templates/timeline-card-body.directive.d.ts +20 -0
  37. package/timeline/templates/timeline-card-header.directive.d.ts +20 -0
  38. package/timeline/timeline-card.component.d.ts +59 -0
  39. package/timeline/timeline-horizontal.component.d.ts +110 -0
  40. package/timeline/timeline-vertical.component.d.ts +41 -0
  41. package/timeline/timeline.component.d.ts +186 -0
  42. package/timeline/timeline.service.d.ts +17 -0
  43. package/timeline/util.d.ts +18 -0
  44. package/timeline.module.d.ts +31 -0
@@ -7,12 +7,12 @@ import { Injectable, Directive, Optional, isDevMode, Component, SkipSelf, Host,
7
7
  import * as i1 from '@progress/kendo-angular-l10n';
8
8
  import { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';
9
9
  import * as i5 from '@progress/kendo-angular-common';
10
- import { Keys, shouldShowValidationUI, PreventableEvent as PreventableEvent$1, isDocumentAvailable, guid, hasObservers, focusableSelector, isChanged, WatermarkModule, EventsModule, DraggableModule, ResizeSensorModule } from '@progress/kendo-angular-common';
10
+ import { Keys, shouldShowValidationUI, PreventableEvent as PreventableEvent$1, isDocumentAvailable, guid, hasObservers, focusableSelector, isChanged, WatermarkModule, EventsModule, DraggableModule, ResizeSensorModule, isPresent as isPresent$1 } from '@progress/kendo-angular-common';
11
11
  import { validatePackage } from '@progress/kendo-licensing';
12
12
  import * as i1$1 from '@angular/animations';
13
13
  import { trigger, state, style, transition, animate, AUTO_STYLE } from '@angular/animations';
14
- import { Subject, BehaviorSubject, Subscription, of } from 'rxjs';
15
- import { chevronUpIcon, chevronDownIcon, caretAltLeftIcon, caretAltRightIcon, caretAltUpIcon, caretAltDownIcon, xIcon, checkCircleIcon, exclamationCircleIcon } from '@progress/kendo-svg-icons';
14
+ import { Subject, BehaviorSubject, Subscription, of, fromEvent } from 'rxjs';
15
+ import { chevronUpIcon, chevronDownIcon, caretAltLeftIcon, caretAltRightIcon, caretAltUpIcon, caretAltDownIcon, xIcon, checkCircleIcon, exclamationCircleIcon, chevronRightIcon } from '@progress/kendo-svg-icons';
16
16
  import * as i2 from '@angular/common';
17
17
  import { CommonModule } from '@angular/common';
18
18
  import * as i3 from '@progress/kendo-angular-icons';
@@ -23,6 +23,8 @@ import { ButtonModule } from '@progress/kendo-angular-buttons';
23
23
  import * as i4 from '@progress/kendo-angular-progressbar';
24
24
  import { ProgressBarModule } from '@progress/kendo-angular-progressbar';
25
25
  import { Draggable } from '@progress/kendo-draggable';
26
+ import * as i6 from '@progress/kendo-angular-intl';
27
+ import { IntlModule } from '@progress/kendo-angular-intl';
26
28
 
27
29
  /**
28
30
  * @hidden
@@ -31,8 +33,8 @@ const packageMetadata = {
31
33
  name: '@progress/kendo-angular-layout',
32
34
  productName: 'Kendo UI for Angular',
33
35
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
34
- publishDate: 1714109383,
35
- version: '16.0.0-develop.4',
36
+ publishDate: 1714129718,
37
+ version: '16.0.0-develop.5',
36
38
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
37
39
  };
38
40
 
@@ -9561,13 +9563,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
9561
9563
  args: ['style.min-height']
9562
9564
  }] } });
9563
9565
 
9564
- const exportedModules$a = [
9566
+ const exportedModules$b = [
9565
9567
  AvatarComponent,
9566
9568
  AvatarCustomMessagesComponent
9567
9569
  ];
9568
- const declarations$a = [
9570
+ const declarations$b = [
9569
9571
  LocalizedAvatarMessagesDirective,
9570
- ...exportedModules$a
9572
+ ...exportedModules$b
9571
9573
  ];
9572
9574
  /**
9573
9575
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9583,8 +9585,8 @@ AvatarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
9583
9585
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AvatarModule, decorators: [{
9584
9586
  type: NgModule,
9585
9587
  args: [{
9586
- declarations: [declarations$a],
9587
- exports: [exportedModules$a],
9588
+ declarations: [declarations$b],
9589
+ exports: [exportedModules$b],
9588
9590
  imports: [CommonModule, IconsModule]
9589
9591
  }]
9590
9592
  }] });
@@ -9595,7 +9597,7 @@ const cardDirectives = [
9595
9597
  CardSeparatorDirective,
9596
9598
  CardMediaDirective
9597
9599
  ];
9598
- const exportedModules$9 = [
9600
+ const exportedModules$a = [
9599
9601
  CardComponent,
9600
9602
  CardHeaderComponent,
9601
9603
  CardBodyComponent,
@@ -9603,7 +9605,7 @@ const exportedModules$9 = [
9603
9605
  CardActionsComponent,
9604
9606
  ...cardDirectives
9605
9607
  ];
9606
- const declarations$9 = [...exportedModules$9];
9608
+ const declarations$a = [...exportedModules$a];
9607
9609
  /**
9608
9610
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
9609
9611
  * definition for the Card component.
@@ -9630,8 +9632,8 @@ CardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15
9630
9632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CardModule, decorators: [{
9631
9633
  type: NgModule,
9632
9634
  args: [{
9633
- declarations: [declarations$9],
9634
- exports: [exportedModules$9],
9635
+ declarations: [declarations$a],
9636
+ exports: [exportedModules$a],
9635
9637
  imports: [CommonModule]
9636
9638
  }]
9637
9639
  }] });
@@ -9642,16 +9644,16 @@ const templateDirectives$1 = [
9642
9644
  DrawerFooterTemplateDirective,
9643
9645
  DrawerItemTemplateDirective
9644
9646
  ];
9645
- const exportedModules$8 = [
9647
+ const exportedModules$9 = [
9646
9648
  DrawerComponent,
9647
9649
  DrawerContainerComponent,
9648
9650
  DrawerContentComponent,
9649
9651
  ...templateDirectives$1
9650
9652
  ];
9651
- const declarations$8 = [
9653
+ const declarations$9 = [
9652
9654
  DrawerItemComponent,
9653
9655
  DrawerListComponent,
9654
- ...exportedModules$8
9656
+ ...exportedModules$9
9655
9657
  ];
9656
9658
  /**
9657
9659
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9676,18 +9678,18 @@ DrawerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
9676
9678
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DrawerModule, decorators: [{
9677
9679
  type: NgModule,
9678
9680
  args: [{
9679
- declarations: [declarations$8],
9680
- exports: [exportedModules$8],
9681
+ declarations: [declarations$9],
9682
+ exports: [exportedModules$9],
9681
9683
  imports: [CommonModule, IconsModule, WatermarkModule]
9682
9684
  }]
9683
9685
  }] });
9684
9686
 
9685
- const exportedModules$7 = [
9687
+ const exportedModules$8 = [
9686
9688
  ExpansionPanelComponent,
9687
9689
  ExpansionPanelTitleDirective
9688
9690
  ];
9689
- const declarations$7 = [
9690
- ...exportedModules$7
9691
+ const declarations$8 = [
9692
+ ...exportedModules$8
9691
9693
  ];
9692
9694
  /**
9693
9695
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9703,21 +9705,21 @@ ExpansionPanelModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ve
9703
9705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ExpansionPanelModule, decorators: [{
9704
9706
  type: NgModule,
9705
9707
  args: [{
9706
- declarations: [declarations$7],
9707
- exports: [exportedModules$7],
9708
+ declarations: [declarations$8],
9709
+ exports: [exportedModules$8],
9708
9710
  imports: [CommonModule, EventsModule, IconsModule]
9709
9711
  }]
9710
9712
  }] });
9711
9713
 
9712
- const exportedModules$6 = [
9714
+ const exportedModules$7 = [
9713
9715
  PanelBarComponent,
9714
9716
  PanelBarItemComponent,
9715
9717
  PanelBarContentDirective,
9716
9718
  PanelBarItemTemplateDirective,
9717
9719
  PanelBarItemTitleDirective
9718
9720
  ];
9719
- const declarations$6 = [
9720
- ...exportedModules$6
9721
+ const declarations$7 = [
9722
+ ...exportedModules$7
9721
9723
  ];
9722
9724
  /**
9723
9725
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9746,19 +9748,19 @@ PanelBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
9746
9748
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: PanelBarModule, decorators: [{
9747
9749
  type: NgModule,
9748
9750
  args: [{
9749
- declarations: [declarations$6],
9750
- exports: [exportedModules$6],
9751
+ declarations: [declarations$7],
9752
+ exports: [exportedModules$7],
9751
9753
  imports: [CommonModule, IconsModule, WatermarkModule]
9752
9754
  }]
9753
9755
  }] });
9754
9756
 
9755
- const exportedModules$5 = [
9757
+ const exportedModules$6 = [
9756
9758
  SplitterComponent,
9757
9759
  SplitterPaneComponent
9758
9760
  ];
9759
- const declarations$5 = [
9761
+ const declarations$6 = [
9760
9762
  SplitterBarComponent,
9761
- ...exportedModules$5
9763
+ ...exportedModules$6
9762
9764
  ];
9763
9765
  /**
9764
9766
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9782,8 +9784,8 @@ SplitterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
9782
9784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SplitterModule, decorators: [{
9783
9785
  type: NgModule,
9784
9786
  args: [{
9785
- declarations: [declarations$5],
9786
- exports: [exportedModules$5],
9787
+ declarations: [declarations$6],
9788
+ exports: [exportedModules$6],
9787
9789
  imports: [
9788
9790
  CommonModule,
9789
9791
  DraggableModule,
@@ -9797,16 +9799,16 @@ const templateDirectives = [
9797
9799
  StepperLabelTemplateDirective,
9798
9800
  StepperIndicatorTemplateDirective
9799
9801
  ];
9800
- const exportedModules$4 = [
9802
+ const exportedModules$5 = [
9801
9803
  StepperComponent,
9802
9804
  StepperCustomMessagesComponent,
9803
9805
  ...templateDirectives
9804
9806
  ];
9805
- const declarations$4 = [
9807
+ const declarations$5 = [
9806
9808
  StepperStepComponent,
9807
9809
  StepperListComponent,
9808
9810
  LocalizedStepperMessagesDirective,
9809
- ...exportedModules$4
9811
+ ...exportedModules$5
9810
9812
  ];
9811
9813
  /**
9812
9814
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9828,13 +9830,13 @@ StepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
9828
9830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: StepperModule, decorators: [{
9829
9831
  type: NgModule,
9830
9832
  args: [{
9831
- declarations: [declarations$4],
9832
- exports: [exportedModules$4],
9833
+ declarations: [declarations$5],
9834
+ exports: [exportedModules$5],
9833
9835
  imports: [CommonModule, ProgressBarModule, IconsModule]
9834
9836
  }]
9835
9837
  }] });
9836
9838
 
9837
- const exportedModules$3 = [
9839
+ const exportedModules$4 = [
9838
9840
  TabStripComponent,
9839
9841
  TabStripTabComponent,
9840
9842
  TabContentDirective,
@@ -9844,8 +9846,8 @@ const exportedModules$3 = [
9844
9846
  LocalizedTabStripMessagesDirective,
9845
9847
  TabTemplateDirective
9846
9848
  ];
9847
- const declarations$3 = [
9848
- ...exportedModules$3,
9849
+ const declarations$4 = [
9850
+ ...exportedModules$4,
9849
9851
  TabStripScrollableButtonComponent
9850
9852
  ];
9851
9853
  /**
@@ -9880,21 +9882,21 @@ TabStripModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
9880
9882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabStripModule, decorators: [{
9881
9883
  type: NgModule,
9882
9884
  args: [{
9883
- declarations: [declarations$3],
9884
- exports: [exportedModules$3],
9885
+ declarations: [declarations$4],
9886
+ exports: [exportedModules$4],
9885
9887
  imports: [CommonModule, ResizeSensorModule, IconsModule, ButtonModule, WatermarkModule]
9886
9888
  }]
9887
9889
  }] });
9888
9890
 
9889
- const exportedModules$2 = [
9891
+ const exportedModules$3 = [
9890
9892
  TileLayoutComponent,
9891
9893
  TileLayoutItemComponent,
9892
9894
  TileLayoutItemHeaderComponent,
9893
9895
  TileLayoutItemBodyComponent,
9894
9896
  TileLayoutResizeHandleDirective
9895
9897
  ];
9896
- const declarations$2 = [
9897
- ...exportedModules$2
9898
+ const declarations$3 = [
9899
+ ...exportedModules$3
9898
9900
  ];
9899
9901
  /**
9900
9902
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -9922,8 +9924,8 @@ TileLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
9922
9924
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TileLayoutModule, decorators: [{
9923
9925
  type: NgModule,
9924
9926
  args: [{
9925
- declarations: [declarations$2],
9926
- exports: [exportedModules$2],
9927
+ declarations: [declarations$3],
9928
+ exports: [exportedModules$3],
9927
9929
  imports: [CommonModule, WatermarkModule]
9928
9930
  }]
9929
9931
  }] });
@@ -10160,11 +10162,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
10160
10162
  type: Input
10161
10163
  }] } });
10162
10164
 
10163
- const exportedModules$1 = [
10165
+ const exportedModules$2 = [
10164
10166
  StackLayoutComponent
10165
10167
  ];
10166
- const declarations$1 = [
10167
- ...exportedModules$1
10168
+ const declarations$2 = [
10169
+ ...exportedModules$2
10168
10170
  ];
10169
10171
  /**
10170
10172
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -10178,8 +10180,8 @@ StackLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
10178
10180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: StackLayoutModule, decorators: [{
10179
10181
  type: NgModule,
10180
10182
  args: [{
10181
- declarations: [declarations$1],
10182
- exports: [exportedModules$1],
10183
+ declarations: [declarations$2],
10184
+ exports: [exportedModules$2],
10183
10185
  imports: [CommonModule]
10184
10186
  }]
10185
10187
  }] });
@@ -10354,12 +10356,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
10354
10356
  type: Input
10355
10357
  }] } });
10356
10358
 
10357
- const exportedModules = [
10359
+ const exportedModules$1 = [
10358
10360
  GridLayoutComponent,
10359
10361
  GridLayoutItemComponent
10360
10362
  ];
10361
- const declarations = [
10362
- ...exportedModules
10363
+ const declarations$1 = [
10364
+ ...exportedModules$1
10363
10365
  ];
10364
10366
  /**
10365
10367
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -10375,12 +10377,1913 @@ GridLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
10375
10377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: GridLayoutModule, decorators: [{
10376
10378
  type: NgModule,
10377
10379
  args: [{
10378
- declarations: [declarations],
10379
- exports: [exportedModules],
10380
+ declarations: [declarations$1],
10381
+ exports: [exportedModules$1],
10380
10382
  imports: [CommonModule]
10381
10383
  }]
10382
10384
  }] });
10383
10385
 
10386
+ /**
10387
+ * @hidden
10388
+ */
10389
+ const defaultModelFields = {
10390
+ title: 'title',
10391
+ subtitle: 'subtitle',
10392
+ description: 'description',
10393
+ date: 'date',
10394
+ expanded: 'expanded',
10395
+ images: 'images',
10396
+ actions: 'actions',
10397
+ };
10398
+
10399
+ /**
10400
+ * @hidden
10401
+ */
10402
+ const processItems = (items, fields) => {
10403
+ return items.map((item) => parseItem(item, fields));
10404
+ };
10405
+ /**
10406
+ * @hidden
10407
+ */
10408
+ const parseItem = (item, fields) => ({
10409
+ title: item[fields.title] || item.title,
10410
+ date: item[fields.date] || item.date,
10411
+ subtitle: item[fields.subtitle] || item.subtitle,
10412
+ description: item[fields.description] || item.description,
10413
+ expanded: item[fields.expanded] || item.expanded,
10414
+ images: item[fields.images] || item.images,
10415
+ actions: item[fields.actions] || item.actions,
10416
+ });
10417
+ /**
10418
+ * @hidden
10419
+ */
10420
+ const MAX_VISIBLE_EVENTS = 3;
10421
+
10422
+ /**
10423
+ * @hidden
10424
+ */
10425
+ class TimelineService {
10426
+ onToggle(event) {
10427
+ if (this.timeline) {
10428
+ this.timeline['onToggle']?.emit(event);
10429
+ }
10430
+ }
10431
+ onActionClick(event) {
10432
+ if (this.timeline) {
10433
+ this.timeline['onActionClick']?.emit(event);
10434
+ }
10435
+ }
10436
+ onNavigate(event) {
10437
+ if (this.timeline) {
10438
+ this.timeline['onNavigate']?.emit(event);
10439
+ }
10440
+ }
10441
+ }
10442
+ TimelineService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10443
+ TimelineService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineService });
10444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineService, decorators: [{
10445
+ type: Injectable
10446
+ }] });
10447
+
10448
+ /**
10449
+ * Specifies the header of each timeline card. To define a header template, nest an `<ng-template>` tag
10450
+ * with the `kendoTimelineCardHeaderTemplate` directive inside the `<kendo-timeline>` tag.
10451
+ *
10452
+ * The following values are available as context variables:
10453
+ * - `let-event="event"` (`TimelineEvent`) - The current card's event. Also available as implicit context variable.
10454
+ * - `let-index="index"` (`number`) - The current event index.
10455
+ */
10456
+ class TimelineCardHeaderTemplateDirective {
10457
+ constructor(templateRef) {
10458
+ this.templateRef = templateRef;
10459
+ }
10460
+ }
10461
+ TimelineCardHeaderTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardHeaderTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10462
+ TimelineCardHeaderTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: TimelineCardHeaderTemplateDirective, selector: "[kendoTimelineCardHeaderTemplate]", ngImport: i0 });
10463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardHeaderTemplateDirective, decorators: [{
10464
+ type: Directive,
10465
+ args: [{
10466
+ selector: '[kendoTimelineCardHeaderTemplate]'
10467
+ }]
10468
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
10469
+ type: Optional
10470
+ }] }]; } });
10471
+
10472
+ /**
10473
+ * Specifies the body of each timeline card. To define a body template, nest an `<ng-template>` tag
10474
+ * with the `kendoTimelineCardBodyTemplate` directive inside the `<kendo-timeline>` tag.
10475
+ *
10476
+ * The following values are available as context variables:
10477
+ * - `let-event="event"` (`TimelineEvent`) - The current card's event. Also available as implicit context variable.
10478
+ * - `let-index="index"` (`number`) - The current event index.
10479
+ */
10480
+ class TimelineCardBodyTemplateDirective {
10481
+ constructor(templateRef) {
10482
+ this.templateRef = templateRef;
10483
+ }
10484
+ }
10485
+ TimelineCardBodyTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardBodyTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10486
+ TimelineCardBodyTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: TimelineCardBodyTemplateDirective, selector: "[kendoTimelineCardBodyTemplate]", ngImport: i0 });
10487
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardBodyTemplateDirective, decorators: [{
10488
+ type: Directive,
10489
+ args: [{
10490
+ selector: '[kendoTimelineCardBodyTemplate]'
10491
+ }]
10492
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
10493
+ type: Optional
10494
+ }] }]; } });
10495
+
10496
+ /**
10497
+ * Specifies the actions of each timeline card. To define an actions template, nest an `<ng-template>` tag
10498
+ * with the `kendoTimelineCardActionsTemplate` directive inside the `<kendo-timeline>` tag.
10499
+ *
10500
+ * The following values are available as context variables:
10501
+ * - `let-event="event"` (`TimelineEvent`) - The current card's event. Also available as implicit context variable.
10502
+ * - `let-index="index"` (`number`) - The current event index.
10503
+ */
10504
+ class TimelineCardActionsTemplateDirective {
10505
+ constructor(templateRef) {
10506
+ this.templateRef = templateRef;
10507
+ }
10508
+ }
10509
+ TimelineCardActionsTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardActionsTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
10510
+ TimelineCardActionsTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: TimelineCardActionsTemplateDirective, selector: "[kendoTimelineCardActionsTemplate]", ngImport: i0 });
10511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardActionsTemplateDirective, decorators: [{
10512
+ type: Directive,
10513
+ args: [{
10514
+ selector: '[kendoTimelineCardActionsTemplate]'
10515
+ }]
10516
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
10517
+ type: Optional
10518
+ }] }]; } });
10519
+
10520
+ /**
10521
+ * @hidden
10522
+ */
10523
+ class TimelineCardComponent {
10524
+ constructor(element, timelineService, renderer) {
10525
+ this.element = element;
10526
+ this.timelineService = timelineService;
10527
+ this.renderer = renderer;
10528
+ this.expanded = false;
10529
+ this.collapsible = true;
10530
+ this.reversed = false;
10531
+ this.hostClass = true;
10532
+ this.calloutSvgIcon = chevronRightIcon;
10533
+ this.calloutFontIcon = 'arrow-chevron-right';
10534
+ this.animationState = this.expanded ? 'expanded' : 'collapsed';
10535
+ this.animationInProgress = false;
10536
+ }
10537
+ set calloutStyle(value) {
10538
+ // applies only to horizontal orientation where the callout points upwards
10539
+ if (!this.calloutElementRef || !this.calloutElementRef.nativeElement.classList.contains('k-callout-n')) {
10540
+ return;
10541
+ }
10542
+ this.calloutElementRef.nativeElement.style.left = value?.left;
10543
+ }
10544
+ get collapsedClass() {
10545
+ return !this.expanded && !this.animationInProgress && this.animationState === 'collapsed';
10546
+ }
10547
+ onComponentKeyDown(event) {
10548
+ if (!this.navigable) {
10549
+ return;
10550
+ }
10551
+ if (event.keyCode === Keys.Space || event.keyCode === Keys.Enter) {
10552
+ event.preventDefault();
10553
+ if (this.collapsible && this.orientation === 'vertical') {
10554
+ this.expanded = !this.expanded;
10555
+ }
10556
+ }
10557
+ }
10558
+ get role() {
10559
+ return this.orientation === 'vertical' ? 'button' : 'tabpanel';
10560
+ }
10561
+ get ariaLive() {
10562
+ return this.orientation === 'vertical' ? 'polite' : null;
10563
+ }
10564
+ get ariaExpanded() {
10565
+ return this.orientation === 'vertical' ? this.expanded : null;
10566
+ }
10567
+ ngAfterViewInit() {
10568
+ this.makeOverflowVisible();
10569
+ }
10570
+ ngOnChanges(changes) {
10571
+ if (isChanged('collapsible', changes, false)) {
10572
+ if (!this.collapsible) {
10573
+ this.expanded = true;
10574
+ }
10575
+ }
10576
+ }
10577
+ toggle() {
10578
+ if (this.orientation === 'vertical') {
10579
+ this.expanded = this.collapsible ? !this.expanded : true;
10580
+ this.timelineService.onToggle(this.index);
10581
+ }
10582
+ }
10583
+ expand() {
10584
+ if (!this.expanded) {
10585
+ this.expanded = true;
10586
+ this.timelineService.onToggle(this.index);
10587
+ }
10588
+ }
10589
+ collapse() {
10590
+ if (!this.collapsible || !this.expanded) {
10591
+ return;
10592
+ }
10593
+ this.expanded = false;
10594
+ this.timelineService.onToggle(this.index);
10595
+ }
10596
+ onActionClick(event) {
10597
+ event.stopPropagation();
10598
+ this.timelineService.onActionClick(this.index);
10599
+ }
10600
+ animationStart() {
10601
+ this.animationInProgress = true;
10602
+ }
10603
+ animationDone(event) {
10604
+ this.animationInProgress = false;
10605
+ if (event.toState === 'expanded' && event.fromState !== 'expanded') {
10606
+ this.animationState = 'expanded';
10607
+ this.makeOverflowVisible();
10608
+ }
10609
+ else if (event.toState === 'collapsed' && event.fromState !== 'collapsed') {
10610
+ this.animationState = 'collapsed';
10611
+ }
10612
+ }
10613
+ makeOverflowVisible() {
10614
+ if (this.orientation === 'vertical') {
10615
+ return;
10616
+ }
10617
+ const cardBody = this.element?.nativeElement.querySelector('.k-card-body');
10618
+ if (cardBody) {
10619
+ this.renderer.setStyle(cardBody, 'overflow', 'auto');
10620
+ }
10621
+ }
10622
+ }
10623
+ TimelineCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardComponent, deps: [{ token: i0.ElementRef }, { token: TimelineService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
10624
+ TimelineCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TimelineCardComponent, 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: `
10625
+ <kendo-card
10626
+ [ngStyle]="{ 'height': orientation === 'horizontal' ? eventHeight + 'px' : null }"
10627
+ [width]="orientation === 'horizontal' ? 'auto' : eventWidth + 'px'"
10628
+ class="k-card-with-callout k-card-vertical"
10629
+ (click)="toggle()"
10630
+ [attr.role]="role"
10631
+ [attr.aria-live]="ariaLive"
10632
+ [attr.aria-expanded]="ariaExpanded"
10633
+ [attr.tabindex]="tabIndex"
10634
+ >
10635
+ <span
10636
+ #callout
10637
+ *ngIf="event"
10638
+ class="k-timeline-card-callout k-card-callout"
10639
+ [ngClass]="{
10640
+ 'k-callout-n': orientation === 'horizontal',
10641
+ 'k-callout-w': orientation === 'vertical' && !this.reversed,
10642
+ 'k-callout-e': orientation === 'vertical' && this.reversed
10643
+ }"
10644
+ >
10645
+ </span>
10646
+ <div *ngIf="event" class="k-card-inner">
10647
+ <kendo-card-header>
10648
+ <ng-template
10649
+ *ngIf="headerTemplate"
10650
+ [ngTemplateOutlet]="headerTemplate?.templateRef"
10651
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
10652
+ >
10653
+ </ng-template>
10654
+
10655
+ <div kendoCardTitle *ngIf="!headerTemplate">
10656
+ <span class="k-event-title">{{ event.title }}</span>
10657
+ <button
10658
+ kendoButton
10659
+ *ngIf="collapsible && orientation === 'vertical'"
10660
+ [icon]="calloutFontIcon"
10661
+ [svgIcon]="calloutSvgIcon"
10662
+ class="k-event-collapse"
10663
+ fillMode="flat"
10664
+ [attr.aria-hidden]="true"
10665
+ tabindex="-1"
10666
+ type="button"
10667
+ ></button>
10668
+ </div>
10669
+ <div kendoCardSubtitle *ngIf="!headerTemplate">{{ event.subtitle }}</div>
10670
+ </kendo-card-header>
10671
+
10672
+ <kendo-card-body
10673
+ *ngIf="event.description || event.images"
10674
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
10675
+ (@toggle.start)="animationStart()"
10676
+ (@toggle.done)="animationDone($event)"
10677
+ >
10678
+ <ng-template
10679
+ *ngIf="bodyTemplate"
10680
+ [ngTemplateOutlet]="bodyTemplate?.templateRef"
10681
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
10682
+ >
10683
+ </ng-template>
10684
+
10685
+ <div *ngIf="!bodyTemplate" class="k-card-description">
10686
+ <p *ngIf="event.description">{{ event.description }}</p>
10687
+ <ng-container *ngFor="let image of event.images">
10688
+ <img *ngIf="image.alt" kendoCardMedia [src]="image.src" [alt]="image.alt" />
10689
+ <img *ngIf="!image.alt" kendoCardMedia [src]="image.src" />
10690
+ </ng-container>
10691
+ </div>
10692
+ </kendo-card-body>
10693
+
10694
+ <kendo-card-actions
10695
+ *ngIf="event.actions"
10696
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
10697
+ >
10698
+ <ng-template
10699
+ *ngIf="actionsTemplate"
10700
+ [ngTemplateOutlet]="actionsTemplate?.templateRef"
10701
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
10702
+ >
10703
+ </ng-template>
10704
+
10705
+ <ng-container *ngIf="!actionsTemplate">
10706
+ <a *ngFor="let action of event.actions"
10707
+ [href]="action.url"
10708
+ [target]="action.target === 'blank' ? '_blank' : '_self'"
10709
+ (click)="onActionClick($event)"
10710
+ class="k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary"
10711
+ role="button"
10712
+ >
10713
+ {{ action.text }}
10714
+ </a>
10715
+ </ng-container>
10716
+ </kendo-card-actions>
10717
+ </div>
10718
+ </kendo-card>
10719
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { kind: "component", type: CardHeaderComponent, selector: "kendo-card-header" }, { kind: "component", type: CardBodyComponent, selector: "kendo-card-body" }, { kind: "component", type: CardActionsComponent, selector: "kendo-card-actions", inputs: ["orientation", "layout", "actions"], outputs: ["action"] }, { kind: "directive", type: CardTitleDirective, selector: "[kendoCardTitle]" }, { kind: "directive", type: CardSubtitleDirective, selector: "[kendoCardSubtitle]" }, { kind: "directive", type: CardMediaDirective, selector: "[kendoCardMedia]" }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], animations: [
10720
+ trigger('toggle', [
10721
+ state('collapsed', style({
10722
+ height: '0',
10723
+ 'overflow-y': 'hidden',
10724
+ display: 'none'
10725
+ })),
10726
+ state('expanded', style({
10727
+ height: '*',
10728
+ 'overflow-y': 'hidden',
10729
+ display: 'block'
10730
+ })),
10731
+ transition('collapsed <=> expanded', [
10732
+ animate('{{animationDuration}}ms')
10733
+ ], { params: { animationDuration: '400' } }),
10734
+ ])
10735
+ ] });
10736
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCardComponent, decorators: [{
10737
+ type: Component,
10738
+ args: [{
10739
+ animations: [
10740
+ trigger('toggle', [
10741
+ state('collapsed', style({
10742
+ height: '0',
10743
+ 'overflow-y': 'hidden',
10744
+ display: 'none'
10745
+ })),
10746
+ state('expanded', style({
10747
+ height: '*',
10748
+ 'overflow-y': 'hidden',
10749
+ display: 'block'
10750
+ })),
10751
+ transition('collapsed <=> expanded', [
10752
+ animate('{{animationDuration}}ms')
10753
+ ], { params: { animationDuration: '400' } }),
10754
+ ])
10755
+ ],
10756
+ providers: [],
10757
+ exportAs: 'kendoTimelineCard',
10758
+ selector: 'kendo-timeline-card',
10759
+ template: `
10760
+ <kendo-card
10761
+ [ngStyle]="{ 'height': orientation === 'horizontal' ? eventHeight + 'px' : null }"
10762
+ [width]="orientation === 'horizontal' ? 'auto' : eventWidth + 'px'"
10763
+ class="k-card-with-callout k-card-vertical"
10764
+ (click)="toggle()"
10765
+ [attr.role]="role"
10766
+ [attr.aria-live]="ariaLive"
10767
+ [attr.aria-expanded]="ariaExpanded"
10768
+ [attr.tabindex]="tabIndex"
10769
+ >
10770
+ <span
10771
+ #callout
10772
+ *ngIf="event"
10773
+ class="k-timeline-card-callout k-card-callout"
10774
+ [ngClass]="{
10775
+ 'k-callout-n': orientation === 'horizontal',
10776
+ 'k-callout-w': orientation === 'vertical' && !this.reversed,
10777
+ 'k-callout-e': orientation === 'vertical' && this.reversed
10778
+ }"
10779
+ >
10780
+ </span>
10781
+ <div *ngIf="event" class="k-card-inner">
10782
+ <kendo-card-header>
10783
+ <ng-template
10784
+ *ngIf="headerTemplate"
10785
+ [ngTemplateOutlet]="headerTemplate?.templateRef"
10786
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
10787
+ >
10788
+ </ng-template>
10789
+
10790
+ <div kendoCardTitle *ngIf="!headerTemplate">
10791
+ <span class="k-event-title">{{ event.title }}</span>
10792
+ <button
10793
+ kendoButton
10794
+ *ngIf="collapsible && orientation === 'vertical'"
10795
+ [icon]="calloutFontIcon"
10796
+ [svgIcon]="calloutSvgIcon"
10797
+ class="k-event-collapse"
10798
+ fillMode="flat"
10799
+ [attr.aria-hidden]="true"
10800
+ tabindex="-1"
10801
+ type="button"
10802
+ ></button>
10803
+ </div>
10804
+ <div kendoCardSubtitle *ngIf="!headerTemplate">{{ event.subtitle }}</div>
10805
+ </kendo-card-header>
10806
+
10807
+ <kendo-card-body
10808
+ *ngIf="event.description || event.images"
10809
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
10810
+ (@toggle.start)="animationStart()"
10811
+ (@toggle.done)="animationDone($event)"
10812
+ >
10813
+ <ng-template
10814
+ *ngIf="bodyTemplate"
10815
+ [ngTemplateOutlet]="bodyTemplate?.templateRef"
10816
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
10817
+ >
10818
+ </ng-template>
10819
+
10820
+ <div *ngIf="!bodyTemplate" class="k-card-description">
10821
+ <p *ngIf="event.description">{{ event.description }}</p>
10822
+ <ng-container *ngFor="let image of event.images">
10823
+ <img *ngIf="image.alt" kendoCardMedia [src]="image.src" [alt]="image.alt" />
10824
+ <img *ngIf="!image.alt" kendoCardMedia [src]="image.src" />
10825
+ </ng-container>
10826
+ </div>
10827
+ </kendo-card-body>
10828
+
10829
+ <kendo-card-actions
10830
+ *ngIf="event.actions"
10831
+ [@toggle]="{value: expanded ? 'expanded' : 'collapsed', params: {animationDuration: this.animationDuration || 0}}"
10832
+ >
10833
+ <ng-template
10834
+ *ngIf="actionsTemplate"
10835
+ [ngTemplateOutlet]="actionsTemplate?.templateRef"
10836
+ [ngTemplateOutletContext]="{ $implicit: event, index: index}">
10837
+ >
10838
+ </ng-template>
10839
+
10840
+ <ng-container *ngIf="!actionsTemplate">
10841
+ <a *ngFor="let action of event.actions"
10842
+ [href]="action.url"
10843
+ [target]="action.target === 'blank' ? '_blank' : '_self'"
10844
+ (click)="onActionClick($event)"
10845
+ class="k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary"
10846
+ role="button"
10847
+ >
10848
+ {{ action.text }}
10849
+ </a>
10850
+ </ng-container>
10851
+ </kendo-card-actions>
10852
+ </div>
10853
+ </kendo-card>
10854
+ `,
10855
+ }]
10856
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: TimelineService }, { type: i0.Renderer2 }]; }, propDecorators: { event: [{
10857
+ type: Input
10858
+ }], expanded: [{
10859
+ type: Input
10860
+ }], collapsible: [{
10861
+ type: Input
10862
+ }], reversed: [{
10863
+ type: Input
10864
+ }], orientation: [{
10865
+ type: Input
10866
+ }], navigable: [{
10867
+ type: Input
10868
+ }], tabIndex: [{
10869
+ type: Input
10870
+ }], animationDuration: [{
10871
+ type: Input
10872
+ }], index: [{
10873
+ type: Input
10874
+ }], eventWidth: [{
10875
+ type: Input
10876
+ }], eventHeight: [{
10877
+ type: Input
10878
+ }], headerTemplate: [{
10879
+ type: Input
10880
+ }], bodyTemplate: [{
10881
+ type: Input
10882
+ }], actionsTemplate: [{
10883
+ type: Input
10884
+ }], calloutStyle: [{
10885
+ type: Input
10886
+ }], calloutElementRef: [{
10887
+ type: ViewChild,
10888
+ args: ['callout']
10889
+ }], hostClass: [{
10890
+ type: HostBinding,
10891
+ args: ['class.k-timeline-card']
10892
+ }], collapsedClass: [{
10893
+ type: HostBinding,
10894
+ args: ['class.k-collapsed']
10895
+ }], onComponentKeyDown: [{
10896
+ type: HostListener,
10897
+ args: ['keydown', ['$event']]
10898
+ }] } });
10899
+
10900
+ const DEFAULT_TAB_WIDTH = 200;
10901
+ const SPACE_BETWEEN_TABS = 25;
10902
+ const TRANSITION_EVENTS_COUNT = 3;
10903
+ /**
10904
+ * @hidden
10905
+ */
10906
+ class TimelineHorizontalComponent {
10907
+ constructor(cdr, _zone, renderer, timelineService, localization) {
10908
+ this.cdr = cdr;
10909
+ this._zone = _zone;
10910
+ this.renderer = renderer;
10911
+ this.timelineService = timelineService;
10912
+ this.localization = localization;
10913
+ this.events = [];
10914
+ this.svgLeftIcon = caretAltLeftIcon;
10915
+ this.svgRightIcon = caretAltRightIcon;
10916
+ this.animationState = 'center';
10917
+ this.translateValue = 0;
10918
+ this.eventsInInterval = [0, 1, 2];
10919
+ this.selectedCardIndex = 0;
10920
+ this.tabWidth = DEFAULT_TAB_WIDTH;
10921
+ this.firstCircleInView = 0;
10922
+ this.visibleEvents = [];
10923
+ this.trackItems = [];
10924
+ this.previousTitle = 'previous';
10925
+ this.nextTitle = 'next';
10926
+ this.subscriptions = new Subscription();
10927
+ }
10928
+ get selectedEvent() {
10929
+ return this._selectedEvent;
10930
+ }
10931
+ set selectedEvent(value) {
10932
+ if (this._selectedEvent === value) {
10933
+ return;
10934
+ }
10935
+ const newSelectedIndex = this.events.findIndex(event => event === value);
10936
+ if (newSelectedIndex === -1 && value !== null) {
10937
+ return;
10938
+ }
10939
+ this._selectedEvent = value;
10940
+ this.selectedEventIndex = newSelectedIndex;
10941
+ this.calloutStyle = this.calloutOffset;
10942
+ }
10943
+ ngOnInit() {
10944
+ this._zone.runOutsideAngular(() => this.subscriptions.add(fromEvent(window, 'resize').subscribe(this.handleWindowResize.bind(this))));
10945
+ this.l10nChange();
10946
+ this.subscriptions.add(this.localization.changes.subscribe(this.l10nChange.bind(this)));
10947
+ if (this.events.length > 0) {
10948
+ this.selectedEvent = this.events[0];
10949
+ }
10950
+ this.events.forEach(event => {
10951
+ if (event.flag) {
10952
+ this.trackItems.push({ isFlag: event.flag });
10953
+ }
10954
+ this.trackItems.push(event);
10955
+ });
10956
+ }
10957
+ ngAfterViewInit() {
10958
+ this.subscriptions.add(this.renderer.listen(this.trackElementRef.nativeElement, 'keydown', this.onKeyDown.bind(this)));
10959
+ this.trackWrapWidth = this.trackElementRef.nativeElement.getBoundingClientRect().width;
10960
+ this.scrollableTrackWidth = this.scrollableTrackElementRef.nativeElement.getBoundingClientRect().width;
10961
+ this._zone.runOutsideAngular(() => {
10962
+ this.onCirclesChange();
10963
+ this.subscriptions.add(this.circleElementRefs.changes.subscribe(this.onCirclesChange.bind(this)));
10964
+ this.subscriptions.add(this.cardElementRefs.changes.subscribe(this.onCardsChange.bind(this)));
10965
+ });
10966
+ if (this.events.length === 0) {
10967
+ return;
10968
+ }
10969
+ this.onCardsChange();
10970
+ if (this.cardComponents.get(this.selectedCardIndex)) {
10971
+ this.cardComponents.get(this.selectedCardIndex).calloutStyle = this.calloutOffset;
10972
+ this.focusTrackItem(0);
10973
+ }
10974
+ }
10975
+ ngOnChanges(changes) {
10976
+ if (isChanged('events', changes)) {
10977
+ if (!this.events || this.events.length === 0) {
10978
+ this.selectedEvent = null;
10979
+ this.trackItems = [];
10980
+ this.visibleEvents = [];
10981
+ }
10982
+ else {
10983
+ this.trackItems = [];
10984
+ this.events.forEach(event => {
10985
+ if (event.flag) {
10986
+ this.trackItems.push({ isFlag: event.flag });
10987
+ }
10988
+ this.trackItems.push(event);
10989
+ });
10990
+ this.visibleEvents = this.trackItems
10991
+ .slice(this.firstCircleInView, this.firstCircleInView + this.visibleTabsCount)
10992
+ .filter(event => !event.isFlag);
10993
+ this.selectedEvent = this.events[0];
10994
+ this.cdr.detectChanges();
10995
+ this.calloutStyle = this.calloutOffset;
10996
+ this.focusTrackItem(0);
10997
+ }
10998
+ }
10999
+ }
11000
+ ngOnDestroy() {
11001
+ this.subscriptions.unsubscribe();
11002
+ }
11003
+ handleWindowResize() {
11004
+ if (this.trackWrapWidth === this.trackElementRef.nativeElement.getBoundingClientRect().width) {
11005
+ return;
11006
+ }
11007
+ this.cardWidth = this.cardComponents.get(this.selectedCardIndex).element.nativeElement.offsetWidth;
11008
+ this.transformCards();
11009
+ this.trackWrapWidth = this.trackElementRef.nativeElement.getBoundingClientRect().width;
11010
+ this.scrollableTrackWidth = this.scrollableTrackElementRef.nativeElement.getBoundingClientRect().width;
11011
+ this.changeTabsCount();
11012
+ this._zone.run(() => {
11013
+ this.cardComponents.get(this.selectedCardIndex).calloutStyle = this.calloutOffset;
11014
+ });
11015
+ }
11016
+ onTransitionEnd() {
11017
+ this.cardElementRefs?.forEach(card => this.renderer.removeStyle(card.nativeElement, 'transition-duration'));
11018
+ this.cardComponents.get(this.selectedCardIndex).event = this.selectedEvent;
11019
+ this.calloutStyle = this.calloutOffset;
11020
+ }
11021
+ onTrackTransitionEnd() {
11022
+ this.calloutStyle = this.calloutOffset;
11023
+ }
11024
+ onSlideDone() {
11025
+ this.calloutStyle = this.calloutOffset;
11026
+ }
11027
+ previous() {
11028
+ if (this.firstCircleInView === 0) {
11029
+ return;
11030
+ }
11031
+ this.updateInterval(false);
11032
+ }
11033
+ previousClick() {
11034
+ this.previous();
11035
+ this.timelineService.onNavigate('previous');
11036
+ }
11037
+ next() {
11038
+ if (!this.visibleTabsCount || this.firstCircleInView + this.visibleTabsCount > this.trackItems.length) {
11039
+ return;
11040
+ }
11041
+ this.updateInterval(true);
11042
+ }
11043
+ nextClick() {
11044
+ this.next();
11045
+ this.timelineService.onNavigate('next');
11046
+ }
11047
+ open(index) {
11048
+ if (index < 0 || index >= this.events.length) {
11049
+ return;
11050
+ }
11051
+ if (this.visibleEvents.findIndex(event => event === this.events[index]) === -1) {
11052
+ // determine the start and end of the interval that the event belongs to, regardless of its position in the interval
11053
+ const trackItemIndex = this.trackItems.findIndex(event => event === this.events[index]);
11054
+ const start = Math.floor(trackItemIndex / this.visibleTabsCount) * this.visibleTabsCount;
11055
+ this.navigateToInterval(start, index);
11056
+ }
11057
+ this.selectedEvent = this.events[index];
11058
+ this.selectedCardIndex = this.getOtherSelectedCardIndex(index > this.selectedEventIndex);
11059
+ this.calloutStyle = this.calloutOffset;
11060
+ this.focusTrackItem(this.selectedEventIndex);
11061
+ this.animateCards();
11062
+ }
11063
+ navigateToEvent(index) {
11064
+ const eventIndex = this.events.findIndex(event => event === this.trackItems[index]);
11065
+ if (this.selectedEventIndex === eventIndex) {
11066
+ return;
11067
+ }
11068
+ this.selectedEvent = this.events[eventIndex];
11069
+ this.selectedCardIndex = this.getOtherSelectedCardIndex(index > eventIndex);
11070
+ this.calloutStyle = this.calloutOffset;
11071
+ this.animateCards();
11072
+ }
11073
+ getOtherSelectedCardIndex(forward) {
11074
+ // change the selected card which changes all cards' transform styles
11075
+ if (forward) {
11076
+ return this.selectedCardIndex === 0 ? TRANSITION_EVENTS_COUNT - 1 : this.selectedCardIndex - 1;
11077
+ }
11078
+ return this.selectedCardIndex === TRANSITION_EVENTS_COUNT - 1 ? 0 : this.selectedCardIndex + 1;
11079
+ }
11080
+ tabStyle() {
11081
+ if (!this.tabFlex) {
11082
+ return {};
11083
+ }
11084
+ return { 'flex': `1 0 ${this.tabFlex}%` };
11085
+ }
11086
+ getTransformation(width, position) {
11087
+ if (position === this.selectedCardIndex - 1 || position === this.selectedCardIndex + 2) {
11088
+ return `translate3d(${-width}px, 0, 0)`;
11089
+ }
11090
+ if (position === this.selectedCardIndex + 1 || position === this.selectedCardIndex - 2) {
11091
+ return `translate3d(${width}px, 0, 0)`;
11092
+ }
11093
+ return `translate3d(0, 0, 0)`;
11094
+ }
11095
+ getState(position) {
11096
+ if (position === this.selectedCardIndex) {
11097
+ return 'center';
11098
+ }
11099
+ if (position === this.selectedCardIndex - 1 || position === this.selectedCardIndex + 2) {
11100
+ return 'left';
11101
+ }
11102
+ return 'right';
11103
+ }
11104
+ get calloutOffset() {
11105
+ if (!this.circleElementRefs?.first || !this.trackElementRef || !isPresent$1(this.selectedEventIndex)) {
11106
+ return {};
11107
+ }
11108
+ const circleCenter = this.circleElementRefs.get(this.selectedEventIndex).nativeElement.getBoundingClientRect().left +
11109
+ this.circleElementRefs.get(this.selectedEventIndex).nativeElement.offsetWidth / 2;
11110
+ const trackOffset = this.trackElementRef.nativeElement.getBoundingClientRect().left;
11111
+ return { left: `${circleCenter - trackOffset}px` };
11112
+ }
11113
+ get isFirstRange() {
11114
+ return this.firstCircleInView === 0;
11115
+ }
11116
+ get isLastRange() {
11117
+ if (!this.circleElementRefs?.first && !this.flagElementRefs?.first) {
11118
+ return false;
11119
+ }
11120
+ return this.trackItems.length === 0 ||
11121
+ this.firstCircleInView + this.visibleTabsCount >= this.trackItems.length;
11122
+ }
11123
+ onCardsChange() {
11124
+ if (this.cardElementRefs?.get(this.selectedCardIndex)) {
11125
+ this.cardWidth = this.cardElementRefs.get(this.selectedCardIndex).nativeElement.offsetWidth;
11126
+ this.transformCards();
11127
+ }
11128
+ }
11129
+ onCirclesChange() {
11130
+ if (!this.circleElementRefs?.first) {
11131
+ return;
11132
+ }
11133
+ this.circleElementRefs
11134
+ .map(element => element.nativeElement)
11135
+ .forEach((element, index) => {
11136
+ this.subscriptions.add(this.renderer.listen(element, 'click', () => {
11137
+ this.focusTrackItem(index);
11138
+ }));
11139
+ });
11140
+ const width = this.circleElementRefs.first.nativeElement.getBoundingClientRect().width;
11141
+ if (width > DEFAULT_TAB_WIDTH) {
11142
+ this.tabWidth = this.circleElementRefs.first.nativeElement.getBoundingClientRect().width + SPACE_BETWEEN_TABS;
11143
+ }
11144
+ this.changeTabsCount();
11145
+ this.visibleEvents = this.trackItems
11146
+ .slice(this.firstCircleInView, this.firstCircleInView + this.visibleTabsCount)
11147
+ .filter(event => !event.isFlag);
11148
+ }
11149
+ onKeyDown(event) {
11150
+ if (!this.navigable) {
11151
+ return;
11152
+ }
11153
+ if (event.keyCode === Keys.Home) {
11154
+ this.onHomeKey();
11155
+ }
11156
+ else if (event.keyCode === Keys.End) {
11157
+ this.onEndKey();
11158
+ }
11159
+ else if (event.keyCode === Keys.ArrowRight) {
11160
+ this.onArrowRightKey();
11161
+ }
11162
+ else if (event.keyCode === Keys.ArrowLeft) {
11163
+ this.onArrowLeftKey();
11164
+ }
11165
+ }
11166
+ focusTrackItem(index) {
11167
+ if (!this.circleElementRefs || index < 0 || index >= this.circleElementRefs.length) {
11168
+ return;
11169
+ }
11170
+ const selectedTrackItem = this.circleElementRefs
11171
+ .find(element => element.nativeElement.hasAttribute('aria-selected'));
11172
+ if (selectedTrackItem) {
11173
+ this.removeTrackItemAttributes(selectedTrackItem);
11174
+ this.removeCardsAttributes();
11175
+ }
11176
+ const newTrackItem = this.circleElementRefs.get(index).nativeElement;
11177
+ this.setTrackItemAttributes(newTrackItem, index);
11178
+ }
11179
+ setTrackItemAttributes(element, index) {
11180
+ const innerCard = this.cardComponents.get(this.selectedCardIndex).element.nativeElement.querySelector('.k-card');
11181
+ const selectedCircle = this.circleElementRefs.get(index).nativeElement;
11182
+ this.renderer.addClass(element, 'k-focus');
11183
+ this.renderer.setAttribute(element, 'aria-selected', 'true');
11184
+ this.assignAriaLabel(innerCard, selectedCircle);
11185
+ this.assignAriaDescribedBy(innerCard, selectedCircle);
11186
+ }
11187
+ removeTrackItemAttributes(element) {
11188
+ this.renderer.removeClass(element.nativeElement, 'k-focus');
11189
+ this.renderer.removeAttribute(element.nativeElement, 'aria-selected');
11190
+ this.renderer.removeAttribute(element.nativeElement, 'id');
11191
+ this.renderer.removeAttribute(element.nativeElement, 'aria-describedby');
11192
+ }
11193
+ removeCardsAttributes() {
11194
+ this.cardElementRefs.forEach(card => {
11195
+ this.renderer.removeAttribute(card.nativeElement.querySelector('.k-card'), 'id');
11196
+ this.renderer.removeAttribute(card.nativeElement.querySelector('.k-card'), 'aria-label');
11197
+ });
11198
+ }
11199
+ assignAriaLabel(cardElement, dateElement) {
11200
+ const dateLabelId = `k-${guid()}`;
11201
+ this.renderer.setAttribute(dateElement, 'id', dateLabelId);
11202
+ this.renderer.setAttribute(cardElement, 'aria-label', dateLabelId);
11203
+ }
11204
+ assignAriaDescribedBy(cardElement, dateElement) {
11205
+ const cardId = `k-${guid()}`;
11206
+ this.renderer.setAttribute(cardElement, 'id', cardId);
11207
+ this.renderer.setAttribute(dateElement, 'aria-describedby', cardId);
11208
+ }
11209
+ updateInterval(forward) {
11210
+ let start = forward ? this.firstCircleInView + this.visibleTabsCount : this.firstCircleInView - this.visibleTabsCount;
11211
+ if (start < 0 || start >= this.trackItems.length) {
11212
+ start = 0;
11213
+ }
11214
+ this.navigateToInterval(start, 0, forward, !forward);
11215
+ }
11216
+ onHomeKey() {
11217
+ this.navigateToFirstInterval();
11218
+ }
11219
+ onEndKey() {
11220
+ this.navigateToLastInterval();
11221
+ }
11222
+ onArrowRightKey() {
11223
+ this.navigateToOtherEvent(true);
11224
+ }
11225
+ onArrowLeftKey() {
11226
+ this.navigateToOtherEvent(false);
11227
+ }
11228
+ navigateToFirstInterval() {
11229
+ this.navigateToInterval(0);
11230
+ }
11231
+ navigateToLastInterval() {
11232
+ const start = Math.floor(this.trackItems.length / this.visibleTabsCount) * this.visibleTabsCount;
11233
+ this.navigateToInterval(start, this.events.length - 1);
11234
+ }
11235
+ navigateToOtherEvent(direction) {
11236
+ const offset = direction ? 1 : -1;
11237
+ const newIndex = this.selectedEventIndex + offset;
11238
+ if (newIndex < 0 || newIndex >= this.events.length) {
11239
+ return;
11240
+ }
11241
+ if (this.visibleEvents.findIndex(event => event === this.events[newIndex]) === -1) {
11242
+ this.updateInterval(direction);
11243
+ }
11244
+ else {
11245
+ this.selectedEvent = this.events[newIndex];
11246
+ this.selectedCardIndex = this.getOtherSelectedCardIndex(direction);
11247
+ this.focusTrackItem(this.selectedEventIndex);
11248
+ this.animateCards();
11249
+ this.cdr.markForCheck();
11250
+ }
11251
+ }
11252
+ navigateToInterval(start, selectedIndex = 0, selectFirst = false, selectLast = false) {
11253
+ const end = start + this.visibleTabsCount < this.trackItems.length ? start + this.visibleTabsCount : undefined;
11254
+ const forward = this.firstCircleInView < start;
11255
+ this.firstCircleInView = start;
11256
+ const interval = Math.floor(start / this.visibleTabsCount);
11257
+ this.translateValue = interval * -100;
11258
+ this.animationState = forward ? 'right' : 'left';
11259
+ this.visibleEvents = this.trackItems.slice(this.firstCircleInView, end).filter(event => !event.isFlag);
11260
+ if (selectFirst) {
11261
+ this.selectedEvent = this.visibleEvents[0];
11262
+ }
11263
+ else if (selectLast) {
11264
+ this.selectedEvent = this.visibleEvents[this.visibleEvents.length - 1];
11265
+ }
11266
+ else {
11267
+ this.selectedEvent = this.events[selectedIndex];
11268
+ }
11269
+ this.selectedCardIndex = this.getOtherSelectedCardIndex(forward);
11270
+ this.cdr.detectChanges();
11271
+ this.focusTrackItem(this.selectedEventIndex);
11272
+ this.animateCards();
11273
+ this.calloutStyle = this.calloutOffset;
11274
+ this.cdr.markForCheck();
11275
+ }
11276
+ animateCards() {
11277
+ if (this.animationDuration) {
11278
+ this.cardComponents.get(this.selectedCardIndex).event = null;
11279
+ }
11280
+ this.cardElementRefs.forEach((card, index) => {
11281
+ this.renderer.setStyle(card.nativeElement, 'transform', this.getTransformation(this.cardWidth, index));
11282
+ this.renderer.setStyle(card.nativeElement, 'transition-duration', `${this.animationDuration || 0}ms`);
11283
+ });
11284
+ }
11285
+ transformCards() {
11286
+ this.cardElementRefs.forEach((card, index) => this.renderer.setStyle(card.nativeElement, 'transform', this.getTransformation(this.cardWidth, index)));
11287
+ }
11288
+ changeTabsCount() {
11289
+ this.visibleTabsCount = Math.round(this.scrollableTrackWidth / this.tabWidth);
11290
+ if (this.tabFlex !== 100 / this.visibleTabsCount) {
11291
+ this.tabFlex = 100 / this.visibleTabsCount;
11292
+ this.circleElementRefs.forEach(item => this.renderer.setStyle(item.nativeElement, 'flex', `1 0 ${this.tabFlex}%`));
11293
+ this.flagElementRefs.forEach(item => this.renderer.setStyle(item.nativeElement, 'flex', `1 0 ${this.tabFlex}%`));
11294
+ this.cdr.detectChanges();
11295
+ this.visibleEvents = this.trackItems
11296
+ .slice(this.firstCircleInView, this.firstCircleInView + this.visibleTabsCount)
11297
+ .filter(event => !event.isFlag);
11298
+ if (!this.visibleEvents.find(event => event === this.selectedEvent)) {
11299
+ const trackItemIndex = this.trackItems.findIndex(event => event === this.selectedEvent);
11300
+ this.navigateToInterval(trackItemIndex, this.selectedEventIndex);
11301
+ }
11302
+ }
11303
+ }
11304
+ l10nChange() {
11305
+ if (this.localization.get('previous')) {
11306
+ this.previousTitle = this.localization.get('previous');
11307
+ }
11308
+ if (this.localization.get('next')) {
11309
+ this.nextTitle = this.localization.get('next');
11310
+ }
11311
+ this.cdr.markForCheck();
11312
+ }
11313
+ }
11314
+ TimelineHorizontalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineHorizontalComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: TimelineService }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
11315
+ TimelineHorizontalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TimelineHorizontalComponent, selector: "kendo-timeline-horizontal", inputs: { events: "events", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animationDuration: "animationDuration", eventHeight: "eventHeight", dateFormat: "dateFormat", headerTemplate: "headerTemplate", bodyTemplate: "bodyTemplate", actionsTemplate: "actionsTemplate" }, providers: [], viewQueries: [{ propertyName: "trackElementRef", first: true, predicate: ["track"], descendants: true }, { propertyName: "scrollableTrackElementRef", first: true, predicate: ["scrollableTrack"], descendants: true }, { propertyName: "cardElementRefs", predicate: ["card"], descendants: true, read: ElementRef }, { propertyName: "circleElementRefs", predicate: ["trackCircle"], descendants: true }, { propertyName: "flagElementRefs", predicate: ["trackFlag"], descendants: true }, { propertyName: "cardComponents", predicate: TimelineCardComponent, descendants: true }], exportAs: ["kendoTimelineHorizontal"], usesOnChanges: true, ngImport: i0, template: `
11316
+ <div class="k-timeline-track-wrap" #track>
11317
+ <button
11318
+ kendoButton
11319
+ [svgIcon]="svgLeftIcon"
11320
+ class="k-timeline-arrow k-timeline-arrow-left"
11321
+ rounded="full"
11322
+ [title]="previousTitle"
11323
+ (click)="previousClick()"
11324
+ [disabled]="isFirstRange"
11325
+ [attr.aria-hidden]="true"
11326
+ tabindex="-1"
11327
+ type="button"
11328
+ ></button>
11329
+ <button
11330
+ kendoButton
11331
+ [svgIcon]="svgRightIcon"
11332
+ class="k-timeline-arrow k-timeline-arrow-right"
11333
+ rounded="full"
11334
+ [title]="nextTitle"
11335
+ (click)="nextClick()"
11336
+ [disabled]="isLastRange"
11337
+ [attr.aria-hidden]="true"
11338
+ tabindex="-1"
11339
+ type="button"
11340
+ ></button>
11341
+ <div class="k-timeline-track">
11342
+ <ul class="k-timeline-scrollable-wrap"
11343
+ #scrollableTrack
11344
+ [attr.role]="'tablist'"
11345
+ [attr.tabindex]="'0'"
11346
+ [@trackSlide]="{value: animationState, params: {transformValue: this.translateValue}}"
11347
+ (@trackSlide.done)="onSlideDone()"
11348
+ (transitionend)="onTrackTransitionEnd()"
11349
+ >
11350
+ <ng-container *ngFor="let event of trackItems; let index = index">
11351
+ <li
11352
+ #trackFlag
11353
+ *ngIf="event.isFlag"
11354
+ class="k-timeline-flag-wrap k-timeline-track-item"
11355
+ [attr.role]="'none'"
11356
+ [attr.aria-hidden]="true"
11357
+ [ngStyle]="tabStyle()"
11358
+ >
11359
+ <span class="k-timeline-flag">{{ event.isFlag }}</span>
11360
+ </li>
11361
+ <li
11362
+ *ngIf="!event.isFlag"
11363
+ #trackCircle
11364
+ class="k-timeline-track-item"
11365
+ [attr.role]="'tab'"
11366
+ (click)="navigateToEvent(index)"
11367
+ [ngStyle]="tabStyle()"
11368
+ >
11369
+ <div class="k-timeline-date-wrap">
11370
+ <span *ngIf="showDateLabels" class="k-timeline-date">
11371
+ {{ event.date | kendoDate: dateFormat }}
11372
+ </span>
11373
+ </div>
11374
+ <span class="k-timeline-circle"></span>
11375
+ </li>
11376
+ </ng-container>
11377
+ </ul>
11378
+ </div>
11379
+ </div>
11380
+ <div class="k-timeline-events-list">
11381
+ <ul
11382
+ *ngIf="selectedEvent"
11383
+ class="k-timeline-scrollable-wrap"
11384
+ [@eventsSlide]="{value: animationState, params: {animationDuration: this.animationDuration || 0}}"
11385
+ (@eventsSlide.done)="onSlideDone()"
11386
+ [ngStyle]="{'transform-origin': 'left top'}"
11387
+ >
11388
+ <li *ngFor="let event of eventsInInterval; let index = index"
11389
+ #card
11390
+ class="k-timeline-event"
11391
+ (transitionend)="onTransitionEnd()"
11392
+ >
11393
+ <kendo-timeline-card
11394
+ [event]="selectedCardIndex === index ? selectedEvent : null"
11395
+ [expanded]="true"
11396
+ [collapsible]="collapsibleEvents"
11397
+ [calloutStyle]="selectedCardIndex === index ? calloutStyle : {}"
11398
+ [ngStyle]="{visibility: selectedCardIndex === index ? 'visible' : 'hidden' }"
11399
+ [tabIndex]="selectedCardIndex === index ? '0' : '-1'"
11400
+ [navigable]="navigable"
11401
+ [index]="selectedEventIndex"
11402
+ [headerTemplate]="headerTemplate"
11403
+ [bodyTemplate]="bodyTemplate"
11404
+ [actionsTemplate]="actionsTemplate"
11405
+ [eventHeight]="eventHeight"
11406
+ orientation="horizontal"
11407
+ >
11408
+ </kendo-timeline-card>
11409
+ </li>
11410
+ </ul>
11411
+ </div>
11412
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3$1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: TimelineCardComponent, selector: "kendo-timeline-card", inputs: ["event", "expanded", "collapsible", "reversed", "orientation", "navigable", "tabIndex", "animationDuration", "index", "eventWidth", "eventHeight", "headerTemplate", "bodyTemplate", "actionsTemplate", "calloutStyle"], exportAs: ["kendoTimelineCard"] }, { kind: "pipe", type: i6.DatePipe, name: "kendoDate" }], animations: [
11413
+ trigger('trackSlide', [
11414
+ state('left', style({
11415
+ transform: `translateX({{transformValue}}%)`,
11416
+ }), { params: { transformValue: '0' } }),
11417
+ state('right', style({
11418
+ transform: `translateX({{transformValue}}%)`,
11419
+ }), { params: { transformValue: '0' } }),
11420
+ state('center', style({
11421
+ transform: `translateX(0)`,
11422
+ }))
11423
+ ]),
11424
+ trigger('eventsSlide', [
11425
+ transition('* => right', [
11426
+ animate('{{animationDuration}}ms', style({ transform: `translateX(-100%)` }))
11427
+ ], { params: { animationDuration: '400' } }),
11428
+ transition('* => left', [
11429
+ animate('{{animationDuration}}ms', style({ transform: `translateX(100%)` }))
11430
+ ], { params: { animationDuration: '400' } })
11431
+ ])
11432
+ ] });
11433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineHorizontalComponent, decorators: [{
11434
+ type: Component,
11435
+ args: [{
11436
+ animations: [
11437
+ trigger('trackSlide', [
11438
+ state('left', style({
11439
+ transform: `translateX({{transformValue}}%)`,
11440
+ }), { params: { transformValue: '0' } }),
11441
+ state('right', style({
11442
+ transform: `translateX({{transformValue}}%)`,
11443
+ }), { params: { transformValue: '0' } }),
11444
+ state('center', style({
11445
+ transform: `translateX(0)`,
11446
+ }))
11447
+ ]),
11448
+ trigger('eventsSlide', [
11449
+ transition('* => right', [
11450
+ animate('{{animationDuration}}ms', style({ transform: `translateX(-100%)` }))
11451
+ ], { params: { animationDuration: '400' } }),
11452
+ transition('* => left', [
11453
+ animate('{{animationDuration}}ms', style({ transform: `translateX(100%)` }))
11454
+ ], { params: { animationDuration: '400' } })
11455
+ ])
11456
+ ],
11457
+ providers: [],
11458
+ exportAs: 'kendoTimelineHorizontal',
11459
+ selector: 'kendo-timeline-horizontal',
11460
+ template: `
11461
+ <div class="k-timeline-track-wrap" #track>
11462
+ <button
11463
+ kendoButton
11464
+ [svgIcon]="svgLeftIcon"
11465
+ class="k-timeline-arrow k-timeline-arrow-left"
11466
+ rounded="full"
11467
+ [title]="previousTitle"
11468
+ (click)="previousClick()"
11469
+ [disabled]="isFirstRange"
11470
+ [attr.aria-hidden]="true"
11471
+ tabindex="-1"
11472
+ type="button"
11473
+ ></button>
11474
+ <button
11475
+ kendoButton
11476
+ [svgIcon]="svgRightIcon"
11477
+ class="k-timeline-arrow k-timeline-arrow-right"
11478
+ rounded="full"
11479
+ [title]="nextTitle"
11480
+ (click)="nextClick()"
11481
+ [disabled]="isLastRange"
11482
+ [attr.aria-hidden]="true"
11483
+ tabindex="-1"
11484
+ type="button"
11485
+ ></button>
11486
+ <div class="k-timeline-track">
11487
+ <ul class="k-timeline-scrollable-wrap"
11488
+ #scrollableTrack
11489
+ [attr.role]="'tablist'"
11490
+ [attr.tabindex]="'0'"
11491
+ [@trackSlide]="{value: animationState, params: {transformValue: this.translateValue}}"
11492
+ (@trackSlide.done)="onSlideDone()"
11493
+ (transitionend)="onTrackTransitionEnd()"
11494
+ >
11495
+ <ng-container *ngFor="let event of trackItems; let index = index">
11496
+ <li
11497
+ #trackFlag
11498
+ *ngIf="event.isFlag"
11499
+ class="k-timeline-flag-wrap k-timeline-track-item"
11500
+ [attr.role]="'none'"
11501
+ [attr.aria-hidden]="true"
11502
+ [ngStyle]="tabStyle()"
11503
+ >
11504
+ <span class="k-timeline-flag">{{ event.isFlag }}</span>
11505
+ </li>
11506
+ <li
11507
+ *ngIf="!event.isFlag"
11508
+ #trackCircle
11509
+ class="k-timeline-track-item"
11510
+ [attr.role]="'tab'"
11511
+ (click)="navigateToEvent(index)"
11512
+ [ngStyle]="tabStyle()"
11513
+ >
11514
+ <div class="k-timeline-date-wrap">
11515
+ <span *ngIf="showDateLabels" class="k-timeline-date">
11516
+ {{ event.date | kendoDate: dateFormat }}
11517
+ </span>
11518
+ </div>
11519
+ <span class="k-timeline-circle"></span>
11520
+ </li>
11521
+ </ng-container>
11522
+ </ul>
11523
+ </div>
11524
+ </div>
11525
+ <div class="k-timeline-events-list">
11526
+ <ul
11527
+ *ngIf="selectedEvent"
11528
+ class="k-timeline-scrollable-wrap"
11529
+ [@eventsSlide]="{value: animationState, params: {animationDuration: this.animationDuration || 0}}"
11530
+ (@eventsSlide.done)="onSlideDone()"
11531
+ [ngStyle]="{'transform-origin': 'left top'}"
11532
+ >
11533
+ <li *ngFor="let event of eventsInInterval; let index = index"
11534
+ #card
11535
+ class="k-timeline-event"
11536
+ (transitionend)="onTransitionEnd()"
11537
+ >
11538
+ <kendo-timeline-card
11539
+ [event]="selectedCardIndex === index ? selectedEvent : null"
11540
+ [expanded]="true"
11541
+ [collapsible]="collapsibleEvents"
11542
+ [calloutStyle]="selectedCardIndex === index ? calloutStyle : {}"
11543
+ [ngStyle]="{visibility: selectedCardIndex === index ? 'visible' : 'hidden' }"
11544
+ [tabIndex]="selectedCardIndex === index ? '0' : '-1'"
11545
+ [navigable]="navigable"
11546
+ [index]="selectedEventIndex"
11547
+ [headerTemplate]="headerTemplate"
11548
+ [bodyTemplate]="bodyTemplate"
11549
+ [actionsTemplate]="actionsTemplate"
11550
+ [eventHeight]="eventHeight"
11551
+ orientation="horizontal"
11552
+ >
11553
+ </kendo-timeline-card>
11554
+ </li>
11555
+ </ul>
11556
+ </div>
11557
+ `,
11558
+ }]
11559
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: TimelineService }, { type: i1.LocalizationService }]; }, propDecorators: { events: [{
11560
+ type: Input
11561
+ }], alterMode: [{
11562
+ type: Input
11563
+ }], collapsibleEvents: [{
11564
+ type: Input
11565
+ }], navigable: [{
11566
+ type: Input
11567
+ }], showDateLabels: [{
11568
+ type: Input
11569
+ }], animationDuration: [{
11570
+ type: Input
11571
+ }], eventHeight: [{
11572
+ type: Input
11573
+ }], dateFormat: [{
11574
+ type: Input
11575
+ }], headerTemplate: [{
11576
+ type: Input
11577
+ }], bodyTemplate: [{
11578
+ type: Input
11579
+ }], actionsTemplate: [{
11580
+ type: Input
11581
+ }], cardElementRefs: [{
11582
+ type: ViewChildren,
11583
+ args: ['card', { read: ElementRef }]
11584
+ }], circleElementRefs: [{
11585
+ type: ViewChildren,
11586
+ args: ['trackCircle']
11587
+ }], flagElementRefs: [{
11588
+ type: ViewChildren,
11589
+ args: ['trackFlag']
11590
+ }], trackElementRef: [{
11591
+ type: ViewChild,
11592
+ args: ['track']
11593
+ }], scrollableTrackElementRef: [{
11594
+ type: ViewChild,
11595
+ args: ['scrollableTrack']
11596
+ }], cardComponents: [{
11597
+ type: ViewChildren,
11598
+ args: [TimelineCardComponent]
11599
+ }] } });
11600
+
11601
+ /**
11602
+ * @hidden
11603
+ */
11604
+ class TimelineVerticalComponent {
11605
+ constructor(renderer) {
11606
+ this.renderer = renderer;
11607
+ this.events = [];
11608
+ this.subscriptions = new Subscription();
11609
+ }
11610
+ ngAfterViewInit() {
11611
+ this.ariaDescribedByAllEvents();
11612
+ this.subscriptions.add(this.innerDateElementRefs.changes.subscribe(() => {
11613
+ if (this.innerDateElementRefs?.length > 0) {
11614
+ this.ariaDescribedByAllEvents();
11615
+ }
11616
+ else {
11617
+ this.removeAriaDescribedBy();
11618
+ }
11619
+ }));
11620
+ }
11621
+ expand(index) {
11622
+ if (index < 0 || index >= this.cards.length) {
11623
+ return;
11624
+ }
11625
+ this.cards.get(index).expand();
11626
+ }
11627
+ collapse(index) {
11628
+ if (index < 0 || index >= this.cards.length) {
11629
+ return;
11630
+ }
11631
+ this.cards.get(index).collapse();
11632
+ }
11633
+ ariaDescribedByAllEvents() {
11634
+ this.cards?.forEach((card, index) => {
11635
+ const innerCard = card.element.nativeElement.querySelector('.k-card');
11636
+ const innerDate = this.dateElementRefs.get(index).nativeElement.querySelector('.k-timeline-date');
11637
+ if (innerDate) {
11638
+ this.assignAriaDescribedBy(innerCard, innerDate);
11639
+ }
11640
+ });
11641
+ }
11642
+ removeAriaDescribedBy() {
11643
+ this.cards?.forEach(card => {
11644
+ const innerCard = card.element.nativeElement.querySelector('.k-card');
11645
+ this.renderer.removeAttribute(innerCard, 'aria-describedby');
11646
+ });
11647
+ }
11648
+ assignAriaDescribedBy(cardElement, dateElement) {
11649
+ const dateLabelId = `k-${guid()}`;
11650
+ this.renderer.setAttribute(dateElement, 'id', dateLabelId);
11651
+ this.renderer.setAttribute(cardElement, 'aria-describedby', dateLabelId);
11652
+ }
11653
+ }
11654
+ TimelineVerticalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineVerticalComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
11655
+ TimelineVerticalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TimelineVerticalComponent, selector: "kendo-timeline-vertical", inputs: { events: "events", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animationDuration: "animationDuration", eventWidth: "eventWidth", dateFormat: "dateFormat", headerTemplate: "headerTemplate", bodyTemplate: "bodyTemplate", actionsTemplate: "actionsTemplate" }, providers: [], viewQueries: [{ propertyName: "cards", predicate: ["card"], descendants: true }, { propertyName: "dateElementRefs", predicate: ["dateWrap"], descendants: true }, { propertyName: "innerDateElementRefs", predicate: ["innerDate"], descendants: true }], exportAs: ["kendoTimelineVertical"], ngImport: i0, template: `
11656
+ <ul *ngIf="events && events.length > 0">
11657
+ <ng-container *ngFor="let event of events; let i = index">
11658
+ <li class="k-timeline-flag-wrap" *ngIf="event.flag">
11659
+ <span class="k-timeline-flag">{{ event.flag }}</span>
11660
+ </li>
11661
+ <li class="k-timeline-event" [ngClass]="{ 'k-reverse': alterMode && i % 2 === 0 }">
11662
+ <div class="k-timeline-date-wrap" #dateWrap>
11663
+ <span *ngIf="showDateLabels" class="k-timeline-date" #innerDate>
11664
+ {{ event.date | kendoDate: dateFormat }}
11665
+ </span>
11666
+ </div>
11667
+ <span class="k-timeline-circle"></span>
11668
+ <kendo-timeline-card
11669
+ #card
11670
+ [event]="event"
11671
+ [expanded]="event.expanded || !collapsibleEvents"
11672
+ [collapsible]="collapsibleEvents"
11673
+ [reversed]="alterMode && i % 2 === 0"
11674
+ [tabIndex]="'0'"
11675
+ [navigable]="navigable"
11676
+ [animationDuration]="animationDuration"
11677
+ [headerTemplate]="headerTemplate"
11678
+ [bodyTemplate]="bodyTemplate"
11679
+ [actionsTemplate]="actionsTemplate"
11680
+ [index]="i"
11681
+ [eventWidth]="eventWidth"
11682
+ orientation="vertical"
11683
+ >
11684
+ </kendo-timeline-card>
11685
+ </li>
11686
+ </ng-container>
11687
+ </ul>
11688
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TimelineCardComponent, selector: "kendo-timeline-card", inputs: ["event", "expanded", "collapsible", "reversed", "orientation", "navigable", "tabIndex", "animationDuration", "index", "eventWidth", "eventHeight", "headerTemplate", "bodyTemplate", "actionsTemplate", "calloutStyle"], exportAs: ["kendoTimelineCard"] }, { kind: "pipe", type: i6.DatePipe, name: "kendoDate" }] });
11689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineVerticalComponent, decorators: [{
11690
+ type: Component,
11691
+ args: [{
11692
+ providers: [],
11693
+ exportAs: 'kendoTimelineVertical',
11694
+ selector: 'kendo-timeline-vertical',
11695
+ template: `
11696
+ <ul *ngIf="events && events.length > 0">
11697
+ <ng-container *ngFor="let event of events; let i = index">
11698
+ <li class="k-timeline-flag-wrap" *ngIf="event.flag">
11699
+ <span class="k-timeline-flag">{{ event.flag }}</span>
11700
+ </li>
11701
+ <li class="k-timeline-event" [ngClass]="{ 'k-reverse': alterMode && i % 2 === 0 }">
11702
+ <div class="k-timeline-date-wrap" #dateWrap>
11703
+ <span *ngIf="showDateLabels" class="k-timeline-date" #innerDate>
11704
+ {{ event.date | kendoDate: dateFormat }}
11705
+ </span>
11706
+ </div>
11707
+ <span class="k-timeline-circle"></span>
11708
+ <kendo-timeline-card
11709
+ #card
11710
+ [event]="event"
11711
+ [expanded]="event.expanded || !collapsibleEvents"
11712
+ [collapsible]="collapsibleEvents"
11713
+ [reversed]="alterMode && i % 2 === 0"
11714
+ [tabIndex]="'0'"
11715
+ [navigable]="navigable"
11716
+ [animationDuration]="animationDuration"
11717
+ [headerTemplate]="headerTemplate"
11718
+ [bodyTemplate]="bodyTemplate"
11719
+ [actionsTemplate]="actionsTemplate"
11720
+ [index]="i"
11721
+ [eventWidth]="eventWidth"
11722
+ orientation="vertical"
11723
+ >
11724
+ </kendo-timeline-card>
11725
+ </li>
11726
+ </ng-container>
11727
+ </ul>
11728
+ `,
11729
+ }]
11730
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { events: [{
11731
+ type: Input
11732
+ }], alterMode: [{
11733
+ type: Input
11734
+ }], collapsibleEvents: [{
11735
+ type: Input
11736
+ }], navigable: [{
11737
+ type: Input
11738
+ }], showDateLabels: [{
11739
+ type: Input
11740
+ }], animationDuration: [{
11741
+ type: Input
11742
+ }], eventWidth: [{
11743
+ type: Input
11744
+ }], dateFormat: [{
11745
+ type: Input
11746
+ }], headerTemplate: [{
11747
+ type: Input
11748
+ }], bodyTemplate: [{
11749
+ type: Input
11750
+ }], actionsTemplate: [{
11751
+ type: Input
11752
+ }], cards: [{
11753
+ type: ViewChildren,
11754
+ args: ['card']
11755
+ }], dateElementRefs: [{
11756
+ type: ViewChildren,
11757
+ args: ['dateWrap']
11758
+ }], innerDateElementRefs: [{
11759
+ type: ViewChildren,
11760
+ args: ['innerDate']
11761
+ }] } });
11762
+
11763
+ /**
11764
+ * @hidden
11765
+ */
11766
+ class TimelineMessages extends ComponentMessages {
11767
+ }
11768
+ TimelineMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
11769
+ TimelineMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: TimelineMessages, selector: "kendo-timeline-messages-base", inputs: { previous: "previous", next: "next" }, usesInheritance: true, ngImport: i0 });
11770
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineMessages, decorators: [{
11771
+ type: Directive,
11772
+ args: [{
11773
+ // eslint-disable-next-line @angular-eslint/directive-selector
11774
+ selector: 'kendo-timeline-messages-base'
11775
+ }]
11776
+ }], propDecorators: { previous: [{
11777
+ type: Input
11778
+ }], next: [{
11779
+ type: Input
11780
+ }] } });
11781
+
11782
+ /**
11783
+ * @hidden
11784
+ */
11785
+ class LocalizedTimelineMessagesDirective extends TimelineMessages {
11786
+ constructor(service) {
11787
+ super();
11788
+ this.service = service;
11789
+ }
11790
+ }
11791
+ LocalizedTimelineMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LocalizedTimelineMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
11792
+ LocalizedTimelineMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: LocalizedTimelineMessagesDirective, selector: "[kendoTimelineLocalizedMessages]", providers: [
11793
+ {
11794
+ provide: TimelineMessages,
11795
+ useExisting: forwardRef(() => LocalizedTimelineMessagesDirective),
11796
+ },
11797
+ ], usesInheritance: true, ngImport: i0 });
11798
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LocalizedTimelineMessagesDirective, decorators: [{
11799
+ type: Directive,
11800
+ args: [{
11801
+ providers: [
11802
+ {
11803
+ provide: TimelineMessages,
11804
+ useExisting: forwardRef(() => LocalizedTimelineMessagesDirective),
11805
+ },
11806
+ ],
11807
+ selector: `[kendoTimelineLocalizedMessages]`
11808
+ }]
11809
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
11810
+
11811
+ const DEFAULT_HORIZONTAL_ANIMATION_DURATION = 400;
11812
+ const DEFAULT_VERTICAL_ANIMATION_DURATION = 300;
11813
+ const DEFAULT_EVENT_WIDTH = 400;
11814
+ const DEFAULT_EVENT_HEIGHT = 600;
11815
+ const DEFAULT_DATE_FORMAT = 'MMMM dd, yyyy';
11816
+ /**
11817
+ * Represents the [Kendo UI Timeline component for Angular]({% slug overview_timeline %}).
11818
+ */
11819
+ class TimelineComponent {
11820
+ constructor(timelineService) {
11821
+ this.timelineService = timelineService;
11822
+ /**
11823
+ * Specifies the orientation of the axis.
11824
+ *
11825
+ * @default 'vertical'
11826
+ */
11827
+ this.orientation = 'vertical';
11828
+ /**
11829
+ * Specifies whether to render events alternatingly on both sides of the axis.
11830
+ * Applicable when `orientation` is set to `vertical`.
11831
+ *
11832
+ * @default true
11833
+ */
11834
+ this.alterMode = true;
11835
+ /**
11836
+ * Specifies whether the event cards can be collapsed.
11837
+ *
11838
+ * @default true
11839
+ */
11840
+ this.collapsibleEvents = true;
11841
+ /**
11842
+ * Specifies whether the user can use dedicated shortcuts to interact with the Timeline.
11843
+ *
11844
+ * @default true
11845
+ */
11846
+ this.navigable = true;
11847
+ /**
11848
+ * Specifies whether an event's date label will be visible.
11849
+ *
11850
+ * @default true
11851
+ */
11852
+ this.showDateLabels = true;
11853
+ this.hostClass = true;
11854
+ /**
11855
+ * Fires when a card is toggled.
11856
+ * > This event is emitted in vertical mode only.
11857
+ */
11858
+ this.onToggle = new EventEmitter();
11859
+ /**
11860
+ * Fires when a card's action is clicked.
11861
+ */
11862
+ this.onActionClick = new EventEmitter();
11863
+ /**
11864
+ * Fires when the left or right arrow is clicked.
11865
+ * > This event is emitted in horizontal mode only.
11866
+ */
11867
+ this.onNavigate = new EventEmitter();
11868
+ this._events = [];
11869
+ this._modelFields = defaultModelFields;
11870
+ this._eventWidth = DEFAULT_EVENT_WIDTH;
11871
+ this._eventHeight = DEFAULT_EVENT_HEIGHT;
11872
+ this._dateFormat = DEFAULT_DATE_FORMAT;
11873
+ this.originalData = [];
11874
+ this.subscriptions = new Subscription();
11875
+ this.timelineService.timeline = this;
11876
+ }
11877
+ /**
11878
+ * An array of event instances which will be shown by the Timeline.
11879
+ */
11880
+ set events(events) {
11881
+ if (!isPresent$1(events)) {
11882
+ return;
11883
+ }
11884
+ this.originalData = events;
11885
+ this._events = processItems(this.originalData, this.modelFields);
11886
+ this._events.sort((a, b) => {
11887
+ return a.date.getTime() - b.date.getTime();
11888
+ });
11889
+ if (this._events.length > 0) {
11890
+ let flag = this._events[0].date.getFullYear() - 1;
11891
+ this._events.forEach((event) => {
11892
+ if (event.date.getFullYear() !== flag) {
11893
+ flag = event.date.getFullYear();
11894
+ event.flag = flag;
11895
+ }
11896
+ });
11897
+ }
11898
+ }
11899
+ get events() {
11900
+ return this._events;
11901
+ }
11902
+ /**
11903
+ * The names of the model fields from which the Timeline will read its data.
11904
+ */
11905
+ set modelFields(value) {
11906
+ this._modelFields = { ...defaultModelFields, ...value };
11907
+ if (this.originalData) {
11908
+ this.events = this.originalData;
11909
+ }
11910
+ }
11911
+ get modelFields() {
11912
+ return this._modelFields;
11913
+ }
11914
+ /**
11915
+ * Sets a specific width for the event.
11916
+ * This setting is supported only in vertical mode.
11917
+ *
11918
+ * @default 400
11919
+ */
11920
+ get eventWidth() {
11921
+ return this._eventWidth;
11922
+ }
11923
+ set eventWidth(value) {
11924
+ if (value) {
11925
+ this._eventWidth = value;
11926
+ }
11927
+ else {
11928
+ this._eventWidth = DEFAULT_EVENT_WIDTH;
11929
+ }
11930
+ }
11931
+ /**
11932
+ * Sets a specific height for the event.
11933
+ * > This setting is supported only in horizontal mode.
11934
+ *
11935
+ * @default 600
11936
+ */
11937
+ get eventHeight() {
11938
+ return this._eventHeight;
11939
+ }
11940
+ set eventHeight(value) {
11941
+ if (value) {
11942
+ this._eventHeight = value;
11943
+ }
11944
+ else {
11945
+ this._eventHeight = DEFAULT_EVENT_HEIGHT;
11946
+ }
11947
+ }
11948
+ /**
11949
+ * @hidden
11950
+ */
11951
+ get animationDuration() {
11952
+ if (typeof this.animation === 'number') {
11953
+ return this.animation;
11954
+ }
11955
+ if (typeof this.animation === 'boolean' && this.animation) {
11956
+ return this.orientation === 'horizontal' ? DEFAULT_HORIZONTAL_ANIMATION_DURATION : DEFAULT_VERTICAL_ANIMATION_DURATION;
11957
+ }
11958
+ return 0;
11959
+ }
11960
+ /**
11961
+ * Specifies the date format for displaying the event date.
11962
+ *
11963
+ * @default 'MMMM dd, yyyy'
11964
+ */
11965
+ set dateFormat(value) {
11966
+ if (isPresent$1(value) && value !== '') {
11967
+ this._dateFormat = value;
11968
+ }
11969
+ else {
11970
+ this._dateFormat = DEFAULT_DATE_FORMAT;
11971
+ }
11972
+ }
11973
+ get dateFormat() {
11974
+ return this._dateFormat;
11975
+ }
11976
+ get verticalClass() {
11977
+ return this.orientation === 'vertical';
11978
+ }
11979
+ get horizontalClass() {
11980
+ return this.orientation === 'horizontal';
11981
+ }
11982
+ get alternatingClass() {
11983
+ return this.alterMode === true && this.orientation === 'vertical';
11984
+ }
11985
+ get collapsibleClass() {
11986
+ return this.collapsibleEvents === true && this.orientation === 'vertical';
11987
+ }
11988
+ ngAfterContentInit() {
11989
+ this.initTemplates();
11990
+ }
11991
+ ngOnDestroy() {
11992
+ this.subscriptions.unsubscribe();
11993
+ }
11994
+ /**
11995
+ * Switches to the previous portion of events.
11996
+ * > This method is supported only in horizontal mode.
11997
+ */
11998
+ previous() {
11999
+ this.timelineHorizontal?.previous();
12000
+ }
12001
+ /**
12002
+ * Switches to the next portion of events.
12003
+ * > This method is supported only in horizontal mode.
12004
+ */
12005
+ next() {
12006
+ this.timelineHorizontal?.next();
12007
+ }
12008
+ /**
12009
+ * Open event details.
12010
+ * > This method is supported only in horizontal mode.
12011
+ */
12012
+ open(index) {
12013
+ this.timelineHorizontal?.open(index);
12014
+ }
12015
+ /**
12016
+ * Expands an event.
12017
+ * > This method is supported only in vertical mode.
12018
+ */
12019
+ expand(index) {
12020
+ this.timelineVertical?.expand(index);
12021
+ }
12022
+ /**
12023
+ * Collapses an event.
12024
+ * > This method is supported only in vertical mode.
12025
+ */
12026
+ collapse(index) {
12027
+ this.timelineVertical?.collapse(index);
12028
+ }
12029
+ initTemplates() {
12030
+ this.headerTemplate = this.cardHeaderTemplate?.first;
12031
+ this.bodyTemplate = this.cardBodyTemplate?.first;
12032
+ this.actionsTemplate = this.cardActionsTemplate?.first;
12033
+ this.subscriptions.add(this.cardHeaderTemplate?.changes.subscribe(() => {
12034
+ this.headerTemplate = this.cardHeaderTemplate?.first || null;
12035
+ }));
12036
+ this.subscriptions.add(this.cardBodyTemplate?.changes.subscribe(() => {
12037
+ this.bodyTemplate = this.cardBodyTemplate?.first || null;
12038
+ }));
12039
+ this.subscriptions.add(this.cardActionsTemplate?.changes.subscribe(() => {
12040
+ this.actionsTemplate = this.cardActionsTemplate?.first || null;
12041
+ }));
12042
+ }
12043
+ }
12044
+ TimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineComponent, deps: [{ token: TimelineService }], target: i0.ɵɵFactoryTarget.Component });
12045
+ TimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TimelineComponent, selector: "kendo-timeline", inputs: { events: "events", modelFields: "modelFields", orientation: "orientation", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animation: "animation", eventWidth: "eventWidth", eventHeight: "eventHeight", dateFormat: "dateFormat" }, outputs: { onToggle: "onToggle", onActionClick: "onActionClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-timeline": "this.hostClass", "class.k-timeline-vertical": "this.verticalClass", "class.k-timeline-horizontal": "this.horizontalClass", "class.k-timeline-alternating": "this.alternatingClass", "class.k-timeline-collapsible": "this.collapsibleClass" } }, providers: [
12046
+ TimelineService,
12047
+ LocalizationService,
12048
+ {
12049
+ provide: L10N_PREFIX,
12050
+ useValue: 'kendo.timeline'
12051
+ }
12052
+ ], queries: [{ propertyName: "cardHeaderTemplate", predicate: TimelineCardHeaderTemplateDirective }, { propertyName: "cardBodyTemplate", predicate: TimelineCardBodyTemplateDirective }, { propertyName: "cardActionsTemplate", predicate: TimelineCardActionsTemplateDirective }], viewQueries: [{ propertyName: "timelineHorizontal", first: true, predicate: TimelineHorizontalComponent, descendants: true }, { propertyName: "timelineVertical", first: true, predicate: TimelineVerticalComponent, descendants: true }], exportAs: ["kendoTimeline"], ngImport: i0, template: `
12053
+ <ng-container kendoTimelineLocalizedMessages
12054
+ i18n-previous="kendo.timeline.previous|The title of the previous button in horizontal orientation."
12055
+ previous="previous"
12056
+ >
12057
+ </ng-container>
12058
+ <ng-container kendoTimelineLocalizedMessages
12059
+ i18n-next="kendo.timeline.next|The title of the next button in horizontal orientation."
12060
+ next="next"
12061
+ >
12062
+ </ng-container>
12063
+ <kendo-timeline-vertical
12064
+ *ngIf="orientation === 'vertical'"
12065
+ [events]="events"
12066
+ [alterMode]="alterMode"
12067
+ [collapsibleEvents]="collapsibleEvents"
12068
+ [navigable]="navigable"
12069
+ [showDateLabels]="showDateLabels"
12070
+ [animationDuration]="animationDuration"
12071
+ [eventWidth]="eventWidth"
12072
+ [dateFormat]="dateFormat"
12073
+ [headerTemplate]="headerTemplate"
12074
+ [bodyTemplate]="bodyTemplate"
12075
+ [actionsTemplate]="actionsTemplate"
12076
+ >
12077
+ </kendo-timeline-vertical>
12078
+ <kendo-timeline-horizontal
12079
+ *ngIf="orientation === 'horizontal'"
12080
+ [events]="events"
12081
+ [collapsibleEvents]="false"
12082
+ [navigable]="navigable"
12083
+ [showDateLabels]="showDateLabels"
12084
+ [animationDuration]="animationDuration"
12085
+ [eventHeight]="eventHeight"
12086
+ [dateFormat]="dateFormat"
12087
+ [headerTemplate]="headerTemplate"
12088
+ [bodyTemplate]="bodyTemplate"
12089
+ [actionsTemplate]="actionsTemplate"
12090
+ >
12091
+ </kendo-timeline-horizontal>
12092
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TimelineVerticalComponent, selector: "kendo-timeline-vertical", inputs: ["events", "alterMode", "collapsibleEvents", "navigable", "showDateLabels", "animationDuration", "eventWidth", "dateFormat", "headerTemplate", "bodyTemplate", "actionsTemplate"], exportAs: ["kendoTimelineVertical"] }, { kind: "component", type: TimelineHorizontalComponent, selector: "kendo-timeline-horizontal", inputs: ["events", "alterMode", "collapsibleEvents", "navigable", "showDateLabels", "animationDuration", "eventHeight", "dateFormat", "headerTemplate", "bodyTemplate", "actionsTemplate"], exportAs: ["kendoTimelineHorizontal"] }, { kind: "directive", type: LocalizedTimelineMessagesDirective, selector: "[kendoTimelineLocalizedMessages]" }] });
12093
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineComponent, decorators: [{
12094
+ type: Component,
12095
+ args: [{
12096
+ providers: [
12097
+ TimelineService,
12098
+ LocalizationService,
12099
+ {
12100
+ provide: L10N_PREFIX,
12101
+ useValue: 'kendo.timeline'
12102
+ }
12103
+ ],
12104
+ exportAs: 'kendoTimeline',
12105
+ selector: 'kendo-timeline',
12106
+ template: `
12107
+ <ng-container kendoTimelineLocalizedMessages
12108
+ i18n-previous="kendo.timeline.previous|The title of the previous button in horizontal orientation."
12109
+ previous="previous"
12110
+ >
12111
+ </ng-container>
12112
+ <ng-container kendoTimelineLocalizedMessages
12113
+ i18n-next="kendo.timeline.next|The title of the next button in horizontal orientation."
12114
+ next="next"
12115
+ >
12116
+ </ng-container>
12117
+ <kendo-timeline-vertical
12118
+ *ngIf="orientation === 'vertical'"
12119
+ [events]="events"
12120
+ [alterMode]="alterMode"
12121
+ [collapsibleEvents]="collapsibleEvents"
12122
+ [navigable]="navigable"
12123
+ [showDateLabels]="showDateLabels"
12124
+ [animationDuration]="animationDuration"
12125
+ [eventWidth]="eventWidth"
12126
+ [dateFormat]="dateFormat"
12127
+ [headerTemplate]="headerTemplate"
12128
+ [bodyTemplate]="bodyTemplate"
12129
+ [actionsTemplate]="actionsTemplate"
12130
+ >
12131
+ </kendo-timeline-vertical>
12132
+ <kendo-timeline-horizontal
12133
+ *ngIf="orientation === 'horizontal'"
12134
+ [events]="events"
12135
+ [collapsibleEvents]="false"
12136
+ [navigable]="navigable"
12137
+ [showDateLabels]="showDateLabels"
12138
+ [animationDuration]="animationDuration"
12139
+ [eventHeight]="eventHeight"
12140
+ [dateFormat]="dateFormat"
12141
+ [headerTemplate]="headerTemplate"
12142
+ [bodyTemplate]="bodyTemplate"
12143
+ [actionsTemplate]="actionsTemplate"
12144
+ >
12145
+ </kendo-timeline-horizontal>
12146
+ `,
12147
+ }]
12148
+ }], ctorParameters: function () { return [{ type: TimelineService }]; }, propDecorators: { events: [{
12149
+ type: Input
12150
+ }], modelFields: [{
12151
+ type: Input
12152
+ }], orientation: [{
12153
+ type: Input
12154
+ }], alterMode: [{
12155
+ type: Input
12156
+ }], collapsibleEvents: [{
12157
+ type: Input
12158
+ }], navigable: [{
12159
+ type: Input
12160
+ }], showDateLabels: [{
12161
+ type: Input
12162
+ }], animation: [{
12163
+ type: Input
12164
+ }], eventWidth: [{
12165
+ type: Input
12166
+ }], eventHeight: [{
12167
+ type: Input
12168
+ }], dateFormat: [{
12169
+ type: Input
12170
+ }], hostClass: [{
12171
+ type: HostBinding,
12172
+ args: ['class.k-timeline']
12173
+ }], verticalClass: [{
12174
+ type: HostBinding,
12175
+ args: ['class.k-timeline-vertical']
12176
+ }], horizontalClass: [{
12177
+ type: HostBinding,
12178
+ args: ['class.k-timeline-horizontal']
12179
+ }], alternatingClass: [{
12180
+ type: HostBinding,
12181
+ args: ['class.k-timeline-alternating']
12182
+ }], collapsibleClass: [{
12183
+ type: HostBinding,
12184
+ args: ['class.k-timeline-collapsible']
12185
+ }], timelineHorizontal: [{
12186
+ type: ViewChild,
12187
+ args: [TimelineHorizontalComponent]
12188
+ }], timelineVertical: [{
12189
+ type: ViewChild,
12190
+ args: [TimelineVerticalComponent]
12191
+ }], cardHeaderTemplate: [{
12192
+ type: ContentChildren,
12193
+ args: [TimelineCardHeaderTemplateDirective, { descendants: false }]
12194
+ }], cardBodyTemplate: [{
12195
+ type: ContentChildren,
12196
+ args: [TimelineCardBodyTemplateDirective, { descendants: false }]
12197
+ }], cardActionsTemplate: [{
12198
+ type: ContentChildren,
12199
+ args: [TimelineCardActionsTemplateDirective, { descendants: false }]
12200
+ }], onToggle: [{
12201
+ type: Output
12202
+ }], onActionClick: [{
12203
+ type: Output
12204
+ }], onNavigate: [{
12205
+ type: Output
12206
+ }] } });
12207
+
12208
+ /**
12209
+ * Custom component messages override default component messages.
12210
+ */
12211
+ class TimelineCustomMessagesComponent extends TimelineMessages {
12212
+ constructor(service) {
12213
+ super();
12214
+ this.service = service;
12215
+ }
12216
+ get override() {
12217
+ return true;
12218
+ }
12219
+ }
12220
+ TimelineCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
12221
+ TimelineCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TimelineCustomMessagesComponent, selector: "kendo-timeline-messages", providers: [
12222
+ {
12223
+ provide: TimelineMessages,
12224
+ useExisting: forwardRef(() => TimelineCustomMessagesComponent),
12225
+ },
12226
+ ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
12227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineCustomMessagesComponent, decorators: [{
12228
+ type: Component,
12229
+ args: [{
12230
+ providers: [
12231
+ {
12232
+ provide: TimelineMessages,
12233
+ useExisting: forwardRef(() => TimelineCustomMessagesComponent),
12234
+ },
12235
+ ],
12236
+ selector: 'kendo-timeline-messages',
12237
+ template: ``,
12238
+ }]
12239
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
12240
+
12241
+ const exportedModules = [
12242
+ TimelineComponent,
12243
+ TimelineCustomMessagesComponent,
12244
+ TimelineCardHeaderTemplateDirective,
12245
+ TimelineCardBodyTemplateDirective,
12246
+ TimelineCardActionsTemplateDirective
12247
+ ];
12248
+ const declarations = [
12249
+ ...exportedModules,
12250
+ TimelineVerticalComponent,
12251
+ TimelineHorizontalComponent,
12252
+ TimelineCardComponent,
12253
+ LocalizedTimelineMessagesDirective,
12254
+ ];
12255
+ /**
12256
+ * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
12257
+ * definition for the Timeline component.
12258
+ *
12259
+ * The module registers:
12260
+ * - `TimelineComponent`&mdash;The `TimelineComponent` component class.
12261
+ */
12262
+ class TimelineModule {
12263
+ }
12264
+ TimelineModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12265
+ TimelineModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: TimelineModule, declarations: [TimelineComponent,
12266
+ TimelineCustomMessagesComponent,
12267
+ TimelineCardHeaderTemplateDirective,
12268
+ TimelineCardBodyTemplateDirective,
12269
+ TimelineCardActionsTemplateDirective, TimelineVerticalComponent,
12270
+ TimelineHorizontalComponent,
12271
+ TimelineCardComponent,
12272
+ LocalizedTimelineMessagesDirective], imports: [CommonModule, CardModule, ButtonModule, IconsModule, IntlModule], exports: [TimelineComponent,
12273
+ TimelineCustomMessagesComponent,
12274
+ TimelineCardHeaderTemplateDirective,
12275
+ TimelineCardBodyTemplateDirective,
12276
+ TimelineCardActionsTemplateDirective] });
12277
+ TimelineModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineModule, imports: [CommonModule, CardModule, ButtonModule, IconsModule, IntlModule] });
12278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TimelineModule, decorators: [{
12279
+ type: NgModule,
12280
+ args: [{
12281
+ declarations: [declarations],
12282
+ exports: [exportedModules],
12283
+ imports: [CommonModule, CardModule, ButtonModule, IconsModule, IntlModule]
12284
+ }]
12285
+ }] });
12286
+
10384
12287
  /**
10385
12288
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
10386
12289
  * definition for the Layout components.
@@ -10425,7 +12328,8 @@ LayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
10425
12328
  TabStripModule,
10426
12329
  TileLayoutModule,
10427
12330
  StackLayoutModule,
10428
- GridLayoutModule] });
12331
+ GridLayoutModule,
12332
+ TimelineModule] });
10429
12333
  LayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LayoutModule, imports: [AvatarModule,
10430
12334
  CardModule,
10431
12335
  DrawerModule,
@@ -10436,7 +12340,8 @@ LayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
10436
12340
  TabStripModule,
10437
12341
  TileLayoutModule,
10438
12342
  StackLayoutModule,
10439
- GridLayoutModule] });
12343
+ GridLayoutModule,
12344
+ TimelineModule] });
10440
12345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LayoutModule, decorators: [{
10441
12346
  type: NgModule,
10442
12347
  args: [{
@@ -10451,7 +12356,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
10451
12356
  TabStripModule,
10452
12357
  TileLayoutModule,
10453
12358
  StackLayoutModule,
10454
- GridLayoutModule
12359
+ GridLayoutModule,
12360
+ TimelineModule,
10455
12361
  ]
10456
12362
  }]
10457
12363
  }] });
@@ -10460,5 +12366,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
10460
12366
  * Generated bundle index. Do not edit.
10461
12367
  */
10462
12368
 
10463
- export { AvatarComponent, AvatarCustomMessagesComponent, AvatarModule, CardAction, CardActionsComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CardMediaDirective, CardModule, CardSeparatorDirective, CardSubtitleDirective, CardTitleDirective, DrawerComponent, DrawerContainerComponent, DrawerContentComponent, DrawerFooterTemplateDirective, DrawerHeaderTemplateDirective, DrawerItemTemplateDirective, DrawerModule, DrawerSelectEvent, DrawerTemplateDirective, ExpansionPanelActionEvent, ExpansionPanelComponent, ExpansionPanelModule, ExpansionPanelTitleDirective, GridLayoutComponent, GridLayoutItemComponent, GridLayoutModule, LayoutModule, LocalizedAvatarMessagesDirective, LocalizedStepperMessagesDirective, LocalizedTabStripMessagesDirective, PanelBarCollapseEvent, PanelBarComponent, PanelBarContentDirective, PanelBarExpandEvent, PanelBarExpandMode, PanelBarItemClickEvent, PanelBarItemComponent, PanelBarItemTemplateDirective, PanelBarItemTitleDirective, PanelBarModule, PanelBarSelectEvent, PanelBarStateChangeEvent, SelectEvent, SplitterComponent, SplitterModule, SplitterPaneComponent, StackLayoutComponent, StackLayoutModule, StepperActivateEvent, StepperComponent, StepperCustomMessagesComponent, StepperIndicatorTemplateDirective, StepperLabelTemplateDirective, StepperModule, StepperStepTemplateDirective, TabCloseEvent, TabComponent, TabContentDirective, TabStripComponent, TabStripCustomMessagesComponent, TabStripModule, TabStripTabComponent, TabTemplateDirective, TabTitleDirective, TileLayoutComponent, TileLayoutItemBodyComponent, TileLayoutItemComponent, TileLayoutItemHeaderComponent, TileLayoutModule, TileLayoutReorderEvent, TileLayoutResizeEvent, TileLayoutResizeHandleDirective };
12369
+ export { AvatarComponent, AvatarCustomMessagesComponent, AvatarModule, CardAction, CardActionsComponent, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CardMediaDirective, CardModule, CardSeparatorDirective, CardSubtitleDirective, CardTitleDirective, DrawerComponent, DrawerContainerComponent, DrawerContentComponent, DrawerFooterTemplateDirective, DrawerHeaderTemplateDirective, DrawerItemTemplateDirective, DrawerModule, DrawerSelectEvent, DrawerTemplateDirective, ExpansionPanelActionEvent, ExpansionPanelComponent, ExpansionPanelModule, ExpansionPanelTitleDirective, GridLayoutComponent, GridLayoutItemComponent, GridLayoutModule, LayoutModule, LocalizedAvatarMessagesDirective, LocalizedStepperMessagesDirective, LocalizedTabStripMessagesDirective, PanelBarCollapseEvent, PanelBarComponent, PanelBarContentDirective, PanelBarExpandEvent, PanelBarExpandMode, PanelBarItemClickEvent, PanelBarItemComponent, PanelBarItemTemplateDirective, PanelBarItemTitleDirective, PanelBarModule, PanelBarSelectEvent, PanelBarStateChangeEvent, SelectEvent, SplitterComponent, SplitterModule, SplitterPaneComponent, StackLayoutComponent, StackLayoutModule, StepperActivateEvent, StepperComponent, StepperCustomMessagesComponent, StepperIndicatorTemplateDirective, StepperLabelTemplateDirective, StepperModule, StepperStepTemplateDirective, TabCloseEvent, TabComponent, TabContentDirective, TabStripComponent, TabStripCustomMessagesComponent, TabStripModule, TabStripTabComponent, TabTemplateDirective, TabTitleDirective, TileLayoutComponent, TileLayoutItemBodyComponent, TileLayoutItemComponent, TileLayoutItemHeaderComponent, TileLayoutModule, TileLayoutReorderEvent, TileLayoutResizeEvent, TileLayoutResizeHandleDirective, TimelineCardActionsTemplateDirective, TimelineCardBodyTemplateDirective, TimelineCardHeaderTemplateDirective, TimelineComponent, TimelineCustomMessagesComponent, TimelineModule };
10464
12370