@atlashub/smartstack 3.21.0 → 3.25.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 (280) hide show
  1. package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js → AgentSkillsPage-BWQSCYl-.js} +2 -2
  2. package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js.map → AgentSkillsPage-BWQSCYl-.js.map} +1 -1
  3. package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js → AgentSkillsPage-IQcMnBaD.js} +2 -2
  4. package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js.map → AgentSkillsPage-IQcMnBaD.js.map} +1 -1
  5. package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js → AgentWorkloadPage-DqrjkvWL.js} +2 -2
  6. package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js.map → AgentWorkloadPage-DqrjkvWL.js.map} +1 -1
  7. package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js → AgentWorkloadPage-w-HiyFYP.js} +2 -2
  8. package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js.map → AgentWorkloadPage-w-HiyFYP.js.map} +1 -1
  9. package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js → ApiCatalogDetailPage-D3L8Yf4G.js} +3 -3
  10. package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js.map → ApiCatalogDetailPage-D3L8Yf4G.js.map} +1 -1
  11. package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js → ApiCatalogDetailPage-MPT3Kz6H.js} +2 -2
  12. package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js.map → ApiCatalogDetailPage-MPT3Kz6H.js.map} +1 -1
  13. package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js → ApiCatalogPage-D4Hg3uiS.js} +2 -2
  14. package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js.map → ApiCatalogPage-D4Hg3uiS.js.map} +1 -1
  15. package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js → ApiCatalogPage-DRg5Cz0r.js} +2 -2
  16. package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js.map → ApiCatalogPage-DRg5Cz0r.js.map} +1 -1
  17. package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js → ApplicationDetailPage-Caizuyn2.js} +2 -2
  18. package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js.map → ApplicationDetailPage-Caizuyn2.js.map} +1 -1
  19. package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js → ApplicationDetailPage-CuCW6aMB.js} +4 -4
  20. package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js.map → ApplicationDetailPage-CuCW6aMB.js.map} +1 -1
  21. package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js → ApplicationsDashboardPage-B2MW8-Kc.js} +2 -2
  22. package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js.map → ApplicationsDashboardPage-B2MW8-Kc.js.map} +1 -1
  23. package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js → ApplicationsDashboardPage-BDIjFIYZ.js} +3 -3
  24. package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js.map → ApplicationsDashboardPage-BDIjFIYZ.js.map} +1 -1
  25. package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js → ApplicationsGridPage-DV-FihKj.js} +2 -2
  26. package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js.map → ApplicationsGridPage-DV-FihKj.js.map} +1 -1
  27. package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js → ApplicationsGridPage-DXsTfXPI.js} +2 -2
  28. package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js.map → ApplicationsGridPage-DXsTfXPI.js.map} +1 -1
  29. package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js → ApplicationsListPage--CGkyBuJ.js} +2 -2
  30. package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js.map → ApplicationsListPage--CGkyBuJ.js.map} +1 -1
  31. package/dist/chunks/{ApplicationsListPage-C91v2rZt.js → ApplicationsListPage-JUX823bh.js} +2 -2
  32. package/dist/chunks/{ApplicationsListPage-C91v2rZt.js.map → ApplicationsListPage-JUX823bh.js.map} +1 -1
  33. package/dist/chunks/{ApplicationsPage-BCbgotIx.js → ApplicationsPage-6zgFye6w.js} +2 -2
  34. package/dist/chunks/{ApplicationsPage-BCbgotIx.js.map → ApplicationsPage-6zgFye6w.js.map} +1 -1
  35. package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js → ApplicationsPage-CQPuuiO6.js} +4 -4
  36. package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js.map → ApplicationsPage-CQPuuiO6.js.map} +1 -1
  37. package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js → AssignmentRulesPage-CFffeEbo.js} +2 -2
  38. package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js.map → AssignmentRulesPage-CFffeEbo.js.map} +1 -1
  39. package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js → AssignmentRulesPage-D78UeUId.js} +2 -2
  40. package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js.map → AssignmentRulesPage-D78UeUId.js.map} +1 -1
  41. package/dist/chunks/{AssignmentsPage-DmfBYQAD.js → AssignmentsPage-Cww2ifZF.js} +2 -2
  42. package/dist/chunks/{AssignmentsPage-DmfBYQAD.js.map → AssignmentsPage-Cww2ifZF.js.map} +1 -1
  43. package/dist/chunks/{AssignmentsPage-sRCCBmRc.js → AssignmentsPage-DE_QS2LO.js} +2 -2
  44. package/dist/chunks/{AssignmentsPage-sRCCBmRc.js.map → AssignmentsPage-DE_QS2LO.js.map} +1 -1
  45. package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js → AuthCallbackPage-CA2nO6DG.js} +2 -2
  46. package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js.map → AuthCallbackPage-CA2nO6DG.js.map} +1 -1
  47. package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js → AuthCallbackPage-CDUAoX-N.js} +2 -2
  48. package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js.map → AuthCallbackPage-CDUAoX-N.js.map} +1 -1
  49. package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js → ConfirmEmailPage-BqsILAYH.js} +2 -2
  50. package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js.map → ConfirmEmailPage-BqsILAYH.js.map} +1 -1
  51. package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js → ConfirmEmailPage-INeHCuMB.js} +2 -2
  52. package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js.map → ConfirmEmailPage-INeHCuMB.js.map} +1 -1
  53. package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js → CreateSupportTicketPage-BWeuV2aU.js} +2 -2
  54. package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js.map → CreateSupportTicketPage-BWeuV2aU.js.map} +1 -1
  55. package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js → CreateSupportTicketPage-OBwF4v7b.js} +2 -2
  56. package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js.map → CreateSupportTicketPage-OBwF4v7b.js.map} +1 -1
  57. package/dist/chunks/{DashboardPage-CUZ80NGV.js → DashboardPage-CKHqWrdS.js} +3 -3
  58. package/dist/chunks/{DashboardPage-CUZ80NGV.js.map → DashboardPage-CKHqWrdS.js.map} +1 -1
  59. package/dist/chunks/{DashboardPage-CaNOAstg.js → DashboardPage-COmc9b__.js} +3 -3
  60. package/dist/chunks/{DashboardPage-CaNOAstg.js.map → DashboardPage-COmc9b__.js.map} +1 -1
  61. package/dist/chunks/{DashboardPage-B48_rQFi.js → DashboardPage-CfKZHiSj.js} +2 -2
  62. package/dist/chunks/{DashboardPage-B48_rQFi.js.map → DashboardPage-CfKZHiSj.js.map} +1 -1
  63. package/dist/chunks/{DashboardPage-CUZV1J9t.js → DashboardPage-CwEZZ3jx.js} +2 -2
  64. package/dist/chunks/{DashboardPage-CUZV1J9t.js.map → DashboardPage-CwEZZ3jx.js.map} +1 -1
  65. package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js → EscalationConfigPage--7lgZ0kJ.js} +2 -2
  66. package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js.map → EscalationConfigPage--7lgZ0kJ.js.map} +1 -1
  67. package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js → EscalationConfigPage-DPyiBcqV.js} +2 -2
  68. package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js.map → EscalationConfigPage-DPyiBcqV.js.map} +1 -1
  69. package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js → ForceChangePasswordPage-BE-6umub.js} +2 -2
  70. package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js.map → ForceChangePasswordPage-BE-6umub.js.map} +1 -1
  71. package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js → ForceChangePasswordPage-CnsYoWmV.js} +2 -2
  72. package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js.map → ForceChangePasswordPage-CnsYoWmV.js.map} +1 -1
  73. package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js → ForgotPasswordPage-CSq4DnFF.js} +2 -2
  74. package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js.map → ForgotPasswordPage-CSq4DnFF.js.map} +1 -1
  75. package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js → ForgotPasswordPage-DZLVolAC.js} +2 -2
  76. package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js.map → ForgotPasswordPage-DZLVolAC.js.map} +1 -1
  77. package/dist/chunks/{GroupDetailPage-DFBvVO1S.js → GroupDetailPage-Bf9Wb_2j.js} +5 -5
  78. package/dist/chunks/{GroupDetailPage-DFBvVO1S.js.map → GroupDetailPage-Bf9Wb_2j.js.map} +1 -1
  79. package/dist/chunks/{GroupDetailPage-B2FkKrGG.js → GroupDetailPage-R-hf3rJ7.js} +2 -2
  80. package/dist/chunks/{GroupDetailPage-B2FkKrGG.js.map → GroupDetailPage-R-hf3rJ7.js.map} +1 -1
  81. package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js → MyAccessRequestsPage-BIisvWM6.js} +2 -2
  82. package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js.map → MyAccessRequestsPage-BIisvWM6.js.map} +1 -1
  83. package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js → MyAccessRequestsPage-BLSV7Tbx.js} +2 -2
  84. package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js.map → MyAccessRequestsPage-BLSV7Tbx.js.map} +1 -1
  85. package/dist/chunks/{MyTenantsPage-BEcYYdGR.js → MyTenantsPage-D-7k9CP1.js} +3 -3
  86. package/dist/chunks/{MyTenantsPage-BEcYYdGR.js.map → MyTenantsPage-D-7k9CP1.js.map} +1 -1
  87. package/dist/chunks/{MyTenantsPage-D9f85zjF.js → MyTenantsPage-DqGW6aDt.js} +2 -2
  88. package/dist/chunks/{MyTenantsPage-D9f85zjF.js.map → MyTenantsPage-DqGW6aDt.js.map} +1 -1
  89. package/dist/chunks/{MyTicketsPage-DJR8h6y1.js → MyTicketsPage--DgDsnZA.js} +2 -2
  90. package/dist/chunks/{MyTicketsPage-DJR8h6y1.js.map → MyTicketsPage--DgDsnZA.js.map} +1 -1
  91. package/dist/chunks/{MyTicketsPage-DiOUExKJ.js → MyTicketsPage-CqJ3Aqob.js} +2 -2
  92. package/dist/chunks/{MyTicketsPage-DiOUExKJ.js.map → MyTicketsPage-CqJ3Aqob.js.map} +1 -1
  93. package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js → NavigationAppsPage-Bebis_RT.js} +2 -2
  94. package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js.map → NavigationAppsPage-Bebis_RT.js.map} +1 -1
  95. package/dist/chunks/{NavigationAppsPage-If7tmCFY.js → NavigationAppsPage-THNPOAjv.js} +2 -2
  96. package/dist/chunks/{NavigationAppsPage-If7tmCFY.js.map → NavigationAppsPage-THNPOAjv.js.map} +1 -1
  97. package/dist/chunks/{NotificationsPage-C29Lln5o.js → NotificationsPage-CAbNW_Cn.js} +2 -2
  98. package/dist/chunks/{NotificationsPage-C29Lln5o.js.map → NotificationsPage-CAbNW_Cn.js.map} +1 -1
  99. package/dist/chunks/{NotificationsPage-BiaLRb0s.js → NotificationsPage-DxwizUhL.js} +2 -2
  100. package/dist/chunks/{NotificationsPage-BiaLRb0s.js.map → NotificationsPage-DxwizUhL.js.map} +1 -1
  101. package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js → OnboardingWizardPage-C6HlbJ3K.js} +2 -2
  102. package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js.map → OnboardingWizardPage-C6HlbJ3K.js.map} +1 -1
  103. package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js → OnboardingWizardPage-CyC2zONO.js} +2 -2
  104. package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js.map → OnboardingWizardPage-CyC2zONO.js.map} +1 -1
  105. package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js → PermissionDetailPage-BDHiNgky.js} +2 -2
  106. package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js.map → PermissionDetailPage-BDHiNgky.js.map} +1 -1
  107. package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js → PermissionDetailPage-C5K17ydY.js} +2 -2
  108. package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js.map → PermissionDetailPage-C5K17ydY.js.map} +1 -1
  109. package/dist/chunks/{PermissionsPage-l0PnY-EE.js → PermissionsPage-COI5LJPo.js} +2 -2
  110. package/dist/chunks/{PermissionsPage-l0PnY-EE.js.map → PermissionsPage-COI5LJPo.js.map} +1 -1
  111. package/dist/chunks/{PermissionsPage-DLy9U3P3.js → PermissionsPage-CkOwH2_d.js} +2 -2
  112. package/dist/chunks/{PermissionsPage-DLy9U3P3.js.map → PermissionsPage-CkOwH2_d.js.map} +1 -1
  113. package/dist/chunks/{PortalDashboardPage-DFBx38-x.js → PortalDashboardPage-CoEC4CmC.js} +2 -2
  114. package/dist/chunks/{PortalDashboardPage-DFBx38-x.js.map → PortalDashboardPage-CoEC4CmC.js.map} +1 -1
  115. package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js → PortalDashboardPage-DrYymEf-.js} +2 -2
  116. package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js.map → PortalDashboardPage-DrYymEf-.js.map} +1 -1
  117. package/dist/chunks/{PreferencesPage-BBu8yZQB.js → PreferencesPage-CJRaU3ba.js} +2 -2
  118. package/dist/chunks/{PreferencesPage-BBu8yZQB.js.map → PreferencesPage-CJRaU3ba.js.map} +1 -1
  119. package/dist/chunks/{PreferencesPage-B81MsNV1.js → PreferencesPage-Cqr9mAab.js} +2 -2
  120. package/dist/chunks/{PreferencesPage-B81MsNV1.js.map → PreferencesPage-Cqr9mAab.js.map} +1 -1
  121. package/dist/chunks/{ProfilePage-DDrl10zj.js → ProfilePage-BZVpg6-l.js} +2 -2
  122. package/dist/chunks/{ProfilePage-DDrl10zj.js.map → ProfilePage-BZVpg6-l.js.map} +1 -1
  123. package/dist/chunks/{ProfilePage-DPoXwdnc.js → ProfilePage-Cu_FITeL.js} +2 -2
  124. package/dist/chunks/{ProfilePage-DPoXwdnc.js.map → ProfilePage-Cu_FITeL.js.map} +1 -1
  125. package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js → ReferencesManagementPage-DUlVk9Ps.js} +3 -3
  126. package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js.map → ReferencesManagementPage-DUlVk9Ps.js.map} +1 -1
  127. package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js → ReferencesManagementPage-ZCuYtqd7.js} +2 -2
  128. package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js.map → ReferencesManagementPage-ZCuYtqd7.js.map} +1 -1
  129. package/dist/chunks/{RegisterPage-CiQib3-6.js → RegisterPage-C4xmVwh9.js} +2 -2
  130. package/dist/chunks/{RegisterPage-CiQib3-6.js.map → RegisterPage-C4xmVwh9.js.map} +1 -1
  131. package/dist/chunks/{RegisterPage-bXCcJD88.js → RegisterPage-DGyzoIHT.js} +2 -2
  132. package/dist/chunks/{RegisterPage-bXCcJD88.js.map → RegisterPage-DGyzoIHT.js.map} +1 -1
  133. package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js → ResetPasswordPage-DqDD6VPR.js} +2 -2
  134. package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js.map → ResetPasswordPage-DqDD6VPR.js.map} +1 -1
  135. package/dist/chunks/{ResetPasswordPage-CubPG3yv.js → ResetPasswordPage-Glu-aeqv.js} +2 -2
  136. package/dist/chunks/{ResetPasswordPage-CubPG3yv.js.map → ResetPasswordPage-Glu-aeqv.js.map} +1 -1
  137. package/dist/chunks/{ResolutionModal-Bg7XZmR1.js → ResolutionModal-CxjANAOP.js} +2 -2
  138. package/dist/chunks/{ResolutionModal-Bg7XZmR1.js.map → ResolutionModal-CxjANAOP.js.map} +1 -1
  139. package/dist/chunks/{ResolutionModal-DqRk_T0n.js → ResolutionModal-Duat18qV.js} +2 -2
  140. package/dist/chunks/{ResolutionModal-DqRk_T0n.js.map → ResolutionModal-Duat18qV.js.map} +1 -1
  141. package/dist/chunks/{RoleDetailPage-Blau6_4c.js → RoleDetailPage-BQffUSnt.js} +3 -3
  142. package/dist/chunks/{RoleDetailPage-Blau6_4c.js.map → RoleDetailPage-BQffUSnt.js.map} +1 -1
  143. package/dist/chunks/{RoleDetailPage-CiRVxxIP.js → RoleDetailPage-JTm5lD1_.js} +2 -2
  144. package/dist/chunks/{RoleDetailPage-CiRVxxIP.js.map → RoleDetailPage-JTm5lD1_.js.map} +1 -1
  145. package/dist/chunks/{RolesPage-Pm-RN3lP.js → RolesPage-B9rRzciI.js} +2 -2
  146. package/dist/chunks/{RolesPage-Pm-RN3lP.js.map → RolesPage-B9rRzciI.js.map} +1 -1
  147. package/dist/chunks/{RolesPage-Cb8joqdJ.js → RolesPage-BN8_zMOC.js} +2 -2
  148. package/dist/chunks/{RolesPage-Cb8joqdJ.js.map → RolesPage-BN8_zMOC.js.map} +1 -1
  149. package/dist/chunks/{SlaConfigPage-B86McKM6.js → SlaConfigPage-B7kZNig4.js} +2 -2
  150. package/dist/chunks/{SlaConfigPage-B86McKM6.js.map → SlaConfigPage-B7kZNig4.js.map} +1 -1
  151. package/dist/chunks/{SlaConfigPage-BY7gvYU6.js → SlaConfigPage-okvZfA_K.js} +2 -2
  152. package/dist/chunks/{SlaConfigPage-BY7gvYU6.js.map → SlaConfigPage-okvZfA_K.js.map} +1 -1
  153. package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js → SupportPermissionsPage-DGAPqJbl.js} +2 -2
  154. package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js.map → SupportPermissionsPage-DGAPqJbl.js.map} +1 -1
  155. package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js → SupportPermissionsPage-Dg_wLOme.js} +2 -2
  156. package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js.map → SupportPermissionsPage-Dg_wLOme.js.map} +1 -1
  157. package/dist/chunks/{TemplatesPage-BDguJ401.js → TemplatesPage-DT9fhlAU.js} +2 -2
  158. package/dist/chunks/{TemplatesPage-BDguJ401.js.map → TemplatesPage-DT9fhlAU.js.map} +1 -1
  159. package/dist/chunks/{TemplatesPage-DdnGgioU.js → TemplatesPage-DiEk538p.js} +2 -2
  160. package/dist/chunks/{TemplatesPage-DdnGgioU.js.map → TemplatesPage-DiEk538p.js.map} +1 -1
  161. package/dist/chunks/{TenantCard-ffwWsgFQ.js → TenantCard-BbSYk9_Z.js} +2 -2
  162. package/dist/chunks/{TenantCard-ffwWsgFQ.js.map → TenantCard-BbSYk9_Z.js.map} +1 -1
  163. package/dist/chunks/{TenantCard-CUjb6og9.js → TenantCard-CEkiKxcZ.js} +2 -2
  164. package/dist/chunks/{TenantCard-CUjb6og9.js.map → TenantCard-CEkiKxcZ.js.map} +1 -1
  165. package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js → TenantScopeSelector-BWfYxvEa.js} +2 -2
  166. package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js.map → TenantScopeSelector-BWfYxvEa.js.map} +1 -1
  167. package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js → TenantScopeSelector-D-BKgQPV.js} +2 -2
  168. package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js.map → TenantScopeSelector-D-BKgQPV.js.map} +1 -1
  169. package/dist/chunks/{TicketDetailPage-GOh9GX7E.js → TicketDetailPage-C1mNS9Up.js} +2 -2
  170. package/dist/chunks/{TicketDetailPage-GOh9GX7E.js.map → TicketDetailPage-C1mNS9Up.js.map} +1 -1
  171. package/dist/chunks/{TicketDetailPage-Du8WMyqf.js → TicketDetailPage-ieVDRh42.js} +2 -2
  172. package/dist/chunks/{TicketDetailPage-Du8WMyqf.js.map → TicketDetailPage-ieVDRh42.js.map} +1 -1
  173. package/dist/chunks/{TicketsPage-Bqd6moQy.js → TicketsPage-CnuWsnIW.js} +2 -2
  174. package/dist/chunks/{TicketsPage-Bqd6moQy.js.map → TicketsPage-CnuWsnIW.js.map} +1 -1
  175. package/dist/chunks/{TicketsPage-WdU4Bb7M.js → TicketsPage-jjyY15_D.js} +2 -2
  176. package/dist/chunks/{TicketsPage-WdU4Bb7M.js.map → TicketsPage-jjyY15_D.js.map} +1 -1
  177. package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js → UserCreateTicketPage-B8Tvf-ag.js} +2 -2
  178. package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js.map → UserCreateTicketPage-B8Tvf-ag.js.map} +1 -1
  179. package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js → UserCreateTicketPage-DnOsDlfO.js} +2 -2
  180. package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js.map → UserCreateTicketPage-DnOsDlfO.js.map} +1 -1
  181. package/dist/chunks/{UserDashboardPage-BP5WeXPS.js → UserDashboardPage-BrtkJ-NB.js} +2 -2
  182. package/dist/chunks/{UserDashboardPage-BP5WeXPS.js.map → UserDashboardPage-BrtkJ-NB.js.map} +1 -1
  183. package/dist/chunks/{UserDashboardPage-B53C8fUq.js → UserDashboardPage-KLB5CQP5.js} +2 -2
  184. package/dist/chunks/{UserDashboardPage-B53C8fUq.js.map → UserDashboardPage-KLB5CQP5.js.map} +1 -1
  185. package/dist/chunks/{UserDetailPage-B110bmGX.js → UserDetailPage-U7smBQoF.js} +5 -5
  186. package/dist/chunks/{UserDetailPage-B110bmGX.js.map → UserDetailPage-U7smBQoF.js.map} +1 -1
  187. package/dist/chunks/{UserDetailPage-CV2VCE46.js → UserDetailPage-_J6lcKAU.js} +2 -2
  188. package/dist/chunks/{UserDetailPage-CV2VCE46.js.map → UserDetailPage-_J6lcKAU.js.map} +1 -1
  189. package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js → UserTicketDetailPage-CWoYQgH-.js} +2 -2
  190. package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js.map → UserTicketDetailPage-CWoYQgH-.js.map} +1 -1
  191. package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js → UserTicketDetailPage-DkufSlvZ.js} +2 -2
  192. package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js.map → UserTicketDetailPage-DkufSlvZ.js.map} +1 -1
  193. package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js → UsersGroupsPage-C38s2-Rq.js} +3 -3
  194. package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js.map → UsersGroupsPage-C38s2-Rq.js.map} +1 -1
  195. package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js → UsersGroupsPage-Dq3rAteo.js} +2 -2
  196. package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js.map → UsersGroupsPage-Dq3rAteo.js.map} +1 -1
  197. package/dist/chunks/{UsersPage-Bg7033pp.js → UsersPage-B5C5KEUR.js} +2 -2
  198. package/dist/chunks/{UsersPage-Bg7033pp.js.map → UsersPage-B5C5KEUR.js.map} +1 -1
  199. package/dist/chunks/{UsersPage-TYAfwPY1.js → UsersPage-CXC9Hvq6.js} +2 -2
  200. package/dist/chunks/{UsersPage-TYAfwPY1.js.map → UsersPage-CXC9Hvq6.js.map} +1 -1
  201. package/dist/chunks/{accessRequestsApi-DZeDvzwv.js → accessRequestsApi-B-4TJ5_U.js} +2 -2
  202. package/dist/chunks/{accessRequestsApi-DZeDvzwv.js.map → accessRequestsApi-B-4TJ5_U.js.map} +1 -1
  203. package/dist/chunks/{accessRequestsApi-ZXFPCid2.js → accessRequestsApi-DZSfThpd.js} +2 -2
  204. package/dist/chunks/{accessRequestsApi-ZXFPCid2.js.map → accessRequestsApi-DZSfThpd.js.map} +1 -1
  205. package/dist/chunks/{aiApi-CsH8DXgs.js → aiApi-B20Teu2v.js} +2 -2
  206. package/dist/chunks/{aiApi-CsH8DXgs.js.map → aiApi-B20Teu2v.js.map} +1 -1
  207. package/dist/chunks/{aiApi-CVPzFTXa.js → aiApi-DMGz-RPM.js} +2 -2
  208. package/dist/chunks/{aiApi-CVPzFTXa.js.map → aiApi-DMGz-RPM.js.map} +1 -1
  209. package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js → applicationAnalyticsApi-Bwa75Fzd.js} +2 -2
  210. package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js.map → applicationAnalyticsApi-Bwa75Fzd.js.map} +1 -1
  211. package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js → applicationAnalyticsApi-CLBqRPfN.js} +2 -2
  212. package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js.map → applicationAnalyticsApi-CLBqRPfN.js.map} +1 -1
  213. package/dist/chunks/{groupsApi-BgCk2fsp.js → groupsApi-QzXI-5xu.js} +2 -2
  214. package/dist/chunks/{groupsApi-BgCk2fsp.js.map → groupsApi-QzXI-5xu.js.map} +1 -1
  215. package/dist/chunks/{groupsApi-BIbG665N.js → groupsApi-hB9kSWEd.js} +2 -2
  216. package/dist/chunks/{groupsApi-BIbG665N.js.map → groupsApi-hB9kSWEd.js.map} +1 -1
  217. package/dist/chunks/{index-Cb3LotuT.js → index--NGcBYUu.js} +3 -3
  218. package/dist/chunks/{index-Cb3LotuT.js.map → index--NGcBYUu.js.map} +1 -1
  219. package/dist/chunks/{index-C33zcyF4.js → index--aPwOFjF.js} +2 -2
  220. package/dist/chunks/{index-C33zcyF4.js.map → index--aPwOFjF.js.map} +1 -1
  221. package/dist/chunks/{index-sMr9qND_.js → index-0VrOtwP0.js} +2 -2
  222. package/dist/chunks/{index-sMr9qND_.js.map → index-0VrOtwP0.js.map} +1 -1
  223. package/dist/chunks/{index-DDKetfKq.js → index-37U271aw.js} +2 -2
  224. package/dist/chunks/{index-DDKetfKq.js.map → index-37U271aw.js.map} +1 -1
  225. package/dist/chunks/{index-B9fS7ir6.js → index-B7qZTuQ-.js} +2 -2
  226. package/dist/chunks/{index-B9fS7ir6.js.map → index-B7qZTuQ-.js.map} +1 -1
  227. package/dist/chunks/{index-CdjBY7L8.js → index-Bedzmqr-.js} +2 -2
  228. package/dist/chunks/{index-CdjBY7L8.js.map → index-Bedzmqr-.js.map} +1 -1
  229. package/dist/chunks/{index-CHG_O1fS.js → index-Betxo5g5.js} +2 -2
  230. package/dist/chunks/{index-CHG_O1fS.js.map → index-Betxo5g5.js.map} +1 -1
  231. package/dist/chunks/{index-jiGu-H8x.js → index-BmaJz475.js} +2 -2
  232. package/dist/chunks/{index-jiGu-H8x.js.map → index-BmaJz475.js.map} +1 -1
  233. package/dist/chunks/{index-C53JoVNk.js → index-Buhqag3v.js} +2 -2
  234. package/dist/chunks/{index-C53JoVNk.js.map → index-Buhqag3v.js.map} +1 -1
  235. package/dist/chunks/{index-DO0Rw7hX.js → index-C3VxlfKq.js} +2 -2
  236. package/dist/chunks/{index-DO0Rw7hX.js.map → index-C3VxlfKq.js.map} +1 -1
  237. package/dist/chunks/{index-CSQ60fpG.js → index-CgpRo8Oe.js} +2 -2
  238. package/dist/chunks/{index-CSQ60fpG.js.map → index-CgpRo8Oe.js.map} +1 -1
  239. package/dist/chunks/{index-B-e-ELsf.js → index-DOY0w8Iu.js} +8 -8
  240. package/dist/chunks/{index-B-e-ELsf.js.map → index-DOY0w8Iu.js.map} +1 -1
  241. package/dist/chunks/{index-D2REDIRX.js → index-DwuvIOrQ.js} +2 -2
  242. package/dist/chunks/{index-D2REDIRX.js.map → index-DwuvIOrQ.js.map} +1 -1
  243. package/dist/chunks/{index-DCcl7Qof.js → index-DzedSLdI.js} +2 -2
  244. package/dist/chunks/{index-DCcl7Qof.js.map → index-DzedSLdI.js.map} +1 -1
  245. package/dist/chunks/{index-2wUhd9Lu.js → index-IgLVXPg8.js} +10 -10
  246. package/dist/chunks/index-IgLVXPg8.js.map +1 -0
  247. package/dist/chunks/{index-CwSaRXXg.js → index-lpIzhufD.js} +1916 -1900
  248. package/dist/chunks/index-lpIzhufD.js.map +1 -0
  249. package/dist/chunks/{index-Cuwn2q-f.js → index-mLUKwbGl.js} +4 -4
  250. package/dist/chunks/{index-Cuwn2q-f.js.map → index-mLUKwbGl.js.map} +1 -1
  251. package/dist/chunks/{index-B0mk2tNY.js → index-tO6MMIFB.js} +2 -2
  252. package/dist/chunks/{index-B0mk2tNY.js.map → index-tO6MMIFB.js.map} +1 -1
  253. package/dist/chunks/{tenantIconMap-BpNANQ5s.js → tenantIconMap-BQD9byc8.js} +2 -2
  254. package/dist/chunks/{tenantIconMap-BpNANQ5s.js.map → tenantIconMap-BQD9byc8.js.map} +1 -1
  255. package/dist/chunks/{tenantIconMap-DtdUgvJO.js → tenantIconMap-CTMuSt18.js} +2 -2
  256. package/dist/chunks/{tenantIconMap-DtdUgvJO.js.map → tenantIconMap-CTMuSt18.js.map} +1 -1
  257. package/dist/chunks/{ticketingApi-Bu4rKwLl.js → ticketingApi-BNIdox5t.js} +2 -2
  258. package/dist/chunks/{ticketingApi-Bu4rKwLl.js.map → ticketingApi-BNIdox5t.js.map} +1 -1
  259. package/dist/chunks/{ticketingApi-r4Avm9iS.js → ticketingApi-J0vC_t7r.js} +2 -2
  260. package/dist/chunks/{ticketingApi-r4Avm9iS.js.map → ticketingApi-J0vC_t7r.js.map} +1 -1
  261. package/dist/chunks/{useAccessRequests-B9bF4swg.js → useAccessRequests-DCNNLnxk.js} +3 -3
  262. package/dist/chunks/{useAccessRequests-B9bF4swg.js.map → useAccessRequests-DCNNLnxk.js.map} +1 -1
  263. package/dist/chunks/{useAccessRequests-JyPUX3Om.js → useAccessRequests-DT7X4FAK.js} +2 -2
  264. package/dist/chunks/{useAccessRequests-JyPUX3Om.js.map → useAccessRequests-DT7X4FAK.js.map} +1 -1
  265. package/dist/chunks/{useUserAccessRequests-DjPQenC2.js → useUserAccessRequests-BYbmG4c7.js} +2 -2
  266. package/dist/chunks/{useUserAccessRequests-DjPQenC2.js.map → useUserAccessRequests-BYbmG4c7.js.map} +1 -1
  267. package/dist/chunks/{useUserAccessRequests-BB6FHW14.js → useUserAccessRequests-CylKxRN6.js} +2 -2
  268. package/dist/chunks/{useUserAccessRequests-BB6FHW14.js.map → useUserAccessRequests-CylKxRN6.js.map} +1 -1
  269. package/dist/hooks/useCollapsibleState.d.ts +5 -2
  270. package/dist/hooks/useCollapsibleState.d.ts.map +1 -1
  271. package/dist/i18n/config.d.ts +1 -0
  272. package/dist/i18n/config.d.ts.map +1 -1
  273. package/dist/main.d.ts +0 -1
  274. package/dist/main.d.ts.map +1 -1
  275. package/dist/smartstack.cjs +1 -1
  276. package/dist/smartstack.js +1 -1
  277. package/dist/utils/permissions.d.ts.map +1 -1
  278. package/package.json +1 -1
  279. package/dist/chunks/index-2wUhd9Lu.js.map +0 -1
  280. package/dist/chunks/index-CwSaRXXg.js.map +0 -1
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),ue=require("react-router-dom"),G=require("react-i18next"),s=require("lucide-react"),D=require("./index-2wUhd9Lu.js"),Xe=require("./TenantScopeSelector-Cym_Zyps.js"),$e=require("./roleUtils-tv67Lrey.js"),ge=require("./PermissionPopover-CtYTz7MK.js"),Oe=require("./groupsApi-BIbG665N.js"),Ge=require("./formatPhone-D4luHK-2.js"),Be=require("./TenantCard-CUjb6og9.js");function at(t){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(a,n,i.get?i:{enumerable:!0,get:()=>t[n]})}}return a.default=t,Object.freeze(a)}const nt=at(s),Qe={Global:{bg:"bg-[var(--accent-bg)]",text:"text-[var(--color-accent-500)]"},Admin:{bg:"bg-[var(--error-bg)]",text:"text-[var(--error-text)]"},Manager:{bg:"bg-[var(--warning-bg)]",text:"text-[var(--warning-text)]"},Contributor:{bg:"bg-[var(--success-bg)]",text:"text-[var(--success-text)]"},Viewer:{bg:"bg-[var(--info-bg)]",text:"text-[var(--info-text)]"},Custom:{bg:"bg-[var(--accent-bg)]",text:"text-[var(--color-accent-700)]"}},Ye={bg:"bg-[var(--bg-secondary)]",text:"text-[var(--text-secondary)]"},_e={Direct:{bg:"bg-[var(--success-bg)]",text:"text-[var(--success-text)]",icon:s.Globe},Group:{bg:"bg-[var(--accent-bg)]",text:"text-[var(--color-accent-700)]",icon:s.Users},Custom:{bg:"bg-[var(--warning-bg)]",text:"text-[var(--warning-text)]",icon:s.Lock}};function it({userId:t,assignedRoles:a=[],onSave:n,onGlobalRolesUpdate:i,roles:c,loading:l=!1,globalRoleIds:j,tenantId:u,isGlobalScope:f=!0,adminTenants:N=[],tenantMemberships:x=[]}){const{t:b}=G.useTranslation(["admin","groups"]),T=Array.isArray(c)?c:[],[d,p]=o.useState(""),[v,C]=o.useState("all"),[w,F]=o.useState(null),[V,R]=o.useState(!1),[A,B]=o.useState(null),z=o.useRef(!1),L=o.useMemo(()=>x.map(S=>({id:S.tenantId,name:S.tenantName})).sort((S,I)=>S.name.localeCompare(I.name)),[x]),q=o.useMemo(()=>{let S=a;if(v==="global"?S=S.filter(P=>!P.tenantId):v!=="all"&&(S=S.filter(P=>!P.tenantId||P.tenantId===v)),!d.trim())return S;const I=d.toLowerCase().trim();return S.filter(P=>P.roleName.toLowerCase().includes(I)||P.tenantName?.toLowerCase().includes(I)||P.sourceGroupName?.toLowerCase().includes(I))},[a,d,v]),_=o.useMemo(()=>{const S=new Map;for(const I of T)S.set(I.id,I);return S},[T]),E=o.useCallback(async(S,I)=>{if(!z.current){z.current=!0,F(S+(I||"global")),B(null);try{if(I){const P=x.find(K=>K.tenantId===I);P&&await D.adminApi.tenants.removeRole(I,P.tenantUserId,S)}else{const P=j.filter(K=>K!==S);await i(P)}await n()}catch(P){console.error("Failed to remove role assignment:",P),B(b("admin:userRoles.errors.removeFailed","Erreur lors du retrait du rôle"))}finally{F(null),z.current=!1}}},[j,x,i,n,b]),M=o.useCallback(()=>R(!0),[]),H=o.useCallback(()=>R(!1),[]),Z=o.useCallback(async()=>{await n()},[n]);return e.jsxs("div",{className:"space-y-4",children:[A&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] flex items-center gap-3",children:[e.jsx(s.AlertCircle,{className:"w-5 h-5 text-[var(--error-text)] flex-shrink-0"}),e.jsx("p",{className:"flex-1 text-[var(--error-text)]",children:A}),e.jsx("button",{onClick:()=>B(null),className:"ml-auto",children:e.jsx(s.X,{className:"w-4 h-4 text-[var(--error-text)]"})})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-1",children:[e.jsxs("div",{className:"relative flex-1 max-w-md",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",value:d,onChange:S=>p(S.target.value),placeholder:b("admin:userRoles.search","Rechercher un rôle..."),className:"w-full pl-10 pr-4 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:v,onChange:S=>C(S.target.value),className:"px-3 py-2 pr-8 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] appearance-none focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.scopeAll","Tous les tenants")}),e.jsx("option",{value:"global",children:b("admin:roles.global","Global")}),L.map(S=>e.jsx("option",{value:S.id,children:S.name},S.id))]}),e.jsx(s.ChevronDown,{className:"absolute right-2.5 top-1/2 -translate-y-1/2 w-4 h-4 pointer-events-none text-[var(--text-tertiary)]"})]})]}),e.jsxs("button",{onClick:M,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors text-sm font-medium",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),b("admin:userRoles.assignRole","Assigner un rôle")]})]}),l?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})}):e.jsxs("div",{className:"overflow-x-auto",children:[e.jsxs("table",{className:"w-full border border-[var(--border-color)] rounded-[var(--radius-card)] overflow-hidden",children:[e.jsx("thead",{className:"bg-[var(--bg-tertiary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.name","Rôle")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.category","Catégorie")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.tenant","Tenant")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:userRoles.source","Source")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)] w-24",children:b("admin:roles.actions","Actions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:q.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:5,className:"px-4 py-8 text-center text-[var(--text-muted)]",children:a.length===0?b("admin:userRoles.noAssignedRoles","Aucun rôle assigné à cet utilisateur"):b("admin:userRoles.noRoles","Aucun rôle trouvé")})}):q.map(S=>{const I=_.get(S.roleId),P=I?.category||"Custom",K=Qe[P]||Ye,Q=I?$e.getCustomRoleIcon(I.code):null,ee=!S.tenantId,ne=S.source==="Group",te=_e[S.source]||_e.Direct,re=te.icon,r=S.roleId+(S.tenantId||"global"),h=w===r;return e.jsxs("tr",{className:"hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsxs("td",{className:"px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[Q&&e.jsx("span",{children:Q}),e.jsx(ue.Link,{to:`/administration/permissions/roles/${S.roleId}`,className:"font-medium text-[var(--text-primary)] hover:text-[var(--color-accent-600)] hover:underline transition-colors",children:S.roleName})]}),S.roleShortName&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mt-0.5",children:S.roleShortName})]}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("span",{className:`px-2 py-1 text-xs rounded-full ${K.bg} ${K.text}`,children:P})}),e.jsx("td",{className:"px-4 py-3",children:ee?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full bg-[var(--info-bg)] text-[var(--info-text)]",children:[e.jsx(s.Globe,{className:"w-3 h-3"}),b("admin:roles.global","Global")]}):e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full bg-[var(--accent-bg)] text-[var(--color-accent-700)]",children:[e.jsx(s.Building2,{className:"w-3 h-3"}),S.tenantName||b("admin:roles.unknownTenant","Tenant")]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full ${te.bg} ${te.text}`,children:[e.jsx(re,{className:"w-3 h-3"}),S.source==="Direct"?b("admin:userRoles.sourceDirect","Direct"):S.source==="Group"?S.sourceGroupName||b("admin:userRoles.sourceGroup","Groupe"):b("admin:userRoles.sourceCustom","Personnel")]})}),e.jsx("td",{className:"px-4 py-3",children:ne?e.jsx("span",{title:b("admin:userRoles.groupRoleLocked","Rôle hérité du groupe, non supprimable"),children:e.jsx(s.Lock,{className:"w-4 h-4 text-[var(--text-muted)]"})}):e.jsx("button",{onClick:()=>E(S.roleId,S.tenantId),disabled:h,className:"p-1.5 rounded-[var(--radius-button)] text-[var(--error-text)] hover:bg-[var(--error-bg)] transition-colors disabled:opacity-50",title:b("admin:userRoles.removeRole","Retirer le rôle"),children:h?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Trash2,{className:"w-4 h-4"})})})]},`${S.roleId}-${S.tenantId||"global"}-${S.source}`)})})]}),a.length>0&&e.jsx("div",{className:"px-4 py-2 text-xs text-[var(--text-muted)] bg-[var(--bg-tertiary)] border-t border-[var(--border-color)]",children:q.length!==a.length?b("admin:userRoles.totalFiltered","{{filtered}} / {{count}} rôle(s) affiché(s)",{filtered:q.length,count:a.length}):b("admin:userRoles.totalAssigned","{{count}} rôle(s) assigné(s)",{count:a.length})})]}),V&&e.jsx(lt,{userId:t,roles:T,assignedRoles:a,globalRoleIds:j,onGlobalRolesUpdate:i,initialTenantId:u,initialIsGlobalScope:f,adminTenants:N,tenantMemberships:x,onAssigned:Z,onClose:H})]})}function lt({userId:t,roles:a,assignedRoles:n,globalRoleIds:i,onGlobalRolesUpdate:c,initialTenantId:l,initialIsGlobalScope:j,adminTenants:u,tenantMemberships:f,onAssigned:N,onClose:x}){const{t:b}=G.useTranslation(["admin","groups"]),[T,d]=o.useState(""),[p,v]=o.useState("all"),[C,w]=o.useState("all"),[F,V]=o.useState("all"),[R,A]=o.useState(null),[B,z]=o.useState(null),L=o.useRef(!1),q=o.useMemo(()=>{const r=new Set(f.map(h=>h.tenantId));return u.filter(h=>r.has(h.tenantId))},[u,f]),[_,E]=o.useState(()=>{if(j||!l)return"global";const r=u.find(h=>h.tenantId===l);return r?{tenantId:r.tenantId,tenantSlug:r.tenantSlug,tenantUserId:"",tenantName:r.tenantName}:"global"}),M=_==="global",H=M?void 0:_.tenantId,Z=o.useMemo(()=>{const r=new Set;for(const h of n)h.source==="Direct"&&(M&&!h.tenantId||!M&&h.tenantId===H)&&r.add(h.roleId);return r},[n,M,H]),[S,I]=o.useState(null);o.useEffect(()=>{if(M||!H){I(null);return}let r=!1;return D.adminApi.tenants.getApplications(H).then(h=>{r||I(new Set(h.map(g=>g.applicationId)))}).catch(()=>{r||I(null)}),()=>{r=!0}},[M,H]);const P=o.useMemo(()=>M||!S?a:a.filter(r=>!r.applicationId||S.has(r.applicationId)),[a,M,S]),K=o.useMemo(()=>{const r=new Map;for(const h of P)h.contextId&&h.contextName&&!r.has(h.contextId)&&r.set(h.contextId,h.contextName);return Array.from(r.entries()).map(([h,g])=>({id:h,name:g}))},[P]),Q=o.useMemo(()=>{const r=new Map;for(const h of P)!h.applicationId||!h.applicationName||C!=="all"&&h.contextId!==C||r.has(h.applicationId)||r.set(h.applicationId,h.applicationName);return Array.from(r.entries()).map(([h,g])=>({id:h,name:g})).sort((h,g)=>h.name.localeCompare(g.name))},[P,C]),ee=o.useCallback(r=>{w(r),V("all")},[]),ne=o.useMemo(()=>{const r=new Set(P.map(h=>h.category||"Custom"));return["all",...Array.from(r).sort((h,g)=>h.localeCompare(g))]},[P]),te=o.useMemo(()=>{let r=P;if(C!=="all"&&(r=r.filter(h=>h.contextId===C)),F!=="all"&&(r=r.filter(h=>h.applicationId===F)),p!=="all"&&(r=r.filter(h=>(h.category||"Custom")===p)),T.trim()){const h=T.toLowerCase().trim();r=r.filter(g=>g.name.toLowerCase().includes(h)||g.shortName?.toLowerCase().includes(h)||g.description?.toLowerCase().includes(h))}return r},[P,C,F,p,T]),re=o.useCallback(async r=>{if(!L.current){L.current=!0,A(r),z(null);try{if(M){const h=[...i,r];await c(h)}else if(H){const h=f.find(g=>g.tenantId===H);if(h)await D.adminApi.tenants.assignRole(H,h.tenantUserId,r);else throw new Error(b("admin:userRoles.errors.notMember","L'utilisateur n'est pas membre de ce tenant"))}await N()}catch(h){console.error("Failed to assign role:",h),z(b("admin:userRoles.errors.assignFailed","Erreur lors de l'assignation du rôle"))}finally{A(null),L.current=!1}}},[M,H,i,c,f,N,b]);return e.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",children:e.jsxs("div",{className:"relative w-full max-w-2xl h-[80vh] bg-[var(--bg-card)] rounded-[var(--radius-card)] shadow-2xl border border-[var(--border-color)] overflow-hidden flex flex-col animate-in fade-in zoom-in duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-b border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{children:e.jsx("h2",{className:"text-lg font-semibold text-[var(--text-primary)]",children:b("admin:userRoles.assignRole","Assigner un rôle")})}),e.jsx(Xe.TenantScopeSelector,{value:_,onChange:E,adminTenants:q})]}),e.jsx("button",{onClick:x,className:"p-1.5 rounded-[var(--radius-button)] text-[var(--text-tertiary)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(s.X,{className:"w-5 h-5"})})]}),B&&e.jsxs("div",{className:"mx-6 mt-3 p-3 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] flex items-center gap-3",children:[e.jsx(s.AlertCircle,{className:"w-4 h-4 text-[var(--error-text)] flex-shrink-0"}),e.jsx("p",{className:"flex-1 text-sm text-[var(--error-text)]",children:B}),e.jsx("button",{onClick:()=>z(null),children:e.jsx(s.X,{className:"w-3.5 h-3.5 text-[var(--error-text)]"})})]}),e.jsxs("div",{className:"px-6 py-3 border-b border-[var(--border-color)] flex flex-col gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",value:T,onChange:r=>d(r.target.value),placeholder:b("admin:userRoles.search","Rechercher un rôle..."),className:"w-full pl-10 pr-4 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",autoFocus:!0})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(s.Filter,{className:"w-4 h-4 text-[var(--text-secondary)] shrink-0"}),e.jsxs("select",{value:C,onChange:r=>ee(r.target.value),className:"flex-1 min-w-0 px-3 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.filterByContext","Tous les contextes")}),K.map(r=>e.jsx("option",{value:r.id,children:r.name},r.id))]}),e.jsxs("select",{value:F,onChange:r=>V(r.target.value),disabled:C==="all"||Q.length===0,className:"flex-1 min-w-0 px-3 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)] disabled:opacity-50",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.filterByApplication","Toutes les applications")}),Q.map(r=>e.jsx("option",{value:r.id,children:r.name},r.id))]}),e.jsxs("select",{value:p,onChange:r=>v(r.target.value),className:"flex-1 min-w-0 px-3 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.filterByCategory","Toutes les catégories")}),ne.filter(r=>r!=="all").map(r=>e.jsx("option",{value:r,children:r},r))]})]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-tertiary)] sticky top-0 z-10",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-6 py-2.5 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.name","Rôle")}),e.jsx("th",{className:"text-left px-4 py-2.5 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.category","Catégorie")}),e.jsx("th",{className:"text-right px-6 py-2.5 text-sm font-medium text-[var(--text-secondary)] w-32",children:b("admin:roles.actions","Actions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:te.length===0?e.jsx("tr",{children:e.jsxs("td",{colSpan:3,className:"px-6 py-12 text-center",children:[e.jsx(s.Search,{className:"w-8 h-8 mx-auto mb-2 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-[var(--text-muted)]",children:b("admin:userRoles.noRoles","Aucun rôle trouvé")})]})}):te.map(r=>{const h=Z.has(r.id),g=Qe[r.category||"Custom"]||Ye,X=$e.getCustomRoleIcon(r.code),le=R===r.id;return e.jsxs("tr",{className:`transition-colors ${h?"bg-[var(--accent-bg)] opacity-60":"hover:bg-[var(--bg-hover)]"}`,children:[e.jsx("td",{className:"px-6 py-3",children:e.jsxs("div",{className:"flex items-center gap-2",children:[X&&e.jsx("span",{children:X}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:r.name}),r.description&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mt-0.5 max-w-sm truncate",children:r.description})]})]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("span",{className:`px-2 py-1 text-xs rounded-full ${g.bg} ${g.text}`,children:r.category||"Custom"})}),e.jsx("td",{className:"px-6 py-3 text-right",children:h?e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:b("admin:userRoles.alreadyAssigned","Déjà assigné")}):e.jsxs("button",{onClick:()=>re(r.id),disabled:le,className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white text-xs font-medium hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50",children:[le?e.jsx(s.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):e.jsx(s.Plus,{className:"w-3.5 h-3.5"}),b("admin:userRoles.assign","Assigner")]})})]},r.id)})})]})}),e.jsx("div",{className:"px-6 py-3 border-t border-[var(--border-color)] bg-[var(--bg-tertiary)] flex justify-end",children:e.jsx("button",{onClick:x,className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors text-sm font-medium",children:b("common:close","Fermer")})})]})})}function ot(t,a,n){const i=new Set;return t.forEach(c=>{const l=a.get(c.id);l&&i.add(l.tenantName||n)}),Array.from(i)}function ct(t,a){const n=[];return t.forEach(i=>{const c=a.get(i.id);c&&(n.find(j=>j.type===c.source&&(j.type==="Direct"||j.type==="Custom"||j.groupName===c.sourceGroupName))||n.push({type:c.source,groupName:c.sourceGroupName||void 0}))}),n}const dt={"*":e.jsx(s.Shield,{className:"h-3.5 w-3.5"}),read:e.jsx(s.Eye,{className:"h-3.5 w-3.5"}),create:e.jsx(s.Plus,{className:"h-3.5 w-3.5"}),update:e.jsx(s.Edit,{className:"h-3.5 w-3.5"}),delete:e.jsx(s.Trash2,{className:"h-3.5 w-3.5"}),assign:e.jsx(s.UserPlus,{className:"h-3.5 w-3.5"}),execute:e.jsx(s.Play,{className:"h-3.5 w-3.5"})},ut={"*":"bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]",read:"bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]",create:"bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]",update:"bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]",delete:"bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]",assign:"bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]",execute:"bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]"};function mt({userId:t,compact:a=!1,tenantId:n}){const{t:i}=G.useTranslation("admin"),c=ue.useNavigate(),{loading:l,error:j,user:u,userRoles:f,filteredResources:N,effectivePermissions:x,filters:b,applications:T,modules:d,updateFilters:p,getPermissionSources:v,reloadData:C,isTenantMode:w,tenantMember:F,assignTenantRoles:V,consolidatedRoles:R}=D.useUserPermissions({userId:t,tenantId:n}),A=o.useMemo(()=>{const m=new Map;return R.forEach(y=>m.set(y.roleId,y)),m},[R]),{collapsedApps:B,toggleApp:z}=D.useCollapsibleState(),[L,q]=o.useState(new Set),[_,E]=o.useState(new Set),[M,H]=o.useState(new Set),[Z,S]=o.useState(null),[I,P]=o.useState(null),[K,Q]=o.useState(new Set),[ee,ne]=o.useState(null),[te,re]=o.useState(!1);o.useEffect(()=>{(async()=>{try{if(re(!0),w&&n&&F){const y=await D.adminApi.tenants.getMemberCustomRole(n,F.userId);y?(P(y.id),Q(new Set((y.permissions??[]).map(k=>k.id)))):(P(null),Q(new Set))}else{const y=await D.adminApi.users.getCustomRole(t);y?(P(y.id),Q(new Set((y.permissions??[]).map(k=>k.id)))):(P(null),Q(new Set))}}catch(y){y instanceof Error&&y.message.includes("404")||console.error("Failed to load custom role:",y),P(null),Q(new Set)}finally{re(!1)}})()},[t,n,w,F]);const r=async m=>{try{ne(m);let y=I,k=new Set(K);if(w&&n&&F){y||(y=(await D.adminApi.tenants.createMemberCustomRole(n,F.userId)).id,P(y),k=new Set);const U=new Set(k);U.has(m)?U.delete(m):U.add(m);const W=await D.adminApi.roles.getById(y);await D.adminApi.roles.update(y,{name:W.name,shortName:W.shortName||void 0,category:W.category||void 0,description:W.description||void 0,permissionIds:Array.from(U)}),Q(U)}else{y||(y=(await D.adminApi.users.createCustomRole(t)).id,P(y),k=new Set);const U=new Set(k);U.has(m)?U.delete(m):U.add(m);const W=await D.adminApi.roles.getById(y);await D.adminApi.roles.update(y,{name:W.name,shortName:W.shortName||void 0,category:W.category||void 0,description:W.description||void 0,permissionIds:Array.from(U)}),Q(U)}await C()}catch(y){console.error("Failed to toggle permission:",y)}finally{ne(null)}},h=m=>{S(Z===m?null:m)},g=m=>{H(y=>{const k=new Set(y);return k.has(m)?k.delete(m):k.add(m),k})},X=m=>{q(y=>{const k=new Set(y);return k.has(m)?k.delete(m):k.add(m),k})},le=m=>{E(y=>{const k=new Set(y);return k.has(m)?k.delete(m):k.add(m),k})},oe=o.useCallback(m=>{const y=[...m.permissions];return m.childSections&&m.childSections.forEach(k=>{y.push(...k.permissions)}),y},[]),he=o.useCallback((m,y=!1)=>{if(y)return ge.calculatePermissionStatus(m,se=>x.has(se));const k=oe(m),U=k.filter(se=>x.has(se.id)).length,W=k.length;let J;return U===0?J="none":U===W?J="all":J=k.every(ie=>!x.has(ie.id)||ie.action==="read")&&k.some(ie=>ie.action==="read"&&x.has(ie.id))?"read-only":"some",{status:J,grantedCount:U}},[x,oe]),me=m=>m.filter(y=>{const{status:k}=ge.calculateModuleWithSectionsStatus(y.module,y.sections,U=>x.has(U));return M.has(k)}),fe=m=>m.map(y=>({...y,modules:me(y.modules)})).filter(y=>y.modules.length>0),Se=m=>M.size===0?m:fe(m),xe=o.useMemo(()=>{let m=ge.groupByApplicationWithSections(N);return Se(m)},[N,M,x]),pe=o.useMemo(()=>xe.reduce((m,y)=>m+y.modules.length,0),[xe]),ye=(m,y)=>{v(m).forEach(U=>{y.find(W=>W.id===U.id)||y.push(U)})},je=m=>{const y=[];return m.permissions.forEach(k=>{x.has(k.id)&&ye(k.id,y)}),y},be=m=>m.startsWith("user_")&&m.endsWith("_custom"),Ae=m=>be(m.name)?i("userPermissions.customBadge","Custom"):m.shortName||m.name,Ne=o.useMemo(()=>u?{id:I||`user_${t}_custom`,name:u.fullName,shortName:u.fullName,category:"Custom",description:null,isSystem:!1,permissions:[],permissionIds:[]}:null,[u,I,t]),we=o.useCallback((m,y)=>{const k=x.has(y),U=K.has(y),W=k?v(y):[],J=W.find(se=>!be(se.name));return{isDirect:U,isInherited:k&&!U&&W.length>0,inheritedFromPath:J?J.name:void 0,inheritedFromId:J?.id}},[x,K,v]);if(l)return e.jsxs("div",{className:"flex items-center justify-center py-12",children:[e.jsx(s.Loader2,{className:"h-8 w-8 animate-spin text-[var(--color-accent-500)]"}),e.jsx("span",{className:"ml-3 text-[var(--text-secondary)]",children:i("userPermissions.loading")})]});if(j)return e.jsx("div",{className:"rounded-[var(--radius-card)] bg-[var(--error-bg)] p-4 border border-[var(--error-border)]",children:e.jsxs("div",{className:"flex items-center",children:[e.jsx(s.AlertCircle,{className:"h-5 w-5 text-[var(--error-text)]"}),e.jsx("p",{className:"ml-2 text-sm text-[var(--error-text)]",children:j})]})});if(!u)return e.jsxs("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:[e.jsx(s.Shield,{className:"h-12 w-12 mx-auto mb-4 text-[var(--text-muted)]"}),e.jsx("p",{children:i("userPermissions.noUser")})]});const ze=m=>m==="resource"?e.jsx(s.Database,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}):m==="section"?e.jsx(s.FileText,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}):e.jsx(s.Box,{className:"h-3.5 w-3.5 text-[var(--text-secondary)]"}),De=m=>m==="resource"?"text-[var(--text-muted)] italic":m==="section"?"text-[var(--text-secondary)]":"font-medium text-[var(--text-primary)]",ke=m=>m==="resource"?"pl-28":m==="section"?"pl-22":"pl-16",Te=m=>m==="Direct"?"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)]":m==="Custom"?"bg-[var(--color-accent-100)] text-[var(--color-accent-700)] dark:bg-[var(--color-accent-900)] dark:text-[var(--color-accent-300)] border border-[var(--color-accent-300)] dark:border-[var(--color-accent-700)]":"bg-[var(--warning-bg)] text-[var(--warning-text)] border border-[var(--warning-border)]",Ve=(m,y)=>{const k=y("userPermissions.globalScope","Global");return m===k?"bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]":"bg-[var(--bg-tertiary)] text-[var(--text-secondary)] border border-[var(--border-color)]"},$=(m,y,k)=>{const{section:U,resources:W}=m,J=W.length>0,se=_.has(U.id);return e.jsxs(o.Fragment,{children:[de(U,y+k+1,"section",J,se),J&&!se&&W.map((ie,Ce)=>de(ie,y+k+Ce+2,"resource",!1,!1))]},U.id)},ce=(m,y)=>{const{module:k,sections:U}=m,W=U.length>0,J=L.has(k.id);return e.jsxs(o.Fragment,{children:[de(k,y,"module",W,J),W&&!J&&U.map((se,ie)=>$(se,y,ie))]},k.id)},de=(m,y,k,U=!1,W=!1)=>{const J=k==="section",{status:se,grantedCount:ie}=he(m,J),Ce=J?m.permissions.length:oe(m).length,Ze=ge.getPermissionCellBackground(se),ve=je(m),We=Z===m.id,et=o.createRef(),tt=ke(k);return e.jsxs("tr",{className:`hover:bg-[var(--bg-hover)] ${y%2===0?"item-light":"item-medium"}`,children:[e.jsx("td",{className:`sticky left-0 z-10 ${y%2===0?"item-light":"item-medium"} px-3 py-2 ${tt}`,style:{width:"280px",minWidth:"280px",maxWidth:"280px"},children:e.jsxs("div",{className:"flex items-center gap-2",children:[U&&e.jsx("button",{onClick:()=>k==="module"?X(m.id):le(m.id),className:"p-0.5 hover:bg-[var(--bg-hover)] rounded",children:W?e.jsx(s.ChevronRight,{className:"h-3 w-3 text-[var(--text-muted)]"}):e.jsx(s.ChevronDown,{className:"h-3 w-3 text-[var(--text-muted)]"})}),ze(k),e.jsx("span",{className:`text-sm ${De(k)}`,children:m.label}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["(",Ce,")"]})]})}),e.jsxs("td",{className:`px-0 py-1 text-center relative ${Ze}`,style:{width:"60px",minWidth:"60px",maxWidth:"60px"},children:[e.jsx("button",{ref:et,type:"button",onClick:()=>h(m.id),className:`w-full h-full min-h-[36px] flex items-center justify-center rounded transition-colors hover:opacity-80 ${We?"ring-2 ring-[var(--color-accent-500)]":""}`,title:`${m.label}: ${ie}/${Ce}`,children:e.jsx(ge.PermissionStatusIndicator,{status:se,grantedCount:ie,totalCount:Ce})}),We&&u&&Ne&&e.jsx(ge.PermissionPopover,{mode:"editable",role:Ne,resource:m,onClose:()=>S(null),onTogglePermission:r,getPermissionInheritance:we})]}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:ve.length>0?ve.map(O=>{const ae=be(O.name),Re=Ae(O);return e.jsxs("button",{onClick:()=>!ae&&c(`/administration/permissions/roles/${O.id}`),className:`inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded-full transition-all ${ae?"bg-[var(--color-accent-100)] text-[var(--color-accent-700)] dark:bg-[var(--color-accent-900)] dark:text-[var(--color-accent-300)] border border-[var(--color-accent-300)] dark:border-[var(--color-accent-700)] cursor-default":"bg-[var(--bg-tertiary)] text-[var(--text-secondary)] border border-[var(--border-color)] cursor-pointer hover:ring-1 hover:ring-[var(--color-accent-500)] hover:shadow-sm"}`,title:ae?i("userPermissions.customRoleTooltip","Rôle personnalisé"):i("userPermissions.clickToViewRole","Cliquer pour voir le rôle"),children:[Re,ae&&e.jsx(s.Star,{className:"h-3 w-3"})]},O.id)}):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"-"})})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:ve.length>0?ot(ve,A,i("userPermissions.globalScope","Global")).map((O,ae)=>e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 text-xs rounded-full ${Ve(O,i)}`,children:O},`tenant-${O}-${ae}`)):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"-"})})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:ve.length>0?ct(ve,A).map((O,ae)=>e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded-full ${Te(O.type)}`,title:O.type==="Group"&&O.groupName?i("userPermissions.viaGroup","Via groupe: {{group}}",{group:O.groupName}):O.type==="Custom"?i("userPermissions.customPermissions","Permissions personnalisées"):i("userPermissions.directAssignmentTooltip","Rôle assigné directement à l'utilisateur"),children:[O.type==="Direct"&&e.jsx(s.UserCheck,{className:"h-3 w-3"}),O.type==="Group"&&e.jsx(s.Users,{className:"h-3 w-3"}),O.type==="Custom"&&e.jsx(s.User,{className:"h-3 w-3"}),O.type==="Direct"?i("userPermissions.directAssignment","Direct"):O.type==="Custom"?i("userPermissions.customSource","Custom"):O.groupName||i("userPermissions.viaGroupShort","Groupe")]},`source-${O.type}-${ae}`)):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"-"})})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1.5 items-center relative",children:m.permissions.filter(O=>x.has(O.id)).map(O=>{const ae=K.has(O.id),Re=ee===O.id,st=ut[O.action]||"bg-[var(--bg-secondary)] text-[var(--text-secondary)] border-[var(--border-color)]",rt=dt[O.action]||e.jsx(s.Eye,{className:"h-3.5 w-3.5"});return e.jsxs("button",{onClick:()=>r(O.id),disabled:Re||te||!ae,className:`inline-flex items-center gap-1.5 px-2 py-1 rounded-[var(--radius-badge)] border text-xs font-medium transition-all ${st} ${ae?"ring-2 ring-[var(--color-accent-600)] dark:ring-[var(--color-accent-400)] hover:opacity-80 cursor-pointer":"opacity-60 cursor-not-allowed"} disabled:opacity-50`,title:ae?i("userPermissions.clickToRemove","Cliquer pour retirer"):i("userPermissions.grantedByRole","Accordé par un rôle"),children:[Re?e.jsx(s.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):rt,e.jsx("span",{className:"capitalize",children:i(`assignments.actions.${O.action==="*"?"all":O.action}.label`)}),ae&&e.jsx(s.Star,{className:"h-3 w-3"})]},O.id)})})})]},m.id)};return e.jsxs("div",{className:"space-y-4",children:[!a&&e.jsx(e.Fragment,{children:e.jsxs("div",{className:"flex flex-col lg:flex-row lg:gap-6",children:[e.jsx("div",{className:"w-full lg:w-72 lg:flex-shrink-0 mb-4 lg:mb-0 lg:sticky lg:top-4 lg:self-start",children:e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-secondary)] border border-[var(--border-color)]",children:[e.jsx("h4",{className:"text-sm font-semibold text-[var(--text-primary)] mb-3",children:i("userPermissions.filters.title","Filtres")}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs text-[var(--text-secondary)]",children:i("userPermissions.filters.application")}),e.jsxs("select",{value:b.applicationFilter,onChange:m=>p({applicationFilter:m.target.value,moduleFilter:"all"}),className:"w-full px-3 py-1.5 text-sm bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:i("userPermissions.filters.allApplications")}),T.map(m=>e.jsx("option",{value:m.app,children:m.label},m.app))]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs text-[var(--text-secondary)]",children:i("userPermissions.filters.module")}),e.jsxs("select",{value:b.moduleFilter,onChange:m=>p({moduleFilter:m.target.value}),className:"w-full px-3 py-1.5 text-sm bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:i("userPermissions.filters.allModules")}),d.filter(m=>b.applicationFilter==="all"||m.app===b.applicationFilter).map(m=>e.jsx("option",{value:m.module,children:m.label},`${m.app}:${m.module}`))]})]})]}),e.jsxs("div",{className:"mt-4 pt-4 border-t border-[var(--border-color)]",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--text-secondary)] block mb-2",children:i("userPermissions.filterByStatus")}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsxs("button",{onClick:()=>g("all"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("all")?"bg-[var(--success-bg)] border-[var(--success-border)] text-[var(--success-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--success-border)]"}`,children:[e.jsx(s.Check,{className:`h-3 w-3 ${M.has("all")?"":"text-[var(--success-dot)]"}`}),i("assignments.complete")]}),e.jsxs("button",{onClick:()=>g("some"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("some")?"bg-[var(--warning-bg)] border-[var(--warning-border)] text-[var(--warning-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--warning-border)]"}`,children:[e.jsx(s.Star,{className:`h-3 w-3 ${M.has("some")?"":"text-[var(--warning-dot)]"}`}),i("assignments.partial")]}),e.jsxs("button",{onClick:()=>g("read-only"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("read-only")?"bg-[var(--info-bg)] border-[var(--info-border)] text-[var(--info-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--info-border)]"}`,children:[e.jsx(s.Eye,{className:`h-3 w-3 ${M.has("read-only")?"":"text-[var(--info-dot)]"}`}),i("assignments.readOnly")]}),e.jsxs("button",{onClick:()=>g("none"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("none")?"bg-[var(--error-bg)] border-[var(--error-border)] text-[var(--error-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--error-border)]"}`,children:[e.jsx(s.Ban,{className:`h-3 w-3 ${M.has("none")?"":"text-[var(--text-muted)]"}`}),i("assignments.none")]})]}),M.size>0&&e.jsx("button",{onClick:()=>H(new Set),className:"mt-2 text-xs text-[var(--color-accent-500)] hover:text-[var(--color-accent-600)] underline",children:i("assignments.clearFilters")})]}),e.jsx("div",{className:"mt-4 pt-4 border-t border-[var(--border-color)]",children:e.jsxs("span",{className:"px-2.5 py-1 text-xs font-semibold rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",children:[pe," ",i("assignments.modules")]})})]})}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-4",children:[w&&F&&e.jsxs("div",{className:"w-fit flex items-center gap-2 p-3 rounded-[var(--radius-card)] bg-[var(--accent-bg)] border border-[var(--accent-border)]",children:[e.jsx(s.Shield,{className:"h-4 w-4 text-[var(--accent-text)]"}),e.jsx("span",{className:"text-sm text-[var(--accent-text)]",children:i("userPermissions.tenantModeInfo","Affichage des permissions dans le contexte du tenant. Les rôles ci-dessous sont spécifiques à ce tenant.")})]}),w&&!F&&e.jsxs("div",{className:"w-fit flex items-center gap-2 p-3 rounded-[var(--radius-card)] bg-[var(--warning-bg)] border border-[var(--warning-border)]",children:[e.jsx(s.AlertCircle,{className:"h-4 w-4 text-[var(--warning-text)]"}),e.jsx("span",{className:"text-sm text-[var(--warning-text)]",children:i("userPermissions.notMemberOfTenant","Cet utilisateur n'est pas membre du tenant actuel. Aucune permission tenant disponible.")})]}),f.length>0?e.jsx("div",{className:"flex flex-wrap gap-2",children:f.map(m=>{const y=be(m.name);return e.jsxs("button",{onClick:()=>!y&&c(`/administration/permissions/roles/${m.id}`),className:`inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-full bg-[var(--color-accent-100)] text-[var(--color-accent-700)] dark:bg-[var(--color-accent-900)] dark:text-[var(--color-accent-300)] transition-all ${y?"cursor-default":"cursor-pointer hover:ring-2 hover:ring-[var(--color-accent-500)] hover:shadow-md"}`,title:y?i("userPermissions.customRoleTooltip","Rôle personnalisé"):i("userPermissions.clickToViewRole","Cliquer pour voir le rôle"),children:[e.jsx(s.Shield,{className:"h-3.5 w-3.5"}),m.shortName||m.name]},m.id)})}):w?null:e.jsxs("div",{className:"w-fit flex items-center gap-2 p-3 rounded-[var(--radius-card)] bg-[var(--info-bg)] border border-[var(--info-border)]",children:[e.jsx(s.Info,{className:"h-4 w-4 text-[var(--info-text)]"}),e.jsx("span",{className:"text-sm text-[var(--info-text)]",children:i("userPermissions.noRolesInfo","Cet utilisateur n'a aucun rôle. Vous pouvez lui attribuer des permissions personnalisées ci-dessous.")})]}),e.jsx("div",{className:"overflow-x-auto overflow-y-visible",children:e.jsxs("table",{className:"border-collapse",style:{width:"auto"},children:[e.jsx("thead",{className:"item-medium border-b border-[var(--item-color-border)]",children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",className:"sticky left-0 z-20 item-medium px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"280px",minWidth:"280px",maxWidth:"280px",height:"48px",verticalAlign:"middle"},children:i("assignments.resource")}),e.jsx("th",{scope:"col",className:"px-2 text-center text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"60px",minWidth:"60px",maxWidth:"60px",height:"48px",verticalAlign:"middle"},children:i("userPermissions.status")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("userPermissions.sourceRoles")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle",minWidth:"120px"},children:i("userPermissions.tenant","Tenant")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle",minWidth:"120px"},children:i("userPermissions.source","Source")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("assignments.permissions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--item-color-border)]",children:xe.map(m=>{const y=m.application,k=B.has(y);return e.jsxs(o.Fragment,{children:[e.jsxs("tr",{className:"bg-[var(--bg-tertiary)]",children:[e.jsx("td",{className:"sticky left-0 z-10 px-3 py-2 bg-[var(--bg-tertiary)]",style:{width:"280px",minWidth:"280px",maxWidth:"280px"},children:e.jsxs("button",{onClick:()=>z(y),className:"flex items-center gap-3 w-full text-left hover:opacity-80",children:[k?e.jsx(s.ChevronRight,{className:"h-4 w-4 text-[var(--text-secondary)]"}):e.jsx(s.ChevronDown,{className:"h-4 w-4 text-[var(--text-secondary)]"}),e.jsx(s.FolderOpen,{className:"h-4 w-4 text-[var(--text-secondary)]"}),e.jsx("span",{className:"text-sm font-semibold text-[var(--text-primary)]",children:m.application}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)] ml-auto",children:[m.modules.length," module",m.modules.length>1?"s":""]})]})}),e.jsx("td",{colSpan:5,className:"px-0 py-2"})]}),!k&&m.modules.map((U,W)=>ce(U,W))]},y)})})]})}),pe===0&&e.jsx("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:i("assignments.noResources")})]})]})}),a&&e.jsx("div",{className:"overflow-x-auto overflow-y-visible",children:e.jsxs("table",{className:"border-collapse",style:{width:"auto"},children:[e.jsx("thead",{className:"item-medium border-b border-[var(--item-color-border)]",children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",className:"sticky left-0 z-20 item-medium px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"280px",minWidth:"280px",maxWidth:"280px",height:"48px",verticalAlign:"middle"},children:i("assignments.resource")}),e.jsx("th",{scope:"col",className:"px-2 text-center text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"60px",minWidth:"60px",maxWidth:"60px",height:"48px",verticalAlign:"middle"},children:i("userPermissions.status")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("userPermissions.sourceRoles")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("assignments.permissions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--item-color-border)]",children:xe.map(m=>e.jsx(o.Fragment,{children:m.modules.map((y,k)=>e.jsx(o.Fragment,{children:de(y.module,k,"module",!1,!1)},y.module.id))},m.application))})]})})]})}function Je({viewMode:t,onChange:a}){const{t:n}=G.useTranslation();return e.jsxs("div",{className:"flex items-center rounded-[var(--radius-button)] border border-[var(--border-color)] bg-[var(--bg-primary)] p-0.5 h-[34px]",children:[e.jsx("button",{onClick:()=>a("cards"),className:`flex items-center justify-center gap-1 px-2.5 h-full rounded text-sm transition-colors ${t==="cards"?"bg-[var(--color-accent-500)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,title:n("common.cardView","Vue cartes"),children:e.jsx(s.LayoutGrid,{className:"w-4 h-4"})}),e.jsx("button",{onClick:()=>a("table"),className:`flex items-center justify-center gap-1 px-2.5 h-full rounded text-sm transition-colors ${t==="table"?"bg-[var(--color-accent-500)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,title:n("common.tableView","Vue tableau"),children:e.jsx(s.Table2,{className:"w-4 h-4"})})]})}function xt({userId:t,userName:a}){const{t:n}=G.useTranslation(["admin","groups"]),i=ue.useNavigate(),[c,l]=o.useState([]),[j,u]=o.useState(null),[f,N]=o.useState(!0),[x,b]=o.useState(!1),[T,d]=o.useState(""),[p,v]=o.useState("all"),[C,w]=o.useState(new Set),[F,V]=o.useState(!1),[R,A]=o.useState(null),[B,z]=o.useState(null),[L,q]=o.useState(null),[_,E]=o.useState("cards"),M=o.useCallback(async()=>{try{N(!0);const r=await D.adminApi.users.getGroups(t);l(r)}catch(r){console.error("Failed to load user groups:",r),z(n("admin:userDetail.groups.loadError","Erreur lors du chargement des groupes"))}finally{N(!1)}},[t,n]),H=async()=>{try{const r=await Oe.groupsApi.getAll(void 0,!0);u(r)}catch(r){console.error("Failed to load all groups:",r)}};o.useEffect(()=>{M(),H()},[M]);const Z=async r=>{const h=c?.find(g=>g.id===r);if(confirm(n("admin:userDetail.groups.confirmRemove",{userName:a,groupName:h?.name})))try{A(r),z(null),await Oe.groupsApi.removeMember(r,t),await M(),q(n("admin:userDetail.groups.removeSuccess","Utilisateur retiré du groupe")),setTimeout(()=>q(null),3e3)}catch(g){console.error("Failed to remove from group:",g);const X=g?.response?.data?.message||n("admin:userDetail.groups.removeError","Erreur lors du retrait du groupe");z(X)}finally{A(null)}},I=j?.filter(r=>!c?.some(h=>h.id===r.id))?.filter(r=>{if(p==="security"&&!r.isSecurityGroup||p==="standard"&&r.isSecurityGroup||p==="entra"&&!r.isSyncedFromEntra)return!1;if(!T.trim())return!0;const h=T.toLowerCase().trim();return r.name.toLowerCase().includes(h)||(r.description?.toLowerCase().includes(h)??!1)}),P=r=>{w(h=>{const g=new Set(h);return g.has(r)?g.delete(r):g.add(r),g})},K=(r,h)=>h===r?"px-3 py-1 rounded-full text-xs font-medium transition-colors bg-[var(--color-accent-500)] text-white":"px-3 py-1 rounded-full text-xs font-medium transition-colors bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",Q=r=>r?"w-5 h-5 rounded border-2 flex items-center justify-center flex-shrink-0 transition-colors bg-[var(--color-accent-500)] border-[var(--color-accent-500)]":"w-5 h-5 rounded border-2 flex items-center justify-center flex-shrink-0 transition-colors border-[var(--border-color)]",ee=()=>{I&&w(new Set(I.map(r=>r.id)))},ne=()=>{w(new Set)},te=async()=>{if(C.size!==0)try{V(!0),z(null);const r=Array.from(C);for(const h of r)await Oe.groupsApi.addMember(h,{userId:t});await M(),b(!1),d(""),v("all"),w(new Set),q(n("admin:userDetail.groups.addMultipleSuccess",{count:r.length,defaultValue:`${r.length} groupe(s) ajouté(s)`})),setTimeout(()=>q(null),3e3)}catch(r){console.error("Failed to add groups:",r);const h=r?.response?.data?.message||n("admin:userDetail.groups.addError","Erreur lors de l'ajout au groupe");z(h)}finally{V(!1)}},re=()=>{b(!1),d(""),v("all"),w(new Set)};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(s.Users,{className:"w-5 h-5"}),n("admin:userDetail.groups.title","Groupes de l'utilisateur"),c&&e.jsx("span",{className:"ml-2 px-2 py-0.5 text-xs rounded-full bg-[var(--bg-secondary)] text-[var(--text-secondary)]",children:c.length})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>b(!0),className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("admin:userDetail.groups.add","Ajouter à un groupe")]}),e.jsxs("button",{onClick:M,className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(s.RefreshCw,{className:"w-4 h-4"}),n("common.refresh","Actualiser")]}),e.jsx(Je,{viewMode:_,onChange:E})]})]}),B&&e.jsxs("div",{className:"p-4 rounded-lg bg-red-500/10 border border-red-500/20 flex items-center gap-3",children:[e.jsx(s.AlertTriangle,{className:"w-5 h-5 text-red-500 flex-shrink-0"}),e.jsx("p",{className:"text-red-500",children:B}),e.jsx("button",{onClick:()=>z(null),className:"ml-auto",children:e.jsx(s.X,{className:"w-4 h-4 text-red-500"})})]}),L&&e.jsxs("div",{className:"p-4 rounded-lg bg-green-500/10 border border-green-500/20 flex items-center gap-3",children:[e.jsx(s.CheckCircle,{className:"w-5 h-5 text-green-500 flex-shrink-0"}),e.jsx("p",{className:"text-green-500",children:L})]}),e.jsx("div",{className:"p-4 rounded-lg bg-blue-500/10 border border-blue-500/20",children:e.jsx("p",{className:"text-sm text-blue-500",children:n("admin:userDetail.groups.info","L'utilisateur hérite automatiquement des rôles et permissions des groupes auxquels il appartient.")})}),f&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})}),!f&&(!c||c.length===0)&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx(s.Users,{className:"w-12 h-12 mx-auto mb-4 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-[var(--text-secondary)] mb-4",children:n("admin:userDetail.groups.noGroups","Cet utilisateur n'appartient à aucun groupe")}),e.jsxs("button",{onClick:()=>b(!0),className:"inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("admin:userDetail.groups.addFirst","Ajouter à un premier groupe")]})]}),!f&&(c?.length??0)>0&&_==="table"&&e.jsx(D.DataTable,{data:c,columns:[{key:"name",label:n("admin:userDetail.groups.table.name","Nom"),sortable:!0,render:r=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`p-1.5 rounded flex-shrink-0 ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]"}`,children:r.isSecurityGroup?e.jsx(s.Shield,{className:"w-4 h-4"}):e.jsx(s.Users,{className:"w-4 h-4"})}),e.jsx("div",{className:"min-w-0",children:e.jsxs("span",{className:"font-medium text-[var(--text-primary)] flex items-center gap-1",children:[r.name,r.isSyncedFromEntra&&e.jsx(s.Cloud,{className:"w-3.5 h-3.5 text-[var(--color-accent-500)]"})]})})]})},{key:"description",label:n("admin:userDetail.groups.table.description","Description"),render:r=>e.jsx("span",{className:"text-[var(--text-secondary)] truncate max-w-[200px] block",children:r.description||"-"}),hideOnMobile:!0},{key:"roles",label:n("admin:userDetail.groups.table.roles","Rôles"),render:r=>e.jsxs("div",{className:"flex flex-wrap gap-1",children:[r.roles.slice(0,2).map(h=>{const g=$e.getCustomRoleIcon(h.code);return e.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-xs bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]",children:[g?e.jsx("span",{children:g}):e.jsx(s.Shield,{className:"w-3 h-3"}),h.name]},h.name)}),r.roles.length>2&&e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)]",children:["+",r.roles.length-2]}),r.roles.length===0&&e.jsx("span",{className:"text-[var(--text-tertiary)]",children:"-"})]}),hideOnMobile:!0},{key:"addedAt",label:n("admin:userDetail.groups.table.addedAt","Ajouté le"),sortable:!0,render:r=>e.jsx("span",{className:"text-[var(--text-secondary)] text-sm",children:new Date(r.addedAt).toLocaleDateString()}),hideOnMobile:!0},{key:"actions",label:"",width:"80px",align:"right",render:r=>e.jsx("div",{className:"flex items-center justify-end gap-1",children:r.isSyncedFromEntra?e.jsxs("span",{className:"text-xs text-amber-500 flex items-center gap-1",children:[e.jsx(s.Info,{className:"w-3 h-3"}),"Entra"]}):e.jsx("button",{onClick:h=>{h.stopPropagation(),Z(r.id)},disabled:R===r.id,className:"flex items-center gap-1 px-2 py-1 rounded text-xs text-red-500 hover:bg-red-500/10 transition-colors disabled:opacity-50",children:R===r.id?e.jsx(s.Loader2,{className:"w-3 h-3 animate-spin"}):e.jsx(s.Trash2,{className:"w-3 h-3"})})})}],getRowKey:r=>r.id,onRowClick:r=>i(`/administration/users/groups/${r.id}`),compact:!0,emptyMessage:n("admin:userDetail.groups.noGroups","Cet utilisateur n'appartient à aucun groupe"),emptyIcon:e.jsx(s.Users,{className:"w-8 h-8 text-[var(--text-tertiary)]"})}),!f&&(c?.length??0)>0&&_!=="table"&&e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:c?.map(r=>e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)] hover:border-[var(--color-accent-500)] transition-colors",children:[e.jsx("div",{className:"flex items-start justify-between gap-3",children:e.jsxs("button",{type:"button",className:"flex items-start gap-3 min-w-0 cursor-pointer text-left",onClick:()=>i(`/administration/users/groups/${r.id}`),children:[e.jsx("div",{className:`p-2 rounded-lg flex-shrink-0 ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]"}`,children:r.isSecurityGroup?e.jsx(s.Shield,{className:"w-5 h-5"}):e.jsx(s.Users,{className:"w-5 h-5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("h4",{className:"text-sm font-semibold text-[var(--text-primary)] truncate flex items-center gap-2",children:[r.name,r.isSyncedFromEntra&&e.jsx(s.Cloud,{className:"w-3.5 h-3.5 text-[var(--color-accent-500)]"})]}),r.description&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] truncate",children:r.description})]})]})}),r.roles.length>0&&e.jsxs("div",{className:"mt-3 flex flex-wrap gap-1",children:[r.roles.slice(0,3).map(h=>{const g=$e.getCustomRoleIcon(h.code);return e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]",children:[g?e.jsx("span",{children:g}):e.jsx(s.Shield,{className:"w-3 h-3"}),h.name]},h.name)}),r.roles.length>3&&e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)]",children:["+",r.roles.length-3]})]}),e.jsxs("div",{className:"mt-3 pt-3 border-t border-[var(--border-color)] space-y-1",children:[e.jsxs("p",{className:"text-xs text-[var(--text-tertiary)]",children:[n("admin:userDetail.groups.addedAt","Ajouté le"),": ",new Date(r.addedAt).toLocaleDateString()]}),r.addedBy&&e.jsxs("p",{className:"text-xs text-[var(--text-tertiary)]",children:[n("admin:userDetail.groups.addedBy","Par"),": ",r.addedBy]})]}),!r.isSyncedFromEntra&&e.jsx("div",{className:"mt-3 flex justify-end",children:e.jsxs("button",{onClick:()=>Z(r.id),disabled:R===r.id,className:"flex items-center gap-1 px-2 py-1 rounded text-xs text-red-500 hover:bg-red-500/10 transition-colors disabled:opacity-50",children:[R===r.id?e.jsx(s.Loader2,{className:"w-3 h-3 animate-spin"}):e.jsx(s.Trash2,{className:"w-3 h-3"}),n("common.remove","Retirer")]})}),r.isSyncedFromEntra&&e.jsxs("div",{className:"mt-3 flex items-center gap-1 text-xs text-amber-500",children:[e.jsx(s.Info,{className:"w-3 h-3"}),n("admin:userDetail.groups.syncedFromEntra","Synchronisé depuis Entra ID")]})]},r.id))}),x&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:e.jsxs("div",{className:"w-full max-w-2xl mx-4 bg-[var(--bg-primary)] rounded-[var(--radius-card)] shadow-xl",children:[e.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-[var(--border-color)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:n("admin:userDetail.groups.addModalTitle","Ajouter à un groupe")}),e.jsx("button",{onClick:re,className:"p-1 rounded hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(s.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]}),e.jsxs("div",{className:"p-4 space-y-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("input",{type:"text",placeholder:n("admin:userDetail.groups.searchPlaceholder","Rechercher un groupe..."),value:T,onChange:r=>d(r.target.value),className:"w-full pl-10 pr-4 py-2 rounded-lg border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",autoFocus:!0})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(s.Filter,{className:"w-4 h-4 text-[var(--text-tertiary)]"}),["all","security","standard","entra"].map(r=>e.jsxs("button",{onClick:()=>v(r),className:K(r,p),children:[r==="all"&&n("admin:userDetail.groups.filterAll","Tous"),r==="security"&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.Shield,{className:"w-3 h-3"}),n("admin:userDetail.groups.filterSecurity","Sécurité")]}),r==="standard"&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.Users,{className:"w-3 h-3"}),n("admin:userDetail.groups.filterStandard","Standard")]}),r==="entra"&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.Cloud,{className:"w-3 h-3"}),n("admin:userDetail.groups.filterEntra","Entra ID")]})]},r))]}),(I?.length??0)>0&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsx("span",{className:"text-[var(--text-secondary)]",children:C.size>0?n("admin:userDetail.groups.selectedCount",{count:C.size,defaultValue:`${C.size} sélectionné(s)`}):n("admin:userDetail.groups.availableCount",{count:I?.length??0,defaultValue:`${I?.length??0} groupe(s) disponible(s)`})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:ee,className:"text-[var(--color-accent-500)] hover:underline",children:n("admin:userDetail.groups.selectAll","Tout sélectionner")}),C.size>0&&e.jsx("button",{onClick:ne,className:"text-[var(--text-tertiary)] hover:underline",children:n("admin:userDetail.groups.clearSelection","Effacer")})]})]})]}),e.jsx("div",{className:"max-h-[350px] overflow-y-auto space-y-2",children:!I||I.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(s.Users,{className:"w-8 h-8 mx-auto mb-2 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:n("admin:userDetail.groups.noAvailableGroups","Aucun groupe disponible")})]}):I.map(r=>{const h=C.has(r.id);return e.jsxs("button",{type:"button",onClick:()=>P(r.id),className:`w-full flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors text-left ${h?"border-[var(--color-accent-500)] bg-[var(--color-accent-500)]/5":"border-[var(--border-color)] hover:border-[var(--color-accent-500)] hover:bg-[var(--bg-hover)]"}`,children:[e.jsx("div",{className:Q(h),children:h&&e.jsx(s.Check,{className:"w-3 h-3 text-white"})}),e.jsx("div",{className:`p-2 rounded-lg flex-shrink-0 ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]"}`,children:r.isSecurityGroup?e.jsx(s.Shield,{className:"w-5 h-5"}):e.jsx(s.Users,{className:"w-5 h-5"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("p",{className:"text-sm font-medium text-[var(--text-primary)] truncate flex items-center gap-2",children:[r.name,r.isSyncedFromEntra&&e.jsx(s.Cloud,{className:"w-3.5 h-3.5 text-[var(--color-accent-500)]"})]}),r.description&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] truncate",children:r.description})]}),e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)] flex-shrink-0",children:[r.memberCount," ",n("admin:userDetail.groups.members","membres")]})]},r.id)})})]}),e.jsxs("div",{className:"flex items-center justify-between p-4 border-t border-[var(--border-color)]",children:[e.jsx("div",{className:"text-sm text-[var(--text-secondary)]",children:C.size>0&&e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-[var(--color-accent-500)] text-white text-xs flex items-center justify-center font-medium",children:C.size}),n("admin:userDetail.groups.groupsSelected","groupe(s) sélectionné(s)")]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:re,className:"px-4 py-2 rounded-lg bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:n("common.cancel","Annuler")}),e.jsx("button",{onClick:te,disabled:C.size===0||F,className:"px-4 py-2 rounded-lg bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2",children:F?e.jsxs(e.Fragment,{children:[e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}),n("admin:userDetail.groups.adding","Ajout en cours...")]}):e.jsxs(e.Fragment,{children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("admin:userDetail.groups.addSelected","Ajouter"),C.size>0&&` (${C.size})`]})})]})]})]})})]})}const qe="__OTHER__";function Pe({label:t,options:a,value:n,onChange:i,placeholder:c,disabled:l=!1,className:j="",allowOther:u=!0}){const{t:f}=G.useTranslation(),[N,x]=o.useState(!1),[b,T]=o.useState("");o.useEffect(()=>{n.customValue!==void 0?(x(!0),T(n.customValue)):(x(!1),T(""))},[n]);const d=w=>{const F=w.target.value;F===qe?(x(!0),T(""),i({id:"",customValue:""})):(x(!1),T(""),i({id:F,customValue:void 0}))},p=w=>{const F=w.target.value;T(F),i({id:"",customValue:F})},v=()=>{x(!1),T(""),i({id:"",customValue:void 0})},C=N?qe:n.id;return e.jsxs("div",{className:j,children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:t}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("select",{value:C,onChange:d,disabled:l,className:`flex-1 px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)] ${N?"w-1/3 flex-none":""}`,children:[e.jsx("option",{value:"",children:c||f("common.none","-- Aucun --")}),a.map(w=>e.jsx("option",{value:w.id,children:w.name},w.id)),u&&e.jsx("option",{value:qe,className:"font-medium text-[var(--color-accent-600)]",children:f("common.other","+ Autre...")})]}),N&&e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",value:b,onChange:p,placeholder:f("common.enterValue","Saisir une valeur..."),disabled:l,autoFocus:!0,className:"flex-1 px-4 py-2 rounded-[var(--radius-input)] border border-[var(--color-accent-500)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"}),e.jsx("button",{type:"button",onClick:v,disabled:l,className:"px-3 py-2 rounded-[var(--radius-button)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",title:f("common.cancel","Annuler"),children:"✕"})]})]}),N&&b&&e.jsxs("p",{className:"mt-1 text-xs text-[var(--color-accent-600)] flex items-center gap-1",children:[e.jsx(s.Plus,{className:"w-3 h-3"}),f("common.willBeCreated","Cette valeur sera créée automatiquement")]})]})}const Me=t=>t?new Date(t).toLocaleString():"-";function pt({user:t,formData:a,setFormData:n,handleSaveInfo:i,saving:c,canUpdate:l,editingSection:j,sectionData:u,setSectionData:f,startEditingSection:N,cancelEditing:x,handleSaveSection:b,orgReferences:T}){const{t:d}=G.useTranslation("admin");return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("form",{onSubmit:i,className:"space-y-6 p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(s.User,{className:"w-5 h-5"}),d("userDetail.info.profile","Profil")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("users.form.firstName")}),e.jsx("input",{type:"text",required:!0,value:a.firstName,onChange:p=>n(v=>({...v,firstName:p.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("users.form.lastName")}),e.jsx("input",{type:"text",required:!0,value:a.lastName,onChange:p=>n(v=>({...v,lastName:p.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("users.columns.email")}),e.jsx("input",{type:"email",required:!0,value:a.email,onChange:p=>n(v=>({...v,email:p.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs("button",{type:"submit",disabled:c||!l,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors disabled:opacity-50 ${l?"bg-[var(--color-accent-600)] hover:bg-[var(--color-accent-700)] text-white":"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"}`,title:l?void 0:d("common.noPermission","Permission insuffisante"),children:[c?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Save,{className:"w-4 h-4"}),d("common.save")]})})]}),e.jsx(Le,{title:d("userDetail.info.organization","Organisation"),icon:e.jsx(s.Building2,{className:"w-5 h-5"}),sectionKey:"organization",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("organization"),onCancel:x,onSave:()=>b("organization"),children:j==="organization"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(Pe,{label:d("userDetail.info.company","Société"),options:T?.companies.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.company,onChange:p=>f(v=>({...v,organization:{...v.organization,company:p}}))}),e.jsx(Pe,{label:d("userDetail.info.department","Département"),options:T?.departments.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.department,onChange:p=>f(v=>({...v,organization:{...v.organization,department:p}}))}),e.jsx(Pe,{label:d("userDetail.info.jobTitle","Fonction"),options:T?.jobTitles.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.jobTitle,onChange:p=>f(v=>({...v,organization:{...v.organization,jobTitle:p}}))}),e.jsx(Pe,{label:d("userDetail.info.office","Bureau"),options:T?.offices.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.office,onChange:p=>f(v=>({...v,organization:{...v.organization,office:p}}))}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.manager","Manager")}),e.jsxs("select",{value:u.organization.managerId,onChange:p=>f(v=>({...v,organization:{...v.organization,managerId:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"",children:d("common.none","-- Aucun --")}),T?.managers.map(p=>e.jsx("option",{value:p.id,children:p.name},p.id))]})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.company","Société"),value:t.companyName}),e.jsx(Y,{label:d("userDetail.info.department","Département"),value:t.departmentName}),e.jsx(Y,{label:d("userDetail.info.jobTitle","Fonction"),value:t.jobTitleName}),e.jsx(Y,{label:d("userDetail.info.office","Bureau"),value:t.officeName}),e.jsx(Y,{label:d("userDetail.info.manager","Manager"),value:t.managerName})]})}),e.jsx(Le,{title:d("userDetail.info.jobInfo","Informations emploi"),icon:e.jsx(s.Briefcase,{className:"w-5 h-5"}),sectionKey:"jobInfo",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("jobInfo"),onCancel:x,onSave:()=>b("jobInfo"),children:j==="jobInfo"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.employeeId","ID Employé")}),e.jsx("input",{type:"text",value:u.jobInfo.employeeId,onChange:p=>f(v=>({...v,jobInfo:{...v.jobInfo,employeeId:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.employeeType","Type employé")}),e.jsx("input",{type:"text",value:u.jobInfo.employeeType,onChange:p=>f(v=>({...v,jobInfo:{...v.jobInfo,employeeType:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.employeeHireDate","Date d'embauche")}),e.jsx("input",{type:"date",value:u.jobInfo.employeeHireDate,onChange:p=>f(v=>({...v,jobInfo:{...v.jobInfo,employeeHireDate:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.employeeId","ID Employé"),value:t.employeeId}),e.jsx(Y,{label:d("userDetail.info.employeeType","Type employé"),value:t.employeeType}),e.jsx(Y,{label:d("userDetail.info.employeeHireDate","Date d'embauche"),value:t.employeeHireDate?new Date(t.employeeHireDate).toLocaleDateString():null}),e.jsx(Y,{label:d("userDetail.info.sponsors","Sponsors"),value:t.sponsors})]})}),e.jsx(Le,{title:d("userDetail.info.phones","Téléphones"),icon:e.jsx(s.Phone,{className:"w-5 h-5"}),sectionKey:"phones",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("phones"),onCancel:x,onSave:()=>b("phones"),children:j==="phones"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.phone","Téléphone")}),e.jsx("input",{type:"tel",value:u.phones.phoneNumber,onChange:p=>f(v=>({...v,phones:{...v.phones,phoneNumber:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.mobile","Mobile")}),e.jsx("input",{type:"tel",value:u.phones.mobilePhone,onChange:p=>f(v=>({...v,phones:{...v.phones,mobilePhone:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.fax","Fax")}),e.jsx("input",{type:"tel",value:u.phones.faxNumber,onChange:p=>f(v=>({...v,phones:{...v.phones,faxNumber:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.phone","Téléphone"),value:Ge.formatPhoneNumber(t.phoneNumber,"CH","international")}),e.jsx(Y,{label:d("userDetail.info.mobile","Mobile"),value:Ge.formatPhoneNumber(t.mobilePhone,"CH","international")}),e.jsx(Y,{label:d("userDetail.info.fax","Fax"),value:Ge.formatPhoneNumber(t.faxNumber,"CH","international")})]})}),e.jsx(Le,{title:d("userDetail.info.address","Adresse"),icon:e.jsx(s.MapPin,{className:"w-5 h-5"}),sectionKey:"address",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("address"),onCancel:x,onSave:()=>b("address"),children:j==="address"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.streetAddress","Adresse")}),e.jsx("input",{type:"text",value:u.address.streetAddress,onChange:p=>f(v=>({...v,address:{...v.address,streetAddress:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.city","Ville")}),e.jsx("input",{type:"text",value:u.address.city,onChange:p=>f(v=>({...v,address:{...v.address,city:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.state","Région")}),e.jsx("input",{type:"text",value:u.address.state,onChange:p=>f(v=>({...v,address:{...v.address,state:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.postalCode","Code postal")}),e.jsx("input",{type:"text",value:u.address.postalCode,onChange:p=>f(v=>({...v,address:{...v.address,postalCode:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.country","Pays")}),e.jsx("input",{type:"text",value:u.address.country,onChange:p=>f(v=>({...v,address:{...v.address,country:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.streetAddress","Adresse"),value:t.streetAddress,className:"sm:col-span-2 lg:col-span-3"}),e.jsx(Y,{label:d("userDetail.info.city","Ville"),value:t.city}),e.jsx(Y,{label:d("userDetail.info.state","Région"),value:t.state}),e.jsx(Y,{label:d("userDetail.info.postalCode","Code postal"),value:t.postalCode}),e.jsx(Y,{label:d("userDetail.info.country","Pays"),value:t.country})]})}),(t.otherEmails||t.mailNickname||t.imAddresses)&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 mb-4",children:[e.jsx(s.AtSign,{className:"w-5 h-5"}),d("userDetail.info.otherContact","Autres coordonnées")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[t.mailNickname&&e.jsx(Y,{label:d("userDetail.info.mailNickname","Alias mail"),value:t.mailNickname}),t.otherEmails&&e.jsx(Y,{label:d("userDetail.info.otherEmails","Autres emails"),value:t.otherEmails,breakAll:!0}),t.imAddresses&&e.jsx(Y,{label:d("userDetail.info.imAddresses","Messagerie instantanée"),value:t.imAddresses,breakAll:!0})]})]}),t.entraObjectId&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800",children:[e.jsxs("h3",{className:"text-lg font-semibold text-blue-800 dark:text-blue-300 flex items-center gap-2 mb-4",children:[e.jsx(s.Cloud,{className:"w-5 h-5"}),d("userDetail.info.entraSync","Synchronisation Microsoft Entra ID")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"p-3 rounded-lg bg-white/50 dark:bg-black/20",children:[e.jsx("p",{className:"text-xs text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-1",children:d("userDetail.info.entraObjectId","Object ID")}),e.jsx("p",{className:"text-sm text-blue-900 dark:text-blue-200 font-mono break-all",children:t.entraObjectId})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-white/50 dark:bg-black/20",children:[e.jsx("p",{className:"text-xs text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-1",children:d("userDetail.info.authProvider","Fournisseur")}),e.jsx("p",{className:"text-sm text-blue-900 dark:text-blue-200 font-medium capitalize",children:t.authProvider||"microsoft"})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-white/50 dark:bg-black/20",children:[e.jsx("p",{className:"text-xs text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-1",children:d("userDetail.info.lastEntraSync","Dernière sync")}),e.jsx("p",{className:"text-sm text-blue-900 dark:text-blue-200 font-medium",children:Me(t.lastEntraSyncAt)})]})]})]}),e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 mb-4",children:[e.jsx(s.Shield,{className:"w-5 h-5"}),d("userDetail.info.accountStatus","Statut du compte")]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx(He,{active:t.isActive,activeLabel:d("users.status.active"),inactiveLabel:d("users.status.inactive"),type:"active"}),e.jsx(He,{active:t.emailConfirmed,activeLabel:d("userDetail.info.emailConfirmed","Email confirmé"),inactiveLabel:d("userDetail.info.emailNotConfirmed","Email non confirmé"),type:"email"}),e.jsx(He,{active:t.hasCompletedOnboarding,activeLabel:d("userDetail.info.onboardingComplete","Onboarding terminé"),inactiveLabel:d("userDetail.info.onboardingPending","Onboarding en attente"),type:"onboarding"}),t.mustChangePassword&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-sm font-medium bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400",children:[e.jsx(s.Key,{className:"w-4 h-4"}),d("userDetail.info.mustChangePassword","Changement de mot de passe requis")]}),t.entraObjectId&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-sm font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400",children:[e.jsx(s.Cloud,{className:"w-4 h-4"}),d("userDetail.info.syncedWithAad","Synchronisé AAD")]})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 pt-4 border-t border-[var(--border-color)]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.createdAt")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:Me(t.createdAt)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.updatedAt","Modifié le")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:Me(t.updatedAt)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.lastLogin")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:Me(t.lastLoginAt)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.info.userType","Type")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:t.userType})]})]})]})]})}function Y({label:t,value:a,className:n,breakAll:i}){return e.jsxs("div",{className:`p-3 rounded-lg bg-[var(--bg-secondary)] ${n||""}`,children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:t}),e.jsx("p",{className:`text-sm text-[var(--text-primary)] font-medium ${i?"break-all":""}`,children:a||"-"})]})}function Le({title:t,icon:a,sectionKey:n,editingSection:i,saving:c,canUpdate:l,onStartEdit:j,onCancel:u,onSave:f,children:N}){const{t:x}=G.useTranslation("admin"),b=i===n;return e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[a,t]}),b?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:u,className:"px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:x("common.cancel","Annuler")}),e.jsxs("button",{onClick:f,disabled:c||!l,className:`flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] transition-colors disabled:opacity-50 ${l?"bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]":"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"}`,title:l?void 0:x("common.noPermission","Permission insuffisante"),children:[c?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Save,{className:"w-4 h-4"}),x("common.save","Enregistrer")]})]}):e.jsxs("button",{onClick:j,disabled:!l,className:`flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] transition-colors ${l?"bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]":"opacity-50 cursor-not-allowed bg-[var(--bg-secondary)] text-[var(--text-tertiary)]"}`,title:l?void 0:x("common.noPermission","Permission insuffisante"),children:[e.jsx(s.Edit3,{className:"w-4 h-4"}),x("common.edit","Modifier")]})]}),N]})}function He({active:t,activeLabel:a,inactiveLabel:n,type:i}){const c=()=>i==="email"?e.jsx(s.Mail,{className:"w-4 h-4"}):i==="onboarding"?e.jsx(s.User,{className:"w-4 h-4"}):t?e.jsx(s.CheckCircle,{className:"w-4 h-4"}):e.jsx(s.XCircle,{className:"w-4 h-4"}),l=()=>t?"bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400":i==="active"?"bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-400":"bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400";return e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-sm font-medium ${l()}`,children:[c(),t?a:n]})}function ht({isOpen:t,onClose:a,onConfirm:n,userName:i}){const{t:c}=G.useTranslation(["admin","common"]),[l,j]=o.useState(""),[u,f]=o.useState(!1),N=()=>{l!==""&&(n(l,u),a(),j(""),f(!1))},x=()=>{a(),j(""),f(!1)};return t?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",children:e.jsxs("div",{className:"relative w-full max-w-md bg-[var(--bg-card)] rounded-2xl shadow-2xl border border-[var(--border-color)] overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-[var(--border-color)]",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:c("userDetail.security.unlockAccount")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mt-1",children:i})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{onClick:()=>{const b={component:"UnlockAccountModal",url:window.location.href},T=`https://github.com/anthropics/claude-code/issues/new?title=${encodeURIComponent("[Bug] Unlock Account Modal")}&body=${encodeURIComponent(`## Context
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),ue=require("react-router-dom"),G=require("react-i18next"),s=require("lucide-react"),D=require("./index-IgLVXPg8.js"),Xe=require("./TenantScopeSelector-D-BKgQPV.js"),$e=require("./roleUtils-tv67Lrey.js"),ge=require("./PermissionPopover-CtYTz7MK.js"),Oe=require("./groupsApi-hB9kSWEd.js"),Ge=require("./formatPhone-D4luHK-2.js"),Be=require("./TenantCard-CEkiKxcZ.js");function at(t){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(a,n,i.get?i:{enumerable:!0,get:()=>t[n]})}}return a.default=t,Object.freeze(a)}const nt=at(s),Qe={Global:{bg:"bg-[var(--accent-bg)]",text:"text-[var(--color-accent-500)]"},Admin:{bg:"bg-[var(--error-bg)]",text:"text-[var(--error-text)]"},Manager:{bg:"bg-[var(--warning-bg)]",text:"text-[var(--warning-text)]"},Contributor:{bg:"bg-[var(--success-bg)]",text:"text-[var(--success-text)]"},Viewer:{bg:"bg-[var(--info-bg)]",text:"text-[var(--info-text)]"},Custom:{bg:"bg-[var(--accent-bg)]",text:"text-[var(--color-accent-700)]"}},Ye={bg:"bg-[var(--bg-secondary)]",text:"text-[var(--text-secondary)]"},_e={Direct:{bg:"bg-[var(--success-bg)]",text:"text-[var(--success-text)]",icon:s.Globe},Group:{bg:"bg-[var(--accent-bg)]",text:"text-[var(--color-accent-700)]",icon:s.Users},Custom:{bg:"bg-[var(--warning-bg)]",text:"text-[var(--warning-text)]",icon:s.Lock}};function it({userId:t,assignedRoles:a=[],onSave:n,onGlobalRolesUpdate:i,roles:c,loading:l=!1,globalRoleIds:j,tenantId:u,isGlobalScope:f=!0,adminTenants:N=[],tenantMemberships:x=[]}){const{t:b}=G.useTranslation(["admin","groups"]),T=Array.isArray(c)?c:[],[d,p]=o.useState(""),[v,C]=o.useState("all"),[w,F]=o.useState(null),[V,R]=o.useState(!1),[A,B]=o.useState(null),z=o.useRef(!1),L=o.useMemo(()=>x.map(S=>({id:S.tenantId,name:S.tenantName})).sort((S,I)=>S.name.localeCompare(I.name)),[x]),q=o.useMemo(()=>{let S=a;if(v==="global"?S=S.filter(P=>!P.tenantId):v!=="all"&&(S=S.filter(P=>!P.tenantId||P.tenantId===v)),!d.trim())return S;const I=d.toLowerCase().trim();return S.filter(P=>P.roleName.toLowerCase().includes(I)||P.tenantName?.toLowerCase().includes(I)||P.sourceGroupName?.toLowerCase().includes(I))},[a,d,v]),_=o.useMemo(()=>{const S=new Map;for(const I of T)S.set(I.id,I);return S},[T]),E=o.useCallback(async(S,I)=>{if(!z.current){z.current=!0,F(S+(I||"global")),B(null);try{if(I){const P=x.find(K=>K.tenantId===I);P&&await D.adminApi.tenants.removeRole(I,P.tenantUserId,S)}else{const P=j.filter(K=>K!==S);await i(P)}await n()}catch(P){console.error("Failed to remove role assignment:",P),B(b("admin:userRoles.errors.removeFailed","Erreur lors du retrait du rôle"))}finally{F(null),z.current=!1}}},[j,x,i,n,b]),M=o.useCallback(()=>R(!0),[]),H=o.useCallback(()=>R(!1),[]),Z=o.useCallback(async()=>{await n()},[n]);return e.jsxs("div",{className:"space-y-4",children:[A&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] flex items-center gap-3",children:[e.jsx(s.AlertCircle,{className:"w-5 h-5 text-[var(--error-text)] flex-shrink-0"}),e.jsx("p",{className:"flex-1 text-[var(--error-text)]",children:A}),e.jsx("button",{onClick:()=>B(null),className:"ml-auto",children:e.jsx(s.X,{className:"w-4 h-4 text-[var(--error-text)]"})})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3 flex-1",children:[e.jsxs("div",{className:"relative flex-1 max-w-md",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",value:d,onChange:S=>p(S.target.value),placeholder:b("admin:userRoles.search","Rechercher un rôle..."),className:"w-full pl-10 pr-4 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:v,onChange:S=>C(S.target.value),className:"px-3 py-2 pr-8 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] appearance-none focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.scopeAll","Tous les tenants")}),e.jsx("option",{value:"global",children:b("admin:roles.global","Global")}),L.map(S=>e.jsx("option",{value:S.id,children:S.name},S.id))]}),e.jsx(s.ChevronDown,{className:"absolute right-2.5 top-1/2 -translate-y-1/2 w-4 h-4 pointer-events-none text-[var(--text-tertiary)]"})]})]}),e.jsxs("button",{onClick:M,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors text-sm font-medium",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),b("admin:userRoles.assignRole","Assigner un rôle")]})]}),l?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})}):e.jsxs("div",{className:"overflow-x-auto",children:[e.jsxs("table",{className:"w-full border border-[var(--border-color)] rounded-[var(--radius-card)] overflow-hidden",children:[e.jsx("thead",{className:"bg-[var(--bg-tertiary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.name","Rôle")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.category","Catégorie")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.tenant","Tenant")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:userRoles.source","Source")}),e.jsx("th",{className:"text-left px-4 py-3 text-sm font-medium text-[var(--text-secondary)] w-24",children:b("admin:roles.actions","Actions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:q.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:5,className:"px-4 py-8 text-center text-[var(--text-muted)]",children:a.length===0?b("admin:userRoles.noAssignedRoles","Aucun rôle assigné à cet utilisateur"):b("admin:userRoles.noRoles","Aucun rôle trouvé")})}):q.map(S=>{const I=_.get(S.roleId),P=I?.category||"Custom",K=Qe[P]||Ye,Q=I?$e.getCustomRoleIcon(I.code):null,ee=!S.tenantId,ne=S.source==="Group",te=_e[S.source]||_e.Direct,re=te.icon,r=S.roleId+(S.tenantId||"global"),h=w===r;return e.jsxs("tr",{className:"hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsxs("td",{className:"px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[Q&&e.jsx("span",{children:Q}),e.jsx(ue.Link,{to:`/administration/permissions/roles/${S.roleId}`,className:"font-medium text-[var(--text-primary)] hover:text-[var(--color-accent-600)] hover:underline transition-colors",children:S.roleName})]}),S.roleShortName&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mt-0.5",children:S.roleShortName})]}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("span",{className:`px-2 py-1 text-xs rounded-full ${K.bg} ${K.text}`,children:P})}),e.jsx("td",{className:"px-4 py-3",children:ee?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full bg-[var(--info-bg)] text-[var(--info-text)]",children:[e.jsx(s.Globe,{className:"w-3 h-3"}),b("admin:roles.global","Global")]}):e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full bg-[var(--accent-bg)] text-[var(--color-accent-700)]",children:[e.jsx(s.Building2,{className:"w-3 h-3"}),S.tenantName||b("admin:roles.unknownTenant","Tenant")]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full ${te.bg} ${te.text}`,children:[e.jsx(re,{className:"w-3 h-3"}),S.source==="Direct"?b("admin:userRoles.sourceDirect","Direct"):S.source==="Group"?S.sourceGroupName||b("admin:userRoles.sourceGroup","Groupe"):b("admin:userRoles.sourceCustom","Personnel")]})}),e.jsx("td",{className:"px-4 py-3",children:ne?e.jsx("span",{title:b("admin:userRoles.groupRoleLocked","Rôle hérité du groupe, non supprimable"),children:e.jsx(s.Lock,{className:"w-4 h-4 text-[var(--text-muted)]"})}):e.jsx("button",{onClick:()=>E(S.roleId,S.tenantId),disabled:h,className:"p-1.5 rounded-[var(--radius-button)] text-[var(--error-text)] hover:bg-[var(--error-bg)] transition-colors disabled:opacity-50",title:b("admin:userRoles.removeRole","Retirer le rôle"),children:h?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Trash2,{className:"w-4 h-4"})})})]},`${S.roleId}-${S.tenantId||"global"}-${S.source}`)})})]}),a.length>0&&e.jsx("div",{className:"px-4 py-2 text-xs text-[var(--text-muted)] bg-[var(--bg-tertiary)] border-t border-[var(--border-color)]",children:q.length!==a.length?b("admin:userRoles.totalFiltered","{{filtered}} / {{count}} rôle(s) affiché(s)",{filtered:q.length,count:a.length}):b("admin:userRoles.totalAssigned","{{count}} rôle(s) assigné(s)",{count:a.length})})]}),V&&e.jsx(lt,{userId:t,roles:T,assignedRoles:a,globalRoleIds:j,onGlobalRolesUpdate:i,initialTenantId:u,initialIsGlobalScope:f,adminTenants:N,tenantMemberships:x,onAssigned:Z,onClose:H})]})}function lt({userId:t,roles:a,assignedRoles:n,globalRoleIds:i,onGlobalRolesUpdate:c,initialTenantId:l,initialIsGlobalScope:j,adminTenants:u,tenantMemberships:f,onAssigned:N,onClose:x}){const{t:b}=G.useTranslation(["admin","groups"]),[T,d]=o.useState(""),[p,v]=o.useState("all"),[C,w]=o.useState("all"),[F,V]=o.useState("all"),[R,A]=o.useState(null),[B,z]=o.useState(null),L=o.useRef(!1),q=o.useMemo(()=>{const r=new Set(f.map(h=>h.tenantId));return u.filter(h=>r.has(h.tenantId))},[u,f]),[_,E]=o.useState(()=>{if(j||!l)return"global";const r=u.find(h=>h.tenantId===l);return r?{tenantId:r.tenantId,tenantSlug:r.tenantSlug,tenantUserId:"",tenantName:r.tenantName}:"global"}),M=_==="global",H=M?void 0:_.tenantId,Z=o.useMemo(()=>{const r=new Set;for(const h of n)h.source==="Direct"&&(M&&!h.tenantId||!M&&h.tenantId===H)&&r.add(h.roleId);return r},[n,M,H]),[S,I]=o.useState(null);o.useEffect(()=>{if(M||!H){I(null);return}let r=!1;return D.adminApi.tenants.getApplications(H).then(h=>{r||I(new Set(h.map(g=>g.applicationId)))}).catch(()=>{r||I(null)}),()=>{r=!0}},[M,H]);const P=o.useMemo(()=>M||!S?a:a.filter(r=>!r.applicationId||S.has(r.applicationId)),[a,M,S]),K=o.useMemo(()=>{const r=new Map;for(const h of P)h.contextId&&h.contextName&&!r.has(h.contextId)&&r.set(h.contextId,h.contextName);return Array.from(r.entries()).map(([h,g])=>({id:h,name:g}))},[P]),Q=o.useMemo(()=>{const r=new Map;for(const h of P)!h.applicationId||!h.applicationName||C!=="all"&&h.contextId!==C||r.has(h.applicationId)||r.set(h.applicationId,h.applicationName);return Array.from(r.entries()).map(([h,g])=>({id:h,name:g})).sort((h,g)=>h.name.localeCompare(g.name))},[P,C]),ee=o.useCallback(r=>{w(r),V("all")},[]),ne=o.useMemo(()=>{const r=new Set(P.map(h=>h.category||"Custom"));return["all",...Array.from(r).sort((h,g)=>h.localeCompare(g))]},[P]),te=o.useMemo(()=>{let r=P;if(C!=="all"&&(r=r.filter(h=>h.contextId===C)),F!=="all"&&(r=r.filter(h=>h.applicationId===F)),p!=="all"&&(r=r.filter(h=>(h.category||"Custom")===p)),T.trim()){const h=T.toLowerCase().trim();r=r.filter(g=>g.name.toLowerCase().includes(h)||g.shortName?.toLowerCase().includes(h)||g.description?.toLowerCase().includes(h))}return r},[P,C,F,p,T]),re=o.useCallback(async r=>{if(!L.current){L.current=!0,A(r),z(null);try{if(M){const h=[...i,r];await c(h)}else if(H){const h=f.find(g=>g.tenantId===H);if(h)await D.adminApi.tenants.assignRole(H,h.tenantUserId,r);else throw new Error(b("admin:userRoles.errors.notMember","L'utilisateur n'est pas membre de ce tenant"))}await N()}catch(h){console.error("Failed to assign role:",h),z(b("admin:userRoles.errors.assignFailed","Erreur lors de l'assignation du rôle"))}finally{A(null),L.current=!1}}},[M,H,i,c,f,N,b]);return e.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",children:e.jsxs("div",{className:"relative w-full max-w-2xl h-[80vh] bg-[var(--bg-card)] rounded-[var(--radius-card)] shadow-2xl border border-[var(--border-color)] overflow-hidden flex flex-col animate-in fade-in zoom-in duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-b border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{children:e.jsx("h2",{className:"text-lg font-semibold text-[var(--text-primary)]",children:b("admin:userRoles.assignRole","Assigner un rôle")})}),e.jsx(Xe.TenantScopeSelector,{value:_,onChange:E,adminTenants:q})]}),e.jsx("button",{onClick:x,className:"p-1.5 rounded-[var(--radius-button)] text-[var(--text-tertiary)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(s.X,{className:"w-5 h-5"})})]}),B&&e.jsxs("div",{className:"mx-6 mt-3 p-3 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] flex items-center gap-3",children:[e.jsx(s.AlertCircle,{className:"w-4 h-4 text-[var(--error-text)] flex-shrink-0"}),e.jsx("p",{className:"flex-1 text-sm text-[var(--error-text)]",children:B}),e.jsx("button",{onClick:()=>z(null),children:e.jsx(s.X,{className:"w-3.5 h-3.5 text-[var(--error-text)]"})})]}),e.jsxs("div",{className:"px-6 py-3 border-b border-[var(--border-color)] flex flex-col gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-muted)]"}),e.jsx("input",{type:"text",value:T,onChange:r=>d(r.target.value),placeholder:b("admin:userRoles.search","Rechercher un rôle..."),className:"w-full pl-10 pr-4 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] placeholder-[var(--text-muted)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",autoFocus:!0})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(s.Filter,{className:"w-4 h-4 text-[var(--text-secondary)] shrink-0"}),e.jsxs("select",{value:C,onChange:r=>ee(r.target.value),className:"flex-1 min-w-0 px-3 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.filterByContext","Tous les contextes")}),K.map(r=>e.jsx("option",{value:r.id,children:r.name},r.id))]}),e.jsxs("select",{value:F,onChange:r=>V(r.target.value),disabled:C==="all"||Q.length===0,className:"flex-1 min-w-0 px-3 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)] disabled:opacity-50",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.filterByApplication","Toutes les applications")}),Q.map(r=>e.jsx("option",{value:r.id,children:r.name},r.id))]}),e.jsxs("select",{value:p,onChange:r=>v(r.target.value),className:"flex-1 min-w-0 px-3 py-2 text-sm bg-[var(--bg-secondary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:b("admin:userRoles.filterByCategory","Toutes les catégories")}),ne.filter(r=>r!=="all").map(r=>e.jsx("option",{value:r,children:r},r))]})]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-tertiary)] sticky top-0 z-10",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left px-6 py-2.5 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.name","Rôle")}),e.jsx("th",{className:"text-left px-4 py-2.5 text-sm font-medium text-[var(--text-secondary)]",children:b("admin:roles.category","Catégorie")}),e.jsx("th",{className:"text-right px-6 py-2.5 text-sm font-medium text-[var(--text-secondary)] w-32",children:b("admin:roles.actions","Actions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:te.length===0?e.jsx("tr",{children:e.jsxs("td",{colSpan:3,className:"px-6 py-12 text-center",children:[e.jsx(s.Search,{className:"w-8 h-8 mx-auto mb-2 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-[var(--text-muted)]",children:b("admin:userRoles.noRoles","Aucun rôle trouvé")})]})}):te.map(r=>{const h=Z.has(r.id),g=Qe[r.category||"Custom"]||Ye,X=$e.getCustomRoleIcon(r.code),le=R===r.id;return e.jsxs("tr",{className:`transition-colors ${h?"bg-[var(--accent-bg)] opacity-60":"hover:bg-[var(--bg-hover)]"}`,children:[e.jsx("td",{className:"px-6 py-3",children:e.jsxs("div",{className:"flex items-center gap-2",children:[X&&e.jsx("span",{children:X}),e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:r.name}),r.description&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] mt-0.5 max-w-sm truncate",children:r.description})]})]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("span",{className:`px-2 py-1 text-xs rounded-full ${g.bg} ${g.text}`,children:r.category||"Custom"})}),e.jsx("td",{className:"px-6 py-3 text-right",children:h?e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:b("admin:userRoles.alreadyAssigned","Déjà assigné")}):e.jsxs("button",{onClick:()=>re(r.id),disabled:le,className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white text-xs font-medium hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50",children:[le?e.jsx(s.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):e.jsx(s.Plus,{className:"w-3.5 h-3.5"}),b("admin:userRoles.assign","Assigner")]})})]},r.id)})})]})}),e.jsx("div",{className:"px-6 py-3 border-t border-[var(--border-color)] bg-[var(--bg-tertiary)] flex justify-end",children:e.jsx("button",{onClick:x,className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors text-sm font-medium",children:b("common:close","Fermer")})})]})})}function ot(t,a,n){const i=new Set;return t.forEach(c=>{const l=a.get(c.id);l&&i.add(l.tenantName||n)}),Array.from(i)}function ct(t,a){const n=[];return t.forEach(i=>{const c=a.get(i.id);c&&(n.find(j=>j.type===c.source&&(j.type==="Direct"||j.type==="Custom"||j.groupName===c.sourceGroupName))||n.push({type:c.source,groupName:c.sourceGroupName||void 0}))}),n}const dt={"*":e.jsx(s.Shield,{className:"h-3.5 w-3.5"}),read:e.jsx(s.Eye,{className:"h-3.5 w-3.5"}),create:e.jsx(s.Plus,{className:"h-3.5 w-3.5"}),update:e.jsx(s.Edit,{className:"h-3.5 w-3.5"}),delete:e.jsx(s.Trash2,{className:"h-3.5 w-3.5"}),assign:e.jsx(s.UserPlus,{className:"h-3.5 w-3.5"}),execute:e.jsx(s.Play,{className:"h-3.5 w-3.5"})},ut={"*":"bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]",read:"bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]",create:"bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]",update:"bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]",delete:"bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]",assign:"bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]",execute:"bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]"};function mt({userId:t,compact:a=!1,tenantId:n}){const{t:i}=G.useTranslation("admin"),c=ue.useNavigate(),{loading:l,error:j,user:u,userRoles:f,filteredResources:N,effectivePermissions:x,filters:b,applications:T,modules:d,updateFilters:p,getPermissionSources:v,reloadData:C,isTenantMode:w,tenantMember:F,assignTenantRoles:V,consolidatedRoles:R}=D.useUserPermissions({userId:t,tenantId:n}),A=o.useMemo(()=>{const m=new Map;return R.forEach(y=>m.set(y.roleId,y)),m},[R]),{collapsedApps:B,toggleApp:z}=D.useCollapsibleState(),[L,q]=o.useState(new Set),[_,E]=o.useState(new Set),[M,H]=o.useState(new Set),[Z,S]=o.useState(null),[I,P]=o.useState(null),[K,Q]=o.useState(new Set),[ee,ne]=o.useState(null),[te,re]=o.useState(!1);o.useEffect(()=>{(async()=>{try{if(re(!0),w&&n&&F){const y=await D.adminApi.tenants.getMemberCustomRole(n,F.userId);y?(P(y.id),Q(new Set((y.permissions??[]).map(k=>k.id)))):(P(null),Q(new Set))}else{const y=await D.adminApi.users.getCustomRole(t);y?(P(y.id),Q(new Set((y.permissions??[]).map(k=>k.id)))):(P(null),Q(new Set))}}catch(y){y instanceof Error&&y.message.includes("404")||console.error("Failed to load custom role:",y),P(null),Q(new Set)}finally{re(!1)}})()},[t,n,w,F]);const r=async m=>{try{ne(m);let y=I,k=new Set(K);if(w&&n&&F){y||(y=(await D.adminApi.tenants.createMemberCustomRole(n,F.userId)).id,P(y),k=new Set);const U=new Set(k);U.has(m)?U.delete(m):U.add(m);const W=await D.adminApi.roles.getById(y);await D.adminApi.roles.update(y,{name:W.name,shortName:W.shortName||void 0,category:W.category||void 0,description:W.description||void 0,permissionIds:Array.from(U)}),Q(U)}else{y||(y=(await D.adminApi.users.createCustomRole(t)).id,P(y),k=new Set);const U=new Set(k);U.has(m)?U.delete(m):U.add(m);const W=await D.adminApi.roles.getById(y);await D.adminApi.roles.update(y,{name:W.name,shortName:W.shortName||void 0,category:W.category||void 0,description:W.description||void 0,permissionIds:Array.from(U)}),Q(U)}await C()}catch(y){console.error("Failed to toggle permission:",y)}finally{ne(null)}},h=m=>{S(Z===m?null:m)},g=m=>{H(y=>{const k=new Set(y);return k.has(m)?k.delete(m):k.add(m),k})},X=m=>{q(y=>{const k=new Set(y);return k.has(m)?k.delete(m):k.add(m),k})},le=m=>{E(y=>{const k=new Set(y);return k.has(m)?k.delete(m):k.add(m),k})},oe=o.useCallback(m=>{const y=[...m.permissions];return m.childSections&&m.childSections.forEach(k=>{y.push(...k.permissions)}),y},[]),he=o.useCallback((m,y=!1)=>{if(y)return ge.calculatePermissionStatus(m,se=>x.has(se));const k=oe(m),U=k.filter(se=>x.has(se.id)).length,W=k.length;let J;return U===0?J="none":U===W?J="all":J=k.every(ie=>!x.has(ie.id)||ie.action==="read")&&k.some(ie=>ie.action==="read"&&x.has(ie.id))?"read-only":"some",{status:J,grantedCount:U}},[x,oe]),me=m=>m.filter(y=>{const{status:k}=ge.calculateModuleWithSectionsStatus(y.module,y.sections,U=>x.has(U));return M.has(k)}),fe=m=>m.map(y=>({...y,modules:me(y.modules)})).filter(y=>y.modules.length>0),Se=m=>M.size===0?m:fe(m),xe=o.useMemo(()=>{let m=ge.groupByApplicationWithSections(N);return Se(m)},[N,M,x]),pe=o.useMemo(()=>xe.reduce((m,y)=>m+y.modules.length,0),[xe]),ye=(m,y)=>{v(m).forEach(U=>{y.find(W=>W.id===U.id)||y.push(U)})},je=m=>{const y=[];return m.permissions.forEach(k=>{x.has(k.id)&&ye(k.id,y)}),y},be=m=>m.startsWith("user_")&&m.endsWith("_custom"),Ae=m=>be(m.name)?i("userPermissions.customBadge","Custom"):m.shortName||m.name,Ne=o.useMemo(()=>u?{id:I||`user_${t}_custom`,name:u.fullName,shortName:u.fullName,category:"Custom",description:null,isSystem:!1,permissions:[],permissionIds:[]}:null,[u,I,t]),we=o.useCallback((m,y)=>{const k=x.has(y),U=K.has(y),W=k?v(y):[],J=W.find(se=>!be(se.name));return{isDirect:U,isInherited:k&&!U&&W.length>0,inheritedFromPath:J?J.name:void 0,inheritedFromId:J?.id}},[x,K,v]);if(l)return e.jsxs("div",{className:"flex items-center justify-center py-12",children:[e.jsx(s.Loader2,{className:"h-8 w-8 animate-spin text-[var(--color-accent-500)]"}),e.jsx("span",{className:"ml-3 text-[var(--text-secondary)]",children:i("userPermissions.loading")})]});if(j)return e.jsx("div",{className:"rounded-[var(--radius-card)] bg-[var(--error-bg)] p-4 border border-[var(--error-border)]",children:e.jsxs("div",{className:"flex items-center",children:[e.jsx(s.AlertCircle,{className:"h-5 w-5 text-[var(--error-text)]"}),e.jsx("p",{className:"ml-2 text-sm text-[var(--error-text)]",children:j})]})});if(!u)return e.jsxs("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:[e.jsx(s.Shield,{className:"h-12 w-12 mx-auto mb-4 text-[var(--text-muted)]"}),e.jsx("p",{children:i("userPermissions.noUser")})]});const ze=m=>m==="resource"?e.jsx(s.Database,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}):m==="section"?e.jsx(s.FileText,{className:"h-3.5 w-3.5 text-[var(--text-muted)]"}):e.jsx(s.Box,{className:"h-3.5 w-3.5 text-[var(--text-secondary)]"}),De=m=>m==="resource"?"text-[var(--text-muted)] italic":m==="section"?"text-[var(--text-secondary)]":"font-medium text-[var(--text-primary)]",ke=m=>m==="resource"?"pl-28":m==="section"?"pl-22":"pl-16",Te=m=>m==="Direct"?"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)]":m==="Custom"?"bg-[var(--color-accent-100)] text-[var(--color-accent-700)] dark:bg-[var(--color-accent-900)] dark:text-[var(--color-accent-300)] border border-[var(--color-accent-300)] dark:border-[var(--color-accent-700)]":"bg-[var(--warning-bg)] text-[var(--warning-text)] border border-[var(--warning-border)]",Ve=(m,y)=>{const k=y("userPermissions.globalScope","Global");return m===k?"bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]":"bg-[var(--bg-tertiary)] text-[var(--text-secondary)] border border-[var(--border-color)]"},$=(m,y,k)=>{const{section:U,resources:W}=m,J=W.length>0,se=_.has(U.id);return e.jsxs(o.Fragment,{children:[de(U,y+k+1,"section",J,se),J&&!se&&W.map((ie,Ce)=>de(ie,y+k+Ce+2,"resource",!1,!1))]},U.id)},ce=(m,y)=>{const{module:k,sections:U}=m,W=U.length>0,J=L.has(k.id);return e.jsxs(o.Fragment,{children:[de(k,y,"module",W,J),W&&!J&&U.map((se,ie)=>$(se,y,ie))]},k.id)},de=(m,y,k,U=!1,W=!1)=>{const J=k==="section",{status:se,grantedCount:ie}=he(m,J),Ce=J?m.permissions.length:oe(m).length,Ze=ge.getPermissionCellBackground(se),ve=je(m),We=Z===m.id,et=o.createRef(),tt=ke(k);return e.jsxs("tr",{className:`hover:bg-[var(--bg-hover)] ${y%2===0?"item-light":"item-medium"}`,children:[e.jsx("td",{className:`sticky left-0 z-10 ${y%2===0?"item-light":"item-medium"} px-3 py-2 ${tt}`,style:{width:"280px",minWidth:"280px",maxWidth:"280px"},children:e.jsxs("div",{className:"flex items-center gap-2",children:[U&&e.jsx("button",{onClick:()=>k==="module"?X(m.id):le(m.id),className:"p-0.5 hover:bg-[var(--bg-hover)] rounded",children:W?e.jsx(s.ChevronRight,{className:"h-3 w-3 text-[var(--text-muted)]"}):e.jsx(s.ChevronDown,{className:"h-3 w-3 text-[var(--text-muted)]"})}),ze(k),e.jsx("span",{className:`text-sm ${De(k)}`,children:m.label}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)]",children:["(",Ce,")"]})]})}),e.jsxs("td",{className:`px-0 py-1 text-center relative ${Ze}`,style:{width:"60px",minWidth:"60px",maxWidth:"60px"},children:[e.jsx("button",{ref:et,type:"button",onClick:()=>h(m.id),className:`w-full h-full min-h-[36px] flex items-center justify-center rounded transition-colors hover:opacity-80 ${We?"ring-2 ring-[var(--color-accent-500)]":""}`,title:`${m.label}: ${ie}/${Ce}`,children:e.jsx(ge.PermissionStatusIndicator,{status:se,grantedCount:ie,totalCount:Ce})}),We&&u&&Ne&&e.jsx(ge.PermissionPopover,{mode:"editable",role:Ne,resource:m,onClose:()=>S(null),onTogglePermission:r,getPermissionInheritance:we})]}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:ve.length>0?ve.map(O=>{const ae=be(O.name),Re=Ae(O);return e.jsxs("button",{onClick:()=>!ae&&c(`/administration/permissions/roles/${O.id}`),className:`inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded-full transition-all ${ae?"bg-[var(--color-accent-100)] text-[var(--color-accent-700)] dark:bg-[var(--color-accent-900)] dark:text-[var(--color-accent-300)] border border-[var(--color-accent-300)] dark:border-[var(--color-accent-700)] cursor-default":"bg-[var(--bg-tertiary)] text-[var(--text-secondary)] border border-[var(--border-color)] cursor-pointer hover:ring-1 hover:ring-[var(--color-accent-500)] hover:shadow-sm"}`,title:ae?i("userPermissions.customRoleTooltip","Rôle personnalisé"):i("userPermissions.clickToViewRole","Cliquer pour voir le rôle"),children:[Re,ae&&e.jsx(s.Star,{className:"h-3 w-3"})]},O.id)}):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"-"})})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:ve.length>0?ot(ve,A,i("userPermissions.globalScope","Global")).map((O,ae)=>e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 text-xs rounded-full ${Ve(O,i)}`,children:O},`tenant-${O}-${ae}`)):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"-"})})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:ve.length>0?ct(ve,A).map((O,ae)=>e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded-full ${Te(O.type)}`,title:O.type==="Group"&&O.groupName?i("userPermissions.viaGroup","Via groupe: {{group}}",{group:O.groupName}):O.type==="Custom"?i("userPermissions.customPermissions","Permissions personnalisées"):i("userPermissions.directAssignmentTooltip","Rôle assigné directement à l'utilisateur"),children:[O.type==="Direct"&&e.jsx(s.UserCheck,{className:"h-3 w-3"}),O.type==="Group"&&e.jsx(s.Users,{className:"h-3 w-3"}),O.type==="Custom"&&e.jsx(s.User,{className:"h-3 w-3"}),O.type==="Direct"?i("userPermissions.directAssignment","Direct"):O.type==="Custom"?i("userPermissions.customSource","Custom"):O.groupName||i("userPermissions.viaGroupShort","Groupe")]},`source-${O.type}-${ae}`)):e.jsx("span",{className:"text-xs text-[var(--text-muted)]",children:"-"})})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx("div",{className:"flex flex-wrap gap-1.5 items-center relative",children:m.permissions.filter(O=>x.has(O.id)).map(O=>{const ae=K.has(O.id),Re=ee===O.id,st=ut[O.action]||"bg-[var(--bg-secondary)] text-[var(--text-secondary)] border-[var(--border-color)]",rt=dt[O.action]||e.jsx(s.Eye,{className:"h-3.5 w-3.5"});return e.jsxs("button",{onClick:()=>r(O.id),disabled:Re||te||!ae,className:`inline-flex items-center gap-1.5 px-2 py-1 rounded-[var(--radius-badge)] border text-xs font-medium transition-all ${st} ${ae?"ring-2 ring-[var(--color-accent-600)] dark:ring-[var(--color-accent-400)] hover:opacity-80 cursor-pointer":"opacity-60 cursor-not-allowed"} disabled:opacity-50`,title:ae?i("userPermissions.clickToRemove","Cliquer pour retirer"):i("userPermissions.grantedByRole","Accordé par un rôle"),children:[Re?e.jsx(s.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):rt,e.jsx("span",{className:"capitalize",children:i(`assignments.actions.${O.action==="*"?"all":O.action}.label`)}),ae&&e.jsx(s.Star,{className:"h-3 w-3"})]},O.id)})})})]},m.id)};return e.jsxs("div",{className:"space-y-4",children:[!a&&e.jsx(e.Fragment,{children:e.jsxs("div",{className:"flex flex-col lg:flex-row lg:gap-6",children:[e.jsx("div",{className:"w-full lg:w-72 lg:flex-shrink-0 mb-4 lg:mb-0 lg:sticky lg:top-4 lg:self-start",children:e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-secondary)] border border-[var(--border-color)]",children:[e.jsx("h4",{className:"text-sm font-semibold text-[var(--text-primary)] mb-3",children:i("userPermissions.filters.title","Filtres")}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs text-[var(--text-secondary)]",children:i("userPermissions.filters.application")}),e.jsxs("select",{value:b.applicationFilter,onChange:m=>p({applicationFilter:m.target.value,moduleFilter:"all"}),className:"w-full px-3 py-1.5 text-sm bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:i("userPermissions.filters.allApplications")}),T.map(m=>e.jsx("option",{value:m.app,children:m.label},m.app))]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs text-[var(--text-secondary)]",children:i("userPermissions.filters.module")}),e.jsxs("select",{value:b.moduleFilter,onChange:m=>p({moduleFilter:m.target.value}),className:"w-full px-3 py-1.5 text-sm bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-input)] text-[var(--text-primary)] focus:outline-none focus:ring-1 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"all",children:i("userPermissions.filters.allModules")}),d.filter(m=>b.applicationFilter==="all"||m.app===b.applicationFilter).map(m=>e.jsx("option",{value:m.module,children:m.label},`${m.app}:${m.module}`))]})]})]}),e.jsxs("div",{className:"mt-4 pt-4 border-t border-[var(--border-color)]",children:[e.jsx("span",{className:"text-xs font-medium text-[var(--text-secondary)] block mb-2",children:i("userPermissions.filterByStatus")}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsxs("button",{onClick:()=>g("all"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("all")?"bg-[var(--success-bg)] border-[var(--success-border)] text-[var(--success-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--success-border)]"}`,children:[e.jsx(s.Check,{className:`h-3 w-3 ${M.has("all")?"":"text-[var(--success-dot)]"}`}),i("assignments.complete")]}),e.jsxs("button",{onClick:()=>g("some"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("some")?"bg-[var(--warning-bg)] border-[var(--warning-border)] text-[var(--warning-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--warning-border)]"}`,children:[e.jsx(s.Star,{className:`h-3 w-3 ${M.has("some")?"":"text-[var(--warning-dot)]"}`}),i("assignments.partial")]}),e.jsxs("button",{onClick:()=>g("read-only"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("read-only")?"bg-[var(--info-bg)] border-[var(--info-border)] text-[var(--info-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--info-border)]"}`,children:[e.jsx(s.Eye,{className:`h-3 w-3 ${M.has("read-only")?"":"text-[var(--info-dot)]"}`}),i("assignments.readOnly")]}),e.jsxs("button",{onClick:()=>g("none"),className:`inline-flex items-center gap-1 px-2 py-1 text-xs rounded-full border transition-colors ${M.has("none")?"bg-[var(--error-bg)] border-[var(--error-border)] text-[var(--error-text)]":"bg-[var(--bg-tertiary)] border-[var(--border-color)] text-[var(--text-secondary)] hover:border-[var(--error-border)]"}`,children:[e.jsx(s.Ban,{className:`h-3 w-3 ${M.has("none")?"":"text-[var(--text-muted)]"}`}),i("assignments.none")]})]}),M.size>0&&e.jsx("button",{onClick:()=>H(new Set),className:"mt-2 text-xs text-[var(--color-accent-500)] hover:text-[var(--color-accent-600)] underline",children:i("assignments.clearFilters")})]}),e.jsx("div",{className:"mt-4 pt-4 border-t border-[var(--border-color)]",children:e.jsxs("span",{className:"px-2.5 py-1 text-xs font-semibold rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",children:[pe," ",i("assignments.modules")]})})]})}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-4",children:[w&&F&&e.jsxs("div",{className:"w-fit flex items-center gap-2 p-3 rounded-[var(--radius-card)] bg-[var(--accent-bg)] border border-[var(--accent-border)]",children:[e.jsx(s.Shield,{className:"h-4 w-4 text-[var(--accent-text)]"}),e.jsx("span",{className:"text-sm text-[var(--accent-text)]",children:i("userPermissions.tenantModeInfo","Affichage des permissions dans le contexte du tenant. Les rôles ci-dessous sont spécifiques à ce tenant.")})]}),w&&!F&&e.jsxs("div",{className:"w-fit flex items-center gap-2 p-3 rounded-[var(--radius-card)] bg-[var(--warning-bg)] border border-[var(--warning-border)]",children:[e.jsx(s.AlertCircle,{className:"h-4 w-4 text-[var(--warning-text)]"}),e.jsx("span",{className:"text-sm text-[var(--warning-text)]",children:i("userPermissions.notMemberOfTenant","Cet utilisateur n'est pas membre du tenant actuel. Aucune permission tenant disponible.")})]}),f.length>0?e.jsx("div",{className:"flex flex-wrap gap-2",children:f.map(m=>{const y=be(m.name);return e.jsxs("button",{onClick:()=>!y&&c(`/administration/permissions/roles/${m.id}`),className:`inline-flex items-center gap-1.5 px-3 py-1.5 text-sm rounded-full bg-[var(--color-accent-100)] text-[var(--color-accent-700)] dark:bg-[var(--color-accent-900)] dark:text-[var(--color-accent-300)] transition-all ${y?"cursor-default":"cursor-pointer hover:ring-2 hover:ring-[var(--color-accent-500)] hover:shadow-md"}`,title:y?i("userPermissions.customRoleTooltip","Rôle personnalisé"):i("userPermissions.clickToViewRole","Cliquer pour voir le rôle"),children:[e.jsx(s.Shield,{className:"h-3.5 w-3.5"}),m.shortName||m.name]},m.id)})}):w?null:e.jsxs("div",{className:"w-fit flex items-center gap-2 p-3 rounded-[var(--radius-card)] bg-[var(--info-bg)] border border-[var(--info-border)]",children:[e.jsx(s.Info,{className:"h-4 w-4 text-[var(--info-text)]"}),e.jsx("span",{className:"text-sm text-[var(--info-text)]",children:i("userPermissions.noRolesInfo","Cet utilisateur n'a aucun rôle. Vous pouvez lui attribuer des permissions personnalisées ci-dessous.")})]}),e.jsx("div",{className:"overflow-x-auto overflow-y-visible",children:e.jsxs("table",{className:"border-collapse",style:{width:"auto"},children:[e.jsx("thead",{className:"item-medium border-b border-[var(--item-color-border)]",children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",className:"sticky left-0 z-20 item-medium px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"280px",minWidth:"280px",maxWidth:"280px",height:"48px",verticalAlign:"middle"},children:i("assignments.resource")}),e.jsx("th",{scope:"col",className:"px-2 text-center text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"60px",minWidth:"60px",maxWidth:"60px",height:"48px",verticalAlign:"middle"},children:i("userPermissions.status")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("userPermissions.sourceRoles")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle",minWidth:"120px"},children:i("userPermissions.tenant","Tenant")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle",minWidth:"120px"},children:i("userPermissions.source","Source")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("assignments.permissions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--item-color-border)]",children:xe.map(m=>{const y=m.application,k=B.has(y);return e.jsxs(o.Fragment,{children:[e.jsxs("tr",{className:"bg-[var(--bg-tertiary)]",children:[e.jsx("td",{className:"sticky left-0 z-10 px-3 py-2 bg-[var(--bg-tertiary)]",style:{width:"280px",minWidth:"280px",maxWidth:"280px"},children:e.jsxs("button",{onClick:()=>z(y),className:"flex items-center gap-3 w-full text-left hover:opacity-80",children:[k?e.jsx(s.ChevronRight,{className:"h-4 w-4 text-[var(--text-secondary)]"}):e.jsx(s.ChevronDown,{className:"h-4 w-4 text-[var(--text-secondary)]"}),e.jsx(s.FolderOpen,{className:"h-4 w-4 text-[var(--text-secondary)]"}),e.jsx("span",{className:"text-sm font-semibold text-[var(--text-primary)]",children:m.application}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)] ml-auto",children:[m.modules.length," module",m.modules.length>1?"s":""]})]})}),e.jsx("td",{colSpan:5,className:"px-0 py-2"})]}),!k&&m.modules.map((U,W)=>ce(U,W))]},y)})})]})}),pe===0&&e.jsx("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:i("assignments.noResources")})]})]})}),a&&e.jsx("div",{className:"overflow-x-auto overflow-y-visible",children:e.jsxs("table",{className:"border-collapse",style:{width:"auto"},children:[e.jsx("thead",{className:"item-medium border-b border-[var(--item-color-border)]",children:e.jsxs("tr",{children:[e.jsx("th",{scope:"col",className:"sticky left-0 z-20 item-medium px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"280px",minWidth:"280px",maxWidth:"280px",height:"48px",verticalAlign:"middle"},children:i("assignments.resource")}),e.jsx("th",{scope:"col",className:"px-2 text-center text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{width:"60px",minWidth:"60px",maxWidth:"60px",height:"48px",verticalAlign:"middle"},children:i("userPermissions.status")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("userPermissions.sourceRoles")}),e.jsx("th",{scope:"col",className:"px-3 text-left text-xs font-medium text-[var(--text-secondary)] uppercase tracking-wider",style:{height:"48px",verticalAlign:"middle"},children:i("assignments.permissions")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--item-color-border)]",children:xe.map(m=>e.jsx(o.Fragment,{children:m.modules.map((y,k)=>e.jsx(o.Fragment,{children:de(y.module,k,"module",!1,!1)},y.module.id))},m.application))})]})})]})}function Je({viewMode:t,onChange:a}){const{t:n}=G.useTranslation();return e.jsxs("div",{className:"flex items-center rounded-[var(--radius-button)] border border-[var(--border-color)] bg-[var(--bg-primary)] p-0.5 h-[34px]",children:[e.jsx("button",{onClick:()=>a("cards"),className:`flex items-center justify-center gap-1 px-2.5 h-full rounded text-sm transition-colors ${t==="cards"?"bg-[var(--color-accent-500)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,title:n("common.cardView","Vue cartes"),children:e.jsx(s.LayoutGrid,{className:"w-4 h-4"})}),e.jsx("button",{onClick:()=>a("table"),className:`flex items-center justify-center gap-1 px-2.5 h-full rounded text-sm transition-colors ${t==="table"?"bg-[var(--color-accent-500)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,title:n("common.tableView","Vue tableau"),children:e.jsx(s.Table2,{className:"w-4 h-4"})})]})}function xt({userId:t,userName:a}){const{t:n}=G.useTranslation(["admin","groups"]),i=ue.useNavigate(),[c,l]=o.useState([]),[j,u]=o.useState(null),[f,N]=o.useState(!0),[x,b]=o.useState(!1),[T,d]=o.useState(""),[p,v]=o.useState("all"),[C,w]=o.useState(new Set),[F,V]=o.useState(!1),[R,A]=o.useState(null),[B,z]=o.useState(null),[L,q]=o.useState(null),[_,E]=o.useState("cards"),M=o.useCallback(async()=>{try{N(!0);const r=await D.adminApi.users.getGroups(t);l(r)}catch(r){console.error("Failed to load user groups:",r),z(n("admin:userDetail.groups.loadError","Erreur lors du chargement des groupes"))}finally{N(!1)}},[t,n]),H=async()=>{try{const r=await Oe.groupsApi.getAll(void 0,!0);u(r)}catch(r){console.error("Failed to load all groups:",r)}};o.useEffect(()=>{M(),H()},[M]);const Z=async r=>{const h=c?.find(g=>g.id===r);if(confirm(n("admin:userDetail.groups.confirmRemove",{userName:a,groupName:h?.name})))try{A(r),z(null),await Oe.groupsApi.removeMember(r,t),await M(),q(n("admin:userDetail.groups.removeSuccess","Utilisateur retiré du groupe")),setTimeout(()=>q(null),3e3)}catch(g){console.error("Failed to remove from group:",g);const X=g?.response?.data?.message||n("admin:userDetail.groups.removeError","Erreur lors du retrait du groupe");z(X)}finally{A(null)}},I=j?.filter(r=>!c?.some(h=>h.id===r.id))?.filter(r=>{if(p==="security"&&!r.isSecurityGroup||p==="standard"&&r.isSecurityGroup||p==="entra"&&!r.isSyncedFromEntra)return!1;if(!T.trim())return!0;const h=T.toLowerCase().trim();return r.name.toLowerCase().includes(h)||(r.description?.toLowerCase().includes(h)??!1)}),P=r=>{w(h=>{const g=new Set(h);return g.has(r)?g.delete(r):g.add(r),g})},K=(r,h)=>h===r?"px-3 py-1 rounded-full text-xs font-medium transition-colors bg-[var(--color-accent-500)] text-white":"px-3 py-1 rounded-full text-xs font-medium transition-colors bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",Q=r=>r?"w-5 h-5 rounded border-2 flex items-center justify-center flex-shrink-0 transition-colors bg-[var(--color-accent-500)] border-[var(--color-accent-500)]":"w-5 h-5 rounded border-2 flex items-center justify-center flex-shrink-0 transition-colors border-[var(--border-color)]",ee=()=>{I&&w(new Set(I.map(r=>r.id)))},ne=()=>{w(new Set)},te=async()=>{if(C.size!==0)try{V(!0),z(null);const r=Array.from(C);for(const h of r)await Oe.groupsApi.addMember(h,{userId:t});await M(),b(!1),d(""),v("all"),w(new Set),q(n("admin:userDetail.groups.addMultipleSuccess",{count:r.length,defaultValue:`${r.length} groupe(s) ajouté(s)`})),setTimeout(()=>q(null),3e3)}catch(r){console.error("Failed to add groups:",r);const h=r?.response?.data?.message||n("admin:userDetail.groups.addError","Erreur lors de l'ajout au groupe");z(h)}finally{V(!1)}},re=()=>{b(!1),d(""),v("all"),w(new Set)};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(s.Users,{className:"w-5 h-5"}),n("admin:userDetail.groups.title","Groupes de l'utilisateur"),c&&e.jsx("span",{className:"ml-2 px-2 py-0.5 text-xs rounded-full bg-[var(--bg-secondary)] text-[var(--text-secondary)]",children:c.length})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>b(!0),className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("admin:userDetail.groups.add","Ajouter à un groupe")]}),e.jsxs("button",{onClick:M,className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(s.RefreshCw,{className:"w-4 h-4"}),n("common.refresh","Actualiser")]}),e.jsx(Je,{viewMode:_,onChange:E})]})]}),B&&e.jsxs("div",{className:"p-4 rounded-lg bg-red-500/10 border border-red-500/20 flex items-center gap-3",children:[e.jsx(s.AlertTriangle,{className:"w-5 h-5 text-red-500 flex-shrink-0"}),e.jsx("p",{className:"text-red-500",children:B}),e.jsx("button",{onClick:()=>z(null),className:"ml-auto",children:e.jsx(s.X,{className:"w-4 h-4 text-red-500"})})]}),L&&e.jsxs("div",{className:"p-4 rounded-lg bg-green-500/10 border border-green-500/20 flex items-center gap-3",children:[e.jsx(s.CheckCircle,{className:"w-5 h-5 text-green-500 flex-shrink-0"}),e.jsx("p",{className:"text-green-500",children:L})]}),e.jsx("div",{className:"p-4 rounded-lg bg-blue-500/10 border border-blue-500/20",children:e.jsx("p",{className:"text-sm text-blue-500",children:n("admin:userDetail.groups.info","L'utilisateur hérite automatiquement des rôles et permissions des groupes auxquels il appartient.")})}),f&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})}),!f&&(!c||c.length===0)&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx(s.Users,{className:"w-12 h-12 mx-auto mb-4 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-[var(--text-secondary)] mb-4",children:n("admin:userDetail.groups.noGroups","Cet utilisateur n'appartient à aucun groupe")}),e.jsxs("button",{onClick:()=>b(!0),className:"inline-flex items-center gap-2 px-4 py-2 rounded-lg bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("admin:userDetail.groups.addFirst","Ajouter à un premier groupe")]})]}),!f&&(c?.length??0)>0&&_==="table"&&e.jsx(D.DataTable,{data:c,columns:[{key:"name",label:n("admin:userDetail.groups.table.name","Nom"),sortable:!0,render:r=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`p-1.5 rounded flex-shrink-0 ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]"}`,children:r.isSecurityGroup?e.jsx(s.Shield,{className:"w-4 h-4"}):e.jsx(s.Users,{className:"w-4 h-4"})}),e.jsx("div",{className:"min-w-0",children:e.jsxs("span",{className:"font-medium text-[var(--text-primary)] flex items-center gap-1",children:[r.name,r.isSyncedFromEntra&&e.jsx(s.Cloud,{className:"w-3.5 h-3.5 text-[var(--color-accent-500)]"})]})})]})},{key:"description",label:n("admin:userDetail.groups.table.description","Description"),render:r=>e.jsx("span",{className:"text-[var(--text-secondary)] truncate max-w-[200px] block",children:r.description||"-"}),hideOnMobile:!0},{key:"roles",label:n("admin:userDetail.groups.table.roles","Rôles"),render:r=>e.jsxs("div",{className:"flex flex-wrap gap-1",children:[r.roles.slice(0,2).map(h=>{const g=$e.getCustomRoleIcon(h.code);return e.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-xs bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]",children:[g?e.jsx("span",{children:g}):e.jsx(s.Shield,{className:"w-3 h-3"}),h.name]},h.name)}),r.roles.length>2&&e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)]",children:["+",r.roles.length-2]}),r.roles.length===0&&e.jsx("span",{className:"text-[var(--text-tertiary)]",children:"-"})]}),hideOnMobile:!0},{key:"addedAt",label:n("admin:userDetail.groups.table.addedAt","Ajouté le"),sortable:!0,render:r=>e.jsx("span",{className:"text-[var(--text-secondary)] text-sm",children:new Date(r.addedAt).toLocaleDateString()}),hideOnMobile:!0},{key:"actions",label:"",width:"80px",align:"right",render:r=>e.jsx("div",{className:"flex items-center justify-end gap-1",children:r.isSyncedFromEntra?e.jsxs("span",{className:"text-xs text-amber-500 flex items-center gap-1",children:[e.jsx(s.Info,{className:"w-3 h-3"}),"Entra"]}):e.jsx("button",{onClick:h=>{h.stopPropagation(),Z(r.id)},disabled:R===r.id,className:"flex items-center gap-1 px-2 py-1 rounded text-xs text-red-500 hover:bg-red-500/10 transition-colors disabled:opacity-50",children:R===r.id?e.jsx(s.Loader2,{className:"w-3 h-3 animate-spin"}):e.jsx(s.Trash2,{className:"w-3 h-3"})})})}],getRowKey:r=>r.id,onRowClick:r=>i(`/administration/users/groups/${r.id}`),compact:!0,emptyMessage:n("admin:userDetail.groups.noGroups","Cet utilisateur n'appartient à aucun groupe"),emptyIcon:e.jsx(s.Users,{className:"w-8 h-8 text-[var(--text-tertiary)]"})}),!f&&(c?.length??0)>0&&_!=="table"&&e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:c?.map(r=>e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)] hover:border-[var(--color-accent-500)] transition-colors",children:[e.jsx("div",{className:"flex items-start justify-between gap-3",children:e.jsxs("button",{type:"button",className:"flex items-start gap-3 min-w-0 cursor-pointer text-left",onClick:()=>i(`/administration/users/groups/${r.id}`),children:[e.jsx("div",{className:`p-2 rounded-lg flex-shrink-0 ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]"}`,children:r.isSecurityGroup?e.jsx(s.Shield,{className:"w-5 h-5"}):e.jsx(s.Users,{className:"w-5 h-5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("h4",{className:"text-sm font-semibold text-[var(--text-primary)] truncate flex items-center gap-2",children:[r.name,r.isSyncedFromEntra&&e.jsx(s.Cloud,{className:"w-3.5 h-3.5 text-[var(--color-accent-500)]"})]}),r.description&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] truncate",children:r.description})]})]})}),r.roles.length>0&&e.jsxs("div",{className:"mt-3 flex flex-wrap gap-1",children:[r.roles.slice(0,3).map(h=>{const g=$e.getCustomRoleIcon(h.code);return e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]",children:[g?e.jsx("span",{children:g}):e.jsx(s.Shield,{className:"w-3 h-3"}),h.name]},h.name)}),r.roles.length>3&&e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)]",children:["+",r.roles.length-3]})]}),e.jsxs("div",{className:"mt-3 pt-3 border-t border-[var(--border-color)] space-y-1",children:[e.jsxs("p",{className:"text-xs text-[var(--text-tertiary)]",children:[n("admin:userDetail.groups.addedAt","Ajouté le"),": ",new Date(r.addedAt).toLocaleDateString()]}),r.addedBy&&e.jsxs("p",{className:"text-xs text-[var(--text-tertiary)]",children:[n("admin:userDetail.groups.addedBy","Par"),": ",r.addedBy]})]}),!r.isSyncedFromEntra&&e.jsx("div",{className:"mt-3 flex justify-end",children:e.jsxs("button",{onClick:()=>Z(r.id),disabled:R===r.id,className:"flex items-center gap-1 px-2 py-1 rounded text-xs text-red-500 hover:bg-red-500/10 transition-colors disabled:opacity-50",children:[R===r.id?e.jsx(s.Loader2,{className:"w-3 h-3 animate-spin"}):e.jsx(s.Trash2,{className:"w-3 h-3"}),n("common.remove","Retirer")]})}),r.isSyncedFromEntra&&e.jsxs("div",{className:"mt-3 flex items-center gap-1 text-xs text-amber-500",children:[e.jsx(s.Info,{className:"w-3 h-3"}),n("admin:userDetail.groups.syncedFromEntra","Synchronisé depuis Entra ID")]})]},r.id))}),x&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:e.jsxs("div",{className:"w-full max-w-2xl mx-4 bg-[var(--bg-primary)] rounded-[var(--radius-card)] shadow-xl",children:[e.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-[var(--border-color)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:n("admin:userDetail.groups.addModalTitle","Ajouter à un groupe")}),e.jsx("button",{onClick:re,className:"p-1 rounded hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(s.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]}),e.jsxs("div",{className:"p-4 space-y-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("input",{type:"text",placeholder:n("admin:userDetail.groups.searchPlaceholder","Rechercher un groupe..."),value:T,onChange:r=>d(r.target.value),className:"w-full pl-10 pr-4 py-2 rounded-lg border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",autoFocus:!0})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(s.Filter,{className:"w-4 h-4 text-[var(--text-tertiary)]"}),["all","security","standard","entra"].map(r=>e.jsxs("button",{onClick:()=>v(r),className:K(r,p),children:[r==="all"&&n("admin:userDetail.groups.filterAll","Tous"),r==="security"&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.Shield,{className:"w-3 h-3"}),n("admin:userDetail.groups.filterSecurity","Sécurité")]}),r==="standard"&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.Users,{className:"w-3 h-3"}),n("admin:userDetail.groups.filterStandard","Standard")]}),r==="entra"&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.Cloud,{className:"w-3 h-3"}),n("admin:userDetail.groups.filterEntra","Entra ID")]})]},r))]}),(I?.length??0)>0&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsx("span",{className:"text-[var(--text-secondary)]",children:C.size>0?n("admin:userDetail.groups.selectedCount",{count:C.size,defaultValue:`${C.size} sélectionné(s)`}):n("admin:userDetail.groups.availableCount",{count:I?.length??0,defaultValue:`${I?.length??0} groupe(s) disponible(s)`})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:ee,className:"text-[var(--color-accent-500)] hover:underline",children:n("admin:userDetail.groups.selectAll","Tout sélectionner")}),C.size>0&&e.jsx("button",{onClick:ne,className:"text-[var(--text-tertiary)] hover:underline",children:n("admin:userDetail.groups.clearSelection","Effacer")})]})]})]}),e.jsx("div",{className:"max-h-[350px] overflow-y-auto space-y-2",children:!I||I.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(s.Users,{className:"w-8 h-8 mx-auto mb-2 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:n("admin:userDetail.groups.noAvailableGroups","Aucun groupe disponible")})]}):I.map(r=>{const h=C.has(r.id);return e.jsxs("button",{type:"button",onClick:()=>P(r.id),className:`w-full flex items-center gap-3 p-3 rounded-lg border cursor-pointer transition-colors text-left ${h?"border-[var(--color-accent-500)] bg-[var(--color-accent-500)]/5":"border-[var(--border-color)] hover:border-[var(--color-accent-500)] hover:bg-[var(--bg-hover)]"}`,children:[e.jsx("div",{className:Q(h),children:h&&e.jsx(s.Check,{className:"w-3 h-3 text-white"})}),e.jsx("div",{className:`p-2 rounded-lg flex-shrink-0 ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]"}`,children:r.isSecurityGroup?e.jsx(s.Shield,{className:"w-5 h-5"}):e.jsx(s.Users,{className:"w-5 h-5"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("p",{className:"text-sm font-medium text-[var(--text-primary)] truncate flex items-center gap-2",children:[r.name,r.isSyncedFromEntra&&e.jsx(s.Cloud,{className:"w-3.5 h-3.5 text-[var(--color-accent-500)]"})]}),r.description&&e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] truncate",children:r.description})]}),e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)] flex-shrink-0",children:[r.memberCount," ",n("admin:userDetail.groups.members","membres")]})]},r.id)})})]}),e.jsxs("div",{className:"flex items-center justify-between p-4 border-t border-[var(--border-color)]",children:[e.jsx("div",{className:"text-sm text-[var(--text-secondary)]",children:C.size>0&&e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-[var(--color-accent-500)] text-white text-xs flex items-center justify-center font-medium",children:C.size}),n("admin:userDetail.groups.groupsSelected","groupe(s) sélectionné(s)")]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:re,className:"px-4 py-2 rounded-lg bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:n("common.cancel","Annuler")}),e.jsx("button",{onClick:te,disabled:C.size===0||F,className:"px-4 py-2 rounded-lg bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2",children:F?e.jsxs(e.Fragment,{children:[e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}),n("admin:userDetail.groups.adding","Ajout en cours...")]}):e.jsxs(e.Fragment,{children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("admin:userDetail.groups.addSelected","Ajouter"),C.size>0&&` (${C.size})`]})})]})]})]})})]})}const qe="__OTHER__";function Pe({label:t,options:a,value:n,onChange:i,placeholder:c,disabled:l=!1,className:j="",allowOther:u=!0}){const{t:f}=G.useTranslation(),[N,x]=o.useState(!1),[b,T]=o.useState("");o.useEffect(()=>{n.customValue!==void 0?(x(!0),T(n.customValue)):(x(!1),T(""))},[n]);const d=w=>{const F=w.target.value;F===qe?(x(!0),T(""),i({id:"",customValue:""})):(x(!1),T(""),i({id:F,customValue:void 0}))},p=w=>{const F=w.target.value;T(F),i({id:"",customValue:F})},v=()=>{x(!1),T(""),i({id:"",customValue:void 0})},C=N?qe:n.id;return e.jsxs("div",{className:j,children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:t}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("select",{value:C,onChange:d,disabled:l,className:`flex-1 px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)] ${N?"w-1/3 flex-none":""}`,children:[e.jsx("option",{value:"",children:c||f("common.none","-- Aucun --")}),a.map(w=>e.jsx("option",{value:w.id,children:w.name},w.id)),u&&e.jsx("option",{value:qe,className:"font-medium text-[var(--color-accent-600)]",children:f("common.other","+ Autre...")})]}),N&&e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",value:b,onChange:p,placeholder:f("common.enterValue","Saisir une valeur..."),disabled:l,autoFocus:!0,className:"flex-1 px-4 py-2 rounded-[var(--radius-input)] border border-[var(--color-accent-500)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"}),e.jsx("button",{type:"button",onClick:v,disabled:l,className:"px-3 py-2 rounded-[var(--radius-button)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",title:f("common.cancel","Annuler"),children:"✕"})]})]}),N&&b&&e.jsxs("p",{className:"mt-1 text-xs text-[var(--color-accent-600)] flex items-center gap-1",children:[e.jsx(s.Plus,{className:"w-3 h-3"}),f("common.willBeCreated","Cette valeur sera créée automatiquement")]})]})}const Me=t=>t?new Date(t).toLocaleString():"-";function pt({user:t,formData:a,setFormData:n,handleSaveInfo:i,saving:c,canUpdate:l,editingSection:j,sectionData:u,setSectionData:f,startEditingSection:N,cancelEditing:x,handleSaveSection:b,orgReferences:T}){const{t:d}=G.useTranslation("admin");return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("form",{onSubmit:i,className:"space-y-6 p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(s.User,{className:"w-5 h-5"}),d("userDetail.info.profile","Profil")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("users.form.firstName")}),e.jsx("input",{type:"text",required:!0,value:a.firstName,onChange:p=>n(v=>({...v,firstName:p.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("users.form.lastName")}),e.jsx("input",{type:"text",required:!0,value:a.lastName,onChange:p=>n(v=>({...v,lastName:p.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("users.columns.email")}),e.jsx("input",{type:"email",required:!0,value:a.email,onChange:p=>n(v=>({...v,email:p.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs("button",{type:"submit",disabled:c||!l,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors disabled:opacity-50 ${l?"bg-[var(--color-accent-600)] hover:bg-[var(--color-accent-700)] text-white":"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"}`,title:l?void 0:d("common.noPermission","Permission insuffisante"),children:[c?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Save,{className:"w-4 h-4"}),d("common.save")]})})]}),e.jsx(Le,{title:d("userDetail.info.organization","Organisation"),icon:e.jsx(s.Building2,{className:"w-5 h-5"}),sectionKey:"organization",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("organization"),onCancel:x,onSave:()=>b("organization"),children:j==="organization"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(Pe,{label:d("userDetail.info.company","Société"),options:T?.companies.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.company,onChange:p=>f(v=>({...v,organization:{...v.organization,company:p}}))}),e.jsx(Pe,{label:d("userDetail.info.department","Département"),options:T?.departments.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.department,onChange:p=>f(v=>({...v,organization:{...v.organization,department:p}}))}),e.jsx(Pe,{label:d("userDetail.info.jobTitle","Fonction"),options:T?.jobTitles.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.jobTitle,onChange:p=>f(v=>({...v,organization:{...v.organization,jobTitle:p}}))}),e.jsx(Pe,{label:d("userDetail.info.office","Bureau"),options:T?.offices.map(p=>({id:p.id,name:p.name}))||[],value:u.organization.office,onChange:p=>f(v=>({...v,organization:{...v.organization,office:p}}))}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.manager","Manager")}),e.jsxs("select",{value:u.organization.managerId,onChange:p=>f(v=>({...v,organization:{...v.organization,managerId:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",children:[e.jsx("option",{value:"",children:d("common.none","-- Aucun --")}),T?.managers.map(p=>e.jsx("option",{value:p.id,children:p.name},p.id))]})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.company","Société"),value:t.companyName}),e.jsx(Y,{label:d("userDetail.info.department","Département"),value:t.departmentName}),e.jsx(Y,{label:d("userDetail.info.jobTitle","Fonction"),value:t.jobTitleName}),e.jsx(Y,{label:d("userDetail.info.office","Bureau"),value:t.officeName}),e.jsx(Y,{label:d("userDetail.info.manager","Manager"),value:t.managerName})]})}),e.jsx(Le,{title:d("userDetail.info.jobInfo","Informations emploi"),icon:e.jsx(s.Briefcase,{className:"w-5 h-5"}),sectionKey:"jobInfo",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("jobInfo"),onCancel:x,onSave:()=>b("jobInfo"),children:j==="jobInfo"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.employeeId","ID Employé")}),e.jsx("input",{type:"text",value:u.jobInfo.employeeId,onChange:p=>f(v=>({...v,jobInfo:{...v.jobInfo,employeeId:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.employeeType","Type employé")}),e.jsx("input",{type:"text",value:u.jobInfo.employeeType,onChange:p=>f(v=>({...v,jobInfo:{...v.jobInfo,employeeType:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.employeeHireDate","Date d'embauche")}),e.jsx("input",{type:"date",value:u.jobInfo.employeeHireDate,onChange:p=>f(v=>({...v,jobInfo:{...v.jobInfo,employeeHireDate:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.employeeId","ID Employé"),value:t.employeeId}),e.jsx(Y,{label:d("userDetail.info.employeeType","Type employé"),value:t.employeeType}),e.jsx(Y,{label:d("userDetail.info.employeeHireDate","Date d'embauche"),value:t.employeeHireDate?new Date(t.employeeHireDate).toLocaleDateString():null}),e.jsx(Y,{label:d("userDetail.info.sponsors","Sponsors"),value:t.sponsors})]})}),e.jsx(Le,{title:d("userDetail.info.phones","Téléphones"),icon:e.jsx(s.Phone,{className:"w-5 h-5"}),sectionKey:"phones",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("phones"),onCancel:x,onSave:()=>b("phones"),children:j==="phones"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.phone","Téléphone")}),e.jsx("input",{type:"tel",value:u.phones.phoneNumber,onChange:p=>f(v=>({...v,phones:{...v.phones,phoneNumber:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.mobile","Mobile")}),e.jsx("input",{type:"tel",value:u.phones.mobilePhone,onChange:p=>f(v=>({...v,phones:{...v.phones,mobilePhone:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.fax","Fax")}),e.jsx("input",{type:"tel",value:u.phones.faxNumber,onChange:p=>f(v=>({...v,phones:{...v.phones,faxNumber:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.phone","Téléphone"),value:Ge.formatPhoneNumber(t.phoneNumber,"CH","international")}),e.jsx(Y,{label:d("userDetail.info.mobile","Mobile"),value:Ge.formatPhoneNumber(t.mobilePhone,"CH","international")}),e.jsx(Y,{label:d("userDetail.info.fax","Fax"),value:Ge.formatPhoneNumber(t.faxNumber,"CH","international")})]})}),e.jsx(Le,{title:d("userDetail.info.address","Adresse"),icon:e.jsx(s.MapPin,{className:"w-5 h-5"}),sectionKey:"address",editingSection:j,saving:c,canUpdate:l,onStartEdit:()=>N("address"),onCancel:x,onSave:()=>b("address"),children:j==="address"?e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.streetAddress","Adresse")}),e.jsx("input",{type:"text",value:u.address.streetAddress,onChange:p=>f(v=>({...v,address:{...v.address,streetAddress:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.city","Ville")}),e.jsx("input",{type:"text",value:u.address.city,onChange:p=>f(v=>({...v,address:{...v.address,city:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.state","Région")}),e.jsx("input",{type:"text",value:u.address.state,onChange:p=>f(v=>({...v,address:{...v.address,state:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.postalCode","Code postal")}),e.jsx("input",{type:"text",value:u.address.postalCode,onChange:p=>f(v=>({...v,address:{...v.address,postalCode:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:d("userDetail.info.country","Pays")}),e.jsx("input",{type:"text",value:u.address.country,onChange:p=>f(v=>({...v,address:{...v.address,country:p.target.value}})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] border border-[var(--border-color)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}):e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsx(Y,{label:d("userDetail.info.streetAddress","Adresse"),value:t.streetAddress,className:"sm:col-span-2 lg:col-span-3"}),e.jsx(Y,{label:d("userDetail.info.city","Ville"),value:t.city}),e.jsx(Y,{label:d("userDetail.info.state","Région"),value:t.state}),e.jsx(Y,{label:d("userDetail.info.postalCode","Code postal"),value:t.postalCode}),e.jsx(Y,{label:d("userDetail.info.country","Pays"),value:t.country})]})}),(t.otherEmails||t.mailNickname||t.imAddresses)&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 mb-4",children:[e.jsx(s.AtSign,{className:"w-5 h-5"}),d("userDetail.info.otherContact","Autres coordonnées")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[t.mailNickname&&e.jsx(Y,{label:d("userDetail.info.mailNickname","Alias mail"),value:t.mailNickname}),t.otherEmails&&e.jsx(Y,{label:d("userDetail.info.otherEmails","Autres emails"),value:t.otherEmails,breakAll:!0}),t.imAddresses&&e.jsx(Y,{label:d("userDetail.info.imAddresses","Messagerie instantanée"),value:t.imAddresses,breakAll:!0})]})]}),t.entraObjectId&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800",children:[e.jsxs("h3",{className:"text-lg font-semibold text-blue-800 dark:text-blue-300 flex items-center gap-2 mb-4",children:[e.jsx(s.Cloud,{className:"w-5 h-5"}),d("userDetail.info.entraSync","Synchronisation Microsoft Entra ID")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"p-3 rounded-lg bg-white/50 dark:bg-black/20",children:[e.jsx("p",{className:"text-xs text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-1",children:d("userDetail.info.entraObjectId","Object ID")}),e.jsx("p",{className:"text-sm text-blue-900 dark:text-blue-200 font-mono break-all",children:t.entraObjectId})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-white/50 dark:bg-black/20",children:[e.jsx("p",{className:"text-xs text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-1",children:d("userDetail.info.authProvider","Fournisseur")}),e.jsx("p",{className:"text-sm text-blue-900 dark:text-blue-200 font-medium capitalize",children:t.authProvider||"microsoft"})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-white/50 dark:bg-black/20",children:[e.jsx("p",{className:"text-xs text-blue-600 dark:text-blue-400 uppercase tracking-wider mb-1",children:d("userDetail.info.lastEntraSync","Dernière sync")}),e.jsx("p",{className:"text-sm text-blue-900 dark:text-blue-200 font-medium",children:Me(t.lastEntraSyncAt)})]})]})]}),e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 mb-4",children:[e.jsx(s.Shield,{className:"w-5 h-5"}),d("userDetail.info.accountStatus","Statut du compte")]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[e.jsx(He,{active:t.isActive,activeLabel:d("users.status.active"),inactiveLabel:d("users.status.inactive"),type:"active"}),e.jsx(He,{active:t.emailConfirmed,activeLabel:d("userDetail.info.emailConfirmed","Email confirmé"),inactiveLabel:d("userDetail.info.emailNotConfirmed","Email non confirmé"),type:"email"}),e.jsx(He,{active:t.hasCompletedOnboarding,activeLabel:d("userDetail.info.onboardingComplete","Onboarding terminé"),inactiveLabel:d("userDetail.info.onboardingPending","Onboarding en attente"),type:"onboarding"}),t.mustChangePassword&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-sm font-medium bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400",children:[e.jsx(s.Key,{className:"w-4 h-4"}),d("userDetail.info.mustChangePassword","Changement de mot de passe requis")]}),t.entraObjectId&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-sm font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400",children:[e.jsx(s.Cloud,{className:"w-4 h-4"}),d("userDetail.info.syncedWithAad","Synchronisé AAD")]})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 pt-4 border-t border-[var(--border-color)]",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.createdAt")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:Me(t.createdAt)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.updatedAt","Modifié le")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:Me(t.updatedAt)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.lastLogin")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:Me(t.lastLoginAt)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:d("userDetail.info.userType","Type")}),e.jsx("p",{className:"text-sm text-[var(--text-primary)] font-medium",children:t.userType})]})]})]})]})}function Y({label:t,value:a,className:n,breakAll:i}){return e.jsxs("div",{className:`p-3 rounded-lg bg-[var(--bg-secondary)] ${n||""}`,children:[e.jsx("p",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1",children:t}),e.jsx("p",{className:`text-sm text-[var(--text-primary)] font-medium ${i?"break-all":""}`,children:a||"-"})]})}function Le({title:t,icon:a,sectionKey:n,editingSection:i,saving:c,canUpdate:l,onStartEdit:j,onCancel:u,onSave:f,children:N}){const{t:x}=G.useTranslation("admin"),b=i===n;return e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[a,t]}),b?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:u,className:"px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:x("common.cancel","Annuler")}),e.jsxs("button",{onClick:f,disabled:c||!l,className:`flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] transition-colors disabled:opacity-50 ${l?"bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]":"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"}`,title:l?void 0:x("common.noPermission","Permission insuffisante"),children:[c?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Save,{className:"w-4 h-4"}),x("common.save","Enregistrer")]})]}):e.jsxs("button",{onClick:j,disabled:!l,className:`flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] transition-colors ${l?"bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]":"opacity-50 cursor-not-allowed bg-[var(--bg-secondary)] text-[var(--text-tertiary)]"}`,title:l?void 0:x("common.noPermission","Permission insuffisante"),children:[e.jsx(s.Edit3,{className:"w-4 h-4"}),x("common.edit","Modifier")]})]}),N]})}function He({active:t,activeLabel:a,inactiveLabel:n,type:i}){const c=()=>i==="email"?e.jsx(s.Mail,{className:"w-4 h-4"}):i==="onboarding"?e.jsx(s.User,{className:"w-4 h-4"}):t?e.jsx(s.CheckCircle,{className:"w-4 h-4"}):e.jsx(s.XCircle,{className:"w-4 h-4"}),l=()=>t?"bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400":i==="active"?"bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-400":"bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-400";return e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-sm font-medium ${l()}`,children:[c(),t?a:n]})}function ht({isOpen:t,onClose:a,onConfirm:n,userName:i}){const{t:c}=G.useTranslation(["admin","common"]),[l,j]=o.useState(""),[u,f]=o.useState(!1),N=()=>{l!==""&&(n(l,u),a(),j(""),f(!1))},x=()=>{a(),j(""),f(!1)};return t?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",children:e.jsxs("div",{className:"relative w-full max-w-md bg-[var(--bg-card)] rounded-2xl shadow-2xl border border-[var(--border-color)] overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-[var(--border-color)]",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:c("userDetail.security.unlockAccount")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mt-1",children:i})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{onClick:()=>{const b={component:"UnlockAccountModal",url:window.location.href},T=`https://github.com/anthropics/claude-code/issues/new?title=${encodeURIComponent("[Bug] Unlock Account Modal")}&body=${encodeURIComponent(`## Context
2
2
  - Component: ${b.component}
3
3
  - URL: ${b.url}
4
4
 
@@ -16,4 +16,4 @@
16
16
 
17
17
  ## Actual Behavior
18
18
  `)}`;window.open(T,"_blank")},className:"p-2 rounded-lg hover:bg-[var(--bg-hover)] transition-colors",title:c("common:buttons.reportBug"),children:e.jsx(s.Bug,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsx("button",{onClick:x,className:"p-2 rounded-lg hover:bg-[var(--bg-hover)] transition-colors","aria-label":"Close",children:e.jsx(s.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]})]}),e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-primary)] mb-2",children:[c("userDetail.security.unlockReason"),e.jsx("span",{className:"text-red-500 ml-1",children:"*"})]}),e.jsxs("select",{value:l,onChange:b=>j(b.target.value),className:"w-full px-4 py-3 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 transition-all",children:[e.jsx("option",{value:"",children:c("userDetail.security.selectReason")}),e.jsx("option",{value:D.UnlockReason.PasswordResetMalfunction,children:c("userDetail.security.unlockReasons.1")}),e.jsx("option",{value:D.UnlockReason.FalsePositive,children:c("userDetail.security.unlockReasons.2")}),e.jsx("option",{value:D.UnlockReason.UrgentBusinessNeed,children:c("userDetail.security.unlockReasons.3")}),e.jsx("option",{value:D.UnlockReason.TechnicalSystemError,children:c("userDetail.security.unlockReasons.4")}),e.jsx("option",{value:D.UnlockReason.SupportTicketVerified,children:c("userDetail.security.unlockReasons.5")})]})]}),e.jsxs("div",{className:"flex items-start space-x-3 p-4 rounded-xl bg-[var(--bg-secondary)] border border-[var(--border-subtle)]",children:[e.jsx("input",{type:"checkbox",id:"mustChangePassword",checked:u,onChange:b=>f(b.target.checked),className:"mt-1 w-4 h-4 rounded border-[var(--border-color)] text-primary-600 focus:ring-2 focus:ring-primary-500 bg-[var(--bg-tertiary)]"}),e.jsx("label",{htmlFor:"mustChangePassword",className:"text-sm text-[var(--text-secondary)] cursor-pointer select-none",children:c("userDetail.security.mustChangePassword")})]})]}),e.jsxs("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-[var(--border-color)] bg-[var(--bg-secondary)]",children:[e.jsx("button",{onClick:x,className:"px-6 py-2.5 rounded-xl border border-[var(--border-color)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-all font-medium",children:c("common.cancel")}),e.jsx("button",{onClick:N,disabled:l==="",className:`px-6 py-2.5 rounded-xl font-medium transition-all ${l===""?"bg-gray-400 text-gray-200 cursor-not-allowed":"bg-gradient-to-r from-green-600 to-emerald-600 text-white hover:from-green-700 hover:to-emerald-700 shadow-lg shadow-green-500/30"}`,children:c("userDetail.security.unlock")})]})]})}):null}const Ue=(t,a)=>t?a:"opacity-50 cursor-not-allowed bg-[var(--bg-secondary)] text-[var(--text-tertiary)]",bt=t=>Ue(t,"bg-[var(--color-accent-600)] hover:bg-[var(--color-accent-700)] text-white"),Fe=t=>Ue(t,"bg-amber-600 hover:bg-amber-700 text-white"),vt=t=>Ue(t,"bg-red-600 hover:bg-red-700 text-white"),gt=(t,a)=>Ue(a,t?"bg-red-600 hover:bg-red-700 text-white":"bg-green-600 hover:bg-green-700 text-white");function ft({user:t,userId:a,canUpdate:n,canDelete:i,canExecute:c,newPassword:l,setNewPassword:j,temporaryPassword:u,showTemporaryPassword:f,setShowTemporaryPassword:N,saving:x,showUnlockModal:b,setShowUnlockModal:T,handleSendResetLink:d,handleResetPasswordDirect:p,handleToggleStatus:v,handleEndAllSessions:C,handleUnlock:w,handleClearFailedAttempts:F,copyToClipboard:V,setError:R}){const{t:A}=G.useTranslation("admin"),B=ue.useNavigate(),z=()=>t.isLocked?"Verrouillé (manuel)":t.isTemporarilyLocked?"Verrouillé (temporaire)":t.isActive?A("userDetail.security.accountActive"):A("userDetail.security.accountInactive"),L=()=>t.isLocked?"Verrouillé par un administrateur - nécessite un déverrouillage manuel":t.isTemporarilyLocked?"Verrouillé suite à plusieurs tentatives échouées - déblocage automatique dans quelques minutes":t.isActive?A("userDetail.security.deactivateHint"):A("userDetail.security.activateHint"),q=async()=>{if(confirm(A("users.confirmDelete",{name:t.fullName})))try{await D.adminApi.users.delete(a),B("/administration/users")}catch{R(A("userDetail.errors.deleteFailed"))}};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)] mb-2",children:A("userDetail.security.sendResetLink","Envoyer un lien de réinitialisation")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mb-4",children:A("userDetail.security.sendResetLinkHint","L'utilisateur recevra un email avec un lien pour définir son nouveau mot de passe.")}),e.jsxs("button",{onClick:d,disabled:x||!n,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors disabled:opacity-50 ${bt(n)}`,title:n?void 0:A("common.noPermission","Permission insuffisante"),children:[x?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.Mail,{className:"w-4 h-4"}),A("userDetail.security.sendLink","Envoyer le lien")]})]}),e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--warning-bg)] border border-[var(--warning-border)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--warning-text)] mb-2",children:A("userDetail.security.directReset","Réinitialisation directe (SuperAdmin)")}),e.jsx("p",{className:"text-sm text-[var(--warning-text)] opacity-80 mb-4",children:A("userDetail.security.directResetHint","Génère un mot de passe temporaire que vous devez communiquer à l'utilisateur. Il devra le changer à sa prochaine connexion.")}),e.jsxs("div",{className:"flex gap-4 mb-4",children:[e.jsx("input",{type:"text",placeholder:A("userDetail.security.customPassword","Mot de passe personnalisé (optionnel)"),value:l,onChange:_=>j(_.target.value),autoComplete:"off",className:"flex-1 px-4 py-2 rounded-[var(--radius-input)] border border-[var(--warning-border)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--warning-dot)]"}),e.jsxs("button",{onClick:p,disabled:x||!c,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors disabled:opacity-50 ${Fe(c)}`,title:c?void 0:A("common.noPermission","Permission insuffisante"),children:[x?e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(s.RefreshCw,{className:"w-4 h-4"}),A("userDetail.security.resetDirect","Réinitialiser")]})]}),u&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--success-bg)] border border-[var(--success-border)]",children:[e.jsx("p",{className:"text-sm font-medium text-[var(--success-text)] mb-2",children:A("userDetail.security.temporaryPasswordLabel","Mot de passe temporaire généré:")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"flex-1 px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] font-mono text-lg",children:f?u:"••••••••••••••••"}),e.jsx("button",{onClick:()=>N(!f),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] text-[var(--success-text)] transition-colors",title:f?"Masquer":"Afficher",children:f?e.jsx(s.EyeOff,{className:"w-5 h-5"}):e.jsx(s.Eye,{className:"w-5 h-5"})}),e.jsx("button",{onClick:()=>V(u),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] text-[var(--success-text)] transition-colors",title:"Copier",children:e.jsx(s.Copy,{className:"w-5 h-5"})})]}),e.jsx("p",{className:"text-xs text-[var(--success-text)] opacity-80 mt-2",children:A("userDetail.security.temporaryPasswordWarning","Ce mot de passe ne sera plus affiché. Communiquez-le immédiatement à l'utilisateur.")})]})]}),e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4",children:A("userDetail.security.accountStatus")}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[var(--text-primary)]",children:z()}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:L()})]}),e.jsxs("button",{onClick:()=>v(t.isActive),disabled:!n,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${gt(t.isActive,n)}`,title:n?void 0:A("common.noPermission","Permission insuffisante"),children:[t.isActive?e.jsx(s.UserX,{className:"w-4 h-4"}):e.jsx(s.UserCheck,{className:"w-4 h-4"}),t.isActive?A("users.deactivate"):A("users.activate")]})]})]}),e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4",children:A("userDetail.security.forceLogout")}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[var(--text-primary)]",children:A("userDetail.security.endAllSessionsLabel")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:A("userDetail.security.endAllSessionsHint")})]}),e.jsxs("button",{onClick:C,disabled:!n,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${Fe(n)}`,title:n?void 0:A("common.noPermission","Permission insuffisante"),children:[e.jsx(s.LogOut,{className:"w-4 h-4"}),A("userDetail.security.endAllSessions")]})]})]}),t.isLocked&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--warning-bg)] border border-[var(--warning-border)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--warning-text)] mb-4",children:A("userDetail.security.unlockAccount")}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[var(--warning-text)]",children:"Compte verrouillé manuellement par un administrateur"}),e.jsx("p",{className:"text-sm text-[var(--warning-text)] opacity-80",children:A("userDetail.security.unlockHint")})]}),e.jsxs("button",{onClick:()=>T(!0),disabled:!n,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${Fe(n)}`,title:n?void 0:A("common.noPermission","Permission insuffisante"),children:[e.jsx(s.Unlock,{className:"w-4 h-4"}),A("userDetail.security.unlock")]})]})]}),!t.isLocked&&t.isTemporarilyLocked&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--warning-bg)] border border-[var(--warning-border)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--warning-text)] mb-4",children:"Verrouillage temporaire"}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[var(--warning-text)]",children:"Compte temporairement verrouillé suite à trop de tentatives échouées"}),e.jsx("p",{className:"text-sm text-[var(--warning-text)] opacity-80",children:t.temporaryLockoutEnd&&e.jsxs(e.Fragment,{children:["Déverrouillage automatique prévu à ",new Date(t.temporaryLockoutEnd).toLocaleTimeString("fr-FR")]})})]}),e.jsxs("button",{onClick:F,disabled:!n,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${Fe(n)}`,title:n?void 0:A("common.noPermission","Permission insuffisante"),children:[e.jsx(s.Unlock,{className:"w-4 h-4"}),"Débloquer maintenant"]})]})]}),t.userType!=="System"&&t.userType!=="LocalAdmin"&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--error-text)] mb-4",children:A("userDetail.security.dangerZone")}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[var(--error-text)]",children:A("userDetail.security.deleteAccount")}),e.jsx("p",{className:"text-sm text-[var(--error-text)] opacity-80",children:A("userDetail.security.deleteHint")})]}),e.jsxs("button",{onClick:q,disabled:!i,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${vt(i)}`,title:i?void 0:A("common.noPermission","Permission insuffisante"),children:[e.jsx(s.Trash2,{className:"w-4 h-4"}),A("common.delete")]})]})]}),e.jsx(ht,{isOpen:b,onClose:()=>T(!1),onConfirm:w,userName:t.fullName})]})}const Ee=t=>t?new Date(t).toLocaleString():"-",yt=t=>{if(!t)return"-";const a=t.split(":");if(a.length>=2){const n=parseInt(a[0]),i=parseInt(a[1]);return n>0?`${n}h ${i}m`:`${i}m`}return t},jt=t=>t==="green"?"text-green-600":t==="red"?"text-red-600":"text-[var(--text-primary)]";function Nt({sessions:t,activity:a,isCreateMode:n,canUpdate:i,handleEndSession:c,handleEndAllSessions:l}){const{t:j}=G.useTranslation("admin");return n?e.jsxs("div",{className:"text-center py-12",children:[e.jsx(s.Activity,{className:"w-12 h-12 mx-auto mb-4 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:j("userDetail.activity.notAvailableForNewUser","Les statistiques d'activité ne sont pas disponibles pour un nouvel utilisateur")})]}):e.jsxs("div",{className:"space-y-8",children:[e.jsx(wt,{activity:a}),e.jsx(Ct,{sessions:t,canUpdate:i,handleEndSession:c,handleEndAllSessions:l})]})}function wt({activity:t}){const{t:a}=G.useTranslation("admin");return t?e.jsxs("div",{className:"space-y-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 pb-2 border-b border-[var(--border-color)]",children:[e.jsx(s.Activity,{className:"w-5 h-5"}),a("userDetail.activity.statsTitle","Statistiques de connexion")]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[e.jsx(Ie,{value:t.totalSuccessfulLogins,label:a("userDetail.activity.successfulLogins"),color:"green"}),e.jsx(Ie,{value:t.totalFailedLogins,label:a("userDetail.activity.failedLogins"),color:"red"}),e.jsx(Ie,{value:Ee(t.lastSuccessfulLoginAt),label:a("userDetail.activity.lastSuccess"),isText:!0}),e.jsx(Ie,{value:t.lastSuccessfulLoginIp||"-",label:a("userDetail.activity.lastIp"),isText:!0})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[(t.deviceStats?.length??0)>0&&e.jsx(Ke,{icon:e.jsx(s.Smartphone,{className:"w-4 h-4"}),title:a("userDetail.activity.devices"),items:t.deviceStats??[],labelKey:"device",countSuffix:a("userDetail.activity.logins")}),(t.locationStats?.length??0)>0&&e.jsx(Ke,{icon:e.jsx(s.MapPin,{className:"w-4 h-4"}),title:a("userDetail.activity.locations"),items:t.locationStats??[],labelKey:"location",countSuffix:a("userDetail.activity.logins")})]}),(t.loginsByDay?.length??0)>0&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h4",{className:"text-base font-semibold text-[var(--text-primary)] mb-3 flex items-center gap-2",children:[e.jsx(s.Calendar,{className:"w-4 h-4"}),a("userDetail.activity.loginHistory")]}),e.jsx("div",{className:"space-y-2",children:(t.loginsByDay??[]).slice(0,7).map(n=>e.jsxs("div",{className:"flex items-center gap-4 py-2 border-b border-[var(--border-color)] last:border-0",children:[e.jsx("span",{className:"w-24 text-[var(--text-secondary)]",children:new Date(n.date).toLocaleDateString()}),e.jsxs("div",{className:"flex-1 flex items-center gap-2",children:[e.jsxs("div",{className:"flex items-center gap-1 text-green-600",children:[e.jsx(s.CheckCircle,{className:"w-4 h-4"}),n.successful]}),e.jsxs("div",{className:"flex items-center gap-1 text-red-600",children:[e.jsx(s.XCircle,{className:"w-4 h-4"}),n.failed]})]})]},n.date))})]})]}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 pb-2 border-b border-[var(--border-color)]",children:[e.jsx(s.Activity,{className:"w-5 h-5"}),a("userDetail.activity.statsTitle","Statistiques de connexion")]}),e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})})]})}function Ct({sessions:t,canUpdate:a,handleEndSession:n,handleEndAllSessions:i}){const{t:c}=G.useTranslation("admin");return t?e.jsxs("div",{className:"space-y-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 pb-2 border-b border-[var(--border-color)]",children:[e.jsx(s.Monitor,{className:"w-5 h-5"}),c("userDetail.sessions.title","Sessions")]}),e.jsx(St,{sessions:t.activeSessions??[],canUpdate:a,handleEndSession:n,handleEndAllSessions:i}),e.jsx(Dt,{sessions:t.history??[]})]}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2 pb-2 border-b border-[var(--border-color)]",children:[e.jsx(s.Monitor,{className:"w-5 h-5"}),c("userDetail.sessions.title","Sessions")]}),e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})})]})}function St({sessions:t,canUpdate:a,handleEndSession:n,handleEndAllSessions:i}){const{t:c}=G.useTranslation("admin");return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h4",{className:"text-base font-semibold text-[var(--text-primary)]",children:[c("userDetail.sessions.active")," (",t.length,")"]}),t.length>0&&e.jsxs("button",{onClick:i,disabled:!a,className:`flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] border transition-colors ${a?"bg-[var(--error-bg)] border-[var(--error-border)] text-[var(--error-text)] hover:opacity-80":"opacity-50 cursor-not-allowed bg-[var(--bg-secondary)] text-[var(--text-tertiary)] border-[var(--border-color)]"}`,title:a?void 0:c("common.noPermission","Permission insuffisante"),children:[e.jsx(s.LogOut,{className:"w-4 h-4"}),c("userDetail.sessions.endAll")]})]}),t.length===0?e.jsx("p",{className:"text-[var(--text-secondary)] py-4",children:c("userDetail.sessions.noActive")}):e.jsx("div",{className:"space-y-3",children:t.map(l=>e.jsx(At,{session:l,canUpdate:a,handleEndSession:n},l.id))})]})}function At({session:t,canUpdate:a,handleEndSession:n}){const{t:i}=G.useTranslation("admin");return e.jsx("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--success-border)]",children:e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[t.deviceType==="Mobile"?e.jsx(s.Smartphone,{className:"w-4 h-4 text-green-600"}):e.jsx(s.Monitor,{className:"w-4 h-4 text-green-600"}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:D.parseUserAgent(t.userAgent).formatted}),e.jsx("span",{className:"px-2 py-0.5 text-xs rounded-[var(--radius-badge)] bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]",children:t.deviceType})]}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)] flex items-center gap-4",children:[e.jsx("span",{children:t.ipAddress}),t.city&&t.country&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.MapPin,{className:"w-3 h-3"}),t.city,", ",t.country]})]}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[i("userDetail.sessions.startedAt"),": ",Ee(t.loginAt)]})]}),e.jsx("button",{onClick:()=>n(t.id),disabled:!a,className:`p-2 rounded-[var(--radius-button)] transition-colors ${a?"text-[var(--error-text)] hover:bg-[var(--error-bg)]":"opacity-50 cursor-not-allowed text-[var(--text-tertiary)]"}`,title:a?i("userDetail.sessions.end"):i("common.noPermission","Permission insuffisante"),children:e.jsx(s.LogOut,{className:"w-4 h-4"})})]})})}function Dt({sessions:t}){const{t:a}=G.useTranslation("admin");return t.length===0?e.jsxs("div",{children:[e.jsx("h4",{className:"text-base font-semibold text-[var(--text-primary)] mb-4",children:a("userDetail.sessions.history")}),e.jsx("p",{className:"text-[var(--text-secondary)] py-4",children:a("userDetail.sessions.noHistory")})]}):e.jsxs("div",{children:[e.jsx("h4",{className:"text-base font-semibold text-[var(--text-primary)] mb-4",children:a("userDetail.sessions.history")}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:a("userDetail.sessions.device")}),e.jsx("th",{className:"hidden sm:table-cell text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:"Type"}),e.jsx("th",{className:"hidden md:table-cell text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:a("userDetail.sessions.ip")}),e.jsx("th",{className:"hidden md:table-cell text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:a("userDetail.sessions.location")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:a("userDetail.sessions.login")}),e.jsx("th",{className:"hidden lg:table-cell text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:a("userDetail.sessions.logout")}),e.jsx("th",{className:"hidden lg:table-cell text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:a("userDetail.sessions.duration")})]})}),e.jsx("tbody",{children:t.slice(0,20).map(n=>e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("td",{className:"py-3 px-4 text-[var(--text-primary)]",children:e.jsxs("div",{className:"flex items-center gap-2",children:[n.deviceType==="Mobile"?e.jsx(s.Smartphone,{className:"w-4 h-4 text-[var(--text-tertiary)]"}):e.jsx(s.Monitor,{className:"w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("span",{children:D.parseUserAgent(n.userAgent).formatted})]})}),e.jsx("td",{className:"hidden sm:table-cell py-3 px-4",children:e.jsx("span",{className:"px-2 py-0.5 text-xs rounded-[var(--radius-badge)] bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]",children:n.deviceType})}),e.jsx("td",{className:"hidden md:table-cell py-3 px-4 text-[var(--text-secondary)]",children:n.ipAddress||"-"}),e.jsx("td",{className:"hidden md:table-cell py-3 px-4 text-[var(--text-secondary)]",children:n.city&&n.country?`${n.city}, ${n.country}`:"-"}),e.jsx("td",{className:"py-3 px-4 text-[var(--text-secondary)]",children:Ee(n.loginAt)}),e.jsx("td",{className:"hidden lg:table-cell py-3 px-4 text-[var(--text-secondary)]",children:Ee(n.logoutAt)}),e.jsx("td",{className:"hidden lg:table-cell py-3 px-4 text-[var(--text-secondary)]",children:yt(n.duration)})]},n.id))})]})})]})}function Ie({value:t,label:a,color:n,isText:i}){const c=jt(n),l=i?"text-sm font-medium":"text-2xl font-bold";return e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsx("div",{className:`${l} ${c}`,children:t}),e.jsx("div",{className:"text-sm text-[var(--text-secondary)]",children:a})]})}function Ke({icon:t,title:a,items:n,labelKey:i,countSuffix:c}){return e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsxs("h4",{className:"text-base font-semibold text-[var(--text-primary)] mb-3 flex items-center gap-2",children:[t,a]}),e.jsx("div",{className:"space-y-2",children:n.map((l,j)=>e.jsxs("div",{className:"flex items-center justify-between py-2 border-b border-[var(--border-color)] last:border-0",children:[e.jsx("span",{className:"text-[var(--text-primary)]",children:l[i]}),e.jsxs("span",{className:"text-[var(--text-secondary)]",children:[l.count," ",c]})]},`item-${l[i]}-${j}`))})]})}const kt=(t,a,n,i,c,l,j)=>t?t.length===0?e.jsx(Mt,{hasGlobalRoles:a,onAddClick:()=>j(!0)}):n==="table"?e.jsx(Lt,{tenants:t,hasGlobalRoles:a,currentTenant:i,onRemove:c,onNavigate:u=>l(`/administration/tenants/${u}`)}):e.jsx(Ft,{tenants:t,hasGlobalRoles:a,currentTenant:i,onRemove:c}):e.jsx(Pt,{}),Tt=(t,a,n,i,c)=>t?a.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-secondary)]",children:[e.jsx(s.Building2,{className:"w-8 h-8 mx-auto mb-2 opacity-50"}),e.jsx("p",{children:c("userDetail.tenants.addModal.noAvailable","Aucun tenant disponible")})]}):a.map(l=>e.jsx($t,{tenant:l,isSelected:n.has(l.id),onToggle:()=>i(l.id)},l.id)):e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})});function Rt({userTenants:t,allTenants:a,currentTenant:n,hasGlobalRoles:i,showAddTenantModal:c,tenantSearch:l,tenantsViewMode:j,selectedTenantIds:u,isAddingMultipleTenants:f,setShowAddTenantModal:N,setTenantSearch:x,setTenantsViewMode:b,setUserTenants:T,loadTenants:d,toggleTenantSelection:p,selectAllTenants:v,clearTenantSelection:C,closeAddTenantModal:w,handleAddMultipleTenants:F,handleRemoveTenant:V}){const{t:R}=G.useTranslation("admin"),A=ue.useNavigate(),B=i?t:t?.filter(L=>n?.id===L.id),z=()=>{T(null),d()};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(s.Building2,{className:"w-5 h-5"}),R("userDetail.tenants.title","Tenants de l'utilisateur"),i&&e.jsx("span",{className:"ml-2 px-2 py-0.5 text-xs font-medium rounded-full bg-amber-500/10 text-amber-600",children:R("userDetail.tenants.globalView","Vue globale")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Je,{viewMode:j,onChange:b}),e.jsxs("button",{onClick:()=>N(!0),className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),R("userDetail.tenants.add","Ajouter un tenant")]}),e.jsxs("button",{onClick:z,className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(s.RefreshCw,{className:"w-4 h-4"}),R("common.refresh","Actualiser")]})]})]}),kt(B,i,j,n,V,A,N),c&&e.jsx(It,{userTenants:t,allTenants:a,tenantSearch:l,setTenantSearch:x,selectedTenantIds:u,isAddingMultipleTenants:f,toggleTenantSelection:p,selectAllTenants:v,clearTenantSelection:C,closeAddTenantModal:w,handleAddMultipleTenants:F})]})}function Pt(){return e.jsx("div",{className:"flex items-center justify-center h-32",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})})}function Mt({hasGlobalRoles:t,onAddClick:a}){const{t:n}=G.useTranslation("admin");return e.jsxs("div",{className:"flex flex-col items-center justify-center h-32 text-[var(--text-secondary)]",children:[e.jsx(s.Building2,{className:"w-8 h-8 mb-2 opacity-50"}),e.jsx("p",{children:n("userDetail.tenants.noTenants","Cet utilisateur n'appartient à aucun tenant")}),t&&e.jsxs("button",{onClick:a,className:"mt-3 flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors text-sm",children:[e.jsx(s.Plus,{className:"w-4 h-4"}),n("userDetail.tenants.addFirst","Ajouter un premier tenant")]})]})}function Lt({tenants:t,hasGlobalRoles:a,currentTenant:n,onRemove:i,onNavigate:c}){const{t:l}=G.useTranslation("admin"),j=[{key:"name",label:l("userDetail.tenants.table.name","Nom"),sortable:!0,render:u=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`p-1.5 rounded flex-shrink-0 ${u.type==="Business"?"bg-blue-500/10 text-blue-500":"bg-violet-500/10 text-violet-500"}`,children:u.type==="Business"?e.jsx(s.Building2,{className:"w-4 h-4"}):e.jsx(s.User,{className:"w-4 h-4"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx(ue.Link,{to:`/administration/tenants/${u.id}`,className:"font-medium text-[var(--text-primary)] hover:text-[var(--color-accent-600)] hover:underline transition-colors",onClick:f=>f.stopPropagation(),children:u.name}),e.jsx("span",{className:"text-xs text-[var(--text-tertiary)] ml-2",children:u.slug})]})]})},{key:"type",label:l("userDetail.tenants.table.type","Type"),sortable:!0,render:u=>e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded-full text-xs ${u.type==="Business"?"bg-blue-500/10 text-blue-500":"bg-violet-500/10 text-violet-500"}`,children:u.type==="Business"?l("tenants.type.business","Entreprise"):l("tenants.type.personal","Personnel")}),hideOnMobile:!0},{key:"status",label:l("userDetail.tenants.table.status","Statut"),sortable:!0,render:u=>{const f={Active:"bg-green-500/10 text-green-600",Pending:"bg-blue-500/10 text-blue-500",Suspended:"bg-amber-500/10 text-amber-600",Archived:"bg-red-500/10 text-red-500"},N=x=>{switch(x){case"Active":return"bg-green-500";case"Pending":return"bg-blue-500";case"Suspended":return"bg-amber-500";default:return"bg-red-500"}};return e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs ${f[u.status]||""}`,children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full ${N(u.status)}`}),l(`tenants.status.${u.status.toLowerCase()}`,{defaultValue:u.status})]})},hideOnMobile:!0},{key:"membershipSource",label:l("userDetail.tenants.table.source","Source"),render:u=>e.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[u.membershipSource==="Direct"&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-green-600",children:[e.jsx(s.UserCheck,{className:"w-3 h-3"}),l("tenants.directMember","Direct")]}),u.membershipSource==="Group"&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-blue-500",children:[e.jsx(s.Users,{className:"w-3 h-3"}),l("tenants.viaGroup","Groupe")]}),u.membershipSource==="Both"&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-violet-500",children:[e.jsx(s.Link2,{className:"w-3 h-3"}),l("tenants.directAndGroup","Direct + Groupe")]})]}),hideOnMobile:!0},{key:"badges",label:"",width:"100px",render:u=>e.jsxs("div",{className:"flex items-center gap-1",children:[u.isOwner&&e.jsx("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-xs bg-amber-500/10 text-amber-600",title:l("tenants.owner","Owner"),children:e.jsx(s.Crown,{className:"w-3 h-3"})}),u.isDefault&&e.jsx("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-xs bg-[var(--color-accent-500)]/10 text-[var(--color-accent-600)]",title:l("tenants.default","Default"),children:e.jsx(s.Star,{className:"w-3 h-3 fill-current"})})]})},{key:"actions",label:"",width:"60px",align:"right",render:u=>a||n?.id===u.id?e.jsx("button",{onClick:N=>{N.stopPropagation(),i(u.id)},className:"flex items-center gap-1 px-2 py-1 rounded text-xs text-red-500 hover:bg-red-500/10 transition-colors",children:e.jsx(s.Trash2,{className:"w-3 h-3"})}):null}];return e.jsx(D.DataTable,{data:t,columns:j,getRowKey:u=>u.id,onRowClick:u=>c(u.id),compact:!0,emptyMessage:l("userDetail.tenants.noTenants","Cet utilisateur n'appartient à aucun tenant"),emptyIcon:e.jsx(s.Building2,{className:"w-8 h-8 text-[var(--text-tertiary)]"})})}function Ft({tenants:t,hasGlobalRoles:a,currentTenant:n,onRemove:i}){const{t:c}=G.useTranslation("admin"),l=n?t.find(u=>u.id===n.id):t.find(u=>u.isDefault),j=t.filter(u=>u.id!==l?.id);return e.jsxs("div",{className:"space-y-6",children:[l&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-[var(--success-dot)]"}),e.jsx("span",{className:"text-sm font-medium text-[var(--text-secondary)]",children:n?.id===l.id?c("userDetail.tenants.activeTenant","Tenant actif"):c("userDetail.tenants.defaultTenant","Tenant par défaut")})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:e.jsx(Be.TenantCard,{tenant:l,showActions:!0,isSelected:!0,navigateTo:`/administration/tenants/${l.id}`,onRemove:a||n?.id===l.id?()=>i(l.id):void 0})})]}),l&&j.length>0&&e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{className:"flex-1 h-px bg-[var(--border-color)]"}),e.jsx("span",{className:"text-xs text-[var(--text-tertiary)] uppercase tracking-wider",children:c("userDetail.tenants.otherTenants","Autres tenants")}),e.jsx("div",{className:"flex-1 h-px bg-[var(--border-color)]"})]}),l&&j.length>0&&e.jsx("div",{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ${a?"":"opacity-60"}`,children:j.map(u=>{const f=a||n?.id===u.id;return e.jsx(Be.TenantCard,{tenant:u,showActions:!0,isDisabled:!f,navigateTo:`/administration/tenants/${u.id}`,disabledReason:f?void 0:c("userDetail.tenants.notCurrentTenant","Changez de tenant pour gérer ce membre"),onRemove:f?()=>i(u.id):void 0},u.id)})}),!l&&t.length>0&&e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:t.map(u=>{const f=a||n?.id===u.id;return e.jsx(Be.TenantCard,{tenant:u,showActions:!0,isDisabled:!f,navigateTo:`/administration/tenants/${u.id}`,disabledReason:f?void 0:c("userDetail.tenants.notCurrentTenant","Changez de tenant pour gérer ce membre"),onRemove:f?()=>i(u.id):void 0},u.id)})})]})}function It({userTenants:t,allTenants:a,tenantSearch:n,setTenantSearch:i,selectedTenantIds:c,isAddingMultipleTenants:l,toggleTenantSelection:j,selectAllTenants:u,clearTenantSelection:f,closeAddTenantModal:N,handleAddMultipleTenants:x}){const{t:b}=G.useTranslation("admin"),T=new Set(t?.map(p=>p.id)||[]),d=a?.filter(p=>!T.has(p.id)).filter(p=>!n.trim()||p.name.toLowerCase().includes(n.toLowerCase())||p.slug.toLowerCase().includes(n.toLowerCase()))??[];return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:e.jsxs("div",{className:"bg-[var(--bg-card)] rounded-[var(--radius-modal)] shadow-xl w-full max-w-2xl mx-4 max-h-[80vh] flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-[var(--border-color)]",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:b("userDetail.tenants.addModal.title","Ajouter des tenants")}),e.jsx("button",{onClick:N,className:"p-1 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] text-[var(--text-secondary)]",children:e.jsx(s.X,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"p-4 space-y-3 border-b border-[var(--border-color)]",children:[e.jsxs("div",{className:"relative",children:[e.jsx(s.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("input",{type:"text",value:n,onChange:p=>i(p.target.value),placeholder:b("userDetail.tenants.addModal.search","Rechercher un tenant..."),className:"w-full pl-10 pr-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-secondary)] border border-[var(--border-color)] text-[var(--text-primary)] placeholder-[var(--text-tertiary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]",autoFocus:!0})]}),d.length>0&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsx("span",{className:"text-[var(--text-secondary)]",children:c.size>0?b("userDetail.tenants.addModal.selectedCount",{count:c.size,defaultValue:`${c.size} sélectionné(s)`}):b("userDetail.tenants.addModal.availableCount",{count:d.length,defaultValue:`${d.length} tenant(s) disponible(s)`})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>u(d.map(p=>p.id)),className:"text-[var(--color-accent-500)] hover:underline",children:b("userDetail.tenants.addModal.selectAll","Tout sélectionner")}),c.size>0&&e.jsx("button",{onClick:f,className:"text-[var(--text-tertiary)] hover:underline",children:b("userDetail.tenants.addModal.clearSelection","Effacer")})]})]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-4 space-y-2",children:Tt(a,d,c,j,b)}),e.jsxs("div",{className:"flex items-center justify-between p-4 border-t border-[var(--border-color)]",children:[e.jsx("div",{className:"text-sm text-[var(--text-secondary)]",children:c.size>0&&e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-[var(--color-accent-500)] text-white text-xs flex items-center justify-center font-medium",children:c.size}),b("userDetail.tenants.addModal.tenantsSelected","tenant(s) sélectionné(s)")]})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:N,className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:b("common.cancel","Annuler")}),e.jsx("button",{onClick:x,disabled:c.size===0||l,className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-2",children:l?e.jsxs(e.Fragment,{children:[e.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}),b("userDetail.tenants.addModal.adding","Ajout en cours...")]}):e.jsxs(e.Fragment,{children:[e.jsx(s.Plus,{className:"w-4 h-4"}),b("userDetail.tenants.addModal.add","Ajouter"),c.size>0&&` (${c.size})`]})})]})]})]})})}function $t({tenant:t,isSelected:a,onToggle:n}){const{t:i}=G.useTranslation("admin");return e.jsxs("button",{type:"button",onClick:n,className:`w-full flex items-center gap-3 p-3 rounded-[var(--radius-card)] border cursor-pointer transition-colors text-left ${a?"border-[var(--color-accent-500)] bg-[var(--color-accent-500)]/5":"border-[var(--border-color)] bg-[var(--bg-secondary)] hover:border-[var(--color-accent-500)] hover:bg-[var(--bg-hover)]"}`,children:[e.jsx("div",{className:`w-5 h-5 rounded border-2 flex items-center justify-center flex-shrink-0 transition-colors ${a?"bg-[var(--color-accent-500)] border-[var(--color-accent-500)]":"border-[var(--border-color)]"}`,children:a&&e.jsx(s.Check,{className:"w-3 h-3 text-white"})}),e.jsx("div",{className:`flex-shrink-0 w-10 h-10 flex items-center justify-center rounded-[var(--radius-button)] ${t.type==="Business"?"bg-blue-500/10":"bg-violet-500/10"}`,children:t.type==="Business"?e.jsx(s.Building2,{className:"w-5 h-5 text-blue-500"}):e.jsx(s.User,{className:"w-5 h-5 text-violet-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)] truncate",children:t.name}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] truncate",children:t.slug})]}),t.memberCount!==void 0&&e.jsxs("span",{className:"text-xs text-[var(--text-tertiary)] flex-shrink-0",children:[t.memberCount," ",i("userDetail.tenants.members","membres")]})]})}const Et=t=>t?new Date(t).toLocaleString():"-";function Ut({history:t,loadHistory:a,handleRestoreField:n,restoringHistoryId:i,canUpdate:c}){const{t:l}=G.useTranslation("admin"),j=x=>({ProfileUpdated:l("userDetail.history.actions.profileUpdated","Profil mis à jour"),JobInfoUpdated:l("userDetail.history.actions.jobInfoUpdated","Info emploi mise à jour"),AddressUpdated:l("userDetail.history.actions.addressUpdated","Adresse mise à jour"),PhoneUpdated:l("userDetail.history.actions.phoneUpdated","Téléphone mis à jour"),ContactUpdated:l("userDetail.history.actions.contactUpdated","Contact mis à jour"),OrganizationUpdated:l("userDetail.history.actions.organizationUpdated","Organisation mise à jour"),RoleAssigned:l("userDetail.history.actions.roleAssigned","Rôle assigné"),RoleRemoved:l("userDetail.history.actions.roleRemoved","Rôle retiré"),StatusActivated:l("userDetail.history.actions.statusActivated","Compte activé"),StatusDeactivated:l("userDetail.history.actions.statusDeactivated","Compte désactivé"),PasswordReset:l("userDetail.history.actions.passwordReset","Mot de passe réinitialisé"),PasswordResetLinkSent:l("userDetail.history.actions.passwordResetLinkSent","Lien de réinitialisation envoyé"),AccountLocked:l("userDetail.history.actions.accountLocked","Compte verrouillé"),AccountUnlocked:l("userDetail.history.actions.accountUnlocked","Compte déverrouillé"),FailedAttemptCleared:l("userDetail.history.actions.failedAttemptCleared","Tentatives échouées effacées"),SessionEnded:l("userDetail.history.actions.sessionEnded","Session terminée"),AllSessionsEnded:l("userDetail.history.actions.allSessionsEnded","Toutes les sessions terminées"),EntraSynced:l("userDetail.history.actions.entraSynced","Synchronisé avec Entra"),Created:l("userDetail.history.actions.created","Compte créé"),Deleted:l("userDetail.history.actions.deleted","Compte supprimé"),EntraFieldUpdated:l("userDetail.history.actions.entraFieldUpdated","Champ modifié par Entra"),FieldRestored:l("userDetail.history.actions.fieldRestored","Champ restauré"),PermissionAssigned:l("userDetail.history.actions.permissionAssigned","Permission assignée"),PermissionRemoved:l("userDetail.history.actions.permissionRemoved","Permission retirée"),TenantAdded:l("userDetail.history.actions.tenantAdded","Ajouté au tenant"),TenantRemoved:l("userDetail.history.actions.tenantRemoved","Retiré du tenant"),GroupAdded:l("userDetail.history.actions.groupAdded","Ajouté au groupe"),GroupRemoved:l("userDetail.history.actions.groupRemoved","Retiré du groupe"),AccessDenied:l("userDetail.history.actions.accessDenied","Accès refusé")})[x]||x,u=x=>["ProfileUpdated","PhoneUpdated","JobInfoUpdated","AddressUpdated","OrganizationUpdated","ContactUpdated","EntraFieldUpdated"].includes(x.actionName)&&!!x.fieldChanged&&x.oldValue!==null&&x.oldValue!==void 0,f=x=>x==="AccessDenied"?e.jsx(s.ShieldX,{className:"w-4 h-4"}):x==="FieldRestored"?e.jsx(s.RotateCcw,{className:"w-4 h-4"}):x.includes("Role")?e.jsx(s.Shield,{className:"w-4 h-4"}):x.includes("Password")?e.jsx(s.Key,{className:"w-4 h-4"}):x.includes("Status")||x.includes("Lock")?e.jsx(s.User,{className:"w-4 h-4"}):x.includes("Session")?e.jsx(s.LogOut,{className:"w-4 h-4"}):x.includes("Entra")?e.jsx(s.Cloud,{className:"w-4 h-4"}):x.includes("Phone")?e.jsx(s.Phone,{className:"w-4 h-4"}):x.includes("Address")?e.jsx(s.MapPin,{className:"w-4 h-4"}):x.includes("Job")||x.includes("Organization")?e.jsx(s.Briefcase,{className:"w-4 h-4"}):e.jsx(s.Edit3,{className:"w-4 h-4"}),N=()=>{a()};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(s.History,{className:"w-5 h-5"}),l("userDetail.history.title","Historique des modifications")]}),e.jsxs("button",{onClick:N,className:"flex items-center gap-2 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(s.RefreshCw,{className:"w-4 h-4"}),l("common.refresh","Actualiser")]})]}),!t&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(s.Loader2,{className:"w-6 h-6 animate-spin text-[var(--color-accent-500)]"})}),t&&(!Array.isArray(t)||t.length===0)&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx(s.History,{className:"w-12 h-12 mx-auto mb-4 text-[var(--text-tertiary)]"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:l("userDetail.history.noHistory","Aucun historique de modification")})]}),t&&Array.isArray(t)&&t.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-4 top-0 bottom-0 w-0.5 bg-[var(--border-color)]"}),e.jsx("div",{className:"space-y-4",children:t.map(x=>e.jsxs("div",{className:"relative pl-10",children:[e.jsx("div",{className:"absolute left-2 top-2 w-5 h-5 rounded-full bg-[var(--bg-secondary)] border-2 border-[var(--color-accent-500)] flex items-center justify-center",children:f(x.actionName)}),e.jsx("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:j(x.actionName)}),x.fieldChanged&&e.jsx("span",{className:"px-2 py-0.5 rounded-[var(--radius-badge)] text-xs bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",children:x.fieldChanged})]}),(x.oldValue||x.newValue)&&e.jsxs("div",{className:"text-sm text-[var(--text-secondary)] mt-2",children:[x.oldValue&&e.jsx("span",{className:"inline-flex items-center gap-1",children:e.jsx("span",{className:"text-red-500 line-through",children:x.oldValue})}),x.oldValue&&x.newValue&&e.jsx("span",{className:"mx-2",children:"→"}),x.newValue&&e.jsx("span",{className:"text-green-500",children:x.newValue})]}),e.jsxs("div",{className:"flex items-center gap-4 mt-2 text-xs text-[var(--text-tertiary)]",children:[e.jsx("span",{children:Et(x.createdAt)}),x.changedByUserName&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(s.User,{className:"w-3 h-3"}),x.changedByUserName]})]})]}),u(x)&&e.jsxs("button",{onClick:()=>n(x.id),disabled:i===x.id||!c,className:`flex items-center gap-1.5 px-3 py-1.5 rounded-[var(--radius-button)] text-xs font-medium transition-colors disabled:opacity-50 ${c?"bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--color-accent-500)]/10 hover:text-[var(--color-accent-600)]":"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"}`,title:c?l("userDetail.history.restore","Restaurer cette valeur"):l("common.noPermission","Permission insuffisante"),children:[i===x.id?e.jsx(s.Loader2,{className:"w-3.5 h-3.5 animate-spin"}):e.jsx(s.RotateCcw,{className:"w-3.5 h-3.5"}),l("userDetail.history.restore","Restaurer")]})]})})]},x.id))})]})]})}function zt({userId:t}){const{t:a}=G.useTranslation("admin"),[n,i]=o.useState([]),[c,l]=o.useState([]),[j,u]=o.useState(void 0),[f,N]=o.useState(!0),[x,b]=o.useState(!0),[T,d]=o.useState(null),[p,v]=o.useState(new Set),C=o.useCallback(async()=>{b(!0);try{const R=await D.adminApi.users.getTenants(t);l(R)}catch{l([])}finally{b(!1)}},[t]),w=o.useCallback(async()=>{N(!0),d(null);try{const R=await D.adminApi.users.getApplicationAccess(t,j);i(R)}catch(R){i([]),d(R instanceof Error?R.message:a("userDetail.applications.loadError"))}finally{N(!1)}},[t,j,a]);o.useEffect(()=>{C()},[C]),o.useEffect(()=>{w()},[w]);const F=R=>{v(A=>{const B=new Set(A);return B.has(R)?B.delete(R):B.add(R),B})},V=o.useMemo(()=>j?c.find(R=>R.id===j)?.name??null:null,[j,c]);return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:a("userDetail.applications.title")}),e.jsxs("div",{className:"flex items-center gap-2",children:[!x&&c.length>0&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(s.Filter,{className:"w-4 h-4 text-[var(--text-muted)]"}),e.jsxs("select",{value:j??"",onChange:R=>u(R.target.value||void 0),className:"text-sm border border-[var(--border-color)] rounded-[var(--radius-button)] bg-[var(--bg-card)] text-[var(--text-primary)] px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]/30",children:[e.jsx("option",{value:"",children:a("userDetail.applications.allTenants")}),c.map(R=>e.jsx("option",{value:R.id,children:R.name},R.id))]})]}),e.jsx("button",{onClick:()=>{w()},className:"p-2 rounded-[var(--radius-button)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",title:a("common:refresh","Refresh"),children:e.jsx(s.RefreshCw,{className:"w-4 h-4"})})]})]}),V&&e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-500)]/5 border border-[var(--color-accent-500)]/20 text-sm text-[var(--color-accent-600)]",children:[e.jsx(s.Building2,{className:"w-4 h-4"}),a("userDetail.applications.filteredByTenant",{tenant:V})]}),f?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(s.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})}):T?e.jsxs("div",{className:"text-center py-12 text-[var(--error-text)]",children:[e.jsx(s.Boxes,{className:"w-12 h-12 mx-auto mb-4 text-[var(--error-text)] opacity-50"}),e.jsx("p",{children:T})]}):n.length===0?e.jsxs("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:[e.jsx(s.Boxes,{className:"w-12 h-12 mx-auto mb-4 text-[var(--text-tertiary)]"}),e.jsx("p",{children:a("userDetail.applications.noAccess")})]}):e.jsx("div",{className:"space-y-2",children:n.map(R=>e.jsx(Vt,{app:R,isExpanded:p.has(R.applicationId),onToggle:()=>F(R.applicationId)},R.applicationId))})]})}function Vt({app:t,isExpanded:a,onToggle:n}){const{t:i}=G.useTranslation("admin"),c=nt,l=t.icon?c[t.icon]:null,j=o.useMemo(()=>{const u={};for(const f of t.permissions){const N=f.moduleName||"_global";u[N]||(u[N]={moduleName:f.moduleName||i("userDetail.applications.globalPermissions"),permissions:[]}),u[N].permissions.push(f)}return Object.values(u)},[t.permissions,i]);return e.jsxs("div",{className:"border border-[var(--border-color)] rounded-[var(--radius-card)] bg-[var(--bg-card)] overflow-hidden",children:[e.jsxs("button",{onClick:n,className:"w-full flex items-center gap-3 p-4 text-left hover:bg-[var(--bg-hover)] transition-colors",children:[a?e.jsx(s.ChevronDown,{className:"w-4 h-4 text-[var(--text-muted)] flex-shrink-0"}):e.jsx(s.ChevronRight,{className:"w-4 h-4 text-[var(--text-muted)] flex-shrink-0"}),e.jsx("div",{className:"w-9 h-9 rounded-[var(--radius-button)] bg-[var(--color-accent-500)]/10 flex items-center justify-center flex-shrink-0",children:l?e.jsx(l,{className:"w-5 h-5 text-[var(--color-accent-600)]"}):e.jsx(s.Layers,{className:"w-5 h-5 text-[var(--color-accent-600)]"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)] truncate",children:t.applicationLabel}),e.jsx("p",{className:"text-xs text-[var(--text-muted)] truncate",children:t.applicationCode})]}),t.hasFullAccess?e.jsx("span",{className:"px-2.5 py-1 text-xs font-medium rounded-full bg-green-500/10 text-green-600 border border-green-500/20 flex-shrink-0",children:i("userDetail.applications.fullAccess")}):e.jsx("span",{className:"px-2.5 py-1 text-xs font-medium rounded-full bg-[var(--color-accent-500)]/10 text-[var(--color-accent-600)] border border-[var(--color-accent-500)]/20 flex-shrink-0",children:i("userDetail.applications.permissionCount",{count:t.permissions.length})}),e.jsxs("span",{className:"text-xs text-[var(--text-muted)] flex items-center gap-1 flex-shrink-0",children:[e.jsx(s.Shield,{className:"w-3.5 h-3.5"}),t.roles.length]})]}),a&&e.jsxs("div",{className:"border-t border-[var(--border-color)] p-4 space-y-4 bg-[var(--bg-secondary)]",children:[e.jsxs("div",{children:[e.jsx("h5",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wider mb-2",children:i("userDetail.applications.rolesGrantingAccess")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:t.roles.map(u=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-full bg-[var(--bg-card)] border border-[var(--border-color)] text-[var(--text-primary)]",children:[e.jsx(s.Shield,{className:"w-3 h-3 text-[var(--color-accent-500)]"}),u.roleName,u.source==="Group"&&e.jsxs("span",{className:"text-[var(--text-tertiary)]",children:["(",i("userDetail.applications.viaGroup"),")"]})]},u.roleId))})]}),!t.hasFullAccess&&t.permissions.length>0&&e.jsxs("div",{children:[e.jsx("h5",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wider mb-2",children:i("userDetail.applications.permissionsDetail")}),e.jsx("div",{className:"space-y-3",children:j.map(u=>e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium text-[var(--text-secondary)] mb-1",children:u.moduleName}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:u.permissions.map(f=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded bg-[var(--bg-card)] border border-[var(--border-color)] text-[var(--text-secondary)]",children:[e.jsx(s.Key,{className:"w-2.5 h-2.5 text-[var(--text-tertiary)]"}),f.action||Ot(f.path)]},f.path))})]},u.moduleName))})]}),t.hasFullAccess&&e.jsx("p",{className:"text-xs text-green-600 italic",children:i("userDetail.applications.fullAccessDescription")})]})]})}function Ot(t){return t.split(".").at(-1)}const Gt=t=>t?/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t):!1;function Bt({userId:t,tenantSlug:a}){const{t:n}=G.useTranslation("admin"),i=!Gt(t),c=o.useMemo(()=>a?D.createAdminApi(a):D.adminApi,[a]),[l,j]=o.useState(null),[u,f]=o.useState(!0),[N,x]=o.useState(!1),[b,T]=o.useState(null),[d,p]=o.useState(null),[v,C]=o.useState({firstName:"",lastName:"",email:"",roleIds:[]}),[w,F]=o.useState(null),[V,R]=o.useState(!1),[A,B]=o.useState(null),[z,L]=o.useState(null),[q,_]=o.useState(null),[E,M]=o.useState(null),[H,Z]=o.useState(null),[S,I]=o.useState(null),P=o.useCallback(async(g=!1)=>{if(!(!t||i))try{g||f(!0);const X=await D.adminApi.users.getById(t);j(X),C({firstName:X.firstName,lastName:X.lastName,email:X.email,roleIds:X.roles.map(le=>le.id)})}catch(X){console.error("Failed to load user:",X),T(n("userDetail.errors.loadFailed"))}finally{g||f(!1)}},[t,i,n]),K=o.useCallback(async()=>{try{R(!0);const g=await D.adminApi.roles.getAssignable();F(Array.isArray(g)?g:[])}catch(g){console.error("Failed to load roles:",g),F([])}finally{R(!1)}},[]),Q=o.useCallback(async()=>{try{const g=await D.adminApi.users.getOrganizationReferences();M(g)}catch(g){console.error("Failed to load organization references:",g)}},[]),ee=o.useCallback(async()=>{if(!(!t||i))try{const g=await c.users.getSessions(t);B(g)}catch(g){console.error("Failed to load sessions:",g)}},[t,i,c]),ne=o.useCallback(async()=>{if(!(!t||i))try{const g=await c.users.getActivity(t);L(g)}catch(g){console.error("Failed to load activity:",g)}},[t,i,c]),te=o.useCallback(async()=>{if(!(!t||i))try{const g=await D.adminApi.users.getHistory(t,100);_(g)}catch(g){console.error("Failed to load history:",g),_([])}},[t,i]),re=o.useCallback(async()=>{if(!(!t||i))try{const g=await D.adminApi.users.getTenants(t);Z(g)}catch(g){console.error("Failed to load tenants:",g),Z([])}},[t,i]),r=o.useCallback(async()=>{try{const g=await D.adminApi.tenants.getAll({status:"Active"});I(g.items)}catch(g){console.error("Failed to load all tenants:",g),I([])}},[]),h=o.useCallback(async g=>{if(g.preventDefault(),!!t){x(!0),T(null),p(null);try{const X={firstName:v.firstName,lastName:v.lastName,email:v.email!==l?.email?v.email:void 0,roleIds:v.roleIds};await D.adminApi.users.update(t,X),p(n("userDetail.success.infoSaved")),await P()}catch(X){T(X instanceof Error?X.message:n("userDetail.errors.saveFailed"))}finally{x(!1)}}},[t,v,l?.email,n,P]);return o.useEffect(()=>{P()},[P]),{user:l,formData:v,setFormData:C,isCreateMode:i,loading:u,error:b,success:d,setError:T,setSuccess:p,roles:w,rolesLoading:V,sessions:A,activity:z,history:q,orgReferences:E,userTenants:H,allTenants:S,loadUser:P,loadRoles:K,loadOrgReferences:Q,loadSessions:ee,loadActivity:ne,loadHistory:te,loadTenants:re,loadAllTenants:r,setHistory:_,setUserTenants:Z,handleSaveInfo:h,saving:N}}function qt({userId:t,onUserReload:a,onSessionsReload:n,setError:i,setSuccess:c}){const{t:l}=G.useTranslation("admin"),[j,u]=o.useState(""),[f,N]=o.useState(null),[x,b]=o.useState(!1),[T,d]=o.useState(!1),[p,v]=o.useState(!1),C=o.useCallback(async()=>{if(t){d(!0),i(null),c(null),N(null);try{await D.adminApi.users.sendPasswordResetLink(t),c(l("userDetail.success.resetLinkSent","Lien de réinitialisation envoyé par email"))}catch(L){i(L instanceof Error?L.message:l("userDetail.errors.sendResetLinkFailed","Échec de l'envoi du lien"))}finally{d(!1)}}},[t,i,c,l]),w=o.useCallback(async()=>{if(t){d(!0),i(null),c(null);try{const L=j.trim()||void 0,q=await D.adminApi.users.resetPasswordDirect(t,L);N(q.temporaryPassword),u(""),b(!0),c(l("userDetail.success.passwordResetDirect","Mot de passe réinitialisé. Communiquez le mot de passe temporaire à l'utilisateur."))}catch(L){i(L instanceof Error?L.message:l("userDetail.errors.passwordResetFailed"))}finally{d(!1)}}},[t,j,i,c,l]),F=o.useCallback(async L=>{if(t)try{L?await D.adminApi.users.deactivate(t):await D.adminApi.users.activate(t),await a(),c(l(L?"userDetail.success.deactivated":"userDetail.success.activated"))}catch{i(l("userDetail.errors.statusChangeFailed"))}},[t,a,i,c,l]),V=o.useCallback(async L=>{if(t)try{await D.adminApi.users.endSession(t,L),await n(),c(l("userDetail.success.sessionEnded"))}catch{i(l("userDetail.errors.endSessionFailed"))}},[t,n,i,c,l]),R=o.useCallback(async()=>{if(t&&confirm(l("userDetail.confirmEndAllSessions")))try{await D.adminApi.users.endAllSessions(t),await n(),c(l("userDetail.success.allSessionsEnded"))}catch{i(l("userDetail.errors.endAllSessionsFailed"))}},[t,n,i,c,l]),A=o.useCallback(async(L,q)=>{if(t)try{await D.adminApi.users.unlock(t,{reason:L,mustChangePassword:q}),await a(),c(l("userDetail.success.unlocked"))}catch{i(l("userDetail.errors.unlockFailed"))}},[t,a,i,c,l]),B=o.useCallback(async()=>{if(t)try{await D.adminApi.users.clearFailedAttempts(t),await a(),c("Tentatives échouées réinitialisées avec succès")}catch{i("Échec de la réinitialisation des tentatives échouées")}},[t,a,i,c]),z=o.useCallback(async L=>{try{await navigator.clipboard.writeText(L),c(l("userDetail.success.copied","Mot de passe copié dans le presse-papiers"))}catch{i(l("userDetail.errors.copyFailed","Échec de la copie"))}},[i,c,l]);return{newPassword:j,setNewPassword:u,temporaryPassword:f,showTemporaryPassword:x,setShowTemporaryPassword:b,showUnlockModal:p,setShowUnlockModal:v,handleSendResetLink:C,handleResetPasswordDirect:w,handleToggleStatus:F,handleEndSession:V,handleEndAllSessions:R,handleUnlock:A,handleClearFailedAttempts:B,copyToClipboard:z,saving:T}}const Ht=()=>({phones:{phoneNumber:"",mobilePhone:"",faxNumber:""},address:{streetAddress:"",city:"",state:"",postalCode:"",country:""},jobInfo:{employeeId:"",employeeType:"",employeeHireDate:"",employeeOrgData:""},organization:{company:{id:"",customValue:void 0},department:{id:"",customValue:void 0},jobTitle:{id:"",customValue:void 0},office:{id:"",customValue:void 0},managerId:""}});function Wt({userId:t,user:a,onUserReload:n,onHistoryReload:i,setError:c,setSuccess:l}){const{t:j}=G.useTranslation("admin"),[u,f]=o.useState(null),[N,x]=o.useState(Ht),[b,T]=o.useState(!1),d=o.useCallback(C=>{a&&(f(C),x(w=>{switch(C){case"phones":return{...w,phones:{phoneNumber:a.phoneNumber||"",mobilePhone:a.mobilePhone||"",faxNumber:a.faxNumber||""}};case"address":return{...w,address:{streetAddress:a.streetAddress||"",city:a.city||"",state:a.state||"",postalCode:a.postalCode||"",country:a.country||""}};case"jobInfo":return{...w,jobInfo:{employeeId:a.employeeId||"",employeeType:a.employeeType||"",employeeHireDate:a.employeeHireDate?.split("T")[0]||"",employeeOrgData:a.employeeOrgData||""}};case"organization":return{...w,organization:{company:{id:a.companyId||"",customValue:void 0},department:{id:a.departmentId||"",customValue:void 0},jobTitle:{id:a.jobTitleId||"",customValue:void 0},office:{id:a.officeId||"",customValue:void 0},managerId:a.managerId||""}};default:return w}}))},[a]),p=o.useCallback(()=>{f(null)},[]),v=o.useCallback(async C=>{if(t){T(!0),c(null),l(null);try{switch(C){case"phones":await D.adminApi.users.updatePhones(t,{phoneNumber:N.phones.phoneNumber||null,mobilePhone:N.phones.mobilePhone||null,faxNumber:N.phones.faxNumber||null});break;case"address":await D.adminApi.users.updateAddress(t,{streetAddress:N.address.streetAddress||null,city:N.address.city||null,state:N.address.state||null,postalCode:N.address.postalCode||null,country:N.address.country||null});break;case"jobInfo":await D.adminApi.users.updateJobInfo(t,{employeeId:N.jobInfo.employeeId||null,employeeType:N.jobInfo.employeeType||null,employeeHireDate:N.jobInfo.employeeHireDate||null,employeeOrgData:N.jobInfo.employeeOrgData||null});break;case"organization":{const w=N.organization;await D.adminApi.users.updateOrganization(t,{companyId:w.company.customValue?null:w.company.id||null,companyName:w.company.customValue||null,departmentId:w.department.customValue?null:w.department.id||null,departmentName:w.department.customValue||null,jobTitleId:w.jobTitle.customValue?null:w.jobTitle.id||null,jobTitleName:w.jobTitle.customValue||null,officeId:w.office.customValue?null:w.office.id||null,officeName:w.office.customValue||null,managerId:w.managerId||null});break}}f(null),l(j("userDetail.success.sectionSaved","Section mise à jour avec succès")),await n(),i()}catch(w){c(w instanceof Error?w.message:j("userDetail.errors.saveFailed"))}finally{T(!1)}}},[t,N,n,i,c,l,j]);return{editingSection:u,sectionData:N,setSectionData:x,startEditingSection:d,cancelEditing:p,handleSaveSection:v,saving:b}}function _t({userId:t,isCreateMode:a,setError:n,setSuccess:i}){const{t:c}=G.useTranslation("admin"),[l,j]=o.useState(null),[u,f]=o.useState(null),[N,x]=o.useState(!1),[b,T]=o.useState(""),[d,p]=o.useState("cards"),[v,C]=o.useState(new Set),[w,F]=o.useState(!1),V=o.useCallback(async()=>{if(!(!t||a))try{const E=await D.adminApi.users.getTenants(t);j(E)}catch(E){console.error("Failed to load tenants:",E),j([])}},[t,a]),R=o.useCallback(async()=>{try{const E=await D.adminApi.tenants.getAll({status:"Active"});f(E.items)}catch(E){console.error("Failed to load all tenants:",E),f([])}},[]),A=o.useCallback(E=>{C(M=>{const H=new Set(M);return H.has(E)?H.delete(E):H.add(E),H})},[]),B=o.useCallback(E=>{C(new Set(E))},[]),z=o.useCallback(()=>{C(new Set)},[]),L=o.useCallback(()=>{x(!1),T(""),C(new Set)},[]),q=o.useCallback(async()=>{if(!(!t||v.size===0))try{F(!0),n(null);const E=Array.from(v);for(const M of E)await D.adminApi.tenants.addMember(M,{userId:t});L(),await V(),i(c("userDetail.tenants.addMultipleSuccess",{count:E.length,defaultValue:`${E.length} tenant(s) ajouté(s) avec succès`})),setTimeout(()=>i(null),3e3)}catch(E){console.error("Failed to add tenants:",E),n(c("userDetail.tenants.addError","Erreur lors de l'ajout du tenant")),setTimeout(()=>n(null),3e3)}finally{F(!1)}},[t,v,L,V,n,i,c]),_=o.useCallback(async E=>{if(t)try{await D.adminApi.tenants.removeMember(E,t),await V(),i(c("userDetail.tenants.removeSuccess","Tenant retiré avec succès")),setTimeout(()=>i(null),3e3)}catch(M){console.error("Failed to remove tenant:",M),n(c("userDetail.tenants.removeError","Erreur lors du retrait du tenant")),setTimeout(()=>n(null),3e3)}},[t,V,n,i,c]);return o.useEffect(()=>{N&&!u&&R()},[N,u,R]),{userTenants:l,allTenants:u,showAddTenantModal:N,tenantSearch:b,tenantsViewMode:d,selectedTenantIds:v,isAddingMultipleTenants:w,setShowAddTenantModal:x,setTenantSearch:T,setTenantsViewMode:p,setUserTenants:j,loadTenants:V,loadAllTenants:R,toggleTenantSelection:A,selectAllTenants:B,clearTenantSelection:z,closeAddTenantModal:L,handleAddMultipleTenants:q,handleRemoveTenant:_}}const Kt=["info","security","activitySessions","roles","permissions","applications","tenants","groups","history"];function Xt(){const{t}=G.useTranslation("admin"),{id:a}=ue.useParams(),n=ue.useNavigate(),[i,c]=ue.useSearchParams(),{currentTenant:l,hasGlobalRoles:j}=D.useTenant(),{tenants:u}=Xe.useAdminTenants(),{hasPermission:f}=D.useAuth(),N=f("administration.users.update"),x=f("administration.users.delete"),b=f("administration.users.execute"),T=()=>{const $=i.get("tab");return $&&Kt.includes($)?$:"info"},[d,p]=o.useState(T),v=Bt({userId:a,tenantSlug:l?.slug??null}),{user:C,formData:w,setFormData:F,isCreateMode:V,loading:R,error:A,success:B,setError:z,setSuccess:L,roles:q,rolesLoading:_,sessions:E,activity:M,history:H,orgReferences:Z,loadUser:S,loadRoles:I,loadOrgReferences:P,loadSessions:K,loadActivity:Q,loadHistory:ee,setHistory:ne,handleSaveInfo:te,saving:re}=v,r=qt({userId:a,onUserReload:S,onSessionsReload:K,setError:z,setSuccess:L}),h=Wt({userId:a,user:C,onUserReload:S,onHistoryReload:()=>ne(null),setError:z,setSuccess:L}),g=_t({userId:a,isCreateMode:V,setError:z,setSuccess:L}),[X,le]=o.useState(null),[oe,he]=o.useState("global"),[me,fe]=o.useState(null),[Se,xe]=o.useState(null),[,pe]=o.useState(!1),[ye,je]=o.useState(null),[be,Ae]=o.useState(!1),Ne=o.useCallback(async()=>{if(!(!a||V)){xe(null);try{const ce=(await D.adminApi.users.getTenants(a)).map(de=>({tenantId:de.id,tenantSlug:de.slug,tenantUserId:a,tenantName:de.name,tenantType:de.type}));fe(ce)}catch($){console.error("Failed to load tenant memberships:",$),xe(t("userRoles.scope.loadError","Erreur lors du chargement des tenants")),fe([])}}},[a,V,t]),we=o.useCallback(async()=>{if(a){Ae(!0);try{const $=await D.adminApi.users.getConsolidatedRoles(a);je($)}catch($){console.error("Failed to load consolidated roles:",$),je([])}finally{Ae(!1)}}},[a]),ze=async $=>{if(a){le($),z(null);try{await D.adminApi.users.restoreFromHistory(a,$),L(t("userDetail.history.restoreSuccess","Champ restauré avec succès")),ee(),S()}catch(ce){console.error("Failed to restore field:",ce),z(t("userDetail.history.restoreError","Erreur lors de la restauration"))}finally{le(null)}}};o.useEffect(()=>{he("global"),fe(null),je(null)},[a]);const De=g.userTenants,ke=g.loadTenants,Te=o.useCallback(()=>{V||((d==="info"||d==="roles")&&!q&&I(),d==="info"&&!Z&&P(),d==="roles"&&!ye&&we(),d==="activitySessions"&&(E||K(),M||Q()),d==="tenants"&&!De&&ke(),d==="history"&&!H&&ee(),(d==="roles"||d==="permissions")&&!me&&Ne())},[d,V,q,Z,E,M,De,me,ye,H,I,P,we,K,Q,ee,Ne,ke]);o.useEffect(()=>{Te()},[Te]),o.useEffect(()=>{if(!me){pe(!1);return}if(l){const $=me.find(ce=>ce.tenantId===l.id);$?(he({tenantId:$.tenantId,tenantSlug:$.tenantSlug,tenantUserId:$.tenantUserId,tenantName:$.tenantName}),pe(!1)):(he("global"),pe(!0))}else he("global"),pe(!1)},[l,me]),o.useEffect(()=>{i.get("tab")!==d&&c({tab:d},{replace:!0})},[d,i,c]);const Ve=[{id:"info",label:t("userDetail.tabs.info"),icon:e.jsx(s.User,{className:"w-4 h-4"})},{id:"security",label:t("userDetail.tabs.security"),icon:e.jsx(s.Key,{className:"w-4 h-4"})},{id:"activitySessions",label:t("userDetail.tabs.activitySessions","Activité"),icon:e.jsx(s.Activity,{className:"w-4 h-4"})},{id:"roles",label:t("userDetail.tabs.roles"),icon:e.jsx(s.Shield,{className:"w-4 h-4"})},{id:"permissions",label:t("userDetail.tabs.permissions"),icon:e.jsx(s.Key,{className:"w-4 h-4"})},{id:"applications",label:t("userDetail.tabs.applications","Applications"),icon:e.jsx(s.AppWindow,{className:"w-4 h-4"})},{id:"tenants",label:t("userDetail.tabs.tenants","Tenants"),icon:e.jsx(s.Building2,{className:"w-4 h-4"})},{id:"groups",label:t("userDetail.tabs.groups","Groupes"),icon:e.jsx(s.Users,{className:"w-4 h-4"})},{id:"history",label:t("userDetail.tabs.history","Historique"),icon:e.jsx(s.History,{className:"w-4 h-4"})}];return R?e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx(s.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})}):C?e.jsxs("div",{className:"space-y-6",children:[e.jsx(D.Breadcrumb,{items:[{label:t("header.title"),href:"/administration"},{label:t("users.title"),href:"/administration/users"},{label:C.fullName}]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("button",{onClick:()=>n("/administration/users"),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(s.ArrowLeft,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-xl sm:text-2xl font-bold text-[var(--text-primary)]",children:C.fullName}),e.jsx("p",{className:"text-sm sm:text-base text-[var(--text-secondary)]",children:C.email})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`px-3 py-1 rounded-[var(--radius-badge)] text-sm ${C.isActive?"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)]":"bg-[var(--error-bg)] text-[var(--error-text)] border border-[var(--error-border)]"}`,children:C.isActive?t("users.status.active"):t("users.status.inactive")}),e.jsx("span",{className:"px-3 py-1 rounded-[var(--radius-badge)] text-sm bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",children:C.userType}),e.jsx(D.Slot,{name:"users.detail.header.actions",context:{user:C,reload:S}})]})]}),A&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] text-[var(--error-text)] flex items-center gap-2",children:[e.jsx(s.AlertTriangle,{className:"w-5 h-5"}),A]}),B&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--success-bg)] border border-[var(--success-border)] text-[var(--success-text)] flex items-center gap-2",children:[e.jsx(s.CheckCircle,{className:"w-5 h-5"}),B]}),e.jsxs("div",{className:"flex gap-1 p-1 overflow-x-auto bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)]",children:[Ve.map($=>e.jsxs("button",{onClick:()=>p($.id),className:`flex items-center gap-2 px-4 py-2 whitespace-nowrap rounded-[var(--radius-button)] font-medium transition-colors ${d===$.id?"bg-[var(--color-accent-600)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,children:[$.icon,$.label]},$.id)),e.jsx(D.Slot,{name:"users.detail.tabs",context:{user:C,activeTab:d,setActiveTab:p}})]}),e.jsxs("div",{className:"bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)] p-4 sm:p-6",children:[d==="info"&&e.jsx(pt,{user:C,formData:w,setFormData:F,handleSaveInfo:te,saving:re||h.saving,canUpdate:N,editingSection:h.editingSection,sectionData:h.sectionData,setSectionData:h.setSectionData,startEditingSection:h.startEditingSection,cancelEditing:h.cancelEditing,handleSaveSection:h.handleSaveSection,orgReferences:Z}),d==="security"&&a&&e.jsx(ft,{user:C,userId:a,canUpdate:N,canDelete:x,canExecute:b,newPassword:r.newPassword,setNewPassword:r.setNewPassword,temporaryPassword:r.temporaryPassword,showTemporaryPassword:r.showTemporaryPassword,setShowTemporaryPassword:r.setShowTemporaryPassword,saving:r.saving,showUnlockModal:r.showUnlockModal,setShowUnlockModal:r.setShowUnlockModal,handleSendResetLink:r.handleSendResetLink,handleResetPasswordDirect:r.handleResetPasswordDirect,handleToggleStatus:r.handleToggleStatus,handleEndAllSessions:r.handleEndAllSessions,handleUnlock:r.handleUnlock,handleClearFailedAttempts:r.handleClearFailedAttempts,copyToClipboard:r.copyToClipboard,setError:z}),d==="activitySessions"&&e.jsx(Nt,{sessions:E,activity:M,isCreateMode:V,canUpdate:N,handleEndSession:r.handleEndSession,handleEndAllSessions:r.handleEndAllSessions}),(d==="roles"||d==="permissions")&&a&&Se&&e.jsxs("div",{className:"mb-4 flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 text-amber-700",children:[e.jsx(s.AlertTriangle,{className:"w-4 h-4"}),e.jsx("span",{className:"text-sm",children:Se})]}),d==="roles"&&a&&e.jsx(it,{userId:a,assignedRoles:ye??[],onSave:async()=>{await Promise.all([S(!0),we()])},onGlobalRolesUpdate:async $=>{const ce={firstName:w.firstName,lastName:w.lastName,roleIds:$};await D.adminApi.users.update(a,ce)},roles:q??[],loading:_||be,globalRoleIds:w.roleIds,tenantId:oe!=="global"?oe.tenantId:void 0,isGlobalScope:oe==="global",adminTenants:u.map($=>({tenantId:$.id,tenantSlug:$.slug,tenantName:$.name,tenantType:$.type})),tenantMemberships:(me??[]).map($=>({tenantId:$.tenantId,tenantSlug:$.tenantSlug,tenantUserId:$.tenantUserId,tenantName:$.tenantName}))}),d==="permissions"&&a&&e.jsx(mt,{userId:a,tenantId:oe!=="global"?oe.tenantId:void 0}),d==="applications"&&a&&e.jsx(zt,{userId:a}),d==="groups"&&C&&a&&e.jsx(xt,{userId:a,userName:C.fullName}),d==="tenants"&&e.jsx(Rt,{userTenants:g.userTenants,allTenants:g.allTenants,currentTenant:l,hasGlobalRoles:j,showAddTenantModal:g.showAddTenantModal,tenantSearch:g.tenantSearch,tenantsViewMode:g.tenantsViewMode,selectedTenantIds:g.selectedTenantIds,isAddingMultipleTenants:g.isAddingMultipleTenants,setShowAddTenantModal:g.setShowAddTenantModal,setTenantSearch:g.setTenantSearch,setTenantsViewMode:g.setTenantsViewMode,setUserTenants:g.setUserTenants,loadTenants:g.loadTenants,toggleTenantSelection:g.toggleTenantSelection,selectAllTenants:g.selectAllTenants,clearTenantSelection:g.clearTenantSelection,closeAddTenantModal:g.closeAddTenantModal,handleAddMultipleTenants:g.handleAddMultipleTenants,handleRemoveTenant:g.handleRemoveTenant}),d==="history"&&e.jsx(Ut,{history:H,loadHistory:ee,handleRestoreField:ze,restoringHistoryId:X,canUpdate:N}),e.jsx(D.Slot,{name:"users.detail.tabs.content",context:{user:C,activeTab:d,reload:S}})]})]}):e.jsxs("div",{className:"text-center py-12",children:[e.jsx("p",{className:"text-[var(--text-secondary)]",children:t("userDetail.notFound")}),e.jsx("button",{onClick:()=>n("/administration/users"),className:"mt-4 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white",children:t("userDetail.backToList")})]})}exports.UserDetailPage=Xt;
19
- //# sourceMappingURL=UserDetailPage-CV2VCE46.js.map
19
+ //# sourceMappingURL=UserDetailPage-_J6lcKAU.js.map