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.
Files changed (76) hide show
  1. package/README.md +1 -14
  2. package/fesm2022/ngx-edu-sharing-metaqs2.mjs +195 -197
  3. package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
  4. package/lib/components/collection-issues/collection-issues.component.d.ts +1 -1
  5. package/lib/components/donut-chart-tooltip/donut-chart-tooltip.component.d.ts +1 -1
  6. package/lib/components/filter/quality-matrix-filter.component.d.ts +4 -6
  7. package/lib/components/material-issues/material-issues.component.d.ts +1 -1
  8. package/lib/components/node-entry/node-entry.component.d.ts +1 -1
  9. package/lib/components/node-list/node-list.component.d.ts +1 -1
  10. package/lib/components/quality-matrix/quality_matrix.d.ts +1 -3
  11. package/lib/counts-with-history/counts-with-history.component.d.ts +1 -1
  12. package/lib/ng-meta-widgets-lib.module.d.ts +34 -37
  13. package/lib/node-image-url.pipe.d.ts +1 -1
  14. package/lib/wrap-observable.pipe.d.ts +1 -1
  15. package/package.json +6 -8
  16. package/esm2022/lib/collection-count-history/collection-count-history.component.mjs +0 -131
  17. package/esm2022/lib/collection-count-history/monthpicker/monthpicker.component.mjs +0 -114
  18. package/esm2022/lib/components/collection-issues/collection-issues.component.mjs +0 -23
  19. package/esm2022/lib/components/donut-chart/donut-chart.component.mjs +0 -85
  20. package/esm2022/lib/components/donut-chart/donut-chart.model.mjs +0 -2
  21. package/esm2022/lib/components/donut-chart/donut-chart.pipe.mjs +0 -50
  22. package/esm2022/lib/components/donut-chart-tooltip/donut-chart-tooltip.component.mjs +0 -79
  23. package/esm2022/lib/components/editorial-link-service/editorial-link.service.mjs +0 -169
  24. package/esm2022/lib/components/filter/datepicker/datepicker.component.mjs +0 -99
  25. package/esm2022/lib/components/filter/quality-matrix-filter.component.mjs +0 -47
  26. package/esm2022/lib/components/loading_indicator/overlay/overlay.service.mjs +0 -41
  27. package/esm2022/lib/components/loading_indicator/progress-spinner/progress-spinner.component.mjs +0 -65
  28. package/esm2022/lib/components/material-issues/material-issues.component.mjs +0 -23
  29. package/esm2022/lib/components/node-entry/node-entry.component.mjs +0 -35
  30. package/esm2022/lib/components/node-list/node-list.component.mjs +0 -112
  31. package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +0 -413
  32. package/esm2022/lib/components/quality-matrix/scroll-marker.directive.mjs +0 -17
  33. package/esm2022/lib/config-helper.service.mjs +0 -32
  34. package/esm2022/lib/core/svg-icons.service.mjs +0 -44
  35. package/esm2022/lib/core/tooltip.service.mjs +0 -146
  36. package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +0 -203
  37. package/esm2022/lib/java-api/api/api.mjs +0 -12
  38. package/esm2022/lib/java-api/api/authProxyController.service.mjs +0 -107
  39. package/esm2022/lib/java-api/api/collectionAPI.service.mjs +0 -409
  40. package/esm2022/lib/java-api/api/editorsAPI.service.mjs +0 -157
  41. package/esm2022/lib/java-api/api/filterAPI.service.mjs +0 -237
  42. package/esm2022/lib/java-api/api/replicationSourceAPI.service.mjs +0 -230
  43. package/esm2022/lib/java-api/api.base.service.mjs +0 -66
  44. package/esm2022/lib/java-api/api.module.mjs +0 -40
  45. package/esm2022/lib/java-api/configuration.mjs +0 -103
  46. package/esm2022/lib/java-api/encoder.mjs +0 -19
  47. package/esm2022/lib/java-api/index.mjs +0 -7
  48. package/esm2022/lib/java-api/model/collectionWithMissingAttributes.mjs +0 -11
  49. package/esm2022/lib/java-api/model/count.mjs +0 -11
  50. package/esm2022/lib/java-api/model/eduCollection.mjs +0 -11
  51. package/esm2022/lib/java-api/model/filter.mjs +0 -2
  52. package/esm2022/lib/java-api/model/filterValue.mjs +0 -11
  53. package/esm2022/lib/java-api/model/materialCountDto.mjs +0 -2
  54. package/esm2022/lib/java-api/model/materialCountFilter.mjs +0 -11
  55. package/esm2022/lib/java-api/model/materialWithMissingAttributes.mjs +0 -11
  56. package/esm2022/lib/java-api/model/matrixRowWithCounts.mjs +0 -2
  57. package/esm2022/lib/java-api/model/matrixWithCounts.mjs +0 -2
  58. package/esm2022/lib/java-api/model/missingAttributeResult.mjs +0 -2
  59. package/esm2022/lib/java-api/model/models.mjs +0 -16
  60. package/esm2022/lib/java-api/model/qualityMatrix.mjs +0 -2
  61. package/esm2022/lib/java-api/model/qualityMatrixHeader.mjs +0 -11
  62. package/esm2022/lib/java-api/model/qualityMatrixReplicationSourceCounts.mjs +0 -11
  63. package/esm2022/lib/java-api/model/qualityMatrixRow.mjs +0 -2
  64. package/esm2022/lib/java-api/param.mjs +0 -2
  65. package/esm2022/lib/java-api/variables.mjs +0 -9
  66. package/esm2022/lib/meta-api.service.mjs +0 -77
  67. package/esm2022/lib/ng-meta-widgets-lib.module.mjs +0 -198
  68. package/esm2022/lib/node-image-url.pipe.mjs +0 -29
  69. package/esm2022/lib/tree-collection-details/tree-collection-details.component.mjs +0 -87
  70. package/esm2022/lib/tree-license/tree-license.component.mjs +0 -136
  71. package/esm2022/lib/tree-search-counts/inline-worker.mjs +0 -102
  72. package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +0 -209
  73. package/esm2022/lib/wrap-observable.pipe.mjs +0 -21
  74. package/esm2022/ngx-edu-sharing-metaqs2.mjs +0 -5
  75. package/esm2022/public-api.mjs +0 -18
  76. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBMEIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBa0IsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUVuSCxNQUFNLGlCQUFpQixHQUFtQjtJQUN4QyxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsR0FBRztLQUNmO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLEdBQUc7UUFDZCxjQUFjLEVBQUUsV0FBVztRQUMzQixhQUFhLEVBQUUsS0FBSztRQUNwQixrQkFBa0IsRUFBRSxXQUFXO0tBQ2hDO0NBQ0YsQ0FBQztBQWlDRixNQUFNLE9BQU8sbUJBQW1CO0lBL0JoQztRQWlDRSxhQUFRLEdBQVksS0FBSyxDQUFDO0tBb0MzQjtJQW5CQyxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVCw0RkFBNEY7UUFDNUYsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNqQixRQUFRLEVBQUUsSUFBSSxFQUFFLHdFQUF3RTtZQUN4RixNQUFNLEVBQUUsSUFBSTtZQUNaLFNBQVMsRUFBRTtnQkFDVCxZQUFZLEVBQUUsSUFBSTthQUNuQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBckNVLG1CQUFtQjttR0FBbkIsbUJBQW1CLDZIQWhCbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsV0FBVztnQkFDcEIsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLDhCQUE4QixDQUFDO2FBQ3hEO1lBQ0QsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1lBRTFELDZDQUE2QztZQUM3QyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtZQUN6QyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtZQUMvQyxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtTQUMzRixxR0FZTyxVQUFVLHlHQU1WLFNBQVMsMkNDbEVuQiwyOUNBd0NBLHlERGZJLFdBQVcsbWpCQUNYLGFBQWEsd0ZBQ2Isa0JBQWtCLG1LQUNsQixtQkFBbUIsNktBQ25CLFlBQVksNExBQ1osUUFBUSxpVUFDUixRQUFRLHNEQUNSLFNBQVMsb0hBQ1QsbUJBQW1CLGdWQUNuQixTQUFTOzs0RkFrQkEsbUJBQW1CO2tCQS9CL0IsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLFNBQVM7cUJBQ1YsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsV0FBVzs0QkFDcEIsUUFBUSxFQUFFLGdCQUFnQjs0QkFDMUIsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLDhCQUE4QixDQUFDO3lCQUN4RDt3QkFDRCxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7d0JBRTFELDZDQUE2Qzt3QkFDN0MsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7d0JBQ3pDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO3dCQUMvQyxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtxQkFDM0Y7OEJBTUQsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT2YsS0FBSztzQkFKZCxTQUFTO3VCQUFDLE9BQU8sRUFBRTt3QkFDbEIsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU9TLE1BQU07c0JBSmYsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksRUFBRSxTQUFTO3dCQUNmLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgTE9DQUxFX0lELCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXIsIE1hdERhdGVwaWNrZXJJbnB1dCwgTWF0RGF0ZXBpY2tlclRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCwgTWF0U3VmZml4IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgTHV4b25EYXRlQWRhcHRlciwgTUFUX0xVWE9OX0RBVEVfQURBUFRFUl9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbHV4b24tYWRhcHRlcic7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFLCBNYXREYXRlRm9ybWF0cywgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmNvbnN0IGRhdGVQaWNrZXJGb3JtYXRzOiBNYXREYXRlRm9ybWF0cyA9IHtcbiAgcGFyc2U6IHtcbiAgICBkYXRlSW5wdXQ6ICdEJyxcbiAgfSxcbiAgZGlzcGxheToge1xuICAgIGRhdGVJbnB1dDogJ0QnLFxuICAgIG1vbnRoWWVhckxhYmVsOiAnTU1NTSB5eXl5JyxcbiAgICBkYXRlQTExeUxhYmVsOiAnREREJyxcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIHl5eXknLFxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1kYXRlcGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZXBpY2tlcklucHV0LFxuICAgIE1hdERhdGVwaWNrZXJUb2dnbGUsXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdElucHV0LFxuICAgIE1hdExhYmVsLFxuICAgIE1hdFN1ZmZpeCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdFJpcHBsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsXG4gICAgICB1c2VDbGFzczogTHV4b25EYXRlQWRhcHRlcixcbiAgICAgIGRlcHM6IFtNQVRfREFURV9MT0NBTEUsIE1BVF9MVVhPTl9EQVRFX0FEQVBURVJfT1BUSU9OU10sXG4gICAgfSxcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBkYXRlUGlja2VyRm9ybWF0cyB9LFxuXG4gICAgLy9wcm92aWRlTHV4b25EYXRlQWRhcHRlcihkYXRlUGlja2VyRm9ybWF0cyksXG4gICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZVZhbHVlOiAnZGUtREUnIH0sXG4gICAgeyBwcm92aWRlOiBNQVRfREFURV9MT0NBTEUsIHVzZVZhbHVlOiAnZGUtREUnIH0sXG4gICAgeyBwcm92aWRlOiBNQVRfTFVYT05fREFURV9BREFQVEVSX09QVElPTlMsIHVzZVZhbHVlOiB7IHVzZVV0YzogdHJ1ZSwgZmlyc3REYXlPZldlZWs6IDEgfSB9LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGlucHV0R3JvdXAhOiBGb3JtR3JvdXA8eyBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+OyBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PiB9PjtcblxuICBAVmlld0NoaWxkKCdzdGFydCcsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJvdGVjdGVkIHN0YXJ0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdyaXBwbGUnLCB7XG4gICAgcmVhZDogTWF0UmlwcGxlLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJvdGVjdGVkIHJpcHBsZSE6IE1hdFJpcHBsZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvL2RlZmVyIHRoaXMgdG8gYXZvaWQgYW4gRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvciBvbiB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5pbnB1dEdyb3VwLnJlc2V0KCkpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5zdGFydD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMucmlwcGxlLmxhdW5jaCh7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgLy8gQW5ndWxhciBNYXRlcmlhbCBidWc6IGRpc2FibGVkIHJpcHBsZXMgZG8gbm90IHRyaWdnZXIgdW5sZXNzIGNlbnRlcmVkXG4gICAgICByYWRpdXM6IDEwMDAsXG4gICAgICBhbmltYXRpb246IHtcbiAgICAgICAgZXhpdER1cmF0aW9uOiAxMDAwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImlucHV0R3JvdXBcIiBtYXRSaXBwbGUgI3JpcHBsZT1cIm1hdFJpcHBsZVwiIFttYXRSaXBwbGVEaXNhYmxlZF09XCJ0cnVlXCI+XG4gIDwhLS0gc3RhcnQgZGF0ZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+WmVpdHB1bmt0IDE8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgI3N0YXJ0XG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFttaW5dPVwiaW5wdXRHcm91cC5jb250cm9scy5zdGFydC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICBbbWF4XT1cImlucHV0R3JvdXAuY29udHJvbHMuZW5kLmRlZmF1bHRWYWx1ZVwiXG4gICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlcjFcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3RhcnRzIGRhdGVcIlxuICAgID5cbiAgICA8IS0tXG4gICAgICAgICAgPG1hdC1oaW50PmQuTS55eXl5PC9tYXQtaGludD5cbiAgICAtLT5cbiAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXIxXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgPG1hdC1kYXRlcGlja2VyIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiICNwaWNrZXIxIFtzdGFydEF0XT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCI+XG4gICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPCEtLSAvc3RhcnQgZGF0ZSAtLT5cbiAgPCEtLSBlbmQgZGF0ZSAtLT5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+WmVpdHB1bmt0MjwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICBbbWluXT1cImlucHV0R3JvdXAuY29udHJvbHMuc3RhcnQuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgW21heF09XCJpbnB1dEdyb3VwLmNvbnRyb2xzLmVuZC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIyXCJcbiAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiXG4gICAgPlxuICAgIDwhLS1cbiAgICA8bWF0LWhpbnQ+ZC5NLnl5eXk8L21hdC1oaW50PlxuICAgIC0tPlxuICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICA8bWF0LWRhdGVwaWNrZXIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgI3BpY2tlcjIgW3N0YXJ0QXRdPVwiaW5wdXRHcm91cC5jb250cm9scy5lbmQudmFsdWVcIj5cbiAgICA8L21hdC1kYXRlcGlja2VyPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8IS0tIC9lbmQgZGF0ZSAtLT5cbjwvZGl2PlxuIl19