@testgorilla/tgo-ui 4.2.4 → 5.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 (425) hide show
  1. package/components/accordion/accordion.component.d.ts +2 -2
  2. package/components/accordion/accordion.component.module.d.ts +2 -2
  3. package/components/accordion/index.d.ts +5 -0
  4. package/components/accordion/public-api.d.ts +4 -0
  5. package/components/ai-feedback/ai-feedback.module.d.ts +2 -2
  6. package/components/ai-feedback/index.d.ts +5 -0
  7. package/components/ai-feedback/public-api.d.ts +4 -0
  8. package/components/alert-banner/alert-banner.component.d.ts +3 -3
  9. package/components/alert-banner/alert-banner.component.module.d.ts +3 -3
  10. package/components/alert-banner/index.d.ts +5 -0
  11. package/components/alert-banner/public-api.d.ts +4 -0
  12. package/components/autocomplete/autocomplete.component.d.ts +2 -2
  13. package/components/autocomplete/autocomplete.component.module.d.ts +9 -10
  14. package/components/autocomplete/index.d.ts +5 -0
  15. package/components/autocomplete/public-api.d.ts +4 -0
  16. package/components/avatar/avatar.component.d.ts +2 -2
  17. package/components/avatar/avatar.component.module.d.ts +4 -4
  18. package/components/avatar/avatar.model.d.ts +1 -1
  19. package/components/avatar/index.d.ts +5 -0
  20. package/components/avatar/public-api.d.ts +4 -0
  21. package/components/badge/badge.component.d.ts +2 -2
  22. package/components/badge/badge.component.module.d.ts +1 -1
  23. package/components/badge/index.d.ts +5 -0
  24. package/components/badge/public-api.d.ts +4 -0
  25. package/components/breadcrumb/breadcrumb.component.d.ts +2 -2
  26. package/components/breadcrumb/breadcrumb.component.module.d.ts +8 -9
  27. package/components/breadcrumb/index.d.ts +5 -0
  28. package/components/breadcrumb/public-api.d.ts +4 -0
  29. package/components/button/button.component.d.ts +2 -2
  30. package/components/button/button.component.module.d.ts +4 -5
  31. package/components/button/button.model.d.ts +1 -1
  32. package/components/button/index.d.ts +5 -0
  33. package/components/button/public-api.d.ts +5 -0
  34. package/components/card/card.component.d.ts +2 -2
  35. package/components/card/card.component.module.d.ts +1 -1
  36. package/components/card/index.d.ts +5 -0
  37. package/components/card/public-api.d.ts +4 -0
  38. package/components/checkbox/checkbox.component.d.ts +2 -2
  39. package/components/checkbox/checkbox.component.module.d.ts +6 -8
  40. package/components/checkbox/index.d.ts +5 -0
  41. package/components/checkbox/public-api.d.ts +4 -0
  42. package/components/checklist/checklist.component.d.ts +1 -2
  43. package/components/checklist/index.d.ts +5 -0
  44. package/components/checklist/public-api.d.ts +3 -0
  45. package/{utils → components/core}/alert-bars.utils.d.ts +1 -2
  46. package/components/core/application-theme.model.d.ts +7 -0
  47. package/components/core/color-contrast.d.ts +28 -0
  48. package/components/core/index.d.ts +5 -0
  49. package/components/core/link-target.model.d.ts +1 -0
  50. package/components/core/public-api.d.ts +25 -0
  51. package/components/core/select-text.directive.d.ts +19 -0
  52. package/{pipes → components/core}/truncate.pipe.d.ts +1 -1
  53. package/{pipes → components/core}/ui-translate.pipe.d.ts +1 -1
  54. package/components/datepicker/datepicker.component.d.ts +1 -1
  55. package/components/datepicker/datepicker.component.module.d.ts +4 -5
  56. package/components/datepicker/index.d.ts +5 -0
  57. package/components/datepicker/public-api.d.ts +6 -0
  58. package/components/{confirm-dialog → dialog/confirm-dialog}/confirm-dialog.component.d.ts +4 -4
  59. package/components/{confirm-dialog → dialog/confirm-dialog}/confirm-dialog.component.module.d.ts +3 -3
  60. package/components/{confirm-dialog → dialog/confirm-dialog}/confirm-dialog.model.d.ts +3 -3
  61. package/components/dialog/dialog-custom/dialog-custom.component.d.ts +22 -0
  62. package/components/dialog/dialog-custom/dialog-custom.component.module.d.ts +10 -0
  63. package/components/dialog/dialog.component.d.ts +4 -4
  64. package/components/dialog/dialog.component.module.d.ts +2 -2
  65. package/components/dialog/dialog.model.d.ts +1 -1
  66. package/components/dialog/dialog.service.d.ts +1 -1
  67. package/components/dialog/index.d.ts +5 -0
  68. package/components/dialog/public-api.d.ts +10 -0
  69. package/components/divider/divider.component.d.ts +1 -1
  70. package/components/divider/index.d.ts +5 -0
  71. package/components/divider/public-api.d.ts +4 -0
  72. package/components/donut-chart/donut-chart.component.d.ts +1 -1
  73. package/components/donut-chart/index.d.ts +5 -0
  74. package/components/donut-chart/public-api.d.ts +3 -0
  75. package/components/dropdown/dropdown.component.d.ts +2 -2
  76. package/components/dropdown/dropdown.component.module.d.ts +5 -6
  77. package/components/dropdown/index.d.ts +5 -0
  78. package/components/dropdown/public-api.d.ts +4 -0
  79. package/components/elevation-shadow/elevation-shadow.component.d.ts +1 -1
  80. package/components/elevation-shadow/index.d.ts +5 -0
  81. package/components/elevation-shadow/public-api.d.ts +3 -0
  82. package/components/empty-state/empty-state.component.d.ts +4 -4
  83. package/components/empty-state/empty-state.component.module.d.ts +3 -3
  84. package/components/empty-state/index.d.ts +5 -0
  85. package/components/empty-state/public-api.d.ts +4 -0
  86. package/components/field/field.component.d.ts +4 -4
  87. package/components/field/field.component.module.d.ts +6 -8
  88. package/components/field/index.d.ts +5 -0
  89. package/components/field/public-api.d.ts +4 -0
  90. package/components/file-upload/file-upload.component.d.ts +1 -2
  91. package/components/file-upload/file-upload.component.module.d.ts +4 -4
  92. package/components/file-upload/index.d.ts +5 -0
  93. package/components/file-upload/public-api.d.ts +3 -0
  94. package/components/filter-button/filter-button.component.d.ts +3 -3
  95. package/components/filter-button/filter-button.component.module.d.ts +7 -8
  96. package/components/filter-button/filter-button.model.d.ts +1 -1
  97. package/components/filter-button/index.d.ts +5 -0
  98. package/components/filter-button/public-api.d.ts +4 -0
  99. package/components/gaussian-chart/gaussian-chart.component.d.ts +1 -1
  100. package/components/gaussian-chart/gaussian-chart.module.d.ts +3 -4
  101. package/components/gaussian-chart/index.d.ts +5 -0
  102. package/components/gaussian-chart/public-api.d.ts +2 -0
  103. package/components/icon/icon.component.d.ts +2 -2
  104. package/components/icon/index.d.ts +5 -0
  105. package/components/icon/public-api.d.ts +6 -0
  106. package/components/icon-label/icon-label.component.d.ts +2 -2
  107. package/components/icon-label/icon-label.component.module.d.ts +1 -1
  108. package/components/icon-label/index.d.ts +5 -0
  109. package/components/icon-label/public-api.d.ts +2 -0
  110. package/components/inline-field/index.d.ts +5 -0
  111. package/components/inline-field/inline-field.component.d.ts +5 -5
  112. package/components/inline-field/inline-field.component.module.d.ts +3 -3
  113. package/components/inline-field/inline-field.model.d.ts +1 -1
  114. package/components/inline-field/public-api.d.ts +4 -0
  115. package/components/logo/index.d.ts +5 -0
  116. package/components/logo/logo.component.d.ts +1 -1
  117. package/components/logo/public-api.d.ts +4 -0
  118. package/components/media-card/index.d.ts +5 -0
  119. package/components/media-card/public-api.d.ts +1 -0
  120. package/components/media-dialog/index.d.ts +5 -0
  121. package/components/media-dialog/public-api.d.ts +2 -0
  122. package/components/multi-input/index.d.ts +5 -0
  123. package/components/multi-input/multi-input.component.module.d.ts +7 -8
  124. package/components/multi-input/public-api.d.ts +5 -0
  125. package/components/navbar/index.d.ts +5 -0
  126. package/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.d.ts +2 -2
  127. package/components/navbar/navbar.component.d.ts +4 -4
  128. package/components/navbar/navbar.component.module.d.ts +7 -7
  129. package/components/navbar/navbar.model.d.ts +2 -2
  130. package/components/navbar/public-api.d.ts +5 -0
  131. package/components/overflow-menu/index.d.ts +5 -0
  132. package/components/overflow-menu/overflow-menu.component.d.ts +3 -3
  133. package/components/overflow-menu/overflow-menu.component.module.d.ts +4 -5
  134. package/components/overflow-menu/overflow-menu.model.d.ts +1 -1
  135. package/components/overflow-menu/public-api.d.ts +4 -0
  136. package/components/page-header/index.d.ts +5 -0
  137. package/components/page-header/page-header.component.d.ts +1 -1
  138. package/components/page-header/page-header.component.module.d.ts +2 -2
  139. package/components/page-header/public-api.d.ts +3 -0
  140. package/components/paginator/index.d.ts +5 -0
  141. package/components/paginator/paginator.component.d.ts +1 -1
  142. package/components/paginator/public-api.d.ts +3 -0
  143. package/components/password-criteria/index.d.ts +5 -0
  144. package/components/password-criteria/password.component.module.d.ts +4 -4
  145. package/components/password-criteria/public-api.d.ts +3 -0
  146. package/components/password-strength/index.d.ts +5 -0
  147. package/components/password-strength/password-strength.component.d.ts +2 -2
  148. package/components/password-strength/password-strength.component.module.d.ts +3 -3
  149. package/components/password-strength/public-api.d.ts +3 -0
  150. package/components/phone-input/index.d.ts +5 -0
  151. package/components/phone-input/phone-input.component.d.ts +1 -1
  152. package/components/phone-input/phone-input.component.module.d.ts +5 -6
  153. package/components/phone-input/public-api.d.ts +5 -0
  154. package/components/progress-bar/index.d.ts +5 -0
  155. package/components/progress-bar/progress-bar.component.d.ts +1 -1
  156. package/components/progress-bar/progress-bar.component.module.d.ts +1 -1
  157. package/components/progress-bar/public-api.d.ts +3 -0
  158. package/components/prompt/index.d.ts +5 -0
  159. package/components/prompt/prompt.component.d.ts +2 -2
  160. package/components/prompt/prompt.module.d.ts +8 -8
  161. package/components/prompt/public-api.d.ts +4 -0
  162. package/components/radial-progress/index.d.ts +5 -0
  163. package/components/radial-progress/public-api.d.ts +4 -0
  164. package/components/radial-progress/radial-progress.component.d.ts +2 -2
  165. package/components/radial-progress/radial-progress.component.module.d.ts +1 -1
  166. package/components/radio-button/index.d.ts +5 -0
  167. package/components/radio-button/public-api.d.ts +4 -0
  168. package/components/radio-button/radio-button.component.d.ts +2 -2
  169. package/components/radio-button/radio-button.component.module.d.ts +2 -2
  170. package/components/rating/index.d.ts +5 -0
  171. package/components/rating/public-api.d.ts +3 -0
  172. package/components/rating/rating.component.d.ts +1 -1
  173. package/components/scale/index.d.ts +5 -0
  174. package/components/scale/public-api.d.ts +3 -0
  175. package/components/scale/scale.component.d.ts +1 -1
  176. package/components/scale-table/index.d.ts +5 -0
  177. package/components/scale-table/public-api.d.ts +3 -0
  178. package/components/scale-table/scale-table.component.d.ts +1 -1
  179. package/components/segmented-bar/index.d.ts +5 -0
  180. package/components/segmented-bar/public-api.d.ts +4 -0
  181. package/components/segmented-bar/segmented-bar.component.d.ts +1 -1
  182. package/components/segmented-bar/segmented-bar.component.module.d.ts +2 -2
  183. package/components/segmented-bar/segmented-bar.model.d.ts +1 -1
  184. package/components/segmented-button/index.d.ts +5 -0
  185. package/components/segmented-button/public-api.d.ts +4 -0
  186. package/components/segmented-button/segmented-button.component.d.ts +1 -1
  187. package/components/selectable-card/index.d.ts +5 -0
  188. package/components/selectable-card/public-api.d.ts +2 -0
  189. package/components/selectable-card/selectable-card.component.d.ts +1 -1
  190. package/components/selectable-card/selectable-card.component.module.d.ts +2 -2
  191. package/components/side-panel/index.d.ts +5 -0
  192. package/components/side-panel/public-api.d.ts +5 -0
  193. package/components/side-panel/side-panel.component.d.ts +1 -1
  194. package/components/side-sheet/index.d.ts +5 -0
  195. package/components/side-sheet/public-api.d.ts +4 -0
  196. package/components/side-sheet/side-sheet.component.d.ts +1 -1
  197. package/components/side-sheet/side-sheet.component.module.d.ts +4 -4
  198. package/components/skeleton/index.d.ts +5 -0
  199. package/components/skeleton/public-api.d.ts +3 -0
  200. package/components/skeleton/skeleton.component.d.ts +2 -2
  201. package/components/slider/index.d.ts +5 -0
  202. package/components/slider/public-api.d.ts +4 -0
  203. package/components/slider/slider.component.d.ts +1 -1
  204. package/components/snackbar/index.d.ts +5 -0
  205. package/components/snackbar/public-api.d.ts +5 -0
  206. package/components/snackbar/snackbar.component.d.ts +4 -4
  207. package/components/snackbar/snackbar.component.module.d.ts +3 -3
  208. package/components/snackbar/snackbar.service.d.ts +1 -1
  209. package/components/spider-chart/index.d.ts +5 -0
  210. package/components/spider-chart/public-api.d.ts +3 -0
  211. package/components/spider-chart/spider-chart.component.d.ts +1 -1
  212. package/components/spider-chart/spider-chart.module.d.ts +3 -4
  213. package/components/spinner/index.d.ts +5 -0
  214. package/components/spinner/public-api.d.ts +4 -0
  215. package/components/spinner/spinner.component.d.ts +2 -2
  216. package/components/spinner/spinner.module.d.ts +2 -2
  217. package/components/stepper/index.d.ts +5 -0
  218. package/components/stepper/public-api.d.ts +7 -0
  219. package/{directives → components/stepper}/step-line-element.directive.d.ts +1 -1
  220. package/components/{step → stepper}/step.component.d.ts +4 -4
  221. package/components/{step → stepper}/step.component.module.d.ts +2 -2
  222. package/components/stepper/stepper.component.d.ts +1 -1
  223. package/components/stepper/stepper.component.module.d.ts +5 -5
  224. package/components/stepper/stepper.model.d.ts +1 -1
  225. package/components/table/index.d.ts +5 -0
  226. package/components/table/public-api.d.ts +6 -0
  227. package/components/table/table.component.d.ts +1 -1
  228. package/components/table/table.component.module.d.ts +6 -9
  229. package/{utils → components/table}/table.utils.d.ts +1 -1
  230. package/components/tabs/index.d.ts +5 -0
  231. package/components/tabs/public-api.d.ts +5 -0
  232. package/components/tabs/tab.directive.d.ts +1 -1
  233. package/components/tabs/tabs.component.d.ts +1 -1
  234. package/components/tabs/tabs.component.module.d.ts +3 -3
  235. package/components/tabs/tabs.model.d.ts +1 -1
  236. package/components/tag/index.d.ts +5 -0
  237. package/components/tag/public-api.d.ts +4 -0
  238. package/components/tag/tag.component.d.ts +2 -2
  239. package/components/tag/tag.component.module.d.ts +3 -3
  240. package/components/toggle/index.d.ts +5 -0
  241. package/components/toggle/public-api.d.ts +3 -0
  242. package/components/toggle/toggle.component.d.ts +1 -1
  243. package/components/toggle/toggle.component.module.d.ts +4 -5
  244. package/components/tooltip/index.d.ts +5 -0
  245. package/components/tooltip/public-api.d.ts +5 -0
  246. package/components/tooltip/tooltip.component.d.ts +1 -1
  247. package/components/tooltip/tooltip.component.module.d.ts +2 -3
  248. package/components/universal-skills/index.d.ts +5 -0
  249. package/components/universal-skills/public-api.d.ts +6 -0
  250. package/components/{universal-skills-spider-charts → universal-skills/spider-charts}/universal-skills-spider-charts.component.d.ts +4 -4
  251. package/components/{universal-skills-spider-charts → universal-skills/spider-charts}/universal-skills-spider-charts.component.module.d.ts +7 -9
  252. package/components/{universal-skills-report → universal-skills}/universal-skills-report.component.d.ts +4 -4
  253. package/components/{universal-skills-report → universal-skills}/universal-skills-report.component.module.d.ts +5 -7
  254. package/{models → components/universal-skills}/universal-skills-report.model.d.ts +1 -1
  255. package/{services → components/universal-skills}/universal-skills.service.d.ts +1 -1
  256. package/components/validation-error/index.d.ts +5 -0
  257. package/components/validation-error/public-api.d.ts +3 -0
  258. package/components/validation-error/validation-error.component.d.ts +1 -1
  259. package/components/validation-error/validation-error.module.d.ts +2 -2
  260. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +179 -0
  261. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -0
  262. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +59 -0
  263. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -0
  264. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +222 -0
  265. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -0
  266. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1045 -0
  267. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -0
  268. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +173 -0
  269. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -0
  270. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +180 -0
  271. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -0
  272. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +250 -0
  273. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -0
  274. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +635 -0
  275. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -0
  276. package/fesm2022/testgorilla-tgo-ui-components-card.mjs +164 -0
  277. package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -0
  278. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +402 -0
  279. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -0
  280. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +162 -0
  281. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -0
  282. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +11243 -0
  283. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -0
  284. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +512 -0
  285. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -0
  286. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +481 -0
  287. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -0
  288. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +88 -0
  289. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -0
  290. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +146 -0
  291. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -0
  292. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +434 -0
  293. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -0
  294. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +75 -0
  295. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -0
  296. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +326 -0
  297. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -0
  298. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +639 -0
  299. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -0
  300. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +402 -0
  301. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -0
  302. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +314 -0
  303. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -0
  304. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +297 -0
  305. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -0
  306. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +98 -0
  307. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -0
  308. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +1496 -0
  309. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -0
  310. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +367 -0
  311. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -0
  312. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +218 -0
  313. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -0
  314. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +54 -0
  315. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -0
  316. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +82 -0
  317. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -0
  318. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +343 -0
  319. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -0
  320. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +358 -0
  321. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -0
  322. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +279 -0
  323. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -0
  324. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +94 -0
  325. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -0
  326. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +110 -0
  327. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -0
  328. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +153 -0
  329. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -0
  330. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +118 -0
  331. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -0
  332. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +428 -0
  333. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -0
  334. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +128 -0
  335. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -0
  336. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +252 -0
  337. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -0
  338. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +152 -0
  339. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -0
  340. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +373 -0
  341. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -0
  342. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +150 -0
  343. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -0
  344. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +68 -0
  345. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -0
  346. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +158 -0
  347. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -0
  348. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +137 -0
  349. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -0
  350. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +128 -0
  351. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -0
  352. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +81 -0
  353. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -0
  354. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +231 -0
  355. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -0
  356. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +180 -0
  357. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -0
  358. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +81 -0
  359. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -0
  360. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +274 -0
  361. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -0
  362. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +299 -0
  363. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -0
  364. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +490 -0
  365. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -0
  366. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +108 -0
  367. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -0
  368. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +507 -0
  369. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -0
  370. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +394 -0
  371. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -0
  372. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +304 -0
  373. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -0
  374. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +239 -0
  375. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -0
  376. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +216 -0
  377. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -0
  378. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +272 -0
  379. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -0
  380. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +381 -0
  381. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -0
  382. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +79 -0
  383. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -0
  384. package/fesm2022/testgorilla-tgo-ui.mjs +118 -27024
  385. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  386. package/package.json +249 -1
  387. package/public-api.d.ts +75 -183
  388. package/components/ai-caveat/ai-caveat.component.d.ts +0 -36
  389. package/components/ai-caveat/ai-caveat.component.module.d.ts +0 -10
  390. package/models/application-theme.model.d.ts +0 -1
  391. package/projects/tgo-canopy-ui/assets/i18n/da-dk.json +0 -820
  392. package/projects/tgo-canopy-ui/assets/i18n/de.json +0 -820
  393. package/projects/tgo-canopy-ui/assets/i18n/en.json +0 -830
  394. package/projects/tgo-canopy-ui/assets/i18n/es.json +0 -820
  395. package/projects/tgo-canopy-ui/assets/i18n/fr.json +0 -820
  396. package/projects/tgo-canopy-ui/assets/i18n/it-it.json +0 -820
  397. package/projects/tgo-canopy-ui/assets/i18n/ja-jp.json +0 -820
  398. package/projects/tgo-canopy-ui/assets/i18n/nb-no.json +0 -820
  399. package/projects/tgo-canopy-ui/assets/i18n/nl.json +0 -820
  400. package/projects/tgo-canopy-ui/assets/i18n/pl-pl.json +0 -820
  401. package/projects/tgo-canopy-ui/assets/i18n/pt-br.json +0 -820
  402. package/projects/tgo-canopy-ui/assets/i18n/sv-se.json +0 -820
  403. /package/{directives → components/autocomplete}/select-text.directive.d.ts +0 -0
  404. /package/{pipes → components/avatar}/name-initials.pipe.d.ts +0 -0
  405. /package/{utils → components/button}/color-contrast.d.ts +0 -0
  406. /package/{utils → components/core}/alert-bar.model.d.ts +0 -0
  407. /package/{utils → components/core}/autocomplete-utils.d.ts +0 -0
  408. /package/{models → components/core}/checkbox.model.d.ts +0 -0
  409. /package/{models → components/core}/colors.model.d.ts +0 -0
  410. /package/{pipes/data-property-getter.d.ts → components/core/data-property-getter.pipe.d.ts} +0 -0
  411. /package/{directives → components/core}/digits-only.directive.d.ts +0 -0
  412. /package/{directives → components/core}/dynamic-component.directive.d.ts +0 -0
  413. /package/{directives → components/core}/ellipse-text.directive.d.ts +0 -0
  414. /package/{pipes → components/core}/has-validation-error.pipe.d.ts +0 -0
  415. /package/{utils → components/core}/hex-to-rgb.d.ts +0 -0
  416. /package/{providers → components/core}/is-large-tablet.d.ts +0 -0
  417. /package/{providers → components/core}/is-mobile.d.ts +0 -0
  418. /package/{models → components/core}/keyboard-events.model.d.ts +0 -0
  419. /package/{utils/localization → components/core}/language.model.d.ts +0 -0
  420. /package/{utils/localization → components/core}/language.service.d.ts +0 -0
  421. /package/{pipes → components/core}/memoize-func.pipe.d.ts +0 -0
  422. /package/{models → components/core}/screen-breakpoints.model.d.ts +0 -0
  423. /package/{pipes → components/core}/ui-ordinal-suffix.pipe.d.ts +0 -0
  424. /package/{directives → components/file-upload}/drag-drop.directive.d.ts +0 -0
  425. /package/{services → components/icon}/icons.service.d.ts +0 -0
