@angular-generic-table/core 5.0.0-rc.14 → 5.0.0-rc.15

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.
@@ -1,5 +1,5 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
- import { NgIf, PercentPipe } from '@angular/common';
1
+ import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
+ import { NgIf, NgTemplateOutlet, PercentPipe } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  export class GtDeltaComponent {
5
5
  constructor() {
@@ -13,80 +13,102 @@ export class GtDeltaComponent {
13
13
  negative: 'text-danger',
14
14
  };
15
15
  this.key = 'value';
16
- this.notApplicableValue = 'n/a';
17
- this.initialValue = '-';
16
+ this.notApplicableValue = null;
17
+ this.initialValue = null;
18
+ }
19
+ get value() {
20
+ return this._value;
21
+ }
22
+ set value(value) {
23
+ this._value = value;
24
+ }
25
+ get deltaTemplate() {
26
+ return this._deltaTemplate;
27
+ }
28
+ set deltaTemplate(deltaTemplate) {
29
+ this._deltaTemplate = deltaTemplate;
30
+ }
31
+ ngOnChanges(changes) {
32
+ if (!changes.data.currentValue) {
33
+ return;
34
+ }
35
+ const data = changes.data?.currentValue;
36
+ const index = changes.index?.currentValue || this.index;
37
+ const baseIndex = changes.baseIndex?.currentValue;
38
+ const key = changes.key?.currentValue || this.key;
39
+ const initialValue = changes.initialValue?.currentValue || this.initialValue;
40
+ const deltaValue = index === 0
41
+ ? initialValue
42
+ : data[index][key] -
43
+ (baseIndex === undefined
44
+ ? data[index - 1][key]
45
+ : data[baseIndex][key]);
46
+ const baseValue = index === 0
47
+ ? 1
48
+ : baseIndex === undefined
49
+ ? data[index - 1][key]
50
+ : data[baseIndex][key];
51
+ const relative = index === 0
52
+ ? initialValue
53
+ : Math.sign(deltaValue) * Math.abs(deltaValue / baseValue);
54
+ this.value = {
55
+ relative: Number.isFinite(relative)
56
+ ? relative
57
+ : index === 0
58
+ ? initialValue
59
+ : changes.notApplicableValue?.currentValue || this.notApplicableValue,
60
+ absolute: deltaValue,
61
+ };
18
62
  }
19
63
  }
