@testgorilla/tgo-ui 3.14.13 → 4.0.0
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/components/donut-chart/donut-chart.component.d.ts +2 -2
- package/components/filter-button/filter-button.component.d.ts +2 -2
- package/components/icon/icon-svg-content.d.ts +1 -1
- package/components/table/table.component.d.ts +1 -1
- package/fesm2022/testgorilla-tgo-ui.mjs +731 -715
- package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
- package/package.json +17 -20
- package/projects/tgo-canopy-ui/theme/_palette.scss +2 -1
- package/utils/color-contrast.d.ts +1 -1
- package/esm2022/assets/i18n/da-dk.json +0 -820
- package/esm2022/assets/i18n/de.json +0 -820
- package/esm2022/assets/i18n/en.json +0 -827
- package/esm2022/assets/i18n/es.json +0 -820
- package/esm2022/assets/i18n/fr.json +0 -820
- package/esm2022/assets/i18n/it-it.json +0 -820
- package/esm2022/assets/i18n/ja-jp.json +0 -820
- package/esm2022/assets/i18n/nb-no.json +0 -820
- package/esm2022/assets/i18n/nl.json +0 -820
- package/esm2022/assets/i18n/pl-pl.json +0 -820
- package/esm2022/assets/i18n/pt-br.json +0 -820
- package/esm2022/assets/i18n/sv-se.json +0 -820
- package/esm2022/components/accordion/accordion.component.mjs +0 -135
- package/esm2022/components/accordion/accordion.component.module.mjs +0 -40
- package/esm2022/components/accordion/accordion.model.mjs +0 -2
- package/esm2022/components/ai-feedback/ai-feedback.component.mjs +0 -35
- package/esm2022/components/ai-feedback/ai-feedback.model.mjs +0 -2
- package/esm2022/components/ai-feedback/ai-feedback.module.mjs +0 -20
- package/esm2022/components/alert-banner/alert-banner.component.mjs +0 -198
- package/esm2022/components/alert-banner/alert-banner.component.module.mjs +0 -21
- package/esm2022/components/alert-banner/alert-banner.model.mjs +0 -2
- package/esm2022/components/autocomplete/autocomplete.component.mjs +0 -837
- package/esm2022/components/autocomplete/autocomplete.component.module.mjs +0 -77
- package/esm2022/components/autocomplete/autocomplete.model.mjs +0 -25
- package/esm2022/components/autocomplete/includes.pipe.mjs +0 -25
- package/esm2022/components/autocomplete/prevent-input.directive.mjs +0 -27
- package/esm2022/components/autocomplete/transform-Item.pipe.mjs +0 -32
- package/esm2022/components/avatar/avatar.component.mjs +0 -104
- package/esm2022/components/avatar/avatar.component.module.mjs +0 -23
- package/esm2022/components/avatar/avatar.model.mjs +0 -21
- package/esm2022/components/badge/badge.component.mjs +0 -118
- package/esm2022/components/badge/badge.component.module.mjs +0 -20
- package/esm2022/components/badge/badge.model.mjs +0 -39
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -191
- package/esm2022/components/breadcrumb/breadcrumb.component.module.mjs +0 -45
- package/esm2022/components/breadcrumb/breadcrumb.model.mjs +0 -2
- package/esm2022/components/button/button.component.mjs +0 -452
- package/esm2022/components/button/button.component.module.mjs +0 -51
- package/esm2022/components/button/button.model.mjs +0 -2
- package/esm2022/components/card/card.component.mjs +0 -141
- package/esm2022/components/card/card.component.module.mjs +0 -19
- package/esm2022/components/card/card.model.mjs +0 -2
- package/esm2022/components/checkbox/checkbox.component.mjs +0 -336
- package/esm2022/components/checkbox/checkbox.component.module.mjs +0 -28
- package/esm2022/components/checkbox/focus-visible.directive.mjs +0 -40
- package/esm2022/components/checklist/checklist.component.mjs +0 -157
- package/esm2022/components/checklist/checklist.model.mjs +0 -2
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +0 -73
- package/esm2022/components/confirm-dialog/confirm-dialog.component.module.mjs +0 -29
- package/esm2022/components/confirm-dialog/confirm-dialog.model.mjs +0 -2
- package/esm2022/components/datepicker/date-adapter.mjs +0 -39
- package/esm2022/components/datepicker/datepicker.component.mjs +0 -353
- package/esm2022/components/datepicker/datepicker.component.module.mjs +0 -60
- package/esm2022/components/datepicker/datepicker.service.mjs +0 -20
- package/esm2022/components/datepicker/no-date-format.directive.mjs +0 -56
- package/esm2022/components/deprecated-paginator/deprecated-paginator.component.mjs +0 -55
- package/esm2022/components/deprecated-paginator/deprecated-paginator.component.module.mjs +0 -20
- package/esm2022/components/dialog/dialog.component.mjs +0 -275
- package/esm2022/components/dialog/dialog.component.module.mjs +0 -23
- package/esm2022/components/dialog/dialog.model.mjs +0 -2
- package/esm2022/components/dialog/dialog.service.mjs +0 -36
- package/esm2022/components/divider/divider.component.mjs +0 -65
- package/esm2022/components/divider/divider.component.module.mjs +0 -19
- package/esm2022/components/divider/divider.model.mjs +0 -2
- package/esm2022/components/donut-chart/donut-chart.component.mjs +0 -122
- package/esm2022/components/donut-chart/donut-chart.component.model.mjs +0 -2
- package/esm2022/components/donut-chart/donut-chart.component.module.mjs +0 -20
- package/esm2022/components/dropdown/dropdown.component.mjs +0 -378
- package/esm2022/components/dropdown/dropdown.component.module.mjs +0 -57
- package/esm2022/components/dropdown/dropdown.model.mjs +0 -2
- package/esm2022/components/elevation-shadow/elevation-shadow.component.mjs +0 -45
- package/esm2022/components/elevation-shadow/elevation-shadow.component.module.mjs +0 -18
- package/esm2022/components/elevation-shadow/elevation-shadow.constant.mjs +0 -9
- package/esm2022/components/empty-state/empty-state.component.mjs +0 -301
- package/esm2022/components/empty-state/empty-state.component.module.mjs +0 -21
- package/esm2022/components/empty-state/empty-state.model.mjs +0 -2
- package/esm2022/components/field/field.component.mjs +0 -574
- package/esm2022/components/field/field.component.module.mjs +0 -64
- package/esm2022/components/field/field.model.mjs +0 -2
- package/esm2022/components/file-upload/file-upload.component.mjs +0 -307
- package/esm2022/components/file-upload/file-upload.component.module.mjs +0 -40
- package/esm2022/components/filter-button/filter-button.component.mjs +0 -255
- package/esm2022/components/filter-button/filter-button.component.module.mjs +0 -58
- package/esm2022/components/filter-button/filter-button.model.mjs +0 -2
- package/esm2022/components/gaussian-chart/gaussian-chart.component.mjs +0 -254
- package/esm2022/components/gaussian-chart/gaussian-chart.module.mjs +0 -42
- package/esm2022/components/icon/icon-svg-content.mjs +0 -491
- package/esm2022/components/icon/icon.component.mjs +0 -178
- package/esm2022/components/icon/icon.component.module.mjs +0 -21
- package/esm2022/components/icon/icon.config.mjs +0 -780
- package/esm2022/components/icon/icon.model.mjs +0 -2
- package/esm2022/components/icon-label/icon-label.component.mjs +0 -74
- package/esm2022/components/icon-label/icon-label.component.module.mjs +0 -20
- package/esm2022/components/inline-field/inline-field.component.mjs +0 -320
- package/esm2022/components/inline-field/inline-field.component.module.mjs +0 -43
- package/esm2022/components/inline-field/inline-field.model.mjs +0 -2
- package/esm2022/components/logo/logo.component.mjs +0 -165
- package/esm2022/components/logo/logo.component.module.mjs +0 -18
- package/esm2022/components/logo/logo.model.mjs +0 -32
- package/esm2022/components/media-card/media-card.component.mjs +0 -47
- package/esm2022/components/media-dialog/media-dialog.component.mjs +0 -75
- package/esm2022/components/media-dialog/media-dialog.model.mjs +0 -2
- package/esm2022/components/multi-input/multi-input.component.mjs +0 -271
- package/esm2022/components/multi-input/multi-input.component.module.mjs +0 -58
- package/esm2022/components/multi-input/multi-input.model.mjs +0 -2
- package/esm2022/components/multi-input/required-multi-input.validator.mjs +0 -14
- package/esm2022/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.mjs +0 -86
- package/esm2022/components/navbar/navbar.component.mjs +0 -212
- package/esm2022/components/navbar/navbar.component.module.mjs +0 -71
- package/esm2022/components/navbar/navbar.model.mjs +0 -2
- package/esm2022/components/overflow-menu/overflow-menu.component.mjs +0 -254
- package/esm2022/components/overflow-menu/overflow-menu.component.module.mjs +0 -25
- package/esm2022/components/overflow-menu/overflow-menu.model.mjs +0 -2
- package/esm2022/components/page-header/page-header.component.mjs +0 -71
- package/esm2022/components/page-header/page-header.component.module.mjs +0 -20
- package/esm2022/components/paginator/paginator.component.mjs +0 -87
- package/esm2022/components/paginator/paginator.component.module.mjs +0 -19
- package/esm2022/components/password-criteria/password.component.mjs +0 -111
- package/esm2022/components/password-criteria/password.component.module.mjs +0 -39
- package/esm2022/components/password-strength/password-strength.component.mjs +0 -93
- package/esm2022/components/password-strength/password-strength.component.module.mjs +0 -21
- package/esm2022/components/phone-input/join-strings.pipe.mjs +0 -14
- package/esm2022/components/phone-input/phone-input.component.mjs +0 -354
- package/esm2022/components/phone-input/phone-input.component.module.mjs +0 -63
- package/esm2022/components/phone-input/phone-input.model.mjs +0 -2
- package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -103
- package/esm2022/components/progress-bar/progress-bar.component.module.mjs +0 -21
- package/esm2022/components/prompt/prompt.component.mjs +0 -187
- package/esm2022/components/prompt/prompt.model.mjs +0 -2
- package/esm2022/components/prompt/prompt.module.mjs +0 -62
- package/esm2022/components/radial-progress/radial-progress.component.mjs +0 -118
- package/esm2022/components/radial-progress/radial-progress.component.module.mjs +0 -20
- package/esm2022/components/radial-progress/radial-progress.model.mjs +0 -11
- package/esm2022/components/radio-button/radio-button.component.mjs +0 -344
- package/esm2022/components/radio-button/radio-button.component.module.mjs +0 -25
- package/esm2022/components/radio-button/radio-button.model.mjs +0 -2
- package/esm2022/components/rating/half-star.pipe.mjs +0 -23
- package/esm2022/components/rating/rating.component.mjs +0 -106
- package/esm2022/components/rating/rating.component.module.mjs +0 -20
- package/esm2022/components/scale/scale.component.mjs +0 -136
- package/esm2022/components/scale/scale.component.module.mjs +0 -18
- package/esm2022/components/scale-table/scale-table.component.mjs +0 -61
- package/esm2022/components/scale-table/scale-table.model.mjs +0 -2
- package/esm2022/components/segmented-bar/segmented-bar.component.mjs +0 -111
- package/esm2022/components/segmented-bar/segmented-bar.component.module.mjs +0 -22
- package/esm2022/components/segmented-bar/segmented-bar.model.mjs +0 -2
- package/esm2022/components/segmented-button/segmented-button.component.mjs +0 -104
- package/esm2022/components/segmented-button/segmented-button.component.module.mjs +0 -21
- package/esm2022/components/segmented-button/segmented-button.model.mjs +0 -2
- package/esm2022/components/selectable-card/selectable-card.component.mjs +0 -53
- package/esm2022/components/selectable-card/selectable-card.component.module.mjs +0 -20
- package/esm2022/components/side-panel/side-panel-data-injection-token.mjs +0 -3
- package/esm2022/components/side-panel/side-panel.animations.mjs +0 -26
- package/esm2022/components/side-panel/side-panel.component.mjs +0 -55
- package/esm2022/components/side-panel/side-panel.model.mjs +0 -54
- package/esm2022/components/side-panel/side-panel.service.mjs +0 -98
- package/esm2022/components/side-sheet/side-sheet.component.mjs +0 -105
- package/esm2022/components/side-sheet/side-sheet.component.module.mjs +0 -43
- package/esm2022/components/side-sheet/side-sheet.model.mjs +0 -2
- package/esm2022/components/side-sheet/side-sheet.service.mjs +0 -31
- package/esm2022/components/skeleton/skeleton.component.mjs +0 -74
- package/esm2022/components/skeleton/skeleton.model.mjs +0 -2
- package/esm2022/components/slider/slider.component.mjs +0 -256
- package/esm2022/components/slider/slider.component.module.mjs +0 -16
- package/esm2022/components/slider/slider.model.mjs +0 -2
- package/esm2022/components/snackbar/snackbar.component.mjs +0 -235
- package/esm2022/components/snackbar/snackbar.component.module.mjs +0 -25
- package/esm2022/components/snackbar/snackbar.model.mjs +0 -2
- package/esm2022/components/snackbar/snackbar.service.mjs +0 -42
- package/esm2022/components/spider-chart/spider-chart.component.mjs +0 -443
- package/esm2022/components/spider-chart/spider-chart.model.mjs +0 -4
- package/esm2022/components/spider-chart/spider-chart.module.mjs +0 -44
- package/esm2022/components/spinner/spinner.component.mjs +0 -84
- package/esm2022/components/spinner/spinner.model.mjs +0 -2
- package/esm2022/components/spinner/spinner.module.mjs +0 -20
- package/esm2022/components/step/step.component.mjs +0 -209
- package/esm2022/components/step/step.component.module.mjs +0 -21
- package/esm2022/components/stepper/stepper.component.mjs +0 -198
- package/esm2022/components/stepper/stepper.component.module.mjs +0 -44
- package/esm2022/components/stepper/stepper.model.mjs +0 -2
- package/esm2022/components/table/sentence-case.pipe.mjs +0 -19
- package/esm2022/components/table/table.component.mjs +0 -273
- package/esm2022/components/table/table.component.module.mjs +0 -61
- package/esm2022/components/table/table.model.mjs +0 -25
- package/esm2022/components/tabs/tab.directive.mjs +0 -63
- package/esm2022/components/tabs/tabs.component.mjs +0 -219
- package/esm2022/components/tabs/tabs.component.module.mjs +0 -23
- package/esm2022/components/tabs/tabs.model.mjs +0 -2
- package/esm2022/components/tag/tag.component.mjs +0 -212
- package/esm2022/components/tag/tag.component.module.mjs +0 -24
- package/esm2022/components/tag/tag.model.mjs +0 -2
- package/esm2022/components/toggle/toggle.component.mjs +0 -190
- package/esm2022/components/toggle/toggle.component.module.mjs +0 -24
- package/esm2022/components/toggle/toggle.model.mjs +0 -2
- package/esm2022/components/tooltip/tooltip-template.directive.mjs +0 -133
- package/esm2022/components/tooltip/tooltip.component.mjs +0 -108
- package/esm2022/components/tooltip/tooltip.component.module.mjs +0 -27
- package/esm2022/components/tooltip/tooltip.model.mjs +0 -8
- package/esm2022/components/universal-skills-report/universal-skills-report.component.mjs +0 -80
- package/esm2022/components/universal-skills-report/universal-skills-report.component.module.mjs +0 -43
- package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.mjs +0 -109
- package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.module.mjs +0 -52
- package/esm2022/components/validation-error/validation-error.component.mjs +0 -55
- package/esm2022/components/validation-error/validation-error.model.mjs +0 -2
- package/esm2022/components/validation-error/validation-error.module.mjs +0 -20
- package/esm2022/directives/digits-only.directive.mjs +0 -77
- package/esm2022/directives/drag-drop.directive.mjs +0 -55
- package/esm2022/directives/dynamic-component.directive.mjs +0 -40
- package/esm2022/directives/ellipse-text.directive.mjs +0 -51
- package/esm2022/directives/select-text.directive.mjs +0 -40
- package/esm2022/directives/step-line-element.directive.mjs +0 -51
- package/esm2022/models/application-theme.model.mjs +0 -2
- package/esm2022/models/checkbox.model.mjs +0 -2
- package/esm2022/models/colors.model.mjs +0 -78
- package/esm2022/models/keyboard-events.model.mjs +0 -13
- package/esm2022/models/screen-breakpoints.model.mjs +0 -7
- package/esm2022/models/universal-skills-report.model.mjs +0 -33
- package/esm2022/pipes/data-property-getter.mjs +0 -33
- package/esm2022/pipes/has-validation-error.pipe.mjs +0 -27
- package/esm2022/pipes/memoize-func.pipe.mjs +0 -39
- package/esm2022/pipes/name-initials.pipe.mjs +0 -25
- package/esm2022/pipes/truncate.pipe.mjs +0 -34
- package/esm2022/pipes/ui-ordinal-suffix.pipe.mjs +0 -31
- package/esm2022/pipes/ui-translate.pipe.mjs +0 -81
- package/esm2022/providers/is-large-tablet.mjs +0 -11
- package/esm2022/providers/is-mobile.mjs +0 -11
- package/esm2022/public-api.mjs +0 -259
- package/esm2022/services/icons.service.mjs +0 -22
- package/esm2022/services/universal-skills.service.mjs +0 -85
- package/esm2022/testgorilla-tgo-ui.mjs +0 -5
- package/esm2022/utils/alert-bar.model.mjs +0 -2
- package/esm2022/utils/alert-bars.utils.mjs +0 -34
- package/esm2022/utils/autocomplete-utils.mjs +0 -78
- package/esm2022/utils/color-contrast.mjs +0 -131
- package/esm2022/utils/hex-to-rgb.mjs +0 -9
- package/esm2022/utils/localization/language.model.mjs +0 -16
- package/esm2022/utils/localization/language.service.mjs +0 -44
- package/esm2022/utils/table.utils.mjs +0 -25
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { Color } from '../../models/colors.model';
|
|
3
|
-
import gaussian from 'gaussian';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "ng2-charts";
|
|
7
|
-
import * as i3 from "@angular/material/tooltip";
|
|
8
|
-
import * as i4 from "../icon/icon.component";
|
|
9
|
-
import * as i5 from "../../pipes/ui-translate.pipe";
|
|
10
|
-
import * as i6 from "../../pipes/memoize-func.pipe";
|
|
11
|
-
var PercentileThreshold;
|
|
12
|
-
(function (PercentileThreshold) {
|
|
13
|
-
PercentileThreshold[PercentileThreshold["LOWEST"] = 20] = "LOWEST";
|
|
14
|
-
PercentileThreshold[PercentileThreshold["LOWER"] = 40] = "LOWER";
|
|
15
|
-
PercentileThreshold[PercentileThreshold["AVERAGE"] = 60] = "AVERAGE";
|
|
16
|
-
PercentileThreshold[PercentileThreshold["HIGHER"] = 80] = "HIGHER";
|
|
17
|
-
PercentileThreshold[PercentileThreshold["HIGHEST"] = 100] = "HIGHEST";
|
|
18
|
-
})(PercentileThreshold || (PercentileThreshold = {}));
|
|
19
|
-
export class GaussianChartComponent {
|
|
20
|
-
constructor() {
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
* Defines the application theme
|
|
24
|
-
*
|
|
25
|
-
* @type {ApplicationTheme}
|
|
26
|
-
* @memberof SpinnerComponent
|
|
27
|
-
*/
|
|
28
|
-
this.applicationTheme = 'light';
|
|
29
|
-
/**
|
|
30
|
-
* Controls the position of the legend relative to the chart.
|
|
31
|
-
* @type {LegendPosition}
|
|
32
|
-
* @memberof GaussianChartComponent
|
|
33
|
-
*/
|
|
34
|
-
this.legendPosition = 'bottom-start';
|
|
35
|
-
this.minXValue = -3;
|
|
36
|
-
this.maxXValue = 3;
|
|
37
|
-
this.minYValue = 0;
|
|
38
|
-
this.stepSize = 0.1;
|
|
39
|
-
this.pointsToSkip = 2;
|
|
40
|
-
this.actualMinXvalue = this.minXValue + this.pointsToSkip * this.stepSize;
|
|
41
|
-
this.actualMaxXvalue = this.maxXValue - this.pointsToSkip * this.stepSize;
|
|
42
|
-
this.normalContainerPadding = 50; //in px
|
|
43
|
-
this.bestScoreThreshold = 92;
|
|
44
|
-
this.bestScoreSpacingRight = '4px';
|
|
45
|
-
this.bestScoreSpacingLeft = '-39px';
|
|
46
|
-
this.PercentileThreshold = PercentileThreshold;
|
|
47
|
-
this.gaussianChartData = {
|
|
48
|
-
labels: [],
|
|
49
|
-
datasets: [],
|
|
50
|
-
};
|
|
51
|
-
this.translationContext = 'CHARTS.GAUSSIAN_CHART.';
|
|
52
|
-
}
|
|
53
|
-
ngOnInit() {
|
|
54
|
-
if (this.score === undefined || this.score === null) {
|
|
55
|
-
throw new Error('Input "score" is required for GaussianChartComponent.');
|
|
56
|
-
}
|
|
57
|
-
if (this.bestCandidateScore === undefined || this.bestCandidateScore === null) {
|
|
58
|
-
throw new Error('Input "bestCandidateScore" is required for GaussianChartComponent.');
|
|
59
|
-
}
|
|
60
|
-
this.setActiveBucket();
|
|
61
|
-
this.gaussianDistribution = gaussian(0, 1);
|
|
62
|
-
this.maxYValue = this.gaussianDistribution.pdf(0);
|
|
63
|
-
this.setOverlayValues();
|
|
64
|
-
this.setOverlayValuesForBestScore();
|
|
65
|
-
this.setChartData();
|
|
66
|
-
this.setChartOptions();
|
|
67
|
-
}
|
|
68
|
-
setChartData() {
|
|
69
|
-
const xValues = [];
|
|
70
|
-
const yValues = [];
|
|
71
|
-
const labels = this.generateLabels(this.minXValue, this.maxXValue, this.stepSize);
|
|
72
|
-
for (let x = this.minXValue; x < this.maxXValue + this.stepSize; x = Number((x + this.stepSize).toFixed(2))) {
|
|
73
|
-
xValues.push(x);
|
|
74
|
-
yValues.push(this.gaussianDistribution.pdf(x));
|
|
75
|
-
}
|
|
76
|
-
this.gaussianChartData = {
|
|
77
|
-
labels,
|
|
78
|
-
datasets: this.generateDataset(yValues),
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
setChartOptions() {
|
|
82
|
-
this.gaussianChartOptions = {
|
|
83
|
-
responsive: true,
|
|
84
|
-
maintainAspectRatio: false,
|
|
85
|
-
scales: this.getScale(),
|
|
86
|
-
plugins: {
|
|
87
|
-
// To be used only for dev purpose
|
|
88
|
-
// tooltip: this.getTooltip(),
|
|
89
|
-
// Comment the below line if you enable the call for tooltip
|
|
90
|
-
tooltip: {
|
|
91
|
-
enabled: false,
|
|
92
|
-
},
|
|
93
|
-
legend: {
|
|
94
|
-
display: false,
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
getTooltip() {
|
|
100
|
-
return {
|
|
101
|
-
intersect: false,
|
|
102
|
-
mode: 'nearest',
|
|
103
|
-
displayColors: false,
|
|
104
|
-
callbacks: {
|
|
105
|
-
label: tooltipItem => {
|
|
106
|
-
const value = (this.gaussianDistribution.cdf(parseFloat(tooltipItem.label)) * 100).toFixed(2);
|
|
107
|
-
return `${value}%`;
|
|
108
|
-
},
|
|
109
|
-
title: () => '', // Disable the default title
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
getScale() {
|
|
114
|
-
return {
|
|
115
|
-
x: {
|
|
116
|
-
display: false,
|
|
117
|
-
grid: {
|
|
118
|
-
display: false, // Disable grid lines for x-axis
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
y: {
|
|
122
|
-
display: false,
|
|
123
|
-
grid: {
|
|
124
|
-
display: false, // Disable grid lines for y-axis
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
generateDataset(yValues) {
|
|
130
|
-
return [
|
|
131
|
-
{
|
|
132
|
-
data: [...yValues.slice(0, this.pointsToSkip), ...Array(yValues.length - this.pointsToSkip).fill(null)],
|
|
133
|
-
label: '',
|
|
134
|
-
borderColor: this.activeBucket === PercentileThreshold.LOWEST ? Color.ACCENT_20 : Color.TGO_WHITE,
|
|
135
|
-
borderWidth: 2,
|
|
136
|
-
pointRadius: 0,
|
|
137
|
-
fill: false,
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
data: [
|
|
141
|
-
...Array(this.pointsToSkip).fill(null),
|
|
142
|
-
...yValues.slice(this.pointsToSkip, yValues.length - this.pointsToSkip),
|
|
143
|
-
...Array(this.pointsToSkip).fill(null),
|
|
144
|
-
],
|
|
145
|
-
label: '',
|
|
146
|
-
borderColor: Color.BLACK,
|
|
147
|
-
borderWidth: 2,
|
|
148
|
-
pointRadius: 0,
|
|
149
|
-
fill: false,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
data: [
|
|
153
|
-
...Array(yValues.length - this.pointsToSkip).fill(null),
|
|
154
|
-
...yValues.slice(yValues.length - this.pointsToSkip, yValues.length),
|
|
155
|
-
],
|
|
156
|
-
label: '',
|
|
157
|
-
borderColor: this.activeBucket === PercentileThreshold.HIGHEST ? Color.ACCENT_20 : Color.TGO_WHITE,
|
|
158
|
-
borderWidth: 2,
|
|
159
|
-
pointRadius: 0,
|
|
160
|
-
fill: false,
|
|
161
|
-
},
|
|
162
|
-
];
|
|
163
|
-
}
|
|
164
|
-
generateLabels(min, max, step) {
|
|
165
|
-
const labels = [];
|
|
166
|
-
for (let x = min; x < max + step; x = Number((x + step).toFixed(2))) {
|
|
167
|
-
labels.push(x.toFixed(1));
|
|
168
|
-
}
|
|
169
|
-
return labels;
|
|
170
|
-
}
|
|
171
|
-
setActiveBucket() {
|
|
172
|
-
if (this.score < PercentileThreshold.LOWEST) {
|
|
173
|
-
this.activeBucket = PercentileThreshold.LOWEST;
|
|
174
|
-
}
|
|
175
|
-
else if (this.score >= PercentileThreshold.LOWEST && this.score < PercentileThreshold.LOWER) {
|
|
176
|
-
this.activeBucket = PercentileThreshold.LOWER;
|
|
177
|
-
}
|
|
178
|
-
else if (this.score >= PercentileThreshold.LOWER && this.score < PercentileThreshold.AVERAGE) {
|
|
179
|
-
this.activeBucket = PercentileThreshold.AVERAGE;
|
|
180
|
-
}
|
|
181
|
-
else if (this.score >= PercentileThreshold.AVERAGE && this.score < PercentileThreshold.HIGHER) {
|
|
182
|
-
this.activeBucket = PercentileThreshold.HIGHER;
|
|
183
|
-
}
|
|
184
|
-
else if (this.score >= PercentileThreshold.HIGHER) {
|
|
185
|
-
this.activeBucket = PercentileThreshold.HIGHEST;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// For more context: https://testgorilla.atlassian.net/wiki/spaces/SR/pages/1813905736/Percentiles+curve+FE+implementation
|
|
189
|
-
setOverlayValues() {
|
|
190
|
-
const { overlayXValue, overlayYValue } = this.calculateOverlayValues(this.score);
|
|
191
|
-
this.overlayXValue = overlayXValue;
|
|
192
|
-
this.overlayYValue = overlayYValue;
|
|
193
|
-
}
|
|
194
|
-
setOverlayValuesForBestScore() {
|
|
195
|
-
const { overlayXValue, overlayYValue } = this.calculateOverlayValues(this.bestCandidateScore);
|
|
196
|
-
this.overlayXBestScoreValue = overlayXValue;
|
|
197
|
-
this.overlayYBestScoreValue = overlayYValue;
|
|
198
|
-
}
|
|
199
|
-
calculateOverlayValues(score) {
|
|
200
|
-
const xValue = this.mapRange(score, 0, 100, this.minXValue, this.maxXValue);
|
|
201
|
-
const yValue = this.gaussianDistribution.pdf(xValue);
|
|
202
|
-
let overlayXValue = score;
|
|
203
|
-
let overlayYValue = this.mapRange(yValue, this.minYValue, this.maxYValue, 0, 100);
|
|
204
|
-
if (xValue <= this.actualMinXvalue || xValue >= this.actualMaxXvalue) {
|
|
205
|
-
const xValueExtreme = xValue <= this.actualMinXvalue ? this.actualMinXvalue : this.actualMaxXvalue;
|
|
206
|
-
const yValueExtreme = this.gaussianDistribution.pdf(xValueExtreme);
|
|
207
|
-
overlayXValue = this.mapRange(xValueExtreme, this.minXValue, this.maxXValue, 0, 100);
|
|
208
|
-
overlayYValue = this.mapRange(yValueExtreme, this.minYValue, this.maxYValue, 0, 100);
|
|
209
|
-
}
|
|
210
|
-
return { overlayXValue, overlayYValue };
|
|
211
|
-
}
|
|
212
|
-
mapRange(value, inMin, inMax, outMin, outMax) {
|
|
213
|
-
return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;
|
|
214
|
-
}
|
|
215
|
-
getCalcPosition([percentage, pixels, operation = 'add']) {
|
|
216
|
-
const operator = operation === 'add' ? '+' : '-';
|
|
217
|
-
return `calc(${percentage}% ${operator} ${pixels}px)`;
|
|
218
|
-
}
|
|
219
|
-
getBestScoreContentPosition(bestScore) {
|
|
220
|
-
return bestScore < this.bestScoreThreshold ? this.bestScoreSpacingRight : this.bestScoreSpacingLeft;
|
|
221
|
-
}
|
|
222
|
-
getScoreTranslationKey(score) {
|
|
223
|
-
if (score < PercentileThreshold.LOWEST) {
|
|
224
|
-
return 'PERCENTILE_LABEL_TYPES.WELL_BELOW_AVERAGE';
|
|
225
|
-
}
|
|
226
|
-
else if (score >= PercentileThreshold.LOWEST && score < PercentileThreshold.LOWER) {
|
|
227
|
-
return 'PERCENTILE_LABEL_TYPES.BELOW_AVERAGE';
|
|
228
|
-
}
|
|
229
|
-
else if (score >= PercentileThreshold.LOWER && score < PercentileThreshold.AVERAGE) {
|
|
230
|
-
return 'PERCENTILE_LABEL_TYPES.AVERAGE';
|
|
231
|
-
}
|
|
232
|
-
else if (score >= PercentileThreshold.AVERAGE && score < PercentileThreshold.HIGHER) {
|
|
233
|
-
return 'PERCENTILE_LABEL_TYPES.ABOVE_AVERAGE';
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
return 'PERCENTILE_LABEL_TYPES.WELL_ABOVE_AVERAGE';
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GaussianChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
240
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GaussianChartComponent, selector: "ui-gaussian-chart", inputs: { score: "score", bestCandidateScore: "bestCandidateScore", applicationTheme: "applicationTheme", legendPosition: "legendPosition" }, ngImport: i0, template: "<div\n class=\"chart-section\"\n *ngIf=\"score\"\n [attr.aria-label]=\"\n translationContext + 'ARIA_LABEL'\n | uiTranslate\n : {\n score: score,\n activeBucket: getScoreTranslationKey(score) | uiTranslate | async,\n bestCandidateScore: bestCandidateScore,\n activeBucketBestScore: getScoreTranslationKey(bestCandidateScore) | uiTranslate | async,\n }\n | async\n \"\n tabindex=\"0\"\n>\n <!-- Legend positioned at top -->\n @if (legendPosition === 'top-start' || legendPosition === 'top-end') {\n <ng-container [ngTemplateOutlet]=\"legendTemplate\"></ng-container>\n }\n\n <div class=\"chart-range-wrapper\">\n <div class=\"normal-chart-container\">\n <div class=\"normal-chart\">\n <canvas baseChart [data]=\"gaussianChartData\" [options]=\"gaussianChartOptions\" type=\"line\" class=\"chart\">\n </canvas>\n <div\n class=\"overlay-icon\"\n [style.bottom]=\"[overlayYValue, 3, 'subtract'] | memoizeFunc: getCalcPosition\"\n [style.left]=\"[overlayXValue, 20, 'subtract'] | memoizeFunc: getCalcPosition\"\n >\n <div class=\"drop-icon\">\n <ui-icon name=\"Pin-marker\" size=\"40\"></ui-icon>\n <span class=\"curve-score\">{{ score }}</span>\n </div>\n </div>\n <div\n class=\"best-score\"\n [style.height]=\"[100 - overlayYBestScoreValue, normalContainerPadding, 'add'] | memoizeFunc: getCalcPosition\"\n [style.bottom]=\"overlayYBestScoreValue + '%'\"\n [style.left]=\"overlayXBestScoreValue + '%'\"\n >\n <div\n class=\"best-score-content\"\n [style.left]=\"bestCandidateScore | memoizeFunc: getBestScoreContentPosition : this\"\n >\n <ui-icon name=\"Trophy\"></ui-icon>\n {{ bestCandidateScore }}\n </div>\n </div>\n </div>\n <div class=\"overlay\">\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.LOWEST\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.LOWEST\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWEST_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWEST' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.LOWER\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.LOWER\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWER_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWER' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.AVERAGE\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.AVERAGE\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.AVERAGE_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.AVERAGE' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.HIGHER\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.HIGHER\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHER_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHER' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.HIGHEST\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.HIGHEST\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHEST_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHEST' | uiTranslate | async }}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"range\">\n <div>1</div>\n <div>20</div>\n <div>40</div>\n <div>60</div>\n <div>80</div>\n <div>99</div>\n </div>\n </div>\n\n <!-- Legend positioned at bottom -->\n @if (legendPosition === 'bottom-start' || legendPosition === 'bottom-end') {\n <ng-container [ngTemplateOutlet]=\"legendTemplate\"></ng-container>\n }\n</div>\n\n<!-- Reusable legend template -->\n<ng-template #legendTemplate>\n <div class=\"legend-container\" [ngClass]=\"'legend-' + legendPosition\">\n <div class=\"legend\">\n <ui-icon name=\"Dot\" color=\"gray\"></ui-icon>\n {{ translationContext + 'CANDIDATE_SCORE' | uiTranslate | async }}\n </div>\n <div class=\"legend\">\n <ui-icon name=\"Trophy\" color=\"gray\"></ui-icon>\n {{ translationContext + 'HIGHEST_SCORE' | uiTranslate | async }}\n </div>\n </div>\n</ng-template>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.chart-section{display:flex;flex-direction:column;gap:16px;width:100%}.chart-section .chart-range-wrapper{display:flex;flex-direction:column;gap:8px;width:100%}.chart-section .chart-range-wrapper .normal-chart-container{position:relative;padding-bottom:32px;padding-top:50px;border:1px solid #D3D3D3;border-radius:10px;width:100%;height:230px}.chart-section .chart-range-wrapper .normal-chart-container .normal-chart{position:relative;z-index:1;width:100%;height:100%}.chart-section .chart-range-wrapper .normal-chart-container .overlay{position:absolute;top:0;left:0;height:100%;width:100%;display:flex}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column{flex:1;font-size:12px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-bottom:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column .column-item{cursor:pointer}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column:not(:last-child){border-right:1px solid #D3D3D3}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active{background-color:#fff5ed;border-bottom:3px solid #242424}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child,.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child{border:none;position:relative}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child{border-right:1px solid #D3D3D3}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child:before,.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child:after{content:\"\";position:absolute;bottom:0;width:calc(100% - 4px);height:2.5px;background-color:#000}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child{border-top-left-radius:8px;border-bottom-left-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child:before{right:0;border-bottom-left-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child:after{left:0;border-bottom-left-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay-icon{position:absolute;z-index:1;display:flex;flex-direction:column;align-items:center}.chart-section .chart-range-wrapper .normal-chart-container .overlay-icon .drop-icon{position:relative}.chart-section .chart-range-wrapper .normal-chart-container .overlay-icon .drop-icon .curve-score{font-size:14px;font-weight:700;position:absolute;width:100%;text-align:center;top:0;left:.5px;padding:4px 4px 9px}.chart-section .chart-range-wrapper .normal-chart-container .best-score{position:absolute;border-left:1px #242424 dashed}.chart-section .chart-range-wrapper .normal-chart-container .best-score .best-score-content{position:absolute;display:flex;gap:3px;align-items:center}.chart-section .chart-range-wrapper .range{display:flex;justify-content:space-between;color:#919191}.chart-section .chart-range-wrapper .range div{width:35px;text-align:center}.chart-section .chart-range-wrapper .range div:nth-child(2){text-align:left}.chart-section .chart-range-wrapper .range div:nth-last-child(2){text-align:right}.chart-section .legend-container{display:flex;gap:16px}.chart-section .legend-container.legend-top-start,.chart-section .legend-container.legend-bottom-start{justify-content:flex-start}.chart-section .legend-container.legend-top-end,.chart-section .legend-container.legend-bottom-end{justify-content:flex-end}.chart-section .legend-container .legend{display:flex;gap:8px;align-items:center;color:#666}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "pipe", type: i5.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.MemoizeFuncPipe, name: "memoizeFunc" }] }); }
|
|
241
|
-
}
|
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GaussianChartComponent, decorators: [{
|
|
243
|
-
type: Component,
|
|
244
|
-
args: [{ selector: 'ui-gaussian-chart', template: "<div\n class=\"chart-section\"\n *ngIf=\"score\"\n [attr.aria-label]=\"\n translationContext + 'ARIA_LABEL'\n | uiTranslate\n : {\n score: score,\n activeBucket: getScoreTranslationKey(score) | uiTranslate | async,\n bestCandidateScore: bestCandidateScore,\n activeBucketBestScore: getScoreTranslationKey(bestCandidateScore) | uiTranslate | async,\n }\n | async\n \"\n tabindex=\"0\"\n>\n <!-- Legend positioned at top -->\n @if (legendPosition === 'top-start' || legendPosition === 'top-end') {\n <ng-container [ngTemplateOutlet]=\"legendTemplate\"></ng-container>\n }\n\n <div class=\"chart-range-wrapper\">\n <div class=\"normal-chart-container\">\n <div class=\"normal-chart\">\n <canvas baseChart [data]=\"gaussianChartData\" [options]=\"gaussianChartOptions\" type=\"line\" class=\"chart\">\n </canvas>\n <div\n class=\"overlay-icon\"\n [style.bottom]=\"[overlayYValue, 3, 'subtract'] | memoizeFunc: getCalcPosition\"\n [style.left]=\"[overlayXValue, 20, 'subtract'] | memoizeFunc: getCalcPosition\"\n >\n <div class=\"drop-icon\">\n <ui-icon name=\"Pin-marker\" size=\"40\"></ui-icon>\n <span class=\"curve-score\">{{ score }}</span>\n </div>\n </div>\n <div\n class=\"best-score\"\n [style.height]=\"[100 - overlayYBestScoreValue, normalContainerPadding, 'add'] | memoizeFunc: getCalcPosition\"\n [style.bottom]=\"overlayYBestScoreValue + '%'\"\n [style.left]=\"overlayXBestScoreValue + '%'\"\n >\n <div\n class=\"best-score-content\"\n [style.left]=\"bestCandidateScore | memoizeFunc: getBestScoreContentPosition : this\"\n >\n <ui-icon name=\"Trophy\"></ui-icon>\n {{ bestCandidateScore }}\n </div>\n </div>\n </div>\n <div class=\"overlay\">\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.LOWEST\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.LOWEST\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWEST_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWEST' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.LOWER\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.LOWER\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWER_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.LOWER' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.AVERAGE\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.AVERAGE\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.AVERAGE_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.AVERAGE' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.HIGHER\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.HIGHER\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHER_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHER' | uiTranslate | async }}\n </div>\n </div>\n <div class=\"overlay-column\" [class.active]=\"activeBucket === PercentileThreshold.HIGHEST\">\n <div\n class=\"column-item\"\n [class.text-bold]=\"activeBucket === PercentileThreshold.HIGHEST\"\n [matTooltip]=\"(translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHEST_TOOLTIP' | uiTranslate | async) || ''\"\n >\n {{ translationContext + 'PERCENTAGE_BUCKETS_GRAPH.HIGHEST' | uiTranslate | async }}\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"range\">\n <div>1</div>\n <div>20</div>\n <div>40</div>\n <div>60</div>\n <div>80</div>\n <div>99</div>\n </div>\n </div>\n\n <!-- Legend positioned at bottom -->\n @if (legendPosition === 'bottom-start' || legendPosition === 'bottom-end') {\n <ng-container [ngTemplateOutlet]=\"legendTemplate\"></ng-container>\n }\n</div>\n\n<!-- Reusable legend template -->\n<ng-template #legendTemplate>\n <div class=\"legend-container\" [ngClass]=\"'legend-' + legendPosition\">\n <div class=\"legend\">\n <ui-icon name=\"Dot\" color=\"gray\"></ui-icon>\n {{ translationContext + 'CANDIDATE_SCORE' | uiTranslate | async }}\n </div>\n <div class=\"legend\">\n <ui-icon name=\"Trophy\" color=\"gray\"></ui-icon>\n {{ translationContext + 'HIGHEST_SCORE' | uiTranslate | async }}\n </div>\n </div>\n</ng-template>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.chart-section{display:flex;flex-direction:column;gap:16px;width:100%}.chart-section .chart-range-wrapper{display:flex;flex-direction:column;gap:8px;width:100%}.chart-section .chart-range-wrapper .normal-chart-container{position:relative;padding-bottom:32px;padding-top:50px;border:1px solid #D3D3D3;border-radius:10px;width:100%;height:230px}.chart-section .chart-range-wrapper .normal-chart-container .normal-chart{position:relative;z-index:1;width:100%;height:100%}.chart-section .chart-range-wrapper .normal-chart-container .overlay{position:absolute;top:0;left:0;height:100%;width:100%;display:flex}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column{flex:1;font-size:12px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;padding-bottom:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column .column-item{cursor:pointer}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column:not(:last-child){border-right:1px solid #D3D3D3}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active{background-color:#fff5ed;border-bottom:3px solid #242424}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child,.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child{border:none;position:relative}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child{border-right:1px solid #D3D3D3}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child:before,.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child:after{content:\"\";position:absolute;bottom:0;width:calc(100% - 4px);height:2.5px;background-color:#000}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child{border-top-left-radius:8px;border-bottom-left-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:first-child:before{right:0;border-bottom-left-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay .overlay-column.active:last-child:after{left:0;border-bottom-left-radius:8px}.chart-section .chart-range-wrapper .normal-chart-container .overlay-icon{position:absolute;z-index:1;display:flex;flex-direction:column;align-items:center}.chart-section .chart-range-wrapper .normal-chart-container .overlay-icon .drop-icon{position:relative}.chart-section .chart-range-wrapper .normal-chart-container .overlay-icon .drop-icon .curve-score{font-size:14px;font-weight:700;position:absolute;width:100%;text-align:center;top:0;left:.5px;padding:4px 4px 9px}.chart-section .chart-range-wrapper .normal-chart-container .best-score{position:absolute;border-left:1px #242424 dashed}.chart-section .chart-range-wrapper .normal-chart-container .best-score .best-score-content{position:absolute;display:flex;gap:3px;align-items:center}.chart-section .chart-range-wrapper .range{display:flex;justify-content:space-between;color:#919191}.chart-section .chart-range-wrapper .range div{width:35px;text-align:center}.chart-section .chart-range-wrapper .range div:nth-child(2){text-align:left}.chart-section .chart-range-wrapper .range div:nth-last-child(2){text-align:right}.chart-section .legend-container{display:flex;gap:16px}.chart-section .legend-container.legend-top-start,.chart-section .legend-container.legend-bottom-start{justify-content:flex-start}.chart-section .legend-container.legend-top-end,.chart-section .legend-container.legend-bottom-end{justify-content:flex-end}.chart-section .legend-container .legend{display:flex;gap:8px;align-items:center;color:#666}\n"] }]
|
|
245
|
-
}], propDecorators: { score: [{
|
|
246
|
-
type: Input
|
|
247
|
-
}], bestCandidateScore: [{
|
|
248
|
-
type: Input
|
|
249
|
-
}], applicationTheme: [{
|
|
250
|
-
type: Input
|
|
251
|
-
}], legendPosition: [{
|
|
252
|
-
type: Input
|
|
253
|
-
}] } });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1c3NpYW4tY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL2dhdXNzaWFuLWNoYXJ0L2dhdXNzaWFuLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9nYXVzc2lhbi1jaGFydC9nYXVzc2lhbi1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUd6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEQsT0FBTyxRQUFRLE1BQU0sVUFBVSxDQUFDOzs7Ozs7OztBQUVoQyxJQUFLLG1CQU1KO0FBTkQsV0FBSyxtQkFBbUI7SUFDdEIsa0VBQVcsQ0FBQTtJQUNYLGdFQUFVLENBQUE7SUFDVixvRUFBWSxDQUFBO0lBQ1osa0VBQVcsQ0FBQTtJQUNYLHFFQUFhLENBQUE7QUFDZixDQUFDLEVBTkksbUJBQW1CLEtBQW5CLG1CQUFtQixRQU12QjtBQVNELE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUFvQkU7Ozs7OztXQU1HO1FBQ00scUJBQWdCLEdBQXFCLE9BQU8sQ0FBQztRQUV0RDs7OztXQUlHO1FBQ00sbUJBQWMsR0FBbUIsY0FBYyxDQUFDO1FBRWhELGNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7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WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVGhlbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24tdGhlbWUubW9kZWwnO1xuaW1wb3J0IHsgQ2hhcnQsIENoYXJ0RGF0YSwgQ2hhcnRPcHRpb25zLCBUb29sdGlwT3B0aW9ucyB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IENvbG9yIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbG9ycy5tb2RlbCc7XG5pbXBvcnQgeyBfRGVlcFBhcnRpYWxPYmplY3QgfSBmcm9tICdjaGFydC5qcy9kaXN0L3R5cGVzL3V0aWxzJztcbmltcG9ydCBnYXVzc2lhbiBmcm9tICdnYXVzc2lhbic7XG5cbmVudW0gUGVyY2VudGlsZVRocmVzaG9sZCB7XG4gIExPV0VTVCA9IDIwLFxuICBMT1dFUiA9IDQwLFxuICBBVkVSQUdFID0gNjAsXG4gIEhJR0hFUiA9IDgwLFxuICBISUdIRVNUID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMZWdlbmRQb3NpdGlvbiA9ICd0b3Atc3RhcnQnIHwgJ3RvcC1lbmQnIHwgJ2JvdHRvbS1zdGFydCcgfCAnYm90dG9tLWVuZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLWdhdXNzaWFuLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhdXNzaWFuLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2F1c3NpYW4tY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR2F1c3NpYW5DaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgY2FuZGlkYXRlIHNjb3JlIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgY2hhcnQuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJvZiBHYXVzc2lhbkNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzY29yZSE6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGJlc3QgY2FuZGlkYXRlIHNjb3JlIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgY2hhcnQuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJvZiBHYXVzc2lhbkNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBiZXN0Q2FuZGlkYXRlU2NvcmUhOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqXG4gICAqIERlZmluZXMgdGhlIGFwcGxpY2F0aW9uIHRoZW1lXG4gICAqXG4gICAqIEB0eXBlIHtBcHBsaWNhdGlvblRoZW1lfVxuICAgKiBAbWVtYmVyb2YgU3Bpbm5lckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVnZW5kIHJlbGF0aXZlIHRvIHRoZSBjaGFydC5cbiAgICogQHR5cGUge0xlZ2VuZFBvc2l0aW9ufVxuICAgKiBAbWVtYmVyb2YgR2F1c3NpYW5DaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgbGVnZW5kUG9zaXRpb246IExlZ2VuZFBvc2l0aW9uID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgcmVhZG9ubHkgbWluWFZhbHVlID0gLTM7XG4gIHJlYWRvbmx5IG1heFhWYWx1ZSA9IDM7XG4gIHJlYWRvbmx5IG1pbllWYWx1ZSA9IDA7XG4gIHJlYWRvbmx5IHN0ZXBTaXplID0gMC4xO1xuICByZWFkb25seSBwb2ludHNUb1NraXAgPSAyO1xuICByZWFkb25seSBhY3R1YWxNaW5YdmFsdWUgPSB0aGlzLm1pblhWYWx1ZSArIHRoaXMucG9pbnRzVG9Ta2lwICogdGhpcy5zdGVwU2l6ZTtcbiAgcmVhZG9ubHkgYWN0dWFsTWF4WHZhbHVlID0gdGhpcy5tYXhYVmFsdWUgLSB0aGlzLnBvaW50c1RvU2tpcCAqIHRoaXMuc3RlcFNpemU7XG4gIHJlYWRvbmx5IG5vcm1hbENvbnRhaW5lclBhZGRpbmcgPSA1MDsgLy9pbiBweFxuICByZWFkb25seSBiZXN0U2NvcmVUaHJlc2hvbGQgPSA5MjtcbiAgcmVhZG9ubHkgYmVzdFNjb3JlU3BhY2luZ1JpZ2h0ID0gJzRweCc7XG4gIHJlYWRvbmx5IGJlc3RTY29yZVNwYWNpbmdMZWZ0ID0gJy0zOXB4JztcblxuICBQZXJjZW50aWxlVGhyZXNob2xkID0gUGVyY2VudGlsZVRocmVzaG9sZDtcbiAgY2hhcnQ6IENoYXJ0O1xuICBnYXVzc2lhbkRpc3RyaWJ1dGlvbjogZ2F1c3NpYW4uR2F1c3NpYW47XG4gIGFjdGl2ZUJ1Y2tldDogUGVyY2VudGlsZVRocmVzaG9sZDtcbiAgb3ZlcmxheVhWYWx1ZTogbnVtYmVyO1xuICBvdmVybGF5WVZhbHVlOiBudW1iZXI7XG4gIG92ZXJsYXlYQmVzdFNjb3JlVmFsdWU6IG51bWJlcjtcbiAgb3ZlcmxheVlCZXN0U2NvcmVWYWx1ZTogbnVtYmVyO1xuICBtYXhZVmFsdWU6IG51bWJlcjtcblxuICBnYXVzc2lhbkNoYXJ0RGF0YTogQ2hhcnREYXRhPCdsaW5lJz4gPSB7XG4gICAgbGFiZWxzOiBbXSxcbiAgICBkYXRhc2V0czogW10sXG4gIH07XG4gIGdhdXNzaWFuQ2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbnM8J2xpbmUnPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQ29udGV4dCA9ICdDSEFSVFMuR0FVU1NJQU5fQ0hBUlQuJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY29yZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc2NvcmUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgXCJzY29yZVwiIGlzIHJlcXVpcmVkIGZvciBHYXVzc2lhbkNoYXJ0Q29tcG9uZW50LicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5iZXN0Q2FuZGlkYXRlU2NvcmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJlc3RDYW5kaWRhdGVTY29yZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBcImJlc3RDYW5kaWRhdGVTY29yZVwiIGlzIHJlcXVpcmVkIGZvciBHYXVzc2lhbkNoYXJ0Q29tcG9uZW50LicpO1xuICAgIH1cbiAgICB0aGlzLnNldEFjdGl2ZUJ1Y2tldCgpO1xuICAgIHRoaXMuZ2F1c3NpYW5EaXN0cmlidXRpb24gPSBnYXVzc2lhbigwLCAxKTtcbiAgICB0aGlzLm1heFlWYWx1ZSA9IHRoaXMuZ2F1c3NpYW5EaXN0cmlidXRpb24ucGRmKDApO1xuICAgIHRoaXMuc2V0T3ZlcmxheVZhbHVlcygpO1xuICAgIHRoaXMuc2V0T3ZlcmxheVZhbHVlc0ZvckJlc3RTY29yZSgpO1xuICAgIHRoaXMuc2V0Q2hhcnREYXRhKCk7XG4gICAgdGhpcy5zZXRDaGFydE9wdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnREYXRhKCkge1xuICAgIGNvbnN0IHhWYWx1ZXM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgeVZhbHVlczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdlbmVyYXRlTGFiZWxzKHRoaXMubWluWFZhbHVlLCB0aGlzLm1heFhWYWx1ZSwgdGhpcy5zdGVwU2l6ZSk7XG5cbiAgICBmb3IgKGxldCB4ID0gdGhpcy5taW5YVmFsdWU7IHggPCB0aGlzLm1heFhWYWx1ZSArIHRoaXMuc3RlcFNpemU7IHggPSBOdW1iZXIoKHggKyB0aGlzLnN0ZXBTaXplKS50b0ZpeGVkKDIpKSkge1xuICAgICAgeFZhbHVlcy5wdXNoKHgpO1xuICAgICAgeVZhbHVlcy5wdXNoKHRoaXMuZ2F1c3NpYW5EaXN0cmlidXRpb24ucGRmKHgpKTtcbiAgICB9XG5cbiAgICB0aGlzLmdhdXNzaWFuQ2hhcnREYXRhID0ge1xuICAgICAgbGFiZWxzLFxuICAgICAgZGF0YXNldHM6IHRoaXMuZ2VuZXJhdGVEYXRhc2V0KHlWYWx1ZXMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldENoYXJ0T3B0aW9ucygpIHtcbiAgICB0aGlzLmdhdXNzaWFuQ2hhcnRPcHRpb25zID0ge1xuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgc2NhbGVzOiB0aGlzLmdldFNjYWxlKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIC8vIFRvIGJlIHVzZWQgb25seSBmb3IgZGV2IHB1cnBvc2VcbiAgICAgICAgLy8gdG9vbHRpcDogdGhpcy5nZXRUb29sdGlwKCksXG4gICAgICAgIC8vIENvbW1lbnQgdGhlIGJlbG93IGxpbmUgaWYgeW91IGVuYWJsZSB0aGUgY2FsbCBmb3IgdG9vbHRpcFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb29sdGlwKCk6IF9EZWVwUGFydGlhbE9iamVjdDxUb29sdGlwT3B0aW9uczwnbGluZSc+PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludGVyc2VjdDogZmFsc2UsXG4gICAgICBtb2RlOiAnbmVhcmVzdCcsXG4gICAgICBkaXNwbGF5Q29sb3JzOiBmYWxzZSxcbiAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICBsYWJlbDogdG9vbHRpcEl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuZ2F1c3NpYW5EaXN0cmlidXRpb24uY2RmKHBhcnNlRmxvYXQodG9vbHRpcEl0ZW0ubGFiZWwpKSAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9JWA7XG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiAoKSA9PiAnJywgLy8gRGlzYWJsZSB0aGUgZGVmYXVsdCB0aXRsZVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY2FsZSgpOiB7XG4gICAgeDogeyBkaXNwbGF5OiBib29sZWFuOyBncmlkOiB7IGRpc3BsYXk6IGJvb2xlYW4gfSB9O1xuICAgIHk6IHsgZGlzcGxheTogYm9vbGVhbjsgZ3JpZDogeyBkaXNwbGF5OiBib29sZWFuIH0gfTtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHtcbiAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSwgLy8gRGlzYWJsZSBncmlkIGxpbmVzIGZvciB4LWF4aXNcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB5OiB7XG4gICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICBncmlkOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsIC8vIERpc2FibGUgZ3JpZCBsaW5lcyBmb3IgeS1heGlzXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0YXNldChcbiAgICB5VmFsdWVzOiBudW1iZXJbXVxuICApOiB7IGRhdGE6IGFueVtdOyBsYWJlbDogc3RyaW5nOyBib3JkZXJDb2xvcjogQ29sb3I7IGJvcmRlcldpZHRoOiBudW1iZXI7IHBvaW50UmFkaXVzOiBudW1iZXI7IGZpbGw6IGJvb2xlYW4gfVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBkYXRhOiBbLi4ueVZhbHVlcy5zbGljZSgwLCB0aGlzLnBvaW50c1RvU2tpcCksIC4uLkFycmF5KHlWYWx1ZXMubGVuZ3RoIC0gdGhpcy5wb2ludHNUb1NraXApLmZpbGwobnVsbCldLFxuICAgICAgICBsYWJlbDogJycsXG4gICAgICAgIGJvcmRlckNvbG9yOiB0aGlzLmFjdGl2ZUJ1Y2tldCA9PT0gUGVyY2VudGlsZVRocmVzaG9sZC5MT1dFU1QgPyBDb2xvci5BQ0NFTlRfMjAgOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBwb2ludFJhZGl1czogMCxcbiAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgLi4uQXJyYXkodGhpcy5wb2ludHNUb1NraXApLmZpbGwobnVsbCksXG4gICAgICAgICAgLi4ueVZhbHVlcy5zbGljZSh0aGlzLnBvaW50c1RvU2tpcCwgeVZhbHVlcy5sZW5ndGggLSB0aGlzLnBvaW50c1RvU2tpcCksXG4gICAgICAgICAgLi4uQXJyYXkodGhpcy5wb2ludHNUb1NraXApLmZpbGwobnVsbCksXG4gICAgICAgIF0sXG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6IENvbG9yLkJMQUNLLFxuICAgICAgICBib3JkZXJXaWR0aDogMixcbiAgICAgICAgcG9pbnRSYWRpdXM6IDAsXG4gICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIC4uLkFycmF5KHlWYWx1ZXMubGVuZ3RoIC0gdGhpcy5wb2ludHNUb1NraXApLmZpbGwobnVsbCksXG4gICAgICAgICAgLi4ueVZhbHVlcy5zbGljZSh5VmFsdWVzLmxlbmd0aCAtIHRoaXMucG9pbnRzVG9Ta2lwLCB5VmFsdWVzLmxlbmd0aCksXG4gICAgICAgIF0sXG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoaXMuYWN0aXZlQnVja2V0ID09PSBQZXJjZW50aWxlVGhyZXNob2xkLkhJR0hFU1QgPyBDb2xvci5BQ0NFTlRfMjAgOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICBwb2ludFJhZGl1czogMCxcbiAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlTGFiZWxzKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgc3RlcDogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IHggPSBtaW47IHggPCBtYXggKyBzdGVwOyB4ID0gTnVtYmVyKCh4ICsgc3RlcCkudG9GaXhlZCgyKSkpIHtcbiAgICAgIGxhYmVscy5wdXNoKHgudG9GaXhlZCgxKSk7XG4gICAgfVxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUJ1Y2tldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY29yZSA8IFBlcmNlbnRpbGVUaHJlc2hvbGQuTE9XRVNUKSB7XG4gICAgICB0aGlzLmFjdGl2ZUJ1Y2tldCA9IFBlcmNlbnRpbGVUaHJlc2hvbGQuTE9XRVNUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zY29yZSA+PSBQZXJjZW50aWxlVGhyZXNob2xkLkxPV0VTVCAmJiB0aGlzLnNjb3JlIDwgUGVyY2VudGlsZVRocmVzaG9sZC5MT1dFUikge1xuICAgICAgdGhpcy5hY3RpdmVCdWNrZXQgPSBQZXJjZW50aWxlVGhyZXNob2xkLkxPV0VSO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zY29yZSA+PSBQZXJjZW50aWxlVGhyZXNob2xkLkxPV0VSICYmIHRoaXMuc2NvcmUgPCBQZXJjZW50aWxlVGhyZXNob2xkLkFWRVJBR0UpIHtcbiAgICAgIHRoaXMuYWN0aXZlQnVja2V0ID0gUGVyY2VudGlsZVRocmVzaG9sZC5BVkVSQUdFO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zY29yZSA+PSBQZXJjZW50aWxlVGhyZXNob2xkLkFWRVJBR0UgJiYgdGhpcy5zY29yZSA8IFBlcmNlbnRpbGVUaHJlc2hvbGQuSElHSEVSKSB7XG4gICAgICB0aGlzLmFjdGl2ZUJ1Y2tldCA9IFBlcmNlbnRpbGVUaHJlc2hvbGQuSElHSEVSO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zY29yZSA+PSBQZXJjZW50aWxlVGhyZXNob2xkLkhJR0hFUikge1xuICAgICAgdGhpcy5hY3RpdmVCdWNrZXQgPSBQZXJjZW50aWxlVGhyZXNob2xkLkhJR0hFU1Q7XG4gICAgfVxuICB9XG5cbiAgLy8gRm9yIG1vcmUgY29udGV4dDogaHR0cHM6Ly90ZXN0Z29yaWxsYS5hdGxhc3NpYW4ubmV0L3dpa2kvc3BhY2VzL1NSL3BhZ2VzLzE4MTM5MDU3MzYvUGVyY2VudGlsZXMrY3VydmUrRkUraW1wbGVtZW50YXRpb25cbiAgcHJpdmF0ZSBzZXRPdmVybGF5VmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgb3ZlcmxheVhWYWx1ZSwgb3ZlcmxheVlWYWx1ZSB9ID0gdGhpcy5jYWxjdWxhdGVPdmVybGF5VmFsdWVzKHRoaXMuc2NvcmUpO1xuICAgIHRoaXMub3ZlcmxheVhWYWx1ZSA9IG92ZXJsYXlYVmFsdWU7XG4gICAgdGhpcy5vdmVybGF5WVZhbHVlID0gb3ZlcmxheVlWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3ZlcmxheVZhbHVlc0ZvckJlc3RTY29yZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IG92ZXJsYXlYVmFsdWUsIG92ZXJsYXlZVmFsdWUgfSA9IHRoaXMuY2FsY3VsYXRlT3ZlcmxheVZhbHVlcyh0aGlzLmJlc3RDYW5kaWRhdGVTY29yZSk7XG4gICAgdGhpcy5vdmVybGF5WEJlc3RTY29yZVZhbHVlID0gb3ZlcmxheVhWYWx1ZTtcbiAgICB0aGlzLm92ZXJsYXlZQmVzdFNjb3JlVmFsdWUgPSBvdmVybGF5WVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5VmFsdWVzKHNjb3JlOiBudW1iZXIpOiB7IG92ZXJsYXlYVmFsdWU6IG51bWJlcjsgb3ZlcmxheVlWYWx1ZTogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHhWYWx1ZSA9IHRoaXMubWFwUmFuZ2Uoc2NvcmUsIDAsIDEwMCwgdGhpcy5taW5YVmFsdWUsIHRoaXMubWF4WFZhbHVlKTtcbiAgICBjb25zdCB5VmFsdWUgPSB0aGlzLmdhdXNzaWFuRGlzdHJpYnV0aW9uLnBkZih4VmFsdWUpO1xuICAgIGxldCBvdmVybGF5WFZhbHVlID0gc2NvcmU7XG4gICAgbGV0IG92ZXJsYXlZVmFsdWUgPSB0aGlzLm1hcFJhbmdlKHlWYWx1ZSwgdGhpcy5taW5ZVmFsdWUsIHRoaXMubWF4WVZhbHVlLCAwLCAxMDApO1xuXG4gICAgaWYgKHhWYWx1ZSA8PSB0aGlzLmFjdHVhbE1pblh2YWx1ZSB8fCB4VmFsdWUgPj0gdGhpcy5hY3R1YWxNYXhYdmFsdWUpIHtcbiAgICAgIGNvbnN0IHhWYWx1ZUV4dHJlbWUgPSB4VmFsdWUgPD0gdGhpcy5hY3R1YWxNaW5YdmFsdWUgPyB0aGlzLmFjdHVhbE1pblh2YWx1ZSA6IHRoaXMuYWN0dWFsTWF4WHZhbHVlO1xuICAgICAgY29uc3QgeVZhbHVlRXh0cmVtZSA9IHRoaXMuZ2F1c3NpYW5EaXN0cmlidXRpb24ucGRmKHhWYWx1ZUV4dHJlbWUpO1xuICAgICAgb3ZlcmxheVhWYWx1ZSA9IHRoaXMubWFwUmFuZ2UoeFZhbHVlRXh0cmVtZSwgdGhpcy5taW5YVmFsdWUsIHRoaXMubWF4WFZhbHVlLCAwLCAxMDApO1xuICAgICAgb3ZlcmxheVlWYWx1ZSA9IHRoaXMubWFwUmFuZ2UoeVZhbHVlRXh0cmVtZSwgdGhpcy5taW5ZVmFsdWUsIHRoaXMubWF4WVZhbHVlLCAwLCAxMDApO1xuICAgIH1cblxuICAgIHJldHVybiB7IG92ZXJsYXlYVmFsdWUsIG92ZXJsYXlZVmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUmFuZ2UodmFsdWU6IG51bWJlciwgaW5NaW46IG51bWJlciwgaW5NYXg6IG51bWJlciwgb3V0TWluOiBudW1iZXIsIG91dE1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKCh2YWx1ZSAtIGluTWluKSAqIChvdXRNYXggLSBvdXRNaW4pKSAvIChpbk1heCAtIGluTWluKSArIG91dE1pbjtcbiAgfVxuXG4gIGdldENhbGNQb3NpdGlvbihbcGVyY2VudGFnZSwgcGl4ZWxzLCBvcGVyYXRpb24gPSAnYWRkJ106IFtudW1iZXIsIG51bWJlciwgJ2FkZCcgfCAnc3VidHJhY3QnXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRpb24gPT09ICdhZGQnID8gJysnIDogJy0nO1xuICAgIHJldHVybiBgY2FsYygke3BlcmNlbnRhZ2V9JSAke29wZXJhdG9yfSAke3BpeGVsc31weClgO1xuICB9XG5cbiAgZ2V0QmVzdFNjb3JlQ29udGVudFBvc2l0aW9uKGJlc3RTY29yZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYmVzdFNjb3JlIDwgdGhpcy5iZXN0U2NvcmVUaHJlc2hvbGQgPyB0aGlzLmJlc3RTY29yZVNwYWNpbmdSaWdodCA6IHRoaXMuYmVzdFNjb3JlU3BhY2luZ0xlZnQ7XG4gIH1cblxuICBnZXRTY29yZVRyYW5zbGF0aW9uS2V5KHNjb3JlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChzY29yZSA8IFBlcmNlbnRpbGVUaHJlc2hvbGQuTE9XRVNUKSB7XG4gICAgICByZXR1cm4gJ1BFUkNFTlRJTEVfTEFCRUxfVFlQRVMuV0VMTF9CRUxPV19BVkVSQUdFJztcbiAgICB9IGVsc2UgaWYgKHNjb3JlID49IFBlcmNlbnRpbGVUaHJlc2hvbGQuTE9XRVNUICYmIHNjb3JlIDwgUGVyY2VudGlsZVRocmVzaG9sZC5MT1dFUikge1xuICAgICAgcmV0dXJuICdQRVJDRU5USUxFX0xBQkVMX1RZUEVTLkJFTE9XX0FWRVJBR0UnO1xuICAgIH0gZWxzZSBpZiAoc2NvcmUgPj0gUGVyY2VudGlsZVRocmVzaG9sZC5MT1dFUiAmJiBzY29yZSA8IFBlcmNlbnRpbGVUaHJlc2hvbGQuQVZFUkFHRSkge1xuICAgICAgcmV0dXJuICdQRVJDRU5USUxFX0xBQkVMX1RZUEVTLkFWRVJBR0UnO1xuICAgIH0gZWxzZSBpZiAoc2NvcmUgPj0gUGVyY2VudGlsZVRocmVzaG9sZC5BVkVSQUdFICYmIHNjb3JlIDwgUGVyY2VudGlsZVRocmVzaG9sZC5ISUdIRVIpIHtcbiAgICAgIHJldHVybiAnUEVSQ0VOVElMRV9MQUJFTF9UWVBFUy5BQk9WRV9BVkVSQUdFJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdQRVJDRU5USUxFX0xBQkVMX1RZUEVTLldFTExfQUJPVkVfQVZFUkFHRSc7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY2hhcnQtc2VjdGlvblwiXG4gICpuZ0lmPVwic2NvcmVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgIHRyYW5zbGF0aW9uQ29udGV4dCArICdBUklBX0xBQkVMJ1xuICAgICAgfCB1aVRyYW5zbGF0ZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICAgIGFjdGl2ZUJ1Y2tldDogZ2V0U2NvcmVUcmFuc2xhdGlvbktleShzY29yZSkgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jLFxuICAgICAgICAgICAgYmVzdENhbmRpZGF0ZVNjb3JlOiBiZXN0Q2FuZGlkYXRlU2NvcmUsXG4gICAgICAgICAgICBhY3RpdmVCdWNrZXRCZXN0U2NvcmU6IGdldFNjb3JlVHJhbnNsYXRpb25LZXkoYmVzdENhbmRpZGF0ZVNjb3JlKSB8IHVpVHJhbnNsYXRlIHwgYXN5bmMsXG4gICAgICAgICAgfVxuICAgICAgfCBhc3luY1xuICBcIlxuICB0YWJpbmRleD1cIjBcIlxuPlxuICA8IS0tIExlZ2VuZCBwb3NpdGlvbmVkIGF0IHRvcCAtLT5cbiAgQGlmIChsZWdlbmRQb3NpdGlvbiA9PT0gJ3RvcC1zdGFydCcgfHwgbGVnZW5kUG9zaXRpb24gPT09ICd0b3AtZW5kJykge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGVnZW5kVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJjaGFydC1yYW5nZS13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5vcm1hbC1jaGFydC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJub3JtYWwtY2hhcnRcIj5cbiAgICAgICAgPGNhbnZhcyBiYXNlQ2hhcnQgW2RhdGFdPVwiZ2F1c3NpYW5DaGFydERhdGFcIiBbb3B0aW9uc109XCJnYXVzc2lhbkNoYXJ0T3B0aW9uc1wiIHR5cGU9XCJsaW5lXCIgY2xhc3M9XCJjaGFydFwiPlxuICAgICAgICA8L2NhbnZhcz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwib3ZlcmxheS1pY29uXCJcbiAgICAgICAgICBbc3R5bGUuYm90dG9tXT1cIltvdmVybGF5WVZhbHVlLCAzLCAnc3VidHJhY3QnXSB8IG1lbW9pemVGdW5jOiBnZXRDYWxjUG9zaXRpb25cIlxuICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cIltvdmVybGF5WFZhbHVlLCAyMCwgJ3N1YnRyYWN0J10gfCBtZW1vaXplRnVuYzogZ2V0Q2FsY1Bvc2l0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLWljb25cIj5cbiAgICAgICAgICAgIDx1aS1pY29uIG5hbWU9XCJQaW4tbWFya2VyXCIgc2l6ZT1cIjQwXCI+PC91aS1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJ2ZS1zY29yZVwiPnt7IHNjb3JlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYmVzdC1zY29yZVwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJbMTAwIC0gb3ZlcmxheVlCZXN0U2NvcmVWYWx1ZSwgbm9ybWFsQ29udGFpbmVyUGFkZGluZywgJ2FkZCddIHwgbWVtb2l6ZUZ1bmM6IGdldENhbGNQb3NpdGlvblwiXG4gICAgICAgICAgW3N0eWxlLmJvdHRvbV09XCJvdmVybGF5WUJlc3RTY29yZVZhbHVlICsgJyUnXCJcbiAgICAgICAgICBbc3R5bGUubGVmdF09XCJvdmVybGF5WEJlc3RTY29yZVZhbHVlICsgJyUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYmVzdC1zY29yZS1jb250ZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cImJlc3RDYW5kaWRhdGVTY29yZSB8IG1lbW9pemVGdW5jOiBnZXRCZXN0U2NvcmVDb250ZW50UG9zaXRpb24gOiB0aGlzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dWktaWNvbiBuYW1lPVwiVHJvcGh5XCI+PC91aS1pY29uPlxuICAgICAgICAgICAge3sgYmVzdENhbmRpZGF0ZVNjb3JlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1jb2x1bW5cIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUJ1Y2tldCA9PT0gUGVyY2VudGlsZVRocmVzaG9sZC5MT1dFU1RcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1pdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LWJvbGRdPVwiYWN0aXZlQnVja2V0ID09PSBQZXJjZW50aWxlVGhyZXNob2xkLkxPV0VTVFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIodHJhbnNsYXRpb25Db250ZXh0ICsgJ1BFUkNFTlRBR0VfQlVDS0VUU19HUkFQSC5MT1dFU1RfVE9PTFRJUCcgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jKSB8fCAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRpb25Db250ZXh0ICsgJ1BFUkNFTlRBR0VfQlVDS0VUU19HUkFQSC5MT1dFU1QnIHwgdWlUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktY29sdW1uXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVCdWNrZXQgPT09IFBlcmNlbnRpbGVUaHJlc2hvbGQuTE9XRVJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1pdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LWJvbGRdPVwiYWN0aXZlQnVja2V0ID09PSBQZXJjZW50aWxlVGhyZXNob2xkLkxPV0VSXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIih0cmFuc2xhdGlvbkNvbnRleHQgKyAnUEVSQ0VOVEFHRV9CVUNLRVRTX0dSQVBILkxPV0VSX1RPT0xUSVAnIHwgdWlUcmFuc2xhdGUgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uQ29udGV4dCArICdQRVJDRU5UQUdFX0JVQ0tFVFNfR1JBUEguTE9XRVInIHwgdWlUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktY29sdW1uXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVCdWNrZXQgPT09IFBlcmNlbnRpbGVUaHJlc2hvbGQuQVZFUkFHRVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWl0ZW1cIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtYm9sZF09XCJhY3RpdmVCdWNrZXQgPT09IFBlcmNlbnRpbGVUaHJlc2hvbGQuQVZFUkFHRVwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIodHJhbnNsYXRpb25Db250ZXh0ICsgJ1BFUkNFTlRBR0VfQlVDS0VUU19HUkFQSC5BVkVSQUdFX1RPT0xUSVAnIHwgdWlUcmFuc2xhdGUgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uQ29udGV4dCArICdQRVJDRU5UQUdFX0JVQ0tFVFNfR1JBUEguQVZFUkFHRScgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1jb2x1bW5cIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUJ1Y2tldCA9PT0gUGVyY2VudGlsZVRocmVzaG9sZC5ISUdIRVJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1pdGVtXCJcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LWJvbGRdPVwiYWN0aXZlQnVja2V0ID09PSBQZXJjZW50aWxlVGhyZXNob2xkLkhJR0hFUlwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIodHJhbnNsYXRpb25Db250ZXh0ICsgJ1BFUkNFTlRBR0VfQlVDS0VUU19HUkFQSC5ISUdIRVJfVE9PTFRJUCcgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jKSB8fCAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdHJhbnNsYXRpb25Db250ZXh0ICsgJ1BFUkNFTlRBR0VfQlVDS0VUU19HUkFQSC5ISUdIRVInIHwgdWlUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktY29sdW1uXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVCdWNrZXQgPT09IFBlcmNlbnRpbGVUaHJlc2hvbGQuSElHSEVTVFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWl0ZW1cIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtYm9sZF09XCJhY3RpdmVCdWNrZXQgPT09IFBlcmNlbnRpbGVUaHJlc2hvbGQuSElHSEVTVFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIodHJhbnNsYXRpb25Db250ZXh0ICsgJ1BFUkNFTlRBR0VfQlVDS0VUU19HUkFQSC5ISUdIRVNUX1RPT0xUSVAnIHwgdWlUcmFuc2xhdGUgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uQ29udGV4dCArICdQRVJDRU5UQUdFX0JVQ0tFVFNfR1JBUEguSElHSEVTVCcgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmFuZ2VcIj5cbiAgICAgIDxkaXY+MTwvZGl2PlxuICAgICAgPGRpdj4yMDwvZGl2PlxuICAgICAgPGRpdj40MDwvZGl2PlxuICAgICAgPGRpdj42MDwvZGl2PlxuICAgICAgPGRpdj44MDwvZGl2PlxuICAgICAgPGRpdj45OTwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIExlZ2VuZCBwb3NpdGlvbmVkIGF0IGJvdHRvbSAtLT5cbiAgQGlmIChsZWdlbmRQb3NpdGlvbiA9PT0gJ2JvdHRvbS1zdGFydCcgfHwgbGVnZW5kUG9zaXRpb24gPT09ICdib3R0b20tZW5kJykge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGVnZW5kVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfVxuPC9kaXY+XG5cbjwhLS0gUmV1c2FibGUgbGVnZW5kIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNsZWdlbmRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jb250YWluZXJcIiBbbmdDbGFzc109XCInbGVnZW5kLScgKyBsZWdlbmRQb3NpdGlvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRcIj5cbiAgICAgIDx1aS1pY29uIG5hbWU9XCJEb3RcIiBjb2xvcj1cImdyYXlcIj48L3VpLWljb24+XG4gICAgICB7eyB0cmFuc2xhdGlvbkNvbnRleHQgKyAnQ0FORElEQVRFX1NDT1JFJyB8IHVpVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGVnZW5kXCI+XG4gICAgICA8dWktaWNvbiBuYW1lPVwiVHJvcGh5XCIgY29sb3I9XCJncmF5XCI+PC91aS1pY29uPlxuICAgICAge3sgdHJhbnNsYXRpb25Db250ZXh0ICsgJ0hJR0hFU1RfU0NPUkUnIHwgdWlUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { UiTranslatePipe } from '../../pipes/ui-translate.pipe';
|
|
3
|
-
import { GaussianChartComponent } from './gaussian-chart.component';
|
|
4
|
-
import { NgChartsModule } from 'ng2-charts';
|
|
5
|
-
import { Chart, registerables } from 'chart.js';
|
|
6
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
7
|
-
import { CommonModule, NgClass } from '@angular/common';
|
|
8
|
-
import { IconComponentModule } from '../icon/icon.component.module';
|
|
9
|
-
import { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
Chart.register(...registerables);
|
|
12
|
-
export class GaussianChartComponentModule {
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GaussianChartComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
14
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: GaussianChartComponentModule, declarations: [GaussianChartComponent], imports: [NgClass,
|
|
15
|
-
UiTranslatePipe,
|
|
16
|
-
NgChartsModule,
|
|
17
|
-
MatTooltipModule,
|
|
18
|
-
CommonModule,
|
|
19
|
-
IconComponentModule,
|
|
20
|
-
MemoizeFuncPipe], exports: [GaussianChartComponent] }); }
|
|
21
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GaussianChartComponentModule, imports: [NgChartsModule,
|
|
22
|
-
MatTooltipModule,
|
|
23
|
-
CommonModule,
|
|
24
|
-
IconComponentModule] }); }
|
|
25
|
-
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GaussianChartComponentModule, decorators: [{
|
|
27
|
-
type: NgModule,
|
|
28
|
-
args: [{
|
|
29
|
-
declarations: [GaussianChartComponent],
|
|
30
|
-
exports: [GaussianChartComponent],
|
|
31
|
-
imports: [
|
|
32
|
-
NgClass,
|
|
33
|
-
UiTranslatePipe,
|
|
34
|
-
NgChartsModule,
|
|
35
|
-
MatTooltipModule,
|
|
36
|
-
CommonModule,
|
|
37
|
-
IconComponentModule,
|
|
38
|
-
MemoizeFuncPipe,
|
|
39
|
-
],
|
|
40
|
-
}]
|
|
41
|
-
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1c3NpYW4tY2hhcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL2dhdXNzaWFuLWNoYXJ0L2dhdXNzaWFuLWNoYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUVoRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFlakMsTUFBTSxPQUFPLDRCQUE0QjsrR0FBNUIsNEJBQTRCO2dIQUE1Qiw0QkFBNEIsaUJBWnhCLHNCQUFzQixhQUduQyxPQUFPO1lBQ1AsZUFBZTtZQUNmLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixlQUFlLGFBUlAsc0JBQXNCO2dIQVdyQiw0QkFBNEIsWUFQckMsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osbUJBQW1COzs0RkFJViw0QkFBNEI7a0JBYnhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxPQUFPLEVBQUU7d0JBQ1AsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZUFBZTtxQkFDaEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVWlUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdWktdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgR2F1c3NpYW5DaGFydENvbXBvbmVudCB9IGZyb20gJy4vZ2F1c3NpYW4tY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IE5nQ2hhcnRzTW9kdWxlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDaGFydCwgcmVnaXN0ZXJhYmxlcyB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudC5tb2R1bGUnO1xuaW1wb3J0IHsgTWVtb2l6ZUZ1bmNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbWVtb2l6ZS1mdW5jLnBpcGUnO1xuXG5DaGFydC5yZWdpc3RlciguLi5yZWdpc3RlcmFibGVzKTtcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbR2F1c3NpYW5DaGFydENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtHYXVzc2lhbkNoYXJ0Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgVWlUcmFuc2xhdGVQaXBlLFxuICAgIE5nQ2hhcnRzTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEljb25Db21wb25lbnRNb2R1bGUsXG4gICAgTWVtb2l6ZUZ1bmNQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHYXVzc2lhbkNoYXJ0Q29tcG9uZW50TW9kdWxlIHt9XG4iXX0=
|