@testgorilla/tgo-ui 11.22.3 → 12.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 (225) hide show
  1. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +335 -229
  2. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -1
  3. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +547 -465
  4. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
  5. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs +160 -75
  6. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs.map +1 -1
  7. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +678 -278
  8. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
  9. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +337 -274
  10. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
  11. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +351 -192
  12. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
  13. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +1950 -960
  14. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
  15. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1206 -1044
  16. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
  17. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +328 -182
  18. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
  19. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +383 -203
  20. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
  21. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +553 -261
  22. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
  23. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +709 -739
  24. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
  25. package/fesm2022/testgorilla-tgo-ui-components-card.mjs +219 -184
  26. package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -1
  27. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +515 -458
  28. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -1
  29. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +423 -162
  30. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
  31. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +10784 -10996
  32. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
  33. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +810 -533
  34. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs +473 -116
  36. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs.map +1 -1
  37. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +1149 -540
  38. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
  39. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +148 -84
  40. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -1
  41. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +239 -142
  42. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -1
  43. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +599 -467
  44. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
  45. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +126 -70
  46. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -1
  47. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +324 -329
  48. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
  49. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +969 -648
  50. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
  51. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +553 -419
  52. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -1
  53. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +847 -452
  54. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
  55. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +398 -302
  56. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -1
  57. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +162 -95
  58. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -1
  59. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +1825 -1795
  60. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
  61. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs +1018 -672
  62. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs.map +1 -1
  63. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +758 -368
  64. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
  65. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +204 -212
  66. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -1
  67. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +183 -48
  68. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
  69. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +243 -79
  70. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
  71. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +751 -361
  72. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -1
  73. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +1122 -385
  74. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
  75. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +689 -413
  76. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
  77. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +227 -92
  78. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
  79. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +174 -113
  80. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -1
  81. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +367 -165
  82. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -1
  83. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +253 -118
  84. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -1
  85. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +730 -444
  86. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -1
  87. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs +533 -221
  88. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
  89. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs +274 -76
  90. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs.map +1 -1
  91. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +184 -124
  92. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -1
  93. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +1223 -574
  94. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
  95. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +249 -160
  96. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
  97. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +447 -439
  98. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
  99. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +226 -150
  100. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -1
  101. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +255 -67
  102. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
  103. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +205 -162
  104. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
  105. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +245 -153
  106. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -1
  107. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +274 -140
  108. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -1
  109. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs +319 -147
  110. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs.map +1 -1
  111. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +286 -84
  112. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -1
  113. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +660 -208
  114. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
  115. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +579 -320
  116. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
  117. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +419 -200
  118. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
  119. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +132 -80
  120. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -1
  121. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +741 -390
  122. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
  123. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +455 -329
  124. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
  125. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +543 -514
  126. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -1
  127. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +193 -104
  128. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -1
  129. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +760 -524
  130. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
  131. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +714 -415
  132. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
  133. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +847 -438
  134. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -1
  135. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +535 -275
  136. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -1
  137. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +316 -246
  138. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -1
  139. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +404 -284
  140. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -1
  141. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +664 -383
  142. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -1
  143. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +201 -112
  144. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -1
  145. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +1014 -458
  146. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
  147. package/fesm2022/testgorilla-tgo-ui.mjs +147 -155
  148. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  149. package/mcp/catalog.json +1 -1
  150. package/package.json +16 -17
  151. package/projects/tgo-canopy-ui/theme/_palette.scss +23 -18
  152. package/types/testgorilla-tgo-ui-components-accordion.d.ts +214 -158
  153. package/types/testgorilla-tgo-ui-components-ai-audio-circle.d.ts +93 -69
  154. package/types/testgorilla-tgo-ui-components-ai-caveat.d.ts +37 -34
  155. package/types/testgorilla-tgo-ui-components-ai-feedback.d.ts +126 -86
  156. package/types/testgorilla-tgo-ui-components-alert-banner.d.ts +260 -185
  157. package/types/testgorilla-tgo-ui-components-audio-waveform.d.ts +96 -67
  158. package/types/testgorilla-tgo-ui-components-autocomplete-v2.d.ts +455 -256
  159. package/types/testgorilla-tgo-ui-components-autocomplete.d.ts +545 -390
  160. package/types/testgorilla-tgo-ui-components-avatar.d.ts +128 -102
  161. package/types/testgorilla-tgo-ui-components-badge.d.ts +191 -139
  162. package/types/testgorilla-tgo-ui-components-breadcrumb.d.ts +100 -62
  163. package/types/testgorilla-tgo-ui-components-button.d.ts +479 -340
  164. package/types/testgorilla-tgo-ui-components-card.d.ts +153 -114
  165. package/types/testgorilla-tgo-ui-components-checkbox.d.ts +299 -223
  166. package/types/testgorilla-tgo-ui-components-checklist.d.ts +149 -97
  167. package/types/testgorilla-tgo-ui-components-core.d.ts +307 -295
  168. package/types/testgorilla-tgo-ui-components-datepicker.d.ts +404 -299
  169. package/types/testgorilla-tgo-ui-components-device-control.d.ts +151 -81
  170. package/types/testgorilla-tgo-ui-components-dialog.d.ts +442 -329
  171. package/types/testgorilla-tgo-ui-components-divider.d.ts +64 -51
  172. package/types/testgorilla-tgo-ui-components-donut-chart.d.ts +41 -37
  173. package/types/testgorilla-tgo-ui-components-dropdown.d.ts +335 -241
  174. package/types/testgorilla-tgo-ui-components-elevation-shadow.d.ts +48 -43
  175. package/types/testgorilla-tgo-ui-components-empty-state.d.ts +317 -215
  176. package/types/testgorilla-tgo-ui-components-field.d.ts +559 -388
  177. package/types/testgorilla-tgo-ui-components-file-upload.d.ts +230 -168
  178. package/types/testgorilla-tgo-ui-components-filter-button.d.ts +263 -206
  179. package/types/testgorilla-tgo-ui-components-gaussian-chart.d.ts +107 -94
  180. package/types/testgorilla-tgo-ui-components-icon-label.d.ts +84 -61
  181. package/types/testgorilla-tgo-ui-components-icon.d.ts +137 -110
  182. package/types/testgorilla-tgo-ui-components-infinite-scroll-table.d.ts +429 -303
  183. package/types/testgorilla-tgo-ui-components-inline-field.d.ts +338 -254
  184. package/types/testgorilla-tgo-ui-components-logo.d.ts +119 -101
  185. package/types/testgorilla-tgo-ui-components-media-card.d.ts +51 -35
  186. package/types/testgorilla-tgo-ui-components-media-dialog.d.ts +40 -45
  187. package/types/testgorilla-tgo-ui-components-multi-input.d.ts +283 -194
  188. package/types/testgorilla-tgo-ui-components-navbar.d.ts +326 -208
  189. package/types/testgorilla-tgo-ui-components-overflow-menu.d.ts +276 -204
  190. package/types/testgorilla-tgo-ui-components-page-header.d.ts +67 -50
  191. package/types/testgorilla-tgo-ui-components-paginator.d.ts +103 -70
  192. package/types/testgorilla-tgo-ui-components-password-criteria.d.ts +67 -58
  193. package/types/testgorilla-tgo-ui-components-password-strength.d.ts +66 -57
  194. package/types/testgorilla-tgo-ui-components-phone-input.d.ts +217 -175
  195. package/types/testgorilla-tgo-ui-components-popover.d.ts +94 -53
  196. package/types/testgorilla-tgo-ui-components-popup-tip.d.ts +81 -44
  197. package/types/testgorilla-tgo-ui-components-progress-bar.d.ts +115 -84
  198. package/types/testgorilla-tgo-ui-components-prompt.d.ts +315 -219
  199. package/types/testgorilla-tgo-ui-components-radial-progress.d.ts +146 -107
  200. package/types/testgorilla-tgo-ui-components-radio-button.d.ts +296 -219
  201. package/types/testgorilla-tgo-ui-components-rating.d.ts +134 -95
  202. package/types/testgorilla-tgo-ui-components-scale-table.d.ts +67 -47
  203. package/types/testgorilla-tgo-ui-components-scale.d.ts +91 -66
  204. package/types/testgorilla-tgo-ui-components-segmented-bar.d.ts +118 -89
  205. package/types/testgorilla-tgo-ui-components-segmented-button.d.ts +107 -80
  206. package/types/testgorilla-tgo-ui-components-segmented-toggle.d.ts +138 -105
  207. package/types/testgorilla-tgo-ui-components-selectable-card.d.ts +90 -56
  208. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +183 -107
  209. package/types/testgorilla-tgo-ui-components-side-panel.d.ts +156 -145
  210. package/types/testgorilla-tgo-ui-components-side-sheet.d.ts +98 -89
  211. package/types/testgorilla-tgo-ui-components-skeleton.d.ts +50 -33
  212. package/types/testgorilla-tgo-ui-components-slider.d.ts +278 -198
  213. package/types/testgorilla-tgo-ui-components-snackbar.d.ts +211 -159
  214. package/types/testgorilla-tgo-ui-components-spider-chart.d.ts +140 -121
  215. package/types/testgorilla-tgo-ui-components-spinner.d.ts +93 -72
  216. package/types/testgorilla-tgo-ui-components-stepper.d.ts +480 -338
  217. package/types/testgorilla-tgo-ui-components-table.d.ts +280 -233
  218. package/types/testgorilla-tgo-ui-components-tabs.d.ts +282 -183
  219. package/types/testgorilla-tgo-ui-components-tag.d.ts +266 -193
  220. package/types/testgorilla-tgo-ui-components-toggle.d.ts +180 -132
  221. package/types/testgorilla-tgo-ui-components-tooltip.d.ts +142 -105
  222. package/types/testgorilla-tgo-ui-components-universal-skills.d.ts +165 -144
  223. package/types/testgorilla-tgo-ui-components-validation-error.d.ts +70 -51
  224. package/types/testgorilla-tgo-ui-components-write-with-ai.d.ts +210 -133
  225. package/types/testgorilla-tgo-ui.d.ts +52 -45
