@testgorilla/tgo-ui 2.24.23 → 2.24.9999

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 (318) hide show
  1. package/components/alert-banner/index.d.ts +1 -0
  2. package/components/alert-banner/public-api.d.ts +2 -0
  3. package/components/avatar/index.d.ts +1 -0
  4. package/components/avatar/public-api.d.ts +3 -0
  5. package/components/badge/index.d.ts +1 -0
  6. package/components/badge/public-api.d.ts +3 -0
  7. package/components/button/index.d.ts +1 -0
  8. package/components/button/public-api.d.ts +3 -0
  9. package/components/card/index.d.ts +1 -0
  10. package/components/card/public-api.d.ts +3 -0
  11. package/components/checkbox/index.d.ts +1 -0
  12. package/components/checkbox/public-api.d.ts +2 -0
  13. package/components/field/index.d.ts +1 -0
  14. package/components/field/public-api.d.ts +3 -0
  15. package/components/icon/index.d.ts +1 -0
  16. package/components/icon/public-api.d.ts +3 -0
  17. package/components/logo/index.d.ts +1 -0
  18. package/components/logo/public-api.d.ts +3 -0
  19. package/components/radio-button/index.d.ts +1 -0
  20. package/components/radio-button/public-api.d.ts +2 -0
  21. package/components/side-panel/index.d.ts +1 -0
  22. package/components/side-panel/public-api.d.ts +3 -0
  23. package/components/side-panel/side-panel.component.d.ts +1 -1
  24. package/components/snackbar/index.d.ts +1 -0
  25. package/components/snackbar/public-api.d.ts +4 -0
  26. package/components/spinner/index.d.ts +1 -0
  27. package/components/spinner/public-api.d.ts +3 -0
  28. package/components/tooltip/index.d.ts +1 -0
  29. package/components/tooltip/public-api.d.ts +3 -0
  30. package/esm2022/components/alert-banner/index.mjs +2 -0
  31. package/esm2022/components/alert-banner/public-api.mjs +3 -0
  32. package/esm2022/components/avatar/index.mjs +2 -0
  33. package/esm2022/components/avatar/public-api.mjs +4 -0
  34. package/esm2022/components/badge/index.mjs +2 -0
  35. package/esm2022/components/badge/public-api.mjs +4 -0
  36. package/esm2022/components/button/index.mjs +2 -0
  37. package/esm2022/components/button/public-api.mjs +4 -0
  38. package/esm2022/components/card/index.mjs +2 -0
  39. package/esm2022/components/card/public-api.mjs +4 -0
  40. package/esm2022/components/checkbox/index.mjs +2 -0
  41. package/esm2022/components/checkbox/public-api.mjs +3 -0
  42. package/esm2022/components/field/index.mjs +2 -0
  43. package/esm2022/components/field/public-api.mjs +4 -0
  44. package/esm2022/components/icon/index.mjs +2 -0
  45. package/esm2022/components/icon/public-api.mjs +4 -0
  46. package/esm2022/components/logo/index.mjs +2 -0
  47. package/esm2022/components/logo/public-api.mjs +4 -0
  48. package/esm2022/components/radio-button/index.mjs +2 -0
  49. package/esm2022/components/radio-button/public-api.mjs +3 -0
  50. package/esm2022/components/side-panel/index.mjs +2 -0
  51. package/esm2022/components/side-panel/public-api.mjs +4 -0
  52. package/esm2022/components/snackbar/index.mjs +2 -0
  53. package/esm2022/components/snackbar/public-api.mjs +5 -0
  54. package/esm2022/components/spinner/index.mjs +2 -0
  55. package/esm2022/components/spinner/public-api.mjs +4 -0
  56. package/esm2022/components/tooltip/index.mjs +2 -0
  57. package/esm2022/components/tooltip/public-api.mjs +4 -0
  58. package/esm2022/public-api.mjs +184 -214
  59. package/fesm2022/testgorilla-tgo-ui.mjs +3051 -11351
  60. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  61. package/package.json +3 -2
  62. package/public-api.d.ts +14 -151
  63. package/components/accordion/accordion.component.d.ts +0 -100
  64. package/components/accordion/accordion.component.module.d.ts +0 -12
  65. package/components/accordion/accordion.model.d.ts +0 -2
  66. package/components/autocomplete/autocomplete.component.d.ts +0 -289
  67. package/components/autocomplete/autocomplete.component.module.d.ts +0 -23
  68. package/components/autocomplete/autocomplete.model.d.ts +0 -22
  69. package/components/autocomplete/includes.pipe.d.ts +0 -12
  70. package/components/autocomplete/prevent-input.directive.d.ts +0 -7
  71. package/components/autocomplete/transform-Item.pipe.d.ts +0 -11
  72. package/components/checklist/checklist.component.d.ts +0 -78
  73. package/components/checklist/checklist.model.d.ts +0 -7
  74. package/components/confirm-dialog/confirm-dialog.component.d.ts +0 -29
  75. package/components/confirm-dialog/confirm-dialog.component.module.d.ts +0 -12
  76. package/components/confirm-dialog/confirm-dialog.model.d.ts +0 -11
  77. package/components/datepicker/date-adapter.d.ts +0 -30
  78. package/components/datepicker/datepicker.component.d.ts +0 -214
  79. package/components/datepicker/datepicker.component.module.d.ts +0 -18
  80. package/components/datepicker/datepicker.service.d.ts +0 -8
  81. package/components/datepicker/no-date-format.directive.d.ts +0 -11
  82. package/components/deprecated-paginator/deprecated-paginator.component.d.ts +0 -38
  83. package/components/deprecated-paginator/deprecated-paginator.component.module.d.ts +0 -9
  84. package/components/deprecated-table/deprecated-table.component.d.ts +0 -91
  85. package/components/deprecated-table/deprecated-table.component.module.d.ts +0 -14
  86. package/components/deprecated-table/deprecated-table.model.d.ts +0 -45
  87. package/components/deprecated-table/directives/dynamic-component.directive.d.ts +0 -13
  88. package/components/dialog/dialog.component.d.ts +0 -147
  89. package/components/dialog/dialog.component.module.d.ts +0 -11
  90. package/components/dialog/dialog.service.d.ts +0 -13
  91. package/components/divider/divider.component.d.ts +0 -39
  92. package/components/divider/divider.component.module.d.ts +0 -9
  93. package/components/divider/divider.model.d.ts +0 -1
  94. package/components/dropdown/dropdown.component.d.ts +0 -190
  95. package/components/dropdown/dropdown.component.module.d.ts +0 -17
  96. package/components/dropdown/dropdown.model.d.ts +0 -5
  97. package/components/elevation-shadow/elevation-shadow.component.d.ts +0 -26
  98. package/components/elevation-shadow/elevation-shadow.component.module.d.ts +0 -8
  99. package/components/elevation-shadow/elevation-shadow.constant.d.ts +0 -8
  100. package/components/empty-state/empty-state.component.d.ts +0 -118
  101. package/components/empty-state/empty-state.component.module.d.ts +0 -11
  102. package/components/empty-state/empty-state.model.d.ts +0 -3
  103. package/components/file-upload/file-upload.component.d.ts +0 -120
  104. package/components/file-upload/file-upload.component.module.d.ts +0 -14
  105. package/components/icon-label/icon-label.component.d.ts +0 -39
  106. package/components/icon-label/icon-label.component.module.d.ts +0 -9
  107. package/components/media-card/media-card.component.d.ts +0 -32
  108. package/components/multi-input/multi-input.component.d.ts +0 -164
  109. package/components/multi-input/multi-input.component.module.d.ts +0 -18
  110. package/components/multi-input/multi-input.model.d.ts +0 -1
  111. package/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.d.ts +0 -25
  112. package/components/navbar/navbar.component.d.ts +0 -119
  113. package/components/navbar/navbar.component.module.d.ts +0 -21
  114. package/components/navbar/navbar.model.d.ts +0 -21
  115. package/components/overflow-menu/overflow-menu.component.d.ts +0 -86
  116. package/components/overflow-menu/overflow-menu.component.module.d.ts +0 -15
  117. package/components/overflow-menu/overflow-menu.model.d.ts +0 -20
  118. package/components/page-header/page-header.component.d.ts +0 -38
  119. package/components/page-header/page-header.component.module.d.ts +0 -10
  120. package/components/paginator/paginator.component.d.ts +0 -58
  121. package/components/paginator/paginator.component.module.d.ts +0 -9
  122. package/components/password-criteria/password.component.d.ts +0 -42
  123. package/components/password-criteria/password.component.module.d.ts +0 -13
  124. package/components/password-strength/password-strength.component.d.ts +0 -45
  125. package/components/password-strength/password-strength.component.module.d.ts +0 -11
  126. package/components/phone-input/join-strings.pipe.d.ts +0 -7
  127. package/components/phone-input/phone-input.component.d.ts +0 -147
  128. package/components/phone-input/phone-input.component.module.d.ts +0 -20
  129. package/components/phone-input/phone-input.model.d.ts +0 -8
  130. package/components/progress-bar/progress-bar.component.d.ts +0 -73
  131. package/components/progress-bar/progress-bar.component.module.d.ts +0 -10
  132. package/components/radial-progress/radial-progress.component.d.ts +0 -68
  133. package/components/radial-progress/radial-progress.component.module.d.ts +0 -10
  134. package/components/radial-progress/radial-progress.model.d.ts +0 -10
  135. package/components/rating/half-star.pipe.d.ts +0 -14
  136. package/components/rating/rating.component.d.ts +0 -64
  137. package/components/rating/rating.component.module.d.ts +0 -10
  138. package/components/scale/scale.component.d.ts +0 -53
  139. package/components/scale/scale.component.module.d.ts +0 -8
  140. package/components/segmented-bar/segmented-bar.component.d.ts +0 -63
  141. package/components/segmented-bar/segmented-bar.component.module.d.ts +0 -13
  142. package/components/segmented-bar/segmented-bar.model.d.ts +0 -12
  143. package/components/segmented-button/segmented-button.component.d.ts +0 -55
  144. package/components/segmented-button/segmented-button.component.module.d.ts +0 -11
  145. package/components/segmented-button/segmented-button.model.d.ts +0 -8
  146. package/components/side-sheet/side-sheet.component.d.ts +0 -43
  147. package/components/side-sheet/side-sheet.component.module.d.ts +0 -14
  148. package/components/side-sheet/side-sheet.model.d.ts +0 -10
  149. package/components/side-sheet/side-sheet.service.d.ts +0 -14
  150. package/components/skeleton/skeleton.component.d.ts +0 -26
  151. package/components/skeleton/skeleton.model.d.ts +0 -2
  152. package/components/slider/slider.component.d.ts +0 -105
  153. package/components/slider/slider.component.module.d.ts +0 -14
  154. package/components/slider/slider.model.d.ts +0 -5
  155. package/components/spider-chart/spider-chart.component.d.ts +0 -88
  156. package/components/spider-chart/spider-chart.model.d.ts +0 -12
  157. package/components/spider-chart/spider-chart.module.d.ts +0 -12
  158. package/components/step/step.component.d.ts +0 -161
  159. package/components/step/step.component.module.d.ts +0 -10
  160. package/components/stepper/stepper.component.d.ts +0 -86
  161. package/components/stepper/stepper.component.module.d.ts +0 -15
  162. package/components/stepper/stepper.model.d.ts +0 -22
  163. package/components/table/sentence-case.pipe.d.ts +0 -7
  164. package/components/table/table.component.d.ts +0 -96
  165. package/components/table/table.component.module.d.ts +0 -20
  166. package/components/table/table.model.d.ts +0 -96
  167. package/components/tabs/tab.directive.d.ts +0 -24
  168. package/components/tabs/tabs.component.d.ts +0 -73
  169. package/components/tabs/tabs.component.module.d.ts +0 -11
  170. package/components/tabs/tabs.model.d.ts +0 -15
  171. package/components/tag/tag.component.d.ts +0 -131
  172. package/components/tag/tag.component.module.d.ts +0 -13
  173. package/components/tag/tag.model.d.ts +0 -1
  174. package/components/toggle/toggle.component.d.ts +0 -113
  175. package/components/toggle/toggle.component.module.d.ts +0 -14
  176. package/components/toggle/toggle.model.d.ts +0 -1
  177. package/components/universal-skills-report/universal-skills-report.component.d.ts +0 -33
  178. package/components/universal-skills-report/universal-skills-report.component.module.d.ts +0 -14
  179. package/components/universal-skills-report/universal-skills-report.model.d.ts +0 -33
  180. package/directives/drag-drop.directive.d.ts +0 -12
  181. package/directives/select-text.directive.d.ts +0 -19
  182. package/directives/step-line-element.directive.d.ts +0 -17
  183. package/esm2022/components/accordion/accordion.component.mjs +0 -135
  184. package/esm2022/components/accordion/accordion.component.module.mjs +0 -40
  185. package/esm2022/components/accordion/accordion.model.mjs +0 -2
  186. package/esm2022/components/autocomplete/autocomplete.component.mjs +0 -716
  187. package/esm2022/components/autocomplete/autocomplete.component.module.mjs +0 -73
  188. package/esm2022/components/autocomplete/autocomplete.model.mjs +0 -25
  189. package/esm2022/components/autocomplete/includes.pipe.mjs +0 -25
  190. package/esm2022/components/autocomplete/prevent-input.directive.mjs +0 -27
  191. package/esm2022/components/autocomplete/transform-Item.pipe.mjs +0 -32
  192. package/esm2022/components/checklist/checklist.component.mjs +0 -147
  193. package/esm2022/components/checklist/checklist.model.mjs +0 -2
  194. package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +0 -54
  195. package/esm2022/components/confirm-dialog/confirm-dialog.component.module.mjs +0 -29
  196. package/esm2022/components/confirm-dialog/confirm-dialog.model.mjs +0 -2
  197. package/esm2022/components/datepicker/date-adapter.mjs +0 -30
  198. package/esm2022/components/datepicker/datepicker.component.mjs +0 -333
  199. package/esm2022/components/datepicker/datepicker.component.module.mjs +0 -60
  200. package/esm2022/components/datepicker/datepicker.service.mjs +0 -20
  201. package/esm2022/components/datepicker/no-date-format.directive.mjs +0 -56
  202. package/esm2022/components/deprecated-paginator/deprecated-paginator.component.mjs +0 -55
  203. package/esm2022/components/deprecated-paginator/deprecated-paginator.component.module.mjs +0 -20
  204. package/esm2022/components/deprecated-table/deprecated-table.component.mjs +0 -158
  205. package/esm2022/components/deprecated-table/deprecated-table.component.module.mjs +0 -43
  206. package/esm2022/components/deprecated-table/deprecated-table.model.mjs +0 -13
  207. package/esm2022/components/deprecated-table/directives/dynamic-component.directive.mjs +0 -40
  208. package/esm2022/components/dialog/dialog.component.mjs +0 -253
  209. package/esm2022/components/dialog/dialog.component.module.mjs +0 -23
  210. package/esm2022/components/dialog/dialog.service.mjs +0 -35
  211. package/esm2022/components/divider/divider.component.mjs +0 -65
  212. package/esm2022/components/divider/divider.component.module.mjs +0 -19
  213. package/esm2022/components/divider/divider.model.mjs +0 -2
  214. package/esm2022/components/dropdown/dropdown.component.mjs +0 -351
  215. package/esm2022/components/dropdown/dropdown.component.module.mjs +0 -57
  216. package/esm2022/components/dropdown/dropdown.model.mjs +0 -2
  217. package/esm2022/components/elevation-shadow/elevation-shadow.component.mjs +0 -45
  218. package/esm2022/components/elevation-shadow/elevation-shadow.component.module.mjs +0 -18
  219. package/esm2022/components/elevation-shadow/elevation-shadow.constant.mjs +0 -9
  220. package/esm2022/components/empty-state/empty-state.component.mjs +0 -186
  221. package/esm2022/components/empty-state/empty-state.component.module.mjs +0 -21
  222. package/esm2022/components/empty-state/empty-state.model.mjs +0 -2
  223. package/esm2022/components/file-upload/file-upload.component.mjs +0 -282
  224. package/esm2022/components/file-upload/file-upload.component.module.mjs +0 -40
  225. package/esm2022/components/icon-label/icon-label.component.mjs +0 -53
  226. package/esm2022/components/icon-label/icon-label.component.module.mjs +0 -20
  227. package/esm2022/components/media-card/media-card.component.mjs +0 -47
  228. package/esm2022/components/multi-input/multi-input.component.mjs +0 -318
  229. package/esm2022/components/multi-input/multi-input.component.module.mjs +0 -58
  230. package/esm2022/components/multi-input/multi-input.model.mjs +0 -2
  231. package/esm2022/components/navbar/mobile-navbar-side-sheet/mobile-navbar-side-sheet.component.mjs +0 -82
  232. package/esm2022/components/navbar/navbar.component.mjs +0 -209
  233. package/esm2022/components/navbar/navbar.component.module.mjs +0 -71
  234. package/esm2022/components/navbar/navbar.model.mjs +0 -2
  235. package/esm2022/components/overflow-menu/overflow-menu.component.mjs +0 -195
  236. package/esm2022/components/overflow-menu/overflow-menu.component.module.mjs +0 -25
  237. package/esm2022/components/overflow-menu/overflow-menu.model.mjs +0 -2
  238. package/esm2022/components/page-header/page-header.component.mjs +0 -71
  239. package/esm2022/components/page-header/page-header.component.module.mjs +0 -20
  240. package/esm2022/components/paginator/paginator.component.mjs +0 -87
  241. package/esm2022/components/paginator/paginator.component.module.mjs +0 -19
  242. package/esm2022/components/password-criteria/password.component.mjs +0 -105
  243. package/esm2022/components/password-criteria/password.component.module.mjs +0 -39
  244. package/esm2022/components/password-strength/password-strength.component.mjs +0 -93
  245. package/esm2022/components/password-strength/password-strength.component.module.mjs +0 -21
  246. package/esm2022/components/phone-input/join-strings.pipe.mjs +0 -14
  247. package/esm2022/components/phone-input/phone-input.component.mjs +0 -353
  248. package/esm2022/components/phone-input/phone-input.component.module.mjs +0 -63
  249. package/esm2022/components/phone-input/phone-input.model.mjs +0 -2
  250. package/esm2022/components/progress-bar/progress-bar.component.mjs +0 -103
  251. package/esm2022/components/progress-bar/progress-bar.component.module.mjs +0 -21
  252. package/esm2022/components/radial-progress/radial-progress.component.mjs +0 -106
  253. package/esm2022/components/radial-progress/radial-progress.component.module.mjs +0 -20
  254. package/esm2022/components/radial-progress/radial-progress.model.mjs +0 -11
  255. package/esm2022/components/rating/half-star.pipe.mjs +0 -23
  256. package/esm2022/components/rating/rating.component.mjs +0 -92
  257. package/esm2022/components/rating/rating.component.module.mjs +0 -20
  258. package/esm2022/components/scale/scale.component.mjs +0 -124
  259. package/esm2022/components/scale/scale.component.module.mjs +0 -18
  260. package/esm2022/components/segmented-bar/segmented-bar.component.mjs +0 -106
  261. package/esm2022/components/segmented-bar/segmented-bar.component.module.mjs +0 -23
  262. package/esm2022/components/segmented-bar/segmented-bar.model.mjs +0 -2
  263. package/esm2022/components/segmented-button/segmented-button.component.mjs +0 -104
  264. package/esm2022/components/segmented-button/segmented-button.component.module.mjs +0 -21
  265. package/esm2022/components/segmented-button/segmented-button.model.mjs +0 -2
  266. package/esm2022/components/side-sheet/side-sheet.component.mjs +0 -105
  267. package/esm2022/components/side-sheet/side-sheet.component.module.mjs +0 -43
  268. package/esm2022/components/side-sheet/side-sheet.model.mjs +0 -2
  269. package/esm2022/components/side-sheet/side-sheet.service.mjs +0 -31
  270. package/esm2022/components/skeleton/skeleton.component.mjs +0 -71
  271. package/esm2022/components/skeleton/skeleton.model.mjs +0 -2
  272. package/esm2022/components/slider/slider.component.mjs +0 -198
  273. package/esm2022/components/slider/slider.component.module.mjs +0 -43
  274. package/esm2022/components/slider/slider.model.mjs +0 -2
  275. package/esm2022/components/spider-chart/spider-chart.component.mjs +0 -425
  276. package/esm2022/components/spider-chart/spider-chart.model.mjs +0 -4
  277. package/esm2022/components/spider-chart/spider-chart.module.mjs +0 -41
  278. package/esm2022/components/step/step.component.mjs +0 -149
  279. package/esm2022/components/step/step.component.module.mjs +0 -20
  280. package/esm2022/components/stepper/stepper.component.mjs +0 -150
  281. package/esm2022/components/stepper/stepper.component.module.mjs +0 -44
  282. package/esm2022/components/stepper/stepper.model.mjs +0 -2
  283. package/esm2022/components/table/sentence-case.pipe.mjs +0 -19
  284. package/esm2022/components/table/table.component.mjs +0 -238
  285. package/esm2022/components/table/table.component.module.mjs +0 -61
  286. package/esm2022/components/table/table.model.mjs +0 -13
  287. package/esm2022/components/tabs/tab.directive.mjs +0 -54
  288. package/esm2022/components/tabs/tabs.component.mjs +0 -188
  289. package/esm2022/components/tabs/tabs.component.module.mjs +0 -21
  290. package/esm2022/components/tabs/tabs.model.mjs +0 -2
  291. package/esm2022/components/tag/tag.component.mjs +0 -212
  292. package/esm2022/components/tag/tag.component.module.mjs +0 -24
  293. package/esm2022/components/tag/tag.model.mjs +0 -2
  294. package/esm2022/components/toggle/toggle.component.mjs +0 -190
  295. package/esm2022/components/toggle/toggle.component.module.mjs +0 -24
  296. package/esm2022/components/toggle/toggle.model.mjs +0 -2
  297. package/esm2022/components/universal-skills-report/universal-skills-report.component.mjs +0 -115
  298. package/esm2022/components/universal-skills-report/universal-skills-report.component.module.mjs +0 -43
  299. package/esm2022/components/universal-skills-report/universal-skills-report.model.mjs +0 -19
  300. package/esm2022/directives/drag-drop.directive.mjs +0 -55
  301. package/esm2022/directives/select-text.directive.mjs +0 -40
  302. package/esm2022/directives/step-line-element.directive.mjs +0 -51
  303. package/esm2022/models/keyboard-events.model.mjs +0 -13
  304. package/esm2022/models/screen-breakpoints.model.mjs +0 -6
  305. package/esm2022/pipes/data-property-getter.mjs +0 -33
  306. package/esm2022/pipes/ui-ordinal-suffix.pipe.mjs +0 -31
  307. package/esm2022/providers/is-mobile.mjs +0 -11
  308. package/esm2022/utils/autocomplete-utils.mjs +0 -66
  309. package/esm2022/utils/hex-to-rgb.mjs +0 -9
  310. package/esm2022/utils/table.utils.mjs +0 -19
  311. package/models/keyboard-events.model.d.ts +0 -11
  312. package/models/screen-breakpoints.model.d.ts +0 -4
  313. package/pipes/data-property-getter.d.ts +0 -8
  314. package/pipes/ui-ordinal-suffix.pipe.d.ts +0 -7
  315. package/providers/is-mobile.d.ts +0 -2
  316. package/utils/autocomplete-utils.d.ts +0 -12
  317. package/utils/hex-to-rgb.d.ts +0 -1
  318. package/utils/table.utils.d.ts +0 -6
