keevo-components 2.0.115 → 2.0.116

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.
@@ -15,6 +15,10 @@ const TIMELINE_SEVERITY_MAP = {
15
15
  waiting: { timelineIcon: 'clock_loader_10', timelineColor: '#0A3A78' }
16
16
  };
17
17
  export class KvTimelineComponent {
18
+ isLastItem(index) {
19
+ const total = this.parsedEvents().length;
20
+ return index === total - 1;
21
+ }
18
22
  constructor() {
19
23
  this.dataSource = input();
20
24
  this.lastOnly = false;
@@ -41,16 +45,16 @@ export class KvTimelineComponent {
41
45
  return { ...item, severity, timelineIcon, timelineColor };
42
46
  }
43
47
  const { timelineIcon, timelineColor } = TIMELINE_SEVERITY_MAP[realSeverity];
44
- return { ...item, severity: realSeverity, timelineIcon, timelineColor };
48
+ return { ...item, index, severity: realSeverity, timelineIcon, timelineColor };
45
49
  });
46
50
  });
47
51
  }
48
52
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
49
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvTimelineComponent, isStandalone: true, selector: "kv-timeline", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, getSeverityFn: { classPropertyName: "getSeverityFn", publicName: "getSeverityFn", isSignal: false, isRequired: false, transformFunction: null }, getLastActiveCount: { classPropertyName: "getLastActiveCount", publicName: "getLastActiveCount", isSignal: false, isRequired: false, transformFunction: null }, lastOnly: { classPropertyName: "lastOnly", publicName: "lastOnly", isSignal: false, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: false, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: false, isRequired: false, transformFunction: null }, oppositeTemplate: { classPropertyName: "oppositeTemplate", publicName: "oppositeTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </p-timeline>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TimelineModule }, { kind: "component", type: i2.Timeline, selector: "p-timeline", inputs: ["value", "style", "styleClass", "align", "layout"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvTimelineComponent, isStandalone: true, selector: "kv-timeline", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, getSeverityFn: { classPropertyName: "getSeverityFn", publicName: "getSeverityFn", isSignal: false, isRequired: false, transformFunction: null }, getLastActiveCount: { classPropertyName: "getLastActiveCount", publicName: "getLastActiveCount", isSignal: false, isRequired: false, transformFunction: null }, lastOnly: { classPropertyName: "lastOnly", publicName: "lastOnly", isSignal: false, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: false, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: false, isRequired: false, transformFunction: null }, oppositeTemplate: { classPropertyName: "oppositeTemplate", publicName: "oppositeTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null }, lastContentTemplate: { classPropertyName: "lastContentTemplate", publicName: "lastContentTemplate", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngIf=\"lastContentTemplate && isLastItem(event.index); else defaultContent\"\r\n [ngTemplateOutlet]=\"lastContentTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: event }\">\r\n </ng-container>\r\n\r\n <ng-template #defaultContent>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n\r\n\r\n </p-timeline>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TimelineModule }, { kind: "component", type: i2.Timeline, selector: "p-timeline", inputs: ["value", "style", "styleClass", "align", "layout"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
50
54
  }
