ngx-edu-sharing-metaqs2 0.0.0 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/collection-count-history/collection-count-history.component.mjs +112 -0
- package/esm2022/lib/collection-count-history/monthpicker/monthpicker.component.mjs +73 -0
- package/esm2022/lib/components/donut-chart/donut-chart.component.mjs +79 -0
- package/esm2022/lib/components/donut-chart/donut-chart.model.mjs +2 -0
- package/esm2022/lib/components/donut-chart/donut-chart.pipe.mjs +49 -0
- package/esm2022/lib/components/editorial-link-service/editorial-link.service.mjs +79 -0
- package/esm2022/lib/components/filter/datepicker/datepicker.component.mjs +64 -0
- package/esm2022/lib/components/filter/quality-matrix-filter.component.mjs +42 -0
- package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +236 -0
- package/esm2022/lib/core/svg-icons.service.mjs +41 -0
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +161 -0
- package/esm2022/lib/env-helper.service.mjs +34 -0
- package/esm2022/lib/java-api/api/api.mjs +12 -0
- package/esm2022/lib/java-api/api/authProxyController.service.mjs +188 -0
- package/esm2022/lib/java-api/api/collectionAPI.service.mjs +357 -0
- package/esm2022/lib/java-api/api/editorsAPI.service.mjs +245 -0
- package/esm2022/lib/java-api/api/filterAPI.service.mjs +179 -0
- package/esm2022/lib/java-api/api/replicationSourceAPI.service.mjs +340 -0
- package/esm2022/lib/java-api/api.module.mjs +40 -0
- package/esm2022/lib/java-api/configuration.mjs +95 -0
- package/esm2022/lib/java-api/encoder.mjs +19 -0
- package/esm2022/lib/java-api/index.mjs +7 -0
- package/esm2022/lib/java-api/model/count.mjs +11 -0
- package/esm2022/lib/java-api/model/eduCollection.mjs +11 -0
- package/esm2022/lib/java-api/model/filter.mjs +2 -0
- package/esm2022/lib/java-api/model/filterValue.mjs +11 -0
- package/esm2022/lib/java-api/model/materialCountDto.mjs +2 -0
- package/esm2022/lib/java-api/model/materialCountFilter.mjs +11 -0
- package/esm2022/lib/java-api/model/matrixRowWithCounts.mjs +2 -0
- package/esm2022/lib/java-api/model/matrixWithCounts.mjs +2 -0
- package/esm2022/lib/java-api/model/models.mjs +13 -0
- package/esm2022/lib/java-api/model/qualityMatrix.mjs +2 -0
- package/esm2022/lib/java-api/model/qualityMatrixHeader.mjs +11 -0
- package/esm2022/lib/java-api/model/qualityMatrixReplicationSourceCounts.mjs +11 -0
- package/esm2022/lib/java-api/model/qualityMatrixRow.mjs +2 -0
- package/esm2022/lib/java-api/param.mjs +2 -0
- package/esm2022/lib/java-api/variables.mjs +9 -0
- package/esm2022/lib/materialtypes-by-sources/materialtypes-by-sources.component.mjs +148 -0
- package/esm2022/lib/meta-api.service.mjs +71 -0
- package/esm2022/lib/ng-meta-widgets-lib.module.mjs +178 -0
- package/esm2022/lib/tree-collection-details/tree-collection-details.component.mjs +88 -0
- package/esm2022/lib/tree-search-counts/inline-worker.mjs +103 -0
- package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +196 -0
- package/esm2022/lib/wrap-observable.pipe.mjs +21 -0
- package/esm2022/ngx-edu-sharing-metaqs2.mjs +5 -0
- package/esm2022/public-api.mjs +12 -0
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +3129 -0
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/collection-count-history/collection-count-history.component.d.ts +29 -0
- package/lib/collection-count-history/monthpicker/monthpicker.component.d.ts +20 -0
- package/lib/components/donut-chart/donut-chart.component.d.ts +20 -0
- package/lib/components/donut-chart/donut-chart.model.d.ts +7 -0
- package/lib/components/donut-chart/donut-chart.pipe.d.ts +16 -0
- package/lib/components/editorial-link-service/editorial-link.service.d.ts +12 -0
- package/lib/components/filter/datepicker/datepicker.component.d.ts +15 -0
- package/lib/components/filter/quality-matrix-filter.component.d.ts +20 -0
- package/lib/components/quality-matrix/quality_matrix.d.ts +52 -0
- package/lib/core/svg-icons.service.d.ts +12 -0
- package/lib/counts-with-history/counts-with-history.component.d.ts +48 -0
- package/lib/env-helper.service.d.ts +23 -0
- package/lib/java-api/api/api.d.ts +11 -0
- package/lib/java-api/api/authProxyController.service.d.ts +57 -0
- package/lib/java-api/api/collectionAPI.service.d.ts +138 -0
- package/lib/java-api/api/editorsAPI.service.d.ts +86 -0
- package/lib/java-api/api/filterAPI.service.d.ts +55 -0
- package/lib/java-api/api/replicationSourceAPI.service.d.ts +129 -0
- package/lib/java-api/api.module.d.ts +11 -0
- package/lib/java-api/configuration.d.ts +104 -0
- package/lib/java-api/encoder.d.ts +11 -0
- package/lib/java-api/index.d.ts +6 -0
- package/lib/java-api/model/count.d.ts +13 -0
- package/lib/java-api/model/eduCollection.d.ts +14 -0
- package/lib/java-api/model/filter.d.ts +14 -0
- package/lib/java-api/model/filterValue.d.ts +13 -0
- package/lib/java-api/model/materialCountDto.d.ts +14 -0
- package/lib/java-api/model/materialCountFilter.d.ts +14 -0
- package/lib/java-api/model/matrixRowWithCounts.d.ts +17 -0
- package/lib/java-api/model/matrixWithCounts.d.ts +15 -0
- package/lib/java-api/model/models.d.ts +12 -0
- package/lib/java-api/model/qualityMatrix.d.ts +15 -0
- package/lib/java-api/model/qualityMatrixHeader.d.ts +16 -0
- package/lib/java-api/model/qualityMatrixReplicationSourceCounts.d.ts +13 -0
- package/lib/java-api/model/qualityMatrixRow.d.ts +18 -0
- package/lib/java-api/param.d.ts +37 -0
- package/lib/java-api/variables.d.ts +8 -0
- package/lib/materialtypes-by-sources/materialtypes-by-sources.component.d.ts +43 -0
- package/lib/meta-api.service.d.ts +33 -0
- package/lib/ng-meta-widgets-lib.module.d.ts +43 -0
- package/lib/tree-collection-details/tree-collection-details.component.d.ts +30 -0
- package/lib/tree-search-counts/inline-worker.d.ts +21 -0
- package/lib/tree-search-counts/tree-search-counts.component.d.ts +57 -0
- package/lib/wrap-observable.pipe.d.ts +18 -0
- package/package.json +25 -7
- package/public-api.d.ts +8 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# NgMetaWidgetsLib
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.0.3.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project ng-meta-widgets-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ng-meta-widgets-lib`.
|
|
8
|
+
> Note: Don't forget to add `--project ng-meta-widgets-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build ng-meta-widgets-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build ng-meta-widgets-lib`, go to the dist folder `cd dist/ng-meta-widgets-lib` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test ng-meta-widgets-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Component, signal, ViewChild } from '@angular/core';
|
|
2
|
+
import { BaseChartDirective } from 'ng2-charts';
|
|
3
|
+
import { DateTime } from 'luxon';
|
|
4
|
+
import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
|
|
5
|
+
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { MonthpickerComponent } from './monthpicker/monthpicker.component';
|
|
7
|
+
import { BehaviorSubject } from 'rxjs';
|
|
8
|
+
import { AsyncPipe, NgClass } from '@angular/common';
|
|
9
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
|
+
import { distinctUntilChanged, finalize, take } from 'rxjs/operators';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../meta-api.service";
|
|
13
|
+
export class CollectionCountHistoryComponent {
|
|
14
|
+
constructor(metaApi, destroyRef) {
|
|
15
|
+
this.metaApi = metaApi;
|
|
16
|
+
this.destroyRef = destroyRef;
|
|
17
|
+
this.lineChartOptions = {
|
|
18
|
+
parsing: {
|
|
19
|
+
xAxisKey: 'date',
|
|
20
|
+
yAxisKey: 'count',
|
|
21
|
+
},
|
|
22
|
+
font: {
|
|
23
|
+
family: 'Montserrat',
|
|
24
|
+
},
|
|
25
|
+
animation: false,
|
|
26
|
+
};
|
|
27
|
+
this.datapoints$ = new BehaviorSubject([]);
|
|
28
|
+
this.isLoading = signal(true);
|
|
29
|
+
this.range = new FormGroup({
|
|
30
|
+
start: new FormControl(),
|
|
31
|
+
end: new FormControl(),
|
|
32
|
+
});
|
|
33
|
+
this.granularities = ['year', 'month', 'week', 'day'];
|
|
34
|
+
this.granularity = new FormControl('month', { nonNullable: true });
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.registerDateRangeFilter();
|
|
38
|
+
}
|
|
39
|
+
registerDateRangeFilter() {
|
|
40
|
+
this.range.valueChanges
|
|
41
|
+
.pipe(takeUntilDestroyed(this.destroyRef),
|
|
42
|
+
//the Material Datepicker emits the initial values 4 times when it starts, so we need to distinct them
|
|
43
|
+
distinctUntilChanged((prev, curr) => {
|
|
44
|
+
return prev.start === curr.start && prev.end === curr.end;
|
|
45
|
+
}))
|
|
46
|
+
.subscribe(() => {
|
|
47
|
+
this.loadData();
|
|
48
|
+
});
|
|
49
|
+
this.metaApi
|
|
50
|
+
.getTimerangeFilter()
|
|
51
|
+
.pipe(take(1))
|
|
52
|
+
.subscribe((rangeFilter) => {
|
|
53
|
+
if (rangeFilter) {
|
|
54
|
+
const startDate = DateTime.fromISO(rangeFilter.values.find((v) => v.id === 'rangeStart')?.label, {
|
|
55
|
+
zone: 'utc',
|
|
56
|
+
}).startOf(this.granularity.value);
|
|
57
|
+
const endDate = DateTime.fromISO(rangeFilter.values.find((v) => v.id === 'rangeEnd')?.label, {
|
|
58
|
+
zone: 'utc',
|
|
59
|
+
}).endOf(this.granularity.value);
|
|
60
|
+
this.range.setControl('start', new FormControl(startDate, { nonNullable: true }), {
|
|
61
|
+
emitEvent: false,
|
|
62
|
+
});
|
|
63
|
+
this.range.setControl('end', new FormControl(endDate, { nonNullable: true }), { emitEvent: false });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
loadData() {
|
|
68
|
+
this.isLoading.set(true);
|
|
69
|
+
const request = {
|
|
70
|
+
startDate: this.range.value.start?.toISO(),
|
|
71
|
+
endDate: this.range.value.end?.toISO(),
|
|
72
|
+
granularity: this.granularity.value,
|
|
73
|
+
};
|
|
74
|
+
this.metaApi
|
|
75
|
+
.getEditorialMaterialCounts(request)
|
|
76
|
+
.pipe(take(1), finalize(() => this.isLoading.set(false)))
|
|
77
|
+
.subscribe((response) => {
|
|
78
|
+
const datapoints = response.map((data) => {
|
|
79
|
+
return {
|
|
80
|
+
data: data.counts.map((count) => {
|
|
81
|
+
return {
|
|
82
|
+
date: DateTime.fromISO(count.date).toFormat('LLLL yyyy'),
|
|
83
|
+
count: count.count,
|
|
84
|
+
};
|
|
85
|
+
}),
|
|
86
|
+
label: data.name,
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
this.datapoints$.next(datapoints);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionCountHistoryComponent, deps: [{ token: i1.MetaApiService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
93
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollectionCountHistoryComponent, isStandalone: true, selector: "lib-collection-count-history", viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }], ngImport: i0, template: "<mat-card appearance=\"outlined\">\n <mat-card-header>\n <mat-card-title>\n collection-count-history{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <lib-monthpicker\n [inputGroup]=\"range\"></lib-monthpicker>\n\n <div [ngClass]=\"{'while-loading': isLoading()}\">\n <canvas\n baseChart\n [datasets]=\"(datapoints$ | async) || []\"\n [options]=\"lineChartOptions\"\n [type]=\"'line'\"\n ></canvas>\n </div>\n </mat-card-content>\n</mat-card>", styles: [""], dependencies: [{ kind: "directive", type: BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }, { kind: "component", type: MonthpickerComponent, selector: "lib-monthpicker", inputs: ["startView", "inputGroup"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
94
|
+
}
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionCountHistoryComponent, decorators: [{
|
|
96
|
+
type: Component,
|
|
97
|
+
args: [{ selector: 'lib-collection-count-history', standalone: true, imports: [
|
|
98
|
+
BaseChartDirective,
|
|
99
|
+
MonthpickerComponent,
|
|
100
|
+
MatCard,
|
|
101
|
+
MatCardHeader,
|
|
102
|
+
MatCardTitle,
|
|
103
|
+
MatCardContent,
|
|
104
|
+
AsyncPipe,
|
|
105
|
+
ReactiveFormsModule,
|
|
106
|
+
NgClass,
|
|
107
|
+
], template: "<mat-card appearance=\"outlined\">\n <mat-card-header>\n <mat-card-title>\n collection-count-history{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <lib-monthpicker\n [inputGroup]=\"range\"></lib-monthpicker>\n\n <div [ngClass]=\"{'while-loading': isLoading()}\">\n <canvas\n baseChart\n [datasets]=\"(datapoints$ | async) || []\"\n [options]=\"lineChartOptions\"\n [type]=\"'line'\"\n ></canvas>\n </div>\n </mat-card-content>\n</mat-card>" }]
|
|
108
|
+
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i0.DestroyRef }], propDecorators: { chart: [{
|
|
109
|
+
type: ViewChild,
|
|
110
|
+
args: [BaseChartDirective]
|
|
111
|
+
}] } });
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFvQnRFLE1BQU0sT0FBTywr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QUNqQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBMUZVLCtCQUErQjttR0FBL0IsK0JBQStCLCtIQUMvQixrQkFBa0IsZ0RDbEMvQixpa0JBb0JXLDBEREFQLGtCQUFrQiwrTUFDbEIsb0JBQW9CLGlHQUNwQixPQUFPLG9HQUNQLGFBQWEsNERBQ2IsWUFBWSw2RkFDWixjQUFjLHdEQUNkLFNBQVMsNkNBQ1QsbUJBQW1CLCtCQUNuQixPQUFPOzs0RkFLRSwrQkFBK0I7a0JBakIzQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1A7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLE9BQU87d0JBQ1AsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLE9BQU87cUJBQ1I7NEdBSzhCLEtBQUs7c0JBQW5DLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBPbkluaXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0RGF0YXNldCB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IEJhc2VDaGFydERpcmVjdGl2ZSB9IGZyb20gJ25nMi1jaGFydHMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIERhdGVUaW1lVW5pdCB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1vbnRocGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9tb250aHBpY2tlci9tb250aHBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ291bnQgfSBmcm9tICcuLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0ZXJpYWxDb3VudEZpbHRlciB9IGZyb20gJy4uL2phdmEtYXBpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNvbGxlY3Rpb24tY291bnQtaGlzdG9yeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBCYXNlQ2hhcnREaXJlY3RpdmUsXG4gICAgTW9udGhwaWNrZXJDb21wb25lbnQsXG4gICAgTWF0Q2FyZCxcbiAgICBNYXRDYXJkSGVhZGVyLFxuICAgIE1hdENhcmRUaXRsZSxcbiAgICBNYXRDYXJkQ29udGVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvbGxlY3Rpb24tY291bnQtaGlzdG9yeS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25Db3VudEhpc3RvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKEJhc2VDaGFydERpcmVjdGl2ZSkgY2hhcnQ/OiBCYXNlQ2hhcnREaXJlY3RpdmU7XG4gIHByb3RlY3RlZCBsaW5lQ2hhcnRPcHRpb25zOiBDaGFydENvbmZpZ3VyYXRpb25bJ29wdGlvbnMnXSA9IHtcbiAgICBwYXJzaW5nOiB7XG4gICAgICB4QXhpc0tleTogJ2RhdGUnLFxuICAgICAgeUF4aXNLZXk6ICdjb3VudCcsXG4gICAgfSxcbiAgICBmb250OiB7XG4gICAgICBmYW1pbHk6ICdNb250c2VycmF0JyxcbiAgICB9LFxuICAgIGFuaW1hdGlvbjogZmFsc2UsXG4gIH07XG4gIHByb3RlY3RlZCBkYXRhcG9pbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnREYXRhc2V0PCdsaW5lJywgQ291bnRbXT5bXT4oW10pO1xuICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSByYW5nZTogRm9ybUdyb3VwPHtcbiAgICBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICAgIGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICB9PiA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICB9KTtcbiAgcHJvdGVjdGVkIGdyYW51bGFyaXRpZXM6IERhdGVUaW1lVW5pdFtdID0gWyd5ZWFyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5J107XG4gIHByb3RlY3RlZCBncmFudWxhcml0eSA9IG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZVVuaXQ+KCdtb250aCcsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBtZXRhQXBpOiBNZXRhQXBpU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmOiBEZXN0cm95UmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJEYXRlUmFuZ2VGaWx0ZXIoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCkge1xuICAgIHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIC8vdGhlIE1hdGVyaWFsIERhdGVwaWNrZXIgZW1pdHMgdGhlIGluaXRpYWwgdmFsdWVzIDQgdGltZXMgd2hlbiBpdCBzdGFydHMsIHNvIHdlIG5lZWQgdG8gZGlzdGluY3QgdGhlbVxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV2LnN0YXJ0ID09PSBjdXJyLnN0YXJ0ICYmIHByZXYuZW5kID09PSBjdXJyLmVuZDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLm1ldGFBcGlcbiAgICAgIC5nZXRUaW1lcmFuZ2VGaWx0ZXIoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJhbmdlRmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChyYW5nZUZpbHRlcikge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgICAgICAgem9uZTogJ3V0YycsXG4gICAgICAgICAgfSkuc3RhcnRPZih0aGlzLmdyYW51bGFyaXR5LnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhyYW5nZUZpbHRlci52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gJ3JhbmdlRW5kJyk/LmxhYmVsISwge1xuICAgICAgICAgICAgem9uZTogJ3V0YycsXG4gICAgICAgICAgfSkuZW5kT2YodGhpcy5ncmFudWxhcml0eS52YWx1ZSk7XG4gICAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdzdGFydCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oc3RhcnREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnZW5kJywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihlbmREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBNYXRlcmlhbENvdW50RmlsdGVyID0ge1xuICAgICAgc3RhcnREYXRlOiB0aGlzLnJhbmdlLnZhbHVlLnN0YXJ0Py50b0lTTygpISxcbiAgICAgIGVuZERhdGU6IHRoaXMucmFuZ2UudmFsdWUuZW5kPy50b0lTTygpISxcbiAgICAgIGdyYW51bGFyaXR5OiB0aGlzLmdyYW51bGFyaXR5LnZhbHVlLFxuICAgIH07XG5cbiAgICB0aGlzLm1ldGFBcGlcbiAgICAgIC5nZXRFZGl0b3JpYWxNYXRlcmlhbENvdW50cyhyZXF1ZXN0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhcG9pbnRzID0gcmVzcG9uc2UubWFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuY291bnRzLm1hcCgoY291bnQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlOiBEYXRlVGltZS5mcm9tSVNPKGNvdW50LmRhdGUpLnRvRm9ybWF0KCdMTExMIHl5eXknKSEsXG4gICAgICAgICAgICAgICAgY291bnQ6IGNvdW50LmNvdW50LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBsYWJlbDogZGF0YS5uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFwb2ludHMkLm5leHQoZGF0YXBvaW50cyk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiPlxuICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgIGNvbGxlY3Rpb24tY291bnQtaGlzdG9yeXt7IGlzTG9hZGluZygpID8gXCI6IExhZGUgbmV1ZSBEYXRlbi5cIiA6IFwiXCIgfX1cbiAgICA8L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICA8bGliLW1vbnRocGlja2VyXG4gICAgICBbaW5wdXRHcm91cF09XCJyYW5nZVwiPjwvbGliLW1vbnRocGlja2VyPlxuXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J3doaWxlLWxvYWRpbmcnOiBpc0xvYWRpbmcoKX1cIj5cbiAgICAgIDxjYW52YXNcbiAgICAgICAgYmFzZUNoYXJ0XG4gICAgICAgIFtkYXRhc2V0c109XCIoZGF0YXBvaW50cyQgfCBhc3luYykgfHwgW11cIlxuICAgICAgICBbb3B0aW9uc109XCJsaW5lQ2hhcnRPcHRpb25zXCJcbiAgICAgICAgW3R5cGVdPVwiJ2xpbmUnXCJcbiAgICAgID48L2NhbnZhcz5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Component, Input, LOCALE_ID } from '@angular/core';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker';
|
|
4
|
+
import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';
|
|
5
|
+
import { MatInput } from '@angular/material/input';
|
|
6
|
+
import { MAT_LUXON_DATE_ADAPTER_OPTIONS, provideLuxonDateAdapter } from '@angular/material-luxon-adapter';
|
|
7
|
+
import { MAT_DATE_LOCALE } from '@angular/material/core';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
export const datePickerFormats = {
|
|
11
|
+
parse: {
|
|
12
|
+
dateInput: 'LLLL yyyy',
|
|
13
|
+
},
|
|
14
|
+
display: {
|
|
15
|
+
dateInput: 'LLLL yyyy',
|
|
16
|
+
monthYearLabel: 'LLLL yyyy',
|
|
17
|
+
dateA11yLabel: 'LLL',
|
|
18
|
+
monthYearA11yLabel: 'MMMM yyyy',
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Theoretically, this component should be able to handle both monthly and daily date ranges.
|
|
23
|
+
* But I am unable to find a way to change the date format of the datepicker
|
|
24
|
+
*/
|
|
25
|
+
export class MonthpickerComponent {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.startView = 'year';
|
|
28
|
+
}
|
|
29
|
+
setStart(date, picker) {
|
|
30
|
+
this.inputGroup.controls.start.setValue(date);
|
|
31
|
+
picker.close();
|
|
32
|
+
}
|
|
33
|
+
setEnd(date, picker) {
|
|
34
|
+
this.inputGroup.controls.end.setValue(date.endOf('month'));
|
|
35
|
+
picker.close();
|
|
36
|
+
}
|
|
37
|
+
ngOnDestroy() {
|
|
38
|
+
//defer this to avoid an ExpressionChangedAfterItHasBeenCheckedError on the parent component
|
|
39
|
+
Promise.resolve().then(() => this.inputGroup.reset());
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonthpickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MonthpickerComponent, isStandalone: true, selector: "lib-monthpicker", inputs: { startView: "startView", inputGroup: "inputGroup" }, providers: [
|
|
43
|
+
provideLuxonDateAdapter(datePickerFormats),
|
|
44
|
+
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
45
|
+
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
46
|
+
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
47
|
+
], ngImport: i0, template: "<!--\n<mat-card>\n <mat-card-header>\n <mat-card-title> Monatlicher Vergleich </mat-card-title>\n </mat-card-header>\n <mat-card-content [formGroup]=\"inputGroup\">\n </!-- start date --/>\n -->\n<ng-container [formGroup]=\"inputGroup\" >\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker1\" formControlName=\"start\"\n placeholder=\"Starts date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-datepicker\n #picker1\n [startAt]=\"inputGroup.controls.start.defaultValue\"\n [startView]=\"startView\"\n (monthSelected)=\"setStart($event, picker1)\"\n\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /start date -->\n <!-- end date -->\n <mat-form-field>\n <mat-label>Zeitpunkt2</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker2\"\n formControlName=\"end\"\n placeholder=\"End date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker\n #picker2\n [startAt]=\"inputGroup.controls.end.value\"\n [startView]=\"startView\"\n (monthSelected)=\"setEnd($event, picker2)\"\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n</ng-container>\n<!--\n </mat-card-content>\n</mat-card>\n-->", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
48
|
+
}
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonthpickerComponent, decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{ selector: 'lib-monthpicker', standalone: true, imports: [
|
|
52
|
+
FormsModule,
|
|
53
|
+
MatDatepicker,
|
|
54
|
+
MatDatepickerInput,
|
|
55
|
+
MatDatepickerToggle,
|
|
56
|
+
MatFormField,
|
|
57
|
+
MatInput,
|
|
58
|
+
MatLabel,
|
|
59
|
+
MatSuffix,
|
|
60
|
+
ReactiveFormsModule,
|
|
61
|
+
], providers: [
|
|
62
|
+
provideLuxonDateAdapter(datePickerFormats),
|
|
63
|
+
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
64
|
+
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
65
|
+
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
66
|
+
], template: "<!--\n<mat-card>\n <mat-card-header>\n <mat-card-title> Monatlicher Vergleich </mat-card-title>\n </mat-card-header>\n <mat-card-content [formGroup]=\"inputGroup\">\n </!-- start date --/>\n -->\n<ng-container [formGroup]=\"inputGroup\" >\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker1\" formControlName=\"start\"\n placeholder=\"Starts date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-datepicker\n #picker1\n [startAt]=\"inputGroup.controls.start.defaultValue\"\n [startView]=\"startView\"\n (monthSelected)=\"setStart($event, picker1)\"\n\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /start date -->\n <!-- end date -->\n <mat-form-field>\n <mat-label>Zeitpunkt2</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker2\"\n formControlName=\"end\"\n placeholder=\"End date\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker\n #picker2\n [startAt]=\"inputGroup.controls.end.value\"\n [startView]=\"startView\"\n (monthSelected)=\"setEnd($event, picker2)\"\n >\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n</ng-container>\n<!--\n </mat-card-content>\n</mat-card>\n-->" }]
|
|
67
|
+
}], ctorParameters: () => [], propDecorators: { startView: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], inputGroup: [{
|
|
70
|
+
type: Input,
|
|
71
|
+
args: [{ required: true }]
|
|
72
|
+
}] } });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbGxlY3Rpb24tY291bnQtaGlzdG9yeS9tb250aHBpY2tlci9tb250aHBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5L21vbnRocGlja2VyL21vbnRocGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQTBCLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRXpFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFtQjtJQUMvQyxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsV0FBVztLQUN2QjtJQUNELE9BQU8sRUFBRTtRQUNQLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLGNBQWMsRUFBRSxXQUFXO1FBQzNCLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLGtCQUFrQixFQUFFLFdBQVc7S0FDaEM7Q0FDRixDQUFDO0FBeUJGOzs7R0FHRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFNL0I7UUFKQSxjQUFTLEdBQW9DLE1BQU0sQ0FBQztJQUlyQyxDQUFDO0lBRU4sUUFBUSxDQUFDLElBQXVCLEVBQUUsTUFBd0M7UUFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxJQUF1QixFQUFFLE1BQXdDO1FBQ2hGLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVztRQUNULDRGQUE0RjtRQUM1RixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDOytHQXJCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQiw0SEFicEI7WUFDVCx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQztZQUMxQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtZQUN6QyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtZQUMvQyxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtTQUMzRiwwQkN4Q0gsMHJEQW9ERyx5REQzQkMsV0FBVyxtakJBQ1gsYUFBYSx3RkFDYixrQkFBa0IsbUtBQ2xCLG1CQUFtQiw2S0FDbkIsWUFBWSw0TEFDWixRQUFRLGlVQUNSLFFBQVEsc0RBQ1IsU0FBUyxvSEFDVCxtQkFBbUI7OzRGQWVWLG9CQUFvQjtrQkEzQmhDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxtQkFBbUI7cUJBQ3BCLGFBQ1U7d0JBQ1QsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7d0JBQzFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO3dCQUN6QyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTt3QkFDL0MsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUU7cUJBQzNGO3dEQVVELFNBQVM7c0JBRFIsS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgTE9DQUxFX0lELCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0LCBNYXREYXRlcGlja2VyVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsLCBNYXRTdWZmaXggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBNQVRfTFVYT05fREFURV9BREFQVEVSX09QVElPTlMsIHByb3ZpZGVMdXhvbkRhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbHV4b24tYWRhcHRlcic7XG5pbXBvcnQgeyBNQVRfREFURV9MT0NBTEUsIE1hdERhdGVGb3JtYXRzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBkYXRlUGlja2VyRm9ybWF0czogTWF0RGF0ZUZvcm1hdHMgPSB7XG4gIHBhcnNlOiB7XG4gICAgZGF0ZUlucHV0OiAnTExMTCB5eXl5JyxcbiAgfSxcbiAgZGlzcGxheToge1xuICAgIGRhdGVJbnB1dDogJ0xMTEwgeXl5eScsXG4gICAgbW9udGhZZWFyTGFiZWw6ICdMTExMIHl5eXknLFxuICAgIGRhdGVBMTF5TGFiZWw6ICdMTEwnLFxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0geXl5eScsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbW9udGhwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlcixcbiAgICBNYXREYXRlcGlja2VySW5wdXQsXG4gICAgTWF0RGF0ZXBpY2tlclRvZ2dsZSxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0SW5wdXQsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0U3VmZml4LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHByb3ZpZGVMdXhvbkRhdGVBZGFwdGVyKGRhdGVQaWNrZXJGb3JtYXRzKSxcbiAgICB7IHByb3ZpZGU6IExPQ0FMRV9JRCwgdXNlVmFsdWU6ICdkZS1ERScgfSxcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlVmFsdWU6ICdkZS1ERScgfSxcbiAgICB7IHByb3ZpZGU6IE1BVF9MVVhPTl9EQVRFX0FEQVBURVJfT1BUSU9OUywgdXNlVmFsdWU6IHsgdXNlVXRjOiB0cnVlLCBmaXJzdERheU9mV2VlazogMSB9IH0sXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tb250aHBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tb250aHBpY2tlci5jb21wb25lbnQuY3NzJyxcbn0pXG4vKipcbiAqIFRoZW9yZXRpY2FsbHksIHRoaXMgY29tcG9uZW50IHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBib3RoIG1vbnRobHkgYW5kIGRhaWx5IGRhdGUgcmFuZ2VzLlxuICogQnV0IEkgYW0gdW5hYmxlIHRvIGZpbmQgYSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRlIGZvcm1hdCBvZiB0aGUgZGF0ZXBpY2tlclxuICovXG5leHBvcnQgY2xhc3MgTW9udGhwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBzdGFydFZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcicgPSAneWVhcic7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGlucHV0R3JvdXA6IEZvcm1Hcm91cDx7IHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47IGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+IH0+O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwcm90ZWN0ZWQgc2V0U3RhcnQoZGF0ZTogRGF0ZVRpbWU8Ym9vbGVhbj4sIHBpY2tlcjogTWF0RGF0ZXBpY2tlcjxEYXRlVGltZTxib29sZWFuPj4pOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuc2V0VmFsdWUoZGF0ZSk7XG4gICAgcGlja2VyLmNsb3NlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RW5kKGRhdGU6IERhdGVUaW1lPGJvb2xlYW4+LCBwaWNrZXI6IE1hdERhdGVwaWNrZXI8RGF0ZVRpbWU8Ym9vbGVhbj4+KTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEdyb3VwLmNvbnRyb2xzLmVuZC5zZXRWYWx1ZShkYXRlLmVuZE9mKCdtb250aCcpKTtcbiAgICBwaWNrZXIuY2xvc2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vZGVmZXIgdGhpcyB0byBhdm9pZCBhbiBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yIG9uIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmlucHV0R3JvdXAucmVzZXQoKSk7XG4gIH1cbn1cbiIsIjwhLS1cbjxtYXQtY2FyZD5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8bWF0LWNhcmQtdGl0bGU+IE1vbmF0bGljaGVyIFZlcmdsZWljaCA8L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJpbnB1dEdyb3VwXCI+XG4gICAgPC8hLS0gc3RhcnQgZGF0ZSAtLS8+XG4gICAgLS0+XG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiaW5wdXRHcm91cFwiID5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPlplaXRwdW5rdCAxPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICBbbWluXT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICBbbWF4XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyMVwiIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCJcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlN0YXJ0cyBkYXRlXCJcbiAgICAgID5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlcjFcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICAjcGlja2VyMVxuICAgICAgICBbc3RhcnRBdF09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLnN0YXJ0LmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgIFtzdGFydFZpZXddPVwic3RhcnRWaWV3XCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2V0U3RhcnQoJGV2ZW50LCBwaWNrZXIxKVwiXG5cbiAgICAgID5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8IS0tIC9zdGFydCBkYXRlIC0tPlxuICAgIDwhLS0gZW5kIGRhdGUgLS0+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5aZWl0cHVua3QyPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICBbbWluXT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICBbbWF4XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyMlwiXG4gICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCJcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCJcbiAgICAgID5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICAjcGlja2VyMlxuICAgICAgICBbc3RhcnRBdF09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLmVuZC52YWx1ZVwiXG4gICAgICAgIFtzdGFydFZpZXddPVwic3RhcnRWaWV3XCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwic2V0RW5kKCRldmVudCwgcGlja2VyMilcIlxuICAgICAgPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwhLS0gL2VuZCBkYXRlIC0tPlxuPC9uZy1jb250YWluZXI+XG48IS0tXG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG4tLT4iXX0=
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "./donut-chart.pipe";
|
|
5
|
+
/**
|
|
6
|
+
* A donut chart component that displays a list of slices.
|
|
7
|
+
* The chart is divided into slices, each slice has a color and a label.
|
|
8
|
+
* Each slice is represented by a percentage of the total chart.
|
|
9
|
+
* borrowed from https://medium.com/@theAngularGuy/how-to-create-an-interactive-donut-chart-using-svg-107cbf0b5b6
|
|
10
|
+
*/
|
|
11
|
+
export class DonutChartComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.radius = 50;
|
|
14
|
+
this.viewBox = 100;
|
|
15
|
+
this.borderSize = 20;
|
|
16
|
+
this.strokeWidth = 5;
|
|
17
|
+
this.data = [];
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
const sum = this.data?.reduce((accu, slice) => accu + slice.percent, 0);
|
|
21
|
+
if (sum !== 100) {
|
|
22
|
+
throw new Error(`The sum of all slices of the donut chart must equal to 100%. Found: ${sum}.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
trackByFn(index, slice) {
|
|
26
|
+
return slice.id;
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
29
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DonutChartComponent, selector: "app-donut-chart", inputs: { radius: "radius", viewBox: "viewBox", borderSize: "borderSize", strokeWidth: "strokeWidth", data: "data" }, ngImport: i0, template: `
|
|
30
|
+
<svg [attr.viewBox]="'0 0 ' + viewBox + ' ' + viewBox" *ngIf="data">
|
|
31
|
+
<path *ngFor="let slice of data | slicesWithCommandsAndOffset:radius:viewBox:borderSize;
|
|
32
|
+
trackBy: trackByFn;
|
|
33
|
+
let index = index"
|
|
34
|
+
[attr.fill]="slice.color"
|
|
35
|
+
[attr.stroke]="'white'"
|
|
36
|
+
[attr.paint-order]="'stroke'"
|
|
37
|
+
[attr.stroke-opacity]="'1'"
|
|
38
|
+
[attr.stroke-width]="strokeWidth"
|
|
39
|
+
[attr.d]="slice.commands"
|
|
40
|
+
[attr.transform]="'rotate(' + slice.offset + ')'"
|
|
41
|
+
(click)="slice.onClickCb ? slice.onClickCb() : null"
|
|
42
|
+
>
|
|
43
|
+
<title>{{slice.label}}</title>
|
|
44
|
+
</path>
|
|
45
|
+
</svg>
|
|
46
|
+
`, isInline: true, styles: [":host{display:block}svg{overflow:visible;transform-origin:center;width:3.5rem;aspect-ratio:1/1;rotate:-90deg}path{transform-origin:center;fill-opacity:.7;cursor:pointer}path:hover{fill-opacity:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DonutChartPipe, name: "slicesWithCommandsAndOffset" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'app-donut-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
51
|
+
<svg [attr.viewBox]="'0 0 ' + viewBox + ' ' + viewBox" *ngIf="data">
|
|
52
|
+
<path *ngFor="let slice of data | slicesWithCommandsAndOffset:radius:viewBox:borderSize;
|
|
53
|
+
trackBy: trackByFn;
|
|
54
|
+
let index = index"
|
|
55
|
+
[attr.fill]="slice.color"
|
|
56
|
+
[attr.stroke]="'white'"
|
|
57
|
+
[attr.paint-order]="'stroke'"
|
|
58
|
+
[attr.stroke-opacity]="'1'"
|
|
59
|
+
[attr.stroke-width]="strokeWidth"
|
|
60
|
+
[attr.d]="slice.commands"
|
|
61
|
+
[attr.transform]="'rotate(' + slice.offset + ')'"
|
|
62
|
+
(click)="slice.onClickCb ? slice.onClickCb() : null"
|
|
63
|
+
>
|
|
64
|
+
<title>{{slice.label}}</title>
|
|
65
|
+
</path>
|
|
66
|
+
</svg>
|
|
67
|
+
`, styles: [":host{display:block}svg{overflow:visible;transform-origin:center;width:3.5rem;aspect-ratio:1/1;rotate:-90deg}path{transform-origin:center;fill-opacity:.7;cursor:pointer}path:hover{fill-opacity:1}\n"] }]
|
|
68
|
+
}], propDecorators: { radius: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}], viewBox: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}], borderSize: [{
|
|
73
|
+
type: Input
|
|
74
|
+
}], strokeWidth: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}], data: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}] } });
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZG9udXQtY2hhcnQvZG9udXQtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssR0FFTixNQUFNLGVBQWUsQ0FBQzs7OztBQUd2Qjs7Ozs7R0FLRztBQXdCSCxNQUFNLE9BQU8sbUJBQW1CO0lBdkJoQztRQXdCVyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osWUFBTyxHQUFHLEdBQUcsQ0FBQztRQUNkLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxDQUFDLENBQUE7UUFDZixTQUFJLEdBQWlCLEVBQUUsQ0FBQztLQWNsQztJQVpDLFFBQVE7UUFDTixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLEdBQUcsR0FBRyxDQUM5RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLEtBQWlCO1FBQ3hDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUNsQixDQUFDOytHQWxCVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw2S0FuQnBCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDs7NEZBRVUsbUJBQW1CO2tCQXZCL0IsU0FBUzsrQkFDRSxpQkFBaUIsbUJBRVYsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQ7OEJBR1EsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi9kb251dC1jaGFydC5tb2RlbCc7XG5cbi8qKlxuICogQSBkb251dCBjaGFydCBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBhIGxpc3Qgb2Ygc2xpY2VzLlxuICogVGhlIGNoYXJ0IGlzIGRpdmlkZWQgaW50byBzbGljZXMsIGVhY2ggc2xpY2UgaGFzIGEgY29sb3IgYW5kIGEgbGFiZWwuXG4gKiBFYWNoIHNsaWNlIGlzIHJlcHJlc2VudGVkIGJ5IGEgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgY2hhcnQuXG4gKiBib3Jyb3dlZCBmcm9tIGh0dHBzOi8vbWVkaXVtLmNvbS9AdGhlQW5ndWxhckd1eS9ob3ctdG8tY3JlYXRlLWFuLWludGVyYWN0aXZlLWRvbnV0LWNoYXJ0LXVzaW5nLXN2Zy0xMDdjYmYwYjViNlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZG9udXQtY2hhcnQnLFxuICBzdHlsZVVybHM6IFsnLi9kb251dC1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c3ZnIFthdHRyLnZpZXdCb3hdPVwiJzAgMCAnICsgdmlld0JveCArICcgJyArIHZpZXdCb3hcIiAqbmdJZj1cImRhdGFcIj5cbiAgICAgIDxwYXRoICpuZ0Zvcj1cImxldCBzbGljZSBvZiBkYXRhIHwgc2xpY2VzV2l0aENvbW1hbmRzQW5kT2Zmc2V0OnJhZGl1czp2aWV3Qm94OmJvcmRlclNpemU7IFxuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5Rm47IFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICBbYXR0ci5maWxsXT1cInNsaWNlLmNvbG9yXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCInd2hpdGUnXCJcbiAgICAgICAgICAgIFthdHRyLnBhaW50LW9yZGVyXT1cIidzdHJva2UnXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZS1vcGFjaXR5XT1cIicxJ1wiIFxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCIgXG4gICAgICAgICAgICBbYXR0ci5kXT1cInNsaWNlLmNvbW1hbmRzXCJcbiAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCIncm90YXRlKCcgKyBzbGljZS5vZmZzZXQgKyAnKSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNsaWNlLm9uQ2xpY2tDYiA/IHNsaWNlLm9uQ2xpY2tDYigpIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDx0aXRsZT57e3NsaWNlLmxhYmVsfX08L3RpdGxlPlxuICAgICAgPC9wYXRoPlxuICAgIDwvc3ZnPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBEb251dENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcmFkaXVzID0gNTA7XG4gIEBJbnB1dCgpIHZpZXdCb3ggPSAxMDA7XG4gIEBJbnB1dCgpIGJvcmRlclNpemUgPSAyMDtcbiAgQElucHV0KCkgc3Ryb2tlV2lkdGggPSA1XG4gIEBJbnB1dCgpIGRhdGE6IERvbnV0U2xpY2VbXSA9IFtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuZGF0YT8ucmVkdWNlKChhY2N1LCBzbGljZSkgPT4gYWNjdSArIHNsaWNlLnBlcmNlbnQsIDApO1xuICAgIGlmIChzdW0gIT09IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIHN1bSBvZiBhbGwgc2xpY2VzIG9mIHRoZSBkb251dCBjaGFydCBtdXN0IGVxdWFsIHRvIDEwMCUuIEZvdW5kOiAke3N1bX0uYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgc2xpY2U6IERvbnV0U2xpY2UpIHtcbiAgICByZXR1cm4gc2xpY2UuaWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9kb251dC1jaGFydC9kb251dC1jaGFydC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEb251dFNsaWNlIHtcbiAgaWQ6IG51bWJlcjtcbiAgcGVyY2VudDogbnVtYmVyO1xuICBjb2xvcjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DbGlja0NiPzogKCkgPT4gdm9pZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DonutChartPipe {
|
|
4
|
+
transform(donutSlices, radius, svgSize, borderSize) {
|
|
5
|
+
let previousPercent = 0;
|
|
6
|
+
return donutSlices.map(slice => {
|
|
7
|
+
// this is a hack to that the circle is rendered when the percent is 100
|
|
8
|
+
slice.percent = slice.percent === 100 ? 99.999 : slice.percent;
|
|
9
|
+
const sliceWithCommands = {
|
|
10
|
+
...slice,
|
|
11
|
+
commands: `${this.getSliceCommands(slice, radius, svgSize, borderSize)} z`,
|
|
12
|
+
offset: previousPercent * 3.6 * -1,
|
|
13
|
+
};
|
|
14
|
+
previousPercent += slice.percent;
|
|
15
|
+
return sliceWithCommands;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getSliceCommands(donutSlice, radius, svgSize, borderSize) {
|
|
19
|
+
const degrees = this.percentToDegrees(donutSlice.percent);
|
|
20
|
+
const longPathFlag = degrees > 180 ? 1 : 0;
|
|
21
|
+
const innerRadius = radius - borderSize;
|
|
22
|
+
const commands = [];
|
|
23
|
+
commands.push(`M ${svgSize / 2 + radius} ${svgSize / 2}`);
|
|
24
|
+
commands.push(`A ${radius} ${radius} 0 ${longPathFlag} 0 ${this.getCoordFromDegrees(degrees, radius, svgSize)}`);
|
|
25
|
+
commands.push(`L ${this.getCoordFromDegrees(degrees, innerRadius, svgSize)}`);
|
|
26
|
+
commands.push(`A ${innerRadius} ${innerRadius} 0 ${longPathFlag} 1 ${svgSize / 2 + innerRadius} ${svgSize / 2}`);
|
|
27
|
+
return commands.join(' ');
|
|
28
|
+
}
|
|
29
|
+
getCoordFromDegrees(angle, radius, svgSize) {
|
|
30
|
+
const x = Math.cos(angle * Math.PI / 180);
|
|
31
|
+
const y = Math.sin(angle * Math.PI / 180);
|
|
32
|
+
const coordX = x * radius + svgSize / 2;
|
|
33
|
+
const coordY = y * -radius + svgSize / 2;
|
|
34
|
+
return `${coordX} ${coordY}`;
|
|
35
|
+
}
|
|
36
|
+
percentToDegrees(percent) {
|
|
37
|
+
return percent * 3.6;
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
40
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DonutChartPipe, name: "slicesWithCommandsAndOffset" }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartPipe, decorators: [{
|
|
43
|
+
type: Pipe,
|
|
44
|
+
args: [{
|
|
45
|
+
name: 'slicesWithCommandsAndOffset',
|
|
46
|
+
pure: true,
|
|
47
|
+
}]
|
|
48
|
+
}] });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBWXBELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFNBQVMsQ0FBQyxXQUF5QixFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsVUFBa0I7UUFDdEYsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3Qix3RUFBd0U7WUFDeEUsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFBLENBQUMsQ0FBQSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzNELE1BQU0saUJBQWlCLEdBQTJCO2dCQUNoRCxHQUFHLEtBQUs7Z0JBQ1IsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUMxRSxNQUFNLEVBQUUsZUFBZSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDbkMsQ0FBQztZQUNGLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pDLE9BQU8saUJBQWlCLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBc0IsRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFFLFVBQWtCO1FBQzFGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUV4QyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTyxJQUFLLE9BQU8sR0FBRyxDQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBTSxNQUFPLElBQUssTUFBTyxNQUFPLFlBQWEsTUFBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUUsRUFBRSxDQUFDLENBQUM7UUFDekgsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBRSxFQUFFLENBQUMsQ0FBQztRQUNoRixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQU0sV0FBWSxJQUFLLFdBQVksTUFBTyxZQUFhLE1BQU8sT0FBTyxHQUFHLENBQUMsR0FBRyxXQUFZLElBQUssT0FBTyxHQUFHLENBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0gsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLE9BQWU7UUFDaEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLEdBQUcsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDOytHQXZDVSxjQUFjOzZHQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBSjFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsSUFBSSxFQUFFLElBQUk7aUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi9kb251dC1jaGFydC5tb2RlbCc7XG5cbmludGVyZmFjZSBEb251dFNsaWNlV2l0aENvbW1hbmRzIGV4dGVuZHMgRG9udXRTbGljZSB7XG4gIG9mZnNldDogbnVtYmVyO1xuICBjb21tYW5kczogc3RyaW5nO1xufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdzbGljZXNXaXRoQ29tbWFuZHNBbmRPZmZzZXQnLFxuICBwdXJlOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBEb251dENoYXJ0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZG9udXRTbGljZXM6IERvbnV0U2xpY2VbXSwgcmFkaXVzOiBudW1iZXIsIHN2Z1NpemU6IG51bWJlciwgYm9yZGVyU2l6ZTogbnVtYmVyKTogRG9udXRTbGljZVdpdGhDb21tYW5kc1tdIHtcbiAgICBsZXQgcHJldmlvdXNQZXJjZW50ID0gMDtcbiAgICByZXR1cm4gZG9udXRTbGljZXMubWFwKHNsaWNlID0+IHtcbiAgICAgIC8vIHRoaXMgaXMgYSBoYWNrIHRvIHRoYXQgdGhlIGNpcmNsZSBpcyByZW5kZXJlZCB3aGVuIHRoZSBwZXJjZW50IGlzIDEwMFxuICAgICAgc2xpY2UucGVyY2VudCA9IHNsaWNlLnBlcmNlbnQgPT09IDEwMD85OS45OTk6c2xpY2UucGVyY2VudDtcbiAgICAgIGNvbnN0IHNsaWNlV2l0aENvbW1hbmRzOiBEb251dFNsaWNlV2l0aENvbW1hbmRzID0ge1xuICAgICAgICAuLi5zbGljZSxcbiAgICAgICAgY29tbWFuZHM6IGAke3RoaXMuZ2V0U2xpY2VDb21tYW5kcyhzbGljZSwgcmFkaXVzLCBzdmdTaXplLCBib3JkZXJTaXplKX0gemAsXG4gICAgICAgIG9mZnNldDogcHJldmlvdXNQZXJjZW50ICogMy42ICogLTEsXG4gICAgICB9O1xuICAgICAgcHJldmlvdXNQZXJjZW50ICs9IHNsaWNlLnBlcmNlbnQ7XG4gICAgICByZXR1cm4gc2xpY2VXaXRoQ29tbWFuZHM7XG4gICAgfSk7XG4gIH1cblxuICBnZXRTbGljZUNvbW1hbmRzKGRvbnV0U2xpY2U6IERvbnV0U2xpY2UsIHJhZGl1czogbnVtYmVyLCBzdmdTaXplOiBudW1iZXIsIGJvcmRlclNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZGVncmVlcyA9IHRoaXMucGVyY2VudFRvRGVncmVlcyhkb251dFNsaWNlLnBlcmNlbnQpO1xuICAgIGNvbnN0IGxvbmdQYXRoRmxhZyA9IGRlZ3JlZXMgPiAxODAgPyAxIDogMDtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IHJhZGl1cyAtIGJvcmRlclNpemU7XG5cbiAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcbiAgICBjb21tYW5kcy5wdXNoKGBNICR7IHN2Z1NpemUgLyAyICsgcmFkaXVzIH0gJHsgc3ZnU2l6ZSAvIDIgfWApO1xuICAgIGNvbW1hbmRzLnB1c2goYEEgJHsgcmFkaXVzIH0gJHsgcmFkaXVzIH0gMCAkeyBsb25nUGF0aEZsYWcgfSAwICR7IHRoaXMuZ2V0Q29vcmRGcm9tRGVncmVlcyhkZWdyZWVzLCByYWRpdXMsIHN2Z1NpemUpIH1gKTtcbiAgICBjb21tYW5kcy5wdXNoKGBMICR7IHRoaXMuZ2V0Q29vcmRGcm9tRGVncmVlcyhkZWdyZWVzLCBpbm5lclJhZGl1cywgc3ZnU2l6ZSkgfWApO1xuICAgIGNvbW1hbmRzLnB1c2goYEEgJHsgaW5uZXJSYWRpdXMgfSAkeyBpbm5lclJhZGl1cyB9IDAgJHsgbG9uZ1BhdGhGbGFnIH0gMSAkeyBzdmdTaXplIC8gMiArIGlubmVyUmFkaXVzIH0gJHsgc3ZnU2l6ZSAvIDIgfWApO1xuICAgIHJldHVybiBjb21tYW5kcy5qb2luKCcgJyk7XG4gIH1cblxuICBnZXRDb29yZEZyb21EZWdyZWVzKGFuZ2xlOiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBzdmdTaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHggPSBNYXRoLmNvcyhhbmdsZSAqIE1hdGguUEkgLyAxODApO1xuICAgIGNvbnN0IHkgPSBNYXRoLnNpbihhbmdsZSAqIE1hdGguUEkgLyAxODApO1xuICAgIGNvbnN0IGNvb3JkWCA9IHggKiByYWRpdXMgKyBzdmdTaXplIC8gMjtcbiAgICBjb25zdCBjb29yZFkgPSB5ICogLXJhZGl1cyArIHN2Z1NpemUgLyAyO1xuICAgIHJldHVybiBgJHtjb29yZFh9ICR7Y29vcmRZfWA7XG4gIH1cblxuICBwZXJjZW50VG9EZWdyZWVzKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHBlcmNlbnQgKiAzLjY7XG4gIH1cblxufVxuIl19
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { inject } from "@angular/core";
|
|
3
|
+
import { EnvHelperService } from "../../env-helper.service";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/*
|
|
6
|
+
This is a map from properties of a document to filter names
|
|
7
|
+
*/
|
|
8
|
+
const PROPERTIES2FILTERS = new Map([
|
|
9
|
+
["metadata.educationalContexts", "ccm:educationalcontext"],
|
|
10
|
+
["metadata.disciplines", "virtual:taxonid"],
|
|
11
|
+
["collections.nodeRef.id.keyword", "virtual:collection_id_primary"],
|
|
12
|
+
//["responsibility", "virtual:collection_id_primary"] // das zeigt auf "sammlungszugehörigkeit" und ist falsch
|
|
13
|
+
]);
|
|
14
|
+
/*
|
|
15
|
+
This map our column "names" to the valid values of the virtual:editorial_exclusion Filter
|
|
16
|
+
*/
|
|
17
|
+
const ISSUETYPE2FILTERS = new Map([
|
|
18
|
+
["without_title", "missing_title"],
|
|
19
|
+
["without_description", "missing_description"],
|
|
20
|
+
["without_education_level", "missing_educationalcontext"],
|
|
21
|
+
["without_target_group", "missing_educationalintendedenduserrole"],
|
|
22
|
+
["without_taxonomy_id", "missing_taxonid"],
|
|
23
|
+
["without_category", "missing_oeh_lrt"],
|
|
24
|
+
["without_license", "missing_license"]
|
|
25
|
+
]);
|
|
26
|
+
/*
|
|
27
|
+
interestingly it is not necessary to combine the nodeRef.id
|
|
28
|
+
with https://vocabs.openeduhub.de/w3id.org/openeduhub/vocabs/oeh-topics/{nodeRef.id}
|
|
29
|
+
*/
|
|
30
|
+
export class EditorialLinkService {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.env = inject(EnvHelperService);
|
|
33
|
+
}
|
|
34
|
+
openByReplicationsourceAndIssueTypeWithFilters(source, issue, selectedFilters) {
|
|
35
|
+
const filters = {};
|
|
36
|
+
filters["virtual:audit_filter"] = ["all"];
|
|
37
|
+
filters["ccm:oeh_publisher_combined"] = [source];
|
|
38
|
+
filters["virtual:editorial_exclusion"] = [ISSUETYPE2FILTERS.get(issue)];
|
|
39
|
+
for (const [field, values] of Object.entries(selectedFilters)) {
|
|
40
|
+
if (values && values.length) {
|
|
41
|
+
const editorialFiltername = PROPERTIES2FILTERS.get(field);
|
|
42
|
+
filters[editorialFiltername] = values;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const theUrl = new URL(this.env.eduSharingPath + "/components/editorial-desk");
|
|
46
|
+
const params = theUrl.searchParams;
|
|
47
|
+
params.set("mode", "audit");
|
|
48
|
+
params.set("filters", JSON.stringify(filters));
|
|
49
|
+
window.open(theUrl, "editor_frontend");
|
|
50
|
+
}
|
|
51
|
+
openByCollectionAndIssueType(collectionId, issueType, pageTitle) {
|
|
52
|
+
const filters = {};
|
|
53
|
+
filters["virtual:audit_filter"] = ["all"];
|
|
54
|
+
filters["virtual:editorial_exclusion"] = [ISSUETYPE2FILTERS.get(issueType)];
|
|
55
|
+
filters["virtual:collection_id_primary"] = [collectionId];
|
|
56
|
+
const theUrl = new URL(this.env.eduSharingPath + "/components/editorial-desk");
|
|
57
|
+
const params = theUrl.searchParams;
|
|
58
|
+
params.set("title", pageTitle);
|
|
59
|
+
params.set("mode", "audit");
|
|
60
|
+
params.set("filters", JSON.stringify(filters));
|
|
61
|
+
window.open(theUrl, "editor_frontend");
|
|
62
|
+
}
|
|
63
|
+
openByCollectionId(collectionId) {
|
|
64
|
+
const theUrl = new URL(this.env.eduSharingPath + "/components/editorial-desk");
|
|
65
|
+
const params = theUrl.searchParams;
|
|
66
|
+
params.set("ids", collectionId);
|
|
67
|
+
params.set("mode", "render");
|
|
68
|
+
window.open(theUrl, "editor_frontend");
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
71
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, providedIn: 'root' }); }
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, decorators: [{
|
|
74
|
+
type: Injectable,
|
|
75
|
+
args: [{
|
|
76
|
+
providedIn: 'root'
|
|
77
|
+
}]
|
|
78
|
+
}], ctorParameters: () => [] });
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yaWFsLWxpbmsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvcmlhbC1saW5rLXNlcnZpY2UvZWRpdG9yaWFsLWxpbmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRzVEOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDakQsQ0FBQyw4QkFBOEIsRUFBRSx3QkFBd0IsQ0FBQztJQUMxRCxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDO0lBQzNDLENBQUMsZ0NBQWdDLEVBQUUsK0JBQStCLENBQUM7SUFDbkUsOEdBQThHO0NBQy9HLENBQUMsQ0FBQztBQUNIOztFQUVFO0FBRUYsTUFBTSxpQkFBaUIsR0FBd0IsSUFBSSxHQUFHLENBQWlCO0lBQ3JFLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQztJQUNsQyxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDO0lBQzlDLENBQUMseUJBQXlCLEVBQUUsNEJBQTRCLENBQUM7SUFDekQsQ0FBQyxzQkFBc0IsRUFBRSx3Q0FBd0MsQ0FBQztJQUNsRSxDQUFDLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDO0lBQzFDLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUM7SUFDdkMsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQztDQUN2QyxDQUFDLENBQUM7QUFDSDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CO1FBRlEsUUFBRyxHQUFHLE1BQU0sQ0FBQyxn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K0dBM0NVLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRW52SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9lbnYtaGVscGVyLnNlcnZpY2VcIjtcblxuXG4vKlxuVGhpcyBpcyBhIG1hcCBmcm9tIHByb3BlcnRpZXMgb2YgYSBkb2N1bWVudCB0byBmaWx0ZXIgbmFtZXNcbiAqL1xuY29uc3QgUFJPUEVSVElFUzJGSUxURVJTID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbXCJtZXRhZGF0YS5lZHVjYXRpb25hbENvbnRleHRzXCIsIFwiY2NtOmVkdWNhdGlvbmFsY29udGV4dFwiXSxcbiAgW1wibWV0YWRhdGEuZGlzY2lwbGluZXNcIiwgXCJ2aXJ0dWFsOnRheG9uaWRcIl0sXG4gIFtcImNvbGxlY3Rpb25zLm5vZGVSZWYuaWQua2V5d29yZFwiLCBcInZpcnR1YWw6Y29sbGVjdGlvbl9pZF9wcmltYXJ5XCJdLFxuICAvL1tcInJlc3BvbnNpYmlsaXR5XCIsIFwidmlydHVhbDpjb2xsZWN0aW9uX2lkX3ByaW1hcnlcIl0gLy8gZGFzIHplaWd0IGF1ZiBcInNhbW1sdW5nc3p1Z2Vow7ZyaWdrZWl0XCIgdW5kIGlzdCBmYWxzY2hcbl0pO1xuLypcblRoaXMgbWFwIG91ciBjb2x1bW4gXCJuYW1lc1wiIHRvIHRoZSB2YWxpZCB2YWx1ZXMgb2YgdGhlIHZpcnR1YWw6ZWRpdG9yaWFsX2V4Y2x1c2lvbiBGaWx0ZXJcbiovXG5cbmNvbnN0IElTU1VFVFlQRTJGSUxURVJTOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbXCJ3aXRob3V0X3RpdGxlXCIsIFwibWlzc2luZ190aXRsZVwiXSxcbiAgW1wid2l0aG91dF9kZXNjcmlwdGlvblwiLCBcIm1pc3NpbmdfZGVzY3JpcHRpb25cIl0sXG4gIFtcIndpdGhvdXRfZWR1Y2F0aW9uX2xldmVsXCIsIFwibWlzc2luZ19lZHVjYXRpb25hbGNvbnRleHRcIl0sXG4gIFtcIndpdGhvdXRfdGFyZ2V0X2dyb3VwXCIsIFwibWlzc2luZ19lZHVjYXRpb25hbGludGVuZGVkZW5kdXNlcnJvbGVcIl0sXG4gIFtcIndpdGhvdXRfdGF4b25vbXlfaWRcIiwgXCJtaXNzaW5nX3RheG9uaWRcIl0sXG4gIFtcIndpdGhvdXRfY2F0ZWdvcnlcIiwgXCJtaXNzaW5nX29laF9scnRcIl0sXG4gIFtcIndpdGhvdXRfbGljZW5zZVwiLCBcIm1pc3NpbmdfbGljZW5zZVwiXVxuXSk7XG4vKlxuaW50ZXJlc3RpbmdseSBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbWJpbmUgdGhlIG5vZGVSZWYuaWRcbndpdGggaHR0cHM6Ly92b2NhYnMub3BlbmVkdWh1Yi5kZS93M2lkLm9yZy9vcGVuZWR1aHViL3ZvY2Ficy9vZWgtdG9waWNzL3tub2RlUmVmLmlkfVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFZGl0b3JpYWxMaW5rU2VydmljZSB7XG4gIHByaXZhdGUgZW52ID0gaW5qZWN0KEVudkhlbHBlclNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgcHVibGljIG9wZW5CeVJlcGxpY2F0aW9uc291cmNlQW5kSXNzdWVUeXBlV2l0aEZpbHRlcnMoc291cmNlOiBzdHJpbmcsIGlzc3VlOiBzdHJpbmcgLCBzZWxlY3RlZEZpbHRlcnM6eyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB8IHVuZGVmaW5lZH0pOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBmaWx0ZXJzW1widmlydHVhbDphdWRpdF9maWx0ZXJcIl0gPSBbXCJhbGxcIl07XG4gICAgZmlsdGVyc1tcImNjbTpvZWhfcHVibGlzaGVyX2NvbWJpbmVkXCJdID0gW3NvdXJjZV07XG4gICAgZmlsdGVyc1tcInZpcnR1YWw6ZWRpdG9yaWFsX2V4Y2x1c2lvblwiXSA9IFsgSVNTVUVUWVBFMkZJTFRFUlMuZ2V0KCBpc3N1ZSApXTtcbiAgICBmb3IgKCBjb25zdCBbZmllbGQsIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRGaWx0ZXJzKSAgKSB7XG4gICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZWRpdG9yaWFsRmlsdGVybmFtZSA9IFBST1BFUlRJRVMyRklMVEVSUy5nZXQoZmllbGQpIGFzIHN0cmluZztcbiAgICAgICAgZmlsdGVyc1tlZGl0b3JpYWxGaWx0ZXJuYW1lXSA9IHZhbHVlc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRoZVVybDogVVJMID0gbmV3IFVSTCh0aGlzLmVudi5lZHVTaGFyaW5nUGF0aCArIFwiL2NvbXBvbmVudHMvZWRpdG9yaWFsLWRlc2tcIik7XG4gICAgY29uc3QgcGFyYW1zID0gdGhlVXJsLnNlYXJjaFBhcmFtcztcbiAgICBwYXJhbXMuc2V0KFwibW9kZVwiLCBcImF1ZGl0XCIpO1xuICAgIHBhcmFtcy5zZXQoXCJmaWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGZpbHRlcnMpICk7XG4gICAgd2luZG93Lm9wZW4odGhlVXJsLCBcImVkaXRvcl9mcm9udGVuZFwiKVxuICB9XG4gIHB1YmxpYyBvcGVuQnlDb2xsZWN0aW9uQW5kSXNzdWVUeXBlKGNvbGxlY3Rpb25JZDogc3RyaW5nLCBpc3N1ZVR5cGU6IHN0cmluZywgcGFnZVRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBmaWx0ZXJzW1widmlydHVhbDphdWRpdF9maWx0ZXJcIl0gPSBbXCJhbGxcIl07XG4gICAgZmlsdGVyc1tcInZpcnR1YWw6ZWRpdG9yaWFsX2V4Y2x1c2lvblwiXSA9IFsgSVNTVUVUWVBFMkZJTFRFUlMuZ2V0KCBpc3N1ZVR5cGUgKV07XG4gICAgZmlsdGVyc1tcInZpcnR1YWw6Y29sbGVjdGlvbl9pZF9wcmltYXJ5XCJdID0gW2NvbGxlY3Rpb25JZF07XG4gICAgY29uc3QgdGhlVXJsOiBVUkwgPSBuZXcgVVJMKHRoaXMuZW52LmVkdVNoYXJpbmdQYXRoICsgXCIvY29tcG9uZW50cy9lZGl0b3JpYWwtZGVza1wiKTtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGVVcmwuc2VhcmNoUGFyYW1zO1xuICAgIHBhcmFtcy5zZXQoXCJ0aXRsZVwiLCBwYWdlVGl0bGUpXG4gICAgcGFyYW1zLnNldChcIm1vZGVcIiwgXCJhdWRpdFwiKTtcbiAgICBwYXJhbXMuc2V0KFwiZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSApO1xuICAgIHdpbmRvdy5vcGVuKHRoZVVybCwgXCJlZGl0b3JfZnJvbnRlbmRcIilcbiAgfVxuXG4gIHB1YmxpYyBvcGVuQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIGNvbnN0IHRoZVVybDogVVJMID0gbmV3IFVSTCh0aGlzLmVudi5lZHVTaGFyaW5nUGF0aCArIFwiL2NvbXBvbmVudHMvZWRpdG9yaWFsLWRlc2tcIik7XG4gICAgY29uc3QgcGFyYW1zID0gdGhlVXJsLnNlYXJjaFBhcmFtcztcbiAgICBwYXJhbXMuc2V0KFwiaWRzXCIsIGNvbGxlY3Rpb25JZCk7XG4gICAgcGFyYW1zLnNldChcIm1vZGVcIiwgXCJyZW5kZXJcIik7XG4gICAgd2luZG93Lm9wZW4odGhlVXJsLCBcImVkaXRvcl9mcm9udGVuZFwiKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Component, Input, input, LOCALE_ID } from '@angular/core';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
|
|
4
|
+
import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker';
|
|
5
|
+
import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';
|
|
6
|
+
import { MatInput } from '@angular/material/input';
|
|
7
|
+
import { MAT_LUXON_DATE_ADAPTER_OPTIONS, provideLuxonDateAdapter } from '@angular/material-luxon-adapter';
|
|
8
|
+
import { MAT_DATE_LOCALE } from '@angular/material/core';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/forms";
|
|
11
|
+
const datePickerFormats = {
|
|
12
|
+
parse: {
|
|
13
|
+
dateInput: 'D',
|
|
14
|
+
},
|
|
15
|
+
display: {
|
|
16
|
+
dateInput: 'D',
|
|
17
|
+
monthYearLabel: 'MMMM yyyy',
|
|
18
|
+
dateA11yLabel: 'DDD',
|
|
19
|
+
monthYearA11yLabel: 'MMMM yyyy',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export class DatepickerComponent {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.disabled = input(false);
|
|
25
|
+
}
|
|
26
|
+
ngOnDestroy() {
|
|
27
|
+
//defer this to avoid an ExpressionChangedAfterItHasBeenCheckedError on the parent component
|
|
28
|
+
Promise.resolve().then(() => this.inputGroup.reset());
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DatepickerComponent, isStandalone: true, selector: "lib-datepicker", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inputGroup: { classPropertyName: "inputGroup", publicName: "inputGroup", isSignal: false, isRequired: true, transformFunction: null } }, providers: [
|
|
32
|
+
provideLuxonDateAdapter(datePickerFormats),
|
|
33
|
+
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
34
|
+
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
35
|
+
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
36
|
+
], ngImport: i0, template: "<mat-card>\n <mat-card-header>\n <mat-card-title> Zeitlicher Vergleich </mat-card-title>\n </mat-card-header>\n <mat-card-content [formGroup]=\"inputGroup\">\n <!-- start date -->\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker1\" formControlName=\"start\"\n placeholder=\"Starts date\"\n >\n<!--\n <mat-hint>d.M.yyyy</mat-hint>\n-->\n <mat-datepicker-toggle matIconSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-datepicker #picker1 [startAt]=\"inputGroup.controls.start.defaultValue\">\n </mat-datepicker>\n </mat-form-field>\n <!-- /start date -->\n <!-- end date -->\n <mat-form-field>\n <mat-label>Zeitpunkt2</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker2\"\n formControlName=\"end\"\n placeholder=\"End date\"\n >\n <!--\n <mat-hint>d.M.yyyy</mat-hint>\n -->\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker #picker2 [startAt]=\"inputGroup.controls.end.value\">\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n </mat-card-content>\n</mat-card>", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
37
|
+
}
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
39
|
+
type: Component,
|
|
40
|
+
args: [{ selector: 'lib-datepicker', standalone: true, imports: [
|
|
41
|
+
FormsModule,
|
|
42
|
+
MatCard,
|
|
43
|
+
MatCardContent,
|
|
44
|
+
MatCardHeader,
|
|
45
|
+
MatCardTitle,
|
|
46
|
+
MatDatepicker,
|
|
47
|
+
MatDatepickerInput,
|
|
48
|
+
MatDatepickerToggle,
|
|
49
|
+
MatFormField,
|
|
50
|
+
MatInput,
|
|
51
|
+
MatLabel,
|
|
52
|
+
MatSuffix,
|
|
53
|
+
ReactiveFormsModule,
|
|
54
|
+
], providers: [
|
|
55
|
+
provideLuxonDateAdapter(datePickerFormats),
|
|
56
|
+
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
57
|
+
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
58
|
+
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
59
|
+
], template: "<mat-card>\n <mat-card-header>\n <mat-card-title> Zeitlicher Vergleich </mat-card-title>\n </mat-card-header>\n <mat-card-content [formGroup]=\"inputGroup\">\n <!-- start date -->\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker1\" formControlName=\"start\"\n placeholder=\"Starts date\"\n >\n<!--\n <mat-hint>d.M.yyyy</mat-hint>\n-->\n <mat-datepicker-toggle matIconSuffix [for]=\"picker1\"></mat-datepicker-toggle>\n <mat-datepicker #picker1 [startAt]=\"inputGroup.controls.start.defaultValue\">\n </mat-datepicker>\n </mat-form-field>\n <!-- /start date -->\n <!-- end date -->\n <mat-form-field>\n <mat-label>Zeitpunkt2</mat-label>\n <input matInput\n [min]=\"inputGroup.controls.start.defaultValue\"\n [max]=\"inputGroup.controls.end.defaultValue\"\n [matDatepicker]=\"picker2\"\n formControlName=\"end\"\n placeholder=\"End date\"\n >\n <!--\n <mat-hint>d.M.yyyy</mat-hint>\n -->\n <mat-datepicker-toggle matIconSuffix [for]=\"picker2\"></mat-datepicker-toggle>\n <mat-datepicker #picker2 [startAt]=\"inputGroup.controls.end.value\">\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n </mat-card-content>\n</mat-card>" }]
|
|
60
|
+
}], ctorParameters: () => [], propDecorators: { inputGroup: [{
|
|
61
|
+
type: Input,
|
|
62
|
+
args: [{ required: true }]
|
|
63
|
+
}] } });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFlLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQTBCLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7OztBQUV6RSxNQUFNLGlCQUFpQixHQUFtQjtJQUN4QyxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsR0FBRztLQUNmO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLEdBQUc7UUFDZCxjQUFjLEVBQUUsV0FBVztRQUMzQixhQUFhLEVBQUUsS0FBSztRQUNwQixrQkFBa0IsRUFBRSxXQUFXO0tBQ2hDO0NBQ0YsQ0FBQztBQTZCRixNQUFNLE9BQU8sbUJBQW1CO0lBTTlCO1FBTEEsYUFBUSxHQUF5QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFLL0IsQ0FBQztJQUVoQixXQUFXO1FBQ1QsNEZBQTRGO1FBQzVGLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBWFUsbUJBQW1CO21HQUFuQixtQkFBbUIsaVZBVG5CO1lBQ1QsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7WUFDekMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7WUFDL0MsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUU7U0FDM0YsMEJDN0NILHErQ0F5Q1cseUREZlAsV0FBVyxtakJBQ1gsT0FBTyxvR0FDUCxjQUFjLDZEQUNkLGFBQWEsNERBQ2IsWUFBWSw2RkFDWixhQUFhLHdGQUNiLGtCQUFrQixtS0FDbEIsbUJBQW1CLDZLQUNuQixZQUFZLDRMQUNaLFFBQVEsaVVBQ1IsUUFBUSxzREFDUixTQUFTLG9IQUNULG1CQUFtQjs7NEZBV1YsbUJBQW1CO2tCQTNCL0IsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixRQUFRO3dCQUNSLFNBQVM7d0JBQ1QsbUJBQW1CO3FCQUNwQixhQUNVO3dCQUNULHVCQUF1QixDQUFDLGlCQUFpQixDQUFDO3dCQUMxQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTt3QkFDekMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7d0JBQy9DLEVBQUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO3FCQUMzRjt3REFRRCxVQUFVO3NCQURULEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgaW5wdXQsIElucHV0U2lnbmFsLCBMT0NBTEVfSUQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDYXJkLCBNYXRDYXJkQ29udGVudCwgTWF0Q2FyZEhlYWRlciwgTWF0Q2FyZFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXQsIE1hdERhdGVwaWNrZXJUb2dnbGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwsIE1hdFN1ZmZpeCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IE1BVF9MVVhPTl9EQVRFX0FEQVBURVJfT1BUSU9OUywgcHJvdmlkZUx1eG9uRGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1sdXhvbi1hZGFwdGVyJztcbmltcG9ydCB7IE1BVF9EQVRFX0xPQ0FMRSwgTWF0RGF0ZUZvcm1hdHMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuY29uc3QgZGF0ZVBpY2tlckZvcm1hdHM6IE1hdERhdGVGb3JtYXRzID0ge1xuICBwYXJzZToge1xuICAgIGRhdGVJbnB1dDogJ0QnLFxuICB9LFxuICBkaXNwbGF5OiB7XG4gICAgZGF0ZUlucHV0OiAnRCcsXG4gICAgbW9udGhZZWFyTGFiZWw6ICdNTU1NIHl5eXknLFxuICAgIGRhdGVBMTF5TGFiZWw6ICdEREQnLFxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NTU0geXl5eScsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0ZXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdENhcmRIZWFkZXIsXG4gICAgTWF0Q2FyZFRpdGxlLFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZXBpY2tlcklucHV0LFxuICAgIE1hdERhdGVwaWNrZXJUb2dnbGUsXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdElucHV0LFxuICAgIE1hdExhYmVsLFxuICAgIE1hdFN1ZmZpeCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlTHV4b25EYXRlQWRhcHRlcihkYXRlUGlja2VyRm9ybWF0cyksXG4gICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZVZhbHVlOiAnZGUtREUnIH0sXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9MT0NBTEUsIHVzZVZhbHVlOiAnZGUtREUnIH0sXG4gICAgeyBwcm92aWRlOiBNQVRfTFVYT05fREFURV9BREFQVEVSX09QVElPTlMsIHVzZVZhbHVlOiB7IHVzZVV0YzogdHJ1ZSwgZmlyc3REYXlPZldlZWs6IDEgfSB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgZGlzYWJsZWQ6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQoZmFsc2UpO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGlucHV0R3JvdXA6IEZvcm1Hcm91cDx7IHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47IGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+IH0+O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvL2RlZmVyIHRoaXMgdG8gYXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvciBvbiB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5pbnB1dEdyb3VwLnJlc2V0KCkpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPiBaZWl0bGljaGVyIFZlcmdsZWljaCA8L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgW2Zvcm1Hcm91cF09XCJpbnB1dEdyb3VwXCI+XG4gICAgPCEtLSBzdGFydCBkYXRlIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+WmVpdHB1bmt0IDE8L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgIFttaW5dPVwiaW5wdXRHcm91cC5jb250cm9scy5zdGFydC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgIFttYXhdPVwiaW5wdXRHcm91cC5jb250cm9scy5lbmQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIxXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIlxuICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3RhcnRzIGRhdGVcIlxuICAgICAgPlxuPCEtLVxuICAgICAgPG1hdC1oaW50PmQuTS55eXl5PC9tYXQtaGludD5cbi0tPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyMVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIxIFtzdGFydEF0XT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCI+XG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPCEtLSAvc3RhcnQgZGF0ZSAtLT5cbiAgICA8IS0tIGVuZCBkYXRlIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+WmVpdHB1bmt0MjwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgW21pbl09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLnN0YXJ0LmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgICAgW21heF09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLmVuZC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlcjJcIlxuICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZFwiXG4gICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiXG4gICAgICA+XG4gICAgICA8IS0tXG4gICAgICA8bWF0LWhpbnQ+ZC5NLnl5eXk8L21hdC1oaW50PlxuICAgICAgLS0+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGVwaWNrZXIgICNwaWNrZXIyIFtzdGFydEF0XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLnZhbHVlXCI+XG4gICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPCEtLSAvZW5kIGRhdGUgLS0+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+Il19
|