20
64
  GtDeltaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GtDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: GtDeltaComponent, isStandalone: true, selector: "gt-delta", inputs: { data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, ngImport: i0, template: `<span
22
- *ngIf="{
23
- value:
24
- index === 0
25
- ? initialValue
26
- : ((baseIndex === undefined
27
- ? data[index - 1][key]
28
- : data[baseIndex][key]) -
29
- data[index][key]) /
30
- -Math.abs(
31
- baseIndex === undefined
32
- ? data[index - 1][key]
33
- : data[baseIndex][key]
34
- )
35
- } as delta"
36
- [class]="[
37
- classes.span,
38
- !delta.value || !Number.isFinite(delta.value)
39
- ? null
40
- : delta.value > 0
41
- ? classes.positive
42
- : classes.negative
43
- ]"
44
- [class.gt-delta-positive]="delta.value > 0 && Number.isFinite(delta.value)"
45
- [class.gt-delta-negative]="delta.value < 0"
46
- >{{
47
- Number.isFinite(delta.value)
48
- ? (delta.value | percent)
49
- : delta.value === initialValue
50
- ? initialValue
51
- : notApplicableValue
52
- }}</span
53
- >`, isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
+ GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: GtDeltaComponent, isStandalone: true, selector: "gt-delta", inputs: { deltaTemplate: "deltaTemplate", data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, usesOnChanges: true, ngImport: i0, template: `<span
66
+ *ngIf="value as delta"
67
+ [class]="[
68
+ classes.span,
69
+ delta.absolute > 0
70
+ ? classes.positive
71
+ : delta.absolute < 0
72
+ ? classes.negative
73
+ : null
74
+ ]"
75
+ [class.gt-delta-positive]="delta.absolute > 0"
76
+ [class.gt-delta-negative]="delta.absolute < 0"
77
+ ><ng-container
78
+ *ngTemplateOutlet="deltaTemplate || defaultTemplate; context: { delta }"
79
+ ></ng-container>
80
+ </span>
81
+ <ng-template #defaultTemplate let-delta="delta">
82
+ <span *ngIf="delta.relative">{{
83
+ delta.relative | percent: '1.0-2'
84
+ }}</span>
85
+ </ng-template>`, isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GtDeltaComponent, decorators: [{
55
87
  type: Component,
56
88
  args: [{ selector: 'gt-delta', template: `<span
57
- *ngIf="{
58
- value:
59
- index === 0
60
- ? initialValue
61
- : ((baseIndex === undefined
62
- ? data[index - 1][key]
63
- : data[baseIndex][key]) -
64
- data[index][key]) /
65
- -Math.abs(
66
- baseIndex === undefined
67
- ? data[index - 1][key]
68
- : data[baseIndex][key]
69
- )
70
- } as delta"
71
- [class]="[
72
- classes.span,
73
- !delta.value || !Number.isFinite(delta.value)
74
- ? null
75
- : delta.value > 0
76
- ? classes.positive
77
- : classes.negative
78
- ]"
79
- [class.gt-delta-positive]="delta.value > 0 && Number.isFinite(delta.value)"
80
- [class.gt-delta-negative]="delta.value < 0"
81
- >{{
82
- Number.isFinite(delta.value)
83
- ? (delta.value | percent)
84
- : delta.value === initialValue
85
- ? initialValue
86
- : notApplicableValue
87
- }}</span
88
- >`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PercentPipe, NgIf], styles: [":host{display:inline-block}\n"] }]
89
- }], ctorParameters: function () { return []; }, propDecorators: { data: [{
89
+ *ngIf="value as delta"
90
+ [class]="[
91
+ classes.span,
92
+ delta.absolute > 0
93
+ ? classes.positive
94
+ : delta.absolute < 0
95
+ ? classes.negative
96
+ : null
97
+ ]"
98
+ [class.gt-delta-positive]="delta.absolute > 0"
99
+ [class.gt-delta-negative]="delta.absolute < 0"
100
+ ><ng-container
101
+ *ngTemplateOutlet="deltaTemplate || defaultTemplate; context: { delta }"
102
+ ></ng-container>
103
+ </span>
104
+ <ng-template #defaultTemplate let-delta="delta">
105
+ <span *ngIf="delta.relative">{{
106
+ delta.relative | percent: '1.0-2'
107
+ }}</span>
108
+ </ng-template>`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PercentPipe, NgIf, NgTemplateOutlet], styles: [":host{display:inline-block}\n"] }]
109
+ }], ctorParameters: function () { return []; }, propDecorators: { deltaTemplate: [{
110
+ type: Input
111
+ }], data: [{
90
112
  type: Input
91
113
  }], index: [{
92
114
  type: Input
@@ -101,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
101
123
  }], initialValue: [{
102
124
  type: Input
103
125
  }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtZGVsdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdEcEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjtRQUNBLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixXQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ1AsU0FBSSxHQUFvQixFQUFFLENBQUM7UUFDM0IsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUVsQixZQUFPLEdBQUc7WUFDakIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsUUFBUSxFQUFFLGFBQWE7U0FDeEIsQ0FBQztRQUNPLFFBQUcsR0FBVyxPQUFPLENBQUM7UUFDdEIsdUJBQWtCLEdBQVcsS0FBSyxDQUFDO1FBQ25DLGlCQUFZLEdBQVcsR0FBRyxDQUFDO0lBYnJCLENBQUM7OzZHQURMLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDhPQTVDakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NSLGtHQVVRLFdBQVcsZ0RBQUUsSUFBSTsyRkFFaEIsZ0JBQWdCO2tCQTlDNUIsU0FBUzsrQkFDRSxVQUFVLFlBQ1Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NSLG1CQVFlLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQzswRUFNbkIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtcm93LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ0lmLCBQZXJjZW50UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d0LWRlbHRhJyxcbiAgdGVtcGxhdGU6IGA8c3BhblxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWU6XG4gICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgPyBpbml0aWFsVmFsdWVcbiAgICAgICAgICA6ICgoYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBkYXRhW2luZGV4IC0gMV1ba2V5XVxuICAgICAgICAgICAgICA6IGRhdGFbYmFzZUluZGV4XVtrZXldKSAtXG4gICAgICAgICAgICAgIGRhdGFbaW5kZXhdW2tleV0pIC9cbiAgICAgICAgICAgIC1NYXRoLmFicyhcbiAgICAgICAgICAgICAgYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRhdGFbaW5kZXggLSAxXVtrZXldXG4gICAgICAgICAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XVxuICAgICAgICAgICAgKVxuICAgIH0gYXMgZGVsdGFcIlxuICAgIFtjbGFzc109XCJbXG4gICAgICBjbGFzc2VzLnNwYW4sXG4gICAgICAhZGVsdGEudmFsdWUgfHwgIU51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZGVsdGEudmFsdWUgPiAwXG4gICAgICAgID8gY2xhc3Nlcy5wb3NpdGl2ZVxuICAgICAgICA6IGNsYXNzZXMubmVnYXRpdmVcbiAgICBdXCJcbiAgICBbY2xhc3MuZ3QtZGVsdGEtcG9zaXRpdmVdPVwiZGVsdGEudmFsdWUgPiAwICYmIE51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcIlxuICAgIFtjbGFzcy5ndC1kZWx0YS1uZWdhdGl2ZV09XCJkZWx0YS52YWx1ZSA8IDBcIlxuICAgID57e1xuICAgICAgTnVtYmVyLmlzRmluaXRlKGRlbHRhLnZhbHVlKVxuICAgICAgICA/IChkZWx0YS52YWx1ZSB8IHBlcmNlbnQpXG4gICAgICAgIDogZGVsdGEudmFsdWUgPT09IGluaXRpYWxWYWx1ZVxuICAgICAgICA/IGluaXRpYWxWYWx1ZVxuICAgICAgICA6IG5vdEFwcGxpY2FibGVWYWx1ZVxuICAgIH19PC9zcGFuXG4gID5gLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1BlcmNlbnRQaXBlLCBOZ0lmXSxcbn0pXG5leHBvcnQgY2xhc3MgR3REZWx0YUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgTWF0aCA9IE1hdGg7XG4gIE51bWJlciA9IE51bWJlcjtcbiAgQElucHV0KCkgZGF0YTogQXJyYXk8VGFibGVSb3c+ID0gW107XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBiYXNlSW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNsYXNzZXMgPSB7XG4gICAgc3BhbjogJ2d0LWRlbHRhJyxcbiAgICBwb3NpdGl2ZTogJ3RleHQtc3VjY2VzcycsXG4gICAgbmVnYXRpdmU6ICd0ZXh0LWRhbmdlcicsXG4gIH07XG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgbm90QXBwbGljYWJsZVZhbHVlOiBzdHJpbmcgPSAnbi9hJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlOiBzdHJpbmcgPSAnLSc7XG59XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtZGVsdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEdBSU4sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUF3Q3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0I7UUFJQSxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUNQLFNBQUksR0FBb0IsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFFbEIsWUFBTyxHQUFHO1lBQ2pCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFFBQVEsRUFBRSxhQUFhO1NBQ3hCLENBQUM7UUFDTyxRQUFHLEdBQVcsT0FBTyxDQUFDO1FBQ3RCLHVCQUFrQixHQUFrQixJQUFJLENBQUM7UUFDekMsaUJBQVksR0FBMkIsSUFBSSxDQUFDO0lBaEJ0QyxDQUFDO0lBVmhCLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQWEsYUFBYSxDQUFDLGFBQStCO1FBQ3hELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFnQkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFMUQsTUFBTSxVQUFVLEdBQ2QsS0FBSyxLQUFLLENBQUM7WUFDVCxDQUFDLENBQUMsWUFBWTtZQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNoQixDQUFDLFNBQVMsS0FBSyxTQUFTO29CQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FDYixLQUFLLEtBQUssQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTO2dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0IsTUFBTSxRQUFRLEdBQ1osS0FBSyxLQUFLLENBQUM7WUFDVCxDQUFDLENBQUMsWUFBWTtZQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQztvQkFDYixDQUFDLENBQUMsWUFBWTtvQkFDZCxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsa0JBQWtCO1lBQ3ZFLFFBQVEsRUFBRSxVQUFVO1NBQ3JCLENBQUM7SUFDSixDQUFDOzs2R0FwRVUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsbVNBaENqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBb0JPLGtHQVVQLFdBQVcsZ0RBQUUsSUFBSSw2RkFBRSxnQkFBZ0I7MkZBRWxDLGdCQUFnQjtrQkFsQzVCLFNBQVM7K0JBQ0UsVUFBVSxZQUNWOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkFvQk8sbUJBUUEsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDOzBFQWNqQyxhQUFhO3NCQUF6QixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtcm93LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBQZXJjZW50UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3REZWx0YSB7XG4gIHJlbGF0aXZlOiBudW1iZXIgfCBzdHJpbmc7XG4gIGFic29sdXRlOiBudW1iZXI7XG59XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdndC1kZWx0YScsXG4gIHRlbXBsYXRlOiBgPHNwYW5cbiAgICAgICpuZ0lmPVwidmFsdWUgYXMgZGVsdGFcIlxuICAgICAgW2NsYXNzXT1cIltcbiAgICAgICAgY2xhc3Nlcy5zcGFuLFxuICAgICAgICBkZWx0YS5hYnNvbHV0ZSA+IDBcbiAgICAgICAgICA/IGNsYXNzZXMucG9zaXRpdmVcbiAgICAgICAgICA6IGRlbHRhLmFic29sdXRlIDwgMFxuICAgICAgICAgID8gY2xhc3Nlcy5uZWdhdGl2ZVxuICAgICAgICAgIDogbnVsbFxuICAgICAgXVwiXG4gICAgICBbY2xhc3MuZ3QtZGVsdGEtcG9zaXRpdmVdPVwiZGVsdGEuYWJzb2x1dGUgPiAwXCJcbiAgICAgIFtjbGFzcy5ndC1kZWx0YS1uZWdhdGl2ZV09XCJkZWx0YS5hYnNvbHV0ZSA8IDBcIlxuICAgICAgPjxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWx0YVRlbXBsYXRlIHx8IGRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDogeyBkZWx0YSB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWRlbHRhPVwiZGVsdGFcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVsdGEucmVsYXRpdmVcIj57e1xuICAgICAgICBkZWx0YS5yZWxhdGl2ZSB8IHBlcmNlbnQ6ICcxLjAtMidcbiAgICAgIH19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+YCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtQZXJjZW50UGlwZSwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldF0sXG59KVxuZXhwb3J0IGNsYXNzIEd0RGVsdGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGVsdGFUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGVsdGFUZW1wbGF0ZTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHt9XG4gIEBJbnB1dCgpIHNldCBkZWx0YVRlbXBsYXRlKGRlbHRhVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl9kZWx0YVRlbXBsYXRlID0gZGVsdGFUZW1wbGF0ZTtcbiAgfVxuICBNYXRoID0gTWF0aDtcbiAgTnVtYmVyID0gTnVtYmVyO1xuICBASW5wdXQoKSBkYXRhOiBBcnJheTxUYWJsZVJvdz4gPSBbXTtcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGJhc2VJbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgY2xhc3NlcyA9IHtcbiAgICBzcGFuOiAnZ3QtZGVsdGEnLFxuICAgIHBvc2l0aXZlOiAndGV4dC1zdWNjZXNzJyxcbiAgICBuZWdhdGl2ZTogJ3RleHQtZGFuZ2VyJyxcbiAgfTtcbiAgQElucHV0KCkga2V5OiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSBub3RBcHBsaWNhYmxlVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpbml0aWFsVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF92YWx1ZT86IEd0RGVsdGE7XG4gIHByaXZhdGUgX2RlbHRhVGVtcGxhdGU/OiBhbnk7XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIWNoYW5nZXMuZGF0YS5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGNoYW5nZXMuZGF0YT8uY3VycmVudFZhbHVlO1xuICAgIGNvbnN0IGluZGV4ID0gY2hhbmdlcy5pbmRleD8uY3VycmVudFZhbHVlIHx8IHRoaXMuaW5kZXg7XG4gICAgY29uc3QgYmFzZUluZGV4ID0gY2hhbmdlcy5iYXNlSW5kZXg/LmN1cnJlbnRWYWx1ZTtcbiAgICBjb25zdCBrZXkgPSBjaGFuZ2VzLmtleT8uY3VycmVudFZhbHVlIHx8IHRoaXMua2V5O1xuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9XG4gICAgICBjaGFuZ2VzLmluaXRpYWxWYWx1ZT8uY3VycmVudFZhbHVlIHx8IHRoaXMuaW5pdGlhbFZhbHVlO1xuXG4gICAgY29uc3QgZGVsdGFWYWx1ZSA9XG4gICAgICBpbmRleCA9PT0gMFxuICAgICAgICA/IGluaXRpYWxWYWx1ZVxuICAgICAgICA6IGRhdGFbaW5kZXhdW2tleV0gLVxuICAgICAgICAgIChiYXNlSW5kZXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBkYXRhW2luZGV4IC0gMV1ba2V5XVxuICAgICAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XSk7XG4gICAgY29uc3QgYmFzZVZhbHVlID1cbiAgICAgIGluZGV4ID09PSAwXG4gICAgICAgID8gMVxuICAgICAgICA6IGJhc2VJbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gZGF0YVtpbmRleCAtIDFdW2tleV1cbiAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XTtcblxuICAgIGNvbnN0IHJlbGF0aXZlID1cbiAgICAgIGluZGV4ID09PSAwXG4gICAgICAgID8gaW5pdGlhbFZhbHVlXG4gICAgICAgIDogTWF0aC5zaWduKGRlbHRhVmFsdWUpICogTWF0aC5hYnMoZGVsdGFWYWx1ZSAvIGJhc2VWYWx1ZSk7XG5cbiAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgcmVsYXRpdmU6IE51bWJlci5pc0Zpbml0ZShyZWxhdGl2ZSlcbiAgICAgICAgPyByZWxhdGl2ZVxuICAgICAgICA6IGluZGV4ID09PSAwXG4gICAgICAgID8gaW5pdGlhbFZhbHVlXG4gICAgICAgIDogY2hhbmdlcy5ub3RBcHBsaWNhYmxlVmFsdWU/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLm5vdEFwcGxpY2FibGVWYWx1ZSxcbiAgICAgIGFic29sdXRlOiBkZWx0YVZhbHVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -494,80 +494,103 @@ class GtDeltaComponent {
494
494
  negative: 'text-danger',
495
495
  };
496
496
  this.key = 'value';
497
- this.notApplicableValue = 'n/a';
498
- this.initialValue = '-';
497
+ this.notApplicableValue = null;
498
+ this.initialValue = null;
499
+ }
500
+ get value() {
501
+ return this._value;
502
+ }
503
+ set value(value) {
504
+ this._value = value;
505
+ }
506
+ get deltaTemplate() {
507
+ return this._deltaTemplate;
508
+ }
509
+ set deltaTemplate(deltaTemplate) {
510
+ this._deltaTemplate = deltaTemplate;
511
+ }
512
+ ngOnChanges(changes) {
513
+ var _a, _b, _c, _d, _e, _f;
514
+ if (!changes.data.currentValue) {
515
+ return;
516
+ }
517
+ const data = (_a = changes.data) === null || _a === void 0 ? void 0 : _a.currentValue;
518
+ const index = ((_b = changes.index) === null || _b === void 0 ? void 0 : _b.currentValue) || this.index;
519
+ const baseIndex = (_c = changes.baseIndex) === null || _c === void 0 ? void 0 : _c.currentValue;
520
+ const key = ((_d = changes.key) === null || _d === void 0 ? void 0 : _d.currentValue) || this.key;
521
+ const initialValue = ((_e = changes.initialValue) === null || _e === void 0 ? void 0 : _e.currentValue) || this.initialValue;
522
+ const deltaValue = index === 0
523
+ ? initialValue
524
+ : data[index][key] -
525
+ (baseIndex === undefined
526
+ ? data[index - 1][key]
527
+ : data[baseIndex][key]);
528
+ const baseValue = index === 0
529
+ ? 1
530
+ : baseIndex === undefined
531
+ ? data[index - 1][key]
532
+ : data[baseIndex][key];
533
+ const relative = index === 0
534
+ ? initialValue
535
+ : Math.sign(deltaValue) * Math.abs(deltaValue / baseValue);
536
+ this.value = {
537
+ relative: Number.isFinite(relative)
538
+ ? relative
539
+ : index === 0
540
+ ? initialValue
541
+ : ((_f = changes.notApplicableValue) === null || _f === void 0 ? void 0 : _f.currentValue) || this.notApplicableValue,
542
+ absolute: deltaValue,
543
+ };
499
544
  }
500
545
  }
501
546
  GtDeltaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GtDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
502
- GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: GtDeltaComponent, isStandalone: true, selector: "gt-delta", inputs: { data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, ngImport: i0, template: `<span
503
- *ngIf="{
504
- value:
505
- index === 0
506
- ? initialValue
507
- : ((baseIndex === undefined
508
- ? data[index - 1][key]
509
- : data[baseIndex][key]) -
510
- data[index][key]) /
511
- -Math.abs(
512
- baseIndex === undefined
513
- ? data[index - 1][key]
514
- : data[baseIndex][key]
515
- )
516
- } as delta"
517
- [class]="[
518
- classes.span,
519
- !delta.value || !Number.isFinite(delta.value)
520
- ? null
521
- : delta.value > 0
522
- ? classes.positive
523
- : classes.negative
524
- ]"
525
- [class.gt-delta-positive]="delta.value > 0 && Number.isFinite(delta.value)"
526
- [class.gt-delta-negative]="delta.value < 0"
527
- >{{
528
- Number.isFinite(delta.value)
529
- ? (delta.value | percent)
530
- : delta.value === initialValue
531
- ? initialValue
532
- : notApplicableValue
533
- }}</span
534
- >`, isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
547
+ GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: GtDeltaComponent, isStandalone: true, selector: "gt-delta", inputs: { deltaTemplate: "deltaTemplate", data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, usesOnChanges: true, ngImport: i0, template: `<span
548
+ *ngIf="value as delta"
549
+ [class]="[
550
+ classes.span,
551
+ delta.absolute > 0
552
+ ? classes.positive
553
+ : delta.absolute < 0
554
+ ? classes.negative
555
+ : null
556
+ ]"
557
+ [class.gt-delta-positive]="delta.absolute > 0"
558
+ [class.gt-delta-negative]="delta.absolute < 0"
559
+ ><ng-container
560
+ *ngTemplateOutlet="deltaTemplate || defaultTemplate; context: { delta }"
561
+ ></ng-container>
562
+ </span>
563
+ <ng-template #defaultTemplate let-delta="delta">
564
+ <span *ngIf="delta.relative">{{
565
+ delta.relative | percent: '1.0-2'
566
+ }}</span>
567
+ </ng-template>`, isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
535
568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GtDeltaComponent, decorators: [{
536
569
  type: Component,
537
570
  args: [{ selector: 'gt-delta', template: `<span