51
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTimelineComponent, decorators: [{
52
56
  type: Component,
53
- args: [{ selector: 'kv-timeline', standalone: true, imports: [CommonModule, TimelineModule], template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </p-timeline>\r\n</div>\r\n" }]
57
+ args: [{ selector: 'kv-timeline', standalone: true, imports: [CommonModule, TimelineModule], template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngIf=\"lastContentTemplate && isLastItem(event.index); else defaultContent\"\r\n [ngTemplateOutlet]=\"lastContentTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: event }\">\r\n </ng-container>\r\n\r\n <ng-template #defaultContent>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n\r\n\r\n </p-timeline>\r\n</div>\r\n" }]
54
58
  }], ctorParameters: () => [], propDecorators: { getSeverityFn: [{
55
59
  type: Input
56
60
  }], getLastActiveCount: [{
@@ -65,5 +69,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
65
69
  type: Input
66
70
  }], contentTemplate: [{
67
71
  type: Input
72
+ }], lastContentTemplate: [{
73
+ type: Input
68
74
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGltZWxpbmUva3YtdGltZWxpbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGltZWxpbmUva3YtdGltZWxpbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFnQixLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBSXRDLE1BQU0scUJBQXFCLEdBQThFO0lBQ3ZHLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRTtJQUN0RSxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDbkUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDMUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDekUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0lBQ2xFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0NBQ3ZFLENBQUM7QUFTRixNQUFNLE9BQU8sbUJBQW1CO0lBOEM1QjtRQTdDQSxlQUFVLEdBQUcsS0FBSyxFQUFTLENBQUM7UUFLbkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixXQUFNLEdBQThCLFVBQVUsQ0FBQztRQUl4RCxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUV6QyxNQUFNLGdCQUFnQixHQUNwQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRVIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxPQUFPLEdBQUcsUUFBUTt5QkFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQzt3QkFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3FCQUNoQyxDQUFDLENBQUM7eUJBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7eUJBQ3JDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUM7eUJBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3BFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBRXhFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUM1RCxDQUFDO2dCQUVELE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzVFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUMxRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBS0MsQ0FBQzs4R0FoRFEsbUJBQW1CO2tHQUFuQixtQkFBbUIsbXJDQ3ZCaEMsK2tDQTRCQSx5RERUWSxZQUFZLDBSQUFFLGNBQWM7OzJGQUkzQixtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7d0RBTzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIENvbnRlbnRDaGlsZCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpbWVsaW5lTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90aW1lbGluZSc7XHJcbmltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG50eXBlIFRpbWVsaW5lU2V2ZXJpdHkgPSAnaW5fcHJvZ3Jlc3MnIHwgJ3N1Y2Nlc3MnIHwgJ2NhbmNlbGxlZCcgfCAnZXJyb3InIHwgJ3BhdXNlZCcgfCAnd2FpdGluZyc7XHJcblxyXG5jb25zdCBUSU1FTElORV9TRVZFUklUWV9NQVA6IFJlY29yZDxUaW1lbGluZVNldmVyaXR5LCB7IHRpbWVsaW5lSWNvbjogc3RyaW5nOyB0aW1lbGluZUNvbG9yOiBzdHJpbmcgfT4gPSB7XHJcbiAgaW5fcHJvZ3Jlc3M6IHsgdGltZWxpbmVJY29uOiAnbW90aW9uX3BsYXknLCB0aW1lbGluZUNvbG9yOiAnIzAwOTFDMicgfSxcclxuICBzdWNjZXNzOiB7IHRpbWVsaW5lSWNvbjogJ2NoZWNrX2NpcmNsZScsIHRpbWVsaW5lQ29sb3I6ICcjMEE4NzY1JyB9LFxyXG4gIGNhbmNlbGxlZDogeyB0aW1lbGluZUljb246ICdkb19ub3RfZGlzdHVyYl9vbicsIHRpbWVsaW5lQ29sb3I6ICcjQ0JENUUxJyB9LFxyXG4gIGVycm9yOiB7IHRpbWVsaW5lSWNvbjogJ21vdGlvbl9waG90b3NfcGF1c2VkJywgdGltZWxpbmVDb2xvcjogJyNCOTFDMUMnIH0sXHJcbiAgcGF1c2VkOiB7IHRpbWVsaW5lSWNvbjogJ3BhdXNlX2NpcmNsZScsIHRpbWVsaW5lQ29sb3I6ICcjRTE5NjNEJyB9LFxyXG4gIHdhaXRpbmc6IHsgdGltZWxpbmVJY29uOiAnY2xvY2tfbG9hZGVyXzEwJywgdGltZWxpbmVDb2xvcjogJyMwQTNBNzgnIH1cclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtdGltZWxpbmUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVGltZWxpbmVNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10aW1lbGluZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LXRpbWVsaW5lLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUaW1lbGluZUNvbXBvbmVudCB7XHJcbiAgICBkYXRhU291cmNlID0gaW5wdXQ8YW55W10+KCk7XHJcbiAgICBcclxuICAgIEBJbnB1dCgpIGdldFNldmVyaXR5Rm4hOiAoaXRlbTogYW55KSA9PiBUaW1lbGluZVNldmVyaXR5O1xyXG4gICAgQElucHV0KCkgZ2V0TGFzdEFjdGl2ZUNvdW50PzogKGRhdGFTb3VyY2U6IGFueVtdKSA9PiBudW1iZXI7XHJcblxyXG4gICAgQElucHV0KCkgbGFzdE9ubHkgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGFsaWduITogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgbGF5b3V0OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ3ZlcnRpY2FsJztcclxuICAgIEBJbnB1dCgpIG9wcG9zaXRlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgY29udGVudFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIFxyXG4gICAgcGFyc2VkRXZlbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5kYXRhU291cmNlKCkgPz8gW107XHJcblxyXG4gIGNvbnN0IGR5bmFtaWNMYXN0Q291bnQgPVxyXG4gICAgdGhpcy5sYXN0T25seSAmJiB0aGlzLmdldExhc3RBY3RpdmVDb3VudFxyXG4gICAgICA/IHRoaXMuZ2V0TGFzdEFjdGl2ZUNvdW50KG9yaWdpbmFsKVxyXG4gICAgICA6IDE7XHJcblxyXG4gIHJldHVybiBvcmlnaW5hbC5tYXAoKGl0ZW0sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgY29uc3QgcmVhbFNldmVyaXR5ID0gdGhpcy5nZXRTZXZlcml0eUZuKGl0ZW0pO1xyXG5cclxuICAgIGlmICh0aGlzLmxhc3RPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHJldmVyc2VkID0gWy4uLmFycmF5XS5yZXZlcnNlKCk7XHJcbiAgICAgIGNvbnN0IGluZGljZXMgPSByZXZlcnNlZFxyXG4gICAgICAgIC5tYXAoKGUsIGkpID0+ICh7XHJcbiAgICAgICAgICBpbmRleDogYXJyYXkubGVuZ3RoIC0gMSAtIGksXHJcbiAgICAgICAgICBzZXZlcml0eTogdGhpcy5nZXRTZXZlcml0eUZuKGUpXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2V2ZXJpdHkgIT09ICdzdWNjZXNzJylcclxuICAgICAgICAuc2xpY2UoMCwgZHluYW1pY0xhc3RDb3VudClcclxuICAgICAgICAubWFwKGUgPT4gZS5pbmRleCk7XHJcblxyXG4gICAgICBjb25zdCBzZXZlcml0eSA9IGluZGljZXMuaW5jbHVkZXMoaW5kZXgpID8gcmVhbFNldmVyaXR5IDogJ3N1Y2Nlc3MnO1xyXG4gICAgICBjb25zdCB7IHRpbWVsaW5lSWNvbiwgdGltZWxpbmVDb2xvciB9ID0gVElNRUxJTkVfU0VWRVJJVFlfTUFQW3NldmVyaXR5XTtcclxuXHJcbiAgICAgIHJldHVybiB7IC4uLml0ZW0sIHNldmVyaXR5LCB0aW1lbGluZUljb24sIHRpbWVsaW5lQ29sb3IgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IHRpbWVsaW5lSWNvbiwgdGltZWxpbmVDb2xvciB9ID0gVElNRUxJTkVfU0VWRVJJVFlfTUFQW3JlYWxTZXZlcml0eV07XHJcbiAgICByZXR1cm4geyAuLi5pdGVtLCBzZXZlcml0eTogcmVhbFNldmVyaXR5LCB0aW1lbGluZUljb24sIHRpbWVsaW5lQ29sb3IgfTtcclxuICB9KTtcclxufSk7XHJcblxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgXHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8cC10aW1lbGluZSBbdmFsdWVdPVwicGFyc2VkRXZlbnRzKClcIiBbYWxpZ25dPVwiYWxpZ25cIiBbbGF5b3V0XT1cImxheW91dFwiID5cclxuXHJcbiAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibWFya2VyXCIgbGV0LWV2ZW50PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgY29sb3I6IGV2ZW50LnRpbWVsaW5lQ29sb3IsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiAnMS42cmVtJyxcclxuICAgICAgICAgICAgJ2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzJzogJ1xcJ0ZJTExcXCcgMSwgXFwnd2dodFxcJyA0MDAsIFxcJ0dSQURcXCcgMCwgXFwnb3BzelxcJyAyNCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIHt7IGV2ZW50LnRpbWVsaW5lSWNvbiB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIFRJTUVMSU5FIE9QUE9TSVRFIENPTlRFTlQgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm9wcG9zaXRlXCIgbGV0LWV2ZW50PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHBvc2l0ZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZXZlbnQgfVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIFRJTUVMSU5FIENPTlRFTlQgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtZXZlbnQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGV2ZW50IH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10aW1lbGluZT5cclxuPC9kaXY+XHJcbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGltZWxpbmUva3YtdGltZWxpbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGltZWxpbmUva3YtdGltZWxpbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFnQixLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBSXRDLE1BQU0scUJBQXFCLEdBQThFO0lBQ3ZHLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRTtJQUN0RSxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDbkUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDMUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7SUFDekUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0lBQ2xFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFO0NBQ3ZFLENB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QUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ29udGVudENoaWxkLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGltZWxpbmVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RpbWVsaW5lJztcclxuaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbnR5cGUgVGltZWxpbmVTZXZlcml0eSA9ICdpbl9wcm9ncmVzcycgfCAnc3VjY2VzcycgfCAnY2FuY2VsbGVkJyB8ICdlcnJvcicgfCAncGF1c2VkJyB8ICd3YWl0aW5nJztcclxuXHJcbmNvbnN0IFRJTUVMSU5FX1NFVkVSSVRZX01BUDogUmVjb3JkPFRpbWVsaW5lU2V2ZXJpdHksIHsgdGltZWxpbmVJY29uOiBzdHJpbmc7IHRpbWVsaW5lQ29sb3I6IHN0cmluZyB9PiA9IHtcclxuICBpbl9wcm9ncmVzczogeyB0aW1lbGluZUljb246ICdtb3Rpb25fcGxheScsIHRpbWVsaW5lQ29sb3I6ICcjMDA5MUMyJyB9LFxyXG4gIHN1Y2Nlc3M6IHsgdGltZWxpbmVJY29uOiAnY2hlY2tfY2lyY2xlJywgdGltZWxpbmVDb2xvcjogJyMwQTg3NjUnIH0sXHJcbiAgY2FuY2VsbGVkOiB7IHRpbWVsaW5lSWNvbjogJ2RvX25vdF9kaXN0dXJiX29uJywgdGltZWxpbmVDb2xvcjogJyNDQkQ1RTEnIH0sXHJcbiAgZXJyb3I6IHsgdGltZWxpbmVJY29uOiAnbW90aW9uX3Bob3Rvc19wYXVzZWQnLCB0aW1lbGluZUNvbG9yOiAnI0I5MUMxQycgfSxcclxuICBwYXVzZWQ6IHsgdGltZWxpbmVJY29uOiAncGF1c2VfY2lyY2xlJywgdGltZWxpbmVDb2xvcjogJyNFMTk2M0QnIH0sXHJcbiAgd2FpdGluZzogeyB0aW1lbGluZUljb246ICdjbG9ja19sb2FkZXJfMTAnLCB0aW1lbGluZUNvbG9yOiAnIzBBM0E3OCcgfVxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10aW1lbGluZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUaW1lbGluZU1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LXRpbWVsaW5lLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4va3YtdGltZWxpbmUuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdlRpbWVsaW5lQ29tcG9uZW50IHtcclxuICAgIGRhdGFTb3VyY2UgPSBpbnB1dDxhbnlbXT4oKTtcclxuICAgIFxyXG4gICAgQElucHV0KCkgZ2V0U2V2ZXJpdHlGbiE6IChpdGVtOiBhbnkpID0+IFRpbWVsaW5lU2V2ZXJpdHk7XHJcbiAgICBASW5wdXQoKSBnZXRMYXN0QWN0aXZlQ291bnQ/OiAoZGF0YVNvdXJjZTogYW55W10pID0+IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKSBsYXN0T25seSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgYWxpZ24hOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBsYXlvdXQ6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAndmVydGljYWwnO1xyXG4gICAgQElucHV0KCkgb3Bwb3NpdGVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBASW5wdXQoKSBjb250ZW50VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgbGFzdENvbnRlbnRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgcGFyc2VkRXZlbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMuZGF0YVNvdXJjZSgpID8/IFtdO1xyXG5cclxuICAgICAgY29uc3QgZHluYW1pY0xhc3RDb3VudCA9XHJcbiAgICAgICAgdGhpcy5sYXN0T25seSAmJiB0aGlzLmdldExhc3RBY3RpdmVDb3VudFxyXG4gICAgICAgICAgPyB0aGlzLmdldExhc3RBY3RpdmVDb3VudChvcmlnaW5hbClcclxuICAgICAgICAgIDogMTtcclxuXHJcbiAgICAgIHJldHVybiBvcmlnaW5hbC5tYXAoKGl0ZW0sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlYWxTZXZlcml0eSA9IHRoaXMuZ2V0U2V2ZXJpdHlGbihpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGFzdE9ubHkpIHtcclxuICAgICAgICAgIGNvbnN0IHJldmVyc2VkID0gWy4uLmFycmF5XS5yZXZlcnNlKCk7XHJcbiAgICAgICAgICBjb25zdCBpbmRpY2VzID0gcmV2ZXJzZWRcclxuICAgICAgICAgICAgLm1hcCgoZSwgaSkgPT4gKHtcclxuICAgICAgICAgICAgICBpbmRleDogYXJyYXkubGVuZ3RoIC0gMSAtIGksXHJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IHRoaXMuZ2V0U2V2ZXJpdHlGbihlKVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgLmZpbHRlcihlID0+IGUuc2V2ZXJpdHkgIT09ICdzdWNjZXNzJylcclxuICAgICAgICAgICAgLnNsaWNlKDAsIGR5bmFtaWNMYXN0Q291bnQpXHJcbiAgICAgICAgICAgIC5tYXAoZSA9PiBlLmluZGV4KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzZXZlcml0eSA9IGluZGljZXMuaW5jbHVkZXMoaW5kZXgpID8gcmVhbFNldmVyaXR5IDogJ3N1Y2Nlc3MnO1xyXG4gICAgICAgICAgY29uc3QgeyB0aW1lbGluZUljb24sIHRpbWVsaW5lQ29sb3IgfSA9IFRJTUVMSU5FX1NFVkVSSVRZX01BUFtzZXZlcml0eV07XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgc2V2ZXJpdHksIHRpbWVsaW5lSWNvbiwgdGltZWxpbmVDb2xvciB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyB0aW1lbGluZUljb24sIHRpbWVsaW5lQ29sb3IgfSA9IFRJTUVMSU5FX1NFVkVSSVRZX01BUFtyZWFsU2V2ZXJpdHldO1xyXG4gICAgICAgIHJldHVybiB7IC4uLml0ZW0sIGluZGV4LCBzZXZlcml0eTogcmVhbFNldmVyaXR5LCB0aW1lbGluZUljb24sIHRpbWVsaW5lQ29sb3IgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpc0xhc3RJdGVtKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnBhcnNlZEV2ZW50cygpLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIGluZGV4ID09PSB0b3RhbCAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgXHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8cC10aW1lbGluZSBbdmFsdWVdPVwicGFyc2VkRXZlbnRzKClcIiBbYWxpZ25dPVwiYWxpZ25cIiBbbGF5b3V0XT1cImxheW91dFwiID5cclxuXHJcbiAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibWFya2VyXCIgbGV0LWV2ZW50PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgY29sb3I6IGV2ZW50LnRpbWVsaW5lQ29sb3IsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiAnMS42cmVtJyxcclxuICAgICAgICAgICAgJ2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzJzogJ1xcJ0ZJTExcXCcgMSwgXFwnd2dodFxcJyA0MDAsIFxcJ0dSQURcXCcgMCwgXFwnb3BzelxcJyAyNCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIHt7IGV2ZW50LnRpbWVsaW5lSWNvbiB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIFRJTUVMSU5FIE9QUE9TSVRFIENPTlRFTlQgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm9wcG9zaXRlXCIgbGV0LWV2ZW50PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHBvc2l0ZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZXZlbnQgfVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIFRJTUVMSU5FIENPTlRFTlQgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtZXZlbnQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGFzdENvbnRlbnRUZW1wbGF0ZSAmJiBpc0xhc3RJdGVtKGV2ZW50LmluZGV4KTsgZWxzZSBkZWZhdWx0Q29udGVudFwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsYXN0Q29udGVudFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXZlbnQgfVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGV2ZW50IH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgIDwvcC10aW1lbGluZT5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -11919,6 +11919,10 @@ const TIMELINE_SEVERITY_MAP = {
11919
11919
  waiting: { timelineIcon: 'clock_loader_10', timelineColor: '#0A3A78' }
11920
11920
  };
11921
11921
  class KvTimelineComponent {
11922
+ isLastItem(index) {
11923
+ const total = this.parsedEvents().length;
11924
+ return index === total - 1;
11925
+ }
11922
11926
  constructor() {
11923
11927
  this.dataSource = input();
11924
11928
  this.lastOnly = false;
@@ -11945,16 +11949,16 @@ class KvTimelineComponent {
11945
11949
  return { ...item, severity, timelineIcon, timelineColor };
11946
11950
  }
11947
11951
  const { timelineIcon, timelineColor } = TIMELINE_SEVERITY_MAP[realSeverity];
11948
- return { ...item, severity: realSeverity, timelineIcon, timelineColor };
11952
+ return { ...item, index, severity: realSeverity, timelineIcon, timelineColor };
11949
11953
  });
11950
11954
  });
11951
11955
  }
11952
11956
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11953
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvTimelineComponent, isStandalone: true, selector: "kv-timeline", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, getSeverityFn: { classPropertyName: "getSeverityFn", publicName: "getSeverityFn", isSignal: false, isRequired: false, transformFunction: null }, getLastActiveCount: { classPropertyName: "getLastActiveCount", publicName: "getLastActiveCount", isSignal: false, isRequired: false, transformFunction: null }, lastOnly: { classPropertyName: "lastOnly", publicName: "lastOnly", isSignal: false, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: false, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: false, isRequired: false, transformFunction: null }, oppositeTemplate: { classPropertyName: "oppositeTemplate", publicName: "oppositeTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </p-timeline>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TimelineModule }, { kind: "component", type: i2$6.Timeline, selector: "p-timeline", inputs: ["value", "style", "styleClass", "align", "layout"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
11957
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvTimelineComponent, isStandalone: true, selector: "kv-timeline", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, getSeverityFn: { classPropertyName: "getSeverityFn", publicName: "getSeverityFn", isSignal: false, isRequired: false, transformFunction: null }, getLastActiveCount: { classPropertyName: "getLastActiveCount", publicName: "getLastActiveCount", isSignal: false, isRequired: false, transformFunction: null }, lastOnly: { classPropertyName: "lastOnly", publicName: "lastOnly", isSignal: false, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: false, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: false, isRequired: false, transformFunction: null }, oppositeTemplate: { classPropertyName: "oppositeTemplate", publicName: "oppositeTemplate", isSignal: false, isRequired: false, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: false, isRequired: false, transformFunction: null }, lastContentTemplate: { classPropertyName: "lastContentTemplate", publicName: "lastContentTemplate", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngIf=\"lastContentTemplate && isLastItem(event.index); else defaultContent\"\r\n [ngTemplateOutlet]=\"lastContentTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: event }\">\r\n </ng-container>\r\n\r\n <ng-template #defaultContent>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n\r\n\r\n </p-timeline>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TimelineModule }, { kind: "component", type: i2$6.Timeline, selector: "p-timeline", inputs: ["value", "style", "styleClass", "align", "layout"] }, { kind: "directive", type: i1$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
11954
11958
  }
11955
11959
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTimelineComponent, decorators: [{
11956
11960
  type: Component,
11957
- args: [{ selector: 'kv-timeline', standalone: true, imports: [CommonModule, TimelineModule], template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </p-timeline>\r\n</div>\r\n" }]
11961
+ args: [{ selector: 'kv-timeline', standalone: true, imports: [CommonModule, TimelineModule], template: "<div class=\"card\">\r\n <p-timeline [value]=\"parsedEvents()\" [align]=\"align\" [layout]=\"layout\" >\r\n\r\n <ng-template pTemplate=\"marker\" let-event>\r\n <span class=\"material-symbols-outlined\" [ngStyle]=\"{\r\n color: event.timelineColor,\r\n fontSize: '1.6rem',\r\n 'font-variation-settings': '\\'FILL\\' 1, \\'wght\\' 400, \\'GRAD\\' 0, \\'opsz\\' 24'\r\n }\">\r\n {{ event.timelineIcon }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- TIMELINE OPPOSITE CONTENT -->\r\n <ng-template pTemplate=\"opposite\" let-event>\r\n <ng-container\r\n *ngTemplateOutlet=\"oppositeTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- TIMELINE CONTENT -->\r\n <ng-template pTemplate=\"content\" let-event>\r\n <ng-container\r\n *ngIf=\"lastContentTemplate && isLastItem(event.index); else defaultContent\"\r\n [ngTemplateOutlet]=\"lastContentTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: event }\">\r\n </ng-container>\r\n\r\n <ng-template #defaultContent>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTemplate; context: { $implicit: event }\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n\r\n\r\n </p-timeline>\r\n</div>\r\n" }]
11958
11962
  }], ctorParameters: () => [], propDecorators: { getSeverityFn: [{
11959
11963
  type: Input
11960
11964
  }], getLastActiveCount: [{
@@ -11969,6 +11973,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
11969
11973
  type: Input
11970
11974
  }], contentTemplate: [{
11971
11975
  type: Input
11976
+ }], lastContentTemplate: [{
11977
+ type: Input
11972
11978
  }] } });
11973
11979
 
11974
11980
  /**