@frxjs/ngx-timeline 17.0.1 → 17.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  The main goal of this angular library is to give you the possibility to integrate a timeline in your app.
4
4
  <br/>
5
- Version 17.0.0 is compatible with angular 17.
5
+ Version 17.0.3 is compatible with angular 17.
6
6
  <br/>
7
- Go [here](https://emanuelefricano93.github.io/frxjs-Ngx-Timeline/) and discover all possible configurations for the timeline
7
+ Go [here](https://emanuelefricano93.github.io/frxjs-Ngx-Timeline/) and discover all possible configurations for the timeline
8
8
 
9
9
  ![image](https://user-images.githubusercontent.com/26500344/130092921-8338496a-31df-46fa-b75f-40989eb53d33.png)
10
10
  <p align = "center">
@@ -43,7 +43,7 @@ langCode | language code use to format dates
43
43
  enableAnimation | Boolean used to enable or disable the animations | no | boolean | true
44
44
  reverseOrder | Boolean used to reverse sort order (default older first) | no | boolean | false
45
45
  groupEvent | Logic to be applied in order to group events | no | enum NgxTimelineEventGroup | NgxTimelineEventGroup.MONTH_YEAR
46
- changeSideInGroup | Logic to be applied in order to put evetns on LEFT or RIGHT | no | enum NgxTimelineEventChangeSideInGroup | NgxTimelineEventChangeSideInGroup.ON_DIFFERENT_DAY
46
+ changeSide | Logic to be applied in order to put evetns on LEFT or RIGHT | no | enum NgxTimelineEventChangeSide | NgxTimelineEventChangeSide.ON_DIFFERENT_DAY_IN_GROUP
47
47
  periodCustomTemplate | Custom Template displayed before a group of events | no | TemplateRef<any> | no default
48
48
  eventCustomTemplate | Custom Template displayed to show a single event | no | TemplateRef<any> | no default
49
49
  centerIconCustomTemplate | Custom Template displayed to show an separator icon | no | TemplateRef<any> | no default
@@ -75,15 +75,16 @@ enum NgxTimelineEventGroup {
75
75
  }
76
76
  ```
77
77
  ```typescript
78
- enum NgxTimelineEventChangeSideInGroup {
78
+ enum NgxTimelineEventChangeSide {
79
79
  ALL = 'ALL',
80
- ON_DIFFERENT_HMS = 'ON_DIFFERENT_HMS',
81
- ON_DIFFERENT_DAY = 'ON_DIFFERENT_DAY',
82
- ON_DIFFERENT_MONTH = 'ON_DIFFERENT_MONTH'
80
+ ALL_IN_GROUP = 'ALL_IN_GROUP',
81
+ ON_DIFFERENT_DAY_IN_GROUP = 'ON_DIFFERENT_DAY_IN_GROUP',
82
+ ON_DIFFERENT_HMS_IN_GROUP = 'ON_DIFFERENT_HMS_IN_GROUP',
83
+ ON_DIFFERENT_MONTH_IN_GROUP = 'ON_DIFFERENT_MONTH_IN_GROUP'
83
84
  }
84
85
  ```
85
86
  <br/>
86
-
87
+
87
88
  ### Examples with contexts of custom templates
88
89
  ```html
89
90
  <ng-template #periodCustomTemplate let-period=period let-index=index let-event=event>
@@ -125,7 +126,7 @@ enum NgxTimelineEventChangeSideInGroup {
125
126
  </ng-template>
126
127
  ```
127
128
  <br/><br/>
128
-
129
+
129
130
  ## How to contribute
130
131
  First of all, in order to track everything, open an issue describing the problem or a missing functionality you would like to add to the lib.
131
132
 
@@ -1,5 +1,5 @@
1
- import { Component, Input, Output } from '@angular/core';
2
- import { NgxTimelineItemPosition, NgxDateFormat, NgxTimelineEventGroup, NgxTimelineEventChangeSideInGroup, periodKeyDateFormat, fieldsToCheckEventChangeSideInGroup, fieldsToAddEventGroup } from '../models';
1
+ import { Component, Input, Output, IterableDiffers, inject } from '@angular/core';
2
+ import { NgxTimelineItemPosition, NgxDateFormat, NgxTimelineEventGroup, NgxTimelineEventChangeSide, periodKeyDateFormat, fieldsToCheckEventChangeSideInGroup as fieldsToCheckEventChangeSide, fieldsToAddEventGroup } from '../models';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
@@ -22,7 +22,7 @@ export class NgxTimelineComponent {
22
22
  /**
23
23
  * Logic to be applied in order to put evetns on LEFT or RIGHT
24
24
  */
25
- this.changeSideInGroup = NgxTimelineEventChangeSideInGroup.ON_DIFFERENT_DAY;
25
+ this.changeSide = NgxTimelineEventChangeSide.ON_DIFFERENT_DAY_IN_GROUP;
26
26
  /**
27
27
  * Output click event emitter
28
28
  */
@@ -32,13 +32,23 @@ export class NgxTimelineComponent {
32
32
  this.items = [];
33
33
  this.ngxTimelineItemPosition = NgxTimelineItemPosition;
34
34
  this.ngxDateFormat = NgxDateFormat;
35
+ this.differs = inject(IterableDiffers);
36
+ this.iterableDiffer = this.differs.find([]).create();
35
37
  this.separator = '/';
36
38
  }
37
39
  ngOnInit() {
38
40
  this.groupEvents(this.events);
39
41
  }
40
- ngOnChanges(changes) {
42
+ ngOnChanges() {
41
43
  this.groupEvents(this.events);
44
+ console.log('ngOnChanges');
45
+ }
46
+ ngDoCheck() {
47
+ console.log('ngDoCheck');
48
+ const changes = this.iterableDiffer.diff(this.events);
49
+ if (changes) {
50
+ this.groupEvents(this.events);
51
+ }
42
52
  }
43
53
  getPeriodKeyDateFormat() {
44
54
  return periodKeyDateFormat[this.groupEvent];
@@ -77,14 +87,18 @@ export class NgxTimelineComponent {
77
87
  });
78
88
  }
79
89
  setItems() {
90
+ let isLastItemOnLeft = false;
80
91
  this.periods.forEach((p) => {
81
92
  // insert first the period
82
93
  this.items.push(p);
83
94
  // in each period putting items on left
84
- const onLeft = true;
95
+ let onLeft = true;
96
+ if (this.changeSide === NgxTimelineEventChangeSide.ALL) {
97
+ onLeft = !isLastItemOnLeft;
98
+ }
85
99
  const periodInfo = p.periodInfo;
86
100
  // insert then all the events in this period
87
- this.addPeriodEvents(periodInfo, onLeft);
101
+ isLastItemOnLeft = this.addPeriodEvents(periodInfo, onLeft);
88
102
  // onLeft = this.addEventItemsAndGetIfOnLeft(periodInfo, onLeft);
89
103
  });
90
104
  }
@@ -99,7 +113,7 @@ export class NgxTimelineComponent {
99
113
  }
100
114
  this.pushEventOnItems(event, onLeft);
101
115
  });
102
- // return onLeft;
116
+ return onLeft;
103
117
  }
104
118
  pushEventOnItems(event, onLeft) {
105
119
  this.items.push({
@@ -111,8 +125,8 @@ export class NgxTimelineComponent {
111
125
  * Compare the events inside the same group
112
126
  */
113
127
  compareEvents(prevEvent, event) {
114
- return this.changeSideInGroup === NgxTimelineEventChangeSideInGroup.ALL ||
115
- this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSideInGroup[this.changeSideInGroup]);
128
+ return this.shouldChangeEventsInPeriod() ||
129
+ this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSide[this.changeSide]);
116
130
  }
117
131
  compareEventsField(prevEvent, event, ...fields) {
118
132
  return fields.reduce((res, field) => res = res || prevEvent.timestamp[field]() !== event.timestamp[field](), !!false);
@@ -132,16 +146,19 @@ export class NgxTimelineComponent {
132
146
  },
133
147
  };
134
148
  }
149
+ shouldChangeEventsInPeriod() {
150
+ return [NgxTimelineEventChangeSide.ALL_IN_GROUP, NgxTimelineEventChangeSide.ALL].indexOf(this.changeSide) != -1;
151
+ }
135
152
  getPeriodKeyFromEvent(event) {
136
153
  return fieldsToAddEventGroup[this.groupEvent].map((field) => event.timestamp[field]()).join(this.separator);
137
154
  }
138
155
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: NgxTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: NgxTimelineComponent, selector: "ngx-timeline", inputs: { events: "events", langCode: "langCode", enableAnimation: "enableAnimation", reverseOrder: "reverseOrder", groupEvent: "groupEvent", changeSideInGroup: "changeSideInGroup", periodCustomTemplate: "periodCustomTemplate", eventCustomTemplate: "eventCustomTemplate", centerIconCustomTemplate: "centerIconCustomTemplate", dateInstantCustomTemplate: "dateInstantCustomTemplate", innerEventCustomTemplate: "innerEventCustomTemplate" }, outputs: { clickEmitter: "clickEmitter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n", styles: [".main-container{display:flex;justify-content:center;width:100%}.items-container{padding:1rem 0;min-width:max(20rem,100%)}.row{display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column;justify-content:center}.col-left{align-items:flex-end;padding:0;flex:49 49 0}.col-right{align-items:flex-start;padding:0;flex:49 49 0}.col-center{min-height:6rem;padding:0;flex:2 2 0}.center-inner{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%}.center-inner .line{min-height:50%;max-height:50%;height:50%;background:#464646;width:.1rem}.center-inner .line.transparent{background:transparent}.period-container{background:orange;color:#fff;margin:0;padding:.2rem .5rem}.period-container .period-inner-container{width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{padding:.8rem 0;display:flex;justify-content:center;align-items:center;position:relative;height:10px;width:10px;background:white}.center-icon-container .icon{height:1rem;width:1rem;border-radius:50%;background:orange;margin:0;position:absolute}.event-outer-container{margin:0 .5rem;width:100%}.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.hour.right{justify-content:flex-start}.hour.left{justify-content:flex-end}.hour .hour-inner-container{margin:0}.desktop{display:flex!important}.mobile{display:none!important}@media (max-width: 900px){.desktop{display:none!important}.mobile{display:flex!important}.event-outer-container{margin:.5rem .3rem}.col-left{align-items:flex-start}.col-left .hour{font-size:12px;padding:0;margin-right:.3rem}.col-left.col-period{flex:18 18 0}.col-left.col-event{flex:18 18 0;padding:0;align-items:flex-end}.col-right{align-items:flex-start}.col-right.col-period{flex:77 77 0}.col-right.col-event{flex:77 77 0;padding:0}.col-center{min-height:6rem;justify-content:center;margin:0}.col-center.col-period{flex:5 5 0;min-height:3rem}.col-center.col-event{flex:5 5 0}.center-inner{align-items:center}.period-container{min-height:20%;height:20%;max-height:20%;background:transparent;display:flex;justify-content:center;align-items:center;border-radius:6px}.period-container .period-inner-container{position:absolute;background:orange;color:#fff;width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{align-items:center;justify-content:center}.center-icon-container .icon{height:1rem;width:1rem;position:absolute}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.NgxTimelineEventComponent, selector: "ngx-timeline-event", inputs: ["event", "colSidePosition", "langCode", "innerEventCustomTemplate", "enableAnimation"], outputs: ["clickEmitter"] }, { kind: "pipe", type: i3.NgxDatePipe, name: "ngxdate" }] }); }
156
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: NgxTimelineComponent, selector: "ngx-timeline", inputs: { events: "events", langCode: "langCode", enableAnimation: "enableAnimation", reverseOrder: "reverseOrder", groupEvent: "groupEvent", changeSide: "changeSide", periodCustomTemplate: "periodCustomTemplate", eventCustomTemplate: "eventCustomTemplate", centerIconCustomTemplate: "centerIconCustomTemplate", dateInstantCustomTemplate: "dateInstantCustomTemplate", innerEventCustomTemplate: "innerEventCustomTemplate" }, outputs: { clickEmitter: "clickEmitter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n", styles: [".main-container{display:flex;justify-content:center;width:100%}.items-container{padding:1rem 0;min-width:max(20rem,100%)}.row{display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column;justify-content:center}.col-left{align-items:flex-end;padding:0;flex:49 49 0}.col-right{align-items:flex-start;padding:0;flex:49 49 0}.col-center{min-height:6rem;padding:0;flex:2 2 0}.center-inner{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%}.center-inner .line{min-height:50%;max-height:50%;height:50%;background:#464646;width:.1rem}.center-inner .line.transparent{background:transparent}.period-container{background:orange;color:#fff;margin:0;padding:.2rem .5rem}.period-container .period-inner-container{width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{padding:.8rem 0;display:flex;justify-content:center;align-items:center;position:relative;height:10px;width:10px;background:white}.center-icon-container .icon{height:1rem;width:1rem;border-radius:50%;background:orange;margin:0;position:absolute}.event-outer-container{margin:0 .5rem;width:100%}.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.hour.right{justify-content:flex-start}.hour.left{justify-content:flex-end}.hour .hour-inner-container{margin:0}.desktop{display:flex!important}.mobile{display:none!important}@media (max-width: 900px){.desktop{display:none!important}.mobile{display:flex!important}.event-outer-container{margin:.5rem .3rem}.col-left{align-items:flex-start}.col-left .hour{font-size:12px;padding:0;margin-right:.3rem}.col-left.col-period{flex:18 18 0}.col-left.col-event{flex:18 18 0;padding:0;align-items:flex-end}.col-right{align-items:flex-start}.col-right.col-period{flex:77 77 0}.col-right.col-event{flex:77 77 0;padding:0}.col-center{min-height:6rem;justify-content:center;margin:0}.col-center.col-period{flex:5 5 0;min-height:3rem}.col-center.col-event{flex:5 5 0}.center-inner{align-items:center}.period-container{min-height:20%;height:20%;max-height:20%;background:transparent;display:flex;justify-content:center;align-items:center;border-radius:6px}.period-container .period-inner-container{position:absolute;background:orange;color:#fff;width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{align-items:center;justify-content:center}.center-icon-container .icon{height:1rem;width:1rem;position:absolute}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.NgxTimelineEventComponent, selector: "ngx-timeline-event", inputs: ["event", "colSidePosition", "langCode", "innerEventCustomTemplate", "enableAnimation"], outputs: ["clickEmitter"] }, { kind: "pipe", type: i3.NgxDatePipe, name: "ngxdate" }] }); }
140
157
  }
141
158
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: NgxTimelineComponent, decorators: [{
142
159
  type: Component,
143
160
  args: [{ selector: 'ngx-timeline', template: "<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n", styles: [".main-container{display:flex;justify-content:center;width:100%}.items-container{padding:1rem 0;min-width:max(20rem,100%)}.row{display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column;justify-content:center}.col-left{align-items:flex-end;padding:0;flex:49 49 0}.col-right{align-items:flex-start;padding:0;flex:49 49 0}.col-center{min-height:6rem;padding:0;flex:2 2 0}.center-inner{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%}.center-inner .line{min-height:50%;max-height:50%;height:50%;background:#464646;width:.1rem}.center-inner .line.transparent{background:transparent}.period-container{background:orange;color:#fff;margin:0;padding:.2rem .5rem}.period-container .period-inner-container{width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{padding:.8rem 0;display:flex;justify-content:center;align-items:center;position:relative;height:10px;width:10px;background:white}.center-icon-container .icon{height:1rem;width:1rem;border-radius:50%;background:orange;margin:0;position:absolute}.event-outer-container{margin:0 .5rem;width:100%}.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.hour.right{justify-content:flex-start}.hour.left{justify-content:flex-end}.hour .hour-inner-container{margin:0}.desktop{display:flex!important}.mobile{display:none!important}@media (max-width: 900px){.desktop{display:none!important}.mobile{display:flex!important}.event-outer-container{margin:.5rem .3rem}.col-left{align-items:flex-start}.col-left .hour{font-size:12px;padding:0;margin-right:.3rem}.col-left.col-period{flex:18 18 0}.col-left.col-event{flex:18 18 0;padding:0;align-items:flex-end}.col-right{align-items:flex-start}.col-right.col-period{flex:77 77 0}.col-right.col-event{flex:77 77 0;padding:0}.col-center{min-height:6rem;justify-content:center;margin:0}.col-center.col-period{flex:5 5 0;min-height:3rem}.col-center.col-event{flex:5 5 0}.center-inner{align-items:center}.period-container{min-height:20%;height:20%;max-height:20%;background:transparent;display:flex;justify-content:center;align-items:center;border-radius:6px}.period-container .period-inner-container{position:absolute;background:orange;color:#fff;width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{align-items:center;justify-content:center}.center-icon-container .icon{height:1rem;width:1rem;position:absolute}}\n"] }]
144
- }], ctorParameters: () => [], propDecorators: { events: [{
161
+ }], propDecorators: { events: [{
145
162
  type: Input
146
163
  }], langCode: [{
147
164
  type: Input
@@ -151,7 +168,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
151
168
  type: Input
152
169
  }], groupEvent: [{
153
170
  type: Input
154
- }], changeSideInGroup: [{
171
+ }], changeSide: [{
155
172
  type: Input
156
173
  }], periodCustomTemplate: [{
157
174
  type: Input
@@ -166,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
166
183
  }], clickEmitter: [{
167
184
  type: Output
168
185
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVsaW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUF5QyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGlDQUFpQyxFQUNqQyxtQkFBbUIsRUFDbkIsbUNBQW1DLEVBQ25DLHFCQUFxQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBT3JDLE1BQU0sT0FBTyxvQkFBb0I7SUEyRC9CO1FBbERBOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEM7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUM5Qjs7V0FFRztRQUNNLGVBQVUsR0FBMkIscUJBQXFCLENBQUMsVUFBVSxDQUFDO1FBQy9FOztXQUVHO1FBQ00sc0JBQWlCLEdBQXVDLGlDQUFpQyxDQUFDLGdCQUFnQixDQUFDO1FBcUJwSDs7V0FFRztRQUVELGlCQUFZLEdBQXFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdFLFdBQU0sR0FBMEMsRUFBRSxDQUFDO1FBQ25ELFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ2hDLFVBQUssR0FBc0IsRUFBRSxDQUFDO1FBQzlCLDRCQUF1QixHQUFHLHVCQUF1QixDQUFDO1FBQ2xELGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBRWIsY0FBUyxHQUFHLEdBQUcsQ0FBQztJQUVsQixDQUFDO0lBR2hCLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLEtBQUs7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRVMsV0FBVyxDQUFDLE1BQTBCO1FBQzlDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVTLFVBQVUsQ0FBQyxNQUEwQjtRQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFBQSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRVMsbUJBQW1CLENBQUMsTUFBMEI7UUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLHdDQUF3QztZQUN4QyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFDckU7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxRQUFRO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekIsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLHVDQUF1QztZQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUNoQyw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekMsaUVBQWlFO1FBQ25FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGVBQWUsQ0FBQyxVQUFpQyxFQUFFLE1BQWU7UUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssdUJBQXVCLENBQUMsT0FBTyxDQUFDO2FBQ3ZGO2lCQUFNLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDMUQsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNILGlCQUFpQjtJQUNuQixDQUFDO0lBRVMsZ0JBQWdCLENBQUMsS0FBdUIsRUFBRSxNQUFlO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2QsU0FBUyxFQUFFLEVBQUMsR0FBRyxLQUFLLEVBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRO1NBQy9FLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLGFBQWEsQ0FBQyxTQUEyQixFQUFFLEtBQXVCO1FBQzFFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLGlDQUFpQyxDQUFDLEdBQUc7WUFDckUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxTQUEyQixFQUFFLEtBQXVCLEVBQUUsR0FBRyxNQUFnQjtRQUNwRyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hILENBQUM7SUFFUywwQkFBMEIsQ0FBQyxTQUFpQixFQUFFLGVBQWlDO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBZSxFQUFFLFNBQWlCLEVBQUUsZUFBaUM7UUFDekYsT0FBTztZQUNMLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixTQUFTO2dCQUNULFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBaUI7YUFDN0M7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVTLHFCQUFxQixDQUFDLEtBQXVCO1FBQ3JELE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RyxDQUFDOzhHQTlLVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwwaUJDbkJqQyw4cUtBa0dBOzsyRkQvRWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7d0RBUWYsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUlHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFJRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBSUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUlHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFJRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBS0osWUFBWTtzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOZ3hUaW1lbGluZUV2ZW50LFxuICBOZ3hUaW1lbGluZUl0ZW0sXG4gIE5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLFxuICBOZ3hUaW1lbGluZVBlcmlvZEluZm8sXG4gIE5neERhdGVGb3JtYXQsXG4gIE5neFRpbWVsaW5lRXZlbnRHcm91cCxcbiAgTmd4VGltZWxpbmVFdmVudENoYW5nZVNpZGVJbkdyb3VwLFxuICBwZXJpb2RLZXlEYXRlRm9ybWF0LFxuICBmaWVsZHNUb0NoZWNrRXZlbnRDaGFuZ2VTaWRlSW5Hcm91cCxcbiAgZmllbGRzVG9BZGRFdmVudEdyb3VwfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdGltZWxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXRpbWVsaW5lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LXRpbWVsaW5lLnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4VGltZWxpbmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGV2ZW50cyB0byBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIGV2ZW50czogTmd4VGltZWxpbmVFdmVudFtdO1xuICAvKipcbiAgICogTGFuZ3VhZ2UgY29kZSB1c2VkIHRvIHNob3cgdGhlIGRhdGUgZm9ybWF0dGVkXG4gICAqL1xuICBASW5wdXQoKSBsYW5nQ29kZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEJvb2xlYW4gdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlQW5pbWF0aW9uID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEJvb2xlYW4gdXNlZCB0byByZXZlcnNlIHNvcnQgb3JkZXIgKGRlZmF1bHQgb2xkZXIgZmlyc3QpXG4gICAqL1xuICBASW5wdXQoKSByZXZlcnNlT3JkZXIgPSBmYWxzZTtcbiAgLyoqXG4gICAqIExvZ2ljIHRvIGJlIGFwcGxpZWQgaW4gb3JkZXIgdG8gZ3JvdXAgZXZlbnRzXG4gICAqL1xuICBASW5wdXQoKSBncm91cEV2ZW50PzogTmd4VGltZWxpbmVFdmVudEdyb3VwID0gTmd4VGltZWxpbmVFdmVudEdyb3VwLk1PTlRIX1lFQVI7XG4gIC8qKlxuICAgKiBMb2dpYyB0byBiZSBhcHBsaWVkIGluIG9yZGVyIHRvIHB1dCBldmV0bnMgb24gTEVGVCBvciBSSUdIVFxuICAgKi9cbiAgQElucHV0KCkgY2hhbmdlU2lkZUluR3JvdXA/OiBOZ3hUaW1lbGluZUV2ZW50Q2hhbmdlU2lkZUluR3JvdXAgPSBOZ3hUaW1lbGluZUV2ZW50Q2hhbmdlU2lkZUluR3JvdXAuT05fRElGRkVSRU5UX0RBWTtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZW1wbGF0ZSBkaXNwbGF5ZWQgYmVmb3JlIGEgZ3JvdXAgb2YgZXZlbnRzXG4gICAqL1xuICBASW5wdXQoKSBwZXJpb2RDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZW1wbGF0ZSBkaXNwbGF5ZWQgdG8gc2hvdyBhIHNpbmdsZSBldmVudFxuICAgKi9cbiAgQElucHV0KCkgZXZlbnRDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZW1wbGF0ZSBkaXNwbGF5ZWQgdG8gc2hvdyBhbiBzZXBhcmF0b3IgaWNvblxuICAgKi9cbiAgQElucHV0KCkgY2VudGVySWNvbkN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogQ3VzdG9tIFRlbXBsYXRlIGRpc3BsYXllZCB0byBzaG93IHRoZSBzaWRlIGRhdGVcbiAgICovXG4gIEBJbnB1dCgpIGRhdGVJbnN0YW50Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBDdXN0b20gVGVtcGxhdGUgZGlzcGxheWVkIHRvIHNob3cgdGhlIGlubmVyIGV2ZW50XG4gICAqL1xuICBASW5wdXQoKSBpbm5lckV2ZW50Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBPdXRwdXQgY2xpY2sgZXZlbnQgZW1pdHRlclxuICAgKi9cbiAgQE91dHB1dCgpXG4gICAgY2xpY2tFbWl0dGVyOiBCZWhhdmlvclN1YmplY3Q8Tmd4VGltZWxpbmVJdGVtPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgZ3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IE5neFRpbWVsaW5lRXZlbnRbXSB9ID0ge307XG4gIHBlcmlvZHM6IE5neFRpbWVsaW5lSXRlbVtdID0gW107XG4gIGl0ZW1zOiBOZ3hUaW1lbGluZUl0ZW1bXSA9IFtdO1xuICBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbiA9IE5neFRpbWVsaW5lSXRlbVBvc2l0aW9uO1xuICBuZ3hEYXRlRm9ybWF0ID0gTmd4RGF0ZUZvcm1hdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlcGFyYXRvciA9ICcvJztcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3VwRXZlbnRzKHRoaXMuZXZlbnRzKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3VwRXZlbnRzKHRoaXMuZXZlbnRzKTtcbiAgfVxuXG4gIGdldFBlcmlvZEtleURhdGVGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGVyaW9kS2V5RGF0ZUZvcm1hdFt0aGlzLmdyb3VwRXZlbnRdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzID0ge307XG4gICAgdGhpcy5wZXJpb2RzID0gW107XG4gICAgdGhpcy5pdGVtcyA9IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdyb3VwRXZlbnRzKGV2ZW50czogTmd4VGltZWxpbmVFdmVudFtdKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgdGhpcy5zb3J0RXZlbnRzKGV2ZW50cyk7XG4gICAgICB0aGlzLnNldEdyb3Vwc0FuZFBlcmlvZHMoZXZlbnRzKTtcbiAgICAgIHRoaXMuc2V0SXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydEV2ZW50cyhldmVudHM6IE5neFRpbWVsaW5lRXZlbnRbXSk6IHZvaWQge1xuICAgIGV2ZW50cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBhVGltZSA9IGEudGltZXN0YW1wLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJUaW1lID0gYi50aW1lc3RhbXAuZ2V0VGltZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZU9yZGVyID8gYlRpbWUgLSBhVGltZSA6IGFUaW1lIC0gYlRpbWU7fSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0R3JvdXBzQW5kUGVyaW9kcyhldmVudHM6IE5neFRpbWVsaW5lRXZlbnRbXSk6IHZvaWQge1xuICAgIHRoaXMucGVyaW9kcyA9IFtdO1xuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgLy8gY29udmVyc2lvbiBmcm9tIHN0cmluZyB0byBhY3R1YWwgRGF0ZVxuICAgICAgZXZlbnQudGltZXN0YW1wID0gbmV3IERhdGUoZXZlbnQudGltZXN0YW1wKTtcbiAgICAgIGNvbnN0IHBlcmlvZEtleSA9IHRoaXMuZ2V0UGVyaW9kS2V5RnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgIGlmICghdGhpcy5ncm91cHNbcGVyaW9kS2V5XSkge1xuICAgICAgICB0aGlzLmdyb3Vwc1twZXJpb2RLZXldID0gW107XG4gICAgICAgIHRoaXMucGVyaW9kcy5wdXNoKHRoaXMuZ2V0UGVyaW9kSW5mb0Zyb21QZXJpb2RLZXkocGVyaW9kS2V5LCBldmVudCkpXG4gICAgICB9XG4gICAgICB0aGlzLmdyb3Vwc1twZXJpb2RLZXldLnB1c2goZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMucGVyaW9kcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAvLyBpbnNlcnQgZmlyc3QgdGhlIHBlcmlvZFxuICAgICAgdGhpcy5pdGVtcy5wdXNoKHApO1xuICAgICAgLy8gaW4gZWFjaCBwZXJpb2QgcHV0dGluZyBpdGVtcyBvbiBsZWZ0XG4gICAgICBjb25zdCBvbkxlZnQgPSB0cnVlO1xuICAgICAgY29uc3QgcGVyaW9kSW5mbyA9IHAucGVyaW9kSW5mbztcbiAgICAgIC8vIGluc2VydCB0aGVuIGFsbCB0aGUgZXZlbnRzIGluIHRoaXMgcGVyaW9kXG4gICAgICB0aGlzLmFkZFBlcmlvZEV2ZW50cyhwZXJpb2RJbmZvLCBvbkxlZnQpO1xuICAgICAgLy8gb25MZWZ0ID0gdGhpcy5hZGRFdmVudEl0ZW1zQW5kR2V0SWZPbkxlZnQocGVyaW9kSW5mbywgb25MZWZ0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRQZXJpb2RFdmVudHMocGVyaW9kSW5mbzogTmd4VGltZWxpbmVQZXJpb2RJbmZvLCBvbkxlZnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmdyb3Vwc1twZXJpb2RJbmZvLnBlcmlvZEtleV0uZm9yRWFjaCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwcmV2RXZlbnQgPSB0aGlzLmdyb3Vwc1twZXJpb2RJbmZvLnBlcmlvZEtleV1baW5kZXggLSAxXTtcbiAgICAgIGlmIChldmVudC5pdGVtUG9zaXRpb24pIHtcbiAgICAgICAgb25MZWZ0ID0gZXZlbnQuaXRlbVBvc2l0aW9uICYmIGV2ZW50Lml0ZW1Qb3NpdGlvbiA9PT0gTmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fTEVGVDtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiAwICYmIHRoaXMuY29tcGFyZUV2ZW50cyhwcmV2RXZlbnQsIGV2ZW50KSkge1xuICAgICAgICAgIG9uTGVmdCA9ICFvbkxlZnQ7XG4gICAgICB9XG4gICAgICB0aGlzLnB1c2hFdmVudE9uSXRlbXMoZXZlbnQsIG9uTGVmdCk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIG9uTGVmdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXNoRXZlbnRPbkl0ZW1zKGV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50LCBvbkxlZnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zLnB1c2goe1xuICAgICAgZXZlbnRJbmZvOiB7Li4uZXZlbnR9LCBwb3NpdGlvbjogb25MZWZ0ID9cbiAgICAgICAgdGhpcy5uZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9MRUZUIDogdGhpcy5uZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHRoZSBldmVudHMgaW5zaWRlIHRoZSBzYW1lIGdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgY29tcGFyZUV2ZW50cyhwcmV2RXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQsIGV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlU2lkZUluR3JvdXAgPT09IE5neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlSW5Hcm91cC5BTEwgfHxcbiAgICAgIHRoaXMuY29tcGFyZUV2ZW50c0ZpZWxkKHByZXZFdmVudCwgZXZlbnQsIC4uLmZpZWxkc1RvQ2hlY2tFdmVudENoYW5nZVNpZGVJbkdyb3VwW3RoaXMuY2hhbmdlU2lkZUluR3JvdXBdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wYXJlRXZlbnRzRmllbGQocHJldkV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50LCBldmVudDogTmd4VGltZWxpbmVFdmVudCwgLi4uZmllbGRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChyZXMsIGZpZWxkKSA9PiByZXMgPSByZXMgfHwgcHJldkV2ZW50LnRpbWVzdGFtcFtmaWVsZF0oKSAhPT0gZXZlbnQudGltZXN0YW1wW2ZpZWxkXSgpLCAhIWZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQZXJpb2RJbmZvRnJvbVBlcmlvZEtleShwZXJpb2RLZXk6IHN0cmluZywgZmlyc3RHcm91cEV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50KTogeyBwZXJpb2RJbmZvOiBOZ3hUaW1lbGluZVBlcmlvZEluZm8gfSB7XG4gICAgICBjb25zdCBzcGxpdCA9IHBlcmlvZEtleS5zcGxpdCh0aGlzLnNlcGFyYXRvcik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQZXJpb2RJbmZvKHNwbGl0LCBwZXJpb2RLZXksIGZpcnN0R3JvdXBFdmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcmlvZEluZm8oc3BsaXQ6IHN0cmluZ1tdLCBwZXJpb2RLZXk6IHN0cmluZywgZmlyc3RHcm91cEV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50KTogeyBwZXJpb2RJbmZvOiBOZ3hUaW1lbGluZVBlcmlvZEluZm8gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcmlvZEluZm86IHtcbiAgICAgICAgeWVhcjogTnVtYmVyKHNwbGl0WzBdKSxcbiAgICAgICAgbW9udGg6IE51bWJlcihzcGxpdFsxXSksXG4gICAgICAgIGRheTogTnVtYmVyKHNwbGl0WzJdKSxcbiAgICAgICAgcGVyaW9kS2V5LFxuICAgICAgICBmaXJzdERhdGU6IGZpcnN0R3JvdXBFdmVudC50aW1lc3RhbXAgYXMgRGF0ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQZXJpb2RLZXlGcm9tRXZlbnQoZXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWVsZHNUb0FkZEV2ZW50R3JvdXBbdGhpcy5ncm91cEV2ZW50XS5tYXAoKGZpZWxkKSA9PiBldmVudC50aW1lc3RhbXBbZmllbGRdKCkpLmpvaW4odGhpcy5zZXBhcmF0b3IpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWFpbi1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiaXRlbXMtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaW5kZXggPSBpbmRleDtcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8IS0tIERFU0tUT1AgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLWxlZnQgZGVza3RvcFwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LW91dGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm8gJiYgaXRlbS5wb3NpdGlvbiA9PT0gbmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fTEVGVFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV2ZW50Q3VzdG9tVGVtcGxhdGUgfHwgZXZlbnRUZW1wbGF0ZTsgY29udGV4dDoge2V2ZW50OiBpdGVtLCBjb2xTaWRlUG9zaXRpb246IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdXIgbGVmdFwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm8gJiYgaXRlbS5wb3NpdGlvbiA9PT0gbmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fUklHSFRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlSW5zdGFudEN1c3RvbVRlbXBsYXRlIHx8IGRhdGVJbnN0YW50VGVtcGxhdGU7IGNvbnRleHQ6IHtpdGVtOiBpdGVtLmV2ZW50SW5mb31cIiA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtY2VudGVyIGRlc2t0b3BcIiBbbmdDbGFzc109XCJpdGVtLnBlcmlvZEluZm8gPyAnY29sLXBlcmlvZCcgOiAnY29sLWV2ZW50J1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItaW5uZXJcIiAqbmdJZj1cIml0ZW0ucGVyaW9kSW5mb1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcmlvZEN1c3RvbVRlbXBsYXRlIHx8IHBlcmlvZFRlbXBsYXRlOyBjb250ZXh0OiB7cGVyaW9kOiBpdGVtLnBlcmlvZEluZm8sIGluZGV4OiBpbmRleCwgZXZlbnQ6IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlci1pbm5lciBuby1wZXJpb2Qta2V5XCIgKm5nSWY9XCIhaXRlbS5wZXJpb2RJbmZvXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VudGVyTGluZXNJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHtldmVudDogaXRlbSwgaW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLXJpZ2h0IGRlc2t0b3BcIiBbbmdDbGFzc109XCJpdGVtLnBlcmlvZEluZm8gPyAnY29sLXBlcmlvZCcgOiAnY29sLWV2ZW50J1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1vdXRlci1jb250YWluZXJcIiAqbmdJZj1cIml0ZW0uZXZlbnRJbmZvICYmIGl0ZW0ucG9zaXRpb24gPT09IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hUXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXZlbnRDdXN0b21UZW1wbGF0ZSB8fCBldmVudFRlbXBsYXRlOyBjb250ZXh0OiB7ZXZlbnQ6IGl0ZW0sIGNvbFNpZGVQb3NpdGlvbjogbmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fUklHSFR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdXIgcmlnaHRcIiAqbmdJZj1cIml0ZW0uZXZlbnRJbmZvICYmIGl0ZW0ucG9zaXRpb24gPT09IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlSW5zdGFudEN1c3RvbVRlbXBsYXRlIHx8IGRhdGVJbnN0YW50VGVtcGxhdGU7IGNvbnRleHQ6IHtpdGVtOiBpdGVtLmV2ZW50SW5mb31cIiA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNT0JJTEUgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLWxlZnQgbW9iaWxlXCIgW25nQ2xhc3NdPVwiaXRlbS5wZXJpb2RJbmZvID8gJ2NvbC1wZXJpb2QnIDogJ2NvbC1ldmVudCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaG91ciBsZWZ0XCIgKm5nSWY9XCJpdGVtLmV2ZW50SW5mb1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5uZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlSW5zdGFudEN1c3RvbVRlbXBsYXRlIHx8IGRhdGVJbnN0YW50VGVtcGxhdGU7IGNvbnRleHQ6IHtpdGVtOiBpdGVtLmV2ZW50SW5mb31cIiA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1jZW50ZXIgbW9iaWxlXCIgW25nQ2xhc3NdPVwiaXRlbS5wZXJpb2RJbmZvID8gJ2NvbC1wZXJpb2QnIDogJ2NvbC1ldmVudCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWlubmVyXCIgKm5nSWY9XCJpdGVtLnBlcmlvZEluZm87XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXJpb2RDdXN0b21UZW1wbGF0ZSB8fCBwZXJpb2RUZW1wbGF0ZTsgY29udGV4dDoge3BlcmlvZDogaXRlbS5wZXJpb2RJbmZvLCBpbmRleDogaW5kZXgsIGV2ZW50OiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItaW5uZXIgbm8tcGVyaW9kLWtleVwiICpuZ0lmPVwiIWl0ZW0ucGVyaW9kSW5mbztcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJMaW5lc0ljb25UZW1wbGF0ZTsgY29udGV4dDoge2V2ZW50OiBpdGVtLCBpbmRleDogaW5kZXh9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtcmlnaHQgbW9iaWxlXCIgW25nQ2xhc3NdPVwiaXRlbS5wZXJpb2RJbmZvID8gJ2NvbC1wZXJpb2QnIDogJ2NvbC1ldmVudCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtb3V0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpdGVtLmV2ZW50SW5mb1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV2ZW50Q3VzdG9tVGVtcGxhdGUgfHwgZXZlbnRUZW1wbGF0ZTsgY29udGV4dDoge2V2ZW50OiBpdGVtLCBjb2xTaWRlUG9zaXRpb246IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hUfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI2NlbnRlckxpbmVzSWNvblRlbXBsYXRlIGxldC1pbmRleD1pbmRleCBsZXQtZXZlbnQ9ZXZlbnQ+XHJcbiAgPGRpdiBjbGFzcz1cImxpbmVcIj48L2Rpdj5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VudGVySWNvbkN1c3RvbVRlbXBsYXRlIHx8IGNlbnRlckljb25UZW1wbGF0ZTsgY29udGV4dDoge2luZGV4OmluZGV4LCBldmVudDpldmVudH1cIj48L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsndHJhbnNwYXJlbnQgbGFzdC1saW5lJzogaW5kZXggPT09IGl0ZW1zLmxlbmd0aCAtIDF9XCIgY2xhc3M9XCJsaW5lXCI+PC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NlbnRlckljb25UZW1wbGF0ZSBsZXQtaW5kZXg9aW5kZXggbGV0LWV2ZW50PWV2ZW50PlxyXG4gIDxkaXYgY2xhc3M9XCJjZW50ZXItaWNvbi1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RhdGVJbnN0YW50VGVtcGxhdGUgbGV0LWl0ZW09aXRlbT5cclxuICA8c3Bhbj5cclxuICAgIHt7aXRlbT8udGltZXN0YW1wIHwgbmd4ZGF0ZSA6IG5neERhdGVGb3JtYXQuSE9VUlNfTUlOVVRFUyA6IGxhbmdDb2RlfX1cclxuICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3BlcmlvZFRlbXBsYXRlIGxldC1wZXJpb2Q9cGVyaW9kIGxldC1pbmRleD1pbmRleCBsZXQtZXZlbnQ9ZXZlbnQ+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J3RyYW5zcGFyZW50IGZpcnN0LWxpbmUnOiAhaW5kZXh9XCIgY2xhc3M9XCJsaW5lXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBlcmlvZC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwZXJpb2QtaW5uZXItY29udGFpbmVyXCI+XHJcbiAgICAgIDxzcGFuPnt7cGVyaW9kPy5maXJzdERhdGUgfCBuZ3hkYXRlIDogZ2V0UGVyaW9kS2V5RGF0ZUZvcm1hdCgpIDogbGFuZ0NvZGV9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJsaW5lXCI+PC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2V2ZW50VGVtcGxhdGUgbGV0LWV2ZW50PWV2ZW50IGxldC1jb2xTaWRlUG9zaXRpb249Y29sU2lkZVBvc2l0aW9uPlxyXG4gIDxuZ3gtdGltZWxpbmUtZXZlbnRcclxuICAgIFtldmVudF09XCJldmVudFwiXHJcbiAgICBbbGFuZ0NvZGVdPVwibGFuZ0NvZGVcIlxyXG4gICAgW2VuYWJsZUFuaW1hdGlvbl09XCJlbmFibGVBbmltYXRpb25cIlxyXG4gICAgW2lubmVyRXZlbnRDdXN0b21UZW1wbGF0ZV09XCJpbm5lckV2ZW50Q3VzdG9tVGVtcGxhdGVcIlxyXG4gICAgW2NvbFNpZGVQb3NpdGlvbl09XCJjb2xTaWRlUG9zaXRpb25cIlxyXG4gICAgKGNsaWNrRW1pdHRlcik9XCJjbGlja0VtaXR0ZXIubmV4dCgkZXZlbnQpXCI+XHJcbiAgPC9uZ3gtdGltZWxpbmUtZXZlbnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVsaW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUF5QyxNQUFNLEVBQUUsZUFBZSxFQUEyQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEosT0FBTyxFQUdMLHVCQUF1QixFQUV2QixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixtQkFBbUIsRUFDbkIsbUNBQW1DLElBQUksNEJBQTRCLEVBQ25FLHFCQUFxQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBT3JDLE1BQU0sT0FBTyxvQkFBb0I7SUFMakM7UUFjRTs7V0FFRztRQUNNLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2hDOztXQUVHO1FBQ00saUJBQVksR0FBRyxLQUFLLENBQUM7UUFDOUI7O1dBRUc7UUFDTSxlQUFVLEdBQTJCLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztRQUMvRTs7V0FFRztRQUNNLGVBQVUsR0FBZ0MsMEJBQTBCLENBQUMseUJBQXlCLENBQUM7UUFxQnhHOztXQUVHO1FBRUQsaUJBQVksR0FBcUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0UsV0FBTSxHQUEwQyxFQUFFLENBQUM7UUFDbkQsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFDaEMsVUFBSyxHQUFzQixFQUFFLENBQUM7UUFDOUIsNEJBQXVCLEdBQUcsdUJBQXVCLENB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QixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBSUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUlHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFLSixZQUFZO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBJdGVyYWJsZURpZmZlcnMsIEl0ZXJhYmxlRGlmZmVyLCBEb0NoZWNrLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmd4VGltZWxpbmVFdmVudCxcbiAgTmd4VGltZWxpbmVJdGVtLFxuICBOZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbixcbiAgTmd4VGltZWxpbmVQZXJpb2RJbmZvLFxuICBOZ3hEYXRlRm9ybWF0LFxuICBOZ3hUaW1lbGluZUV2ZW50R3JvdXAsXG4gIE5neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlLFxuICBwZXJpb2RLZXlEYXRlRm9ybWF0LFxuICBmaWVsZHNUb0NoZWNrRXZlbnRDaGFuZ2VTaWRlSW5Hcm91cCBhcyBmaWVsZHNUb0NoZWNrRXZlbnRDaGFuZ2VTaWRlLFxuICBmaWVsZHNUb0FkZEV2ZW50R3JvdXB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC10aW1lbGluZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdGltZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3gtdGltZWxpbmUuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUaW1lbGluZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZXZlbnRzIHRvIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgQElucHV0KCkgZXZlbnRzOiBOZ3hUaW1lbGluZUV2ZW50W107XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBjb2RlIHVzZWQgdG8gc2hvdyB0aGUgZGF0ZSBmb3JtYXR0ZWRcbiAgICovXG4gIEBJbnB1dCgpIGxhbmdDb2RlPzogc3RyaW5nO1xuICAvKipcbiAgICogQm9vbGVhbiB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBhbmltYXRpb25zXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVBbmltYXRpb24gPSB0cnVlO1xuICAvKipcbiAgICogQm9vbGVhbiB1c2VkIHRvIHJldmVyc2Ugc29ydCBvcmRlciAoZGVmYXVsdCBvbGRlciBmaXJzdClcbiAgICovXG4gIEBJbnB1dCgpIHJldmVyc2VPcmRlciA9IGZhbHNlO1xuICAvKipcbiAgICogTG9naWMgdG8gYmUgYXBwbGllZCBpbiBvcmRlciB0byBncm91cCBldmVudHNcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwRXZlbnQ/OiBOZ3hUaW1lbGluZUV2ZW50R3JvdXAgPSBOZ3hUaW1lbGluZUV2ZW50R3JvdXAuTU9OVEhfWUVBUjtcbiAgLyoqXG4gICAqIExvZ2ljIHRvIGJlIGFwcGxpZWQgaW4gb3JkZXIgdG8gcHV0IGV2ZXRucyBvbiBMRUZUIG9yIFJJR0hUXG4gICAqL1xuICBASW5wdXQoKSBjaGFuZ2VTaWRlPzogTmd4VGltZWxpbmVFdmVudENoYW5nZVNpZGUgPSBOZ3hUaW1lbGluZUV2ZW50Q2hhbmdlU2lkZS5PTl9ESUZGRVJFTlRfREFZX0lOX0dST1VQO1xuICAvKipcbiAgICogQ3VzdG9tIFRlbXBsYXRlIGRpc3BsYXllZCBiZWZvcmUgYSBncm91cCBvZiBldmVudHNcbiAgICovXG4gIEBJbnB1dCgpIHBlcmlvZEN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogQ3VzdG9tIFRlbXBsYXRlIGRpc3BsYXllZCB0byBzaG93IGEgc2luZ2xlIGV2ZW50XG4gICAqL1xuICBASW5wdXQoKSBldmVudEN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogQ3VzdG9tIFRlbXBsYXRlIGRpc3BsYXllZCB0byBzaG93IGFuIHNlcGFyYXRvciBpY29uXG4gICAqL1xuICBASW5wdXQoKSBjZW50ZXJJY29uQ3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBDdXN0b20gVGVtcGxhdGUgZGlzcGxheWVkIHRvIHNob3cgdGhlIHNpZGUgZGF0ZVxuICAgKi9cbiAgQElucHV0KCkgZGF0ZUluc3RhbnRDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZW1wbGF0ZSBkaXNwbGF5ZWQgdG8gc2hvdyB0aGUgaW5uZXIgZXZlbnRcbiAgICovXG4gIEBJbnB1dCgpIGlubmVyRXZlbnRDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIE91dHB1dCBjbGljayBldmVudCBlbWl0dGVyXG4gICAqL1xuICBAT3V0cHV0KClcbiAgICBjbGlja0VtaXR0ZXI6IEJlaGF2aW9yU3ViamVjdDxOZ3hUaW1lbGluZUl0ZW0+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBncm91cHM6IHsgW2tleTogc3RyaW5nXTogTmd4VGltZWxpbmVFdmVudFtdIH0gPSB7fTtcbiAgcGVyaW9kczogTmd4VGltZWxpbmVJdGVtW10gPSBbXTtcbiAgaXRlbXM6IE5neFRpbWVsaW5lSXRlbVtdID0gW107XG4gIG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uID0gTmd4VGltZWxpbmVJdGVtUG9zaXRpb247XG4gIG5neERhdGVGb3JtYXQgPSBOZ3hEYXRlRm9ybWF0O1xuXG4gIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzID0gaW5qZWN0KEl0ZXJhYmxlRGlmZmVycyk7XG4gIHByaXZhdGUgaXRlcmFibGVEaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VwYXJhdG9yID0gJy8nO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBFdmVudHModGhpcy5ldmVudHMpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5ncm91cEV2ZW50cyh0aGlzLmV2ZW50cyk7XG4gICAgY29uc29sZS5sb2coJ25nT25DaGFuZ2VzJyk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgY29uc29sZS5sb2coJ25nRG9DaGVjaycpO1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZXJhYmxlRGlmZmVyLmRpZmYodGhpcy5ldmVudHMpO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICB0aGlzLmdyb3VwRXZlbnRzKHRoaXMuZXZlbnRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRQZXJpb2RLZXlEYXRlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBlcmlvZEtleURhdGVGb3JtYXRbdGhpcy5ncm91cEV2ZW50XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3VwcyA9IHt9O1xuICAgIHRoaXMucGVyaW9kcyA9IFtdO1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBncm91cEV2ZW50cyhldmVudHM6IE5neFRpbWVsaW5lRXZlbnRbXSk6IHZvaWQge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuc29ydEV2ZW50cyhldmVudHMpO1xuICAgICAgdGhpcy5zZXRHcm91cHNBbmRQZXJpb2RzKGV2ZW50cyk7XG4gICAgICB0aGlzLnNldEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNvcnRFdmVudHMoZXZlbnRzOiBOZ3hUaW1lbGluZUV2ZW50W10pOiB2b2lkIHtcbiAgICBldmVudHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYVRpbWUgPSBhLnRpbWVzdGFtcC5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiVGltZSA9IGIudGltZXN0YW1wLmdldFRpbWUoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2VPcmRlciA/IGJUaW1lIC0gYVRpbWUgOiBhVGltZSAtIGJUaW1lO30pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdyb3Vwc0FuZFBlcmlvZHMoZXZlbnRzOiBOZ3hUaW1lbGluZUV2ZW50W10pOiB2b2lkIHtcbiAgICB0aGlzLnBlcmlvZHMgPSBbXTtcbiAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIGNvbnZlcnNpb24gZnJvbSBzdHJpbmcgdG8gYWN0dWFsIERhdGVcbiAgICAgIGV2ZW50LnRpbWVzdGFtcCA9IG5ldyBEYXRlKGV2ZW50LnRpbWVzdGFtcCk7XG4gICAgICBjb25zdCBwZXJpb2RLZXkgPSB0aGlzLmdldFBlcmlvZEtleUZyb21FdmVudChldmVudCk7XG4gICAgICBpZiAoIXRoaXMuZ3JvdXBzW3BlcmlvZEtleV0pIHtcbiAgICAgICAgdGhpcy5ncm91cHNbcGVyaW9kS2V5XSA9IFtdO1xuICAgICAgICB0aGlzLnBlcmlvZHMucHVzaCh0aGlzLmdldFBlcmlvZEluZm9Gcm9tUGVyaW9kS2V5KHBlcmlvZEtleSwgZXZlbnQpKVxuICAgICAgfVxuICAgICAgdGhpcy5ncm91cHNbcGVyaW9kS2V5XS5wdXNoKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRJdGVtcygpOiB2b2lkIHtcbiAgICBsZXQgaXNMYXN0SXRlbU9uTGVmdCA9IGZhbHNlO1xuICAgIHRoaXMucGVyaW9kcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAvLyBpbnNlcnQgZmlyc3QgdGhlIHBlcmlvZFxuICAgICAgdGhpcy5pdGVtcy5wdXNoKHApO1xuICAgICAgLy8gaW4gZWFjaCBwZXJpb2QgcHV0dGluZyBpdGVtcyBvbiBsZWZ0XG4gICAgICBsZXQgb25MZWZ0ID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmNoYW5nZVNpZGUgPT09IE5neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlLkFMTCkge1xuICAgICAgICBvbkxlZnQgPSAhaXNMYXN0SXRlbU9uTGVmdDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBlcmlvZEluZm8gPSBwLnBlcmlvZEluZm87XG4gICAgICAvLyBpbnNlcnQgdGhlbiBhbGwgdGhlIGV2ZW50cyBpbiB0aGlzIHBlcmlvZFxuICAgICAgaXNMYXN0SXRlbU9uTGVmdCA9IHRoaXMuYWRkUGVyaW9kRXZlbnRzKHBlcmlvZEluZm8sIG9uTGVmdCk7XG4gICAgICAvLyBvbkxlZnQgPSB0aGlzLmFkZEV2ZW50SXRlbXNBbmRHZXRJZk9uTGVmdChwZXJpb2RJbmZvLCBvbkxlZnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFBlcmlvZEV2ZW50cyhwZXJpb2RJbmZvOiBOZ3hUaW1lbGluZVBlcmlvZEluZm8sIG9uTGVmdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHRoaXMuZ3JvdXBzW3BlcmlvZEluZm8ucGVyaW9kS2V5XS5mb3JFYWNoKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZFdmVudCA9IHRoaXMuZ3JvdXBzW3BlcmlvZEluZm8ucGVyaW9kS2V5XVtpbmRleCAtIDFdO1xuICAgICAgaWYgKGV2ZW50Lml0ZW1Qb3NpdGlvbikge1xuICAgICAgICBvbkxlZnQgPSBldmVudC5pdGVtUG9zaXRpb24gJiYgZXZlbnQuaXRlbVBvc2l0aW9uID09PSBOZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9MRUZUO1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDAgJiYgdGhpcy5jb21wYXJlRXZlbnRzKHByZXZFdmVudCwgZXZlbnQpKSB7XG4gICAgICAgICAgb25MZWZ0ID0gIW9uTGVmdDtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaEV2ZW50T25JdGVtcyhldmVudCwgb25MZWZ0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb25MZWZ0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1c2hFdmVudE9uSXRlbXMoZXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQsIG9uTGVmdDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICBldmVudEluZm86IHsuLi5ldmVudH0sIHBvc2l0aW9uOiBvbkxlZnQgP1xuICAgICAgICB0aGlzLm5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlQgOiB0aGlzLm5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdGhlIGV2ZW50cyBpbnNpZGUgdGhlIHNhbWUgZ3JvdXBcbiAgICovXG4gIHByb3RlY3RlZCBjb21wYXJlRXZlbnRzKHByZXZFdmVudDogTmd4VGltZWxpbmVFdmVudCwgZXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG91bGRDaGFuZ2VFdmVudHNJblBlcmlvZCgpIHx8XG4gICAgICB0aGlzLmNvbXBhcmVFdmVudHNGaWVsZChwcmV2RXZlbnQsIGV2ZW50LCAuLi5maWVsZHNUb0NoZWNrRXZlbnRDaGFuZ2VTaWRlW3RoaXMuY2hhbmdlU2lkZV0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXBhcmVFdmVudHNGaWVsZChwcmV2RXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQsIGV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50LCAuLi5maWVsZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKHJlcywgZmllbGQpID0+IHJlcyA9IHJlcyB8fCBwcmV2RXZlbnQudGltZXN0YW1wW2ZpZWxkXSgpICE9PSBldmVudC50aW1lc3RhbXBbZmllbGRdKCksICEhZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBlcmlvZEluZm9Gcm9tUGVyaW9kS2V5KHBlcmlvZEtleTogc3RyaW5nLCBmaXJzdEdyb3VwRXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQpOiB7IHBlcmlvZEluZm86IE5neFRpbWVsaW5lUGVyaW9kSW5mbyB9IHtcbiAgICAgIGNvbnN0IHNwbGl0ID0gcGVyaW9kS2V5LnNwbGl0KHRoaXMuc2VwYXJhdG9yKTtcbiAgICAgIHJldHVybiB0aGlzLmdldFBlcmlvZEluZm8oc3BsaXQsIHBlcmlvZEtleSwgZmlyc3RHcm91cEV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVyaW9kSW5mbyhzcGxpdDogc3RyaW5nW10sIHBlcmlvZEtleTogc3RyaW5nLCBmaXJzdEdyb3VwRXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQpOiB7IHBlcmlvZEluZm86IE5neFRpbWVsaW5lUGVyaW9kSW5mbyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyaW9kSW5mbzoge1xuICAgICAgICB5ZWFyOiBOdW1iZXIoc3BsaXRbMF0pLFxuICAgICAgICBtb250aDogTnVtYmVyKHNwbGl0WzFdKSxcbiAgICAgICAgZGF5OiBOdW1iZXIoc3BsaXRbMl0pLFxuICAgICAgICBwZXJpb2RLZXksXG4gICAgICAgIGZpcnN0RGF0ZTogZmlyc3RHcm91cEV2ZW50LnRpbWVzdGFtcCBhcyBEYXRlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRDaGFuZ2VFdmVudHNJblBlcmlvZCgpIHtcbiAgICByZXR1cm4gW05neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlLkFMTF9JTl9HUk9VUCwgTmd4VGltZWxpbmVFdmVudENoYW5nZVNpZGUuQUxMXS5pbmRleE9mKHRoaXMuY2hhbmdlU2lkZSkgIT0gLTE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGVyaW9kS2V5RnJvbUV2ZW50KGV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGRzVG9BZGRFdmVudEdyb3VwW3RoaXMuZ3JvdXBFdmVudF0ubWFwKChmaWVsZCkgPT4gZXZlbnQudGltZXN0YW1wW2ZpZWxkXSgpKS5qb2luKHRoaXMuc2VwYXJhdG9yKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cIml0ZW1zLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGluZGV4ID0gaW5kZXg7XCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPCEtLSBERVNLVE9QIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1sZWZ0IGRlc2t0b3BcIiBbbmdDbGFzc109XCJpdGVtLnBlcmlvZEluZm8gPyAnY29sLXBlcmlvZCcgOiAnY29sLWV2ZW50J1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1vdXRlci1jb250YWluZXJcIiAqbmdJZj1cIml0ZW0uZXZlbnRJbmZvICYmIGl0ZW0ucG9zaXRpb24gPT09IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJldmVudEN1c3RvbVRlbXBsYXRlIHx8IGV2ZW50VGVtcGxhdGU7IGNvbnRleHQ6IHtldmVudDogaXRlbSwgY29sU2lkZVBvc2l0aW9uOiBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9MRUZUfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJob3VyIGxlZnRcIiAqbmdJZj1cIml0ZW0uZXZlbnRJbmZvICYmIGl0ZW0ucG9zaXRpb24gPT09IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hUXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUluc3RhbnRDdXN0b21UZW1wbGF0ZSB8fCBkYXRlSW5zdGFudFRlbXBsYXRlOyBjb250ZXh0OiB7aXRlbTogaXRlbS5ldmVudEluZm99XCIgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLWNlbnRlciBkZXNrdG9wXCIgW25nQ2xhc3NdPVwiaXRlbS5wZXJpb2RJbmZvID8gJ2NvbC1wZXJpb2QnIDogJ2NvbC1ldmVudCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWlubmVyXCIgKm5nSWY9XCJpdGVtLnBlcmlvZEluZm9cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXJpb2RDdXN0b21UZW1wbGF0ZSB8fCBwZXJpb2RUZW1wbGF0ZTsgY29udGV4dDoge3BlcmlvZDogaXRlbS5wZXJpb2RJbmZvLCBpbmRleDogaW5kZXgsIGV2ZW50OiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItaW5uZXIgbm8tcGVyaW9kLWtleVwiICpuZ0lmPVwiIWl0ZW0ucGVyaW9kSW5mb1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbnRlckxpbmVzSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7ZXZlbnQ6IGl0ZW0sIGluZGV4OiBpbmRleH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1yaWdodCBkZXNrdG9wXCIgW25nQ2xhc3NdPVwiaXRlbS5wZXJpb2RJbmZvID8gJ2NvbC1wZXJpb2QnIDogJ2NvbC1ldmVudCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtb3V0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpdGVtLmV2ZW50SW5mbyAmJiBpdGVtLnBvc2l0aW9uID09PSBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV2ZW50Q3VzdG9tVGVtcGxhdGUgfHwgZXZlbnRUZW1wbGF0ZTsgY29udGV4dDoge2V2ZW50OiBpdGVtLCBjb2xTaWRlUG9zaXRpb246IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hUfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJob3VyIHJpZ2h0XCIgKm5nSWY9XCJpdGVtLmV2ZW50SW5mbyAmJiBpdGVtLnBvc2l0aW9uID09PSBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9MRUZUXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUluc3RhbnRDdXN0b21UZW1wbGF0ZSB8fCBkYXRlSW5zdGFudFRlbXBsYXRlOyBjb250ZXh0OiB7aXRlbTogaXRlbS5ldmVudEluZm99XCIgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gTU9CSUxFIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1sZWZ0IG1vYmlsZVwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdXIgbGVmdFwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm9cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3VyLWlubmVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUluc3RhbnRDdXN0b21UZW1wbGF0ZSB8fCBkYXRlSW5zdGFudFRlbXBsYXRlOyBjb250ZXh0OiB7aXRlbTogaXRlbS5ldmVudEluZm99XCIgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtY2VudGVyIG1vYmlsZVwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlci1pbm5lclwiICpuZ0lmPVwiaXRlbS5wZXJpb2RJbmZvO1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVyaW9kQ3VzdG9tVGVtcGxhdGUgfHwgcGVyaW9kVGVtcGxhdGU7IGNvbnRleHQ6IHtwZXJpb2Q6IGl0ZW0ucGVyaW9kSW5mbywgaW5kZXg6IGluZGV4LCBldmVudDogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWlubmVyIG5vLXBlcmlvZC1rZXlcIiAqbmdJZj1cIiFpdGVtLnBlcmlvZEluZm87XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VudGVyTGluZXNJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHtldmVudDogaXRlbSwgaW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLXJpZ2h0IG1vYmlsZVwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LW91dGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm9cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJldmVudEN1c3RvbVRlbXBsYXRlIHx8IGV2ZW50VGVtcGxhdGU7IGNvbnRleHQ6IHtldmVudDogaXRlbSwgY29sU2lkZVBvc2l0aW9uOiBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNjZW50ZXJMaW5lc0ljb25UZW1wbGF0ZSBsZXQtaW5kZXg9aW5kZXggbGV0LWV2ZW50PWV2ZW50PlxyXG4gIDxkaXYgY2xhc3M9XCJsaW5lXCI+PC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbnRlckljb25DdXN0b21UZW1wbGF0ZSB8fCBjZW50ZXJJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHtpbmRleDppbmRleCwgZXZlbnQ6ZXZlbnR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J3RyYW5zcGFyZW50IGxhc3QtbGluZSc6IGluZGV4ID09PSBpdGVtcy5sZW5ndGggLSAxfVwiIGNsYXNzPVwibGluZVwiPjwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjZW50ZXJJY29uVGVtcGxhdGUgbGV0LWluZGV4PWluZGV4IGxldC1ldmVudD1ldmVudD5cclxuICA8ZGl2IGNsYXNzPVwiY2VudGVyLWljb24tY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkYXRlSW5zdGFudFRlbXBsYXRlIGxldC1pdGVtPWl0ZW0+XHJcbiAgPHNwYW4+XHJcbiAgICB7e2l0ZW0/LnRpbWVzdGFtcCB8IG5neGRhdGUgOiBuZ3hEYXRlRm9ybWF0LkhPVVJTX01JTlVURVMgOiBsYW5nQ29kZX19XHJcbiAgPC9zcGFuPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwZXJpb2RUZW1wbGF0ZSBsZXQtcGVyaW9kPXBlcmlvZCBsZXQtaW5kZXg9aW5kZXggbGV0LWV2ZW50PWV2ZW50PlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyd0cmFuc3BhcmVudCBmaXJzdC1saW5lJzogIWluZGV4fVwiIGNsYXNzPVwibGluZVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJwZXJpb2QtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGVyaW9kLWlubmVyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8c3Bhbj57e3BlcmlvZD8uZmlyc3REYXRlIHwgbmd4ZGF0ZSA6IGdldFBlcmlvZEtleURhdGVGb3JtYXQoKSA6IGxhbmdDb2RlfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibGluZVwiPjwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNldmVudFRlbXBsYXRlIGxldC1ldmVudD1ldmVudCBsZXQtY29sU2lkZVBvc2l0aW9uPWNvbFNpZGVQb3NpdGlvbj5cclxuICA8bmd4LXRpbWVsaW5lLWV2ZW50XHJcbiAgICBbZXZlbnRdPVwiZXZlbnRcIlxyXG4gICAgW2xhbmdDb2RlXT1cImxhbmdDb2RlXCJcclxuICAgIFtlbmFibGVBbmltYXRpb25dPVwiZW5hYmxlQW5pbWF0aW9uXCJcclxuICAgIFtpbm5lckV2ZW50Q3VzdG9tVGVtcGxhdGVdPVwiaW5uZXJFdmVudEN1c3RvbVRlbXBsYXRlXCJcclxuICAgIFtjb2xTaWRlUG9zaXRpb25dPVwiY29sU2lkZVBvc2l0aW9uXCJcclxuICAgIChjbGlja0VtaXR0ZXIpPVwiY2xpY2tFbWl0dGVyLm5leHQoJGV2ZW50KVwiPlxyXG4gIDwvbmd4LXRpbWVsaW5lLWV2ZW50PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuIl19
@@ -118,16 +118,17 @@ export const periodKeyDateFormat = {
118
118
  /**
119
119
  * Enum used to set the change side event logic
120
120
  */
121
- export var NgxTimelineEventChangeSideInGroup;
122
- (function (NgxTimelineEventChangeSideInGroup) {
123
- NgxTimelineEventChangeSideInGroup["ALL"] = "ALL";
124
- NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_HMS"] = "ON_DIFFERENT_HMS";
125
- NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_DAY"] = "ON_DIFFERENT_DAY";
126
- NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_MONTH"] = "ON_DIFFERENT_MONTH";
127
- })(NgxTimelineEventChangeSideInGroup || (NgxTimelineEventChangeSideInGroup = {}));
121
+ export var NgxTimelineEventChangeSide;
122
+ (function (NgxTimelineEventChangeSide) {
123
+ NgxTimelineEventChangeSide["ALL"] = "ALL";
124
+ NgxTimelineEventChangeSide["ALL_IN_GROUP"] = "ALL_IN_GROUP";
125
+ NgxTimelineEventChangeSide["ON_DIFFERENT_DAY_IN_GROUP"] = "ON_DIFFERENT_DAY_IN_GROUP";
126
+ NgxTimelineEventChangeSide["ON_DIFFERENT_HMS_IN_GROUP"] = "ON_DIFFERENT_HMS_IN_GROUP";
127
+ NgxTimelineEventChangeSide["ON_DIFFERENT_MONTH_IN_GROUP"] = "ON_DIFFERENT_MONTH_IN_GROUP";
128
+ })(NgxTimelineEventChangeSide || (NgxTimelineEventChangeSide = {}));
128
129
  export const fieldsToCheckEventChangeSideInGroup = {
129
- ON_DIFFERENT_MONTH: ['getFullYear', 'getMonth'],
130
- ON_DIFFERENT_DAY: ['getFullYear', 'getMonth', 'getDate'],
131
- ON_DIFFERENT_HMS: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],
130
+ ON_DIFFERENT_DAY_IN_GROUP: ['getFullYear', 'getMonth', 'getDate'],
131
+ ON_DIFFERENT_MONTH_IN_GROUP: ['getFullYear', 'getMonth'],
132
+ ON_DIFFERENT_HMS_IN_GROUP: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],
132
133
  };
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Q29uZmlnT2JqLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRpbWVsaW5lL3NyYy9saWIvbW9kZWxzL05neENvbmZpZ09iai50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBZW5HLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBa0I7SUFDMUMsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLE9BQU87UUFDYixRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRSxNQUFNO1FBQ1osWUFBWSxFQUFFLFNBQVM7S0FDeEI7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsT0FBTztRQUNiLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsWUFBWSxFQUFFLGNBQWM7UUFDNUIsU0FBUyxFQUFFLFdBQVc7UUFDdEIsSUFBSSxFQUFFLE1BQU07UUFDWixZQUFZLEVBQUUsT0FBTztLQUN0QjtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixZQUFZLEVBQUUsY0FBYztRQUM1QixTQUFTLEVBQUUsV0FBVztRQUN0QixJQUFJLEVBQUUsTUFBTTtRQUNaLFlBQVksRUFBRSxPQUFPO0tBQ3RCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRSxNQUFNO1FBQ1osWUFB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QUxXLGlDQUFpQyxLQUFqQyxpQ0FBaUMsUUFLNUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRztJQUNqRCxrQkFBa0IsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7SUFDL0MsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN4RCxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO0NBQ2pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc3VwcG9ydGVkTGFuZ3VhZ2VDb2RlcyA9IFsnZW4nLCAnaXQnLCAnZnInLCAnZGUnLCAnZXMnLCAnc2wnLCAndHInLCAncGwnLCAncHQnLCAncnUnXTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hDb25maWdEYXRlIHtcbiAgY29kZTogc3RyaW5nO1xuICBkYXlNb250aFllYXI6IHN0cmluZztcbiAgZnVsbERhdGU6IHN0cmluZztcbiAgaG91cnNNaW51dGVzOiBzdHJpbmc7XG4gIG1vbnRoWWVhcjogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4RGF0ZU9iak1hcCB7XG4gIFtrZXk6IHN0cmluZ106IE5neENvbmZpZ0RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBkYXRlQ29uZmlnTWFwOiBOZ3hEYXRlT2JqTWFwID0ge1xuICBlbjoge1xuICAgIGNvZGU6ICdlbi1VUycsXG4gICAgZnVsbERhdGU6ICdNTS9kZC95eXl5IGg6bW0gYScsXG4gICAgZGF5TW9udGhZZWFyOiAnZGQgTU1NTSB5eXl5JyxcbiAgICBtb250aFllYXI6ICdNTU1NIHl5eXknLFxuICAgIHllYXI6ICd5eXl5JyxcbiAgICBob3Vyc01pbnV0ZXM6ICdoaDptbSBhJyxcbiAgfSxcbiAgaXQ6IHtcbiAgICBjb2RlOiAnaXQtSVQnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZnI6IHtcbiAgICBjb2RlOiAnZnItRlInLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZGU6IHtcbiAgICBjb2RlOiAnZGUnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZXM6IHtcbiAgICBjb2RlOiAnZXMnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgc2w6IHtcbiAgICBjb2RlOiAnc2wtU0wnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgdHI6IHtcbiAgICBjb2RlOiAndHInLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgcGw6IHtcbiAgICBjb2RlOiAncGwnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgcHQ6IHtcbiAgICBjb2RlOiAncHQnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgcnU6IHtcbiAgICBjb2RlOiAncnUtUlUnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfVxufTtcblxuZXhwb3J0IGVudW0gTmd4RGF0ZUZvcm1hdCB7XG4gIERBWV9NT05USF9ZRUFSID0gJ0RBWV9NT05USF9ZRUFSJyxcbiAgRlVMTF9EQVRFID0gJ0ZVTExfREFURScsXG4gIE1PTlRIX1lFQVIgPSAnTU9OVEhfWUVBUicsXG4gIEhPVVJTX01JTlVURVMgPSAnSE9VUlNfTUlOVVRFUycsXG4gIFlFQVIgPSAnWUVBUidcbn1cblxuZXhwb3J0IGNvbnN0IGZpZWxkQ29uZmlnRGF0ZSA9IHtcbiAgTU9OVEhfWUVBUjogJ21vbnRoWWVhcicsXG4gIFlFQVI6ICd5ZWFyJyxcbiAgSE9VUlNfTUlOVVRFUzogJ2hvdXJzTWludXRlcycsXG4gIEZVTExfREFURTogJ2Z1bGxEYXRlJyxcbiAgREFZX01PTlRIX1lFQVI6ICdkYXlNb250aFllYXInLFxufTtcblxuLyoqXG4gKiBFbnVtIHVzZWQgdG8gc2V0IHRoZSBncm91cCBldmVudCBsb2dpY1xuICovXG5leHBvcnQgZW51bSBOZ3hUaW1lbGluZUV2ZW50R3JvdXAge1xuICBZRUFSID0gJ1lFQVInLFxuICBNT05USF9ZRUFSID0gJ01PTlRIX1lFQVInLFxuICBEQVlfTU9OVEhfWUVBUiA9ICdEQVlfTU9OVEhfWUVBUidcbn1cblxuZXhwb3J0IGNvbnN0IGZpZWxkc1RvQWRkRXZlbnRHcm91cCA9IHtcbiAgWUVBUjogWydnZXRGdWxsWWVhciddLFxuICBNT05USF9ZRUFSOiBbJ2dldEZ1bGxZZWFyJywgJ2dldE1vbnRoJ10sXG4gIERBWV9NT05USF9ZRUFSOiBbJ2dldEZ1bGxZZWFyJywgJ2dldE1vbnRoJywgJ2dldERhdGUnXSxcbn07XG5cbmV4cG9ydCBjb25zdCBwZXJpb2RLZXlEYXRlRm9ybWF0ID0ge1xuICBZRUFSOiBOZ3hEYXRlRm9ybWF0LllFQVIsXG4gIE1PTlRIX1lFQVI6IE5neERhdGVGb3JtYXQuTU9OVEhfWUVBUixcbiAgREFZX01PTlRIX1lFQVI6IE5neERhdGVGb3JtYXQuREFZX01PTlRIX1lFQVIsXG59O1xuXG4vKipcbiAqIEVudW0gdXNlZCB0byBzZXQgdGhlIGNoYW5nZSBzaWRlIGV2ZW50IGxvZ2ljXG4gKi9cbmV4cG9ydCBlbnVtIE5neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlSW5Hcm91cCB7XG4gIEFMTCA9ICdBTEwnLFxuICBPTl9ESUZGRVJFTlRfSE1TID0gJ09OX0RJRkZFUkVOVF9ITVMnLFxuICBPTl9ESUZGRVJFTlRfREFZID0gJ09OX0RJRkZFUkVOVF9EQVknLFxuICBPTl9ESUZGRVJFTlRfTU9OVEggPSAnT05fRElGRkVSRU5UX01PTlRIJ1xufVxuXG5leHBvcnQgY29uc3QgZmllbGRzVG9DaGVja0V2ZW50Q2hhbmdlU2lkZUluR3JvdXAgPSB7XG4gIE9OX0RJRkZFUkVOVF9NT05USDogWydnZXRGdWxsWWVhcicsICdnZXRNb250aCddLFxuICBPTl9ESUZGRVJFTlRfREFZOiBbJ2dldEZ1bGxZZWFyJywgJ2dldE1vbnRoJywgJ2dldERhdGUnXSxcbiAgT05fRElGRkVSRU5UX0hNUzogWydnZXRGdWxsWWVhcicsICdnZXRNb250aCcsICdnZXREYXRlJywgJ2dldEhvdXJzJywgJ2dldE1pbnV0ZXMnLCAnZ2V0U2Vjb25kcyddLFxufTtcbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Q29uZmlnT2JqLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRpbWVsaW5lL3NyYy9saWIvbW9kZWxzL05neENvbmZpZ09iai50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBZW5HLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBa0I7SUFDMUMsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLE9BQU87UUFDYixRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRSxNQUFNO1FBQ1osWUFBWSxFQUFFLFNBQVM7S0FDeEI7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsT0FBTztRQUNiLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsWUFBWSxFQUFFLGNBQWM7UUFDNUIsU0FBUyxFQUFFLFdBQVc7UUFDdEIsSUFBSSxFQUFFLE1BQU07UUFDWixZQUFZLEVBQUUsT0FBTztLQUN0QjtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixZQUFZLEVBQUUsY0FBYztRQUM1QixTQUFTLEVBQUUsV0FBVztRQUN0QixJQUFJLEVBQUUsTUFBTTtRQUNaLFlBQVksRUFBRSxPQUFPO0tBQ3RCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRSxNQUFNO1FBQ1osWUFB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LENBQUE7QUFDN0QsQ0FBQyxFQU5XLDBCQUEwQixLQUExQiwwQkFBMEIsUUFNckM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRztJQUNqRCx5QkFBeUIsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDO0lBQ2pFLDJCQUEyQixFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztJQUN4RCx5QkFBeUIsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO0NBQzFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc3VwcG9ydGVkTGFuZ3VhZ2VDb2RlcyA9IFsnZW4nLCAnaXQnLCAnZnInLCAnZGUnLCAnZXMnLCAnc2wnLCAndHInLCAncGwnLCAncHQnLCAncnUnXTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hDb25maWdEYXRlIHtcbiAgY29kZTogc3RyaW5nO1xuICBkYXlNb250aFllYXI6IHN0cmluZztcbiAgZnVsbERhdGU6IHN0cmluZztcbiAgaG91cnNNaW51dGVzOiBzdHJpbmc7XG4gIG1vbnRoWWVhcjogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4RGF0ZU9iak1hcCB7XG4gIFtrZXk6IHN0cmluZ106IE5neENvbmZpZ0RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBkYXRlQ29uZmlnTWFwOiBOZ3hEYXRlT2JqTWFwID0ge1xuICBlbjoge1xuICAgIGNvZGU6ICdlbi1VUycsXG4gICAgZnVsbERhdGU6ICdNTS9kZC95eXl5IGg6bW0gYScsXG4gICAgZGF5TW9udGhZZWFyOiAnZGQgTU1NTSB5eXl5JyxcbiAgICBtb250aFllYXI6ICdNTU1NIHl5eXknLFxuICAgIHllYXI6ICd5eXl5JyxcbiAgICBob3Vyc01pbnV0ZXM6ICdoaDptbSBhJyxcbiAgfSxcbiAgaXQ6IHtcbiAgICBjb2RlOiAnaXQtSVQnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZnI6IHtcbiAgICBjb2RlOiAnZnItRlInLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZGU6IHtcbiAgICBjb2RlOiAnZGUnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZXM6IHtcbiAgICBjb2RlOiAnZXMnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgc2w6IHtcbiAgICBjb2RlOiAnc2wtU0wnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgdHI6IHtcbiAgICBjb2RlOiAndHInLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgcGw6IHtcbiAgICBjb2RlOiAncGwnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgcHQ6IHtcbiAgICBjb2RlOiAncHQnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgcnU6IHtcbiAgICBjb2RlOiAncnUtUlUnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfVxufTtcblxuZXhwb3J0IGVudW0gTmd4RGF0ZUZvcm1hdCB7XG4gIERBWV9NT05USF9ZRUFSID0gJ0RBWV9NT05USF9ZRUFSJyxcbiAgRlVMTF9EQVRFID0gJ0ZVTExfREFURScsXG4gIE1PTlRIX1lFQVIgPSAnTU9OVEhfWUVBUicsXG4gIEhPVVJTX01JTlVURVMgPSAnSE9VUlNfTUlOVVRFUycsXG4gIFlFQVIgPSAnWUVBUidcbn1cblxuZXhwb3J0IGNvbnN0IGZpZWxkQ29uZmlnRGF0ZSA9IHtcbiAgTU9OVEhfWUVBUjogJ21vbnRoWWVhcicsXG4gIFlFQVI6ICd5ZWFyJyxcbiAgSE9VUlNfTUlOVVRFUzogJ2hvdXJzTWludXRlcycsXG4gIEZVTExfREFURTogJ2Z1bGxEYXRlJyxcbiAgREFZX01PTlRIX1lFQVI6ICdkYXlNb250aFllYXInLFxufTtcblxuLyoqXG4gKiBFbnVtIHVzZWQgdG8gc2V0IHRoZSBncm91cCBldmVudCBsb2dpY1xuICovXG5leHBvcnQgZW51bSBOZ3hUaW1lbGluZUV2ZW50R3JvdXAge1xuICBZRUFSID0gJ1lFQVInLFxuICBNT05USF9ZRUFSID0gJ01PTlRIX1lFQVInLFxuICBEQVlfTU9OVEhfWUVBUiA9ICdEQVlfTU9OVEhfWUVBUidcbn1cblxuZXhwb3J0IGNvbnN0IGZpZWxkc1RvQWRkRXZlbnRHcm91cCA9IHtcbiAgWUVBUjogWydnZXRGdWxsWWVhciddLFxuICBNT05USF9ZRUFSOiBbJ2dldEZ1bGxZZWFyJywgJ2dldE1vbnRoJ10sXG4gIERBWV9NT05USF9ZRUFSOiBbJ2dldEZ1bGxZZWFyJywgJ2dldE1vbnRoJywgJ2dldERhdGUnXSxcbn07XG5cbmV4cG9ydCBjb25zdCBwZXJpb2RLZXlEYXRlRm9ybWF0ID0ge1xuICBZRUFSOiBOZ3hEYXRlRm9ybWF0LllFQVIsXG4gIE1PTlRIX1lFQVI6IE5neERhdGVGb3JtYXQuTU9OVEhfWUVBUixcbiAgREFZX01PTlRIX1lFQVI6IE5neERhdGVGb3JtYXQuREFZX01PTlRIX1lFQVIsXG59O1xuXG4vKipcbiAqIEVudW0gdXNlZCB0byBzZXQgdGhlIGNoYW5nZSBzaWRlIGV2ZW50IGxvZ2ljXG4gKi9cbmV4cG9ydCBlbnVtIE5neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlIHtcbiAgQUxMID0gJ0FMTCcsXG4gIEFMTF9JTl9HUk9VUCA9ICdBTExfSU5fR1JPVVAnLFxuICBPTl9ESUZGRVJFTlRfREFZX0lOX0dST1VQID0gJ09OX0RJRkZFUkVOVF9EQVlfSU5fR1JPVVAnLFxuICBPTl9ESUZGRVJFTlRfSE1TX0lOX0dST1VQID0gJ09OX0RJRkZFUkVOVF9ITVNfSU5fR1JPVVAnLFxuICBPTl9ESUZGRVJFTlRfTU9OVEhfSU5fR1JPVVAgPSAnT05fRElGRkVSRU5UX01PTlRIX0lOX0dST1VQJ1xufVxuXG5leHBvcnQgY29uc3QgZmllbGRzVG9DaGVja0V2ZW50Q2hhbmdlU2lkZUluR3JvdXAgPSB7XG4gIE9OX0RJRkZFUkVOVF9EQVlfSU5fR1JPVVA6IFsnZ2V0RnVsbFllYXInLCAnZ2V0TW9udGgnLCAnZ2V0RGF0ZSddLFxuICBPTl9ESUZGRVJFTlRfTU9OVEhfSU5fR1JPVVA6IFsnZ2V0RnVsbFllYXInLCAnZ2V0TW9udGgnXSxcbiAgT05fRElGRkVSRU5UX0hNU19JTl9HUk9VUDogWydnZXRGdWxsWWVhcicsICdnZXRNb250aCcsICdnZXREYXRlJywgJ2dldEhvdXJzJywgJ2dldE1pbnV0ZXMnLCAnZ2V0U2Vjb25kcyddLFxufTtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Input, Output, Pipe, NgModule } from '@angular/core';
2
+ import { Component, Input, Output, Pipe, IterableDiffers, inject, NgModule } from '@angular/core';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import * as i1 from '@angular/common';
5
5
  import { DatePipe, registerLocaleData, CommonModule } from '@angular/common';
@@ -133,17 +133,18 @@ const periodKeyDateFormat = {
133
133
  /**
134
134
  * Enum used to set the change side event logic
135
135
  */
136
- var NgxTimelineEventChangeSideInGroup;
137
- (function (NgxTimelineEventChangeSideInGroup) {
138
- NgxTimelineEventChangeSideInGroup["ALL"] = "ALL";
139
- NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_HMS"] = "ON_DIFFERENT_HMS";
140
- NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_DAY"] = "ON_DIFFERENT_DAY";
141
- NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_MONTH"] = "ON_DIFFERENT_MONTH";
142
- })(NgxTimelineEventChangeSideInGroup || (NgxTimelineEventChangeSideInGroup = {}));
136
+ var NgxTimelineEventChangeSide;
137
+ (function (NgxTimelineEventChangeSide) {
138
+ NgxTimelineEventChangeSide["ALL"] = "ALL";
139
+ NgxTimelineEventChangeSide["ALL_IN_GROUP"] = "ALL_IN_GROUP";
140
+ NgxTimelineEventChangeSide["ON_DIFFERENT_DAY_IN_GROUP"] = "ON_DIFFERENT_DAY_IN_GROUP";
141
+ NgxTimelineEventChangeSide["ON_DIFFERENT_HMS_IN_GROUP"] = "ON_DIFFERENT_HMS_IN_GROUP";
142
+ NgxTimelineEventChangeSide["ON_DIFFERENT_MONTH_IN_GROUP"] = "ON_DIFFERENT_MONTH_IN_GROUP";
143
+ })(NgxTimelineEventChangeSide || (NgxTimelineEventChangeSide = {}));
143
144
  const fieldsToCheckEventChangeSideInGroup = {
144
- ON_DIFFERENT_MONTH: ['getFullYear', 'getMonth'],
145
- ON_DIFFERENT_DAY: ['getFullYear', 'getMonth', 'getDate'],
146
- ON_DIFFERENT_HMS: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],
145
+ ON_DIFFERENT_DAY_IN_GROUP: ['getFullYear', 'getMonth', 'getDate'],
146
+ ON_DIFFERENT_MONTH_IN_GROUP: ['getFullYear', 'getMonth'],
147
+ ON_DIFFERENT_HMS_IN_GROUP: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],
147
148
  };
148
149
 
149
150
  var NgxTimelineItemPosition;
@@ -247,7 +248,7 @@ class NgxTimelineComponent {
247
248
  /**
248
249
  * Logic to be applied in order to put evetns on LEFT or RIGHT
249
250
  */
250
- this.changeSideInGroup = NgxTimelineEventChangeSideInGroup.ON_DIFFERENT_DAY;
251
+ this.changeSide = NgxTimelineEventChangeSide.ON_DIFFERENT_DAY_IN_GROUP;
251
252
  /**
252
253
  * Output click event emitter
253
254
  */
@@ -257,13 +258,23 @@ class NgxTimelineComponent {
257
258
  this.items = [];
258
259
  this.ngxTimelineItemPosition = NgxTimelineItemPosition;
259
260
  this.ngxDateFormat = NgxDateFormat;
261
+ this.differs = inject(IterableDiffers);
262
+ this.iterableDiffer = this.differs.find([]).create();
260
263
  this.separator = '/';
261
264
  }
262
265
  ngOnInit() {
263
266
  this.groupEvents(this.events);
264
267
  }
265
- ngOnChanges(changes) {
268
+ ngOnChanges() {
266
269
  this.groupEvents(this.events);
270
+ console.log('ngOnChanges');
271
+ }
272
+ ngDoCheck() {
273
+ console.log('ngDoCheck');
274
+ const changes = this.iterableDiffer.diff(this.events);
275
+ if (changes) {
276
+ this.groupEvents(this.events);
277
+ }
267
278
  }
268
279
  getPeriodKeyDateFormat() {
269
280
  return periodKeyDateFormat[this.groupEvent];
@@ -302,14 +313,18 @@ class NgxTimelineComponent {
302
313
  });
303
314
  }
304
315
  setItems() {
316
+ let isLastItemOnLeft = false;
305
317
  this.periods.forEach((p) => {
306
318
  // insert first the period
307
319
  this.items.push(p);
308
320
  // in each period putting items on left
309
- const onLeft = true;
321
+ let onLeft = true;
322
+ if (this.changeSide === NgxTimelineEventChangeSide.ALL) {
323
+ onLeft = !isLastItemOnLeft;
324
+ }
310
325
  const periodInfo = p.periodInfo;
311
326
  // insert then all the events in this period
312
- this.addPeriodEvents(periodInfo, onLeft);
327
+ isLastItemOnLeft = this.addPeriodEvents(periodInfo, onLeft);
313
328
  // onLeft = this.addEventItemsAndGetIfOnLeft(periodInfo, onLeft);
314
329
  });
315
330
  }
@@ -324,7 +339,7 @@ class NgxTimelineComponent {
324
339
  }
325
340
  this.pushEventOnItems(event, onLeft);
326
341
  });
327
- // return onLeft;
342
+ return onLeft;
328
343
  }
329
344
  pushEventOnItems(event, onLeft) {
330
345
  this.items.push({
@@ -336,8 +351,8 @@ class NgxTimelineComponent {
336
351
  * Compare the events inside the same group
337
352
  */
338
353
  compareEvents(prevEvent, event) {
339
- return this.changeSideInGroup === NgxTimelineEventChangeSideInGroup.ALL ||
340
- this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSideInGroup[this.changeSideInGroup]);
354
+ return this.shouldChangeEventsInPeriod() ||
355
+ this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSideInGroup[this.changeSide]);
341
356
  }
342
357
  compareEventsField(prevEvent, event, ...fields) {
343
358
  return fields.reduce((res, field) => res = res || prevEvent.timestamp[field]() !== event.timestamp[field](), !!false);
@@ -357,16 +372,19 @@ class NgxTimelineComponent {
357
372
  },
358
373
  };
359
374
  }
375
+ shouldChangeEventsInPeriod() {
376
+ return [NgxTimelineEventChangeSide.ALL_IN_GROUP, NgxTimelineEventChangeSide.ALL].indexOf(this.changeSide) != -1;
377
+ }
360
378
  getPeriodKeyFromEvent(event) {
361
379
  return fieldsToAddEventGroup[this.groupEvent].map((field) => event.timestamp[field]()).join(this.separator);
362
380
  }
363
381
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: NgxTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
364
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: NgxTimelineComponent, selector: "ngx-timeline", inputs: { events: "events", langCode: "langCode", enableAnimation: "enableAnimation", reverseOrder: "reverseOrder", groupEvent: "groupEvent", changeSideInGroup: "changeSideInGroup", periodCustomTemplate: "periodCustomTemplate", eventCustomTemplate: "eventCustomTemplate", centerIconCustomTemplate: "centerIconCustomTemplate", dateInstantCustomTemplate: "dateInstantCustomTemplate", innerEventCustomTemplate: "innerEventCustomTemplate" }, outputs: { clickEmitter: "clickEmitter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n", styles: [".main-container{display:flex;justify-content:center;width:100%}.items-container{padding:1rem 0;min-width:max(20rem,100%)}.row{display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column;justify-content:center}.col-left{align-items:flex-end;padding:0;flex:49 49 0}.col-right{align-items:flex-start;padding:0;flex:49 49 0}.col-center{min-height:6rem;padding:0;flex:2 2 0}.center-inner{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%}.center-inner .line{min-height:50%;max-height:50%;height:50%;background:#464646;width:.1rem}.center-inner .line.transparent{background:transparent}.period-container{background:orange;color:#fff;margin:0;padding:.2rem .5rem}.period-container .period-inner-container{width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{padding:.8rem 0;display:flex;justify-content:center;align-items:center;position:relative;height:10px;width:10px;background:white}.center-icon-container .icon{height:1rem;width:1rem;border-radius:50%;background:orange;margin:0;position:absolute}.event-outer-container{margin:0 .5rem;width:100%}.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.hour.right{justify-content:flex-start}.hour.left{justify-content:flex-end}.hour .hour-inner-container{margin:0}.desktop{display:flex!important}.mobile{display:none!important}@media (max-width: 900px){.desktop{display:none!important}.mobile{display:flex!important}.event-outer-container{margin:.5rem .3rem}.col-left{align-items:flex-start}.col-left .hour{font-size:12px;padding:0;margin-right:.3rem}.col-left.col-period{flex:18 18 0}.col-left.col-event{flex:18 18 0;padding:0;align-items:flex-end}.col-right{align-items:flex-start}.col-right.col-period{flex:77 77 0}.col-right.col-event{flex:77 77 0;padding:0}.col-center{min-height:6rem;justify-content:center;margin:0}.col-center.col-period{flex:5 5 0;min-height:3rem}.col-center.col-event{flex:5 5 0}.center-inner{align-items:center}.period-container{min-height:20%;height:20%;max-height:20%;background:transparent;display:flex;justify-content:center;align-items:center;border-radius:6px}.period-container .period-inner-container{position:absolute;background:orange;color:#fff;width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{align-items:center;justify-content:center}.center-icon-container .icon{height:1rem;width:1rem;position:absolute}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgxTimelineEventComponent, selector: "ngx-timeline-event", inputs: ["event", "colSidePosition", "langCode", "innerEventCustomTemplate", "enableAnimation"], outputs: ["clickEmitter"] }, { kind: "pipe", type: NgxDatePipe, name: "ngxdate" }] }); }
382
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: NgxTimelineComponent, selector: "ngx-timeline", inputs: { events: "events", langCode: "langCode", enableAnimation: "enableAnimation", reverseOrder: "reverseOrder", groupEvent: "groupEvent", changeSide: "changeSide", periodCustomTemplate: "periodCustomTemplate", eventCustomTemplate: "eventCustomTemplate", centerIconCustomTemplate: "centerIconCustomTemplate", dateInstantCustomTemplate: "dateInstantCustomTemplate", innerEventCustomTemplate: "innerEventCustomTemplate" }, outputs: { clickEmitter: "clickEmitter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n", styles: [".main-container{display:flex;justify-content:center;width:100%}.items-container{padding:1rem 0;min-width:max(20rem,100%)}.row{display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column;justify-content:center}.col-left{align-items:flex-end;padding:0;flex:49 49 0}.col-right{align-items:flex-start;padding:0;flex:49 49 0}.col-center{min-height:6rem;padding:0;flex:2 2 0}.center-inner{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%}.center-inner .line{min-height:50%;max-height:50%;height:50%;background:#464646;width:.1rem}.center-inner .line.transparent{background:transparent}.period-container{background:orange;color:#fff;margin:0;padding:.2rem .5rem}.period-container .period-inner-container{width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{padding:.8rem 0;display:flex;justify-content:center;align-items:center;position:relative;height:10px;width:10px;background:white}.center-icon-container .icon{height:1rem;width:1rem;border-radius:50%;background:orange;margin:0;position:absolute}.event-outer-container{margin:0 .5rem;width:100%}.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.hour.right{justify-content:flex-start}.hour.left{justify-content:flex-end}.hour .hour-inner-container{margin:0}.desktop{display:flex!important}.mobile{display:none!important}@media (max-width: 900px){.desktop{display:none!important}.mobile{display:flex!important}.event-outer-container{margin:.5rem .3rem}.col-left{align-items:flex-start}.col-left .hour{font-size:12px;padding:0;margin-right:.3rem}.col-left.col-period{flex:18 18 0}.col-left.col-event{flex:18 18 0;padding:0;align-items:flex-end}.col-right{align-items:flex-start}.col-right.col-period{flex:77 77 0}.col-right.col-event{flex:77 77 0;padding:0}.col-center{min-height:6rem;justify-content:center;margin:0}.col-center.col-period{flex:5 5 0;min-height:3rem}.col-center.col-event{flex:5 5 0}.center-inner{align-items:center}.period-container{min-height:20%;height:20%;max-height:20%;background:transparent;display:flex;justify-content:center;align-items:center;border-radius:6px}.period-container .period-inner-container{position:absolute;background:orange;color:#fff;width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{align-items:center;justify-content:center}.center-icon-container .icon{height:1rem;width:1rem;position:absolute}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgxTimelineEventComponent, selector: "ngx-timeline-event", inputs: ["event", "colSidePosition", "langCode", "innerEventCustomTemplate", "enableAnimation"], outputs: ["clickEmitter"] }, { kind: "pipe", type: NgxDatePipe, name: "ngxdate" }] }); }
365
383
  }
366
384
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: NgxTimelineComponent, decorators: [{
367
385
  type: Component,
368
386
  args: [{ selector: 'ngx-timeline', template: "<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n", styles: [".main-container{display:flex;justify-content:center;width:100%}.items-container{padding:1rem 0;min-width:max(20rem,100%)}.row{display:flex;flex-wrap:wrap}.row>[class*=col-]{display:flex;flex-direction:column;justify-content:center}.col-left{align-items:flex-end;padding:0;flex:49 49 0}.col-right{align-items:flex-start;padding:0;flex:49 49 0}.col-center{min-height:6rem;padding:0;flex:2 2 0}.center-inner{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%}.center-inner .line{min-height:50%;max-height:50%;height:50%;background:#464646;width:.1rem}.center-inner .line.transparent{background:transparent}.period-container{background:orange;color:#fff;margin:0;padding:.2rem .5rem}.period-container .period-inner-container{width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{padding:.8rem 0;display:flex;justify-content:center;align-items:center;position:relative;height:10px;width:10px;background:white}.center-icon-container .icon{height:1rem;width:1rem;border-radius:50%;background:orange;margin:0;position:absolute}.event-outer-container{margin:0 .5rem;width:100%}.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.hour.right{justify-content:flex-start}.hour.left{justify-content:flex-end}.hour .hour-inner-container{margin:0}.desktop{display:flex!important}.mobile{display:none!important}@media (max-width: 900px){.desktop{display:none!important}.mobile{display:flex!important}.event-outer-container{margin:.5rem .3rem}.col-left{align-items:flex-start}.col-left .hour{font-size:12px;padding:0;margin-right:.3rem}.col-left.col-period{flex:18 18 0}.col-left.col-event{flex:18 18 0;padding:0;align-items:flex-end}.col-right{align-items:flex-start}.col-right.col-period{flex:77 77 0}.col-right.col-event{flex:77 77 0;padding:0}.col-center{min-height:6rem;justify-content:center;margin:0}.col-center.col-period{flex:5 5 0;min-height:3rem}.col-center.col-event{flex:5 5 0}.center-inner{align-items:center}.period-container{min-height:20%;height:20%;max-height:20%;background:transparent;display:flex;justify-content:center;align-items:center;border-radius:6px}.period-container .period-inner-container{position:absolute;background:orange;color:#fff;width:max-content;padding:.2rem .5rem;z-index:10}.center-icon-container{align-items:center;justify-content:center}.center-icon-container .icon{height:1rem;width:1rem;position:absolute}}\n"] }]
369
- }], ctorParameters: () => [], propDecorators: { events: [{
387
+ }], propDecorators: { events: [{
370
388
  type: Input
371
389
  }], langCode: [{
372
390
  type: Input
@@ -376,7 +394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
376
394
  type: Input
377
395
  }], groupEvent: [{
378
396
  type: Input
379
- }], changeSideInGroup: [{
397
+ }], changeSide: [{
380
398
  type: Input
381
399
  }], periodCustomTemplate: [{
382
400
  type: Input
@@ -423,5 +441,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
423
441
  * Generated bundle index. Do not edit.
424
442
  */
425
443
 
426
- export { NgxDateFormat, NgxDatePipe, NgxTimelineComponent, NgxTimelineEventChangeSideInGroup, NgxTimelineEventComponent, NgxTimelineEventGroup, NgxTimelineItemPosition, NgxTimelineModule, dateConfigMap, fieldConfigDate, fieldsToAddEventGroup, fieldsToCheckEventChangeSideInGroup, periodKeyDateFormat, supportedLanguageCodes };
444
+ export { NgxDateFormat, NgxDatePipe, NgxTimelineComponent, NgxTimelineEventChangeSide, NgxTimelineEventComponent, NgxTimelineEventGroup, NgxTimelineItemPosition, NgxTimelineModule, dateConfigMap, fieldConfigDate, fieldsToAddEventGroup, fieldsToCheckEventChangeSideInGroup, periodKeyDateFormat, supportedLanguageCodes };
427
445
  //# sourceMappingURL=frxjs-ngx-timeline.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"frxjs-ngx-timeline.mjs","sources":["../../../projects/ngx-timeline/src/lib/models/NgxConfigObj.ts","../../../projects/ngx-timeline/src/lib/models/NgxTimelineEvent.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline-event/ngx-timeline-event.component.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline-event/ngx-timeline-event.component.html","../../../projects/ngx-timeline/src/lib/pipes/ngx-date-pipe.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline.component.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline.component.html","../../../projects/ngx-timeline/src/lib/ngx-timeline.module.ts","../../../projects/ngx-timeline/src/public-api.ts","../../../projects/ngx-timeline/src/frxjs-ngx-timeline.ts"],"sourcesContent":["export const supportedLanguageCodes = ['en', 'it', 'fr', 'de', 'es', 'sl', 'tr', 'pl', 'pt', 'ru'];\n\nexport interface NgxConfigDate {\n code: string;\n dayMonthYear: string;\n fullDate: string;\n hoursMinutes: string;\n monthYear: string;\n year: string;\n}\n\nexport interface NgxDateObjMap {\n [key: string]: NgxConfigDate;\n}\n\nexport const dateConfigMap: NgxDateObjMap = {\n en: {\n code: 'en-US',\n fullDate: 'MM/dd/yyyy h:mm a',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'hh:mm a',\n },\n it: {\n code: 'it-IT',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n fr: {\n code: 'fr-FR',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n de: {\n code: 'de',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n es: {\n code: 'es',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n sl: {\n code: 'sl-SL',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n tr: {\n code: 'tr',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n pl: {\n code: 'pl',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n pt: {\n code: 'pt',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n ru: {\n code: 'ru-RU',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n }\n};\n\nexport enum NgxDateFormat {\n DAY_MONTH_YEAR = 'DAY_MONTH_YEAR',\n FULL_DATE = 'FULL_DATE',\n MONTH_YEAR = 'MONTH_YEAR',\n HOURS_MINUTES = 'HOURS_MINUTES',\n YEAR = 'YEAR'\n}\n\nexport const fieldConfigDate = {\n MONTH_YEAR: 'monthYear',\n YEAR: 'year',\n HOURS_MINUTES: 'hoursMinutes',\n FULL_DATE: 'fullDate',\n DAY_MONTH_YEAR: 'dayMonthYear',\n};\n\n/**\n * Enum used to set the group event logic\n */\nexport enum NgxTimelineEventGroup {\n YEAR = 'YEAR',\n MONTH_YEAR = 'MONTH_YEAR',\n DAY_MONTH_YEAR = 'DAY_MONTH_YEAR'\n}\n\nexport const fieldsToAddEventGroup = {\n YEAR: ['getFullYear'],\n MONTH_YEAR: ['getFullYear', 'getMonth'],\n DAY_MONTH_YEAR: ['getFullYear', 'getMonth', 'getDate'],\n};\n\nexport const periodKeyDateFormat = {\n YEAR: NgxDateFormat.YEAR,\n MONTH_YEAR: NgxDateFormat.MONTH_YEAR,\n DAY_MONTH_YEAR: NgxDateFormat.DAY_MONTH_YEAR,\n};\n\n/**\n * Enum used to set the change side event logic\n */\nexport enum NgxTimelineEventChangeSideInGroup {\n ALL = 'ALL',\n ON_DIFFERENT_HMS = 'ON_DIFFERENT_HMS',\n ON_DIFFERENT_DAY = 'ON_DIFFERENT_DAY',\n ON_DIFFERENT_MONTH = 'ON_DIFFERENT_MONTH'\n}\n\nexport const fieldsToCheckEventChangeSideInGroup = {\n ON_DIFFERENT_MONTH: ['getFullYear', 'getMonth'],\n ON_DIFFERENT_DAY: ['getFullYear', 'getMonth', 'getDate'],\n ON_DIFFERENT_HMS: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],\n};\n","/**\n * Event to be provided from outside the timeline\n */\nexport interface NgxTimelineEvent {\n timestamp?: Date;\n title?: string;\n description?: string;\n id?: any;\n itemPosition?: NgxTimelineItemPosition;\n}\n\nexport interface NgxTimelinePeriodInfo {\n periodKey?: string;\n year?: number;\n month?: number;\n day?: number;\n firstDate?: any;\n}\n\n/**\n * Item used inside the timeline\n */\nexport interface NgxTimelineItem {\n type?: string;\n position?: NgxTimelineItemPosition.ON_LEFT | NgxTimelineItemPosition.ON_RIGHT;\n periodInfo?: NgxTimelinePeriodInfo;\n eventInfo?: NgxTimelineEvent;\n}\n\nexport enum NgxTimelineItemPosition {\n ON_LEFT = 'ON_LEFT',\n ON_RIGHT = 'ON_RIGHT'\n}\n","import {Component, Input, Output, TemplateRef} from '@angular/core';\nimport {NgxTimelineItem, NgxTimelineItemPosition} from '../../models/NgxTimelineEvent';\nimport {DatePipe} from '@angular/common';\nimport {BehaviorSubject} from 'rxjs';\nimport {supportedLanguageCodes} from '../../models';\n\n@Component({\n selector: 'ngx-timeline-event',\n templateUrl: './ngx-timeline-event.component.html',\n styleUrls: ['./ngx-timeline-event.component.scss'],\n})\nexport class NgxTimelineEventComponent {\n /**\n * Event to be displayed\n */\n @Input() event: NgxTimelineItem;\n /**\n * Event position respect to the vertical line (LEFT or RIGHT)\n */\n @Input() colSidePosition: NgxTimelineItemPosition;\n /**\n * Language code used to format the dates\n */\n @Input() langCode?: string;\n /**\n * Inner custom template used to display the event detail\n */\n @Input() innerEventCustomTemplate?: TemplateRef<any>;\n /**\n * Boolean used to enable or disable the animations\n */\n @Input() enableAnimation = true;\n /**\n * Output click event emitter\n */\n @Output() clickEmitter: BehaviorSubject<NgxTimelineItem> = new BehaviorSubject(null);\n\n ngxTimelineItemPosition = NgxTimelineItemPosition;\n\n private readonly monthAbbr = 'MMM';\n private readonly dayFormat = 'dd';\n\n constructor() { }\n\n getDateObj(): any {\n let day;\n let month;\n let year;\n const dateTimestamp = this.event?.eventInfo?.timestamp;\n if (dateTimestamp) {\n const timestamp = new Date(dateTimestamp);\n const langCode = this.getLangCode();\n month = new DatePipe(langCode).transform(timestamp, this.monthAbbr);\n day = new DatePipe(langCode).transform(timestamp, this.dayFormat);\n year = timestamp.getFullYear();\n }\n\n return {day, month, year};\n }\n\n protected getLangCode(): string {\n return this.langCode && supportedLanguageCodes.includes(this.langCode) ? this.langCode : supportedLanguageCodes[0];\n }\n}\n","<div class=\"event-wrapper-container\" (click)=\"clickEmitter.next(event)\">\n <div *ngIf=\"colSidePosition===ngxTimelineItemPosition.ON_RIGHT\" class=\"arrow left\"></div>\n <div class=\"event\" [ngClass]=\"{'enableAnimation': enableAnimation}\">\n <ng-container *ngTemplateOutlet=\"innerEventCustomTemplate || innerEventContainer; context: {event: event}\"\n >\n </ng-container>\n </div>\n <div *ngIf=\"colSidePosition===ngxTimelineItemPosition.ON_LEFT\" class=\"arrow right\"></div>\n</div>\n\n<ng-template #innerEventContainer let-event=event>\n <div class=\"event-container\" [ngClass]=\"{'reverse': colSidePosition === ngxTimelineItemPosition.ON_LEFT}\">\n <div class=\"event-info-container\">\n <div class=\"event-info-header\">\n <div class=\"title-container\">{{event?.eventInfo?.title | titlecase}}</div>\n </div>\n <div class=\"event-info-body\">\n <p class=\"event-info-description\">{{event?.eventInfo?.description}}</p>\n </div>\n </div>\n\n <div class=\"event-divider-container\">\n <hr/>\n </div>\n\n <div class=\"event-date-container\" *ngIf=\"getDateObj() as dateObj\">\n <div>\n <p>{{dateObj?.month}}</p>\n </div>\n <div>\n <p class=\"day\">{{dateObj?.day}}</p>\n </div>\n <div>\n <p>{{dateObj?.year}}</p>\n </div>\n </div>\n </div>\n</ng-template>\n","import {DatePipe} from '@angular/common';\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {NgxConfigDate, supportedLanguageCodes, fieldConfigDate, dateConfigMap} from '../models';\n\n@Pipe({name: 'ngxdate', pure: false})\nexport class NgxDatePipe implements PipeTransform {\n constructor() {\n }\n\n transform(date: Date | string, dateFormat?: string, langCode?: string): string {\n let transformedDate = null;\n if (date) {\n const objDate = this.getDateConfig(langCode);\n transformedDate = new DatePipe(objDate.code).transform(new Date(date), this.dateFormat(dateFormat, objDate));\n }\n return transformedDate;\n }\n\n private dateFormat(dateFormat: string, configDate: NgxConfigDate): string {\n return configDate[fieldConfigDate[dateFormat]];\n }\n\n private getDateConfig(langCode: string): NgxConfigDate {\n const code = langCode || supportedLanguageCodes[0];\n const configDate = dateConfigMap[code] || dateConfigMap[supportedLanguageCodes[0]];\n return configDate;\n }\n}\n","import {Component, OnInit, Input, TemplateRef, OnChanges, SimpleChanges, Output} from '@angular/core';\nimport {\n NgxTimelineEvent,\n NgxTimelineItem,\n NgxTimelineItemPosition,\n NgxTimelinePeriodInfo,\n NgxDateFormat,\n NgxTimelineEventGroup,\n NgxTimelineEventChangeSideInGroup,\n periodKeyDateFormat,\n fieldsToCheckEventChangeSideInGroup,\n fieldsToAddEventGroup} from '../models';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'ngx-timeline',\n templateUrl: './ngx-timeline.component.html',\n styleUrls: ['./ngx-timeline.scss'],\n})\nexport class NgxTimelineComponent implements OnInit, OnChanges {\n /**\n * List of events to be displayed\n */\n @Input() events: NgxTimelineEvent[];\n /**\n * Language code used to show the date formatted\n */\n @Input() langCode?: string;\n /**\n * Boolean used to enable or disable the animations\n */\n @Input() enableAnimation = true;\n /**\n * Boolean used to reverse sort order (default older first)\n */\n @Input() reverseOrder = false;\n /**\n * Logic to be applied in order to group events\n */\n @Input() groupEvent?: NgxTimelineEventGroup = NgxTimelineEventGroup.MONTH_YEAR;\n /**\n * Logic to be applied in order to put evetns on LEFT or RIGHT\n */\n @Input() changeSideInGroup?: NgxTimelineEventChangeSideInGroup = NgxTimelineEventChangeSideInGroup.ON_DIFFERENT_DAY;\n /**\n * Custom Template displayed before a group of events\n */\n @Input() periodCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show a single event\n */\n @Input() eventCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show an separator icon\n */\n @Input() centerIconCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show the side date\n */\n @Input() dateInstantCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show the inner event\n */\n @Input() innerEventCustomTemplate: TemplateRef<any>;\n /**\n * Output click event emitter\n */\n @Output()\n clickEmitter: BehaviorSubject<NgxTimelineItem> = new BehaviorSubject(null);\n\n groups: { [key: string]: NgxTimelineEvent[] } = {};\n periods: NgxTimelineItem[] = [];\n items: NgxTimelineItem[] = [];\n ngxTimelineItemPosition = NgxTimelineItemPosition;\n ngxDateFormat = NgxDateFormat;\n\n private readonly separator = '/';\n\n constructor() {}\n\n\n ngOnInit(): void {\n this.groupEvents(this.events);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.groupEvents(this.events);\n }\n\n getPeriodKeyDateFormat(): string {\n return periodKeyDateFormat[this.groupEvent];\n }\n\n protected clear(): void {\n this.groups = {};\n this.periods = [];\n this.items = [];\n }\n\n protected groupEvents(events: NgxTimelineEvent[]): void {\n if (events) {\n this.clear();\n this.sortEvents(events);\n this.setGroupsAndPeriods(events);\n this.setItems();\n }\n }\n\n protected sortEvents(events: NgxTimelineEvent[]): void {\n events.sort((a, b) => {\n const aTime = a.timestamp.getTime();\n const bTime = b.timestamp.getTime();\n return this.reverseOrder ? bTime - aTime : aTime - bTime;});\n }\n\n protected setGroupsAndPeriods(events: NgxTimelineEvent[]): void {\n this.periods = [];\n events.forEach((event) => {\n // conversion from string to actual Date\n event.timestamp = new Date(event.timestamp);\n const periodKey = this.getPeriodKeyFromEvent(event);\n if (!this.groups[periodKey]) {\n this.groups[periodKey] = [];\n this.periods.push(this.getPeriodInfoFromPeriodKey(periodKey, event))\n }\n this.groups[periodKey].push(event);\n });\n }\n\n protected setItems(): void {\n this.periods.forEach((p) => {\n // insert first the period\n this.items.push(p);\n // in each period putting items on left\n const onLeft = true;\n const periodInfo = p.periodInfo;\n // insert then all the events in this period\n this.addPeriodEvents(periodInfo, onLeft);\n // onLeft = this.addEventItemsAndGetIfOnLeft(periodInfo, onLeft);\n });\n }\n\n protected addPeriodEvents(periodInfo: NgxTimelinePeriodInfo, onLeft: boolean): void {\n this.groups[periodInfo.periodKey].forEach((event, index) => {\n const prevEvent = this.groups[periodInfo.periodKey][index - 1];\n if (event.itemPosition) {\n onLeft = event.itemPosition && event.itemPosition === NgxTimelineItemPosition.ON_LEFT;\n } else if (index > 0 && this.compareEvents(prevEvent, event)) {\n onLeft = !onLeft;\n }\n this.pushEventOnItems(event, onLeft);\n });\n // return onLeft;\n }\n\n protected pushEventOnItems(event: NgxTimelineEvent, onLeft: boolean): void {\n this.items.push({\n eventInfo: {...event}, position: onLeft ?\n this.ngxTimelineItemPosition.ON_LEFT : this.ngxTimelineItemPosition.ON_RIGHT,\n });\n }\n\n /**\n * Compare the events inside the same group\n */\n protected compareEvents(prevEvent: NgxTimelineEvent, event: NgxTimelineEvent): boolean {\n return this.changeSideInGroup === NgxTimelineEventChangeSideInGroup.ALL ||\n this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSideInGroup[this.changeSideInGroup]);\n }\n\n protected compareEventsField(prevEvent: NgxTimelineEvent, event: NgxTimelineEvent, ...fields: string[]): boolean {\n return fields.reduce((res, field) => res = res || prevEvent.timestamp[field]() !== event.timestamp[field](), !!false);\n }\n\n protected getPeriodInfoFromPeriodKey(periodKey: string, firstGroupEvent: NgxTimelineEvent): { periodInfo: NgxTimelinePeriodInfo } {\n const split = periodKey.split(this.separator);\n return this.getPeriodInfo(split, periodKey, firstGroupEvent);\n }\n\n private getPeriodInfo(split: string[], periodKey: string, firstGroupEvent: NgxTimelineEvent): { periodInfo: NgxTimelinePeriodInfo } {\n return {\n periodInfo: {\n year: Number(split[0]),\n month: Number(split[1]),\n day: Number(split[2]),\n periodKey,\n firstDate: firstGroupEvent.timestamp as Date,\n },\n };\n }\n\n protected getPeriodKeyFromEvent(event: NgxTimelineEvent): string {\n return fieldsToAddEventGroup[this.groupEvent].map((field) => event.timestamp[field]()).join(this.separator);\n }\n}\n","<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n","import {NgModule} from '@angular/core';\nimport {NgxTimelineComponent} from './components';\nimport {NgxTimelineEventComponent}\n from './components';\nimport {CommonModule, registerLocaleData} from '@angular/common';\nimport {NgxDatePipe} from './pipes';\nimport localeIt from '@angular/common/locales/it';\nimport localeFr from '@angular/common/locales/fr';\nimport localeDe from '@angular/common/locales/de';\nimport localeEs from '@angular/common/locales/es';\nimport localeSl from '@angular/common/locales/sl';\nimport localeTr from '@angular/common/locales/tr';\nimport localePl from '@angular/common/locales/pl';\nimport localePt from '@angular/common/locales/pt';\nimport localeRu from '@angular/common/locales/ru';\n\nregisterLocaleData(localeIt);\nregisterLocaleData(localeFr);\nregisterLocaleData(localeDe);\nregisterLocaleData(localeEs);\nregisterLocaleData(localeSl);\nregisterLocaleData(localeTr);\nregisterLocaleData(localePl);\nregisterLocaleData(localePt);\nregisterLocaleData(localeRu);\n\n@NgModule({\n declarations: [NgxTimelineComponent, NgxTimelineEventComponent, NgxDatePipe],\n imports: [CommonModule],\n exports: [NgxTimelineComponent, NgxDatePipe],\n})\nexport class NgxTimelineModule { }\n","/*\n * Public API Surface of ngx-timeline\n */\nexport * from './lib/components';\nexport * from './lib/models';\nexport * from './lib/pipes/';\nexport * from './lib/ngx-timeline.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.NgxTimelineEventComponent","i3.NgxDatePipe"],"mappings":"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"}
1
+ {"version":3,"file":"frxjs-ngx-timeline.mjs","sources":["../../../projects/ngx-timeline/src/lib/models/NgxConfigObj.ts","../../../projects/ngx-timeline/src/lib/models/NgxTimelineEvent.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline-event/ngx-timeline-event.component.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline-event/ngx-timeline-event.component.html","../../../projects/ngx-timeline/src/lib/pipes/ngx-date-pipe.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline.component.ts","../../../projects/ngx-timeline/src/lib/components/ngx-timeline.component.html","../../../projects/ngx-timeline/src/lib/ngx-timeline.module.ts","../../../projects/ngx-timeline/src/public-api.ts","../../../projects/ngx-timeline/src/frxjs-ngx-timeline.ts"],"sourcesContent":["export const supportedLanguageCodes = ['en', 'it', 'fr', 'de', 'es', 'sl', 'tr', 'pl', 'pt', 'ru'];\n\nexport interface NgxConfigDate {\n code: string;\n dayMonthYear: string;\n fullDate: string;\n hoursMinutes: string;\n monthYear: string;\n year: string;\n}\n\nexport interface NgxDateObjMap {\n [key: string]: NgxConfigDate;\n}\n\nexport const dateConfigMap: NgxDateObjMap = {\n en: {\n code: 'en-US',\n fullDate: 'MM/dd/yyyy h:mm a',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'hh:mm a',\n },\n it: {\n code: 'it-IT',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n fr: {\n code: 'fr-FR',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n de: {\n code: 'de',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n es: {\n code: 'es',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n sl: {\n code: 'sl-SL',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n tr: {\n code: 'tr',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n pl: {\n code: 'pl',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n pt: {\n code: 'pt',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n },\n ru: {\n code: 'ru-RU',\n fullDate: 'dd/MM/yyyy H:mm',\n dayMonthYear: 'dd MMMM yyyy',\n monthYear: 'MMMM yyyy',\n year: 'yyyy',\n hoursMinutes: 'HH:mm',\n }\n};\n\nexport enum NgxDateFormat {\n DAY_MONTH_YEAR = 'DAY_MONTH_YEAR',\n FULL_DATE = 'FULL_DATE',\n MONTH_YEAR = 'MONTH_YEAR',\n HOURS_MINUTES = 'HOURS_MINUTES',\n YEAR = 'YEAR'\n}\n\nexport const fieldConfigDate = {\n MONTH_YEAR: 'monthYear',\n YEAR: 'year',\n HOURS_MINUTES: 'hoursMinutes',\n FULL_DATE: 'fullDate',\n DAY_MONTH_YEAR: 'dayMonthYear',\n};\n\n/**\n * Enum used to set the group event logic\n */\nexport enum NgxTimelineEventGroup {\n YEAR = 'YEAR',\n MONTH_YEAR = 'MONTH_YEAR',\n DAY_MONTH_YEAR = 'DAY_MONTH_YEAR'\n}\n\nexport const fieldsToAddEventGroup = {\n YEAR: ['getFullYear'],\n MONTH_YEAR: ['getFullYear', 'getMonth'],\n DAY_MONTH_YEAR: ['getFullYear', 'getMonth', 'getDate'],\n};\n\nexport const periodKeyDateFormat = {\n YEAR: NgxDateFormat.YEAR,\n MONTH_YEAR: NgxDateFormat.MONTH_YEAR,\n DAY_MONTH_YEAR: NgxDateFormat.DAY_MONTH_YEAR,\n};\n\n/**\n * Enum used to set the change side event logic\n */\nexport enum NgxTimelineEventChangeSide {\n ALL = 'ALL',\n ALL_IN_GROUP = 'ALL_IN_GROUP',\n ON_DIFFERENT_DAY_IN_GROUP = 'ON_DIFFERENT_DAY_IN_GROUP',\n ON_DIFFERENT_HMS_IN_GROUP = 'ON_DIFFERENT_HMS_IN_GROUP',\n ON_DIFFERENT_MONTH_IN_GROUP = 'ON_DIFFERENT_MONTH_IN_GROUP'\n}\n\nexport const fieldsToCheckEventChangeSideInGroup = {\n ON_DIFFERENT_DAY_IN_GROUP: ['getFullYear', 'getMonth', 'getDate'],\n ON_DIFFERENT_MONTH_IN_GROUP: ['getFullYear', 'getMonth'],\n ON_DIFFERENT_HMS_IN_GROUP: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],\n};\n","/**\n * Event to be provided from outside the timeline\n */\nexport interface NgxTimelineEvent {\n timestamp?: Date;\n title?: string;\n description?: string;\n id?: any;\n itemPosition?: NgxTimelineItemPosition;\n}\n\nexport interface NgxTimelinePeriodInfo {\n periodKey?: string;\n year?: number;\n month?: number;\n day?: number;\n firstDate?: any;\n}\n\n/**\n * Item used inside the timeline\n */\nexport interface NgxTimelineItem {\n type?: string;\n position?: NgxTimelineItemPosition.ON_LEFT | NgxTimelineItemPosition.ON_RIGHT;\n periodInfo?: NgxTimelinePeriodInfo;\n eventInfo?: NgxTimelineEvent;\n}\n\nexport enum NgxTimelineItemPosition {\n ON_LEFT = 'ON_LEFT',\n ON_RIGHT = 'ON_RIGHT'\n}\n","import {Component, Input, Output, TemplateRef} from '@angular/core';\nimport {NgxTimelineItem, NgxTimelineItemPosition} from '../../models/NgxTimelineEvent';\nimport {DatePipe} from '@angular/common';\nimport {BehaviorSubject} from 'rxjs';\nimport {supportedLanguageCodes} from '../../models';\n\n@Component({\n selector: 'ngx-timeline-event',\n templateUrl: './ngx-timeline-event.component.html',\n styleUrls: ['./ngx-timeline-event.component.scss'],\n})\nexport class NgxTimelineEventComponent {\n /**\n * Event to be displayed\n */\n @Input() event: NgxTimelineItem;\n /**\n * Event position respect to the vertical line (LEFT or RIGHT)\n */\n @Input() colSidePosition: NgxTimelineItemPosition;\n /**\n * Language code used to format the dates\n */\n @Input() langCode?: string;\n /**\n * Inner custom template used to display the event detail\n */\n @Input() innerEventCustomTemplate?: TemplateRef<any>;\n /**\n * Boolean used to enable or disable the animations\n */\n @Input() enableAnimation = true;\n /**\n * Output click event emitter\n */\n @Output() clickEmitter: BehaviorSubject<NgxTimelineItem> = new BehaviorSubject(null);\n\n ngxTimelineItemPosition = NgxTimelineItemPosition;\n\n private readonly monthAbbr = 'MMM';\n private readonly dayFormat = 'dd';\n\n constructor() { }\n\n getDateObj(): any {\n let day;\n let month;\n let year;\n const dateTimestamp = this.event?.eventInfo?.timestamp;\n if (dateTimestamp) {\n const timestamp = new Date(dateTimestamp);\n const langCode = this.getLangCode();\n month = new DatePipe(langCode).transform(timestamp, this.monthAbbr);\n day = new DatePipe(langCode).transform(timestamp, this.dayFormat);\n year = timestamp.getFullYear();\n }\n\n return {day, month, year};\n }\n\n protected getLangCode(): string {\n return this.langCode && supportedLanguageCodes.includes(this.langCode) ? this.langCode : supportedLanguageCodes[0];\n }\n}\n","<div class=\"event-wrapper-container\" (click)=\"clickEmitter.next(event)\">\n <div *ngIf=\"colSidePosition===ngxTimelineItemPosition.ON_RIGHT\" class=\"arrow left\"></div>\n <div class=\"event\" [ngClass]=\"{'enableAnimation': enableAnimation}\">\n <ng-container *ngTemplateOutlet=\"innerEventCustomTemplate || innerEventContainer; context: {event: event}\"\n >\n </ng-container>\n </div>\n <div *ngIf=\"colSidePosition===ngxTimelineItemPosition.ON_LEFT\" class=\"arrow right\"></div>\n</div>\n\n<ng-template #innerEventContainer let-event=event>\n <div class=\"event-container\" [ngClass]=\"{'reverse': colSidePosition === ngxTimelineItemPosition.ON_LEFT}\">\n <div class=\"event-info-container\">\n <div class=\"event-info-header\">\n <div class=\"title-container\">{{event?.eventInfo?.title | titlecase}}</div>\n </div>\n <div class=\"event-info-body\">\n <p class=\"event-info-description\">{{event?.eventInfo?.description}}</p>\n </div>\n </div>\n\n <div class=\"event-divider-container\">\n <hr/>\n </div>\n\n <div class=\"event-date-container\" *ngIf=\"getDateObj() as dateObj\">\n <div>\n <p>{{dateObj?.month}}</p>\n </div>\n <div>\n <p class=\"day\">{{dateObj?.day}}</p>\n </div>\n <div>\n <p>{{dateObj?.year}}</p>\n </div>\n </div>\n </div>\n</ng-template>\n","import {DatePipe} from '@angular/common';\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {NgxConfigDate, supportedLanguageCodes, fieldConfigDate, dateConfigMap} from '../models';\n\n@Pipe({name: 'ngxdate', pure: false})\nexport class NgxDatePipe implements PipeTransform {\n constructor() {\n }\n\n transform(date: Date | string, dateFormat?: string, langCode?: string): string {\n let transformedDate = null;\n if (date) {\n const objDate = this.getDateConfig(langCode);\n transformedDate = new DatePipe(objDate.code).transform(new Date(date), this.dateFormat(dateFormat, objDate));\n }\n return transformedDate;\n }\n\n private dateFormat(dateFormat: string, configDate: NgxConfigDate): string {\n return configDate[fieldConfigDate[dateFormat]];\n }\n\n private getDateConfig(langCode: string): NgxConfigDate {\n const code = langCode || supportedLanguageCodes[0];\n const configDate = dateConfigMap[code] || dateConfigMap[supportedLanguageCodes[0]];\n return configDate;\n }\n}\n","import {Component, OnInit, Input, TemplateRef, OnChanges, SimpleChanges, Output, IterableDiffers, IterableDiffer, DoCheck, inject} from '@angular/core';\nimport {\n NgxTimelineEvent,\n NgxTimelineItem,\n NgxTimelineItemPosition,\n NgxTimelinePeriodInfo,\n NgxDateFormat,\n NgxTimelineEventGroup,\n NgxTimelineEventChangeSide,\n periodKeyDateFormat,\n fieldsToCheckEventChangeSideInGroup as fieldsToCheckEventChangeSide,\n fieldsToAddEventGroup} from '../models';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'ngx-timeline',\n templateUrl: './ngx-timeline.component.html',\n styleUrls: ['./ngx-timeline.scss'],\n})\nexport class NgxTimelineComponent implements OnInit, OnChanges, DoCheck {\n /**\n * List of events to be displayed\n */\n @Input() events: NgxTimelineEvent[];\n /**\n * Language code used to show the date formatted\n */\n @Input() langCode?: string;\n /**\n * Boolean used to enable or disable the animations\n */\n @Input() enableAnimation = true;\n /**\n * Boolean used to reverse sort order (default older first)\n */\n @Input() reverseOrder = false;\n /**\n * Logic to be applied in order to group events\n */\n @Input() groupEvent?: NgxTimelineEventGroup = NgxTimelineEventGroup.MONTH_YEAR;\n /**\n * Logic to be applied in order to put evetns on LEFT or RIGHT\n */\n @Input() changeSide?: NgxTimelineEventChangeSide = NgxTimelineEventChangeSide.ON_DIFFERENT_DAY_IN_GROUP;\n /**\n * Custom Template displayed before a group of events\n */\n @Input() periodCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show a single event\n */\n @Input() eventCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show an separator icon\n */\n @Input() centerIconCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show the side date\n */\n @Input() dateInstantCustomTemplate: TemplateRef<any>;\n /**\n * Custom Template displayed to show the inner event\n */\n @Input() innerEventCustomTemplate: TemplateRef<any>;\n /**\n * Output click event emitter\n */\n @Output()\n clickEmitter: BehaviorSubject<NgxTimelineItem> = new BehaviorSubject(null);\n\n groups: { [key: string]: NgxTimelineEvent[] } = {};\n periods: NgxTimelineItem[] = [];\n items: NgxTimelineItem[] = [];\n ngxTimelineItemPosition = NgxTimelineItemPosition;\n ngxDateFormat = NgxDateFormat;\n\n private differs: IterableDiffers = inject(IterableDiffers);\n private iterableDiffer: IterableDiffer<any> = this.differs.find([]).create();\n private readonly separator = '/';\n\n ngOnInit(): void {\n this.groupEvents(this.events);\n }\n\n ngOnChanges() {\n this.groupEvents(this.events);\n console.log('ngOnChanges');\n }\n\n ngDoCheck() {\n console.log('ngDoCheck');\n const changes = this.iterableDiffer.diff(this.events);\n if (changes) {\n this.groupEvents(this.events);\n }\n }\n\n getPeriodKeyDateFormat(): string {\n return periodKeyDateFormat[this.groupEvent];\n }\n\n protected clear(): void {\n this.groups = {};\n this.periods = [];\n this.items = [];\n }\n\n protected groupEvents(events: NgxTimelineEvent[]): void {\n if (events) {\n this.clear();\n this.sortEvents(events);\n this.setGroupsAndPeriods(events);\n this.setItems();\n }\n }\n\n protected sortEvents(events: NgxTimelineEvent[]): void {\n events.sort((a, b) => {\n const aTime = a.timestamp.getTime();\n const bTime = b.timestamp.getTime();\n return this.reverseOrder ? bTime - aTime : aTime - bTime;});\n }\n\n protected setGroupsAndPeriods(events: NgxTimelineEvent[]): void {\n this.periods = [];\n events.forEach((event) => {\n // conversion from string to actual Date\n event.timestamp = new Date(event.timestamp);\n const periodKey = this.getPeriodKeyFromEvent(event);\n if (!this.groups[periodKey]) {\n this.groups[periodKey] = [];\n this.periods.push(this.getPeriodInfoFromPeriodKey(periodKey, event))\n }\n this.groups[periodKey].push(event);\n });\n }\n\n protected setItems(): void {\n let isLastItemOnLeft = false;\n this.periods.forEach((p) => {\n // insert first the period\n this.items.push(p);\n // in each period putting items on left\n let onLeft = true;\n if (this.changeSide === NgxTimelineEventChangeSide.ALL) {\n onLeft = !isLastItemOnLeft;\n }\n const periodInfo = p.periodInfo;\n // insert then all the events in this period\n isLastItemOnLeft = this.addPeriodEvents(periodInfo, onLeft);\n // onLeft = this.addEventItemsAndGetIfOnLeft(periodInfo, onLeft);\n });\n }\n\n protected addPeriodEvents(periodInfo: NgxTimelinePeriodInfo, onLeft: boolean): boolean {\n this.groups[periodInfo.periodKey].forEach((event, index) => {\n const prevEvent = this.groups[periodInfo.periodKey][index - 1];\n if (event.itemPosition) {\n onLeft = event.itemPosition && event.itemPosition === NgxTimelineItemPosition.ON_LEFT;\n } else if (index > 0 && this.compareEvents(prevEvent, event)) {\n onLeft = !onLeft;\n }\n this.pushEventOnItems(event, onLeft);\n });\n return onLeft;\n }\n\n protected pushEventOnItems(event: NgxTimelineEvent, onLeft: boolean): void {\n this.items.push({\n eventInfo: {...event}, position: onLeft ?\n this.ngxTimelineItemPosition.ON_LEFT : this.ngxTimelineItemPosition.ON_RIGHT,\n });\n }\n\n /**\n * Compare the events inside the same group\n */\n protected compareEvents(prevEvent: NgxTimelineEvent, event: NgxTimelineEvent): boolean {\n return this.shouldChangeEventsInPeriod() ||\n this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSide[this.changeSide]);\n }\n\n protected compareEventsField(prevEvent: NgxTimelineEvent, event: NgxTimelineEvent, ...fields: string[]): boolean {\n return fields.reduce((res, field) => res = res || prevEvent.timestamp[field]() !== event.timestamp[field](), !!false);\n }\n\n protected getPeriodInfoFromPeriodKey(periodKey: string, firstGroupEvent: NgxTimelineEvent): { periodInfo: NgxTimelinePeriodInfo } {\n const split = periodKey.split(this.separator);\n return this.getPeriodInfo(split, periodKey, firstGroupEvent);\n }\n\n private getPeriodInfo(split: string[], periodKey: string, firstGroupEvent: NgxTimelineEvent): { periodInfo: NgxTimelinePeriodInfo } {\n return {\n periodInfo: {\n year: Number(split[0]),\n month: Number(split[1]),\n day: Number(split[2]),\n periodKey,\n firstDate: firstGroupEvent.timestamp as Date,\n },\n };\n }\n\n private shouldChangeEventsInPeriod() {\n return [NgxTimelineEventChangeSide.ALL_IN_GROUP, NgxTimelineEventChangeSide.ALL].indexOf(this.changeSide) != -1;\n }\n\n protected getPeriodKeyFromEvent(event: NgxTimelineEvent): string {\n return fieldsToAddEventGroup[this.groupEvent].map((field) => event.timestamp[field]()).join(this.separator);\n }\n}\n","<div class=\"main-container\">\r\n <div class=\"items-container\">\r\n <div *ngFor=\"let item of items; let index = index;\" class=\"row\">\r\n <!-- DESKTOP -->\r\n <div class=\"col col-left desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_LEFT}\"></ng-container>\r\n </div>\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right desktop\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_RIGHT\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n <div class=\"hour right\" *ngIf=\"item.eventInfo && item.position === ngxTimelineItemPosition.ON_LEFT\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- MOBILE -->\r\n <div class=\"col col-left mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"hour left\" *ngIf=\"item.eventInfo\">\r\n <div class=\"hour-inner-container\">\r\n <ng-container *ngTemplateOutlet=\"dateInstantCustomTemplate || dateInstantTemplate; context: {item: item.eventInfo}\" ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-center mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"center-inner\" *ngIf=\"item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"periodCustomTemplate || periodTemplate; context: {period: item.periodInfo, index: index, event: item}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {event: item, index: index}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col col-right mobile\" [ngClass]=\"item.periodInfo ? 'col-period' : 'col-event'\">\r\n <div class=\"event-outer-container\" *ngIf=\"item.eventInfo\">\r\n <ng-container *ngTemplateOutlet=\"eventCustomTemplate || eventTemplate; context: {event: item, colSidePosition: ngxTimelineItemPosition.ON_RIGHT}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<ng-template #centerLinesIconTemplate let-index=index let-event=event>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate; context: {index:index, event:event}\"></ng-container>\r\n <div [ngClass]=\"{'transparent last-line': index === items.length - 1}\" class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #centerIconTemplate let-index=index let-event=event>\r\n <div class=\"center-icon-container\">\r\n <div class=\"icon\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dateInstantTemplate let-item=item>\r\n <span>\r\n {{item?.timestamp | ngxdate : ngxDateFormat.HOURS_MINUTES : langCode}}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #periodTemplate let-period=period let-index=index let-event=event>\r\n <div [ngClass]=\"{'transparent first-line': !index}\" class=\"line\"></div>\r\n <div class=\"period-container\">\r\n <div class=\"period-inner-container\">\r\n <span>{{period?.firstDate | ngxdate : getPeriodKeyDateFormat() : langCode}}</span>\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n</ng-template>\r\n\r\n<ng-template #eventTemplate let-event=event let-colSidePosition=colSidePosition>\r\n <ngx-timeline-event\r\n [event]=\"event\"\r\n [langCode]=\"langCode\"\r\n [enableAnimation]=\"enableAnimation\"\r\n [innerEventCustomTemplate]=\"innerEventCustomTemplate\"\r\n [colSidePosition]=\"colSidePosition\"\r\n (clickEmitter)=\"clickEmitter.next($event)\">\r\n </ngx-timeline-event>\r\n</ng-template>\r\n\r\n","import {NgModule} from '@angular/core';\nimport {NgxTimelineComponent} from './components';\nimport {NgxTimelineEventComponent}\n from './components';\nimport {CommonModule, registerLocaleData} from '@angular/common';\nimport {NgxDatePipe} from './pipes';\nimport localeIt from '@angular/common/locales/it';\nimport localeFr from '@angular/common/locales/fr';\nimport localeDe from '@angular/common/locales/de';\nimport localeEs from '@angular/common/locales/es';\nimport localeSl from '@angular/common/locales/sl';\nimport localeTr from '@angular/common/locales/tr';\nimport localePl from '@angular/common/locales/pl';\nimport localePt from '@angular/common/locales/pt';\nimport localeRu from '@angular/common/locales/ru';\n\nregisterLocaleData(localeIt);\nregisterLocaleData(localeFr);\nregisterLocaleData(localeDe);\nregisterLocaleData(localeEs);\nregisterLocaleData(localeSl);\nregisterLocaleData(localeTr);\nregisterLocaleData(localePl);\nregisterLocaleData(localePt);\nregisterLocaleData(localeRu);\n\n@NgModule({\n declarations: [NgxTimelineComponent, NgxTimelineEventComponent, NgxDatePipe],\n imports: [CommonModule],\n exports: [NgxTimelineComponent, NgxDatePipe],\n})\nexport class NgxTimelineModule { }\n","/*\n * Public API Surface of ngx-timeline\n */\nexport * from './lib/components';\nexport * from './lib/models';\nexport * from './lib/pipes/';\nexport * from './lib/ngx-timeline.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["fieldsToCheckEventChangeSide","i2.NgxTimelineEventComponent","i3.NgxDatePipe"],"mappings":";;;;;;;;;;;;;;;AAAa,MAAA,sBAAsB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAetF,MAAA,aAAa,GAAkB;AAC1C,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,mBAAmB;AAC7B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,SAAS;AACxB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,QAAQ,EAAE,iBAAiB;AAC3B,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,YAAY,EAAE,OAAO;AACtB,KAAA;EACD;IAEU,cAMX;AAND,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EANW,aAAa,KAAb,aAAa,GAMxB,EAAA,CAAA,CAAA,CAAA;AAEY,MAAA,eAAe,GAAG;AAC7B,IAAA,UAAU,EAAE,WAAW;AACvB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,aAAa,EAAE,cAAc;AAC7B,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,cAAc,EAAE,cAAc;EAC9B;AAEF;;AAEG;IACS,sBAIX;AAJD,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,qBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,qBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACnC,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,GAIhC,EAAA,CAAA,CAAA,CAAA;AAEY,MAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,CAAC,aAAa,CAAC;AACrB,IAAA,UAAU,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;AACvC,IAAA,cAAc,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC;EACtD;AAEW,MAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,aAAa,CAAC,IAAI;IACxB,UAAU,EAAE,aAAa,CAAC,UAAU;IACpC,cAAc,EAAE,aAAa,CAAC,cAAc;EAC5C;AAEF;;AAEG;IACS,2BAMX;AAND,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,0BAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,0BAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;AACvD,IAAA,0BAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD,CAAA;AACvD,IAAA,0BAAA,CAAA,6BAAA,CAAA,GAAA,6BAA2D,CAAA;AAC7D,CAAC,EANW,0BAA0B,KAA1B,0BAA0B,GAMrC,EAAA,CAAA,CAAA,CAAA;AAEY,MAAA,mCAAmC,GAAG;AACjD,IAAA,yBAAyB,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC;AACjE,IAAA,2BAA2B,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;AACxD,IAAA,yBAAyB,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;;;ICxH/F,wBAGX;AAHD,CAAA,UAAY,uBAAuB,EAAA;AACjC,IAAA,uBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,uBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACvB,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,GAGlC,EAAA,CAAA,CAAA;;MCrBY,yBAAyB,CAAA;AA+BpC,IAAA,WAAA,GAAA;AAdA;;AAEG;QACM,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;AAChC;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAqC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAErF,IAAuB,CAAA,uBAAA,GAAG,uBAAuB,CAAC;QAEjC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAClB,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;KAEjB;IAEjB,UAAU,GAAA;AACR,QAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,IAAI,CAAC;QACT,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;AACvD,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC,YAAA,KAAK,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACpE,YAAA,GAAG,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAClE,YAAA,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;AAChC,SAAA;AAED,QAAA,OAAO,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;KAC3B;IAES,WAAW,GAAA;QACnB,OAAO,IAAI,CAAC,QAAQ,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;KACpH;8GAnDU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,qRCXtC,g3CAsCA,EAAA,MAAA,EAAA,CAAA,0/HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FD3Ba,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,g3CAAA,EAAA,MAAA,EAAA,CAAA,0/HAAA,CAAA,EAAA,CAAA;wDAQrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAIG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAIG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAIG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAIG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAII,YAAY,EAAA,CAAA;sBAArB,MAAM;;;ME9BI,WAAW,CAAA;AACtB,IAAA,WAAA,GAAA;KACC;AAED,IAAA,SAAS,CAAC,IAAmB,EAAE,UAAmB,EAAE,QAAiB,EAAA;QACnE,IAAI,eAAe,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,IAAI,EAAE;YACR,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,eAAe,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9G,SAAA;AACD,QAAA,OAAO,eAAe,CAAC;KACxB;IAEO,UAAU,CAAC,UAAkB,EAAE,UAAyB,EAAA;AAC9D,QAAA,OAAO,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;KAChD;AAEO,IAAA,aAAa,CAAC,QAAgB,EAAA;QACpC,MAAM,IAAI,GAAG,QAAQ,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,QAAA,OAAO,UAAU,CAAC;KACnB;8GArBU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAX,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAC,CAAA;;;MCevB,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;AAcE;;AAEG;QACM,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;AAChC;;AAEG;QACM,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAC9B;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAA2B,qBAAqB,CAAC,UAAU,CAAC;AAC/E;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAgC,0BAA0B,CAAC,yBAAyB,CAAC;AAqBxG;;AAEG;AAED,QAAA,IAAA,CAAA,YAAY,GAAqC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7E,IAAM,CAAA,MAAA,GAA0C,EAAE,CAAC;QACnD,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;QAChC,IAAK,CAAA,KAAA,GAAsB,EAAE,CAAC;QAC9B,IAAuB,CAAA,uBAAA,GAAG,uBAAuB,CAAC;QAClD,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;AAEtB,QAAA,IAAA,CAAA,OAAO,GAAoB,MAAM,CAAC,eAAe,CAAC,CAAC;AACnD,QAAA,IAAA,CAAA,cAAc,GAAwB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5D,IAAS,CAAA,SAAA,GAAG,GAAG,CAAC;AAoIlC,KAAA;IAlIC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;KAC5B;IAED,SAAS,GAAA;AACP,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAA;KACF;IAED,sBAAsB,GAAA;AACpB,QAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7C;IAES,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACjB;AAES,IAAA,WAAW,CAAC,MAA0B,EAAA;AAC9C,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;KACF;AAES,IAAA,UAAU,CAAC,MAA0B,EAAA;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACnB,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAAA,SAAC,CAAC,CAAC;KAC/D;AAES,IAAA,mBAAmB,CAAC,MAA0B,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;YAEvB,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;AACrE,aAAA;YACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;KACJ;IAES,QAAQ,GAAA;QAChB,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;;AAEzB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAEnB,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,0BAA0B,CAAC,GAAG,EAAE;gBACtD,MAAM,GAAG,CAAC,gBAAgB,CAAC;AAC5B,aAAA;AACD,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;;YAEhC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;;AAE9D,SAAC,CAAC,CAAC;KACJ;IAES,eAAe,CAAC,UAAiC,EAAE,MAAe,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACzD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,gBAAA,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,KAAK,uBAAuB,CAAC,OAAO,CAAC;AACvF,aAAA;AAAM,iBAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;gBAC1D,MAAM,GAAG,CAAC,MAAM,CAAC;AACpB,aAAA;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,MAAM,CAAC;KACf;IAES,gBAAgB,CAAC,KAAuB,EAAE,MAAe,EAAA;AACjE,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,SAAS,EAAE,EAAC,GAAG,KAAK,EAAC,EAAE,QAAQ,EAAE,MAAM;gBACrC,IAAI,CAAC,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ;AAC/E,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACO,aAAa,CAAC,SAA2B,EAAE,KAAuB,EAAA;QAC1E,OAAO,IAAI,CAAC,0BAA0B,EAAE;AACtC,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAGA,mCAA4B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;KAC/F;AAES,IAAA,kBAAkB,CAAC,SAA2B,EAAE,KAAuB,EAAE,GAAG,MAAgB,EAAA;AACpG,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;KACvH;IAES,0BAA0B,CAAC,SAAiB,EAAE,eAAiC,EAAA;QACrF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;KAChE;AAEO,IAAA,aAAa,CAAC,KAAe,EAAE,SAAiB,EAAE,eAAiC,EAAA;QACzF,OAAO;AACL,YAAA,UAAU,EAAE;AACV,gBAAA,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,gBAAA,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrB,SAAS;gBACT,SAAS,EAAE,eAAe,CAAC,SAAiB;AAC7C,aAAA;SACF,CAAC;KACH;IAEO,0BAA0B,GAAA;AAChC,QAAA,OAAO,CAAC,0BAA0B,CAAC,YAAY,EAAE,0BAA0B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;KACjH;AAES,IAAA,qBAAqB,CAAC,KAAuB,EAAA;AACrD,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC7G;8GA9LU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,4hBCnBjC,8qKAkGA,EAAA,MAAA,EAAA,CAAA,64EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FD/Ea,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,8qKAAA,EAAA,MAAA,EAAA,CAAA,64EAAA,CAAA,EAAA,CAAA;8BAQf,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAIG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAIG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAIG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAIG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAIG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAIG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAIG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAIG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAIG,yBAAyB,EAAA,CAAA;sBAAjC,KAAK;gBAIG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAKJ,YAAY,EAAA,CAAA;sBADb,MAAM;;;AEnDT,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;MAOhB,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAAjB,iBAAiB,EAAA,YAAA,EAAA,CAJb,oBAAoB,EAAE,yBAAyB,EAAE,WAAW,CAAA,EAAA,OAAA,EAAA,CACjE,YAAY,CAAA,EAAA,OAAA,EAAA,CACZ,oBAAoB,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA,EAAA;AAEhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAHlB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,WAAW,CAAC;oBAC5E,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC;AAC7C,iBAAA,CAAA;;;AC9BD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -1,8 +1,8 @@
1
- import { OnInit, TemplateRef, OnChanges, SimpleChanges } from '@angular/core';
2
- import { NgxTimelineEvent, NgxTimelineItem, NgxTimelineItemPosition, NgxTimelinePeriodInfo, NgxDateFormat, NgxTimelineEventGroup, NgxTimelineEventChangeSideInGroup } from '../models';
1
+ import { OnInit, TemplateRef, OnChanges, DoCheck } from '@angular/core';
2
+ import { NgxTimelineEvent, NgxTimelineItem, NgxTimelineItemPosition, NgxTimelinePeriodInfo, NgxDateFormat, NgxTimelineEventGroup, NgxTimelineEventChangeSide } from '../models';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
- export declare class NgxTimelineComponent implements OnInit, OnChanges {
5
+ export declare class NgxTimelineComponent implements OnInit, OnChanges, DoCheck {
6
6
  /**
7
7
  * List of events to be displayed
8
8
  */
@@ -26,7 +26,7 @@ export declare class NgxTimelineComponent implements OnInit, OnChanges {
26
26
  /**
27
27
  * Logic to be applied in order to put evetns on LEFT or RIGHT
28
28
  */
29
- changeSideInGroup?: NgxTimelineEventChangeSideInGroup;
29
+ changeSide?: NgxTimelineEventChangeSide;
30
30
  /**
31
31
  * Custom Template displayed before a group of events
32
32
  */
@@ -58,17 +58,19 @@ export declare class NgxTimelineComponent implements OnInit, OnChanges {
58
58
  items: NgxTimelineItem[];
59
59
  ngxTimelineItemPosition: typeof NgxTimelineItemPosition;
60
60
  ngxDateFormat: typeof NgxDateFormat;
61
+ private differs;
62
+ private iterableDiffer;
61
63
  private readonly separator;
62
- constructor();
63
64
  ngOnInit(): void;
64
- ngOnChanges(changes: SimpleChanges): void;
65
+ ngOnChanges(): void;
66
+ ngDoCheck(): void;
65
67
  getPeriodKeyDateFormat(): string;
66
68
  protected clear(): void;
67
69
  protected groupEvents(events: NgxTimelineEvent[]): void;
68
70
  protected sortEvents(events: NgxTimelineEvent[]): void;
69
71
  protected setGroupsAndPeriods(events: NgxTimelineEvent[]): void;
70
72
  protected setItems(): void;
71
- protected addPeriodEvents(periodInfo: NgxTimelinePeriodInfo, onLeft: boolean): void;
73
+ protected addPeriodEvents(periodInfo: NgxTimelinePeriodInfo, onLeft: boolean): boolean;
72
74
  protected pushEventOnItems(event: NgxTimelineEvent, onLeft: boolean): void;
73
75
  /**
74
76
  * Compare the events inside the same group
@@ -79,7 +81,8 @@ export declare class NgxTimelineComponent implements OnInit, OnChanges {
79
81
  periodInfo: NgxTimelinePeriodInfo;
80
82
  };
81
83
  private getPeriodInfo;
84
+ private shouldChangeEventsInPeriod;
82
85
  protected getPeriodKeyFromEvent(event: NgxTimelineEvent): string;
83
86
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxTimelineComponent, never>;
84
- static ɵcmp: i0.ɵɵComponentDeclaration<NgxTimelineComponent, "ngx-timeline", never, { "events": { "alias": "events"; "required": false; }; "langCode": { "alias": "langCode"; "required": false; }; "enableAnimation": { "alias": "enableAnimation"; "required": false; }; "reverseOrder": { "alias": "reverseOrder"; "required": false; }; "groupEvent": { "alias": "groupEvent"; "required": false; }; "changeSideInGroup": { "alias": "changeSideInGroup"; "required": false; }; "periodCustomTemplate": { "alias": "periodCustomTemplate"; "required": false; }; "eventCustomTemplate": { "alias": "eventCustomTemplate"; "required": false; }; "centerIconCustomTemplate": { "alias": "centerIconCustomTemplate"; "required": false; }; "dateInstantCustomTemplate": { "alias": "dateInstantCustomTemplate"; "required": false; }; "innerEventCustomTemplate": { "alias": "innerEventCustomTemplate"; "required": false; }; }, { "clickEmitter": "clickEmitter"; }, never, never, false, never>;
87
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxTimelineComponent, "ngx-timeline", never, { "events": { "alias": "events"; "required": false; }; "langCode": { "alias": "langCode"; "required": false; }; "enableAnimation": { "alias": "enableAnimation"; "required": false; }; "reverseOrder": { "alias": "reverseOrder"; "required": false; }; "groupEvent": { "alias": "groupEvent"; "required": false; }; "changeSide": { "alias": "changeSide"; "required": false; }; "periodCustomTemplate": { "alias": "periodCustomTemplate"; "required": false; }; "eventCustomTemplate": { "alias": "eventCustomTemplate"; "required": false; }; "centerIconCustomTemplate": { "alias": "centerIconCustomTemplate"; "required": false; }; "dateInstantCustomTemplate": { "alias": "dateInstantCustomTemplate"; "required": false; }; "innerEventCustomTemplate": { "alias": "innerEventCustomTemplate"; "required": false; }; }, { "clickEmitter": "clickEmitter"; }, never, never, false, never>;
85
88
  }
@@ -46,14 +46,15 @@ export declare const periodKeyDateFormat: {
46
46
  /**
47
47
  * Enum used to set the change side event logic
48
48
  */
49
- export declare enum NgxTimelineEventChangeSideInGroup {
49
+ export declare enum NgxTimelineEventChangeSide {
50
50
  ALL = "ALL",
51
- ON_DIFFERENT_HMS = "ON_DIFFERENT_HMS",
52
- ON_DIFFERENT_DAY = "ON_DIFFERENT_DAY",
53
- ON_DIFFERENT_MONTH = "ON_DIFFERENT_MONTH"
51
+ ALL_IN_GROUP = "ALL_IN_GROUP",
52
+ ON_DIFFERENT_DAY_IN_GROUP = "ON_DIFFERENT_DAY_IN_GROUP",
53
+ ON_DIFFERENT_HMS_IN_GROUP = "ON_DIFFERENT_HMS_IN_GROUP",
54
+ ON_DIFFERENT_MONTH_IN_GROUP = "ON_DIFFERENT_MONTH_IN_GROUP"
54
55
  }
55
56
  export declare const fieldsToCheckEventChangeSideInGroup: {
56
- ON_DIFFERENT_MONTH: string[];
57
- ON_DIFFERENT_DAY: string[];
58
- ON_DIFFERENT_HMS: string[];
57
+ ON_DIFFERENT_DAY_IN_GROUP: string[];
58
+ ON_DIFFERENT_MONTH_IN_GROUP: string[];
59
+ ON_DIFFERENT_HMS_IN_GROUP: string[];
59
60
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frxjs/ngx-timeline",
3
- "version": "17.0.1",
3
+ "version": "17.0.3",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "timeline"