@frxjs/ngx-timeline 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +2 -0
  2. package/esm2020/frxjs-ngx-timeline.mjs +5 -0
  3. package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
  4. package/esm2020/lib/components/ngx-timeline-event/ngx-timeline-event.component.mjs +58 -0
  5. package/esm2020/lib/components/ngx-timeline.component.mjs +157 -0
  6. package/esm2020/lib/models/NgxConfigObj.mjs +93 -0
  7. package/esm2020/lib/models/NgxTimelineEvent.mjs +6 -0
  8. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  9. package/esm2020/lib/ngx-timeline.module.mjs +28 -0
  10. package/{esm2015/lib/pipes/index.js → esm2020/lib/pipes/index.mjs} +0 -0
  11. package/esm2020/lib/pipes/ngx-date-pipe.mjs +31 -0
  12. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  13. package/fesm2015/frxjs-ngx-timeline.mjs +366 -0
  14. package/fesm2015/frxjs-ngx-timeline.mjs.map +1 -0
  15. package/fesm2020/frxjs-ngx-timeline.mjs +365 -0
  16. package/fesm2020/frxjs-ngx-timeline.mjs.map +1 -0
  17. package/frxjs-ngx-timeline.d.ts +1 -3
  18. package/lib/components/ngx-timeline-event/ngx-timeline-event.component.d.ts +3 -0
  19. package/lib/components/ngx-timeline.component.d.ts +3 -0
  20. package/lib/models/NgxConfigObj.d.ts +6 -6
  21. package/lib/ngx-timeline.module.d.ts +8 -0
  22. package/lib/pipes/ngx-date-pipe.d.ts +3 -0
  23. package/package.json +22 -9
  24. package/bundles/frxjs-ngx-timeline.umd.js +0 -701
  25. package/bundles/frxjs-ngx-timeline.umd.js.map +0 -1
  26. package/esm2015/frxjs-ngx-timeline.js +0 -8
  27. package/esm2015/lib/components/ngx-timeline-event/ngx-timeline-event.component.js +0 -55
  28. package/esm2015/lib/components/ngx-timeline.component.js +0 -146
  29. package/esm2015/lib/models/NgxConfigObj.js +0 -93
  30. package/esm2015/lib/models/NgxTimelineEvent.js +0 -6
  31. package/esm2015/lib/ngx-timeline.module.js +0 -23
  32. package/esm2015/lib/pipes/ngx-date-pipe.js +0 -28
  33. package/fesm2015/frxjs-ngx-timeline.js +0 -349
  34. package/fesm2015/frxjs-ngx-timeline.js.map +0 -1
  35. package/frxjs-ngx-timeline.metadata.json +0 -1
