ngx-edu-sharing-metaqs2 0.9.53 → 0.9.54
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 +1 -14
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +195 -197
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
- package/lib/components/collection-issues/collection-issues.component.d.ts +1 -1
- package/lib/components/donut-chart-tooltip/donut-chart-tooltip.component.d.ts +1 -1
- package/lib/components/filter/quality-matrix-filter.component.d.ts +4 -6
- package/lib/components/material-issues/material-issues.component.d.ts +1 -1
- package/lib/components/node-entry/node-entry.component.d.ts +1 -1
- package/lib/components/node-list/node-list.component.d.ts +1 -1
- package/lib/components/quality-matrix/quality_matrix.d.ts +1 -3
- package/lib/counts-with-history/counts-with-history.component.d.ts +1 -1
- package/lib/ng-meta-widgets-lib.module.d.ts +34 -37
- package/lib/node-image-url.pipe.d.ts +1 -1
- package/lib/wrap-observable.pipe.d.ts +1 -1
- package/package.json +6 -8
- package/esm2022/lib/collection-count-history/collection-count-history.component.mjs +0 -131
- package/esm2022/lib/collection-count-history/monthpicker/monthpicker.component.mjs +0 -114
- package/esm2022/lib/components/collection-issues/collection-issues.component.mjs +0 -23
- package/esm2022/lib/components/donut-chart/donut-chart.component.mjs +0 -85
- package/esm2022/lib/components/donut-chart/donut-chart.model.mjs +0 -2
- package/esm2022/lib/components/donut-chart/donut-chart.pipe.mjs +0 -50
- package/esm2022/lib/components/donut-chart-tooltip/donut-chart-tooltip.component.mjs +0 -79
- package/esm2022/lib/components/editorial-link-service/editorial-link.service.mjs +0 -169
- package/esm2022/lib/components/filter/datepicker/datepicker.component.mjs +0 -99
- package/esm2022/lib/components/filter/quality-matrix-filter.component.mjs +0 -47
- package/esm2022/lib/components/loading_indicator/overlay/overlay.service.mjs +0 -41
- package/esm2022/lib/components/loading_indicator/progress-spinner/progress-spinner.component.mjs +0 -65
- package/esm2022/lib/components/material-issues/material-issues.component.mjs +0 -23
- package/esm2022/lib/components/node-entry/node-entry.component.mjs +0 -35
- package/esm2022/lib/components/node-list/node-list.component.mjs +0 -112
- package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +0 -413
- package/esm2022/lib/components/quality-matrix/scroll-marker.directive.mjs +0 -17
- package/esm2022/lib/config-helper.service.mjs +0 -32
- package/esm2022/lib/core/svg-icons.service.mjs +0 -44
- package/esm2022/lib/core/tooltip.service.mjs +0 -146
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +0 -203
- package/esm2022/lib/java-api/api/api.mjs +0 -12
- package/esm2022/lib/java-api/api/authProxyController.service.mjs +0 -107
- package/esm2022/lib/java-api/api/collectionAPI.service.mjs +0 -409
- package/esm2022/lib/java-api/api/editorsAPI.service.mjs +0 -157
- package/esm2022/lib/java-api/api/filterAPI.service.mjs +0 -237
- package/esm2022/lib/java-api/api/replicationSourceAPI.service.mjs +0 -230
- package/esm2022/lib/java-api/api.base.service.mjs +0 -66
- package/esm2022/lib/java-api/api.module.mjs +0 -40
- package/esm2022/lib/java-api/configuration.mjs +0 -103
- package/esm2022/lib/java-api/encoder.mjs +0 -19
- package/esm2022/lib/java-api/index.mjs +0 -7
- package/esm2022/lib/java-api/model/collectionWithMissingAttributes.mjs +0 -11
- package/esm2022/lib/java-api/model/count.mjs +0 -11
- package/esm2022/lib/java-api/model/eduCollection.mjs +0 -11
- package/esm2022/lib/java-api/model/filter.mjs +0 -2
- package/esm2022/lib/java-api/model/filterValue.mjs +0 -11
- package/esm2022/lib/java-api/model/materialCountDto.mjs +0 -2
- package/esm2022/lib/java-api/model/materialCountFilter.mjs +0 -11
- package/esm2022/lib/java-api/model/materialWithMissingAttributes.mjs +0 -11
- package/esm2022/lib/java-api/model/matrixRowWithCounts.mjs +0 -2
- package/esm2022/lib/java-api/model/matrixWithCounts.mjs +0 -2
- package/esm2022/lib/java-api/model/missingAttributeResult.mjs +0 -2
- package/esm2022/lib/java-api/model/models.mjs +0 -16
- package/esm2022/lib/java-api/model/qualityMatrix.mjs +0 -2
- package/esm2022/lib/java-api/model/qualityMatrixHeader.mjs +0 -11
- package/esm2022/lib/java-api/model/qualityMatrixReplicationSourceCounts.mjs +0 -11
- package/esm2022/lib/java-api/model/qualityMatrixRow.mjs +0 -2
- package/esm2022/lib/java-api/param.mjs +0 -2
- package/esm2022/lib/java-api/variables.mjs +0 -9
- package/esm2022/lib/meta-api.service.mjs +0 -77
- package/esm2022/lib/ng-meta-widgets-lib.module.mjs +0 -198
- package/esm2022/lib/node-image-url.pipe.mjs +0 -29
- package/esm2022/lib/tree-collection-details/tree-collection-details.component.mjs +0 -87
- package/esm2022/lib/tree-license/tree-license.component.mjs +0 -136
- package/esm2022/lib/tree-search-counts/inline-worker.mjs +0 -102
- package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +0 -209
- package/esm2022/lib/wrap-observable.pipe.mjs +0 -21
- package/esm2022/ngx-edu-sharing-metaqs2.mjs +0 -5
- package/esm2022/public-api.mjs +0 -18
- package/esm2022/web-components.mjs +0 -36
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import { DonutChartPipe } from './donut-chart.pipe';
|
|
3
|
-
import { NgForOf, NgIf } from '@angular/common';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
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, isStandalone: true, selector: "metaqs2-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
|
|
32
|
-
*ngFor="
|
|
33
|
-
let slice of data | slicesWithCommandsAndOffset : radius : viewBox : borderSize;
|
|
34
|
-
trackBy: trackByFn;
|
|
35
|
-
let index = index
|
|
36
|
-
"
|
|
37
|
-
[attr.fill]="slice.color"
|
|
38
|
-
stroke="white"
|
|
39
|
-
paint-order="stroke"
|
|
40
|
-
stroke-opacity="1"
|
|
41
|
-
[attr.stroke-width]="strokeWidth"
|
|
42
|
-
[attr.d]="slice.commands"
|
|
43
|
-
[attr.transform]="'rotate(' + slice.offset + ')'"
|
|
44
|
-
(click)="slice.onClickCb?.()"
|
|
45
|
-
>
|
|
46
|
-
<title>{{ slice.label }}</title>
|
|
47
|
-
</path>
|
|
48
|
-
</svg>
|
|
49
|
-
`, 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: "pipe", type: DonutChartPipe, name: "slicesWithCommandsAndOffset" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
50
|
-
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartComponent, decorators: [{
|
|
52
|
-
type: Component,
|
|
53
|
-
args: [{ selector: 'metaqs2-donut-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
54
|
-
<svg [attr.viewBox]="'0 0 ' + viewBox + ' ' + viewBox" *ngIf="data">
|
|
55
|
-
<path
|
|
56
|
-
*ngFor="
|
|
57
|
-
let slice of data | slicesWithCommandsAndOffset : radius : viewBox : borderSize;
|
|
58
|
-
trackBy: trackByFn;
|
|
59
|
-
let index = index
|
|
60
|
-
"
|
|
61
|
-
[attr.fill]="slice.color"
|
|
62
|
-
stroke="white"
|
|
63
|
-
paint-order="stroke"
|
|
64
|
-
stroke-opacity="1"
|
|
65
|
-
[attr.stroke-width]="strokeWidth"
|
|
66
|
-
[attr.d]="slice.commands"
|
|
67
|
-
[attr.transform]="'rotate(' + slice.offset + ')'"
|
|
68
|
-
(click)="slice.onClickCb?.()"
|
|
69
|
-
>
|
|
70
|
-
<title>{{ slice.label }}</title>
|
|
71
|
-
</path>
|
|
72
|
-
</svg>
|
|
73
|
-
`, imports: [DonutChartPipe, NgForOf, NgIf], standalone: 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"] }]
|
|
74
|
-
}], propDecorators: { radius: [{
|
|
75
|
-
type: Input
|
|
76
|
-
}], viewBox: [{
|
|
77
|
-
type: Input
|
|
78
|
-
}], borderSize: [{
|
|
79
|
-
type: Input
|
|
80
|
-
}], strokeWidth: [{
|
|
81
|
-
type: Input
|
|
82
|
-
}], data: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZG9udXQtY2hhcnQvZG9udXQtY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUVoRDs7Ozs7R0FLRztBQTZCSCxNQUFNLE9BQU8sbUJBQW1CO0lBNUJoQztRQTZCVyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osWUFBTyxHQUFHLEdBQUcsQ0FBQztRQUNkLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsU0FBSSxHQUFpQixFQUFFLENBQUM7S0FZbEM7SUFWQyxRQUFRO1FBQ04sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2pHLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFpQjtRQUN4QyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbEIsQ0FBQzsrR0FoQlUsbUJBQW1CO21HQUFuQixtQkFBbUIscU1BeEJwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQlQsMFFBQ1MsY0FBYyxvRUFBRSxPQUFPLG1IQUFFLElBQUk7OzRGQUc1QixtQkFBbUI7a0JBNUIvQixTQUFTOytCQUNFLHFCQUFxQixtQkFFZCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVCxXQUNRLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FDNUIsSUFBSTs4QkFHUCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi9kb251dC1jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBEb251dENoYXJ0UGlwZSB9IGZyb20gJy4vZG9udXQtY2hhcnQucGlwZSc7XG5pbXBvcnQgeyBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBBIGRvbnV0IGNoYXJ0IGNvbXBvbmVudCB0aGF0IGRpc3BsYXlzIGEgbGlzdCBvZiBzbGljZXMuXG4gKiBUaGUgY2hhcnQgaXMgZGl2aWRlZCBpbnRvIHNsaWNlcywgZWFjaCBzbGljZSBoYXMgYSBjb2xvciBhbmQgYSBsYWJlbC5cbiAqIEVhY2ggc2xpY2UgaXMgcmVwcmVzZW50ZWQgYnkgYSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBjaGFydC5cbiAqIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly9tZWRpdW0uY29tL0B0aGVBbmd1bGFyR3V5L2hvdy10by1jcmVhdGUtYW4taW50ZXJhY3RpdmUtZG9udXQtY2hhcnQtdXNpbmctc3ZnLTEwN2NiZjBiNWI2XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItZG9udXQtY2hhcnQnLFxuICBzdHlsZVVybHM6IFsnLi9kb251dC1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c3ZnIFthdHRyLnZpZXdCb3hdPVwiJzAgMCAnICsgdmlld0JveCArICcgJyArIHZpZXdCb3hcIiAqbmdJZj1cImRhdGFcIj5cbiAgICAgIDxwYXRoXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBzbGljZSBvZiBkYXRhIHwgc2xpY2VzV2l0aENvbW1hbmRzQW5kT2Zmc2V0IDogcmFkaXVzIDogdmlld0JveCA6IGJvcmRlclNpemU7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZuO1xuICAgICAgICAgIGxldCBpbmRleCA9IGluZGV4XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmZpbGxdPVwic2xpY2UuY29sb3JcIlxuICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgIHBhaW50LW9yZGVyPVwic3Ryb2tlXCJcbiAgICAgICAgc3Ryb2tlLW9wYWNpdHk9XCIxXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCJcbiAgICAgICAgW2F0dHIuZF09XCJzbGljZS5jb21tYW5kc1wiXG4gICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCIncm90YXRlKCcgKyBzbGljZS5vZmZzZXQgKyAnKSdcIlxuICAgICAgICAoY2xpY2spPVwic2xpY2Uub25DbGlja0NiPy4oKVwiXG4gICAgICA+XG4gICAgICAgIDx0aXRsZT57eyBzbGljZS5sYWJlbCB9fTwvdGl0bGU+XG4gICAgICA8L3BhdGg+XG4gICAgPC9zdmc+XG4gIGAsXG4gIGltcG9ydHM6IFtEb251dENoYXJ0UGlwZSwgTmdGb3JPZiwgTmdJZl0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIERvbnV0Q2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByYWRpdXMgPSA1MDtcbiAgQElucHV0KCkgdmlld0JveCA9IDEwMDtcbiAgQElucHV0KCkgYm9yZGVyU2l6ZSA9IDIwO1xuICBASW5wdXQoKSBzdHJva2VXaWR0aCA9IDU7XG4gIEBJbnB1dCgpIGRhdGE6IERvbnV0U2xpY2VbXSA9IFtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuZGF0YT8ucmVkdWNlKChhY2N1LCBzbGljZSkgPT4gYWNjdSArIHNsaWNlLnBlcmNlbnQsIDApO1xuICAgIGlmIChzdW0gIT09IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3VtIG9mIGFsbCBzbGljZXMgb2YgdGhlIGRvbnV0IGNoYXJ0IG11c3QgZXF1YWwgdG8gMTAwJS4gRm91bmQ6ICR7c3VtfS5gKTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgc2xpY2U6IERvbnV0U2xpY2UpIHtcbiAgICByZXR1cm4gc2xpY2UuaWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9kb251dC1jaGFydC9kb251dC1jaGFydC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEb251dFNsaWNlIHtcbiAgaWQ6IG51bWJlcjtcbiAgcGVyY2VudDogbnVtYmVyO1xuICBjb2xvcjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdmVyYm9zZUxhYmVsPzogc3RyaW5nO1xuICBvbkNsaWNrQ2I/OiAoKSA9PiB2b2lkO1xufVxuIl19
|
|
@@ -1,50 +0,0 @@
|
|
|
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, isStandalone: true, 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
|
-
standalone: true,
|
|
48
|
-
}]
|
|
49
|
-
}] });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBYXBELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFNBQVMsQ0FBQyxXQUF5QixFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsVUFBa0I7UUFDdEYsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9CLHdFQUF3RTtZQUN4RSxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDL0QsTUFBTSxpQkFBaUIsR0FBMkI7Z0JBQ2hELEdBQUcsS0FBSztnQkFDUixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQzFFLE1BQU0sRUFBRSxlQUFlLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNuQyxDQUFDO1lBQ0YsZUFBZSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDakMsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFzQixFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsVUFBa0I7UUFDMUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBRXhDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxNQUFNLE1BQU0sWUFBWSxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqSCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFXLElBQUksV0FBVyxNQUFNLFlBQVksTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFdBQVcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqSCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsT0FBZTtRQUNoRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQzsrR0F2Q1UsY0FBYzs2R0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUwxQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSw2QkFBNkI7b0JBQ25DLElBQUksRUFBRSxJQUFJO29CQUNWLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbnV0U2xpY2UgfSBmcm9tICcuL2RvbnV0LWNoYXJ0Lm1vZGVsJztcblxuaW50ZXJmYWNlIERvbnV0U2xpY2VXaXRoQ29tbWFuZHMgZXh0ZW5kcyBEb251dFNsaWNlIHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGNvbW1hbmRzOiBzdHJpbmc7XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NsaWNlc1dpdGhDb21tYW5kc0FuZE9mZnNldCcsXG4gIHB1cmU6IHRydWUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIERvbnV0Q2hhcnRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShkb251dFNsaWNlczogRG9udXRTbGljZVtdLCByYWRpdXM6IG51bWJlciwgc3ZnU2l6ZTogbnVtYmVyLCBib3JkZXJTaXplOiBudW1iZXIpOiBEb251dFNsaWNlV2l0aENvbW1hbmRzW10ge1xuICAgIGxldCBwcmV2aW91c1BlcmNlbnQgPSAwO1xuICAgIHJldHVybiBkb251dFNsaWNlcy5tYXAoKHNsaWNlKSA9PiB7XG4gICAgICAvLyB0aGlzIGlzIGEgaGFjayB0byB0aGF0IHRoZSBjaXJjbGUgaXMgcmVuZGVyZWQgd2hlbiB0aGUgcGVyY2VudCBpcyAxMDBcbiAgICAgIHNsaWNlLnBlcmNlbnQgPSBzbGljZS5wZXJjZW50ID09PSAxMDAgPyA5OS45OTkgOiBzbGljZS5wZXJjZW50O1xuICAgICAgY29uc3Qgc2xpY2VXaXRoQ29tbWFuZHM6IERvbnV0U2xpY2VXaXRoQ29tbWFuZHMgPSB7XG4gICAgICAgIC4uLnNsaWNlLFxuICAgICAgICBjb21tYW5kczogYCR7dGhpcy5nZXRTbGljZUNvbW1hbmRzKHNsaWNlLCByYWRpdXMsIHN2Z1NpemUsIGJvcmRlclNpemUpfSB6YCxcbiAgICAgICAgb2Zmc2V0OiBwcmV2aW91c1BlcmNlbnQgKiAzLjYgKiAtMSxcbiAgICAgIH07XG4gICAgICBwcmV2aW91c1BlcmNlbnQgKz0gc2xpY2UucGVyY2VudDtcbiAgICAgIHJldHVybiBzbGljZVdpdGhDb21tYW5kcztcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNsaWNlQ29tbWFuZHMoZG9udXRTbGljZTogRG9udXRTbGljZSwgcmFkaXVzOiBudW1iZXIsIHN2Z1NpemU6IG51bWJlciwgYm9yZGVyU2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWdyZWVzID0gdGhpcy5wZXJjZW50VG9EZWdyZWVzKGRvbnV0U2xpY2UucGVyY2VudCk7XG4gICAgY29uc3QgbG9uZ1BhdGhGbGFnID0gZGVncmVlcyA+IDE4MCA/IDEgOiAwO1xuICAgIGNvbnN0IGlubmVyUmFkaXVzID0gcmFkaXVzIC0gYm9yZGVyU2l6ZTtcblxuICAgIGNvbnN0IGNvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbW1hbmRzLnB1c2goYE0gJHtzdmdTaXplIC8gMiArIHJhZGl1c30gJHtzdmdTaXplIC8gMn1gKTtcbiAgICBjb21tYW5kcy5wdXNoKGBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAke2xvbmdQYXRoRmxhZ30gMCAke3RoaXMuZ2V0Q29vcmRGcm9tRGVncmVlcyhkZWdyZWVzLCByYWRpdXMsIHN2Z1NpemUpfWApO1xuICAgIGNvbW1hbmRzLnB1c2goYEwgJHt0aGlzLmdldENvb3JkRnJvbURlZ3JlZXMoZGVncmVlcywgaW5uZXJSYWRpdXMsIHN2Z1NpemUpfWApO1xuICAgIGNvbW1hbmRzLnB1c2goYEEgJHtpbm5lclJhZGl1c30gJHtpbm5lclJhZGl1c30gMCAke2xvbmdQYXRoRmxhZ30gMSAke3N2Z1NpemUgLyAyICsgaW5uZXJSYWRpdXN9ICR7c3ZnU2l6ZSAvIDJ9YCk7XG4gICAgcmV0dXJuIGNvbW1hbmRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldENvb3JkRnJvbURlZ3JlZXMoYW5nbGU6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHN2Z1NpemU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgeCA9IE1hdGguY29zKChhbmdsZSAqIE1hdGguUEkpIC8gMTgwKTtcbiAgICBjb25zdCB5ID0gTWF0aC5zaW4oKGFuZ2xlICogTWF0aC5QSSkgLyAxODApO1xuICAgIGNvbnN0IGNvb3JkWCA9IHggKiByYWRpdXMgKyBzdmdTaXplIC8gMjtcbiAgICBjb25zdCBjb29yZFkgPSB5ICogLXJhZGl1cyArIHN2Z1NpemUgLyAyO1xuICAgIHJldHVybiBgJHtjb29yZFh9ICR7Y29vcmRZfWA7XG4gIH1cblxuICBwZXJjZW50VG9EZWdyZWVzKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHBlcmNlbnQgKiAzLjY7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { Component, HostBinding, inject } from '@angular/core';
|
|
2
|
-
import { TOOLTIP_DATA } from '../../core/tooltip.service';
|
|
3
|
-
import { animate, style, transition, trigger } from '@angular/animations';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "../donut-chart/donut-chart.component";
|
|
7
|
-
export function transformDonutChartData(data) {
|
|
8
|
-
return data.map((slice) => [
|
|
9
|
-
// inverted order is necessary for the donut chart to go clockwise
|
|
10
|
-
{
|
|
11
|
-
percent: 100 - slice.percent,
|
|
12
|
-
color: 'transparent',
|
|
13
|
-
id: 999999,
|
|
14
|
-
},
|
|
15
|
-
slice,
|
|
16
|
-
]);
|
|
17
|
-
}
|
|
18
|
-
export class DonutChartTooltipComponent {
|
|
19
|
-
constructor() {
|
|
20
|
-
this.animationState = true;
|
|
21
|
-
this.data = inject(TOOLTIP_DATA);
|
|
22
|
-
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DonutChartTooltipComponent, selector: "metaqs2-donut-chart-tooltip", host: { properties: { "@fadeInOut": "this.animationState" } }, ngImport: i0, template: "<h4>{{ data.label }}</h4>\n<p>Status</p>\n<ng-container *ngFor=\"let slicePair of data.data\">\n <ng-container *ngIf=\"slicePair[1].percent > 0\">\n <div style=\"display: flex; justify-content: flex-start; align-items: center; gap: 0.25rem\">\n <metaqs2-donut-chart [data]=\"slicePair\" [borderSize]=\"25\"></metaqs2-donut-chart>\n <p>{{ slicePair[1].verboseLabel }}</p>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;margin:1rem}\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: "component", type: i2.DonutChartComponent, selector: "metaqs2-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }], animations: [
|
|
25
|
-
trigger('fadeInOut', [
|
|
26
|
-
transition(':enter', [
|
|
27
|
-
style({
|
|
28
|
-
opacity: 0,
|
|
29
|
-
scale: 0.5,
|
|
30
|
-
}),
|
|
31
|
-
animate('100ms ease-in', style({
|
|
32
|
-
opacity: 1,
|
|
33
|
-
scale: 1,
|
|
34
|
-
})),
|
|
35
|
-
]),
|
|
36
|
-
transition(':leave', [
|
|
37
|
-
style({
|
|
38
|
-
opacity: 1,
|
|
39
|
-
scale: 1,
|
|
40
|
-
}),
|
|
41
|
-
animate('100ms ease-out', style({
|
|
42
|
-
opacity: 0,
|
|
43
|
-
scale: 0.5,
|
|
44
|
-
})),
|
|
45
|
-
]),
|
|
46
|
-
]),
|
|
47
|
-
] }); }
|
|
48
|
-
}
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DonutChartTooltipComponent, decorators: [{
|
|
50
|
-
type: Component,
|
|
51
|
-
args: [{ selector: 'metaqs2-donut-chart-tooltip', animations: [
|
|
52
|
-
trigger('fadeInOut', [
|
|
53
|
-
transition(':enter', [
|
|
54
|
-
style({
|
|
55
|
-
opacity: 0,
|
|
56
|
-
scale: 0.5,
|
|
57
|
-
}),
|
|
58
|
-
animate('100ms ease-in', style({
|
|
59
|
-
opacity: 1,
|
|
60
|
-
scale: 1,
|
|
61
|
-
})),
|
|
62
|
-
]),
|
|
63
|
-
transition(':leave', [
|
|
64
|
-
style({
|
|
65
|
-
opacity: 1,
|
|
66
|
-
scale: 1,
|
|
67
|
-
}),
|
|
68
|
-
animate('100ms ease-out', style({
|
|
69
|
-
opacity: 0,
|
|
70
|
-
scale: 0.5,
|
|
71
|
-
})),
|
|
72
|
-
]),
|
|
73
|
-
]),
|
|
74
|
-
], template: "<h4>{{ data.label }}</h4>\n<p>Status</p>\n<ng-container *ngFor=\"let slicePair of data.data\">\n <ng-container *ngIf=\"slicePair[1].percent > 0\">\n <div style=\"display: flex; justify-content: flex-start; align-items: center; gap: 0.25rem\">\n <metaqs2-donut-chart [data]=\"slicePair\" [borderSize]=\"25\"></metaqs2-donut-chart>\n <p>{{ slicePair[1].verboseLabel }}</p>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;margin:1rem}\n"] }]
|
|
75
|
-
}], propDecorators: { animationState: [{
|
|
76
|
-
type: HostBinding,
|
|
77
|
-
args: ['@fadeInOut']
|
|
78
|
-
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9udXQtY2hhcnQtdG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9kb251dC1jaGFydC10b29sdGlwL2RvbnV0LWNoYXJ0LXRvb2x0aXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZG9udXQtY2hhcnQtdG9vbHRpcC9kb251dC1jaGFydC10b29sdGlwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBTzFFLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxJQUFrQjtJQUN4RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQTRCLEVBQUUsQ0FBQztRQUNuRCxrRUFBa0U7UUFDbEU7WUFDRSxPQUFPLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPO1lBQzVCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLEVBQUUsRUFBRSxNQUFNO1NBQ1g7UUFDRCxLQUFLO0tBQ04sQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQXFDRCxNQUFNLE9BQU8sMEJBQTBCO0lBbkN2QztRQW9DNkIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDakMsU0FBSSxHQUFHLE1BQU0sQ0FBd0IsWUFBWSxDQUFDLENBQUM7S0FDcEU7K0dBSFksMEJBQTBCO21HQUExQiwwQkFBMEIsa0lDekR2QyxvYkFVQSw2Z0JEZ0JjO1lBQ1YsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDbkIsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDbkIsS0FBSyxDQUFDO3dCQUNKLE9BQU8sRUFBRSxDQUFDO3dCQUNWLEtBQUssRUFBRSxHQUFHO3FCQUNYLENBQUM7b0JBQ0YsT0FBTyxDQUNMLGVBQWUsRUFDZixLQUFLLENBQUM7d0JBQ0osT0FBTyxFQUFFLENBQUM7d0JBQ1YsS0FBSyxFQUFFLENBQUM7cUJBQ1QsQ0FBQyxDQUNIO2lCQUNGLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDbkIsS0FBSyxDQUFDO3dCQUNKLE9BQU8sRUFBRSxDQUFDO3dCQUNWLEtBQUssRUFBRSxDQUFDO3FCQUNULENBQUM7b0JBQ0YsT0FBTyxDQUNMLGdCQUFnQixFQUNoQixLQUFLLENBQUM7d0JBQ0osT0FBTyxFQUFFLENBQUM7d0JBQ1YsS0FBSyxFQUFFLEdBQUc7cUJBQ1gsQ0FBQyxDQUNIO2lCQUNGLENBQUM7YUFDSCxDQUFDO1NBQ0g7OzRGQUVVLDBCQUEwQjtrQkFuQ3RDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBRzNCO3dCQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7NEJBQ25CLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQztvQ0FDSixPQUFPLEVBQUUsQ0FBQztvQ0FDVixLQUFLLEVBQUUsR0FBRztpQ0FDWCxDQUFDO2dDQUNGLE9BQU8sQ0FDTCxlQUFlLEVBQ2YsS0FBSyxDQUFDO29DQUNKLE9BQU8sRUFBRSxDQUFDO29DQUNWLEtBQUssRUFBRSxDQUFDO2lDQUNULENBQUMsQ0FDSDs2QkFDRixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQztvQ0FDSixPQUFPLEVBQUUsQ0FBQztvQ0FDVixLQUFLLEVBQUUsQ0FBQztpQ0FDVCxDQUFDO2dDQUNGLE9BQU8sQ0FDTCxnQkFBZ0IsRUFDaEIsS0FBSyxDQUFDO29DQUNKLE9BQU8sRUFBRSxDQUFDO29DQUNWLEtBQUssRUFBRSxHQUFHO2lDQUNYLENBQUMsQ0FDSDs2QkFDRixDQUFDO3lCQUNILENBQUM7cUJBQ0g7OEJBRzBCLGNBQWM7c0JBQXhDLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9udXRTbGljZSB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IERhdGFUb29sdGlwLCBUT09MVElQX0RBVEEgfSBmcm9tICcuLi8uLi9jb3JlL3Rvb2x0aXAuc2VydmljZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERvbnV0Q2hhcnRUb29sdGlwRGF0YSB7XG4gIGRhdGE6IEFycmF5PFtEb251dFNsaWNlLCBEb251dFNsaWNlXT47XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1Eb251dENoYXJ0RGF0YShkYXRhOiBEb251dFNsaWNlW10pOiBBcnJheTxbRG9udXRTbGljZSwgRG9udXRTbGljZV0+IHtcbiAgcmV0dXJuIGRhdGEubWFwKChzbGljZSk6IFtEb251dFNsaWNlLCBEb251dFNsaWNlXSA9PiBbXG4gICAgLy8gaW52ZXJ0ZWQgb3JkZXIgaXMgbmVjZXNzYXJ5IGZvciB0aGUgZG9udXQgY2hhcnQgdG8gZ28gY2xvY2t3aXNlXG4gICAge1xuICAgICAgcGVyY2VudDogMTAwIC0gc2xpY2UucGVyY2VudCxcbiAgICAgIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgaWQ6IDk5OTk5OSxcbiAgICB9LFxuICAgIHNsaWNlLFxuICBdKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1kb251dC1jaGFydC10b29sdGlwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvbnV0LWNoYXJ0LXRvb2x0aXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZG9udXQtY2hhcnQtdG9vbHRpcC5jb21wb25lbnQuY3NzJyxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhZGVJbk91dCcsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgc2NhbGU6IDAuNSxcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzEwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgIHNjYWxlOiAxLFxuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMTAwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICBzY2FsZTogMC41LFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9udXRDaGFydFRvb2x0aXBDb21wb25lbnQgaW1wbGVtZW50cyBEYXRhVG9vbHRpcDxEb251dENoYXJ0VG9vbHRpcERhdGE+IHtcbiAgQEhvc3RCaW5kaW5nKCdAZmFkZUluT3V0JykgYW5pbWF0aW9uU3RhdGUgPSB0cnVlO1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YSA9IGluamVjdDxEb251dENoYXJ0VG9vbHRpcERhdGE+KFRPT0xUSVBfREFUQSk7XG59XG4iLCI8aDQ+e3sgZGF0YS5sYWJlbCB9fTwvaDQ+XG48cD5TdGF0dXM8L3A+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzbGljZVBhaXIgb2YgZGF0YS5kYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzbGljZVBhaXJbMV0ucGVyY2VudCA+IDBcIj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDAuMjVyZW1cIj5cbiAgICAgIDxtZXRhcXMyLWRvbnV0LWNoYXJ0IFtkYXRhXT1cInNsaWNlUGFpclwiIFtib3JkZXJTaXplXT1cIjI1XCI+PC9tZXRhcXMyLWRvbnV0LWNoYXJ0PlxuICAgICAgPHA+e3sgc2xpY2VQYWlyWzFdLnZlcmJvc2VMYWJlbCB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { inject } from '@angular/core';
|
|
3
|
-
import { ConfigHelperService } from '../../config-helper.service';
|
|
4
|
-
import { MetaApiService } from '../../meta-api.service';
|
|
5
|
-
import { BehaviorSubject } from 'rxjs';
|
|
6
|
-
import { take } from 'rxjs/operators';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* This service provides methods to create links to the editorial desk with specific filters.
|
|
10
|
-
*/
|
|
11
|
-
/* This map makes it easier for me to keep track which issues are mapped to which filters */
|
|
12
|
-
const FilterNames2Issues = {
|
|
13
|
-
//Lizenzen
|
|
14
|
-
'virtual:editorial_license': ['oer', 'other_cc', 'copyright', 'without_license'],
|
|
15
|
-
//Materialtypen werden im Constructor gesetzt
|
|
16
|
-
'virtual:oeh_lrt': [],
|
|
17
|
-
'virtual:editorial_exclusion': [
|
|
18
|
-
'outdated',
|
|
19
|
-
'without_preview',
|
|
20
|
-
'without_title',
|
|
21
|
-
'without_description',
|
|
22
|
-
'without_url',
|
|
23
|
-
'without_type',
|
|
24
|
-
'without_taxonomy_id',
|
|
25
|
-
'without_education_level',
|
|
26
|
-
'without_target_group',
|
|
27
|
-
'without_license',
|
|
28
|
-
'without_publisher',
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
|
-
// Here we map back the issues to the filter names in the editorial desk, so we can look up the filter name for a given issue
|
|
32
|
-
const Issues2FilterNames = Object.entries(FilterNames2Issues).reduce((map, [key, value]) => {
|
|
33
|
-
value.forEach((issue) => map.set(issue, key));
|
|
34
|
-
return map;
|
|
35
|
-
}, new Map());
|
|
36
|
-
// maps our values to the values of the filter in the editorial desk
|
|
37
|
-
const MapValuesForFilter = {
|
|
38
|
-
'virtual:editorial_exclusion': {
|
|
39
|
-
outdated: null,
|
|
40
|
-
without_preview: null,
|
|
41
|
-
without_title: ['missing_title'],
|
|
42
|
-
without_description: ['missing_description'],
|
|
43
|
-
without_url: ['links'],
|
|
44
|
-
without_type: ['missing_oeh_lrt'],
|
|
45
|
-
without_taxonomy_id: ['without_taxonomy_id'],
|
|
46
|
-
without_education_level: ['missing_educationalcontext'],
|
|
47
|
-
without_target_group: ['missing_educationalintendedenduserrole'],
|
|
48
|
-
without_license: ['missing_license'],
|
|
49
|
-
without_publisher: ['missing_replicationsource'],
|
|
50
|
-
},
|
|
51
|
-
'virtual:editorial_license': {
|
|
52
|
-
oer: ['oer'],
|
|
53
|
-
copyright: ['none_oer'],
|
|
54
|
-
without_license: ['none'],
|
|
55
|
-
},
|
|
56
|
-
'virtual:oeh_lrt': {},
|
|
57
|
-
};
|
|
58
|
-
/*
|
|
59
|
-
This is a map from properties of a document to filter names
|
|
60
|
-
*/
|
|
61
|
-
const PROPERTIES2FILTERS = new Map([
|
|
62
|
-
['metadata.educationalContexts', 'ccm:educationalcontext'],
|
|
63
|
-
['metadata.disciplines', 'virtual:taxonid'],
|
|
64
|
-
//["responsibility", "virtual:collection_id_primary"] // das zeigt auf "sammlungszugehörigkeit" und ist falsch
|
|
65
|
-
]);
|
|
66
|
-
export class EditorialLinkService {
|
|
67
|
-
constructor() {
|
|
68
|
-
this.env = inject(ConfigHelperService);
|
|
69
|
-
this.api = inject(MetaApiService);
|
|
70
|
-
this.typesLoaded$ = new BehaviorSubject(false);
|
|
71
|
-
this.api
|
|
72
|
-
.getMaterialTypesMapping()
|
|
73
|
-
.pipe(take(1))
|
|
74
|
-
.subscribe((types) => {
|
|
75
|
-
for (const [key, value] of Object.entries(types)) {
|
|
76
|
-
Issues2FilterNames.set(key, 'virtual:oeh_lrt');
|
|
77
|
-
MapValuesForFilter['virtual:oeh_lrt'][key] = value;
|
|
78
|
-
}
|
|
79
|
-
this.typesLoaded$.next(true);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
openByReplicationsourceAndIssueTypeWithFilters(source, issue, selectedFilters) {
|
|
83
|
-
const filters = {};
|
|
84
|
-
filters['virtual:audit_filter'] = ['all'];
|
|
85
|
-
filters['ccm:oeh_publisher_combined'] = [source];
|
|
86
|
-
filters['virtual:editorial_exclusion'] = MapValuesForFilter['virtual:editorial_exclusion'][issue];
|
|
87
|
-
for (const [field, values] of Object.entries(selectedFilters)) {
|
|
88
|
-
if (values && values.length) {
|
|
89
|
-
const editorialFiltername = PROPERTIES2FILTERS.get(field);
|
|
90
|
-
filters[editorialFiltername] = values;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
94
|
-
const params = new URLSearchParams();
|
|
95
|
-
params.set('mode', 'audit');
|
|
96
|
-
params.set('filters', JSON.stringify(filters));
|
|
97
|
-
window.open(`${theUrl}?${params}`, 'editor_frontend');
|
|
98
|
-
}
|
|
99
|
-
openByCollectionAndIssueType(collectionId, issueType, pageTitle) {
|
|
100
|
-
const filters = {};
|
|
101
|
-
filters['virtual:audit_filter'] = ['all'];
|
|
102
|
-
filters['virtual:editorial_exclusion'] = MapValuesForFilter['virtual:editorial_exclusion'][issueType];
|
|
103
|
-
filters['virtual:collection_id_primary'] = [collectionId];
|
|
104
|
-
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
105
|
-
const params = new URLSearchParams();
|
|
106
|
-
params.set('title', pageTitle);
|
|
107
|
-
params.set('mode', 'audit');
|
|
108
|
-
// this provides information to the editorial desk that any global group filter needs to be reset for this query
|
|
109
|
-
params.set('resetGroup', 'true');
|
|
110
|
-
params.set('filters', JSON.stringify(filters));
|
|
111
|
-
window.open(`${theUrl}?${params}`, 'editor_frontend');
|
|
112
|
-
}
|
|
113
|
-
openByCollectionId(collectionId) {
|
|
114
|
-
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
115
|
-
const params = new URLSearchParams();
|
|
116
|
-
params.set('ids', collectionId);
|
|
117
|
-
params.set('mode', 'render');
|
|
118
|
-
window.open(`${theUrl}?${params}`, 'editor_frontend');
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* This method creates a link to the editorial desk with specific filters.
|
|
122
|
-
* It returns the URL to the editorial desk with the filters applied or null if the issueId is not mapped to a filter.
|
|
123
|
-
* With this we can render a link with an href attribute to the editorial desk in the frontend.
|
|
124
|
-
* @see the counts-with-history.component.scss how we style links only if their hrefs are not null
|
|
125
|
-
*
|
|
126
|
-
* @param sourceType The type of the source, e.g. "replicationSource" or "collection"
|
|
127
|
-
* @param sourceId The id of the source. This is the first column in the table.
|
|
128
|
-
* @param issueId The id of the issue. These are the other columns in the table.
|
|
129
|
-
*/
|
|
130
|
-
createLinkForCountsWithHistory(sourceType, sourceId, issueId) {
|
|
131
|
-
const filters = {};
|
|
132
|
-
filters['virtual:audit_filter'] = ['all'];
|
|
133
|
-
// determine the "main" filter
|
|
134
|
-
if (sourceType === 'replicationSource') {
|
|
135
|
-
filters['ccm:oeh_publisher_combined'] = [sourceId];
|
|
136
|
-
}
|
|
137
|
-
else if (sourceType === 'collection') {
|
|
138
|
-
filters['virtual:collection_id_primary'] = [sourceId];
|
|
139
|
-
}
|
|
140
|
-
if (!Issues2FilterNames.has(issueId)) {
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
const filterName = Issues2FilterNames.get(issueId);
|
|
144
|
-
if (!filterName) {
|
|
145
|
-
// console.debug("No filter name found for issue id: " + issueId);
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
const filterValue = MapValuesForFilter[filterName][issueId];
|
|
149
|
-
if (!filterValue) {
|
|
150
|
-
// console.debug("No filter value found for issue id: " + issueId);
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
filters[filterName] = filterValue;
|
|
154
|
-
const theUrl = this.env.eduSharingPath + '/components/editorial-desk';
|
|
155
|
-
const params = new URLSearchParams();
|
|
156
|
-
params.set('mode', 'audit');
|
|
157
|
-
params.set('filters', JSON.stringify(filters));
|
|
158
|
-
return `${theUrl}?${params}`;
|
|
159
|
-
}
|
|
160
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
161
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, providedIn: 'root' }); }
|
|
162
|
-
}
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorialLinkService, decorators: [{
|
|
164
|
-
type: Injectable,
|
|
165
|
-
args: [{
|
|
166
|
-
providedIn: 'root',
|
|
167
|
-
}]
|
|
168
|
-
}], ctorParameters: () => [] });
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yaWFsLWxpbmsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvcmlhbC1saW5rLXNlcnZpY2UvZWRpdG9yaWFsLWxpbmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUV0Qzs7R0FFRztBQUNILDZGQUE2RjtBQUM3RixNQUFNLGtCQUFrQixHQUFnQztJQUN0RCxVQUFVO0lBQ1YsMkJBQTJCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQztJQUNoRiw2Q0FBNkM7SUFDN0MsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQiw2QkFBNkIsRUFBRTtRQUM3QixVQUFVO1FBQ1YsaUJBQWlCO1FBQ2pCLGVBQWU7UUFDZixxQkFBcUI7UUFDckIsYUFBYTtRQUNiLGNBQWM7UUFDZCxxQkFBcUI7UUFDckIseUJBQXlCO1FBQ3pCLHNCQUFzQjtRQUN0QixpQkFBaUI7UUFDakIsbUJBQW1CO0tBQ3BCO0NBQ0YsQ0FBQztBQUNGLDZIQUE2SDtBQUM3SCxNQUFNLGtCQUFrQixHQUF3QixNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FB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QUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixrRUFBa0U7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLG1FQUFtRTtZQUNuRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBRWxDLE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLDRCQUE0QixDQUFDO1FBQzlFLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQzsrR0F2R1Usb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbmZpZy1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyBtZXRob2RzIHRvIGNyZWF0ZSBsaW5rcyB0byB0aGUgZWRpdG9yaWFsIGRlc2sgd2l0aCBzcGVjaWZpYyBmaWx0ZXJzLlxuICovXG4vKiAgVGhpcyBtYXAgbWFrZXMgaXQgZWFzaWVyIGZvciBtZSB0byBrZWVwIHRyYWNrIHdoaWNoIGlzc3VlcyBhcmUgbWFwcGVkIHRvIHdoaWNoIGZpbHRlcnMgKi9cbmNvbnN0IEZpbHRlck5hbWVzMklzc3VlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xuICAvL0xpemVuemVuXG4gICd2aXJ0dWFsOmVkaXRvcmlhbF9saWNlbnNlJzogWydvZXInLCAnb3RoZXJfY2MnLCAnY29weXJpZ2h0JywgJ3dpdGhvdXRfbGljZW5zZSddLFxuICAvL01hdGVyaWFsdHlwZW4gd2VyZGVuIGltIENvbnN0cnVjdG9yIGdlc2V0enRcbiAgJ3ZpcnR1YWw6b2VoX2xydCc6IFtdLFxuICAndmlydHVhbDplZGl0b3JpYWxfZXhjbHVzaW9uJzogW1xuICAgICdvdXRkYXRlZCcsXG4gICAgJ3dpdGhvdXRfcHJldmlldycsXG4gICAgJ3dpdGhvdXRfdGl0bGUnLFxuICAgICd3aXRob3V0X2Rlc2NyaXB0aW9uJyxcbiAgICAnd2l0aG91dF91cmwnLFxuICAgICd3aXRob3V0X3R5cGUnLFxuICAgICd3aXRob3V0X3RheG9ub215X2lkJyxcbiAgICAnd2l0aG91dF9lZHVjYXRpb25fbGV2ZWwnLFxuICAgICd3aXRob3V0X3RhcmdldF9ncm91cCcsXG4gICAgJ3dpdGhvdXRfbGljZW5zZScsXG4gICAgJ3dpdGhvdXRfcHVibGlzaGVyJyxcbiAgXSxcbn07XG4vLyBIZXJlIHdlIG1hcCBiYWNrIHRoZSBpc3N1ZXMgdG8gdGhlIGZpbHRlciBuYW1lcyBpbiB0aGUgZWRpdG9yaWFsIGRlc2ssIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWx0ZXIgbmFtZSBmb3IgYSBnaXZlbiBpc3N1ZVxuY29uc3QgSXNzdWVzMkZpbHRlck5hbWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gT2JqZWN0LmVudHJpZXMoRmlsdGVyTmFtZXMySXNzdWVzKS5yZWR1Y2UoKG1hcCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gIHZhbHVlLmZvckVhY2goKGlzc3VlKSA9PiBtYXAuc2V0KGlzc3VlLCBrZXkpKTtcbiAgcmV0dXJuIG1hcDtcbn0sIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCkpO1xuXG4vLyBtYXBzIG91ciB2YWx1ZXMgdG8gdGhlIHZhbHVlcyBvZiB0aGUgZmlsdGVyIGluIHRoZSBlZGl0b3JpYWwgZGVza1xuY29uc3QgTWFwVmFsdWVzRm9yRmlsdGVyOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfCBudWxsIH0gfSA9IHtcbiAgJ3ZpcnR1YWw6ZWRpdG9yaWFsX2V4Y2x1c2lvbic6IHtcbiAgICBvdXRkYXRlZDogbnVsbCxcbiAgICB3aXRob3V0X3ByZXZpZXc6IG51bGwsXG4gICAgd2l0aG91dF90aXRsZTogWydtaXNzaW5nX3RpdGxlJ10sXG4gICAgd2l0aG91dF9kZXNjcmlwdGlvbjogWydtaXNzaW5nX2Rlc2NyaXB0aW9uJ10sXG4gICAgd2l0aG91dF91cmw6IFsnbGlua3MnXSxcbiAgICB3aXRob3V0X3R5cGU6IFsnbWlzc2luZ19vZWhfbHJ0J10sXG4gICAgd2l0aG91dF90YXhvbm9teV9pZDogWyd3aXRob3V0X3RheG9ub215X2lkJ10sXG4gICAgd2l0aG91dF9lZHVjYXRpb25fbGV2ZWw6IFsnbWlzc2luZ19lZHVjYXRpb25hbGNvbnRleHQnXSxcbiAgICB3aXRob3V0X3RhcmdldF9ncm91cDogWydtaXNzaW5nX2VkdWNhdGlvbmFsaW50ZW5kZWRlbmR1c2Vycm9sZSddLFxuICAgIHdpdGhvdXRfbGljZW5zZTogWydtaXNzaW5nX2xpY2Vuc2UnXSxcbiAgICB3aXRob3V0X3B1Ymxpc2hlcjogWydtaXNzaW5nX3JlcGxpY2F0aW9uc291cmNlJ10sXG4gIH0sXG4gICd2aXJ0dWFsOmVkaXRvcmlhbF9saWNlbnNlJzoge1xuICAgIG9lcjogWydvZXInXSxcbiAgICBjb3B5cmlnaHQ6IFsnbm9uZV9vZXInXSxcbiAgICB3aXRob3V0X2xpY2Vuc2U6IFsnbm9uZSddLFxuICB9LFxuICAndmlydHVhbDpvZWhfbHJ0Jzoge30sXG59O1xuXG4vKlxuVGhpcyBpcyBhIG1hcCBmcm9tIHByb3BlcnRpZXMgb2YgYSBkb2N1bWVudCB0byBmaWx0ZXIgbmFtZXNcbiAqL1xuY29uc3QgUFJPUEVSVElFUzJGSUxURVJTID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ21ldGFkYXRhLmVkdWNhdGlvbmFsQ29udGV4dHMnLCAnY2NtOmVkdWNhdGlvbmFsY29udGV4dCddLFxuICBbJ21ldGFkYXRhLmRpc2NpcGxpbmVzJywgJ3ZpcnR1YWw6dGF4b25pZCddLFxuICAvL1tcInJlc3BvbnNpYmlsaXR5XCIsIFwidmlydHVhbDpjb2xsZWN0aW9uX2lkX3ByaW1hcnlcIl0gLy8gZGFzIHplaWd0IGF1ZiBcInNhbW1sdW5nc3p1Z2Vow7ZyaWdrZWl0XCIgdW5kIGlzdCBmYWxzY2hcbl0pO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRWRpdG9yaWFsTGlua1NlcnZpY2Uge1xuICBwcml2YXRlIGVudiA9IGluamVjdChDb25maWdIZWxwZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhcGkgPSBpbmplY3QoTWV0YUFwaVNlcnZpY2UpO1xuICBwdWJsaWMgdHlwZXNMb2FkZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hcGlcbiAgICAgIC5nZXRNYXRlcmlhbFR5cGVzTWFwcGluZygpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgodHlwZXMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModHlwZXMpKSB7XG4gICAgICAgICAgSXNzdWVzMkZpbHRlck5hbWVzLnNldChrZXksICd2aXJ0dWFsOm9laF9scnQnKTtcbiAgICAgICAgICBNYXBWYWx1ZXNGb3JGaWx0ZXJbJ3ZpcnR1YWw6b2VoX2xydCddW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnR5cGVzTG9hZGVkJC5uZXh0KHRydWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkJ5UmVwbGljYXRpb25zb3VyY2VBbmRJc3N1ZVR5cGVXaXRoRmlsdGVycyhcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBpc3N1ZTogc3RyaW5nLFxuICAgIHNlbGVjdGVkRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGZpbHRlcnNbJ3ZpcnR1YWw6YXVkaXRfZmlsdGVyJ10gPSBbJ2FsbCddO1xuICAgIGZpbHRlcnNbJ2NjbTpvZWhfcHVibGlzaGVyX2NvbWJpbmVkJ10gPSBbc291cmNlXTtcbiAgICBmaWx0ZXJzWyd2aXJ0dWFsOmVkaXRvcmlhbF9leGNsdXNpb24nXSA9IE1hcFZhbHVlc0ZvckZpbHRlclsndmlydHVhbDplZGl0b3JpYWxfZXhjbHVzaW9uJ11baXNzdWVdO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkRmlsdGVycykpIHtcbiAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBlZGl0b3JpYWxGaWx0ZXJuYW1lID0gUFJPUEVSVElFUzJGSUxURVJTLmdldChmaWVsZCkgYXMgc3RyaW5nO1xuICAgICAgICBmaWx0ZXJzW2VkaXRvcmlhbEZpbHRlcm5hbWVdID0gdmFsdWVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRoZVVybDogc3RyaW5nID0gdGhpcy5lbnYuZWR1U2hhcmluZ1BhdGggKyAnL2NvbXBvbmVudHMvZWRpdG9yaWFsLWRlc2snO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuc2V0KCdtb2RlJywgJ2F1ZGl0Jyk7XG4gICAgcGFyYW1zLnNldCgnZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KGZpbHRlcnMpKTtcbiAgICB3aW5kb3cub3BlbihgJHt0aGVVcmx9PyR7cGFyYW1zfWAsICdlZGl0b3JfZnJvbnRlbmQnKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuQnlDb2xsZWN0aW9uQW5kSXNzdWVUeXBlKGNvbGxlY3Rpb25JZDogc3RyaW5nLCBpc3N1ZVR5cGU6IHN0cmluZywgcGFnZVRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBmaWx0ZXJzWyd2aXJ0dWFsOmF1ZGl0X2ZpbHRlciddID0gWydhbGwnXTtcbiAgICBmaWx0ZXJzWyd2aXJ0dWFsOmVkaXRvcmlhbF9leGNsdXNpb24nXSA9IE1hcFZhbHVlc0ZvckZpbHRlclsndmlydHVhbDplZGl0b3JpYWxfZXhjbHVzaW9uJ11baXNzdWVUeXBlXTtcbiAgICBmaWx0ZXJzWyd2aXJ0dWFsOmNvbGxlY3Rpb25faWRfcHJpbWFyeSddID0gW2NvbGxlY3Rpb25JZF07XG4gICAgY29uc3QgdGhlVXJsOiBzdHJpbmcgPSB0aGlzLmVudi5lZHVTaGFyaW5nUGF0aCArICcvY29tcG9uZW50cy9lZGl0b3JpYWwtZGVzayc7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5zZXQoJ3RpdGxlJywgcGFnZVRpdGxlKTtcbiAgICBwYXJhbXMuc2V0KCdtb2RlJywgJ2F1ZGl0Jyk7XG4gICAgLy8gdGhpcyBwcm92aWRlcyBpbmZvcm1hdGlvbiB0byB0aGUgZWRpdG9yaWFsIGRlc2sgdGhhdCBhbnkgZ2xvYmFsIGdyb3VwIGZpbHRlciBuZWVkcyB0byBiZSByZXNldCBmb3IgdGhpcyBxdWVyeVxuICAgIHBhcmFtcy5zZXQoJ3Jlc2V0R3JvdXAnLCAndHJ1ZScpO1xuICAgIHBhcmFtcy5zZXQoJ2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSk7XG4gICAgd2luZG93Lm9wZW4oYCR7dGhlVXJsfT8ke3BhcmFtc31gLCAnZWRpdG9yX2Zyb250ZW5kJyk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkJ5Q29sbGVjdGlvbklkKGNvbGxlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGhlVXJsOiBzdHJpbmcgPSB0aGlzLmVudi5lZHVTaGFyaW5nUGF0aCArICcvY29tcG9uZW50cy9lZGl0b3JpYWwtZGVzayc7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5zZXQoJ2lkcycsIGNvbGxlY3Rpb25JZCk7XG4gICAgcGFyYW1zLnNldCgnbW9kZScsICdyZW5kZXInKTtcbiAgICB3aW5kb3cub3BlbihgJHt0aGVVcmx9PyR7cGFyYW1zfWAsICdlZGl0b3JfZnJvbnRlbmQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbGluayB0byB0aGUgZWRpdG9yaWFsIGRlc2sgd2l0aCBzcGVjaWZpYyBmaWx0ZXJzLlxuICAgKiBJdCByZXR1cm5zIHRoZSBVUkwgdG8gdGhlIGVkaXRvcmlhbCBkZXNrIHdpdGggdGhlIGZpbHRlcnMgYXBwbGllZCBvciBudWxsIGlmIHRoZSBpc3N1ZUlkIGlzIG5vdCBtYXBwZWQgdG8gYSBmaWx0ZXIuXG4gICAqIFdpdGggdGhpcyB3ZSBjYW4gcmVuZGVyIGEgbGluayB3aXRoIGFuIGhyZWYgYXR0cmlidXRlIHRvIHRoZSBlZGl0b3JpYWwgZGVzayBpbiB0aGUgZnJvbnRlbmQuXG4gICAqIEBzZWUgdGhlIGNvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50LnNjc3MgaG93IHdlIHN0eWxlIGxpbmtzIG9ubHkgaWYgdGhlaXIgaHJlZnMgYXJlIG5vdCBudWxsXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2VUeXBlIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2UsIGUuZy4gXCJyZXBsaWNhdGlvblNvdXJjZVwiIG9yIFwiY29sbGVjdGlvblwiXG4gICAqIEBwYXJhbSBzb3VyY2VJZCBUaGUgaWQgb2YgdGhlIHNvdXJjZS4gVGhpcyBpcyB0aGUgZmlyc3QgY29sdW1uIGluIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIGlzc3VlSWQgVGhlIGlkIG9mIHRoZSBpc3N1ZS4gVGhlc2UgYXJlIHRoZSBvdGhlciBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGVMaW5rRm9yQ291bnRzV2l0aEhpc3Rvcnkoc291cmNlVHlwZTogc3RyaW5nLCBzb3VyY2VJZDogc3RyaW5nLCBpc3N1ZUlkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBmaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgICBmaWx0ZXJzWyd2aXJ0dWFsOmF1ZGl0X2ZpbHRlciddID0gWydhbGwnXTtcbiAgICAvLyBkZXRlcm1pbmUgdGhlIFwibWFpblwiIGZpbHRlclxuICAgIGlmIChzb3VyY2VUeXBlID09PSAncmVwbGljYXRpb25Tb3VyY2UnKSB7XG4gICAgICBmaWx0ZXJzWydjY206b2VoX3B1Ymxpc2hlcl9jb21iaW5lZCddID0gW3NvdXJjZUlkXTtcbiAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICdjb2xsZWN0aW9uJykge1xuICAgICAgZmlsdGVyc1sndmlydHVhbDpjb2xsZWN0aW9uX2lkX3ByaW1hcnknXSA9IFtzb3VyY2VJZF07XG4gICAgfVxuICAgIGlmICghSXNzdWVzMkZpbHRlck5hbWVzLmhhcyhpc3N1ZUlkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlck5hbWUgPSBJc3N1ZXMyRmlsdGVyTmFtZXMuZ2V0KGlzc3VlSWQpO1xuICAgIGlmICghZmlsdGVyTmFtZSkge1xuICAgICAgLy8gY29uc29sZS5kZWJ1ZyhcIk5vIGZpbHRlciBuYW1lIGZvdW5kIGZvciBpc3N1ZSBpZDogXCIgKyBpc3N1ZUlkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IE1hcFZhbHVlc0ZvckZpbHRlcltmaWx0ZXJOYW1lXVtpc3N1ZUlkXTtcbiAgICBpZiAoIWZpbHRlclZhbHVlKSB7XG4gICAgICAvLyBjb25zb2xlLmRlYnVnKFwiTm8gZmlsdGVyIHZhbHVlIGZvdW5kIGZvciBpc3N1ZSBpZDogXCIgKyBpc3N1ZUlkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmaWx0ZXJzW2ZpbHRlck5hbWVdID0gZmlsdGVyVmFsdWU7XG5cbiAgICBjb25zdCB0aGVVcmw6IHN0cmluZyA9IHRoaXMuZW52LmVkdVNoYXJpbmdQYXRoICsgJy9jb21wb25lbnRzL2VkaXRvcmlhbC1kZXNrJztcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLnNldCgnbW9kZScsICdhdWRpdCcpO1xuICAgIHBhcmFtcy5zZXQoJ2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSk7XG4gICAgcmV0dXJuIGAke3RoZVVybH0/JHtwYXJhbXN9YDtcbiAgfVxufVxuIl19
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Component, ElementRef, Input, LOCALE_ID, ViewChild } 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 { LuxonDateAdapter, MAT_LUXON_DATE_ADAPTER_OPTIONS } from '@angular/material-luxon-adapter';
|
|
7
|
-
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatRipple } from '@angular/material/core';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/forms";
|
|
10
|
-
const datePickerFormats = {
|
|
11
|
-
parse: {
|
|
12
|
-
dateInput: 'D',
|
|
13
|
-
},
|
|
14
|
-
display: {
|
|
15
|
-
dateInput: 'D',
|
|
16
|
-
monthYearLabel: 'MMMM yyyy',
|
|
17
|
-
dateA11yLabel: 'DDD',
|
|
18
|
-
monthYearA11yLabel: 'MMMM yyyy',
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
export class DatepickerComponent {
|
|
22
|
-
constructor() {
|
|
23
|
-
this.disabled = false;
|
|
24
|
-
}
|
|
25
|
-
ngOnInit() {
|
|
26
|
-
this.focus();
|
|
27
|
-
}
|
|
28
|
-
ngOnDestroy() {
|
|
29
|
-
//defer this to avoid an ExpressionChangedAfterItHasBeenCheckedError on the parent component
|
|
30
|
-
Promise.resolve().then(() => this.inputGroup.reset());
|
|
31
|
-
}
|
|
32
|
-
focus() {
|
|
33
|
-
this.start?.nativeElement.focus();
|
|
34
|
-
this.ripple.launch({
|
|
35
|
-
centered: true, // Angular Material bug: disabled ripples do not trigger unless centered
|
|
36
|
-
radius: 1000,
|
|
37
|
-
animation: {
|
|
38
|
-
exitDuration: 1000,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerComponent, isStandalone: true, selector: "metaqs2-datepicker", inputs: { disabled: "disabled", inputGroup: "inputGroup" }, providers: [
|
|
44
|
-
{
|
|
45
|
-
provide: DateAdapter,
|
|
46
|
-
useClass: LuxonDateAdapter,
|
|
47
|
-
deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS],
|
|
48
|
-
},
|
|
49
|
-
{ provide: MAT_DATE_FORMATS, useValue: datePickerFormats },
|
|
50
|
-
//provideLuxonDateAdapter(datePickerFormats),
|
|
51
|
-
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
52
|
-
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
53
|
-
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
54
|
-
], viewQueries: [{ propertyName: "start", first: true, predicate: ["start"], descendants: true, read: ElementRef, static: true }, { propertyName: "ripple", first: true, predicate: ["ripple"], descendants: true, read: MatRipple, static: true }], ngImport: i0, template: "<div [formGroup]=\"inputGroup\" matRipple #ripple=\"matRipple\" [matRippleDisabled]=\"true\">\n <!-- start date -->\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n #start\n [disabled]=\"disabled\"\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 [disabled]=\"disabled\" #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 [disabled]=\"disabled\"\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 [disabled]=\"disabled\" #picker2 [startAt]=\"inputGroup.controls.end.value\">\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n</div>\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"] }, { kind: "directive", type: MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }] }); }
|
|
55
|
-
}
|
|
56
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
57
|
-
type: Component,
|
|
58
|
-
args: [{ selector: 'metaqs2-datepicker', standalone: true, imports: [
|
|
59
|
-
FormsModule,
|
|
60
|
-
MatDatepicker,
|
|
61
|
-
MatDatepickerInput,
|
|
62
|
-
MatDatepickerToggle,
|
|
63
|
-
MatFormField,
|
|
64
|
-
MatInput,
|
|
65
|
-
MatLabel,
|
|
66
|
-
MatSuffix,
|
|
67
|
-
ReactiveFormsModule,
|
|
68
|
-
MatRipple,
|
|
69
|
-
], providers: [
|
|
70
|
-
{
|
|
71
|
-
provide: DateAdapter,
|
|
72
|
-
useClass: LuxonDateAdapter,
|
|
73
|
-
deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS],
|
|
74
|
-
},
|
|
75
|
-
{ provide: MAT_DATE_FORMATS, useValue: datePickerFormats },
|
|
76
|
-
//provideLuxonDateAdapter(datePickerFormats),
|
|
77
|
-
{ provide: LOCALE_ID, useValue: 'de-DE' },
|
|
78
|
-
{ provide: MAT_DATE_LOCALE, useValue: 'de-DE' },
|
|
79
|
-
{ provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true, firstDayOfWeek: 1 } },
|
|
80
|
-
], template: "<div [formGroup]=\"inputGroup\" matRipple #ripple=\"matRipple\" [matRippleDisabled]=\"true\">\n <!-- start date -->\n <mat-form-field>\n <mat-label>Zeitpunkt 1</mat-label>\n <input matInput\n #start\n [disabled]=\"disabled\"\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 [disabled]=\"disabled\" #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 [disabled]=\"disabled\"\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 [disabled]=\"disabled\" #picker2 [startAt]=\"inputGroup.controls.end.value\">\n </mat-datepicker>\n </mat-form-field>\n <!-- /end date -->\n</div>\n" }]
|
|
81
|
-
}], propDecorators: { disabled: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}], inputGroup: [{
|
|
84
|
-
type: Input,
|
|
85
|
-
args: [{ required: true }]
|
|
86
|
-
}], start: [{
|
|
87
|
-
type: ViewChild,
|
|
88
|
-
args: ['start', {
|
|
89
|
-
read: ElementRef,
|
|
90
|
-
static: true,
|
|
91
|
-
}]
|
|
92
|
-
}], ripple: [{
|
|
93
|
-
type: ViewChild,
|
|
94
|
-
args: ['ripple', {
|
|
95
|
-
read: MatRipple,
|
|
96
|
-
static: true,
|
|
97
|
-
}]
|
|
98
|
-
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBMEIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBa0IsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUVuSCxNQUFNLGlCQUFpQixHQUFtQjtJQUN4QyxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsR0FBRztLQUNmO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLEdBQUc7UUFDZCxjQUFjLEVBQUUsV0FBVztRQUMzQixhQUFh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QU9TLE1BQU07c0JBSmYsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksRUFBRSxTQUFTO3dCQUNmLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgTE9DQUxFX0lELCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXIsIE1hdERhdGVwaWNrZXJJbnB1dCwgTWF0RGF0ZXBpY2tlclRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCwgTWF0U3VmZml4IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgTHV4b25EYXRlQWRhcHRlciwgTUFUX0xVWE9OX0RBVEVfQURBUFRFUl9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbHV4b24tYWRhcHRlcic7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFLCBNYXREYXRlRm9ybWF0cywgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmNvbnN0IGRhdGVQaWNrZXJGb3JtYXRzOiBNYXREYXRlRm9ybWF0cyA9IHtcbiAgcGFyc2U6IHtcbiAgICBkYXRlSW5wdXQ6ICdEJyxcbiAgfSxcbiAgZGlzcGxheToge1xuICAgIGRhdGVJbnB1dDogJ0QnLFxuICAgIG1vbnRoWWVhckxhYmVsOiAnTU1NTSB5eXl5JyxcbiAgICBkYXRlQTExeUxhYmVsOiAnREREJyxcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIHl5eXknLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1kYXRlcGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZXBpY2tlcklucHV0LFxuICAgIE1hdERhdGVwaWNrZXJUb2dnbGUsXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdElucHV0LFxuICAgIE1hdExhYmVsLFxuICAgIE1hdFN1ZmZpeCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdFJpcHBsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsXG4gICAgICB1c2VDbGFzczogTHV4b25EYXRlQWRhcHRlcixcbiAgICAgIGRlcHM6IFtNQVRfREFURV9MT0NBTEUsIE1BVF9MVVhPTl9EQVRFX0FEQVBURVJfT1BUSU9OU10sXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBkYXRlUGlja2VyRm9ybWF0cyB9LFxuXG4gICAgLy9wcm92aWRlTHV4b25EYXRlQWRhcHRlcihkYXRlUGlja2VyRm9ybWF0cyksXG4gICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZVZhbHVlOiAnZGUtREUnIH0sXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9MT0NBTEUsIHVzZVZhbHVlOiAnZGUtREUnIH0sXG4gICAgeyBwcm92aWRlOiBNQVRfTFVYT05fREFURV9BREFQVEVSX09QVElPTlMsIHVzZVZhbHVlOiB7IHVzZVV0YzogdHJ1ZSwgZmlyc3REYXlPZldlZWs6IDEgfSB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGlucHV0R3JvdXAhOiBGb3JtR3JvdXA8eyBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+OyBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PiB9PjtcblxuICBAVmlld0NoaWxkKCdzdGFydCcsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJvdGVjdGVkIHN0YXJ0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdyaXBwbGUnLCB7XG4gICAgcmVhZDogTWF0UmlwcGxlLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJvdGVjdGVkIHJpcHBsZSE6IE1hdFJpcHBsZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvL2RlZmVyIHRoaXMgdG8gYXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvciBvbiB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5pbnB1dEdyb3VwLnJlc2V0KCkpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5zdGFydD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMucmlwcGxlLmxhdW5jaCh7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgLy8gQW5ndWxhciBNYXRlcmlhbCBidWc6IGRpc2FibGVkIHJpcHBsZXMgZG8gbm90IHRyaWdnZXIgdW5sZXNzIGNlbnRlcmVkXG4gICAgICByYWRpdXM6IDEwMDAsXG4gICAgICBhbmltYXRpb246IHtcbiAgICAgICAgZXhpdER1cmF0aW9uOiAxMDAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImlucHV0R3JvdXBcIiBtYXRSaXBwbGUgI3JpcHBsZT1cIm1hdFJpcHBsZVwiIFttYXRSaXBwbGVEaXNhYmxlZF09XCJ0cnVlXCI+XG4gIDwhLS0gc3RhcnQgZGF0ZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+WmVpdHB1bmt0IDE8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgI3N0YXJ0XG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFttaW5dPVwiaW5wdXRHcm91cC5jb250cm9scy5zdGFydC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICBbbWF4XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlcjFcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3RhcnRzIGRhdGVcIlxuICAgID5cbiAgICA8IS0tXG4gICAgICAgICAgPG1hdC1oaW50PmQuTS55eXl5PC9tYXQtaGludD5cbiAgICAtLT5cbiAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXIxXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgPG1hdC1kYXRlcGlja2VyIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiICNwaWNrZXIxIFtzdGFydEF0XT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCI+XG4gICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPCEtLSAvc3RhcnQgZGF0ZSAtLT5cbiAgPCEtLSBlbmQgZGF0ZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+WmVpdHB1bmt0MjwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICBbbWluXT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgW21heF09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLmVuZC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIyXCJcbiAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiXG4gICAgPlxuICAgIDwhLS1cbiAgICA8bWF0LWhpbnQ+ZC5NLnl5eXk8L21hdC1oaW50PlxuICAgIC0tPlxuICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICA8bWF0LWRhdGVwaWNrZXIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgI3BpY2tlcjIgW3N0YXJ0QXRdPVwiaW5wdXRHcm91cC5jb250cm9scy5lbmQudmFsdWVcIj5cbiAgICA8L21hdC1kYXRlcGlja2VyPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8IS0tIC9lbmQgZGF0ZSAtLT5cbjwvZGl2PlxuIl19
|