@@ -1,518 +1,547 @@
1
- import { NgClass, AsyncPipe, CommonModule } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, ChangeDetectorRef, ViewChildren, ViewChild, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
4
- import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
5
- import { BaseChartDirective } from 'ng2-charts';
6
- import { Color, UiTranslatePipe, MemoizeFuncPipe } from '@testgorilla/tgo-ui/components/core';
7
- import { SpinnerComponent, SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';
8
- import { Chart, registerables } from 'chart.js';
9
-
10
- // These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.
1
+ import { AsyncPipe, CommonModule, NgClass } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgModule, ViewChild, ViewChildren, inject } from "@angular/core";
4
+ import { MatTooltip, MatTooltipModule } from "@angular/material/tooltip";
5
+ import { BaseChartDirective } from "ng2-charts";
6
+ import { Color, MemoizeFuncPipe, UiTranslatePipe } from "@testgorilla/tgo-ui/components/core";
7
+ import { SpinnerComponent, SpinnerComponentModule } from "@testgorilla/tgo-ui/components/spinner";
8
+ import { Chart, registerables } from "chart.js";
11
9
  const SmallSpiderChartSize = 200;
12
10
  const LargeSpiderChartSize = 280;
13
-
14
- class SpiderChartComponent {
15
- constructor() {
16
- /**
17
- * The size of the spider chart.
18
- * @type {SpiderChartSize}
19
- * @memberof SpiderChartComponent
20
- */
21
- this.size = 'large';
22
- /**
23
- * The step size for the spider chart.
24
- * @type {number}
25
- * @memberof SpiderChartComponent
26
- */
27
- this.stepSize = 20;
28
- /**
29
- * The aria label for the spider chart.
30
- * @type {string}
31
- * @memberof SpiderChartComponent
32
- */
33
- this.ariaLabel = 'Radar chart. Press tab to navigate through the chart.';
34
- /**
35
- * Whether the spider chart is loading.
36
- * @type {boolean}
37
- * @memberof SpiderChartComponent
38
- */
39
- this.loading = false;
40
- /**
41
- *
42
- * Defines the application theme
43
- *
44
- * @type {ApplicationTheme}
45
- * @memberof SpinnerComponent
46
- */
47
- this.applicationTheme = 'light';
48
- this.radarChartData = {
49
- labels: [],
50
- datasets: [],
51
- };
52
- this.labelPositions = {};
53
- this.labelStyles = {};
54
- this.labelPositionsVisible = false;
55
- this.labelStylesCached = false;
56
- this.focusedLabelIndex = 0;
57
- this.focusedFakeDataPointIndex = 0;
58
- this.loadingChartData = {
59
- labels: [1, 2, 3, 4, 5, 6],
60
- datasets: [],
61
- };
62
- this.loadingChartOptions = {
63
- responsive: true,
64
- layout: {
65
- padding: {
66
- left: 40,
67
- right: 40,
68
- top: 40,
69
- bottom: 40,
70
- },
71
- },
72
- scales: {
73
- r: {
74
- angleLines: {
75
- display: true,
76
- color: Color.GRAYSCALE_30,
77
- },
78
- grid: {
79
- color: () => Color.GRAYSCALE_30,
80
- },
81
- pointLabels: {
82
- display: false,
83
- },
84
- suggestedMin: 0,
85
- suggestedMax: 100,
86
- ticks: {
87
- stepSize: this.stepSize,
88
- display: false,
89
- },
90
- },
91
- },
92
- };
93
- this.translationContext = 'CHARTS.SPIDER.';
94
- this.cdr = inject(ChangeDetectorRef);
95
- }
96
- ngOnInit() {
97
- if (!this.loading) {
98
- this.handleInputErrors();
99
- this.setChartData();
100
- this.setChartOptions();
101
- }
102
- }
103
- handleInputErrors() {
104
- if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {
105
- throw new Error('The "labels" input is required and cannot be empty.');
106
- }
107
- if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {
108
- throw new Error('The "labelDescription" input is required and cannot be empty.');
109
- }
110
- if (this.spiderChartData.labelDescription &&
111
- this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length) {
112
- throw new Error('The "labelDescription" input must have the same length as "labels".');
113
- }
114
- if (!this.spiderChartData.plotData[0].databaseLabel) {
115
- throw new Error('The "plotData.databaseLabel" input is required.');
116
- }
117
- if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {
118
- throw new Error('The "plotData.data" input is required and cannot be empty.');
119
- }
120
- if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {
121
- throw new Error('The "plotData.data" input must have the same length as "labels".');
122
- }
123
- if (this.spiderChartData.plotData.length === 2 &&
124
- this.spiderChartData.labels.length > 0 &&
125
- this.spiderChartData.plotData[1].data &&
126
- this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length) {
127
- throw new Error('The "plotData.data" input must have the same length as "labels".');
128
- }
129
- }
130
- setChartData() {
131
- const datasets = [];
132
- datasets.push({
133
- label: this.spiderChartData.plotData[0].databaseLabel,
134
- data: this.spiderChartData.plotData[0].data,
135
- fill: true,
136
- backgroundColor: 'rgba(212, 16, 170, 0.2)',
137
- borderColor: Color.BRAND_50,
138
- pointBackgroundColor: Color.BRAND_50,
139
- pointBorderColor: Color.TGO_WHITE,
140
- pointHoverBackgroundColor: Color.TGO_WHITE,
141
- pointHoverBorderColor: Color.BRAND_50,
142
- });
143
- if (this.spiderChartData.plotData.length === 2) {
144
- datasets.push({
145
- label: this.spiderChartData.plotData[1].databaseLabel,
146
- data: this.spiderChartData.plotData[1].data,
147
- fill: false,
148
- borderColor: Color.BLACK,
149
- borderDash: [5, 5],
150
- borderWidth: 1,
151
- pointBackgroundColor: Color.BLACK,
152
- pointBorderColor: Color.TGO_WHITE,
153
- pointHoverBackgroundColor: Color.TGO_WHITE,
154
- pointHoverBorderColor: Color.BLACK,
155
- });
156
- }
157
- this.radarChartData = {
158
- labels: this.spiderChartData.labels,
159
- datasets,
160
- };
161
- }
162
- setChartOptions() {
163
- this.radarChartOptions = {
164
- responsive: true,
165
- elements: {
166
- line: {
167
- borderWidth: 3,
168
- },
169
- },
170
- layout: {
171
- padding: {
172
- left: 40,
173
- right: 40,
174
- top: 40,
175
- bottom: 40,
176
- },
177
- },
178
- scales: {
179
- r: {
180
- angleLines: {
181
- display: true,
182
- color: Color.BLACK,
183
- },
184
- grid: {
185
- color: context => {
186
- if (context.tick.value === 100) {
187
- return Color.BLACK;
188
- }
189
- return Color.GRAYSCALE_30;
190
- },
191
- },
192
- pointLabels: {
193
- color: 'black',
194
- font: {
195
- family: 'Arial',
196
- size: 14,
197
- },
198
- display: false,
199
- },
200
- suggestedMin: 0,
201
- suggestedMax: 100,
202
- ticks: {
203
- stepSize: this.stepSize,
204
- display: false,
205
- },
206
- },
207
- },
208
- plugins: {
209
- legend: {
210
- display: false,
211
- },
212
- },
213
- };
214
- }
215
- ngAfterViewInit() {
216
- if (this.chart?.chart && !this.loading) {
217
- this.logCornerCoordinates(this.chart.chart);
218
- // Under OnPush nothing re-checks this view between AfterViewInit and the
219
- // measurement timeout, so render the (still hidden) label containers now —
220
- // otherwise the `@if (labelPositionsVisible)` block hasn't been created yet
221
- // and cacheLabelStyles() measures an empty ViewChildren list.
222
- this.cdr.detectChanges();
223
- // Cache label styles after positions are calculated and DOM is rendered.
224
- // We deliberately use setTimeout(0) instead of afterNextRender here: the
225
- // callback must fire after the browser has fully painted (fonts swapped,
226
- // chart.js canvas drawn) so that offsetWidth/offsetHeight measurements
227
- // are sub-pixel stable. afterNextRender fires earlier (pre-paint) and
228
- // produced label-position drift in visual tests.
229
- setTimeout(() => this.cacheLabelStyles());
230
- }
231
- }
232
- cacheLabelStyles() {
233
- if (!this.labelContainers) {
234
- return;
235
- }
236
- this.labelContainers.forEach((ref, index) => {
237
- const label = this.spiderChartData.labels[index];
238
- const el = ref.nativeElement;
239
- this.labelStyles[label] = {
240
- left: this.getCenteredLabelLeftPosition(label, el.offsetWidth),
241
- bottom: this.getCenteredLabelBottomPosition(label, el.offsetHeight),
242
- };
243
- });
244
- this.labelStylesCached = true;
245
- this.cdr.detectChanges();
246
- }
247
- logCornerCoordinates(chart) {
248
- const scale = chart.scales['r'];
249
- const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
250
- const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
251
- // Loop through the labels and calculate the percentage coordinates
252
- this.spiderChartData.labels.forEach((label, index) => {
253
- const position = scale.getPointPositionForValue(index, scale.max);
254
- // Calculate percentage values relative to the canvas size
255
- const xPercent = (position.x / canvasWidth) * 100;
256
- const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis
257
- this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };
258
- });
259
- this.labelPositionsVisible = true;
260
- }
261
- getCenteredLabelBottomPosition(label, height) {
262
- const position = this.labelPositions[label];
263
- const padding = 7;
264
- if (position.x > 50 || position.x < 50) {
265
- return `calc(${position.y}% - ${height / 2}px)`;
266
- }
267
- else if (position.y < 50) {
268
- return `calc(${position.y}% - ${height}px - ${padding}px)`;
269
- }
270
- else {
271
- return `calc(${position.y}% + ${padding}px)`;
272
- }
273
- }
274
- getCenteredLabelLeftPosition(label, width) {
275
- const position = this.labelPositions[label];
276
- const padding = 15;
277
- if (position.x === 50) {
278
- return `calc(${position.x}% - ${width / 2}px)`;
279
- }
280
- else if (position.x < 50) {
281
- return `calc(${position.x}% - ${width}px - ${padding}px)`;
282
- }
283
- else {
284
- return `calc(${position.x}% + ${padding}px)`;
285
- }
286
- }
287
- onLabelKeyDown(event, index) {
288
- if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
289
- this.focusNextLabel(index);
290
- }
291
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
292
- this.focusPreviousLabel(index);
293
- }
294
- }
295
- focusNextLabel(index) {
296
- const nextIndex = index + 1;
297
- if (nextIndex < this.labelContainers.length) {
298
- this.labelContainers.get(nextIndex)?.nativeElement.focus();
299
- }
300
- else {
301
- this.labelContainers.first?.nativeElement.focus();
302
- }
303
- this.focusedLabelIndex = nextIndex;
304
- }
305
- focusPreviousLabel(index) {
306
- const previousIndex = index - 1;
307
- if (previousIndex >= 0) {
308
- this.labelContainers.get(previousIndex)?.nativeElement.focus();
309
- }
310
- else {
311
- this.labelContainers.last?.nativeElement.focus();
312
- }
313
- this.focusedLabelIndex = previousIndex;
314
- }
315
- onLegendItemKeyDown(event, index) {
316
- if (event.key === 'Enter') {
317
- this.toggleDatasetVisibility(index);
318
- }
319
- else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
320
- this.focusNextLegendItem(index);
321
- }
322
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
323
- this.focusPreviousLegendItem(index);
324
- }
325
- }
326
- focusNextLegendItem(index) {
327
- const nextIndex = index + 1;
328
- if (nextIndex < this.legendItems.length) {
329
- this.legendItems.get(nextIndex)?.nativeElement.focus();
330
- }
331
- else {
332
- this.legendItems.first?.nativeElement.focus();
333
- }
334
- }
335
- focusPreviousLegendItem(index) {
336
- const previousIndex = index - 1;
337
- if (previousIndex >= 0) {
338
- this.legendItems.get(previousIndex)?.nativeElement.focus();
339
- }
340
- else {
341
- this.legendItems.last?.nativeElement.focus();
342
- }
343
- }
344
- onFakeDataPointsKeyDown(event, index, isSecondary = false) {
345
- if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
346
- this.focusNextFakeDataPoint(index, isSecondary);
347
- this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);
348
- }
349
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
350
- this.focusPreviousFakeDataPoint(index, isSecondary);
351
- this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);
352
- }
353
- else if (event.key === 'Tab') {
354
- this.resetActiveElement();
355
- }
356
- }
357
- focusNextFakeDataPoint(index, isSecondary = false) {
358
- const nextIndex = index + 1;
359
- if (nextIndex < this.fakeDataPoints.length) {
360
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
361
- fakeDataPoints.get(nextIndex)?.nativeElement.focus();
362
- }
363
- else {
364
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
365
- fakeDataPoints.first?.nativeElement.focus();
366
- }
367
- if (!isSecondary) {
368
- this.focusedFakeDataPointIndex = nextIndex;
369
- }
370
- }
371
- focusPreviousFakeDataPoint(index, isSecondary = false) {
372
- const previousIndex = index - 1;
373
- if (previousIndex >= 0) {
374
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
375
- fakeDataPoints.get(previousIndex)?.nativeElement.focus();
376
- }
377
- else {
378
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
379
- fakeDataPoints.last?.nativeElement.focus();
380
- }
381
- if (!isSecondary) {
382
- this.focusedFakeDataPointIndex = previousIndex;
383
- }
384
- }
385
- showTooltipForDataPoint(index, isSecondary = false) {
386
- const chartInstance = this.chart?.chart;
387
- if (!chartInstance) {
388
- return;
389
- }
390
- const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];
391
- const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);
392
- const dataPoint = meta.data[index];
393
- const eventPosition = {
394
- x: dataPoint.x,
395
- y: dataPoint.y,
396
- };
397
- if (!isSecondary) {
398
- this.focusedFakeDataPointIndex = index;
399
- }
400
- chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);
401
- chartInstance.update();
402
- }
403
- resetActiveElement() {
404
- const chartInstance = this.chart?.chart;
405
- if (!chartInstance) {
406
- return;
407
- }
408
- // Clear the active elements to hide the tooltip
409
- chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });
410
- chartInstance.update();
411
- }
412
- toggleDatasetVisibility(datasetIndex) {
413
- const chartInstance = this.chart?.chart;
414
- if (!chartInstance) {
415
- return;
416
- }
417
- const dataset = chartInstance.data.datasets[datasetIndex];
418
- dataset.hidden = !dataset.hidden;
419
- chartInstance.update();
420
- }
421
- isDatasetVisible(datasetIndex) {
422
- const chartInstance = this.chart?.chart;
423
- if (!chartInstance) {
424
- return;
425
- }
426
- return !chartInstance.data.datasets[datasetIndex].hidden;
427
- }
428
- getFirstLine(label) {
429
- const words = label.split(' ');
430
- let firstLine = '';
431
- for (const word of words) {
432
- if ((firstLine + word).length <= 20) {
433
- firstLine += (firstLine ? ' ' : '') + word;
434
- }
435
- else {
436
- break;
437
- }
438
- }
439
- return firstLine;
440
- }
441
- getSecondLine(label) {
442
- const firstLine = this.getFirstLine(label);
443
- return label.substring(firstLine.length).trim();
444
- }
445
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SpiderChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
446
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: SpiderChartComponent, isStandalone: true, 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\" tabindex=\"0\" [attr.aria-label]=\"ariaLabel\">\n <div\n class=\"spacing-container\"\n [ngClass]=\"{ 'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading }\"\n >\n <div\n class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\"\n >\n @if (!loading) {\n <canvas baseChart [data]=\"radarChartData\" [options]=\"radarChartOptions\" type=\"radar\" class=\"chart\"> </canvas>\n } @else {\n <canvas baseChart [data]=\"loadingChartData\" [options]=\"loadingChartOptions\" type=\"radar\" class=\"chart\">\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\" [style.visibility]=\"labelStylesCached ? 'visible' : 'hidden'\">\n @for (label of spiderChartData.labels; track label) {\n <div\n class=\"label-container\"\n #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]=\"labelStyles[label]?.left\"\n [style.bottom]=\"labelStyles[label]?.bottom\"\n >\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'\">\n {{ label | memoizeFunc: getFirstLine }}\n </div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label | memoizeFunc: getSecondLine : this }}\n </div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span\n class=\"fake-data-points\"\n #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\"\n >\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span\n class=\"fake-data-points-secondary\"\n #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\"\n >\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\n 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]=\"\n isDatasetVisible($index)\n ? (translationContext + 'DATASET_VISIBLE' | uiTranslate: { dataset: dataset.label } | async)\n : (translationContext + 'DATASET_HIDDEN' | uiTranslate: { dataset: dataset.label } | async)\n \"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem\n >\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", 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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }, { kind: "component", type: SpinnerComponent, selector: "ui-spinner", inputs: ["size", "isLoader", "text", "applicationTheme", "iconName", "iconSize"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
447
- }
448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SpiderChartComponent, decorators: [{
449
- type: Component,
450
- args: [{ selector: 'ui-spider-chart', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, BaseChartDirective, SpinnerComponent, MatTooltip, UiTranslatePipe, MemoizeFuncPipe, AsyncPipe], template: "<div class=\"spider-chart-container\" tabindex=\"0\" [attr.aria-label]=\"ariaLabel\">\n <div\n class=\"spacing-container\"\n [ngClass]=\"{ 'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading }\"\n >\n <div\n class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\"\n >\n @if (!loading) {\n <canvas baseChart [data]=\"radarChartData\" [options]=\"radarChartOptions\" type=\"radar\" class=\"chart\"> </canvas>\n } @else {\n <canvas baseChart [data]=\"loadingChartData\" [options]=\"loadingChartOptions\" type=\"radar\" class=\"chart\">\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\" [style.visibility]=\"labelStylesCached ? 'visible' : 'hidden'\">\n @for (label of spiderChartData.labels; track label) {\n <div\n class=\"label-container\"\n #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]=\"labelStyles[label]?.left\"\n [style.bottom]=\"labelStyles[label]?.bottom\"\n >\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'\">\n {{ label | memoizeFunc: getFirstLine }}\n </div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label | memoizeFunc: getSecondLine : this }}\n </div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span\n class=\"fake-data-points\"\n #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\"\n >\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span\n class=\"fake-data-points-secondary\"\n #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\"\n >\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\n 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]=\"\n isDatasetVisible($index)\n ? (translationContext + 'DATASET_VISIBLE' | uiTranslate: { dataset: dataset.label } | async)\n : (translationContext + 'DATASET_HIDDEN' | uiTranslate: { dataset: dataset.label } | async)\n \"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem\n >\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", 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"] }]
451
- }], propDecorators: { size: [{
452
- type: Input
453
- }], spiderChartData: [{
454
- type: Input
455
- }], stepSize: [{
456
- type: Input
457
- }], ariaLabel: [{
458
- type: Input
459
- }], loading: [{
460
- type: Input
461
- }], applicationTheme: [{
462
- type: Input
463
- }], chart: [{
464
- type: ViewChild,
465
- args: [BaseChartDirective]
466
- }], labelContainers: [{
467
- type: ViewChildren,
468
- args: ['labelContainer']
469
- }], fakeDataPoints: [{
470
- type: ViewChildren,
471
- args: ['fakeDataPoints']
472
- }], fakeDataPointsSecondary: [{
473
- type: ViewChildren,
474
- args: ['fakeDataPointsSecondary']
475
- }], legendItems: [{
476
- type: ViewChildren,
477
- args: ['legendItem']
478
- }] } });
479
-
11
+ var SpiderChartComponent = class SpiderChartComponent {
12
+ constructor() {
13
+ this.size = "large";
14
+ this.stepSize = 20;
15
+ this.ariaLabel = "Radar chart. Press tab to navigate through the chart.";
16
+ this.loading = false;
17
+ this.applicationTheme = "light";
18
+ this.radarChartData = {
19
+ labels: [],
20
+ datasets: []
21
+ };
22
+ this.labelPositions = {};
23
+ this.labelStyles = {};
24
+ this.labelPositionsVisible = false;
25
+ this.labelStylesCached = false;
26
+ this.focusedLabelIndex = 0;
27
+ this.focusedFakeDataPointIndex = 0;
28
+ this.loadingChartData = {
29
+ labels: [
30
+ 1,
31
+ 2,
32
+ 3,
33
+ 4,
34
+ 5,
35
+ 6
36
+ ],
37
+ datasets: []
38
+ };
39
+ this.loadingChartOptions = {
40
+ responsive: true,
41
+ layout: { padding: {
42
+ left: 40,
43
+ right: 40,
44
+ top: 40,
45
+ bottom: 40
46
+ } },
47
+ scales: { r: {
48
+ angleLines: {
49
+ display: true,
50
+ color: Color.GRAYSCALE_30
51
+ },
52
+ grid: { color: () => Color.GRAYSCALE_30 },
53
+ pointLabels: { display: false },
54
+ suggestedMin: 0,
55
+ suggestedMax: 100,
56
+ ticks: {
57
+ stepSize: this.stepSize,
58
+ display: false
59
+ }
60
+ } }
61
+ };
62
+ this.translationContext = "CHARTS.SPIDER.";
63
+ this.cdr = inject(ChangeDetectorRef);
64
+ }
65
+ ngOnInit() {
66
+ if (!this.loading) {
67
+ this.handleInputErrors();
68
+ this.setChartData();
69
+ this.setChartOptions();
70
+ }
71
+ }
72
+ handleInputErrors() {
73
+ if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) throw new Error("The \"labels\" input is required and cannot be empty.");
74
+ if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) throw new Error("The \"labelDescription\" input is required and cannot be empty.");
75
+ if (this.spiderChartData.labelDescription && this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length) throw new Error("The \"labelDescription\" input must have the same length as \"labels\".");
76
+ if (!this.spiderChartData.plotData[0].databaseLabel) throw new Error("The \"plotData.databaseLabel\" input is required.");
77
+ if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) throw new Error("The \"plotData.data\" input is required and cannot be empty.");
78
+ if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) throw new Error("The \"plotData.data\" input must have the same length as \"labels\".");
79
+ if (this.spiderChartData.plotData.length === 2 && this.spiderChartData.labels.length > 0 && this.spiderChartData.plotData[1].data && this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length) throw new Error("The \"plotData.data\" input must have the same length as \"labels\".");
80
+ }
81
+ setChartData() {
82
+ const datasets = [];
83
+ datasets.push({
84
+ label: this.spiderChartData.plotData[0].databaseLabel,
85
+ data: this.spiderChartData.plotData[0].data,
86
+ fill: true,
87
+ backgroundColor: "rgba(212, 16, 170, 0.2)",
88
+ borderColor: Color.BRAND_50,
89
+ pointBackgroundColor: Color.BRAND_50,
90
+ pointBorderColor: Color.TGO_WHITE,
91
+ pointHoverBackgroundColor: Color.TGO_WHITE,
92
+ pointHoverBorderColor: Color.BRAND_50
93
+ });
94
+ if (this.spiderChartData.plotData.length === 2) datasets.push({
95
+ label: this.spiderChartData.plotData[1].databaseLabel,
96
+ data: this.spiderChartData.plotData[1].data,
97
+ fill: false,
98
+ borderColor: Color.BLACK,
99
+ borderDash: [5, 5],
100
+ borderWidth: 1,
101
+ pointBackgroundColor: Color.BLACK,
102
+ pointBorderColor: Color.TGO_WHITE,
103
+ pointHoverBackgroundColor: Color.TGO_WHITE,
104
+ pointHoverBorderColor: Color.BLACK
105
+ });
106
+ this.radarChartData = {
107
+ labels: this.spiderChartData.labels,
108
+ datasets
109
+ };
110
+ }
111
+ setChartOptions() {
112
+ this.radarChartOptions = {
113
+ responsive: true,
114
+ elements: { line: { borderWidth: 3 } },
115
+ layout: { padding: {
116
+ left: 40,
117
+ right: 40,
118
+ top: 40,
119
+ bottom: 40
120
+ } },
121
+ scales: { r: {
122
+ angleLines: {
123
+ display: true,
124
+ color: Color.BLACK
125
+ },
126
+ grid: { color: (context) => {
127
+ if (context.tick.value === 100) return Color.BLACK;
128
+ return Color.GRAYSCALE_30;
129
+ } },
130
+ pointLabels: {
131
+ color: "black",
132
+ font: {
133
+ family: "Arial",
134
+ size: 14
135
+ },
136
+ display: false
137
+ },
138
+ suggestedMin: 0,
139
+ suggestedMax: 100,
140
+ ticks: {
141
+ stepSize: this.stepSize,
142
+ display: false
143
+ }
144
+ } },
145
+ plugins: { legend: { display: false } }
146
+ };
147
+ }
148
+ ngAfterViewInit() {
149
+ if (this.chart?.chart && !this.loading) {
150
+ this.logCornerCoordinates(this.chart.chart);
151
+ this.cdr.detectChanges();
152
+ setTimeout(() => this.cacheLabelStyles());
153
+ }
154
+ }
155
+ cacheLabelStyles() {
156
+ if (!this.labelContainers) return;
157
+ this.labelContainers.forEach((ref, index) => {
158
+ const label = this.spiderChartData.labels[index];
159
+ const el = ref.nativeElement;
160
+ this.labelStyles[label] = {
161
+ left: this.getCenteredLabelLeftPosition(label, el.offsetWidth),
162
+ bottom: this.getCenteredLabelBottomPosition(label, el.offsetHeight)
163
+ };
164
+ });
165
+ this.labelStylesCached = true;
166
+ this.cdr.detectChanges();
167
+ }
168
+ logCornerCoordinates(chart) {
169
+ const scale = chart.scales["r"];
170
+ const canvasWidth = this.size === "large" ? 280 : 200;
171
+ const canvasHeight = this.size === "large" ? 280 : 200;
172
+ this.spiderChartData.labels.forEach((label, index) => {
173
+ const position = scale.getPointPositionForValue(index, scale.max);
174
+ const xPercent = position.x / canvasWidth * 100;
175
+ const yPercent = (canvasHeight - position.y) / canvasHeight * 100;
176
+ this.labelPositions[label] = {
177
+ x: Number(xPercent.toFixed(2)),
178
+ y: Number(yPercent.toFixed(2))
179
+ };
180
+ });
181
+ this.labelPositionsVisible = true;
182
+ }
183
+ getCenteredLabelBottomPosition(label, height) {
184
+ const position = this.labelPositions[label];
185
+ const padding = 7;
186
+ if (position.x > 50 || position.x < 50) return `calc(${position.y}% - ${height / 2}px)`;
187
+ else if (position.y < 50) return `calc(${position.y}% - ${height}px - ${padding}px)`;
188
+ else return `calc(${position.y}% + ${padding}px)`;
189
+ }
190
+ getCenteredLabelLeftPosition(label, width) {
191
+ const position = this.labelPositions[label];
192
+ const padding = 15;
193
+ if (position.x === 50) return `calc(${position.x}% - ${width / 2}px)`;
194
+ else if (position.x < 50) return `calc(${position.x}% - ${width}px - ${padding}px)`;
195
+ else return `calc(${position.x}% + ${padding}px)`;
196
+ }
197
+ onLabelKeyDown(event, index) {
198
+ if (event.key === "ArrowRight" || event.key === "ArrowDown") this.focusNextLabel(index);
199
+ else if (event.key === "ArrowLeft" || event.key === "ArrowUp") this.focusPreviousLabel(index);
200
+ }
201
+ focusNextLabel(index) {
202
+ const nextIndex = index + 1;
203
+ if (nextIndex < this.labelContainers.length) this.labelContainers.get(nextIndex)?.nativeElement.focus();
204
+ else this.labelContainers.first?.nativeElement.focus();
205
+ this.focusedLabelIndex = nextIndex;
206
+ }
207
+ focusPreviousLabel(index) {
208
+ const previousIndex = index - 1;
209
+ if (previousIndex >= 0) this.labelContainers.get(previousIndex)?.nativeElement.focus();
210
+ else this.labelContainers.last?.nativeElement.focus();
211
+ this.focusedLabelIndex = previousIndex;
212
+ }
213
+ onLegendItemKeyDown(event, index) {
214
+ if (event.key === "Enter") this.toggleDatasetVisibility(index);
215
+ else if (event.key === "ArrowRight" || event.key === "ArrowDown") this.focusNextLegendItem(index);
216
+ else if (event.key === "ArrowLeft" || event.key === "ArrowUp") this.focusPreviousLegendItem(index);
217
+ }
218
+ focusNextLegendItem(index) {
219
+ const nextIndex = index + 1;
220
+ if (nextIndex < this.legendItems.length) this.legendItems.get(nextIndex)?.nativeElement.focus();
221
+ else this.legendItems.first?.nativeElement.focus();
222
+ }
223
+ focusPreviousLegendItem(index) {
224
+ const previousIndex = index - 1;
225
+ if (previousIndex >= 0) this.legendItems.get(previousIndex)?.nativeElement.focus();
226
+ else this.legendItems.last?.nativeElement.focus();
227
+ }
228
+ onFakeDataPointsKeyDown(event, index, isSecondary = false) {
229
+ if (event.key === "ArrowRight" || event.key === "ArrowDown") {
230
+ this.focusNextFakeDataPoint(index, isSecondary);
231
+ this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);
232
+ } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
233
+ this.focusPreviousFakeDataPoint(index, isSecondary);
234
+ this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);
235
+ } else if (event.key === "Tab") this.resetActiveElement();
236
+ }
237
+ focusNextFakeDataPoint(index, isSecondary = false) {
238
+ const nextIndex = index + 1;
239
+ if (nextIndex < this.fakeDataPoints.length) (isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints).get(nextIndex)?.nativeElement.focus();
240
+ else (isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints).first?.nativeElement.focus();
241
+ if (!isSecondary) this.focusedFakeDataPointIndex = nextIndex;
242
+ }
243
+ focusPreviousFakeDataPoint(index, isSecondary = false) {
244
+ const previousIndex = index - 1;
245
+ if (previousIndex >= 0) (isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints).get(previousIndex)?.nativeElement.focus();
246
+ else (isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints).last?.nativeElement.focus();
247
+ if (!isSecondary) this.focusedFakeDataPointIndex = previousIndex;
248
+ }
249
+ showTooltipForDataPoint(index, isSecondary = false) {
250
+ const chartInstance = this.chart?.chart;
251
+ if (!chartInstance) return;
252
+ const activeElement = [{
253
+ datasetIndex: isSecondary ? 1 : 0,
254
+ index
255
+ }];
256
+ const dataPoint = chartInstance.getDatasetMeta(isSecondary ? 1 : 0).data[index];
257
+ const eventPosition = {
258
+ x: dataPoint.x,
259
+ y: dataPoint.y
260
+ };
261
+ if (!isSecondary) this.focusedFakeDataPointIndex = index;
262
+ chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);
263
+ chartInstance.update();
264
+ }
265
+ resetActiveElement() {
266
+ const chartInstance = this.chart?.chart;
267
+ if (!chartInstance) return;
268
+ chartInstance.tooltip?.setActiveElements([], {
269
+ x: 0,
270
+ y: 0
271
+ });
272
+ chartInstance.update();
273
+ }
274
+ toggleDatasetVisibility(datasetIndex) {
275
+ const chartInstance = this.chart?.chart;
276
+ if (!chartInstance) return;
277
+ const dataset = chartInstance.data.datasets[datasetIndex];
278
+ dataset.hidden = !dataset.hidden;
279
+ chartInstance.update();
280
+ }
281
+ isDatasetVisible(datasetIndex) {
282
+ const chartInstance = this.chart?.chart;
283
+ if (!chartInstance) return;
284
+ return !chartInstance.data.datasets[datasetIndex].hidden;
285
+ }
286
+ getFirstLine(label) {
287
+ const words = label.split(" ");
288
+ let firstLine = "";
289
+ for (const word of words) if ((firstLine + word).length <= 20) firstLine += (firstLine ? " " : "") + word;
290
+ else break;
291
+ return firstLine;
292
+ }
293
+ getSecondLine(label) {
294
+ const firstLine = this.getFirstLine(label);
295
+ return label.substring(firstLine.length).trim();
296
+ }
297
+ static {
298
+ this.ɵfac = i0.ɵɵngDeclareFactory({
299
+ minVersion: "12.0.0",
300
+ version: "22.2.4",
301
+ ngImport: i0,
302
+ type: SpiderChartComponent,
303
+ deps: [],
304
+ target: i0.ɵɵFactoryTarget.Component
305
+ });
306
+ }
307
+ static {
308
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
309
+ minVersion: "17.0.0",
310
+ version: "22.2.4",
311
+ type: SpiderChartComponent,
312
+ isStandalone: true,
313
+ selector: "ui-spider-chart",
314
+ inputs: {
315
+ size: "size",
316
+ spiderChartData: "spiderChartData",
317
+ stepSize: "stepSize",
318
+ ariaLabel: "ariaLabel",
319
+ loading: "loading",
320
+ applicationTheme: "applicationTheme"
321
+ },
322
+ viewQueries: [
323
+ {
324
+ propertyName: "chart",
325
+ first: true,
326
+ predicate: BaseChartDirective,
327
+ descendants: true
328
+ },
329
+ {
330
+ propertyName: "labelContainers",
331
+ predicate: ["labelContainer"],
332
+ descendants: true
333
+ },
334
+ {
335
+ propertyName: "fakeDataPoints",
336
+ predicate: ["fakeDataPoints"],
337
+ descendants: true
338
+ },
339
+ {
340
+ propertyName: "fakeDataPointsSecondary",
341
+ predicate: ["fakeDataPointsSecondary"],
342
+ descendants: true
343
+ },
344
+ {
345
+ propertyName: "legendItems",
346
+ predicate: ["legendItem"],
347
+ descendants: true
348
+ }
349
+ ],
350
+ ngImport: i0,
351
+ template: "<div class=\"spider-chart-container\" tabindex=\"0\" [attr.aria-label]=\"ariaLabel\">\n <div\n class=\"spacing-container\"\n [ngClass]=\"{ 'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading }\"\n >\n <div\n class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\"\n >\n @if (!loading) {\n <canvas baseChart [data]=\"radarChartData\" [options]=\"radarChartOptions\" type=\"radar\" class=\"chart\"> </canvas>\n } @else {\n <canvas baseChart [data]=\"loadingChartData\" [options]=\"loadingChartOptions\" type=\"radar\" class=\"chart\">\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\" [style.visibility]=\"labelStylesCached ? 'visible' : 'hidden'\">\n @for (label of spiderChartData.labels; track label) {\n <div\n class=\"label-container\"\n #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]=\"labelStyles[label]?.left\"\n [style.bottom]=\"labelStyles[label]?.bottom\"\n >\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'\">\n {{ label | memoizeFunc: getFirstLine }}\n </div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label | memoizeFunc: getSecondLine : this }}\n </div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span\n class=\"fake-data-points\"\n #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\"\n >\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span\n class=\"fake-data-points-secondary\"\n #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\"\n >\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\n 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]=\"\n isDatasetVisible($index)\n ? (translationContext + 'DATASET_VISIBLE' | uiTranslate: { dataset: dataset.label } | async)\n : (translationContext + 'DATASET_HIDDEN' | uiTranslate: { dataset: dataset.label } | async)\n \"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem\n >\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",
352
+ 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"],
353
+ dependencies: [
354
+ {
355
+ kind: "directive",
356
+ type: NgClass,
357
+ selector: "[ngClass]",
358
+ inputs: ["class", "ngClass"]
359
+ },
360
+ {
361
+ kind: "directive",
362
+ type: BaseChartDirective,
363
+ selector: "canvas[baseChart]",
364
+ inputs: [
365
+ "type",
366
+ "legend",
367
+ "data",
368
+ "options",
369
+ "plugins",
370
+ "labels",
371
+ "datasets"
372
+ ],
373
+ outputs: ["chartClick", "chartHover"],
374
+ exportAs: ["base-chart"]
375
+ },
376
+ {
377
+ kind: "component",
378
+ type: SpinnerComponent,
379
+ selector: "ui-spinner",
380
+ inputs: [
381
+ "size",
382
+ "isLoader",
383
+ "text",
384
+ "applicationTheme",
385
+ "iconName",
386
+ "iconSize"
387
+ ]
388
+ },
389
+ {
390
+ kind: "directive",
391
+ type: MatTooltip,
392
+ selector: "[matTooltip]",
393
+ inputs: [
394
+ "matTooltipPosition",
395
+ "matTooltipPositionAtOrigin",
396
+ "matTooltipDisabled",
397
+ "matTooltipShowDelay",
398
+ "matTooltipHideDelay",
399
+ "matTooltipTouchGestures",
400
+ "matTooltip",
401
+ "matTooltipClass"
402
+ ],
403
+ exportAs: ["matTooltip"]
404
+ },
405
+ {
406
+ kind: "pipe",
407
+ type: UiTranslatePipe,
408
+ name: "uiTranslate"
409
+ },
410
+ {
411
+ kind: "pipe",
412
+ type: MemoizeFuncPipe,
413
+ name: "memoizeFunc"
414
+ },
415
+ {
416
+ kind: "pipe",
417
+ type: AsyncPipe,
418
+ name: "async"
419
+ }
420
+ ],
421
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
422
+ });
423
+ }
424
+ };
425
+ i0.ɵɵngDeclareClassMetadata({
426
+ minVersion: "12.0.0",
427
+ version: "22.2.4",
428
+ ngImport: i0,
429
+ type: SpiderChartComponent,
430
+ decorators: [{
431
+ type: Component,
432
+ args: [{
433
+ selector: "ui-spider-chart",
434
+ changeDetection: ChangeDetectionStrategy.OnPush,
435
+ imports: [
436
+ NgClass,
437
+ BaseChartDirective,
438
+ SpinnerComponent,
439
+ MatTooltip,
440
+ UiTranslatePipe,
441
+ MemoizeFuncPipe,
442
+ AsyncPipe
443
+ ],
444
+ template: "<div class=\"spider-chart-container\" tabindex=\"0\" [attr.aria-label]=\"ariaLabel\">\n <div\n class=\"spacing-container\"\n [ngClass]=\"{ 'small-spacing': radarChartData.labels && radarChartData.labels.length % 2 === 1 && !loading }\"\n >\n <div\n class=\"chart-container\"\n [style.width]=\"size === 'large' ? '280px' : '200px'\"\n [style.height]=\"size === 'large' ? '280px' : '200px'\"\n >\n @if (!loading) {\n <canvas baseChart [data]=\"radarChartData\" [options]=\"radarChartOptions\" type=\"radar\" class=\"chart\"> </canvas>\n } @else {\n <canvas baseChart [data]=\"loadingChartData\" [options]=\"loadingChartOptions\" type=\"radar\" class=\"chart\">\n </canvas>\n <ui-spinner></ui-spinner>\n }\n\n @if (labelPositionsVisible) {\n <div class=\"overlay-container\" [style.visibility]=\"labelStylesCached ? 'visible' : 'hidden'\">\n @for (label of spiderChartData.labels; track label) {\n <div\n class=\"label-container\"\n #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]=\"labelStyles[label]?.left\"\n [style.bottom]=\"labelStyles[label]?.bottom\"\n >\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'\">\n {{ label | memoizeFunc: getFirstLine }}\n </div>\n <div class=\"label\" [style.max-width]=\"size === 'large' ? '135px' : '100px'\">\n {{ label | memoizeFunc: getSecondLine : this }}\n </div>\n </div>\n }\n <span class=\"value\">{{ spiderChartData.plotData[0].data[$index] }}</span>\n </div>\n <span\n class=\"fake-data-points\"\n #fakeDataPoints\n [tabindex]=\"focusedLabelIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedLabelIndex ? showTooltipForDataPoint($index) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index)\"\n >\n </span>\n @if (radarChartData.datasets.length > 1) {\n <span\n class=\"fake-data-points-secondary\"\n #fakeDataPointsSecondary\n [tabindex]=\"focusedFakeDataPointIndex === $index ? '0' : '-1'\"\n (focus)=\"$index === focusedFakeDataPointIndex ? showTooltipForDataPoint($index, true) : null\"\n (keydown)=\"onFakeDataPointsKeyDown($event, $index, true)\"\n >\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\n 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]=\"\n isDatasetVisible($index)\n ? (translationContext + 'DATASET_VISIBLE' | uiTranslate: { dataset: dataset.label } | async)\n : (translationContext + 'DATASET_HIDDEN' | uiTranslate: { dataset: dataset.label } | async)\n \"\n (keydown)=\"onLegendItemKeyDown($event, $index)\"\n #legendItem\n >\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",
445
+ 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"]
446
+ }]
447
+ }],
448
+ propDecorators: {
449
+ size: [{ type: Input }],
450
+ spiderChartData: [{ type: Input }],
451
+ stepSize: [{ type: Input }],
452
+ ariaLabel: [{ type: Input }],
453
+ loading: [{ type: Input }],
454
+ applicationTheme: [{ type: Input }],
455
+ chart: [{
456
+ type: ViewChild,
457
+ args: [BaseChartDirective]
458
+ }],
459
+ labelContainers: [{
460
+ type: ViewChildren,
461
+ args: ["labelContainer"]
462
+ }],
463
+ fakeDataPoints: [{
464
+ type: ViewChildren,
465
+ args: ["fakeDataPoints"]
466
+ }],
467
+ fakeDataPointsSecondary: [{
468
+ type: ViewChildren,
469
+ args: ["fakeDataPointsSecondary"]
470
+ }],
471
+ legendItems: [{
472
+ type: ViewChildren,
473
+ args: ["legendItem"]
474
+ }]
475
+ }
476
+ });
480
477
  Chart.register(...registerables);
