@atlashub/smartstack 3.21.0 → 3.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js → AgentSkillsPage-BWQSCYl-.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js.map → AgentSkillsPage-BWQSCYl-.js.map} +1 -1
- package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js → AgentSkillsPage-IQcMnBaD.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js.map → AgentSkillsPage-IQcMnBaD.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js → AgentWorkloadPage-DqrjkvWL.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js.map → AgentWorkloadPage-DqrjkvWL.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js → AgentWorkloadPage-w-HiyFYP.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js.map → AgentWorkloadPage-w-HiyFYP.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js → ApiCatalogDetailPage-D3L8Yf4G.js} +3 -3
- package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js.map → ApiCatalogDetailPage-D3L8Yf4G.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js → ApiCatalogDetailPage-MPT3Kz6H.js} +2 -2
- package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js.map → ApiCatalogDetailPage-MPT3Kz6H.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js → ApiCatalogPage-D4Hg3uiS.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js.map → ApiCatalogPage-D4Hg3uiS.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js → ApiCatalogPage-DRg5Cz0r.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js.map → ApiCatalogPage-DRg5Cz0r.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js → ApplicationDetailPage-Caizuyn2.js} +2 -2
- package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js.map → ApplicationDetailPage-Caizuyn2.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js → ApplicationDetailPage-CuCW6aMB.js} +4 -4
- package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js.map → ApplicationDetailPage-CuCW6aMB.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js → ApplicationsDashboardPage-B2MW8-Kc.js} +2 -2
- package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js.map → ApplicationsDashboardPage-B2MW8-Kc.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js → ApplicationsDashboardPage-BDIjFIYZ.js} +3 -3
- package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js.map → ApplicationsDashboardPage-BDIjFIYZ.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js → ApplicationsGridPage-DV-FihKj.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js.map → ApplicationsGridPage-DV-FihKj.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js → ApplicationsGridPage-DXsTfXPI.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js.map → ApplicationsGridPage-DXsTfXPI.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js → ApplicationsListPage--CGkyBuJ.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js.map → ApplicationsListPage--CGkyBuJ.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-C91v2rZt.js → ApplicationsListPage-JUX823bh.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-C91v2rZt.js.map → ApplicationsListPage-JUX823bh.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-BCbgotIx.js → ApplicationsPage-6zgFye6w.js} +2 -2
- package/dist/chunks/{ApplicationsPage-BCbgotIx.js.map → ApplicationsPage-6zgFye6w.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js → ApplicationsPage-CQPuuiO6.js} +4 -4
- package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js.map → ApplicationsPage-CQPuuiO6.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js → AssignmentRulesPage-CFffeEbo.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js.map → AssignmentRulesPage-CFffeEbo.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js → AssignmentRulesPage-D78UeUId.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js.map → AssignmentRulesPage-D78UeUId.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-DmfBYQAD.js → AssignmentsPage-Cww2ifZF.js} +2 -2
- package/dist/chunks/{AssignmentsPage-DmfBYQAD.js.map → AssignmentsPage-Cww2ifZF.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-sRCCBmRc.js → AssignmentsPage-DE_QS2LO.js} +2 -2
- package/dist/chunks/{AssignmentsPage-sRCCBmRc.js.map → AssignmentsPage-DE_QS2LO.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js → AuthCallbackPage-CA2nO6DG.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js.map → AuthCallbackPage-CA2nO6DG.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js → AuthCallbackPage-CDUAoX-N.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js.map → AuthCallbackPage-CDUAoX-N.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js → ConfirmEmailPage-BqsILAYH.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js.map → ConfirmEmailPage-BqsILAYH.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js → ConfirmEmailPage-INeHCuMB.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js.map → ConfirmEmailPage-INeHCuMB.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js → CreateSupportTicketPage-BWeuV2aU.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js.map → CreateSupportTicketPage-BWeuV2aU.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js → CreateSupportTicketPage-OBwF4v7b.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js.map → CreateSupportTicketPage-OBwF4v7b.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CUZ80NGV.js → DashboardPage-CKHqWrdS.js} +3 -3
- package/dist/chunks/{DashboardPage-CUZ80NGV.js.map → DashboardPage-CKHqWrdS.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CaNOAstg.js → DashboardPage-COmc9b__.js} +3 -3
- package/dist/chunks/{DashboardPage-CaNOAstg.js.map → DashboardPage-COmc9b__.js.map} +1 -1
- package/dist/chunks/{DashboardPage-B48_rQFi.js → DashboardPage-CfKZHiSj.js} +2 -2
- package/dist/chunks/{DashboardPage-B48_rQFi.js.map → DashboardPage-CfKZHiSj.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CUZV1J9t.js → DashboardPage-CwEZZ3jx.js} +2 -2
- package/dist/chunks/{DashboardPage-CUZV1J9t.js.map → DashboardPage-CwEZZ3jx.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js → EscalationConfigPage--7lgZ0kJ.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js.map → EscalationConfigPage--7lgZ0kJ.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js → EscalationConfigPage-DPyiBcqV.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js.map → EscalationConfigPage-DPyiBcqV.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js → ForceChangePasswordPage-BE-6umub.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js.map → ForceChangePasswordPage-BE-6umub.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js → ForceChangePasswordPage-CnsYoWmV.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js.map → ForceChangePasswordPage-CnsYoWmV.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js → ForgotPasswordPage-CSq4DnFF.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js.map → ForgotPasswordPage-CSq4DnFF.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js → ForgotPasswordPage-DZLVolAC.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js.map → ForgotPasswordPage-DZLVolAC.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-DFBvVO1S.js → GroupDetailPage-Bf9Wb_2j.js} +5 -5
- package/dist/chunks/{GroupDetailPage-DFBvVO1S.js.map → GroupDetailPage-Bf9Wb_2j.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-B2FkKrGG.js → GroupDetailPage-R-hf3rJ7.js} +2 -2
- package/dist/chunks/{GroupDetailPage-B2FkKrGG.js.map → GroupDetailPage-R-hf3rJ7.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js → MyAccessRequestsPage-BIisvWM6.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js.map → MyAccessRequestsPage-BIisvWM6.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js → MyAccessRequestsPage-BLSV7Tbx.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js.map → MyAccessRequestsPage-BLSV7Tbx.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-BEcYYdGR.js → MyTenantsPage-D-7k9CP1.js} +3 -3
- package/dist/chunks/{MyTenantsPage-BEcYYdGR.js.map → MyTenantsPage-D-7k9CP1.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-D9f85zjF.js → MyTenantsPage-DqGW6aDt.js} +2 -2
- package/dist/chunks/{MyTenantsPage-D9f85zjF.js.map → MyTenantsPage-DqGW6aDt.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-DJR8h6y1.js → MyTicketsPage--DgDsnZA.js} +2 -2
- package/dist/chunks/{MyTicketsPage-DJR8h6y1.js.map → MyTicketsPage--DgDsnZA.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-DiOUExKJ.js → MyTicketsPage-CqJ3Aqob.js} +2 -2
- package/dist/chunks/{MyTicketsPage-DiOUExKJ.js.map → MyTicketsPage-CqJ3Aqob.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js → NavigationAppsPage-Bebis_RT.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js.map → NavigationAppsPage-Bebis_RT.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-If7tmCFY.js → NavigationAppsPage-THNPOAjv.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-If7tmCFY.js.map → NavigationAppsPage-THNPOAjv.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-C29Lln5o.js → NotificationsPage-CAbNW_Cn.js} +2 -2
- package/dist/chunks/{NotificationsPage-C29Lln5o.js.map → NotificationsPage-CAbNW_Cn.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-BiaLRb0s.js → NotificationsPage-DxwizUhL.js} +2 -2
- package/dist/chunks/{NotificationsPage-BiaLRb0s.js.map → NotificationsPage-DxwizUhL.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js → OnboardingWizardPage-C6HlbJ3K.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js.map → OnboardingWizardPage-C6HlbJ3K.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js → OnboardingWizardPage-CyC2zONO.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js.map → OnboardingWizardPage-CyC2zONO.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js → PermissionDetailPage-BDHiNgky.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js.map → PermissionDetailPage-BDHiNgky.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js → PermissionDetailPage-C5K17ydY.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js.map → PermissionDetailPage-C5K17ydY.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-l0PnY-EE.js → PermissionsPage-COI5LJPo.js} +2 -2
- package/dist/chunks/{PermissionsPage-l0PnY-EE.js.map → PermissionsPage-COI5LJPo.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-DLy9U3P3.js → PermissionsPage-CkOwH2_d.js} +2 -2
- package/dist/chunks/{PermissionsPage-DLy9U3P3.js.map → PermissionsPage-CkOwH2_d.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-DFBx38-x.js → PortalDashboardPage-CoEC4CmC.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-DFBx38-x.js.map → PortalDashboardPage-CoEC4CmC.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js → PortalDashboardPage-DrYymEf-.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js.map → PortalDashboardPage-DrYymEf-.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-BBu8yZQB.js → PreferencesPage-CJRaU3ba.js} +2 -2
- package/dist/chunks/{PreferencesPage-BBu8yZQB.js.map → PreferencesPage-CJRaU3ba.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-B81MsNV1.js → PreferencesPage-Cqr9mAab.js} +2 -2
- package/dist/chunks/{PreferencesPage-B81MsNV1.js.map → PreferencesPage-Cqr9mAab.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DDrl10zj.js → ProfilePage-BZVpg6-l.js} +2 -2
- package/dist/chunks/{ProfilePage-DDrl10zj.js.map → ProfilePage-BZVpg6-l.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DPoXwdnc.js → ProfilePage-Cu_FITeL.js} +2 -2
- package/dist/chunks/{ProfilePage-DPoXwdnc.js.map → ProfilePage-Cu_FITeL.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js → ReferencesManagementPage-DUlVk9Ps.js} +3 -3
- package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js.map → ReferencesManagementPage-DUlVk9Ps.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js → ReferencesManagementPage-ZCuYtqd7.js} +2 -2
- package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js.map → ReferencesManagementPage-ZCuYtqd7.js.map} +1 -1
- package/dist/chunks/{RegisterPage-CiQib3-6.js → RegisterPage-C4xmVwh9.js} +2 -2
- package/dist/chunks/{RegisterPage-CiQib3-6.js.map → RegisterPage-C4xmVwh9.js.map} +1 -1
- package/dist/chunks/{RegisterPage-bXCcJD88.js → RegisterPage-DGyzoIHT.js} +2 -2
- package/dist/chunks/{RegisterPage-bXCcJD88.js.map → RegisterPage-DGyzoIHT.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js → ResetPasswordPage-DqDD6VPR.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js.map → ResetPasswordPage-DqDD6VPR.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-CubPG3yv.js → ResetPasswordPage-Glu-aeqv.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-CubPG3yv.js.map → ResetPasswordPage-Glu-aeqv.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-Bg7XZmR1.js → ResolutionModal-CxjANAOP.js} +2 -2
- package/dist/chunks/{ResolutionModal-Bg7XZmR1.js.map → ResolutionModal-CxjANAOP.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-DqRk_T0n.js → ResolutionModal-Duat18qV.js} +2 -2
- package/dist/chunks/{ResolutionModal-DqRk_T0n.js.map → ResolutionModal-Duat18qV.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-Blau6_4c.js → RoleDetailPage-BQffUSnt.js} +3 -3
- package/dist/chunks/{RoleDetailPage-Blau6_4c.js.map → RoleDetailPage-BQffUSnt.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-CiRVxxIP.js → RoleDetailPage-JTm5lD1_.js} +2 -2
- package/dist/chunks/{RoleDetailPage-CiRVxxIP.js.map → RoleDetailPage-JTm5lD1_.js.map} +1 -1
- package/dist/chunks/{RolesPage-Pm-RN3lP.js → RolesPage-B9rRzciI.js} +2 -2
- package/dist/chunks/{RolesPage-Pm-RN3lP.js.map → RolesPage-B9rRzciI.js.map} +1 -1
- package/dist/chunks/{RolesPage-Cb8joqdJ.js → RolesPage-BN8_zMOC.js} +2 -2
- package/dist/chunks/{RolesPage-Cb8joqdJ.js.map → RolesPage-BN8_zMOC.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-B86McKM6.js → SlaConfigPage-B7kZNig4.js} +2 -2
- package/dist/chunks/{SlaConfigPage-B86McKM6.js.map → SlaConfigPage-B7kZNig4.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-BY7gvYU6.js → SlaConfigPage-okvZfA_K.js} +2 -2
- package/dist/chunks/{SlaConfigPage-BY7gvYU6.js.map → SlaConfigPage-okvZfA_K.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js → SupportPermissionsPage-DGAPqJbl.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js.map → SupportPermissionsPage-DGAPqJbl.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js → SupportPermissionsPage-Dg_wLOme.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js.map → SupportPermissionsPage-Dg_wLOme.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-BDguJ401.js → TemplatesPage-DT9fhlAU.js} +2 -2
- package/dist/chunks/{TemplatesPage-BDguJ401.js.map → TemplatesPage-DT9fhlAU.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-DdnGgioU.js → TemplatesPage-DiEk538p.js} +2 -2
- package/dist/chunks/{TemplatesPage-DdnGgioU.js.map → TemplatesPage-DiEk538p.js.map} +1 -1
- package/dist/chunks/{TenantCard-ffwWsgFQ.js → TenantCard-BbSYk9_Z.js} +2 -2
- package/dist/chunks/{TenantCard-ffwWsgFQ.js.map → TenantCard-BbSYk9_Z.js.map} +1 -1
- package/dist/chunks/{TenantCard-CUjb6og9.js → TenantCard-CEkiKxcZ.js} +2 -2
- package/dist/chunks/{TenantCard-CUjb6og9.js.map → TenantCard-CEkiKxcZ.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js → TenantScopeSelector-BWfYxvEa.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js.map → TenantScopeSelector-BWfYxvEa.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js → TenantScopeSelector-D-BKgQPV.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js.map → TenantScopeSelector-D-BKgQPV.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-GOh9GX7E.js → TicketDetailPage-C1mNS9Up.js} +2 -2
- package/dist/chunks/{TicketDetailPage-GOh9GX7E.js.map → TicketDetailPage-C1mNS9Up.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-Du8WMyqf.js → TicketDetailPage-ieVDRh42.js} +2 -2
- package/dist/chunks/{TicketDetailPage-Du8WMyqf.js.map → TicketDetailPage-ieVDRh42.js.map} +1 -1
- package/dist/chunks/{TicketsPage-Bqd6moQy.js → TicketsPage-CnuWsnIW.js} +2 -2
- package/dist/chunks/{TicketsPage-Bqd6moQy.js.map → TicketsPage-CnuWsnIW.js.map} +1 -1
- package/dist/chunks/{TicketsPage-WdU4Bb7M.js → TicketsPage-jjyY15_D.js} +2 -2
- package/dist/chunks/{TicketsPage-WdU4Bb7M.js.map → TicketsPage-jjyY15_D.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js → UserCreateTicketPage-B8Tvf-ag.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js.map → UserCreateTicketPage-B8Tvf-ag.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js → UserCreateTicketPage-DnOsDlfO.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js.map → UserCreateTicketPage-DnOsDlfO.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-BP5WeXPS.js → UserDashboardPage-BrtkJ-NB.js} +2 -2
- package/dist/chunks/{UserDashboardPage-BP5WeXPS.js.map → UserDashboardPage-BrtkJ-NB.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-B53C8fUq.js → UserDashboardPage-KLB5CQP5.js} +2 -2
- package/dist/chunks/{UserDashboardPage-B53C8fUq.js.map → UserDashboardPage-KLB5CQP5.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-B110bmGX.js → UserDetailPage-U7smBQoF.js} +5 -5
- package/dist/chunks/{UserDetailPage-B110bmGX.js.map → UserDetailPage-U7smBQoF.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-CV2VCE46.js → UserDetailPage-_J6lcKAU.js} +2 -2
- package/dist/chunks/{UserDetailPage-CV2VCE46.js.map → UserDetailPage-_J6lcKAU.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js → UserTicketDetailPage-CWoYQgH-.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js.map → UserTicketDetailPage-CWoYQgH-.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js → UserTicketDetailPage-DkufSlvZ.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js.map → UserTicketDetailPage-DkufSlvZ.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js → UsersGroupsPage-C38s2-Rq.js} +3 -3
- package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js.map → UsersGroupsPage-C38s2-Rq.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js → UsersGroupsPage-Dq3rAteo.js} +2 -2
- package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js.map → UsersGroupsPage-Dq3rAteo.js.map} +1 -1
- package/dist/chunks/{UsersPage-Bg7033pp.js → UsersPage-B5C5KEUR.js} +2 -2
- package/dist/chunks/{UsersPage-Bg7033pp.js.map → UsersPage-B5C5KEUR.js.map} +1 -1
- package/dist/chunks/{UsersPage-TYAfwPY1.js → UsersPage-CXC9Hvq6.js} +2 -2
- package/dist/chunks/{UsersPage-TYAfwPY1.js.map → UsersPage-CXC9Hvq6.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-DZeDvzwv.js → accessRequestsApi-B-4TJ5_U.js} +2 -2
- package/dist/chunks/{accessRequestsApi-DZeDvzwv.js.map → accessRequestsApi-B-4TJ5_U.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-ZXFPCid2.js → accessRequestsApi-DZSfThpd.js} +2 -2
- package/dist/chunks/{accessRequestsApi-ZXFPCid2.js.map → accessRequestsApi-DZSfThpd.js.map} +1 -1
- package/dist/chunks/{aiApi-CsH8DXgs.js → aiApi-B20Teu2v.js} +2 -2
- package/dist/chunks/{aiApi-CsH8DXgs.js.map → aiApi-B20Teu2v.js.map} +1 -1
- package/dist/chunks/{aiApi-CVPzFTXa.js → aiApi-DMGz-RPM.js} +2 -2
- package/dist/chunks/{aiApi-CVPzFTXa.js.map → aiApi-DMGz-RPM.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js → applicationAnalyticsApi-Bwa75Fzd.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js.map → applicationAnalyticsApi-Bwa75Fzd.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js → applicationAnalyticsApi-CLBqRPfN.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js.map → applicationAnalyticsApi-CLBqRPfN.js.map} +1 -1
- package/dist/chunks/{groupsApi-BgCk2fsp.js → groupsApi-QzXI-5xu.js} +2 -2
- package/dist/chunks/{groupsApi-BgCk2fsp.js.map → groupsApi-QzXI-5xu.js.map} +1 -1
- package/dist/chunks/{groupsApi-BIbG665N.js → groupsApi-hB9kSWEd.js} +2 -2
- package/dist/chunks/{groupsApi-BIbG665N.js.map → groupsApi-hB9kSWEd.js.map} +1 -1
- package/dist/chunks/{index-Cb3LotuT.js → index--NGcBYUu.js} +3 -3
- package/dist/chunks/{index-Cb3LotuT.js.map → index--NGcBYUu.js.map} +1 -1
- package/dist/chunks/{index-C33zcyF4.js → index--aPwOFjF.js} +2 -2
- package/dist/chunks/{index-C33zcyF4.js.map → index--aPwOFjF.js.map} +1 -1
- package/dist/chunks/{index-sMr9qND_.js → index-0VrOtwP0.js} +2 -2
- package/dist/chunks/{index-sMr9qND_.js.map → index-0VrOtwP0.js.map} +1 -1
- package/dist/chunks/{index-DDKetfKq.js → index-37U271aw.js} +2 -2
- package/dist/chunks/{index-DDKetfKq.js.map → index-37U271aw.js.map} +1 -1
- package/dist/chunks/{index-B9fS7ir6.js → index-B7qZTuQ-.js} +2 -2
- package/dist/chunks/{index-B9fS7ir6.js.map → index-B7qZTuQ-.js.map} +1 -1
- package/dist/chunks/{index-CdjBY7L8.js → index-Bedzmqr-.js} +2 -2
- package/dist/chunks/{index-CdjBY7L8.js.map → index-Bedzmqr-.js.map} +1 -1
- package/dist/chunks/{index-CHG_O1fS.js → index-Betxo5g5.js} +2 -2
- package/dist/chunks/{index-CHG_O1fS.js.map → index-Betxo5g5.js.map} +1 -1
- package/dist/chunks/{index-jiGu-H8x.js → index-BmaJz475.js} +2 -2
- package/dist/chunks/{index-jiGu-H8x.js.map → index-BmaJz475.js.map} +1 -1
- package/dist/chunks/{index-C53JoVNk.js → index-Buhqag3v.js} +2 -2
- package/dist/chunks/{index-C53JoVNk.js.map → index-Buhqag3v.js.map} +1 -1
- package/dist/chunks/{index-DO0Rw7hX.js → index-C3VxlfKq.js} +2 -2
- package/dist/chunks/{index-DO0Rw7hX.js.map → index-C3VxlfKq.js.map} +1 -1
- package/dist/chunks/{index-CSQ60fpG.js → index-CgpRo8Oe.js} +2 -2
- package/dist/chunks/{index-CSQ60fpG.js.map → index-CgpRo8Oe.js.map} +1 -1
- package/dist/chunks/{index-B-e-ELsf.js → index-DOY0w8Iu.js} +8 -8
- package/dist/chunks/{index-B-e-ELsf.js.map → index-DOY0w8Iu.js.map} +1 -1
- package/dist/chunks/{index-D2REDIRX.js → index-DwuvIOrQ.js} +2 -2
- package/dist/chunks/{index-D2REDIRX.js.map → index-DwuvIOrQ.js.map} +1 -1
- package/dist/chunks/{index-DCcl7Qof.js → index-DzedSLdI.js} +2 -2
- package/dist/chunks/{index-DCcl7Qof.js.map → index-DzedSLdI.js.map} +1 -1
- package/dist/chunks/{index-2wUhd9Lu.js → index-IgLVXPg8.js} +10 -10
- package/dist/chunks/index-IgLVXPg8.js.map +1 -0
- package/dist/chunks/{index-CwSaRXXg.js → index-lpIzhufD.js} +1916 -1900
- package/dist/chunks/index-lpIzhufD.js.map +1 -0
- package/dist/chunks/{index-Cuwn2q-f.js → index-mLUKwbGl.js} +4 -4
- package/dist/chunks/{index-Cuwn2q-f.js.map → index-mLUKwbGl.js.map} +1 -1
- package/dist/chunks/{index-B0mk2tNY.js → index-tO6MMIFB.js} +2 -2
- package/dist/chunks/{index-B0mk2tNY.js.map → index-tO6MMIFB.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-BpNANQ5s.js → tenantIconMap-BQD9byc8.js} +2 -2
- package/dist/chunks/{tenantIconMap-BpNANQ5s.js.map → tenantIconMap-BQD9byc8.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-DtdUgvJO.js → tenantIconMap-CTMuSt18.js} +2 -2
- package/dist/chunks/{tenantIconMap-DtdUgvJO.js.map → tenantIconMap-CTMuSt18.js.map} +1 -1
- package/dist/chunks/{ticketingApi-Bu4rKwLl.js → ticketingApi-BNIdox5t.js} +2 -2
- package/dist/chunks/{ticketingApi-Bu4rKwLl.js.map → ticketingApi-BNIdox5t.js.map} +1 -1
- package/dist/chunks/{ticketingApi-r4Avm9iS.js → ticketingApi-J0vC_t7r.js} +2 -2
- package/dist/chunks/{ticketingApi-r4Avm9iS.js.map → ticketingApi-J0vC_t7r.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-B9bF4swg.js → useAccessRequests-DCNNLnxk.js} +3 -3
- package/dist/chunks/{useAccessRequests-B9bF4swg.js.map → useAccessRequests-DCNNLnxk.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-JyPUX3Om.js → useAccessRequests-DT7X4FAK.js} +2 -2
- package/dist/chunks/{useAccessRequests-JyPUX3Om.js.map → useAccessRequests-DT7X4FAK.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-DjPQenC2.js → useUserAccessRequests-BYbmG4c7.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-DjPQenC2.js.map → useUserAccessRequests-BYbmG4c7.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-BB6FHW14.js → useUserAccessRequests-CylKxRN6.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-BB6FHW14.js.map → useUserAccessRequests-CylKxRN6.js.map} +1 -1
- package/dist/hooks/useCollapsibleState.d.ts +5 -2
- package/dist/hooks/useCollapsibleState.d.ts.map +1 -1
- package/dist/i18n/config.d.ts +1 -0
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/main.d.ts +0 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/smartstack.cjs +1 -1
- package/dist/smartstack.js +1 -1
- package/dist/utils/permissions.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/index-2wUhd9Lu.js.map +0 -1
- package/dist/chunks/index-CwSaRXXg.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAccessRequests-JyPUX3Om.js","sources":["../../src/components/platform/administration/access-requests/AccessRequestApprovalModal.tsx","../../src/hooks/useAccessRequestActions.ts","../../src/components/platform/administration/access-requests/AccessRequestsListTab.tsx","../../src/hooks/useAccessRequests.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\nimport { adminApi, type RoleListDto, type TenantGroupDto } from '@/services/api/adminApi';\r\nimport { Loader2, X, Users, Shield } from 'lucide-react';\r\n\r\ntype AssignmentMode = 'group' | 'role';\r\n\r\ninterface AccessRequestApprovalModalProps {\r\n readonly open: boolean;\r\n readonly onClose: () => void;\r\n readonly onConfirm: (data: { roleId?: string; groupId?: string; notes?: string }) => Promise<void>;\r\n readonly request: AccessRequest;\r\n readonly action: 'approve' | 'deny';\r\n readonly processing: boolean;\r\n}\r\n\r\nexport function AccessRequestApprovalModal({\r\n open,\r\n onClose,\r\n onConfirm,\r\n request,\r\n action,\r\n processing,\r\n}: AccessRequestApprovalModalProps): ReactElement | null {\r\n const { t } = useTranslation('admin');\r\n const [notes, setNotes] = useState('');\r\n const [assignmentMode, setAssignmentMode] = useState<AssignmentMode>('group');\r\n const [selectedRoleId, setSelectedRoleId] = useState('');\r\n const [selectedGroupId, setSelectedGroupId] = useState('');\r\n const [roles, setRoles] = useState<RoleListDto[]>([]);\r\n const [groups, setGroups] = useState<TenantGroupDto[]>([]);\r\n const [loadingRoles, setLoadingRoles] = useState(false);\r\n const [loadingGroups, setLoadingGroups] = useState(false);\r\n\r\n const isDeny = action === 'deny';\r\n const isApprove = action === 'approve';\r\n\r\n // Load groups for the tenant when modal opens in approve mode\r\n useEffect(() => {\r\n if (!open || !isApprove) return;\r\n\r\n setLoadingGroups(true);\r\n adminApi.tenants.getGroups(request.tenantId)\r\n .then((groups) => {\r\n setGroups(groups.filter(g => g.isActive));\r\n })\r\n .catch(() => {\r\n setGroups([]);\r\n })\r\n .finally(() => {\r\n setLoadingGroups(false);\r\n });\r\n }, [open, isApprove, request.tenantId]);\r\n\r\n // Load roles when switching to role mode or on initial open\r\n useEffect(() => {\r\n if (!open || !isApprove || assignmentMode !== 'role') return;\r\n if (roles.length > 0) return; // Already loaded\r\n\r\n setLoadingRoles(true);\r\n adminApi.roles.getByApplication(request.applicationId)\r\n .then((roles) => {\r\n setRoles(roles);\r\n })\r\n .catch(() => {\r\n setRoles([]);\r\n })\r\n .finally(() => {\r\n setLoadingRoles(false);\r\n });\r\n }, [open, isApprove, assignmentMode, request.applicationId, roles.length]);\r\n\r\n // Reset state when modal closes\r\n useEffect(() => {\r\n if (!open) {\r\n setNotes('');\r\n setAssignmentMode('group');\r\n setSelectedRoleId('');\r\n setSelectedGroupId('');\r\n setRoles([]);\r\n setGroups([]);\r\n }\r\n }, [open]);\r\n\r\n const handleSubmit = async () => {\r\n if (isDeny) {\r\n await onConfirm({ notes: notes || undefined });\r\n return;\r\n }\r\n\r\n await onConfirm({\r\n roleId: assignmentMode === 'role' ? selectedRoleId : undefined,\r\n groupId: assignmentMode === 'group' ? selectedGroupId : undefined,\r\n notes: notes || undefined,\r\n });\r\n };\r\n\r\n if (!open) return null;\r\n\r\n const canSubmit = isApprove\r\n ? ((assignmentMode === 'role' && selectedRoleId !== '') ||\r\n (assignmentMode === 'group' && selectedGroupId !== '')) && !processing\r\n : notes !== '' && !processing;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-[var(--radius-card)] p-6 max-w-md w-full max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"text-lg font-semibold\">{t(`accessRequests.modal.${action}Title`)}</h3>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 hover:bg-[var(--bg-hover)] rounded\"\r\n disabled={processing}\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div>\r\n <div className=\"font-medium mb-1\">{t('accessRequests.modal.user')}</div>\r\n <div>{request.userFullName} ({request.userEmail})</div>\r\n </div>\r\n\r\n <div>\r\n <div className=\"font-medium mb-1\">{t('accessRequests.modal.application')}</div>\r\n <div>{request.applicationLabel}</div>\r\n </div>\r\n\r\n {request.reason && (\r\n <div>\r\n <div className=\"font-medium mb-1\">{t('accessRequests.modal.userReason')}</div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">{request.reason}</div>\r\n </div>\r\n )}\r\n\r\n {isApprove && (\r\n <>\r\n {/* Assignment mode toggle */}\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t('accessRequests.modal.assignmentMethod')}\r\n <span className=\"text-[var(--error-text)] ml-1\">*</span>\r\n </label>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setAssignmentMode('group')}\r\n className={`flex items-center gap-2 px-3 py-2.5 rounded-[var(--radius-input)] border text-sm font-medium transition-colors ${\r\n assignmentMode === 'group'\r\n ? 'border-[var(--color-accent-500)] bg-[var(--color-accent-50)] text-[var(--color-accent-700)]'\r\n : 'border-[var(--border-color)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n >\r\n <Users className=\"w-4 h-4\" />\r\n {t('accessRequests.modal.addToGroup')}\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => setAssignmentMode('role')}\r\n className={`flex items-center gap-2 px-3 py-2.5 rounded-[var(--radius-input)] border text-sm font-medium transition-colors ${\r\n assignmentMode === 'role'\r\n ? 'border-[var(--color-accent-500)] bg-[var(--color-accent-50)] text-[var(--color-accent-700)]'\r\n : 'border-[var(--border-color)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n >\r\n <Shield className=\"w-4 h-4\" />\r\n {t('accessRequests.modal.assignRole')}\r\n </button>\r\n </div>\r\n <p className=\"text-xs text-[var(--text-secondary)] mt-1.5\">\r\n {assignmentMode === 'group'\r\n ? t('accessRequests.modal.groupHint')\r\n : t('accessRequests.modal.roleHint')}\r\n </p>\r\n </div>\r\n\r\n {/* Group selector */}\r\n {assignmentMode === 'group' && (\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t('accessRequests.modal.selectGroup')}\r\n <span className=\"text-[var(--error-text)] ml-1\">*</span>\r\n </label>\r\n {loadingGroups && (\r\n <div className=\"flex items-center gap-2 text-sm text-[var(--text-secondary)]\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n {t('accessRequests.modal.loadingGroups')}\r\n </div>\r\n )}\r\n {!loadingGroups && groups.length === 0 && (\r\n <div className=\"text-sm text-[var(--warning-text)]\">\r\n {t('accessRequests.modal.noGroupsAvailable')}\r\n </div>\r\n )}\r\n {!loadingGroups && groups.length > 0 && (\r\n <select\r\n value={selectedGroupId}\r\n onChange={(e) => setSelectedGroupId(e.target.value)}\r\n className=\"w-full px-3 py-2 border rounded-[var(--radius-input)] bg-[var(--bg-primary)] border-[var(--border-color)]\"\r\n >\r\n <option value=\"\">{t('accessRequests.modal.selectGroupPlaceholder')}</option>\r\n {groups.map((group) => (\r\n <option key={group.groupId} value={group.groupId}>\r\n {group.name} ({group.memberCount} {t('accessRequests.modal.members')})\r\n </option>\r\n ))}\r\n </select>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Role selector */}\r\n {assignmentMode === 'role' && (\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t('accessRequests.modal.selectRole')}\r\n <span className=\"text-[var(--error-text)] ml-1\">*</span>\r\n </label>\r\n {loadingRoles && (\r\n <div className=\"flex items-center gap-2 text-sm text-[var(--text-secondary)]\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n {t('accessRequests.modal.loadingRoles')}\r\n </div>\r\n )}\r\n {!loadingRoles && roles.length === 0 && (\r\n <div className=\"text-sm text-[var(--warning-text)]\">\r\n {t('accessRequests.modal.noRolesAvailable')}\r\n </div>\r\n )}\r\n {!loadingRoles && roles.length > 0 && (\r\n <select\r\n value={selectedRoleId}\r\n onChange={(e) => setSelectedRoleId(e.target.value)}\r\n className=\"w-full px-3 py-2 border rounded-[var(--radius-input)] bg-[var(--bg-primary)] border-[var(--border-color)]\"\r\n >\r\n <option value=\"\">{t('accessRequests.modal.selectRolePlaceholder')}</option>\r\n {roles.map((role) => (\r\n <option key={role.id} value={role.id}>\r\n {role.name} ({role.shortName})\r\n </option>\r\n ))}\r\n </select>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t(`accessRequests.modal.${action}Notes`)}\r\n {isDeny && <span className=\"text-[var(--error-text)] ml-1\">*</span>}\r\n </label>\r\n <textarea\r\n value={notes}\r\n onChange={(e) => setNotes(e.target.value)}\r\n className=\"w-full px-3 py-2 border rounded-[var(--radius-input)] bg-[var(--bg-primary)] border-[var(--border-color)]\"\r\n rows={3}\r\n placeholder={t(`accessRequests.modal.${action}NotesPlaceholder`)}\r\n required={isDeny}\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-2\">\r\n <button\r\n onClick={onClose}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] border border-[var(--border-color)] hover:bg-[var(--bg-hover)]\"\r\n disabled={processing}\r\n >\r\n {t('common:cancel')}\r\n </button>\r\n <button\r\n onClick={handleSubmit}\r\n disabled={!canSubmit}\r\n className={`px-4 py-2 rounded-[var(--radius-button)] text-white disabled:opacity-50 flex items-center gap-2 ${\r\n isDeny ? 'bg-[var(--error-text)]' : 'bg-[var(--success-text)]'\r\n }`}\r\n >\r\n {processing && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t(`accessRequests.actions.${action}`)}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { accessRequestsApi } from '@/services/api/accessRequestsApi';\r\n\r\nexport function useAccessRequestActions(onSuccess?: () => void): {\n approve: (requestId: string, data: { roleId?: string; groupId?: string; notes?: string }) => Promise<void>;\n deny: (requestId: string, notes: string) => Promise<void>;\n processing: boolean;\n error: string | null;\n} {\r\n const [processing, setProcessing] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const approve = async (requestId: string, data: { roleId?: string; groupId?: string; notes?: string }) => {\r\n setProcessing(true);\r\n setError(null);\r\n try {\r\n await accessRequestsApi.approveRequest(requestId, data);\r\n onSuccess?.();\r\n } catch (err: unknown) {\r\n setError(err instanceof Error ? err.message : 'Failed to approve request');\r\n throw err;\r\n } finally {\r\n setProcessing(false);\r\n }\r\n };\r\n\r\n const deny = async (requestId: string, notes: string) => {\r\n setProcessing(true);\r\n setError(null);\r\n try {\r\n await accessRequestsApi.denyRequest(requestId, notes);\r\n onSuccess?.();\r\n } catch (err: unknown) {\r\n setError(err instanceof Error ? err.message : 'Failed to deny request');\r\n throw err;\r\n } finally {\r\n setProcessing(false);\r\n }\r\n };\r\n\r\n return { approve, deny, processing, error };\r\n}\r\n","import { useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { DataTable } from '@/components/ui/DataTable';\r\nimport type { DataTableColumn } from '@/components/ui/DataTable';\r\nimport { AccessRequestStatusBadge } from './AccessRequestStatusBadge';\r\nimport { AccessRequestApprovalModal } from './AccessRequestApprovalModal';\r\nimport { CheckCircle, XCircle, Loader2 } from 'lucide-react';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\nimport { useAccessRequestActions } from '@/hooks/useAccessRequestActions';\r\n\r\ninterface AccessRequestsListTabProps {\r\n readonly requests: AccessRequest[];\r\n readonly loading: boolean;\r\n readonly onReload: () => void;\r\n readonly showTenantColumn?: boolean;\r\n}\r\n\r\nexport function AccessRequestsListTab({ requests, loading, onReload, showTenantColumn = false }: AccessRequestsListTabProps): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const [selectedRequest, setSelectedRequest] = useState<AccessRequest | null>(null);\r\n const [modalAction, setModalAction] = useState<'approve' | 'deny' | null>(null);\r\n\r\n const { approve, deny, processing } = useAccessRequestActions(() => {\r\n setSelectedRequest(null);\r\n setModalAction(null);\r\n onReload();\r\n });\r\n\r\n const handleAction = (request: AccessRequest, action: 'approve' | 'deny') => {\r\n setSelectedRequest(request);\r\n setModalAction(action);\r\n };\r\n\r\n const handleConfirm = async (data: { roleId?: string; groupId?: string; notes?: string }) => {\r\n if (!selectedRequest) return;\r\n\r\n if (modalAction === 'approve') {\r\n await approve(selectedRequest.id, data);\r\n } else if (modalAction === 'deny' && data.notes) {\r\n await deny(selectedRequest.id, data.notes);\r\n }\r\n };\r\n\r\n const columns: DataTableColumn<AccessRequest>[] = [\r\n {\r\n key: 'userFullName',\r\n label: t('accessRequests.table.user'),\r\n render: (req) => (\r\n <div>\r\n <div className=\"font-medium\">{req.userFullName}</div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">{req.userEmail}</div>\r\n </div>\r\n ),\r\n },\r\n ...(showTenantColumn ? [{\r\n key: 'tenantName' as const,\r\n label: t('accessRequests.table.tenant'),\r\n render: (req: AccessRequest) => req.tenantName,\r\n }] : []),\r\n {\r\n key: 'applicationLabel',\r\n label: t('accessRequests.table.application'),\r\n },\r\n {\r\n key: 'reason',\r\n label: t('accessRequests.table.reason'),\r\n render: (req) => req.reason || '-',\r\n },\r\n {\r\n key: 'requestedAt',\r\n label: t('accessRequests.table.requestedAt'),\r\n render: (req) => new Date(req.requestedAt).toLocaleString(),\r\n },\r\n {\r\n key: 'status',\r\n label: t('accessRequests.table.status'),\r\n render: (req) => <AccessRequestStatusBadge status={req.status} />,\r\n },\r\n {\r\n key: 'actions',\r\n label: t('common:actionsColumn'),\r\n align: 'right',\r\n render: (req) => (\r\n req.status === 'Pending' ? (\r\n <div className=\"flex gap-2\">\r\n <button\r\n onClick={() => handleAction(req, 'approve')}\r\n className=\"p-1 rounded hover:bg-[var(--success-bg)] text-[var(--success-text)]\"\r\n title={t('accessRequests.actions.approve')}\r\n >\r\n <CheckCircle className=\"w-4 h-4\" />\r\n </button>\r\n <button\r\n onClick={() => handleAction(req, 'deny')}\r\n className=\"p-1 rounded hover:bg-[var(--error-bg)] text-[var(--error-text)]\"\r\n title={t('accessRequests.actions.deny')}\r\n >\r\n <XCircle className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n ) : (\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {req.processedBy}\r\n </div>\r\n )\r\n ),\r\n },\r\n ];\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n <DataTable\r\n data={requests}\r\n columns={columns}\r\n searchable\r\n searchPlaceholder={t('accessRequests.search')}\r\n getRowKey={(req) => req.id}\r\n emptyMessage={t('accessRequests.empty')}\r\n />\r\n\r\n {selectedRequest && modalAction && (\r\n <AccessRequestApprovalModal\r\n open={true}\r\n onClose={() => {\r\n setSelectedRequest(null);\r\n setModalAction(null);\r\n }}\r\n onConfirm={handleConfirm}\r\n request={selectedRequest}\r\n action={modalAction}\r\n processing={processing}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { accessRequestsApi } from '@/services/api/accessRequestsApi';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\n\r\nexport function useAccessRequests(type: 'application' | 'tenant', id: string): {\n requests: AccessRequest[];\n loading: boolean;\n error: string | null;\n loadRequests: (status?: string) => Promise<void>;\n} {\r\n const [requests, setRequests] = useState<AccessRequest[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const loadRequests = async (status?: string) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const data = type === 'application'\r\n ? await accessRequestsApi.getRequestsByApplication(id, status)\r\n : await accessRequestsApi.getRequestsByTenant(id, status);\r\n setRequests(Array.isArray(data) ? data : []);\r\n } catch (err: any) {\r\n setError(err.message || 'Failed to load requests');\r\n setRequests([]); // Reset to empty array on error\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return { requests, loading, error, loadRequests };\r\n}\r\n"],"names":["AccessRequestApprovalModal","open","onClose","onConfirm","request","action","processing","t","useTranslation","notes","setNotes","useState","assignmentMode","setAssignmentMode","selectedRoleId","setSelectedRoleId","selectedGroupId","setSelectedGroupId","roles","setRoles","groups","setGroups","loadingRoles","setLoadingRoles","loadingGroups","setLoadingGroups","isDeny","isApprove","useEffect","adminApi","g","handleSubmit","canSubmit","jsxs","jsx","X","Fragment","Users","Shield","Loader2","e","group","role","useAccessRequestActions","onSuccess","setProcessing","error","setError","requestId","data","accessRequestsApi","err","AccessRequestsListTab","requests","loading","onReload","showTenantColumn","selectedRequest","setSelectedRequest","modalAction","setModalAction","approve","deny","handleAction","handleConfirm","columns","req","AccessRequestStatusBadge","CheckCircle","XCircle","DataTable","useAccessRequests","type","id","setRequests","setLoading","status"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAccessRequests-DT7X4FAK.js","sources":["../../src/components/platform/administration/access-requests/AccessRequestApprovalModal.tsx","../../src/hooks/useAccessRequestActions.ts","../../src/components/platform/administration/access-requests/AccessRequestsListTab.tsx","../../src/hooks/useAccessRequests.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\nimport { adminApi, type RoleListDto, type TenantGroupDto } from '@/services/api/adminApi';\r\nimport { Loader2, X, Users, Shield } from 'lucide-react';\r\n\r\ntype AssignmentMode = 'group' | 'role';\r\n\r\ninterface AccessRequestApprovalModalProps {\r\n readonly open: boolean;\r\n readonly onClose: () => void;\r\n readonly onConfirm: (data: { roleId?: string; groupId?: string; notes?: string }) => Promise<void>;\r\n readonly request: AccessRequest;\r\n readonly action: 'approve' | 'deny';\r\n readonly processing: boolean;\r\n}\r\n\r\nexport function AccessRequestApprovalModal({\r\n open,\r\n onClose,\r\n onConfirm,\r\n request,\r\n action,\r\n processing,\r\n}: AccessRequestApprovalModalProps): ReactElement | null {\r\n const { t } = useTranslation('admin');\r\n const [notes, setNotes] = useState('');\r\n const [assignmentMode, setAssignmentMode] = useState<AssignmentMode>('group');\r\n const [selectedRoleId, setSelectedRoleId] = useState('');\r\n const [selectedGroupId, setSelectedGroupId] = useState('');\r\n const [roles, setRoles] = useState<RoleListDto[]>([]);\r\n const [groups, setGroups] = useState<TenantGroupDto[]>([]);\r\n const [loadingRoles, setLoadingRoles] = useState(false);\r\n const [loadingGroups, setLoadingGroups] = useState(false);\r\n\r\n const isDeny = action === 'deny';\r\n const isApprove = action === 'approve';\r\n\r\n // Load groups for the tenant when modal opens in approve mode\r\n useEffect(() => {\r\n if (!open || !isApprove) return;\r\n\r\n setLoadingGroups(true);\r\n adminApi.tenants.getGroups(request.tenantId)\r\n .then((groups) => {\r\n setGroups(groups.filter(g => g.isActive));\r\n })\r\n .catch(() => {\r\n setGroups([]);\r\n })\r\n .finally(() => {\r\n setLoadingGroups(false);\r\n });\r\n }, [open, isApprove, request.tenantId]);\r\n\r\n // Load roles when switching to role mode or on initial open\r\n useEffect(() => {\r\n if (!open || !isApprove || assignmentMode !== 'role') return;\r\n if (roles.length > 0) return; // Already loaded\r\n\r\n setLoadingRoles(true);\r\n adminApi.roles.getByApplication(request.applicationId)\r\n .then((roles) => {\r\n setRoles(roles);\r\n })\r\n .catch(() => {\r\n setRoles([]);\r\n })\r\n .finally(() => {\r\n setLoadingRoles(false);\r\n });\r\n }, [open, isApprove, assignmentMode, request.applicationId, roles.length]);\r\n\r\n // Reset state when modal closes\r\n useEffect(() => {\r\n if (!open) {\r\n setNotes('');\r\n setAssignmentMode('group');\r\n setSelectedRoleId('');\r\n setSelectedGroupId('');\r\n setRoles([]);\r\n setGroups([]);\r\n }\r\n }, [open]);\r\n\r\n const handleSubmit = async () => {\r\n if (isDeny) {\r\n await onConfirm({ notes: notes || undefined });\r\n return;\r\n }\r\n\r\n await onConfirm({\r\n roleId: assignmentMode === 'role' ? selectedRoleId : undefined,\r\n groupId: assignmentMode === 'group' ? selectedGroupId : undefined,\r\n notes: notes || undefined,\r\n });\r\n };\r\n\r\n if (!open) return null;\r\n\r\n const canSubmit = isApprove\r\n ? ((assignmentMode === 'role' && selectedRoleId !== '') ||\r\n (assignmentMode === 'group' && selectedGroupId !== '')) && !processing\r\n : notes !== '' && !processing;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-[var(--radius-card)] p-6 max-w-md w-full max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"text-lg font-semibold\">{t(`accessRequests.modal.${action}Title`)}</h3>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 hover:bg-[var(--bg-hover)] rounded\"\r\n disabled={processing}\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div>\r\n <div className=\"font-medium mb-1\">{t('accessRequests.modal.user')}</div>\r\n <div>{request.userFullName} ({request.userEmail})</div>\r\n </div>\r\n\r\n <div>\r\n <div className=\"font-medium mb-1\">{t('accessRequests.modal.application')}</div>\r\n <div>{request.applicationLabel}</div>\r\n </div>\r\n\r\n {request.reason && (\r\n <div>\r\n <div className=\"font-medium mb-1\">{t('accessRequests.modal.userReason')}</div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">{request.reason}</div>\r\n </div>\r\n )}\r\n\r\n {isApprove && (\r\n <>\r\n {/* Assignment mode toggle */}\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t('accessRequests.modal.assignmentMethod')}\r\n <span className=\"text-[var(--error-text)] ml-1\">*</span>\r\n </label>\r\n <div className=\"grid grid-cols-2 gap-2\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setAssignmentMode('group')}\r\n className={`flex items-center gap-2 px-3 py-2.5 rounded-[var(--radius-input)] border text-sm font-medium transition-colors ${\r\n assignmentMode === 'group'\r\n ? 'border-[var(--color-accent-500)] bg-[var(--color-accent-50)] text-[var(--color-accent-700)]'\r\n : 'border-[var(--border-color)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n >\r\n <Users className=\"w-4 h-4\" />\r\n {t('accessRequests.modal.addToGroup')}\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={() => setAssignmentMode('role')}\r\n className={`flex items-center gap-2 px-3 py-2.5 rounded-[var(--radius-input)] border text-sm font-medium transition-colors ${\r\n assignmentMode === 'role'\r\n ? 'border-[var(--color-accent-500)] bg-[var(--color-accent-50)] text-[var(--color-accent-700)]'\r\n : 'border-[var(--border-color)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n >\r\n <Shield className=\"w-4 h-4\" />\r\n {t('accessRequests.modal.assignRole')}\r\n </button>\r\n </div>\r\n <p className=\"text-xs text-[var(--text-secondary)] mt-1.5\">\r\n {assignmentMode === 'group'\r\n ? t('accessRequests.modal.groupHint')\r\n : t('accessRequests.modal.roleHint')}\r\n </p>\r\n </div>\r\n\r\n {/* Group selector */}\r\n {assignmentMode === 'group' && (\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t('accessRequests.modal.selectGroup')}\r\n <span className=\"text-[var(--error-text)] ml-1\">*</span>\r\n </label>\r\n {loadingGroups && (\r\n <div className=\"flex items-center gap-2 text-sm text-[var(--text-secondary)]\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n {t('accessRequests.modal.loadingGroups')}\r\n </div>\r\n )}\r\n {!loadingGroups && groups.length === 0 && (\r\n <div className=\"text-sm text-[var(--warning-text)]\">\r\n {t('accessRequests.modal.noGroupsAvailable')}\r\n </div>\r\n )}\r\n {!loadingGroups && groups.length > 0 && (\r\n <select\r\n value={selectedGroupId}\r\n onChange={(e) => setSelectedGroupId(e.target.value)}\r\n className=\"w-full px-3 py-2 border rounded-[var(--radius-input)] bg-[var(--bg-primary)] border-[var(--border-color)]\"\r\n >\r\n <option value=\"\">{t('accessRequests.modal.selectGroupPlaceholder')}</option>\r\n {groups.map((group) => (\r\n <option key={group.groupId} value={group.groupId}>\r\n {group.name} ({group.memberCount} {t('accessRequests.modal.members')})\r\n </option>\r\n ))}\r\n </select>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Role selector */}\r\n {assignmentMode === 'role' && (\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t('accessRequests.modal.selectRole')}\r\n <span className=\"text-[var(--error-text)] ml-1\">*</span>\r\n </label>\r\n {loadingRoles && (\r\n <div className=\"flex items-center gap-2 text-sm text-[var(--text-secondary)]\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n {t('accessRequests.modal.loadingRoles')}\r\n </div>\r\n )}\r\n {!loadingRoles && roles.length === 0 && (\r\n <div className=\"text-sm text-[var(--warning-text)]\">\r\n {t('accessRequests.modal.noRolesAvailable')}\r\n </div>\r\n )}\r\n {!loadingRoles && roles.length > 0 && (\r\n <select\r\n value={selectedRoleId}\r\n onChange={(e) => setSelectedRoleId(e.target.value)}\r\n className=\"w-full px-3 py-2 border rounded-[var(--radius-input)] bg-[var(--bg-primary)] border-[var(--border-color)]\"\r\n >\r\n <option value=\"\">{t('accessRequests.modal.selectRolePlaceholder')}</option>\r\n {roles.map((role) => (\r\n <option key={role.id} value={role.id}>\r\n {role.name} ({role.shortName})\r\n </option>\r\n ))}\r\n </select>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n\r\n <div>\r\n <label className=\"block font-medium mb-2\">\r\n {t(`accessRequests.modal.${action}Notes`)}\r\n {isDeny && <span className=\"text-[var(--error-text)] ml-1\">*</span>}\r\n </label>\r\n <textarea\r\n value={notes}\r\n onChange={(e) => setNotes(e.target.value)}\r\n className=\"w-full px-3 py-2 border rounded-[var(--radius-input)] bg-[var(--bg-primary)] border-[var(--border-color)]\"\r\n rows={3}\r\n placeholder={t(`accessRequests.modal.${action}NotesPlaceholder`)}\r\n required={isDeny}\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-2\">\r\n <button\r\n onClick={onClose}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] border border-[var(--border-color)] hover:bg-[var(--bg-hover)]\"\r\n disabled={processing}\r\n >\r\n {t('common:cancel')}\r\n </button>\r\n <button\r\n onClick={handleSubmit}\r\n disabled={!canSubmit}\r\n className={`px-4 py-2 rounded-[var(--radius-button)] text-white disabled:opacity-50 flex items-center gap-2 ${\r\n isDeny ? 'bg-[var(--error-text)]' : 'bg-[var(--success-text)]'\r\n }`}\r\n >\r\n {processing && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t(`accessRequests.actions.${action}`)}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { accessRequestsApi } from '@/services/api/accessRequestsApi';\r\n\r\nexport function useAccessRequestActions(onSuccess?: () => void): {\n approve: (requestId: string, data: { roleId?: string; groupId?: string; notes?: string }) => Promise<void>;\n deny: (requestId: string, notes: string) => Promise<void>;\n processing: boolean;\n error: string | null;\n} {\r\n const [processing, setProcessing] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const approve = async (requestId: string, data: { roleId?: string; groupId?: string; notes?: string }) => {\r\n setProcessing(true);\r\n setError(null);\r\n try {\r\n await accessRequestsApi.approveRequest(requestId, data);\r\n onSuccess?.();\r\n } catch (err: unknown) {\r\n setError(err instanceof Error ? err.message : 'Failed to approve request');\r\n throw err;\r\n } finally {\r\n setProcessing(false);\r\n }\r\n };\r\n\r\n const deny = async (requestId: string, notes: string) => {\r\n setProcessing(true);\r\n setError(null);\r\n try {\r\n await accessRequestsApi.denyRequest(requestId, notes);\r\n onSuccess?.();\r\n } catch (err: unknown) {\r\n setError(err instanceof Error ? err.message : 'Failed to deny request');\r\n throw err;\r\n } finally {\r\n setProcessing(false);\r\n }\r\n };\r\n\r\n return { approve, deny, processing, error };\r\n}\r\n","import { useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { DataTable } from '@/components/ui/DataTable';\r\nimport type { DataTableColumn } from '@/components/ui/DataTable';\r\nimport { AccessRequestStatusBadge } from './AccessRequestStatusBadge';\r\nimport { AccessRequestApprovalModal } from './AccessRequestApprovalModal';\r\nimport { CheckCircle, XCircle, Loader2 } from 'lucide-react';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\nimport { useAccessRequestActions } from '@/hooks/useAccessRequestActions';\r\n\r\ninterface AccessRequestsListTabProps {\r\n readonly requests: AccessRequest[];\r\n readonly loading: boolean;\r\n readonly onReload: () => void;\r\n readonly showTenantColumn?: boolean;\r\n}\r\n\r\nexport function AccessRequestsListTab({ requests, loading, onReload, showTenantColumn = false }: AccessRequestsListTabProps): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const [selectedRequest, setSelectedRequest] = useState<AccessRequest | null>(null);\r\n const [modalAction, setModalAction] = useState<'approve' | 'deny' | null>(null);\r\n\r\n const { approve, deny, processing } = useAccessRequestActions(() => {\r\n setSelectedRequest(null);\r\n setModalAction(null);\r\n onReload();\r\n });\r\n\r\n const handleAction = (request: AccessRequest, action: 'approve' | 'deny') => {\r\n setSelectedRequest(request);\r\n setModalAction(action);\r\n };\r\n\r\n const handleConfirm = async (data: { roleId?: string; groupId?: string; notes?: string }) => {\r\n if (!selectedRequest) return;\r\n\r\n if (modalAction === 'approve') {\r\n await approve(selectedRequest.id, data);\r\n } else if (modalAction === 'deny' && data.notes) {\r\n await deny(selectedRequest.id, data.notes);\r\n }\r\n };\r\n\r\n const columns: DataTableColumn<AccessRequest>[] = [\r\n {\r\n key: 'userFullName',\r\n label: t('accessRequests.table.user'),\r\n render: (req) => (\r\n <div>\r\n <div className=\"font-medium\">{req.userFullName}</div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">{req.userEmail}</div>\r\n </div>\r\n ),\r\n },\r\n ...(showTenantColumn ? [{\r\n key: 'tenantName' as const,\r\n label: t('accessRequests.table.tenant'),\r\n render: (req: AccessRequest) => req.tenantName,\r\n }] : []),\r\n {\r\n key: 'applicationLabel',\r\n label: t('accessRequests.table.application'),\r\n },\r\n {\r\n key: 'reason',\r\n label: t('accessRequests.table.reason'),\r\n render: (req) => req.reason || '-',\r\n },\r\n {\r\n key: 'requestedAt',\r\n label: t('accessRequests.table.requestedAt'),\r\n render: (req) => new Date(req.requestedAt).toLocaleString(),\r\n },\r\n {\r\n key: 'status',\r\n label: t('accessRequests.table.status'),\r\n render: (req) => <AccessRequestStatusBadge status={req.status} />,\r\n },\r\n {\r\n key: 'actions',\r\n label: t('common:actionsColumn'),\r\n align: 'right',\r\n render: (req) => (\r\n req.status === 'Pending' ? (\r\n <div className=\"flex gap-2\">\r\n <button\r\n onClick={() => handleAction(req, 'approve')}\r\n className=\"p-1 rounded hover:bg-[var(--success-bg)] text-[var(--success-text)]\"\r\n title={t('accessRequests.actions.approve')}\r\n >\r\n <CheckCircle className=\"w-4 h-4\" />\r\n </button>\r\n <button\r\n onClick={() => handleAction(req, 'deny')}\r\n className=\"p-1 rounded hover:bg-[var(--error-bg)] text-[var(--error-text)]\"\r\n title={t('accessRequests.actions.deny')}\r\n >\r\n <XCircle className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n ) : (\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {req.processedBy}\r\n </div>\r\n )\r\n ),\r\n },\r\n ];\r\n\r\n if (loading) {\r\n return (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-4\">\r\n <DataTable\r\n data={requests}\r\n columns={columns}\r\n searchable\r\n searchPlaceholder={t('accessRequests.search')}\r\n getRowKey={(req) => req.id}\r\n emptyMessage={t('accessRequests.empty')}\r\n />\r\n\r\n {selectedRequest && modalAction && (\r\n <AccessRequestApprovalModal\r\n open={true}\r\n onClose={() => {\r\n setSelectedRequest(null);\r\n setModalAction(null);\r\n }}\r\n onConfirm={handleConfirm}\r\n request={selectedRequest}\r\n action={modalAction}\r\n processing={processing}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { accessRequestsApi } from '@/services/api/accessRequestsApi';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\n\r\nexport function useAccessRequests(type: 'application' | 'tenant', id: string): {\n requests: AccessRequest[];\n loading: boolean;\n error: string | null;\n loadRequests: (status?: string) => Promise<void>;\n} {\r\n const [requests, setRequests] = useState<AccessRequest[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const loadRequests = async (status?: string) => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const data = type === 'application'\r\n ? await accessRequestsApi.getRequestsByApplication(id, status)\r\n : await accessRequestsApi.getRequestsByTenant(id, status);\r\n setRequests(Array.isArray(data) ? data : []);\r\n } catch (err: any) {\r\n setError(err.message || 'Failed to load requests');\r\n setRequests([]); // Reset to empty array on error\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n return { requests, loading, error, loadRequests };\r\n}\r\n"],"names":["AccessRequestApprovalModal","open","onClose","onConfirm","request","action","processing","t","useTranslation","notes","setNotes","useState","assignmentMode","setAssignmentMode","selectedRoleId","setSelectedRoleId","selectedGroupId","setSelectedGroupId","roles","setRoles","groups","setGroups","loadingRoles","setLoadingRoles","loadingGroups","setLoadingGroups","isDeny","isApprove","useEffect","adminApi","g","handleSubmit","canSubmit","jsxs","jsx","X","Fragment","Users","Shield","Loader2","e","group","role","useAccessRequestActions","onSuccess","setProcessing","error","setError","requestId","data","accessRequestsApi","err","AccessRequestsListTab","requests","loading","onReload","showTenantColumn","selectedRequest","setSelectedRequest","modalAction","setModalAction","approve","deny","handleAction","handleConfirm","columns","req","AccessRequestStatusBadge","CheckCircle","XCircle","DataTable","useAccessRequests","type","id","setRequests","setLoading","status"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const e=require("react"),l=require("./accessRequestsApi-
|
|
2
|
-
//# sourceMappingURL=useUserAccessRequests-
|
|
1
|
+
"use strict";const e=require("react"),l=require("./accessRequestsApi-B-4TJ5_U.js");function i(){const[r,t]=e.useState([]),[n,u]=e.useState(!1),[o,a]=e.useState(null),c=async()=>{u(!0),a(null);try{const s=await l.accessRequestsApi.getMyRequests();t(s||[])}catch(s){a(s.message||"Failed to load requests"),t([])}finally{u(!1)}};return e.useEffect(()=>{c()},[]),{requests:r,loading:n,error:o,reload:c}}exports.useUserAccessRequests=i;
|
|
2
|
+
//# sourceMappingURL=useUserAccessRequests-BYbmG4c7.js.map
|
package/dist/chunks/{useUserAccessRequests-DjPQenC2.js.map → useUserAccessRequests-BYbmG4c7.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserAccessRequests-
|
|
1
|
+
{"version":3,"file":"useUserAccessRequests-BYbmG4c7.js","sources":["../../src/hooks/useUserAccessRequests.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport { accessRequestsApi } from '@/services/api/accessRequestsApi';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\n\r\nexport function useUserAccessRequests(): {\n requests: AccessRequest[];\n loading: boolean;\n error: string | null;\n reload: () => Promise<void>;\n} {\r\n const [requests, setRequests] = useState<AccessRequest[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const loadRequests = async () => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const data = await accessRequestsApi.getMyRequests();\r\n setRequests(data || []);\r\n } catch (err: any) {\r\n setError(err.message || 'Failed to load requests');\r\n setRequests([]); // Reset to empty array on error\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n loadRequests();\r\n }, []);\r\n\r\n return { requests, loading, error, reload: loadRequests };\r\n}\r\n"],"names":["useUserAccessRequests","requests","setRequests","useState","loading","setLoading","error","setError","loadRequests","data","accessRequestsApi","err","useEffect"],"mappings":"mFAIO,SAASA,GAKd,CACA,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAA0B,CAAA,CAAE,EACtD,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EACtC,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAwB,IAAI,EAEhDK,EAAe,SAAY,CAC/BH,EAAW,EAAI,EACfE,EAAS,IAAI,EACb,GAAI,CACF,MAAME,EAAO,MAAMC,EAAAA,kBAAkB,cAAA,EACrCR,EAAYO,GAAQ,EAAE,CACxB,OAASE,EAAU,CACjBJ,EAASI,EAAI,SAAW,yBAAyB,EACjDT,EAAY,CAAA,CAAE,CAChB,QAAA,CACEG,EAAW,EAAK,CAClB,CACF,EAEAO,OAAAA,EAAAA,UAAU,IAAM,CACdJ,EAAA,CACF,EAAG,CAAA,CAAE,EAEE,CAAE,SAAAP,EAAU,QAAAG,EAAS,MAAAE,EAAO,OAAQE,CAAA,CAC7C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState as s, useEffect as l } from "react";
|
|
2
|
-
import { a as i } from "./accessRequestsApi-
|
|
2
|
+
import { a as i } from "./accessRequestsApi-DZSfThpd.js";
|
|
3
3
|
function q() {
|
|
4
4
|
const [u, t] = s([]), [c, a] = s(!1), [n, r] = s(null), o = async () => {
|
|
5
5
|
a(!0), r(null);
|
|
@@ -19,4 +19,4 @@ function q() {
|
|
|
19
19
|
export {
|
|
20
20
|
q as u
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=useUserAccessRequests-
|
|
22
|
+
//# sourceMappingURL=useUserAccessRequests-CylKxRN6.js.map
|
package/dist/chunks/{useUserAccessRequests-BB6FHW14.js.map → useUserAccessRequests-CylKxRN6.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserAccessRequests-
|
|
1
|
+
{"version":3,"file":"useUserAccessRequests-CylKxRN6.js","sources":["../../src/hooks/useUserAccessRequests.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport { accessRequestsApi } from '@/services/api/accessRequestsApi';\r\nimport type { AccessRequest } from '@/services/api/accessRequestsApi';\r\n\r\nexport function useUserAccessRequests(): {\n requests: AccessRequest[];\n loading: boolean;\n error: string | null;\n reload: () => Promise<void>;\n} {\r\n const [requests, setRequests] = useState<AccessRequest[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const loadRequests = async () => {\r\n setLoading(true);\r\n setError(null);\r\n try {\r\n const data = await accessRequestsApi.getMyRequests();\r\n setRequests(data || []);\r\n } catch (err: any) {\r\n setError(err.message || 'Failed to load requests');\r\n setRequests([]); // Reset to empty array on error\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n loadRequests();\r\n }, []);\r\n\r\n return { requests, loading, error, reload: loadRequests };\r\n}\r\n"],"names":["useUserAccessRequests","requests","setRequests","useState","loading","setLoading","error","setError","loadRequests","data","accessRequestsApi","err","useEffect"],"mappings":";;AAIO,SAASA,IAKd;AACA,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAA0B,CAAA,CAAE,GACtD,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAK,GACtC,CAACG,GAAOC,CAAQ,IAAIJ,EAAwB,IAAI,GAEhDK,IAAe,YAAY;AAC/B,IAAAH,EAAW,EAAI,GACfE,EAAS,IAAI;AACb,QAAI;AACF,YAAME,IAAO,MAAMC,EAAkB,cAAA;AACrC,MAAAR,EAAYO,KAAQ,EAAE;AAAA,IACxB,SAASE,GAAU;AACjB,MAAAJ,EAASI,EAAI,WAAW,yBAAyB,GACjDT,EAAY,CAAA,CAAE;AAAA,IAChB,UAAA;AACE,MAAAG,EAAW,EAAK;AAAA,IAClB;AAAA,EACF;AAEA,SAAAO,EAAU,MAAM;AACd,IAAAJ,EAAA;AAAA,EACF,GAAG,CAAA,CAAE,GAEE,EAAE,UAAAP,GAAU,SAAAG,GAAS,OAAAE,GAAO,QAAQE,EAAA;AAC7C;"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hook to manage collapse/expand state for hierarchical lists.
|
|
3
|
-
* Used by permission matrix components to track collapsed applications.
|
|
3
|
+
* Used by permission matrix components to track collapsed contexts and applications.
|
|
4
4
|
*/
|
|
5
5
|
export declare function useCollapsibleState(): {
|
|
6
|
+
collapsedContexts: Set<string>;
|
|
6
7
|
collapsedApps: Set<string>;
|
|
8
|
+
toggleContext: (contextKey: string) => void;
|
|
7
9
|
toggleApp: (appKey: string) => void;
|
|
8
10
|
expandAll: () => void;
|
|
9
|
-
collapseAll: (apps: string[]) => void;
|
|
11
|
+
collapseAll: (contexts: string[], apps: string[]) => void;
|
|
12
|
+
isContextCollapsed: (contextKey: string) => boolean;
|
|
10
13
|
isAppCollapsed: (appKey: string) => boolean;
|
|
11
14
|
};
|
|
12
15
|
//# sourceMappingURL=useCollapsibleState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCollapsibleState.d.ts","sourceRoot":"","sources":["../../src/hooks/useCollapsibleState.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"useCollapsibleState.d.ts","sourceRoot":"","sources":["../../src/hooks/useCollapsibleState.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1D,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IACpD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C,CAwDA"}
|
package/dist/i18n/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/i18n/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/i18n/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAqM3B,eAAO,MAAM,SAAS,eAAc,CAAC;AAGrC,eAAO,MAAM,cAAc,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAW/D,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/main.d.ts
CHANGED
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.tsx"],"names":[],"mappings":"AAGA,OAAO,aAAa,CAAA;AAEpB,OAAO,0CAA0C,CAAA"}
|
package/dist/smartstack.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/index-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/index-IgLVXPg8.js"),i=require("i18next");exports.ActivityTimeline=e.ActivityTimeline;exports.AdminSidebar=e.AdminSidebar;exports.AppHeader=e.AppHeader;exports.AppLayout=e.AppLayout;exports.AppSwitcher=e.AppSwitcher;exports.AuthLayout=e.AuthLayout;exports.AuthProvider=e.AuthProvider;exports.Breadcrumb=e.Breadcrumb;exports.CreateTicketButton=e.CreateTicketButton;exports.DataTable=e.DataTable;exports.DataView=e.DataView;exports.DocPanelProvider=e.DocPanelProvider;exports.DocsLayout=e.DocsLayout;exports.DynamicRouter=e.DynamicRouter;exports.EntityCard=e.EntityCard;exports.ErrorFallback=e.ErrorFallback;exports.ExtendablePage=e.ExtendablePage;exports.ExtensionProvider=e.ExtensionProvider;exports.FavoritesBar=e.FavoritesBar;exports.FavoritesModal=e.FavoritesModal;exports.FavoritesProvider=e.FavoritesProvider;exports.FeatureGate=e.FeatureGate;exports.FeatureRouteGuard=e.FeatureRouteGuard;exports.Fill=e.Fill;exports.Footer=e.Footer;exports.GlobalErrorBoundary=e.GlobalErrorBoundary;exports.Header=e.Header;exports.KanbanBoard=e.KanbanBoard;exports.LanguageSwitcher=e.LanguageSwitcher;exports.LicenseActivationDialog=e.LicenseActivationDialog;exports.LicenseContentBanner=e.LicenseContentBanner;exports.LicenseGuard=e.LicenseGuard;exports.LicenseProvider=e.LicenseProvider;exports.LicenseStatusBadge=e.LicenseStatusBadge;exports.ModuleSidebar=e.ModuleSidebar;exports.NotificationBell=e.NotificationBell;exports.PAGE_KEYS=e.PAGE_KEYS;exports.PageHeader=e.PageHeader;exports.PageRegistry=e.PageRegistry;exports.PermissionMatrix=e.PermissionMatrix;exports.ProtectedRoute=e.ProtectedRoute;exports.PublicLayout=e.PublicLayout;exports.RouteErrorBoundary=e.RouteErrorBoundary;exports.SessionProvider=e.SessionProvider;exports.SessionWarningModal=e.SessionWarningModal;exports.SidebarProvider=e.SidebarProvider;exports.SignalRProvider=e.SignalRProvider;exports.SlaBadge=e.SlaBadge;exports.Slot=e.Slot;exports.SlotFillProvider=e.SlotFillProvider;exports.SmartStackProvider=e.SmartStackProvider;exports.ThemeCustomizer=e.ThemeCustomizer;exports.ThemeProvider=e.ThemeProvider;exports.ThemeSwitcher=e.ThemeSwitcher;exports.TicketConversation=e.TicketConversation;exports.TicketDetailView=e.TicketDetailView;exports.TicketSidebar=e.TicketSidebar;exports.TicketsListView=e.TicketsListView;exports.Tooltip=e.Tooltip;exports.UnderDevelopment=e.UnderDevelopment;exports.UserSidebar=e.UserSidebar;exports.WILDCARD_PERMISSION=e.WILDCARD_PERMISSION;exports.api=e.api;exports.apiClient=e.apiClient;exports.createSlotFill=e.createSlotFill;exports.hasFullAccess=e.hasFullAccess;exports.hasPermission=e.hasPermission;exports.hasRouteAccess=e.hasRouteAccess;exports.logService=e.logService;exports.matchesWildcard=e.matchesWildcard;exports.useActivePage=e.useActivePage;exports.useAuth=e.useAuth;exports.useClientContext=e.useClientContext;exports.useCollapsibleState=e.useCollapsibleState;exports.useDocPanel=e.useDocPanel;exports.useExtensions=e.useExtensions;exports.useFavoriteModules=e.useFavorites;exports.useFavorites=e.useFavorites;exports.useFormFieldExtensions=e.useFormFieldExtensions;exports.useHasExtension=e.useHasExtension;exports.useLicense=e.useLicense;exports.usePageOverride=e.usePageOverride;exports.usePageTracking=e.usePageTracking;exports.usePermissionMatrix=e.usePermissionMatrix;exports.usePermissionSync=e.usePermissionSync;exports.useRouteConfig=e.useRouteConfig;exports.useSessionMonitor=e.useSessionMonitor;exports.useSidebar=e.useSidebar;exports.useSignalR=e.useSignalR;exports.useSignalRContext=e.useSignalRContext;exports.useSlotFill=e.useSlotFill;exports.useSlotHasContent=e.useSlotHasContent;exports.useTableColumnExtensions=e.useTableColumnExtensions;exports.useTheme=e.useTheme;exports.useTicketSignalR=e.useTicketSignalR;exports.useUserPermissions=e.useUserPermissions;exports.withPageOverride=e.withPageOverride;exports.i18n=i;
|
|
2
2
|
//# sourceMappingURL=smartstack.cjs.map
|
package/dist/smartstack.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bb as e, aV as i, aU as r, aK as t, aR as o, aL as n, av as u, B as l, ba as d, D as c, aO as b, aA as S, aM as P, b5 as v, H as g, a_ as m, as as F, af as h, b8 as T, b9 as C, ax as A, b2 as L, b7 as p, al as x, aT as E, aY as R, aS as y, aP as D, ac as B, Q as k, b3 as M, b6 as w, aw as f, O as G, aX as H, a$ as O, at as I, C as U, ap as V, aQ as W, b4 as _, aN as K, aZ as N, b0 as j, b1 as z, ay as J, aC as Q, bc as Y, S as $, ak as q, ae as X, ab as Z, au as aa, T as sa, bd as ea, $ as ia, be as ra, _ as ta, G as oa, F as na, aW as ua, bi as la, i as da, j as ca, ao as ba, x as Sa, bf as Pa, bg as va, l as ga, bh as ma, ar as Fa, o as ha, aD as Ta, s as Ca, aB as Aa, ag as La, a9 as pa, a9 as xa, ai as Ea, aj as Ra, L as ya, ah as Da, aE as Ba, y as ka, aF as Ma, aJ as wa, aG as fa, az as Ga, aH as Ha, J as Oa, am as Ia, an as Ua, m as Va, aa as Wa, aI as _a, r as Ka, aq as Na } from "./chunks/index-
|
|
1
|
+
import { bb as e, aV as i, aU as r, aK as t, aR as o, aL as n, av as u, B as l, ba as d, D as c, aO as b, aA as S, aM as P, b5 as v, H as g, a_ as m, as as F, af as h, b8 as T, b9 as C, ax as A, b2 as L, b7 as p, al as x, aT as E, aY as R, aS as y, aP as D, ac as B, Q as k, b3 as M, b6 as w, aw as f, O as G, aX as H, a$ as O, at as I, C as U, ap as V, aQ as W, b4 as _, aN as K, aZ as N, b0 as j, b1 as z, ay as J, aC as Q, bc as Y, S as $, ak as q, ae as X, ab as Z, au as aa, T as sa, bd as ea, $ as ia, be as ra, _ as ta, G as oa, F as na, aW as ua, bi as la, i as da, j as ca, ao as ba, x as Sa, bf as Pa, bg as va, l as ga, bh as ma, ar as Fa, o as ha, aD as Ta, s as Ca, aB as Aa, ag as La, a9 as pa, a9 as xa, ai as Ea, aj as Ra, L as ya, ah as Da, aE as Ba, y as ka, aF as Ma, aJ as wa, aG as fa, az as Ga, aH as Ha, J as Oa, am as Ia, an as Ua, m as Va, aa as Wa, aI as _a, r as Ka, aq as Na } from "./chunks/index-lpIzhufD.js";
|
|
2
2
|
import { default as za } from "i18next";
|
|
3
3
|
export {
|
|
4
4
|
e as ActivityTimeline,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAiBjF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAc1F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAE5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAiBjF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAc1F;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAE5D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CA8BvF"}
|