@atlashub/smartstack 3.21.0 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js → AgentSkillsPage-BWQSCYl-.js} +2 -2
  2. package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js.map → AgentSkillsPage-BWQSCYl-.js.map} +1 -1
  3. package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js → AgentSkillsPage-IQcMnBaD.js} +2 -2
  4. package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js.map → AgentSkillsPage-IQcMnBaD.js.map} +1 -1
  5. package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js → AgentWorkloadPage-DqrjkvWL.js} +2 -2
  6. package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js.map → AgentWorkloadPage-DqrjkvWL.js.map} +1 -1
  7. package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js → AgentWorkloadPage-w-HiyFYP.js} +2 -2
  8. package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js.map → AgentWorkloadPage-w-HiyFYP.js.map} +1 -1
  9. package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js → ApiCatalogDetailPage-D3L8Yf4G.js} +3 -3
  10. package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js.map → ApiCatalogDetailPage-D3L8Yf4G.js.map} +1 -1
  11. package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js → ApiCatalogDetailPage-MPT3Kz6H.js} +2 -2
  12. package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js.map → ApiCatalogDetailPage-MPT3Kz6H.js.map} +1 -1
  13. package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js → ApiCatalogPage-D4Hg3uiS.js} +2 -2
  14. package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js.map → ApiCatalogPage-D4Hg3uiS.js.map} +1 -1
  15. package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js → ApiCatalogPage-DRg5Cz0r.js} +2 -2
  16. package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js.map → ApiCatalogPage-DRg5Cz0r.js.map} +1 -1
  17. package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js → ApplicationDetailPage-Caizuyn2.js} +2 -2
  18. package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js.map → ApplicationDetailPage-Caizuyn2.js.map} +1 -1
  19. package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js → ApplicationDetailPage-CuCW6aMB.js} +4 -4
  20. package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js.map → ApplicationDetailPage-CuCW6aMB.js.map} +1 -1
  21. package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js → ApplicationsDashboardPage-B2MW8-Kc.js} +2 -2
  22. package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js.map → ApplicationsDashboardPage-B2MW8-Kc.js.map} +1 -1
  23. package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js → ApplicationsDashboardPage-BDIjFIYZ.js} +3 -3
  24. package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js.map → ApplicationsDashboardPage-BDIjFIYZ.js.map} +1 -1
  25. package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js → ApplicationsGridPage-DV-FihKj.js} +2 -2
  26. package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js.map → ApplicationsGridPage-DV-FihKj.js.map} +1 -1
  27. package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js → ApplicationsGridPage-DXsTfXPI.js} +2 -2
  28. package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js.map → ApplicationsGridPage-DXsTfXPI.js.map} +1 -1
  29. package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js → ApplicationsListPage--CGkyBuJ.js} +2 -2
  30. package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js.map → ApplicationsListPage--CGkyBuJ.js.map} +1 -1
  31. package/dist/chunks/{ApplicationsListPage-C91v2rZt.js → ApplicationsListPage-JUX823bh.js} +2 -2
  32. package/dist/chunks/{ApplicationsListPage-C91v2rZt.js.map → ApplicationsListPage-JUX823bh.js.map} +1 -1
  33. package/dist/chunks/{ApplicationsPage-BCbgotIx.js → ApplicationsPage-6zgFye6w.js} +2 -2
  34. package/dist/chunks/{ApplicationsPage-BCbgotIx.js.map → ApplicationsPage-6zgFye6w.js.map} +1 -1
  35. package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js → ApplicationsPage-CQPuuiO6.js} +4 -4
  36. package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js.map → ApplicationsPage-CQPuuiO6.js.map} +1 -1
  37. package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js → AssignmentRulesPage-CFffeEbo.js} +2 -2
  38. package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js.map → AssignmentRulesPage-CFffeEbo.js.map} +1 -1
  39. package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js → AssignmentRulesPage-D78UeUId.js} +2 -2
  40. package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js.map → AssignmentRulesPage-D78UeUId.js.map} +1 -1
  41. package/dist/chunks/{AssignmentsPage-DmfBYQAD.js → AssignmentsPage-Cww2ifZF.js} +2 -2
  42. package/dist/chunks/{AssignmentsPage-DmfBYQAD.js.map → AssignmentsPage-Cww2ifZF.js.map} +1 -1
  43. package/dist/chunks/{AssignmentsPage-sRCCBmRc.js → AssignmentsPage-DE_QS2LO.js} +2 -2
  44. package/dist/chunks/{AssignmentsPage-sRCCBmRc.js.map → AssignmentsPage-DE_QS2LO.js.map} +1 -1
  45. package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js → AuthCallbackPage-CA2nO6DG.js} +2 -2
  46. package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js.map → AuthCallbackPage-CA2nO6DG.js.map} +1 -1
  47. package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js → AuthCallbackPage-CDUAoX-N.js} +2 -2
  48. package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js.map → AuthCallbackPage-CDUAoX-N.js.map} +1 -1
  49. package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js → ConfirmEmailPage-BqsILAYH.js} +2 -2
  50. package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js.map → ConfirmEmailPage-BqsILAYH.js.map} +1 -1
  51. package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js → ConfirmEmailPage-INeHCuMB.js} +2 -2
  52. package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js.map → ConfirmEmailPage-INeHCuMB.js.map} +1 -1
  53. package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js → CreateSupportTicketPage-BWeuV2aU.js} +2 -2
  54. package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js.map → CreateSupportTicketPage-BWeuV2aU.js.map} +1 -1
  55. package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js → CreateSupportTicketPage-OBwF4v7b.js} +2 -2
  56. package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js.map → CreateSupportTicketPage-OBwF4v7b.js.map} +1 -1
  57. package/dist/chunks/{DashboardPage-CUZ80NGV.js → DashboardPage-CKHqWrdS.js} +3 -3
  58. package/dist/chunks/{DashboardPage-CUZ80NGV.js.map → DashboardPage-CKHqWrdS.js.map} +1 -1
  59. package/dist/chunks/{DashboardPage-CaNOAstg.js → DashboardPage-COmc9b__.js} +3 -3
  60. package/dist/chunks/{DashboardPage-CaNOAstg.js.map → DashboardPage-COmc9b__.js.map} +1 -1
  61. package/dist/chunks/{DashboardPage-B48_rQFi.js → DashboardPage-CfKZHiSj.js} +2 -2
  62. package/dist/chunks/{DashboardPage-B48_rQFi.js.map → DashboardPage-CfKZHiSj.js.map} +1 -1
  63. package/dist/chunks/{DashboardPage-CUZV1J9t.js → DashboardPage-CwEZZ3jx.js} +2 -2
  64. package/dist/chunks/{DashboardPage-CUZV1J9t.js.map → DashboardPage-CwEZZ3jx.js.map} +1 -1
  65. package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js → EscalationConfigPage--7lgZ0kJ.js} +2 -2
  66. package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js.map → EscalationConfigPage--7lgZ0kJ.js.map} +1 -1
  67. package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js → EscalationConfigPage-DPyiBcqV.js} +2 -2
  68. package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js.map → EscalationConfigPage-DPyiBcqV.js.map} +1 -1
  69. package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js → ForceChangePasswordPage-BE-6umub.js} +2 -2
  70. package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js.map → ForceChangePasswordPage-BE-6umub.js.map} +1 -1
  71. package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js → ForceChangePasswordPage-CnsYoWmV.js} +2 -2
  72. package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js.map → ForceChangePasswordPage-CnsYoWmV.js.map} +1 -1
  73. package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js → ForgotPasswordPage-CSq4DnFF.js} +2 -2
  74. package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js.map → ForgotPasswordPage-CSq4DnFF.js.map} +1 -1
  75. package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js → ForgotPasswordPage-DZLVolAC.js} +2 -2
  76. package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js.map → ForgotPasswordPage-DZLVolAC.js.map} +1 -1
  77. package/dist/chunks/{GroupDetailPage-DFBvVO1S.js → GroupDetailPage-Bf9Wb_2j.js} +5 -5
  78. package/dist/chunks/{GroupDetailPage-DFBvVO1S.js.map → GroupDetailPage-Bf9Wb_2j.js.map} +1 -1
  79. package/dist/chunks/{GroupDetailPage-B2FkKrGG.js → GroupDetailPage-R-hf3rJ7.js} +2 -2
  80. package/dist/chunks/{GroupDetailPage-B2FkKrGG.js.map → GroupDetailPage-R-hf3rJ7.js.map} +1 -1
  81. package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js → MyAccessRequestsPage-BIisvWM6.js} +2 -2
  82. package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js.map → MyAccessRequestsPage-BIisvWM6.js.map} +1 -1
  83. package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js → MyAccessRequestsPage-BLSV7Tbx.js} +2 -2
  84. package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js.map → MyAccessRequestsPage-BLSV7Tbx.js.map} +1 -1
  85. package/dist/chunks/{MyTenantsPage-BEcYYdGR.js → MyTenantsPage-D-7k9CP1.js} +3 -3
  86. package/dist/chunks/{MyTenantsPage-BEcYYdGR.js.map → MyTenantsPage-D-7k9CP1.js.map} +1 -1
  87. package/dist/chunks/{MyTenantsPage-D9f85zjF.js → MyTenantsPage-DqGW6aDt.js} +2 -2
  88. package/dist/chunks/{MyTenantsPage-D9f85zjF.js.map → MyTenantsPage-DqGW6aDt.js.map} +1 -1
  89. package/dist/chunks/{MyTicketsPage-DJR8h6y1.js → MyTicketsPage--DgDsnZA.js} +2 -2
  90. package/dist/chunks/{MyTicketsPage-DJR8h6y1.js.map → MyTicketsPage--DgDsnZA.js.map} +1 -1
  91. package/dist/chunks/{MyTicketsPage-DiOUExKJ.js → MyTicketsPage-CqJ3Aqob.js} +2 -2
  92. package/dist/chunks/{MyTicketsPage-DiOUExKJ.js.map → MyTicketsPage-CqJ3Aqob.js.map} +1 -1
  93. package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js → NavigationAppsPage-Bebis_RT.js} +2 -2
  94. package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js.map → NavigationAppsPage-Bebis_RT.js.map} +1 -1
  95. package/dist/chunks/{NavigationAppsPage-If7tmCFY.js → NavigationAppsPage-THNPOAjv.js} +2 -2
  96. package/dist/chunks/{NavigationAppsPage-If7tmCFY.js.map → NavigationAppsPage-THNPOAjv.js.map} +1 -1
  97. package/dist/chunks/{NotificationsPage-C29Lln5o.js → NotificationsPage-CAbNW_Cn.js} +2 -2
  98. package/dist/chunks/{NotificationsPage-C29Lln5o.js.map → NotificationsPage-CAbNW_Cn.js.map} +1 -1
  99. package/dist/chunks/{NotificationsPage-BiaLRb0s.js → NotificationsPage-DxwizUhL.js} +2 -2
  100. package/dist/chunks/{NotificationsPage-BiaLRb0s.js.map → NotificationsPage-DxwizUhL.js.map} +1 -1
  101. package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js → OnboardingWizardPage-C6HlbJ3K.js} +2 -2
  102. package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js.map → OnboardingWizardPage-C6HlbJ3K.js.map} +1 -1
  103. package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js → OnboardingWizardPage-CyC2zONO.js} +2 -2
  104. package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js.map → OnboardingWizardPage-CyC2zONO.js.map} +1 -1
  105. package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js → PermissionDetailPage-BDHiNgky.js} +2 -2
  106. package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js.map → PermissionDetailPage-BDHiNgky.js.map} +1 -1
  107. package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js → PermissionDetailPage-C5K17ydY.js} +2 -2
  108. package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js.map → PermissionDetailPage-C5K17ydY.js.map} +1 -1
  109. package/dist/chunks/{PermissionsPage-l0PnY-EE.js → PermissionsPage-COI5LJPo.js} +2 -2
  110. package/dist/chunks/{PermissionsPage-l0PnY-EE.js.map → PermissionsPage-COI5LJPo.js.map} +1 -1
  111. package/dist/chunks/{PermissionsPage-DLy9U3P3.js → PermissionsPage-CkOwH2_d.js} +2 -2
  112. package/dist/chunks/{PermissionsPage-DLy9U3P3.js.map → PermissionsPage-CkOwH2_d.js.map} +1 -1
  113. package/dist/chunks/{PortalDashboardPage-DFBx38-x.js → PortalDashboardPage-CoEC4CmC.js} +2 -2
  114. package/dist/chunks/{PortalDashboardPage-DFBx38-x.js.map → PortalDashboardPage-CoEC4CmC.js.map} +1 -1
  115. package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js → PortalDashboardPage-DrYymEf-.js} +2 -2
  116. package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js.map → PortalDashboardPage-DrYymEf-.js.map} +1 -1
  117. package/dist/chunks/{PreferencesPage-BBu8yZQB.js → PreferencesPage-CJRaU3ba.js} +2 -2
  118. package/dist/chunks/{PreferencesPage-BBu8yZQB.js.map → PreferencesPage-CJRaU3ba.js.map} +1 -1
  119. package/dist/chunks/{PreferencesPage-B81MsNV1.js → PreferencesPage-Cqr9mAab.js} +2 -2
  120. package/dist/chunks/{PreferencesPage-B81MsNV1.js.map → PreferencesPage-Cqr9mAab.js.map} +1 -1
  121. package/dist/chunks/{ProfilePage-DDrl10zj.js → ProfilePage-BZVpg6-l.js} +2 -2
  122. package/dist/chunks/{ProfilePage-DDrl10zj.js.map → ProfilePage-BZVpg6-l.js.map} +1 -1
  123. package/dist/chunks/{ProfilePage-DPoXwdnc.js → ProfilePage-Cu_FITeL.js} +2 -2
  124. package/dist/chunks/{ProfilePage-DPoXwdnc.js.map → ProfilePage-Cu_FITeL.js.map} +1 -1
  125. package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js → ReferencesManagementPage-DUlVk9Ps.js} +3 -3
  126. package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js.map → ReferencesManagementPage-DUlVk9Ps.js.map} +1 -1
  127. package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js → ReferencesManagementPage-ZCuYtqd7.js} +2 -2
  128. package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js.map → ReferencesManagementPage-ZCuYtqd7.js.map} +1 -1
  129. package/dist/chunks/{RegisterPage-CiQib3-6.js → RegisterPage-C4xmVwh9.js} +2 -2
  130. package/dist/chunks/{RegisterPage-CiQib3-6.js.map → RegisterPage-C4xmVwh9.js.map} +1 -1
  131. package/dist/chunks/{RegisterPage-bXCcJD88.js → RegisterPage-DGyzoIHT.js} +2 -2
  132. package/dist/chunks/{RegisterPage-bXCcJD88.js.map → RegisterPage-DGyzoIHT.js.map} +1 -1
  133. package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js → ResetPasswordPage-DqDD6VPR.js} +2 -2
  134. package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js.map → ResetPasswordPage-DqDD6VPR.js.map} +1 -1
  135. package/dist/chunks/{ResetPasswordPage-CubPG3yv.js → ResetPasswordPage-Glu-aeqv.js} +2 -2
  136. package/dist/chunks/{ResetPasswordPage-CubPG3yv.js.map → ResetPasswordPage-Glu-aeqv.js.map} +1 -1
  137. package/dist/chunks/{ResolutionModal-Bg7XZmR1.js → ResolutionModal-CxjANAOP.js} +2 -2
  138. package/dist/chunks/{ResolutionModal-Bg7XZmR1.js.map → ResolutionModal-CxjANAOP.js.map} +1 -1
  139. package/dist/chunks/{ResolutionModal-DqRk_T0n.js → ResolutionModal-Duat18qV.js} +2 -2
  140. package/dist/chunks/{ResolutionModal-DqRk_T0n.js.map → ResolutionModal-Duat18qV.js.map} +1 -1
  141. package/dist/chunks/{RoleDetailPage-Blau6_4c.js → RoleDetailPage-BQffUSnt.js} +3 -3
  142. package/dist/chunks/{RoleDetailPage-Blau6_4c.js.map → RoleDetailPage-BQffUSnt.js.map} +1 -1
  143. package/dist/chunks/{RoleDetailPage-CiRVxxIP.js → RoleDetailPage-JTm5lD1_.js} +2 -2
  144. package/dist/chunks/{RoleDetailPage-CiRVxxIP.js.map → RoleDetailPage-JTm5lD1_.js.map} +1 -1
  145. package/dist/chunks/{RolesPage-Pm-RN3lP.js → RolesPage-B9rRzciI.js} +2 -2
  146. package/dist/chunks/{RolesPage-Pm-RN3lP.js.map → RolesPage-B9rRzciI.js.map} +1 -1
  147. package/dist/chunks/{RolesPage-Cb8joqdJ.js → RolesPage-BN8_zMOC.js} +2 -2
  148. package/dist/chunks/{RolesPage-Cb8joqdJ.js.map → RolesPage-BN8_zMOC.js.map} +1 -1
  149. package/dist/chunks/{SlaConfigPage-B86McKM6.js → SlaConfigPage-B7kZNig4.js} +2 -2
  150. package/dist/chunks/{SlaConfigPage-B86McKM6.js.map → SlaConfigPage-B7kZNig4.js.map} +1 -1
  151. package/dist/chunks/{SlaConfigPage-BY7gvYU6.js → SlaConfigPage-okvZfA_K.js} +2 -2
  152. package/dist/chunks/{SlaConfigPage-BY7gvYU6.js.map → SlaConfigPage-okvZfA_K.js.map} +1 -1
  153. package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js → SupportPermissionsPage-DGAPqJbl.js} +2 -2
  154. package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js.map → SupportPermissionsPage-DGAPqJbl.js.map} +1 -1
  155. package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js → SupportPermissionsPage-Dg_wLOme.js} +2 -2
  156. package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js.map → SupportPermissionsPage-Dg_wLOme.js.map} +1 -1
  157. package/dist/chunks/{TemplatesPage-BDguJ401.js → TemplatesPage-DT9fhlAU.js} +2 -2
  158. package/dist/chunks/{TemplatesPage-BDguJ401.js.map → TemplatesPage-DT9fhlAU.js.map} +1 -1
  159. package/dist/chunks/{TemplatesPage-DdnGgioU.js → TemplatesPage-DiEk538p.js} +2 -2
  160. package/dist/chunks/{TemplatesPage-DdnGgioU.js.map → TemplatesPage-DiEk538p.js.map} +1 -1
  161. package/dist/chunks/{TenantCard-ffwWsgFQ.js → TenantCard-BbSYk9_Z.js} +2 -2
  162. package/dist/chunks/{TenantCard-ffwWsgFQ.js.map → TenantCard-BbSYk9_Z.js.map} +1 -1
  163. package/dist/chunks/{TenantCard-CUjb6og9.js → TenantCard-CEkiKxcZ.js} +2 -2
  164. package/dist/chunks/{TenantCard-CUjb6og9.js.map → TenantCard-CEkiKxcZ.js.map} +1 -1
  165. package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js → TenantScopeSelector-BWfYxvEa.js} +2 -2
  166. package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js.map → TenantScopeSelector-BWfYxvEa.js.map} +1 -1
  167. package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js → TenantScopeSelector-D-BKgQPV.js} +2 -2
  168. package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js.map → TenantScopeSelector-D-BKgQPV.js.map} +1 -1
  169. package/dist/chunks/{TicketDetailPage-GOh9GX7E.js → TicketDetailPage-C1mNS9Up.js} +2 -2
  170. package/dist/chunks/{TicketDetailPage-GOh9GX7E.js.map → TicketDetailPage-C1mNS9Up.js.map} +1 -1
  171. package/dist/chunks/{TicketDetailPage-Du8WMyqf.js → TicketDetailPage-ieVDRh42.js} +2 -2
  172. package/dist/chunks/{TicketDetailPage-Du8WMyqf.js.map → TicketDetailPage-ieVDRh42.js.map} +1 -1
  173. package/dist/chunks/{TicketsPage-Bqd6moQy.js → TicketsPage-CnuWsnIW.js} +2 -2
  174. package/dist/chunks/{TicketsPage-Bqd6moQy.js.map → TicketsPage-CnuWsnIW.js.map} +1 -1
  175. package/dist/chunks/{TicketsPage-WdU4Bb7M.js → TicketsPage-jjyY15_D.js} +2 -2
  176. package/dist/chunks/{TicketsPage-WdU4Bb7M.js.map → TicketsPage-jjyY15_D.js.map} +1 -1
  177. package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js → UserCreateTicketPage-B8Tvf-ag.js} +2 -2
  178. package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js.map → UserCreateTicketPage-B8Tvf-ag.js.map} +1 -1
  179. package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js → UserCreateTicketPage-DnOsDlfO.js} +2 -2
  180. package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js.map → UserCreateTicketPage-DnOsDlfO.js.map} +1 -1
  181. package/dist/chunks/{UserDashboardPage-BP5WeXPS.js → UserDashboardPage-BrtkJ-NB.js} +2 -2
  182. package/dist/chunks/{UserDashboardPage-BP5WeXPS.js.map → UserDashboardPage-BrtkJ-NB.js.map} +1 -1
  183. package/dist/chunks/{UserDashboardPage-B53C8fUq.js → UserDashboardPage-KLB5CQP5.js} +2 -2
  184. package/dist/chunks/{UserDashboardPage-B53C8fUq.js.map → UserDashboardPage-KLB5CQP5.js.map} +1 -1
  185. package/dist/chunks/{UserDetailPage-B110bmGX.js → UserDetailPage-U7smBQoF.js} +5 -5
  186. package/dist/chunks/{UserDetailPage-B110bmGX.js.map → UserDetailPage-U7smBQoF.js.map} +1 -1
  187. package/dist/chunks/{UserDetailPage-CV2VCE46.js → UserDetailPage-_J6lcKAU.js} +2 -2
  188. package/dist/chunks/{UserDetailPage-CV2VCE46.js.map → UserDetailPage-_J6lcKAU.js.map} +1 -1
  189. package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js → UserTicketDetailPage-CWoYQgH-.js} +2 -2
  190. package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js.map → UserTicketDetailPage-CWoYQgH-.js.map} +1 -1
  191. package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js → UserTicketDetailPage-DkufSlvZ.js} +2 -2
  192. package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js.map → UserTicketDetailPage-DkufSlvZ.js.map} +1 -1
  193. package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js → UsersGroupsPage-C38s2-Rq.js} +3 -3
  194. package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js.map → UsersGroupsPage-C38s2-Rq.js.map} +1 -1
  195. package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js → UsersGroupsPage-Dq3rAteo.js} +2 -2
  196. package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js.map → UsersGroupsPage-Dq3rAteo.js.map} +1 -1
  197. package/dist/chunks/{UsersPage-Bg7033pp.js → UsersPage-B5C5KEUR.js} +2 -2
  198. package/dist/chunks/{UsersPage-Bg7033pp.js.map → UsersPage-B5C5KEUR.js.map} +1 -1
  199. package/dist/chunks/{UsersPage-TYAfwPY1.js → UsersPage-CXC9Hvq6.js} +2 -2
  200. package/dist/chunks/{UsersPage-TYAfwPY1.js.map → UsersPage-CXC9Hvq6.js.map} +1 -1
  201. package/dist/chunks/{accessRequestsApi-DZeDvzwv.js → accessRequestsApi-B-4TJ5_U.js} +2 -2
  202. package/dist/chunks/{accessRequestsApi-DZeDvzwv.js.map → accessRequestsApi-B-4TJ5_U.js.map} +1 -1
  203. package/dist/chunks/{accessRequestsApi-ZXFPCid2.js → accessRequestsApi-DZSfThpd.js} +2 -2
  204. package/dist/chunks/{accessRequestsApi-ZXFPCid2.js.map → accessRequestsApi-DZSfThpd.js.map} +1 -1
  205. package/dist/chunks/{aiApi-CsH8DXgs.js → aiApi-B20Teu2v.js} +2 -2
  206. package/dist/chunks/{aiApi-CsH8DXgs.js.map → aiApi-B20Teu2v.js.map} +1 -1
  207. package/dist/chunks/{aiApi-CVPzFTXa.js → aiApi-DMGz-RPM.js} +2 -2
  208. package/dist/chunks/{aiApi-CVPzFTXa.js.map → aiApi-DMGz-RPM.js.map} +1 -1
  209. package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js → applicationAnalyticsApi-Bwa75Fzd.js} +2 -2
  210. package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js.map → applicationAnalyticsApi-Bwa75Fzd.js.map} +1 -1
  211. package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js → applicationAnalyticsApi-CLBqRPfN.js} +2 -2
  212. package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js.map → applicationAnalyticsApi-CLBqRPfN.js.map} +1 -1
  213. package/dist/chunks/{groupsApi-BgCk2fsp.js → groupsApi-QzXI-5xu.js} +2 -2
  214. package/dist/chunks/{groupsApi-BgCk2fsp.js.map → groupsApi-QzXI-5xu.js.map} +1 -1
  215. package/dist/chunks/{groupsApi-BIbG665N.js → groupsApi-hB9kSWEd.js} +2 -2
  216. package/dist/chunks/{groupsApi-BIbG665N.js.map → groupsApi-hB9kSWEd.js.map} +1 -1
  217. package/dist/chunks/{index-Cb3LotuT.js → index--NGcBYUu.js} +3 -3
  218. package/dist/chunks/{index-Cb3LotuT.js.map → index--NGcBYUu.js.map} +1 -1
  219. package/dist/chunks/{index-C33zcyF4.js → index--aPwOFjF.js} +2 -2
  220. package/dist/chunks/{index-C33zcyF4.js.map → index--aPwOFjF.js.map} +1 -1
  221. package/dist/chunks/{index-sMr9qND_.js → index-0VrOtwP0.js} +2 -2
  222. package/dist/chunks/{index-sMr9qND_.js.map → index-0VrOtwP0.js.map} +1 -1
  223. package/dist/chunks/{index-DDKetfKq.js → index-37U271aw.js} +2 -2
  224. package/dist/chunks/{index-DDKetfKq.js.map → index-37U271aw.js.map} +1 -1
  225. package/dist/chunks/{index-B9fS7ir6.js → index-B7qZTuQ-.js} +2 -2
  226. package/dist/chunks/{index-B9fS7ir6.js.map → index-B7qZTuQ-.js.map} +1 -1
  227. package/dist/chunks/{index-CdjBY7L8.js → index-Bedzmqr-.js} +2 -2
  228. package/dist/chunks/{index-CdjBY7L8.js.map → index-Bedzmqr-.js.map} +1 -1
  229. package/dist/chunks/{index-CHG_O1fS.js → index-Betxo5g5.js} +2 -2
  230. package/dist/chunks/{index-CHG_O1fS.js.map → index-Betxo5g5.js.map} +1 -1
  231. package/dist/chunks/{index-jiGu-H8x.js → index-BmaJz475.js} +2 -2
  232. package/dist/chunks/{index-jiGu-H8x.js.map → index-BmaJz475.js.map} +1 -1
  233. package/dist/chunks/{index-C53JoVNk.js → index-Buhqag3v.js} +2 -2
  234. package/dist/chunks/{index-C53JoVNk.js.map → index-Buhqag3v.js.map} +1 -1
  235. package/dist/chunks/{index-DO0Rw7hX.js → index-C3VxlfKq.js} +2 -2
  236. package/dist/chunks/{index-DO0Rw7hX.js.map → index-C3VxlfKq.js.map} +1 -1
  237. package/dist/chunks/{index-CSQ60fpG.js → index-CgpRo8Oe.js} +2 -2
  238. package/dist/chunks/{index-CSQ60fpG.js.map → index-CgpRo8Oe.js.map} +1 -1
  239. package/dist/chunks/{index-B-e-ELsf.js → index-DOY0w8Iu.js} +8 -8
  240. package/dist/chunks/{index-B-e-ELsf.js.map → index-DOY0w8Iu.js.map} +1 -1
  241. package/dist/chunks/{index-D2REDIRX.js → index-DwuvIOrQ.js} +2 -2
  242. package/dist/chunks/{index-D2REDIRX.js.map → index-DwuvIOrQ.js.map} +1 -1
  243. package/dist/chunks/{index-DCcl7Qof.js → index-DzedSLdI.js} +2 -2
  244. package/dist/chunks/{index-DCcl7Qof.js.map → index-DzedSLdI.js.map} +1 -1
  245. package/dist/chunks/{index-2wUhd9Lu.js → index-IgLVXPg8.js} +10 -10
  246. package/dist/chunks/index-IgLVXPg8.js.map +1 -0
  247. package/dist/chunks/{index-CwSaRXXg.js → index-lpIzhufD.js} +1916 -1900
  248. package/dist/chunks/index-lpIzhufD.js.map +1 -0
  249. package/dist/chunks/{index-Cuwn2q-f.js → index-mLUKwbGl.js} +4 -4
  250. package/dist/chunks/{index-Cuwn2q-f.js.map → index-mLUKwbGl.js.map} +1 -1
  251. package/dist/chunks/{index-B0mk2tNY.js → index-tO6MMIFB.js} +2 -2
  252. package/dist/chunks/{index-B0mk2tNY.js.map → index-tO6MMIFB.js.map} +1 -1
  253. package/dist/chunks/{tenantIconMap-BpNANQ5s.js → tenantIconMap-BQD9byc8.js} +2 -2
  254. package/dist/chunks/{tenantIconMap-BpNANQ5s.js.map → tenantIconMap-BQD9byc8.js.map} +1 -1
  255. package/dist/chunks/{tenantIconMap-DtdUgvJO.js → tenantIconMap-CTMuSt18.js} +2 -2
  256. package/dist/chunks/{tenantIconMap-DtdUgvJO.js.map → tenantIconMap-CTMuSt18.js.map} +1 -1
  257. package/dist/chunks/{ticketingApi-Bu4rKwLl.js → ticketingApi-BNIdox5t.js} +2 -2
  258. package/dist/chunks/{ticketingApi-Bu4rKwLl.js.map → ticketingApi-BNIdox5t.js.map} +1 -1
  259. package/dist/chunks/{ticketingApi-r4Avm9iS.js → ticketingApi-J0vC_t7r.js} +2 -2
  260. package/dist/chunks/{ticketingApi-r4Avm9iS.js.map → ticketingApi-J0vC_t7r.js.map} +1 -1
  261. package/dist/chunks/{useAccessRequests-B9bF4swg.js → useAccessRequests-DCNNLnxk.js} +3 -3
  262. package/dist/chunks/{useAccessRequests-B9bF4swg.js.map → useAccessRequests-DCNNLnxk.js.map} +1 -1
  263. package/dist/chunks/{useAccessRequests-JyPUX3Om.js → useAccessRequests-DT7X4FAK.js} +2 -2
  264. package/dist/chunks/{useAccessRequests-JyPUX3Om.js.map → useAccessRequests-DT7X4FAK.js.map} +1 -1
  265. package/dist/chunks/{useUserAccessRequests-DjPQenC2.js → useUserAccessRequests-BYbmG4c7.js} +2 -2
  266. package/dist/chunks/{useUserAccessRequests-DjPQenC2.js.map → useUserAccessRequests-BYbmG4c7.js.map} +1 -1
  267. package/dist/chunks/{useUserAccessRequests-BB6FHW14.js → useUserAccessRequests-CylKxRN6.js} +2 -2
  268. package/dist/chunks/{useUserAccessRequests-BB6FHW14.js.map → useUserAccessRequests-CylKxRN6.js.map} +1 -1
  269. package/dist/hooks/useCollapsibleState.d.ts +5 -2
  270. package/dist/hooks/useCollapsibleState.d.ts.map +1 -1
  271. package/dist/i18n/config.d.ts +1 -0
  272. package/dist/i18n/config.d.ts.map +1 -1
  273. package/dist/main.d.ts +0 -1
  274. package/dist/main.d.ts.map +1 -1
  275. package/dist/smartstack.cjs +1 -1
  276. package/dist/smartstack.js +1 -1
  277. package/dist/utils/permissions.d.ts.map +1 -1
  278. package/package.json +1 -1
  279. package/dist/chunks/index-2wUhd9Lu.js.map +0 -1
  280. package/dist/chunks/index-CwSaRXXg.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ApiCatalogPage-BBkWSLI8.js","sources":["../../src/pages/platform/api/apis/ApiCatalogPage.tsx"],"sourcesContent":["import { useEffect, useState, useMemo } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { Search, AlertTriangle, Loader2, BookOpen } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport { adminApi } from '@/services/api/adminApi';\r\nimport type { DataApiEndpointDto } from '@/services/api/adminApi';\r\n\r\nconst colorClasses = {\r\n blue: 'bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]',\r\n green: 'bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]',\r\n neutral: 'bg-[var(--bg-secondary)] text-[var(--text-primary)] border-[var(--border-color)]',\r\n};\r\n\r\nexport function ApiCatalogPage(): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const navigate = useNavigate();\r\n const [endpoints, setEndpoints] = useState<DataApiEndpointDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const [statusFilter, setStatusFilter] = useState('all');\r\n const [appFilter, setAppFilter] = useState('all');\r\n const [moduleFilter, setModuleFilter] = useState('all');\r\n\r\n useEffect(() => {\r\n const fetchEndpoints = async () => {\r\n try {\r\n setLoading(true);\r\n const data = await adminApi.externalApps.getApiEndpoints();\r\n setEndpoints(data);\r\n setError(null);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : 'Failed to load endpoints');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchEndpoints();\r\n }, []);\r\n\r\n const applications = useMemo(() => {\r\n const map = new Map<string, string>();\r\n endpoints.forEach(ep => map.set(ep.applicationCode, ep.applicationLabel));\r\n return [...map.entries()].sort((a, b) => a[1].localeCompare(b[1]));\r\n }, [endpoints]);\r\n\r\n const modules = useMemo(() => {\r\n const filtered = appFilter === 'all' ? endpoints : endpoints.filter(ep => ep.applicationCode === appFilter);\r\n const map = new Map<string, string>();\r\n filtered.forEach(ep => map.set(ep.moduleCode, ep.moduleLabel));\r\n return [...map.entries()].sort((a, b) => a[1].localeCompare(b[1]));\r\n }, [endpoints, appFilter]);\r\n\r\n // Reset module filter when app changes\r\n useEffect(() => {\r\n setModuleFilter('all');\r\n }, [appFilter]);\r\n\r\n const filtered = useMemo(() => {\r\n return endpoints.filter(ep => {\r\n const matchesSearch = !searchTerm ||\r\n ep.name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.code.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.routeTemplate.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.applicationLabel.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.moduleLabel.toLowerCase().includes(searchTerm.toLowerCase());\r\n const matchesStatus = statusFilter === 'all' ||\r\n (statusFilter === 'active' && ep.isActive) ||\r\n (statusFilter === 'inactive' && !ep.isActive);\r\n const matchesApp = appFilter === 'all' || ep.applicationCode === appFilter;\r\n const matchesModule = moduleFilter === 'all' || ep.moduleCode === moduleFilter;\r\n return matchesSearch && matchesStatus && matchesApp && matchesModule;\r\n });\r\n }, [endpoints, searchTerm, statusFilter, appFilter, moduleFilter]);\r\n\r\n const stats = useMemo(() => ({\r\n total: endpoints.length,\r\n active: endpoints.filter(e => e.isActive).length,\r\n inactive: endpoints.filter(e => !e.isActive).length,\r\n }), [endpoints]);\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex h-96 items-center justify-center\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-[var(--color-primary-600)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"rounded-lg border border-[var(--error-border)] bg-[var(--error-bg)] p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <AlertTriangle className=\"h-5 w-5 text-[var(--error-text)]\" />\r\n <p className=\"text-[var(--error-text)]\">{error}</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('externalApps.navigation.api'), href: '/api' },\r\n { label: t('externalApps.apis.catalog.title') }\r\n ]}\r\n />\r\n\r\n <div>\r\n <h1 className=\"text-3xl font-bold text-[var(--text-primary)]\">{t('externalApps.apis.catalog.title')}</h1>\r\n <p className=\"mt-2 text-[var(--text-secondary)]\">{t('externalApps.apis.catalog.description')}</p>\r\n </div>\r\n\r\n {/* KPI Cards */}\r\n <div className=\"grid grid-cols-3 gap-4\">\r\n <div className={`card p-4 text-center border ${colorClasses.blue}`}>\r\n <div className=\"text-2xl font-bold\">{stats.total}</div>\r\n <div className=\"text-sm opacity-80\">{t('externalApps.apis.catalog.kpi.total')}</div>\r\n </div>\r\n <div className={`card p-4 text-center border ${colorClasses.green}`}>\r\n <div className=\"text-2xl font-bold\">{stats.active}</div>\r\n <div className=\"text-sm opacity-80\">{t('externalApps.apis.catalog.kpi.active')}</div>\r\n </div>\r\n <div className={`card p-4 text-center border ${colorClasses.neutral}`}>\r\n <div className=\"text-2xl font-bold\">{stats.inactive}</div>\r\n <div className=\"text-sm opacity-80\">{t('externalApps.apis.catalog.kpi.inactive')}</div>\r\n </div>\r\n </div>\r\n\r\n {/* Toolbar */}\r\n <div className=\"space-y-4 rounded-[var(--radius-card)] border border-[var(--item-color-border)] bg-[var(--bg-card)] p-4\">\r\n <div className=\"flex flex-col gap-4 md:flex-row md:items-center\">\r\n <div className=\"flex-1 relative\">\r\n <Search className=\"absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-[var(--text-tertiary)]\" />\r\n <input\r\n type=\"text\"\r\n placeholder={t('externalApps.apis.catalog.search')}\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n className=\"w-full rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] py-2 pl-10 pr-4 text-[var(--text-primary)] placeholder-[var(--text-tertiary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n />\r\n </div>\r\n <select\r\n value={appFilter}\r\n onChange={(e) => setAppFilter(e.target.value)}\r\n className=\"rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] px-4 py-2 text-[var(--text-primary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n >\r\n <option value=\"all\">{t('externalApps.apis.catalog.columns.application')}</option>\r\n {applications.map(([code, label]) => (\r\n <option key={code} value={code}>{label}</option>\r\n ))}\r\n </select>\r\n <select\r\n value={moduleFilter}\r\n onChange={(e) => setModuleFilter(e.target.value)}\r\n className=\"rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] px-4 py-2 text-[var(--text-primary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n >\r\n <option value=\"all\">{t('externalApps.apis.catalog.columns.module')}</option>\r\n {modules.map(([code, label]) => (\r\n <option key={code} value={code}>{label}</option>\r\n ))}\r\n </select>\r\n <select\r\n value={statusFilter}\r\n onChange={(e) => setStatusFilter(e.target.value)}\r\n className=\"rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] px-4 py-2 text-[var(--text-primary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n >\r\n <option value=\"all\">{t('admin:common.all')}</option>\r\n <option value=\"active\">{t('externalApps.apis.catalog.active')}</option>\r\n <option value=\"inactive\">{t('externalApps.apis.catalog.inactive')}</option>\r\n </select>\r\n </div>\r\n <span className=\"text-sm text-[var(--text-tertiary)]\">\r\n {filtered.length} / {endpoints.length} {t('externalApps.apis.catalog.kpi.total').toLowerCase()}\r\n </span>\r\n </div>\r\n\r\n {/* Table */}\r\n {filtered.length === 0 ? (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--item-color-border)] bg-[var(--bg-card)] p-12 text-center\">\r\n <p className=\"text-[var(--text-secondary)]\">{t('externalApps.apis.catalog.noResults')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"card overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead>\r\n <tr className=\"bg-[var(--bg-secondary)]\">\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.application')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.module')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.name')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.route')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.entityType')}\r\n </th>\r\n <th className=\"text-right px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.rateLimit')}\r\n </th>\r\n <th className=\"text-right px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.maxPageSize')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.status')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {filtered.map((ep) => (\r\n <tr key={ep.id} className=\"hover:bg-[var(--bg-hover)] transition-colors cursor-pointer\" onClick={() => navigate(`/api/apis/catalog/${ep.code}`)}>\r\n <td className=\"px-4 py-3\">\r\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-[var(--info-bg)] px-2.5 py-0.5 text-xs font-medium text-[var(--info-text)]\">\r\n {ep.applicationLabel}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <span className=\"text-sm text-[var(--text-primary)]\">{ep.moduleLabel}</span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <BookOpen className=\"h-4 w-4 text-[var(--color-accent-600)] flex-shrink-0\" />\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{ep.name}</p>\r\n {ep.description && (\r\n <p className=\"mt-0.5 text-xs text-[var(--text-tertiary)] line-clamp-1\">{ep.description}</p>\r\n )}\r\n </div>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)] font-mono hidden lg:table-cell\">\r\n {ep.routeTemplate}\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)] hidden lg:table-cell\">\r\n {ep.entityType}\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-right text-[var(--text-secondary)] hidden lg:table-cell\">\r\n {ep.defaultRateLimitPerMinute}/min\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-right text-[var(--text-secondary)] hidden lg:table-cell\">\r\n {ep.defaultMaxPageSize}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"inline-flex items-center gap-2 rounded-full px-2.5 py-0.5 text-xs font-medium\">\r\n {ep.isActive ? (\r\n <>\r\n <div className=\"h-2 w-2 rounded-full bg-[var(--success-text)]\" />\r\n <span className=\"text-[var(--success-text)]\">{t('externalApps.apis.catalog.active')}</span>\r\n </>\r\n ) : (\r\n <>\r\n <div className=\"h-2 w-2 rounded-full bg-[var(--warning-text)]\" />\r\n <span className=\"text-[var(--warning-text)]\">{t('externalApps.apis.catalog.inactive')}</span>\r\n </>\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"],"names":["colorClasses","ApiCatalogPage","t","useTranslation","navigate","useNavigate","endpoints","setEndpoints","useState","loading","setLoading","error","setError","searchTerm","setSearchTerm","statusFilter","setStatusFilter","appFilter","setAppFilter","moduleFilter","setModuleFilter","useEffect","data","adminApi","err","applications","useMemo","map","ep","a","b","modules","filtered","matchesSearch","matchesStatus","matchesApp","matchesModule","stats","e","jsx","Loader2","jsxs","AlertTriangle","Breadcrumb","Search","code","label","BookOpen","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"ApiCatalogPage-DRg5Cz0r.js","sources":["../../src/pages/platform/api/apis/ApiCatalogPage.tsx"],"sourcesContent":["import { useEffect, useState, useMemo } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { Search, AlertTriangle, Loader2, BookOpen } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport { adminApi } from '@/services/api/adminApi';\r\nimport type { DataApiEndpointDto } from '@/services/api/adminApi';\r\n\r\nconst colorClasses = {\r\n blue: 'bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]',\r\n green: 'bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]',\r\n neutral: 'bg-[var(--bg-secondary)] text-[var(--text-primary)] border-[var(--border-color)]',\r\n};\r\n\r\nexport function ApiCatalogPage(): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const navigate = useNavigate();\r\n const [endpoints, setEndpoints] = useState<DataApiEndpointDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n const [searchTerm, setSearchTerm] = useState('');\r\n const [statusFilter, setStatusFilter] = useState('all');\r\n const [appFilter, setAppFilter] = useState('all');\r\n const [moduleFilter, setModuleFilter] = useState('all');\r\n\r\n useEffect(() => {\r\n const fetchEndpoints = async () => {\r\n try {\r\n setLoading(true);\r\n const data = await adminApi.externalApps.getApiEndpoints();\r\n setEndpoints(data);\r\n setError(null);\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : 'Failed to load endpoints');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n fetchEndpoints();\r\n }, []);\r\n\r\n const applications = useMemo(() => {\r\n const map = new Map<string, string>();\r\n endpoints.forEach(ep => map.set(ep.applicationCode, ep.applicationLabel));\r\n return [...map.entries()].sort((a, b) => a[1].localeCompare(b[1]));\r\n }, [endpoints]);\r\n\r\n const modules = useMemo(() => {\r\n const filtered = appFilter === 'all' ? endpoints : endpoints.filter(ep => ep.applicationCode === appFilter);\r\n const map = new Map<string, string>();\r\n filtered.forEach(ep => map.set(ep.moduleCode, ep.moduleLabel));\r\n return [...map.entries()].sort((a, b) => a[1].localeCompare(b[1]));\r\n }, [endpoints, appFilter]);\r\n\r\n // Reset module filter when app changes\r\n useEffect(() => {\r\n setModuleFilter('all');\r\n }, [appFilter]);\r\n\r\n const filtered = useMemo(() => {\r\n return endpoints.filter(ep => {\r\n const matchesSearch = !searchTerm ||\r\n ep.name.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.code.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.routeTemplate.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.applicationLabel.toLowerCase().includes(searchTerm.toLowerCase()) ||\r\n ep.moduleLabel.toLowerCase().includes(searchTerm.toLowerCase());\r\n const matchesStatus = statusFilter === 'all' ||\r\n (statusFilter === 'active' && ep.isActive) ||\r\n (statusFilter === 'inactive' && !ep.isActive);\r\n const matchesApp = appFilter === 'all' || ep.applicationCode === appFilter;\r\n const matchesModule = moduleFilter === 'all' || ep.moduleCode === moduleFilter;\r\n return matchesSearch && matchesStatus && matchesApp && matchesModule;\r\n });\r\n }, [endpoints, searchTerm, statusFilter, appFilter, moduleFilter]);\r\n\r\n const stats = useMemo(() => ({\r\n total: endpoints.length,\r\n active: endpoints.filter(e => e.isActive).length,\r\n inactive: endpoints.filter(e => !e.isActive).length,\r\n }), [endpoints]);\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex h-96 items-center justify-center\">\r\n <Loader2 className=\"h-8 w-8 animate-spin text-[var(--color-primary-600)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n if (error) {\r\n return (\r\n <div className=\"rounded-lg border border-[var(--error-border)] bg-[var(--error-bg)] p-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <AlertTriangle className=\"h-5 w-5 text-[var(--error-text)]\" />\r\n <p className=\"text-[var(--error-text)]\">{error}</p>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('externalApps.navigation.api'), href: '/api' },\r\n { label: t('externalApps.apis.catalog.title') }\r\n ]}\r\n />\r\n\r\n <div>\r\n <h1 className=\"text-3xl font-bold text-[var(--text-primary)]\">{t('externalApps.apis.catalog.title')}</h1>\r\n <p className=\"mt-2 text-[var(--text-secondary)]\">{t('externalApps.apis.catalog.description')}</p>\r\n </div>\r\n\r\n {/* KPI Cards */}\r\n <div className=\"grid grid-cols-3 gap-4\">\r\n <div className={`card p-4 text-center border ${colorClasses.blue}`}>\r\n <div className=\"text-2xl font-bold\">{stats.total}</div>\r\n <div className=\"text-sm opacity-80\">{t('externalApps.apis.catalog.kpi.total')}</div>\r\n </div>\r\n <div className={`card p-4 text-center border ${colorClasses.green}`}>\r\n <div className=\"text-2xl font-bold\">{stats.active}</div>\r\n <div className=\"text-sm opacity-80\">{t('externalApps.apis.catalog.kpi.active')}</div>\r\n </div>\r\n <div className={`card p-4 text-center border ${colorClasses.neutral}`}>\r\n <div className=\"text-2xl font-bold\">{stats.inactive}</div>\r\n <div className=\"text-sm opacity-80\">{t('externalApps.apis.catalog.kpi.inactive')}</div>\r\n </div>\r\n </div>\r\n\r\n {/* Toolbar */}\r\n <div className=\"space-y-4 rounded-[var(--radius-card)] border border-[var(--item-color-border)] bg-[var(--bg-card)] p-4\">\r\n <div className=\"flex flex-col gap-4 md:flex-row md:items-center\">\r\n <div className=\"flex-1 relative\">\r\n <Search className=\"absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-[var(--text-tertiary)]\" />\r\n <input\r\n type=\"text\"\r\n placeholder={t('externalApps.apis.catalog.search')}\r\n value={searchTerm}\r\n onChange={(e) => setSearchTerm(e.target.value)}\r\n className=\"w-full rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] py-2 pl-10 pr-4 text-[var(--text-primary)] placeholder-[var(--text-tertiary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n />\r\n </div>\r\n <select\r\n value={appFilter}\r\n onChange={(e) => setAppFilter(e.target.value)}\r\n className=\"rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] px-4 py-2 text-[var(--text-primary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n >\r\n <option value=\"all\">{t('externalApps.apis.catalog.columns.application')}</option>\r\n {applications.map(([code, label]) => (\r\n <option key={code} value={code}>{label}</option>\r\n ))}\r\n </select>\r\n <select\r\n value={moduleFilter}\r\n onChange={(e) => setModuleFilter(e.target.value)}\r\n className=\"rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] px-4 py-2 text-[var(--text-primary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n >\r\n <option value=\"all\">{t('externalApps.apis.catalog.columns.module')}</option>\r\n {modules.map(([code, label]) => (\r\n <option key={code} value={code}>{label}</option>\r\n ))}\r\n </select>\r\n <select\r\n value={statusFilter}\r\n onChange={(e) => setStatusFilter(e.target.value)}\r\n className=\"rounded-[var(--radius-input)] border border-[var(--item-color-border)] bg-[var(--bg-secondary)] px-4 py-2 text-[var(--text-primary)] focus:border-[var(--color-primary-600)] focus:outline-none\"\r\n >\r\n <option value=\"all\">{t('admin:common.all')}</option>\r\n <option value=\"active\">{t('externalApps.apis.catalog.active')}</option>\r\n <option value=\"inactive\">{t('externalApps.apis.catalog.inactive')}</option>\r\n </select>\r\n </div>\r\n <span className=\"text-sm text-[var(--text-tertiary)]\">\r\n {filtered.length} / {endpoints.length} {t('externalApps.apis.catalog.kpi.total').toLowerCase()}\r\n </span>\r\n </div>\r\n\r\n {/* Table */}\r\n {filtered.length === 0 ? (\r\n <div className=\"rounded-[var(--radius-card)] border border-[var(--item-color-border)] bg-[var(--bg-card)] p-12 text-center\">\r\n <p className=\"text-[var(--text-secondary)]\">{t('externalApps.apis.catalog.noResults')}</p>\r\n </div>\r\n ) : (\r\n <div className=\"card overflow-hidden\">\r\n <table className=\"w-full\">\r\n <thead>\r\n <tr className=\"bg-[var(--bg-secondary)]\">\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.application')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.module')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.name')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.route')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.entityType')}\r\n </th>\r\n <th className=\"text-right px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.rateLimit')}\r\n </th>\r\n <th className=\"text-right px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider hidden lg:table-cell\">\r\n {t('externalApps.apis.catalog.columns.maxPageSize')}\r\n </th>\r\n <th className=\"text-left px-4 py-3 text-xs font-semibold text-[var(--text-tertiary)] uppercase tracking-wider\">\r\n {t('externalApps.apis.catalog.columns.status')}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {filtered.map((ep) => (\r\n <tr key={ep.id} className=\"hover:bg-[var(--bg-hover)] transition-colors cursor-pointer\" onClick={() => navigate(`/api/apis/catalog/${ep.code}`)}>\r\n <td className=\"px-4 py-3\">\r\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-[var(--info-bg)] px-2.5 py-0.5 text-xs font-medium text-[var(--info-text)]\">\r\n {ep.applicationLabel}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <span className=\"text-sm text-[var(--text-primary)]\">{ep.moduleLabel}</span>\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"flex items-center gap-3\">\r\n <BookOpen className=\"h-4 w-4 text-[var(--color-accent-600)] flex-shrink-0\" />\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{ep.name}</p>\r\n {ep.description && (\r\n <p className=\"mt-0.5 text-xs text-[var(--text-tertiary)] line-clamp-1\">{ep.description}</p>\r\n )}\r\n </div>\r\n </div>\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)] font-mono hidden lg:table-cell\">\r\n {ep.routeTemplate}\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-[var(--text-secondary)] hidden lg:table-cell\">\r\n {ep.entityType}\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-right text-[var(--text-secondary)] hidden lg:table-cell\">\r\n {ep.defaultRateLimitPerMinute}/min\r\n </td>\r\n <td className=\"px-4 py-3 text-sm text-right text-[var(--text-secondary)] hidden lg:table-cell\">\r\n {ep.defaultMaxPageSize}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"inline-flex items-center gap-2 rounded-full px-2.5 py-0.5 text-xs font-medium\">\r\n {ep.isActive ? (\r\n <>\r\n <div className=\"h-2 w-2 rounded-full bg-[var(--success-text)]\" />\r\n <span className=\"text-[var(--success-text)]\">{t('externalApps.apis.catalog.active')}</span>\r\n </>\r\n ) : (\r\n <>\r\n <div className=\"h-2 w-2 rounded-full bg-[var(--warning-text)]\" />\r\n <span className=\"text-[var(--warning-text)]\">{t('externalApps.apis.catalog.inactive')}</span>\r\n </>\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"],"names":["colorClasses","ApiCatalogPage","t","useTranslation","navigate","useNavigate","endpoints","setEndpoints","useState","loading","setLoading","error","setError","searchTerm","setSearchTerm","statusFilter","setStatusFilter","appFilter","setAppFilter","moduleFilter","setModuleFilter","useEffect","data","adminApi","err","applications","useMemo","map","ep","a","b","modules","filtered","matchesSearch","matchesStatus","matchesApp","matchesModule","stats","e","jsx","Loader2","jsxs","AlertTriangle","Breadcrumb","Search","code","label","BookOpen","Fragment"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),Q=require("react-router-dom"),Ne=require("./useTabNavigation-BVtbCTd5.js"),z=require("react-i18next"),M=require("./index-2wUhd9Lu.js"),w=require("lucide-react"),U=require("@dnd-kit/core"),$=require("@dnd-kit/sortable"),we=require("@dnd-kit/utilities"),V=require("./tenantIconMap-DtdUgvJO.js"),X=require("./useAccessRequests-JyPUX3Om.js");function Se(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const l=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(r,s,l.get?l:{enumerable:!0,get:()=>t[s]})}}return r.default=t,Object.freeze(r)}const Ae=Se(w);function H(t,r="w-4 h-4"){if(!t)return null;if(typeof t=="string"){const d=Ae[t];return d?e.jsx(d,{className:r}):null}const s=t;return e.jsx(s,{className:r})}function De(){const{t}=z.useTranslation("admin"),[r,s]=n.useState(null),[l,d]=n.useState(!1),[u,c]=n.useState(!1),[o,j]=n.useState(null),[a,b]=n.useState(null),[N,i]=n.useState({label:"",description:"",icon:"",route:"",displayOrder:0}),D=n.useCallback(async h=>{if(h){d(!0),j(null);try{const m=await M.adminApi.applications.getById(h);s(m),i({label:m.label,description:m.description||"",icon:m.icon||"",route:m.route||"",displayOrder:m.displayOrder})}catch(m){j(m instanceof Error?m.message:t("applicationDetail.errors.loadFailed"))}finally{d(!1)}}},[t]),R=n.useCallback(async(h,m)=>{if(!(!h||!r)){c(!0),j(null),b(null);try{const y={label:m.label,description:m.description||void 0,icon:m.icon||void 0,route:m.route||void 0,displayOrder:m.displayOrder};await M.adminApi.applications.update(h,y),b(t("applicationDetail.success.saved")),await D(h)}catch(y){j(y instanceof Error?y.message:t("applicationDetail.errors.saveFailed"))}finally{c(!1)}}},[r,t,D]),L=n.useCallback(async h=>{if(!(!h||!r)){c(!0),j(null),b(null);try{r.isActive?await M.adminApi.applications.deactivate(h):await M.adminApi.applications.activate(h),b(r.isActive?t("applicationDetail.success.deactivated"):t("applicationDetail.success.activated")),await D(h)}catch(m){j(m instanceof Error?m.message:t("applicationDetail.errors.toggleFailed"))}finally{c(!1)}}},[r,t,D]);return{application:r,loading:l,saving:u,error:o,success:a,formData:N,setFormData:i,setError:j,setSuccess:b,loadApplication:D,handleSaveInfo:R,handleToggleStatus:L}}function Me(){const[t,r]=n.useState(new Set),[s,l]=n.useState(new Map),[d,u]=n.useState(new Set),[c,o]=n.useState(!1),[j,a]=n.useState(null),[b,N]=n.useState({code:"",label:"",description:"",icon:"",route:"",displayOrder:0}),[i,D]=n.useState(!1),R=n.useCallback(async(T,p)=>{const k=!t.has(p);if(r(S=>{const A=new Set(S);return A.has(p)?A.delete(p):A.add(p),A}),k&&!s.has(p)){u(S=>new Set(S).add(p));try{const S=await M.adminApi.applications.getModuleSections(T,p);l(A=>new Map(A).set(p,S))}catch(S){console.error("Failed to load sections:",S)}finally{u(S=>{const A=new Set(S);return A.delete(p),A})}}},[t,s]),L=n.useCallback(async(T,p,k)=>{try{await M.adminApi.applications.updateModule(T,p,{label:k.label,description:k.description||void 0,icon:k.icon||void 0,route:k.route||void 0,displayOrder:k.displayOrder}),D(!1),a(null),P()}catch(S){throw console.error("Failed to save module:",S),S}},[]),h=n.useCallback(async(T,p)=>{const k=p.map((S,A)=>({...S,displayOrder:A}));o(!0);try{await M.adminApi.applications.reorderModules(T,k.map((S,A)=>({id:S.id,displayOrder:A})))}catch(S){throw console.error("Failed to reorder modules:",S),S}finally{o(!1)}},[]),m=n.useCallback(async(T,p,k)=>{const S=k.map((A,B)=>({...A,displayOrder:B}));l(A=>new Map(A).set(p,S)),o(!0);try{await M.adminApi.applications.reorderSections(T,p,S.map((A,B)=>({id:A.id,displayOrder:B})))}catch(A){console.error("Failed to reorder sections:",A);try{const B=await M.adminApi.applications.getModuleSections(T,p);l(O=>new Map(O).set(p,B))}catch(B){console.error("Failed to reload sections:",B)}throw A}finally{o(!1)}},[]),y=n.useCallback(T=>{a(T),N({code:T.code,label:T.label,description:T.description||"",icon:T.icon||"",route:T.route||"",displayOrder:T.displayOrder}),D(!0)},[]),P=n.useCallback(T=>{N({code:"",label:"",description:"",icon:"",route:"",displayOrder:T||0})},[]);return{expandedModules:t,moduleSections:s,loadingSections:d,reordering:c,editingModule:j,moduleFormData:b,showModuleForm:i,toggleModuleExpand:R,handleSaveModule:L,handleModulesReorder:h,handleSectionsReorder:m,startEditModule:y,resetModuleForm:P,setShowModuleForm:D,setEditingModule:a,setModuleFormData:N}}const Te=(t,r,s)=>{const l=r.filter(d=>d.permissionIds.includes(t.id)).map(d=>s.find(u=>u.id===d.id)).filter(Boolean);return{permission:t,roles:l}};function Ce(){const[t,r]=n.useState([]),[s,l]=n.useState([]),[d,u]=n.useState([]),c=n.useCallback(async a=>{try{const[b,N]=await Promise.all([M.adminApi.permissions.getMatrix(),M.adminApi.roles.getAll()]),i=`${a.code}.`.toLowerCase(),D=b.permissions.filter(L=>L.path.toLowerCase().startsWith(i));l(D),r(N);const R=D.map(L=>Te(L,b.roles,N));u(R)}catch(b){throw console.error("Failed to load permissions data:",b),b}},[]),o=n.useCallback(async()=>{try{const a=await M.adminApi.roles.getAll();r(a)}catch(a){throw console.error("Failed to load roles:",a),a}},[]),j=n.useMemo(()=>{if(d.length===0)return[];const a=new Map;return d.forEach(({permission:b,roles:N})=>{N.forEach(i=>{a.has(i.id)||a.set(i.id,{role:i,permissions:[]}),a.get(i.id).permissions.push(b)})}),Array.from(a.values()).sort((b,N)=>N.permissions.length-b.permissions.length)},[d]);return{roles:t,permissions:s,permissionsWithRoles:d,rolesWithAppAccess:j,loadPermissionsData:c,loadRolesData:o}}const ke=(t,r)=>{if(t.id!==r)return t;const s=!t.isAssigned;return{...t,isAssigned:s,sections:t.sections.map(l=>({...l,isAssigned:s}))}},Le=(t,r,s)=>{if(t.id!==r)return t;const l=t.sections.map(u=>u.id===s?{...u,isAssigned:!u.isAssigned}:u),d=l.every(u=>u.isAssigned);return{...t,isAssigned:d,sections:l}},Re=t=>({...t,isAssigned:!0,sections:t.sections.map(r=>({...r,isAssigned:!0}))}),Pe=t=>({...t,isAssigned:!1,sections:t.sections.map(r=>({...r,isAssigned:!1}))});function Be(){const[t,r]=n.useState([]),[s,l]=n.useState([]),[d,u]=n.useState(!1),[c,o]=n.useState([]),[j,a]=n.useState("FullAccess"),[b,N]=n.useState(""),[i,D]=n.useState(!1),[R,L]=n.useState(null),[h,m]=n.useState("full"),[y,P]=n.useState([]),[T,p]=n.useState(new Set),[k,S]=n.useState(!1),[A,B]=n.useState(!1),[O,Z]=n.useState("merge"),[ee,G]=n.useState(!1),[te,J]=n.useState({modules:0,sections:0}),[W,se]=n.useState(!1),[ae,ie]=n.useState(!1),q=n.useCallback(async v=>{try{const[x,g]=await Promise.all([M.adminApi.applications.getTenants(v),M.adminApi.applications.getAvailableTenants(v)]);r(x),l(g.tenants),ie(g.isInDefaultPersonalTemplate)}catch(x){console.error("Failed to load publication data:",x)}},[]),re=n.useCallback(async v=>{S(!0);try{const x=await M.adminApi.applications.getModules(v),g=[];for(const f of x){const F=(await M.adminApi.applications.getModuleSections(v,f.id)).map(I=>({id:I.id,label:I.label,code:I.code,icon:I.icon,isAssigned:!0}));g.push({id:f.id,label:f.label,code:f.code,icon:f.icon,isAssigned:!0,sections:F})}P(g)}catch(x){console.error("Failed to load bulk modules:",x)}finally{S(!1)}},[]),ne=n.useCallback(v=>{p(x=>{const g=new Set(x);return g.has(v)?g.delete(v):g.add(v),g})},[]),le=n.useCallback(v=>{P(x=>x.map(g=>ke(g,v)))},[]),oe=n.useCallback((v,x)=>{P(g=>g.map(f=>Le(f,v,x)))},[]),ce=n.useCallback(v=>{const x=v.sections.filter(g=>g.isAssigned).length;return x===0?"unchecked":x===v.sections.length?"checked":"indeterminate"},[]),de=n.useCallback(()=>{const v=y.length,x=y.filter(C=>C.isAssigned||C.sections.some(F=>F.isAssigned)).length,g=y.reduce((C,F)=>C+F.sections.length,0),f=y.reduce((C,F)=>C+F.sections.filter(I=>I.isAssigned).length,0);return{totalModules:v,assignedModules:x,totalSections:g,assignedSections:f}},[y]),ue=n.useCallback(()=>{P(v=>v.map(x=>Re(x)))},[]),pe=n.useCallback(()=>{P(v=>v.map(x=>Pe(x)))},[]),me=n.useCallback(v=>{o(x=>x.includes(v)?x.filter(g=>g!==v):[...x,v])},[]),xe=n.useCallback(()=>{if(A){const v=t.filter(x=>{const g=x.tenantName.toLowerCase().includes(b.toLowerCase())||x.tenantSlug.toLowerCase().includes(b.toLowerCase()),f=W||x.tenantType!=="Personal";return g&&f}).map(x=>x.tenantId);o(v)}else{const v=s.filter(x=>{const g=x.name.toLowerCase().includes(b.toLowerCase())||x.slug.toLowerCase().includes(b.toLowerCase()),f=W||x.type!=="Personal";return g&&f}).map(x=>x.id);o(v)}},[A,t,s,b,W]),be=n.useCallback(()=>{o([])},[]),_=n.useCallback(async(v,x)=>{if(!(!v||c.length===0))try{const g={tenantIds:c,accessLevel:j,accessMode:h,mergeMode:O};h==="custom"&&(g.moduleIds=y.filter(f=>f.isAssigned).map(f=>f.id),g.sectionIds=y.flatMap(f=>f.sections.filter(C=>C.isAssigned).map(C=>C.id))),await M.adminApi.applications.bulkAssignTenants(v,g),u(!1),o([]),a("FullAccess"),m("full"),N(""),B(!1),Z("merge"),G(!1),await q(v),x&&x()}catch(g){throw console.error("Failed to update tenant assignments:",g),g}},[c,j,h,O,y,q]),ve=n.useCallback(async(v,x)=>{if(!(!v||c.length===0))try{const g={tenantIds:c,accessLevel:j,accessMode:h};h==="custom"&&(g.moduleIds=y.filter(f=>f.isAssigned).map(f=>f.id),g.sectionIds=y.flatMap(f=>f.sections.filter(C=>C.isAssigned).map(C=>C.id))),await M.adminApi.applications.bulkAssignTenants(v,g),u(!1),o([]),a("FullAccess"),m("full"),N(""),await q(v),x&&x()}catch(g){throw console.error("Failed to assign tenants:",g),g}},[c,j,h,y,q]),ge=n.useCallback(async(v,x)=>{if(!(!v||c.length===0)){if(O==="replace"&&h==="custom"){let g=0,f=0;for(const C of c)try{const F=await M.adminApi.tenants.getModules(C),I=await M.adminApi.tenants.getSections(C),ye=new Set(y.filter(E=>E.isAssigned).map(E=>E.id)),je=new Set(y.flatMap(E=>E.sections.filter(K=>K.isAssigned).map(K=>K.id)));g+=F.filter(E=>!ye.has(E.moduleId)).length,f+=I.filter(E=>!je.has(E.sectionId)).length}catch{}if(g>0||f>0){J({modules:g,sections:f}),G(!0);return}}await _(v,x)}},[c,O,h,y,_]),he=n.useCallback(async(v,x,g)=>{if(v)try{await M.adminApi.applications.removeFromTenant(v,x),await q(v),g&&g()}catch(f){throw console.error("Failed to remove tenant:",f),f}},[q]),fe=n.useCallback(async(v,x,g,f)=>{if(v)try{await M.adminApi.applications.updateTenantAccessLevel(v,x,g),await q(v),f&&f()}catch(C){throw console.error("Failed to update access level:",C),C}},[q]);return{assignedTenants:t,availableTenants:s,showAssignModal:d,selectedTenantIds:c,selectedAccessLevel:j,tenantSearch:b,showCustomizeDrawer:i,customizingTenant:R,bulkAccessMode:h,bulkModules:y,bulkExpandedModules:T,loadingBulkModules:k,isUpdateMode:A,updateMergeMode:O,showConfirmRemovalDialog:ee,pendingRemovals:te,includePersonalTenants:W,isInDefaultPersonalTemplate:ae,setAssignedTenants:r,setAvailableTenants:l,setShowAssignModal:u,setSelectedTenantIds:o,setSelectedAccessLevel:a,setTenantSearch:N,setShowCustomizeDrawer:D,setCustomizingTenant:L,setBulkAccessMode:m,setBulkModules:P,setBulkExpandedModules:p,setIsUpdateMode:B,setUpdateMergeMode:Z,setShowConfirmRemovalDialog:G,setPendingRemovals:J,setIncludePersonalTenants:se,loadPublicationData:q,loadBulkModules:re,toggleBulkModuleExpand:ne,toggleBulkModule:le,toggleBulkSection:oe,getBulkModuleCheckState:ce,getBulkStats:de,selectAllBulkModules:ue,clearBulkModules:pe,toggleTenantSelection:me,selectAllFilteredTenants:xe,clearTenantSelection:be,handleAssignTenants:ve,handleUpdateTenants:ge,executeUpdateTenants:_,handleRemoveTenant:he,handleUpdateAccessLevel:fe}}function qe({formData:t,setFormData:r,application:s,saving:l,onSubmit:d}){const{t:u}=z.useTranslation("admin");return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.code")}),e.jsx("input",{type:"text",value:s.code,disabled:!0,className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-tertiary)] border border-[var(--border-color)] text-[var(--text-muted)] cursor-not-allowed"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.label")}),e.jsx("input",{type:"text",value:t.label,onChange:c=>r(o=>({...o,label:c.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent",required:!0})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.description")}),e.jsx("textarea",{value:t.description,onChange:c=>r(o=>({...o,description:c.target.value})),rows:3,className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.icon")}),e.jsx("input",{type:"text",value:t.icon,onChange:c=>r(o=>({...o,icon:c.target.value})),placeholder:u("applicationDetail.fields.icon"),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.route")}),e.jsx("input",{type:"text",value:t.route,onChange:c=>r(o=>({...o,route:c.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.displayOrder")}),e.jsx("input",{type:"number",value:t.displayOrder,onChange:c=>r(o=>({...o,displayOrder:parseInt(c.target.value)||0})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.zone","Zone")}),e.jsx("input",{type:"text",value:s.zone||"",disabled:!0,className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-tertiary)] border border-[var(--border-color)] text-[var(--text-muted)] cursor-not-allowed"})]})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs("button",{type:"submit",disabled:l,className:"flex items-center gap-2 px-6 py-2 rounded-[var(--radius-button)] font-medium bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] disabled:opacity-50",children:[l?e.jsx(w.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(w.Save,{className:"w-4 h-4"}),u("applicationDetail.actions.save")]})})]})}function Fe({id:t,disabled:r,children:s}){const{attributes:l,listeners:d,setNodeRef:u,transform:c,transition:o,isDragging:j}=$.useSortable({id:t,disabled:r}),a={transform:we.CSS.Transform.toString(c),transition:o,opacity:j?.5:1,zIndex:j?1:0},b=r?null:e.jsx("button",{type:"button",className:"p-1.5 rounded hover:bg-[var(--bg-hover)] cursor-grab active:cursor-grabbing text-[var(--text-muted)] hover:text-[var(--text-secondary)] transition-colors",...l,...d,children:e.jsx(w.GripVertical,{className:"w-4 h-4"})});return e.jsx("div",{ref:u,style:a,children:s(b)})}function Y({items:t,onReorder:r,renderItem:s,disabled:l=!1}){const[,d]=n.useState(null),u=U.useSensors(U.useSensor(U.PointerSensor,{activationConstraint:{distance:8}}),U.useSensor(U.KeyboardSensor,{coordinateGetter:$.sortableKeyboardCoordinates})),c=o=>{const{active:j,over:a}=o;if(d(null),a&&j.id!==a.id){const b=t.findIndex(D=>D.id===j.id),N=t.findIndex(D=>D.id===a.id),i=$.arrayMove(t,b,N);r(i)}};return e.jsx(U.DndContext,{sensors:u,collisionDetection:U.closestCenter,onDragStart:o=>d(o.active.id),onDragEnd:c,children:e.jsx($.SortableContext,{items:t.map(o=>o.id),strategy:$.verticalListSortingStrategy,disabled:l,children:e.jsx("div",{className:"space-y-2",children:t.map(o=>e.jsx(Fe,{id:o.id,disabled:l,children:j=>s(o,j)},o.id))})})})}const Ee=(t,r,s,l,d,u)=>r.has(t)?e.jsx("div",{className:"flex items-center justify-center py-4",children:e.jsx(w.Loader2,{className:"w-5 h-5 animate-spin text-[var(--text-muted)]"})}):s.get(t)?.length===0?e.jsx("p",{className:"text-sm text-[var(--text-muted)] py-2",children:u("applicationDetail.modules.noSections","No sections")}):s.get(t)?e.jsx(Y,{items:s.get(t).map(c=>({...c,id:c.id})),onReorder:c=>l(t,c),disabled:d,renderItem:(c,o)=>e.jsxs("div",{className:"flex items-center gap-2 p-2 rounded bg-[var(--bg-secondary)] border border-[var(--border-color)]",children:[o,e.jsx("div",{className:"p-1 rounded bg-[var(--bg-tertiary)]",children:H(c.icon,"w-3 h-3")||e.jsx(w.Layers,{className:"w-3 h-3 text-[var(--text-muted)]"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:c.label}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:c.code})]}),e.jsx("span",{className:`px-2 py-0.5 text-xs rounded-full ${c.isActive?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--error-bg)] text-[var(--error-text)]"}`,children:c.isActive?u("common:active"):u("common:inactive")})]})}):null;function Ie({application:t,expandedModules:r,moduleSections:s,loadingSections:l,reordering:d,editingModule:u,moduleFormData:c,showModuleForm:o,saving:j,onToggleExpand:a,onStartEdit:b,onSaveModule:N,onCancelEdit:i,onModulesReorder:D,onSectionsReorder:R,setModuleFormData:L}){const{t:h}=z.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[h("applicationDetail.modules.title")," (",t.modules.length,")"]}),o&&u&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsx("h4",{className:"text-md font-semibold text-[var(--text-primary)] mb-4",children:h("applicationDetail.modules.edit")}),e.jsxs("form",{onSubmit:N,className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.code")}),e.jsx("input",{type:"text",value:c.code,disabled:!0,className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-tertiary)] border border-[var(--border-color)] text-[var(--text-muted)] cursor-not-allowed"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.label")}),e.jsx("input",{type:"text",value:c.label,onChange:m=>L(y=>({...y,label:m.target.value})),className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]",required:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.icon")}),e.jsx("input",{type:"text",value:c.icon,onChange:m=>L(y=>({...y,icon:m.target.value})),placeholder:"Users",className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.route")}),e.jsx("input",{type:"text",value:c.route,onChange:m=>L(y=>({...y,route:m.target.value})),className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]"})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.description")}),e.jsx("textarea",{value:c.description,onChange:m=>L(y=>({...y,description:m.target.value})),rows:2,className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:i,className:"px-4 py-2 rounded-[var(--radius-button)] font-medium text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",children:h("common:cancel")}),e.jsxs("button",{type:"submit",disabled:j,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] disabled:opacity-50",children:[j?e.jsx(w.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(w.Save,{className:"w-4 h-4"}),h("common:save")]})]})]})]}),t.modules.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:h("applicationDetail.modules.empty")}):e.jsx(Y,{items:t.modules.map(m=>({...m,id:m.id})),onReorder:D,disabled:d,renderItem:(m,y)=>e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--item-color-border)] hover:border-[var(--color-accent-600)] transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[y,e.jsx("div",{className:"p-2 rounded-[var(--radius-button)] bg-[var(--bg-tertiary)]",children:H(m.icon,"w-4 h-4")||e.jsx(w.Layers,{className:"w-4 h-4 text-[var(--text-muted)]"})}),e.jsx("button",{onClick:()=>a(m.id),className:"p-1 rounded hover:bg-[var(--bg-hover)]","aria-expanded":r.has(m.id),"aria-label":h("applicationDetail.modules.toggleExpand","Toggle sections"),children:r.has(m.id)?e.jsx(w.ChevronDown,{className:"w-4 h-4 text-[var(--text-muted)]"}):e.jsx(w.ChevronRight,{className:"w-4 h-4 text-[var(--text-muted)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:m.label}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:m.code})]}),e.jsx("span",{className:`ml-2 px-2 py-0.5 text-xs font-medium rounded-full ${m.isActive?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--error-bg)] text-[var(--error-text)]"}`,children:m.isActive?h("common:active"):h("common:inactive")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-sm text-[var(--text-muted)]",children:[m.sectionsCount," ",h("applicationDetail.modules.sections","sections")]}),e.jsx("button",{onClick:()=>b(m),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] text-[var(--text-secondary)]","aria-label":h("applicationDetail.modules.edit"),children:e.jsx(w.Edit,{className:"w-4 h-4"})})]})]}),r.has(m.id)&&e.jsxs("div",{className:"mt-3 pl-10 pt-3 border-t border-[var(--border-color)]",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm mb-4",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-[var(--text-muted)]",children:[h("applicationDetail.fields.description"),":"]}),e.jsx("p",{className:"text-[var(--text-primary)]",children:m.description||"-"})]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-[var(--text-muted)]",children:[h("applicationDetail.fields.route"),":"]}),e.jsx("p",{className:"text-[var(--text-primary)] font-mono",children:m.route||"-"})]})]}),e.jsxs("div",{className:"mt-4",children:[e.jsxs("h5",{className:"text-sm font-medium text-[var(--text-secondary)] mb-2",children:[h("applicationDetail.modules.sections","Sections")," (",m.sectionsCount,")"]}),Ee(m.id,l,s,R,d,h)]})]})]})})]})}function Oe({application:t,permissions:r,permissionsWithRoles:s}){const{t:l}=z.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[l("applicationDetail.permissions.title")," (",r.length,")"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:l("applicationDetail.permissions.description",{path:`${t.code}.*`})}),r.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:l("applicationDetail.permissions.empty")}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.path")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.action")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.type")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.roles")})]})}),e.jsx("tbody",{children:s.map(({permission:d,roles:u})=>e.jsxs("tr",{className:"border-b border-[var(--border-color)] hover:bg-[var(--bg-hover)]",children:[e.jsx("td",{className:"py-3 px-4 font-mono text-sm text-[var(--text-primary)]",children:d.path}),e.jsx("td",{className:"py-3 px-4",children:d.action?e.jsx("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-[var(--accent-bg)] text-[var(--accent-text)]",children:d.action}):"-"}),e.jsx("td",{className:"py-3 px-4",children:d.isWildcard?e.jsx("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-[var(--warning-bg)] text-[var(--warning-text)]",children:l("applicationDetail.permissions.wildcard","Wildcard")}):e.jsx("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:l("applicationDetail.permissions.specific","Specific")})}),e.jsx("td",{className:"py-3 px-4",children:e.jsxs("div",{className:"flex flex-wrap gap-1",children:[u.length===0?e.jsx("span",{className:"text-[var(--text-muted)] text-sm",children:"-"}):u.slice(0,3).map(c=>e.jsx("span",{className:"px-2 py-0.5 text-xs font-medium rounded-full bg-[var(--color-accent-100)] text-[var(--color-accent-700)]",children:c.name},c.id)),u.length>3&&e.jsxs("span",{className:"px-2 py-0.5 text-xs font-medium rounded-full bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:["+",u.length-3]})]})})]},d.id))})]})})]})}function Ue({rolesWithAppAccess:t,onNavigateToRole:r}){const{t:s}=z.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[s("applicationDetail.roles.title")," (",t.length,")"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:s("applicationDetail.roles.description")}),t.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:s("applicationDetail.roles.empty")}):e.jsx("div",{className:"space-y-3",children:t.map(({role:l,permissions:d})=>e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--item-color-border)] hover:border-[var(--color-accent-600)] transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 rounded-[var(--radius-button)] bg-[var(--color-accent-100)]",children:e.jsx(w.Shield,{className:"w-5 h-5 text-[var(--color-accent-600)]"})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:l.name}),l.isSystem&&e.jsx("span",{className:"px-2 py-0.5 text-xs font-medium rounded-full bg-[var(--warning-bg)] text-[var(--warning-text)]",children:s("applicationDetail.roles.system","System")})]}),e.jsxs("p",{className:"text-sm text-[var(--text-muted)]",children:[l.usersCount," ",s("applicationDetail.roles.users")," • ",d.length," ",s("applicationDetail.roles.permissions")]})]})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("button",{onClick:()=>r(l.id),className:"flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] text-sm font-medium text-[var(--color-accent-600)] hover:bg-[var(--color-accent-100)]",children:[e.jsx(w.Eye,{className:"w-4 h-4"}),s("applicationDetail.roles.viewRole")]})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-1",children:[d.slice(0,5).map(u=>e.jsxs("span",{className:"px-2 py-0.5 text-xs font-mono rounded bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:[u.path.split(".").pop(),u.isWildcard&&".*"]},u.id)),d.length>5&&e.jsxs("span",{className:"px-2 py-0.5 text-xs rounded bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:["+",d.length-5," ",s("applicationDetail.roles.more","more")]})]})]},l.id))})]})}const ze=t=>{switch(t){case"FullAccess":return"bg-green-500";case"RequestAccess":return"bg-amber-500";case"Disabled":return"bg-gray-400";default:return"bg-gray-400"}},$e=t=>{switch(t){case"FullAccess":return"fullAccess";case"RequestAccess":return"requestAccess";case"Disabled":return"disabled";default:return"disabled"}},We=()=>{const{getIconForType:t}=V.useTenantTypeSettings();return r=>{const s=t(r),l=V.getLucideIcon(s.icon),d=V.getColorClasses(s.color);return{Icon:l,bgClass:d.bg,colorClass:d.text}}},Ge=({assignedTenants:t})=>{const{t:r}=z.useTranslation("admin"),s=We();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[r("applicationDetail.publication.title","Tenant Publication")," (",t.length,")"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:r("applicationDetail.publication.description","Manage which tenants have access to this application")})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 p-4 rounded-[var(--radius-card)] bg-[var(--bg-tertiary)] border border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-3 h-3 mt-1 rounded-full bg-green-500 flex-shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:r("applicationDetail.publication.accessLevels.fullAccess","Full Access")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("applicationDetail.publication.accessLevels.fullAccessDesc","Users can use all features")})]})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-3 h-3 mt-1 rounded-full bg-amber-500 flex-shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:r("applicationDetail.publication.accessLevels.requestAccess","Request Access")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("applicationDetail.publication.accessLevels.requestAccessDesc","Requires access request")})]})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-3 h-3 mt-1 rounded-full bg-gray-400 flex-shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:r("applicationDetail.publication.accessLevels.disabled","Disabled")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("applicationDetail.publication.accessLevels.disabledDesc","Not visible for tenant")})]})]})]}),t.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx(w.Globe,{className:"w-12 h-12 mx-auto text-[var(--text-muted)] mb-4"}),e.jsx("p",{className:"text-[var(--text-muted)]",children:r("applicationDetail.publication.empty","No tenants have access to this application yet")})]}):e.jsx("div",{className:"space-y-3",children:t.map(l=>{const{Icon:d,bgClass:u,colorClass:c}=s(l.tenantType),o=l.tenantStatus==="Active"?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--warning-bg)] text-[var(--warning-text)]";return e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--item-color-border)] hover:border-[var(--color-accent-600)] transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`p-2 rounded-[var(--radius-button)] ${u}`,children:e.jsx(d,{className:`w-5 h-5 ${c}`})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:l.tenantName}),e.jsx("span",{className:`px-2 py-0.5 text-xs font-medium rounded-full ${o}`,children:l.tenantStatus})]}),e.jsxs("p",{className:"text-sm text-[var(--text-muted)]",children:[l.tenantSlug," • ",l.tenantType]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`w-2.5 h-2.5 rounded-full ${ze(l.accessLevel)}`}),e.jsx("span",{className:"px-3 py-1.5 rounded-[var(--radius-input)] bg-[var(--bg-secondary)] border border-[var(--border-color)] text-sm text-[var(--text-primary)]",children:r(`applicationDetail.publication.accessLevels.${$e(l.accessLevel)}`,l.accessLevel)})]})]}),e.jsxs("div",{className:"mt-2 text-xs text-[var(--text-muted)]",children:[r("applicationDetail.publication.assignedAt","Assigned"),": ",new Date(l.assignedAt).toLocaleDateString(),l.assignedBy&&` ${r("applicationDetail.publication.by","by")} ${l.assignedBy}`]})]},l.tenantId)})})]})},_e=["info","modules","permissions","roles","publication","requests"];function Ke(){const{id:t}=Q.useParams(),r=Q.useNavigate(),{t:s}=z.useTranslation("admin"),{hasPermission:l}=M.useAuth(),{currentTenant:d,isGlobalView:u}=M.useTenant(),c=l("administration.applications.execute"),{activeTab:o,setActiveTab:j}=Ne.useTabNavigation("info",_e),a=De(),b=Me(),N=Ce(),i=Be(),D=X.useAccessRequests("application",t),R=n.useMemo(()=>u||!d?i.availableTenants:i.availableTenants.filter(p=>p.slug===d.slug),[i.availableTenants,u,d]),L=n.useMemo(()=>u||!d?i.assignedTenants:i.assignedTenants.filter(p=>p.tenantSlug===d.slug),[i.assignedTenants,u,d]);n.useEffect(()=>{t&&a.loadApplication(t)},[t]),n.useEffect(()=>{a.application&&((o==="permissions"||o==="roles")&&N.permissions.length===0&&N.loadPermissionsData(a.application),o==="publication"&&i.assignedTenants.length===0&&i.loadPublicationData(t),o==="requests"&&D.loadRequests())},[o,a.application,i.assignedTenants.length]);const h=[{id:"info",label:s("applicationDetail.tabs.info"),icon:w.Settings},{id:"modules",label:s("applicationDetail.tabs.modules"),icon:w.Layers},{id:"permissions",label:s("applicationDetail.tabs.permissions"),icon:w.Shield},{id:"roles",label:s("applicationDetail.tabs.roles"),icon:w.Users},{id:"publication",label:s("applicationDetail.tabs.publication"),icon:w.Globe},{id:"requests",label:s("applicationDetail.tabs.requests"),icon:w.Inbox}];if(a.loading)return e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx(w.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})});if(a.error||!a.application)return e.jsxs("div",{className:"text-center py-12",children:[e.jsx(w.AlertCircle,{className:"w-12 h-12 text-[var(--error-text)] mx-auto mb-4"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:a.error||s("applicationDetail.notFound")}),e.jsx("button",{onClick:()=>r("/administration/applications"),className:"mt-4 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]",children:s("applicationDetail.backToList")})]});const m=N.permissions.length>0||o==="permissions"||o==="roles",y=i.assignedTenants.length>0||o==="publication",P=[{label:s("applicationDetail.stats.modules"),value:a.application.modules?.length||0,color:"blue"},{label:s("applicationDetail.stats.permissions"),value:m?N.permissions.length:"—",color:"green"},{label:s("applicationDetail.stats.rolesWithAccess"),value:m?N.rolesWithAppAccess.length:"—",color:"purple"},{label:s("applicationDetail.stats.assignedTenants"),value:y?L.length:"—",color:"yellow"},{label:s("applicationDetail.stats.status"),value:a.application.isActive?s("common:active"):s("common:inactive"),color:a.application.isActive?"green":"neutral"}],T={blue:"bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]",green:"bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]",yellow:"bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]",red:"bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]",purple:"bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--color-accent-300)]",neutral:"bg-[var(--bg-secondary)] text-[var(--text-primary)] border-[var(--border-color)]"};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(M.Breadcrumb,{items:[{label:s("breadcrumb.admin",{ns:"navigation"}),href:"/administration"},{label:s("applications.title"),href:"/administration/applications"},{label:a.application.label}]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("button",{onClick:()=>r("/administration/applications"),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors","aria-label":s("common:back"),children:e.jsx(w.ArrowLeft,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"flex items-center gap-3",children:[H(a.application.icon,"w-5 h-5"),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-xl sm:text-2xl font-bold text-[var(--text-primary)]",children:a.application.label}),a.application.description&&e.jsx("p",{className:"text-sm sm:text-base text-[var(--text-secondary)]",children:a.application.description})]})]}),e.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[e.jsx("span",{className:`px-3 py-1 rounded-[var(--radius-badge)] text-sm font-medium ${a.application.isActive?"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)]":"bg-[var(--bg-tertiary)] text-[var(--text-secondary)] border border-[var(--border-color)]"}`,children:a.application.isActive?s("common:active"):s("common:inactive")}),c&&e.jsxs("button",{onClick:()=>a.handleToggleStatus(t),disabled:a.saving,className:`inline-flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${a.application.isActive?"bg-[var(--error-bg)] text-[var(--error-text)] border border-[var(--error-border)] hover:bg-[var(--error-border)]":"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)] hover:bg-[var(--success-border)]"} disabled:opacity-50`,children:[a.saving&&e.jsx(w.Loader2,{className:"w-4 h-4 animate-spin"}),!a.saving&&a.application.isActive&&e.jsx(w.PowerOff,{className:"w-4 h-4"}),!a.saving&&!a.application.isActive&&e.jsx(w.Power,{className:"w-4 h-4"}),a.application.isActive?s("applicationDetail.deactivate"):s("applicationDetail.activate")]})]})]}),a.error&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] text-[var(--error-text)] flex items-center gap-2",children:[e.jsx(w.AlertTriangle,{className:"w-5 h-5 flex-shrink-0"}),a.error]}),a.success&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--success-bg)] border border-[var(--success-border)] text-[var(--success-text)] flex items-center gap-2",children:[e.jsx(w.CheckCircle,{className:"w-5 h-5 flex-shrink-0"}),a.success]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 lg:grid-cols-5 gap-4",children:P.map(p=>e.jsxs("div",{className:`rounded-[var(--radius-card)] p-4 text-center border ${T[p.color]}`,children:[e.jsx("div",{className:"text-2xl font-bold",children:p.value}),e.jsx("div",{className:"text-sm opacity-80",children:p.label})]},p.label))}),e.jsx("div",{className:"flex gap-1 p-1 overflow-x-auto bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)]",role:"tablist","aria-label":s("applicationDetail.tabs.label","Application tabs"),children:h.map(p=>{const k=p.icon,S=o===p.id;return e.jsxs("button",{role:"tab","aria-selected":S,"aria-controls":`tabpanel-${p.id}`,onClick:()=>j(p.id),className:`flex items-center gap-2 px-4 py-2 whitespace-nowrap rounded-[var(--radius-button)] font-medium transition-colors ${S?"bg-[var(--color-accent-600)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,children:[e.jsx(k,{className:"w-4 h-4"}),p.label]},p.id)})}),e.jsxs("div",{className:"bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)] p-4 sm:p-6",role:"tabpanel",id:`tabpanel-${o}`,"aria-labelledby":o,children:[o==="info"&&e.jsx(qe,{formData:a.formData,setFormData:a.setFormData,application:a.application,saving:a.saving,onSubmit:()=>a.handleSaveInfo(t,a.formData)}),o==="modules"&&e.jsx(Ie,{application:a.application,expandedModules:b.expandedModules,moduleSections:b.moduleSections,loadingSections:b.loadingSections,reordering:b.reordering,editingModule:b.editingModule,moduleFormData:b.moduleFormData,showModuleForm:b.showModuleForm,saving:a.saving,onToggleExpand:p=>b.toggleModuleExpand(t,p),onStartEdit:b.startEditModule,onSaveModule:async()=>{await b.handleSaveModule(t,b.editingModule.id,b.moduleFormData),a.setSuccess(s("applicationDetail.success.moduleUpdated")),await a.loadApplication(t)},onCancelEdit:()=>{b.setShowModuleForm(!1),b.setEditingModule(null)},onModulesReorder:async p=>{await b.handleModulesReorder(t,p),await a.loadApplication(t)},onSectionsReorder:(p,k)=>b.handleSectionsReorder(t,p,k),setModuleFormData:p=>b.setModuleFormData(typeof p=="function"?p(b.moduleFormData):p)}),o==="permissions"&&e.jsx(Oe,{application:a.application,permissions:N.permissions,permissionsWithRoles:N.permissionsWithRoles}),o==="roles"&&e.jsx(Ue,{rolesWithAppAccess:N.rolesWithAppAccess,onNavigateToRole:p=>r(`/administration/permissions/roles/${p}`)}),o==="publication"&&e.jsx(Ge,{application:a.application,assignedTenants:L,availableTenants:R,showAssignModal:i.showAssignModal,selectedTenantIds:i.selectedTenantIds,selectedAccessLevel:i.selectedAccessLevel,tenantSearch:i.tenantSearch,showCustomizeDrawer:i.showCustomizeDrawer,customizingTenant:i.customizingTenant,bulkAccessMode:i.bulkAccessMode,bulkModules:i.bulkModules,bulkExpandedModules:i.bulkExpandedModules,loadingBulkModules:i.loadingBulkModules,isUpdateMode:i.isUpdateMode,updateMergeMode:i.updateMergeMode,showConfirmRemovalDialog:i.showConfirmRemovalDialog,pendingRemovals:i.pendingRemovals,saving:a.saving,includePersonalTenants:i.includePersonalTenants,isInDefaultPersonalTemplate:i.isInDefaultPersonalTemplate,onAddTenant:()=>{i.loadPublicationData(t),i.setShowAssignModal(!0)},onRemoveTenant:p=>i.handleRemoveTenant(t,p,()=>{a.setSuccess(s("applicationDetail.publication.success.removed"))}),onUpdateAccessLevel:(p,k)=>i.handleUpdateAccessLevel(t,p,k,()=>{a.setSuccess(s("applicationDetail.publication.success.updated"))}),onCustomizeTenant:p=>{i.setCustomizingTenant(p),i.setShowCustomizeDrawer(!0)},onCloseCustomizeDrawer:()=>{i.setShowCustomizeDrawer(!1),i.setCustomizingTenant(null),i.loadPublicationData(t)},onAssignTenants:()=>i.handleAssignTenants(t,()=>{a.setSuccess(s("applicationDetail.publication.success.assigned")),i.loadPublicationData(t)}),onUpdateTenants:()=>i.handleUpdateTenants(t,()=>{a.setSuccess(s("applicationDetail.publication.success.updated")),i.loadPublicationData(t)}),onExecuteUpdateTenants:()=>i.executeUpdateTenants(t,()=>{a.setSuccess(s("applicationDetail.publication.success.updated")),i.loadPublicationData(t)}),onCancelRemovalDialog:()=>{i.setShowConfirmRemovalDialog(!1),i.setUpdateMergeMode("merge")},setShowAssignModal:i.setShowAssignModal,setSelectedTenantIds:i.setSelectedTenantIds,setSelectedAccessLevel:i.setSelectedAccessLevel,setTenantSearch:i.setTenantSearch,setBulkAccessMode:i.setBulkAccessMode,setIsUpdateMode:i.setIsUpdateMode,setUpdateMergeMode:i.setUpdateMergeMode,onToggleTenantSelection:i.toggleTenantSelection,onSelectAllFilteredTenants:i.selectAllFilteredTenants,onClearTenantSelection:i.clearTenantSelection,setIncludePersonalTenants:i.setIncludePersonalTenants,onLoadBulkModules:()=>i.loadBulkModules(t),onToggleBulkModuleExpand:i.toggleBulkModuleExpand,onToggleBulkModule:i.toggleBulkModule,onToggleBulkSection:i.toggleBulkSection,onGetBulkModuleCheckState:i.getBulkModuleCheckState,onGetBulkStats:i.getBulkStats,onSelectAllBulkModules:i.selectAllBulkModules,onClearBulkModules:i.clearBulkModules,appId:t}),o==="requests"&&e.jsx(X.AccessRequestsListTab,{requests:D.requests,loading:D.loading,onReload:()=>D.loadRequests()})]})]})}exports.default=Ke;
2
- //# sourceMappingURL=ApplicationDetailPage-BYJ2YMPq.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),Q=require("react-router-dom"),Ne=require("./useTabNavigation-BVtbCTd5.js"),z=require("react-i18next"),M=require("./index-IgLVXPg8.js"),w=require("lucide-react"),U=require("@dnd-kit/core"),$=require("@dnd-kit/sortable"),we=require("@dnd-kit/utilities"),V=require("./tenantIconMap-CTMuSt18.js"),X=require("./useAccessRequests-DT7X4FAK.js");function Se(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const l=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(r,s,l.get?l:{enumerable:!0,get:()=>t[s]})}}return r.default=t,Object.freeze(r)}const Ae=Se(w);function H(t,r="w-4 h-4"){if(!t)return null;if(typeof t=="string"){const d=Ae[t];return d?e.jsx(d,{className:r}):null}const s=t;return e.jsx(s,{className:r})}function De(){const{t}=z.useTranslation("admin"),[r,s]=n.useState(null),[l,d]=n.useState(!1),[u,c]=n.useState(!1),[o,j]=n.useState(null),[a,b]=n.useState(null),[N,i]=n.useState({label:"",description:"",icon:"",route:"",displayOrder:0}),D=n.useCallback(async h=>{if(h){d(!0),j(null);try{const m=await M.adminApi.applications.getById(h);s(m),i({label:m.label,description:m.description||"",icon:m.icon||"",route:m.route||"",displayOrder:m.displayOrder})}catch(m){j(m instanceof Error?m.message:t("applicationDetail.errors.loadFailed"))}finally{d(!1)}}},[t]),R=n.useCallback(async(h,m)=>{if(!(!h||!r)){c(!0),j(null),b(null);try{const y={label:m.label,description:m.description||void 0,icon:m.icon||void 0,route:m.route||void 0,displayOrder:m.displayOrder};await M.adminApi.applications.update(h,y),b(t("applicationDetail.success.saved")),await D(h)}catch(y){j(y instanceof Error?y.message:t("applicationDetail.errors.saveFailed"))}finally{c(!1)}}},[r,t,D]),L=n.useCallback(async h=>{if(!(!h||!r)){c(!0),j(null),b(null);try{r.isActive?await M.adminApi.applications.deactivate(h):await M.adminApi.applications.activate(h),b(r.isActive?t("applicationDetail.success.deactivated"):t("applicationDetail.success.activated")),await D(h)}catch(m){j(m instanceof Error?m.message:t("applicationDetail.errors.toggleFailed"))}finally{c(!1)}}},[r,t,D]);return{application:r,loading:l,saving:u,error:o,success:a,formData:N,setFormData:i,setError:j,setSuccess:b,loadApplication:D,handleSaveInfo:R,handleToggleStatus:L}}function Me(){const[t,r]=n.useState(new Set),[s,l]=n.useState(new Map),[d,u]=n.useState(new Set),[c,o]=n.useState(!1),[j,a]=n.useState(null),[b,N]=n.useState({code:"",label:"",description:"",icon:"",route:"",displayOrder:0}),[i,D]=n.useState(!1),R=n.useCallback(async(T,p)=>{const k=!t.has(p);if(r(S=>{const A=new Set(S);return A.has(p)?A.delete(p):A.add(p),A}),k&&!s.has(p)){u(S=>new Set(S).add(p));try{const S=await M.adminApi.applications.getModuleSections(T,p);l(A=>new Map(A).set(p,S))}catch(S){console.error("Failed to load sections:",S)}finally{u(S=>{const A=new Set(S);return A.delete(p),A})}}},[t,s]),L=n.useCallback(async(T,p,k)=>{try{await M.adminApi.applications.updateModule(T,p,{label:k.label,description:k.description||void 0,icon:k.icon||void 0,route:k.route||void 0,displayOrder:k.displayOrder}),D(!1),a(null),P()}catch(S){throw console.error("Failed to save module:",S),S}},[]),h=n.useCallback(async(T,p)=>{const k=p.map((S,A)=>({...S,displayOrder:A}));o(!0);try{await M.adminApi.applications.reorderModules(T,k.map((S,A)=>({id:S.id,displayOrder:A})))}catch(S){throw console.error("Failed to reorder modules:",S),S}finally{o(!1)}},[]),m=n.useCallback(async(T,p,k)=>{const S=k.map((A,B)=>({...A,displayOrder:B}));l(A=>new Map(A).set(p,S)),o(!0);try{await M.adminApi.applications.reorderSections(T,p,S.map((A,B)=>({id:A.id,displayOrder:B})))}catch(A){console.error("Failed to reorder sections:",A);try{const B=await M.adminApi.applications.getModuleSections(T,p);l(O=>new Map(O).set(p,B))}catch(B){console.error("Failed to reload sections:",B)}throw A}finally{o(!1)}},[]),y=n.useCallback(T=>{a(T),N({code:T.code,label:T.label,description:T.description||"",icon:T.icon||"",route:T.route||"",displayOrder:T.displayOrder}),D(!0)},[]),P=n.useCallback(T=>{N({code:"",label:"",description:"",icon:"",route:"",displayOrder:T||0})},[]);return{expandedModules:t,moduleSections:s,loadingSections:d,reordering:c,editingModule:j,moduleFormData:b,showModuleForm:i,toggleModuleExpand:R,handleSaveModule:L,handleModulesReorder:h,handleSectionsReorder:m,startEditModule:y,resetModuleForm:P,setShowModuleForm:D,setEditingModule:a,setModuleFormData:N}}const Te=(t,r,s)=>{const l=r.filter(d=>d.permissionIds.includes(t.id)).map(d=>s.find(u=>u.id===d.id)).filter(Boolean);return{permission:t,roles:l}};function Ce(){const[t,r]=n.useState([]),[s,l]=n.useState([]),[d,u]=n.useState([]),c=n.useCallback(async a=>{try{const[b,N]=await Promise.all([M.adminApi.permissions.getMatrix(),M.adminApi.roles.getAll()]),i=`${a.code}.`.toLowerCase(),D=b.permissions.filter(L=>L.path.toLowerCase().startsWith(i));l(D),r(N);const R=D.map(L=>Te(L,b.roles,N));u(R)}catch(b){throw console.error("Failed to load permissions data:",b),b}},[]),o=n.useCallback(async()=>{try{const a=await M.adminApi.roles.getAll();r(a)}catch(a){throw console.error("Failed to load roles:",a),a}},[]),j=n.useMemo(()=>{if(d.length===0)return[];const a=new Map;return d.forEach(({permission:b,roles:N})=>{N.forEach(i=>{a.has(i.id)||a.set(i.id,{role:i,permissions:[]}),a.get(i.id).permissions.push(b)})}),Array.from(a.values()).sort((b,N)=>N.permissions.length-b.permissions.length)},[d]);return{roles:t,permissions:s,permissionsWithRoles:d,rolesWithAppAccess:j,loadPermissionsData:c,loadRolesData:o}}const ke=(t,r)=>{if(t.id!==r)return t;const s=!t.isAssigned;return{...t,isAssigned:s,sections:t.sections.map(l=>({...l,isAssigned:s}))}},Le=(t,r,s)=>{if(t.id!==r)return t;const l=t.sections.map(u=>u.id===s?{...u,isAssigned:!u.isAssigned}:u),d=l.every(u=>u.isAssigned);return{...t,isAssigned:d,sections:l}},Re=t=>({...t,isAssigned:!0,sections:t.sections.map(r=>({...r,isAssigned:!0}))}),Pe=t=>({...t,isAssigned:!1,sections:t.sections.map(r=>({...r,isAssigned:!1}))});function Be(){const[t,r]=n.useState([]),[s,l]=n.useState([]),[d,u]=n.useState(!1),[c,o]=n.useState([]),[j,a]=n.useState("FullAccess"),[b,N]=n.useState(""),[i,D]=n.useState(!1),[R,L]=n.useState(null),[h,m]=n.useState("full"),[y,P]=n.useState([]),[T,p]=n.useState(new Set),[k,S]=n.useState(!1),[A,B]=n.useState(!1),[O,Z]=n.useState("merge"),[ee,G]=n.useState(!1),[te,J]=n.useState({modules:0,sections:0}),[W,se]=n.useState(!1),[ae,ie]=n.useState(!1),q=n.useCallback(async v=>{try{const[x,g]=await Promise.all([M.adminApi.applications.getTenants(v),M.adminApi.applications.getAvailableTenants(v)]);r(x),l(g.tenants),ie(g.isInDefaultPersonalTemplate)}catch(x){console.error("Failed to load publication data:",x)}},[]),re=n.useCallback(async v=>{S(!0);try{const x=await M.adminApi.applications.getModules(v),g=[];for(const f of x){const F=(await M.adminApi.applications.getModuleSections(v,f.id)).map(I=>({id:I.id,label:I.label,code:I.code,icon:I.icon,isAssigned:!0}));g.push({id:f.id,label:f.label,code:f.code,icon:f.icon,isAssigned:!0,sections:F})}P(g)}catch(x){console.error("Failed to load bulk modules:",x)}finally{S(!1)}},[]),ne=n.useCallback(v=>{p(x=>{const g=new Set(x);return g.has(v)?g.delete(v):g.add(v),g})},[]),le=n.useCallback(v=>{P(x=>x.map(g=>ke(g,v)))},[]),oe=n.useCallback((v,x)=>{P(g=>g.map(f=>Le(f,v,x)))},[]),ce=n.useCallback(v=>{const x=v.sections.filter(g=>g.isAssigned).length;return x===0?"unchecked":x===v.sections.length?"checked":"indeterminate"},[]),de=n.useCallback(()=>{const v=y.length,x=y.filter(C=>C.isAssigned||C.sections.some(F=>F.isAssigned)).length,g=y.reduce((C,F)=>C+F.sections.length,0),f=y.reduce((C,F)=>C+F.sections.filter(I=>I.isAssigned).length,0);return{totalModules:v,assignedModules:x,totalSections:g,assignedSections:f}},[y]),ue=n.useCallback(()=>{P(v=>v.map(x=>Re(x)))},[]),pe=n.useCallback(()=>{P(v=>v.map(x=>Pe(x)))},[]),me=n.useCallback(v=>{o(x=>x.includes(v)?x.filter(g=>g!==v):[...x,v])},[]),xe=n.useCallback(()=>{if(A){const v=t.filter(x=>{const g=x.tenantName.toLowerCase().includes(b.toLowerCase())||x.tenantSlug.toLowerCase().includes(b.toLowerCase()),f=W||x.tenantType!=="Personal";return g&&f}).map(x=>x.tenantId);o(v)}else{const v=s.filter(x=>{const g=x.name.toLowerCase().includes(b.toLowerCase())||x.slug.toLowerCase().includes(b.toLowerCase()),f=W||x.type!=="Personal";return g&&f}).map(x=>x.id);o(v)}},[A,t,s,b,W]),be=n.useCallback(()=>{o([])},[]),_=n.useCallback(async(v,x)=>{if(!(!v||c.length===0))try{const g={tenantIds:c,accessLevel:j,accessMode:h,mergeMode:O};h==="custom"&&(g.moduleIds=y.filter(f=>f.isAssigned).map(f=>f.id),g.sectionIds=y.flatMap(f=>f.sections.filter(C=>C.isAssigned).map(C=>C.id))),await M.adminApi.applications.bulkAssignTenants(v,g),u(!1),o([]),a("FullAccess"),m("full"),N(""),B(!1),Z("merge"),G(!1),await q(v),x&&x()}catch(g){throw console.error("Failed to update tenant assignments:",g),g}},[c,j,h,O,y,q]),ve=n.useCallback(async(v,x)=>{if(!(!v||c.length===0))try{const g={tenantIds:c,accessLevel:j,accessMode:h};h==="custom"&&(g.moduleIds=y.filter(f=>f.isAssigned).map(f=>f.id),g.sectionIds=y.flatMap(f=>f.sections.filter(C=>C.isAssigned).map(C=>C.id))),await M.adminApi.applications.bulkAssignTenants(v,g),u(!1),o([]),a("FullAccess"),m("full"),N(""),await q(v),x&&x()}catch(g){throw console.error("Failed to assign tenants:",g),g}},[c,j,h,y,q]),ge=n.useCallback(async(v,x)=>{if(!(!v||c.length===0)){if(O==="replace"&&h==="custom"){let g=0,f=0;for(const C of c)try{const F=await M.adminApi.tenants.getModules(C),I=await M.adminApi.tenants.getSections(C),ye=new Set(y.filter(E=>E.isAssigned).map(E=>E.id)),je=new Set(y.flatMap(E=>E.sections.filter(K=>K.isAssigned).map(K=>K.id)));g+=F.filter(E=>!ye.has(E.moduleId)).length,f+=I.filter(E=>!je.has(E.sectionId)).length}catch{}if(g>0||f>0){J({modules:g,sections:f}),G(!0);return}}await _(v,x)}},[c,O,h,y,_]),he=n.useCallback(async(v,x,g)=>{if(v)try{await M.adminApi.applications.removeFromTenant(v,x),await q(v),g&&g()}catch(f){throw console.error("Failed to remove tenant:",f),f}},[q]),fe=n.useCallback(async(v,x,g,f)=>{if(v)try{await M.adminApi.applications.updateTenantAccessLevel(v,x,g),await q(v),f&&f()}catch(C){throw console.error("Failed to update access level:",C),C}},[q]);return{assignedTenants:t,availableTenants:s,showAssignModal:d,selectedTenantIds:c,selectedAccessLevel:j,tenantSearch:b,showCustomizeDrawer:i,customizingTenant:R,bulkAccessMode:h,bulkModules:y,bulkExpandedModules:T,loadingBulkModules:k,isUpdateMode:A,updateMergeMode:O,showConfirmRemovalDialog:ee,pendingRemovals:te,includePersonalTenants:W,isInDefaultPersonalTemplate:ae,setAssignedTenants:r,setAvailableTenants:l,setShowAssignModal:u,setSelectedTenantIds:o,setSelectedAccessLevel:a,setTenantSearch:N,setShowCustomizeDrawer:D,setCustomizingTenant:L,setBulkAccessMode:m,setBulkModules:P,setBulkExpandedModules:p,setIsUpdateMode:B,setUpdateMergeMode:Z,setShowConfirmRemovalDialog:G,setPendingRemovals:J,setIncludePersonalTenants:se,loadPublicationData:q,loadBulkModules:re,toggleBulkModuleExpand:ne,toggleBulkModule:le,toggleBulkSection:oe,getBulkModuleCheckState:ce,getBulkStats:de,selectAllBulkModules:ue,clearBulkModules:pe,toggleTenantSelection:me,selectAllFilteredTenants:xe,clearTenantSelection:be,handleAssignTenants:ve,handleUpdateTenants:ge,executeUpdateTenants:_,handleRemoveTenant:he,handleUpdateAccessLevel:fe}}function qe({formData:t,setFormData:r,application:s,saving:l,onSubmit:d}){const{t:u}=z.useTranslation("admin");return e.jsxs("form",{onSubmit:d,className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.code")}),e.jsx("input",{type:"text",value:s.code,disabled:!0,className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-tertiary)] border border-[var(--border-color)] text-[var(--text-muted)] cursor-not-allowed"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.label")}),e.jsx("input",{type:"text",value:t.label,onChange:c=>r(o=>({...o,label:c.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent",required:!0})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.description")}),e.jsx("textarea",{value:t.description,onChange:c=>r(o=>({...o,description:c.target.value})),rows:3,className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.icon")}),e.jsx("input",{type:"text",value:t.icon,onChange:c=>r(o=>({...o,icon:c.target.value})),placeholder:u("applicationDetail.fields.icon"),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.route")}),e.jsx("input",{type:"text",value:t.route,onChange:c=>r(o=>({...o,route:c.target.value})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.displayOrder")}),e.jsx("input",{type:"number",value:t.displayOrder,onChange:c=>r(o=>({...o,displayOrder:parseInt(c.target.value)||0})),className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-600)] focus:border-transparent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-2",children:u("applicationDetail.fields.zone","Zone")}),e.jsx("input",{type:"text",value:s.zone||"",disabled:!0,className:"w-full px-4 py-2 rounded-[var(--radius-input)] bg-[var(--bg-tertiary)] border border-[var(--border-color)] text-[var(--text-muted)] cursor-not-allowed"})]})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs("button",{type:"submit",disabled:l,className:"flex items-center gap-2 px-6 py-2 rounded-[var(--radius-button)] font-medium bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] disabled:opacity-50",children:[l?e.jsx(w.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(w.Save,{className:"w-4 h-4"}),u("applicationDetail.actions.save")]})})]})}function Fe({id:t,disabled:r,children:s}){const{attributes:l,listeners:d,setNodeRef:u,transform:c,transition:o,isDragging:j}=$.useSortable({id:t,disabled:r}),a={transform:we.CSS.Transform.toString(c),transition:o,opacity:j?.5:1,zIndex:j?1:0},b=r?null:e.jsx("button",{type:"button",className:"p-1.5 rounded hover:bg-[var(--bg-hover)] cursor-grab active:cursor-grabbing text-[var(--text-muted)] hover:text-[var(--text-secondary)] transition-colors",...l,...d,children:e.jsx(w.GripVertical,{className:"w-4 h-4"})});return e.jsx("div",{ref:u,style:a,children:s(b)})}function Y({items:t,onReorder:r,renderItem:s,disabled:l=!1}){const[,d]=n.useState(null),u=U.useSensors(U.useSensor(U.PointerSensor,{activationConstraint:{distance:8}}),U.useSensor(U.KeyboardSensor,{coordinateGetter:$.sortableKeyboardCoordinates})),c=o=>{const{active:j,over:a}=o;if(d(null),a&&j.id!==a.id){const b=t.findIndex(D=>D.id===j.id),N=t.findIndex(D=>D.id===a.id),i=$.arrayMove(t,b,N);r(i)}};return e.jsx(U.DndContext,{sensors:u,collisionDetection:U.closestCenter,onDragStart:o=>d(o.active.id),onDragEnd:c,children:e.jsx($.SortableContext,{items:t.map(o=>o.id),strategy:$.verticalListSortingStrategy,disabled:l,children:e.jsx("div",{className:"space-y-2",children:t.map(o=>e.jsx(Fe,{id:o.id,disabled:l,children:j=>s(o,j)},o.id))})})})}const Ee=(t,r,s,l,d,u)=>r.has(t)?e.jsx("div",{className:"flex items-center justify-center py-4",children:e.jsx(w.Loader2,{className:"w-5 h-5 animate-spin text-[var(--text-muted)]"})}):s.get(t)?.length===0?e.jsx("p",{className:"text-sm text-[var(--text-muted)] py-2",children:u("applicationDetail.modules.noSections","No sections")}):s.get(t)?e.jsx(Y,{items:s.get(t).map(c=>({...c,id:c.id})),onReorder:c=>l(t,c),disabled:d,renderItem:(c,o)=>e.jsxs("div",{className:"flex items-center gap-2 p-2 rounded bg-[var(--bg-secondary)] border border-[var(--border-color)]",children:[o,e.jsx("div",{className:"p-1 rounded bg-[var(--bg-tertiary)]",children:H(c.icon,"w-3 h-3")||e.jsx(w.Layers,{className:"w-3 h-3 text-[var(--text-muted)]"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:c.label}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:c.code})]}),e.jsx("span",{className:`px-2 py-0.5 text-xs rounded-full ${c.isActive?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--error-bg)] text-[var(--error-text)]"}`,children:c.isActive?u("common:active"):u("common:inactive")})]})}):null;function Ie({application:t,expandedModules:r,moduleSections:s,loadingSections:l,reordering:d,editingModule:u,moduleFormData:c,showModuleForm:o,saving:j,onToggleExpand:a,onStartEdit:b,onSaveModule:N,onCancelEdit:i,onModulesReorder:D,onSectionsReorder:R,setModuleFormData:L}){const{t:h}=z.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[h("applicationDetail.modules.title")," (",t.modules.length,")"]}),o&&u&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]",children:[e.jsx("h4",{className:"text-md font-semibold text-[var(--text-primary)] mb-4",children:h("applicationDetail.modules.edit")}),e.jsxs("form",{onSubmit:N,className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.code")}),e.jsx("input",{type:"text",value:c.code,disabled:!0,className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-tertiary)] border border-[var(--border-color)] text-[var(--text-muted)] cursor-not-allowed"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.label")}),e.jsx("input",{type:"text",value:c.label,onChange:m=>L(y=>({...y,label:m.target.value})),className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]",required:!0})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.icon")}),e.jsx("input",{type:"text",value:c.icon,onChange:m=>L(y=>({...y,icon:m.target.value})),placeholder:"Users",className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.route")}),e.jsx("input",{type:"text",value:c.route,onChange:m=>L(y=>({...y,route:m.target.value})),className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]"})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:h("applicationDetail.fields.description")}),e.jsx("textarea",{value:c.description,onChange:m=>L(y=>({...y,description:m.target.value})),rows:2,className:"w-full px-3 py-2 rounded-[var(--radius-input)] bg-[var(--bg-primary)] border border-[var(--border-color)] text-[var(--text-primary)]"})]})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:i,className:"px-4 py-2 rounded-[var(--radius-button)] font-medium text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",children:h("common:cancel")}),e.jsxs("button",{type:"submit",disabled:j,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] disabled:opacity-50",children:[j?e.jsx(w.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(w.Save,{className:"w-4 h-4"}),h("common:save")]})]})]})]}),t.modules.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:h("applicationDetail.modules.empty")}):e.jsx(Y,{items:t.modules.map(m=>({...m,id:m.id})),onReorder:D,disabled:d,renderItem:(m,y)=>e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--item-color-border)] hover:border-[var(--color-accent-600)] transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[y,e.jsx("div",{className:"p-2 rounded-[var(--radius-button)] bg-[var(--bg-tertiary)]",children:H(m.icon,"w-4 h-4")||e.jsx(w.Layers,{className:"w-4 h-4 text-[var(--text-muted)]"})}),e.jsx("button",{onClick:()=>a(m.id),className:"p-1 rounded hover:bg-[var(--bg-hover)]","aria-expanded":r.has(m.id),"aria-label":h("applicationDetail.modules.toggleExpand","Toggle sections"),children:r.has(m.id)?e.jsx(w.ChevronDown,{className:"w-4 h-4 text-[var(--text-muted)]"}):e.jsx(w.ChevronRight,{className:"w-4 h-4 text-[var(--text-muted)]"})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:m.label}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:m.code})]}),e.jsx("span",{className:`ml-2 px-2 py-0.5 text-xs font-medium rounded-full ${m.isActive?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--error-bg)] text-[var(--error-text)]"}`,children:m.isActive?h("common:active"):h("common:inactive")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-sm text-[var(--text-muted)]",children:[m.sectionsCount," ",h("applicationDetail.modules.sections","sections")]}),e.jsx("button",{onClick:()=>b(m),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] text-[var(--text-secondary)]","aria-label":h("applicationDetail.modules.edit"),children:e.jsx(w.Edit,{className:"w-4 h-4"})})]})]}),r.has(m.id)&&e.jsxs("div",{className:"mt-3 pl-10 pt-3 border-t border-[var(--border-color)]",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm mb-4",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-[var(--text-muted)]",children:[h("applicationDetail.fields.description"),":"]}),e.jsx("p",{className:"text-[var(--text-primary)]",children:m.description||"-"})]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-[var(--text-muted)]",children:[h("applicationDetail.fields.route"),":"]}),e.jsx("p",{className:"text-[var(--text-primary)] font-mono",children:m.route||"-"})]})]}),e.jsxs("div",{className:"mt-4",children:[e.jsxs("h5",{className:"text-sm font-medium text-[var(--text-secondary)] mb-2",children:[h("applicationDetail.modules.sections","Sections")," (",m.sectionsCount,")"]}),Ee(m.id,l,s,R,d,h)]})]})]})})]})}function Oe({application:t,permissions:r,permissionsWithRoles:s}){const{t:l}=z.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[l("applicationDetail.permissions.title")," (",r.length,")"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:l("applicationDetail.permissions.description",{path:`${t.code}.*`})}),r.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:l("applicationDetail.permissions.empty")}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-[var(--border-color)]",children:[e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.path")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.action")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.type")}),e.jsx("th",{className:"text-left py-3 px-4 text-sm font-medium text-[var(--text-secondary)]",children:l("applicationDetail.permissions.roles")})]})}),e.jsx("tbody",{children:s.map(({permission:d,roles:u})=>e.jsxs("tr",{className:"border-b border-[var(--border-color)] hover:bg-[var(--bg-hover)]",children:[e.jsx("td",{className:"py-3 px-4 font-mono text-sm text-[var(--text-primary)]",children:d.path}),e.jsx("td",{className:"py-3 px-4",children:d.action?e.jsx("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-[var(--accent-bg)] text-[var(--accent-text)]",children:d.action}):"-"}),e.jsx("td",{className:"py-3 px-4",children:d.isWildcard?e.jsx("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-[var(--warning-bg)] text-[var(--warning-text)]",children:l("applicationDetail.permissions.wildcard","Wildcard")}):e.jsx("span",{className:"px-2 py-1 text-xs font-medium rounded-full bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:l("applicationDetail.permissions.specific","Specific")})}),e.jsx("td",{className:"py-3 px-4",children:e.jsxs("div",{className:"flex flex-wrap gap-1",children:[u.length===0?e.jsx("span",{className:"text-[var(--text-muted)] text-sm",children:"-"}):u.slice(0,3).map(c=>e.jsx("span",{className:"px-2 py-0.5 text-xs font-medium rounded-full bg-[var(--color-accent-100)] text-[var(--color-accent-700)]",children:c.name},c.id)),u.length>3&&e.jsxs("span",{className:"px-2 py-0.5 text-xs font-medium rounded-full bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:["+",u.length-3]})]})})]},d.id))})]})})]})}function Ue({rolesWithAppAccess:t,onNavigateToRole:r}){const{t:s}=z.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[s("applicationDetail.roles.title")," (",t.length,")"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:s("applicationDetail.roles.description")}),t.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:s("applicationDetail.roles.empty")}):e.jsx("div",{className:"space-y-3",children:t.map(({role:l,permissions:d})=>e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--item-color-border)] hover:border-[var(--color-accent-600)] transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 rounded-[var(--radius-button)] bg-[var(--color-accent-100)]",children:e.jsx(w.Shield,{className:"w-5 h-5 text-[var(--color-accent-600)]"})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:l.name}),l.isSystem&&e.jsx("span",{className:"px-2 py-0.5 text-xs font-medium rounded-full bg-[var(--warning-bg)] text-[var(--warning-text)]",children:s("applicationDetail.roles.system","System")})]}),e.jsxs("p",{className:"text-sm text-[var(--text-muted)]",children:[l.usersCount," ",s("applicationDetail.roles.users")," • ",d.length," ",s("applicationDetail.roles.permissions")]})]})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("button",{onClick:()=>r(l.id),className:"flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] text-sm font-medium text-[var(--color-accent-600)] hover:bg-[var(--color-accent-100)]",children:[e.jsx(w.Eye,{className:"w-4 h-4"}),s("applicationDetail.roles.viewRole")]})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-1",children:[d.slice(0,5).map(u=>e.jsxs("span",{className:"px-2 py-0.5 text-xs font-mono rounded bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:[u.path.split(".").pop(),u.isWildcard&&".*"]},u.id)),d.length>5&&e.jsxs("span",{className:"px-2 py-0.5 text-xs rounded bg-[var(--bg-tertiary)] text-[var(--text-muted)]",children:["+",d.length-5," ",s("applicationDetail.roles.more","more")]})]})]},l.id))})]})}const ze=t=>{switch(t){case"FullAccess":return"bg-green-500";case"RequestAccess":return"bg-amber-500";case"Disabled":return"bg-gray-400";default:return"bg-gray-400"}},$e=t=>{switch(t){case"FullAccess":return"fullAccess";case"RequestAccess":return"requestAccess";case"Disabled":return"disabled";default:return"disabled"}},We=()=>{const{getIconForType:t}=V.useTenantTypeSettings();return r=>{const s=t(r),l=V.getLucideIcon(s.icon),d=V.getColorClasses(s.color);return{Icon:l,bgClass:d.bg,colorClass:d.text}}},Ge=({assignedTenants:t})=>{const{t:r}=z.useTranslation("admin"),s=We();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[r("applicationDetail.publication.title","Tenant Publication")," (",t.length,")"]}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:r("applicationDetail.publication.description","Manage which tenants have access to this application")})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 p-4 rounded-[var(--radius-card)] bg-[var(--bg-tertiary)] border border-[var(--border-color)]",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-3 h-3 mt-1 rounded-full bg-green-500 flex-shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:r("applicationDetail.publication.accessLevels.fullAccess","Full Access")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("applicationDetail.publication.accessLevels.fullAccessDesc","Users can use all features")})]})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-3 h-3 mt-1 rounded-full bg-amber-500 flex-shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:r("applicationDetail.publication.accessLevels.requestAccess","Request Access")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("applicationDetail.publication.accessLevels.requestAccessDesc","Requires access request")})]})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-3 h-3 mt-1 rounded-full bg-gray-400 flex-shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-[var(--text-primary)]",children:r("applicationDetail.publication.accessLevels.disabled","Disabled")}),e.jsx("p",{className:"text-xs text-[var(--text-muted)]",children:r("applicationDetail.publication.accessLevels.disabledDesc","Not visible for tenant")})]})]})]}),t.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx(w.Globe,{className:"w-12 h-12 mx-auto text-[var(--text-muted)] mb-4"}),e.jsx("p",{className:"text-[var(--text-muted)]",children:r("applicationDetail.publication.empty","No tenants have access to this application yet")})]}):e.jsx("div",{className:"space-y-3",children:t.map(l=>{const{Icon:d,bgClass:u,colorClass:c}=s(l.tenantType),o=l.tenantStatus==="Active"?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--warning-bg)] text-[var(--warning-text)]";return e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--item-color-border)] hover:border-[var(--color-accent-600)] transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`p-2 rounded-[var(--radius-button)] ${u}`,children:e.jsx(d,{className:`w-5 h-5 ${c}`})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:l.tenantName}),e.jsx("span",{className:`px-2 py-0.5 text-xs font-medium rounded-full ${o}`,children:l.tenantStatus})]}),e.jsxs("p",{className:"text-sm text-[var(--text-muted)]",children:[l.tenantSlug," • ",l.tenantType]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`w-2.5 h-2.5 rounded-full ${ze(l.accessLevel)}`}),e.jsx("span",{className:"px-3 py-1.5 rounded-[var(--radius-input)] bg-[var(--bg-secondary)] border border-[var(--border-color)] text-sm text-[var(--text-primary)]",children:r(`applicationDetail.publication.accessLevels.${$e(l.accessLevel)}`,l.accessLevel)})]})]}),e.jsxs("div",{className:"mt-2 text-xs text-[var(--text-muted)]",children:[r("applicationDetail.publication.assignedAt","Assigned"),": ",new Date(l.assignedAt).toLocaleDateString(),l.assignedBy&&` ${r("applicationDetail.publication.by","by")} ${l.assignedBy}`]})]},l.tenantId)})})]})},_e=["info","modules","permissions","roles","publication","requests"];function Ke(){const{id:t}=Q.useParams(),r=Q.useNavigate(),{t:s}=z.useTranslation("admin"),{hasPermission:l}=M.useAuth(),{currentTenant:d,isGlobalView:u}=M.useTenant(),c=l("administration.applications.execute"),{activeTab:o,setActiveTab:j}=Ne.useTabNavigation("info",_e),a=De(),b=Me(),N=Ce(),i=Be(),D=X.useAccessRequests("application",t),R=n.useMemo(()=>u||!d?i.availableTenants:i.availableTenants.filter(p=>p.slug===d.slug),[i.availableTenants,u,d]),L=n.useMemo(()=>u||!d?i.assignedTenants:i.assignedTenants.filter(p=>p.tenantSlug===d.slug),[i.assignedTenants,u,d]);n.useEffect(()=>{t&&a.loadApplication(t)},[t]),n.useEffect(()=>{a.application&&((o==="permissions"||o==="roles")&&N.permissions.length===0&&N.loadPermissionsData(a.application),o==="publication"&&i.assignedTenants.length===0&&i.loadPublicationData(t),o==="requests"&&D.loadRequests())},[o,a.application,i.assignedTenants.length]);const h=[{id:"info",label:s("applicationDetail.tabs.info"),icon:w.Settings},{id:"modules",label:s("applicationDetail.tabs.modules"),icon:w.Layers},{id:"permissions",label:s("applicationDetail.tabs.permissions"),icon:w.Shield},{id:"roles",label:s("applicationDetail.tabs.roles"),icon:w.Users},{id:"publication",label:s("applicationDetail.tabs.publication"),icon:w.Globe},{id:"requests",label:s("applicationDetail.tabs.requests"),icon:w.Inbox}];if(a.loading)return e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx(w.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})});if(a.error||!a.application)return e.jsxs("div",{className:"text-center py-12",children:[e.jsx(w.AlertCircle,{className:"w-12 h-12 text-[var(--error-text)] mx-auto mb-4"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:a.error||s("applicationDetail.notFound")}),e.jsx("button",{onClick:()=>r("/administration/applications"),className:"mt-4 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]",children:s("applicationDetail.backToList")})]});const m=N.permissions.length>0||o==="permissions"||o==="roles",y=i.assignedTenants.length>0||o==="publication",P=[{label:s("applicationDetail.stats.modules"),value:a.application.modules?.length||0,color:"blue"},{label:s("applicationDetail.stats.permissions"),value:m?N.permissions.length:"—",color:"green"},{label:s("applicationDetail.stats.rolesWithAccess"),value:m?N.rolesWithAppAccess.length:"—",color:"purple"},{label:s("applicationDetail.stats.assignedTenants"),value:y?L.length:"—",color:"yellow"},{label:s("applicationDetail.stats.status"),value:a.application.isActive?s("common:active"):s("common:inactive"),color:a.application.isActive?"green":"neutral"}],T={blue:"bg-[var(--info-bg)] text-[var(--info-text)] border-[var(--info-border)]",green:"bg-[var(--success-bg)] text-[var(--success-text)] border-[var(--success-border)]",yellow:"bg-[var(--warning-bg)] text-[var(--warning-text)] border-[var(--warning-border)]",red:"bg-[var(--error-bg)] text-[var(--error-text)] border-[var(--error-border)]",purple:"bg-[var(--accent-bg)] text-[var(--accent-text)] border-[var(--color-accent-300)]",neutral:"bg-[var(--bg-secondary)] text-[var(--text-primary)] border-[var(--border-color)]"};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(M.Breadcrumb,{items:[{label:s("breadcrumb.admin",{ns:"navigation"}),href:"/administration"},{label:s("applications.title"),href:"/administration/applications"},{label:a.application.label}]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("button",{onClick:()=>r("/administration/applications"),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors","aria-label":s("common:back"),children:e.jsx(w.ArrowLeft,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"flex items-center gap-3",children:[H(a.application.icon,"w-5 h-5"),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-xl sm:text-2xl font-bold text-[var(--text-primary)]",children:a.application.label}),a.application.description&&e.jsx("p",{className:"text-sm sm:text-base text-[var(--text-secondary)]",children:a.application.description})]})]}),e.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[e.jsx("span",{className:`px-3 py-1 rounded-[var(--radius-badge)] text-sm font-medium ${a.application.isActive?"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)]":"bg-[var(--bg-tertiary)] text-[var(--text-secondary)] border border-[var(--border-color)]"}`,children:a.application.isActive?s("common:active"):s("common:inactive")}),c&&e.jsxs("button",{onClick:()=>a.handleToggleStatus(t),disabled:a.saving,className:`inline-flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${a.application.isActive?"bg-[var(--error-bg)] text-[var(--error-text)] border border-[var(--error-border)] hover:bg-[var(--error-border)]":"bg-[var(--success-bg)] text-[var(--success-text)] border border-[var(--success-border)] hover:bg-[var(--success-border)]"} disabled:opacity-50`,children:[a.saving&&e.jsx(w.Loader2,{className:"w-4 h-4 animate-spin"}),!a.saving&&a.application.isActive&&e.jsx(w.PowerOff,{className:"w-4 h-4"}),!a.saving&&!a.application.isActive&&e.jsx(w.Power,{className:"w-4 h-4"}),a.application.isActive?s("applicationDetail.deactivate"):s("applicationDetail.activate")]})]})]}),a.error&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)] text-[var(--error-text)] flex items-center gap-2",children:[e.jsx(w.AlertTriangle,{className:"w-5 h-5 flex-shrink-0"}),a.error]}),a.success&&e.jsxs("div",{className:"p-4 rounded-[var(--radius-card)] bg-[var(--success-bg)] border border-[var(--success-border)] text-[var(--success-text)] flex items-center gap-2",children:[e.jsx(w.CheckCircle,{className:"w-5 h-5 flex-shrink-0"}),a.success]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 lg:grid-cols-5 gap-4",children:P.map(p=>e.jsxs("div",{className:`rounded-[var(--radius-card)] p-4 text-center border ${T[p.color]}`,children:[e.jsx("div",{className:"text-2xl font-bold",children:p.value}),e.jsx("div",{className:"text-sm opacity-80",children:p.label})]},p.label))}),e.jsx("div",{className:"flex gap-1 p-1 overflow-x-auto bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)]",role:"tablist","aria-label":s("applicationDetail.tabs.label","Application tabs"),children:h.map(p=>{const k=p.icon,S=o===p.id;return e.jsxs("button",{role:"tab","aria-selected":S,"aria-controls":`tabpanel-${p.id}`,onClick:()=>j(p.id),className:`flex items-center gap-2 px-4 py-2 whitespace-nowrap rounded-[var(--radius-button)] font-medium transition-colors ${S?"bg-[var(--color-accent-600)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,children:[e.jsx(k,{className:"w-4 h-4"}),p.label]},p.id)})}),e.jsxs("div",{className:"bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)] p-4 sm:p-6",role:"tabpanel",id:`tabpanel-${o}`,"aria-labelledby":o,children:[o==="info"&&e.jsx(qe,{formData:a.formData,setFormData:a.setFormData,application:a.application,saving:a.saving,onSubmit:()=>a.handleSaveInfo(t,a.formData)}),o==="modules"&&e.jsx(Ie,{application:a.application,expandedModules:b.expandedModules,moduleSections:b.moduleSections,loadingSections:b.loadingSections,reordering:b.reordering,editingModule:b.editingModule,moduleFormData:b.moduleFormData,showModuleForm:b.showModuleForm,saving:a.saving,onToggleExpand:p=>b.toggleModuleExpand(t,p),onStartEdit:b.startEditModule,onSaveModule:async()=>{await b.handleSaveModule(t,b.editingModule.id,b.moduleFormData),a.setSuccess(s("applicationDetail.success.moduleUpdated")),await a.loadApplication(t)},onCancelEdit:()=>{b.setShowModuleForm(!1),b.setEditingModule(null)},onModulesReorder:async p=>{await b.handleModulesReorder(t,p),await a.loadApplication(t)},onSectionsReorder:(p,k)=>b.handleSectionsReorder(t,p,k),setModuleFormData:p=>b.setModuleFormData(typeof p=="function"?p(b.moduleFormData):p)}),o==="permissions"&&e.jsx(Oe,{application:a.application,permissions:N.permissions,permissionsWithRoles:N.permissionsWithRoles}),o==="roles"&&e.jsx(Ue,{rolesWithAppAccess:N.rolesWithAppAccess,onNavigateToRole:p=>r(`/administration/permissions/roles/${p}`)}),o==="publication"&&e.jsx(Ge,{application:a.application,assignedTenants:L,availableTenants:R,showAssignModal:i.showAssignModal,selectedTenantIds:i.selectedTenantIds,selectedAccessLevel:i.selectedAccessLevel,tenantSearch:i.tenantSearch,showCustomizeDrawer:i.showCustomizeDrawer,customizingTenant:i.customizingTenant,bulkAccessMode:i.bulkAccessMode,bulkModules:i.bulkModules,bulkExpandedModules:i.bulkExpandedModules,loadingBulkModules:i.loadingBulkModules,isUpdateMode:i.isUpdateMode,updateMergeMode:i.updateMergeMode,showConfirmRemovalDialog:i.showConfirmRemovalDialog,pendingRemovals:i.pendingRemovals,saving:a.saving,includePersonalTenants:i.includePersonalTenants,isInDefaultPersonalTemplate:i.isInDefaultPersonalTemplate,onAddTenant:()=>{i.loadPublicationData(t),i.setShowAssignModal(!0)},onRemoveTenant:p=>i.handleRemoveTenant(t,p,()=>{a.setSuccess(s("applicationDetail.publication.success.removed"))}),onUpdateAccessLevel:(p,k)=>i.handleUpdateAccessLevel(t,p,k,()=>{a.setSuccess(s("applicationDetail.publication.success.updated"))}),onCustomizeTenant:p=>{i.setCustomizingTenant(p),i.setShowCustomizeDrawer(!0)},onCloseCustomizeDrawer:()=>{i.setShowCustomizeDrawer(!1),i.setCustomizingTenant(null),i.loadPublicationData(t)},onAssignTenants:()=>i.handleAssignTenants(t,()=>{a.setSuccess(s("applicationDetail.publication.success.assigned")),i.loadPublicationData(t)}),onUpdateTenants:()=>i.handleUpdateTenants(t,()=>{a.setSuccess(s("applicationDetail.publication.success.updated")),i.loadPublicationData(t)}),onExecuteUpdateTenants:()=>i.executeUpdateTenants(t,()=>{a.setSuccess(s("applicationDetail.publication.success.updated")),i.loadPublicationData(t)}),onCancelRemovalDialog:()=>{i.setShowConfirmRemovalDialog(!1),i.setUpdateMergeMode("merge")},setShowAssignModal:i.setShowAssignModal,setSelectedTenantIds:i.setSelectedTenantIds,setSelectedAccessLevel:i.setSelectedAccessLevel,setTenantSearch:i.setTenantSearch,setBulkAccessMode:i.setBulkAccessMode,setIsUpdateMode:i.setIsUpdateMode,setUpdateMergeMode:i.setUpdateMergeMode,onToggleTenantSelection:i.toggleTenantSelection,onSelectAllFilteredTenants:i.selectAllFilteredTenants,onClearTenantSelection:i.clearTenantSelection,setIncludePersonalTenants:i.setIncludePersonalTenants,onLoadBulkModules:()=>i.loadBulkModules(t),onToggleBulkModuleExpand:i.toggleBulkModuleExpand,onToggleBulkModule:i.toggleBulkModule,onToggleBulkSection:i.toggleBulkSection,onGetBulkModuleCheckState:i.getBulkModuleCheckState,onGetBulkStats:i.getBulkStats,onSelectAllBulkModules:i.selectAllBulkModules,onClearBulkModules:i.clearBulkModules,appId:t}),o==="requests"&&e.jsx(X.AccessRequestsListTab,{requests:D.requests,loading:D.loading,onReload:()=>D.loadRequests()})]})]})}exports.default=Ke;
2
+ //# sourceMappingURL=ApplicationDetailPage-Caizuyn2.js.map