@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,443 +0,0 @@
1
- import { Component, Input, ViewChild, ViewChildren } from '@angular/core';
2
- import { LargeSpiderChartSize, SmallSpiderChartSize } from './spider-chart.model';
3
- import { Color } from '../../models/colors.model';
4
- import { BaseChartDirective } from 'ng2-charts';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "ng2-charts";
8
- import * as i3 from "@angular/material/tooltip";
9
- import * as i4 from "../spinner/spinner.component";
10
- import * as i5 from "../../pipes/ui-translate.pipe";
11
- import * as i6 from "../../pipes/memoize-func.pipe";
12
- export class SpiderChartComponent {
13
- constructor() {
14
- /**
15
- * The size of the spider chart.
16
- * @type {SpiderChartSize}
17
- * @memberof SpiderChartComponent
18
- */
19
- this.size = 'large';
20
- /**
21
- * The step size for the spider chart.
22
- * @type {number}
23
- * @memberof SpiderChartComponent
24
- */
25
- this.stepSize = 20;
26
- /**
27
- * The aria label for the spider chart.
28
- * @type {string}
29
- * @memberof SpiderChartComponent
30
- */
31
- this.ariaLabel = 'Radar chart. Press tab to navigate through the chart.';
32
- /**
33
- * Whether the spider chart is loading.
34
- * @type {boolean}
35
- * @memberof SpiderChartComponent
36
- */
37
- this.loading = false;
38
- /**
39
- *
40
- * Defines the application theme
41
- *
42
- * @type {ApplicationTheme}
43
- * @memberof SpinnerComponent
44
- */
45
- this.applicationTheme = 'light';
46
- this.radarChartData = {
47
- labels: [],
48
- datasets: [],
49
- };
50
- this.labelPositions = {};
51
- this.labelPositionsVisible = false;
52
- this.focusedLabelIndex = 0;
53
- this.focusedFakeDataPointIndex = 0;
54
- this.loadingChartData = {
55
- labels: [1, 2, 3, 4, 5, 6],
56
- datasets: [],
57
- };
58
- this.loadingChartOptions = {
59
- responsive: true,
60
- layout: {
61
- padding: {
62
- left: 40,
63
- right: 40,
64
- top: 40,
65
- bottom: 40,
66
- },
67
- },
68
- scales: {
69
- r: {
70
- angleLines: {
71
- display: true,
72
- color: Color.GRAYSCALE_30,
73
- },
74
- grid: {
75
- color: () => Color.GRAYSCALE_30,
76
- },
77
- pointLabels: {
78
- display: false,
79
- },
80
- suggestedMin: 0,
81
- suggestedMax: 100,
82
- ticks: {
83
- stepSize: this.stepSize,
84
- display: false,
85
- },
86
- },
87
- },
88
- };
89
- this.translationContext = 'CHARTS.SPIDER.';
90
- }
91
- ngOnInit() {
92
- if (!this.loading) {
93
- this.handleInputErrors();
94
- this.setChartData();
95
- this.setChartOptions();
96
- }
97
- }
98
- handleInputErrors() {
99
- if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {
100
- throw new Error('The "labels" input is required and cannot be empty.');
101
- }
102
- if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {
103
- throw new Error('The "labelDescription" input is required and cannot be empty.');
104
- }
105
- if (this.spiderChartData.labelDescription &&
106
- this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length) {
107
- throw new Error('The "labelDescription" input must have the same length as "labels".');
108
- }
109
- if (!this.spiderChartData.plotData[0].databaseLabel) {
110
- throw new Error('The "plotData.databaseLabel" input is required.');
111
- }
112
- if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {
113
- throw new Error('The "plotData.data" input is required and cannot be empty.');
114
- }
115
- if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {
116
- throw new Error('The "plotData.data" input must have the same length as "labels".');
117
- }
118
- if (this.spiderChartData.plotData.length === 2 &&
119
- this.spiderChartData.labels.length > 0 &&
120
- this.spiderChartData.plotData[1].data &&
121
- this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length) {
122
- throw new Error('The "plotData.data" input must have the same length as "labels".');
123
- }
124
- }
125
- setChartData() {
126
- const datasets = [];
127
- datasets.push({
128
- label: this.spiderChartData.plotData[0].databaseLabel,
129
- data: this.spiderChartData.plotData[0].data,
130
- fill: true,
131
- backgroundColor: 'rgba(212, 16, 170, 0.2)',
132
- borderColor: Color.BRAND_50,
133
- pointBackgroundColor: Color.BRAND_50,
134
- pointBorderColor: Color.TGO_WHITE,
135
- pointHoverBackgroundColor: Color.TGO_WHITE,
136
- pointHoverBorderColor: Color.BRAND_50,
137
- });
138
- if (this.spiderChartData.plotData.length === 2) {
139
- datasets.push({
140
- label: this.spiderChartData.plotData[1].databaseLabel,
141
- data: this.spiderChartData.plotData[1].data,
142
- fill: false,
143
- borderColor: Color.BLACK,
144
- borderDash: [5, 5],
145
- borderWidth: 1,
146
- pointBackgroundColor: Color.BLACK,
147
- pointBorderColor: Color.TGO_WHITE,
148
- pointHoverBackgroundColor: Color.TGO_WHITE,
149
- pointHoverBorderColor: Color.BLACK,
150
- });
151
- }
152
- this.radarChartData = {
153
- labels: this.spiderChartData.labels,
154
- datasets: datasets,
155
- };
156
- }
157
- setChartOptions() {
158
- this.radarChartOptions = {
159
- responsive: true,
160
- elements: {
161
- line: {
162
- borderWidth: 3,
163
- },
164
- },
165
- layout: {
166
- padding: {
167
- left: 40,
168
- right: 40,
169
- top: 40,
170
- bottom: 40,
171
- },
172
- },
173
- scales: {
174
- r: {
175
- angleLines: {
176
- display: true,
177
- color: Color.BLACK,
178
- },
179
- grid: {
180
- color: context => {
181
- if (context.tick.value === 100) {
182
- return Color.BLACK;
183
- }
184
- return Color.GRAYSCALE_30;
185
- },
186
- },
187
- pointLabels: {
188
- color: 'black',
189
- font: {
190
- family: 'Arial',
191
- size: 14,
192
- },
193
- display: false,
194
- },
195
- suggestedMin: 0,
196
- suggestedMax: 100,
197
- ticks: {
198
- stepSize: this.stepSize,
199
- display: false,
200
- },
201
- },
202
- },
203
- plugins: {
204
- legend: {
205
- display: false,
206
- },
207
- },
208
- };
209
- }
210
- ngAfterViewInit() {
211
- if (this.chart?.chart && !this.loading) {
212
- this.logCornerCoordinates(this.chart.chart);
213
- }
214
- }
215
- logCornerCoordinates(chart) {
216
- const scale = chart.scales['r'];
217
- const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
218
- const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
219
- // Loop through the labels and calculate the percentage coordinates
220
- this.spiderChartData.labels.forEach((label, index) => {
221
- const position = scale.getPointPositionForValue(index, scale.max);
222
- // Calculate percentage values relative to the canvas size
223
- const xPercent = (position.x / canvasWidth) * 100;
224
- const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis
225
- this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };
226
- });
227
- this.labelPositionsVisible = true;
228
- }
229
- getCenteredLabelBottomPosition(label, height) {
230
- const position = this.labelPositions[label];
231
- const padding = 7;
232
- if (position.x > 50 || position.x < 50) {
233
- return `calc(${position.y}% - ${height / 2}px)`;
234
- }
235
- else if (position.y < 50) {
236
- return `calc(${position.y}% - ${height}px - ${padding}px)`;
237
- }
238
- else {
239
- return `calc(${position.y}% + ${padding}px)`;
240
- }
241
- }
242
- getCenteredLabelLeftPosition(label, width) {
243
- const position = this.labelPositions[label];
244
- const padding = 15;
245
- if (position.x === 50) {
246
- return `calc(${position.x}% - ${width / 2}px)`;
247
- }
248
- else if (position.x < 50) {
249
- return `calc(${position.x}% - ${width}px - ${padding}px)`;
250
- }
251
- else {
252
- return `calc(${position.x}% + ${padding}px)`;
253
- }
254
- }
255
- onLabelKeyDown(event, index) {
256
- if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
257
- this.focusNextLabel(index);
258
- }
259
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
260
- this.focusPreviousLabel(index);
261
- }
262
- }
263
- focusNextLabel(index) {
264
- const nextIndex = index + 1;
265
- if (nextIndex < this.labelContainers.length) {
266
- this.labelContainers.get(nextIndex)?.nativeElement.focus();
267
- }
268
- else {
269
- this.labelContainers.first?.nativeElement.focus();
270
- }
271
- this.focusedLabelIndex = nextIndex;
272
- }
273
- focusPreviousLabel(index) {
274
- const previousIndex = index - 1;
275
- if (previousIndex >= 0) {
276
- this.labelContainers.get(previousIndex)?.nativeElement.focus();
277
- }
278
- else {
279
- this.labelContainers.last?.nativeElement.focus();
280
- }
281
- this.focusedLabelIndex = previousIndex;
282
- }
283
- onLegendItemKeyDown(event, index) {
284
- if (event.key === 'Enter') {
285
- this.toggleDatasetVisibility(index);
286
- }
287
- else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
288
- this.focusNextLegendItem(index);
289
- }
290
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
291
- this.focusPreviousLegendItem(index);
292
- }
293
- }
294
- focusNextLegendItem(index) {
295
- const nextIndex = index + 1;
296
- if (nextIndex < this.legendItems.length) {
297
- this.legendItems.get(nextIndex)?.nativeElement.focus();
298
- }
299
- else {
300
- this.legendItems.first?.nativeElement.focus();
301
- }
302
- }
303
- focusPreviousLegendItem(index) {
304
- const previousIndex = index - 1;
305
- if (previousIndex >= 0) {
306
- this.legendItems.get(previousIndex)?.nativeElement.focus();
307
- }
308
- else {
309
- this.legendItems.last?.nativeElement.focus();
310
- }
311
- }
312
- onFakeDataPointsKeyDown(event, index, isSecondary = false) {
313
- if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
314
- this.focusNextFakeDataPoint(index, isSecondary);
315
- this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);
316
- }
317
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
318
- this.focusPreviousFakeDataPoint(index, isSecondary);
319
- this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);
320
- }
321
- else if (event.key === 'Tab') {
322
- this.resetActiveElement();
323
- }
324
- }
325
- focusNextFakeDataPoint(index, isSecondary = false) {
326
- const nextIndex = index + 1;
327
- if (nextIndex < this.fakeDataPoints.length) {
328
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
329
- fakeDataPoints.get(nextIndex)?.nativeElement.focus();
330
- }
331
- else {
332
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
333
- fakeDataPoints.first?.nativeElement.focus();
334
- }
335
- if (!isSecondary) {
336
- this.focusedFakeDataPointIndex = nextIndex;
337
- }
338
- }
339
- focusPreviousFakeDataPoint(index, isSecondary = false) {
340
- const previousIndex = index - 1;
341
- if (previousIndex >= 0) {
342
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
343
- fakeDataPoints.get(previousIndex)?.nativeElement.focus();
344
- }
345
- else {
346
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
347
- fakeDataPoints.last?.nativeElement.focus();
348
- }
349
- if (!isSecondary) {
350
- this.focusedFakeDataPointIndex = previousIndex;
351
- }
352
- }
353
- showTooltipForDataPoint(index, isSecondary = false) {
354
- const chartInstance = this.chart?.chart;
355
- if (!chartInstance)
356
- return;
357
- const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];
358
- const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);
359
- const dataPoint = meta.data[index];
360
- const eventPosition = {
361
- x: dataPoint.x,
362
- y: dataPoint.y,
363
- };
364
- if (!isSecondary) {
365
- this.focusedFakeDataPointIndex = index;
366
- }
367
- chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);
368
- chartInstance.update();
369
- }
370
- resetActiveElement() {
371
- const chartInstance = this.chart?.chart;
372
- if (!chartInstance)
373
- return;
374
- // Clear the active elements to hide the tooltip
375
- chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });
376
- chartInstance.update();
377
- }
378
- toggleDatasetVisibility(datasetIndex) {
379
- const chartInstance = this.chart?.chart;
380
- if (!chartInstance)
381
- return;
382
- const dataset = chartInstance.data.datasets[datasetIndex];
383
- dataset.hidden = !dataset.hidden;
384
- chartInstance.update();
385
- }
386
- isDatasetVisible(datasetIndex) {
387
- const chartInstance = this.chart?.chart;
388
- if (!chartInstance)
389
- return;
390
- return !chartInstance.data.datasets[datasetIndex].hidden;
391
- }
392
- getFirstLine(label) {
393
- const words = label.split(' ');
394
- let firstLine = '';
395
- for (const word of words) {
396
- if ((firstLine + word).length <= 20) {
397
- firstLine += (firstLine ? ' ' : '') + word;
398
- }
399
- else {
400
- break;
401
- }
402
- }
403
- return firstLine;
404
- }
405
- getSecondLine(label) {
406
- const firstLine = this.getFirstLine(label);
407
- return label.substring(firstLine.length).trim();
408
- }
409
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpiderChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
410
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SpiderChartComponent, selector: "ui-spider-chart", inputs: { size: "size", spiderChartData: "spiderChartData", stepSize: "stepSize", ariaLabel: "ariaLabel", loading: "loading", applicationTheme: "applicationTheme" }, viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }, { propertyName: "labelContainers", predicate: ["labelContainer"], descendants: true }, { propertyName: "fakeDataPoints", predicate: ["fakeDataPoints"], descendants: true }, { propertyName: "fakeDataPointsSecondary", predicate: ["fakeDataPointsSecondary"], descendants: true }, { propertyName: "legendItems", predicate: ["legendItem"], descendants: true }], ngImport: i0, template: "<div class=\"spider-chart-container\"\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabel\">\n <div class=\"spacing-container\"\n [ngClass]=\"{'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading}\">\n <div class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\">\n @if (!loading) {\n <canvas\n baseChart\n [data]=\"radarChartData\"\n [options]=\"radarChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n } @else {\n <canvas\n baseChart\n [data]=\"loadingChartData\"\n [options]=\"loadingChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\">\n @for (label of spiderChartData.labels; track label) {\n <div class=\"label-container\" #labelContainer\n [matTooltip]=\"spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n @if (!(label.length > 20 && size === 'large' && spiderChartData.labels.length < 9)) {\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label }}\n </div>\n } @else {\n <div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getFirstLine }}</div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getSecondLine : this }}</div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span class=\"fake-data-points\" #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\">\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span class=\"fake-data-points-secondary\" #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\">\n </span>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (radarChartData.datasets.length > 0) {\n <div class=\"legend-container\">\n @for (dataset of radarChartData.datasets; track dataset.label) {\n <div class=\"legend-item\"\n (click)=\"toggleDatasetVisibility($index)\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n role=\"button\"\n [attr.aria-pressed]=\"isDatasetVisible($index) ? false : true\"\n [attr.aria-label]=\"isDatasetVisible($index) ?\n ((translationContext + 'DATASET_VISIBLE') | uiTranslate : { dataset: dataset.label } | async) :\n ((translationContext + 'DATASET_HIDDEN') | uiTranslate : { dataset: dataset.label } | async)\"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem>\n <span class=\"legend-line\" [ngClass]=\"{'solid-line': $index === 0, 'dashed-line': $index === 1}\"></span>\n <span class=\"legend-label\" [style.text-decoration]=\"isDatasetVisible($index) ? 'none' : 'line-through'\">\n {{ dataset.label }}\n </span>\n </div>\n }\n </div>\n }\n</div>\n\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}.spider-chart-container{display:flex;flex-direction:column;align-items:center}.spider-chart-container .spacing-container{padding:40px 140px}.spider-chart-container .spacing-container.small-spacing{padding:0 80px}.spider-chart-container .spacing-container .chart-container{position:relative}.spider-chart-container .spacing-container .chart-container .overlay-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container{display:flex;gap:4px;position:absolute;pointer-events:all;cursor:pointer}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .fake-data-points{visibility:hidden}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container:focus{outline:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .label{font-size:12px;border-bottom:1px dashed #D3D3D3;white-space:nowrap;overflow:hidden;width:fit-content;text-overflow:ellipsis}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .value{font-weight:700}.spider-chart-container .legend-container{display:flex;gap:16px;cursor:pointer}.spider-chart-container .legend-container .legend-item{display:flex;align-items:center;gap:8px}.spider-chart-container .legend-container .legend-item .legend-line{display:inline-block;width:11px;height:4px}.spider-chart-container .legend-container .legend-item .solid-line{background-color:#d410aa}.spider-chart-container .legend-container .legend-item .dashed-line{border-top:2px dashed #242424}:host ::ng-deep .spider-chart-container .spinner-container.loader{position:absolute}\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: "component", type: i4.SpinnerComponent, selector: "ui-spinner", inputs: ["size", "isLoader", "text", "applicationTheme", "iconName", "iconSize"] }, { kind: "pipe", type: i5.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i6.MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
411
- }
412
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpiderChartComponent, decorators: [{
413
- type: Component,
414
- args: [{ selector: 'ui-spider-chart', template: "<div class=\"spider-chart-container\"\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabel\">\n <div class=\"spacing-container\"\n [ngClass]=\"{'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading}\">\n <div class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\">\n @if (!loading) {\n <canvas\n baseChart\n [data]=\"radarChartData\"\n [options]=\"radarChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n } @else {\n <canvas\n baseChart\n [data]=\"loadingChartData\"\n [options]=\"loadingChartOptions\"\n type=\"radar\"\n class=\"chart\"\n >\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\">\n @for (label of spiderChartData.labels; track label) {\n <div class=\"label-container\" #labelContainer\n [matTooltip]=\"spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n @if (!(label.length > 20 && size === 'large' && spiderChartData.labels.length < 9)) {\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label }}\n </div>\n } @else {\n <div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getFirstLine }}</div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">{{ label | memoizeFunc : getSecondLine : this }}</div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span class=\"fake-data-points\" #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\">\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span class=\"fake-data-points-secondary\" #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\">\n </span>\n }\n }\n </div>\n }\n </div>\n </div>\n @if (radarChartData.datasets.length > 0) {\n <div class=\"legend-container\">\n @for (dataset of radarChartData.datasets; track dataset.label) {\n <div class=\"legend-item\"\n (click)=\"toggleDatasetVisibility($index)\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n role=\"button\"\n [attr.aria-pressed]=\"isDatasetVisible($index) ? false : true\"\n [attr.aria-label]=\"isDatasetVisible($index) ?\n ((translationContext + 'DATASET_VISIBLE') | uiTranslate : { dataset: dataset.label } | async) :\n ((translationContext + 'DATASET_HIDDEN') | uiTranslate : { dataset: dataset.label } | async)\"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem>\n <span class=\"legend-line\" [ngClass]=\"{'solid-line': $index === 0, 'dashed-line': $index === 1}\"></span>\n <span class=\"legend-label\" [style.text-decoration]=\"isDatasetVisible($index) ? 'none' : 'line-through'\">\n {{ dataset.label }}\n </span>\n </div>\n }\n </div>\n }\n</div>\n\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}.spider-chart-container{display:flex;flex-direction:column;align-items:center}.spider-chart-container .spacing-container{padding:40px 140px}.spider-chart-container .spacing-container.small-spacing{padding:0 80px}.spider-chart-container .spacing-container .chart-container{position:relative}.spider-chart-container .spacing-container .chart-container .overlay-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container{display:flex;gap:4px;position:absolute;pointer-events:all;cursor:pointer}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .fake-data-points{visibility:hidden}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container:focus{outline:none}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .label{font-size:12px;border-bottom:1px dashed #D3D3D3;white-space:nowrap;overflow:hidden;width:fit-content;text-overflow:ellipsis}.spider-chart-container .spacing-container .chart-container .overlay-container .label-container .value{font-weight:700}.spider-chart-container .legend-container{display:flex;gap:16px;cursor:pointer}.spider-chart-container .legend-container .legend-item{display:flex;align-items:center;gap:8px}.spider-chart-container .legend-container .legend-item .legend-line{display:inline-block;width:11px;height:4px}.spider-chart-container .legend-container .legend-item .solid-line{background-color:#d410aa}.spider-chart-container .legend-container .legend-item .dashed-line{border-top:2px dashed #242424}:host ::ng-deep .spider-chart-container .spinner-container.loader{position:absolute}\n"] }]
415
- }], propDecorators: { size: [{
416
- type: Input
417
- }], spiderChartData: [{
418
- type: Input
419
- }], stepSize: [{
420
- type: Input
421
- }], ariaLabel: [{
422
- type: Input
423
- }], loading: [{
424
- type: Input
425
- }], applicationTheme: [{
426
- type: Input
427
- }], chart: [{
428
- type: ViewChild,
429
- args: [BaseChartDirective]
430
- }], labelContainers: [{
431
- type: ViewChildren,
432
- args: ['labelContainer']
433
- }], fakeDataPoints: [{
434
- type: ViewChildren,
435
- args: ['fakeDataPoints']
436
- }], fakeDataPointsSecondary: [{
437
- type: ViewChildren,
438
- args: ['fakeDataPointsSecondary']
439
- }], legendItems: [{
440
- type: ViewChildren,
441
- args: ['legendItem']
442
- }] } });
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBb0MsTUFBTSxzQkFBc0IsQ0FBQztBQUdwSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7OztBQU9oRCxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBTUU7Ozs7V0FJRztRQUNNLFNBQUksR0FBb0IsT0FBTyxDQUFDO1FBU3pDOzs7O1dBSUc7UUFDTSxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRS9COzs7O1dBSUc7UUFDTSxjQUFTLEdBQVcsdURBQXVELENBQUM7UUFFckY7Ozs7V0FJRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7Ozs7OztXQU1HO1FBQ00scUJBQWdCLEdBQXFCLE9BQU8sQ0FBQztRQVF0RCxtQkFBYyxHQUF1QjtZQUNuQyxNQUFNLEVBQUUsRUFBRTtZQUNWLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUVGLG1CQUFjLEdBQWdELEVBQUUsQ0FBQztRQUNqRSwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLDhCQUF5QixH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TUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQzsrR0E1YVUsb0JBQW9CO21HQUFwQixvQkFBb0Isb1FBNkNwQixrQkFBa0Isb1pDekQvQixpcUlBMkZBOzs0RkQvRWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGlCQUFpQjs4QkFVbEIsSUFBSTtzQkFBWixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxTQUFTO3NCQUFqQixLQUFLO2dCQU9HLE9BQU87c0JBQWYsS0FBSztnQkFTRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRXlCLEtBQUs7c0JBQW5DLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUNHLGVBQWU7c0JBQTlDLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUNFLGNBQWM7c0JBQTdDLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUNXLHVCQUF1QjtzQkFBL0QsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBQ1gsV0FBVztzQkFBdEMsWUFBWTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXJnZVNwaWRlckNoYXJ0U2l6ZSwgU21hbGxTcGlkZXJDaGFydFNpemUsIFNwaWRlckNoYXJ0RGF0YSwgU3BpZGVyQ2hhcnRTaXplIH0gZnJvbSAnLi9zcGlkZXItY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi10aGVtZS5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydCwgQ2hhcnREYXRhLCBDaGFydE9wdGlvbnMgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4uLy4uL21vZGVscy9jb2xvcnMubW9kZWwnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLXNwaWRlci1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGlkZXItY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zcGlkZXItY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3BpZGVyQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIHNwaWRlciBjaGFydC5cbiAgICogQHR5cGUge1NwaWRlckNoYXJ0U2l6ZX1cbiAgICogQG1lbWJlcm9mIFNwaWRlckNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzaXplOiBTcGlkZXJDaGFydFNpemUgPSAnbGFyZ2UnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgc3BpZGVyIGNoYXJ0LlxuICAgKiBAdHlwZSB7U3BpZGVyQ2hhcnREYXRhfVxuICAgKiBAbWVtYmVyb2YgU3BpZGVyQ2hhcnRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHNwaWRlckNoYXJ0RGF0YTogU3BpZGVyQ2hhcnREYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCBzaXplIGZvciB0aGUgc3BpZGVyIGNoYXJ0LlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyb2YgU3BpZGVyQ2hhcnRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHN0ZXBTaXplOiBudW1iZXIgPSAyMDtcblxuICAvKipcbiAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoZSBzcGlkZXIgY2hhcnQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgPSAnUmFkYXIgY2hhcnQuIFByZXNzIHRhYiB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBjaGFydC4nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzcGlkZXIgY2hhcnQgaXMgbG9hZGluZy5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKlxuICAgKiBEZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiB0aGVtZVxuICAgKlxuICAgKiBAdHlwZSB7QXBwbGljYXRpb25UaGVtZX1cbiAgICogQG1lbWJlcm9mIFNwaW5uZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uVGhlbWU6IEFwcGxpY2F0aW9uVGhlbWUgPSAnbGlnaHQnO1xuXG4gIEBWaWV3Q2hpbGQoQmFzZUNoYXJ0RGlyZWN0aXZlKSBjaGFydDogQmFzZUNoYXJ0RGlyZWN0aXZlO1xuICBAVmlld0NoaWxkcmVuKCdsYWJlbENvbnRhaW5lcicpIGxhYmVsQ29udGFpbmVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdmYWtlRGF0YVBvaW50cycpIGZha2VEYXRhUG9pbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2Zha2VEYXRhUG9pbnRzU2Vjb25kYXJ5JykgZmFrZURhdGFQb2ludHNTZWNvbmRhcnk6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignbGVnZW5kSXRlbScpIGxlZ2VuZEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgcmFkYXJDaGFydERhdGE6IENoYXJ0RGF0YTwncmFkYXInPiA9IHtcbiAgICBsYWJlbHM6IFtdLFxuICAgIGRhdGFzZXRzOiBbXSxcbiAgfTtcbiAgcmFkYXJDaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9uczwncmFkYXInPjtcbiAgbGFiZWxQb3NpdGlvbnM6IHsgW2tleTogc3RyaW5nXTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0gPSB7fTtcbiAgbGFiZWxQb3NpdGlvbnNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGZvY3VzZWRMYWJlbEluZGV4OiBudW1iZXIgPSAwO1xuICBmb2N1c2VkRmFrZURhdGFQb2ludEluZGV4OiBudW1iZXIgPSAwO1xuICBsb2FkaW5nQ2hhcnREYXRhOiBDaGFydERhdGE8J3JhZGFyJz4gPSB7XG4gICAgbGFiZWxzOiBbMSwgMiwgMywgNCwgNSwgNl0sXG4gICAgZGF0YXNldHM6IFtdLFxuICB9O1xuICBsb2FkaW5nQ2hhcnRPcHRpb25zOiBDaGFydE9wdGlvbnM8J3JhZGFyJz4gPSB7XG4gICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICBsYXlvdXQ6IHtcbiAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgbGVmdDogNDAsXG4gICAgICAgIHJpZ2h0OiA0MCxcbiAgICAgICAgdG9wOiA0MCxcbiAgICAgICAgYm90dG9tOiA0MCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzY2FsZXM6IHtcbiAgICAgIHI6IHtcbiAgICAgICAgYW5nbGVMaW5lczoge1xuICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgY29sb3I6IENvbG9yLkdSQVlTQ0FMRV8zMCxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgIGNvbG9yOiAoKSA9PiBDb2xvci5HUkFZU0NBTEVfMzAsXG4gICAgICAgIH0sXG4gICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHN1Z2dlc3RlZE1pbjogMCxcbiAgICAgICAgc3VnZ2VzdGVkTWF4OiAxMDAsXG4gICAgICAgIHRpY2tzOiB7XG4gICAgICAgICAgc3RlcFNpemU6IHRoaXMuc3RlcFNpemUsXG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbkNvbnRleHQgPSAnQ0hBUlRTLlNQSURFUi4nO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmhhbmRsZUlucHV0RXJyb3JzKCk7XG4gICAgICB0aGlzLnNldENoYXJ0RGF0YSgpO1xuICAgICAgdGhpcy5zZXRDaGFydE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXJyb3JzKCkge1xuICAgIGlmICghdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzIHx8IHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibGFiZWxzXCIgaW5wdXQgaXMgcmVxdWlyZWQgYW5kIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uIHx8IHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcImxhYmVsRGVzY3JpcHRpb25cIiBpbnB1dCBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uICYmXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uLmxlbmd0aCAhPT0gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJsYWJlbERlc2NyaXB0aW9uXCIgaW5wdXQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBcImxhYmVsc1wiLicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGFiYXNlTGFiZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwicGxvdERhdGEuZGF0YWJhc2VMYWJlbFwiIGlucHV0IGlzIHJlcXVpcmVkLicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGEgfHwgdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwicGxvdERhdGEuZGF0YVwiIGlucHV0IGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhLmxlbmd0aCAhPT0gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhXCIgaW5wdXQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBcImxhYmVsc1wiLicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YS5sZW5ndGggPT09IDIgJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVsxXS5kYXRhICYmXG4gICAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVsxXS5kYXRhLmxlbmd0aCAhPT0gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhXCIgaW5wdXQgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBcImxhYmVsc1wiLicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnREYXRhKCkge1xuICAgIGNvbnN0IGRhdGFzZXRzID0gW107XG4gICAgZGF0YXNldHMucHVzaCh7XG4gICAgICBsYWJlbDogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YWJhc2VMYWJlbCxcbiAgICAgIGRhdGE6IHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGEsXG4gICAgICBmaWxsOiB0cnVlLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyMTIsIDE2LCAxNzAsIDAuMiknLFxuICAgICAgYm9yZGVyQ29sb3I6IENvbG9yLkJSQU5EXzUwLFxuICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENvbG9yLkJSQU5EXzUwLFxuICAgICAgcG9pbnRCb3JkZXJDb2xvcjogQ29sb3IuVEdPX1dISVRFLFxuICAgICAgcG9pbnRIb3ZlckJhY2tncm91bmRDb2xvcjogQ29sb3IuVEdPX1dISVRFLFxuICAgICAgcG9pbnRIb3ZlckJvcmRlckNvbG9yOiBDb2xvci5CUkFORF81MCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGEubGVuZ3RoID09PSAyKSB7XG4gICAgICBkYXRhc2V0cy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGFiYXNlTGFiZWwsXG4gICAgICAgIGRhdGE6IHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGEsXG4gICAgICAgIGZpbGw6IGZhbHNlLFxuICAgICAgICBib3JkZXJDb2xvcjogQ29sb3IuQkxBQ0ssXG4gICAgICAgIGJvcmRlckRhc2g6IFs1LCA1XSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIHBvaW50QmFja2dyb3VuZENvbG9yOiBDb2xvci5CTEFDSyxcbiAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogQ29sb3IuVEdPX1dISVRFLFxuICAgICAgICBwb2ludEhvdmVyQmFja2dyb3VuZENvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICAgIHBvaW50SG92ZXJCb3JkZXJDb2xvcjogQ29sb3IuQkxBQ0ssXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5yYWRhckNoYXJ0RGF0YSA9IHtcbiAgICAgIGxhYmVsczogdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLFxuICAgICAgZGF0YXNldHM6IGRhdGFzZXRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNldENoYXJ0T3B0aW9ucygpIHtcbiAgICB0aGlzLnJhZGFyQ2hhcnRPcHRpb25zID0ge1xuICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIGxpbmU6IHtcbiAgICAgICAgICBib3JkZXJXaWR0aDogMyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgIGxlZnQ6IDQwLFxuICAgICAgICAgIHJpZ2h0OiA0MCxcbiAgICAgICAgICB0b3A6IDQwLFxuICAgICAgICAgIGJvdHRvbTogNDAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2NhbGVzOiB7XG4gICAgICAgIHI6IHtcbiAgICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgY29sb3I6IENvbG9yLkJMQUNLLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgY29sb3I6IGNvbnRleHQgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29udGV4dC50aWNrLnZhbHVlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IuQkxBQ0s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIENvbG9yLkdSQVlTQ0FMRV8zMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb2ludExhYmVsczoge1xuICAgICAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgIGZhbWlseTogJ0FyaWFsJyxcbiAgICAgICAgICAgICAgc2l6ZTogMTQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdWdnZXN0ZWRNaW46IDAsXG4gICAgICAgICAgc3VnZ2VzdGVkTWF4OiAxMDAsXG4gICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgIHN0ZXBTaXplOiB0aGlzLnN0ZXBTaXplLFxuICAgICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgIGRpc3BsYXk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXJ0Py5jaGFydCAmJiAhdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvZ0Nvcm5lckNvb3JkaW5hdGVzKHRoaXMuY2hhcnQuY2hhcnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nQ29ybmVyQ29vcmRpbmF0ZXMoY2hhcnQ6IENoYXJ0KSB7XG4gICAgY29uc3Qgc2NhbGUgPSBjaGFydC5zY2FsZXNbJ3InXSBhcyBhbnk7XG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLnNpemUgPT09ICdsYXJnZScgPyBMYXJnZVNwaWRlckNoYXJ0U2l6ZSA6IFNtYWxsU3BpZGVyQ2hhcnRTaXplO1xuICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJyA/IExhcmdlU3BpZGVyQ2hhcnRTaXplIDogU21hbGxTcGlkZXJDaGFydFNpemU7XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIGxhYmVscyBhbmQgY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIGNvb3JkaW5hdGVzXG4gICAgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmZvckVhY2goKGxhYmVsLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBzY2FsZS5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoaW5kZXgsIHNjYWxlLm1heCk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwZXJjZW50YWdlIHZhbHVlcyByZWxhdGl2ZSB0byB0aGUgY2FudmFzIHNpemVcbiAgICAgIGNvbnN0IHhQZXJjZW50ID0gKHBvc2l0aW9uLnggLyBjYW52YXNXaWR0aCkgKiAxMDA7XG4gICAgICBjb25zdCB5UGVyY2VudCA9ICgoY2FudmFzSGVpZ2h0IC0gcG9zaXRpb24ueSkgLyBjYW52YXNIZWlnaHQpICogMTAwOyAvLyBJbnZlcnRpbmcgdGhlIFktYXhpc1xuXG4gICAgICB0aGlzLmxhYmVsUG9zaXRpb25zW2xhYmVsXSA9IHsgeDogTnVtYmVyKHhQZXJjZW50LnRvRml4ZWQoMikpLCB5OiBOdW1iZXIoeVBlcmNlbnQudG9GaXhlZCgyKSkgfTtcbiAgICB9KTtcbiAgICB0aGlzLmxhYmVsUG9zaXRpb25zVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBnZXRDZW50ZXJlZExhYmVsQm90dG9tUG9zaXRpb24obGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMubGFiZWxQb3NpdGlvbnNbbGFiZWxdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSA3O1xuICAgIGlmIChwb3NpdGlvbi54ID4gNTAgfHwgcG9zaXRpb24ueCA8IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi55fSUgLSAke2hlaWdodCAvIDJ9cHgpYDtcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uLnkgPCA1MCkge1xuICAgICAgcmV0dXJuIGBjYWxjKCR7cG9zaXRpb24ueX0lIC0gJHtoZWlnaHR9cHggLSAke3BhZGRpbmd9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBjYWxjKCR7cG9zaXRpb24ueX0lICsgJHtwYWRkaW5nfXB4KWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2VudGVyZWRMYWJlbExlZnRQb3NpdGlvbihsYWJlbDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmxhYmVsUG9zaXRpb25zW2xhYmVsXTtcbiAgICBjb25zdCBwYWRkaW5nID0gMTU7XG4gICAgaWYgKHBvc2l0aW9uLnggPT09IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi54fSUgLSAke3dpZHRoIC8gMn1weClgO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24ueCA8IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi54fSUgLSAke3dpZHRofXB4IC0gJHtwYWRkaW5nfXB4KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnh9JSArICR7cGFkZGluZ31weClgO1xuICAgIH1cbiAgfVxuXG4gIG9uTGFiZWxLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0TGFiZWwoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzTGFiZWwoaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0TGFiZWwoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAobmV4dEluZGV4IDwgdGhpcy5sYWJlbENvbnRhaW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxhYmVsQ29udGFpbmVycy5nZXQobmV4dEluZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsQ29udGFpbmVycy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzZWRMYWJlbEluZGV4ID0gbmV4dEluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzTGFiZWwoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpbmRleCAtIDE7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5sYWJlbENvbnRhaW5lcnMuZ2V0KHByZXZpb3VzSW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxDb250YWluZXJzLmxhc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5mb2N1c2VkTGFiZWxJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gIH1cblxuICBvbkxlZ2VuZEl0ZW1LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgdGhpcy50b2dnbGVEYXRhc2V0VmlzaWJpbGl0eShpbmRleCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dExlZ2VuZEl0ZW0oaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzTGVnZW5kSXRlbShpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRMZWdlbmRJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMubGVnZW5kSXRlbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxlZ2VuZEl0ZW1zLmdldChuZXh0SW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMuZmlyc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNMZWdlbmRJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW5kZXggLSAxO1xuICAgIGlmIChwcmV2aW91c0luZGV4ID49IDApIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMuZ2V0KHByZXZpb3VzSW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMubGFzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmFrZURhdGFQb2ludHNLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0RmFrZURhdGFQb2ludChpbmRleCwgaXNTZWNvbmRhcnkpO1xuICAgICAgdGhpcy5zaG93VG9vbHRpcEZvckRhdGFQb2ludChpbmRleCArIDEgPiB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoID8gMCA6IGluZGV4ICsgMSwgaXNTZWNvbmRhcnkpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzRmFrZURhdGFQb2ludChpbmRleCwgaXNTZWNvbmRhcnkpO1xuICAgICAgdGhpcy5zaG93VG9vbHRpcEZvckRhdGFQb2ludChpbmRleCAtIDEgPCAwID8gdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCAtIDEgOiBpbmRleCAtIDEsIGlzU2Vjb25kYXJ5KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRGYWtlRGF0YVBvaW50KGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMuZmFrZURhdGFQb2ludHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5nZXQobmV4dEluZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoIWlzU2Vjb25kYXJ5KSB7XG4gICAgICB0aGlzLmZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzRmFrZURhdGFQb2ludChpbmRleDogbnVtYmVyLCBpc1NlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGluZGV4IC0gMTtcbiAgICBpZiAocHJldmlvdXNJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5nZXQocHJldmlvdXNJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmFrZURhdGFQb2ludHMgPSBpc1NlY29uZGFyeSA/IHRoaXMuZmFrZURhdGFQb2ludHNTZWNvbmRhcnkgOiB0aGlzLmZha2VEYXRhUG9pbnRzO1xuICAgICAgZmFrZURhdGFQb2ludHMubGFzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoIWlzU2Vjb25kYXJ5KSB7XG4gICAgICB0aGlzLmZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPSBwcmV2aW91c0luZGV4O1xuICAgIH1cbiAgfVxuXG4gIHNob3dUb29sdGlwRm9yRGF0YVBvaW50KGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IFt7IGRhdGFzZXRJbmRleDogaXNTZWNvbmRhcnkgPyAxIDogMCwgaW5kZXggfV07XG4gICAgY29uc3QgbWV0YSA9IGNoYXJ0SW5zdGFuY2UuZ2V0RGF0YXNldE1ldGEoaXNTZWNvbmRhcnkgPyAxIDogMCk7XG4gICAgY29uc3QgZGF0YVBvaW50ID0gbWV0YS5kYXRhW2luZGV4XTtcbiAgICBjb25zdCBldmVudFBvc2l0aW9uID0ge1xuICAgICAgeDogZGF0YVBvaW50LngsXG4gICAgICB5OiBkYXRhUG9pbnQueSxcbiAgICB9O1xuICAgIGlmICghaXNTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEZha2VEYXRhUG9pbnRJbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIGNoYXJ0SW5zdGFuY2UudG9vbHRpcD8uc2V0QWN0aXZlRWxlbWVudHMoYWN0aXZlRWxlbWVudCwgZXZlbnRQb3NpdGlvbik7XG5cbiAgICBjaGFydEluc3RhbmNlLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFjdGl2ZUVsZW1lbnQoKSB7XG4gICAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHRoaXMuY2hhcnQ/LmNoYXJ0O1xuICAgIGlmICghY2hhcnRJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgdGhlIGFjdGl2ZSBlbGVtZW50cyB0byBoaWRlIHRoZSB0b29sdGlwXG4gICAgY2hhcnRJbnN0YW5jZS50b29sdGlwPy5zZXRBY3RpdmVFbGVtZW50cyhbXSwgeyB4OiAwLCB5OiAwIH0pO1xuXG4gICAgY2hhcnRJbnN0YW5jZS51cGRhdGUoKTtcbiAgfVxuXG4gIHRvZ2dsZURhdGFzZXRWaXNpYmlsaXR5KGRhdGFzZXRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHRoaXMuY2hhcnQ/LmNoYXJ0O1xuICAgIGlmICghY2hhcnRJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGF0YXNldCA9IGNoYXJ0SW5zdGFuY2UuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdO1xuICAgIGRhdGFzZXQuaGlkZGVuID0gIWRhdGFzZXQuaGlkZGVuO1xuICAgIGNoYXJ0SW5zdGFuY2UudXBkYXRlKCk7XG4gIH1cblxuICBpc0RhdGFzZXRWaXNpYmxlKGRhdGFzZXRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hhcnRJbnN0YW5jZSA9IHRoaXMuY2hhcnQ/LmNoYXJ0O1xuICAgIGlmICghY2hhcnRJbnN0YW5jZSkgcmV0dXJuO1xuICAgIHJldHVybiAhY2hhcnRJbnN0YW5jZS5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uaGlkZGVuO1xuICB9XG5cbiAgZ2V0Rmlyc3RMaW5lKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdvcmRzID0gbGFiZWwuc3BsaXQoJyAnKTtcbiAgICBsZXQgZmlyc3RMaW5lID0gJyc7XG4gICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XG4gICAgICBpZiAoKGZpcnN0TGluZSArIHdvcmQpLmxlbmd0aCA8PSAyMCkge1xuICAgICAgICBmaXJzdExpbmUgKz0gKGZpcnN0TGluZSA/ICcgJyA6ICcnKSArIHdvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0TGluZTtcbiAgfVxuXG4gIGdldFNlY29uZExpbmUobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlyc3RMaW5lID0gdGhpcy5nZXRGaXJzdExpbmUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbC5zdWJzdHJpbmcoZmlyc3RMaW5lLmxlbmd0aCkudHJpbSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3BpZGVyLWNoYXJ0LWNvbnRhaW5lclwiXG4gIHRhYmluZGV4PVwiMFwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJzcGFjaW5nLWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwieydzbWFsbC1zcGFjaW5nJzogcmFkYXJDaGFydERhdGEubGFiZWxzICYmIHJhZGFyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggJSAyID09PSAxICYmICFsb2FkaW5nfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1jb250YWluZXJcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cInNpemUgPT09ICdsYXJnZScgPyAnMjgwcHgnIDogJzIwMHB4J1wiXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cInNpemUgPT09ICdsYXJnZScgPyAnMjgwcHgnIDogJzIwMHB4J1wiPlxuICAgICAgQGlmICghbG9hZGluZykge1xuICAgICAgICA8Y2FudmFzXG4gICAgICAgICAgYmFzZUNoYXJ0XG4gICAgICAgICAgW2RhdGFdPVwicmFkYXJDaGFydERhdGFcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInJhZGFyQ2hhcnRPcHRpb25zXCJcbiAgICAgICAgICB0eXBlPVwicmFkYXJcIlxuICAgICAgICAgIGNsYXNzPVwiY2hhcnRcIlxuICAgICAgICA+XG4gICAgICAgIDwvY2FudmFzPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxjYW52YXNcbiAgICAgICAgICBiYXNlQ2hhcnRcbiAgICAgICAgICBbZGF0YV09XCJsb2FkaW5nQ2hhcnREYXRhXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJsb2FkaW5nQ2hhcnRPcHRpb25zXCJcbiAgICAgICAgICB0eXBlPVwicmFkYXJcIlxuICAgICAgICAgIGNsYXNzPVwiY2hhcnRcIlxuICAgICAgICA+XG4gICAgICAgIDwvY2FudmFzPlxuICAgICAgICA8dWktc3Bpbm5lcj48L3VpLXNwaW5uZXI+XG4gICAgICB9XG5cbiAgICAgIEBpZiAobGFiZWxQb3NpdGlvbnNWaXNpYmxlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1jb250YWluZXJcIj5cbiAgICAgICAgICBAZm9yIChsYWJlbCBvZiBzcGlkZXJDaGFydERhdGEubGFiZWxzOyB0cmFjayBsYWJlbCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRhaW5lclwiICNsYWJlbENvbnRhaW5lclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJzcGlkZXJDaGFydERhdGEubGFiZWxEZXNjcmlwdGlvblskaW5kZXhdXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIiRpbmRleCA9PT0gMCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkxhYmVsS2V5RG93bigkZXZlbnQsICRpbmRleClcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNwaWRlckNoYXJ0RGF0YS5sYWJlbERlc2NyaXB0aW9uWyRpbmRleF1cIlxuICAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCJnZXRDZW50ZXJlZExhYmVsTGVmdFBvc2l0aW9uKGxhYmVsLCBsYWJlbENvbnRhaW5lci5vZmZzZXRXaWR0aClcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm90dG9tXT1cImdldENlbnRlcmVkTGFiZWxCb3R0b21Qb3NpdGlvbihsYWJlbCwgbGFiZWxDb250YWluZXIub2Zmc2V0SGVpZ2h0KVwiPlxuICAgICAgICAgICAgICBAaWYgKCEobGFiZWwubGVuZ3RoID4gMjAgJiYgc2l6ZSA9PT0gJ2xhcmdlJyAmJiBzcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCA8IDkpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgW3N0eWxlLm1heC13aWR0aF09XCJzaXplID09PSAnbGFyZ2UnID8gJzEzNXB4JyA6ICcxMDBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFtzdHlsZS5tYXgtd2lkdGhdPVwic2l6ZSA9PT0gJ2xhcmdlJyA/ICcxMzVweCcgOiAnMTAwcHgnXCI+e3sgbGFiZWwgfCBtZW1vaXplRnVuYyA6IGdldEZpcnN0TGluZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgW3N0eWxlLm1heC13aWR0aF09XCJzaXplID09PSAnbGFyZ2UnID8gJzEzNXB4JyA6ICcxMDBweCdcIj57eyBsYWJlbCB8IG1lbW9pemVGdW5jIDogZ2V0U2Vjb25kTGluZSA6IHRoaXMgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGFbJGluZGV4XSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYWtlLWRhdGEtcG9pbnRzXCIgI2Zha2VEYXRhUG9pbnRzXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJmb2N1c2VkTGFiZWxJbmRleCA9PT0gJGluZGV4ID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCIkaW5kZXggPT09IGZvY3VzZWRMYWJlbEluZGV4ID8gc2hvd1Rvb2x0aXBGb3JEYXRhUG9pbnQoJGluZGV4KSA6IG51bGxcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkZha2VEYXRhUG9pbnRzS2V5RG93bigkZXZlbnQsICRpbmRleClcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAocmFkYXJDaGFydERhdGEuZGF0YXNldHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZha2UtZGF0YS1wb2ludHMtc2Vjb25kYXJ5XCIgI2Zha2VEYXRhUG9pbnRzU2Vjb25kYXJ5XG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPT09ICRpbmRleCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCIkaW5kZXggPT09IGZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPyBzaG93VG9vbHRpcEZvckRhdGFQb2ludCgkaW5kZXgsIHRydWUpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25GYWtlRGF0YVBvaW50c0tleURvd24oJGV2ZW50LCAkaW5kZXgsIHRydWUpXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmIChyYWRhckNoYXJ0RGF0YS5kYXRhc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGRhdGFzZXQgb2YgcmFkYXJDaGFydERhdGEuZGF0YXNldHM7IHRyYWNrIGRhdGFzZXQubGFiZWwpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGF0YXNldFZpc2liaWxpdHkoJGluZGV4KVwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cIiRpbmRleCA9PT0gMCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJpc0RhdGFzZXRWaXNpYmxlKCRpbmRleCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID9cbiAgICAgICAgICAoKHRyYW5zbGF0aW9uQ29udGV4dCArICdEQVRBU0VUX1ZJU0lCTEUnKSB8IHVpVHJhbnNsYXRlIDogeyBkYXRhc2V0OiBkYXRhc2V0LmxhYmVsIH0gfCBhc3luYykgOlxuICAgICAgICAgICgodHJhbnNsYXRpb25Db250ZXh0ICsgJ0RBVEFTRVRfSElEREVOJykgfCB1aVRyYW5zbGF0ZSA6IHsgZGF0YXNldDogZGF0YXNldC5sYWJlbCB9IHwgYXN5bmMpXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbkxlZ2VuZEl0ZW1LZXlEb3duKCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgI2xlZ2VuZEl0ZW0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGluZVwiIFtuZ0NsYXNzXT1cInsnc29saWQtbGluZSc6ICRpbmRleCA9PT0gMCwgJ2Rhc2hlZC1saW5lJzogJGluZGV4ID09PSAxfVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1sYWJlbFwiIFtzdHlsZS50ZXh0LWRlY29yYXRpb25dPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID8gJ25vbmUnIDogJ2xpbmUtdGhyb3VnaCdcIj5cbiAgICAgICAgICAgIHt7IGRhdGFzZXQubGFiZWwgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuIl19
@@ -1,4 +0,0 @@
1
- // These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.
2
- export const SmallSpiderChartSize = 200;
3
- export const LargeSpiderChartSize = 280;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL3NwaWRlci1jaGFydC9zcGlkZXItY2hhcnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EscUdBQXFHO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFXLEdBQUcsQ0FBQztBQUNoRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBVyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTcGlkZXJDaGFydFNpemUgPSAnbGFyZ2UnIHwgJ3NtYWxsJztcbi8vIFRoZXNlIGFyZSB0aGUgc2l6ZXMgb2YgdGhlIGNhbnZhcywgbm90IHRoZSBjaGFydCBpdHNlbGYuIEl0IGluY2x1ZGVzIDQwcHggb2YgcGFkZGluZyBvbiBhbGwgc2lkZXMuXG5leHBvcnQgY29uc3QgU21hbGxTcGlkZXJDaGFydFNpemU6IG51bWJlciA9IDIwMDtcbmV4cG9ydCBjb25zdCBMYXJnZVNwaWRlckNoYXJ0U2l6ZTogbnVtYmVyID0gMjgwO1xuZXhwb3J0IHR5cGUgU3BpZGVyQ2hhcnREYXRhID0ge1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBsYWJlbERlc2NyaXB0aW9uOiBzdHJpbmdbXTtcbiAgcGxvdERhdGE6IFtQbG90RGF0YSwgUGxvdERhdGFdIHwgW1Bsb3REYXRhXTsgLy8gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBtYXggMiBkYXRhc2V0cy5cbn07XG5leHBvcnQgdHlwZSBQbG90RGF0YSA9IHtcbiAgZGF0YWJhc2VMYWJlbDogc3RyaW5nO1xuICBkYXRhOiBudW1iZXJbXTtcbn07XG4iXX0=
@@ -1,44 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { UiTranslatePipe } from '../../pipes/ui-translate.pipe';
3
- import { SpiderChartComponent } from './spider-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 { SpinnerComponentModule } from '../spinner/spinner.module';
9
- import { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';
10
- import * as i0 from "@angular/core";
11
- Chart.register(...registerables);
12
- export class SpiderChartComponentModule {
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpiderChartComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SpiderChartComponentModule, declarations: [SpiderChartComponent], imports: [NgClass,
15
- UiTranslatePipe,
16
- NgChartsModule,
17
- MatTooltipModule,
18
- UiTranslatePipe,
19
- MemoizeFuncPipe,
20
- SpinnerComponentModule,
21
- CommonModule], exports: [SpiderChartComponent] }); }
22
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpiderChartComponentModule, imports: [NgChartsModule,
23
- MatTooltipModule,
24
- SpinnerComponentModule,
25
- CommonModule] }); }
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SpiderChartComponentModule, decorators: [{
28
- type: NgModule,
29
- args: [{
30
- declarations: [SpiderChartComponent],
31
- exports: [SpiderChartComponent],
32
- imports: [
33
- NgClass,
34
- UiTranslatePipe,
35
- NgChartsModule,
36
- MatTooltipModule,
37
- UiTranslatePipe,
38
- MemoizeFuncPipe,
39
- SpinnerComponentModule,
40
- CommonModule,
41
- ],
42
- }]
43
- }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUVoRSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFnQmpDLE1BQU0sT0FBTywwQkFBMEI7K0dBQTFCLDBCQUEwQjtnSEFBMUIsMEJBQTBCLGlCQWJ0QixvQkFBb0IsYUFHakMsT0FBTztZQUNQLGVBQWU7WUFDZixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixlQUFlO1lBQ2Ysc0JBQXNCO1lBQ3RCLFlBQVksYUFUSixvQkFBb0I7Z0hBWW5CLDBCQUEwQixZQVJuQyxjQUFjO1lBQ2QsZ0JBQWdCO1lBR2hCLHNCQUFzQjtZQUN0QixZQUFZOzs0RkFHSCwwQkFBMEI7a0JBZHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQ3BDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUMvQixPQUFPLEVBQUU7d0JBQ1AsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2Ysc0JBQXNCO3dCQUN0QixZQUFZO3FCQUNiO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVpVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3VpLXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFNwaWRlckNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9zcGlkZXItY2hhcnQuY29tcG9uZW50JztcbmltcG9ydCB7IE5nQ2hhcnRzTW9kdWxlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBDaGFydCwgcmVnaXN0ZXJhYmxlcyB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTcGlubmVyQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vc3Bpbm5lci9zcGlubmVyLm1vZHVsZSc7XG5pbXBvcnQgeyBNZW1vaXplRnVuY1BpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9tZW1vaXplLWZ1bmMucGlwZSc7XG5cbkNoYXJ0LnJlZ2lzdGVyKC4uLnJlZ2lzdGVyYWJsZXMpO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtTcGlkZXJDaGFydENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtTcGlkZXJDaGFydENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIFVpVHJhbnNsYXRlUGlwZSxcbiAgICBOZ0NoYXJ0c01vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIFVpVHJhbnNsYXRlUGlwZSxcbiAgICBNZW1vaXplRnVuY1BpcGUsXG4gICAgU3Bpbm5lckNvbXBvbmVudE1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNwaWRlckNoYXJ0Q29tcG9uZW50TW9kdWxlIHt9XG4iXX0=