538
- *ngIf="{
539
- value:
540
- index === 0
541
- ? initialValue
542
- : ((baseIndex === undefined
543
- ? data[index - 1][key]
544
- : data[baseIndex][key]) -
545
- data[index][key]) /
546
- -Math.abs(
547
- baseIndex === undefined
548
- ? data[index - 1][key]
549
- : data[baseIndex][key]
550
- )
551
- } as delta"
552
- [class]="[
553
- classes.span,
554
- !delta.value || !Number.isFinite(delta.value)
555
- ? null
556
- : delta.value > 0
557
- ? classes.positive
558
- : classes.negative
559
- ]"
560
- [class.gt-delta-positive]="delta.value > 0 && Number.isFinite(delta.value)"
561
- [class.gt-delta-negative]="delta.value < 0"
562
- >{{
563
- Number.isFinite(delta.value)
564
- ? (delta.value | percent)
565
- : delta.value === initialValue
566
- ? initialValue
567
- : notApplicableValue
568
- }}</span
569
- >`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PercentPipe, NgIf], styles: [":host{display:inline-block}\n"] }]
570
- }], ctorParameters: function () { return []; }, propDecorators: { data: [{
571
+ *ngIf="value as delta"
572
+ [class]="[
573
+ classes.span,
574
+ delta.absolute > 0
575
+ ? classes.positive
576
+ : delta.absolute < 0
577
+ ? classes.negative
578
+ : null
579
+ ]"
580
+ [class.gt-delta-positive]="delta.absolute > 0"
581
+ [class.gt-delta-negative]="delta.absolute < 0"
582
+ ><ng-container
583
+ *ngTemplateOutlet="deltaTemplate || defaultTemplate; context: { delta }"
584
+ ></ng-container>
585
+ </span>
586
+ <ng-template #defaultTemplate let-delta="delta">
587
+ <span *ngIf="delta.relative">{{
588
+ delta.relative | percent: '1.0-2'
589
+ }}</span>
590
+ </ng-template>`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PercentPipe, NgIf, NgTemplateOutlet], styles: [":host{display:inline-block}\n"] }]
591
+ }], ctorParameters: function () { return []; }, propDecorators: { deltaTemplate: [{
592
+ type: Input
593
+ }], data: [{
571
594
  type: Input
572
595
  }], index: [{
573
596
  type: Input