@@ -0,0 +1,490 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ViewChildren, ViewChild, Input, Component, NgModule } from '@angular/core';
3
+ import * as i5 from '@testgorilla/tgo-ui/components/core';
4
+ import { Color, UiTranslatePipe, MemoizeFuncPipe } from '@testgorilla/tgo-ui/components/core';
5
+ import * as i2 from 'ng2-charts';
6
+ import { BaseChartDirective, NgChartsModule } from 'ng2-charts';
7
+ import * as i1 from '@angular/common';
8
+ import { NgClass, CommonModule } from '@angular/common';
9
+ import * as i3 from '@angular/material/tooltip';
10
+ import { MatTooltipModule } from '@angular/material/tooltip';
11
+ import * as i4 from '@testgorilla/tgo-ui/components/spinner';
12
+ import { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';
13
+ import { Chart, registerables } from 'chart.js';
14
+
15
+ // These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.
16
+ const SmallSpiderChartSize = 200;
17
+ const LargeSpiderChartSize = 280;
18
+
19
+ class SpiderChartComponent {
20
+ constructor() {
21
+ /**
22
+ * The size of the spider chart.
23
+ * @type {SpiderChartSize}
24
+ * @memberof SpiderChartComponent
25
+ */
26
+ this.size = 'large';
27
+ /**
28
+ * The step size for the spider chart.
29
+ * @type {number}
30
+ * @memberof SpiderChartComponent
31
+ */
32
+ this.stepSize = 20;
33
+ /**
34
+ * The aria label for the spider chart.
35
+ * @type {string}
36
+ * @memberof SpiderChartComponent
37
+ */
38
+ this.ariaLabel = 'Radar chart. Press tab to navigate through the chart.';
39
+ /**
40
+ * Whether the spider chart is loading.
41
+ * @type {boolean}
42
+ * @memberof SpiderChartComponent
43
+ */
44
+ this.loading = false;
45
+ /**
46
+ *
47
+ * Defines the application theme
48
+ *
49
+ * @type {ApplicationTheme}
50
+ * @memberof SpinnerComponent
51
+ */
52
+ this.applicationTheme = 'light';
53
+ this.radarChartData = {
54
+ labels: [],
55
+ datasets: [],
56
+ };
57
+ this.labelPositions = {};
58
+ this.labelPositionsVisible = false;
59
+ this.focusedLabelIndex = 0;
60
+ this.focusedFakeDataPointIndex = 0;
61
+ this.loadingChartData = {
62
+ labels: [1, 2, 3, 4, 5, 6],
63
+ datasets: [],
64
+ };
65
+ this.loadingChartOptions = {
66
+ responsive: true,
67
+ layout: {
68
+ padding: {
69
+ left: 40,
70
+ right: 40,
71
+ top: 40,
72
+ bottom: 40,
73
+ },
74
+ },
75
+ scales: {
76
+ r: {
77
+ angleLines: {
78
+ display: true,
79
+ color: Color.GRAYSCALE_30,
80
+ },
81
+ grid: {
82
+ color: () => Color.GRAYSCALE_30,
83
+ },
84
+ pointLabels: {
85
+ display: false,
86
+ },
87
+ suggestedMin: 0,
88
+ suggestedMax: 100,
89
+ ticks: {
90
+ stepSize: this.stepSize,
91
+ display: false,
92
+ },
93
+ },
94
+ },
95
+ };
96
+ this.translationContext = 'CHARTS.SPIDER.';
97
+ }
98
+ ngOnInit() {
99
+ if (!this.loading) {
100
+ this.handleInputErrors();
101
+ this.setChartData();
102
+ this.setChartOptions();
103
+ }
104
+ }
105
+ handleInputErrors() {
106
+ if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {
107
+ throw new Error('The "labels" input is required and cannot be empty.');
108
+ }
109
+ if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {
110
+ throw new Error('The "labelDescription" input is required and cannot be empty.');
111
+ }
112
+ if (this.spiderChartData.labelDescription &&
113
+ this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length) {
114
+ throw new Error('The "labelDescription" input must have the same length as "labels".');
115
+ }
116
+ if (!this.spiderChartData.plotData[0].databaseLabel) {
117
+ throw new Error('The "plotData.databaseLabel" input is required.');
118
+ }
119
+ if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {
120
+ throw new Error('The "plotData.data" input is required and cannot be empty.');
121
+ }
122
+ if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {
123
+ throw new Error('The "plotData.data" input must have the same length as "labels".');
124
+ }
125
+ if (this.spiderChartData.plotData.length === 2 &&
126
+ this.spiderChartData.labels.length > 0 &&
127
+ this.spiderChartData.plotData[1].data &&
128
+ this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length) {
129
+ throw new Error('The "plotData.data" input must have the same length as "labels".');
130
+ }
131
+ }
132
+ setChartData() {
133
+ const datasets = [];
134
+ datasets.push({
135
+ label: this.spiderChartData.plotData[0].databaseLabel,
136
+ data: this.spiderChartData.plotData[0].data,
137
+ fill: true,
138
+ backgroundColor: 'rgba(212, 16, 170, 0.2)',
139
+ borderColor: Color.BRAND_50,
140
+ pointBackgroundColor: Color.BRAND_50,
141
+ pointBorderColor: Color.TGO_WHITE,
142
+ pointHoverBackgroundColor: Color.TGO_WHITE,
143
+ pointHoverBorderColor: Color.BRAND_50,
144
+ });
145
+ if (this.spiderChartData.plotData.length === 2) {
146
+ datasets.push({
147
+ label: this.spiderChartData.plotData[1].databaseLabel,
148
+ data: this.spiderChartData.plotData[1].data,
149
+ fill: false,
150
+ borderColor: Color.BLACK,
151
+ borderDash: [5, 5],
152
+ borderWidth: 1,
153
+ pointBackgroundColor: Color.BLACK,
154
+ pointBorderColor: Color.TGO_WHITE,
155
+ pointHoverBackgroundColor: Color.TGO_WHITE,
156
+ pointHoverBorderColor: Color.BLACK,
157
+ });
158
+ }
159
+ this.radarChartData = {
160
+ labels: this.spiderChartData.labels,
161
+ datasets: datasets,
162
+ };
163
+ }
164
+ setChartOptions() {
165
+ this.radarChartOptions = {
166
+ responsive: true,
167
+ elements: {
168
+ line: {
169
+ borderWidth: 3,
170
+ },
171
+ },
172
+ layout: {
173
+ padding: {
174
+ left: 40,
175
+ right: 40,
176
+ top: 40,
177
+ bottom: 40,
178
+ },
179
+ },
180
+ scales: {
181
+ r: {
182
+ angleLines: {
183
+ display: true,
184
+ color: Color.BLACK,
185
+ },
186
+ grid: {
187
+ color: context => {
188
+ if (context.tick.value === 100) {
189
+ return Color.BLACK;
190
+ }
191
+ return Color.GRAYSCALE_30;
192
+ },
193
+ },
194
+ pointLabels: {
195
+ color: 'black',
196
+ font: {
197
+ family: 'Arial',
198
+ size: 14,
199
+ },
200
+ display: false,
201
+ },
202
+ suggestedMin: 0,
203
+ suggestedMax: 100,
204
+ ticks: {
205
+ stepSize: this.stepSize,
206
+ display: false,
207
+ },
208
+ },
209
+ },
210
+ plugins: {
211
+ legend: {
212
+ display: false,
213
+ },
214
+ },
215
+ };
216
+ }
217
+ ngAfterViewInit() {
218
+ if (this.chart?.chart && !this.loading) {
219
+ this.logCornerCoordinates(this.chart.chart);
220
+ }
221
+ }
222
+ logCornerCoordinates(chart) {
223
+ const scale = chart.scales['r'];
224
+ const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
225
+ const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
226
+ // Loop through the labels and calculate the percentage coordinates
227
+ this.spiderChartData.labels.forEach((label, index) => {
228
+ const position = scale.getPointPositionForValue(index, scale.max);
229
+ // Calculate percentage values relative to the canvas size
230
+ const xPercent = (position.x / canvasWidth) * 100;
231
+ const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis
232
+ this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };
233
+ });
234
+ this.labelPositionsVisible = true;
235
+ }
236
+ getCenteredLabelBottomPosition(label, height) {
237
+ const position = this.labelPositions[label];
238
+ const padding = 7;
239
+ if (position.x > 50 || position.x < 50) {
240
+ return `calc(${position.y}% - ${height / 2}px)`;
241
+ }
242
+ else if (position.y < 50) {
243
+ return `calc(${position.y}% - ${height}px - ${padding}px)`;
244
+ }
245
+ else {
246
+ return `calc(${position.y}% + ${padding}px)`;
247
+ }
248
+ }
249
+ getCenteredLabelLeftPosition(label, width) {
250
+ const position = this.labelPositions[label];
251
+ const padding = 15;
252
+ if (position.x === 50) {
253
+ return `calc(${position.x}% - ${width / 2}px)`;
254
+ }
255
+ else if (position.x < 50) {
256
+ return `calc(${position.x}% - ${width}px - ${padding}px)`;
257
+ }
258
+ else {
259
+ return `calc(${position.x}% + ${padding}px)`;
260
+ }
261
+ }
262
+ onLabelKeyDown(event, index) {
263
+ if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
264
+ this.focusNextLabel(index);
265
+ }
266
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
267
+ this.focusPreviousLabel(index);
268
+ }
269
+ }
270
+ focusNextLabel(index) {
271
+ const nextIndex = index + 1;
272
+ if (nextIndex < this.labelContainers.length) {
273
+ this.labelContainers.get(nextIndex)?.nativeElement.focus();
274
+ }
275
+ else {
276
+ this.labelContainers.first?.nativeElement.focus();
277
+ }
278
+ this.focusedLabelIndex = nextIndex;
279
+ }
280
+ focusPreviousLabel(index) {
281
+ const previousIndex = index - 1;
282
+ if (previousIndex >= 0) {
283
+ this.labelContainers.get(previousIndex)?.nativeElement.focus();
284
+ }
285
+ else {
286
+ this.labelContainers.last?.nativeElement.focus();
287
+ }
288
+ this.focusedLabelIndex = previousIndex;
289
+ }
290
+ onLegendItemKeyDown(event, index) {
291
+ if (event.key === 'Enter') {
292
+ this.toggleDatasetVisibility(index);
293
+ }
294
+ else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
295
+ this.focusNextLegendItem(index);
296
+ }
297
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
298
+ this.focusPreviousLegendItem(index);
299
+ }
300
+ }
301
+ focusNextLegendItem(index) {
302
+ const nextIndex = index + 1;
303
+ if (nextIndex < this.legendItems.length) {
304
+ this.legendItems.get(nextIndex)?.nativeElement.focus();
305
+ }
306
+ else {
307
+ this.legendItems.first?.nativeElement.focus();
308
+ }
309
+ }
310
+ focusPreviousLegendItem(index) {
311
+ const previousIndex = index - 1;
312
+ if (previousIndex >= 0) {
313
+ this.legendItems.get(previousIndex)?.nativeElement.focus();
314
+ }
315
+ else {
316
+ this.legendItems.last?.nativeElement.focus();
317
+ }
318
+ }
319
+ onFakeDataPointsKeyDown(event, index, isSecondary = false) {
320
+ if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
321
+ this.focusNextFakeDataPoint(index, isSecondary);
322
+ this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);
323
+ }
324
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
325
+ this.focusPreviousFakeDataPoint(index, isSecondary);
326
+ this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);
327
+ }
328
+ else if (event.key === 'Tab') {
329
+ this.resetActiveElement();
330
+ }
331
+ }
332
+ focusNextFakeDataPoint(index, isSecondary = false) {
333
+ const nextIndex = index + 1;
334
+ if (nextIndex < this.fakeDataPoints.length) {
335
+ const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
336
+ fakeDataPoints.get(nextIndex)?.nativeElement.focus();
337
+ }
338
+ else {
339
+ const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
340
+ fakeDataPoints.first?.nativeElement.focus();
341
+ }
342
+ if (!isSecondary) {
343
+ this.focusedFakeDataPointIndex = nextIndex;
344
+ }
345
+ }
346
+ focusPreviousFakeDataPoint(index, isSecondary = false) {
347
+ const previousIndex = index - 1;
348
+ if (previousIndex >= 0) {
349
+ const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
350
+ fakeDataPoints.get(previousIndex)?.nativeElement.focus();
351
+ }
352
+ else {
353
+ const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
354
+ fakeDataPoints.last?.nativeElement.focus();
355
+ }
356
+ if (!isSecondary) {
357
+ this.focusedFakeDataPointIndex = previousIndex;
358
+ }
359
+ }
360
+ showTooltipForDataPoint(index, isSecondary = false) {
361
+ const chartInstance = this.chart?.chart;
362
+ if (!chartInstance)
363
+ return;
364
+ const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];
365
+ const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);
366
+ const dataPoint = meta.data[index];
367
+ const eventPosition = {
368
+ x: dataPoint.x,
369
+ y: dataPoint.y,
370
+ };
371
+ if (!isSecondary) {
372
+ this.focusedFakeDataPointIndex = index;
373
+ }
374
+ chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);
375
+ chartInstance.update();
376
+ }
377
+ resetActiveElement() {
378
+ const chartInstance = this.chart?.chart;
379
+ if (!chartInstance)
380
+ return;
381
+ // Clear the active elements to hide the tooltip
382
+ chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });
383
+ chartInstance.update();
384
+ }
385
+ toggleDatasetVisibility(datasetIndex) {
386
+ const chartInstance = this.chart?.chart;
387
+ if (!chartInstance)
388
+ return;
389
+ const dataset = chartInstance.data.datasets[datasetIndex];
390
+ dataset.hidden = !dataset.hidden;
391
+ chartInstance.update();
392
+ }
393
+ isDatasetVisible(datasetIndex) {
394
+ const chartInstance = this.chart?.chart;
395
+ if (!chartInstance)
396
+ return;
397
+ return !chartInstance.data.datasets[datasetIndex].hidden;
398
+ }
399
+ getFirstLine(label) {
400
+ const words = label.split(' ');
401
+ let firstLine = '';
402
+ for (const word of words) {
403
+ if ((firstLine + word).length <= 20) {
404
+ firstLine += (firstLine ? ' ' : '') + word;
405
+ }
406
+ else {
407
+ break;
408
+ }
409
+ }
410
+ return firstLine;
411
+ }
412
+ getSecondLine(label) {
413
+ const firstLine = this.getFirstLine(label);
414
+ return label.substring(firstLine.length).trim();
415
+ }
416
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
417
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: SpiderChartComponent, isStandalone: false, 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: i5.MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
418
+ }
419
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponent, decorators: [{
420
+ type: Component,
421
+ args: [{ selector: 'ui-spider-chart', standalone: false, 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"] }]
422
+ }], propDecorators: { size: [{
423
+ type: Input
424
+ }], spiderChartData: [{
425
+ type: Input
426
+ }], stepSize: [{
427
+ type: Input
428
+ }], ariaLabel: [{
429
+ type: Input
430
+ }], loading: [{
431
+ type: Input
432
+ }], applicationTheme: [{
433
+ type: Input
434
+ }], chart: [{
435
+ type: ViewChild,
436
+ args: [BaseChartDirective]
437
+ }], labelContainers: [{
438
+ type: ViewChildren,
439
+ args: ['labelContainer']
440
+ }], fakeDataPoints: [{
441
+ type: ViewChildren,
442
+ args: ['fakeDataPoints']
443
+ }], fakeDataPointsSecondary: [{
444
+ type: ViewChildren,
445
+ args: ['fakeDataPointsSecondary']
446
+ }], legendItems: [{
447
+ type: ViewChildren,
448
+ args: ['legendItem']
449
+ }] } });
450
+
451
+ Chart.register(...registerables);
452
+ class SpiderChartComponentModule {
453
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
454
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, declarations: [SpiderChartComponent], imports: [NgClass,
455
+ UiTranslatePipe,
456
+ NgChartsModule,
457
+ MatTooltipModule,
458
+ UiTranslatePipe,
459
+ MemoizeFuncPipe,
460
+ SpinnerComponentModule,
461
+ CommonModule], exports: [SpiderChartComponent] }); }
462
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, imports: [NgChartsModule,
463
+ MatTooltipModule,
464
+ SpinnerComponentModule,
465
+ CommonModule] }); }
466
+ }
467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpiderChartComponentModule, decorators: [{
468
+ type: NgModule,
469
+ args: [{
470
+ declarations: [SpiderChartComponent],
471
+ exports: [SpiderChartComponent],
472
+ imports: [
473
+ NgClass,
474
+ UiTranslatePipe,
475
+ NgChartsModule,
476
+ MatTooltipModule,
477
+ UiTranslatePipe,
478
+ MemoizeFuncPipe,
479
+ SpinnerComponentModule,
480
+ CommonModule,
481
+ ],
482
+ }]
483
+ }] });
484
+
485
+ /**
486
+ * Generated bundle index. Do not edit.
487
+ */
488
+
489
+ export { LargeSpiderChartSize, SmallSpiderChartSize, SpiderChartComponent, SpiderChartComponentModule };
490
+ //# sourceMappingURL=testgorilla-tgo-ui-components-spider-chart.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-spider-chart.mjs","sources":["../../../components/spider-chart/spider-chart.model.ts","../../../components/spider-chart/spider-chart.component.ts","../../../components/spider-chart/spider-chart.component.html","../../../components/spider-chart/spider-chart.module.ts","../../../components/spider-chart/testgorilla-tgo-ui-components-spider-chart.ts"],"sourcesContent":["export type SpiderChartSize = 'large' | 'small';\n// These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.\nexport const SmallSpiderChartSize: number = 200;\nexport const LargeSpiderChartSize: number = 280;\nexport type SpiderChartData = {\n labels: string[];\n labelDescription: string[];\n plotData: [PlotData, PlotData] | [PlotData]; // Current implementation supports max 2 datasets.\n};\nexport type PlotData = {\n databaseLabel: string;\n data: number[];\n};\n","import { Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { LargeSpiderChartSize, SmallSpiderChartSize, SpiderChartData, SpiderChartSize } from './spider-chart.model';\nimport { ApplicationTheme, Color } from '@testgorilla/tgo-ui/components/core';\nimport { Chart, ChartData, ChartOptions } from 'chart.js';\nimport { BaseChartDirective } from 'ng2-charts';\n\n@Component({\n selector: 'ui-spider-chart',\n templateUrl: './spider-chart.component.html',\n styleUrls: ['./spider-chart.component.scss'],\n standalone: false\n})\nexport class SpiderChartComponent implements OnInit {\n /**\n * The size of the spider chart.\n * @type {SpiderChartSize}\n * @memberof SpiderChartComponent\n */\n @Input() size: SpiderChartSize = 'large';\n\n /**\n * The data to be used for the spider chart.\n * @type {SpiderChartData}\n * @memberof SpiderChartComponent\n */\n @Input() spiderChartData: SpiderChartData;\n\n /**\n * The step size for the spider chart.\n * @type {number}\n * @memberof SpiderChartComponent\n */\n @Input() stepSize: number = 20;\n\n /**\n * The aria label for the spider chart.\n * @type {string}\n * @memberof SpiderChartComponent\n */\n @Input() ariaLabel: string = 'Radar chart. Press tab to navigate through the chart.';\n\n /**\n * Whether the spider chart is loading.\n * @type {boolean}\n * @memberof SpiderChartComponent\n */\n @Input() loading: boolean = false;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof SpinnerComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n @ViewChild(BaseChartDirective) chart: BaseChartDirective;\n @ViewChildren('labelContainer') labelContainers: QueryList<ElementRef>;\n @ViewChildren('fakeDataPoints') fakeDataPoints: QueryList<ElementRef>;\n @ViewChildren('fakeDataPointsSecondary') fakeDataPointsSecondary: QueryList<ElementRef>;\n @ViewChildren('legendItem') legendItems: QueryList<ElementRef>;\n\n radarChartData: ChartData<'radar'> = {\n labels: [],\n datasets: [],\n };\n radarChartOptions: ChartOptions<'radar'>;\n labelPositions: { [key: string]: { x: number; y: number } } = {};\n labelPositionsVisible: boolean = false;\n focusedLabelIndex: number = 0;\n focusedFakeDataPointIndex: number = 0;\n loadingChartData: ChartData<'radar'> = {\n labels: [1, 2, 3, 4, 5, 6],\n datasets: [],\n };\n loadingChartOptions: ChartOptions<'radar'> = {\n responsive: true,\n layout: {\n padding: {\n left: 40,\n right: 40,\n top: 40,\n bottom: 40,\n },\n },\n scales: {\n r: {\n angleLines: {\n display: true,\n color: Color.GRAYSCALE_30,\n },\n grid: {\n color: () => Color.GRAYSCALE_30,\n },\n pointLabels: {\n display: false,\n },\n suggestedMin: 0,\n suggestedMax: 100,\n ticks: {\n stepSize: this.stepSize,\n display: false,\n },\n },\n },\n };\n protected readonly translationContext = 'CHARTS.SPIDER.';\n\n ngOnInit(): void {\n if (!this.loading) {\n this.handleInputErrors();\n this.setChartData();\n this.setChartOptions();\n }\n }\n\n private handleInputErrors() {\n if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {\n throw new Error('The \"labels\" input is required and cannot be empty.');\n }\n if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {\n throw new Error('The \"labelDescription\" input is required and cannot be empty.');\n }\n if (\n this.spiderChartData.labelDescription &&\n this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length\n ) {\n throw new Error('The \"labelDescription\" input must have the same length as \"labels\".');\n }\n if (!this.spiderChartData.plotData[0].databaseLabel) {\n throw new Error('The \"plotData.databaseLabel\" input is required.');\n }\n if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {\n throw new Error('The \"plotData.data\" input is required and cannot be empty.');\n }\n if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {\n throw new Error('The \"plotData.data\" input must have the same length as \"labels\".');\n }\n if (\n this.spiderChartData.plotData.length === 2 &&\n this.spiderChartData.labels.length > 0 &&\n this.spiderChartData.plotData[1].data &&\n this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length\n ) {\n throw new Error('The \"plotData.data\" input must have the same length as \"labels\".');\n }\n }\n\n private setChartData() {\n const datasets = [];\n datasets.push({\n label: this.spiderChartData.plotData[0].databaseLabel,\n data: this.spiderChartData.plotData[0].data,\n fill: true,\n backgroundColor: 'rgba(212, 16, 170, 0.2)',\n borderColor: Color.BRAND_50,\n pointBackgroundColor: Color.BRAND_50,\n pointBorderColor: Color.TGO_WHITE,\n pointHoverBackgroundColor: Color.TGO_WHITE,\n pointHoverBorderColor: Color.BRAND_50,\n });\n if (this.spiderChartData.plotData.length === 2) {\n datasets.push({\n label: this.spiderChartData.plotData[1].databaseLabel,\n data: this.spiderChartData.plotData[1].data,\n fill: false,\n borderColor: Color.BLACK,\n borderDash: [5, 5],\n borderWidth: 1,\n pointBackgroundColor: Color.BLACK,\n pointBorderColor: Color.TGO_WHITE,\n pointHoverBackgroundColor: Color.TGO_WHITE,\n pointHoverBorderColor: Color.BLACK,\n });\n }\n this.radarChartData = {\n labels: this.spiderChartData.labels,\n datasets: datasets,\n };\n }\n\n private setChartOptions() {\n this.radarChartOptions = {\n responsive: true,\n elements: {\n line: {\n borderWidth: 3,\n },\n },\n layout: {\n padding: {\n left: 40,\n right: 40,\n top: 40,\n bottom: 40,\n },\n },\n scales: {\n r: {\n angleLines: {\n display: true,\n color: Color.BLACK,\n },\n grid: {\n color: context => {\n if (context.tick.value === 100) {\n return Color.BLACK;\n }\n return Color.GRAYSCALE_30;\n },\n },\n pointLabels: {\n color: 'black',\n font: {\n family: 'Arial',\n size: 14,\n },\n display: false,\n },\n suggestedMin: 0,\n suggestedMax: 100,\n ticks: {\n stepSize: this.stepSize,\n display: false,\n },\n },\n },\n plugins: {\n legend: {\n display: false,\n },\n },\n };\n }\n\n ngAfterViewInit(): void {\n if (this.chart?.chart && !this.loading) {\n this.logCornerCoordinates(this.chart.chart);\n }\n }\n\n private logCornerCoordinates(chart: Chart) {\n const scale = chart.scales['r'] as any;\n const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;\n const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;\n\n // Loop through the labels and calculate the percentage coordinates\n this.spiderChartData.labels.forEach((label, index) => {\n const position = scale.getPointPositionForValue(index, scale.max);\n\n // Calculate percentage values relative to the canvas size\n const xPercent = (position.x / canvasWidth) * 100;\n const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis\n\n this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };\n });\n this.labelPositionsVisible = true;\n }\n\n getCenteredLabelBottomPosition(label: string, height: number) {\n const position = this.labelPositions[label];\n const padding = 7;\n if (position.x > 50 || position.x < 50) {\n return `calc(${position.y}% - ${height / 2}px)`;\n } else if (position.y < 50) {\n return `calc(${position.y}% - ${height}px - ${padding}px)`;\n } else {\n return `calc(${position.y}% + ${padding}px)`;\n }\n }\n\n getCenteredLabelLeftPosition(label: string, width: number) {\n const position = this.labelPositions[label];\n const padding = 15;\n if (position.x === 50) {\n return `calc(${position.x}% - ${width / 2}px)`;\n } else if (position.x < 50) {\n return `calc(${position.x}% - ${width}px - ${padding}px)`;\n } else {\n return `calc(${position.x}% + ${padding}px)`;\n }\n }\n\n onLabelKeyDown(event: KeyboardEvent, index: number) {\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n this.focusNextLabel(index);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n this.focusPreviousLabel(index);\n }\n }\n\n private focusNextLabel(index: number) {\n const nextIndex = index + 1;\n if (nextIndex < this.labelContainers.length) {\n this.labelContainers.get(nextIndex)?.nativeElement.focus();\n } else {\n this.labelContainers.first?.nativeElement.focus();\n }\n this.focusedLabelIndex = nextIndex;\n }\n\n private focusPreviousLabel(index: number) {\n const previousIndex = index - 1;\n if (previousIndex >= 0) {\n this.labelContainers.get(previousIndex)?.nativeElement.focus();\n } else {\n this.labelContainers.last?.nativeElement.focus();\n }\n this.focusedLabelIndex = previousIndex;\n }\n\n onLegendItemKeyDown(event: KeyboardEvent, index: number) {\n if (event.key === 'Enter') {\n this.toggleDatasetVisibility(index);\n } else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n this.focusNextLegendItem(index);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n this.focusPreviousLegendItem(index);\n }\n }\n\n private focusNextLegendItem(index: number) {\n const nextIndex = index + 1;\n if (nextIndex < this.legendItems.length) {\n this.legendItems.get(nextIndex)?.nativeElement.focus();\n } else {\n this.legendItems.first?.nativeElement.focus();\n }\n }\n\n private focusPreviousLegendItem(index: number) {\n const previousIndex = index - 1;\n if (previousIndex >= 0) {\n this.legendItems.get(previousIndex)?.nativeElement.focus();\n } else {\n this.legendItems.last?.nativeElement.focus();\n }\n }\n\n onFakeDataPointsKeyDown(event: KeyboardEvent, index: number, isSecondary: boolean = false) {\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n this.focusNextFakeDataPoint(index, isSecondary);\n this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n this.focusPreviousFakeDataPoint(index, isSecondary);\n this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);\n } else if (event.key === 'Tab') {\n this.resetActiveElement();\n }\n }\n\n private focusNextFakeDataPoint(index: number, isSecondary: boolean = false) {\n const nextIndex = index + 1;\n if (nextIndex < this.fakeDataPoints.length) {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.get(nextIndex)?.nativeElement.focus();\n } else {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.first?.nativeElement.focus();\n }\n if (!isSecondary) {\n this.focusedFakeDataPointIndex = nextIndex;\n }\n }\n\n private focusPreviousFakeDataPoint(index: number, isSecondary: boolean = false) {\n const previousIndex = index - 1;\n if (previousIndex >= 0) {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.get(previousIndex)?.nativeElement.focus();\n } else {\n const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;\n fakeDataPoints.last?.nativeElement.focus();\n }\n if (!isSecondary) {\n this.focusedFakeDataPointIndex = previousIndex;\n }\n }\n\n showTooltipForDataPoint(index: number, isSecondary: boolean = false) {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];\n const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);\n const dataPoint = meta.data[index];\n const eventPosition = {\n x: dataPoint.x,\n y: dataPoint.y,\n };\n if (!isSecondary) {\n this.focusedFakeDataPointIndex = index;\n }\n\n chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);\n\n chartInstance.update();\n }\n\n private resetActiveElement() {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n // Clear the active elements to hide the tooltip\n chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });\n\n chartInstance.update();\n }\n\n toggleDatasetVisibility(datasetIndex: number) {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n\n const dataset = chartInstance.data.datasets[datasetIndex];\n dataset.hidden = !dataset.hidden;\n chartInstance.update();\n }\n\n isDatasetVisible(datasetIndex: number) {\n const chartInstance = this.chart?.chart;\n if (!chartInstance) return;\n return !chartInstance.data.datasets[datasetIndex].hidden;\n }\n\n getFirstLine(label: string): string {\n const words = label.split(' ');\n let firstLine = '';\n for (const word of words) {\n if ((firstLine + word).length <= 20) {\n firstLine += (firstLine ? ' ' : '') + word;\n } else {\n break;\n }\n }\n return firstLine;\n }\n\n getSecondLine(label: string): string {\n const firstLine = this.getFirstLine(label);\n return label.substring(firstLine.length).trim();\n }\n}\n","<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","import { NgModule } from '@angular/core';\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { SpiderChartComponent } from './spider-chart.component';\nimport { NgChartsModule } from 'ng2-charts';\nimport { Chart, registerables } from 'chart.js';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CommonModule, NgClass } from '@angular/common';\nimport { SpinnerComponentModule } from '@testgorilla/tgo-ui/components/spinner';\nimport { MemoizeFuncPipe } from '@testgorilla/tgo-ui/components/core';\n\nChart.register(...registerables);\n\n@NgModule({\n declarations: [SpiderChartComponent],\n exports: [SpiderChartComponent],\n imports: [\n NgClass,\n UiTranslatePipe,\n NgChartsModule,\n MatTooltipModule,\n UiTranslatePipe,\n MemoizeFuncPipe,\n SpinnerComponentModule,\n CommonModule,\n ],\n})\nexport class SpiderChartComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}