@nocios/crudify-components 2.0.60 → 2.0.81

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 (362) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/coverage/components/CrudiaAutoGenerate.tsx.html +616 -0
  3. package/coverage/components/CrudiaFileField/CrudiaFileField.tsx.html +1312 -0
  4. package/coverage/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
  5. package/coverage/components/CrudiaFileField/components/DropZone.tsx.html +523 -0
  6. package/coverage/components/CrudiaFileField/components/FileItemRow.tsx.html +835 -0
  7. package/coverage/components/CrudiaFileField/components/FileThumbnail.tsx.html +1585 -0
  8. package/coverage/components/CrudiaFileField/components/index.html +176 -0
  9. package/coverage/components/CrudiaFileField/components/index.ts.html +115 -0
  10. package/coverage/components/CrudiaFileField/hooks/index.html +146 -0
  11. package/coverage/components/CrudiaFileField/hooks/index.ts.html +112 -0
  12. package/coverage/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +433 -0
  13. package/coverage/components/CrudiaFileField/hooks/useDragDrop.ts.html +409 -0
  14. package/coverage/components/CrudiaFileField/index.html +131 -0
  15. package/coverage/components/CrudiaFileField/index.ts.html +112 -0
  16. package/coverage/components/CrudiaFileField/utils/formatters.ts.html +169 -0
  17. package/coverage/components/CrudiaFileField/utils/icons.tsx.html +253 -0
  18. package/coverage/components/CrudiaFileField/utils/index.html +146 -0
  19. package/coverage/components/CrudiaFileField/utils/index.ts.html +103 -0
  20. package/coverage/components/CrudiaMarkdownField.tsx.html +676 -0
  21. package/coverage/components/CrudifyInitializer.tsx.html +712 -0
  22. package/coverage/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +640 -0
  23. package/coverage/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +730 -0
  24. package/coverage/components/CrudifyLogin/Forms/LoginForm.tsx.html +892 -0
  25. package/coverage/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1219 -0
  26. package/coverage/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +289 -0
  27. package/coverage/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
  28. package/coverage/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +346 -0
  29. package/coverage/components/CrudifyLogin/Forms/components/index.html +161 -0
  30. package/coverage/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
  31. package/coverage/components/CrudifyLogin/Forms/index.html +176 -0
  32. package/coverage/components/CrudifyLogin/Forms/index.ts.html +145 -0
  33. package/coverage/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
  34. package/coverage/components/CrudifyLogin/Forms/utils/index.html +161 -0
  35. package/coverage/components/CrudifyLogin/Forms/utils/index.ts.html +121 -0
  36. package/coverage/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +496 -0
  37. package/coverage/components/CrudifyLogin/Forms/utils/validation.ts.html +307 -0
  38. package/coverage/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +268 -0
  39. package/coverage/components/CrudifyLogin/components/index.html +116 -0
  40. package/coverage/components/CrudifyLogin/context/CrudifyProvider.tsx.html +409 -0
  41. package/coverage/components/CrudifyLogin/context/I18nProvider.tsx.html +430 -0
  42. package/coverage/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1261 -0
  43. package/coverage/components/CrudifyLogin/context/index.html +161 -0
  44. package/coverage/components/CrudifyLogin/context/index.ts.html +91 -0
  45. package/coverage/components/CrudifyLogin/hooks/index.html +131 -0
  46. package/coverage/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +463 -0
  47. package/coverage/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +391 -0
  48. package/coverage/components/CrudifyLogin/index.html +116 -0
  49. package/coverage/components/CrudifyLogin/index.tsx.html +466 -0
  50. package/coverage/components/CrudifyLogin/utils/index.html +116 -0
  51. package/coverage/components/CrudifyLogin/utils/secureStorage.ts.html +859 -0
  52. package/coverage/components/GlobalNotificationProvider.tsx.html +844 -0
  53. package/coverage/components/LoginComponent.tsx.html +676 -0
  54. package/coverage/components/PasswordRequirements/index.html +116 -0
  55. package/coverage/components/PasswordRequirements/index.tsx.html +232 -0
  56. package/coverage/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +1078 -0
  57. package/coverage/components/PublicPolicies/FieldSelector/index.html +131 -0
  58. package/coverage/components/PublicPolicies/FieldSelector/index.ts.html +88 -0
  59. package/coverage/components/PublicPolicies/Policies.tsx.html +625 -0
  60. package/coverage/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +886 -0
  61. package/coverage/components/PublicPolicies/PolicyItem/index.html +131 -0
  62. package/coverage/components/PublicPolicies/PolicyItem/index.ts.html +88 -0
  63. package/coverage/components/PublicPolicies/constants.ts.html +106 -0
  64. package/coverage/components/PublicPolicies/index.html +146 -0
  65. package/coverage/components/PublicPolicies/index.ts.html +88 -0
  66. package/coverage/components/Routing/AuthRoute.tsx.html +382 -0
  67. package/coverage/components/Routing/GuestRoute.tsx.html +352 -0
  68. package/coverage/components/Routing/ProtectedRoute.tsx.html +316 -0
  69. package/coverage/components/Routing/index.html +161 -0
  70. package/coverage/components/Routing/index.ts.html +109 -0
  71. package/coverage/components/SessionLoadingScreen/index.html +116 -0
  72. package/coverage/components/SessionLoadingScreen/index.tsx.html +379 -0
  73. package/coverage/components/SessionTimeIndicator/index.html +116 -0
  74. package/coverage/components/SessionTimeIndicator/index.tsx.html +523 -0
  75. package/coverage/components/UserProfile/UserProfileDisplay.tsx.html +931 -0
  76. package/coverage/components/UserProfile/index.html +131 -0
  77. package/coverage/components/UserProfile/index.ts.html +88 -0
  78. package/coverage/components/index.html +191 -0
  79. package/coverage/components/index.ts.html +178 -0
  80. package/coverage/core/CrossTabSyncManager.ts.html +853 -0
  81. package/coverage/core/CrudifyInitializationManager.ts.html +1279 -0
  82. package/coverage/core/SessionManager.ts.html +3064 -0
  83. package/coverage/core/index.html +146 -0
  84. package/coverage/coverage-final.json +76 -79
  85. package/coverage/hooks/index.html +191 -0
  86. package/coverage/hooks/index.ts.html +136 -0
  87. package/coverage/hooks/useAuth.ts.html +529 -0
  88. package/coverage/hooks/useAutoGenerate.ts.html +571 -0
  89. package/coverage/hooks/useCrudifyWithNotifications/constants.ts.html +247 -0
  90. package/coverage/hooks/useCrudifyWithNotifications/hooks/index.html +116 -0
  91. package/coverage/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +820 -0
  92. package/coverage/hooks/useCrudifyWithNotifications/index.html +146 -0
  93. package/coverage/hooks/useCrudifyWithNotifications/index.ts.html +118 -0
  94. package/coverage/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +565 -0
  95. package/coverage/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +847 -0
  96. package/coverage/hooks/useCrudifyWithNotifications/utils/index.html +146 -0
  97. package/coverage/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +313 -0
  98. package/coverage/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +265 -0
  99. package/coverage/hooks/useData.ts.html +829 -0
  100. package/coverage/hooks/useFileUpload/index.html +131 -0
  101. package/coverage/hooks/useFileUpload/index.ts.html +112 -0
  102. package/coverage/hooks/useFileUpload/services/index.html +131 -0
  103. package/coverage/hooks/useFileUpload/services/index.ts.html +106 -0
  104. package/coverage/hooks/useFileUpload/services/uploadService.ts.html +610 -0
  105. package/coverage/hooks/useFileUpload/useFileUpload.ts.html +2092 -0
  106. package/coverage/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
  107. package/coverage/hooks/useFileUpload/utils/index.html +161 -0
  108. package/coverage/hooks/useFileUpload/utils/index.ts.html +109 -0
  109. package/coverage/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
  110. package/coverage/hooks/useFileUpload/utils/validation.ts.html +403 -0
  111. package/coverage/hooks/useSession/constants.ts.html +217 -0
  112. package/coverage/hooks/useSession/hooks/index.html +176 -0
  113. package/coverage/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
  114. package/coverage/hooks/useSession/hooks/useCrossTabSync.ts.html +535 -0
  115. package/coverage/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
  116. package/coverage/hooks/useSession/hooks/useSessionState.ts.html +295 -0
  117. package/coverage/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +535 -0
  118. package/coverage/hooks/useSession/index.html +161 -0
  119. package/coverage/hooks/useSession/index.ts.html +127 -0
  120. package/coverage/hooks/useSession/types.ts.html +427 -0
  121. package/coverage/hooks/useSession/useSession.ts.html +526 -0
  122. package/coverage/hooks/useSession/utils/index.html +131 -0
  123. package/coverage/hooks/useSession/utils/initializeSession.ts.html +424 -0
  124. package/coverage/hooks/useSession/utils/tokenUtils.ts.html +298 -0
  125. package/coverage/hooks/useUserData.ts.html +1210 -0
  126. package/coverage/hooks/useUserProfile.ts.html +820 -0
  127. package/coverage/index.html +205 -235
  128. package/coverage/lcov-report/components/CrudiaAutoGenerate.tsx.html +616 -0
  129. package/coverage/lcov-report/components/CrudiaFileField/CrudiaFileField.tsx.html +1312 -0
  130. package/coverage/lcov-report/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
  131. package/coverage/lcov-report/components/CrudiaFileField/components/DropZone.tsx.html +523 -0
  132. package/coverage/lcov-report/components/CrudiaFileField/components/FileItemRow.tsx.html +835 -0
  133. package/coverage/lcov-report/components/CrudiaFileField/components/FileThumbnail.tsx.html +1585 -0
  134. package/coverage/lcov-report/components/CrudiaFileField/components/index.html +176 -0
  135. package/coverage/lcov-report/components/CrudiaFileField/components/index.ts.html +115 -0
  136. package/coverage/lcov-report/components/CrudiaFileField/hooks/index.html +146 -0
  137. package/coverage/lcov-report/components/CrudiaFileField/hooks/index.ts.html +112 -0
  138. package/coverage/lcov-report/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +433 -0
  139. package/coverage/lcov-report/components/CrudiaFileField/hooks/useDragDrop.ts.html +409 -0
  140. package/coverage/lcov-report/components/CrudiaFileField/index.html +131 -0
  141. package/coverage/lcov-report/components/CrudiaFileField/index.ts.html +112 -0
  142. package/coverage/lcov-report/components/CrudiaFileField/utils/formatters.ts.html +169 -0
  143. package/coverage/lcov-report/components/CrudiaFileField/utils/icons.tsx.html +253 -0
  144. package/coverage/lcov-report/components/CrudiaFileField/utils/index.html +146 -0
  145. package/coverage/lcov-report/components/CrudiaFileField/utils/index.ts.html +103 -0
  146. package/coverage/lcov-report/components/CrudiaMarkdownField.tsx.html +676 -0
  147. package/coverage/lcov-report/components/CrudifyInitializer.tsx.html +712 -0
  148. package/coverage/lcov-report/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +640 -0
  149. package/coverage/lcov-report/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +730 -0
  150. package/coverage/lcov-report/components/CrudifyLogin/Forms/LoginForm.tsx.html +892 -0
  151. package/coverage/lcov-report/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1219 -0
  152. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +289 -0
  153. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
  154. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +346 -0
  155. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.html +161 -0
  156. package/coverage/lcov-report/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
  157. package/coverage/lcov-report/components/CrudifyLogin/Forms/index.html +176 -0
  158. package/coverage/lcov-report/components/CrudifyLogin/Forms/index.ts.html +145 -0
  159. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
  160. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.html +161 -0
  161. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/index.ts.html +121 -0
  162. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +496 -0
  163. package/coverage/lcov-report/components/CrudifyLogin/Forms/utils/validation.ts.html +307 -0
  164. package/coverage/lcov-report/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +268 -0
  165. package/coverage/lcov-report/components/CrudifyLogin/components/index.html +116 -0
  166. package/coverage/lcov-report/components/CrudifyLogin/context/CrudifyProvider.tsx.html +409 -0
  167. package/coverage/lcov-report/components/CrudifyLogin/context/I18nProvider.tsx.html +430 -0
  168. package/coverage/lcov-report/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1261 -0
  169. package/coverage/lcov-report/components/CrudifyLogin/context/index.html +161 -0
  170. package/coverage/lcov-report/components/CrudifyLogin/context/index.ts.html +91 -0
  171. package/coverage/lcov-report/components/CrudifyLogin/hooks/index.html +131 -0
  172. package/coverage/lcov-report/components/CrudifyLogin/hooks/useCrudifyLogin.ts.html +463 -0
  173. package/coverage/lcov-report/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +391 -0
  174. package/coverage/lcov-report/components/CrudifyLogin/index.html +116 -0
  175. package/coverage/lcov-report/components/CrudifyLogin/index.tsx.html +466 -0
  176. package/coverage/lcov-report/components/CrudifyLogin/utils/index.html +116 -0
  177. package/coverage/lcov-report/components/CrudifyLogin/utils/secureStorage.ts.html +859 -0
  178. package/coverage/lcov-report/components/GlobalNotificationProvider.tsx.html +844 -0
  179. package/coverage/lcov-report/components/LoginComponent.tsx.html +676 -0
  180. package/coverage/lcov-report/components/PasswordRequirements/index.html +116 -0
  181. package/coverage/lcov-report/components/PasswordRequirements/index.tsx.html +232 -0
  182. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +1078 -0
  183. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.html +131 -0
  184. package/coverage/lcov-report/components/PublicPolicies/FieldSelector/index.ts.html +88 -0
  185. package/coverage/lcov-report/components/PublicPolicies/Policies.tsx.html +625 -0
  186. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +886 -0
  187. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.html +131 -0
  188. package/coverage/lcov-report/components/PublicPolicies/PolicyItem/index.ts.html +88 -0
  189. package/coverage/lcov-report/components/PublicPolicies/constants.ts.html +106 -0
  190. package/coverage/lcov-report/components/PublicPolicies/index.html +146 -0
  191. package/coverage/lcov-report/components/PublicPolicies/index.ts.html +88 -0
  192. package/coverage/lcov-report/components/Routing/AuthRoute.tsx.html +382 -0
  193. package/coverage/lcov-report/components/Routing/GuestRoute.tsx.html +352 -0
  194. package/coverage/lcov-report/components/Routing/ProtectedRoute.tsx.html +316 -0
  195. package/coverage/lcov-report/components/Routing/index.html +161 -0
  196. package/coverage/lcov-report/components/Routing/index.ts.html +109 -0
  197. package/coverage/lcov-report/components/SessionLoadingScreen/index.html +116 -0
  198. package/coverage/lcov-report/components/SessionLoadingScreen/index.tsx.html +379 -0
  199. package/coverage/lcov-report/components/SessionTimeIndicator/index.html +116 -0
  200. package/coverage/lcov-report/components/SessionTimeIndicator/index.tsx.html +523 -0
  201. package/coverage/lcov-report/components/UserProfile/UserProfileDisplay.tsx.html +931 -0
  202. package/coverage/lcov-report/components/UserProfile/index.html +131 -0
  203. package/coverage/lcov-report/components/UserProfile/index.ts.html +88 -0
  204. package/coverage/lcov-report/components/index.html +191 -0
  205. package/coverage/lcov-report/components/index.ts.html +178 -0
  206. package/coverage/lcov-report/core/CrossTabSyncManager.ts.html +853 -0
  207. package/coverage/lcov-report/core/CrudifyInitializationManager.ts.html +1279 -0
  208. package/coverage/lcov-report/core/SessionManager.ts.html +3064 -0
  209. package/coverage/lcov-report/core/index.html +146 -0
  210. package/coverage/lcov-report/hooks/index.html +191 -0
  211. package/coverage/lcov-report/hooks/index.ts.html +136 -0
  212. package/coverage/lcov-report/hooks/useAuth.ts.html +529 -0
  213. package/coverage/lcov-report/hooks/useAutoGenerate.ts.html +571 -0
  214. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/constants.ts.html +247 -0
  215. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/index.html +116 -0
  216. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/hooks/useCrudOperations.ts.html +820 -0
  217. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.html +146 -0
  218. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/index.ts.html +118 -0
  219. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/useCrudifyWithNotifications.ts.html +565 -0
  220. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/errorMessageResolver.ts.html +847 -0
  221. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/index.html +146 -0
  222. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/notificationFilters.ts.html +313 -0
  223. package/coverage/lcov-report/hooks/useCrudifyWithNotifications/utils/successMessageResolver.ts.html +265 -0
  224. package/coverage/lcov-report/hooks/useData.ts.html +829 -0
  225. package/coverage/lcov-report/hooks/useFileUpload/index.html +131 -0
  226. package/coverage/lcov-report/hooks/useFileUpload/index.ts.html +112 -0
  227. package/coverage/lcov-report/hooks/useFileUpload/services/index.html +131 -0
  228. package/coverage/lcov-report/hooks/useFileUpload/services/index.ts.html +106 -0
  229. package/coverage/lcov-report/hooks/useFileUpload/services/uploadService.ts.html +610 -0
  230. package/coverage/lcov-report/hooks/useFileUpload/useFileUpload.ts.html +2092 -0
  231. package/coverage/lcov-report/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
  232. package/coverage/lcov-report/hooks/useFileUpload/utils/index.html +161 -0
  233. package/coverage/lcov-report/hooks/useFileUpload/utils/index.ts.html +109 -0
  234. package/coverage/lcov-report/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
  235. package/coverage/lcov-report/hooks/useFileUpload/utils/validation.ts.html +403 -0
  236. package/coverage/lcov-report/hooks/useSession/constants.ts.html +217 -0
  237. package/coverage/lcov-report/hooks/useSession/hooks/index.html +176 -0
  238. package/coverage/lcov-report/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
  239. package/coverage/lcov-report/hooks/useSession/hooks/useCrossTabSync.ts.html +535 -0
  240. package/coverage/lcov-report/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
  241. package/coverage/lcov-report/hooks/useSession/hooks/useSessionState.ts.html +295 -0
  242. package/coverage/lcov-report/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +535 -0
  243. package/coverage/lcov-report/hooks/useSession/index.html +161 -0
  244. package/coverage/lcov-report/hooks/useSession/index.ts.html +127 -0
  245. package/coverage/lcov-report/hooks/useSession/types.ts.html +427 -0
  246. package/coverage/lcov-report/hooks/useSession/useSession.ts.html +526 -0
  247. package/coverage/lcov-report/hooks/useSession/utils/index.html +131 -0
  248. package/coverage/lcov-report/hooks/useSession/utils/initializeSession.ts.html +424 -0
  249. package/coverage/lcov-report/hooks/useSession/utils/tokenUtils.ts.html +298 -0
  250. package/coverage/lcov-report/hooks/useUserData.ts.html +1210 -0
  251. package/coverage/lcov-report/hooks/useUserProfile.ts.html +820 -0
  252. package/coverage/lcov-report/index.html +205 -235
  253. package/coverage/lcov-report/providers/CrudifyThemeProvider.tsx.html +316 -0
  254. package/coverage/lcov-report/providers/SessionProvider.tsx.html +1120 -0
  255. package/coverage/lcov-report/providers/TranslationsProvider.tsx.html +1756 -0
  256. package/coverage/lcov-report/providers/index.html +146 -0
  257. package/coverage/lcov-report/services/credentialsEventBus.ts.html +319 -0
  258. package/coverage/lcov-report/services/crudifyAdminWrapper.ts.html +754 -0
  259. package/coverage/lcov-report/services/index.html +146 -0
  260. package/coverage/lcov-report/services/translationService.ts.html +1558 -0
  261. package/coverage/lcov-report/translations/critical.ts.html +1216 -0
  262. package/coverage/lcov-report/translations/index.html +116 -0
  263. package/coverage/lcov-report/types/index.html +116 -0
  264. package/coverage/lcov-report/types/password.ts.html +178 -0
  265. package/coverage/lcov-report/utils/authErrorDetector.ts.html +793 -0
  266. package/coverage/lcov-report/utils/authEventBus.ts.html +454 -0
  267. package/coverage/lcov-report/utils/configResolver.ts.html +460 -0
  268. package/coverage/lcov-report/utils/cookieSync.ts.html +595 -0
  269. package/coverage/lcov-report/utils/errorHandler.ts.html +1480 -0
  270. package/coverage/lcov-report/utils/errorTranslation.ts.html +868 -0
  271. package/coverage/lcov-report/utils/index.html +341 -0
  272. package/coverage/lcov-report/utils/index.ts.html +193 -0
  273. package/coverage/lcov-report/utils/jwtUtils.ts.html +325 -0
  274. package/coverage/lcov-report/utils/logger.ts.html +952 -0
  275. package/coverage/lcov-report/utils/navigationTracker.ts.html +562 -0
  276. package/coverage/lcov-report/utils/passwordValidation.ts.html +259 -0
  277. package/coverage/lcov-report/utils/preAuthCheck.ts.html +442 -0
  278. package/coverage/lcov-report/utils/redirectSecurity.ts.html +733 -0
  279. package/coverage/lcov-report/utils/tenantConfig.ts.html +712 -0
  280. package/coverage/lcov-report/utils/tokenStorage.ts.html +1825 -0
  281. package/coverage/lcov-report/utils/webCrypto.ts.html +490 -0
  282. package/coverage/lcov.info +15262 -14283
  283. package/coverage/providers/CrudifyThemeProvider.tsx.html +316 -0
  284. package/coverage/providers/SessionProvider.tsx.html +1120 -0
  285. package/coverage/providers/TranslationsProvider.tsx.html +1756 -0
  286. package/coverage/providers/index.html +146 -0
  287. package/coverage/services/credentialsEventBus.ts.html +319 -0
  288. package/coverage/services/crudifyAdminWrapper.ts.html +754 -0
  289. package/coverage/services/index.html +146 -0
  290. package/coverage/services/translationService.ts.html +1558 -0
  291. package/coverage/translations/critical.ts.html +1216 -0
  292. package/coverage/translations/index.html +116 -0
  293. package/coverage/types/index.html +116 -0
  294. package/coverage/types/password.ts.html +178 -0
  295. package/coverage/utils/authErrorDetector.ts.html +793 -0
  296. package/coverage/utils/authEventBus.ts.html +454 -0
  297. package/coverage/utils/configResolver.ts.html +460 -0
  298. package/coverage/utils/cookieSync.ts.html +595 -0
  299. package/coverage/utils/errorHandler.ts.html +1480 -0
  300. package/coverage/utils/errorTranslation.ts.html +868 -0
  301. package/coverage/utils/index.html +341 -0
  302. package/coverage/utils/index.ts.html +193 -0
  303. package/coverage/utils/jwtUtils.ts.html +325 -0
  304. package/coverage/utils/logger.ts.html +952 -0
  305. package/coverage/utils/navigationTracker.ts.html +562 -0
  306. package/coverage/utils/passwordValidation.ts.html +259 -0
  307. package/coverage/utils/preAuthCheck.ts.html +442 -0
  308. package/coverage/utils/redirectSecurity.ts.html +733 -0
  309. package/coverage/utils/tenantConfig.ts.html +712 -0
  310. package/coverage/utils/tokenStorage.ts.html +1825 -0
  311. package/coverage/utils/webCrypto.ts.html +490 -0
  312. package/dist/{CrudiaMarkdownField-CkiBwG-U.d.ts → CrudiaMarkdownField-DM6NR8zw.d.mts} +22 -22
  313. package/dist/{CrudiaMarkdownField-D-DqiXMQ.d.mts → CrudiaMarkdownField-UJaiSq9_.d.ts} +22 -22
  314. package/dist/{GlobalNotificationProvider-CdwdNv_8.d.mts → GlobalNotificationProvider-Cx540WKg.d.mts} +15 -15
  315. package/dist/{GlobalNotificationProvider-CdwdNv_8.d.ts → GlobalNotificationProvider-Cx540WKg.d.ts} +15 -15
  316. package/dist/chunk-2DXLCBOT.mjs +1 -0
  317. package/dist/chunk-DYRZIARH.js +1 -0
  318. package/dist/chunk-GCSJXEGT.mjs +1 -0
  319. package/dist/chunk-GJUZD5ZN.js +1 -0
  320. package/dist/chunk-K47I475N.js +1 -0
  321. package/dist/chunk-OCYZGEM5.mjs +1 -0
  322. package/dist/chunk-PI7HPRDB.js +1 -0
  323. package/dist/chunk-QVEUGJBY.mjs +1 -0
  324. package/dist/chunk-UROR7G7N.mjs +1 -0
  325. package/dist/chunk-XFT47DEL.js +1 -0
  326. package/dist/components.d.mts +8 -8
  327. package/dist/components.d.ts +8 -8
  328. package/dist/components.js +1 -1
  329. package/dist/components.mjs +1 -1
  330. package/dist/{errorTranslation-CF-5JClP.d.ts → errorTranslation-BEWwDbCH.d.ts} +1 -1
  331. package/dist/{errorTranslation-BcX8AaK7.d.mts → errorTranslation-DsGZon0M.d.mts} +1 -1
  332. package/dist/hooks.d.mts +3 -3
  333. package/dist/hooks.d.ts +3 -3
  334. package/dist/hooks.js +1 -1
  335. package/dist/hooks.mjs +1 -1
  336. package/dist/{index-DEDnmsdO.d.ts → index-Dnmttf62.d.ts} +131 -114
  337. package/dist/{index-D06kTP0C.d.mts → index-ZcF6nJt4.d.mts} +131 -114
  338. package/dist/index.d.mts +153 -106
  339. package/dist/index.d.ts +153 -106
  340. package/dist/index.js +2 -2
  341. package/dist/index.mjs +2 -2
  342. package/dist/{tenantConfig-CYnS9TPV.d.mts → tenantConfig-DxpfrAof.d.mts} +1 -1
  343. package/dist/{tenantConfig-CYnS9TPV.d.ts → tenantConfig-DxpfrAof.d.ts} +1 -1
  344. package/dist/utils.d.mts +25 -25
  345. package/dist/utils.d.ts +25 -25
  346. package/dist/utils.js +1 -1
  347. package/dist/utils.mjs +1 -1
  348. package/eslint.config.mjs +2 -2
  349. package/package.json +3 -3
  350. package/tests/helpers/mockFactories.ts +218 -0
  351. package/tests/helpers/testUtils.tsx +66 -1
  352. package/vitest.config.ts +1 -0
  353. package/dist/chunk-2WAUZ6KI.js +0 -1
  354. package/dist/chunk-3IGZNZCT.mjs +0 -1
  355. package/dist/chunk-43L2PP77.mjs +0 -1
  356. package/dist/chunk-6VS5OT3A.mjs +0 -1
  357. package/dist/chunk-BWJTTMKS.js +0 -1
  358. package/dist/chunk-EMPPCCVU.js +0 -1
  359. package/dist/chunk-J43UPGBE.js +0 -1
  360. package/dist/chunk-K6ZRXOJ7.mjs +0 -1
  361. package/dist/chunk-RYQQZTEP.js +0 -1
  362. package/dist/chunk-VTMSOK4V.mjs +0 -1
