@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.
Files changed (247) hide show
  1. package/components/donut-chart/donut-chart.component.d.ts +2 -2
  2. package/components/filter-button/filter-button.component.d.ts +2 -2
  3. package/components/icon/icon-svg-content.d.ts +1 -1
  4. package/components/table/table.component.d.ts +1 -1
  5. package/fesm2022/testgorilla-tgo-ui.mjs +731 -715
  6. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  7. package/package.json +17 -20
  8. package/projects/tgo-canopy-ui/theme/_palette.scss +2 -1
  9. package/utils/color-contrast.d.ts +1 -1
  10. package/esm2022/assets/i18n/da-dk.json +0 -820
  11. package/esm2022/assets/i18n/de.json +0 -820
  12. package/esm2022/assets/i18n/en.json +0 -827
  13. package/esm2022/assets/i18n/es.json +0 -820
  14. package/esm2022/assets/i18n/fr.json +0 -820
  15. package/esm2022/assets/i18n/it-it.json +0 -820
  16. package/esm2022/assets/i18n/ja-jp.json +0 -820
  17. package/esm2022/assets/i18n/nb-no.json +0 -820
  18. package/esm2022/assets/i18n/nl.json +0 -820
  19. package/esm2022/assets/i18n/pl-pl.json +0 -820
  20. package/esm2022/assets/i18n/pt-br.json +0 -820
  21. package/esm2022/assets/i18n/sv-se.json +0 -820
  22. package/esm2022/components/accordion/accordion.component.mjs +0 -135
  23. package/esm2022/components/accordion/accordion.component.module.mjs +0 -40
  24. package/esm2022/components/accordion/accordion.model.mjs +0 -2
  25. package/esm2022/components/ai-feedback/ai-feedback.component.mjs +0 -35
  26. package/esm2022/components/ai-feedback/ai-feedback.model.mjs +0 -2
  27. package/esm2022/components/ai-feedback/ai-feedback.module.mjs +0 -20
  28. package/esm2022/components/alert-banner/alert-banner.component.mjs +0 -198
  29. package/esm2022/components/alert-banner/alert-banner.component.module.mjs +0 -21
  30. package/esm2022/components/alert-banner/alert-banner.model.mjs +0 -2
  31. package/esm2022/components/autocomplete/autocomplete.component.mjs +0 -837
  32. package/esm2022/components/autocomplete/autocomplete.component.module.mjs +0 -77
  33. package/esm2022/components/autocomplete/autocomplete.model.mjs +0 -25
  34. package/esm2022/components/autocomplete/includes.pipe.mjs +0 -25
  35. package/esm2022/components/autocomplete/prevent-input.directive.mjs +0 -27
  36. package/esm2022/components/autocomplete/transform-Item.pipe.mjs +0 -32
  37. package/esm2022/components/avatar/avatar.component.mjs +0 -104
  38. package/esm2022/components/avatar/avatar.component.module.mjs +0 -23
  39. package/esm2022/components/avatar/avatar.model.mjs +0 -21
  40. package/esm2022/components/badge/badge.component.mjs +0 -118
  41. package/esm2022/components/badge/badge.component.module.mjs +0 -20
  42. package/esm2022/components/badge/badge.model.mjs +0 -39
  43. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -191
  44. package/esm2022/components/breadcrumb/breadcrumb.component.module.mjs +0 -45
  45. package/esm2022/components/breadcrumb/breadcrumb.model.mjs +0 -2
  46. package/esm2022/components/button/button.component.mjs +0 -452
  47. package/esm2022/components/button/button.component.module.mjs +0 -51
  48. package/esm2022/components/button/button.model.mjs +0 -2
  49. package/esm2022/components/card/card.component.mjs +0 -141
  50. package/esm2022/components/card/card.component.module.mjs +0 -19
  51. package/esm2022/components/card/card.model.mjs +0 -2
  52. package/esm2022/components/checkbox/checkbox.component.mjs +0 -336
  53. package/esm2022/components/checkbox/checkbox.component.module.mjs +0 -28
  54. package/esm2022/components/checkbox/focus-visible.directive.mjs +0 -40
  55. package/esm2022/components/checklist/checklist.component.mjs +0 -157
  56. package/esm2022/components/checklist/checklist.model.mjs +0 -2
  57. package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +0 -73
  58. package/esm2022/components/confirm-dialog/confirm-dialog.component.module.mjs +0 -29
  59. package/esm2022/components/confirm-dialog/confirm-dialog.model.mjs +0 -2
  60. package/esm2022/components/datepicker/date-adapter.mjs +0 -39
  61. package/esm2022/components/datepicker/datepicker.component.mjs +0 -353
  62. package/esm2022/components/datepicker/datepicker.component.module.mjs +0 -60
  63. package/esm2022/components/datepicker/datepicker.service.mjs +0 -20
  64. package/esm2022/components/datepicker/no-date-format.directive.mjs +0 -56
  65. package/esm2022/components/deprecated-paginator/deprecated-paginator.component.mjs +0 -55
  66. package/esm2022/components/deprecated-paginator/deprecated-paginator.component.module.mjs +0 -20
  67. package/esm2022/components/dialog/dialog.component.mjs +0 -275
  68. package/esm2022/components/dialog/dialog.component.module.mjs +0 -23
  69. package/esm2022/components/dialog/dialog.model.mjs +0 -2
  70. package/esm2022/components/dialog/dialog.service.mjs +0 -36
  71. package/esm2022/components/divider/divider.component.mjs +0 -65
  72. package/esm2022/components/divider/divider.component.module.mjs +0 -19
  73. package/esm2022/components/divider/divider.model.mjs +0 -2
  74. package/esm2022/components/donut-chart/donut-chart.component.mjs +0 -122
  75. package/esm2022/components/donut-chart/donut-chart.component.model.mjs +0 -2
  76. package/esm2022/components/donut-chart/donut-chart.component.module.mjs +0 -20
  77. package/esm2022/components/dropdown/dropdown.component.mjs +0 -378
  78. package/esm2022/components/dropdown/dropdown.component.module.mjs +0 -57
  79. package/esm2022/components/dropdown/dropdown.model.mjs +0 -2
  80. package/esm2022/components/elevation-shadow/elevation-shadow.component.mjs +0 -45
  81. package/esm2022/components/elevation-shadow/elevation-shadow.component.module.mjs +0 -18
  82. package/esm2022/components/elevation-shadow/elevation-shadow.constant.mjs +0 -9
  83. package/esm2022/components/empty-state/empty-state.component.mjs +0 -301
  84. package/esm2022/components/empty-state/empty-state.component.module.mjs +0 -21
  85. package/esm2022/components/empty-state/empty-state.model.mjs +0 -2
  86. package/esm2022/components/field/field.component.mjs +0 -574
  87. package/esm2022/components/field/field.component.module.mjs +0 -64
  88. package/esm2022/components/field/field.model.mjs +0 -2
  89. package/esm2022/components/file-upload/file-upload.component.mjs +0 -307
  90. package/esm2022/components/file-upload/file-upload.component.module.mjs +0 -40
  91. package/esm2022/components/filter-button/filter-button.component.mjs +0 -255
  92. package/esm2022/components/filter-button/filter-button.component.module.mjs +0 -58
  93. package/esm2022/components/filter-button/filter-button.model.mjs +0 -2
  94. package/esm2022/components/gaussian-chart/gaussian-chart.component.mjs +0 -254
  95. package/esm2022/components/gaussian-chart/gaussian-chart.module.mjs +0 -42
  96. package/esm2022/components/icon/icon-svg-content.mjs +0 -491
  97. package/esm2022/components/icon/icon.component.mjs +0 -178
  98. package/esm2022/components/icon/icon.component.module.mjs +0 -21
  99. package/esm2022/components/icon/icon.config.mjs +0 -780
  100. package/esm2022/components/icon/icon.model.mjs +0 -2
  101. package/esm2022/components/icon-label/icon-label.component.mjs +0 -74
  102. package/esm2022/components/icon-label/icon-label.component.module.mjs +0 -20
  103. package/esm2022/components/inline-field/inline-field.component.mjs +0 -320
  104. package/esm2022/components/inline-field/inline-field.component.module.mjs +0 -43
  105. package/esm2022/components/inline-field/inline-field.model.mjs +0 -2
  106. package/esm2022/components/logo/logo.component.mjs +0 -165
  107. package/esm2022/components/logo/logo.component.module.mjs +0 -18
  108. package/esm2022/components/logo/logo.model.mjs +0 -32
  109. package/esm2022/components/media-card/media-card.component.mjs +0 -47
  110. package/esm2022/components/media-dialog/media-dialog.component.mjs +0 -75
  111. package/esm2022/components/media-dialog/media-dialog.model.mjs +0 -2
  112. package/esm2022/components/multi-input/multi-input.component.mjs +0 -271
  113. package/esm2022/components/multi-input/multi-input.component.module.mjs +0 -58
  114. package/esm2022/components/multi-input/multi-input.model.mjs +0 -2
  115. package/esm2022/components/multi-input/required-multi-input.validator.mjs +0 -14
  116. package/esm2022/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.mjs +0 -86
  117. package/esm2022/components/navbar/navbar.component.mjs +0 -212
  118. package/esm2022/components/navbar/navbar.component.module.mjs +0 -71
  119. package/esm2022/components/navbar/navbar.model.mjs +0 -2
  120. package/esm2022/components/overflow-menu/overflow-menu.component.mjs +0 -254
  121. package/esm2022/components/overflow-menu/overflow-menu.component.module.mjs +0 -25
  122. package/esm2022/components/overflow-menu/overflow-menu.model.mjs +0 -2
  123. package/esm2022/components/page-header/page-header.component.mjs +0 -71
  124. package/esm2022/components/page-header/page-header.component.module.mjs +0 -20
  125. package/esm2022/components/paginator/paginator.component.mjs +0 -87
  126. package/esm2022/components/paginator/paginator.component.module.mjs +0 -19
  127. package/esm2022/components/password-criteria/password.component.mjs +0 -111
  128. package/esm2022/components/password-criteria/password.component.module.mjs +0 -39
  129. package/esm2022/components/password-strength/password-strength.component.mjs +0 -93
  130. package/esm2022/components/password-strength/password-strength.component.module.mjs +0 -21
  131. package/esm2022/components/phone-input/join-strings.pipe.mjs +0 -14
  132. package/esm2022/components/phone-input/phone-input.component.mjs +0 -354
  133. package/esm2022/components/phone-input/phone-input.component.module.mjs +0 -63
  134. package/esm2022/components/phone-input/phone-input.model.mjs +0 -2
  135. package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -103
  136. package/esm2022/components/progress-bar/progress-bar.component.module.mjs +0 -21
  137. package/esm2022/components/prompt/prompt.component.mjs +0 -187
  138. package/esm2022/components/prompt/prompt.model.mjs +0 -2
  139. package/esm2022/components/prompt/prompt.module.mjs +0 -62
  140. package/esm2022/components/radial-progress/radial-progress.component.mjs +0 -118
  141. package/esm2022/components/radial-progress/radial-progress.component.module.mjs +0 -20
  142. package/esm2022/components/radial-progress/radial-progress.model.mjs +0 -11
  143. package/esm2022/components/radio-button/radio-button.component.mjs +0 -344
  144. package/esm2022/components/radio-button/radio-button.component.module.mjs +0 -25
  145. package/esm2022/components/radio-button/radio-button.model.mjs +0 -2
  146. package/esm2022/components/rating/half-star.pipe.mjs +0 -23
  147. package/esm2022/components/rating/rating.component.mjs +0 -106
  148. package/esm2022/components/rating/rating.component.module.mjs +0 -20
  149. package/esm2022/components/scale/scale.component.mjs +0 -136
  150. package/esm2022/components/scale/scale.component.module.mjs +0 -18
  151. package/esm2022/components/scale-table/scale-table.component.mjs +0 -61
  152. package/esm2022/components/scale-table/scale-table.model.mjs +0 -2
  153. package/esm2022/components/segmented-bar/segmented-bar.component.mjs +0 -111
  154. package/esm2022/components/segmented-bar/segmented-bar.component.module.mjs +0 -22
  155. package/esm2022/components/segmented-bar/segmented-bar.model.mjs +0 -2
  156. package/esm2022/components/segmented-button/segmented-button.component.mjs +0 -104
  157. package/esm2022/components/segmented-button/segmented-button.component.module.mjs +0 -21
  158. package/esm2022/components/segmented-button/segmented-button.model.mjs +0 -2
  159. package/esm2022/components/selectable-card/selectable-card.component.mjs +0 -53
  160. package/esm2022/components/selectable-card/selectable-card.component.module.mjs +0 -20
  161. package/esm2022/components/side-panel/side-panel-data-injection-token.mjs +0 -3
  162. package/esm2022/components/side-panel/side-panel.animations.mjs +0 -26
  163. package/esm2022/components/side-panel/side-panel.component.mjs +0 -55
  164. package/esm2022/components/side-panel/side-panel.model.mjs +0 -54
  165. package/esm2022/components/side-panel/side-panel.service.mjs +0 -98
  166. package/esm2022/components/side-sheet/side-sheet.component.mjs +0 -105
  167. package/esm2022/components/side-sheet/side-sheet.component.module.mjs +0 -43
  168. package/esm2022/components/side-sheet/side-sheet.model.mjs +0 -2
  169. package/esm2022/components/side-sheet/side-sheet.service.mjs +0 -31
  170. package/esm2022/components/skeleton/skeleton.component.mjs +0 -74
  171. package/esm2022/components/skeleton/skeleton.model.mjs +0 -2
  172. package/esm2022/components/slider/slider.component.mjs +0 -256
  173. package/esm2022/components/slider/slider.component.module.mjs +0 -16
  174. package/esm2022/components/slider/slider.model.mjs +0 -2
  175. package/esm2022/components/snackbar/snackbar.component.mjs +0 -235
  176. package/esm2022/components/snackbar/snackbar.component.module.mjs +0 -25
  177. package/esm2022/components/snackbar/snackbar.model.mjs +0 -2
  178. package/esm2022/components/snackbar/snackbar.service.mjs +0 -42
  179. package/esm2022/components/spider-chart/spider-chart.component.mjs +0 -443
  180. package/esm2022/components/spider-chart/spider-chart.model.mjs +0 -4
  181. package/esm2022/components/spider-chart/spider-chart.module.mjs +0 -44
  182. package/esm2022/components/spinner/spinner.component.mjs +0 -84
  183. package/esm2022/components/spinner/spinner.model.mjs +0 -2
  184. package/esm2022/components/spinner/spinner.module.mjs +0 -20
  185. package/esm2022/components/step/step.component.mjs +0 -209
  186. package/esm2022/components/step/step.component.module.mjs +0 -21
  187. package/esm2022/components/stepper/stepper.component.mjs +0 -198
  188. package/esm2022/components/stepper/stepper.component.module.mjs +0 -44
  189. package/esm2022/components/stepper/stepper.model.mjs +0 -2
  190. package/esm2022/components/table/sentence-case.pipe.mjs +0 -19
  191. package/esm2022/components/table/table.component.mjs +0 -273
  192. package/esm2022/components/table/table.component.module.mjs +0 -61
  193. package/esm2022/components/table/table.model.mjs +0 -25
  194. package/esm2022/components/tabs/tab.directive.mjs +0 -63
  195. package/esm2022/components/tabs/tabs.component.mjs +0 -219
  196. package/esm2022/components/tabs/tabs.component.module.mjs +0 -23
  197. package/esm2022/components/tabs/tabs.model.mjs +0 -2
  198. package/esm2022/components/tag/tag.component.mjs +0 -212
  199. package/esm2022/components/tag/tag.component.module.mjs +0 -24
  200. package/esm2022/components/tag/tag.model.mjs +0 -2
  201. package/esm2022/components/toggle/toggle.component.mjs +0 -190
  202. package/esm2022/components/toggle/toggle.component.module.mjs +0 -24
  203. package/esm2022/components/toggle/toggle.model.mjs +0 -2
  204. package/esm2022/components/tooltip/tooltip-template.directive.mjs +0 -133
  205. package/esm2022/components/tooltip/tooltip.component.mjs +0 -108
  206. package/esm2022/components/tooltip/tooltip.component.module.mjs +0 -27
  207. package/esm2022/components/tooltip/tooltip.model.mjs +0 -8
  208. package/esm2022/components/universal-skills-report/universal-skills-report.component.mjs +0 -80
  209. package/esm2022/components/universal-skills-report/universal-skills-report.component.module.mjs +0 -43
  210. package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.mjs +0 -109
  211. package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.module.mjs +0 -52
  212. package/esm2022/components/validation-error/validation-error.component.mjs +0 -55
  213. package/esm2022/components/validation-error/validation-error.model.mjs +0 -2
  214. package/esm2022/components/validation-error/validation-error.module.mjs +0 -20
  215. package/esm2022/directives/digits-only.directive.mjs +0 -77
  216. package/esm2022/directives/drag-drop.directive.mjs +0 -55
  217. package/esm2022/directives/dynamic-component.directive.mjs +0 -40
  218. package/esm2022/directives/ellipse-text.directive.mjs +0 -51
  219. package/esm2022/directives/select-text.directive.mjs +0 -40
  220. package/esm2022/directives/step-line-element.directive.mjs +0 -51
  221. package/esm2022/models/application-theme.model.mjs +0 -2
  222. package/esm2022/models/checkbox.model.mjs +0 -2
  223. package/esm2022/models/colors.model.mjs +0 -78
  224. package/esm2022/models/keyboard-events.model.mjs +0 -13
  225. package/esm2022/models/screen-breakpoints.model.mjs +0 -7
  226. package/esm2022/models/universal-skills-report.model.mjs +0 -33
  227. package/esm2022/pipes/data-property-getter.mjs +0 -33
  228. package/esm2022/pipes/has-validation-error.pipe.mjs +0 -27
  229. package/esm2022/pipes/memoize-func.pipe.mjs +0 -39
  230. package/esm2022/pipes/name-initials.pipe.mjs +0 -25
  231. package/esm2022/pipes/truncate.pipe.mjs +0 -34
  232. package/esm2022/pipes/ui-ordinal-suffix.pipe.mjs +0 -31
  233. package/esm2022/pipes/ui-translate.pipe.mjs +0 -81
  234. package/esm2022/providers/is-large-tablet.mjs +0 -11
  235. package/esm2022/providers/is-mobile.mjs +0 -11
  236. package/esm2022/public-api.mjs +0 -259
  237. package/esm2022/services/icons.service.mjs +0 -22
  238. package/esm2022/services/universal-skills.service.mjs +0 -85
  239. package/esm2022/testgorilla-tgo-ui.mjs +0 -5
  240. package/esm2022/utils/alert-bar.model.mjs +0 -2
  241. package/esm2022/utils/alert-bars.utils.mjs +0 -34
  242. package/esm2022/utils/autocomplete-utils.mjs +0 -78
  243. package/esm2022/utils/color-contrast.mjs +0 -131
  244. package/esm2022/utils/hex-to-rgb.mjs +0 -9
  245. package/esm2022/utils/localization/language.model.mjs +0 -16
  246. package/esm2022/utils/localization/language.service.mjs +0 -44
  247. 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=