@testgorilla/tgo-ui 3.14.13 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/donut-chart/donut-chart.component.d.ts +2 -2
- package/components/filter-button/filter-button.component.d.ts +2 -2
- package/components/icon/icon-svg-content.d.ts +1 -1
- package/components/table/table.component.d.ts +1 -1
- package/fesm2022/testgorilla-tgo-ui.mjs +731 -715
- package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
- package/package.json +17 -20
- package/projects/tgo-canopy-ui/theme/_palette.scss +2 -1
- package/utils/color-contrast.d.ts +1 -1
- package/esm2022/assets/i18n/da-dk.json +0 -820
- package/esm2022/assets/i18n/de.json +0 -820
- package/esm2022/assets/i18n/en.json +0 -827
- package/esm2022/assets/i18n/es.json +0 -820
- package/esm2022/assets/i18n/fr.json +0 -820
- package/esm2022/assets/i18n/it-it.json +0 -820
- package/esm2022/assets/i18n/ja-jp.json +0 -820
- package/esm2022/assets/i18n/nb-no.json +0 -820
- package/esm2022/assets/i18n/nl.json +0 -820
- package/esm2022/assets/i18n/pl-pl.json +0 -820
- package/esm2022/assets/i18n/pt-br.json +0 -820
- package/esm2022/assets/i18n/sv-se.json +0 -820
- package/esm2022/components/accordion/accordion.component.mjs +0 -135
- package/esm2022/components/accordion/accordion.component.module.mjs +0 -40
- package/esm2022/components/accordion/accordion.model.mjs +0 -2
- package/esm2022/components/ai-feedback/ai-feedback.component.mjs +0 -35
- package/esm2022/components/ai-feedback/ai-feedback.model.mjs +0 -2
- package/esm2022/components/ai-feedback/ai-feedback.module.mjs +0 -20
- package/esm2022/components/alert-banner/alert-banner.component.mjs +0 -198
- package/esm2022/components/alert-banner/alert-banner.component.module.mjs +0 -21
- package/esm2022/components/alert-banner/alert-banner.model.mjs +0 -2
- package/esm2022/components/autocomplete/autocomplete.component.mjs +0 -837
- package/esm2022/components/autocomplete/autocomplete.component.module.mjs +0 -77
- package/esm2022/components/autocomplete/autocomplete.model.mjs +0 -25
- package/esm2022/components/autocomplete/includes.pipe.mjs +0 -25
- package/esm2022/components/autocomplete/prevent-input.directive.mjs +0 -27
- package/esm2022/components/autocomplete/transform-Item.pipe.mjs +0 -32
- package/esm2022/components/avatar/avatar.component.mjs +0 -104
- package/esm2022/components/avatar/avatar.component.module.mjs +0 -23
- package/esm2022/components/avatar/avatar.model.mjs +0 -21
- package/esm2022/components/badge/badge.component.mjs +0 -118
- package/esm2022/components/badge/badge.component.module.mjs +0 -20
- package/esm2022/components/badge/badge.model.mjs +0 -39
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +0 -191
- package/esm2022/components/breadcrumb/breadcrumb.component.module.mjs +0 -45
- package/esm2022/components/breadcrumb/breadcrumb.model.mjs +0 -2
- package/esm2022/components/button/button.component.mjs +0 -452
- package/esm2022/components/button/button.component.module.mjs +0 -51
- package/esm2022/components/button/button.model.mjs +0 -2
- package/esm2022/components/card/card.component.mjs +0 -141
- package/esm2022/components/card/card.component.module.mjs +0 -19
- package/esm2022/components/card/card.model.mjs +0 -2
- package/esm2022/components/checkbox/checkbox.component.mjs +0 -336
- package/esm2022/components/checkbox/checkbox.component.module.mjs +0 -28
- package/esm2022/components/checkbox/focus-visible.directive.mjs +0 -40
- package/esm2022/components/checklist/checklist.component.mjs +0 -157
- package/esm2022/components/checklist/checklist.model.mjs +0 -2
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +0 -73
- package/esm2022/components/confirm-dialog/confirm-dialog.component.module.mjs +0 -29
- package/esm2022/components/confirm-dialog/confirm-dialog.model.mjs +0 -2
- package/esm2022/components/datepicker/date-adapter.mjs +0 -39
- package/esm2022/components/datepicker/datepicker.component.mjs +0 -353
- package/esm2022/components/datepicker/datepicker.component.module.mjs +0 -60
- package/esm2022/components/datepicker/datepicker.service.mjs +0 -20
- package/esm2022/components/datepicker/no-date-format.directive.mjs +0 -56
- package/esm2022/components/deprecated-paginator/deprecated-paginator.component.mjs +0 -55
- package/esm2022/components/deprecated-paginator/deprecated-paginator.component.module.mjs +0 -20
- package/esm2022/components/dialog/dialog.component.mjs +0 -275
- package/esm2022/components/dialog/dialog.component.module.mjs +0 -23
- package/esm2022/components/dialog/dialog.model.mjs +0 -2
- package/esm2022/components/dialog/dialog.service.mjs +0 -36
- package/esm2022/components/divider/divider.component.mjs +0 -65
- package/esm2022/components/divider/divider.component.module.mjs +0 -19
- package/esm2022/components/divider/divider.model.mjs +0 -2
- package/esm2022/components/donut-chart/donut-chart.component.mjs +0 -122
- package/esm2022/components/donut-chart/donut-chart.component.model.mjs +0 -2
- package/esm2022/components/donut-chart/donut-chart.component.module.mjs +0 -20
- package/esm2022/components/dropdown/dropdown.component.mjs +0 -378
- package/esm2022/components/dropdown/dropdown.component.module.mjs +0 -57
- package/esm2022/components/dropdown/dropdown.model.mjs +0 -2
- package/esm2022/components/elevation-shadow/elevation-shadow.component.mjs +0 -45
- package/esm2022/components/elevation-shadow/elevation-shadow.component.module.mjs +0 -18
- package/esm2022/components/elevation-shadow/elevation-shadow.constant.mjs +0 -9
- package/esm2022/components/empty-state/empty-state.component.mjs +0 -301
- package/esm2022/components/empty-state/empty-state.component.module.mjs +0 -21
- package/esm2022/components/empty-state/empty-state.model.mjs +0 -2
- package/esm2022/components/field/field.component.mjs +0 -574
- package/esm2022/components/field/field.component.module.mjs +0 -64
- package/esm2022/components/field/field.model.mjs +0 -2
- package/esm2022/components/file-upload/file-upload.component.mjs +0 -307
- package/esm2022/components/file-upload/file-upload.component.module.mjs +0 -40
- package/esm2022/components/filter-button/filter-button.component.mjs +0 -255
- package/esm2022/components/filter-button/filter-button.component.module.mjs +0 -58
- package/esm2022/components/filter-button/filter-button.model.mjs +0 -2
- package/esm2022/components/gaussian-chart/gaussian-chart.component.mjs +0 -254
- package/esm2022/components/gaussian-chart/gaussian-chart.module.mjs +0 -42
- package/esm2022/components/icon/icon-svg-content.mjs +0 -491
- package/esm2022/components/icon/icon.component.mjs +0 -178
- package/esm2022/components/icon/icon.component.module.mjs +0 -21
- package/esm2022/components/icon/icon.config.mjs +0 -780
- package/esm2022/components/icon/icon.model.mjs +0 -2
- package/esm2022/components/icon-label/icon-label.component.mjs +0 -74
- package/esm2022/components/icon-label/icon-label.component.module.mjs +0 -20
- package/esm2022/components/inline-field/inline-field.component.mjs +0 -320
- package/esm2022/components/inline-field/inline-field.component.module.mjs +0 -43
- package/esm2022/components/inline-field/inline-field.model.mjs +0 -2
- package/esm2022/components/logo/logo.component.mjs +0 -165
- package/esm2022/components/logo/logo.component.module.mjs +0 -18
- package/esm2022/components/logo/logo.model.mjs +0 -32
- package/esm2022/components/media-card/media-card.component.mjs +0 -47
- package/esm2022/components/media-dialog/media-dialog.component.mjs +0 -75
- package/esm2022/components/media-dialog/media-dialog.model.mjs +0 -2
- package/esm2022/components/multi-input/multi-input.component.mjs +0 -271
- package/esm2022/components/multi-input/multi-input.component.module.mjs +0 -58
- package/esm2022/components/multi-input/multi-input.model.mjs +0 -2
- package/esm2022/components/multi-input/required-multi-input.validator.mjs +0 -14
- package/esm2022/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.mjs +0 -86
- package/esm2022/components/navbar/navbar.component.mjs +0 -212
- package/esm2022/components/navbar/navbar.component.module.mjs +0 -71
- package/esm2022/components/navbar/navbar.model.mjs +0 -2
- package/esm2022/components/overflow-menu/overflow-menu.component.mjs +0 -254
- package/esm2022/components/overflow-menu/overflow-menu.component.module.mjs +0 -25
- package/esm2022/components/overflow-menu/overflow-menu.model.mjs +0 -2
- package/esm2022/components/page-header/page-header.component.mjs +0 -71
- package/esm2022/components/page-header/page-header.component.module.mjs +0 -20
- package/esm2022/components/paginator/paginator.component.mjs +0 -87
- package/esm2022/components/paginator/paginator.component.module.mjs +0 -19
- package/esm2022/components/password-criteria/password.component.mjs +0 -111
- package/esm2022/components/password-criteria/password.component.module.mjs +0 -39
- package/esm2022/components/password-strength/password-strength.component.mjs +0 -93
- package/esm2022/components/password-strength/password-strength.component.module.mjs +0 -21
- package/esm2022/components/phone-input/join-strings.pipe.mjs +0 -14
- package/esm2022/components/phone-input/phone-input.component.mjs +0 -354
- package/esm2022/components/phone-input/phone-input.component.module.mjs +0 -63
- package/esm2022/components/phone-input/phone-input.model.mjs +0 -2
- package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -103
- package/esm2022/components/progress-bar/progress-bar.component.module.mjs +0 -21
- package/esm2022/components/prompt/prompt.component.mjs +0 -187
- package/esm2022/components/prompt/prompt.model.mjs +0 -2
- package/esm2022/components/prompt/prompt.module.mjs +0 -62
- package/esm2022/components/radial-progress/radial-progress.component.mjs +0 -118
- package/esm2022/components/radial-progress/radial-progress.component.module.mjs +0 -20
- package/esm2022/components/radial-progress/radial-progress.model.mjs +0 -11
- package/esm2022/components/radio-button/radio-button.component.mjs +0 -344
- package/esm2022/components/radio-button/radio-button.component.module.mjs +0 -25
- package/esm2022/components/radio-button/radio-button.model.mjs +0 -2
- package/esm2022/components/rating/half-star.pipe.mjs +0 -23
- package/esm2022/components/rating/rating.component.mjs +0 -106
- package/esm2022/components/rating/rating.component.module.mjs +0 -20
- package/esm2022/components/scale/scale.component.mjs +0 -136
- package/esm2022/components/scale/scale.component.module.mjs +0 -18
- package/esm2022/components/scale-table/scale-table.component.mjs +0 -61
- package/esm2022/components/scale-table/scale-table.model.mjs +0 -2
- package/esm2022/components/segmented-bar/segmented-bar.component.mjs +0 -111
- package/esm2022/components/segmented-bar/segmented-bar.component.module.mjs +0 -22
- package/esm2022/components/segmented-bar/segmented-bar.model.mjs +0 -2
- package/esm2022/components/segmented-button/segmented-button.component.mjs +0 -104
- package/esm2022/components/segmented-button/segmented-button.component.module.mjs +0 -21
- package/esm2022/components/segmented-button/segmented-button.model.mjs +0 -2
- package/esm2022/components/selectable-card/selectable-card.component.mjs +0 -53
- package/esm2022/components/selectable-card/selectable-card.component.module.mjs +0 -20
- package/esm2022/components/side-panel/side-panel-data-injection-token.mjs +0 -3
- package/esm2022/components/side-panel/side-panel.animations.mjs +0 -26
- package/esm2022/components/side-panel/side-panel.component.mjs +0 -55
- package/esm2022/components/side-panel/side-panel.model.mjs +0 -54
- package/esm2022/components/side-panel/side-panel.service.mjs +0 -98
- package/esm2022/components/side-sheet/side-sheet.component.mjs +0 -105
- package/esm2022/components/side-sheet/side-sheet.component.module.mjs +0 -43
- package/esm2022/components/side-sheet/side-sheet.model.mjs +0 -2
- package/esm2022/components/side-sheet/side-sheet.service.mjs +0 -31
- package/esm2022/components/skeleton/skeleton.component.mjs +0 -74
- package/esm2022/components/skeleton/skeleton.model.mjs +0 -2
- package/esm2022/components/slider/slider.component.mjs +0 -256
- package/esm2022/components/slider/slider.component.module.mjs +0 -16
- package/esm2022/components/slider/slider.model.mjs +0 -2
- package/esm2022/components/snackbar/snackbar.component.mjs +0 -235
- package/esm2022/components/snackbar/snackbar.component.module.mjs +0 -25
- package/esm2022/components/snackbar/snackbar.model.mjs +0 -2
- package/esm2022/components/snackbar/snackbar.service.mjs +0 -42
- package/esm2022/components/spider-chart/spider-chart.component.mjs +0 -443
- package/esm2022/components/spider-chart/spider-chart.model.mjs +0 -4
- package/esm2022/components/spider-chart/spider-chart.module.mjs +0 -44
- package/esm2022/components/spinner/spinner.component.mjs +0 -84
- package/esm2022/components/spinner/spinner.model.mjs +0 -2
- package/esm2022/components/spinner/spinner.module.mjs +0 -20
- package/esm2022/components/step/step.component.mjs +0 -209
- package/esm2022/components/step/step.component.module.mjs +0 -21
- package/esm2022/components/stepper/stepper.component.mjs +0 -198
- package/esm2022/components/stepper/stepper.component.module.mjs +0 -44
- package/esm2022/components/stepper/stepper.model.mjs +0 -2
- package/esm2022/components/table/sentence-case.pipe.mjs +0 -19
- package/esm2022/components/table/table.component.mjs +0 -273
- package/esm2022/components/table/table.component.module.mjs +0 -61
- package/esm2022/components/table/table.model.mjs +0 -25
- package/esm2022/components/tabs/tab.directive.mjs +0 -63
- package/esm2022/components/tabs/tabs.component.mjs +0 -219
- package/esm2022/components/tabs/tabs.component.module.mjs +0 -23
- package/esm2022/components/tabs/tabs.model.mjs +0 -2
- package/esm2022/components/tag/tag.component.mjs +0 -212
- package/esm2022/components/tag/tag.component.module.mjs +0 -24
- package/esm2022/components/tag/tag.model.mjs +0 -2
- package/esm2022/components/toggle/toggle.component.mjs +0 -190
- package/esm2022/components/toggle/toggle.component.module.mjs +0 -24
- package/esm2022/components/toggle/toggle.model.mjs +0 -2
- package/esm2022/components/tooltip/tooltip-template.directive.mjs +0 -133
- package/esm2022/components/tooltip/tooltip.component.mjs +0 -108
- package/esm2022/components/tooltip/tooltip.component.module.mjs +0 -27
- package/esm2022/components/tooltip/tooltip.model.mjs +0 -8
- package/esm2022/components/universal-skills-report/universal-skills-report.component.mjs +0 -80
- package/esm2022/components/universal-skills-report/universal-skills-report.component.module.mjs +0 -43
- package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.mjs +0 -109
- package/esm2022/components/universal-skills-spider-charts/universal-skills-spider-charts.component.module.mjs +0 -52
- package/esm2022/components/validation-error/validation-error.component.mjs +0 -55
- package/esm2022/components/validation-error/validation-error.model.mjs +0 -2
- package/esm2022/components/validation-error/validation-error.module.mjs +0 -20
- package/esm2022/directives/digits-only.directive.mjs +0 -77
- package/esm2022/directives/drag-drop.directive.mjs +0 -55
- package/esm2022/directives/dynamic-component.directive.mjs +0 -40
- package/esm2022/directives/ellipse-text.directive.mjs +0 -51
- package/esm2022/directives/select-text.directive.mjs +0 -40
- package/esm2022/directives/step-line-element.directive.mjs +0 -51
- package/esm2022/models/application-theme.model.mjs +0 -2
- package/esm2022/models/checkbox.model.mjs +0 -2
- package/esm2022/models/colors.model.mjs +0 -78
- package/esm2022/models/keyboard-events.model.mjs +0 -13
- package/esm2022/models/screen-breakpoints.model.mjs +0 -7
- package/esm2022/models/universal-skills-report.model.mjs +0 -33
- package/esm2022/pipes/data-property-getter.mjs +0 -33
- package/esm2022/pipes/has-validation-error.pipe.mjs +0 -27
- package/esm2022/pipes/memoize-func.pipe.mjs +0 -39
- package/esm2022/pipes/name-initials.pipe.mjs +0 -25
- package/esm2022/pipes/truncate.pipe.mjs +0 -34
- package/esm2022/pipes/ui-ordinal-suffix.pipe.mjs +0 -31
- package/esm2022/pipes/ui-translate.pipe.mjs +0 -81
- package/esm2022/providers/is-large-tablet.mjs +0 -11
- package/esm2022/providers/is-mobile.mjs +0 -11
- package/esm2022/public-api.mjs +0 -259
- package/esm2022/services/icons.service.mjs +0 -22
- package/esm2022/services/universal-skills.service.mjs +0 -85
- package/esm2022/testgorilla-tgo-ui.mjs +0 -5
- package/esm2022/utils/alert-bar.model.mjs +0 -2
- package/esm2022/utils/alert-bars.utils.mjs +0 -34
- package/esm2022/utils/autocomplete-utils.mjs +0 -78
- package/esm2022/utils/color-contrast.mjs +0 -131
- package/esm2022/utils/hex-to-rgb.mjs +0 -9
- package/esm2022/utils/localization/language.model.mjs +0 -16
- package/esm2022/utils/localization/language.service.mjs +0 -44
- package/esm2022/utils/table.utils.mjs +0 -25
|
@@ -1,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=
|