@@ -1,43 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { SliderComponent } from './slider.component';
4
- import { MatSliderModule } from '@angular/material/slider';
5
- import { FormsModule } from '@angular/forms';
6
- import { MatInputModule } from '@angular/material/input';
7
- import { MatTooltipModule } from '@angular/material/tooltip';
8
- import { IconComponentModule } from '../icon/icon.component.module';
9
- import { UiTranslatePipe } from '../../pipes/ui-translate.pipe';
10
- import * as i0 from "@angular/core";
11
- export class SliderComponentModule {
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SliderComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
13
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: SliderComponentModule, declarations: [SliderComponent], imports: [CommonModule,
14
- MatSliderModule,
15
- FormsModule,
16
- MatInputModule,
17
- MatTooltipModule,
18
- IconComponentModule,
19
- UiTranslatePipe], exports: [SliderComponent] }); }
20
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SliderComponentModule, imports: [CommonModule,
21
- MatSliderModule,
22
- FormsModule,
23
- MatInputModule,
24
- MatTooltipModule,
25
- IconComponentModule] }); }
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SliderComponentModule, decorators: [{
28
- type: NgModule,
29
- args: [{
30
- declarations: [SliderComponent],
31
- imports: [
32
- CommonModule,
33
- MatSliderModule,
34
- FormsModule,
35
- MatInputModule,
36
- MatTooltipModule,
37
- IconComponentModule,
38
- UiTranslatePipe,
39
- ],
40
- exports: [SliderComponent],
41
- }]
42
- }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZWhFLE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQVpqQixlQUFlLGFBRTVCLFlBQVk7WUFDWixlQUFlO1lBQ2YsV0FBVztZQUNYLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsbUJBQW1CO1lBQ25CLGVBQWUsYUFFUCxlQUFlO2dIQUVkLHFCQUFxQixZQVY5QixZQUFZO1lBQ1osZUFBZTtZQUNmLFdBQVc7WUFDWCxjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLG1CQUFtQjs7NEZBS1YscUJBQXFCO2tCQWJqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNsaWRlckNvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTbGlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IEljb25Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50Lm1vZHVsZSc7XG5pbXBvcnQgeyBVaVRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy91aS10cmFuc2xhdGUucGlwZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1NsaWRlckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0U2xpZGVyTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudE1vZHVsZSxcbiAgICBVaVRyYW5zbGF0ZVBpcGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtTbGlkZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnRNb2R1bGUge31cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2xpZGVyVmFsdWUge1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBTbGlkZXJWYXJpYW50ID0gJ2Jhc2ljJyB8ICdyYW5nZSdcbiJdfQ==
@@ -1,425 +0,0 @@
1
- import { Component, Input, ViewChild, ViewChildren, } from '@angular/core';
2
- import { LargeSpiderChartSize, SmallSpiderChartSize } from './spider-chart.model';
3
- import { Color } from './../../models/colors.model';
4
- import { BaseChartDirective } from 'ng2-charts';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "ng2-charts";
8
- import * as i3 from "@angular/material/tooltip";
9
- import * as i4 from "../spinner/spinner.component";
10
- import * as i5 from "../../pipes/ui-translate.pipe";
11
- export class SpiderChartComponent {
12
- constructor() {
13
- /**
14
- * The size of the spider chart.
15
- * @type {SpiderChartSize}
16
- * @memberof SpiderChartComponent
17
- */
18
- this.size = 'large';
19
- /**
20
- * The step size for the spider chart.
21
- * @type {number}
22
- * @memberof SpiderChartComponent
23
- */
24
- this.stepSize = 20;
25
- /**
26
- * The aria label for the spider chart.
27
- * @type {string}
28
- * @memberof SpiderChartComponent
29
- */
30
- this.ariaLabel = 'Radar chart. Press tab to navigate through the chart.';
31
- /**
32
- * Whether the spider chart is loading.
33
- * @type {boolean}
34
- * @memberof SpiderChartComponent
35
- */
36
- this.loading = false;
37
- /**
38
- *
39
- * Defines the application theme
40
- *
41
- * @type {ApplicationTheme}
42
- * @memberof SpinnerComponent
43
- */
44
- this.applicationTheme = 'light';
45
- this.radarChartData = {
46
- labels: [],
47
- datasets: [],
48
- };
49
- this.labelPositions = {};
50
- this.labelPositionsVisible = false;
51
- this.focusedLabelIndex = 0;
52
- this.focusedFakeDataPointIndex = 0;
53
- this.loadingChartData = {
54
- labels: [1, 2, 3, 4, 5, 6],
55
- datasets: [],
56
- };
57
- this.loadingChartOptions = {
58
- responsive: true,
59
- layout: {
60
- padding: {
61
- left: 40,
62
- right: 40,
63
- top: 40,
64
- bottom: 40,
65
- },
66
- },
67
- scales: {
68
- r: {
69
- angleLines: {
70
- display: true,
71
- color: Color.GRAYSCALE_30,
72
- },
73
- grid: {
74
- color: () => Color.GRAYSCALE_30,
75
- },
76
- pointLabels: {
77
- display: false,
78
- },
79
- suggestedMin: 0,
80
- suggestedMax: 100,
81
- ticks: {
82
- stepSize: this.stepSize,
83
- display: false,
84
- },
85
- },
86
- },
87
- };
88
- this.translationContext = 'CHARTS.SPIDER.';
89
- }
90
- ngOnInit() {
91
- if (!this.loading) {
92
- this.handleInputErrors();
93
- this.setChartData();
94
- this.setChartOptions();
95
- }
96
- }
97
- handleInputErrors() {
98
- if (!this.spiderChartData.labels || this.spiderChartData.labels.length === 0) {
99
- throw new Error('The "labels" input is required and cannot be empty.');
100
- }
101
- if (!this.spiderChartData.labelDescription || this.spiderChartData.labelDescription.length === 0) {
102
- throw new Error('The "labelDescription" input is required and cannot be empty.');
103
- }
104
- if (this.spiderChartData.labelDescription &&
105
- this.spiderChartData.labelDescription.length !== this.spiderChartData.labels.length) {
106
- throw new Error('The "labelDescription" input must have the same length as "labels".');
107
- }
108
- if (!this.spiderChartData.plotData[0].databaseLabel) {
109
- throw new Error('The "plotData.databaseLabel" input is required.');
110
- }
111
- if (!this.spiderChartData.plotData[0].data || this.spiderChartData.plotData[0].data.length === 0) {
112
- throw new Error('The "plotData.data" input is required and cannot be empty.');
113
- }
114
- if (this.spiderChartData.plotData[0].data.length !== this.spiderChartData.labels.length) {
115
- throw new Error('The "plotData.data" input must have the same length as "labels".');
116
- }
117
- if (this.spiderChartData.plotData.length === 2 &&
118
- this.spiderChartData.labels.length > 0 &&
119
- this.spiderChartData.plotData[1].data &&
120
- this.spiderChartData.plotData[1].data.length !== this.spiderChartData.labels.length) {
121
- throw new Error('The "plotData.data" input must have the same length as "labels".');
122
- }
123
- }
124
- setChartData() {
125
- const datasets = [];
126
- datasets.push({
127
- label: this.spiderChartData.plotData[0].databaseLabel,
128
- data: this.spiderChartData.plotData[0].data,
129
- fill: true,
130
- backgroundColor: 'rgba(212, 16, 170, 0.2)',
131
- borderColor: Color.BRAND_50,
132
- pointBackgroundColor: Color.BRAND_50,
133
- pointBorderColor: Color.TGO_WHITE,
134
- pointHoverBackgroundColor: Color.TGO_WHITE,
135
- pointHoverBorderColor: Color.BRAND_50,
136
- });
137
- if (this.spiderChartData.plotData.length === 2) {
138
- datasets.push({
139
- label: this.spiderChartData.plotData[1].databaseLabel,
140
- data: this.spiderChartData.plotData[1].data,
141
- fill: false,
142
- borderColor: Color.BLACK,
143
- borderDash: [5, 5],
144
- borderWidth: 1,
145
- pointBackgroundColor: Color.BLACK,
146
- pointBorderColor: Color.TGO_WHITE,
147
- pointHoverBackgroundColor: Color.TGO_WHITE,
148
- pointHoverBorderColor: Color.BLACK,
149
- });
150
- }
151
- this.radarChartData = {
152
- labels: this.spiderChartData.labels,
153
- datasets: datasets,
154
- };
155
- }
156
- setChartOptions() {
157
- this.radarChartOptions = {
158
- responsive: true,
159
- elements: {
160
- line: {
161
- borderWidth: 3,
162
- },
163
- },
164
- layout: {
165
- padding: {
166
- left: 40,
167
- right: 40,
168
- top: 40,
169
- bottom: 40,
170
- },
171
- },
172
- scales: {
173
- r: {
174
- angleLines: {
175
- display: true,
176
- color: Color.BLACK,
177
- },
178
- grid: {
179
- color: context => {
180
- if (context.tick.value === 100) {
181
- return Color.BLACK;
182
- }
183
- return Color.GRAYSCALE_30;
184
- },
185
- },
186
- pointLabels: {
187
- color: 'black',
188
- font: {
189
- family: 'Arial',
190
- size: 14,
191
- },
192
- display: false,
193
- },
194
- suggestedMin: 0,
195
- suggestedMax: 100,
196
- ticks: {
197
- stepSize: this.stepSize,
198
- display: false,
199
- },
200
- },
201
- },
202
- plugins: {
203
- legend: {
204
- display: false,
205
- },
206
- },
207
- };
208
- }
209
- ngAfterViewInit() {
210
- if (this.chart?.chart && !this.loading) {
211
- this.logCornerCoordinates(this.chart.chart);
212
- }
213
- }
214
- logCornerCoordinates(chart) {
215
- const scale = chart.scales['r'];
216
- const canvasWidth = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
217
- const canvasHeight = this.size === 'large' ? LargeSpiderChartSize : SmallSpiderChartSize;
218
- // Loop through the labels and calculate the percentage coordinates
219
- this.spiderChartData.labels.forEach((label, index) => {
220
- const position = scale.getPointPositionForValue(index, scale.max);
221
- // Calculate percentage values relative to the canvas size
222
- const xPercent = (position.x / canvasWidth) * 100;
223
- const yPercent = ((canvasHeight - position.y) / canvasHeight) * 100; // Inverting the Y-axis
224
- this.labelPositions[label] = { x: Number(xPercent.toFixed(2)), y: Number(yPercent.toFixed(2)) };
225
- });
226
- this.labelPositionsVisible = true;
227
- }
228
- getCenteredLabelBottomPosition(label, height) {
229
- const position = this.labelPositions[label];
230
- const padding = 7;
231
- if (position.x > 50 || position.x < 50) {
232
- return `calc(${position.y}% - ${height / 2}px)`;
233
- }
234
- else if (position.y < 50) {
235
- return `calc(${position.y}% - ${height}px - ${padding}px)`;
236
- }
237
- else {
238
- return `calc(${position.y}% + ${padding}px)`;
239
- }
240
- }
241
- getCenteredLabelLeftPosition(label, width) {
242
- const position = this.labelPositions[label];
243
- const padding = 15;
244
- if (position.x === 50) {
245
- return `calc(${position.x}% - ${width / 2}px)`;
246
- }
247
- else if (position.x < 50) {
248
- return `calc(${position.x}% - ${width}px - ${padding}px)`;
249
- }
250
- else {
251
- return `calc(${position.x}% + ${padding}px)`;
252
- }
253
- }
254
- onLabelKeyDown(event, index) {
255
- if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
256
- this.focusNextLabel(index);
257
- }
258
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
259
- this.focusPreviousLabel(index);
260
- }
261
- }
262
- focusNextLabel(index) {
263
- const nextIndex = index + 1;
264
- if (nextIndex < this.labelContainers.length) {
265
- this.labelContainers.get(nextIndex)?.nativeElement.focus();
266
- }
267
- else {
268
- this.labelContainers.first?.nativeElement.focus();
269
- }
270
- this.focusedLabelIndex = nextIndex;
271
- }
272
- focusPreviousLabel(index) {
273
- const previousIndex = index - 1;
274
- if (previousIndex >= 0) {
275
- this.labelContainers.get(previousIndex)?.nativeElement.focus();
276
- }
277
- else {
278
- this.labelContainers.last?.nativeElement.focus();
279
- }
280
- this.focusedLabelIndex = previousIndex;
281
- }
282
- onLegendItemKeyDown(event, index) {
283
- if (event.key === 'Enter') {
284
- this.toggleDatasetVisibility(index);
285
- }
286
- else if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
287
- this.focusNextLegendItem(index);
288
- }
289
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
290
- this.focusPreviousLegendItem(index);
291
- }
292
- }
293
- focusNextLegendItem(index) {
294
- const nextIndex = index + 1;
295
- if (nextIndex < this.legendItems.length) {
296
- this.legendItems.get(nextIndex)?.nativeElement.focus();
297
- }
298
- else {
299
- this.legendItems.first?.nativeElement.focus();
300
- }
301
- }
302
- focusPreviousLegendItem(index) {
303
- const previousIndex = index - 1;
304
- if (previousIndex >= 0) {
305
- this.legendItems.get(previousIndex)?.nativeElement.focus();
306
- }
307
- else {
308
- this.legendItems.last?.nativeElement.focus();
309
- }
310
- }
311
- onFakeDataPointsKeyDown(event, index, isSecondary = false) {
312
- if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
313
- this.focusNextFakeDataPoint(index, isSecondary);
314
- this.showTooltipForDataPoint(index + 1 > this.spiderChartData.labels.length ? 0 : index + 1, isSecondary);
315
- }
316
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
317
- this.focusPreviousFakeDataPoint(index, isSecondary);
318
- this.showTooltipForDataPoint(index - 1 < 0 ? this.spiderChartData.labels.length - 1 : index - 1, isSecondary);
319
- }
320
- else if (event.key === 'Tab') {
321
- this.resetActiveElement();
322
- }
323
- }
324
- focusNextFakeDataPoint(index, isSecondary = false) {
325
- const nextIndex = index + 1;
326
- if (nextIndex < this.fakeDataPoints.length) {
327
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
328
- fakeDataPoints.get(nextIndex)?.nativeElement.focus();
329
- }
330
- else {
331
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
332
- fakeDataPoints.first?.nativeElement.focus();
333
- }
334
- if (!isSecondary) {
335
- this.focusedFakeDataPointIndex = nextIndex;
336
- }
337
- }
338
- focusPreviousFakeDataPoint(index, isSecondary = false) {
339
- const previousIndex = index - 1;
340
- if (previousIndex >= 0) {
341
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
342
- fakeDataPoints.get(previousIndex)?.nativeElement.focus();
343
- }
344
- else {
345
- const fakeDataPoints = isSecondary ? this.fakeDataPointsSecondary : this.fakeDataPoints;
346
- fakeDataPoints.last?.nativeElement.focus();
347
- }
348
- if (!isSecondary) {
349
- this.focusedFakeDataPointIndex = previousIndex;
350
- }
351
- }
352
- showTooltipForDataPoint(index, isSecondary = false) {
353
- const chartInstance = this.chart?.chart;
354
- if (!chartInstance)
355
- return;
356
- const activeElement = [{ datasetIndex: isSecondary ? 1 : 0, index }];
357
- const meta = chartInstance.getDatasetMeta(isSecondary ? 1 : 0);
358
- const dataPoint = meta.data[index];
359
- const eventPosition = {
360
- x: dataPoint.x,
361
- y: dataPoint.y,
362
- };
363
- if (!isSecondary) {
364
- this.focusedFakeDataPointIndex = index;
365
- }
366
- chartInstance.tooltip?.setActiveElements(activeElement, eventPosition);
367
- chartInstance.update();
368
- }
369
- resetActiveElement() {
370
- const chartInstance = this.chart?.chart;
371
- if (!chartInstance)
372
- return;
373
- // Clear the active elements to hide the tooltip
374
- chartInstance.tooltip?.setActiveElements([], { x: 0, y: 0 });
375
- chartInstance.update();
376
- }
377
- toggleDatasetVisibility(datasetIndex) {
378
- const chartInstance = this.chart?.chart;
379
- if (!chartInstance)
380
- return;
381
- const dataset = chartInstance.data.datasets[datasetIndex];
382
- dataset.hidden = !dataset.hidden;
383
- chartInstance.update();
384
- }
385
- isDatasetVisible(datasetIndex) {
386
- const chartInstance = this.chart?.chart;
387
- if (!chartInstance)
388
- return;
389
- return !chartInstance.data.datasets[datasetIndex].hidden;
390
- }
391
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
392
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SpiderChartComponent, selector: "ui-spider-chart", inputs: { size: "size", spiderChartData: "spiderChartData", stepSize: "stepSize", ariaLabel: "ariaLabel", loading: "loading", applicationTheme: "applicationTheme" }, viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }, { propertyName: "labelContainers", predicate: ["labelContainer"], descendants: true }, { propertyName: "fakeDataPoints", predicate: ["fakeDataPoints"], descendants: true }, { propertyName: "fakeDataPointsSecondary", predicate: ["fakeDataPointsSecondary"], descendants: true }, { propertyName: "legendItems", predicate: ["legendItem"], descendants: true }], ngImport: i0, template: "<div class=\"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]=\"label + ': ' + spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"label + ': ' + spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n <div class=\"label\" #labelElement [style.max-width]=\"size === 'large' ? '150px' : '100px'\"\n [class.two-lines]=\"label.length > 20 && size === 'large' && spiderChartData.labels.length < 9\">\n {{ label }}\n </div>\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}.container{display:flex;flex-direction:column;align-items:center}.container .spacing-container{padding:40px 140px}.container .spacing-container.small-spacing{padding:0 80px}.container .spacing-container .chart-container{position:relative}.container .spacing-container .chart-container .overlay-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.container .spacing-container .chart-container .overlay-container .label-container{display:flex;gap:4px;position:absolute;pointer-events:all;cursor:pointer}.container .spacing-container .chart-container .overlay-container .label-container .fake-data-points{visibility:hidden}.container .spacing-container .chart-container .overlay-container .label-container:focus{outline:none}.container .spacing-container .chart-container .overlay-container .label-container .label{border-bottom:1px dashed #D3D3D3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.container .spacing-container .chart-container .overlay-container .label-container .label.two-lines{width:150px;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2}.container .spacing-container .chart-container .overlay-container .label-container .value{font-weight:700}.container .legend-container{display:flex;gap:16px;cursor:pointer}.container .legend-container .legend-item{display:flex;align-items:center;gap:8px}.container .legend-container .legend-item .legend-line{display:inline-block;width:11px;height:4px}.container .legend-container .legend-item .solid-line{background-color:#d410aa}.container .legend-container .legend-item .dashed-line{border-top:2px dashed #242424}\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]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.SpinnerComponent, selector: "ui-spinner", inputs: ["size", "isLoader", "applicationTheme"] }, { kind: "pipe", type: i5.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
393
- }
394
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderChartComponent, decorators: [{
395
- type: Component,
396
- args: [{ selector: 'ui-spider-chart', template: "<div class=\"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]=\"label + ': ' + spiderChartData.labelDescription[$index]\"\n [tabindex]=\"$index === 0 ? '0' : '-1'\"\n (keydown)=\"onLabelKeyDown($event, $index)\"\n [attr.aria-label]=\"label + ': ' + spiderChartData.labelDescription[$index]\"\n [style.left]=\"getCenteredLabelLeftPosition(label, labelContainer.offsetWidth)\"\n [style.bottom]=\"getCenteredLabelBottomPosition(label, labelContainer.offsetHeight)\">\n <div class=\"label\" #labelElement [style.max-width]=\"size === 'large' ? '150px' : '100px'\"\n [class.two-lines]=\"label.length > 20 && size === 'large' && spiderChartData.labels.length < 9\">\n {{ label }}\n </div>\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}.container{display:flex;flex-direction:column;align-items:center}.container .spacing-container{padding:40px 140px}.container .spacing-container.small-spacing{padding:0 80px}.container .spacing-container .chart-container{position:relative}.container .spacing-container .chart-container .overlay-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.container .spacing-container .chart-container .overlay-container .label-container{display:flex;gap:4px;position:absolute;pointer-events:all;cursor:pointer}.container .spacing-container .chart-container .overlay-container .label-container .fake-data-points{visibility:hidden}.container .spacing-container .chart-container .overlay-container .label-container:focus{outline:none}.container .spacing-container .chart-container .overlay-container .label-container .label{border-bottom:1px dashed #D3D3D3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.container .spacing-container .chart-container .overlay-container .label-container .label.two-lines{width:150px;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2}.container .spacing-container .chart-container .overlay-container .label-container .value{font-weight:700}.container .legend-container{display:flex;gap:16px;cursor:pointer}.container .legend-container .legend-item{display:flex;align-items:center;gap:8px}.container .legend-container .legend-item .legend-line{display:inline-block;width:11px;height:4px}.container .legend-container .legend-item .solid-line{background-color:#d410aa}.container .legend-container .legend-item .dashed-line{border-top:2px dashed #242424}\n"] }]
397
- }], propDecorators: { size: [{
398
- type: Input
399
- }], spiderChartData: [{
400
- type: Input
401
- }], stepSize: [{
402
- type: Input
403
- }], ariaLabel: [{
404
- type: Input
405
- }], loading: [{
406
- type: Input
407
- }], applicationTheme: [{
408
- type: Input
409
- }], chart: [{
410
- type: ViewChild,
411
- args: [BaseChartDirective]
412
- }], labelContainers: [{
413
- type: ViewChildren,
414
- args: ['labelContainer']
415
- }], fakeDataPoints: [{
416
- type: ViewChildren,
417
- args: ['fakeDataPoints']
418
- }], fakeDataPointsSecondary: [{
419
- type: ViewChildren,
420
- args: ['fakeDataPointsSecondary']
421
- }], legendItems: [{
422
- type: ViewChildren,
423
- args: ['legendItem']
424
- }] } });
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9zcGlkZXItY2hhcnQvc3BpZGVyLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUlMLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBR3BILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7QUFTaEQsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1FOzs7O1dBSUc7UUFDTSxTQUFJLEdBQW9CLE9BQU8sQ0FBQztRQVN6Qzs7OztXQUlHO1FBQ00sYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUUvQjs7OztXQUlHO1FBQ00sY0FBUyxHQUFXLHVEQUF1RCxDQUFDO1FBRXJGOzs7O1dBSUc7UUFDTSxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRWxDOzs7Ozs7V0FNRztRQUNNLHFCQUFnQixHQUFxQixPQUFPLENBQUM7UUFRdEQsbUJBQWMsR0FBdUI7WUFDbkMsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFFRixtQkFBYyxHQUFnRCxFQUFFLENBQUM7UUFDakUsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUM5Qiw4QkFBeUIsR0FB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QUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUUzQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUMzQixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNELENBQUM7K0dBMVpVLG9CQUFvQjttR0FBcEIsb0JBQW9CLG9RQTZDcEIsa0JBQWtCLG9aQ3JFL0IsZzBIQXFGQTs7NEZEN0RhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7OEJBVWxCLElBQUk7c0JBQVosS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUV5QixLQUFLO3NCQUFuQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDRyxlQUFlO3NCQUE5QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDRSxjQUFjO3NCQUE3QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDVyx1QkFBdUI7c0JBQS9ELFlBQVk7dUJBQUMseUJBQXlCO2dCQUNYLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXJnZVNwaWRlckNoYXJ0U2l6ZSwgU21hbGxTcGlkZXJDaGFydFNpemUsIFNwaWRlckNoYXJ0RGF0YSwgU3BpZGVyQ2hhcnRTaXplIH0gZnJvbSAnLi9zcGlkZXItY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi10aGVtZS5tb2RlbCc7XG5pbXBvcnQgeyBDaGFydCwgQ2hhcnREYXRhLCBDaGFydE9wdGlvbnMgfSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gJy4vLi4vLi4vbW9kZWxzL2NvbG9ycy5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQ2hhcnREaXJlY3RpdmUgfSBmcm9tICduZzItY2hhcnRzJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL2xvY2FsaXphdGlvbi9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9jYWxpemF0aW9uL2xhbmd1YWdlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktc3BpZGVyLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NwaWRlci1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwaWRlci1jaGFydC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTcGlkZXJDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgc3BpZGVyIGNoYXJ0LlxuICAgKiBAdHlwZSB7U3BpZGVyQ2hhcnRTaXplfVxuICAgKiBAbWVtYmVyb2YgU3BpZGVyQ2hhcnRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6IFNwaWRlckNoYXJ0U2l6ZSA9ICdsYXJnZSc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBzcGlkZXIgY2hhcnQuXG4gICAqIEB0eXBlIHtTcGlkZXJDaGFydERhdGF9XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc3BpZGVyQ2hhcnREYXRhOiBTcGlkZXJDaGFydERhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGVwIHNpemUgZm9yIHRoZSBzcGlkZXIgY2hhcnQuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJvZiBTcGlkZXJDaGFydENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc3RlcFNpemU6IG51bWJlciA9IDIwO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJpYSBsYWJlbCBmb3IgdGhlIHNwaWRlciBjaGFydC5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIFNwaWRlckNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9ICdSYWRhciBjaGFydC4gUHJlc3MgdGFiIHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIGNoYXJ0Lic7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNwaWRlciBjaGFydCBpcyBsb2FkaW5nLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIFNwaWRlckNoYXJ0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqXG4gICAqIERlZmluZXMgdGhlIGFwcGxpY2F0aW9uIHRoZW1lXG4gICAqXG4gICAqIEB0eXBlIHtBcHBsaWNhdGlvblRoZW1lfVxuICAgKiBAbWVtYmVyb2YgU3Bpbm5lckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgQFZpZXdDaGlsZChCYXNlQ2hhcnREaXJlY3RpdmUpIGNoYXJ0OiBCYXNlQ2hhcnREaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGRyZW4oJ2xhYmVsQ29udGFpbmVyJykgbGFiZWxDb250YWluZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2Zha2VEYXRhUG9pbnRzJykgZmFrZURhdGFQb2ludHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignZmFrZURhdGFQb2ludHNTZWNvbmRhcnknKSBmYWtlRGF0YVBvaW50c1NlY29uZGFyeTogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkcmVuKCdsZWdlbmRJdGVtJykgbGVnZW5kSXRlbXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICByYWRhckNoYXJ0RGF0YTogQ2hhcnREYXRhPCdyYWRhcic+ID0ge1xuICAgIGxhYmVsczogW10sXG4gICAgZGF0YXNldHM6IFtdLFxuICB9O1xuICByYWRhckNoYXJ0T3B0aW9uczogQ2hhcnRPcHRpb25zPCdyYWRhcic+O1xuICBsYWJlbFBvc2l0aW9uczogeyBba2V5OiBzdHJpbmddOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfSA9IHt9O1xuICBsYWJlbFBvc2l0aW9uc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9jdXNlZExhYmVsSW5kZXg6IG51bWJlciA9IDA7XG4gIGZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXg6IG51bWJlciA9IDA7XG4gIGxvYWRpbmdDaGFydERhdGE6IENoYXJ0RGF0YTwncmFkYXInPiA9IHtcbiAgICBsYWJlbHM6IFsxLCAyLCAzLCA0LCA1LCA2XSxcbiAgICBkYXRhc2V0czogW10sXG4gIH07XG4gIGxvYWRpbmdDaGFydE9wdGlvbnM6IENoYXJ0T3B0aW9uczwncmFkYXInPiA9IHtcbiAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgIGxheW91dDoge1xuICAgICAgcGFkZGluZzoge1xuICAgICAgICBsZWZ0OiA0MCxcbiAgICAgICAgcmlnaHQ6IDQwLFxuICAgICAgICB0b3A6IDQwLFxuICAgICAgICBib3R0b206IDQwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNjYWxlczoge1xuICAgICAgcjoge1xuICAgICAgICBhbmdsZUxpbmVzOiB7XG4gICAgICAgICAgZGlzcGxheTogdHJ1ZSxcbiAgICAgICAgICBjb2xvcjogQ29sb3IuR1JBWVNDQUxFXzMwLFxuICAgICAgICB9LFxuICAgICAgICBncmlkOiB7XG4gICAgICAgICAgY29sb3I6ICgpID0+IENvbG9yLkdSQVlTQ0FMRV8zMCxcbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRMYWJlbHM6IHtcbiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3VnZ2VzdGVkTWluOiAwLFxuICAgICAgICBzdWdnZXN0ZWRNYXg6IDEwMCxcbiAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICBzdGVwU2l6ZTogdGhpcy5zdGVwU2l6ZSxcbiAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQ29udGV4dCA9ICdDSEFSVFMuU1BJREVSLic7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRFcnJvcnMoKTtcbiAgICAgIHRoaXMuc2V0Q2hhcnREYXRhKCk7XG4gICAgICB0aGlzLnNldENoYXJ0T3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5wdXRFcnJvcnMoKSB7XG4gICAgaWYgKCF0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMgfHwgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJsYWJlbHNcIiBpbnB1dCBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24gfHwgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxEZXNjcmlwdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibGFiZWxEZXNjcmlwdGlvblwiIGlucHV0IGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24gJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb24ubGVuZ3RoICE9PSB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcImxhYmVsRGVzY3JpcHRpb25cIiBpbnB1dCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIFwibGFiZWxzXCIuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YWJhc2VMYWJlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhYmFzZUxhYmVsXCIgaW5wdXQgaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YSB8fCB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJwbG90RGF0YS5kYXRhXCIgaW5wdXQgaXMgcmVxdWlyZWQgYW5kIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGEubGVuZ3RoICE9PSB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcInBsb3REYXRhLmRhdGFcIiBpbnB1dCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIFwibGFiZWxzXCIuJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgdGhpcy5zcGlkZXJDaGFydERhdGEubGFiZWxzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGEgJiZcbiAgICAgIHRoaXMuc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzFdLmRhdGEubGVuZ3RoICE9PSB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcInBsb3REYXRhLmRhdGFcIiBpbnB1dCBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIFwibGFiZWxzXCIuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGFydERhdGEoKSB7XG4gICAgY29uc3QgZGF0YXNldHMgPSBbXTtcbiAgICBkYXRhc2V0cy5wdXNoKHtcbiAgICAgIGxhYmVsOiB0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YVswXS5kYXRhYmFzZUxhYmVsLFxuICAgICAgZGF0YTogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMF0uZGF0YSxcbiAgICAgIGZpbGw6IHRydWUsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDIxMiwgMTYsIDE3MCwgMC4yKScsXG4gICAgICBib3JkZXJDb2xvcjogQ29sb3IuQlJBTkRfNTAsXG4gICAgICBwb2ludEJhY2tncm91bmRDb2xvcjogQ29sb3IuQlJBTkRfNTAsXG4gICAgICBwb2ludEJvcmRlckNvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICBwb2ludEhvdmVyQmFja2dyb3VuZENvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICBwb2ludEhvdmVyQm9yZGVyQ29sb3I6IENvbG9yLkJSQU5EXzUwLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnNwaWRlckNoYXJ0RGF0YS5wbG90RGF0YS5sZW5ndGggPT09IDIpIHtcbiAgICAgIGRhdGFzZXRzLnB1c2goe1xuICAgICAgICBsYWJlbDogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMV0uZGF0YWJhc2VMYWJlbCxcbiAgICAgICAgZGF0YTogdGhpcy5zcGlkZXJDaGFydERhdGEucGxvdERhdGFbMV0uZGF0YSxcbiAgICAgICAgZmlsbDogZmFsc2UsXG4gICAgICAgIGJvcmRlckNvbG9yOiBDb2xvci5CTEFDSyxcbiAgICAgICAgYm9yZGVyRGFzaDogWzUsIDVdLFxuICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IENvbG9yLkJMQUNLLFxuICAgICAgICBwb2ludEJvcmRlckNvbG9yOiBDb2xvci5UR09fV0hJVEUsXG4gICAgICAgIHBvaW50SG92ZXJCYWNrZ3JvdW5kQ29sb3I6IENvbG9yLlRHT19XSElURSxcbiAgICAgICAgcG9pbnRIb3ZlckJvcmRlckNvbG9yOiBDb2xvci5CTEFDSyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJhZGFyQ2hhcnREYXRhID0ge1xuICAgICAgbGFiZWxzOiB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMsXG4gICAgICBkYXRhc2V0czogZGF0YXNldHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hhcnRPcHRpb25zKCkge1xuICAgIHRoaXMucmFkYXJDaGFydE9wdGlvbnMgPSB7XG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgbGluZToge1xuICAgICAgICAgIGJvcmRlcldpZHRoOiAzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgbGVmdDogNDAsXG4gICAgICAgICAgcmlnaHQ6IDQwLFxuICAgICAgICAgIHRvcDogNDAsXG4gICAgICAgICAgYm90dG9tOiA0MCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2FsZXM6IHtcbiAgICAgICAgcjoge1xuICAgICAgICAgIGFuZ2xlTGluZXM6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICBjb2xvcjogQ29sb3IuQkxBQ0ssXG4gICAgICAgICAgfSxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICBjb2xvcjogY29udGV4dCA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb250ZXh0LnRpY2sudmFsdWUgPT09IDEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBDb2xvci5CTEFDSztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gQ29sb3IuR1JBWVNDQUxFXzMwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBvaW50TGFiZWxzOiB7XG4gICAgICAgICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICAgICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgICAgZmFtaWx5OiAnQXJpYWwnLFxuICAgICAgICAgICAgICBzaXplOiAxNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1Z2dlc3RlZE1pbjogMCxcbiAgICAgICAgICBzdWdnZXN0ZWRNYXg6IDEwMCxcbiAgICAgICAgICB0aWNrczoge1xuICAgICAgICAgICAgc3RlcFNpemU6IHRoaXMuc3RlcFNpemUsXG4gICAgICAgICAgICBkaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgZGlzcGxheTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhcnQ/LmNoYXJ0ICYmICF0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9nQ29ybmVyQ29vcmRpbmF0ZXModGhpcy5jaGFydC5jaGFydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2dDb3JuZXJDb29yZGluYXRlcyhjaGFydDogQ2hhcnQpIHtcbiAgICBjb25zdCBzY2FsZSA9IGNoYXJ0LnNjYWxlc1snciddIGFzIGFueTtcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJyA/IExhcmdlU3BpZGVyQ2hhcnRTaXplIDogU21hbGxTcGlkZXJDaGFydFNpemU7XG4gICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5zaXplID09PSAnbGFyZ2UnID8gTGFyZ2VTcGlkZXJDaGFydFNpemUgOiBTbWFsbFNwaWRlckNoYXJ0U2l6ZTtcblxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgbGFiZWxzIGFuZCBjYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2UgY29vcmRpbmF0ZXNcbiAgICB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMuZm9yRWFjaCgobGFiZWwsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHNjYWxlLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShpbmRleCwgc2NhbGUubWF4KTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBjYW52YXMgc2l6ZVxuICAgICAgY29uc3QgeFBlcmNlbnQgPSAocG9zaXRpb24ueCAvIGNhbnZhc1dpZHRoKSAqIDEwMDtcbiAgICAgIGNvbnN0IHlQZXJjZW50ID0gKChjYW52YXNIZWlnaHQgLSBwb3NpdGlvbi55KSAvIGNhbnZhc0hlaWdodCkgKiAxMDA7IC8vIEludmVydGluZyB0aGUgWS1heGlzXG5cbiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbnNbbGFiZWxdID0geyB4OiBOdW1iZXIoeFBlcmNlbnQudG9GaXhlZCgyKSksIHk6IE51bWJlcih5UGVyY2VudC50b0ZpeGVkKDIpKSB9O1xuICAgIH0pO1xuICAgIHRoaXMubGFiZWxQb3NpdGlvbnNWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGdldENlbnRlcmVkTGFiZWxCb3R0b21Qb3NpdGlvbihsYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5sYWJlbFBvc2l0aW9uc1tsYWJlbF07XG4gICAgY29uc3QgcGFkZGluZyA9IDc7XG4gICAgaWYgKHBvc2l0aW9uLnggPiA1MCB8fCBwb3NpdGlvbi54IDwgNTApIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnl9JSAtICR7aGVpZ2h0IC8gMn1weClgO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24ueSA8IDUwKSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi55fSUgLSAke2hlaWdodH1weCAtICR7cGFkZGluZ31weClgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNhbGMoJHtwb3NpdGlvbi55fSUgKyAke3BhZGRpbmd9cHgpYDtcbiAgICB9XG4gIH1cblxuICBnZXRDZW50ZXJlZExhYmVsTGVmdFBvc2l0aW9uKGxhYmVsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMubGFiZWxQb3NpdGlvbnNbbGFiZWxdO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAxNTtcbiAgICBpZiAocG9zaXRpb24ueCA9PT0gNTApIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnh9JSAtICR7d2lkdGggLyAyfXB4KWA7XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbi54IDwgNTApIHtcbiAgICAgIHJldHVybiBgY2FsYygke3Bvc2l0aW9uLnh9JSAtICR7d2lkdGh9cHggLSAke3BhZGRpbmd9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBjYWxjKCR7cG9zaXRpb24ueH0lICsgJHtwYWRkaW5nfXB4KWA7XG4gICAgfVxuICB9XG5cbiAgb25MYWJlbEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5mb2N1c05leHRMYWJlbChpbmRleCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNMYWJlbChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c05leHRMYWJlbChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyAxO1xuICAgIGlmIChuZXh0SW5kZXggPCB0aGlzLmxhYmVsQ29udGFpbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGFiZWxDb250YWluZXJzLmdldChuZXh0SW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxDb250YWluZXJzLmZpcnN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuZm9jdXNlZExhYmVsSW5kZXggPSBuZXh0SW5kZXg7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNMYWJlbChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9IGluZGV4IC0gMTtcbiAgICBpZiAocHJldmlvdXNJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmxhYmVsQ29udGFpbmVycy5nZXQocHJldmlvdXNJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYWJlbENvbnRhaW5lcnMubGFzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzZWRMYWJlbEluZGV4ID0gcHJldmlvdXNJbmRleDtcbiAgfVxuXG4gIG9uTGVnZW5kSXRlbUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICB0aGlzLnRvZ2dsZURhdGFzZXRWaXNpYmlsaXR5KGluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0TGVnZW5kSXRlbShpbmRleCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNMZWdlbmRJdGVtKGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTmV4dExlZ2VuZEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAobmV4dEluZGV4IDwgdGhpcy5sZWdlbmRJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGVnZW5kSXRlbXMuZ2V0KG5leHRJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWdlbmRJdGVtcy5maXJzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNQcmV2aW91c0xlZ2VuZEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBpbmRleCAtIDE7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5sZWdlbmRJdGVtcy5nZXQocHJldmlvdXNJbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWdlbmRJdGVtcy5sYXN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25GYWtlRGF0YVBvaW50c0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5mb2N1c05leHRGYWtlRGF0YVBvaW50KGluZGV4LCBpc1NlY29uZGFyeSk7XG4gICAgICB0aGlzLnNob3dUb29sdGlwRm9yRGF0YVBvaW50KGluZGV4ICsgMSA+IHRoaXMuc3BpZGVyQ2hhcnREYXRhLmxhYmVscy5sZW5ndGggPyAwIDogaW5kZXggKyAxLCBpc1NlY29uZGFyeSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNGYWtlRGF0YVBvaW50KGluZGV4LCBpc1NlY29uZGFyeSk7XG4gICAgICB0aGlzLnNob3dUb29sdGlwRm9yRGF0YVBvaW50KGluZGV4IC0gMSA8IDAgPyB0aGlzLnNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoIC0gMSA6IGluZGV4IC0gMSwgaXNTZWNvbmRhcnkpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTmV4dEZha2VEYXRhUG9pbnQoaW5kZXg6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAobmV4dEluZGV4IDwgdGhpcy5mYWtlRGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZha2VEYXRhUG9pbnRzID0gaXNTZWNvbmRhcnkgPyB0aGlzLmZha2VEYXRhUG9pbnRzU2Vjb25kYXJ5IDogdGhpcy5mYWtlRGF0YVBvaW50cztcbiAgICAgIGZha2VEYXRhUG9pbnRzLmdldChuZXh0SW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZha2VEYXRhUG9pbnRzID0gaXNTZWNvbmRhcnkgPyB0aGlzLmZha2VEYXRhUG9pbnRzU2Vjb25kYXJ5IDogdGhpcy5mYWtlRGF0YVBvaW50cztcbiAgICAgIGZha2VEYXRhUG9pbnRzLmZpcnN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICghaXNTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEZha2VEYXRhUG9pbnRJbmRleCA9IG5leHRJbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNGYWtlRGF0YVBvaW50KGluZGV4OiBudW1iZXIsIGlzU2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW5kZXggLSAxO1xuICAgIGlmIChwcmV2aW91c0luZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGZha2VEYXRhUG9pbnRzID0gaXNTZWNvbmRhcnkgPyB0aGlzLmZha2VEYXRhUG9pbnRzU2Vjb25kYXJ5IDogdGhpcy5mYWtlRGF0YVBvaW50cztcbiAgICAgIGZha2VEYXRhUG9pbnRzLmdldChwcmV2aW91c0luZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWtlRGF0YVBvaW50cyA9IGlzU2Vjb25kYXJ5ID8gdGhpcy5mYWtlRGF0YVBvaW50c1NlY29uZGFyeSA6IHRoaXMuZmFrZURhdGFQb2ludHM7XG4gICAgICBmYWtlRGF0YVBvaW50cy5sYXN0Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICghaXNTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEZha2VEYXRhUG9pbnRJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgc2hvd1Rvb2x0aXBGb3JEYXRhUG9pbnQoaW5kZXg6IG51bWJlciwgaXNTZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGNoYXJ0SW5zdGFuY2UgPSB0aGlzLmNoYXJ0Py5jaGFydDtcbiAgICBpZiAoIWNoYXJ0SW5zdGFuY2UpIHJldHVybjtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gW3sgZGF0YXNldEluZGV4OiBpc1NlY29uZGFyeSA/IDEgOiAwLCBpbmRleCB9XTtcbiAgICBjb25zdCBtZXRhID0gY2hhcnRJbnN0YW5jZS5nZXREYXRhc2V0TWV0YShpc1NlY29uZGFyeSA/IDEgOiAwKTtcbiAgICBjb25zdCBkYXRhUG9pbnQgPSBtZXRhLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGV2ZW50UG9zaXRpb24gPSB7XG4gICAgICB4OiBkYXRhUG9pbnQueCxcbiAgICAgIHk6IGRhdGFQb2ludC55LFxuICAgIH07XG4gICAgaWYgKCFpc1NlY29uZGFyeSkge1xuICAgICAgdGhpcy5mb2N1c2VkRmFrZURhdGFQb2ludEluZGV4ID0gaW5kZXg7XG4gICAgfVxuXG4gICAgY2hhcnRJbnN0YW5jZS50b29sdGlwPy5zZXRBY3RpdmVFbGVtZW50cyhhY3RpdmVFbGVtZW50LCBldmVudFBvc2l0aW9uKTtcblxuICAgIGNoYXJ0SW5zdGFuY2UudXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0QWN0aXZlRWxlbWVudCgpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG5cbiAgICAvLyBDbGVhciB0aGUgYWN0aXZlIGVsZW1lbnRzIHRvIGhpZGUgdGhlIHRvb2x0aXBcbiAgICBjaGFydEluc3RhbmNlLnRvb2x0aXA/LnNldEFjdGl2ZUVsZW1lbnRzKFtdLCB7IHg6IDAsIHk6IDAgfSk7XG5cbiAgICBjaGFydEluc3RhbmNlLnVwZGF0ZSgpO1xuICB9XG5cbiAgdG9nZ2xlRGF0YXNldFZpc2liaWxpdHkoZGF0YXNldEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG5cbiAgICBjb25zdCBkYXRhc2V0ID0gY2hhcnRJbnN0YW5jZS5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF07XG4gICAgZGF0YXNldC5oaWRkZW4gPSAhZGF0YXNldC5oaWRkZW47XG4gICAgY2hhcnRJbnN0YW5jZS51cGRhdGUoKTtcbiAgfVxuXG4gIGlzRGF0YXNldFZpc2libGUoZGF0YXNldEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjaGFydEluc3RhbmNlID0gdGhpcy5jaGFydD8uY2hhcnQ7XG4gICAgaWYgKCFjaGFydEluc3RhbmNlKSByZXR1cm47XG4gICAgcmV0dXJuICFjaGFydEluc3RhbmNlLmRhdGEuZGF0YXNldHNbZGF0YXNldEluZGV4XS5oaWRkZW47XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIlxuICB0YWJpbmRleD1cIjBcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiPlxuICA8ZGl2IGNsYXNzPVwic3BhY2luZy1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsnc21hbGwtc3BhY2luZyc6IHJhZGFyQ2hhcnREYXRhLmxhYmVscyAmJiByYWRhckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoICUgMiA9PT0gMSAmJiAhbG9hZGluZ31cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJzaXplID09PSAnbGFyZ2UnID8gJzI4MHB4JyA6ICcyMDBweCdcIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJzaXplID09PSAnbGFyZ2UnID8gJzI4MHB4JyA6ICcyMDBweCdcIj5cbiAgICAgIEBpZiAoIWxvYWRpbmcpIHtcbiAgICAgICAgPGNhbnZhc1xuICAgICAgICAgIGJhc2VDaGFydFxuICAgICAgICAgIFtkYXRhXT1cInJhZGFyQ2hhcnREYXRhXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJyYWRhckNoYXJ0T3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cInJhZGFyXCJcbiAgICAgICAgICBjbGFzcz1cImNoYXJ0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2NhbnZhcz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8Y2FudmFzXG4gICAgICAgICAgYmFzZUNoYXJ0XG4gICAgICAgICAgW2RhdGFdPVwibG9hZGluZ0NoYXJ0RGF0YVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwibG9hZGluZ0NoYXJ0T3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cInJhZGFyXCJcbiAgICAgICAgICBjbGFzcz1cImNoYXJ0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2NhbnZhcz5cbiAgICAgICAgPHVpLXNwaW5uZXI+PC91aS1zcGlubmVyPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGxhYmVsUG9zaXRpb25zVmlzaWJsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAobGFiZWwgb2Ygc3BpZGVyQ2hhcnREYXRhLmxhYmVsczsgdHJhY2sgbGFiZWwpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250YWluZXJcIiAjbGFiZWxDb250YWluZXJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibGFiZWwgKyAnOiAnICsgc3BpZGVyQ2hhcnREYXRhLmxhYmVsRGVzY3JpcHRpb25bJGluZGV4XVwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCIkaW5kZXggPT09IDAgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25MYWJlbEtleURvd24oJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCArICc6ICcgKyBzcGlkZXJDaGFydERhdGEubGFiZWxEZXNjcmlwdGlvblskaW5kZXhdXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnRdPVwiZ2V0Q2VudGVyZWRMYWJlbExlZnRQb3NpdGlvbihsYWJlbCwgbGFiZWxDb250YWluZXIub2Zmc2V0V2lkdGgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbV09XCJnZXRDZW50ZXJlZExhYmVsQm90dG9tUG9zaXRpb24obGFiZWwsIGxhYmVsQ29udGFpbmVyLm9mZnNldEhlaWdodClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgI2xhYmVsRWxlbWVudCBbc3R5bGUubWF4LXdpZHRoXT1cInNpemUgPT09ICdsYXJnZScgPyAnMTUwcHgnIDogJzEwMHB4J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnR3by1saW5lc109XCJsYWJlbC5sZW5ndGggPiAyMCAmJiBzaXplID09PSAnbGFyZ2UnICYmIHNwaWRlckNoYXJ0RGF0YS5sYWJlbHMubGVuZ3RoIDwgOVwiPlxuICAgICAgICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgc3BpZGVyQ2hhcnREYXRhLnBsb3REYXRhWzBdLmRhdGFbJGluZGV4XSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYWtlLWRhdGEtcG9pbnRzXCIgI2Zha2VEYXRhUG9pbnRzXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJmb2N1c2VkTGFiZWxJbmRleCA9PT0gJGluZGV4ID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCIkaW5kZXggPT09IGZvY3VzZWRMYWJlbEluZGV4ID8gc2hvd1Rvb2x0aXBGb3JEYXRhUG9pbnQoJGluZGV4KSA6IG51bGxcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkZha2VEYXRhUG9pbnRzS2V5RG93bigkZXZlbnQsICRpbmRleClcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAocmFkYXJDaGFydERhdGEuZGF0YXNldHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZha2UtZGF0YS1wb2ludHMtc2Vjb25kYXJ5XCIgI2Zha2VEYXRhUG9pbnRzU2Vjb25kYXJ5XG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPT09ICRpbmRleCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCIkaW5kZXggPT09IGZvY3VzZWRGYWtlRGF0YVBvaW50SW5kZXggPyBzaG93VG9vbHRpcEZvckRhdGFQb2ludCgkaW5kZXgsIHRydWUpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25GYWtlRGF0YVBvaW50c0tleURvd24oJGV2ZW50LCAkaW5kZXgsIHRydWUpXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmIChyYWRhckNoYXJ0RGF0YS5kYXRhc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGRhdGFzZXQgb2YgcmFkYXJDaGFydERhdGEuZGF0YXNldHM7IHRyYWNrIGRhdGFzZXQubGFiZWwpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGF0YXNldFZpc2liaWxpdHkoJGluZGV4KVwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cIiRpbmRleCA9PT0gMCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJpc0RhdGFzZXRWaXNpYmxlKCRpbmRleCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID9cbiAgICAgICAgICAoKHRyYW5zbGF0aW9uQ29udGV4dCArICdEQVRBU0VUX1ZJU0lCTEUnKSB8IHVpVHJhbnNsYXRlIDogeyBkYXRhc2V0OiBkYXRhc2V0LmxhYmVsIH0gfCBhc3luYykgOlxuICAgICAgICAgICgodHJhbnNsYXRpb25Db250ZXh0ICsgJ0RBVEFTRVRfSElEREVOJykgfCB1aVRyYW5zbGF0ZSA6IHsgZGF0YXNldDogZGF0YXNldC5sYWJlbCB9IHwgYXN5bmMpXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvbkxlZ2VuZEl0ZW1LZXlEb3duKCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgI2xlZ2VuZEl0ZW0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGluZVwiIFtuZ0NsYXNzXT1cInsnc29saWQtbGluZSc6ICRpbmRleCA9PT0gMCwgJ2Rhc2hlZC1saW5lJzogJGluZGV4ID09PSAxfVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1sYWJlbFwiIFtzdHlsZS50ZXh0LWRlY29yYXRpb25dPVwiaXNEYXRhc2V0VmlzaWJsZSgkaW5kZXgpID8gJ25vbmUnIDogJ2xpbmUtdGhyb3VnaCdcIj5cbiAgICAgICAgICAgIHt7IGRhdGFzZXQubGFiZWwgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuIl19
@@ -1,4 +0,0 @@
1
- // These are the sizes of the canvas, not the chart itself. It includes 40px of padding on all sides.
2
- export const SmallSpiderChartSize = 200;
3
- export const LargeSpiderChartSize = 280;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVyLWNoYXJ0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL3NwaWRlci1jaGFydC9zcGlkZXItY2hhcnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EscUdBQXFHO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFXLEdBQUcsQ0FBQztBQUNoRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBVyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTcGlkZXJDaGFydFNpemUgPSAnbGFyZ2UnIHwgJ3NtYWxsJztcbi8vIFRoZXNlIGFyZSB0aGUgc2l6ZXMgb2YgdGhlIGNhbnZhcywgbm90IHRoZSBjaGFydCBpdHNlbGYuIEl0IGluY2x1ZGVzIDQwcHggb2YgcGFkZGluZyBvbiBhbGwgc2lkZXMuXG5leHBvcnQgY29uc3QgU21hbGxTcGlkZXJDaGFydFNpemU6IG51bWJlciA9IDIwMDtcbmV4cG9ydCBjb25zdCBMYXJnZVNwaWRlckNoYXJ0U2l6ZTogbnVtYmVyID0gMjgwO1xuZXhwb3J0IHR5cGUgU3BpZGVyQ2hhcnREYXRhID0ge1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBsYWJlbERlc2NyaXB0aW9uOiBzdHJpbmdbXTtcbiAgcGxvdERhdGE6IFtQbG90RGF0YSwgUGxvdERhdGFdIHwgW1Bsb3REYXRhXTsgLy8gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBtYXggMiBkYXRhc2V0cy5cbn07XG5leHBvcnQgdHlwZSBQbG90RGF0YSA9IHtcbiAgZGF0YWJhc2VMYWJlbDogc3RyaW5nO1xuICBkYXRhOiBudW1iZXJbXTtcbn07XG4iXX0=