@atlashub/smartstack 3.29.0 → 3.31.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 (322) hide show
  1. package/dist/chunks/{AgentSkillsPage-ChykpPZx.js → AgentSkillsPage-CDMhqrhE.js} +2 -2
  2. package/dist/chunks/{AgentSkillsPage-ChykpPZx.js.map → AgentSkillsPage-CDMhqrhE.js.map} +1 -1
  3. package/dist/chunks/{AgentSkillsPage-ABpqnnyK.js → AgentSkillsPage-DcvOMm5k.js} +2 -2
  4. package/dist/chunks/{AgentSkillsPage-ABpqnnyK.js.map → AgentSkillsPage-DcvOMm5k.js.map} +1 -1
  5. package/dist/chunks/{AgentWorkloadPage-BltzNlXI.js → AgentWorkloadPage-DYBPNzjQ.js} +2 -2
  6. package/dist/chunks/{AgentWorkloadPage-BltzNlXI.js.map → AgentWorkloadPage-DYBPNzjQ.js.map} +1 -1
  7. package/dist/chunks/{AgentWorkloadPage-BI5QWJyQ.js → AgentWorkloadPage-YpJSDaWc.js} +2 -2
  8. package/dist/chunks/{AgentWorkloadPage-BI5QWJyQ.js.map → AgentWorkloadPage-YpJSDaWc.js.map} +1 -1
  9. package/dist/chunks/{ApiCatalogDetailPage-BaheZKBq.js → ApiCatalogDetailPage-9r1axtCg.js} +3 -3
  10. package/dist/chunks/{ApiCatalogDetailPage-BaheZKBq.js.map → ApiCatalogDetailPage-9r1axtCg.js.map} +1 -1
  11. package/dist/chunks/{ApiCatalogDetailPage-CsRxlHwO.js → ApiCatalogDetailPage-TjCQ8_A8.js} +2 -2
  12. package/dist/chunks/{ApiCatalogDetailPage-CsRxlHwO.js.map → ApiCatalogDetailPage-TjCQ8_A8.js.map} +1 -1
  13. package/dist/chunks/{ApiCatalogPage-B0yIz8-U.js → ApiCatalogPage-COxazTnz.js} +2 -2
  14. package/dist/chunks/{ApiCatalogPage-B0yIz8-U.js.map → ApiCatalogPage-COxazTnz.js.map} +1 -1
  15. package/dist/chunks/{ApiCatalogPage-CqmmHpQ4.js → ApiCatalogPage-QRysH0pT.js} +2 -2
  16. package/dist/chunks/{ApiCatalogPage-CqmmHpQ4.js.map → ApiCatalogPage-QRysH0pT.js.map} +1 -1
  17. package/dist/chunks/{ApplicationDetailPage-CdT6KNd7.js → ApplicationDetailPage-Dbx01Ikm.js} +4 -4
  18. package/dist/chunks/{ApplicationDetailPage-CdT6KNd7.js.map → ApplicationDetailPage-Dbx01Ikm.js.map} +1 -1
  19. package/dist/chunks/{ApplicationDetailPage-CngD5JSN.js → ApplicationDetailPage-jSHy3MPz.js} +2 -2
  20. package/dist/chunks/{ApplicationDetailPage-CngD5JSN.js.map → ApplicationDetailPage-jSHy3MPz.js.map} +1 -1
  21. package/dist/chunks/{ApplicationsDashboardPage-1V4iQ6eY.js → ApplicationsDashboardPage-CclKc0wI.js} +3 -3
  22. package/dist/chunks/{ApplicationsDashboardPage-1V4iQ6eY.js.map → ApplicationsDashboardPage-CclKc0wI.js.map} +1 -1
  23. package/dist/chunks/{ApplicationsDashboardPage-DHmnjk2O.js → ApplicationsDashboardPage-CxWmOc1x.js} +2 -2
  24. package/dist/chunks/{ApplicationsDashboardPage-DHmnjk2O.js.map → ApplicationsDashboardPage-CxWmOc1x.js.map} +1 -1
  25. package/dist/chunks/{ApplicationsGridPage-CiMJFlB_.js → ApplicationsGridPage-BJXWXwyI.js} +2 -2
  26. package/dist/chunks/{ApplicationsGridPage-CiMJFlB_.js.map → ApplicationsGridPage-BJXWXwyI.js.map} +1 -1
  27. package/dist/chunks/{ApplicationsGridPage-Bo3NDnBF.js → ApplicationsGridPage-D2l8cM3o.js} +2 -2
  28. package/dist/chunks/{ApplicationsGridPage-Bo3NDnBF.js.map → ApplicationsGridPage-D2l8cM3o.js.map} +1 -1
  29. package/dist/chunks/{ApplicationsListPage-L2_S23aN.js → ApplicationsListPage-CMosl3my.js} +2 -2
  30. package/dist/chunks/{ApplicationsListPage-L2_S23aN.js.map → ApplicationsListPage-CMosl3my.js.map} +1 -1
  31. package/dist/chunks/{ApplicationsListPage-De8jQ1Cm.js → ApplicationsListPage-Dc6NGQ61.js} +2 -2
  32. package/dist/chunks/{ApplicationsListPage-De8jQ1Cm.js.map → ApplicationsListPage-Dc6NGQ61.js.map} +1 -1
  33. package/dist/chunks/{ApplicationsPage-DBq7_Sm8.js → ApplicationsPage-DH7tpMlF.js} +2 -2
  34. package/dist/chunks/{ApplicationsPage-DBq7_Sm8.js.map → ApplicationsPage-DH7tpMlF.js.map} +1 -1
  35. package/dist/chunks/{ApplicationsPage-CiNI-b0R.js → ApplicationsPage-DI-iMqoJ.js} +4 -4
  36. package/dist/chunks/{ApplicationsPage-CiNI-b0R.js.map → ApplicationsPage-DI-iMqoJ.js.map} +1 -1
  37. package/dist/chunks/{AssignmentRulesPage-C8rfUsMB.js → AssignmentRulesPage-B5UbujbZ.js} +2 -2
  38. package/dist/chunks/{AssignmentRulesPage-C8rfUsMB.js.map → AssignmentRulesPage-B5UbujbZ.js.map} +1 -1
  39. package/dist/chunks/{AssignmentRulesPage-DFsO4ZES.js → AssignmentRulesPage-E79QBSLb.js} +2 -2
  40. package/dist/chunks/{AssignmentRulesPage-DFsO4ZES.js.map → AssignmentRulesPage-E79QBSLb.js.map} +1 -1
  41. package/dist/chunks/{AssignmentsPage-COCikISI.js → AssignmentsPage-CDFaL1gT.js} +2 -2
  42. package/dist/chunks/{AssignmentsPage-COCikISI.js.map → AssignmentsPage-CDFaL1gT.js.map} +1 -1
  43. package/dist/chunks/{AssignmentsPage-78C_EBsw.js → AssignmentsPage-CPeKJjyK.js} +2 -2
  44. package/dist/chunks/{AssignmentsPage-78C_EBsw.js.map → AssignmentsPage-CPeKJjyK.js.map} +1 -1
  45. package/dist/chunks/{AuthCallbackPage-DqT6ueVi.js → AuthCallbackPage-BZ3Ocos5.js} +2 -2
  46. package/dist/chunks/{AuthCallbackPage-DqT6ueVi.js.map → AuthCallbackPage-BZ3Ocos5.js.map} +1 -1
  47. package/dist/chunks/{AuthCallbackPage-BF4bkTnR.js → AuthCallbackPage-Bml48QpH.js} +2 -2
  48. package/dist/chunks/{AuthCallbackPage-BF4bkTnR.js.map → AuthCallbackPage-Bml48QpH.js.map} +1 -1
  49. package/dist/chunks/{ConfirmEmailPage-DJy4idrf.js → ConfirmEmailPage-DP1XPaKK.js} +2 -2
  50. package/dist/chunks/{ConfirmEmailPage-DJy4idrf.js.map → ConfirmEmailPage-DP1XPaKK.js.map} +1 -1
  51. package/dist/chunks/{ConfirmEmailPage-Bh_K5qJn.js → ConfirmEmailPage-DyzslZ06.js} +2 -2
  52. package/dist/chunks/{ConfirmEmailPage-Bh_K5qJn.js.map → ConfirmEmailPage-DyzslZ06.js.map} +1 -1
  53. package/dist/chunks/{CreateSupportTicketPage-pL7jbG9o.js → CreateSupportTicketPage-Bz2KrMik.js} +2 -2
  54. package/dist/chunks/{CreateSupportTicketPage-pL7jbG9o.js.map → CreateSupportTicketPage-Bz2KrMik.js.map} +1 -1
  55. package/dist/chunks/{CreateSupportTicketPage-AVTwXbJd.js → CreateSupportTicketPage-hKjKM0Bh.js} +2 -2
  56. package/dist/chunks/{CreateSupportTicketPage-AVTwXbJd.js.map → CreateSupportTicketPage-hKjKM0Bh.js.map} +1 -1
  57. package/dist/chunks/{DashboardPage-DdQlTLw0.js → DashboardPage-B4nAd8Tj.js} +2 -2
  58. package/dist/chunks/{DashboardPage-DdQlTLw0.js.map → DashboardPage-B4nAd8Tj.js.map} +1 -1
  59. package/dist/chunks/{DashboardPage-DOitDfGV.js → DashboardPage-C9qgPBS-.js} +3 -3
  60. package/dist/chunks/{DashboardPage-DOitDfGV.js.map → DashboardPage-C9qgPBS-.js.map} +1 -1
  61. package/dist/chunks/{DashboardPage-C55mIiB6.js → DashboardPage-CjbNGMo1.js} +3 -3
  62. package/dist/chunks/{DashboardPage-C55mIiB6.js.map → DashboardPage-CjbNGMo1.js.map} +1 -1
  63. package/dist/chunks/{DashboardPage-CcCnUl7s.js → DashboardPage-rN7IFlTR.js} +2 -2
  64. package/dist/chunks/{DashboardPage-CcCnUl7s.js.map → DashboardPage-rN7IFlTR.js.map} +1 -1
  65. package/dist/chunks/{EscalationConfigPage-DRr55328.js → EscalationConfigPage-CGv2L62M.js} +2 -2
  66. package/dist/chunks/{EscalationConfigPage-DRr55328.js.map → EscalationConfigPage-CGv2L62M.js.map} +1 -1
  67. package/dist/chunks/{EscalationConfigPage-DNnZftCH.js → EscalationConfigPage-DpYDmsgw.js} +2 -2
  68. package/dist/chunks/{EscalationConfigPage-DNnZftCH.js.map → EscalationConfigPage-DpYDmsgw.js.map} +1 -1
  69. package/dist/chunks/{ForceChangePasswordPage-1SCOPIqK.js → ForceChangePasswordPage-CLI_fpF4.js} +2 -2
  70. package/dist/chunks/{ForceChangePasswordPage-1SCOPIqK.js.map → ForceChangePasswordPage-CLI_fpF4.js.map} +1 -1
  71. package/dist/chunks/{ForceChangePasswordPage-DBeG_HRO.js → ForceChangePasswordPage-Db6sOrZN.js} +2 -2
  72. package/dist/chunks/{ForceChangePasswordPage-DBeG_HRO.js.map → ForceChangePasswordPage-Db6sOrZN.js.map} +1 -1
  73. package/dist/chunks/{ForgotPasswordPage-Dlb6wKfC.js → ForgotPasswordPage-BhMz2B6A.js} +2 -2
  74. package/dist/chunks/{ForgotPasswordPage-Dlb6wKfC.js.map → ForgotPasswordPage-BhMz2B6A.js.map} +1 -1
  75. package/dist/chunks/{ForgotPasswordPage-DffYfXva.js → ForgotPasswordPage-D06arMXO.js} +2 -2
  76. package/dist/chunks/{ForgotPasswordPage-DffYfXva.js.map → ForgotPasswordPage-D06arMXO.js.map} +1 -1
  77. package/dist/chunks/{GroupDetailPage-C9nRbeHI.js → GroupDetailPage-BCM8KBCd.js} +5 -5
  78. package/dist/chunks/{GroupDetailPage-C9nRbeHI.js.map → GroupDetailPage-BCM8KBCd.js.map} +1 -1
  79. package/dist/chunks/{GroupDetailPage-CPPUWzXf.js → GroupDetailPage-CGMV3bWt.js} +2 -2
  80. package/dist/chunks/{GroupDetailPage-CPPUWzXf.js.map → GroupDetailPage-CGMV3bWt.js.map} +1 -1
  81. package/dist/chunks/{MyAccessRequestsPage-BAX0xwJX.js → MyAccessRequestsPage-BBrwEomx.js} +2 -2
  82. package/dist/chunks/{MyAccessRequestsPage-BAX0xwJX.js.map → MyAccessRequestsPage-BBrwEomx.js.map} +1 -1
  83. package/dist/chunks/{MyAccessRequestsPage-BMY1V631.js → MyAccessRequestsPage-CrlWe3gd.js} +2 -2
  84. package/dist/chunks/{MyAccessRequestsPage-BMY1V631.js.map → MyAccessRequestsPage-CrlWe3gd.js.map} +1 -1
  85. package/dist/chunks/{MyTenantsPage-BHtp67SD.js → MyTenantsPage-BOV34_rJ.js} +3 -3
  86. package/dist/chunks/{MyTenantsPage-BHtp67SD.js.map → MyTenantsPage-BOV34_rJ.js.map} +1 -1
  87. package/dist/chunks/{MyTenantsPage-Bbn4HxN2.js → MyTenantsPage-CK4-klmd.js} +2 -2
  88. package/dist/chunks/{MyTenantsPage-Bbn4HxN2.js.map → MyTenantsPage-CK4-klmd.js.map} +1 -1
  89. package/dist/chunks/{MyTicketsPage-D9IGVofj.js → MyTicketsPage-CFZ1G4dG.js} +2 -2
  90. package/dist/chunks/{MyTicketsPage-D9IGVofj.js.map → MyTicketsPage-CFZ1G4dG.js.map} +1 -1
  91. package/dist/chunks/{MyTicketsPage-BvZeiTXu.js → MyTicketsPage-DuhpwhZx.js} +2 -2
  92. package/dist/chunks/{MyTicketsPage-BvZeiTXu.js.map → MyTicketsPage-DuhpwhZx.js.map} +1 -1
  93. package/dist/chunks/{NavigationAppsPage-ChtMK1yt.js → NavigationAppsPage-BnNQRfBP.js} +2 -2
  94. package/dist/chunks/{NavigationAppsPage-ChtMK1yt.js.map → NavigationAppsPage-BnNQRfBP.js.map} +1 -1
  95. package/dist/chunks/{NavigationAppsPage-DiPBCsAF.js → NavigationAppsPage-DdJxEoTZ.js} +2 -2
  96. package/dist/chunks/{NavigationAppsPage-DiPBCsAF.js.map → NavigationAppsPage-DdJxEoTZ.js.map} +1 -1
  97. package/dist/chunks/{NotificationsPage-BCnL9oPb.js → NotificationsPage-BllOlagk.js} +2 -2
  98. package/dist/chunks/{NotificationsPage-BCnL9oPb.js.map → NotificationsPage-BllOlagk.js.map} +1 -1
  99. package/dist/chunks/{NotificationsPage-BxCiGzHk.js → NotificationsPage-D1T_ozHl.js} +2 -2
  100. package/dist/chunks/{NotificationsPage-BxCiGzHk.js.map → NotificationsPage-D1T_ozHl.js.map} +1 -1
  101. package/dist/chunks/{OnboardingWizardPage-CV_cxq7k.js → OnboardingWizardPage-CioLaCYz.js} +2 -2
  102. package/dist/chunks/{OnboardingWizardPage-CV_cxq7k.js.map → OnboardingWizardPage-CioLaCYz.js.map} +1 -1
  103. package/dist/chunks/{OnboardingWizardPage-Du-tQ2ag.js → OnboardingWizardPage-CrAQt7qL.js} +2 -2
  104. package/dist/chunks/{OnboardingWizardPage-Du-tQ2ag.js.map → OnboardingWizardPage-CrAQt7qL.js.map} +1 -1
  105. package/dist/chunks/{PermissionDetailPage-C1iuWv0G.js → PermissionDetailPage-BIG78-1-.js} +2 -2
  106. package/dist/chunks/{PermissionDetailPage-C1iuWv0G.js.map → PermissionDetailPage-BIG78-1-.js.map} +1 -1
  107. package/dist/chunks/{PermissionDetailPage-Ds4Jt1os.js → PermissionDetailPage-CvPqugYu.js} +2 -2
  108. package/dist/chunks/{PermissionDetailPage-Ds4Jt1os.js.map → PermissionDetailPage-CvPqugYu.js.map} +1 -1
  109. package/dist/chunks/{PermissionsPage-BGI2nxCn.js → PermissionsPage-CDSuc8vw.js} +2 -2
  110. package/dist/chunks/{PermissionsPage-BGI2nxCn.js.map → PermissionsPage-CDSuc8vw.js.map} +1 -1
  111. package/dist/chunks/{PermissionsPage-sauv7ct1.js → PermissionsPage-XaOrGrPZ.js} +2 -2
  112. package/dist/chunks/{PermissionsPage-sauv7ct1.js.map → PermissionsPage-XaOrGrPZ.js.map} +1 -1
  113. package/dist/chunks/{PortalDashboardPage-CQWEcghD.js → PortalDashboardPage-BsWVXkMe.js} +2 -2
  114. package/dist/chunks/{PortalDashboardPage-CQWEcghD.js.map → PortalDashboardPage-BsWVXkMe.js.map} +1 -1
  115. package/dist/chunks/{PortalDashboardPage-2kCbJw9w.js → PortalDashboardPage-oSD7oQhJ.js} +2 -2
  116. package/dist/chunks/{PortalDashboardPage-2kCbJw9w.js.map → PortalDashboardPage-oSD7oQhJ.js.map} +1 -1
  117. package/dist/chunks/{PreferencesPage-Bu4gaDRb.js → PreferencesPage-DD0_XWdT.js} +2 -2
  118. package/dist/chunks/{PreferencesPage-Bu4gaDRb.js.map → PreferencesPage-DD0_XWdT.js.map} +1 -1
  119. package/dist/chunks/{PreferencesPage-Dbg0bEYD.js → PreferencesPage-ca2BOdoH.js} +2 -2
  120. package/dist/chunks/{PreferencesPage-Dbg0bEYD.js.map → PreferencesPage-ca2BOdoH.js.map} +1 -1
  121. package/dist/chunks/{ProfilePage-DfiBhOUt.js → ProfilePage-Bex_JN5N.js} +2 -2
  122. package/dist/chunks/{ProfilePage-DfiBhOUt.js.map → ProfilePage-Bex_JN5N.js.map} +1 -1
  123. package/dist/chunks/{ProfilePage-C5QS7tsh.js → ProfilePage-C8tUIOnb.js} +2 -2
  124. package/dist/chunks/{ProfilePage-C5QS7tsh.js.map → ProfilePage-C8tUIOnb.js.map} +1 -1
  125. package/dist/chunks/{ReferencesManagementPage-C0RgHbJb.js → ReferencesManagementPage-B-FXS2ln.js} +2 -2
  126. package/dist/chunks/{ReferencesManagementPage-C0RgHbJb.js.map → ReferencesManagementPage-B-FXS2ln.js.map} +1 -1
  127. package/dist/chunks/{ReferencesManagementPage-Bs0mapj8.js → ReferencesManagementPage-C8KZprkI.js} +3 -3
  128. package/dist/chunks/{ReferencesManagementPage-Bs0mapj8.js.map → ReferencesManagementPage-C8KZprkI.js.map} +1 -1
  129. package/dist/chunks/{RegisterPage-DoeIiJt0.js → RegisterPage-BYt__zKJ.js} +2 -2
  130. package/dist/chunks/{RegisterPage-DoeIiJt0.js.map → RegisterPage-BYt__zKJ.js.map} +1 -1
  131. package/dist/chunks/{RegisterPage-DS1chV_A.js → RegisterPage-MWcVu-LY.js} +2 -2
  132. package/dist/chunks/{RegisterPage-DS1chV_A.js.map → RegisterPage-MWcVu-LY.js.map} +1 -1
  133. package/dist/chunks/{ResetPasswordPage-3KEk3zj5.js → ResetPasswordPage-DaJiMj5Z.js} +2 -2
  134. package/dist/chunks/{ResetPasswordPage-3KEk3zj5.js.map → ResetPasswordPage-DaJiMj5Z.js.map} +1 -1
  135. package/dist/chunks/{ResetPasswordPage-C_VQSFB5.js → ResetPasswordPage-rCLUIj_T.js} +2 -2
  136. package/dist/chunks/{ResetPasswordPage-C_VQSFB5.js.map → ResetPasswordPage-rCLUIj_T.js.map} +1 -1
  137. package/dist/chunks/{ResolutionModal-S6URD--N.js → ResolutionModal-DeuPnLWg.js} +2 -2
  138. package/dist/chunks/{ResolutionModal-S6URD--N.js.map → ResolutionModal-DeuPnLWg.js.map} +1 -1
  139. package/dist/chunks/{ResolutionModal-BzI1x79r.js → ResolutionModal-j7Rp6apG.js} +2 -2
  140. package/dist/chunks/{ResolutionModal-BzI1x79r.js.map → ResolutionModal-j7Rp6apG.js.map} +1 -1
  141. package/dist/chunks/{RoleDetailPage-SXK9cq_3.js → RoleDetailPage-CLtZWX17.js} +3 -3
  142. package/dist/chunks/{RoleDetailPage-SXK9cq_3.js.map → RoleDetailPage-CLtZWX17.js.map} +1 -1
  143. package/dist/chunks/{RoleDetailPage-DvEEWPKr.js → RoleDetailPage-TGyGmLMM.js} +2 -2
  144. package/dist/chunks/{RoleDetailPage-DvEEWPKr.js.map → RoleDetailPage-TGyGmLMM.js.map} +1 -1
  145. package/dist/chunks/{RolesPage-C5gYJxAl.js → RolesPage-C0c5G9e7.js} +2 -2
  146. package/dist/chunks/{RolesPage-C5gYJxAl.js.map → RolesPage-C0c5G9e7.js.map} +1 -1
  147. package/dist/chunks/{RolesPage-B75lCugt.js → RolesPage-Dm03fBBf.js} +2 -2
  148. package/dist/chunks/{RolesPage-B75lCugt.js.map → RolesPage-Dm03fBBf.js.map} +1 -1
  149. package/dist/chunks/{SlaConfigPage-BqXHATb6.js → SlaConfigPage-B4WDzEKi.js} +2 -2
  150. package/dist/chunks/{SlaConfigPage-BqXHATb6.js.map → SlaConfigPage-B4WDzEKi.js.map} +1 -1
  151. package/dist/chunks/{SlaConfigPage-DZ4P1FFW.js → SlaConfigPage-Cwo9NwxH.js} +2 -2
  152. package/dist/chunks/{SlaConfigPage-DZ4P1FFW.js.map → SlaConfigPage-Cwo9NwxH.js.map} +1 -1
  153. package/dist/chunks/{SupportPermissionsPage-DW7KJjYK.js → SupportPermissionsPage-CL12dFy-.js} +2 -2
  154. package/dist/chunks/{SupportPermissionsPage-DW7KJjYK.js.map → SupportPermissionsPage-CL12dFy-.js.map} +1 -1
  155. package/dist/chunks/{SupportPermissionsPage-B4xy_pCQ.js → SupportPermissionsPage-CneIhl30.js} +2 -2
  156. package/dist/chunks/{SupportPermissionsPage-B4xy_pCQ.js.map → SupportPermissionsPage-CneIhl30.js.map} +1 -1
  157. package/dist/chunks/{TemplatesPage-m5-sLJ7F.js → TemplatesPage-DStKmwHT.js} +2 -2
  158. package/dist/chunks/{TemplatesPage-m5-sLJ7F.js.map → TemplatesPage-DStKmwHT.js.map} +1 -1
  159. package/dist/chunks/{TemplatesPage-DZa0PQTE.js → TemplatesPage-X4Rrhs9p.js} +2 -2
  160. package/dist/chunks/{TemplatesPage-DZa0PQTE.js.map → TemplatesPage-X4Rrhs9p.js.map} +1 -1
  161. package/dist/chunks/{TenantCard-CqfifMrM.js → TenantCard-BUBYWtvR.js} +2 -2
  162. package/dist/chunks/{TenantCard-CqfifMrM.js.map → TenantCard-BUBYWtvR.js.map} +1 -1
  163. package/dist/chunks/{TenantCard-BJQi7Oew.js → TenantCard-CAgiB-NG.js} +2 -2
  164. package/dist/chunks/{TenantCard-BJQi7Oew.js.map → TenantCard-CAgiB-NG.js.map} +1 -1
  165. package/dist/chunks/{TenantScopeSelector-CdiYJvuH.js → TenantScopeSelector-B9vtpIZx.js} +2 -2
  166. package/dist/chunks/{TenantScopeSelector-CdiYJvuH.js.map → TenantScopeSelector-B9vtpIZx.js.map} +1 -1
  167. package/dist/chunks/{TenantScopeSelector-Cl5DD318.js → TenantScopeSelector-BAoah-mL.js} +2 -2
  168. package/dist/chunks/{TenantScopeSelector-Cl5DD318.js.map → TenantScopeSelector-BAoah-mL.js.map} +1 -1
  169. package/dist/chunks/{TicketDetailPage-C1UuMxD8.js → TicketDetailPage-BFcP4X8s.js} +2 -2
  170. package/dist/chunks/{TicketDetailPage-C1UuMxD8.js.map → TicketDetailPage-BFcP4X8s.js.map} +1 -1
  171. package/dist/chunks/{TicketDetailPage-BOC9rHu3.js → TicketDetailPage-D_Npnt4A.js} +2 -2
  172. package/dist/chunks/{TicketDetailPage-BOC9rHu3.js.map → TicketDetailPage-D_Npnt4A.js.map} +1 -1
  173. package/dist/chunks/{TicketsPage-BjaN4Baq.js → TicketsPage-DBP9kalU.js} +2 -2
  174. package/dist/chunks/{TicketsPage-BjaN4Baq.js.map → TicketsPage-DBP9kalU.js.map} +1 -1
  175. package/dist/chunks/{TicketsPage-BCgHZA-m.js → TicketsPage-p21DLhUb.js} +2 -2
  176. package/dist/chunks/{TicketsPage-BCgHZA-m.js.map → TicketsPage-p21DLhUb.js.map} +1 -1
  177. package/dist/chunks/{UserCreateTicketPage-ChQL1mVY.js → UserCreateTicketPage-DOwShnG8.js} +3 -3
  178. package/dist/chunks/UserCreateTicketPage-DOwShnG8.js.map +1 -0
  179. package/dist/chunks/{UserCreateTicketPage-DkjsHeV7.js → UserCreateTicketPage-lvlvp2u6.js} +48 -48
  180. package/dist/chunks/UserCreateTicketPage-lvlvp2u6.js.map +1 -0
  181. package/dist/chunks/{UserDashboardPage-81-3GJAQ.js → UserDashboardPage-C_tm7Pld.js} +2 -2
  182. package/dist/chunks/{UserDashboardPage-81-3GJAQ.js.map → UserDashboardPage-C_tm7Pld.js.map} +1 -1
  183. package/dist/chunks/{UserDashboardPage-BMYrtF3o.js → UserDashboardPage-Dp6q6FEW.js} +2 -2
  184. package/dist/chunks/{UserDashboardPage-BMYrtF3o.js.map → UserDashboardPage-Dp6q6FEW.js.map} +1 -1
  185. package/dist/chunks/{UserDetailPage-D6oCH2eS.js → UserDetailPage-6grZ6gmV.js} +5 -5
  186. package/dist/chunks/{UserDetailPage-D6oCH2eS.js.map → UserDetailPage-6grZ6gmV.js.map} +1 -1
  187. package/dist/chunks/{UserDetailPage-BMW8jAWG.js → UserDetailPage-DXLxO7LF.js} +2 -2
  188. package/dist/chunks/{UserDetailPage-BMW8jAWG.js.map → UserDetailPage-DXLxO7LF.js.map} +1 -1
  189. package/dist/chunks/{UserTicketDetailPage-ZH2BDWBt.js → UserTicketDetailPage-Ch9IfCPo.js} +2 -2
  190. package/dist/chunks/{UserTicketDetailPage-ZH2BDWBt.js.map → UserTicketDetailPage-Ch9IfCPo.js.map} +1 -1
  191. package/dist/chunks/{UserTicketDetailPage-Z_myXXJ0.js → UserTicketDetailPage-a4II5VEE.js} +2 -2
  192. package/dist/chunks/{UserTicketDetailPage-Z_myXXJ0.js.map → UserTicketDetailPage-a4II5VEE.js.map} +1 -1
  193. package/dist/chunks/{UsersGroupsPage-B8Ka6uRa.js → UsersGroupsPage-B7Er0V4l.js} +3 -3
  194. package/dist/chunks/{UsersGroupsPage-B8Ka6uRa.js.map → UsersGroupsPage-B7Er0V4l.js.map} +1 -1
  195. package/dist/chunks/{UsersGroupsPage-xJmGib8b.js → UsersGroupsPage-BeAv4QfV.js} +2 -2
  196. package/dist/chunks/{UsersGroupsPage-xJmGib8b.js.map → UsersGroupsPage-BeAv4QfV.js.map} +1 -1
  197. package/dist/chunks/{UsersPage-CQ38akZ_.js → UsersPage-0M1FLqOe.js} +2 -2
  198. package/dist/chunks/{UsersPage-CQ38akZ_.js.map → UsersPage-0M1FLqOe.js.map} +1 -1
  199. package/dist/chunks/{UsersPage-Bd2-vl39.js → UsersPage-ZR9r9vvf.js} +2 -2
  200. package/dist/chunks/{UsersPage-Bd2-vl39.js.map → UsersPage-ZR9r9vvf.js.map} +1 -1
  201. package/dist/chunks/{accessRequestsApi-DguOx0q0.js → accessRequestsApi-BJH8EE1K.js} +2 -2
  202. package/dist/chunks/{accessRequestsApi-DguOx0q0.js.map → accessRequestsApi-BJH8EE1K.js.map} +1 -1
  203. package/dist/chunks/{accessRequestsApi-COtWo9kC.js → accessRequestsApi-CBpF5d54.js} +2 -2
  204. package/dist/chunks/{accessRequestsApi-COtWo9kC.js.map → accessRequestsApi-CBpF5d54.js.map} +1 -1
  205. package/dist/chunks/{aiApi-CITiWGYX.js → aiApi-CkkWAvNB.js} +2 -2
  206. package/dist/chunks/{aiApi-CITiWGYX.js.map → aiApi-CkkWAvNB.js.map} +1 -1
  207. package/dist/chunks/{aiApi-BmZsud6O.js → aiApi-Dl7a2lWz.js} +2 -2
  208. package/dist/chunks/{aiApi-BmZsud6O.js.map → aiApi-Dl7a2lWz.js.map} +1 -1
  209. package/dist/chunks/{applicationAnalyticsApi-D62lc6z4.js → applicationAnalyticsApi-BwcSE_H1.js} +2 -2
  210. package/dist/chunks/{applicationAnalyticsApi-D62lc6z4.js.map → applicationAnalyticsApi-BwcSE_H1.js.map} +1 -1
  211. package/dist/chunks/{applicationAnalyticsApi-BYoEJzSN.js → applicationAnalyticsApi-DKMmDvWk.js} +2 -2
  212. package/dist/chunks/{applicationAnalyticsApi-BYoEJzSN.js.map → applicationAnalyticsApi-DKMmDvWk.js.map} +1 -1
  213. package/dist/chunks/auth-Ca2Rn6on.js +2 -0
  214. package/dist/chunks/auth-Ca2Rn6on.js.map +1 -0
  215. package/dist/chunks/auth-ClNTDOqm.js +18 -0
  216. package/dist/chunks/auth-ClNTDOqm.js.map +1 -0
  217. package/dist/chunks/auth-DECnMZjF.js +18 -0
  218. package/dist/chunks/auth-DECnMZjF.js.map +1 -0
  219. package/dist/chunks/auth-DPvxdqy4.js +18 -0
  220. package/dist/chunks/auth-DPvxdqy4.js.map +1 -0
  221. package/dist/chunks/auth-HzvnTaOm.js +2 -0
  222. package/dist/chunks/auth-HzvnTaOm.js.map +1 -0
  223. package/dist/chunks/auth-M6aNTKCH.js +2 -0
  224. package/dist/chunks/auth-M6aNTKCH.js.map +1 -0
  225. package/dist/chunks/auth-UHnAu6_e.js +2 -0
  226. package/dist/chunks/auth-UHnAu6_e.js.map +1 -0
  227. package/dist/chunks/auth-YrujJY7m.js +18 -0
  228. package/dist/chunks/auth-YrujJY7m.js.map +1 -0
  229. package/dist/chunks/{groupsApi-3CR-_g5b.js → groupsApi-BzDV3_Jc.js} +2 -2
  230. package/dist/chunks/{groupsApi-3CR-_g5b.js.map → groupsApi-BzDV3_Jc.js.map} +1 -1
  231. package/dist/chunks/{groupsApi-BUyBgf_N.js → groupsApi-CQ4vFMdP.js} +2 -2
  232. package/dist/chunks/{groupsApi-BUyBgf_N.js.map → groupsApi-CQ4vFMdP.js.map} +1 -1
  233. package/dist/chunks/{index-BIqcvvbh.js → index-BBmMbSZV.js} +9 -8
  234. package/dist/chunks/index-BBmMbSZV.js.map +1 -0
  235. package/dist/chunks/{index-_g82N2nb.js → index-BLlESTfA.js} +2 -2
  236. package/dist/chunks/{index-_g82N2nb.js.map → index-BLlESTfA.js.map} +1 -1
  237. package/dist/chunks/{index-DEOBhXS_.js → index-BPMjxWVx.js} +2 -2
  238. package/dist/chunks/{index-DEOBhXS_.js.map → index-BPMjxWVx.js.map} +1 -1
  239. package/dist/chunks/{index-Czk12A3G.js → index-CEbwdURd.js} +2 -2
  240. package/dist/chunks/{index-Czk12A3G.js.map → index-CEbwdURd.js.map} +1 -1
  241. package/dist/chunks/{index-BOKR3bw6.js → index-CUZygY5Q.js} +2 -2
  242. package/dist/chunks/{index-BOKR3bw6.js.map → index-CUZygY5Q.js.map} +1 -1
  243. package/dist/chunks/{index-IJR_91Yt.js → index-Ci1SqFiY.js} +2 -2
  244. package/dist/chunks/{index-IJR_91Yt.js.map → index-Ci1SqFiY.js.map} +1 -1
  245. package/dist/chunks/{index-Br2wsGE8.js → index-Cib93xtp.js} +2 -2
  246. package/dist/chunks/{index-Br2wsGE8.js.map → index-Cib93xtp.js.map} +1 -1
  247. package/dist/chunks/{index-BxHVPJ-j.js → index-CoHIgn5H.js} +2 -2
  248. package/dist/chunks/{index-BxHVPJ-j.js.map → index-CoHIgn5H.js.map} +1 -1
  249. package/dist/chunks/{index-DA5VyW0k.js → index-CpY95_ro.js} +2296 -2309
  250. package/dist/chunks/index-CpY95_ro.js.map +1 -0
  251. package/dist/chunks/{index-BMsjMCv9.js → index-D-2xSu5W.js} +3 -3
  252. package/dist/chunks/{index-BMsjMCv9.js.map → index-D-2xSu5W.js.map} +1 -1
  253. package/dist/chunks/{index-DIQ6Jmmq.js → index-D18t9DhC.js} +4 -4
  254. package/dist/chunks/{index-DIQ6Jmmq.js.map → index-D18t9DhC.js.map} +1 -1
  255. package/dist/chunks/index-DK5czlkn.js +48 -0
  256. package/dist/chunks/index-DK5czlkn.js.map +1 -0
  257. package/dist/chunks/{index-CxgEV-rT.js → index-DQd324n7.js} +2 -2
  258. package/dist/chunks/{index-CxgEV-rT.js.map → index-DQd324n7.js.map} +1 -1
  259. package/dist/chunks/{index-S-X8qFYW.js → index-Dbq-x5H9.js} +2 -2
  260. package/dist/chunks/{index-S-X8qFYW.js.map → index-Dbq-x5H9.js.map} +1 -1
  261. package/dist/chunks/{index-CNxx56kE.js → index-Det9dEaQ.js} +2 -2
  262. package/dist/chunks/{index-CNxx56kE.js.map → index-Det9dEaQ.js.map} +1 -1
  263. package/dist/chunks/{index-C1w97Ejz.js → index-bgT9XOKZ.js} +2 -2
  264. package/dist/chunks/{index-C1w97Ejz.js.map → index-bgT9XOKZ.js.map} +1 -1
  265. package/dist/chunks/index-h7ZrwrQg.js +2 -0
  266. package/dist/chunks/index-h7ZrwrQg.js.map +1 -0
  267. package/dist/chunks/{index-Djy4eIbB.js → index-k4USDz2P.js} +2 -2
  268. package/dist/chunks/{index-Djy4eIbB.js.map → index-k4USDz2P.js.map} +1 -1
  269. package/dist/chunks/{tenantIconMap-COKA97Ug.js → tenantIconMap-7ihIWxAh.js} +2 -2
  270. package/dist/chunks/{tenantIconMap-COKA97Ug.js.map → tenantIconMap-7ihIWxAh.js.map} +1 -1
  271. package/dist/chunks/{tenantIconMap-BuSQUUyZ.js → tenantIconMap-Dk6K-UTE.js} +2 -2
  272. package/dist/chunks/{tenantIconMap-BuSQUUyZ.js.map → tenantIconMap-Dk6K-UTE.js.map} +1 -1
  273. package/dist/chunks/{ticketingApi-C6EbupqP.js → ticketingApi-BCMKkzlv.js} +2 -2
  274. package/dist/chunks/{ticketingApi-C6EbupqP.js.map → ticketingApi-BCMKkzlv.js.map} +1 -1
  275. package/dist/chunks/{ticketingApi-DbREwHez.js → ticketingApi-Dwn7pl5z.js} +2 -2
  276. package/dist/chunks/{ticketingApi-DbREwHez.js.map → ticketingApi-Dwn7pl5z.js.map} +1 -1
  277. package/dist/chunks/{useAccessRequests-vucIb3_w.js → useAccessRequests-Du7CvowE.js} +3 -3
  278. package/dist/chunks/{useAccessRequests-vucIb3_w.js.map → useAccessRequests-Du7CvowE.js.map} +1 -1
  279. package/dist/chunks/{useAccessRequests-C0dY6y-4.js → useAccessRequests-gJ7yhWyi.js} +2 -2
  280. package/dist/chunks/{useAccessRequests-C0dY6y-4.js.map → useAccessRequests-gJ7yhWyi.js.map} +1 -1
  281. package/dist/chunks/{useUserAccessRequests-Cj0nkesW.js → useUserAccessRequests-5wWea2Jg.js} +2 -2
  282. package/dist/chunks/{useUserAccessRequests-Cj0nkesW.js.map → useUserAccessRequests-5wWea2Jg.js.map} +1 -1
  283. package/dist/chunks/{useUserAccessRequests-BBcw1Rk9.js → useUserAccessRequests-Bk_v8egy.js} +2 -2
  284. package/dist/chunks/{useUserAccessRequests-BBcw1Rk9.js.map → useUserAccessRequests-Bk_v8egy.js.map} +1 -1
  285. package/dist/components/routing/ProtectedRoute.d.ts.map +1 -1
  286. package/dist/contexts/AuthContext.d.ts.map +1 -1
  287. package/dist/pages/LoginPage.d.ts.map +1 -1
  288. package/dist/pages/platform/administration/tenants/TenantDetailPage.d.ts.map +1 -1
  289. package/dist/pages/platform/support/UserCreateTicketPage.d.ts.map +1 -1
  290. package/dist/services/api/apiClient.d.ts.map +1 -1
  291. package/dist/services/support/ticketDraftService.d.ts.map +1 -1
  292. package/dist/smartstack.cjs +1 -1
  293. package/dist/smartstack.js +6 -6
  294. package/dist/utils/permissions.generated.d.ts +288 -0
  295. package/dist/utils/permissions.generated.d.ts.map +1 -0
  296. package/dist/utils/uuid.d.ts +6 -0
  297. package/dist/utils/uuid.d.ts.map +1 -0
  298. package/package.json +1 -1
  299. package/dist/chunks/UserCreateTicketPage-ChQL1mVY.js.map +0 -1
  300. package/dist/chunks/UserCreateTicketPage-DkjsHeV7.js.map +0 -1
  301. package/dist/chunks/auth-B-hELPDB.js +0 -2
  302. package/dist/chunks/auth-B-hELPDB.js.map +0 -1
  303. package/dist/chunks/auth-BYaMuq7D.js +0 -16
  304. package/dist/chunks/auth-BYaMuq7D.js.map +0 -1
  305. package/dist/chunks/auth-C5zpZ9k7.js +0 -2
  306. package/dist/chunks/auth-C5zpZ9k7.js.map +0 -1
  307. package/dist/chunks/auth-CDpRMVv1.js +0 -16
  308. package/dist/chunks/auth-CDpRMVv1.js.map +0 -1
  309. package/dist/chunks/auth-CyPkCta2.js +0 -2
  310. package/dist/chunks/auth-CyPkCta2.js.map +0 -1
  311. package/dist/chunks/auth-DL47kvnl.js +0 -2
  312. package/dist/chunks/auth-DL47kvnl.js.map +0 -1
  313. package/dist/chunks/auth-Diiv90i1.js +0 -16
  314. package/dist/chunks/auth-Diiv90i1.js.map +0 -1
  315. package/dist/chunks/auth-rog9MvUr.js +0 -16
  316. package/dist/chunks/auth-rog9MvUr.js.map +0 -1
  317. package/dist/chunks/index-BIqcvvbh.js.map +0 -1
  318. package/dist/chunks/index-DA5VyW0k.js.map +0 -1
  319. package/dist/chunks/index-Dht6EQW1.js +0 -2
  320. package/dist/chunks/index-Dht6EQW1.js.map +0 -1
  321. package/dist/chunks/index-vXiLh35n.js +0 -48
  322. package/dist/chunks/index-vXiLh35n.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),h=require("react-router-dom"),A=require("react-i18next"),v=require("./index-vXiLh35n.js"),a=require("lucide-react"),b={"*":e.jsx(a.Shield,{className:"h-4 w-4"}),Read:e.jsx(a.Eye,{className:"h-4 w-4"}),Create:e.jsx(a.Plus,{className:"h-4 w-4"}),Update:e.jsx(a.Edit,{className:"h-4 w-4"}),Delete:e.jsx(a.Trash2,{className:"h-4 w-4"}),Assign:e.jsx(a.UserPlus,{className:"h-4 w-4"}),Execute:e.jsx(a.Play,{className:"h-4 w-4"})},g={"*":"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)]"},P={Context:"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300",Application:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300",Module:"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300",Section:"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300",Resource:"bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300"};function G(){const{t:s}=A.useTranslation(["admin","common"]),{id:d}=h.useParams(),n=h.useNavigate(),[t,j]=i.useState(null),[N,o]=i.useState(!0),[x,y]=i.useState(null),[f,m]=i.useState(!1),[l,w]=i.useState("roles"),p=i.useCallback(async()=>{if(d)try{o(!0);const r=await v.adminApi.permissions.getById(d);j(r)}catch(r){console.error("Failed to load permission:",r),y(s("admin:permissionDetail.errors.loadFailed","Failed to load permission"))}finally{o(!1)}},[d,s]);i.useEffect(()=>{p()},[p]);const k=async()=>{t?.path&&(await navigator.clipboard.writeText(t.path),m(!0),setTimeout(()=>m(!1),2e3))};if(N)return e.jsx("div",{className:"flex items-center justify-center min-h-[400px]",children:e.jsx(a.Loader2,{className:"h-8 w-8 animate-spin text-[var(--color-accent-500)]"})});if(x||!t)return e.jsx("div",{className:"p-6",children:e.jsxs("div",{className:"bg-[var(--error-bg)] border border-[var(--error-border)] rounded-lg p-4",children:[e.jsx("p",{className:"text-[var(--error-text)]",children:x||s("admin:permissionDetail.errors.notFound","Permission not found")}),e.jsx("button",{onClick:()=>n("/administration/permissions/permissions"),className:"mt-4 text-sm text-[var(--color-accent-500)] hover:underline",children:s("common:buttons.back")})]})});const u=t.action||"*",S=g[u]||g["*"],C=b[u]||b["*"],D=P[t.level]||"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200";return e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsx(v.Breadcrumb,{items:[{label:s("admin:header.title"),href:"/administration"},{label:s("admin:permissions.title","Permissions"),href:"/administration/permissions/permissions"},{label:t?.path||"Detail"}]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("button",{onClick:()=>n("/administration/permissions/permissions"),className:"p-2 hover:bg-[var(--bg-hover)] rounded-lg transition-colors",children:e.jsx(a.ArrowLeft,{className:"h-5 w-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(a.Lock,{className:"h-6 w-6 text-[var(--color-accent-500)]"}),e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:s("admin:permissionDetail.title","Permission Detail")})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[e.jsx("code",{className:"px-3 py-1.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-lg text-sm font-mono text-[var(--text-primary)]",children:t.path}),e.jsx("button",{onClick:k,className:"p-1.5 hover:bg-[var(--bg-hover)] rounded transition-colors",title:s("common:buttons.copy"),children:f?e.jsx(a.CheckCircle,{className:"h-4 w-4 text-[var(--success-text)]"}):e.jsx(a.Copy,{className:"h-4 w-4 text-[var(--text-muted)]"})})]})]})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(a.Info,{className:"h-5 w-5 text-[var(--color-accent-500)]"}),s("admin:permissionDetail.info","Information")]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.level","Level")}),e.jsx("div",{children:e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${D}`,children:[e.jsx(a.Layers,{className:"h-3 w-3"}),t.level]})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.action","Action")}),e.jsx("div",{children:e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${S}`,children:[C,t.action||s("admin:permissions.wildcard","Wildcard (*)")]})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.type","Type")}),e.jsx("div",{children:t.isWildcard?e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--accent-bg)] text-[var(--accent-text)] border border-[var(--accent-border)]",children:[e.jsx(a.Shield,{className:"h-3 w-3"}),s("admin:permissions.wildcardType","Wildcard")]}):e.jsx("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]",children:s("admin:permissions.specificType","Specific")})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.createdAt","Created")}),e.jsxs("div",{className:"flex items-center gap-1.5 text-sm text-[var(--text-secondary)]",children:[e.jsx(a.Calendar,{className:"h-4 w-4"}),new Date(t.createdAt).toLocaleDateString()]})]}),t.description&&e.jsxs("div",{className:"space-y-1 md:col-span-2",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.description","Description")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t.description})]})]})]}),e.jsx("div",{className:"border-b border-[var(--border-color)]",children:e.jsx("div",{className:"flex gap-1",children:[{id:"roles",label:s("admin:permissionDetail.tabs.roles","Rôles"),count:t.roles.length,icon:e.jsx(a.Shield,{className:"w-4 h-4"})},{id:"entraGroups",label:s("admin:permissionDetail.tabs.entraGroups","Groupes AAD"),count:t.entraGroups?.length??0,icon:e.jsx(a.Building2,{className:"w-4 h-4"})},{id:"users",label:s("admin:permissionDetail.tabs.users","Utilisateurs"),count:t.users.length,icon:e.jsx(a.Users,{className:"w-4 h-4"})}].map(r=>e.jsxs("button",{onClick:()=>w(r.id),className:`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors ${l===r.id?"border-[var(--color-accent-500)] text-[var(--color-accent-500)]":"border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]"}`,children:[r.icon,r.label,e.jsx("span",{className:`px-2 py-0.5 text-xs rounded-full ${l===r.id?"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]":"bg-[var(--bg-tertiary)] text-[var(--text-tertiary)]"}`,children:r.count})]},r.id))})}),e.jsxs("div",{className:"min-h-[400px]",children:[l==="roles"&&e.jsx("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:t.roles.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-muted)]",children:[e.jsx(a.Shield,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:s("admin:permissionDetail.noRoles","No roles have this permission")})]}):e.jsx("div",{className:"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:roles.name","Nom")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("common:type","Type")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:t.roles.map(r=>e.jsxs("tr",{onClick:()=>n(`/administration/permissions/roles/${r.id}`),className:"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors",children:[e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full flex items-center justify-center bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]",children:e.jsx(a.Shield,{className:"w-4 h-4"})}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:r.name})]})}),e.jsx("td",{className:"px-4 py-3",children:r.isSystem?e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]",children:[e.jsx(a.Lock,{className:"h-3 w-3"}),s("admin:roles.system","Système")]}):e.jsx("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]",children:s("admin:roles.custom","Personnalisé")})})]},r.id))})]})})}),l==="entraGroups"&&e.jsx("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:!t.entraGroups||t.entraGroups.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-muted)]",children:[e.jsx(a.Building2,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:s("admin:permissionDetail.noEntraGroups","Aucun groupe AAD n'a cette permission")})]}):e.jsx("div",{className:"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("entra:groups.groupName","Nom du groupe")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("common:type","Type")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("entra:groups.members","Membres")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:permissionDetail.viaRoles","Via Rôles")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:t.entraGroups.map(r=>e.jsxs("tr",{onClick:()=>n(`/administration/entra/groups/${r.id}`),className:"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors",children:[e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`w-8 h-8 rounded-full flex items-center justify-center ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-purple-500/10 text-purple-500"}`,children:r.isSecurityGroup?e.jsx(a.Shield,{className:"w-4 h-4"}):e.jsx(a.Building2,{className:"w-4 h-4"})}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:r.displayName})]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("span",{className:`px-2 py-1 text-xs rounded-[var(--radius-badge)] ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-purple-500/10 text-purple-500"}`,children:r.isSecurityGroup?s("entra:groups.securityGroup","Sécurité"):s("entra:groups.distributionGroup","Distribution")})}),e.jsx("td",{className:"px-4 py-3 text-sm text-[var(--text-secondary)]",children:e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(a.Users,{className:"w-4 h-4"}),r.memberCount]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:r.roleNames.map(c=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]",children:[e.jsx(a.Shield,{className:"h-2.5 w-2.5"}),c]},c))})})]},r.id))})]})})}),l==="users"&&e.jsx("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:t.users.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-muted)]",children:[e.jsx(a.Users,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:s("admin:permissionDetail.noUsers","No users have this permission")})]}):e.jsx("div",{className:"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:users.name","Name")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:users.email","Email")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:permissionDetail.viaRoles","Via Roles")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:t.users.map(r=>e.jsxs("tr",{onClick:()=>n(`/administration/users/${r.id}`),className:"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors",children:[e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-8 w-8 rounded-full bg-[var(--color-accent-100)] dark:bg-[var(--color-accent-900)] flex items-center justify-center",children:e.jsxs("span",{className:"text-sm font-medium text-[var(--color-accent-700)] dark:text-[var(--color-accent-300)]",children:[r.firstName.charAt(0),r.lastName.charAt(0)]})}),e.jsxs("span",{className:"font-medium text-[var(--text-primary)]",children:[r.firstName," ",r.lastName]})]})}),e.jsx("td",{className:"px-4 py-3 text-sm text-[var(--text-secondary)]",children:r.email}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:r.roleNames.map(c=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]",children:[e.jsx(a.Shield,{className:"h-2.5 w-2.5"}),c]},c))})})]},r.id))})]})})})]})]})}exports.PermissionDetailPage=G;
2
- //# sourceMappingURL=PermissionDetailPage-C1iuWv0G.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),h=require("react-router-dom"),A=require("react-i18next"),v=require("./index-DK5czlkn.js"),a=require("lucide-react"),b={"*":e.jsx(a.Shield,{className:"h-4 w-4"}),Read:e.jsx(a.Eye,{className:"h-4 w-4"}),Create:e.jsx(a.Plus,{className:"h-4 w-4"}),Update:e.jsx(a.Edit,{className:"h-4 w-4"}),Delete:e.jsx(a.Trash2,{className:"h-4 w-4"}),Assign:e.jsx(a.UserPlus,{className:"h-4 w-4"}),Execute:e.jsx(a.Play,{className:"h-4 w-4"})},g={"*":"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)]"},P={Context:"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300",Application:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300",Module:"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300",Section:"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300",Resource:"bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300"};function G(){const{t:s}=A.useTranslation(["admin","common"]),{id:d}=h.useParams(),n=h.useNavigate(),[t,j]=i.useState(null),[N,o]=i.useState(!0),[x,y]=i.useState(null),[f,m]=i.useState(!1),[l,w]=i.useState("roles"),p=i.useCallback(async()=>{if(d)try{o(!0);const r=await v.adminApi.permissions.getById(d);j(r)}catch(r){console.error("Failed to load permission:",r),y(s("admin:permissionDetail.errors.loadFailed","Failed to load permission"))}finally{o(!1)}},[d,s]);i.useEffect(()=>{p()},[p]);const k=async()=>{t?.path&&(await navigator.clipboard.writeText(t.path),m(!0),setTimeout(()=>m(!1),2e3))};if(N)return e.jsx("div",{className:"flex items-center justify-center min-h-[400px]",children:e.jsx(a.Loader2,{className:"h-8 w-8 animate-spin text-[var(--color-accent-500)]"})});if(x||!t)return e.jsx("div",{className:"p-6",children:e.jsxs("div",{className:"bg-[var(--error-bg)] border border-[var(--error-border)] rounded-lg p-4",children:[e.jsx("p",{className:"text-[var(--error-text)]",children:x||s("admin:permissionDetail.errors.notFound","Permission not found")}),e.jsx("button",{onClick:()=>n("/administration/permissions/permissions"),className:"mt-4 text-sm text-[var(--color-accent-500)] hover:underline",children:s("common:buttons.back")})]})});const u=t.action||"*",S=g[u]||g["*"],C=b[u]||b["*"],D=P[t.level]||"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200";return e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsx(v.Breadcrumb,{items:[{label:s("admin:header.title"),href:"/administration"},{label:s("admin:permissions.title","Permissions"),href:"/administration/permissions/permissions"},{label:t?.path||"Detail"}]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("button",{onClick:()=>n("/administration/permissions/permissions"),className:"p-2 hover:bg-[var(--bg-hover)] rounded-lg transition-colors",children:e.jsx(a.ArrowLeft,{className:"h-5 w-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(a.Lock,{className:"h-6 w-6 text-[var(--color-accent-500)]"}),e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:s("admin:permissionDetail.title","Permission Detail")})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[e.jsx("code",{className:"px-3 py-1.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-lg text-sm font-mono text-[var(--text-primary)]",children:t.path}),e.jsx("button",{onClick:k,className:"p-1.5 hover:bg-[var(--bg-hover)] rounded transition-colors",title:s("common:buttons.copy"),children:f?e.jsx(a.CheckCircle,{className:"h-4 w-4 text-[var(--success-text)]"}):e.jsx(a.Copy,{className:"h-4 w-4 text-[var(--text-muted)]"})})]})]})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2",children:[e.jsx(a.Info,{className:"h-5 w-5 text-[var(--color-accent-500)]"}),s("admin:permissionDetail.info","Information")]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.level","Level")}),e.jsx("div",{children:e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${D}`,children:[e.jsx(a.Layers,{className:"h-3 w-3"}),t.level]})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.action","Action")}),e.jsx("div",{children:e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${S}`,children:[C,t.action||s("admin:permissions.wildcard","Wildcard (*)")]})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.type","Type")}),e.jsx("div",{children:t.isWildcard?e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--accent-bg)] text-[var(--accent-text)] border border-[var(--accent-border)]",children:[e.jsx(a.Shield,{className:"h-3 w-3"}),s("admin:permissions.wildcardType","Wildcard")]}):e.jsx("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]",children:s("admin:permissions.specificType","Specific")})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.createdAt","Created")}),e.jsxs("div",{className:"flex items-center gap-1.5 text-sm text-[var(--text-secondary)]",children:[e.jsx(a.Calendar,{className:"h-4 w-4"}),new Date(t.createdAt).toLocaleDateString()]})]}),t.description&&e.jsxs("div",{className:"space-y-1 md:col-span-2",children:[e.jsx("label",{className:"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide",children:s("admin:permissions.description","Description")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t.description})]})]})]}),e.jsx("div",{className:"border-b border-[var(--border-color)]",children:e.jsx("div",{className:"flex gap-1",children:[{id:"roles",label:s("admin:permissionDetail.tabs.roles","Rôles"),count:t.roles.length,icon:e.jsx(a.Shield,{className:"w-4 h-4"})},{id:"entraGroups",label:s("admin:permissionDetail.tabs.entraGroups","Groupes AAD"),count:t.entraGroups?.length??0,icon:e.jsx(a.Building2,{className:"w-4 h-4"})},{id:"users",label:s("admin:permissionDetail.tabs.users","Utilisateurs"),count:t.users.length,icon:e.jsx(a.Users,{className:"w-4 h-4"})}].map(r=>e.jsxs("button",{onClick:()=>w(r.id),className:`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors ${l===r.id?"border-[var(--color-accent-500)] text-[var(--color-accent-500)]":"border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]"}`,children:[r.icon,r.label,e.jsx("span",{className:`px-2 py-0.5 text-xs rounded-full ${l===r.id?"bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]":"bg-[var(--bg-tertiary)] text-[var(--text-tertiary)]"}`,children:r.count})]},r.id))})}),e.jsxs("div",{className:"min-h-[400px]",children:[l==="roles"&&e.jsx("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:t.roles.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-muted)]",children:[e.jsx(a.Shield,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:s("admin:permissionDetail.noRoles","No roles have this permission")})]}):e.jsx("div",{className:"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:roles.name","Nom")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("common:type","Type")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:t.roles.map(r=>e.jsxs("tr",{onClick:()=>n(`/administration/permissions/roles/${r.id}`),className:"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors",children:[e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 rounded-full flex items-center justify-center bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]",children:e.jsx(a.Shield,{className:"w-4 h-4"})}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:r.name})]})}),e.jsx("td",{className:"px-4 py-3",children:r.isSystem?e.jsxs("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]",children:[e.jsx(a.Lock,{className:"h-3 w-3"}),s("admin:roles.system","Système")]}):e.jsx("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]",children:s("admin:roles.custom","Personnalisé")})})]},r.id))})]})})}),l==="entraGroups"&&e.jsx("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:!t.entraGroups||t.entraGroups.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-muted)]",children:[e.jsx(a.Building2,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:s("admin:permissionDetail.noEntraGroups","Aucun groupe AAD n'a cette permission")})]}):e.jsx("div",{className:"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("entra:groups.groupName","Nom du groupe")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("common:type","Type")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("entra:groups.members","Membres")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:permissionDetail.viaRoles","Via Rôles")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:t.entraGroups.map(r=>e.jsxs("tr",{onClick:()=>n(`/administration/entra/groups/${r.id}`),className:"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors",children:[e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`w-8 h-8 rounded-full flex items-center justify-center ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-purple-500/10 text-purple-500"}`,children:r.isSecurityGroup?e.jsx(a.Shield,{className:"w-4 h-4"}):e.jsx(a.Building2,{className:"w-4 h-4"})}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:r.displayName})]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("span",{className:`px-2 py-1 text-xs rounded-[var(--radius-badge)] ${r.isSecurityGroup?"bg-blue-500/10 text-blue-500":"bg-purple-500/10 text-purple-500"}`,children:r.isSecurityGroup?s("entra:groups.securityGroup","Sécurité"):s("entra:groups.distributionGroup","Distribution")})}),e.jsx("td",{className:"px-4 py-3 text-sm text-[var(--text-secondary)]",children:e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(a.Users,{className:"w-4 h-4"}),r.memberCount]})}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:r.roleNames.map(c=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]",children:[e.jsx(a.Shield,{className:"h-2.5 w-2.5"}),c]},c))})})]},r.id))})]})})}),l==="users"&&e.jsx("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6",children:t.users.length===0?e.jsxs("div",{className:"text-center py-8 text-[var(--text-muted)]",children:[e.jsx(a.Users,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:s("admin:permissionDetail.noUsers","No users have this permission")})]}):e.jsx("div",{className:"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:users.name","Name")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:users.email","Email")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:s("admin:permissionDetail.viaRoles","Via Roles")})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:t.users.map(r=>e.jsxs("tr",{onClick:()=>n(`/administration/users/${r.id}`),className:"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors",children:[e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-8 w-8 rounded-full bg-[var(--color-accent-100)] dark:bg-[var(--color-accent-900)] flex items-center justify-center",children:e.jsxs("span",{className:"text-sm font-medium text-[var(--color-accent-700)] dark:text-[var(--color-accent-300)]",children:[r.firstName.charAt(0),r.lastName.charAt(0)]})}),e.jsxs("span",{className:"font-medium text-[var(--text-primary)]",children:[r.firstName," ",r.lastName]})]})}),e.jsx("td",{className:"px-4 py-3 text-sm text-[var(--text-secondary)]",children:r.email}),e.jsx("td",{className:"px-4 py-3",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:r.roleNames.map(c=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]",children:[e.jsx(a.Shield,{className:"h-2.5 w-2.5"}),c]},c))})})]},r.id))})]})})})]})]})}exports.PermissionDetailPage=G;
2
+ //# sourceMappingURL=PermissionDetailPage-BIG78-1-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionDetailPage-C1iuWv0G.js","sources":["../../src/pages/platform/administration/permissions/PermissionDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback, type ReactNode } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport {\r\n ArrowLeft,\r\n Shield,\r\n Users,\r\n Loader2,\r\n Lock,\r\n Eye,\r\n Plus,\r\n Edit,\r\n Trash2,\r\n UserPlus,\r\n Play,\r\n Layers,\r\n Calendar,\r\n Copy,\r\n CheckCircle,\r\n Info,\r\n Building2\r\n} from 'lucide-react';\r\nimport {\r\n adminApi,\r\n type PermissionDetailDto,\r\n} from '@/services/api/adminApi';\r\n\r\ntype TabId = 'roles' | 'entraGroups' | 'users';\r\n\r\nconst ACTION_ICONS: Record<string, React.ReactNode> = {\r\n '*': <Shield className=\"h-4 w-4\" />,\r\n Read: <Eye className=\"h-4 w-4\" />,\r\n Create: <Plus className=\"h-4 w-4\" />,\r\n Update: <Edit className=\"h-4 w-4\" />,\r\n Delete: <Trash2 className=\"h-4 w-4\" />,\r\n Assign: <UserPlus className=\"h-4 w-4\" />,\r\n Execute: <Play className=\"h-4 w-4\" />,\r\n};\r\n\r\nconst ACTION_COLORS: Record<string, string> = {\r\n '*': 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Read: 'bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]',\r\n Create: 'bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]',\r\n Update: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n Delete: 'bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]',\r\n Assign: 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Execute: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n};\r\n\r\nconst LEVEL_COLORS: Record<string, string> = {\r\n Context: 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300',\r\n Application: 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300',\r\n Module: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300',\r\n Section: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300',\r\n Resource: 'bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300',\r\n};\r\n\r\nexport function PermissionDetailPage(): ReactElement {\r\n const { t } = useTranslation(['admin', 'common']);\r\n const { id: permissionId } = useParams<{ id: string }>();\r\n const navigate = useNavigate();\r\n\r\n const [permission, setPermission] = useState<PermissionDetailDto | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [copied, setCopied] = useState(false);\r\n const [activeTab, setActiveTab] = useState<TabId>('roles');\r\n\r\n const loadPermission = useCallback(async () => {\r\n if (!permissionId) return;\r\n try {\r\n setLoading(true);\r\n const data = await adminApi.permissions.getById(permissionId);\r\n setPermission(data);\r\n } catch (err) {\r\n console.error('Failed to load permission:', err);\r\n setError(t('admin:permissionDetail.errors.loadFailed', 'Failed to load permission'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [permissionId, t]);\r\n\r\n useEffect(() => {\r\n loadPermission();\r\n }, [loadPermission]);\r\n\r\n const handleCopyPath = async () => {\r\n if (permission?.path) {\r\n await navigator.clipboard.writeText(permission.path);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n }\r\n };\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center min-h-[400px]\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !permission) {\r\n return (\r\n <div className=\"p-6\">\r\n <div className=\"bg-[var(--error-bg)] border border-[var(--error-border)] rounded-lg p-4\">\r\n <p className=\"text-[var(--error-text)]\">{error || t('admin:permissionDetail.errors.notFound', 'Permission not found')}</p>\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"mt-4 text-sm text-[var(--color-accent-500)] hover:underline\"\r\n >\r\n {t('common:buttons.back')}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const actionKey = permission.action || '*';\r\n const actionColor = ACTION_COLORS[actionKey] || ACTION_COLORS['*'];\r\n const actionIcon = ACTION_ICONS[actionKey] || ACTION_ICONS['*'];\r\n const levelColor = LEVEL_COLORS[permission.level] || 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200';\r\n\r\n return (\r\n <div className=\"p-6 space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('admin:header.title'), href: '/administration' },\r\n { label: t('admin:permissions.title', 'Permissions'), href: '/administration/permissions/permissions' },\r\n { label: permission?.path || 'Detail' }\r\n ]}\r\n />\r\n\r\n {/* Header */}\r\n <div className=\"flex items-center gap-4\">\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"p-2 hover:bg-[var(--bg-hover)] rounded-lg transition-colors\"\r\n >\r\n <ArrowLeft className=\"h-5 w-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-3\">\r\n <Lock className=\"h-6 w-6 text-[var(--color-accent-500)]\" />\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {t('admin:permissionDetail.title', 'Permission Detail')}\r\n </h1>\r\n </div>\r\n <div className=\"flex items-center gap-2 mt-2\">\r\n <code className=\"px-3 py-1.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-lg text-sm font-mono text-[var(--text-primary)]\">\r\n {permission.path}\r\n </code>\r\n <button\r\n onClick={handleCopyPath}\r\n className=\"p-1.5 hover:bg-[var(--bg-hover)] rounded transition-colors\"\r\n title={t('common:buttons.copy')}\r\n >\r\n {copied ? (\r\n <CheckCircle className=\"h-4 w-4 text-[var(--success-text)]\" />\r\n ) : (\r\n <Copy className=\"h-4 w-4 text-[var(--text-muted)]\" />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Permission Info Card */}\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n <h2 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2\">\r\n <Info className=\"h-5 w-5 text-[var(--color-accent-500)]\" />\r\n {t('admin:permissionDetail.info', 'Information')}\r\n </h2>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\r\n {/* Level */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.level', 'Level')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${levelColor}`}>\r\n <Layers className=\"h-3 w-3\" />\r\n {permission.level}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Action */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.action', 'Action')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${actionColor}`}>\r\n {actionIcon}\r\n {permission.action || t('admin:permissions.wildcard', 'Wildcard (*)')}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Wildcard */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.type', 'Type')}\r\n </label>\r\n <div>\r\n {permission.isWildcard ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--accent-bg)] text-[var(--accent-text)] border border-[var(--accent-border)]\">\r\n <Shield className=\"h-3 w-3\" />\r\n {t('admin:permissions.wildcardType', 'Wildcard')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:permissions.specificType', 'Specific')}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Created At */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.createdAt', 'Created')}\r\n </label>\r\n <div className=\"flex items-center gap-1.5 text-sm text-[var(--text-secondary)]\">\r\n <Calendar className=\"h-4 w-4\" />\r\n {new Date(permission.createdAt).toLocaleDateString()}\r\n </div>\r\n </div>\r\n\r\n {/* Description */}\r\n {permission.description && (\r\n <div className=\"space-y-1 md:col-span-2\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.description', 'Description')}\r\n </label>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{permission.description}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div className=\"border-b border-[var(--border-color)]\">\r\n <div className=\"flex gap-1\">\r\n {([\r\n { id: 'roles', label: t('admin:permissionDetail.tabs.roles', 'Rôles'), count: permission.roles.length, icon: <Shield className=\"w-4 h-4\" /> },\r\n { id: 'entraGroups', label: t('admin:permissionDetail.tabs.entraGroups', 'Groupes AAD'), count: permission.entraGroups?.length ?? 0, icon: <Building2 className=\"w-4 h-4\" /> },\r\n { id: 'users', label: t('admin:permissionDetail.tabs.users', 'Utilisateurs'), count: permission.users.length, icon: <Users className=\"w-4 h-4\" /> },\r\n ] satisfies Array<{ id: TabId; label: string; count: number; icon: ReactNode }>).map((tab) => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-500)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]'\r\n }`}\r\n >\r\n {tab.icon}\r\n {tab.label}\r\n <span className={`px-2 py-0.5 text-xs rounded-full ${\r\n activeTab === tab.id\r\n ? 'bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]'\r\n : 'bg-[var(--bg-tertiary)] text-[var(--text-tertiary)]'\r\n }`}>\r\n {tab.count}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Tab Content */}\r\n <div className=\"min-h-[400px]\">\r\n {/* Roles Tab */}\r\n {activeTab === 'roles' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.roles.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Shield className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noRoles', 'No roles have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:roles.name', 'Nom')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.roles.map((role) => (\r\n <tr\r\n key={role.id}\r\n onClick={() => navigate(`/administration/permissions/roles/${role.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]\">\r\n <Shield className=\"w-4 h-4\" />\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{role.name}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n {role.isSystem ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]\">\r\n <Lock className=\"h-3 w-3\" />\r\n {t('admin:roles.system', 'Système')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:roles.custom', 'Personnalisé')}\r\n </span>\r\n )}\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Entra Groups Tab */}\r\n {activeTab === 'entraGroups' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {(!permission.entraGroups || permission.entraGroups.length === 0) ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Building2 className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noEntraGroups', 'Aucun groupe AAD n\\'a cette permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.groupName', 'Nom du groupe')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.members', 'Membres')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Rôles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.entraGroups.map((group) => (\r\n <tr\r\n key={group.id}\r\n onClick={() => navigate(`/administration/entra/groups/${group.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className={`w-8 h-8 rounded-full flex items-center justify-center ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? (\r\n <Shield className=\"w-4 h-4\" />\r\n ) : (\r\n <Building2 className=\"w-4 h-4\" />\r\n )}\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{group.displayName}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <span className={`px-2 py-1 text-xs rounded-[var(--radius-badge)] ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? t('entra:groups.securityGroup', 'Sécurité') : t('entra:groups.distributionGroup', 'Distribution')}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n <span className=\"flex items-center gap-1\">\r\n <Users className=\"w-4 h-4\" />\r\n {group.memberCount}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {group.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Users Tab */}\r\n {activeTab === 'users' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.users.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Users className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noUsers', 'No users have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.name', 'Name')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.email', 'Email')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Roles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.users.map((user) => (\r\n <tr\r\n key={user.id}\r\n onClick={() => navigate(`/administration/users/${user.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"h-8 w-8 rounded-full bg-[var(--color-accent-100)] dark:bg-[var(--color-accent-900)] flex items-center justify-center\">\r\n <span className=\"text-sm font-medium text-[var(--color-accent-700)] dark:text-[var(--color-accent-300)]\">\r\n {user.firstName.charAt(0)}{user.lastName.charAt(0)}\r\n </span>\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {user.firstName} {user.lastName}\r\n </span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n {user.email}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {user.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ACTION_ICONS","jsx","Shield","Eye","Plus","Edit","Trash2","UserPlus","Play","ACTION_COLORS","LEVEL_COLORS","PermissionDetailPage","t","useTranslation","permissionId","useParams","navigate","useNavigate","permission","setPermission","useState","loading","setLoading","error","setError","copied","setCopied","activeTab","setActiveTab","loadPermission","useCallback","data","adminApi","err","useEffect","handleCopyPath","Loader2","jsxs","actionKey","actionColor","actionIcon","levelColor","Breadcrumb","ArrowLeft","Lock","CheckCircle","Copy","Info","Layers","Calendar","Building2","Users","tab","role","group","roleName","user"],"mappings":"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"}
1
+ {"version":3,"file":"PermissionDetailPage-BIG78-1-.js","sources":["../../src/pages/platform/administration/permissions/PermissionDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback, type ReactNode } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport {\r\n ArrowLeft,\r\n Shield,\r\n Users,\r\n Loader2,\r\n Lock,\r\n Eye,\r\n Plus,\r\n Edit,\r\n Trash2,\r\n UserPlus,\r\n Play,\r\n Layers,\r\n Calendar,\r\n Copy,\r\n CheckCircle,\r\n Info,\r\n Building2\r\n} from 'lucide-react';\r\nimport {\r\n adminApi,\r\n type PermissionDetailDto,\r\n} from '@/services/api/adminApi';\r\n\r\ntype TabId = 'roles' | 'entraGroups' | 'users';\r\n\r\nconst ACTION_ICONS: Record<string, React.ReactNode> = {\r\n '*': <Shield className=\"h-4 w-4\" />,\r\n Read: <Eye className=\"h-4 w-4\" />,\r\n Create: <Plus className=\"h-4 w-4\" />,\r\n Update: <Edit className=\"h-4 w-4\" />,\r\n Delete: <Trash2 className=\"h-4 w-4\" />,\r\n Assign: <UserPlus className=\"h-4 w-4\" />,\r\n Execute: <Play className=\"h-4 w-4\" />,\r\n};\r\n\r\nconst ACTION_COLORS: Record<string, string> = {\r\n '*': 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Read: 'bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]',\r\n Create: 'bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]',\r\n Update: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n Delete: 'bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]',\r\n Assign: 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Execute: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n};\r\n\r\nconst LEVEL_COLORS: Record<string, string> = {\r\n Context: 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300',\r\n Application: 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300',\r\n Module: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300',\r\n Section: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300',\r\n Resource: 'bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300',\r\n};\r\n\r\nexport function PermissionDetailPage(): ReactElement {\r\n const { t } = useTranslation(['admin', 'common']);\r\n const { id: permissionId } = useParams<{ id: string }>();\r\n const navigate = useNavigate();\r\n\r\n const [permission, setPermission] = useState<PermissionDetailDto | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [copied, setCopied] = useState(false);\r\n const [activeTab, setActiveTab] = useState<TabId>('roles');\r\n\r\n const loadPermission = useCallback(async () => {\r\n if (!permissionId) return;\r\n try {\r\n setLoading(true);\r\n const data = await adminApi.permissions.getById(permissionId);\r\n setPermission(data);\r\n } catch (err) {\r\n console.error('Failed to load permission:', err);\r\n setError(t('admin:permissionDetail.errors.loadFailed', 'Failed to load permission'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [permissionId, t]);\r\n\r\n useEffect(() => {\r\n loadPermission();\r\n }, [loadPermission]);\r\n\r\n const handleCopyPath = async () => {\r\n if (permission?.path) {\r\n await navigator.clipboard.writeText(permission.path);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n }\r\n };\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center min-h-[400px]\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !permission) {\r\n return (\r\n <div className=\"p-6\">\r\n <div className=\"bg-[var(--error-bg)] border border-[var(--error-border)] rounded-lg p-4\">\r\n <p className=\"text-[var(--error-text)]\">{error || t('admin:permissionDetail.errors.notFound', 'Permission not found')}</p>\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"mt-4 text-sm text-[var(--color-accent-500)] hover:underline\"\r\n >\r\n {t('common:buttons.back')}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const actionKey = permission.action || '*';\r\n const actionColor = ACTION_COLORS[actionKey] || ACTION_COLORS['*'];\r\n const actionIcon = ACTION_ICONS[actionKey] || ACTION_ICONS['*'];\r\n const levelColor = LEVEL_COLORS[permission.level] || 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200';\r\n\r\n return (\r\n <div className=\"p-6 space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('admin:header.title'), href: '/administration' },\r\n { label: t('admin:permissions.title', 'Permissions'), href: '/administration/permissions/permissions' },\r\n { label: permission?.path || 'Detail' }\r\n ]}\r\n />\r\n\r\n {/* Header */}\r\n <div className=\"flex items-center gap-4\">\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"p-2 hover:bg-[var(--bg-hover)] rounded-lg transition-colors\"\r\n >\r\n <ArrowLeft className=\"h-5 w-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-3\">\r\n <Lock className=\"h-6 w-6 text-[var(--color-accent-500)]\" />\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {t('admin:permissionDetail.title', 'Permission Detail')}\r\n </h1>\r\n </div>\r\n <div className=\"flex items-center gap-2 mt-2\">\r\n <code className=\"px-3 py-1.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-lg text-sm font-mono text-[var(--text-primary)]\">\r\n {permission.path}\r\n </code>\r\n <button\r\n onClick={handleCopyPath}\r\n className=\"p-1.5 hover:bg-[var(--bg-hover)] rounded transition-colors\"\r\n title={t('common:buttons.copy')}\r\n >\r\n {copied ? (\r\n <CheckCircle className=\"h-4 w-4 text-[var(--success-text)]\" />\r\n ) : (\r\n <Copy className=\"h-4 w-4 text-[var(--text-muted)]\" />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Permission Info Card */}\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n <h2 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2\">\r\n <Info className=\"h-5 w-5 text-[var(--color-accent-500)]\" />\r\n {t('admin:permissionDetail.info', 'Information')}\r\n </h2>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\r\n {/* Level */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.level', 'Level')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${levelColor}`}>\r\n <Layers className=\"h-3 w-3\" />\r\n {permission.level}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Action */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.action', 'Action')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${actionColor}`}>\r\n {actionIcon}\r\n {permission.action || t('admin:permissions.wildcard', 'Wildcard (*)')}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Wildcard */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.type', 'Type')}\r\n </label>\r\n <div>\r\n {permission.isWildcard ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--accent-bg)] text-[var(--accent-text)] border border-[var(--accent-border)]\">\r\n <Shield className=\"h-3 w-3\" />\r\n {t('admin:permissions.wildcardType', 'Wildcard')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:permissions.specificType', 'Specific')}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Created At */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.createdAt', 'Created')}\r\n </label>\r\n <div className=\"flex items-center gap-1.5 text-sm text-[var(--text-secondary)]\">\r\n <Calendar className=\"h-4 w-4\" />\r\n {new Date(permission.createdAt).toLocaleDateString()}\r\n </div>\r\n </div>\r\n\r\n {/* Description */}\r\n {permission.description && (\r\n <div className=\"space-y-1 md:col-span-2\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.description', 'Description')}\r\n </label>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{permission.description}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div className=\"border-b border-[var(--border-color)]\">\r\n <div className=\"flex gap-1\">\r\n {([\r\n { id: 'roles', label: t('admin:permissionDetail.tabs.roles', 'Rôles'), count: permission.roles.length, icon: <Shield className=\"w-4 h-4\" /> },\r\n { id: 'entraGroups', label: t('admin:permissionDetail.tabs.entraGroups', 'Groupes AAD'), count: permission.entraGroups?.length ?? 0, icon: <Building2 className=\"w-4 h-4\" /> },\r\n { id: 'users', label: t('admin:permissionDetail.tabs.users', 'Utilisateurs'), count: permission.users.length, icon: <Users className=\"w-4 h-4\" /> },\r\n ] satisfies Array<{ id: TabId; label: string; count: number; icon: ReactNode }>).map((tab) => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-500)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]'\r\n }`}\r\n >\r\n {tab.icon}\r\n {tab.label}\r\n <span className={`px-2 py-0.5 text-xs rounded-full ${\r\n activeTab === tab.id\r\n ? 'bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]'\r\n : 'bg-[var(--bg-tertiary)] text-[var(--text-tertiary)]'\r\n }`}>\r\n {tab.count}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Tab Content */}\r\n <div className=\"min-h-[400px]\">\r\n {/* Roles Tab */}\r\n {activeTab === 'roles' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.roles.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Shield className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noRoles', 'No roles have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:roles.name', 'Nom')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.roles.map((role) => (\r\n <tr\r\n key={role.id}\r\n onClick={() => navigate(`/administration/permissions/roles/${role.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]\">\r\n <Shield className=\"w-4 h-4\" />\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{role.name}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n {role.isSystem ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]\">\r\n <Lock className=\"h-3 w-3\" />\r\n {t('admin:roles.system', 'Système')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:roles.custom', 'Personnalisé')}\r\n </span>\r\n )}\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Entra Groups Tab */}\r\n {activeTab === 'entraGroups' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {(!permission.entraGroups || permission.entraGroups.length === 0) ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Building2 className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noEntraGroups', 'Aucun groupe AAD n\\'a cette permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.groupName', 'Nom du groupe')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.members', 'Membres')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Rôles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.entraGroups.map((group) => (\r\n <tr\r\n key={group.id}\r\n onClick={() => navigate(`/administration/entra/groups/${group.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className={`w-8 h-8 rounded-full flex items-center justify-center ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? (\r\n <Shield className=\"w-4 h-4\" />\r\n ) : (\r\n <Building2 className=\"w-4 h-4\" />\r\n )}\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{group.displayName}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <span className={`px-2 py-1 text-xs rounded-[var(--radius-badge)] ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? t('entra:groups.securityGroup', 'Sécurité') : t('entra:groups.distributionGroup', 'Distribution')}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n <span className=\"flex items-center gap-1\">\r\n <Users className=\"w-4 h-4\" />\r\n {group.memberCount}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {group.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Users Tab */}\r\n {activeTab === 'users' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.users.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Users className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noUsers', 'No users have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.name', 'Name')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.email', 'Email')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Roles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.users.map((user) => (\r\n <tr\r\n key={user.id}\r\n onClick={() => navigate(`/administration/users/${user.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"h-8 w-8 rounded-full bg-[var(--color-accent-100)] dark:bg-[var(--color-accent-900)] flex items-center justify-center\">\r\n <span className=\"text-sm font-medium text-[var(--color-accent-700)] dark:text-[var(--color-accent-300)]\">\r\n {user.firstName.charAt(0)}{user.lastName.charAt(0)}\r\n </span>\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {user.firstName} {user.lastName}\r\n </span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n {user.email}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {user.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ACTION_ICONS","jsx","Shield","Eye","Plus","Edit","Trash2","UserPlus","Play","ACTION_COLORS","LEVEL_COLORS","PermissionDetailPage","t","useTranslation","permissionId","useParams","navigate","useNavigate","permission","setPermission","useState","loading","setLoading","error","setError","copied","setCopied","activeTab","setActiveTab","loadPermission","useCallback","data","adminApi","err","useEffect","handleCopyPath","Loader2","jsxs","actionKey","actionColor","actionIcon","levelColor","Breadcrumb","ArrowLeft","Lock","CheckCircle","Copy","Info","Layers","Calendar","Building2","Users","tab","role","group","roleName","user"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
2
  import { useState as d, useCallback as T, useEffect as L } from "react";
3
3
  import { useParams as R, useNavigate as E } from "react-router-dom";
4
4
  import { useTranslation as $ } from "react-i18next";
5
- import { k as I, B as O } from "./index-DA5VyW0k.js";
5
+ import { k as I, B as O } from "./index-CpY95_ro.js";
6
6
  import { Loader2 as j, ArrowLeft as U, Lock as g, CheckCircle as B, Copy as F, Info as V, Layers as W, Shield as i, Calendar as _, Building2 as m, Users as p, Play as M, UserPlus as K, Trash2 as q, Edit as z, Plus as H, Eye as J } from "lucide-react";
7
7
  const N = {
8
8
  "*": /* @__PURE__ */ e(i, { className: "h-4 w-4" }),
@@ -275,4 +275,4 @@ function te() {
275
275
  export {
276
276
  te as PermissionDetailPage
277
277
  };
278
- //# sourceMappingURL=PermissionDetailPage-Ds4Jt1os.js.map
278
+ //# sourceMappingURL=PermissionDetailPage-CvPqugYu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionDetailPage-Ds4Jt1os.js","sources":["../../src/pages/platform/administration/permissions/PermissionDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback, type ReactNode } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport {\r\n ArrowLeft,\r\n Shield,\r\n Users,\r\n Loader2,\r\n Lock,\r\n Eye,\r\n Plus,\r\n Edit,\r\n Trash2,\r\n UserPlus,\r\n Play,\r\n Layers,\r\n Calendar,\r\n Copy,\r\n CheckCircle,\r\n Info,\r\n Building2\r\n} from 'lucide-react';\r\nimport {\r\n adminApi,\r\n type PermissionDetailDto,\r\n} from '@/services/api/adminApi';\r\n\r\ntype TabId = 'roles' | 'entraGroups' | 'users';\r\n\r\nconst ACTION_ICONS: Record<string, React.ReactNode> = {\r\n '*': <Shield className=\"h-4 w-4\" />,\r\n Read: <Eye className=\"h-4 w-4\" />,\r\n Create: <Plus className=\"h-4 w-4\" />,\r\n Update: <Edit className=\"h-4 w-4\" />,\r\n Delete: <Trash2 className=\"h-4 w-4\" />,\r\n Assign: <UserPlus className=\"h-4 w-4\" />,\r\n Execute: <Play className=\"h-4 w-4\" />,\r\n};\r\n\r\nconst ACTION_COLORS: Record<string, string> = {\r\n '*': 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Read: 'bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]',\r\n Create: 'bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]',\r\n Update: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n Delete: 'bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]',\r\n Assign: 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Execute: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n};\r\n\r\nconst LEVEL_COLORS: Record<string, string> = {\r\n Context: 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300',\r\n Application: 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300',\r\n Module: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300',\r\n Section: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300',\r\n Resource: 'bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300',\r\n};\r\n\r\nexport function PermissionDetailPage(): ReactElement {\r\n const { t } = useTranslation(['admin', 'common']);\r\n const { id: permissionId } = useParams<{ id: string }>();\r\n const navigate = useNavigate();\r\n\r\n const [permission, setPermission] = useState<PermissionDetailDto | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [copied, setCopied] = useState(false);\r\n const [activeTab, setActiveTab] = useState<TabId>('roles');\r\n\r\n const loadPermission = useCallback(async () => {\r\n if (!permissionId) return;\r\n try {\r\n setLoading(true);\r\n const data = await adminApi.permissions.getById(permissionId);\r\n setPermission(data);\r\n } catch (err) {\r\n console.error('Failed to load permission:', err);\r\n setError(t('admin:permissionDetail.errors.loadFailed', 'Failed to load permission'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [permissionId, t]);\r\n\r\n useEffect(() => {\r\n loadPermission();\r\n }, [loadPermission]);\r\n\r\n const handleCopyPath = async () => {\r\n if (permission?.path) {\r\n await navigator.clipboard.writeText(permission.path);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n }\r\n };\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center min-h-[400px]\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !permission) {\r\n return (\r\n <div className=\"p-6\">\r\n <div className=\"bg-[var(--error-bg)] border border-[var(--error-border)] rounded-lg p-4\">\r\n <p className=\"text-[var(--error-text)]\">{error || t('admin:permissionDetail.errors.notFound', 'Permission not found')}</p>\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"mt-4 text-sm text-[var(--color-accent-500)] hover:underline\"\r\n >\r\n {t('common:buttons.back')}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const actionKey = permission.action || '*';\r\n const actionColor = ACTION_COLORS[actionKey] || ACTION_COLORS['*'];\r\n const actionIcon = ACTION_ICONS[actionKey] || ACTION_ICONS['*'];\r\n const levelColor = LEVEL_COLORS[permission.level] || 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200';\r\n\r\n return (\r\n <div className=\"p-6 space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('admin:header.title'), href: '/administration' },\r\n { label: t('admin:permissions.title', 'Permissions'), href: '/administration/permissions/permissions' },\r\n { label: permission?.path || 'Detail' }\r\n ]}\r\n />\r\n\r\n {/* Header */}\r\n <div className=\"flex items-center gap-4\">\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"p-2 hover:bg-[var(--bg-hover)] rounded-lg transition-colors\"\r\n >\r\n <ArrowLeft className=\"h-5 w-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-3\">\r\n <Lock className=\"h-6 w-6 text-[var(--color-accent-500)]\" />\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {t('admin:permissionDetail.title', 'Permission Detail')}\r\n </h1>\r\n </div>\r\n <div className=\"flex items-center gap-2 mt-2\">\r\n <code className=\"px-3 py-1.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-lg text-sm font-mono text-[var(--text-primary)]\">\r\n {permission.path}\r\n </code>\r\n <button\r\n onClick={handleCopyPath}\r\n className=\"p-1.5 hover:bg-[var(--bg-hover)] rounded transition-colors\"\r\n title={t('common:buttons.copy')}\r\n >\r\n {copied ? (\r\n <CheckCircle className=\"h-4 w-4 text-[var(--success-text)]\" />\r\n ) : (\r\n <Copy className=\"h-4 w-4 text-[var(--text-muted)]\" />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Permission Info Card */}\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n <h2 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2\">\r\n <Info className=\"h-5 w-5 text-[var(--color-accent-500)]\" />\r\n {t('admin:permissionDetail.info', 'Information')}\r\n </h2>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\r\n {/* Level */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.level', 'Level')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${levelColor}`}>\r\n <Layers className=\"h-3 w-3\" />\r\n {permission.level}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Action */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.action', 'Action')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${actionColor}`}>\r\n {actionIcon}\r\n {permission.action || t('admin:permissions.wildcard', 'Wildcard (*)')}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Wildcard */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.type', 'Type')}\r\n </label>\r\n <div>\r\n {permission.isWildcard ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--accent-bg)] text-[var(--accent-text)] border border-[var(--accent-border)]\">\r\n <Shield className=\"h-3 w-3\" />\r\n {t('admin:permissions.wildcardType', 'Wildcard')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:permissions.specificType', 'Specific')}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Created At */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.createdAt', 'Created')}\r\n </label>\r\n <div className=\"flex items-center gap-1.5 text-sm text-[var(--text-secondary)]\">\r\n <Calendar className=\"h-4 w-4\" />\r\n {new Date(permission.createdAt).toLocaleDateString()}\r\n </div>\r\n </div>\r\n\r\n {/* Description */}\r\n {permission.description && (\r\n <div className=\"space-y-1 md:col-span-2\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.description', 'Description')}\r\n </label>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{permission.description}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div className=\"border-b border-[var(--border-color)]\">\r\n <div className=\"flex gap-1\">\r\n {([\r\n { id: 'roles', label: t('admin:permissionDetail.tabs.roles', 'Rôles'), count: permission.roles.length, icon: <Shield className=\"w-4 h-4\" /> },\r\n { id: 'entraGroups', label: t('admin:permissionDetail.tabs.entraGroups', 'Groupes AAD'), count: permission.entraGroups?.length ?? 0, icon: <Building2 className=\"w-4 h-4\" /> },\r\n { id: 'users', label: t('admin:permissionDetail.tabs.users', 'Utilisateurs'), count: permission.users.length, icon: <Users className=\"w-4 h-4\" /> },\r\n ] satisfies Array<{ id: TabId; label: string; count: number; icon: ReactNode }>).map((tab) => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-500)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]'\r\n }`}\r\n >\r\n {tab.icon}\r\n {tab.label}\r\n <span className={`px-2 py-0.5 text-xs rounded-full ${\r\n activeTab === tab.id\r\n ? 'bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]'\r\n : 'bg-[var(--bg-tertiary)] text-[var(--text-tertiary)]'\r\n }`}>\r\n {tab.count}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Tab Content */}\r\n <div className=\"min-h-[400px]\">\r\n {/* Roles Tab */}\r\n {activeTab === 'roles' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.roles.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Shield className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noRoles', 'No roles have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:roles.name', 'Nom')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.roles.map((role) => (\r\n <tr\r\n key={role.id}\r\n onClick={() => navigate(`/administration/permissions/roles/${role.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]\">\r\n <Shield className=\"w-4 h-4\" />\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{role.name}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n {role.isSystem ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]\">\r\n <Lock className=\"h-3 w-3\" />\r\n {t('admin:roles.system', 'Système')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:roles.custom', 'Personnalisé')}\r\n </span>\r\n )}\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Entra Groups Tab */}\r\n {activeTab === 'entraGroups' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {(!permission.entraGroups || permission.entraGroups.length === 0) ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Building2 className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noEntraGroups', 'Aucun groupe AAD n\\'a cette permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.groupName', 'Nom du groupe')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.members', 'Membres')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Rôles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.entraGroups.map((group) => (\r\n <tr\r\n key={group.id}\r\n onClick={() => navigate(`/administration/entra/groups/${group.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className={`w-8 h-8 rounded-full flex items-center justify-center ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? (\r\n <Shield className=\"w-4 h-4\" />\r\n ) : (\r\n <Building2 className=\"w-4 h-4\" />\r\n )}\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{group.displayName}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <span className={`px-2 py-1 text-xs rounded-[var(--radius-badge)] ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? t('entra:groups.securityGroup', 'Sécurité') : t('entra:groups.distributionGroup', 'Distribution')}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n <span className=\"flex items-center gap-1\">\r\n <Users className=\"w-4 h-4\" />\r\n {group.memberCount}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {group.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Users Tab */}\r\n {activeTab === 'users' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.users.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Users className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noUsers', 'No users have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.name', 'Name')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.email', 'Email')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Roles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.users.map((user) => (\r\n <tr\r\n key={user.id}\r\n onClick={() => navigate(`/administration/users/${user.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"h-8 w-8 rounded-full bg-[var(--color-accent-100)] dark:bg-[var(--color-accent-900)] flex items-center justify-center\">\r\n <span className=\"text-sm font-medium text-[var(--color-accent-700)] dark:text-[var(--color-accent-300)]\">\r\n {user.firstName.charAt(0)}{user.lastName.charAt(0)}\r\n </span>\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {user.firstName} {user.lastName}\r\n </span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n {user.email}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {user.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ACTION_ICONS","jsx","Shield","Eye","Plus","Edit","Trash2","UserPlus","Play","ACTION_COLORS","LEVEL_COLORS","PermissionDetailPage","t","useTranslation","permissionId","useParams","navigate","useNavigate","permission","setPermission","useState","loading","setLoading","error","setError","copied","setCopied","activeTab","setActiveTab","loadPermission","useCallback","data","adminApi","err","useEffect","handleCopyPath","Loader2","jsxs","actionKey","actionColor","actionIcon","levelColor","Breadcrumb","ArrowLeft","Lock","CheckCircle","Copy","Info","Layers","Calendar","Building2","Users","tab","role","group","roleName","user"],"mappings":"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"}
1
+ {"version":3,"file":"PermissionDetailPage-CvPqugYu.js","sources":["../../src/pages/platform/administration/permissions/PermissionDetailPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback, type ReactNode } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport {\r\n ArrowLeft,\r\n Shield,\r\n Users,\r\n Loader2,\r\n Lock,\r\n Eye,\r\n Plus,\r\n Edit,\r\n Trash2,\r\n UserPlus,\r\n Play,\r\n Layers,\r\n Calendar,\r\n Copy,\r\n CheckCircle,\r\n Info,\r\n Building2\r\n} from 'lucide-react';\r\nimport {\r\n adminApi,\r\n type PermissionDetailDto,\r\n} from '@/services/api/adminApi';\r\n\r\ntype TabId = 'roles' | 'entraGroups' | 'users';\r\n\r\nconst ACTION_ICONS: Record<string, React.ReactNode> = {\r\n '*': <Shield className=\"h-4 w-4\" />,\r\n Read: <Eye className=\"h-4 w-4\" />,\r\n Create: <Plus className=\"h-4 w-4\" />,\r\n Update: <Edit className=\"h-4 w-4\" />,\r\n Delete: <Trash2 className=\"h-4 w-4\" />,\r\n Assign: <UserPlus className=\"h-4 w-4\" />,\r\n Execute: <Play className=\"h-4 w-4\" />,\r\n};\r\n\r\nconst ACTION_COLORS: Record<string, string> = {\r\n '*': 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Read: 'bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]',\r\n Create: 'bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]',\r\n Update: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n Delete: 'bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]',\r\n Assign: 'bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--accent-border)]',\r\n Execute: 'bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]',\r\n};\r\n\r\nconst LEVEL_COLORS: Record<string, string> = {\r\n Context: 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300',\r\n Application: 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300',\r\n Module: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300',\r\n Section: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300',\r\n Resource: 'bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-300',\r\n};\r\n\r\nexport function PermissionDetailPage(): ReactElement {\r\n const { t } = useTranslation(['admin', 'common']);\r\n const { id: permissionId } = useParams<{ id: string }>();\r\n const navigate = useNavigate();\r\n\r\n const [permission, setPermission] = useState<PermissionDetailDto | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [copied, setCopied] = useState(false);\r\n const [activeTab, setActiveTab] = useState<TabId>('roles');\r\n\r\n const loadPermission = useCallback(async () => {\r\n if (!permissionId) return;\r\n try {\r\n setLoading(true);\r\n const data = await adminApi.permissions.getById(permissionId);\r\n setPermission(data);\r\n } catch (err) {\r\n console.error('Failed to load permission:', err);\r\n setError(t('admin:permissionDetail.errors.loadFailed', 'Failed to load permission'));\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [permissionId, t]);\r\n\r\n useEffect(() => {\r\n loadPermission();\r\n }, [loadPermission]);\r\n\r\n const handleCopyPath = async () => {\r\n if (permission?.path) {\r\n await navigator.clipboard.writeText(permission.path);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n }\r\n };\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center min-h-[400px]\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !permission) {\r\n return (\r\n <div className=\"p-6\">\r\n <div className=\"bg-[var(--error-bg)] border border-[var(--error-border)] rounded-lg p-4\">\r\n <p className=\"text-[var(--error-text)]\">{error || t('admin:permissionDetail.errors.notFound', 'Permission not found')}</p>\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"mt-4 text-sm text-[var(--color-accent-500)] hover:underline\"\r\n >\r\n {t('common:buttons.back')}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const actionKey = permission.action || '*';\r\n const actionColor = ACTION_COLORS[actionKey] || ACTION_COLORS['*'];\r\n const actionIcon = ACTION_ICONS[actionKey] || ACTION_ICONS['*'];\r\n const levelColor = LEVEL_COLORS[permission.level] || 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200';\r\n\r\n return (\r\n <div className=\"p-6 space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('admin:header.title'), href: '/administration' },\r\n { label: t('admin:permissions.title', 'Permissions'), href: '/administration/permissions/permissions' },\r\n { label: permission?.path || 'Detail' }\r\n ]}\r\n />\r\n\r\n {/* Header */}\r\n <div className=\"flex items-center gap-4\">\r\n <button\r\n onClick={() => navigate('/administration/permissions/permissions')}\r\n className=\"p-2 hover:bg-[var(--bg-hover)] rounded-lg transition-colors\"\r\n >\r\n <ArrowLeft className=\"h-5 w-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-3\">\r\n <Lock className=\"h-6 w-6 text-[var(--color-accent-500)]\" />\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {t('admin:permissionDetail.title', 'Permission Detail')}\r\n </h1>\r\n </div>\r\n <div className=\"flex items-center gap-2 mt-2\">\r\n <code className=\"px-3 py-1.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-lg text-sm font-mono text-[var(--text-primary)]\">\r\n {permission.path}\r\n </code>\r\n <button\r\n onClick={handleCopyPath}\r\n className=\"p-1.5 hover:bg-[var(--bg-hover)] rounded transition-colors\"\r\n title={t('common:buttons.copy')}\r\n >\r\n {copied ? (\r\n <CheckCircle className=\"h-4 w-4 text-[var(--success-text)]\" />\r\n ) : (\r\n <Copy className=\"h-4 w-4 text-[var(--text-muted)]\" />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Permission Info Card */}\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n <h2 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4 flex items-center gap-2\">\r\n <Info className=\"h-5 w-5 text-[var(--color-accent-500)]\" />\r\n {t('admin:permissionDetail.info', 'Information')}\r\n </h2>\r\n\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\r\n {/* Level */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.level', 'Level')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium ${levelColor}`}>\r\n <Layers className=\"h-3 w-3\" />\r\n {permission.level}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Action */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.action', 'Action')}\r\n </label>\r\n <div>\r\n <span className={`inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium border ${actionColor}`}>\r\n {actionIcon}\r\n {permission.action || t('admin:permissions.wildcard', 'Wildcard (*)')}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n {/* Wildcard */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.type', 'Type')}\r\n </label>\r\n <div>\r\n {permission.isWildcard ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--accent-bg)] text-[var(--accent-text)] border border-[var(--accent-border)]\">\r\n <Shield className=\"h-3 w-3\" />\r\n {t('admin:permissions.wildcardType', 'Wildcard')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:permissions.specificType', 'Specific')}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Created At */}\r\n <div className=\"space-y-1\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.createdAt', 'Created')}\r\n </label>\r\n <div className=\"flex items-center gap-1.5 text-sm text-[var(--text-secondary)]\">\r\n <Calendar className=\"h-4 w-4\" />\r\n {new Date(permission.createdAt).toLocaleDateString()}\r\n </div>\r\n </div>\r\n\r\n {/* Description */}\r\n {permission.description && (\r\n <div className=\"space-y-1 md:col-span-2\">\r\n <label className=\"text-xs font-medium text-[var(--text-muted)] uppercase tracking-wide\">\r\n {t('admin:permissions.description', 'Description')}\r\n </label>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{permission.description}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Tabs */}\r\n <div className=\"border-b border-[var(--border-color)]\">\r\n <div className=\"flex gap-1\">\r\n {([\r\n { id: 'roles', label: t('admin:permissionDetail.tabs.roles', 'Rôles'), count: permission.roles.length, icon: <Shield className=\"w-4 h-4\" /> },\r\n { id: 'entraGroups', label: t('admin:permissionDetail.tabs.entraGroups', 'Groupes AAD'), count: permission.entraGroups?.length ?? 0, icon: <Building2 className=\"w-4 h-4\" /> },\r\n { id: 'users', label: t('admin:permissionDetail.tabs.users', 'Utilisateurs'), count: permission.users.length, icon: <Users className=\"w-4 h-4\" /> },\r\n ] satisfies Array<{ id: TabId; label: string; count: number; icon: ReactNode }>).map((tab) => (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`flex items-center gap-2 px-4 py-3 text-sm font-medium border-b-2 transition-colors ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-500)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]'\r\n }`}\r\n >\r\n {tab.icon}\r\n {tab.label}\r\n <span className={`px-2 py-0.5 text-xs rounded-full ${\r\n activeTab === tab.id\r\n ? 'bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]'\r\n : 'bg-[var(--bg-tertiary)] text-[var(--text-tertiary)]'\r\n }`}>\r\n {tab.count}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Tab Content */}\r\n <div className=\"min-h-[400px]\">\r\n {/* Roles Tab */}\r\n {activeTab === 'roles' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.roles.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Shield className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noRoles', 'No roles have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:roles.name', 'Nom')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.roles.map((role) => (\r\n <tr\r\n key={role.id}\r\n onClick={() => navigate(`/administration/permissions/roles/${role.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center bg-[var(--color-accent-500)]/10 text-[var(--color-accent-500)]\">\r\n <Shield className=\"w-4 h-4\" />\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{role.name}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n {role.isSystem ? (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--info-bg)] text-[var(--info-text)] border border-[var(--info-border)]\">\r\n <Lock className=\"h-3 w-3\" />\r\n {t('admin:roles.system', 'Système')}\r\n </span>\r\n ) : (\r\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-xs font-medium bg-[var(--bg-secondary)] text-[var(--text-secondary)] border border-[var(--border-color)]\">\r\n {t('admin:roles.custom', 'Personnalisé')}\r\n </span>\r\n )}\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Entra Groups Tab */}\r\n {activeTab === 'entraGroups' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {(!permission.entraGroups || permission.entraGroups.length === 0) ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Building2 className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noEntraGroups', 'Aucun groupe AAD n\\'a cette permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.groupName', 'Nom du groupe')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('common:type', 'Type')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('entra:groups.members', 'Membres')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Rôles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.entraGroups.map((group) => (\r\n <tr\r\n key={group.id}\r\n onClick={() => navigate(`/administration/entra/groups/${group.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className={`w-8 h-8 rounded-full flex items-center justify-center ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? (\r\n <Shield className=\"w-4 h-4\" />\r\n ) : (\r\n <Building2 className=\"w-4 h-4\" />\r\n )}\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">{group.displayName}</span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <span className={`px-2 py-1 text-xs rounded-[var(--radius-badge)] ${\r\n group.isSecurityGroup\r\n ? 'bg-blue-500/10 text-blue-500'\r\n : 'bg-purple-500/10 text-purple-500'\r\n }`}>\r\n {group.isSecurityGroup ? t('entra:groups.securityGroup', 'Sécurité') : t('entra:groups.distributionGroup', 'Distribution')}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n <span className=\"flex items-center gap-1\">\r\n <Users className=\"w-4 h-4\" />\r\n {group.memberCount}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {group.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Users Tab */}\r\n {activeTab === 'users' && (\r\n <div className=\"bg-[var(--bg-card)] border border-[var(--border-color)] rounded-[var(--radius-card)] p-6\">\r\n {permission.users.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-muted)]\">\r\n <Users className=\"h-12 w-12 mx-auto mb-3 opacity-30\" />\r\n <p>{t('admin:permissionDetail.noUsers', 'No users have this permission')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--border-color)] overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)]\">\r\n <tr>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.name', 'Name')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:users.email', 'Email')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('admin:permissionDetail.viaRoles', 'Via Roles')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {permission.users.map((user) => (\r\n <tr\r\n key={user.id}\r\n onClick={() => navigate(`/administration/users/${user.id}`)}\r\n className=\"hover:bg-[var(--bg-hover)] cursor-pointer transition-colors\"\r\n >\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <div className=\"h-8 w-8 rounded-full bg-[var(--color-accent-100)] dark:bg-[var(--color-accent-900)] flex items-center justify-center\">\r\n <span className=\"text-sm font-medium text-[var(--color-accent-700)] dark:text-[var(--color-accent-300)]\">\r\n {user.firstName.charAt(0)}{user.lastName.charAt(0)}\r\n </span>\r\n </div>\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {user.firstName} {user.lastName}\r\n </span>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)]\">\r\n {user.email}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex flex-wrap gap-1\">\r\n {user.roleNames.map((roleName) => (\r\n <span\r\n key={roleName}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 bg-[var(--bg-tertiary)] rounded text-xs text-[var(--text-secondary)]\"\r\n >\r\n <Shield className=\"h-2.5 w-2.5\" />\r\n {roleName}\r\n </span>\r\n ))}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ACTION_ICONS","jsx","Shield","Eye","Plus","Edit","Trash2","UserPlus","Play","ACTION_COLORS","LEVEL_COLORS","PermissionDetailPage","t","useTranslation","permissionId","useParams","navigate","useNavigate","permission","setPermission","useState","loading","setLoading","error","setError","copied","setCopied","activeTab","setActiveTab","loadPermission","useCallback","data","adminApi","err","useEffect","handleCopyPath","Loader2","jsxs","actionKey","actionColor","actionIcon","levelColor","Breadcrumb","ArrowLeft","Lock","CheckCircle","Copy","Info","Layers","Calendar","Building2","Users","tab","role","group","roleName","user"],"mappings":";;;;;;AA+BA,MAAMA,IAAgD;AAAA,EACpD,KAAK,gBAAAC,EAACC,GAAA,EAAO,WAAU,UAAA,CAAU;AAAA,EACjC,MAAM,gBAAAD,EAACE,GAAA,EAAI,WAAU,UAAA,CAAU;AAAA,EAC/B,QAAQ,gBAAAF,EAACG,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,EAClC,QAAQ,gBAAAH,EAACI,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,EAClC,QAAQ,gBAAAJ,EAACK,GAAA,EAAO,WAAU,UAAA,CAAU;AAAA,EACpC,QAAQ,gBAAAL,EAACM,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,EACtC,SAAS,gBAAAN,EAACO,GAAA,EAAK,WAAU,UAAA,CAAU;AACrC,GAEMC,IAAwC;AAAA,EAC5C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX,GAEMC,IAAuC;AAAA,EAC3C,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AACZ;AAEO,SAASC,KAAqC;AACnD,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,CAAC,SAAS,QAAQ,CAAC,GAC1C,EAAE,IAAIC,EAAA,IAAiBC,EAAA,GACvBC,IAAWC,EAAA,GAEX,CAACC,GAAYC,CAAa,IAAIC,EAAqC,IAAI,GACvE,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAI,GACrC,CAACG,GAAOC,CAAQ,IAAIJ,EAAwB,IAAI,GAChD,CAACK,GAAQC,CAAS,IAAIN,EAAS,EAAK,GACpC,CAACO,GAAWC,CAAY,IAAIR,EAAgB,OAAO,GAEnDS,IAAiBC,EAAY,YAAY;AAC7C,QAAKhB;AACL,UAAI;AACF,QAAAQ,EAAW,EAAI;AACf,cAAMS,IAAO,MAAMC,EAAS,YAAY,QAAQlB,CAAY;AAC5D,QAAAK,EAAcY,CAAI;AAAA,MACpB,SAASE,GAAK;AACZ,gBAAQ,MAAM,8BAA8BA,CAAG,GAC/CT,EAASZ,EAAE,4CAA4C,2BAA2B,CAAC;AAAA,MACrF,UAAA;AACE,QAAAU,EAAW,EAAK;AAAA,MAClB;AAAA,EACF,GAAG,CAACR,GAAcF,CAAC,CAAC;AAEpB,EAAAsB,EAAU,MAAM;AACd,IAAAL,EAAA;AAAA,EACF,GAAG,CAACA,CAAc,CAAC;AAEnB,QAAMM,IAAiB,YAAY;AACjC,IAAIjB,GAAY,SACd,MAAM,UAAU,UAAU,UAAUA,EAAW,IAAI,GACnDQ,EAAU,EAAI,GACd,WAAW,MAAMA,EAAU,EAAK,GAAG,GAAI;AAAA,EAE3C;AAEA,MAAIL;AACF,WACE,gBAAApB,EAAC,SAAI,WAAU,kDACb,4BAACmC,GAAA,EAAQ,WAAU,uDAAsD,EAAA,CAC3E;AAIJ,MAAIb,KAAS,CAACL;AACZ,6BACG,OAAA,EAAI,WAAU,OACb,UAAA,gBAAAmB,EAAC,OAAA,EAAI,WAAU,2EACb,UAAA;AAAA,MAAA,gBAAApC,EAAC,OAAE,WAAU,4BAA4B,eAASW,EAAE,0CAA0C,sBAAsB,GAAE;AAAA,MACtH,gBAAAX;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAMe,EAAS,yCAAyC;AAAA,UACjE,WAAU;AAAA,UAET,YAAE,qBAAqB;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1B,EAAA,CACF,EAAA,CACF;AAIJ,QAAMsB,IAAYpB,EAAW,UAAU,KACjCqB,IAAc9B,EAAc6B,CAAS,KAAK7B,EAAc,GAAG,GAC3D+B,IAAaxC,EAAasC,CAAS,KAAKtC,EAAa,GAAG,GACxDyC,IAAa/B,EAAaQ,EAAW,KAAK,KAAK;AAErD,SACE,gBAAAmB,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,IAAA,gBAAApC;AAAA,MAACyC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,EAAE,OAAO9B,EAAE,oBAAoB,GAAG,MAAM,kBAAA;AAAA,UACxC,EAAE,OAAOA,EAAE,2BAA2B,aAAa,GAAG,MAAM,0CAAA;AAAA,UAC5D,EAAE,OAAOM,GAAY,QAAQ,SAAA;AAAA,QAAS;AAAA,MACxC;AAAA,IAAA;AAAA,IAIF,gBAAAmB,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,gBAAApC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAMe,EAAS,yCAAyC;AAAA,UACjE,WAAU;AAAA,UAEV,UAAA,gBAAAf,EAAC0C,GAAA,EAAU,WAAU,uCAAA,CAAuC;AAAA,QAAA;AAAA,MAAA;AAAA,MAE9D,gBAAAN,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAA,gBAAApC,EAAC2C,GAAA,EAAK,WAAU,yCAAA,CAAyC;AAAA,4BACxD,MAAA,EAAG,WAAU,iDACX,UAAAhC,EAAE,gCAAgC,mBAAmB,EAAA,CACxD;AAAA,QAAA,GACF;AAAA,QACA,gBAAAyB,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,UAAA,gBAAApC,EAAC,QAAA,EAAK,WAAU,mIACb,UAAAiB,EAAW,MACd;AAAA,UACA,gBAAAjB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASkC;AAAA,cACT,WAAU;AAAA,cACV,OAAOvB,EAAE,qBAAqB;AAAA,cAE7B,UAAAa,sBACEoB,GAAA,EAAY,WAAU,sCAAqC,IAE5D,gBAAA5C,EAAC6C,GAAA,EAAK,WAAU,mCAAA,CAAmC;AAAA,YAAA;AAAA,UAAA;AAAA,QAEvD,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAAT,EAAC,OAAA,EAAI,WAAU,4FACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,iFACZ,UAAA;AAAA,QAAA,gBAAApC,EAAC8C,GAAA,EAAK,WAAU,yCAAA,CAAyC;AAAA,QACxDnC,EAAE,+BAA+B,aAAa;AAAA,MAAA,GACjD;AAAA,MAEA,gBAAAyB,EAAC,OAAA,EAAI,WAAU,wDAEb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAApC,EAAC,WAAM,WAAU,wEACd,UAAAW,EAAE,2BAA2B,OAAO,GACvC;AAAA,4BACC,OAAA,EACC,UAAA,gBAAAyB,EAAC,UAAK,WAAW,iFAAiFI,CAAU,IAC1G,UAAA;AAAA,YAAA,gBAAAxC,EAAC+C,GAAA,EAAO,WAAU,UAAA,CAAU;AAAA,YAC3B9B,EAAW;AAAA,UAAA,EAAA,CACd,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAmB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAApC,EAAC,WAAM,WAAU,wEACd,UAAAW,EAAE,4BAA4B,QAAQ,GACzC;AAAA,4BACC,OAAA,EACC,UAAA,gBAAAyB,EAAC,UAAK,WAAW,wFAAwFE,CAAW,IACjH,UAAA;AAAA,YAAAC;AAAA,YACAtB,EAAW,UAAUN,EAAE,8BAA8B,cAAc;AAAA,UAAA,EAAA,CACtE,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAyB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAApC,EAAC,WAAM,WAAU,wEACd,UAAAW,EAAE,0BAA0B,MAAM,GACrC;AAAA,4BACC,OAAA,EACE,UAAAM,EAAW,aACV,gBAAAmB,EAAC,QAAA,EAAK,WAAU,sKACd,UAAA;AAAA,YAAA,gBAAApC,EAACC,GAAA,EAAO,WAAU,UAAA,CAAU;AAAA,YAC3BU,EAAE,kCAAkC,UAAU;AAAA,UAAA,EAAA,CACjD,sBAEC,QAAA,EAAK,WAAU,2KACb,UAAAA,EAAE,kCAAkC,UAAU,EAAA,CACjD,EAAA,CAEJ;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAyB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAApC,EAAC,WAAM,WAAU,wEACd,UAAAW,EAAE,+BAA+B,SAAS,GAC7C;AAAA,UACA,gBAAAyB,EAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,YAAA,gBAAApC,EAACgD,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,YAC7B,IAAI,KAAK/B,EAAW,SAAS,EAAE,mBAAA;AAAA,UAAmB,EAAA,CACrD;AAAA,QAAA,GACF;AAAA,QAGCA,EAAW,eACV,gBAAAmB,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAA,gBAAApC,EAAC,WAAM,WAAU,wEACd,UAAAW,EAAE,iCAAiC,aAAa,GACnD;AAAA,UACA,gBAAAX,EAAC,KAAA,EAAE,WAAU,wCAAwC,YAAW,YAAA,CAAY;AAAA,QAAA,EAAA,CAC9E;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,sBAGC,OAAA,EAAI,WAAU,yCACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACX,UAAA;AAAA,MACA,EAAE,IAAI,SAAS,OAAOW,EAAE,qCAAqC,OAAO,GAAG,OAAOM,EAAW,MAAM,QAAQ,wBAAOhB,GAAA,EAAO,WAAU,WAAU,EAAA;AAAA,MACzI,EAAE,IAAI,eAAe,OAAOU,EAAE,2CAA2C,aAAa,GAAG,OAAOM,EAAW,aAAa,UAAU,GAAG,wBAAOgC,GAAA,EAAU,WAAU,WAAU,EAAA;AAAA,MAC1K,EAAE,IAAI,SAAS,OAAOtC,EAAE,qCAAqC,cAAc,GAAG,OAAOM,EAAW,MAAM,QAAQ,wBAAOiC,GAAA,EAAM,WAAU,WAAU,EAAA;AAAA,IAAG,EACnE,IAAI,CAACC,MACpF,gBAAAf;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,SAAS,MAAMT,EAAawB,EAAI,EAAE;AAAA,QAClC,WAAW,sFACTzB,MAAcyB,EAAI,KACd,oEACA,qHACN;AAAA,QAEC,UAAA;AAAA,UAAAA,EAAI;AAAA,UACJA,EAAI;AAAA,UACL,gBAAAnD,EAAC,QAAA,EAAK,WAAW,oCACf0B,MAAcyB,EAAI,KACd,mEACA,qDACN,IACG,UAAAA,EAAI,MAAA,CACP;AAAA,QAAA;AAAA,MAAA;AAAA,MAhBKA,EAAI;AAAA,IAAA,CAkBZ,GACH,EAAA,CACF;AAAA,IAGA,gBAAAf,EAAC,OAAA,EAAI,WAAU,iBAEZ,UAAA;AAAA,MAAAV,MAAc,WACb,gBAAA1B,EAAC,OAAA,EAAI,WAAU,4FACZ,UAAAiB,EAAW,MAAM,WAAW,IAC3B,gBAAAmB,EAAC,OAAA,EAAI,WAAU,6CACb,UAAA;AAAA,QAAA,gBAAApC,EAACC,GAAA,EAAO,WAAU,oCAAA,CAAoC;AAAA,QACtD,gBAAAD,EAAC,KAAA,EAAG,UAAAW,EAAE,kCAAkC,+BAA+B,EAAA,CAAE;AAAA,MAAA,EAAA,CAC3E,sBAEC,OAAA,EAAI,WAAU,oFACb,UAAA,gBAAAyB,EAAC,SAAA,EAAM,WAAU,UACf,UAAA;AAAA,QAAA,gBAAApC,EAAC,SAAA,EAAM,WAAU,4BACf,UAAA,gBAAAoC,EAAC,MAAA,EACC,UAAA;AAAA,UAAA,gBAAApC,EAAC,QAAG,WAAU,wEACX,UAAAW,EAAE,oBAAoB,KAAK,GAC9B;AAAA,4BACC,MAAA,EAAG,WAAU,wEACX,UAAAA,EAAE,eAAe,MAAM,EAAA,CAC1B;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QACA,gBAAAX,EAAC,WAAM,WAAU,yCACd,YAAW,MAAM,IAAI,CAACoD,MACrB,gBAAAhB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAMrB,EAAS,qCAAqCqC,EAAK,EAAE,EAAE;AAAA,YACtE,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAApD,EAAC,QAAG,WAAU,aACZ,UAAA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,gBAAA,gBAAApC,EAAC,SAAI,WAAU,wHACb,4BAACC,GAAA,EAAO,WAAU,WAAU,EAAA,CAC9B;AAAA,gBACA,gBAAAD,EAAC,QAAA,EAAK,WAAU,0CAA0C,YAAK,KAAA,CAAK;AAAA,cAAA,EAAA,CACtE,EAAA,CACF;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,aACX,YAAK,WACJ,gBAAAoC,EAAC,QAAA,EAAK,WAAU,gKACd,UAAA;AAAA,gBAAA,gBAAApC,EAAC2C,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,gBACzBhC,EAAE,sBAAsB,SAAS;AAAA,cAAA,EAAA,CACpC,sBAEC,QAAA,EAAK,WAAU,2KACb,UAAAA,EAAE,sBAAsB,cAAc,EAAA,CACzC,EAAA,CAEJ;AAAA,YAAA;AAAA,UAAA;AAAA,UAvBKyC,EAAK;AAAA,QAAA,CAyBb,EAAA,CACH;AAAA,MAAA,EAAA,CACF,GACF,GAEJ;AAAA,MAID1B,MAAc,iBACb,gBAAA1B,EAAC,OAAA,EAAI,WAAU,4FACX,UAAA,CAACiB,EAAW,eAAeA,EAAW,YAAY,WAAW,IAC7D,gBAAAmB,EAAC,OAAA,EAAI,WAAU,6CACb,UAAA;AAAA,QAAA,gBAAApC,EAACiD,GAAA,EAAU,WAAU,oCAAA,CAAoC;AAAA,QACzD,gBAAAjD,EAAC,KAAA,EAAG,UAAAW,EAAE,wCAAwC,uCAAwC,EAAA,CAAE;AAAA,MAAA,EAAA,CAC1F,sBAEC,OAAA,EAAI,WAAU,oFACb,UAAA,gBAAAyB,EAAC,SAAA,EAAM,WAAU,UACf,UAAA;AAAA,QAAA,gBAAApC,EAAC,SAAA,EAAM,WAAU,4BACf,UAAA,gBAAAoC,EAAC,MAAA,EACC,UAAA;AAAA,UAAA,gBAAApC,EAAC,QAAG,WAAU,wEACX,UAAAW,EAAE,0BAA0B,eAAe,GAC9C;AAAA,4BACC,MAAA,EAAG,WAAU,wEACX,UAAAA,EAAE,eAAe,MAAM,GAC1B;AAAA,4BACC,MAAA,EAAG,WAAU,wEACX,UAAAA,EAAE,wBAAwB,SAAS,GACtC;AAAA,4BACC,MAAA,EAAG,WAAU,wEACX,UAAAA,EAAE,mCAAmC,WAAW,EAAA,CACnD;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QACA,gBAAAX,EAAC,WAAM,WAAU,yCACd,YAAW,YAAY,IAAI,CAACqD,MAC3B,gBAAAjB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAMrB,EAAS,gCAAgCsC,EAAM,EAAE,EAAE;AAAA,YAClE,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAArD,EAAC,QAAG,WAAU,aACZ,UAAA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,gBAAA,gBAAApC,EAAC,SAAI,WAAW,yDACdqD,EAAM,kBACF,iCACA,kCACN,IACG,UAAAA,EAAM,kBACL,gBAAArD,EAACC,GAAA,EAAO,WAAU,UAAA,CAAU,sBAE3BgD,GAAA,EAAU,WAAU,WAAU,EAAA,CAEnC;AAAA,gBACA,gBAAAjD,EAAC,QAAA,EAAK,WAAU,0CAA0C,YAAM,YAAA,CAAY;AAAA,cAAA,EAAA,CAC9E,EAAA,CACF;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,aACZ,4BAAC,QAAA,EAAK,WAAW,mDACfqD,EAAM,kBACF,iCACA,kCACN,IACG,UAAAA,EAAM,kBAAkB1C,EAAE,8BAA8B,UAAU,IAAIA,EAAE,kCAAkC,cAAc,EAAA,CAC3H,EAAA,CACF;AAAA,gCACC,MAAA,EAAG,WAAU,kDACZ,UAAA,gBAAAyB,EAAC,QAAA,EAAK,WAAU,2BACd,UAAA;AAAA,gBAAA,gBAAApC,EAACkD,GAAA,EAAM,WAAU,UAAA,CAAU;AAAA,gBAC1BG,EAAM;AAAA,cAAA,EAAA,CACT,EAAA,CACF;AAAA,cACA,gBAAArD,EAAC,MAAA,EAAG,WAAU,aACZ,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAAqD,EAAM,UAAU,IAAI,CAACC,MACpB,gBAAAlB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAApC,EAACC,GAAA,EAAO,WAAU,cAAA,CAAc;AAAA,oBAC/BqD;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAJIA;AAAA,cAAA,CAMR,GACH,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UA/CKD,EAAM;AAAA,QAAA,CAiDd,EAAA,CACH;AAAA,MAAA,EAAA,CACF,GACF,GAEJ;AAAA,MAID3B,MAAc,WACb,gBAAA1B,EAAC,OAAA,EAAI,WAAU,4FACZ,UAAAiB,EAAW,MAAM,WAAW,IAC3B,gBAAAmB,EAAC,OAAA,EAAI,WAAU,6CACb,UAAA;AAAA,QAAA,gBAAApC,EAACkD,GAAA,EAAM,WAAU,oCAAA,CAAoC;AAAA,QACrD,gBAAAlD,EAAC,KAAA,EAAG,UAAAW,EAAE,kCAAkC,+BAA+B,EAAA,CAAE;AAAA,MAAA,EAAA,CAC3E,sBAEC,OAAA,EAAI,WAAU,oFACb,UAAA,gBAAAyB,EAAC,SAAA,EAAM,WAAU,UACf,UAAA;AAAA,QAAA,gBAAApC,EAAC,SAAA,EAAM,WAAU,4BACf,UAAA,gBAAAoC,EAAC,MAAA,EACC,UAAA;AAAA,UAAA,gBAAApC,EAAC,QAAG,WAAU,wEACX,UAAAW,EAAE,oBAAoB,MAAM,GAC/B;AAAA,4BACC,MAAA,EAAG,WAAU,wEACX,UAAAA,EAAE,qBAAqB,OAAO,GACjC;AAAA,4BACC,MAAA,EAAG,WAAU,wEACX,UAAAA,EAAE,mCAAmC,WAAW,EAAA,CACnD;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,QACA,gBAAAX,EAAC,WAAM,WAAU,yCACd,YAAW,MAAM,IAAI,CAACuD,MACrB,gBAAAnB;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,MAAMrB,EAAS,yBAAyBwC,EAAK,EAAE,EAAE;AAAA,YAC1D,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAAvD,EAAC,QAAG,WAAU,aACZ,UAAA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,gBAAA,gBAAApC,EAAC,SAAI,WAAU,wHACb,UAAA,gBAAAoC,EAAC,QAAA,EAAK,WAAU,0FACb,UAAA;AAAA,kBAAAmB,EAAK,UAAU,OAAO,CAAC;AAAA,kBAAGA,EAAK,SAAS,OAAO,CAAC;AAAA,gBAAA,EAAA,CACnD,EAAA,CACF;AAAA,gBACA,gBAAAnB,EAAC,QAAA,EAAK,WAAU,0CACb,UAAA;AAAA,kBAAAmB,EAAK;AAAA,kBAAU;AAAA,kBAAEA,EAAK;AAAA,gBAAA,EAAA,CACzB;AAAA,cAAA,EAAA,CACF,EAAA,CACF;AAAA,cACA,gBAAAvD,EAAC,MAAA,EAAG,WAAU,kDACX,YAAK,OACR;AAAA,cACA,gBAAAA,EAAC,MAAA,EAAG,WAAU,aACZ,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAAuD,EAAK,UAAU,IAAI,CAACD,MACnB,gBAAAlB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAApC,EAACC,GAAA,EAAO,WAAU,cAAA,CAAc;AAAA,oBAC/BqD;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAJIA;AAAA,cAAA,CAMR,GACH,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UA/BKC,EAAK;AAAA,QAAA,CAiCb,EAAA,CACH;AAAA,MAAA,EAAA,CACF,GACF,EAAA,CAEJ;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;"}
@@ -3,7 +3,7 @@ import { useState as m, useCallback as B, useEffect as R } from "react";
3
3
  import { useTranslation as G } from "react-i18next";
4
4
  import { useNavigate as W } from "react-router-dom";
5
5
  import { Shield as g, FolderTree as q, List as z, LayoutGrid as S, Layers as j, FileCode as C, Search as H, Loader2 as w, ChevronDown as L, ChevronRight as P, Sparkles as J, ExternalLink as K } from "lucide-react";
6
- import { k, B as O } from "./index-DA5VyW0k.js";
6
+ import { k, B as O } from "./index-CpY95_ro.js";
7
7
  function Q({ app: t, expandedNodes: i, toggleNode: o, t: l }) {
8
8
  return /* @__PURE__ */ r("div", { children: [
9
9
  /* @__PURE__ */ r(
@@ -293,4 +293,4 @@ function ie() {
293
293
  export {
294
294
  ie as PermissionsPage
295
295
  };
296
- //# sourceMappingURL=PermissionsPage-BGI2nxCn.js.map
296
+ //# sourceMappingURL=PermissionsPage-CDSuc8vw.js.map