481
- class SpiderChartComponentModule {
482
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SpiderChartComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
483
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: SpiderChartComponentModule, imports: [NgClass,
484
- UiTranslatePipe,
485
- BaseChartDirective,
486
- MatTooltipModule,
487
- MemoizeFuncPipe,
488
- SpinnerComponentModule,
489
- CommonModule,
490
- SpiderChartComponent], exports: [SpiderChartComponent] }); }
491
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SpiderChartComponentModule, imports: [MatTooltipModule,
492
- SpinnerComponentModule,
493
- CommonModule,
494
- SpiderChartComponent] }); }
495
- }
496
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SpiderChartComponentModule, decorators: [{
497
- type: NgModule,
498
- args: [{
499
- exports: [SpiderChartComponent],
500
- imports: [
501
- NgClass,
502
- UiTranslatePipe,
503
- BaseChartDirective,
504
- MatTooltipModule,
505
- MemoizeFuncPipe,
506
- SpinnerComponentModule,
507
- CommonModule,
508
- SpiderChartComponent,
509
- ],
510
- }]
511
- }] });
512
-
513
- /**
514
- * Generated bundle index. Do not edit.
515
- */
516
-
478
+ var SpiderChartComponentModule = class SpiderChartComponentModule {
479
+ static {
480
+ this.ɵfac = i0.ɵɵngDeclareFactory({
481
+ minVersion: "12.0.0",
482
+ version: "22.2.4",
483
+ ngImport: i0,
484
+ type: SpiderChartComponentModule,
485
+ deps: [],
486
+ target: i0.ɵɵFactoryTarget.NgModule
487
+ });
488
+ }
489
+ static {
490
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
491
+ minVersion: "14.0.0",
492
+ version: "22.2.4",
493
+ ngImport: i0,
494
+ type: SpiderChartComponentModule,
495
+ imports: [
496
+ NgClass,
497
+ UiTranslatePipe,
498
+ BaseChartDirective,
499
+ MatTooltipModule,
500
+ MemoizeFuncPipe,
501
+ SpinnerComponentModule,
502
+ CommonModule,
503
+ SpiderChartComponent
504
+ ],
505
+ exports: [SpiderChartComponent]
506
+ });
507
+ }
508
+ static {
509
+ this.ɵinj = i0.ɵɵngDeclareInjector({
510
+ minVersion: "12.0.0",
511
+ version: "22.2.4",
512
+ ngImport: i0,
513
+ type: SpiderChartComponentModule,
514
+ imports: [
515
+ MatTooltipModule,
516
+ SpinnerComponentModule,
517
+ CommonModule,
518
+ SpiderChartComponent
519
+ ]
520
+ });
521
+ }
522
+ };
523
+ i0.ɵɵngDeclareClassMetadata({
524
+ minVersion: "12.0.0",
525
+ version: "22.2.4",
526
+ ngImport: i0,
527
+ type: SpiderChartComponentModule,
528
+ decorators: [{
529
+ type: NgModule,
530
+ args: [{
531
+ exports: [SpiderChartComponent],
532
+ imports: [
533
+ NgClass,
534
+ UiTranslatePipe,
535
+ BaseChartDirective,
536
+ MatTooltipModule,
537
+ MemoizeFuncPipe,
538
+ SpinnerComponentModule,
539
+ CommonModule,
540
+ SpiderChartComponent
541
+ ]
542
+ }]
543
+ }]
544
+ });
517
545
  export { LargeSpiderChartSize, SmallSpiderChartSize, SpiderChartComponent, SpiderChartComponentModule };
518
- //# sourceMappingURL=testgorilla-tgo-ui-components-spider-chart.mjs.map
546
+
547
+ //# sourceMappingURL=testgorilla-tgo-ui-components-spider-chart.mjs.map