package/README.md CHANGED
@@ -2,6 +2,8 @@
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 1.2.0 is compatible with angular 13.
6
+ <br/>
5
7
  Go [here](https://emanuelefricano93.github.io/frxjs-Ngx-Timeline/) and discover all possible configurations for the timeline
6
8
 
7
9
  ![image](https://user-images.githubusercontent.com/26500344/130092921-8338496a-31df-46fa-b75f-40989eb53d33.png)
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJ4anMtbmd4LXRpbWVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRpbWVsaW5lL3NyYy9mcnhqcy1uZ3gtdGltZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,58 @@
1
+ import { Component, Input, Output } from '@angular/core';
2
+ import { NgxTimelineItemPosition } from '../../models/NgxTimelineEvent';
3
+ import { DatePipe } from '@angular/common';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import { supportedLanguageCodes } from '../../models';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ export class NgxTimelineEventComponent {
9
+ constructor() {
10
+ /**
11
+ * Boolean used to enable or disable the animations
12
+ */
13
+ this.enableAnimation = true;
14
+ /**
15
+ * Output click event emitter
16
+ */
17
+ this.clickEmitter = new BehaviorSubject(null);
18
+ this.ngxTimelineItemPosition = NgxTimelineItemPosition;
19
+ this.monthAbbr = 'MMM';
20
+ this.dayFormat = 'dd';
21
+ }
22
+ getDateObj() {
23
+ let day;
24
+ let month;
25
+ let year;
26
+ const dateTimestamp = this.event?.eventInfo?.timestamp;
27
+ if (dateTimestamp) {
28
+ const timestamp = new Date(dateTimestamp);
29
+ const langCode = this.getLangCode();
30
+ month = new DatePipe(langCode).transform(timestamp, this.monthAbbr);
31
+ day = new DatePipe(langCode).transform(timestamp, this.dayFormat);
32
+ year = timestamp.getFullYear();
33
+ }
34
+ return { day, month, year };
35
+ }
36
+ getLangCode() {
37
+ return this.langCode && supportedLanguageCodes.includes(this.langCode) ? this.langCode : supportedLanguageCodes[0];
38
+ }
39
+ }
40
+ NgxTimelineEventComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineEventComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
41
+ NgxTimelineEventComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: NgxTimelineEventComponent, selector: "ngx-timeline-event", inputs: { event: "event", colSidePosition: "colSidePosition", langCode: "langCode", innerEventCustomTemplate: "innerEventCustomTemplate", enableAnimation: "enableAnimation" }, outputs: { clickEmitter: "clickEmitter" }, ngImport: i0, template: "<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", styles: [".event-wrapper-container{display:flex;justify-content:center;align-items:center;cursor:pointer}.arrow{width:0;height:0;border-top:.5rem solid transparent;border-bottom:.5rem solid transparent;border-radius:6px;z-index:10}.arrow.right{filter:drop-shadow(2px 0px 0px #244a6e22);border-left:.5rem solid white}.arrow.left{filter:drop-shadow(-1px 0px 0px #244a6e22);border-right:.5rem solid white}.event{background:white;border-radius:.8rem;padding:1rem;width:100%;margin:1rem 0}.event.enableAnimation:hover{padding:2rem;transition:all .5s ease-in-out}.event.enableAnimation:not(:hover){padding:1rem;transition:all .5s ease-in-out}.event:not(.hour){background:#ffffff 0% 0% no-repeat padding-box;box-shadow:0 3px 6px #244a6e52}.event.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.event.hour.right{justify-content:flex-start}.event.hour.left{justify-content:flex-end}.event .hour-inner-container{margin:0}.event-container{display:flex}.event-container.reverse{flex-direction:row-reverse}.event-container .event-info-container{display:flex;flex-direction:column;align-items:flex-start;padding:.1rem;flex:88 88 0}.event-container .event-info-container .event-info-header{display:flex;align-items:center;width:100%}.event-container .event-info-container .event-info-header .icon-container{margin-right:.3rem}.event-container .event-info-container .event-info-header .icon-container nb-icon{color:orange;width:1.5rem;height:1.5rem;margin-bottom:.1rem}.event-container .event-info-container .event-info-header .title-container{font-weight:700;font-size:15px}.event-container .event-info-container .event-info-body{padding:.5rem 0;display:flex;flex-direction:column;justify-content:flex-start;overflow-wrap:anywhere}.event-container .event-info-container .event-info-body .event-info-description{margin-bottom:.5rem;font-size:13px}.event-container .event-info-container .event-info-body .expiration-container,.event-container .event-info-container .event-info-body .category-container{display:flex;font-size:13px;justify-content:flex-start;align-items:center}.event-container .event-info-container .event-info-body .expiration-container p,.event-container .event-info-container .event-info-body .category-container p{font-size:13px;margin:0}.event-container .event-info-container .event-info-body .expiration-container .expiration-label,.event-container .event-info-container .event-info-body .expiration-container .category-label,.event-container .event-info-container .event-info-body .category-container .expiration-label,.event-container .event-info-container .event-info-body .category-container .category-label{margin-right:.5rem}.event-container .event-info-container .event-info-body .expiration-container .expiration-value,.event-container .event-info-container .event-info-body .expiration-container .category-value,.event-container .event-info-container .event-info-body .category-container .expiration-value,.event-container .event-info-container .event-info-body .category-container .category-value{font-weight:700}.event-container .event-info-container .event-info-footer{font-size:15px;cursor:pointer;padding-top:1rem}.event-container .event-info-container .event-info-footer .footer-inner-container{display:flex;justify-content:flex-start;align-items:flex-end}.event-container .event-info-container .event-info-footer .footer-inner-container nb-icon{color:#006cb4;width:1rem;height:1rem;margin-bottom:.1rem}.event-container .event-info-container .event-info-footer p{margin:0;color:#006cb4}.event-container .event-divider-container{display:flex;justify-content:center;align-items:center;padding:.1rem;flex:5 5 0}.event-container .event-divider-container hr{height:100%;width:1px;background:#e9e9e9}.event-container .event-date-container{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:.1rem;flex:15 15 0}.event-container .event-date-container p{margin:0;text-align:center}.event-container .event-date-container p.day{font-size:32px;font-weight:700;padding:.5rem 0}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "titlecase": i1.TitleCasePipe } });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineEventComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: 'ngx-timeline-event', template: "<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", styles: [".event-wrapper-container{display:flex;justify-content:center;align-items:center;cursor:pointer}.arrow{width:0;height:0;border-top:.5rem solid transparent;border-bottom:.5rem solid transparent;border-radius:6px;z-index:10}.arrow.right{filter:drop-shadow(2px 0px 0px #244a6e22);border-left:.5rem solid white}.arrow.left{filter:drop-shadow(-1px 0px 0px #244a6e22);border-right:.5rem solid white}.event{background:white;border-radius:.8rem;padding:1rem;width:100%;margin:1rem 0}.event.enableAnimation:hover{padding:2rem;transition:all .5s ease-in-out}.event.enableAnimation:not(:hover){padding:1rem;transition:all .5s ease-in-out}.event:not(.hour){background:#ffffff 0% 0% no-repeat padding-box;box-shadow:0 3px 6px #244a6e52}.event.hour{padding:.5rem;background:none;display:flex;justify-content:center;align-items:center}.event.hour.right{justify-content:flex-start}.event.hour.left{justify-content:flex-end}.event .hour-inner-container{margin:0}.event-container{display:flex}.event-container.reverse{flex-direction:row-reverse}.event-container .event-info-container{display:flex;flex-direction:column;align-items:flex-start;padding:.1rem;flex:88 88 0}.event-container .event-info-container .event-info-header{display:flex;align-items:center;width:100%}.event-container .event-info-container .event-info-header .icon-container{margin-right:.3rem}.event-container .event-info-container .event-info-header .icon-container nb-icon{color:orange;width:1.5rem;height:1.5rem;margin-bottom:.1rem}.event-container .event-info-container .event-info-header .title-container{font-weight:700;font-size:15px}.event-container .event-info-container .event-info-body{padding:.5rem 0;display:flex;flex-direction:column;justify-content:flex-start;overflow-wrap:anywhere}.event-container .event-info-container .event-info-body .event-info-description{margin-bottom:.5rem;font-size:13px}.event-container .event-info-container .event-info-body .expiration-container,.event-container .event-info-container .event-info-body .category-container{display:flex;font-size:13px;justify-content:flex-start;align-items:center}.event-container .event-info-container .event-info-body .expiration-container p,.event-container .event-info-container .event-info-body .category-container p{font-size:13px;margin:0}.event-container .event-info-container .event-info-body .expiration-container .expiration-label,.event-container .event-info-container .event-info-body .expiration-container .category-label,.event-container .event-info-container .event-info-body .category-container .expiration-label,.event-container .event-info-container .event-info-body .category-container .category-label{margin-right:.5rem}.event-container .event-info-container .event-info-body .expiration-container .expiration-value,.event-container .event-info-container .event-info-body .expiration-container .category-value,.event-container .event-info-container .event-info-body .category-container .expiration-value,.event-container .event-info-container .event-info-body .category-container .category-value{font-weight:700}.event-container .event-info-container .event-info-footer{font-size:15px;cursor:pointer;padding-top:1rem}.event-container .event-info-container .event-info-footer .footer-inner-container{display:flex;justify-content:flex-start;align-items:flex-end}.event-container .event-info-container .event-info-footer .footer-inner-container nb-icon{color:#006cb4;width:1rem;height:1rem;margin-bottom:.1rem}.event-container .event-info-container .event-info-footer p{margin:0;color:#006cb4}.event-container .event-divider-container{display:flex;justify-content:center;align-items:center;padding:.1rem;flex:5 5 0}.event-container .event-divider-container hr{height:100%;width:1px;background:#e9e9e9}.event-container .event-date-container{display:flex;justify-content:center;align-items:center;flex-direction:column;padding:.1rem;flex:15 15 0}.event-container .event-date-container p{margin:0;text-align:center}.event-container .event-date-container p.day{font-size:32px;font-weight:700;padding:.5rem 0}\n"] }]
45
+ }], ctorParameters: function () { return []; }, propDecorators: { event: [{
46
+ type: Input
47
+ }], colSidePosition: [{
48
+ type: Input
49
+ }], langCode: [{
50
+ type: Input
51
+ }], innerEventCustomTemplate: [{
52
+ type: Input
53
+ }], enableAnimation: [{
54
+ type: Input
55
+ }], clickEmitter: [{
56
+ type: Output
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVsaW5lLWV2ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLWV2ZW50L25neC10aW1lbGluZS1ldmVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGltZWxpbmUvc3JjL2xpYi9jb21wb25lbnRzL25neC10aW1lbGluZS1ldmVudC9uZ3gtdGltZWxpbmUtZXZlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBa0IsdUJBQXVCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxjQUFjLENBQUM7OztBQU9wRCxNQUFNLE9BQU8seUJBQXlCO0lBK0JwQztRQWRBOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEM7O1dBRUc7UUFDTyxpQkFBWSxHQUFxQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRiw0QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUVqQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxJQUFJLENBQUM7SUFFbEIsQ0FBQztJQUVqQixVQUFVO1FBQ1IsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDO1FBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQ3ZELElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEUsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEM7UUFFRCxPQUFPLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsV0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckgsQ0FBQzs7c0hBbkRVLHlCQUF5QjswR0FBekIseUJBQXlCLHFSQ1h0QyxnM0NBc0NBOzJGRDNCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usb0JBQW9COzBFQVFyQixLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFJRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ3hUaW1lbGluZUl0ZW0sIE5neFRpbWVsaW5lSXRlbVBvc2l0aW9ufSBmcm9tICcuLi8uLi9tb2RlbHMvTmd4VGltZWxpbmVFdmVudCc7XG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzdXBwb3J0ZWRMYW5ndWFnZUNvZGVzfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdGltZWxpbmUtZXZlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXRpbWVsaW5lLWV2ZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LXRpbWVsaW5lLWV2ZW50LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5neFRpbWVsaW5lRXZlbnRDb21wb25lbnQge1xuICAvKipcbiAgICogRXZlbnQgdG8gYmUgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSBldmVudDogTmd4VGltZWxpbmVJdGVtO1xuICAvKipcbiAgICogRXZlbnQgcG9zaXRpb24gcmVzcGVjdCB0byB0aGUgdmVydGljYWwgbGluZSAoTEVGVCBvciBSSUdIVClcbiAgICovXG4gIEBJbnB1dCgpIGNvbFNpZGVQb3NpdGlvbjogTmd4VGltZWxpbmVJdGVtUG9zaXRpb247XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBjb2RlIHVzZWQgdG8gZm9ybWF0IHRoZSBkYXRlc1xuICAgKi9cbiAgQElucHV0KCkgbGFuZ0NvZGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbm5lciBjdXN0b20gdGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSBldmVudCBkZXRhaWxcbiAgICovXG4gIEBJbnB1dCgpIGlubmVyRXZlbnRDdXN0b21UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBCb29sZWFuIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUFuaW1hdGlvbiA9IHRydWU7XG4gIC8qKlxuICAgKiBPdXRwdXQgY2xpY2sgZXZlbnQgZW1pdHRlclxuICAgKi9cbiAgQE91dHB1dCgpIGNsaWNrRW1pdHRlcjogQmVoYXZpb3JTdWJqZWN0PE5neFRpbWVsaW5lSXRlbT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uID0gTmd4VGltZWxpbmVJdGVtUG9zaXRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb250aEFiYnIgPSAnTU1NJztcbiAgcHJpdmF0ZSByZWFkb25seSBkYXlGb3JtYXQgPSAnZGQnO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgZ2V0RGF0ZU9iaigpOiBhbnkge1xuICAgIGxldCBkYXk7XG4gICAgbGV0IG1vbnRoO1xuICAgIGxldCB5ZWFyO1xuICAgIGNvbnN0IGRhdGVUaW1lc3RhbXAgPSB0aGlzLmV2ZW50Py5ldmVudEluZm8/LnRpbWVzdGFtcDtcbiAgICBpZiAoZGF0ZVRpbWVzdGFtcCkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoZGF0ZVRpbWVzdGFtcCk7XG4gICAgICBjb25zdCBsYW5nQ29kZSA9IHRoaXMuZ2V0TGFuZ0NvZGUoKTtcbiAgICAgIG1vbnRoID0gbmV3IERhdGVQaXBlKGxhbmdDb2RlKS50cmFuc2Zvcm0odGltZXN0YW1wLCB0aGlzLm1vbnRoQWJicik7XG4gICAgICBkYXkgPSBuZXcgRGF0ZVBpcGUobGFuZ0NvZGUpLnRyYW5zZm9ybSh0aW1lc3RhbXAsIHRoaXMuZGF5Rm9ybWF0KTtcbiAgICAgIHllYXIgPSB0aW1lc3RhbXAuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2RheSwgbW9udGgsIHllYXJ9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldExhbmdDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ0NvZGUgJiYgc3VwcG9ydGVkTGFuZ3VhZ2VDb2Rlcy5pbmNsdWRlcyh0aGlzLmxhbmdDb2RlKSA/IHRoaXMubGFuZ0NvZGUgOiBzdXBwb3J0ZWRMYW5ndWFnZUNvZGVzWzBdO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZXZlbnQtd3JhcHBlci1jb250YWluZXJcIiAoY2xpY2spPVwiY2xpY2tFbWl0dGVyLm5leHQoZXZlbnQpXCI+XG4gIDxkaXYgKm5nSWY9XCJjb2xTaWRlUG9zaXRpb249PT1uZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVFwiIGNsYXNzPVwiYXJyb3cgbGVmdFwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZXZlbnRcIiBbbmdDbGFzc109XCJ7J2VuYWJsZUFuaW1hdGlvbic6IGVuYWJsZUFuaW1hdGlvbn1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5uZXJFdmVudEN1c3RvbVRlbXBsYXRlIHx8IGlubmVyRXZlbnRDb250YWluZXI7IGNvbnRleHQ6IHtldmVudDogZXZlbnR9XCJcbiAgICA+XG4gIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImNvbFNpZGVQb3NpdGlvbj09PW5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlRcIiBjbGFzcz1cImFycm93IHJpZ2h0XCI+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNpbm5lckV2ZW50Q29udGFpbmVyIGxldC1ldmVudD1ldmVudD5cbiAgPGRpdiBjbGFzcz1cImV2ZW50LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsncmV2ZXJzZSc6IGNvbFNpZGVQb3NpdGlvbiA9PT0gbmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fTEVGVH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtaW5mby1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1pbmZvLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY29udGFpbmVyXCI+e3tldmVudD8uZXZlbnRJbmZvPy50aXRsZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1pbmZvLWJvZHlcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJldmVudC1pbmZvLWRlc2NyaXB0aW9uXCI+e3tldmVudD8uZXZlbnRJbmZvPy5kZXNjcmlwdGlvbn19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtZGl2aWRlci1jb250YWluZXJcIj5cbiAgICAgIDxoci8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtZGF0ZS1jb250YWluZXJcIiAqbmdJZj1cImdldERhdGVPYmooKSBhcyBkYXRlT2JqXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8cD57e2RhdGVPYmo/Lm1vbnRofX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxwIGNsYXNzPVwiZGF5XCI+e3tkYXRlT2JqPy5kYXl9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPHA+e3tkYXRlT2JqPy55ZWFyfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,157 @@
1
+ import { Component, Input, Output } from '@angular/core';
2
+ import { NgxTimelineItemPosition, NgxDateFormat, NgxTimelineEventGroup, NgxTimelineEventChangeSideInGroup, periodKeyDateFormat, fieldsToCheckEventChangeSideInGroup, fieldsToAddEventGroup } from '../models';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./ngx-timeline-event/ngx-timeline-event.component";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "../pipes/ngx-date-pipe";
8
+ export class NgxTimelineComponent {
9
+ constructor() {
10
+ /**
11
+ * Boolean used to enable or disable the animations
12
+ */
13
+ this.enableAnimation = true;
14
+ /**
15
+ * Logic to be applied in order to group events
16
+ */
17
+ this.groupEvent = NgxTimelineEventGroup.MONTH_YEAR;
18
+ /**
19
+ * Logic to be applied in order to put evetns on LEFT or RIGHT
20
+ */
21
+ this.changeSideInGroup = NgxTimelineEventChangeSideInGroup.ON_DIFFERENT_DAY;
22
+ /**
23
+ * Output click event emitter
24
+ */
25
+ this.clickEmitter = new BehaviorSubject(null);
26
+ this.groups = {};
27
+ this.periods = [];
28
+ this.items = [];
29
+ this.ngxTimelineItemPosition = NgxTimelineItemPosition;
30
+ this.ngxDateFormat = NgxDateFormat;
31
+ this.separator = '/';
32
+ }
33
+ ngOnInit() {
34
+ this.groupEvents(this.events);
35
+ }
36
+ ngOnChanges(changes) {
37
+ this.groupEvents(this.events);
38
+ }
39
+ getPeriodKeyDateFormat() {
40
+ return periodKeyDateFormat[this.groupEvent];
41
+ }
42
+ clear() {
43
+ this.groups = {};
44
+ this.periods = [];
45
+ this.items = [];
46
+ }
47
+ groupEvents(events) {
48
+ if (events) {
49
+ this.clear();
50
+ this.sortEvents(events);
51
+ this.setGroups(events);
52
+ this.setPeriods();
53
+ this.setItems();
54
+ }
55
+ }
56
+ sortEvents(events) {
57
+ events.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
58
+ }
59
+ setGroups(events) {
60
+ events.forEach((event) => {
61
+ // conversion from string to actual Date
62
+ event.timestamp = new Date(event.timestamp);
63
+ const periodKey = this.getPeriodKeyFromEvent(event);
64
+ if (!this.groups[periodKey]) {
65
+ this.groups[periodKey] = [];
66
+ }
67
+ this.groups[periodKey].push(event);
68
+ });
69
+ }
70
+ setItems() {
71
+ this.periods.forEach((p) => {
72
+ // insert first the period
73
+ this.items.push(p);
74
+ // in each period putting items on left
75
+ const onLeft = true;
76
+ const periodInfo = p.periodInfo;
77
+ // insert then all the events in this period
78
+ this.addPeriodEvents(periodInfo, onLeft);
79
+ // onLeft = this.addEventItemsAndGetIfOnLeft(periodInfo, onLeft);
80
+ });
81
+ }
82
+ addPeriodEvents(periodInfo, onLeft) {
83
+ this.groups[periodInfo.periodKey].forEach((event, index) => {
84
+ const prevEvent = this.groups[periodInfo.periodKey][index - 1];
85
+ if (index > 0 && this.compareEvents(prevEvent, event)) {
86
+ onLeft = !onLeft;
87
+ }
88
+ this.pushEventOnItems(event, onLeft);
89
+ });
90
+ // return onLeft;
91
+ }
92
+ pushEventOnItems(event, onLeft) {
93
+ this.items.push({
94
+ eventInfo: { ...event }, position: onLeft ?
95
+ this.ngxTimelineItemPosition.ON_LEFT : this.ngxTimelineItemPosition.ON_RIGHT,
96
+ });
97
+ }
98
+ /**
99
+ * Compare the events inside the same group
100
+ */
101
+ compareEvents(prevEvent, event) {
102
+ return this.changeSideInGroup === NgxTimelineEventChangeSideInGroup.ALL ||
103
+ this.compareEventsField(prevEvent, event, ...fieldsToCheckEventChangeSideInGroup[this.changeSideInGroup]);
104
+ }
105
+ compareEventsField(prevEvent, event, ...fields) {
106
+ return fields.reduce((res, field) => res = res || prevEvent.timestamp[field]() !== event.timestamp[field](), !!false);
107
+ }
108
+ setPeriods() {
109
+ this.periods = Object.keys(this.groups).map((periodKey) => {
110
+ const split = periodKey.split(this.separator);
111
+ return this.getPeriodInfo(split, periodKey);
112
+ });
113
+ }
114
+ getPeriodInfo(split, periodKey) {
115
+ return {
116
+ periodInfo: {
117
+ year: Number(split[0]),
118
+ month: Number(split[1]),
119
+ day: Number(split[2]),
120
+ periodKey,
121
+ firstDate: this.groups[periodKey][0].timestamp,
122
+ },
123
+ };
124
+ }
125
+ getPeriodKeyFromEvent(event) {
126
+ return fieldsToAddEventGroup[this.groupEvent].map((field) => event.timestamp[field]()).join(this.separator);
127
+ }
128
+ }
129
+ NgxTimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
130
+ NgxTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: NgxTimelineComponent, selector: "ngx-timeline", inputs: { events: "events", langCode: "langCode", enableAnimation: "enableAnimation", 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}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {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}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate;context: {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>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate\"></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>\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>\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:absolute;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"], components: [{ type: i1.NgxTimelineEventComponent, selector: "ngx-timeline-event", inputs: ["event", "colSidePosition", "langCode", "innerEventCustomTemplate", "enableAnimation"], outputs: ["clickEmitter"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "ngxdate": i3.NgxDatePipe } });
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineComponent, decorators: [{
132
+ type: Component,
133
+ 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}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate; context: {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}\"></ng-container>\r\n </div>\r\n <div class=\"center-inner no-period-key\" *ngIf=\"!item.periodInfo;\">\r\n <ng-container *ngTemplateOutlet=\"centerLinesIconTemplate;context: {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>\r\n <div class=\"line\"></div>\r\n <ng-container *ngTemplateOutlet=\"centerIconCustomTemplate || centerIconTemplate\"></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>\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>\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:absolute;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"] }]
134
+ }], ctorParameters: function () { return []; }, propDecorators: { events: [{
135
+ type: Input
136
+ }], langCode: [{
137
+ type: Input
138
+ }], enableAnimation: [{
139
+ type: Input
140
+ }], groupEvent: [{
141
+ type: Input
142
+ }], changeSideInGroup: [{
143
+ type: Input
144
+ }], periodCustomTemplate: [{
145
+ type: Input
146
+ }], eventCustomTemplate: [{
147
+ type: Input
148
+ }], centerIconCustomTemplate: [{
149
+ type: Input
150
+ }], dateInstantCustomTemplate: [{
151
+ type: Input
152
+ }], innerEventCustomTemplate: [{
153
+ type: Input
154
+ }], clickEmitter: [{
155
+ type: Output
156
+ }] } });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVsaW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL2NvbXBvbmVudHMvbmd4LXRpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVUsS0FBSyxFQUF5QyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGlDQUFpQyxFQUNqQyxtQkFBbUIsRUFDbkIsbUNBQW1DLEVBQ25DLHFCQUFxQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBT3JDLE1BQU0sT0FBTyxvQkFBb0I7SUF1RC9CO1FBOUNBOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEM7O1dBRUc7UUFDTSxlQUFVLEdBQTJCLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztRQUMvRTs7V0FFRztRQUNNLHNCQUFpQixHQUF1QyxpQ0FBaUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQXFCcEg7O1dBRUc7UUFFRCxpQkFBWSxHQUFxQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3RSxXQUFNLEdBQTBDLEVBQUUsQ0FBQztRQUNuRCxZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUNoQyxVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUViLGNBQVMsR0FBRyxHQUFHLENBQUM7SUFFbEIsQ0FBQztJ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QUs7Z0JBSUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFJRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBSUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUtKLFlBQVk7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUZW1wbGF0ZVJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTmd4VGltZWxpbmVFdmVudCxcbiAgTmd4VGltZWxpbmVJdGVtLFxuICBOZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbixcbiAgTmd4VGltZWxpbmVQZXJpb2RJbmZvLFxuICBOZ3hEYXRlRm9ybWF0LFxuICBOZ3hUaW1lbGluZUV2ZW50R3JvdXAsXG4gIE5neFRpbWVsaW5lRXZlbnRDaGFuZ2VTaWRlSW5Hcm91cCxcbiAgcGVyaW9kS2V5RGF0ZUZvcm1hdCxcbiAgZmllbGRzVG9DaGVja0V2ZW50Q2hhbmdlU2lkZUluR3JvdXAsXG4gIGZpZWxkc1RvQWRkRXZlbnRHcm91cH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXRpbWVsaW5lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC10aW1lbGluZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC10aW1lbGluZS5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5neFRpbWVsaW5lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogTGlzdCBvZiBldmVudHMgdG8gYmUgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSBldmVudHM6IE5neFRpbWVsaW5lRXZlbnRbXTtcbiAgLyoqXG4gICAqIExhbmd1YWdlIGNvZGUgdXNlZCB0byBzaG93IHRoZSBkYXRlIGZvcm1hdHRlZFxuICAgKi9cbiAgQElucHV0KCkgbGFuZ0NvZGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCb29sZWFuIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUFuaW1hdGlvbiA9IHRydWU7XG4gIC8qKlxuICAgKiBMb2dpYyB0byBiZSBhcHBsaWVkIGluIG9yZGVyIHRvIGdyb3VwIGV2ZW50c1xuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBFdmVudD86IE5neFRpbWVsaW5lRXZlbnRHcm91cCA9IE5neFRpbWVsaW5lRXZlbnRHcm91cC5NT05USF9ZRUFSO1xuICAvKipcbiAgICogTG9naWMgdG8gYmUgYXBwbGllZCBpbiBvcmRlciB0byBwdXQgZXZldG5zIG9uIExFRlQgb3IgUklHSFRcbiAgICovXG4gIEBJbnB1dCgpIGNoYW5nZVNpZGVJbkdyb3VwPzogTmd4VGltZWxpbmVFdmVudENoYW5nZVNpZGVJbkdyb3VwID0gTmd4VGltZWxpbmVFdmVudENoYW5nZVNpZGVJbkdyb3VwLk9OX0RJRkZFUkVOVF9EQVk7XG4gIC8qKlxuICAgKiBDdXN0b20gVGVtcGxhdGUgZGlzcGxheWVkIGJlZm9yZSBhIGdyb3VwIG9mIGV2ZW50c1xuICAgKi9cbiAgQElucHV0KCkgcGVyaW9kQ3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBDdXN0b20gVGVtcGxhdGUgZGlzcGxheWVkIHRvIHNob3cgYSBzaW5nbGUgZXZlbnRcbiAgICovXG4gIEBJbnB1dCgpIGV2ZW50Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBDdXN0b20gVGVtcGxhdGUgZGlzcGxheWVkIHRvIHNob3cgYW4gc2VwYXJhdG9yIGljb25cbiAgICovXG4gIEBJbnB1dCgpIGNlbnRlckljb25DdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIEN1c3RvbSBUZW1wbGF0ZSBkaXNwbGF5ZWQgdG8gc2hvdyB0aGUgc2lkZSBkYXRlXG4gICAqL1xuICBASW5wdXQoKSBkYXRlSW5zdGFudEN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogQ3VzdG9tIFRlbXBsYXRlIGRpc3BsYXllZCB0byBzaG93IHRoZSBpbm5lciBldmVudFxuICAgKi9cbiAgQElucHV0KCkgaW5uZXJFdmVudEN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogT3V0cHV0IGNsaWNrIGV2ZW50IGVtaXR0ZXJcbiAgICovXG4gIEBPdXRwdXQoKVxuICAgIGNsaWNrRW1pdHRlcjogQmVoYXZpb3JTdWJqZWN0PE5neFRpbWVsaW5lSXRlbT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIGdyb3VwczogeyBba2V5OiBzdHJpbmddOiBOZ3hUaW1lbGluZUV2ZW50W10gfSA9IHt9O1xuICBwZXJpb2RzOiBOZ3hUaW1lbGluZUl0ZW1bXSA9IFtdO1xuICBpdGVtczogTmd4VGltZWxpbmVJdGVtW10gPSBbXTtcbiAgbmd4VGltZWxpbmVJdGVtUG9zaXRpb24gPSBOZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbjtcbiAgbmd4RGF0ZUZvcm1hdCA9IE5neERhdGVGb3JtYXQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZXBhcmF0b3IgPSAnLyc7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cEV2ZW50cyh0aGlzLmV2ZW50cyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cEV2ZW50cyh0aGlzLmV2ZW50cyk7XG4gIH1cblxuICBnZXRQZXJpb2RLZXlEYXRlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBlcmlvZEtleURhdGVGb3JtYXRbdGhpcy5ncm91cEV2ZW50XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3VwcyA9IHt9O1xuICAgIHRoaXMucGVyaW9kcyA9IFtdO1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBncm91cEV2ZW50cyhldmVudHM6IE5neFRpbWVsaW5lRXZlbnRbXSk6IHZvaWQge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuc29ydEV2ZW50cyhldmVudHMpO1xuICAgICAgdGhpcy5zZXRHcm91cHMoZXZlbnRzKTtcbiAgICAgIHRoaXMuc2V0UGVyaW9kcygpO1xuICAgICAgdGhpcy5zZXRJdGVtcygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0RXZlbnRzKGV2ZW50czogTmd4VGltZWxpbmVFdmVudFtdKTogdm9pZCB7XG4gICAgZXZlbnRzLnNvcnQoKGEsIGIpID0+IGEudGltZXN0YW1wLmdldFRpbWUoKSAtIGIudGltZXN0YW1wLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0R3JvdXBzKGV2ZW50czogTmd4VGltZWxpbmVFdmVudFtdKTogdm9pZCB7XG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAvLyBjb252ZXJzaW9uIGZyb20gc3RyaW5nIHRvIGFjdHVhbCBEYXRlXG4gICAgICBldmVudC50aW1lc3RhbXAgPSBuZXcgRGF0ZShldmVudC50aW1lc3RhbXApO1xuICAgICAgY29uc3QgcGVyaW9kS2V5ID0gdGhpcy5nZXRQZXJpb2RLZXlGcm9tRXZlbnQoZXZlbnQpO1xuICAgICAgaWYgKCF0aGlzLmdyb3Vwc1twZXJpb2RLZXldKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzW3BlcmlvZEtleV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ3JvdXBzW3BlcmlvZEtleV0ucHVzaChldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJpb2RzLmZvckVhY2goKHApID0+IHtcbiAgICAgIC8vIGluc2VydCBmaXJzdCB0aGUgcGVyaW9kXG4gICAgICB0aGlzLml0ZW1zLnB1c2gocCk7XG4gICAgICAvLyBpbiBlYWNoIHBlcmlvZCBwdXR0aW5nIGl0ZW1zIG9uIGxlZnRcbiAgICAgIGNvbnN0IG9uTGVmdCA9IHRydWU7XG4gICAgICBjb25zdCBwZXJpb2RJbmZvID0gcC5wZXJpb2RJbmZvO1xuICAgICAgLy8gaW5zZXJ0IHRoZW4gYWxsIHRoZSBldmVudHMgaW4gdGhpcyBwZXJpb2RcbiAgICAgIHRoaXMuYWRkUGVyaW9kRXZlbnRzKHBlcmlvZEluZm8sIG9uTGVmdCk7XG4gICAgICAvLyBvbkxlZnQgPSB0aGlzLmFkZEV2ZW50SXRlbXNBbmRHZXRJZk9uTGVmdChwZXJpb2RJbmZvLCBvbkxlZnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFBlcmlvZEV2ZW50cyhwZXJpb2RJbmZvOiBOZ3hUaW1lbGluZVBlcmlvZEluZm8sIG9uTGVmdDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzW3BlcmlvZEluZm8ucGVyaW9kS2V5XS5mb3JFYWNoKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZFdmVudCA9IHRoaXMuZ3JvdXBzW3BlcmlvZEluZm8ucGVyaW9kS2V5XVtpbmRleCAtIDFdO1xuICAgICAgaWYgKGluZGV4ID4gMCAmJiB0aGlzLmNvbXBhcmVFdmVudHMocHJldkV2ZW50LCBldmVudCkpIHtcbiAgICAgICAgb25MZWZ0ID0gIW9uTGVmdDtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaEV2ZW50T25JdGVtcyhldmVudCwgb25MZWZ0KTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gb25MZWZ0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1c2hFdmVudE9uSXRlbXMoZXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQsIG9uTGVmdDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICBldmVudEluZm86IHsuLi5ldmVudH0sIHBvc2l0aW9uOiBvbkxlZnQgP1xuICAgICAgICB0aGlzLm5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlQgOiB0aGlzLm5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hULFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdGhlIGV2ZW50cyBpbnNpZGUgdGhlIHNhbWUgZ3JvdXBcbiAgICovXG4gIHByb3RlY3RlZCBjb21wYXJlRXZlbnRzKHByZXZFdmVudDogTmd4VGltZWxpbmVFdmVudCwgZXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VTaWRlSW5Hcm91cCA9PT0gTmd4VGltZWxpbmVFdmVudENoYW5nZVNpZGVJbkdyb3VwLkFMTCB8fFxuICAgICAgdGhpcy5jb21wYXJlRXZlbnRzRmllbGQocHJldkV2ZW50LCBldmVudCwgLi4uZmllbGRzVG9DaGVja0V2ZW50Q2hhbmdlU2lkZUluR3JvdXBbdGhpcy5jaGFuZ2VTaWRlSW5Hcm91cF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXBhcmVFdmVudHNGaWVsZChwcmV2RXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQsIGV2ZW50OiBOZ3hUaW1lbGluZUV2ZW50LCAuLi5maWVsZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKHJlcywgZmllbGQpID0+IHJlcyA9IHJlcyB8fCBwcmV2RXZlbnQudGltZXN0YW1wW2ZpZWxkXSgpICE9PSBldmVudC50aW1lc3RhbXBbZmllbGRdKCksICEhZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFBlcmlvZHMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJpb2RzID0gT2JqZWN0LmtleXModGhpcy5ncm91cHMpLm1hcCgocGVyaW9kS2V5KSA9PiB7XG4gICAgICBjb25zdCBzcGxpdCA9IHBlcmlvZEtleS5zcGxpdCh0aGlzLnNlcGFyYXRvcik7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQZXJpb2RJbmZvKHNwbGl0LCBwZXJpb2RLZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJpb2RJbmZvKHNwbGl0OiBzdHJpbmdbXSwgcGVyaW9kS2V5OiBzdHJpbmcpOiB7IHBlcmlvZEluZm86IE5neFRpbWVsaW5lUGVyaW9kSW5mbyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyaW9kSW5mbzoge1xuICAgICAgICB5ZWFyOiBOdW1iZXIoc3BsaXRbMF0pLFxuICAgICAgICBtb250aDogTnVtYmVyKHNwbGl0WzFdKSxcbiAgICAgICAgZGF5OiBOdW1iZXIoc3BsaXRbMl0pLFxuICAgICAgICBwZXJpb2RLZXksXG4gICAgICAgIGZpcnN0RGF0ZTogdGhpcy5ncm91cHNbcGVyaW9kS2V5XVswXS50aW1lc3RhbXAgYXMgRGF0ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQZXJpb2RLZXlGcm9tRXZlbnQoZXZlbnQ6IE5neFRpbWVsaW5lRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWVsZHNUb0FkZEV2ZW50R3JvdXBbdGhpcy5ncm91cEV2ZW50XS5tYXAoKGZpZWxkKSA9PiBldmVudC50aW1lc3RhbXBbZmllbGRdKCkpLmpvaW4odGhpcy5zZXBhcmF0b3IpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWFpbi1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiaXRlbXMtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaW5kZXggPSBpbmRleDtcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8IS0tIERFU0tUT1AgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLWxlZnQgZGVza3RvcFwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LW91dGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm8gJiYgaXRlbS5wb3NpdGlvbiA9PT0gbmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fTEVGVFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV2ZW50Q3VzdG9tVGVtcGxhdGUgfHwgZXZlbnRUZW1wbGF0ZTsgY29udGV4dDoge2V2ZW50OiBpdGVtLCBjb2xTaWRlUG9zaXRpb246IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdXIgbGVmdFwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm8gJiYgaXRlbS5wb3NpdGlvbiA9PT0gbmd4VGltZWxpbmVJdGVtUG9zaXRpb24uT05fUklHSFRcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkYXRlSW5zdGFudEN1c3RvbVRlbXBsYXRlIHx8IGRhdGVJbnN0YW50VGVtcGxhdGU7IGNvbnRleHQ6IHtpdGVtOiBpdGVtLmV2ZW50SW5mb31cIiA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtY2VudGVyIGRlc2t0b3BcIiBbbmdDbGFzc109XCJpdGVtLnBlcmlvZEluZm8gPyAnY29sLXBlcmlvZCcgOiAnY29sLWV2ZW50J1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItaW5uZXJcIiAqbmdJZj1cIml0ZW0ucGVyaW9kSW5mb1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcmlvZEN1c3RvbVRlbXBsYXRlIHx8IHBlcmlvZFRlbXBsYXRlOyBjb250ZXh0OiB7cGVyaW9kOiBpdGVtLnBlcmlvZEluZm8sIGluZGV4OiBpbmRleH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWlubmVyIG5vLXBlcmlvZC1rZXlcIiAqbmdJZj1cIiFpdGVtLnBlcmlvZEluZm9cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJMaW5lc0ljb25UZW1wbGF0ZTsgY29udGV4dDoge2luZGV4OiBpbmRleH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1yaWdodCBkZXNrdG9wXCIgW25nQ2xhc3NdPVwiaXRlbS5wZXJpb2RJbmZvID8gJ2NvbC1wZXJpb2QnIDogJ2NvbC1ldmVudCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtb3V0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpdGVtLmV2ZW50SW5mbyAmJiBpdGVtLnBvc2l0aW9uID09PSBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV2ZW50Q3VzdG9tVGVtcGxhdGUgfHwgZXZlbnRUZW1wbGF0ZTsgY29udGV4dDoge2V2ZW50OiBpdGVtLCBjb2xTaWRlUG9zaXRpb246IG5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX1JJR0hUfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJob3VyIHJpZ2h0XCIgKm5nSWY9XCJpdGVtLmV2ZW50SW5mbyAmJiBpdGVtLnBvc2l0aW9uID09PSBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9MRUZUXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUluc3RhbnRDdXN0b21UZW1wbGF0ZSB8fCBkYXRlSW5zdGFudFRlbXBsYXRlOyBjb250ZXh0OiB7aXRlbTogaXRlbS5ldmVudEluZm99XCIgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gTU9CSUxFIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIGNvbC1sZWZ0IG1vYmlsZVwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdXIgbGVmdFwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm9cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3VyLWlubmVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUluc3RhbnRDdXN0b21UZW1wbGF0ZSB8fCBkYXRlSW5zdGFudFRlbXBsYXRlOyBjb250ZXh0OiB7aXRlbTogaXRlbS5ldmVudEluZm99XCIgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBjb2wtY2VudGVyIG1vYmlsZVwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlci1pbm5lclwiICpuZ0lmPVwiaXRlbS5wZXJpb2RJbmZvO1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVyaW9kQ3VzdG9tVGVtcGxhdGUgfHwgcGVyaW9kVGVtcGxhdGU7IGNvbnRleHQ6IHtwZXJpb2Q6IGl0ZW0ucGVyaW9kSW5mbywgaW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXItaW5uZXIgbm8tcGVyaW9kLWtleVwiICpuZ0lmPVwiIWl0ZW0ucGVyaW9kSW5mbztcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZW50ZXJMaW5lc0ljb25UZW1wbGF0ZTtjb250ZXh0OiB7aW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgY29sLXJpZ2h0IG1vYmlsZVwiIFtuZ0NsYXNzXT1cIml0ZW0ucGVyaW9kSW5mbyA/ICdjb2wtcGVyaW9kJyA6ICdjb2wtZXZlbnQnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LW91dGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbS5ldmVudEluZm9cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJldmVudEN1c3RvbVRlbXBsYXRlIHx8IGV2ZW50VGVtcGxhdGU7IGNvbnRleHQ6IHtldmVudDogaXRlbSwgY29sU2lkZVBvc2l0aW9uOiBuZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNjZW50ZXJMaW5lc0ljb25UZW1wbGF0ZSBsZXQtaW5kZXg9aW5kZXg+XHJcbiAgPGRpdiBjbGFzcz1cImxpbmVcIj48L2Rpdj5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VudGVySWNvbkN1c3RvbVRlbXBsYXRlIHx8IGNlbnRlckljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyd0cmFuc3BhcmVudCBsYXN0LWxpbmUnOiBpbmRleCA9PT0gaXRlbXMubGVuZ3RoIC0gMX1cIiBjbGFzcz1cImxpbmVcIj48L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2VudGVySWNvblRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJjZW50ZXItaWNvbi1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RhdGVJbnN0YW50VGVtcGxhdGUgbGV0LWl0ZW09aXRlbT5cclxuICA8c3Bhbj5cclxuICAgIHt7aXRlbT8udGltZXN0YW1wIHwgbmd4ZGF0ZSA6IG5neERhdGVGb3JtYXQuSE9VUlNfTUlOVVRFUyA6IGxhbmdDb2RlfX1cclxuICA8L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3BlcmlvZFRlbXBsYXRlIGxldC1wZXJpb2Q9cGVyaW9kIGxldC1pbmRleD1pbmRleD5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsndHJhbnNwYXJlbnQgZmlyc3QtbGluZSc6ICFpbmRleH1cIiBjbGFzcz1cImxpbmVcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicGVyaW9kLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBlcmlvZC1pbm5lci1jb250YWluZXJcIj5cclxuICAgICAgPHNwYW4+e3twZXJpb2Q/LmZpcnN0RGF0ZSB8IG5neGRhdGUgOiBnZXRQZXJpb2RLZXlEYXRlRm9ybWF0KCkgOiBsYW5nQ29kZX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImxpbmVcIj48L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZXZlbnRUZW1wbGF0ZSBsZXQtZXZlbnQ9ZXZlbnQgbGV0LWNvbFNpZGVQb3NpdGlvbj1jb2xTaWRlUG9zaXRpb24+XHJcbiAgPG5neC10aW1lbGluZS1ldmVudFxyXG4gICAgW2V2ZW50XT1cImV2ZW50XCJcclxuICAgIFtsYW5nQ29kZV09XCJsYW5nQ29kZVwiXHJcbiAgICBbZW5hYmxlQW5pbWF0aW9uXT1cImVuYWJsZUFuaW1hdGlvblwiXHJcbiAgICBbaW5uZXJFdmVudEN1c3RvbVRlbXBsYXRlXT1cImlubmVyRXZlbnRDdXN0b21UZW1wbGF0ZVwiXHJcbiAgICBbY29sU2lkZVBvc2l0aW9uXT1cImNvbFNpZGVQb3NpdGlvblwiXHJcbiAgICAoY2xpY2tFbWl0dGVyKT1cImNsaWNrRW1pdHRlci5uZXh0KCRldmVudClcIj5cclxuICA8L25neC10aW1lbGluZS1ldmVudD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiJdfQ==
@@ -0,0 +1,93 @@
1
+ export const supportedLanguageCodes = ['en', 'it', 'fr', 'de', 'es'];
2
+ export const dateConfigMap = {
3
+ en: {
4
+ code: 'en-US',
5
+ fullDate: 'MM/dd/yyyy h:mm a',
6
+ dayMonthYear: 'dd MMMM yyyy',
7
+ monthYear: 'MMMM yyyy',
8
+ year: 'yyyy',
9
+ hoursMinutes: 'hh:mm a',
10
+ },
11
+ it: {
12
+ code: 'it-IT',
13
+ fullDate: 'dd/MM/yyyy H:mm',
14
+ dayMonthYear: 'dd MMMM yyyy',
15
+ monthYear: 'MMMM yyyy',
16
+ year: 'yyyy',
17
+ hoursMinutes: 'HH:mm',
18
+ },
19
+ fr: {
20
+ code: 'fr-FR',
21
+ fullDate: 'dd/MM/yyyy H:mm',
22
+ dayMonthYear: 'dd MMMM yyyy',
23
+ monthYear: 'MMMM yyyy',
24
+ year: 'yyyy',
25
+ hoursMinutes: 'HH:mm',
26
+ },
27
+ de: {
28
+ code: 'de',
29
+ fullDate: 'dd/MM/yyyy H:mm',
30
+ dayMonthYear: 'dd MMMM yyyy',
31
+ monthYear: 'MMMM yyyy',
32
+ year: 'yyyy',
33
+ hoursMinutes: 'HH:mm',
34
+ },
35
+ es: {
36
+ code: 'es',
37
+ fullDate: 'dd/MM/yyyy H:mm',
38
+ dayMonthYear: 'dd MMMM yyyy',
39
+ monthYear: 'MMMM yyyy',
40
+ year: 'yyyy',
41
+ hoursMinutes: 'HH:mm',
42
+ },
43
+ };
44
+ export var NgxDateFormat;
45
+ (function (NgxDateFormat) {
46
+ NgxDateFormat["DAY_MONTH_YEAR"] = "DAY_MONTH_YEAR";
47
+ NgxDateFormat["FULL_DATE"] = "FULL_DATE";
48
+ NgxDateFormat["MONTH_YEAR"] = "MONTH_YEAR";
49
+ NgxDateFormat["HOURS_MINUTES"] = "HOURS_MINUTES";
50
+ NgxDateFormat["YEAR"] = "YEAR";
51
+ })(NgxDateFormat || (NgxDateFormat = {}));
52
+ export const fieldConfigDate = {
53
+ MONTH_YEAR: 'monthYear',
54
+ YEAR: 'year',
55
+ HOURS_MINUTES: 'hoursMinutes',
56
+ FULL_DATE: 'fullDate',
57
+ DAY_MONTH_YEAR: 'dayMonthYear',
58
+ };
59
+ /**
60
+ * Enum used to set the group event logic
61
+ */
62
+ export var NgxTimelineEventGroup;
63
+ (function (NgxTimelineEventGroup) {
64
+ NgxTimelineEventGroup["YEAR"] = "YEAR";
65
+ NgxTimelineEventGroup["MONTH_YEAR"] = "MONTH_YEAR";
66
+ NgxTimelineEventGroup["DAY_MONTH_YEAR"] = "DAY_MONTH_YEAR";
67
+ })(NgxTimelineEventGroup || (NgxTimelineEventGroup = {}));
68
+ export const fieldsToAddEventGroup = {
69
+ YEAR: ['getFullYear'],
70
+ MONTH_YEAR: ['getFullYear', 'getMonth'],
71
+ DAY_MONTH_YEAR: ['getFullYear', 'getMonth', 'getDate'],
72
+ };
73
+ export const periodKeyDateFormat = {
74
+ YEAR: NgxDateFormat.YEAR,
75
+ MONTH_YEAR: NgxDateFormat.MONTH_YEAR,
76
+ DAY_MONTH_YEAR: NgxDateFormat.DAY_MONTH_YEAR,
77
+ };
78
+ /**
79
+ * Enum used to set the change side event logic
80
+ */
81
+ export var NgxTimelineEventChangeSideInGroup;
82
+ (function (NgxTimelineEventChangeSideInGroup) {
83
+ NgxTimelineEventChangeSideInGroup["ALL"] = "ALL";
84
+ NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_HMS"] = "ON_DIFFERENT_HMS";
85
+ NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_DAY"] = "ON_DIFFERENT_DAY";
86
+ NgxTimelineEventChangeSideInGroup["ON_DIFFERENT_MONTH"] = "ON_DIFFERENT_MONTH";
87
+ })(NgxTimelineEventChangeSideInGroup || (NgxTimelineEventChangeSideInGroup = {}));
88
+ export const fieldsToCheckEventChangeSideInGroup = {
89
+ ON_DIFFERENT_MONTH: ['getFullYear', 'getMonth'],
90
+ ON_DIFFERENT_DAY: ['getFullYear', 'getMonth', 'getDate'],
91
+ ON_DIFFERENT_HMS: ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'],
92
+ };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Q29uZmlnT2JqLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRpbWVsaW5lL3NyYy9saWIvbW9kZWxzL05neENvbmZpZ09iai50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQWVyRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWtCO0lBQzFDLEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixZQUFZLEVBQUUsY0FBYztRQUM1QixTQUFTLEVBQUUsV0FBVztRQUN0QixJQUFJLEVBQUUsTUFBTTtRQUNaLFlBQVksRUFBRSxTQUFTO0tBQ3hCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLE9BQU87UUFDYixRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRSxNQUFNO1FBQ1osWUFBWSxFQUFFLE9BQU87S0FDdEI7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsT0FBTztRQUNiLFFBQVEsRUFBRSxpQkFBaUI7UUFDM0IsWUFBWSxFQUFFLGNBQWM7UUFDNUIsU0FBUyxFQUFFLFdBQVc7UUFDdEIsSUFBSSxFQUFFLE1BQU07UUFDWixZQUFZLEVBQUUsT0FBTztLQUN0QjtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxJQUFJO1FBQ1YsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixZQUFZLEVBQUUsY0FBYztRQUM1QixTQUFTLEVBQUUsV0FBVztRQUN0QixJQUFJLEVBQUUsTUFBTTtRQUNaLFlBQVksRUFBRSxPQUFPO0tBQ3RCO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFlBQVksRUFBRSxjQUFjO1FBQzVCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLElBQUksRUFBRSxNQUFNO1FBQ1osWUFBWSxFQUFFLE9BQU87S0FDdEI7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFOLElBQVksYUFNWDtBQU5ELFdBQVksYUFBYTtJQUN2QixrREFBaUMsQ0FBQTtJQUNqQyx3Q0FBdUIsQ0FBQTtJQUN2QiwwQ0FBeUIsQ0FBQTtJQUN6QixnREFBK0IsQ0FBQTtJQUMvQiw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQU5XLGFBQWEsS0FBYixhQUFhLFFBTXhCO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLElBQUksRUFBRSxNQUFNO0lBQ1osYUFBYSxFQUFFLGNBQWM7SUFDN0IsU0FBUyxFQUFFLFVBQVU7SUFDckIsY0FBYyxFQUFFLGNBQWM7Q0FDL0IsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVkscUJBSVg7QUFKRCxXQUFZLHFCQUFxQjtJQUMvQixzQ0FBYSxDQUFBO0lBQ2Isa0RBQXlCLENBQUE7SUFDekIsMERBQWlDLENBQUE7QUFDbkMsQ0FBQyxFQUpXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFJaEM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDckIsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQztJQUN2QyxjQUFjLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztDQUN2RCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO0lBQ3hCLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtJQUNwQyxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7Q0FDN0MsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksaUNBS1g7QUFMRCxXQUFZLGlDQUFpQztJQUMzQyxnREFBVyxDQUFBO0lBQ1gsMEVBQXFDLENBQUE7SUFDckMsMEVBQXFDLENBQUE7SUFDckMsOEVBQXlDLENBQUE7QUFDM0MsQ0FBQyxFQUxXLGlDQUFpQyxLQUFqQyxpQ0FBaUMsUUFLNUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRztJQUNqRCxrQkFBa0IsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7SUFDL0MsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztJQUN4RCxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO0NBQ2pHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc3VwcG9ydGVkTGFuZ3VhZ2VDb2RlcyA9IFsnZW4nLCAnaXQnLCAnZnInLCAnZGUnLCAnZXMnXTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3hDb25maWdEYXRlIHtcbiAgY29kZTogc3RyaW5nO1xuICBkYXlNb250aFllYXI6IHN0cmluZztcbiAgZnVsbERhdGU6IHN0cmluZztcbiAgaG91cnNNaW51dGVzOiBzdHJpbmc7XG4gIG1vbnRoWWVhcjogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4RGF0ZU9iak1hcCB7XG4gIFtrZXk6IHN0cmluZ106IE5neENvbmZpZ0RhdGU7XG59XG5cbmV4cG9ydCBjb25zdCBkYXRlQ29uZmlnTWFwOiBOZ3hEYXRlT2JqTWFwID0ge1xuICBlbjoge1xuICAgIGNvZGU6ICdlbi1VUycsXG4gICAgZnVsbERhdGU6ICdNTS9kZC95eXl5IGg6bW0gYScsXG4gICAgZGF5TW9udGhZZWFyOiAnZGQgTU1NTSB5eXl5JyxcbiAgICBtb250aFllYXI6ICdNTU1NIHl5eXknLFxuICAgIHllYXI6ICd5eXl5JyxcbiAgICBob3Vyc01pbnV0ZXM6ICdoaDptbSBhJyxcbiAgfSxcbiAgaXQ6IHtcbiAgICBjb2RlOiAnaXQtSVQnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZnI6IHtcbiAgICBjb2RlOiAnZnItRlInLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZGU6IHtcbiAgICBjb2RlOiAnZGUnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbiAgZXM6IHtcbiAgICBjb2RlOiAnZXMnLFxuICAgIGZ1bGxEYXRlOiAnZGQvTU0veXl5eSBIOm1tJyxcbiAgICBkYXlNb250aFllYXI6ICdkZCBNTU1NIHl5eXknLFxuICAgIG1vbnRoWWVhcjogJ01NTU0geXl5eScsXG4gICAgeWVhcjogJ3l5eXknLFxuICAgIGhvdXJzTWludXRlczogJ0hIOm1tJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBlbnVtIE5neERhdGVGb3JtYXQge1xuICBEQVlfTU9OVEhfWUVBUiA9ICdEQVlfTU9OVEhfWUVBUicsXG4gIEZVTExfREFURSA9ICdGVUxMX0RBVEUnLFxuICBNT05USF9ZRUFSID0gJ01PTlRIX1lFQVInLFxuICBIT1VSU19NSU5VVEVTID0gJ0hPVVJTX01JTlVURVMnLFxuICBZRUFSID0gJ1lFQVInXG59XG5cbmV4cG9ydCBjb25zdCBmaWVsZENvbmZpZ0RhdGUgPSB7XG4gIE1PTlRIX1lFQVI6ICdtb250aFllYXInLFxuICBZRUFSOiAneWVhcicsXG4gIEhPVVJTX01JTlVURVM6ICdob3Vyc01pbnV0ZXMnLFxuICBGVUxMX0RBVEU6ICdmdWxsRGF0ZScsXG4gIERBWV9NT05USF9ZRUFSOiAnZGF5TW9udGhZZWFyJyxcbn07XG5cbi8qKlxuICogRW51bSB1c2VkIHRvIHNldCB0aGUgZ3JvdXAgZXZlbnQgbG9naWNcbiAqL1xuZXhwb3J0IGVudW0gTmd4VGltZWxpbmVFdmVudEdyb3VwIHtcbiAgWUVBUiA9ICdZRUFSJyxcbiAgTU9OVEhfWUVBUiA9ICdNT05USF9ZRUFSJyxcbiAgREFZX01PTlRIX1lFQVIgPSAnREFZX01PTlRIX1lFQVInXG59XG5cbmV4cG9ydCBjb25zdCBmaWVsZHNUb0FkZEV2ZW50R3JvdXAgPSB7XG4gIFlFQVI6IFsnZ2V0RnVsbFllYXInXSxcbiAgTU9OVEhfWUVBUjogWydnZXRGdWxsWWVhcicsICdnZXRNb250aCddLFxuICBEQVlfTU9OVEhfWUVBUjogWydnZXRGdWxsWWVhcicsICdnZXRNb250aCcsICdnZXREYXRlJ10sXG59O1xuXG5leHBvcnQgY29uc3QgcGVyaW9kS2V5RGF0ZUZvcm1hdCA9IHtcbiAgWUVBUjogTmd4RGF0ZUZvcm1hdC5ZRUFSLFxuICBNT05USF9ZRUFSOiBOZ3hEYXRlRm9ybWF0Lk1PTlRIX1lFQVIsXG4gIERBWV9NT05USF9ZRUFSOiBOZ3hEYXRlRm9ybWF0LkRBWV9NT05USF9ZRUFSLFxufTtcblxuLyoqXG4gKiBFbnVtIHVzZWQgdG8gc2V0IHRoZSBjaGFuZ2Ugc2lkZSBldmVudCBsb2dpY1xuICovXG5leHBvcnQgZW51bSBOZ3hUaW1lbGluZUV2ZW50Q2hhbmdlU2lkZUluR3JvdXAge1xuICBBTEwgPSAnQUxMJyxcbiAgT05fRElGRkVSRU5UX0hNUyA9ICdPTl9ESUZGRVJFTlRfSE1TJyxcbiAgT05fRElGRkVSRU5UX0RBWSA9ICdPTl9ESUZGRVJFTlRfREFZJyxcbiAgT05fRElGRkVSRU5UX01PTlRIID0gJ09OX0RJRkZFUkVOVF9NT05USCdcbn1cblxuZXhwb3J0IGNvbnN0IGZpZWxkc1RvQ2hlY2tFdmVudENoYW5nZVNpZGVJbkdyb3VwID0ge1xuICBPTl9ESUZGRVJFTlRfTU9OVEg6IFsnZ2V0RnVsbFllYXInLCAnZ2V0TW9udGgnXSxcbiAgT05fRElGRkVSRU5UX0RBWTogWydnZXRGdWxsWWVhcicsICdnZXRNb250aCcsICdnZXREYXRlJ10sXG4gIE9OX0RJRkZFUkVOVF9ITVM6IFsnZ2V0RnVsbFllYXInLCAnZ2V0TW9udGgnLCAnZ2V0RGF0ZScsICdnZXRIb3VycycsICdnZXRNaW51dGVzJywgJ2dldFNlY29uZHMnXSxcbn07XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export var NgxTimelineItemPosition;
2
+ (function (NgxTimelineItemPosition) {
3
+ NgxTimelineItemPosition["ON_LEFT"] = "ON_LEFT";
4
+ NgxTimelineItemPosition["ON_RIGHT"] = "ON_RIGHT";
5
+ })(NgxTimelineItemPosition || (NgxTimelineItemPosition = {}));
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4VGltZWxpbmVFdmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL21vZGVscy9OZ3hUaW1lbGluZUV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRCQSxNQUFNLENBQU4sSUFBWSx1QkFHWDtBQUhELFdBQVksdUJBQXVCO0lBQ2pDLDhDQUFtQixDQUFBO0lBQ25CLGdEQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBR2xDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudCB0byBiZSBwcm92aWRlZCBmcm9tIG91dHNpZGUgdGhlIHRpbWVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmd4VGltZWxpbmVFdmVudCB7XG4gIHRpbWVzdGFtcD86IERhdGU7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4VGltZWxpbmVQZXJpb2RJbmZvIHtcbiAgcGVyaW9kS2V5Pzogc3RyaW5nO1xuICB5ZWFyPzogbnVtYmVyO1xuICBtb250aD86IG51bWJlcjtcbiAgZGF5PzogbnVtYmVyO1xuICBmaXJzdERhdGU/OiBhbnk7XG59XG5cbi8qKlxuICogSXRlbSB1c2VkIGluc2lkZSB0aGUgdGltZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZ3hUaW1lbGluZUl0ZW0ge1xuICB0eXBlPzogc3RyaW5nO1xuICBwb3NpdGlvbj86IE5neFRpbWVsaW5lSXRlbVBvc2l0aW9uLk9OX0xFRlQgfCBOZ3hUaW1lbGluZUl0ZW1Qb3NpdGlvbi5PTl9SSUdIVDtcbiAgcGVyaW9kSW5mbz86IE5neFRpbWVsaW5lUGVyaW9kSW5mbztcbiAgZXZlbnRJbmZvPzogTmd4VGltZWxpbmVFdmVudDtcbn1cblxuZXhwb3J0IGVudW0gTmd4VGltZWxpbmVJdGVtUG9zaXRpb24ge1xuICBPTl9MRUZUID0gJ09OX0xFRlQnLFxuICBPTl9SSUdIVCA9ICdPTl9SSUdIVCdcbn1cbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { NgxTimelineComponent } from './components/ngx-timeline.component';
3
+ import { NgxTimelineEventComponent } from './components/ngx-timeline-event/ngx-timeline-event.component';
4
+ import { CommonModule, registerLocaleData } from '@angular/common';
5
+ import { NgxDatePipe } from './pipes/ngx-date-pipe';
6
+ import localeIt from '@angular/common/locales/it';
7
+ import localeFr from '@angular/common/locales/fr';
8
+ import localeDe from '@angular/common/locales/de';
9
+ import localeEs from '@angular/common/locales/es';
10
+ import * as i0 from "@angular/core";
11
+ registerLocaleData(localeIt);
12
+ registerLocaleData(localeFr);
13
+ registerLocaleData(localeDe);
14
+ registerLocaleData(localeEs);
15
+ export class NgxTimelineModule {
16
+ }
17
+ NgxTimelineModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
+ NgxTimelineModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineModule, declarations: [NgxTimelineComponent, NgxTimelineEventComponent, NgxDatePipe], imports: [CommonModule], exports: [NgxTimelineComponent, NgxDatePipe] });
19
+ NgxTimelineModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineModule, imports: [[CommonModule]] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxTimelineModule, decorators: [{
21
+ type: NgModule,
22
+ args: [{
23
+ declarations: [NgxTimelineComponent, NgxTimelineEventComponent, NgxDatePipe],
24
+ imports: [CommonModule],
25
+ exports: [NgxTimelineComponent, NgxDatePipe],
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVsaW5lLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL25neC10aW1lbGluZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFDM0IsOERBQThELENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLFFBQVEsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFbEQsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0Isa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0Isa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0Isa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFPN0IsTUFBTSxPQUFPLGlCQUFpQjs7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLGlCQUpiLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLFdBQVcsYUFDakUsWUFBWSxhQUNaLG9CQUFvQixFQUFFLFdBQVc7K0dBRWhDLGlCQUFpQixZQUhuQixDQUFDLFlBQVksQ0FBQzsyRkFHWixpQkFBaUI7a0JBTDdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsV0FBVyxDQUFDO29CQUM1RSxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQztpQkFDN0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Tmd4VGltZWxpbmVDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9uZ3gtdGltZWxpbmUuY29tcG9uZW50JztcbmltcG9ydCB7Tmd4VGltZWxpbmVFdmVudENvbXBvbmVudH0gXG4gIGZyb20gJy4vY29tcG9uZW50cy9uZ3gtdGltZWxpbmUtZXZlbnQvbmd4LXRpbWVsaW5lLWV2ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZSwgcmVnaXN0ZXJMb2NhbGVEYXRhfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ3hEYXRlUGlwZX0gZnJvbSAnLi9waXBlcy9uZ3gtZGF0ZS1waXBlJztcbmltcG9ydCBsb2NhbGVJdCBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy9pdCc7XG5pbXBvcnQgbG9jYWxlRnIgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZnInO1xuaW1wb3J0IGxvY2FsZURlIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2RlJztcbmltcG9ydCBsb2NhbGVFcyBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy9lcyc7XG5cbnJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGVJdCk7XG5yZWdpc3RlckxvY2FsZURhdGEobG9jYWxlRnIpO1xucmVnaXN0ZXJMb2NhbGVEYXRhKGxvY2FsZURlKTtcbnJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGVFcyk7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW05neFRpbWVsaW5lQ29tcG9uZW50LCBOZ3hUaW1lbGluZUV2ZW50Q29tcG9uZW50LCBOZ3hEYXRlUGlwZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbTmd4VGltZWxpbmVDb21wb25lbnQsIE5neERhdGVQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4VGltZWxpbmVNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { DatePipe } from '@angular/common';
2
+ import { Pipe } from '@angular/core';
3
+ import { supportedLanguageCodes, fieldConfigDate, dateConfigMap } from '../models';
4
+ import * as i0 from "@angular/core";
5
+ export class NgxDatePipe {
6
+ constructor() {
7
+ }
8
+ transform(date, dateFormat, langCode) {
9
+ let transformedDate = null;
10
+ if (date) {
11
+ const objDate = this.getDateConfig(langCode);
12
+ transformedDate = new DatePipe(objDate.code).transform(new Date(date), this.dateFormat(dateFormat, objDate));
13
+ }
14
+ return transformedDate;
15
+ }
16
+ dateFormat(dateFormat, configDate) {
17
+ return configDate[fieldConfigDate[dateFormat]];
18
+ }
19
+ getDateConfig(langCode) {
20
+ const code = langCode || supportedLanguageCodes[0];
21
+ const configDate = dateConfigMap[code] || dateConfigMap[supportedLanguageCodes[0]];
22
+ return configDate;
23
+ }
24
+ }
25
+ NgxDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
26
+ NgxDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxDatePipe, name: "ngxdate", pure: false });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: NgxDatePipe, decorators: [{
28
+ type: Pipe,
29
+ args: [{ name: 'ngxdate', pure: false }]
30
+ }], ctorParameters: function () { return []; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWRhdGUtcGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10aW1lbGluZS9zcmMvbGliL3BpcGVzL25neC1kYXRlLXBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxJQUFJLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBOEMsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7QUFHOUgsTUFBTSxPQUFPLFdBQVc7SUFDdEI7SUFDQSxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQW1CLEVBQUUsVUFBbUIsRUFBRSxRQUFpQjtRQUNuRSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLGVBQWUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDOUc7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRU8sVUFBVSxDQUFDLFVBQWtCLEVBQUUsVUFBeUI7UUFDOUQsT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUFnQjtRQUNwQyxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7O3dHQXJCVSxXQUFXO3NHQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsSUFBSTttQkFBQyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ3hDb25maWdEYXRlLCBOZ3hEYXRlT2JqTWFwLCBOZ3hEYXRlRm9ybWF0LCBzdXBwb3J0ZWRMYW5ndWFnZUNvZGVzLCBmaWVsZENvbmZpZ0RhdGUsIGRhdGVDb25maWdNYXB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBQaXBlKHtuYW1lOiAnbmd4ZGF0ZScsIHB1cmU6IGZhbHNlfSlcbmV4cG9ydCBjbGFzcyBOZ3hEYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIHRyYW5zZm9ybShkYXRlOiBEYXRlIHwgc3RyaW5nLCBkYXRlRm9ybWF0Pzogc3RyaW5nLCBsYW5nQ29kZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHRyYW5zZm9ybWVkRGF0ZSA9IG51bGw7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIGNvbnN0IG9iakRhdGUgPSB0aGlzLmdldERhdGVDb25maWcobGFuZ0NvZGUpO1xuICAgICAgdHJhbnNmb3JtZWREYXRlID0gbmV3IERhdGVQaXBlKG9iakRhdGUuY29kZSkudHJhbnNmb3JtKG5ldyBEYXRlKGRhdGUpLCB0aGlzLmRhdGVGb3JtYXQoZGF0ZUZvcm1hdCwgb2JqRGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlRm9ybWF0KGRhdGVGb3JtYXQ6IHN0cmluZywgY29uZmlnRGF0ZTogTmd4Q29uZmlnRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbmZpZ0RhdGVbZmllbGRDb25maWdEYXRlW2RhdGVGb3JtYXRdXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZUNvbmZpZyhsYW5nQ29kZTogc3RyaW5nKTogTmd4Q29uZmlnRGF0ZSB7XG4gICAgY29uc3QgY29kZSA9IGxhbmdDb2RlIHx8IHN1cHBvcnRlZExhbmd1YWdlQ29kZXNbMF07XG4gICAgY29uc3QgY29uZmlnRGF0ZSA9IGRhdGVDb25maWdNYXBbY29kZV0gfHwgZGF0ZUNvbmZpZ01hcFtzdXBwb3J0ZWRMYW5ndWFnZUNvZGVzWzBdXTtcbiAgICByZXR1cm4gY29uZmlnRGF0ZTtcbiAgfVxufVxuIl19