@@ -0,0 +1,931 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for components/UserProfile/UserProfileDisplay.tsx</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">components/UserProfile</a> UserProfileDisplay.tsx</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">95.39% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>269/282</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">85.71% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>48/56</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">75% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>3/4</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">95.39% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>269/282</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
349
+ <span class="cline-any cline-yes">1x</span>
350
+ <span class="cline-any cline-yes">1x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
357
+ <span class="cline-any cline-yes">1x</span>
358
+ <span class="cline-any cline-yes">1x</span>
359
+ <span class="cline-any cline-yes">1x</span>
360
+ <span class="cline-any cline-yes">1x</span>
361
+ <span class="cline-any cline-yes">1x</span>
362
+ <span class="cline-any cline-yes">1x</span>
363
+ <span class="cline-any cline-yes">1x</span>
364
+ <span class="cline-any cline-yes">1x</span>
365
+ <span class="cline-any cline-yes">1x</span>
366
+ <span class="cline-any cline-yes">1x</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-yes">1x</span>
371
+ <span class="cline-any cline-yes">1x</span>
372
+ <span class="cline-any cline-yes">1x</span>
373
+ <span class="cline-any cline-yes">1x</span>
374
+ <span class="cline-any cline-yes">1x</span>
375
+ <span class="cline-any cline-yes">1x</span>
376
+ <span class="cline-any cline-yes">1x</span>
377
+ <span class="cline-any cline-yes">1x</span>
378
+ <span class="cline-any cline-yes">1x</span>
379
+ <span class="cline-any cline-yes">1x</span>
380
+ <span class="cline-any cline-yes">1x</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-yes">1x</span>
383
+ <span class="cline-any cline-yes">1x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-yes">1x</span>
386
+ <span class="cline-any cline-yes">21x</span>
387
+ <span class="cline-any cline-yes">21x</span>
388
+ <span class="cline-any cline-yes">21x</span>
389
+ <span class="cline-any cline-yes">21x</span>
390
+ <span class="cline-any cline-yes">21x</span>
391
+ <span class="cline-any cline-yes">21x</span>
392
+ <span class="cline-any cline-yes">21x</span>
393
+ <span class="cline-any cline-yes">21x</span>
394
+ <span class="cline-any cline-yes">21x</span>
395
+ <span class="cline-any cline-yes">21x</span>
396
+ <span class="cline-any cline-yes">21x</span>
397
+ <span class="cline-any cline-yes">21x</span>
398
+ <span class="cline-any cline-yes">21x</span>
399
+ <span class="cline-any cline-yes">1x</span>
400
+ <span class="cline-any cline-yes">1x</span>
401
+ <span class="cline-any cline-yes">1x</span>
402
+ <span class="cline-any cline-yes">1x</span>
403
+ <span class="cline-any cline-yes">1x</span>
404
+ <span class="cline-any cline-yes">1x</span>
405
+ <span class="cline-any cline-yes">1x</span>
406
+ <span class="cline-any cline-yes">1x</span>
407
+ <span class="cline-any cline-yes">1x</span>
408
+ <span class="cline-any cline-yes">20x</span>
409
+ <span class="cline-any cline-yes">21x</span>
410
+ <span class="cline-any cline-yes">2x</span>
411
+ <span class="cline-any cline-yes">2x</span>
412
+ <span class="cline-any cline-yes">2x</span>
413
+ <span class="cline-any cline-yes">2x</span>
414
+ <span class="cline-any cline-yes">2x</span>
415
+ <span class="cline-any cline-yes">2x</span>
416
+ <span class="cline-any cline-yes">2x</span>
417
+ <span class="cline-any cline-yes">2x</span>
418
+ <span class="cline-any cline-yes">2x</span>
419
+ <span class="cline-any cline-yes">2x</span>
420
+ <span class="cline-any cline-yes">2x</span>
421
+ <span class="cline-any cline-yes">2x</span>
422
+ <span class="cline-any cline-yes">2x</span>
423
+ <span class="cline-any cline-yes">18x</span>
424
+ <span class="cline-any cline-yes">21x</span>
425
+ <span class="cline-any cline-yes">3x</span>
426
+ <span class="cline-any cline-yes">3x</span>
427
+ <span class="cline-any cline-yes">15x</span>
428
+ <span class="cline-any cline-yes">21x</span>
429
+ <span class="cline-any cline-yes">21x</span>
430
+ <span class="cline-any cline-yes">21x</span>
431
+ <span class="cline-any cline-yes">21x</span>
432
+ <span class="cline-any cline-yes">41x</span>
433
+ <span class="cline-any cline-yes">5x</span>
434
+ <span class="cline-any cline-yes">5x</span>
435
+ <span class="cline-any cline-yes">36x</span>
436
+ <span class="cline-any cline-yes">36x</span>
437
+ <span class="cline-any cline-yes">36x</span>
438
+ <span class="cline-any cline-yes">36x</span>
439
+ <span class="cline-any cline-yes">36x</span>
440
+ <span class="cline-any cline-yes">36x</span>
441
+ <span class="cline-any cline-yes">36x</span>
442
+ <span class="cline-any cline-yes">36x</span>
443
+ <span class="cline-any cline-yes">41x</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
+ <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-yes">41x</span>
447
+ <span class="cline-any cline-yes">21x</span>
448
+ <span class="cline-any cline-yes">21x</span>
449
+ <span class="cline-any cline-yes">86x</span>
450
+ <span class="cline-any cline-no">&nbsp;</span>
451
+ <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-yes">86x</span>
453
+ <span class="cline-any cline-yes">11x</span>
454
+ <span class="cline-any cline-yes">11x</span>
455
+ <span class="cline-any cline-yes">75x</span>
456
+ <span class="cline-any cline-yes">75x</span>
457
+ <span class="cline-any cline-yes">75x</span>
458
+ <span class="cline-any cline-yes">86x</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
461
+ <span class="cline-any cline-no">&nbsp;</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-yes">86x</span>
469
+ <span class="cline-any cline-yes">21x</span>
470
+ <span class="cline-any cline-yes">21x</span>
471
+ <span class="cline-any cline-yes">21x</span>
472
+ <span class="cline-any cline-yes">21x</span>
473
+ <span class="cline-any cline-yes">21x</span>
474
+ <span class="cline-any cline-yes">21x</span>
475
+ <span class="cline-any cline-yes">21x</span>
476
+ <span class="cline-any cline-yes">21x</span>
477
+ <span class="cline-any cline-yes">21x</span>
478
+ <span class="cline-any cline-yes">21x</span>
479
+ <span class="cline-any cline-yes">21x</span>
480
+ <span class="cline-any cline-yes">21x</span>
481
+ <span class="cline-any cline-yes">21x</span>
482
+ <span class="cline-any cline-yes">21x</span>
483
+ <span class="cline-any cline-yes">21x</span>
484
+ <span class="cline-any cline-yes">21x</span>
485
+ <span class="cline-any cline-yes">21x</span>
486
+ <span class="cline-any cline-yes">21x</span>
487
+ <span class="cline-any cline-yes">21x</span>
488
+ <span class="cline-any cline-yes">21x</span>
489
+ <span class="cline-any cline-yes">21x</span>
490
+ <span class="cline-any cline-yes">21x</span>
491
+ <span class="cline-any cline-yes">21x</span>
492
+ <span class="cline-any cline-yes">21x</span>
493
+ <span class="cline-any cline-yes">21x</span>
494
+ <span class="cline-any cline-yes">21x</span>
495
+ <span class="cline-any cline-yes">21x</span>
496
+ <span class="cline-any cline-yes">14x</span>
497
+ <span class="cline-any cline-yes">14x</span>
498
+ <span class="cline-any cline-yes">14x</span>
499
+ <span class="cline-any cline-yes">14x</span>
500
+ <span class="cline-any cline-yes">14x</span>
501
+ <span class="cline-any cline-yes">14x</span>
502
+ <span class="cline-any cline-yes">14x</span>
503
+ <span class="cline-any cline-yes">14x</span>
504
+ <span class="cline-any cline-yes">14x</span>
505
+ <span class="cline-any cline-yes">14x</span>
506
+ <span class="cline-any cline-yes">14x</span>
507
+ <span class="cline-any cline-yes">14x</span>
508
+ <span class="cline-any cline-yes">14x</span>
509
+ <span class="cline-any cline-yes">14x</span>
510
+ <span class="cline-any cline-yes">11x</span>
511
+ <span class="cline-any cline-yes">11x</span>
512
+ <span class="cline-any cline-yes">11x</span>
513
+ <span class="cline-any cline-yes">11x</span>
514
+ <span class="cline-any cline-yes">11x</span>
515
+ <span class="cline-any cline-yes">11x</span>
516
+ <span class="cline-any cline-yes">14x</span>
517
+ <span class="cline-any cline-yes">14x</span>
518
+ <span class="cline-any cline-yes">14x</span>
519
+ <span class="cline-any cline-yes">14x</span>
520
+ <span class="cline-any cline-yes">14x</span>
521
+ <span class="cline-any cline-yes">14x</span>
522
+ <span class="cline-any cline-yes">70x</span>
523
+ <span class="cline-any cline-yes">55x</span>
524
+ <span class="cline-any cline-yes">55x</span>
525
+ <span class="cline-any cline-yes">55x</span>
526
+ <span class="cline-any cline-yes">55x</span>
527
+ <span class="cline-any cline-yes">55x</span>
528
+ <span class="cline-any cline-yes">55x</span>
529
+ <span class="cline-any cline-yes">55x</span>
530
+ <span class="cline-any cline-yes">55x</span>
531
+ <span class="cline-any cline-yes">55x</span>
532
+ <span class="cline-any cline-yes">15x</span>
533
+ <span class="cline-any cline-yes">14x</span>
534
+ <span class="cline-any cline-yes">14x</span>
535
+ <span class="cline-any cline-yes">14x</span>
536
+ <span class="cline-any cline-yes">14x</span>
537
+ <span class="cline-any cline-yes">9x</span>
538
+ <span class="cline-any cline-yes">9x</span>
539
+ <span class="cline-any cline-yes">9x</span>
540
+ <span class="cline-any cline-yes">9x</span>
541
+ <span class="cline-any cline-yes">9x</span>
542
+ <span class="cline-any cline-yes">9x</span>
543
+ <span class="cline-any cline-yes">9x</span>
544
+ <span class="cline-any cline-yes">9x</span>
545
+ <span class="cline-any cline-yes">29x</span>
546
+ <span class="cline-any cline-yes">9x</span>
547
+ <span class="cline-any cline-yes">9x</span>
548
+ <span class="cline-any cline-yes">1x</span>
549
+ <span class="cline-any cline-yes">9x</span>
550
+ <span class="cline-any cline-yes">9x</span>
551
+ <span class="cline-any cline-yes">9x</span>
552
+ <span class="cline-any cline-yes">14x</span>
553
+ <span class="cline-any cline-yes">14x</span>
554
+ <span class="cline-any cline-yes">14x</span>
555
+ <span class="cline-any cline-yes">21x</span>
556
+ <span class="cline-any cline-yes">21x</span>
557
+ <span class="cline-any cline-yes">21x</span>
558
+ <span class="cline-any cline-yes">14x</span>
559
+ <span class="cline-any cline-yes">14x</span>
560
+ <span class="cline-any cline-yes">14x</span>
561
+ <span class="cline-any cline-yes">14x</span>
562
+ <span class="cline-any cline-yes">14x</span>
563
+ <span class="cline-any cline-yes">14x</span>
564
+ <span class="cline-any cline-yes">14x</span>
565
+ <span class="cline-any cline-yes">14x</span>
566
+ <span class="cline-any cline-yes">14x</span>
567
+ <span class="cline-any cline-yes">14x</span>
568
+ <span class="cline-any cline-yes">14x</span>
569
+ <span class="cline-any cline-yes">14x</span>
570
+ <span class="cline-any cline-yes">14x</span>
571
+ <span class="cline-any cline-yes">84x</span>
572
+ <span class="cline-any cline-yes">56x</span>
573
+ <span class="cline-any cline-yes">56x</span>
574
+ <span class="cline-any cline-yes">56x</span>
575
+ <span class="cline-any cline-yes">56x</span>
576
+ <span class="cline-any cline-yes">56x</span>
577
+ <span class="cline-any cline-yes">56x</span>
578
+ <span class="cline-any cline-yes">56x</span>
579
+ <span class="cline-any cline-yes">56x</span>
580
+ <span class="cline-any cline-yes">27x</span>
581
+ <span class="cline-any cline-yes">29x</span>
582
+ <span class="cline-any cline-yes">56x</span>
583
+ <span class="cline-any cline-yes">56x</span>
584
+ <span class="cline-any cline-yes">56x</span>
585
+ <span class="cline-any cline-yes">14x</span>
586
+ <span class="cline-any cline-yes">14x</span>
587
+ <span class="cline-any cline-yes">14x</span>
588
+ <span class="cline-any cline-yes">14x</span>
589
+ <span class="cline-any cline-yes">1x</span>
590
+ <span class="cline-any cline-yes">1x</span>
591
+ <span class="cline-any cline-yes">1x</span>
592
+ <span class="cline-any cline-yes">1x</span>
593
+ <span class="cline-any cline-yes">1x</span>
594
+ <span class="cline-any cline-yes">1x</span>
595
+ <span class="cline-any cline-yes">1x</span>
596
+ <span class="cline-any cline-yes">1x</span>
597
+ <span class="cline-any cline-yes">1x</span>
598
+ <span class="cline-any cline-yes">1x</span>
599
+ <span class="cline-any cline-yes">1x</span>
600
+ <span class="cline-any cline-yes">1x</span>
601
+ <span class="cline-any cline-yes">1x</span>
602
+ <span class="cline-any cline-yes">1x</span>
603
+ <span class="cline-any cline-yes">1x</span>
604
+ <span class="cline-any cline-yes">1x</span>
605
+ <span class="cline-any cline-yes">2x</span>
606
+ <span class="cline-any cline-yes">2x</span>
607
+ <span class="cline-any cline-yes">2x</span>
608
+ <span class="cline-any cline-yes">1x</span>
609
+ <span class="cline-any cline-yes">1x</span>
610
+ <span class="cline-any cline-yes">1x</span>
611
+ <span class="cline-any cline-yes">14x</span>
612
+ <span class="cline-any cline-yes">14x</span>
613
+ <span class="cline-any cline-yes">14x</span>
614
+ <span class="cline-any cline-yes">14x</span>
615
+ <span class="cline-any cline-yes">14x</span>
616
+ <span class="cline-any cline-yes">14x</span>
617
+ <span class="cline-any cline-yes">14x</span>
618
+ <span class="cline-any cline-yes">14x</span>
619
+ <span class="cline-any cline-yes">14x</span>
620
+ <span class="cline-any cline-yes">14x</span>
621
+ <span class="cline-any cline-yes">14x</span>
622
+ <span class="cline-any cline-yes">14x</span>
623
+ <span class="cline-any cline-yes">14x</span>
624
+ <span class="cline-any cline-yes">21x</span>
625
+ <span class="cline-any cline-yes">21x</span>
626
+ <span class="cline-any cline-yes">21x</span>
627
+ <span class="cline-any cline-yes">21x</span>
628
+ <span class="cline-any cline-yes">1x</span>
629
+ <span class="cline-any cline-yes">1x</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { useState } from 'react';
631
+ import {
632
+ Box,
633
+ Card,
634
+ CardContent,
635
+ Typography,
636
+ Chip,
637
+ Avatar,
638
+ Divider,
639
+ CircularProgress,
640
+ Alert,
641
+ List,
642
+ ListItem,
643
+ ListItemText,
644
+ ListItemIcon,
645
+ Collapse,
646
+ IconButton,
647
+ } from '@mui/material';
648
+ import {
649
+ Person,
650
+ Email,
651
+ Badge,
652
+ Security,
653
+ Schedule,
654
+ AccountCircle,
655
+ ExpandMore,
656
+ ExpandLess,
657
+ Info,
658
+ } from '@mui/icons-material';
659
+ import { useUserProfile } from '../../hooks/useUserProfile';
660
+ &nbsp;
661
+ interface UserProfileDisplayProps {
662
+ showExtendedData?: boolean;
663
+ showProfileCard?: boolean;
664
+ autoRefresh?: boolean;
665
+ }
666
+ &nbsp;
667
+ const UserProfileDisplay: React.FC&lt;UserProfileDisplayProps&gt; = ({
668
+ showExtendedData = true,
669
+ showProfileCard = true,
670
+ autoRefresh = true,
671
+ }) =&gt; {
672
+ const { userProfile, loading, error, extendedData, refreshProfile } = useUserProfile({
673
+ autoFetch: autoRefresh,
674
+ retryOnError: true,
675
+ maxRetries: 3,
676
+ });
677
+ &nbsp;
678
+ const [showAllFields, setShowAllFields] = useState(false);
679
+ &nbsp;
680
+ if (loading) {
681
+ return (
682
+ &lt;Box display="flex" justifyContent="center" alignItems="center" p={3}&gt;
683
+ &lt;CircularProgress /&gt;
684
+ &lt;Typography variant="body2" sx={{ ml: 2 }}&gt;
685
+ Cargando perfil de usuario...
686
+ &lt;/Typography&gt;
687
+ &lt;/Box&gt;
688
+ );
689
+ }
690
+ &nbsp;
691
+ if (error) {
692
+ return (
693
+ &lt;Alert
694
+ severity="error"
695
+ action={
696
+ &lt;IconButton color="inherit" size="small" onClick={refreshProfile}&gt;
697
+ &lt;Typography variant="caption"&gt;Reintentar&lt;/Typography&gt;
698
+ &lt;/IconButton&gt;
699
+ }
700
+ &gt;
701
+ Error al cargar el perfil: {error}
702
+ &lt;/Alert&gt;
703
+ );
704
+ }
705
+ &nbsp;
706
+ if (!userProfile) {
707
+ return &lt;Alert severity="warning"&gt;No se encontró información del usuario&lt;/Alert&gt;;
708
+ }
709
+ &nbsp;
710
+ const displayData = extendedData?.<span class="branch-0 cbranch-no" title="branch not covered" >displayData || {};</span>
711
+ const totalFields = extendedData?.<span class="branch-0 cbranch-no" title="branch not covered" >totalFields || 0;</span>
712
+ &nbsp;
713
+ const formatDate = (dateString: string | undefined) =&gt; {
714
+ if (!dateString) {
715
+ return 'No disponible';
716
+ }
717
+ try {
718
+ return new Date(dateString).toLocaleString('es-ES', {
719
+ year: 'numeric',
720
+ month: 'short',
721
+ day: 'numeric',
722
+ hour: '2-digit',
723
+ minute: '2-digit',
724
+ });
725
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch {</span>
726
+ <span class="cstat-no" title="statement not covered" > return dateString;</span>
727
+ <span class="cstat-no" title="statement not covered" > }</span>
728
+ };
729
+ &nbsp;
730
+ const renderFieldValue = (_key: string, value: unknown): string =&gt; {
731
+ if (value === null || value === undefined) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
732
+ <span class="cstat-no" title="statement not covered" > return 'No disponible';</span>
733
+ <span class="cstat-no" title="statement not covered" > }</span>
734
+ if (typeof value === 'boolean') {
735
+ return value ? 'Sí' : 'No';
736
+ }
737
+ if (typeof value === 'string') {
738
+ return value;
739
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
740
+ if (typeof value === 'number' || typeof value === 'bigint') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
741
+ <span class="cstat-no" title="statement not covered" > return String(value);</span>
742
+ <span class="cstat-no" title="statement not covered" > }</span>
743
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
744
+ <span class="cstat-no" title="statement not covered" > return value.length &gt; 0 ? value.join(', ') : 'Ninguno';</span>
745
+ <span class="cstat-no" title="statement not covered" > }</span>
746
+ <span class="cstat-no" title="statement not covered" > if (typeof value === 'object') {</span>
747
+ <span class="cstat-no" title="statement not covered" > return JSON.stringify(value, null, 2);</span>
748
+ <span class="cstat-no" title="statement not covered" > }</span>
749
+ <span class="cstat-no" title="statement not covered" > return JSON.stringify(value);</span>
750
+ };
751
+ &nbsp;
752
+ const basicFields = [
753
+ { key: 'id', label: 'ID', icon: &lt;Badge /&gt; },
754
+ { key: 'email', label: 'Email', icon: &lt;Email /&gt; },
755
+ { key: 'username', label: 'Usuario', icon: &lt;Person /&gt; },
756
+ { key: 'fullName', label: 'Nombre completo', icon: &lt;AccountCircle /&gt; },
757
+ { key: 'role', label: 'Rol', icon: &lt;Security /&gt; },
758
+ ];
759
+ &nbsp;
760
+ const extendedFields = [
761
+ { key: 'firstName', label: 'Nombre' },
762
+ { key: 'lastName', label: 'Apellido' },
763
+ { key: 'isActive', label: 'Activo' },
764
+ { key: 'lastLogin', label: 'Último login' },
765
+ { key: 'createdAt', label: 'Creado' },
766
+ { key: 'updatedAt', label: 'Actualizado' },
767
+ ];
768
+ &nbsp;
769
+ // Get custom fields (not in basic or extended)
770
+ const knownFields = new Set([...basicFields.map((f) =&gt; f.key), ...extendedFields.map((f) =&gt; f.key), 'permissions']);
771
+ const customFields = Object.keys(displayData)
772
+ .filter((key) =&gt; !knownFields.has(key))
773
+ .map((key) =&gt; ({ key, label: key }));
774
+ &nbsp;
775
+ return (
776
+ &lt;Box&gt;
777
+ {showProfileCard &amp;&amp; (
778
+ &lt;Card sx={{ mb: 2 }}&gt;
779
+ &lt;CardContent&gt;
780
+ &lt;Box display="flex" alignItems="center" mb={2}&gt;
781
+ &lt;Avatar src={displayData.avatar} sx={{ width: 56, height: 56, mr: 2 }}&gt;
782
+ {displayData.fullName?.[0] || displayData.<span class="branch-0 cbranch-no" title="branch not covered" >username?.[0] || d</span>isplayData.email?.[0]}
783
+ &lt;/Avatar&gt;
784
+ &lt;Box&gt;
785
+ &lt;Typography variant="h6"&gt;
786
+ {displayData.fullName || displayData.username || displayData.email}
787
+ &lt;/Typography&gt;
788
+ &lt;Typography variant="body2" color="text.secondary"&gt;
789
+ {displayData.role || 'Usuario'}
790
+ &lt;/Typography&gt;
791
+ {displayData.isActive !== undefined &amp;&amp; (
792
+ &lt;Chip
793
+ label={displayData.isActive ? 'Activo' : 'Inactivo'}
794
+ color={displayData.isActive ? 'success' : 'error'}
795
+ size="small"
796
+ sx={{ mt: 0.5 }}
797
+ /&gt;
798
+ )}
799
+ &lt;/Box&gt;
800
+ &lt;/Box&gt;
801
+ &nbsp;
802
+ &lt;Box display="grid" gridTemplateColumns="repeat(auto-fit, minmax(250px, 1fr))" gap={2}&gt;
803
+ {basicFields.map(({ key, label, icon }) =&gt;
804
+ displayData[key] ? (
805
+ &lt;Box display="flex" alignItems="center" key={key}&gt;
806
+ &lt;Box sx={{ mr: 1, color: 'text.secondary' }}&gt;{icon}&lt;/Box&gt;
807
+ &lt;Box&gt;
808
+ &lt;Typography variant="caption" color="text.secondary"&gt;
809
+ {label}
810
+ &lt;/Typography&gt;
811
+ &lt;Typography variant="body2"&gt;{renderFieldValue(key, displayData[key])}&lt;/Typography&gt;
812
+ &lt;/Box&gt;
813
+ &lt;/Box&gt;
814
+ ) : null
815
+ )}
816
+ &lt;/Box&gt;
817
+ &nbsp;
818
+ {displayData.permissions &amp;&amp;
819
+ Array.isArray(displayData.permissions) &amp;&amp;
820
+ displayData.permissions.length &gt; 0 &amp;&amp; (
821
+ &lt;Box mt={2}&gt;
822
+ &lt;Typography variant="caption" color="text.secondary" display="block"&gt;
823
+ Permisos
824
+ &lt;/Typography&gt;
825
+ &lt;Box display="flex" flexWrap="wrap" gap={0.5} mt={0.5}&gt;
826
+ {displayData.permissions.slice(0, 5).map((permission: string) =&gt; (
827
+ &lt;Chip key={permission} label={permission} size="small" variant="outlined" /&gt;
828
+ ))}
829
+ {displayData.permissions.length &gt; 5 &amp;&amp; (
830
+ &lt;Chip label={`+${displayData.permissions.length - 5} más`} size="small" /&gt;
831
+ )}
832
+ &lt;/Box&gt;
833
+ &lt;/Box&gt;
834
+ )}
835
+ &lt;/CardContent&gt;
836
+ &lt;/Card&gt;
837
+ )}
838
+ &nbsp;
839
+ {showExtendedData &amp;&amp; (
840
+ &lt;Card&gt;
841
+ &lt;CardContent&gt;
842
+ &lt;Box display="flex" justifyContent="space-between" alignItems="center" mb={2}&gt;
843
+ &lt;Typography variant="h6" display="flex" alignItems="center"&gt;
844
+ &lt;Info sx={{ mr: 1 }} /&gt;
845
+ Información Detallada
846
+ &lt;/Typography&gt;
847
+ &lt;Chip label={`${totalFields} campos totales`} size="small" /&gt;
848
+ &lt;/Box&gt;
849
+ &nbsp;
850
+ &lt;List dense&gt;
851
+ {extendedFields.map(
852
+ ({ key, label }) =&gt;
853
+ displayData[key] !== undefined &amp;&amp; (
854
+ &lt;ListItem key={key} divider&gt;
855
+ &lt;ListItemIcon&gt;
856
+ &lt;Schedule fontSize="small" /&gt;
857
+ &lt;/ListItemIcon&gt;
858
+ &lt;ListItemText
859
+ primary={label}
860
+ secondary={
861
+ key.includes('At') || key.includes('Login')
862
+ ? formatDate(displayData[key])
863
+ : renderFieldValue(key, displayData[key])
864
+ }
865
+ /&gt;
866
+ &lt;/ListItem&gt;
867
+ )
868
+ )}
869
+ &nbsp;
870
+ {customFields.length &gt; 0 &amp;&amp; (
871
+ &lt;&gt;
872
+ &lt;Divider sx={{ my: 1 }} /&gt;
873
+ &lt;ListItem&gt;
874
+ &lt;ListItemText
875
+ primary={
876
+ &lt;Box display="flex" justifyContent="space-between" alignItems="center"&gt;
877
+ &lt;Typography variant="subtitle2"&gt;Campos Personalizados ({customFields.length})&lt;/Typography&gt;
878
+ &lt;IconButton size="small" onClick={<span class="fstat-no" title="function not covered" >() =&gt; setShowAllFields(!showAllFields)}&gt;</span>
879
+ {<span class="branch-0 cbranch-no" title="branch not covered" >showAllFields ? &lt;ExpandLess /&gt; : &lt;</span>ExpandMore /&gt;}
880
+ &lt;/IconButton&gt;
881
+ &lt;/Box&gt;
882
+ }
883
+ /&gt;
884
+ &lt;/ListItem&gt;
885
+ &lt;Collapse in={showAllFields}&gt;
886
+ {customFields.map(({ key, label }) =&gt; (
887
+ &lt;ListItem key={key} sx={{ pl: 4 }}&gt;
888
+ &lt;ListItemText primary={label} secondary={renderFieldValue(key, displayData[key])} /&gt;
889
+ &lt;/ListItem&gt;
890
+ ))}
891
+ &lt;/Collapse&gt;
892
+ &lt;/&gt;
893
+ )}
894
+ &lt;/List&gt;
895
+ &nbsp;
896
+ &lt;Box mt={2} display="flex" justifyContent="space-between" alignItems="center"&gt;
897
+ &lt;Typography variant="caption" color="text.secondary"&gt;
898
+ Última actualización: {formatDate(displayData.updatedAt)}
899
+ &lt;/Typography&gt;
900
+ &lt;IconButton size="small" onClick={refreshProfile} disabled={loading}&gt;
901
+ &lt;Typography variant="caption"&gt;Actualizar&lt;/Typography&gt;
902
+ &lt;/IconButton&gt;
903
+ &lt;/Box&gt;
904
+ &lt;/CardContent&gt;
905
+ &lt;/Card&gt;
906
+ )}
907
+ &lt;/Box&gt;
908
+ );
909
+ };
910
+ &nbsp;
911
+ export default UserProfileDisplay;
912
+ &nbsp;</pre></td></tr></table></pre>
913
+
914
+ <div class='push'></div><!-- for sticky footer -->
915
+ </div><!-- /wrapper -->
916
+ <div class='footer quiet pad2 space-top1 center small'>
917
+ Code coverage generated by
918
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
919
+ at 2026-02-07T06:55:20.810Z
920
+ </div>
921
+ <script src="../../prettify.js"></script>
922
+ <script>
923
+ window.onload = function () {
924
+ prettyPrint();
925
+ };
926
+ </script>
927
+ <script src="../../sorter.js"></script>
928
+ <script src="../../block-navigation.js"></script>
929
+ </body>
930
+ </html>
931
+