@testgorilla/tgo-ui 11.22.3 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +335 -229
  2. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -1
  3. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +547 -465
  4. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
  5. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs +160 -75
  6. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs.map +1 -1
  7. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +678 -278
  8. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
  9. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +337 -274
  10. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
  11. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +351 -192
  12. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
  13. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +1950 -960
  14. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
  15. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1206 -1044
  16. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
  17. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +328 -182
  18. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
  19. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +383 -203
  20. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
  21. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +553 -261
  22. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
  23. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +709 -739
  24. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
  25. package/fesm2022/testgorilla-tgo-ui-components-card.mjs +219 -184
  26. package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -1
  27. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +515 -458
  28. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -1
  29. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +423 -162
  30. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
  31. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +10784 -10996
  32. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
  33. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +810 -533
  34. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs +473 -116
  36. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs.map +1 -1
  37. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +1149 -540
  38. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
  39. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +148 -84
  40. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -1
  41. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +239 -142
  42. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -1
  43. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +599 -467
  44. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
  45. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +126 -70
  46. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -1
  47. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +324 -329
  48. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
  49. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +969 -648
  50. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
  51. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +553 -419
  52. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -1
  53. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +847 -452
  54. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
  55. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +398 -302
  56. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -1
  57. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +162 -95
  58. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -1
  59. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +1825 -1795
  60. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
  61. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs +1018 -672
  62. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs.map +1 -1
  63. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +758 -368
  64. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
  65. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +204 -212
  66. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -1
  67. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +183 -48
  68. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
  69. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +243 -79
  70. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
  71. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +751 -361
  72. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -1
  73. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +1122 -385
  74. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
  75. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +689 -413
  76. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
  77. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +227 -92
  78. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
  79. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +174 -113
  80. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -1
  81. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +367 -165
  82. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -1
  83. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +253 -118
  84. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -1
  85. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +730 -444
  86. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -1
  87. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs +533 -221
  88. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
  89. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs +274 -76
  90. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs.map +1 -1
  91. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +184 -124
  92. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -1
  93. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +1223 -574
  94. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
  95. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +249 -160
  96. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
  97. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +447 -439
  98. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
  99. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +226 -150
  100. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -1
  101. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +255 -67
  102. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
  103. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +205 -162
  104. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
  105. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +245 -153
  106. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -1
  107. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +274 -140
  108. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -1
  109. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs +319 -147
  110. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs.map +1 -1
  111. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +286 -84
  112. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -1
  113. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +660 -208
  114. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
  115. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +579 -320
  116. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
  117. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +419 -200
  118. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
  119. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +132 -80
  120. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -1
  121. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +741 -390
  122. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
  123. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +455 -329
  124. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
  125. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +543 -514
  126. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -1
  127. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +193 -104
  128. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -1
  129. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +760 -524
  130. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
  131. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +714 -415
  132. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
  133. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +847 -438
  134. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -1
  135. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +535 -275
  136. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -1
  137. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +316 -246
  138. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -1
  139. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +404 -284
  140. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -1
  141. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +664 -383
  142. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -1
  143. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +201 -112
  144. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -1
  145. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +1014 -458
  146. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
  147. package/fesm2022/testgorilla-tgo-ui.mjs +147 -155
  148. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  149. package/mcp/catalog.json +1 -1
  150. package/package.json +16 -17
  151. package/projects/tgo-canopy-ui/theme/_palette.scss +23 -18
  152. package/types/testgorilla-tgo-ui-components-accordion.d.ts +214 -158
  153. package/types/testgorilla-tgo-ui-components-ai-audio-circle.d.ts +93 -69
  154. package/types/testgorilla-tgo-ui-components-ai-caveat.d.ts +37 -34
  155. package/types/testgorilla-tgo-ui-components-ai-feedback.d.ts +126 -86
  156. package/types/testgorilla-tgo-ui-components-alert-banner.d.ts +260 -185
  157. package/types/testgorilla-tgo-ui-components-audio-waveform.d.ts +96 -67
  158. package/types/testgorilla-tgo-ui-components-autocomplete-v2.d.ts +455 -256
  159. package/types/testgorilla-tgo-ui-components-autocomplete.d.ts +545 -390
  160. package/types/testgorilla-tgo-ui-components-avatar.d.ts +128 -102
  161. package/types/testgorilla-tgo-ui-components-badge.d.ts +191 -139
  162. package/types/testgorilla-tgo-ui-components-breadcrumb.d.ts +100 -62
  163. package/types/testgorilla-tgo-ui-components-button.d.ts +479 -340
  164. package/types/testgorilla-tgo-ui-components-card.d.ts +153 -114
  165. package/types/testgorilla-tgo-ui-components-checkbox.d.ts +299 -223
  166. package/types/testgorilla-tgo-ui-components-checklist.d.ts +149 -97
  167. package/types/testgorilla-tgo-ui-components-core.d.ts +307 -295
  168. package/types/testgorilla-tgo-ui-components-datepicker.d.ts +404 -299
  169. package/types/testgorilla-tgo-ui-components-device-control.d.ts +151 -81
  170. package/types/testgorilla-tgo-ui-components-dialog.d.ts +442 -329
  171. package/types/testgorilla-tgo-ui-components-divider.d.ts +64 -51
  172. package/types/testgorilla-tgo-ui-components-donut-chart.d.ts +41 -37
  173. package/types/testgorilla-tgo-ui-components-dropdown.d.ts +335 -241
  174. package/types/testgorilla-tgo-ui-components-elevation-shadow.d.ts +48 -43
  175. package/types/testgorilla-tgo-ui-components-empty-state.d.ts +317 -215
  176. package/types/testgorilla-tgo-ui-components-field.d.ts +559 -388
  177. package/types/testgorilla-tgo-ui-components-file-upload.d.ts +230 -168
  178. package/types/testgorilla-tgo-ui-components-filter-button.d.ts +263 -206
  179. package/types/testgorilla-tgo-ui-components-gaussian-chart.d.ts +107 -94
  180. package/types/testgorilla-tgo-ui-components-icon-label.d.ts +84 -61
  181. package/types/testgorilla-tgo-ui-components-icon.d.ts +137 -110
  182. package/types/testgorilla-tgo-ui-components-infinite-scroll-table.d.ts +429 -303
  183. package/types/testgorilla-tgo-ui-components-inline-field.d.ts +338 -254
  184. package/types/testgorilla-tgo-ui-components-logo.d.ts +119 -101
  185. package/types/testgorilla-tgo-ui-components-media-card.d.ts +51 -35
  186. package/types/testgorilla-tgo-ui-components-media-dialog.d.ts +40 -45
  187. package/types/testgorilla-tgo-ui-components-multi-input.d.ts +283 -194
  188. package/types/testgorilla-tgo-ui-components-navbar.d.ts +326 -208
  189. package/types/testgorilla-tgo-ui-components-overflow-menu.d.ts +276 -204
  190. package/types/testgorilla-tgo-ui-components-page-header.d.ts +67 -50
  191. package/types/testgorilla-tgo-ui-components-paginator.d.ts +103 -70
  192. package/types/testgorilla-tgo-ui-components-password-criteria.d.ts +67 -58
  193. package/types/testgorilla-tgo-ui-components-password-strength.d.ts +66 -57
  194. package/types/testgorilla-tgo-ui-components-phone-input.d.ts +217 -175
  195. package/types/testgorilla-tgo-ui-components-popover.d.ts +94 -53
  196. package/types/testgorilla-tgo-ui-components-popup-tip.d.ts +81 -44
  197. package/types/testgorilla-tgo-ui-components-progress-bar.d.ts +115 -84
  198. package/types/testgorilla-tgo-ui-components-prompt.d.ts +315 -219
  199. package/types/testgorilla-tgo-ui-components-radial-progress.d.ts +146 -107
  200. package/types/testgorilla-tgo-ui-components-radio-button.d.ts +296 -219
  201. package/types/testgorilla-tgo-ui-components-rating.d.ts +134 -95
  202. package/types/testgorilla-tgo-ui-components-scale-table.d.ts +67 -47
  203. package/types/testgorilla-tgo-ui-components-scale.d.ts +91 -66
  204. package/types/testgorilla-tgo-ui-components-segmented-bar.d.ts +118 -89
  205. package/types/testgorilla-tgo-ui-components-segmented-button.d.ts +107 -80
  206. package/types/testgorilla-tgo-ui-components-segmented-toggle.d.ts +138 -105
  207. package/types/testgorilla-tgo-ui-components-selectable-card.d.ts +90 -56
  208. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +183 -107
  209. package/types/testgorilla-tgo-ui-components-side-panel.d.ts +156 -145
  210. package/types/testgorilla-tgo-ui-components-side-sheet.d.ts +98 -89
  211. package/types/testgorilla-tgo-ui-components-skeleton.d.ts +50 -33
  212. package/types/testgorilla-tgo-ui-components-slider.d.ts +278 -198
  213. package/types/testgorilla-tgo-ui-components-snackbar.d.ts +211 -159
  214. package/types/testgorilla-tgo-ui-components-spider-chart.d.ts +140 -121
  215. package/types/testgorilla-tgo-ui-components-spinner.d.ts +93 -72
  216. package/types/testgorilla-tgo-ui-components-stepper.d.ts +480 -338
  217. package/types/testgorilla-tgo-ui-components-table.d.ts +280 -233
  218. package/types/testgorilla-tgo-ui-components-tabs.d.ts +282 -183
  219. package/types/testgorilla-tgo-ui-components-tag.d.ts +266 -193
  220. package/types/testgorilla-tgo-ui-components-toggle.d.ts +180 -132
  221. package/types/testgorilla-tgo-ui-components-tooltip.d.ts +142 -105
  222. package/types/testgorilla-tgo-ui-components-universal-skills.d.ts +165 -144
  223. package/types/testgorilla-tgo-ui-components-validation-error.d.ts +70 -51
  224. package/types/testgorilla-tgo-ui-components-write-with-ai.d.ts +210 -133
  225. package/types/testgorilla-tgo-ui.d.ts +52 -45
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-universal-skills.mjs","sources":["../../../components/universal-skills/universal-skills-report.model.ts","../../../components/universal-skills/universal-skills.service.ts","../../../components/universal-skills/universal-skills-report.component.ts","../../../components/universal-skills/universal-skills-report.component.html","../../../components/universal-skills/universal-skills-report.component.module.ts","../../../components/universal-skills/spider-charts/universal-skills-spider-charts.component.ts","../../../components/universal-skills/spider-charts/universal-skills-spider-charts.component.html","../../../components/universal-skills/spider-charts/universal-skills-spider-charts.component.module.ts","../../../components/universal-skills/testgorilla-tgo-ui-components-universal-skills.ts"],"sourcesContent":["import { SpiderChartData } from '@testgorilla/tgo-ui/components/spider-chart';\n\nexport interface SkillAreaGroup {\n title: string;\n description: string;\n skillAreaList: SkillAreaData[];\n}\n\nexport interface SkillAreaSpiderChartData {\n title: string;\n description: string;\n spiderChartData: SpiderChartData;\n}\n\nexport interface SkillAreaData {\n percentileScoring: number;\n poolPercentileScoring?: number;\n skillAreaName: SkillAreaTypes;\n}\n\n//TODO Update this model after backend/endpoint definitions\nexport enum SkillAreaGroupTypes {\n FocusingOnObjectives = 1,\n WorkingWithPeople = 2,\n ManagingOnesSelf = 3,\n}\n\n//TODO Update this model after backend/endpoint definitions\nexport enum SkillAreaTypes {\n BusinessSavvy = 'BUSINESS_SAVVY',\n StrategicPerspective = 'STRATEGIC_PERSPECTIVE',\n CustomerFocus = 'CUSTOMER_FOCUS',\n NavigatingComplexity = 'NAVIGATING_COMPLEXITY',\n AgileDecisionMaking = 'AGILE_DECISION_MAKING',\n EmbracingInnovation = 'EMBRACING_INNOVATION',\n PlanningAndPrioritizing = 'PLANNING_AND_PRIORITIZING',\n OrganizingResources = 'ORGANIZING_RESOURCES',\n DrivingResults = 'DRIVING_RESULTS',\n\n WorkingCollaboratively = 'WORKING_COLLABORATIVELY',\n SocialAgility = 'SOCIAL_AGILITY',\n CommunicatingEffectively = 'COMMUNICATING_EFFECTIVELY',\n HandlingConflict = 'HANDLING_CONFLICT',\n ValuingDiversity = 'VALUING_DIVERSITY',\n DevelopingOthers = 'DEVELOPING_OTHERS',\n\n ShowingResilience = 'SHOWING_RESILIENCE',\n NavigatingAmbiguity = 'NAVIGATING_AMBIGUITY',\n SelfAwareness = 'SELF_AWARENESS',\n SelfDevelopment = 'SELF_DEVELOPMENT',\n BeingBold = 'BEING_BOLD',\n EarningTrust = 'EARNING_TRUST',\n}\n","import { Injectable } from '@angular/core';\n\nimport { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes, SkillAreaTypes } from './universal-skills-report.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UniversalSkillsService {\n readonly translationContext = 'UNIVERSAL_SKILLS_REPORT.';\n\n private skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;\n private readonly staticSkillAreaGroupMap: SkillAreaTypes[][] = [\n [\n SkillAreaTypes.BusinessSavvy,\n SkillAreaTypes.StrategicPerspective,\n SkillAreaTypes.CustomerFocus,\n SkillAreaTypes.NavigatingComplexity,\n SkillAreaTypes.AgileDecisionMaking,\n SkillAreaTypes.EmbracingInnovation,\n SkillAreaTypes.PlanningAndPrioritizing,\n SkillAreaTypes.OrganizingResources,\n SkillAreaTypes.DrivingResults,\n ],\n [\n SkillAreaTypes.WorkingCollaboratively,\n SkillAreaTypes.SocialAgility,\n SkillAreaTypes.CommunicatingEffectively,\n SkillAreaTypes.HandlingConflict,\n SkillAreaTypes.ValuingDiversity,\n SkillAreaTypes.DevelopingOthers,\n ],\n [\n SkillAreaTypes.ShowingResilience,\n SkillAreaTypes.NavigatingAmbiguity,\n SkillAreaTypes.SelfAwareness,\n SkillAreaTypes.SelfDevelopment,\n SkillAreaTypes.EarningTrust,\n SkillAreaTypes.BeingBold,\n ],\n ];\n\n initializeSkillAreaGroupMap(): void {\n this.skillAreaGroupMap = {\n [SkillAreaGroupTypes.FocusingOnObjectives]: {\n title: `${this.translationContext}SKILL_AREA_GROUP_TYPES.FOCUSING_ON_OBJECTIVES.TITLE`,\n description: `${this.translationContext}SKILL_AREA_GROUP_TYPES.FOCUSING_ON_OBJECTIVES.DESCRIPTION`,\n skillAreaList: [],\n },\n [SkillAreaGroupTypes.WorkingWithPeople]: {\n title: `${this.translationContext}SKILL_AREA_GROUP_TYPES.WORKING_WITH_PEOPLE.TITLE`,\n description: `${this.translationContext}SKILL_AREA_GROUP_TYPES.WORKING_WITH_PEOPLE.DESCRIPTION`,\n skillAreaList: [],\n },\n [SkillAreaGroupTypes.ManagingOnesSelf]: {\n title: `${this.translationContext}SKILL_AREA_GROUP_TYPES.MANAGING_ONES_SELF.TITLE`,\n description: `${this.translationContext}SKILL_AREA_GROUP_TYPES.MANAGING_ONES_SELF.DESCRIPTION`,\n skillAreaList: [],\n },\n };\n }\n\n prepareSkillAreaGroupMap(skillAreaDataList: SkillAreaData[]): void {\n skillAreaDataList?.forEach(currentItem => {\n const formattedSkillAreaType = currentItem.skillAreaName;\n\n if (this.staticSkillAreaGroupMap[0].includes(formattedSkillAreaType)) {\n this.skillAreaGroupMap[SkillAreaGroupTypes.FocusingOnObjectives]?.skillAreaList?.push(currentItem);\n }\n\n if (this.staticSkillAreaGroupMap[1].includes(formattedSkillAreaType)) {\n this.skillAreaGroupMap[SkillAreaGroupTypes.WorkingWithPeople]?.skillAreaList?.push(currentItem);\n }\n\n if (this.staticSkillAreaGroupMap[2].includes(formattedSkillAreaType)) {\n this.skillAreaGroupMap[SkillAreaGroupTypes.ManagingOnesSelf]?.skillAreaList?.push(currentItem);\n }\n });\n }\n\n getSkillAreaGroupMap(): Record<SkillAreaGroupTypes, SkillAreaGroup> {\n return this.skillAreaGroupMap;\n }\n\n getStaticSkillAreaGroupMap(): SkillAreaTypes[][] {\n return this.staticSkillAreaGroupMap;\n }\n}\n","import { AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, OnInit, Optional } from '@angular/core';\n\nimport { AccordionComponent } from '@testgorilla/tgo-ui/components/accordion';\nimport { RebrandBadgeColor, RebrandBadgeColorEnum, BadgeComponent } from '@testgorilla/tgo-ui/components/badge';\nimport {\n ApplicationTheme,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { ProgressBarComponent } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes } from './universal-skills-report.model';\nimport { UniversalSkillsService } from './universal-skills.service';\n\n@Component({\n selector: 'ui-universal-skills-report',\n templateUrl: './universal-skills-report.component.html',\n styleUrls: ['./universal-skills-report.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AccordionComponent,\n BadgeComponent,\n ProgressBarComponent,\n AsyncPipe,\n KeyValuePipe,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n ],\n})\nexport class UniversalSkillsReportComponent implements OnInit {\n /**\n * Defines the application theme\n * @property applicationTheme\n * @type {ApplicationTheme}\n * @memberof UniversalSkillsReportComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * The list of items to be used\n * @property items\n * @type {SkillAreaData[]}\n * @memberof UniversalSkillsReportComponent\n */\n @Input() skillAreaDataList: SkillAreaData[];\n\n readonly translationContext = 'UNIVERSAL_SKILLS_REPORT.';\n\n skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly universalSkillsService: UniversalSkillsService\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit() {\n this.universalSkillsService.initializeSkillAreaGroupMap();\n this.universalSkillsService.prepareSkillAreaGroupMap(this.skillAreaDataList);\n this.skillAreaGroupMap = this.universalSkillsService.getSkillAreaGroupMap();\n }\n\n getScoreBadgeLabel(percentileScoring: number): string {\n return `PERCENTILE_LABEL_TYPES.${this.checkScoreClassification([percentileScoring, true])}`;\n }\n\n getScoreBadgeColor(percentileScoring: number): RebrandBadgeColor {\n return this.checkScoreClassification([percentileScoring, false]) as RebrandBadgeColor;\n }\n\n checkScoreClassification([percentileScoring, isLabelRequest]: [number, boolean]): string {\n let scoreBadgeLabel = '';\n let scoreBadgeColor: RebrandBadgeColor = RebrandBadgeColorEnum.BLUE_10;\n\n if (percentileScoring >= 1 && percentileScoring <= 19) {\n scoreBadgeLabel = 'WELL_BELOW_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.GREY_30;\n }\n\n if (percentileScoring >= 20 && percentileScoring <= 39) {\n scoreBadgeLabel = 'BELOW_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.GREY_10;\n }\n\n if (percentileScoring >= 40 && percentileScoring <= 59) {\n scoreBadgeLabel = 'AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.BLUE_10;\n }\n\n if (percentileScoring >= 60 && percentileScoring <= 79) {\n scoreBadgeLabel = 'ABOVE_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.BLUE_20;\n }\n\n if (percentileScoring >= 80 && percentileScoring <= 100) {\n scoreBadgeLabel = 'WELL_ABOVE_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.BLUE_40;\n }\n\n return isLabelRequest ? scoreBadgeLabel : scoreBadgeColor;\n }\n}\n","@for (skillAreaGroup of skillAreaGroupMap | keyvalue; track skillAreaGroup) {\n <div class=\"universal-skills-report\">\n <section class=\"title-and-info\">\n <h4>{{ skillAreaGroup.value.title | uiTranslate | async }}</h4>\n <span>{{ skillAreaGroup.value.description | uiTranslate | async }}</span>\n </section>\n <section class=\"accordion-items\">\n @for (skillAreaData of skillAreaGroup?.value?.skillAreaList; track skillAreaData) {\n <ui-accordion class=\"universal-skills-accordion\" label=\"-\" [allowCustomHeader]=\"true\">\n <div customHeader class=\"custom-header\">\n <h4 class=\"custom-header-subtitle\">\n {{\n translationContext + 'SKILL_AREA_TYPES.' + skillAreaData.skillAreaName + '.TITLE' | uiTranslate | async\n }}\n </h4>\n <div class=\"inner-container\">\n <ui-badge\n class=\"percentile-scoring-badge\"\n [label]=\"\n (skillAreaData.percentileScoring | memoizeFunc: getScoreBadgeLabel : this | uiTranslate | async) ||\n 'neutral'\n \"\n [rebrandColor]=\"skillAreaData.percentileScoring | memoizeFunc: getScoreBadgeColor : this\"\n [applicationTheme]=\"'light'\"\n ></ui-badge>\n <h5 class=\"percentile-quantity\">\n {{ skillAreaData?.percentileScoring }}\n <sup class=\"percentile-suffix\">{{\n skillAreaData.percentileScoring | ordinalSuffix | uiTranslate | async\n }}</sup>\n {{ translationContext + 'PERCENTILE' | uiTranslate | async }}\n </h5>\n <ui-progress-bar\n class=\"percentile-scoring-bar\"\n mode=\"determinate\"\n [progress]=\"skillAreaData.percentileScoring\"\n ></ui-progress-bar>\n </div>\n </div>\n <div class=\"content-container\">\n <p class=\"skill-description\">\n {{\n translationContext + 'SKILL_AREA_TYPES.' + skillAreaData.skillAreaName + '.DESCRIPTION'\n | uiTranslate\n | async\n }}\n </p>\n <h5>\n {{ skillAreaData.percentileScoring | memoizeFunc: getScoreBadgeLabel : this | uiTranslate | async }} score\n </h5>\n <div class=\"inner-container\">\n <p>\n {{\n translationContext +\n 'SKILL_AREA_TYPES.' +\n skillAreaData.skillAreaName +\n '.' +\n ([skillAreaData.percentileScoring, true] | memoizeFunc: checkScoreClassification : this) +\n '.GENERAL'\n | uiTranslate\n | async\n }}\n </p>\n </div>\n <div class=\"inner-container\">\n <p>\n {{\n translationContext +\n 'SKILL_AREA_TYPES.' +\n skillAreaData.skillAreaName +\n '.' +\n ([skillAreaData.percentileScoring, true] | memoizeFunc: checkScoreClassification : this) +\n '.WORK_ENVIRONMENT'\n | uiTranslate\n | async\n }}\n </p>\n </div>\n <div class=\"inner-container\">\n <p>\n {{\n translationContext +\n 'SKILL_AREA_TYPES.' +\n skillAreaData.skillAreaName +\n '.' +\n ([skillAreaData.percentileScoring, true] | memoizeFunc: checkScoreClassification : this) +\n '.RECOMMENDATIONS'\n | uiTranslate\n | async\n }}\n </p>\n </div>\n </div>\n </ui-accordion>\n }\n </section>\n </div>\n}\n","import { CommonModule, KeyValuePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AccordionComponentModule } from '@testgorilla/tgo-ui/components/accordion';\nimport { BadgeComponentModule } from '@testgorilla/tgo-ui/components/badge';\nimport { MemoizeFuncPipe, UiTranslatePipe, OrdinalSuffixPipe } from '@testgorilla/tgo-ui/components/core';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { UniversalSkillsReportComponent } from './universal-skills-report.component';\n\n@NgModule({\n imports: [\n CommonModule,\n AccordionComponentModule,\n BadgeComponentModule,\n ProgressBarComponentModule,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n KeyValuePipe,\n UniversalSkillsReportComponent,\n ],\n exports: [UniversalSkillsReportComponent],\n})\nexport class UniversalSkillsReportComponentModule {}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, OnInit, Optional } from '@angular/core';\nimport { take } from 'rxjs';\n\nimport { AccordionComponent } from '@testgorilla/tgo-ui/components/accordion';\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { DividerComponent } from '@testgorilla/tgo-ui/components/divider';\nimport { SpiderChartComponent } from '@testgorilla/tgo-ui/components/spider-chart';\n\nimport {\n SkillAreaData,\n SkillAreaGroup,\n SkillAreaGroupTypes,\n SkillAreaSpiderChartData,\n} from '../universal-skills-report.model';\nimport { UniversalSkillsService } from '../universal-skills.service';\n\n@Component({\n selector: 'ui-universal-skills-spider-charts',\n templateUrl: './universal-skills-spider-charts.component.html',\n styleUrls: ['./universal-skills-spider-charts.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AccordionComponent, SpiderChartComponent, DividerComponent, AsyncPipe, UiTranslatePipe],\n})\nexport class UniversalSkillsSpiderChartsComponent implements OnInit {\n /**\n * Defines the application theme\n * @property applicationTheme\n * @type {ApplicationTheme}\n * @memberof UniversalSkillsSpiderChartsComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * The list of items to be used\n * @property items\n * @type {SkillAreaData[]}\n * @memberof UniversalSkillsReportComponent\n */\n @Input() skillAreaDataList: SkillAreaData[];\n\n /**\n * Defines if the component is loading\n * @property loading\n * @type {boolean}\n * @memberof UniversalSkillsSpiderChartsComponent\n */\n @Input() loading = false;\n\n /**\n * Defines the size of the spider chart\n * @property size\n * @type {'small' | 'large'}\n * @memberof UniversalSkillsSpiderChartsComponent\n */\n @Input() size: 'small' | 'large' = 'large';\n\n readonly translationContext = 'UNIVERSAL_SKILLS_REPORT.';\n\n skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;\n skillAreaSpiderChartData: SkillAreaSpiderChartData[] = [];\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly universalSkillsService: UniversalSkillsService,\n private readonly uiTranslatePipe: UiTranslatePipe\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit() {\n this.universalSkillsService.initializeSkillAreaGroupMap();\n this.universalSkillsService.prepareSkillAreaGroupMap(this.skillAreaDataList);\n this.skillAreaGroupMap = this.universalSkillsService.getSkillAreaGroupMap();\n this.prepareSpiderChartData();\n }\n\n prepareSpiderChartData(): void {\n this.skillAreaSpiderChartData = [];\n Object.values(this.skillAreaGroupMap).forEach(skillAreaGroup => {\n const labelObservables = skillAreaGroup.skillAreaList.map(skillArea =>\n this.uiTranslatePipe.transform(`${this.translationContext}SKILL_AREA_TYPES.${skillArea.skillAreaName}.TITLE`)\n );\n\n const labelDescriptionObservables = skillAreaGroup.skillAreaList.map(skillArea =>\n this.uiTranslatePipe.transform(\n `${this.translationContext}SKILL_AREA_TYPES.${skillArea.skillAreaName}.DESCRIPTION`\n )\n );\n\n const allObservables = [...labelObservables, ...labelDescriptionObservables];\n const translations: string[] = [];\n allObservables.forEach(observable => {\n observable.pipe(take(1)).subscribe(translation => {\n translations.push(translation);\n });\n });\n const labels = translations.slice(0, labelObservables.length);\n const labelDescriptions = translations.slice(labelObservables.length);\n\n this.skillAreaSpiderChartData.push({\n title: skillAreaGroup.title,\n description: skillAreaGroup.description,\n spiderChartData: {\n labels,\n labelDescription: labelDescriptions,\n plotData:\n skillAreaGroup.skillAreaList?.[0]?.poolPercentileScoring !== undefined\n ? [\n {\n data: skillAreaGroup.skillAreaList.map(skillArea => skillArea.percentileScoring),\n databaseLabel: \"This candidate's score\",\n },\n {\n data: skillAreaGroup.skillAreaList.map(skillArea => skillArea.poolPercentileScoring ?? 0),\n databaseLabel: 'Average score of all candidates',\n },\n ]\n : [\n {\n data: skillAreaGroup.skillAreaList.map(skillArea => skillArea.percentileScoring),\n databaseLabel: \"This candidate's score\",\n },\n ],\n },\n });\n });\n }\n}\n","@for (spiderChartData of skillAreaSpiderChartData; track spiderChartData) {\n <ui-accordion\n class=\"universal-skills-spider-charts\"\n [label]=\"(spiderChartData.title | uiTranslate | async) || ''\"\n variant=\"filter\"\n >\n <ui-spider-chart\n [spiderChartData]=\"spiderChartData.spiderChartData\"\n [loading]=\"loading\"\n [size]=\"size\"\n ></ui-spider-chart>\n </ui-accordion>\n @if ($index < skillAreaSpiderChartData.length - 1) {\n <ui-divider class=\"universal-skills-spider-charts-divider\" size=\"small\"></ui-divider>\n }\n}\n","import { CommonModule, KeyValuePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AccordionComponentModule } from '@testgorilla/tgo-ui/components/accordion';\nimport { BadgeComponentModule } from '@testgorilla/tgo-ui/components/badge';\nimport { MemoizeFuncPipe, UiTranslatePipe, OrdinalSuffixPipe } from '@testgorilla/tgo-ui/components/core';\nimport { DividerComponentModule } from '@testgorilla/tgo-ui/components/divider';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\nimport { SpiderChartComponentModule } from '@testgorilla/tgo-ui/components/spider-chart';\n\nimport { UniversalSkillsSpiderChartsComponent } from './universal-skills-spider-charts.component';\n\n@NgModule({\n imports: [\n CommonModule,\n AccordionComponentModule,\n BadgeComponentModule,\n ProgressBarComponentModule,\n SpiderChartComponentModule,\n DividerComponentModule,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n KeyValuePipe,\n UniversalSkillsSpiderChartsComponent,\n ],\n providers: [UiTranslatePipe],\n exports: [UniversalSkillsSpiderChartsComponent],\n})\nexport class UniversalSkillsSpiderChartsComponentModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UniversalSkillsService"],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-universal-skills.mjs","names":["i1.UniversalSkillsService","i1.UniversalSkillsService"],"sources":["../../../components/universal-skills/universal-skills-report.model.ts","../../../components/universal-skills/universal-skills.service.ts","../../../components/universal-skills/universal-skills-report.component.ts","../../../components/universal-skills/universal-skills-report.component.html","../../../components/universal-skills/universal-skills-report.component.module.ts","../../../components/universal-skills/spider-charts/universal-skills-spider-charts.component.ts","../../../components/universal-skills/spider-charts/universal-skills-spider-charts.component.html","../../../components/universal-skills/spider-charts/universal-skills-spider-charts.component.module.ts"],"sourcesContent":["import { SpiderChartData } from '@testgorilla/tgo-ui/components/spider-chart';\n\nexport interface SkillAreaGroup {\n title: string;\n description: string;\n skillAreaList: SkillAreaData[];\n}\n\nexport interface SkillAreaSpiderChartData {\n title: string;\n description: string;\n spiderChartData: SpiderChartData;\n}\n\nexport interface SkillAreaData {\n percentileScoring: number;\n poolPercentileScoring?: number;\n skillAreaName: SkillAreaTypes;\n}\n\n//TODO Update this model after backend/endpoint definitions\nexport enum SkillAreaGroupTypes {\n FocusingOnObjectives = 1,\n WorkingWithPeople = 2,\n ManagingOnesSelf = 3,\n}\n\n//TODO Update this model after backend/endpoint definitions\nexport enum SkillAreaTypes {\n BusinessSavvy = 'BUSINESS_SAVVY',\n StrategicPerspective = 'STRATEGIC_PERSPECTIVE',\n CustomerFocus = 'CUSTOMER_FOCUS',\n NavigatingComplexity = 'NAVIGATING_COMPLEXITY',\n AgileDecisionMaking = 'AGILE_DECISION_MAKING',\n EmbracingInnovation = 'EMBRACING_INNOVATION',\n PlanningAndPrioritizing = 'PLANNING_AND_PRIORITIZING',\n OrganizingResources = 'ORGANIZING_RESOURCES',\n DrivingResults = 'DRIVING_RESULTS',\n\n WorkingCollaboratively = 'WORKING_COLLABORATIVELY',\n SocialAgility = 'SOCIAL_AGILITY',\n CommunicatingEffectively = 'COMMUNICATING_EFFECTIVELY',\n HandlingConflict = 'HANDLING_CONFLICT',\n ValuingDiversity = 'VALUING_DIVERSITY',\n DevelopingOthers = 'DEVELOPING_OTHERS',\n\n ShowingResilience = 'SHOWING_RESILIENCE',\n NavigatingAmbiguity = 'NAVIGATING_AMBIGUITY',\n SelfAwareness = 'SELF_AWARENESS',\n SelfDevelopment = 'SELF_DEVELOPMENT',\n BeingBold = 'BEING_BOLD',\n EarningTrust = 'EARNING_TRUST',\n}\n","import { Injectable } from '@angular/core';\n\nimport { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes, SkillAreaTypes } from './universal-skills-report.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UniversalSkillsService {\n readonly translationContext = 'UNIVERSAL_SKILLS_REPORT.';\n\n private skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;\n private readonly staticSkillAreaGroupMap: SkillAreaTypes[][] = [\n [\n SkillAreaTypes.BusinessSavvy,\n SkillAreaTypes.StrategicPerspective,\n SkillAreaTypes.CustomerFocus,\n SkillAreaTypes.NavigatingComplexity,\n SkillAreaTypes.AgileDecisionMaking,\n SkillAreaTypes.EmbracingInnovation,\n SkillAreaTypes.PlanningAndPrioritizing,\n SkillAreaTypes.OrganizingResources,\n SkillAreaTypes.DrivingResults,\n ],\n [\n SkillAreaTypes.WorkingCollaboratively,\n SkillAreaTypes.SocialAgility,\n SkillAreaTypes.CommunicatingEffectively,\n SkillAreaTypes.HandlingConflict,\n SkillAreaTypes.ValuingDiversity,\n SkillAreaTypes.DevelopingOthers,\n ],\n [\n SkillAreaTypes.ShowingResilience,\n SkillAreaTypes.NavigatingAmbiguity,\n SkillAreaTypes.SelfAwareness,\n SkillAreaTypes.SelfDevelopment,\n SkillAreaTypes.EarningTrust,\n SkillAreaTypes.BeingBold,\n ],\n ];\n\n initializeSkillAreaGroupMap(): void {\n this.skillAreaGroupMap = {\n [SkillAreaGroupTypes.FocusingOnObjectives]: {\n title: `${this.translationContext}SKILL_AREA_GROUP_TYPES.FOCUSING_ON_OBJECTIVES.TITLE`,\n description: `${this.translationContext}SKILL_AREA_GROUP_TYPES.FOCUSING_ON_OBJECTIVES.DESCRIPTION`,\n skillAreaList: [],\n },\n [SkillAreaGroupTypes.WorkingWithPeople]: {\n title: `${this.translationContext}SKILL_AREA_GROUP_TYPES.WORKING_WITH_PEOPLE.TITLE`,\n description: `${this.translationContext}SKILL_AREA_GROUP_TYPES.WORKING_WITH_PEOPLE.DESCRIPTION`,\n skillAreaList: [],\n },\n [SkillAreaGroupTypes.ManagingOnesSelf]: {\n title: `${this.translationContext}SKILL_AREA_GROUP_TYPES.MANAGING_ONES_SELF.TITLE`,\n description: `${this.translationContext}SKILL_AREA_GROUP_TYPES.MANAGING_ONES_SELF.DESCRIPTION`,\n skillAreaList: [],\n },\n };\n }\n\n prepareSkillAreaGroupMap(skillAreaDataList: SkillAreaData[]): void {\n skillAreaDataList?.forEach(currentItem => {\n const formattedSkillAreaType = currentItem.skillAreaName;\n\n if (this.staticSkillAreaGroupMap[0].includes(formattedSkillAreaType)) {\n this.skillAreaGroupMap[SkillAreaGroupTypes.FocusingOnObjectives]?.skillAreaList?.push(currentItem);\n }\n\n if (this.staticSkillAreaGroupMap[1].includes(formattedSkillAreaType)) {\n this.skillAreaGroupMap[SkillAreaGroupTypes.WorkingWithPeople]?.skillAreaList?.push(currentItem);\n }\n\n if (this.staticSkillAreaGroupMap[2].includes(formattedSkillAreaType)) {\n this.skillAreaGroupMap[SkillAreaGroupTypes.ManagingOnesSelf]?.skillAreaList?.push(currentItem);\n }\n });\n }\n\n getSkillAreaGroupMap(): Record<SkillAreaGroupTypes, SkillAreaGroup> {\n return this.skillAreaGroupMap;\n }\n\n getStaticSkillAreaGroupMap(): SkillAreaTypes[][] {\n return this.staticSkillAreaGroupMap;\n }\n}\n","import { AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, OnInit, Optional } from '@angular/core';\n\nimport { AccordionComponent } from '@testgorilla/tgo-ui/components/accordion';\nimport { RebrandBadgeColor, RebrandBadgeColorEnum, BadgeComponent } from '@testgorilla/tgo-ui/components/badge';\nimport {\n ApplicationTheme,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n} from '@testgorilla/tgo-ui/components/core';\nimport { ProgressBarComponent } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { SkillAreaData, SkillAreaGroup, SkillAreaGroupTypes } from './universal-skills-report.model';\nimport { UniversalSkillsService } from './universal-skills.service';\n\n@Component({\n selector: 'ui-universal-skills-report',\n templateUrl: './universal-skills-report.component.html',\n styleUrls: ['./universal-skills-report.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AccordionComponent,\n BadgeComponent,\n ProgressBarComponent,\n AsyncPipe,\n KeyValuePipe,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n ],\n})\nexport class UniversalSkillsReportComponent implements OnInit {\n /**\n * Defines the application theme\n * @property applicationTheme\n * @type {ApplicationTheme}\n * @memberof UniversalSkillsReportComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * The list of items to be used\n * @property items\n * @type {SkillAreaData[]}\n * @memberof UniversalSkillsReportComponent\n */\n @Input() skillAreaDataList: SkillAreaData[];\n\n readonly translationContext = 'UNIVERSAL_SKILLS_REPORT.';\n\n skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly universalSkillsService: UniversalSkillsService\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit() {\n this.universalSkillsService.initializeSkillAreaGroupMap();\n this.universalSkillsService.prepareSkillAreaGroupMap(this.skillAreaDataList);\n this.skillAreaGroupMap = this.universalSkillsService.getSkillAreaGroupMap();\n }\n\n getScoreBadgeLabel(percentileScoring: number): string {\n return `PERCENTILE_LABEL_TYPES.${this.checkScoreClassification([percentileScoring, true])}`;\n }\n\n getScoreBadgeColor(percentileScoring: number): RebrandBadgeColor {\n return this.checkScoreClassification([percentileScoring, false]) as RebrandBadgeColor;\n }\n\n checkScoreClassification([percentileScoring, isLabelRequest]: [number, boolean]): string {\n let scoreBadgeLabel = '';\n let scoreBadgeColor: RebrandBadgeColor = RebrandBadgeColorEnum.BLUE_10;\n\n if (percentileScoring >= 1 && percentileScoring <= 19) {\n scoreBadgeLabel = 'WELL_BELOW_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.GREY_30;\n }\n\n if (percentileScoring >= 20 && percentileScoring <= 39) {\n scoreBadgeLabel = 'BELOW_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.GREY_10;\n }\n\n if (percentileScoring >= 40 && percentileScoring <= 59) {\n scoreBadgeLabel = 'AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.BLUE_10;\n }\n\n if (percentileScoring >= 60 && percentileScoring <= 79) {\n scoreBadgeLabel = 'ABOVE_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.BLUE_20;\n }\n\n if (percentileScoring >= 80 && percentileScoring <= 100) {\n scoreBadgeLabel = 'WELL_ABOVE_AVERAGE';\n scoreBadgeColor = RebrandBadgeColorEnum.BLUE_40;\n }\n\n return isLabelRequest ? scoreBadgeLabel : scoreBadgeColor;\n }\n}\n","@for (skillAreaGroup of skillAreaGroupMap | keyvalue; track skillAreaGroup) {\n <div class=\"universal-skills-report\">\n <section class=\"title-and-info\">\n <h4>{{ skillAreaGroup.value.title | uiTranslate | async }}</h4>\n <span>{{ skillAreaGroup.value.description | uiTranslate | async }}</span>\n </section>\n <section class=\"accordion-items\">\n @for (skillAreaData of skillAreaGroup?.value?.skillAreaList; track skillAreaData) {\n <ui-accordion class=\"universal-skills-accordion\" label=\"-\" [allowCustomHeader]=\"true\">\n <div customHeader class=\"custom-header\">\n <h4 class=\"custom-header-subtitle\">\n {{\n translationContext + 'SKILL_AREA_TYPES.' + skillAreaData.skillAreaName + '.TITLE' | uiTranslate | async\n }}\n </h4>\n <div class=\"inner-container\">\n <ui-badge\n class=\"percentile-scoring-badge\"\n [label]=\"\n (skillAreaData.percentileScoring | memoizeFunc: getScoreBadgeLabel : this | uiTranslate | async) ||\n 'neutral'\n \"\n [rebrandColor]=\"skillAreaData.percentileScoring | memoizeFunc: getScoreBadgeColor : this\"\n [applicationTheme]=\"'light'\"\n ></ui-badge>\n <h5 class=\"percentile-quantity\">\n {{ skillAreaData?.percentileScoring }}\n <sup class=\"percentile-suffix\">{{\n skillAreaData.percentileScoring | ordinalSuffix | uiTranslate | async\n }}</sup>\n {{ translationContext + 'PERCENTILE' | uiTranslate | async }}\n </h5>\n <ui-progress-bar\n class=\"percentile-scoring-bar\"\n mode=\"determinate\"\n [progress]=\"skillAreaData.percentileScoring\"\n ></ui-progress-bar>\n </div>\n </div>\n <div class=\"content-container\">\n <p class=\"skill-description\">\n {{\n translationContext + 'SKILL_AREA_TYPES.' + skillAreaData.skillAreaName + '.DESCRIPTION'\n | uiTranslate\n | async\n }}\n </p>\n <h5>\n {{ skillAreaData.percentileScoring | memoizeFunc: getScoreBadgeLabel : this | uiTranslate | async }} score\n </h5>\n <div class=\"inner-container\">\n <p>\n {{\n translationContext +\n 'SKILL_AREA_TYPES.' +\n skillAreaData.skillAreaName +\n '.' +\n ([skillAreaData.percentileScoring, true] | memoizeFunc: checkScoreClassification : this) +\n '.GENERAL'\n | uiTranslate\n | async\n }}\n </p>\n </div>\n <div class=\"inner-container\">\n <p>\n {{\n translationContext +\n 'SKILL_AREA_TYPES.' +\n skillAreaData.skillAreaName +\n '.' +\n ([skillAreaData.percentileScoring, true] | memoizeFunc: checkScoreClassification : this) +\n '.WORK_ENVIRONMENT'\n | uiTranslate\n | async\n }}\n </p>\n </div>\n <div class=\"inner-container\">\n <p>\n {{\n translationContext +\n 'SKILL_AREA_TYPES.' +\n skillAreaData.skillAreaName +\n '.' +\n ([skillAreaData.percentileScoring, true] | memoizeFunc: checkScoreClassification : this) +\n '.RECOMMENDATIONS'\n | uiTranslate\n | async\n }}\n </p>\n </div>\n </div>\n </ui-accordion>\n }\n </section>\n </div>\n}\n","import { CommonModule, KeyValuePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AccordionComponentModule } from '@testgorilla/tgo-ui/components/accordion';\nimport { BadgeComponentModule } from '@testgorilla/tgo-ui/components/badge';\nimport { MemoizeFuncPipe, UiTranslatePipe, OrdinalSuffixPipe } from '@testgorilla/tgo-ui/components/core';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\n\nimport { UniversalSkillsReportComponent } from './universal-skills-report.component';\n\n@NgModule({\n imports: [\n CommonModule,\n AccordionComponentModule,\n BadgeComponentModule,\n ProgressBarComponentModule,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n KeyValuePipe,\n UniversalSkillsReportComponent,\n ],\n exports: [UniversalSkillsReportComponent],\n})\nexport class UniversalSkillsReportComponentModule {}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Input, OnInit, Optional } from '@angular/core';\nimport { take } from 'rxjs';\n\nimport { AccordionComponent } from '@testgorilla/tgo-ui/components/accordion';\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { DividerComponent } from '@testgorilla/tgo-ui/components/divider';\nimport { SpiderChartComponent } from '@testgorilla/tgo-ui/components/spider-chart';\n\nimport {\n SkillAreaData,\n SkillAreaGroup,\n SkillAreaGroupTypes,\n SkillAreaSpiderChartData,\n} from '../universal-skills-report.model';\nimport { UniversalSkillsService } from '../universal-skills.service';\n\n@Component({\n selector: 'ui-universal-skills-spider-charts',\n templateUrl: './universal-skills-spider-charts.component.html',\n styleUrls: ['./universal-skills-spider-charts.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AccordionComponent, SpiderChartComponent, DividerComponent, AsyncPipe, UiTranslatePipe],\n})\nexport class UniversalSkillsSpiderChartsComponent implements OnInit {\n /**\n * Defines the application theme\n * @property applicationTheme\n * @type {ApplicationTheme}\n * @memberof UniversalSkillsSpiderChartsComponent\n */\n @Input() applicationTheme: ApplicationTheme = 'light';\n\n /**\n * The list of items to be used\n * @property items\n * @type {SkillAreaData[]}\n * @memberof UniversalSkillsReportComponent\n */\n @Input() skillAreaDataList: SkillAreaData[];\n\n /**\n * Defines if the component is loading\n * @property loading\n * @type {boolean}\n * @memberof UniversalSkillsSpiderChartsComponent\n */\n @Input() loading = false;\n\n /**\n * Defines the size of the spider chart\n * @property size\n * @type {'small' | 'large'}\n * @memberof UniversalSkillsSpiderChartsComponent\n */\n @Input() size: 'small' | 'large' = 'large';\n\n readonly translationContext = 'UNIVERSAL_SKILLS_REPORT.';\n\n skillAreaGroupMap: Record<SkillAreaGroupTypes, SkillAreaGroup>;\n skillAreaSpiderChartData: SkillAreaSpiderChartData[] = [];\n\n constructor(\n @Optional() @Inject('CANOPYUI_DEFAULT_APPLICATION_THEME') private readonly defaultAppTheme: ApplicationTheme,\n private readonly universalSkillsService: UniversalSkillsService,\n private readonly uiTranslatePipe: UiTranslatePipe\n ) {\n if (defaultAppTheme) {\n this.applicationTheme = defaultAppTheme;\n }\n }\n\n ngOnInit() {\n this.universalSkillsService.initializeSkillAreaGroupMap();\n this.universalSkillsService.prepareSkillAreaGroupMap(this.skillAreaDataList);\n this.skillAreaGroupMap = this.universalSkillsService.getSkillAreaGroupMap();\n this.prepareSpiderChartData();\n }\n\n prepareSpiderChartData(): void {\n this.skillAreaSpiderChartData = [];\n Object.values(this.skillAreaGroupMap).forEach(skillAreaGroup => {\n const labelObservables = skillAreaGroup.skillAreaList.map(skillArea =>\n this.uiTranslatePipe.transform(`${this.translationContext}SKILL_AREA_TYPES.${skillArea.skillAreaName}.TITLE`)\n );\n\n const labelDescriptionObservables = skillAreaGroup.skillAreaList.map(skillArea =>\n this.uiTranslatePipe.transform(\n `${this.translationContext}SKILL_AREA_TYPES.${skillArea.skillAreaName}.DESCRIPTION`\n )\n );\n\n const allObservables = [...labelObservables, ...labelDescriptionObservables];\n const translations: string[] = [];\n allObservables.forEach(observable => {\n observable.pipe(take(1)).subscribe(translation => {\n translations.push(translation);\n });\n });\n const labels = translations.slice(0, labelObservables.length);\n const labelDescriptions = translations.slice(labelObservables.length);\n\n this.skillAreaSpiderChartData.push({\n title: skillAreaGroup.title,\n description: skillAreaGroup.description,\n spiderChartData: {\n labels,\n labelDescription: labelDescriptions,\n plotData:\n skillAreaGroup.skillAreaList?.[0]?.poolPercentileScoring !== undefined\n ? [\n {\n data: skillAreaGroup.skillAreaList.map(skillArea => skillArea.percentileScoring),\n databaseLabel: \"This candidate's score\",\n },\n {\n data: skillAreaGroup.skillAreaList.map(skillArea => skillArea.poolPercentileScoring ?? 0),\n databaseLabel: 'Average score of all candidates',\n },\n ]\n : [\n {\n data: skillAreaGroup.skillAreaList.map(skillArea => skillArea.percentileScoring),\n databaseLabel: \"This candidate's score\",\n },\n ],\n },\n });\n });\n }\n}\n","@for (spiderChartData of skillAreaSpiderChartData; track spiderChartData) {\n <ui-accordion\n class=\"universal-skills-spider-charts\"\n [label]=\"(spiderChartData.title | uiTranslate | async) || ''\"\n variant=\"filter\"\n >\n <ui-spider-chart\n [spiderChartData]=\"spiderChartData.spiderChartData\"\n [loading]=\"loading\"\n [size]=\"size\"\n ></ui-spider-chart>\n </ui-accordion>\n @if ($index < skillAreaSpiderChartData.length - 1) {\n <ui-divider class=\"universal-skills-spider-charts-divider\" size=\"small\"></ui-divider>\n }\n}\n","import { CommonModule, KeyValuePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AccordionComponentModule } from '@testgorilla/tgo-ui/components/accordion';\nimport { BadgeComponentModule } from '@testgorilla/tgo-ui/components/badge';\nimport { MemoizeFuncPipe, UiTranslatePipe, OrdinalSuffixPipe } from '@testgorilla/tgo-ui/components/core';\nimport { DividerComponentModule } from '@testgorilla/tgo-ui/components/divider';\nimport { ProgressBarComponentModule } from '@testgorilla/tgo-ui/components/progress-bar';\nimport { SpiderChartComponentModule } from '@testgorilla/tgo-ui/components/spider-chart';\n\nimport { UniversalSkillsSpiderChartsComponent } from './universal-skills-spider-charts.component';\n\n@NgModule({\n imports: [\n CommonModule,\n AccordionComponentModule,\n BadgeComponentModule,\n ProgressBarComponentModule,\n SpiderChartComponentModule,\n DividerComponentModule,\n MemoizeFuncPipe,\n UiTranslatePipe,\n OrdinalSuffixPipe,\n KeyValuePipe,\n UniversalSkillsSpiderChartsComponent,\n ],\n providers: [UiTranslatePipe],\n exports: [UniversalSkillsSpiderChartsComponent],\n})\nexport class UniversalSkillsSpiderChartsComponentModule {}\n"],"mappings":"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"}
@@ -1,113 +1,202 @@
1
- import { AsyncPipe, CommonModule } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, ChangeDetectorRef, Input, HostBinding, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
4
- import { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
5
- import * as i1 from '@testgorilla/tgo-ui/components/icon';
6
- import { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
7
-
8
- class ValidationErrorComponent {
9
- constructor() {
10
- this.touchedOn = true;
11
- this.errorMessage = '';
12
- this.cdr = inject(ChangeDetectorRef);
13
- /**
14
- *
15
- * Defines the application theme
16
- *
17
- * @type {ApplicationTheme}
18
- * @memberof ValidationErrorComponent
19
- */
20
- this.applicationTheme = 'light';
21
- /** Maps validator error keys to display message templates. Supports {{placeholder}} interpolation. */
22
- this.customErrors = {};
23
- this.translationContextErrors = 'ERRORS.';
24
- }
25
- /**
26
- * The template renders off `ngControl.touched`/`ngControl.errors` — mutable
27
- * state behind a stable input reference, which OnPush alone never re-checks
28
- * (blur or markAllAsTouched() marks the parent view, not this one).
29
- * ngDoCheck runs whenever an ancestor is checked, so snapshot that state and
30
- * mark this view when it moves (same pattern as autocomplete-v2's ngDoCheck).
31
- */
32
- ngDoCheck() {
33
- const touched = this.ngControl?.touched ?? false;
34
- const errors = this.ngControl?.errors ?? null;
35
- if (touched !== this.lastTouched || errors !== this.lastErrors) {
36
- this.lastTouched = touched;
37
- this.lastErrors = errors;
38
- this.cdr.markForCheck();
39
- }
40
- }
41
- getErrorValue(type) {
42
- const ngControlErrors = this.ngControl.errors;
43
- switch (type) {
44
- case 'maxlength':
45
- return ngControlErrors.maxlength.requiredLength;
46
- case 'minlength':
47
- return ngControlErrors.minlength.requiredLength;
48
- case 'max':
49
- return ngControlErrors.max.max;
50
- case 'min':
51
- return ngControlErrors.min.min;
52
- default:
53
- return 0;
54
- }
55
- }
56
- get customErrorKeys() {
57
- return Object.keys(this.customErrors);
58
- }
59
- resolveErrorMessage(key) {
60
- const template = this.customErrors[key];
61
- const errorData = this.ngControl?.errors?.[key];
62
- if (!template) {
63
- return '';
64
- }
65
- if (typeof errorData === 'object' && errorData !== null) {
66
- const data = errorData;
67
- // Replace {{key}} placeholders with error data values
68
- return template.replace(/\{\{(\w+)\}\}/g, (_match, prop) => data[prop] ?? '');
69
- }
70
- return template;
71
- }
72
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ValidationErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: ValidationErrorComponent, isStandalone: true, selector: "ui-validation-error", inputs: { ngControl: "ngControl", touchedOn: "touchedOn", errorMessage: "errorMessage", label: "label", applicationTheme: "applicationTheme", customErrors: "customErrors" }, host: { properties: { "attr.theme": "this.applicationTheme" } }, ngImport: i0, template: "@for (key of customErrorKeys; track $index) {\n @if (ngControl?.hasError(key) && (touchedOn ? ngControl?.touched : true)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ resolveErrorMessage(key) }}</span>\n </div>\n }\n}\n\n@if (ngControl?.hasError('maxlength') && !customErrors['maxlength']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MAX_LENGTH' | uiTranslate: { maxlength: getErrorValue('maxlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('minlength') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MIN_LENGTH' | uiTranslate: { maxlength: getErrorValue('minlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('min') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MIN' | uiTranslate: { min: getErrorValue('min') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('max') && !customErrors['max']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MAX' | uiTranslate: { max: getErrorValue('max') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('required') && (touchedOn ? ngControl?.touched : true) && !customErrors['required']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + (label ? 'REQUIRED_FIELD' : 'REQUIRED') | uiTranslate: { label } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('email') && !customErrors['email']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'EMAIL_INCORRECT' | uiTranslate | async }}</span>\n </div>\n}\n\n@if (errorMessage) {\n <div class=\"custom-errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ errorMessage }}</span>\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: IconComponentModule }, { kind: "component", type: i1.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ValidationErrorComponent, decorators: [{
76
- type: Component,
77
- args: [{ selector: 'ui-validation-error', changeDetection: ChangeDetectionStrategy.OnPush, imports: [IconComponentModule, AsyncPipe, UiTranslatePipe], template: "@for (key of customErrorKeys; track $index) {\n @if (ngControl?.hasError(key) && (touchedOn ? ngControl?.touched : true)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ resolveErrorMessage(key) }}</span>\n </div>\n }\n}\n\n@if (ngControl?.hasError('maxlength') && !customErrors['maxlength']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MAX_LENGTH' | uiTranslate: { maxlength: getErrorValue('maxlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('minlength') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MIN_LENGTH' | uiTranslate: { maxlength: getErrorValue('minlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('min') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MIN' | uiTranslate: { min: getErrorValue('min') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('max') && !customErrors['max']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MAX' | uiTranslate: { max: getErrorValue('max') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('required') && (touchedOn ? ngControl?.touched : true) && !customErrors['required']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + (label ? 'REQUIRED_FIELD' : 'REQUIRED') | uiTranslate: { label } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('email') && !customErrors['email']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'EMAIL_INCORRECT' | uiTranslate | async }}</span>\n </div>\n}\n\n@if (errorMessage) {\n <div class=\"custom-errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ errorMessage }}</span>\n </div>\n}\n" }]
78
- }], propDecorators: { ngControl: [{
79
- type: Input
80
- }], touchedOn: [{
81
- type: Input
82
- }], errorMessage: [{
83
- type: Input
84
- }], label: [{
85
- type: Input
86
- }], applicationTheme: [{
87
- type: HostBinding,
88
- args: ['attr.theme']
89
- }, {
90
- type: Input
91
- }], customErrors: [{
92
- type: Input
93
- }] } });
94
-
95
- class ValidationErrorModule {
96
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ValidationErrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
97
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: ValidationErrorModule, imports: [CommonModule, IconComponentModule, UiTranslatePipe, ValidationErrorComponent], exports: [ValidationErrorComponent] }); }
98
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ValidationErrorModule, imports: [CommonModule, IconComponentModule, ValidationErrorComponent] }); }
99
- }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ValidationErrorModule, decorators: [{
101
- type: NgModule,
102
- args: [{
103
- exports: [ValidationErrorComponent],
104
- imports: [CommonModule, IconComponentModule, UiTranslatePipe, ValidationErrorComponent],
105
- }]
106
- }] });
107
-
108
- /**
109
- * Generated bundle index. Do not edit.
110
- */
111
-
1
+ import { AsyncPipe, CommonModule } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, NgModule, inject } from "@angular/core";
4
+ import { UiTranslatePipe } from "@testgorilla/tgo-ui/components/core";
5
+ import * as i1 from "@testgorilla/tgo-ui/components/icon";
6
+ import { IconComponentModule } from "@testgorilla/tgo-ui/components/icon";
7
+ var ValidationErrorComponent = class ValidationErrorComponent {
8
+ constructor() {
9
+ this.touchedOn = true;
10
+ this.errorMessage = "";
11
+ this.cdr = inject(ChangeDetectorRef);
12
+ this.applicationTheme = "light";
13
+ this.customErrors = {};
14
+ this.translationContextErrors = "ERRORS.";
15
+ }
16
+ ngDoCheck() {
17
+ const touched = this.ngControl?.touched ?? false;
18
+ const errors = this.ngControl?.errors ?? null;
19
+ if (touched !== this.lastTouched || errors !== this.lastErrors) {
20
+ this.lastTouched = touched;
21
+ this.lastErrors = errors;
22
+ this.cdr.markForCheck();
23
+ }
24
+ }
25
+ getErrorValue(type) {
26
+ const ngControlErrors = this.ngControl.errors;
27
+ switch (type) {
28
+ case "maxlength": return ngControlErrors.maxlength.requiredLength;
29
+ case "minlength": return ngControlErrors.minlength.requiredLength;
30
+ case "max": return ngControlErrors.max.max;
31
+ case "min": return ngControlErrors.min.min;
32
+ default: return 0;
33
+ }
34
+ }
35
+ get customErrorKeys() {
36
+ return Object.keys(this.customErrors);
37
+ }
38
+ resolveErrorMessage(key) {
39
+ const template = this.customErrors[key];
40
+ const errorData = this.ngControl?.errors?.[key];
41
+ if (!template) return "";
42
+ if (typeof errorData === "object" && errorData !== null) {
43
+ const data = errorData;
44
+ return template.replace(/\{\{(\w+)\}\}/g, (_match, prop) => data[prop] ?? "");
45
+ }
46
+ return template;
47
+ }
48
+ static {
49
+ this.ɵfac = i0.ɵɵngDeclareFactory({
50
+ minVersion: "12.0.0",
51
+ version: "22.2.4",
52
+ ngImport: i0,
53
+ type: ValidationErrorComponent,
54
+ deps: [],
55
+ target: i0.ɵɵFactoryTarget.Component
56
+ });
57
+ }
58
+ static {
59
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
60
+ minVersion: "17.0.0",
61
+ version: "22.2.4",
62
+ type: ValidationErrorComponent,
63
+ isStandalone: true,
64
+ selector: "ui-validation-error",
65
+ inputs: {
66
+ ngControl: "ngControl",
67
+ touchedOn: "touchedOn",
68
+ errorMessage: "errorMessage",
69
+ label: "label",
70
+ applicationTheme: "applicationTheme",
71
+ customErrors: "customErrors"
72
+ },
73
+ host: { properties: { "attr.theme": "this.applicationTheme" } },
74
+ ngImport: i0,
75
+ template: "@for (key of customErrorKeys; track $index) {\n @if (ngControl?.hasError(key) && (touchedOn ? ngControl?.touched : true)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ resolveErrorMessage(key) }}</span>\n </div>\n }\n}\n\n@if (ngControl?.hasError('maxlength') && !customErrors['maxlength']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MAX_LENGTH' | uiTranslate: { maxlength: getErrorValue('maxlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('minlength') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MIN_LENGTH' | uiTranslate: { maxlength: getErrorValue('minlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('min') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MIN' | uiTranslate: { min: getErrorValue('min') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('max') && !customErrors['max']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MAX' | uiTranslate: { max: getErrorValue('max') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('required') && (touchedOn ? ngControl?.touched : true) && !customErrors['required']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + (label ? 'REQUIRED_FIELD' : 'REQUIRED') | uiTranslate: { label } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('email') && !customErrors['email']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'EMAIL_INCORRECT' | uiTranslate | async }}</span>\n </div>\n}\n\n@if (errorMessage) {\n <div class=\"custom-errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ errorMessage }}</span>\n </div>\n}\n",
76
+ styles: [""],
77
+ dependencies: [
78
+ {
79
+ kind: "ngmodule",
80
+ type: IconComponentModule
81
+ },
82
+ {
83
+ kind: "component",
84
+ type: i1.IconComponent,
85
+ selector: "ui-icon",
86
+ inputs: [
87
+ "size",
88
+ "cssClass",
89
+ "name",
90
+ "color",
91
+ "filled",
92
+ "toggleIconStyle",
93
+ "applicationTheme",
94
+ "useFullIconName"
95
+ ]
96
+ },
97
+ {
98
+ kind: "pipe",
99
+ type: AsyncPipe,
100
+ name: "async"
101
+ },
102
+ {
103
+ kind: "pipe",
104
+ type: UiTranslatePipe,
105
+ name: "uiTranslate"
106
+ }
107
+ ],
108
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
109
+ });
110
+ }
111
+ };
112
+ i0.ɵɵngDeclareClassMetadata({
113
+ minVersion: "12.0.0",
114
+ version: "22.2.4",
115
+ ngImport: i0,
116
+ type: ValidationErrorComponent,
117
+ decorators: [{
118
+ type: Component,
119
+ args: [{
120
+ selector: "ui-validation-error",
121
+ changeDetection: ChangeDetectionStrategy.OnPush,
122
+ imports: [
123
+ IconComponentModule,
124
+ AsyncPipe,
125
+ UiTranslatePipe
126
+ ],
127
+ template: "@for (key of customErrorKeys; track $index) {\n @if (ngControl?.hasError(key) && (touchedOn ? ngControl?.touched : true)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ resolveErrorMessage(key) }}</span>\n </div>\n }\n}\n\n@if (ngControl?.hasError('maxlength') && !customErrors['maxlength']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MAX_LENGTH' | uiTranslate: { maxlength: getErrorValue('maxlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('minlength') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MIN_LENGTH' | uiTranslate: { maxlength: getErrorValue('minlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('min') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MIN' | uiTranslate: { min: getErrorValue('min') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('max') && !customErrors['max']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MAX' | uiTranslate: { max: getErrorValue('max') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('required') && (touchedOn ? ngControl?.touched : true) && !customErrors['required']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + (label ? 'REQUIRED_FIELD' : 'REQUIRED') | uiTranslate: { label } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('email') && !customErrors['email']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'EMAIL_INCORRECT' | uiTranslate | async }}</span>\n </div>\n}\n\n@if (errorMessage) {\n <div class=\"custom-errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ errorMessage }}</span>\n </div>\n}\n"
128
+ }]
129
+ }],
130
+ propDecorators: {
131
+ ngControl: [{ type: Input }],
132
+ touchedOn: [{ type: Input }],
133
+ errorMessage: [{ type: Input }],
134
+ label: [{ type: Input }],
135
+ applicationTheme: [{
136
+ type: HostBinding,
137
+ args: ["attr.theme"]
138
+ }, { type: Input }],
139
+ customErrors: [{ type: Input }]
140
+ }
141
+ });
142
+ var ValidationErrorModule = class ValidationErrorModule {
143
+ static {
144
+ this.ɵfac = i0.ɵɵngDeclareFactory({
145
+ minVersion: "12.0.0",
146
+ version: "22.2.4",
147
+ ngImport: i0,
148
+ type: ValidationErrorModule,
149
+ deps: [],
150
+ target: i0.ɵɵFactoryTarget.NgModule
151
+ });
152
+ }
153
+ static {
154
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
155
+ minVersion: "14.0.0",
156
+ version: "22.2.4",
157
+ ngImport: i0,
158
+ type: ValidationErrorModule,
159
+ imports: [
160
+ CommonModule,
161
+ IconComponentModule,
162
+ UiTranslatePipe,
163
+ ValidationErrorComponent
164
+ ],
165
+ exports: [ValidationErrorComponent]
166
+ });
167
+ }
168
+ static {
169
+ this.ɵinj = i0.ɵɵngDeclareInjector({
170
+ minVersion: "12.0.0",
171
+ version: "22.2.4",
172
+ ngImport: i0,
173
+ type: ValidationErrorModule,
174
+ imports: [
175
+ CommonModule,
176
+ IconComponentModule,
177
+ ValidationErrorComponent
178
+ ]
179
+ });
180
+ }
181
+ };
182
+ i0.ɵɵngDeclareClassMetadata({
183
+ minVersion: "12.0.0",
184
+ version: "22.2.4",
185
+ ngImport: i0,
186
+ type: ValidationErrorModule,
187
+ decorators: [{
188
+ type: NgModule,
189
+ args: [{
190
+ exports: [ValidationErrorComponent],
191
+ imports: [
192
+ CommonModule,
193
+ IconComponentModule,
194
+ UiTranslatePipe,
195
+ ValidationErrorComponent
196
+ ]
197
+ }]
198
+ }]
199
+ });
112
200
  export { ValidationErrorComponent, ValidationErrorModule };
