@atlashub/smartstack 3.39.0-preview.1049 → 3.40.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.
- package/dist/chunks/{AgentSkillsPage-DgqyaZwI.js → AgentSkillsPage-BS_W2KTh.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-DgqyaZwI.js.map → AgentSkillsPage-BS_W2KTh.js.map} +1 -1
- package/dist/chunks/{AgentSkillsPage-ojivq0Cu.js → AgentSkillsPage-CmDFLnp7.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-ojivq0Cu.js.map → AgentSkillsPage-CmDFLnp7.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-BGGTfOLs.js → AgentWorkloadPage-C8IvYfhT.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-BGGTfOLs.js.map → AgentWorkloadPage-C8IvYfhT.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-DWsC5VoS.js → AgentWorkloadPage-JXsQbwuM.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-DWsC5VoS.js.map → AgentWorkloadPage-JXsQbwuM.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-7EifQOAh.js → ApiCatalogDetailPage-CYOt34Vy.js} +2 -2
- package/dist/chunks/{ApiCatalogDetailPage-7EifQOAh.js.map → ApiCatalogDetailPage-CYOt34Vy.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-BD7XE4xK.js → ApiCatalogDetailPage-wFZDsTGy.js} +3 -3
- package/dist/chunks/{ApiCatalogDetailPage-BD7XE4xK.js.map → ApiCatalogDetailPage-wFZDsTGy.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-BfPoZGD3.js → ApiCatalogPage-Bdm3HNGP.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-BfPoZGD3.js.map → ApiCatalogPage-Bdm3HNGP.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-BOPTnk-b.js → ApiCatalogPage-m_TWQyGv.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-BOPTnk-b.js.map → ApiCatalogPage-m_TWQyGv.js.map} +1 -1
- package/dist/chunks/ApplicationDetailPage-C2BSpEoW.js +2 -0
- package/dist/chunks/{ApplicationDetailPage-CWdz0TS4.js.map → ApplicationDetailPage-C2BSpEoW.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-CDQqViuH.js → ApplicationDetailPage-CcgDAP-J.js} +503 -501
- package/dist/chunks/{ApplicationDetailPage-CDQqViuH.js.map → ApplicationDetailPage-CcgDAP-J.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-ZyXm2Cd1.js → ApplicationsDashboardPage-CDIjziL3.js} +3 -3
- package/dist/chunks/{ApplicationsDashboardPage-ZyXm2Cd1.js.map → ApplicationsDashboardPage-CDIjziL3.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-BH4S3qA2.js → ApplicationsDashboardPage-DslDyNzJ.js} +2 -2
- package/dist/chunks/{ApplicationsDashboardPage-BH4S3qA2.js.map → ApplicationsDashboardPage-DslDyNzJ.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-D0fU1_Le.js → ApplicationsGridPage-BCjsQGU0.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-D0fU1_Le.js.map → ApplicationsGridPage-BCjsQGU0.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-C1WF2Htv.js → ApplicationsGridPage-CIfKiCND.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-C1WF2Htv.js.map → ApplicationsGridPage-CIfKiCND.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-Cxvt2_WQ.js → ApplicationsListPage-CT75kNcH.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-Cxvt2_WQ.js.map → ApplicationsListPage-CT75kNcH.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-B3ItaY4r.js → ApplicationsListPage-D2B4PZ5n.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-B3ItaY4r.js.map → ApplicationsListPage-D2B4PZ5n.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-BqfNR-kc.js → ApplicationsPage-CaTBtduL.js} +2 -2
- package/dist/chunks/{ApplicationsPage-BqfNR-kc.js.map → ApplicationsPage-CaTBtduL.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-DuxuWfrN.js → ApplicationsPage-DW1LhL0U.js} +4 -4
- package/dist/chunks/{ApplicationsPage-DuxuWfrN.js.map → ApplicationsPage-DW1LhL0U.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-CR1C7V0a.js → AssignmentRulesPage-Bt9M0ki7.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-CR1C7V0a.js.map → AssignmentRulesPage-Bt9M0ki7.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-C4Jouh2g.js → AssignmentRulesPage-Y7xv60NY.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-C4Jouh2g.js.map → AssignmentRulesPage-Y7xv60NY.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-v8QUJkE7.js → AssignmentsPage-1eQGTjTi.js} +2 -2
- package/dist/chunks/{AssignmentsPage-v8QUJkE7.js.map → AssignmentsPage-1eQGTjTi.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-CjuGAd8n.js → AssignmentsPage-RURdPvfZ.js} +2 -2
- package/dist/chunks/{AssignmentsPage-CjuGAd8n.js.map → AssignmentsPage-RURdPvfZ.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-BxIXPUJk.js → AuthCallbackPage-8hF0jYlK.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-BxIXPUJk.js.map → AuthCallbackPage-8hF0jYlK.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-CuS-efzY.js → AuthCallbackPage-DPL68Asu.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-CuS-efzY.js.map → AuthCallbackPage-DPL68Asu.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-CWIqy2bT.js → ConfirmEmailPage-BKlpZkVk.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-CWIqy2bT.js.map → ConfirmEmailPage-BKlpZkVk.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-CkN8IfP-.js → ConfirmEmailPage-CawSZypI.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-CkN8IfP-.js.map → ConfirmEmailPage-CawSZypI.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-Df0ow5ge.js → CreateSupportTicketPage-AwbMbBIH.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-Df0ow5ge.js.map → CreateSupportTicketPage-AwbMbBIH.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-CmrDfFxP.js → CreateSupportTicketPage-Dg1YW1eA.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-CmrDfFxP.js.map → CreateSupportTicketPage-Dg1YW1eA.js.map} +1 -1
- package/dist/chunks/{DashboardPage-B4Pi5P3O.js → DashboardPage-B4YxOF-9.js} +3 -3
- package/dist/chunks/{DashboardPage-B4Pi5P3O.js.map → DashboardPage-B4YxOF-9.js.map} +1 -1
- package/dist/chunks/{DashboardPage-wEKZ_DWf.js → DashboardPage-BZxjinar.js} +2 -2
- package/dist/chunks/{DashboardPage-wEKZ_DWf.js.map → DashboardPage-BZxjinar.js.map} +1 -1
- package/dist/chunks/{DashboardPage-BAqpoxCW.js → DashboardPage-Bo09y8r7.js} +3 -3
- package/dist/chunks/{DashboardPage-BAqpoxCW.js.map → DashboardPage-Bo09y8r7.js.map} +1 -1
- package/dist/chunks/{DashboardPage-BT5kFaQA.js → DashboardPage-Cq5adDjP.js} +2 -2
- package/dist/chunks/{DashboardPage-BT5kFaQA.js.map → DashboardPage-Cq5adDjP.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-4pF38E4N.js → EscalationConfigPage-C8Hv5naz.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-4pF38E4N.js.map → EscalationConfigPage-C8Hv5naz.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-Bcifnt_h.js → EscalationConfigPage-DNAqMRxA.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-Bcifnt_h.js.map → EscalationConfigPage-DNAqMRxA.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-CBaMV_PS.js → ForceChangePasswordPage-BURE_vNg.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-CBaMV_PS.js.map → ForceChangePasswordPage-BURE_vNg.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-ClDXluX1.js → ForceChangePasswordPage-C6jDZshk.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-ClDXluX1.js.map → ForceChangePasswordPage-C6jDZshk.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage--ueWRNSO.js → ForgotPasswordPage-C5HLYbz4.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage--ueWRNSO.js.map → ForgotPasswordPage-C5HLYbz4.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-CzpAkP5R.js → ForgotPasswordPage-D3ZQBtjd.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-CzpAkP5R.js.map → ForgotPasswordPage-D3ZQBtjd.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-dXNOoSXE.js → GroupDetailPage-CTuzp9Vp.js} +5 -5
- package/dist/chunks/{GroupDetailPage-dXNOoSXE.js.map → GroupDetailPage-CTuzp9Vp.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-BIgBzQk0.js → GroupDetailPage-NJc2zCxC.js} +2 -2
- package/dist/chunks/{GroupDetailPage-BIgBzQk0.js.map → GroupDetailPage-NJc2zCxC.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-K2NXkdy4.js → MyAccessRequestsPage-Cvr29Pnq.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-K2NXkdy4.js.map → MyAccessRequestsPage-Cvr29Pnq.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-Be8VvLhh.js → MyAccessRequestsPage-t6I24rHN.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-Be8VvLhh.js.map → MyAccessRequestsPage-t6I24rHN.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-BXx1nPC8.js → MyTenantsPage-Dy2RZ_Ei.js} +2 -2
- package/dist/chunks/{MyTenantsPage-BXx1nPC8.js.map → MyTenantsPage-Dy2RZ_Ei.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-B9ZAUeCa.js → MyTenantsPage-SvDCQ4Wt.js} +3 -3
- package/dist/chunks/{MyTenantsPage-B9ZAUeCa.js.map → MyTenantsPage-SvDCQ4Wt.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-C9MSmmR5.js → MyTicketsPage-C3lEBFD9.js} +2 -2
- package/dist/chunks/{MyTicketsPage-C9MSmmR5.js.map → MyTicketsPage-C3lEBFD9.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-d0PoJpnX.js → MyTicketsPage-DydDgFyz.js} +2 -2
- package/dist/chunks/{MyTicketsPage-d0PoJpnX.js.map → MyTicketsPage-DydDgFyz.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-CJ3BjLlz.js → NavigationAppsPage-Dyv767w8.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-CJ3BjLlz.js.map → NavigationAppsPage-Dyv767w8.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-8t2xbddT.js → NavigationAppsPage-WqSspaVo.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-8t2xbddT.js.map → NavigationAppsPage-WqSspaVo.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-_62-bmuk.js → NotificationsPage-Di4I95PM.js} +2 -2
- package/dist/chunks/{NotificationsPage-_62-bmuk.js.map → NotificationsPage-Di4I95PM.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-CLHfVUxm.js → NotificationsPage-elSovpBw.js} +2 -2
- package/dist/chunks/{NotificationsPage-CLHfVUxm.js.map → NotificationsPage-elSovpBw.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-Dkc22Jc4.js → OnboardingWizardPage-fdWdkwiT.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-Dkc22Jc4.js.map → OnboardingWizardPage-fdWdkwiT.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-D1rzD6gR.js → OnboardingWizardPage-nPLe2buQ.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-D1rzD6gR.js.map → OnboardingWizardPage-nPLe2buQ.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-BSvSe4SI.js → PermissionDetailPage-B8C7tWFP.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-BSvSe4SI.js.map → PermissionDetailPage-B8C7tWFP.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-_HhbxzlG.js → PermissionDetailPage-IUgUaTkE.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-_HhbxzlG.js.map → PermissionDetailPage-IUgUaTkE.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-Xb92YAHn.js → PermissionsPage-CmX5sQf2.js} +2 -2
- package/dist/chunks/{PermissionsPage-Xb92YAHn.js.map → PermissionsPage-CmX5sQf2.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-B0M4gA5m.js → PermissionsPage-Kg0rduOM.js} +2 -2
- package/dist/chunks/{PermissionsPage-B0M4gA5m.js.map → PermissionsPage-Kg0rduOM.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-DTeMESj9.js → PortalDashboardPage-CCAYuhtI.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-DTeMESj9.js.map → PortalDashboardPage-CCAYuhtI.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-pt9hipR4.js → PortalDashboardPage-Dme1XmzN.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-pt9hipR4.js.map → PortalDashboardPage-Dme1XmzN.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-Cy30AWIN.js → PreferencesPage-Ct6xWAFp.js} +2 -2
- package/dist/chunks/{PreferencesPage-Cy30AWIN.js.map → PreferencesPage-Ct6xWAFp.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-CsHVGMgp.js → PreferencesPage-Db2RjMpm.js} +2 -2
- package/dist/chunks/{PreferencesPage-CsHVGMgp.js.map → PreferencesPage-Db2RjMpm.js.map} +1 -1
- package/dist/chunks/{ProfilePage-6Gf7igUI.js → ProfilePage-D6Xb1ALH.js} +2 -2
- package/dist/chunks/{ProfilePage-6Gf7igUI.js.map → ProfilePage-D6Xb1ALH.js.map} +1 -1
- package/dist/chunks/{ProfilePage-BzBWkztf.js → ProfilePage-DN2s-lfp.js} +2 -2
- package/dist/chunks/{ProfilePage-BzBWkztf.js.map → ProfilePage-DN2s-lfp.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-DEDoHrnU.js → ReferencesManagementPage-B5mcshG1.js} +2 -2
- package/dist/chunks/{ReferencesManagementPage-DEDoHrnU.js.map → ReferencesManagementPage-B5mcshG1.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-DD1QiFYr.js → ReferencesManagementPage-DB975ktX.js} +3 -3
- package/dist/chunks/{ReferencesManagementPage-DD1QiFYr.js.map → ReferencesManagementPage-DB975ktX.js.map} +1 -1
- package/dist/chunks/{RegisterPage-asdx33fV.js → RegisterPage-ZskZrLZH.js} +2 -2
- package/dist/chunks/{RegisterPage-asdx33fV.js.map → RegisterPage-ZskZrLZH.js.map} +1 -1
- package/dist/chunks/{RegisterPage-CIPHRYkl.js → RegisterPage-b8yIPVgh.js} +2 -2
- package/dist/chunks/{RegisterPage-CIPHRYkl.js.map → RegisterPage-b8yIPVgh.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-B4Dj24vU.js → ResetPasswordPage-CeAvfsE-.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-B4Dj24vU.js.map → ResetPasswordPage-CeAvfsE-.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-B8MWH_Vi.js → ResetPasswordPage-Dzp5dCp8.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-B8MWH_Vi.js.map → ResetPasswordPage-Dzp5dCp8.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-Cs6T441o.js → ResolutionModal-CRVN7gHv.js} +2 -2
- package/dist/chunks/{ResolutionModal-Cs6T441o.js.map → ResolutionModal-CRVN7gHv.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-rLoFOxm9.js → ResolutionModal-DJOw1sLT.js} +2 -2
- package/dist/chunks/{ResolutionModal-rLoFOxm9.js.map → ResolutionModal-DJOw1sLT.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-Pkw0wU5g.js → RoleDetailPage-CLVoFVF8.js} +2 -2
- package/dist/chunks/{RoleDetailPage-Pkw0wU5g.js.map → RoleDetailPage-CLVoFVF8.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-CNFG6j6P.js → RoleDetailPage-XGnPD_8C.js} +3 -3
- package/dist/chunks/{RoleDetailPage-CNFG6j6P.js.map → RoleDetailPage-XGnPD_8C.js.map} +1 -1
- package/dist/chunks/{RolesPage-BHEkMR2O.js → RolesPage-BnAMpR2b.js} +2 -2
- package/dist/chunks/{RolesPage-BHEkMR2O.js.map → RolesPage-BnAMpR2b.js.map} +1 -1
- package/dist/chunks/{RolesPage-D35jwDJU.js → RolesPage-Czj9LMkL.js} +2 -2
- package/dist/chunks/{RolesPage-D35jwDJU.js.map → RolesPage-Czj9LMkL.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-DtonDehw.js → SlaConfigPage-HM0MpIlg.js} +2 -2
- package/dist/chunks/{SlaConfigPage-DtonDehw.js.map → SlaConfigPage-HM0MpIlg.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-C5Jstix-.js → SlaConfigPage-ZRyAs8aY.js} +2 -2
- package/dist/chunks/{SlaConfigPage-C5Jstix-.js.map → SlaConfigPage-ZRyAs8aY.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-6pC73oCY.js → SupportPermissionsPage-CxJuGgcQ.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-6pC73oCY.js.map → SupportPermissionsPage-CxJuGgcQ.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-CsJKGt__.js → SupportPermissionsPage-DNd323OK.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-CsJKGt__.js.map → SupportPermissionsPage-DNd323OK.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-DjmYOGEC.js → TemplatesPage-CdwPLsHj.js} +2 -2
- package/dist/chunks/{TemplatesPage-DjmYOGEC.js.map → TemplatesPage-CdwPLsHj.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-DlY91VO_.js → TemplatesPage-Co3ygZvF.js} +2 -2
- package/dist/chunks/{TemplatesPage-DlY91VO_.js.map → TemplatesPage-Co3ygZvF.js.map} +1 -1
- package/dist/chunks/{TenantCard-BHLcv2gD.js → TenantCard-CmCfIK2F.js} +2 -2
- package/dist/chunks/{TenantCard-BHLcv2gD.js.map → TenantCard-CmCfIK2F.js.map} +1 -1
- package/dist/chunks/{TenantCard-DGCKVvKI.js → TenantCard-DI66acce.js} +2 -2
- package/dist/chunks/{TenantCard-DGCKVvKI.js.map → TenantCard-DI66acce.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-dsSwnOWg.js → TenantScopeSelector-5NOwmFX2.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-dsSwnOWg.js.map → TenantScopeSelector-5NOwmFX2.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-CU5z5PJH.js → TenantScopeSelector-CEFgxiWt.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-CU5z5PJH.js.map → TenantScopeSelector-CEFgxiWt.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-BQHMaRmq.js → TicketDetailPage-BhZ-mpv7.js} +2 -2
- package/dist/chunks/{TicketDetailPage-BQHMaRmq.js.map → TicketDetailPage-BhZ-mpv7.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-Bk_0uQ3B.js → TicketDetailPage-BxOiOG22.js} +2 -2
- package/dist/chunks/{TicketDetailPage-Bk_0uQ3B.js.map → TicketDetailPage-BxOiOG22.js.map} +1 -1
- package/dist/chunks/{TicketsPage-CufUJctx.js → TicketsPage-BiTvIcM8.js} +2 -2
- package/dist/chunks/{TicketsPage-CufUJctx.js.map → TicketsPage-BiTvIcM8.js.map} +1 -1
- package/dist/chunks/{TicketsPage-C8QQ4SKy.js → TicketsPage-CSiinHME.js} +2 -2
- package/dist/chunks/{TicketsPage-C8QQ4SKy.js.map → TicketsPage-CSiinHME.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-DoEMtJoe.js → UserCreateTicketPage-B3TW1oV7.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-DoEMtJoe.js.map → UserCreateTicketPage-B3TW1oV7.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-XxjNlR9K.js → UserCreateTicketPage-BszUd_WZ.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-XxjNlR9K.js.map → UserCreateTicketPage-BszUd_WZ.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-fdhZwMLg.js → UserDashboardPage-C6MvatAb.js} +2 -2
- package/dist/chunks/{UserDashboardPage-fdhZwMLg.js.map → UserDashboardPage-C6MvatAb.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-BV1d2hMG.js → UserDashboardPage-Dtt9VzG_.js} +2 -2
- package/dist/chunks/{UserDashboardPage-BV1d2hMG.js.map → UserDashboardPage-Dtt9VzG_.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-C97e-Dax.js → UserDetailPage-BEEV2vlJ.js} +5 -5
- package/dist/chunks/{UserDetailPage-C97e-Dax.js.map → UserDetailPage-BEEV2vlJ.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-BcA7Vhb2.js → UserDetailPage-Dw5OHheZ.js} +2 -2
- package/dist/chunks/{UserDetailPage-BcA7Vhb2.js.map → UserDetailPage-Dw5OHheZ.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-BA2syxXG.js → UserTicketDetailPage-B4YkzzbR.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-BA2syxXG.js.map → UserTicketDetailPage-B4YkzzbR.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-CXuZVAa2.js → UserTicketDetailPage-DCFV-0ny.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-CXuZVAa2.js.map → UserTicketDetailPage-DCFV-0ny.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-CPVk31Dh.js → UsersGroupsPage-CY-l9fTp.js} +3 -3
- package/dist/chunks/{UsersGroupsPage-CPVk31Dh.js.map → UsersGroupsPage-CY-l9fTp.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-DS2YiUE4.js → UsersGroupsPage-c28vYHN9.js} +2 -2
- package/dist/chunks/{UsersGroupsPage-DS2YiUE4.js.map → UsersGroupsPage-c28vYHN9.js.map} +1 -1
- package/dist/chunks/{UsersPage-BIXWHFmG.js → UsersPage-1sLlq9QD.js} +2 -2
- package/dist/chunks/{UsersPage-BIXWHFmG.js.map → UsersPage-1sLlq9QD.js.map} +1 -1
- package/dist/chunks/{UsersPage-DS8aWUKj.js → UsersPage-Bm-uNxh0.js} +2 -2
- package/dist/chunks/{UsersPage-DS8aWUKj.js.map → UsersPage-Bm-uNxh0.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-C-r0mrCH.js → accessRequestsApi-CJPjyEkH.js} +2 -2
- package/dist/chunks/{accessRequestsApi-C-r0mrCH.js.map → accessRequestsApi-CJPjyEkH.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-k3ZwhcFb.js → accessRequestsApi-D_pj1wl6.js} +2 -2
- package/dist/chunks/{accessRequestsApi-k3ZwhcFb.js.map → accessRequestsApi-D_pj1wl6.js.map} +1 -1
- package/dist/chunks/{aiApi-B-H-76wM.js → aiApi-ByF-oo1J.js} +2 -2
- package/dist/chunks/{aiApi-B-H-76wM.js.map → aiApi-ByF-oo1J.js.map} +1 -1
- package/dist/chunks/{aiApi-CcdrBILv.js → aiApi-Dt3fj0dU.js} +2 -2
- package/dist/chunks/{aiApi-CcdrBILv.js.map → aiApi-Dt3fj0dU.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-CO3tk6Ju.js → applicationAnalyticsApi-BgG3SGJm.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-CO3tk6Ju.js.map → applicationAnalyticsApi-BgG3SGJm.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-CLVdVLDu.js → applicationAnalyticsApi-ktD65iLO.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-CLVdVLDu.js.map → applicationAnalyticsApi-ktD65iLO.js.map} +1 -1
- package/dist/chunks/{groupsApi-DExOJZPF.js → groupsApi-C-FLWPCO.js} +2 -2
- package/dist/chunks/{groupsApi-DExOJZPF.js.map → groupsApi-C-FLWPCO.js.map} +1 -1
- package/dist/chunks/{groupsApi-CyqyYsmi.js → groupsApi-CBI5vMLa.js} +2 -2
- package/dist/chunks/{groupsApi-CyqyYsmi.js.map → groupsApi-CBI5vMLa.js.map} +1 -1
- package/dist/chunks/{index-DtAReZI6.js → index-B727-QSU.js} +2 -2
- package/dist/chunks/{index-DtAReZI6.js.map → index-B727-QSU.js.map} +1 -1
- package/dist/chunks/{index-BlOgmQzc.js → index-B9q3vx13.js} +2 -2
- package/dist/chunks/{index-BlOgmQzc.js.map → index-B9q3vx13.js.map} +1 -1
- package/dist/chunks/{index-VSQ2prtJ.js → index-BD-REzV9.js} +2 -2
- package/dist/chunks/{index-VSQ2prtJ.js.map → index-BD-REzV9.js.map} +1 -1
- package/dist/chunks/{index-XOOiD_zY.js → index-BDRogQH_.js} +3 -3
- package/dist/chunks/{index-XOOiD_zY.js.map → index-BDRogQH_.js.map} +1 -1
- package/dist/chunks/{index-DOQyf5yZ.js → index-C-DYxdvd.js} +8 -8
- package/dist/chunks/{index-DOQyf5yZ.js.map → index-C-DYxdvd.js.map} +1 -1
- package/dist/chunks/{index-Cq80YBne.js → index-CBtjGPod.js} +105 -105
- package/dist/chunks/{index-Cq80YBne.js.map → index-CBtjGPod.js.map} +1 -1
- package/dist/chunks/{index-dlXYTPWH.js → index-CF1cvNUL.js} +4 -4
- package/dist/chunks/{index-dlXYTPWH.js.map → index-CF1cvNUL.js.map} +1 -1
- package/dist/chunks/{index-COA_xJVJ.js → index-CH0pTHy1.js} +2 -2
- package/dist/chunks/{index-COA_xJVJ.js.map → index-CH0pTHy1.js.map} +1 -1
- package/dist/chunks/{index-DjZQ6ZG_.js → index-Ca88RIuT.js} +2 -2
- package/dist/chunks/{index-DjZQ6ZG_.js.map → index-Ca88RIuT.js.map} +1 -1
- package/dist/chunks/{index-Cj-9tGpd.js → index-CkWvsvKW.js} +2 -2
- package/dist/chunks/{index-Cj-9tGpd.js.map → index-CkWvsvKW.js.map} +1 -1
- package/dist/chunks/{index-EL_ZNnMH.js → index-CzYKE5fL.js} +2 -2
- package/dist/chunks/{index-EL_ZNnMH.js.map → index-CzYKE5fL.js.map} +1 -1
- package/dist/chunks/{index-qXfYaEmV.js → index-D32ol7lq.js} +2 -2
- package/dist/chunks/{index-qXfYaEmV.js.map → index-D32ol7lq.js.map} +1 -1
- package/dist/chunks/{index-DMQQ0KyA.js → index-D7hmx9IX.js} +2 -2
- package/dist/chunks/{index-DMQQ0KyA.js.map → index-D7hmx9IX.js.map} +1 -1
- package/dist/chunks/{index-BetDcNZm.js → index-DThcQmwZ.js} +2 -2
- package/dist/chunks/{index-BetDcNZm.js.map → index-DThcQmwZ.js.map} +1 -1
- package/dist/chunks/{index-C7h5yvcP.js → index-D_3J6ziZ.js} +2 -2
- package/dist/chunks/{index-C7h5yvcP.js.map → index-D_3J6ziZ.js.map} +1 -1
- package/dist/chunks/{index-C_nDTEP5.js → index-JSjfMShT.js} +2 -2
- package/dist/chunks/{index-C_nDTEP5.js.map → index-JSjfMShT.js.map} +1 -1
- package/dist/chunks/{index-COXxU0FH.js → index-gzXJw_ow.js} +3 -3
- package/dist/chunks/{index-COXxU0FH.js.map → index-gzXJw_ow.js.map} +1 -1
- package/dist/chunks/{index-jJxtz2bs.js → index-rRAbl04H.js} +2 -2
- package/dist/chunks/{index-jJxtz2bs.js.map → index-rRAbl04H.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-Ddvguo0l.js → tenantIconMap-Cw-hQ9n4.js} +2 -2
- package/dist/chunks/{tenantIconMap-Ddvguo0l.js.map → tenantIconMap-Cw-hQ9n4.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-DBa5MjIz.js → tenantIconMap-DinwojNW.js} +2 -2
- package/dist/chunks/{tenantIconMap-DBa5MjIz.js.map → tenantIconMap-DinwojNW.js.map} +1 -1
- package/dist/chunks/{ticketingApi-Cr6QSv0g.js → ticketingApi-CcWdebXv.js} +2 -2
- package/dist/chunks/{ticketingApi-Cr6QSv0g.js.map → ticketingApi-CcWdebXv.js.map} +1 -1
- package/dist/chunks/{ticketingApi-D6s75rOB.js → ticketingApi-x0BwZ1NH.js} +2 -2
- package/dist/chunks/{ticketingApi-D6s75rOB.js.map → ticketingApi-x0BwZ1NH.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-VuQT-n-P.js → useAccessRequests-BBTIYht3.js} +2 -2
- package/dist/chunks/{useAccessRequests-VuQT-n-P.js.map → useAccessRequests-BBTIYht3.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-CanI2ypo.js → useAccessRequests-BBUj9XY9.js} +71 -71
- package/dist/chunks/{useAccessRequests-CanI2ypo.js.map → useAccessRequests-BBUj9XY9.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-BEVZLX_M.js → useUserAccessRequests-BKQxcOXH.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-BEVZLX_M.js.map → useUserAccessRequests-BKQxcOXH.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-Ba40FDLm.js → useUserAccessRequests-BPUPiP55.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-Ba40FDLm.js.map → useUserAccessRequests-BPUPiP55.js.map} +1 -1
- package/dist/pages/platform/administration/applications/ApplicationDetailPage.d.ts.map +1 -1
- package/dist/smartstack.cjs +1 -1
- package/dist/smartstack.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/ApplicationDetailPage-CWdz0TS4.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiCatalogPage-BOPTnk-b.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-m_TWQyGv.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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),n=require("react"),Y=require("react-router-dom"),Ne=require("./useTabNavigation-BVtbCTd5.js"),W=require("react-i18next"),M=require("./index-BDRogQH_.js"),S=require("lucide-react"),$=require("@dnd-kit/core"),G=require("@dnd-kit/sortable"),we=require("@dnd-kit/utilities"),J=require("./tenantIconMap-Cw-hQ9n4.js"),ee=require("./useAccessRequests-BBTIYht3.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(S);function Q(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}=W.useTranslation("admin"),[r,s]=n.useState(null),[l,d]=n.useState(!1),[u,c]=n.useState(!1),[o,j]=n.useState(null),[i,x]=n.useState(null),[N,a]=n.useState({label:"",description:"",icon:"",route:"",displayOrder:0}),D=n.useCallback(async g=>{if(g){d(!0),j(null);try{const p=await M.adminApi.applications.getById(g);s(p),a({label:p.label,description:p.description||"",icon:p.icon||"",route:p.route||"",displayOrder:p.displayOrder})}catch(p){j(p instanceof Error?p.message:t("applicationDetail.errors.loadFailed"))}finally{d(!1)}}},[t]),P=n.useCallback(async(g,p)=>{if(!(!g||!r)){c(!0),j(null),x(null);try{const h={label:p.label,description:p.description||void 0,icon:p.icon||void 0,route:p.route||void 0,displayOrder:p.displayOrder};await M.adminApi.applications.update(g,h),x(t("applicationDetail.success.saved")),await D(g)}catch(h){j(h instanceof Error?h.message:t("applicationDetail.errors.saveFailed"))}finally{c(!1)}}},[r,t,D]),L=n.useCallback(async g=>{if(!(!g||!r)){c(!0),j(null),x(null);try{r.isActive?await M.adminApi.applications.deactivate(g):await M.adminApi.applications.activate(g),x(r.isActive?t("applicationDetail.success.deactivated"):t("applicationDetail.success.activated")),await D(g)}catch(p){j(p instanceof Error?p.message:t("applicationDetail.errors.toggleFailed"))}finally{c(!1)}}},[r,t,D]);return{application:r,loading:l,saving:u,error:o,success:i,formData:N,setFormData:a,setError:j,setSuccess:x,loadApplication:D,handleSaveInfo:P,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,i]=n.useState(null),[x,N]=n.useState({code:"",label:"",description:"",icon:"",route:"",displayOrder:0}),[a,D]=n.useState(!1),P=n.useCallback(async(T,C)=>{const R=!t.has(C);if(r(A=>{const w=new Set(A);return w.has(C)?w.delete(C):w.add(C),w}),R&&!s.has(C)){u(A=>new Set(A).add(C));try{const A=await M.adminApi.applications.getModuleSections(T,C);l(w=>new Map(w).set(C,A))}catch(A){console.error("Failed to load sections:",A)}finally{u(A=>{const w=new Set(A);return w.delete(C),w})}}},[t,s]),L=n.useCallback(T=>{N({code:"",label:"",description:"",icon:"",route:"",displayOrder:T||0})},[]),g=n.useCallback(async(T,C,R)=>{try{await M.adminApi.applications.updateModule(T,C,{label:R.label,description:R.description||void 0,icon:R.icon||void 0,route:R.route||void 0,displayOrder:R.displayOrder}),D(!1),i(null),L()}catch(A){throw console.error("Failed to save module:",A),A}},[L]),p=n.useCallback(async(T,C)=>{const R=C.map((A,w)=>({...A,displayOrder:w}));o(!0);try{await M.adminApi.applications.reorderModules(T,R.map((A,w)=>({id:A.id,displayOrder:w})))}catch(A){throw console.error("Failed to reorder modules:",A),A}finally{o(!1)}},[]),h=n.useCallback(async(T,C,R)=>{const A=R.map((w,B)=>({...w,displayOrder:B}));l(w=>new Map(w).set(C,A)),o(!0);try{await M.adminApi.applications.reorderSections(T,C,A.map((w,B)=>({id:w.id,displayOrder:B})))}catch(w){console.error("Failed to reorder sections:",w);try{const B=await M.adminApi.applications.getModuleSections(T,C);l(F=>new Map(F).set(C,B))}catch(B){console.error("Failed to reload sections:",B)}throw w}finally{o(!1)}},[]),q=n.useCallback(T=>{i(T),N({code:T.code,label:T.label,description:T.description||"",icon:T.icon||"",route:T.route||"",displayOrder:T.displayOrder}),D(!0)},[]);return{expandedModules:t,moduleSections:s,loadingSections:d,reordering:c,editingModule:j,moduleFormData:x,showModuleForm:a,toggleModuleExpand:P,handleSaveModule:g,handleModulesReorder:p,handleSectionsReorder:h,startEditModule:q,resetModuleForm:L,setShowModuleForm:D,setEditingModule:i,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 i=>{try{const[x,N]=await Promise.all([M.adminApi.permissions.getMatrix(),M.adminApi.roles.getAll()]),a=`${i.code}.`.toLowerCase(),D=x.permissions.filter(L=>L.path.toLowerCase().startsWith(a));l(D),r(N);const P=D.map(L=>Te(L,x.roles,N));u(P)}catch(x){throw console.error("Failed to load permissions data:",x),x}},[]),o=n.useCallback(async()=>{try{const i=await M.adminApi.roles.getAll();r(i)}catch(i){throw console.error("Failed to load roles:",i),i}},[]),j=n.useMemo(()=>{if(d.length===0)return[];const i=new Map;return d.forEach(({permission:x,roles:N})=>{N.forEach(a=>{i.has(a.id)||i.set(a.id,{role:a,permissions:[]}),i.get(a.id).permissions.push(x)})}),Array.from(i.values()).sort((x,N)=>N.permissions.length-x.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,i]=n.useState("FullAccess"),[x,N]=n.useState(""),[a,D]=n.useState(!1),[P,L]=n.useState(null),[g,p]=n.useState("full"),[h,q]=n.useState([]),[T,C]=n.useState(new Set),[R,A]=n.useState(!1),[w,B]=n.useState(!1),[F,_]=n.useState("merge"),[f,E]=n.useState(!1),[K,X]=n.useState({modules:0,sections:0}),[V,se]=n.useState(!1),[ae,ie]=n.useState(!1),I=n.useCallback(async b=>{try{const[m,v]=await Promise.all([M.adminApi.applications.getTenants(b),M.adminApi.applications.getAvailableTenants(b)]);r(m),l(v.tenants),ie(v.isInDefaultPersonalTemplate)}catch(m){console.error("Failed to load publication data:",m)}},[]),re=n.useCallback(async b=>{A(!0);try{const m=await M.adminApi.applications.getModules(b),v=[];for(const y of m){const O=(await M.adminApi.applications.getModuleSections(b,y.id)).map(z=>({id:z.id,label:z.label,code:z.code,icon:z.icon,isAssigned:!0}));v.push({id:y.id,label:y.label,code:y.code,icon:y.icon,isAssigned:!0,sections:O})}q(v)}catch(m){console.error("Failed to load bulk modules:",m)}finally{A(!1)}},[]),ne=n.useCallback(b=>{C(m=>{const v=new Set(m);return v.has(b)?v.delete(b):v.add(b),v})},[]),le=n.useCallback(b=>{q(m=>m.map(v=>ke(v,b)))},[]),oe=n.useCallback((b,m)=>{q(v=>v.map(y=>Le(y,b,m)))},[]),ce=n.useCallback(b=>{const m=b.sections.filter(v=>v.isAssigned).length;return m===0?"unchecked":m===b.sections.length?"checked":"indeterminate"},[]),de=n.useCallback(()=>{const b=h.length,m=h.filter(k=>k.isAssigned||k.sections.some(O=>O.isAssigned)).length,v=h.reduce((k,O)=>k+O.sections.length,0),y=h.reduce((k,O)=>k+O.sections.filter(z=>z.isAssigned).length,0);return{totalModules:b,assignedModules:m,totalSections:v,assignedSections:y}},[h]),ue=n.useCallback(()=>{q(b=>b.map(m=>Re(m)))},[]),pe=n.useCallback(()=>{q(b=>b.map(m=>Pe(m)))},[]),me=n.useCallback(b=>{o(m=>m.includes(b)?m.filter(v=>v!==b):[...m,b])},[]),xe=n.useCallback(()=>{if(w){const b=t.filter(m=>{const v=m.tenantName.toLowerCase().includes(x.toLowerCase())||m.tenantSlug.toLowerCase().includes(x.toLowerCase()),y=V||m.tenantType!=="Personal";return v&&y}).map(m=>m.tenantId);o(b)}else{const b=s.filter(m=>{const v=m.name.toLowerCase().includes(x.toLowerCase())||m.slug.toLowerCase().includes(x.toLowerCase()),y=V||m.type!=="Personal";return v&&y}).map(m=>m.id);o(b)}},[w,t,s,x,V]),be=n.useCallback(()=>{o([])},[]),H=n.useCallback(async(b,m)=>{if(!(!b||c.length===0))try{const v={tenantIds:c,accessLevel:j,accessMode:g,mergeMode:F};g==="custom"&&(v.moduleIds=h.filter(y=>y.isAssigned).map(y=>y.id),v.sectionIds=h.flatMap(y=>y.sections.filter(k=>k.isAssigned).map(k=>k.id))),await M.adminApi.applications.bulkAssignTenants(b,v),u(!1),o([]),i("FullAccess"),p("full"),N(""),B(!1),_("merge"),E(!1),await I(b),m&&m()}catch(v){throw console.error("Failed to update tenant assignments:",v),v}},[c,j,g,F,h,I]),ve=n.useCallback(async(b,m)=>{if(!(!b||c.length===0))try{const v={tenantIds:c,accessLevel:j,accessMode:g};g==="custom"&&(v.moduleIds=h.filter(y=>y.isAssigned).map(y=>y.id),v.sectionIds=h.flatMap(y=>y.sections.filter(k=>k.isAssigned).map(k=>k.id))),await M.adminApi.applications.bulkAssignTenants(b,v),u(!1),o([]),i("FullAccess"),p("full"),N(""),await I(b),m&&m()}catch(v){throw console.error("Failed to assign tenants:",v),v}},[c,j,g,h,I]),ge=n.useCallback(async(b,m)=>{if(!(!b||c.length===0)){if(F==="replace"&&g==="custom"){let v=0,y=0;for(const k of c)try{const O=await M.adminApi.tenants.getModules(k),z=await M.adminApi.tenants.getSections(k),ye=new Set(h.filter(U=>U.isAssigned).map(U=>U.id)),je=new Set(h.flatMap(U=>U.sections.filter(Z=>Z.isAssigned).map(Z=>Z.id)));v+=O.filter(U=>!ye.has(U.moduleId)).length,y+=z.filter(U=>!je.has(U.sectionId)).length}catch{}if(v>0||y>0){X({modules:v,sections:y}),E(!0);return}}await H(b,m)}},[c,F,g,h,H]),he=n.useCallback(async(b,m,v)=>{if(b)try{await M.adminApi.applications.removeFromTenant(b,m),await I(b),v&&v()}catch(y){throw console.error("Failed to remove tenant:",y),y}},[I]),fe=n.useCallback(async(b,m,v,y)=>{if(b)try{await M.adminApi.applications.updateTenantAccessLevel(b,m,v),await I(b),y&&y()}catch(k){throw console.error("Failed to update access level:",k),k}},[I]);return{assignedTenants:t,availableTenants:s,showAssignModal:d,selectedTenantIds:c,selectedAccessLevel:j,tenantSearch:x,showCustomizeDrawer:a,customizingTenant:P,bulkAccessMode:g,bulkModules:h,bulkExpandedModules:T,loadingBulkModules:R,isUpdateMode:w,updateMergeMode:F,showConfirmRemovalDialog:f,pendingRemovals:K,includePersonalTenants:V,isInDefaultPersonalTemplate:ae,setAssignedTenants:r,setAvailableTenants:l,setShowAssignModal:u,setSelectedTenantIds:o,setSelectedAccessLevel:i,setTenantSearch:N,setShowCustomizeDrawer:D,setCustomizingTenant:L,setBulkAccessMode:p,setBulkModules:q,setBulkExpandedModules:C,setIsUpdateMode:B,setUpdateMergeMode:_,setShowConfirmRemovalDialog:E,setPendingRemovals:X,setIncludePersonalTenants:se,loadPublicationData:I,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:H,handleRemoveTenant:he,handleUpdateAccessLevel:fe}}function qe({formData:t,setFormData:r,application:s,saving:l,onSubmit:d}){const{t:u}=W.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(S.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(S.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}=G.useSortable({id:t,disabled:r}),i={transform:we.CSS.Transform.toString(c),transition:o,opacity:j?.5:1,zIndex:j?1:0},x=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(S.GripVertical,{className:"w-4 h-4"})});return e.jsx("div",{ref:u,style:i,children:s(x)})}function te({items:t,onReorder:r,renderItem:s,disabled:l=!1}){const[,d]=n.useState(null),u=$.useSensors($.useSensor($.PointerSensor,{activationConstraint:{distance:8}}),$.useSensor($.KeyboardSensor,{coordinateGetter:G.sortableKeyboardCoordinates})),c=o=>{const{active:j,over:i}=o;if(d(null),i&&j.id!==i.id){const x=t.findIndex(D=>D.id===j.id),N=t.findIndex(D=>D.id===i.id),a=G.arrayMove(t,x,N);r(a)}};return e.jsx($.DndContext,{sensors:u,collisionDetection:$.closestCenter,onDragStart:o=>d(o.active.id),onDragEnd:c,children:e.jsx(G.SortableContext,{items:t.map(o=>o.id),strategy:G.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(S.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(te,{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:Q(c.icon,"w-3 h-3")||e.jsx(S.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:i,onStartEdit:x,onSaveModule:N,onCancelEdit:a,onModulesReorder:D,onSectionsReorder:P,setModuleFormData:L}){const{t:g}=W.useTranslation("admin");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-[var(--text-primary)]",children:[g("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:g("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:g("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:g("applicationDetail.fields.label")}),e.jsx("input",{type:"text",value:c.label,onChange:p=>L(h=>({...h,label:p.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:g("applicationDetail.fields.icon")}),e.jsx("input",{type:"text",value:c.icon,onChange:p=>L(h=>({...h,icon:p.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:g("applicationDetail.fields.route")}),e.jsx("input",{type:"text",value:c.route,onChange:p=>L(h=>({...h,route:p.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:g("applicationDetail.fields.description")}),e.jsx("textarea",{value:c.description,onChange:p=>L(h=>({...h,description:p.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:a,className:"px-4 py-2 rounded-[var(--radius-button)] font-medium text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]",children:g("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(S.Loader2,{className:"w-4 h-4 animate-spin"}):e.jsx(S.Save,{className:"w-4 h-4"}),g("common:save")]})]})]})]}),t.modules.length===0?e.jsx("p",{className:"text-center py-8 text-[var(--text-muted)]",children:g("applicationDetail.modules.empty")}):e.jsx(te,{items:t.modules.map(p=>({...p,id:p.id})),onReorder:D,disabled:d,renderItem:(p,h)=>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:[h,e.jsx("div",{className:"p-2 rounded-[var(--radius-button)] bg-[var(--bg-tertiary)]",children:Q(p.icon,"w-4 h-4")||e.jsx(S.Layers,{className:"w-4 h-4 text-[var(--text-muted)]"})}),e.jsx("button",{onClick:()=>i(p.id),className:"p-1 rounded hover:bg-[var(--bg-hover)]","aria-expanded":r.has(p.id),"aria-label":g("applicationDetail.modules.toggleExpand","Toggle sections"),children:r.has(p.id)?e.jsx(S.ChevronDown,{className:"w-4 h-4 text-[var(--text-muted)]"}):e.jsx(S.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:p.label}),e.jsx("p",{className:"text-sm text-[var(--text-muted)]",children:p.code})]}),e.jsx("span",{className:`ml-2 px-2 py-0.5 text-xs font-medium rounded-full ${p.isActive?"bg-[var(--success-bg)] text-[var(--success-text)]":"bg-[var(--error-bg)] text-[var(--error-text)]"}`,children:p.isActive?g("common:active"):g("common:inactive")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-sm text-[var(--text-muted)]",children:[p.sectionsCount," ",g("applicationDetail.modules.sections","sections")]}),e.jsx("button",{onClick:()=>x(p),className:"p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] text-[var(--text-secondary)]","aria-label":g("applicationDetail.modules.edit"),children:e.jsx(S.Edit,{className:"w-4 h-4"})})]})]}),r.has(p.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:[g("applicationDetail.fields.description"),":"]}),e.jsx("p",{className:"text-[var(--text-primary)]",children:p.description||"-"})]}),e.jsxs("div",{children:[e.jsxs("span",{className:"text-[var(--text-muted)]",children:[g("applicationDetail.fields.route"),":"]}),e.jsx("p",{className:"text-[var(--text-primary)] font-mono",children:p.route||"-"})]})]}),e.jsxs("div",{className:"mt-4",children:[e.jsxs("h5",{className:"text-sm font-medium text-[var(--text-secondary)] mb-2",children:[g("applicationDetail.modules.sections","Sections")," (",p.sectionsCount,")"]}),Ee(p.id,l,s,P,d,g)]})]})]})})]})}function Oe({application:t,permissions:r,permissionsWithRoles:s}){const{t:l}=W.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}=W.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(S.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(S.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}=J.useTenantTypeSettings();return r=>{const s=t(r),l=J.getLucideIcon(s.icon),d=J.getColorClasses(s.color);return{Icon:l,bgClass:d.bg,colorClass:d.text}}},Ge=({assignedTenants:t})=>{const{t:r}=W.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(S.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}=Y.useParams(),r=Y.useNavigate(),{t:s}=W.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),i=De(),x=Me(),N=Ce(),a=Be(),D=ee.useAccessRequests("application",t),{loadApplication:P}=i,{loadPermissionsData:L}=N,{loadPublicationData:g}=a,{loadRequests:p}=D,h=i.application,q=N.permissions.length,T=a.assignedTenants.length,C=n.useMemo(()=>u||!d?a.availableTenants:a.availableTenants.filter(f=>f.slug===d.slug),[a.availableTenants,u,d]),R=n.useMemo(()=>u||!d?a.assignedTenants:a.assignedTenants.filter(f=>f.tenantSlug===d.slug),[a.assignedTenants,u,d]);n.useEffect(()=>{t&&P(t)},[t,P]),n.useEffect(()=>{h&&((o==="permissions"||o==="roles")&&q===0&&L(h),o==="publication"&&T===0&&g(t),o==="requests"&&p())},[o,t,h,q,T,L,g,p]);const A=[{id:"info",label:s("applicationDetail.tabs.info"),icon:S.Settings},{id:"modules",label:s("applicationDetail.tabs.modules"),icon:S.Layers},{id:"permissions",label:s("applicationDetail.tabs.permissions"),icon:S.Shield},{id:"roles",label:s("applicationDetail.tabs.roles"),icon:S.Users},{id:"publication",label:s("applicationDetail.tabs.publication"),icon:S.Globe},{id:"requests",label:s("applicationDetail.tabs.requests"),icon:S.Inbox}];if(i.loading)return e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsx(S.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})});if(i.error||!i.application)return e.jsxs("div",{className:"text-center py-12",children:[e.jsx(S.AlertCircle,{className:"w-12 h-12 text-[var(--error-text)] mx-auto mb-4"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:i.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 w=N.permissions.length>0||o==="permissions"||o==="roles",B=a.assignedTenants.length>0||o==="publication",F=[{label:s("applicationDetail.stats.modules"),value:i.application.modules?.length||0,color:"blue"},{label:s("applicationDetail.stats.permissions"),value:w?N.permissions.length:"—",color:"green"},{label:s("applicationDetail.stats.rolesWithAccess"),value:w?N.rolesWithAppAccess.length:"—",color:"purple"},{label:s("applicationDetail.stats.assignedTenants"),value:B?R.length:"—",color:"yellow"},{label:s("applicationDetail.stats.status"),value:i.application.isActive?s("common:active"):s("common:inactive"),color:i.application.isActive?"green":"neutral"}],_={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:i.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(S.ArrowLeft,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"flex items-center gap-3",children:[Q(i.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:i.application.label}),i.application.description&&e.jsx("p",{className:"text-sm sm:text-base text-[var(--text-secondary)]",children:i.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 ${i.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:i.application.isActive?s("common:active"):s("common:inactive")}),c&&e.jsxs("button",{onClick:()=>i.handleToggleStatus(t),disabled:i.saving,className:`inline-flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] font-medium transition-colors ${i.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:[i.saving&&e.jsx(S.Loader2,{className:"w-4 h-4 animate-spin"}),!i.saving&&i.application.isActive&&e.jsx(S.PowerOff,{className:"w-4 h-4"}),!i.saving&&!i.application.isActive&&e.jsx(S.Power,{className:"w-4 h-4"}),i.application.isActive?s("applicationDetail.deactivate"):s("applicationDetail.activate")]})]})]}),i.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(S.AlertTriangle,{className:"w-5 h-5 flex-shrink-0"}),i.error]}),i.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(S.CheckCircle,{className:"w-5 h-5 flex-shrink-0"}),i.success]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 lg:grid-cols-5 gap-4",children:F.map(f=>e.jsxs("div",{className:`rounded-[var(--radius-card)] p-4 text-center border ${_[f.color]}`,children:[e.jsx("div",{className:"text-2xl font-bold",children:f.value}),e.jsx("div",{className:"text-sm opacity-80",children:f.label})]},f.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:A.map(f=>{const E=f.icon,K=o===f.id;return e.jsxs("button",{role:"tab","aria-selected":K,"aria-controls":`tabpanel-${f.id}`,onClick:()=>j(f.id),className:`flex items-center gap-2 px-4 py-2 whitespace-nowrap rounded-[var(--radius-button)] font-medium transition-colors ${K?"bg-[var(--color-accent-600)] text-white":"text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]"}`,children:[e.jsx(E,{className:"w-4 h-4"}),f.label]},f.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:i.formData,setFormData:i.setFormData,application:i.application,saving:i.saving,onSubmit:()=>i.handleSaveInfo(t,i.formData)}),o==="modules"&&e.jsx(Ie,{application:i.application,expandedModules:x.expandedModules,moduleSections:x.moduleSections,loadingSections:x.loadingSections,reordering:x.reordering,editingModule:x.editingModule,moduleFormData:x.moduleFormData,showModuleForm:x.showModuleForm,saving:i.saving,onToggleExpand:f=>x.toggleModuleExpand(t,f),onStartEdit:x.startEditModule,onSaveModule:async()=>{await x.handleSaveModule(t,x.editingModule.id,x.moduleFormData),i.setSuccess(s("applicationDetail.success.moduleUpdated")),await i.loadApplication(t)},onCancelEdit:()=>{x.setShowModuleForm(!1),x.setEditingModule(null)},onModulesReorder:async f=>{await x.handleModulesReorder(t,f),await i.loadApplication(t)},onSectionsReorder:(f,E)=>x.handleSectionsReorder(t,f,E),setModuleFormData:f=>x.setModuleFormData(typeof f=="function"?f(x.moduleFormData):f)}),o==="permissions"&&e.jsx(Oe,{application:i.application,permissions:N.permissions,permissionsWithRoles:N.permissionsWithRoles}),o==="roles"&&e.jsx(Ue,{rolesWithAppAccess:N.rolesWithAppAccess,onNavigateToRole:f=>r(`/administration/permissions/roles/${f}`)}),o==="publication"&&e.jsx(Ge,{application:i.application,assignedTenants:R,availableTenants:C,showAssignModal:a.showAssignModal,selectedTenantIds:a.selectedTenantIds,selectedAccessLevel:a.selectedAccessLevel,tenantSearch:a.tenantSearch,showCustomizeDrawer:a.showCustomizeDrawer,customizingTenant:a.customizingTenant,bulkAccessMode:a.bulkAccessMode,bulkModules:a.bulkModules,bulkExpandedModules:a.bulkExpandedModules,loadingBulkModules:a.loadingBulkModules,isUpdateMode:a.isUpdateMode,updateMergeMode:a.updateMergeMode,showConfirmRemovalDialog:a.showConfirmRemovalDialog,pendingRemovals:a.pendingRemovals,saving:i.saving,includePersonalTenants:a.includePersonalTenants,isInDefaultPersonalTemplate:a.isInDefaultPersonalTemplate,onAddTenant:()=>{a.loadPublicationData(t),a.setShowAssignModal(!0)},onRemoveTenant:f=>a.handleRemoveTenant(t,f,()=>{i.setSuccess(s("applicationDetail.publication.success.removed"))}),onUpdateAccessLevel:(f,E)=>a.handleUpdateAccessLevel(t,f,E,()=>{i.setSuccess(s("applicationDetail.publication.success.updated"))}),onCustomizeTenant:f=>{a.setCustomizingTenant(f),a.setShowCustomizeDrawer(!0)},onCloseCustomizeDrawer:()=>{a.setShowCustomizeDrawer(!1),a.setCustomizingTenant(null),a.loadPublicationData(t)},onAssignTenants:()=>a.handleAssignTenants(t,()=>{i.setSuccess(s("applicationDetail.publication.success.assigned")),a.loadPublicationData(t)}),onUpdateTenants:()=>a.handleUpdateTenants(t,()=>{i.setSuccess(s("applicationDetail.publication.success.updated")),a.loadPublicationData(t)}),onExecuteUpdateTenants:()=>a.executeUpdateTenants(t,()=>{i.setSuccess(s("applicationDetail.publication.success.updated")),a.loadPublicationData(t)}),onCancelRemovalDialog:()=>{a.setShowConfirmRemovalDialog(!1),a.setUpdateMergeMode("merge")},setShowAssignModal:a.setShowAssignModal,setSelectedTenantIds:a.setSelectedTenantIds,setSelectedAccessLevel:a.setSelectedAccessLevel,setTenantSearch:a.setTenantSearch,setBulkAccessMode:a.setBulkAccessMode,setIsUpdateMode:a.setIsUpdateMode,setUpdateMergeMode:a.setUpdateMergeMode,onToggleTenantSelection:a.toggleTenantSelection,onSelectAllFilteredTenants:a.selectAllFilteredTenants,onClearTenantSelection:a.clearTenantSelection,setIncludePersonalTenants:a.setIncludePersonalTenants,onLoadBulkModules:()=>a.loadBulkModules(t),onToggleBulkModuleExpand:a.toggleBulkModuleExpand,onToggleBulkModule:a.toggleBulkModule,onToggleBulkSection:a.toggleBulkSection,onGetBulkModuleCheckState:a.getBulkModuleCheckState,onGetBulkStats:a.getBulkStats,onSelectAllBulkModules:a.selectAllBulkModules,onClearBulkModules:a.clearBulkModules,appId:t}),o==="requests"&&e.jsx(ee.AccessRequestsListTab,{requests:D.requests,loading:D.loading,onReload:()=>D.loadRequests()})]})]})}exports.default=Ke;
|
|
2
|
+
//# sourceMappingURL=ApplicationDetailPage-C2BSpEoW.js.map
|