113
- //# sourceMappingURL=testgorilla-tgo-ui-components-validation-error.mjs.map
201
+
202
+ //# sourceMappingURL=testgorilla-tgo-ui-components-validation-error.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"testgorilla-tgo-ui-components-validation-error.mjs","sources":["../../../components/validation-error/validation-error.component.ts","../../../components/validation-error/validation-error.component.html","../../../components/validation-error/validation-error.module.ts","../../../components/validation-error/testgorilla-tgo-ui-components-validation-error.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { NgControl, ValidationErrors } from '@angular/forms';\n\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { ErrorType } from './validation-error.model';\n\n/**\n * Shapes of the built-in Angular range/length validator errors this component reads.\n * Each entry is only accessed once its matching error key is present (the template\n * shows the message for exactly that error), mirroring the previous `any` access.\n */\ninterface RangeValidationErrors {\n maxlength: { requiredLength: number };\n minlength: { requiredLength: number };\n max: { max: number };\n min: { min: number };\n}\n\n@Component({\n selector: 'ui-validation-error',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './validation-error.component.html',\n styleUrls: ['./validation-error.component.scss'],\n imports: [IconComponentModule, AsyncPipe, UiTranslatePipe],\n})\nexport class ValidationErrorComponent implements DoCheck {\n @Input() ngControl: NgControl;\n @Input() touchedOn = true;\n @Input() errorMessage = '';\n\n private readonly cdr = inject(ChangeDetectorRef);\n private lastTouched?: boolean;\n private lastErrors?: ValidationErrors | null;\n\n /**\n * The template renders off `ngControl.touched`/`ngControl.errors` — mutable\n * state behind a stable input reference, which OnPush alone never re-checks\n * (blur or markAllAsTouched() marks the parent view, not this one).\n * ngDoCheck runs whenever an ancestor is checked, so snapshot that state and\n * mark this view when it moves (same pattern as autocomplete-v2's ngDoCheck).\n */\n ngDoCheck(): void {\n const touched = this.ngControl?.touched ?? false;\n const errors = this.ngControl?.errors ?? null;\n if (touched !== this.lastTouched || errors !== this.lastErrors) {\n this.lastTouched = touched;\n this.lastErrors = errors;\n this.cdr.markForCheck();\n }\n }\n\n @Input() label: string | undefined | null;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof ValidationErrorComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n /** Maps validator error keys to display message templates. Supports {{placeholder}} interpolation. */\n @Input() customErrors: Record<string, string> = {};\n\n getErrorValue(type: ErrorType): number {\n const ngControlErrors = this.ngControl.errors as RangeValidationErrors;\n switch (type) {\n case 'maxlength':\n return ngControlErrors.maxlength.requiredLength;\n case 'minlength':\n return ngControlErrors.minlength.requiredLength;\n case 'max':\n return ngControlErrors.max.max;\n case 'min':\n return ngControlErrors.min.min;\n default:\n return 0;\n }\n }\n\n get customErrorKeys(): string[] {\n return Object.keys(this.customErrors);\n }\n\n resolveErrorMessage(key: string): string {\n const template = this.customErrors[key];\n const errorData: unknown = this.ngControl?.errors?.[key];\n if (!template) {\n return '';\n }\n if (typeof errorData === 'object' && errorData !== null) {\n const data = errorData as Record<string, unknown>;\n // Replace {{key}} placeholders with error data values\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_match: string, prop: string) => (data[prop] as string) ?? '');\n }\n return template;\n }\n\n translationContextErrors = 'ERRORS.';\n}\n","@for (key of customErrorKeys; track $index) {\n @if (ngControl?.hasError(key) && (touchedOn ? ngControl?.touched : true)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ resolveErrorMessage(key) }}</span>\n </div>\n }\n}\n\n@if (ngControl?.hasError('maxlength') && !customErrors['maxlength']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MAX_LENGTH' | uiTranslate: { maxlength: getErrorValue('maxlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('minlength') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MIN_LENGTH' | uiTranslate: { maxlength: getErrorValue('minlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('min') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MIN' | uiTranslate: { min: getErrorValue('min') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('max') && !customErrors['max']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MAX' | uiTranslate: { max: getErrorValue('max') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('required') && (touchedOn ? ngControl?.touched : true) && !customErrors['required']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + (label ? 'REQUIRED_FIELD' : 'REQUIRED') | uiTranslate: { label } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('email') && !customErrors['email']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'EMAIL_INCORRECT' | uiTranslate | async }}</span>\n </div>\n}\n\n@if (errorMessage) {\n <div class=\"custom-errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ errorMessage }}</span>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { ValidationErrorComponent } from './validation-error.component';\n\n@NgModule({\n exports: [ValidationErrorComponent],\n imports: [CommonModule, IconComponentModule, UiTranslatePipe, ValidationErrorComponent],\n})\nexport class ValidationErrorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testgorilla-tgo-ui-components-validation-error.mjs","names":[],"sources":["../../../components/validation-error/validation-error.component.ts","../../../components/validation-error/validation-error.component.html","../../../components/validation-error/validation-error.module.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { NgControl, ValidationErrors } from '@angular/forms';\n\nimport { ApplicationTheme, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { ErrorType } from './validation-error.model';\n\n/**\n * Shapes of the built-in Angular range/length validator errors this component reads.\n * Each entry is only accessed once its matching error key is present (the template\n * shows the message for exactly that error), mirroring the previous `any` access.\n */\ninterface RangeValidationErrors {\n maxlength: { requiredLength: number };\n minlength: { requiredLength: number };\n max: { max: number };\n min: { min: number };\n}\n\n@Component({\n selector: 'ui-validation-error',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './validation-error.component.html',\n styleUrls: ['./validation-error.component.scss'],\n imports: [IconComponentModule, AsyncPipe, UiTranslatePipe],\n})\nexport class ValidationErrorComponent implements DoCheck {\n @Input() ngControl: NgControl;\n @Input() touchedOn = true;\n @Input() errorMessage = '';\n\n private readonly cdr = inject(ChangeDetectorRef);\n private lastTouched?: boolean;\n private lastErrors?: ValidationErrors | null;\n\n /**\n * The template renders off `ngControl.touched`/`ngControl.errors` — mutable\n * state behind a stable input reference, which OnPush alone never re-checks\n * (blur or markAllAsTouched() marks the parent view, not this one).\n * ngDoCheck runs whenever an ancestor is checked, so snapshot that state and\n * mark this view when it moves (same pattern as autocomplete-v2's ngDoCheck).\n */\n ngDoCheck(): void {\n const touched = this.ngControl?.touched ?? false;\n const errors = this.ngControl?.errors ?? null;\n if (touched !== this.lastTouched || errors !== this.lastErrors) {\n this.lastTouched = touched;\n this.lastErrors = errors;\n this.cdr.markForCheck();\n }\n }\n\n @Input() label: string | undefined | null;\n\n /**\n *\n * Defines the application theme\n *\n * @type {ApplicationTheme}\n * @memberof ValidationErrorComponent\n */\n @HostBinding('attr.theme')\n @Input()\n applicationTheme: ApplicationTheme = 'light';\n\n /** Maps validator error keys to display message templates. Supports {{placeholder}} interpolation. */\n @Input() customErrors: Record<string, string> = {};\n\n getErrorValue(type: ErrorType): number {\n const ngControlErrors = this.ngControl.errors as RangeValidationErrors;\n switch (type) {\n case 'maxlength':\n return ngControlErrors.maxlength.requiredLength;\n case 'minlength':\n return ngControlErrors.minlength.requiredLength;\n case 'max':\n return ngControlErrors.max.max;\n case 'min':\n return ngControlErrors.min.min;\n default:\n return 0;\n }\n }\n\n get customErrorKeys(): string[] {\n return Object.keys(this.customErrors);\n }\n\n resolveErrorMessage(key: string): string {\n const template = this.customErrors[key];\n const errorData: unknown = this.ngControl?.errors?.[key];\n if (!template) {\n return '';\n }\n if (typeof errorData === 'object' && errorData !== null) {\n const data = errorData as Record<string, unknown>;\n // Replace {{key}} placeholders with error data values\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_match: string, prop: string) => (data[prop] as string) ?? '');\n }\n return template;\n }\n\n translationContextErrors = 'ERRORS.';\n}\n","@for (key of customErrorKeys; track $index) {\n @if (ngControl?.hasError(key) && (touchedOn ? ngControl?.touched : true)) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ resolveErrorMessage(key) }}</span>\n </div>\n }\n}\n\n@if (ngControl?.hasError('maxlength') && !customErrors['maxlength']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MAX_LENGTH' | uiTranslate: { maxlength: getErrorValue('maxlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('minlength') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + 'MIN_LENGTH' | uiTranslate: { maxlength: getErrorValue('minlength') } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('min') && !customErrors['min']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MIN' | uiTranslate: { min: getErrorValue('min') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('max') && !customErrors['max']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'MAX' | uiTranslate: { max: getErrorValue('max') } | async }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('required') && (touchedOn ? ngControl?.touched : true) && !customErrors['required']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{\n translationContextErrors + (label ? 'REQUIRED_FIELD' : 'REQUIRED') | uiTranslate: { label } | async\n }}</span>\n </div>\n}\n\n@if (ngControl?.hasError('email') && !customErrors['email']) {\n <div class=\"errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ translationContextErrors + 'EMAIL_INCORRECT' | uiTranslate | async }}</span>\n </div>\n}\n\n@if (errorMessage) {\n <div class=\"custom-errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" [name]=\"'Error'\"></ui-icon>\n <span>{{ errorMessage }}</span>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';\nimport { IconComponentModule } from '@testgorilla/tgo-ui/components/icon';\n\nimport { ValidationErrorComponent } from './validation-error.component';\n\n@NgModule({\n exports: [ValidationErrorComponent],\n imports: [CommonModule, IconComponentModule, UiTranslatePipe, ValidationErrorComponent],\n})\nexport class ValidationErrorModule {}\n"],"mappings":"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"}