@atlashub/smartstack 3.21.0 → 3.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js → AgentSkillsPage-BWQSCYl-.js} +2 -2
  2. package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js.map → AgentSkillsPage-BWQSCYl-.js.map} +1 -1
  3. package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js → AgentSkillsPage-IQcMnBaD.js} +2 -2
  4. package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js.map → AgentSkillsPage-IQcMnBaD.js.map} +1 -1
  5. package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js → AgentWorkloadPage-DqrjkvWL.js} +2 -2
  6. package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js.map → AgentWorkloadPage-DqrjkvWL.js.map} +1 -1
  7. package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js → AgentWorkloadPage-w-HiyFYP.js} +2 -2
  8. package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js.map → AgentWorkloadPage-w-HiyFYP.js.map} +1 -1
  9. package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js → ApiCatalogDetailPage-D3L8Yf4G.js} +3 -3
  10. package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js.map → ApiCatalogDetailPage-D3L8Yf4G.js.map} +1 -1
  11. package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js → ApiCatalogDetailPage-MPT3Kz6H.js} +2 -2
  12. package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js.map → ApiCatalogDetailPage-MPT3Kz6H.js.map} +1 -1
  13. package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js → ApiCatalogPage-D4Hg3uiS.js} +2 -2
  14. package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js.map → ApiCatalogPage-D4Hg3uiS.js.map} +1 -1
  15. package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js → ApiCatalogPage-DRg5Cz0r.js} +2 -2
  16. package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js.map → ApiCatalogPage-DRg5Cz0r.js.map} +1 -1
  17. package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js → ApplicationDetailPage-Caizuyn2.js} +2 -2
  18. package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js.map → ApplicationDetailPage-Caizuyn2.js.map} +1 -1
  19. package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js → ApplicationDetailPage-CuCW6aMB.js} +4 -4
  20. package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js.map → ApplicationDetailPage-CuCW6aMB.js.map} +1 -1
  21. package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js → ApplicationsDashboardPage-B2MW8-Kc.js} +2 -2
  22. package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js.map → ApplicationsDashboardPage-B2MW8-Kc.js.map} +1 -1
  23. package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js → ApplicationsDashboardPage-BDIjFIYZ.js} +3 -3
  24. package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js.map → ApplicationsDashboardPage-BDIjFIYZ.js.map} +1 -1
  25. package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js → ApplicationsGridPage-DV-FihKj.js} +2 -2
  26. package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js.map → ApplicationsGridPage-DV-FihKj.js.map} +1 -1
  27. package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js → ApplicationsGridPage-DXsTfXPI.js} +2 -2
  28. package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js.map → ApplicationsGridPage-DXsTfXPI.js.map} +1 -1
  29. package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js → ApplicationsListPage--CGkyBuJ.js} +2 -2
  30. package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js.map → ApplicationsListPage--CGkyBuJ.js.map} +1 -1
  31. package/dist/chunks/{ApplicationsListPage-C91v2rZt.js → ApplicationsListPage-JUX823bh.js} +2 -2
  32. package/dist/chunks/{ApplicationsListPage-C91v2rZt.js.map → ApplicationsListPage-JUX823bh.js.map} +1 -1
  33. package/dist/chunks/{ApplicationsPage-BCbgotIx.js → ApplicationsPage-6zgFye6w.js} +2 -2
  34. package/dist/chunks/{ApplicationsPage-BCbgotIx.js.map → ApplicationsPage-6zgFye6w.js.map} +1 -1
  35. package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js → ApplicationsPage-CQPuuiO6.js} +4 -4
  36. package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js.map → ApplicationsPage-CQPuuiO6.js.map} +1 -1
  37. package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js → AssignmentRulesPage-CFffeEbo.js} +2 -2
  38. package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js.map → AssignmentRulesPage-CFffeEbo.js.map} +1 -1
  39. package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js → AssignmentRulesPage-D78UeUId.js} +2 -2
  40. package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js.map → AssignmentRulesPage-D78UeUId.js.map} +1 -1
  41. package/dist/chunks/{AssignmentsPage-DmfBYQAD.js → AssignmentsPage-Cww2ifZF.js} +2 -2
  42. package/dist/chunks/{AssignmentsPage-DmfBYQAD.js.map → AssignmentsPage-Cww2ifZF.js.map} +1 -1
  43. package/dist/chunks/{AssignmentsPage-sRCCBmRc.js → AssignmentsPage-DE_QS2LO.js} +2 -2
  44. package/dist/chunks/{AssignmentsPage-sRCCBmRc.js.map → AssignmentsPage-DE_QS2LO.js.map} +1 -1
  45. package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js → AuthCallbackPage-CA2nO6DG.js} +2 -2
  46. package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js.map → AuthCallbackPage-CA2nO6DG.js.map} +1 -1
  47. package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js → AuthCallbackPage-CDUAoX-N.js} +2 -2
  48. package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js.map → AuthCallbackPage-CDUAoX-N.js.map} +1 -1
  49. package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js → ConfirmEmailPage-BqsILAYH.js} +2 -2
  50. package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js.map → ConfirmEmailPage-BqsILAYH.js.map} +1 -1
  51. package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js → ConfirmEmailPage-INeHCuMB.js} +2 -2
  52. package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js.map → ConfirmEmailPage-INeHCuMB.js.map} +1 -1
  53. package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js → CreateSupportTicketPage-BWeuV2aU.js} +2 -2
  54. package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js.map → CreateSupportTicketPage-BWeuV2aU.js.map} +1 -1
  55. package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js → CreateSupportTicketPage-OBwF4v7b.js} +2 -2
  56. package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js.map → CreateSupportTicketPage-OBwF4v7b.js.map} +1 -1
  57. package/dist/chunks/{DashboardPage-CUZ80NGV.js → DashboardPage-CKHqWrdS.js} +3 -3
  58. package/dist/chunks/{DashboardPage-CUZ80NGV.js.map → DashboardPage-CKHqWrdS.js.map} +1 -1
  59. package/dist/chunks/{DashboardPage-CaNOAstg.js → DashboardPage-COmc9b__.js} +3 -3
  60. package/dist/chunks/{DashboardPage-CaNOAstg.js.map → DashboardPage-COmc9b__.js.map} +1 -1
  61. package/dist/chunks/{DashboardPage-B48_rQFi.js → DashboardPage-CfKZHiSj.js} +2 -2
  62. package/dist/chunks/{DashboardPage-B48_rQFi.js.map → DashboardPage-CfKZHiSj.js.map} +1 -1
  63. package/dist/chunks/{DashboardPage-CUZV1J9t.js → DashboardPage-CwEZZ3jx.js} +2 -2
  64. package/dist/chunks/{DashboardPage-CUZV1J9t.js.map → DashboardPage-CwEZZ3jx.js.map} +1 -1
  65. package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js → EscalationConfigPage--7lgZ0kJ.js} +2 -2
  66. package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js.map → EscalationConfigPage--7lgZ0kJ.js.map} +1 -1
  67. package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js → EscalationConfigPage-DPyiBcqV.js} +2 -2
  68. package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js.map → EscalationConfigPage-DPyiBcqV.js.map} +1 -1
  69. package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js → ForceChangePasswordPage-BE-6umub.js} +2 -2
  70. package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js.map → ForceChangePasswordPage-BE-6umub.js.map} +1 -1
  71. package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js → ForceChangePasswordPage-CnsYoWmV.js} +2 -2
  72. package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js.map → ForceChangePasswordPage-CnsYoWmV.js.map} +1 -1
  73. package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js → ForgotPasswordPage-CSq4DnFF.js} +2 -2
  74. package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js.map → ForgotPasswordPage-CSq4DnFF.js.map} +1 -1
  75. package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js → ForgotPasswordPage-DZLVolAC.js} +2 -2
  76. package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js.map → ForgotPasswordPage-DZLVolAC.js.map} +1 -1
  77. package/dist/chunks/{GroupDetailPage-DFBvVO1S.js → GroupDetailPage-Bf9Wb_2j.js} +5 -5
  78. package/dist/chunks/{GroupDetailPage-DFBvVO1S.js.map → GroupDetailPage-Bf9Wb_2j.js.map} +1 -1
  79. package/dist/chunks/{GroupDetailPage-B2FkKrGG.js → GroupDetailPage-R-hf3rJ7.js} +2 -2
  80. package/dist/chunks/{GroupDetailPage-B2FkKrGG.js.map → GroupDetailPage-R-hf3rJ7.js.map} +1 -1
  81. package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js → MyAccessRequestsPage-BIisvWM6.js} +2 -2
  82. package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js.map → MyAccessRequestsPage-BIisvWM6.js.map} +1 -1
  83. package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js → MyAccessRequestsPage-BLSV7Tbx.js} +2 -2
  84. package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js.map → MyAccessRequestsPage-BLSV7Tbx.js.map} +1 -1
  85. package/dist/chunks/{MyTenantsPage-BEcYYdGR.js → MyTenantsPage-D-7k9CP1.js} +3 -3
  86. package/dist/chunks/{MyTenantsPage-BEcYYdGR.js.map → MyTenantsPage-D-7k9CP1.js.map} +1 -1
  87. package/dist/chunks/{MyTenantsPage-D9f85zjF.js → MyTenantsPage-DqGW6aDt.js} +2 -2
  88. package/dist/chunks/{MyTenantsPage-D9f85zjF.js.map → MyTenantsPage-DqGW6aDt.js.map} +1 -1
  89. package/dist/chunks/{MyTicketsPage-DJR8h6y1.js → MyTicketsPage--DgDsnZA.js} +2 -2
  90. package/dist/chunks/{MyTicketsPage-DJR8h6y1.js.map → MyTicketsPage--DgDsnZA.js.map} +1 -1
  91. package/dist/chunks/{MyTicketsPage-DiOUExKJ.js → MyTicketsPage-CqJ3Aqob.js} +2 -2
  92. package/dist/chunks/{MyTicketsPage-DiOUExKJ.js.map → MyTicketsPage-CqJ3Aqob.js.map} +1 -1
  93. package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js → NavigationAppsPage-Bebis_RT.js} +2 -2
  94. package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js.map → NavigationAppsPage-Bebis_RT.js.map} +1 -1
  95. package/dist/chunks/{NavigationAppsPage-If7tmCFY.js → NavigationAppsPage-THNPOAjv.js} +2 -2
  96. package/dist/chunks/{NavigationAppsPage-If7tmCFY.js.map → NavigationAppsPage-THNPOAjv.js.map} +1 -1
  97. package/dist/chunks/{NotificationsPage-C29Lln5o.js → NotificationsPage-CAbNW_Cn.js} +2 -2
  98. package/dist/chunks/{NotificationsPage-C29Lln5o.js.map → NotificationsPage-CAbNW_Cn.js.map} +1 -1
  99. package/dist/chunks/{NotificationsPage-BiaLRb0s.js → NotificationsPage-DxwizUhL.js} +2 -2
  100. package/dist/chunks/{NotificationsPage-BiaLRb0s.js.map → NotificationsPage-DxwizUhL.js.map} +1 -1
  101. package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js → OnboardingWizardPage-C6HlbJ3K.js} +2 -2
  102. package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js.map → OnboardingWizardPage-C6HlbJ3K.js.map} +1 -1
  103. package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js → OnboardingWizardPage-CyC2zONO.js} +2 -2
  104. package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js.map → OnboardingWizardPage-CyC2zONO.js.map} +1 -1
  105. package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js → PermissionDetailPage-BDHiNgky.js} +2 -2
  106. package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js.map → PermissionDetailPage-BDHiNgky.js.map} +1 -1
  107. package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js → PermissionDetailPage-C5K17ydY.js} +2 -2
  108. package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js.map → PermissionDetailPage-C5K17ydY.js.map} +1 -1
  109. package/dist/chunks/{PermissionsPage-l0PnY-EE.js → PermissionsPage-COI5LJPo.js} +2 -2
  110. package/dist/chunks/{PermissionsPage-l0PnY-EE.js.map → PermissionsPage-COI5LJPo.js.map} +1 -1
  111. package/dist/chunks/{PermissionsPage-DLy9U3P3.js → PermissionsPage-CkOwH2_d.js} +2 -2
  112. package/dist/chunks/{PermissionsPage-DLy9U3P3.js.map → PermissionsPage-CkOwH2_d.js.map} +1 -1
  113. package/dist/chunks/{PortalDashboardPage-DFBx38-x.js → PortalDashboardPage-CoEC4CmC.js} +2 -2
  114. package/dist/chunks/{PortalDashboardPage-DFBx38-x.js.map → PortalDashboardPage-CoEC4CmC.js.map} +1 -1
  115. package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js → PortalDashboardPage-DrYymEf-.js} +2 -2
  116. package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js.map → PortalDashboardPage-DrYymEf-.js.map} +1 -1
  117. package/dist/chunks/{PreferencesPage-BBu8yZQB.js → PreferencesPage-CJRaU3ba.js} +2 -2
  118. package/dist/chunks/{PreferencesPage-BBu8yZQB.js.map → PreferencesPage-CJRaU3ba.js.map} +1 -1
  119. package/dist/chunks/{PreferencesPage-B81MsNV1.js → PreferencesPage-Cqr9mAab.js} +2 -2
  120. package/dist/chunks/{PreferencesPage-B81MsNV1.js.map → PreferencesPage-Cqr9mAab.js.map} +1 -1
  121. package/dist/chunks/{ProfilePage-DDrl10zj.js → ProfilePage-BZVpg6-l.js} +2 -2
  122. package/dist/chunks/{ProfilePage-DDrl10zj.js.map → ProfilePage-BZVpg6-l.js.map} +1 -1
  123. package/dist/chunks/{ProfilePage-DPoXwdnc.js → ProfilePage-Cu_FITeL.js} +2 -2
  124. package/dist/chunks/{ProfilePage-DPoXwdnc.js.map → ProfilePage-Cu_FITeL.js.map} +1 -1
  125. package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js → ReferencesManagementPage-DUlVk9Ps.js} +3 -3
  126. package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js.map → ReferencesManagementPage-DUlVk9Ps.js.map} +1 -1
  127. package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js → ReferencesManagementPage-ZCuYtqd7.js} +2 -2
  128. package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js.map → ReferencesManagementPage-ZCuYtqd7.js.map} +1 -1
  129. package/dist/chunks/{RegisterPage-CiQib3-6.js → RegisterPage-C4xmVwh9.js} +2 -2
  130. package/dist/chunks/{RegisterPage-CiQib3-6.js.map → RegisterPage-C4xmVwh9.js.map} +1 -1
  131. package/dist/chunks/{RegisterPage-bXCcJD88.js → RegisterPage-DGyzoIHT.js} +2 -2
  132. package/dist/chunks/{RegisterPage-bXCcJD88.js.map → RegisterPage-DGyzoIHT.js.map} +1 -1
  133. package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js → ResetPasswordPage-DqDD6VPR.js} +2 -2
  134. package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js.map → ResetPasswordPage-DqDD6VPR.js.map} +1 -1
  135. package/dist/chunks/{ResetPasswordPage-CubPG3yv.js → ResetPasswordPage-Glu-aeqv.js} +2 -2
  136. package/dist/chunks/{ResetPasswordPage-CubPG3yv.js.map → ResetPasswordPage-Glu-aeqv.js.map} +1 -1
  137. package/dist/chunks/{ResolutionModal-Bg7XZmR1.js → ResolutionModal-CxjANAOP.js} +2 -2
  138. package/dist/chunks/{ResolutionModal-Bg7XZmR1.js.map → ResolutionModal-CxjANAOP.js.map} +1 -1
  139. package/dist/chunks/{ResolutionModal-DqRk_T0n.js → ResolutionModal-Duat18qV.js} +2 -2
  140. package/dist/chunks/{ResolutionModal-DqRk_T0n.js.map → ResolutionModal-Duat18qV.js.map} +1 -1
  141. package/dist/chunks/{RoleDetailPage-Blau6_4c.js → RoleDetailPage-BQffUSnt.js} +3 -3
  142. package/dist/chunks/{RoleDetailPage-Blau6_4c.js.map → RoleDetailPage-BQffUSnt.js.map} +1 -1
  143. package/dist/chunks/{RoleDetailPage-CiRVxxIP.js → RoleDetailPage-JTm5lD1_.js} +2 -2
  144. package/dist/chunks/{RoleDetailPage-CiRVxxIP.js.map → RoleDetailPage-JTm5lD1_.js.map} +1 -1
  145. package/dist/chunks/{RolesPage-Pm-RN3lP.js → RolesPage-B9rRzciI.js} +2 -2
  146. package/dist/chunks/{RolesPage-Pm-RN3lP.js.map → RolesPage-B9rRzciI.js.map} +1 -1
  147. package/dist/chunks/{RolesPage-Cb8joqdJ.js → RolesPage-BN8_zMOC.js} +2 -2
  148. package/dist/chunks/{RolesPage-Cb8joqdJ.js.map → RolesPage-BN8_zMOC.js.map} +1 -1
  149. package/dist/chunks/{SlaConfigPage-B86McKM6.js → SlaConfigPage-B7kZNig4.js} +2 -2
  150. package/dist/chunks/{SlaConfigPage-B86McKM6.js.map → SlaConfigPage-B7kZNig4.js.map} +1 -1
  151. package/dist/chunks/{SlaConfigPage-BY7gvYU6.js → SlaConfigPage-okvZfA_K.js} +2 -2
  152. package/dist/chunks/{SlaConfigPage-BY7gvYU6.js.map → SlaConfigPage-okvZfA_K.js.map} +1 -1
  153. package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js → SupportPermissionsPage-DGAPqJbl.js} +2 -2
  154. package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js.map → SupportPermissionsPage-DGAPqJbl.js.map} +1 -1
  155. package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js → SupportPermissionsPage-Dg_wLOme.js} +2 -2
  156. package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js.map → SupportPermissionsPage-Dg_wLOme.js.map} +1 -1
  157. package/dist/chunks/{TemplatesPage-BDguJ401.js → TemplatesPage-DT9fhlAU.js} +2 -2
  158. package/dist/chunks/{TemplatesPage-BDguJ401.js.map → TemplatesPage-DT9fhlAU.js.map} +1 -1
  159. package/dist/chunks/{TemplatesPage-DdnGgioU.js → TemplatesPage-DiEk538p.js} +2 -2
  160. package/dist/chunks/{TemplatesPage-DdnGgioU.js.map → TemplatesPage-DiEk538p.js.map} +1 -1
  161. package/dist/chunks/{TenantCard-ffwWsgFQ.js → TenantCard-BbSYk9_Z.js} +2 -2
  162. package/dist/chunks/{TenantCard-ffwWsgFQ.js.map → TenantCard-BbSYk9_Z.js.map} +1 -1
  163. package/dist/chunks/{TenantCard-CUjb6og9.js → TenantCard-CEkiKxcZ.js} +2 -2
  164. package/dist/chunks/{TenantCard-CUjb6og9.js.map → TenantCard-CEkiKxcZ.js.map} +1 -1
  165. package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js → TenantScopeSelector-BWfYxvEa.js} +2 -2
  166. package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js.map → TenantScopeSelector-BWfYxvEa.js.map} +1 -1
  167. package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js → TenantScopeSelector-D-BKgQPV.js} +2 -2
  168. package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js.map → TenantScopeSelector-D-BKgQPV.js.map} +1 -1
  169. package/dist/chunks/{TicketDetailPage-GOh9GX7E.js → TicketDetailPage-C1mNS9Up.js} +2 -2
  170. package/dist/chunks/{TicketDetailPage-GOh9GX7E.js.map → TicketDetailPage-C1mNS9Up.js.map} +1 -1
  171. package/dist/chunks/{TicketDetailPage-Du8WMyqf.js → TicketDetailPage-ieVDRh42.js} +2 -2
  172. package/dist/chunks/{TicketDetailPage-Du8WMyqf.js.map → TicketDetailPage-ieVDRh42.js.map} +1 -1
  173. package/dist/chunks/{TicketsPage-Bqd6moQy.js → TicketsPage-CnuWsnIW.js} +2 -2
  174. package/dist/chunks/{TicketsPage-Bqd6moQy.js.map → TicketsPage-CnuWsnIW.js.map} +1 -1
  175. package/dist/chunks/{TicketsPage-WdU4Bb7M.js → TicketsPage-jjyY15_D.js} +2 -2
  176. package/dist/chunks/{TicketsPage-WdU4Bb7M.js.map → TicketsPage-jjyY15_D.js.map} +1 -1
  177. package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js → UserCreateTicketPage-B8Tvf-ag.js} +2 -2
  178. package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js.map → UserCreateTicketPage-B8Tvf-ag.js.map} +1 -1
  179. package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js → UserCreateTicketPage-DnOsDlfO.js} +2 -2
  180. package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js.map → UserCreateTicketPage-DnOsDlfO.js.map} +1 -1
  181. package/dist/chunks/{UserDashboardPage-BP5WeXPS.js → UserDashboardPage-BrtkJ-NB.js} +2 -2
  182. package/dist/chunks/{UserDashboardPage-BP5WeXPS.js.map → UserDashboardPage-BrtkJ-NB.js.map} +1 -1
  183. package/dist/chunks/{UserDashboardPage-B53C8fUq.js → UserDashboardPage-KLB5CQP5.js} +2 -2
  184. package/dist/chunks/{UserDashboardPage-B53C8fUq.js.map → UserDashboardPage-KLB5CQP5.js.map} +1 -1
  185. package/dist/chunks/{UserDetailPage-B110bmGX.js → UserDetailPage-U7smBQoF.js} +5 -5
  186. package/dist/chunks/{UserDetailPage-B110bmGX.js.map → UserDetailPage-U7smBQoF.js.map} +1 -1
  187. package/dist/chunks/{UserDetailPage-CV2VCE46.js → UserDetailPage-_J6lcKAU.js} +2 -2
  188. package/dist/chunks/{UserDetailPage-CV2VCE46.js.map → UserDetailPage-_J6lcKAU.js.map} +1 -1
  189. package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js → UserTicketDetailPage-CWoYQgH-.js} +2 -2
  190. package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js.map → UserTicketDetailPage-CWoYQgH-.js.map} +1 -1
  191. package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js → UserTicketDetailPage-DkufSlvZ.js} +2 -2
  192. package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js.map → UserTicketDetailPage-DkufSlvZ.js.map} +1 -1
  193. package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js → UsersGroupsPage-C38s2-Rq.js} +3 -3
  194. package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js.map → UsersGroupsPage-C38s2-Rq.js.map} +1 -1
  195. package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js → UsersGroupsPage-Dq3rAteo.js} +2 -2
  196. package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js.map → UsersGroupsPage-Dq3rAteo.js.map} +1 -1
  197. package/dist/chunks/{UsersPage-Bg7033pp.js → UsersPage-B5C5KEUR.js} +2 -2
  198. package/dist/chunks/{UsersPage-Bg7033pp.js.map → UsersPage-B5C5KEUR.js.map} +1 -1
  199. package/dist/chunks/{UsersPage-TYAfwPY1.js → UsersPage-CXC9Hvq6.js} +2 -2
  200. package/dist/chunks/{UsersPage-TYAfwPY1.js.map → UsersPage-CXC9Hvq6.js.map} +1 -1
  201. package/dist/chunks/{accessRequestsApi-DZeDvzwv.js → accessRequestsApi-B-4TJ5_U.js} +2 -2
  202. package/dist/chunks/{accessRequestsApi-DZeDvzwv.js.map → accessRequestsApi-B-4TJ5_U.js.map} +1 -1
  203. package/dist/chunks/{accessRequestsApi-ZXFPCid2.js → accessRequestsApi-DZSfThpd.js} +2 -2
  204. package/dist/chunks/{accessRequestsApi-ZXFPCid2.js.map → accessRequestsApi-DZSfThpd.js.map} +1 -1
  205. package/dist/chunks/{aiApi-CsH8DXgs.js → aiApi-B20Teu2v.js} +2 -2
  206. package/dist/chunks/{aiApi-CsH8DXgs.js.map → aiApi-B20Teu2v.js.map} +1 -1
  207. package/dist/chunks/{aiApi-CVPzFTXa.js → aiApi-DMGz-RPM.js} +2 -2
  208. package/dist/chunks/{aiApi-CVPzFTXa.js.map → aiApi-DMGz-RPM.js.map} +1 -1
  209. package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js → applicationAnalyticsApi-Bwa75Fzd.js} +2 -2
  210. package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js.map → applicationAnalyticsApi-Bwa75Fzd.js.map} +1 -1
  211. package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js → applicationAnalyticsApi-CLBqRPfN.js} +2 -2
  212. package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js.map → applicationAnalyticsApi-CLBqRPfN.js.map} +1 -1
  213. package/dist/chunks/{groupsApi-BgCk2fsp.js → groupsApi-QzXI-5xu.js} +2 -2
  214. package/dist/chunks/{groupsApi-BgCk2fsp.js.map → groupsApi-QzXI-5xu.js.map} +1 -1
  215. package/dist/chunks/{groupsApi-BIbG665N.js → groupsApi-hB9kSWEd.js} +2 -2
  216. package/dist/chunks/{groupsApi-BIbG665N.js.map → groupsApi-hB9kSWEd.js.map} +1 -1
  217. package/dist/chunks/{index-Cb3LotuT.js → index--NGcBYUu.js} +3 -3
  218. package/dist/chunks/{index-Cb3LotuT.js.map → index--NGcBYUu.js.map} +1 -1
  219. package/dist/chunks/{index-C33zcyF4.js → index--aPwOFjF.js} +2 -2
  220. package/dist/chunks/{index-C33zcyF4.js.map → index--aPwOFjF.js.map} +1 -1
  221. package/dist/chunks/{index-sMr9qND_.js → index-0VrOtwP0.js} +2 -2
  222. package/dist/chunks/{index-sMr9qND_.js.map → index-0VrOtwP0.js.map} +1 -1
  223. package/dist/chunks/{index-DDKetfKq.js → index-37U271aw.js} +2 -2
  224. package/dist/chunks/{index-DDKetfKq.js.map → index-37U271aw.js.map} +1 -1
  225. package/dist/chunks/{index-B9fS7ir6.js → index-B7qZTuQ-.js} +2 -2
  226. package/dist/chunks/{index-B9fS7ir6.js.map → index-B7qZTuQ-.js.map} +1 -1
  227. package/dist/chunks/{index-CdjBY7L8.js → index-Bedzmqr-.js} +2 -2
  228. package/dist/chunks/{index-CdjBY7L8.js.map → index-Bedzmqr-.js.map} +1 -1
  229. package/dist/chunks/{index-CHG_O1fS.js → index-Betxo5g5.js} +2 -2
  230. package/dist/chunks/{index-CHG_O1fS.js.map → index-Betxo5g5.js.map} +1 -1
  231. package/dist/chunks/{index-jiGu-H8x.js → index-BmaJz475.js} +2 -2
  232. package/dist/chunks/{index-jiGu-H8x.js.map → index-BmaJz475.js.map} +1 -1
  233. package/dist/chunks/{index-C53JoVNk.js → index-Buhqag3v.js} +2 -2
  234. package/dist/chunks/{index-C53JoVNk.js.map → index-Buhqag3v.js.map} +1 -1
  235. package/dist/chunks/{index-DO0Rw7hX.js → index-C3VxlfKq.js} +2 -2
  236. package/dist/chunks/{index-DO0Rw7hX.js.map → index-C3VxlfKq.js.map} +1 -1
  237. package/dist/chunks/{index-CSQ60fpG.js → index-CgpRo8Oe.js} +2 -2
  238. package/dist/chunks/{index-CSQ60fpG.js.map → index-CgpRo8Oe.js.map} +1 -1
  239. package/dist/chunks/{index-B-e-ELsf.js → index-DOY0w8Iu.js} +8 -8
  240. package/dist/chunks/{index-B-e-ELsf.js.map → index-DOY0w8Iu.js.map} +1 -1
  241. package/dist/chunks/{index-D2REDIRX.js → index-DwuvIOrQ.js} +2 -2
  242. package/dist/chunks/{index-D2REDIRX.js.map → index-DwuvIOrQ.js.map} +1 -1
  243. package/dist/chunks/{index-DCcl7Qof.js → index-DzedSLdI.js} +2 -2
  244. package/dist/chunks/{index-DCcl7Qof.js.map → index-DzedSLdI.js.map} +1 -1
  245. package/dist/chunks/{index-2wUhd9Lu.js → index-IgLVXPg8.js} +10 -10
  246. package/dist/chunks/index-IgLVXPg8.js.map +1 -0
  247. package/dist/chunks/{index-CwSaRXXg.js → index-lpIzhufD.js} +1916 -1900
  248. package/dist/chunks/index-lpIzhufD.js.map +1 -0
  249. package/dist/chunks/{index-Cuwn2q-f.js → index-mLUKwbGl.js} +4 -4
  250. package/dist/chunks/{index-Cuwn2q-f.js.map → index-mLUKwbGl.js.map} +1 -1
  251. package/dist/chunks/{index-B0mk2tNY.js → index-tO6MMIFB.js} +2 -2
  252. package/dist/chunks/{index-B0mk2tNY.js.map → index-tO6MMIFB.js.map} +1 -1
  253. package/dist/chunks/{tenantIconMap-BpNANQ5s.js → tenantIconMap-BQD9byc8.js} +2 -2
  254. package/dist/chunks/{tenantIconMap-BpNANQ5s.js.map → tenantIconMap-BQD9byc8.js.map} +1 -1
  255. package/dist/chunks/{tenantIconMap-DtdUgvJO.js → tenantIconMap-CTMuSt18.js} +2 -2
  256. package/dist/chunks/{tenantIconMap-DtdUgvJO.js.map → tenantIconMap-CTMuSt18.js.map} +1 -1
  257. package/dist/chunks/{ticketingApi-Bu4rKwLl.js → ticketingApi-BNIdox5t.js} +2 -2
  258. package/dist/chunks/{ticketingApi-Bu4rKwLl.js.map → ticketingApi-BNIdox5t.js.map} +1 -1
  259. package/dist/chunks/{ticketingApi-r4Avm9iS.js → ticketingApi-J0vC_t7r.js} +2 -2
  260. package/dist/chunks/{ticketingApi-r4Avm9iS.js.map → ticketingApi-J0vC_t7r.js.map} +1 -1
  261. package/dist/chunks/{useAccessRequests-B9bF4swg.js → useAccessRequests-DCNNLnxk.js} +3 -3
  262. package/dist/chunks/{useAccessRequests-B9bF4swg.js.map → useAccessRequests-DCNNLnxk.js.map} +1 -1
  263. package/dist/chunks/{useAccessRequests-JyPUX3Om.js → useAccessRequests-DT7X4FAK.js} +2 -2
  264. package/dist/chunks/{useAccessRequests-JyPUX3Om.js.map → useAccessRequests-DT7X4FAK.js.map} +1 -1
  265. package/dist/chunks/{useUserAccessRequests-DjPQenC2.js → useUserAccessRequests-BYbmG4c7.js} +2 -2
  266. package/dist/chunks/{useUserAccessRequests-DjPQenC2.js.map → useUserAccessRequests-BYbmG4c7.js.map} +1 -1
  267. package/dist/chunks/{useUserAccessRequests-BB6FHW14.js → useUserAccessRequests-CylKxRN6.js} +2 -2
  268. package/dist/chunks/{useUserAccessRequests-BB6FHW14.js.map → useUserAccessRequests-CylKxRN6.js.map} +1 -1
  269. package/dist/hooks/useCollapsibleState.d.ts +5 -2
  270. package/dist/hooks/useCollapsibleState.d.ts.map +1 -1
  271. package/dist/i18n/config.d.ts +1 -0
  272. package/dist/i18n/config.d.ts.map +1 -1
  273. package/dist/main.d.ts +0 -1
  274. package/dist/main.d.ts.map +1 -1
  275. package/dist/smartstack.cjs +1 -1
  276. package/dist/smartstack.js +1 -1
  277. package/dist/utils/permissions.d.ts.map +1 -1
  278. package/package.json +1 -1
  279. package/dist/chunks/index-2wUhd9Lu.js.map +0 -1
  280. package/dist/chunks/index-CwSaRXXg.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationAppsPage-CeHbxfZw.js","sources":["../../src/pages/platform/administration/applications/NavigationAppsPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Edit2, MoreHorizontal, X, Loader2, Eye, EyeOff, ChevronDown, ChevronRight } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport type { LucideIcon } from 'lucide-react';\r\nimport { adminApi, type ApplicationListDto, type ApplicationModuleDto, type UpdateApplicationRequest, type UpdateModuleRequest } from '@/services/api/adminApi';\r\n\r\n// Dynamic icon component\r\nconst DynamicIcon = ({ name, className }: { name: string; className?: string }) => {\r\n const icons = LucideIcons as unknown as Record<string, LucideIcon>;\r\n const IconComponent = icons[name];\r\n if (!IconComponent) return null;\r\n return <IconComponent className={className} />;\r\n};\r\n\r\nexport function NavigationAppsPage(): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const [applications, setApplications] = useState<ApplicationListDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [expandedApps, setExpandedApps] = useState<Set<string>>(new Set());\r\n const [modules, setModules] = useState<Record<string, ApplicationModuleDto[]>>({});\r\n const [showAppModal, setShowAppModal] = useState(false);\r\n const [showModuleModal, setShowModuleModal] = useState(false);\r\n const [editingApp, setEditingApp] = useState<ApplicationListDto | null>(null);\r\n const [editingModule, setEditingModule] = useState<{ appId: string; module: ApplicationModuleDto } | null>(null);\r\n const [appFormData, setAppFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [moduleFormData, setModuleFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\r\n\r\n const loadApplications = useCallback(async () => {\r\n try {\r\n setLoading(true);\r\n const result = await adminApi.applications.getAll();\r\n setApplications(result);\r\n } catch (err) {\r\n console.error('Failed to load applications:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const loadModules = async (appId: string) => {\r\n try {\r\n const result = await adminApi.applications.getModules(appId);\r\n setModules(prev => ({ ...prev, [appId]: result }));\r\n } catch (err) {\r\n console.error('Failed to load modules:', err);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n loadApplications();\r\n }, [loadApplications]);\r\n\r\n const toggleApp = async (appId: string) => {\r\n const next = new Set(expandedApps);\r\n if (next.has(appId)) {\r\n next.delete(appId);\r\n } else {\r\n next.add(appId);\r\n if (!modules[appId]) {\r\n await loadModules(appId);\r\n }\r\n }\r\n setExpandedApps(next);\r\n };\r\n\r\n const openEditAppModal = (app: ApplicationListDto) => {\r\n setEditingApp(app);\r\n setAppFormData({\r\n label: app.label,\r\n description: app.description || '',\r\n icon: app.icon || '',\r\n iconType: app.iconType,\r\n route: app.route || '',\r\n displayOrder: app.displayOrder\r\n });\r\n setError(null);\r\n setShowAppModal(true);\r\n };\r\n\r\n const openEditModuleModal = (appId: string, module: ApplicationModuleDto) => {\r\n setEditingModule({ appId, module });\r\n setModuleFormData({\r\n label: module.label,\r\n description: module.description || '',\r\n icon: module.icon || '',\r\n iconType: module.iconType,\r\n route: module.route || '',\r\n displayOrder: module.displayOrder\r\n });\r\n setError(null);\r\n setShowModuleModal(true);\r\n };\r\n\r\n const handleAppSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingApp) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateApplicationRequest = {\r\n label: appFormData.label,\r\n description: appFormData.description,\r\n icon: appFormData.icon,\r\n iconType: appFormData.iconType,\r\n route: appFormData.route,\r\n displayOrder: appFormData.displayOrder\r\n };\r\n await adminApi.applications.update(editingApp.id, updateData);\r\n setShowAppModal(false);\r\n loadApplications();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleModuleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingModule) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateModuleRequest = {\r\n label: moduleFormData.label,\r\n description: moduleFormData.description,\r\n icon: moduleFormData.icon,\r\n iconType: moduleFormData.iconType,\r\n route: moduleFormData.route,\r\n displayOrder: moduleFormData.displayOrder\r\n };\r\n await adminApi.applications.updateModule(editingModule.appId, editingModule.module.id, updateData);\r\n setShowModuleModal(false);\r\n loadModules(editingModule.appId);\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleToggleAppStatus = async (app: ApplicationListDto) => {\r\n try {\r\n if (app.isActive) {\r\n await adminApi.applications.deactivate(app.id);\r\n } else {\r\n await adminApi.applications.activate(app.id);\r\n }\r\n loadApplications();\r\n } catch (err) {\r\n console.error('Failed to toggle app status:', err);\r\n }\r\n setMenuOpen(null);\r\n };\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('header.title'), href: '/administration' },\r\n { label: t('applications.title') }\r\n ]}\r\n />\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('applications.title')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('applications.subtitle')}</p>\r\n </div>\r\n </div>\r\n\r\n {/* Applications list */}\r\n <div className=\"space-y-4\">\r\n {loading && (\r\n <div className=\"flex justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n {!loading && applications.length === 0 && (\r\n <div className=\"text-center py-12 text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)]\">\r\n {t('applications.noApps')}\r\n </div>\r\n )}\r\n {!loading && applications.length > 0 && (\r\n applications.map(app => (\r\n <div key={app.id} className=\"bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] overflow-hidden\">\r\n <div className=\"flex items-center gap-4 p-4\">\r\n <button\r\n onClick={() => toggleApp(app.id)}\r\n className=\"p-1 rounded hover:bg-[var(--bg-hover)]\"\r\n >\r\n {expandedApps.has(app.id) ? (\r\n <ChevronDown className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <ChevronRight className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n )}\r\n </button>\r\n\r\n <div className=\"w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-900 flex items-center justify-center\">\r\n {app.iconType === 'Lucide' && app.icon && (\r\n <DynamicIcon name={app.icon} className=\"w-5 h-5 text-primary-600 dark:text-primary-400\" />\r\n )}\r\n {app.iconType === 'Url' && app.icon && (\r\n <img src={app.icon} alt=\"\" className=\"w-6 h-6\" />\r\n )}\r\n {!(app.iconType === 'Lucide' && app.icon) && !(app.iconType === 'Url' && app.icon) && (\r\n <div className=\"w-5 h-5 bg-primary-500 rounded\" />\r\n )}\r\n </div>\r\n\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-[var(--text-primary)]\">{app.label}</span>\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]\">\r\n {app.zone}\r\n </span>\r\n {!app.isActive && (\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300\">\r\n {t('common.inactive')}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.description || app.route}\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.modulesCount} {t('applications.modules')}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <button\r\n onClick={() => setMenuOpen(menuOpen === app.id ? null : app.id)}\r\n className=\"p-2 rounded-lg hover:bg-[var(--bg-tertiary)] transition-colors\"\r\n >\r\n <MoreHorizontal className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n </button>\r\n {menuOpen === app.id && (\r\n <div className=\"absolute right-0 top-full mt-1 w-48 py-1 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] shadow-lg z-10\">\r\n <button\r\n onClick={() => { openEditAppModal(app); setMenuOpen(null); }}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-4 h-4\" />\r\n {t('common.edit')}\r\n </button>\r\n <button\r\n onClick={() => handleToggleAppStatus(app)}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {app.isActive ? <EyeOff className=\"w-4 h-4\" /> : <Eye className=\"w-4 h-4\" />}\r\n {app.isActive ? t('common.deactivate') : t('common.activate')}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {expandedApps.has(app.id) && (\r\n <div className=\"border-t border-[var(--border-color)] p-4 bg-[var(--bg-primary)]\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"font-medium text-[var(--text-primary)]\">{t('applications.modules')}</h3>\r\n </div>\r\n\r\n {modules[app.id] ? (\r\n modules[app.id].length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {t('applications.noModules')}\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n {modules[app.id].map(module => (\r\n <div\r\n key={module.id}\r\n className=\"flex items-center gap-3 p-3 rounded-lg bg-[var(--bg-secondary)] border border-[var(--border-color)]\"\r\n >\r\n <div className=\"w-8 h-8 rounded-lg bg-[var(--bg-tertiary)] flex items-center justify-center\">\r\n {module.iconType === 'Lucide' && module.icon ? (\r\n <DynamicIcon name={module.icon} className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <div className=\"w-4 h-4 bg-[var(--text-tertiary)] rounded\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1\">\r\n <div className=\"font-medium text-sm text-[var(--text-primary)]\">{module.label}</div>\r\n <div className=\"text-xs text-[var(--text-secondary)]\">{module.route}</div>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n onClick={() => openEditModuleModal(app.id, module)}\r\n className=\"p-1.5 rounded-lg hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-3.5 h-3.5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"flex justify-center py-4\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n ))\r\n )}\r\n </div>\r\n\r\n {/* Application Edit Modal */}\r\n {showAppModal && editingApp && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.edit')}\r\n </h2>\r\n <button onClick={() => setShowAppModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleAppSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingApp.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={appFormData.label}\r\n onChange={e => setAppFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.description')}\r\n </label>\r\n <textarea\r\n value={appFormData.description}\r\n onChange={e => setAppFormData(prev => ({ ...prev, description: e.target.value }))}\r\n rows={2}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 resize-none\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={appFormData.iconType}\r\n onChange={e => setAppFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.icon}\r\n onChange={e => setAppFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n placeholder={appFormData.iconType === 'Lucide' ? 'Shield, Users, Settings...' : 'https://...'}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.route}\r\n onChange={e => setAppFormData(prev => ({ ...prev, route: e.target.value }))}\r\n placeholder=\"/administration/...\"\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowAppModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Module Edit Modal */}\r\n {showModuleModal && editingModule && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.editModule')}\r\n </h2>\r\n <button onClick={() => setShowModuleModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleModuleSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingModule.module.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={moduleFormData.label}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={moduleFormData.iconType}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.icon}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.route}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, route: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowModuleModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["DynamicIcon","name","className","IconComponent","LucideIcons","jsx","NavigationAppsPage","t","useTranslation","applications","setApplications","useState","loading","setLoading","expandedApps","setExpandedApps","modules","setModules","showAppModal","setShowAppModal","showModuleModal","setShowModuleModal","editingApp","setEditingApp","editingModule","setEditingModule","appFormData","setAppFormData","moduleFormData","setModuleFormData","saving","setSaving","error","setError","menuOpen","setMenuOpen","loadApplications","useCallback","result","adminApi","err","loadModules","appId","prev","useEffect","toggleApp","next","openEditAppModal","app","openEditModuleModal","module","handleAppSubmit","updateData","message","handleModuleSubmit","handleToggleAppStatus","jsxs","Breadcrumb","Loader2","ChevronDown","ChevronRight","MoreHorizontal","Edit2","EyeOff","Eye","X"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationAppsPage-Bebis_RT.js","sources":["../../src/pages/platform/administration/applications/NavigationAppsPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Edit2, MoreHorizontal, X, Loader2, Eye, EyeOff, ChevronDown, ChevronRight } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport type { LucideIcon } from 'lucide-react';\r\nimport { adminApi, type ApplicationListDto, type ApplicationModuleDto, type UpdateApplicationRequest, type UpdateModuleRequest } from '@/services/api/adminApi';\r\n\r\n// Dynamic icon component\r\nconst DynamicIcon = ({ name, className }: { name: string; className?: string }) => {\r\n const icons = LucideIcons as unknown as Record<string, LucideIcon>;\r\n const IconComponent = icons[name];\r\n if (!IconComponent) return null;\r\n return <IconComponent className={className} />;\r\n};\r\n\r\nexport function NavigationAppsPage(): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const [applications, setApplications] = useState<ApplicationListDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [expandedApps, setExpandedApps] = useState<Set<string>>(new Set());\r\n const [modules, setModules] = useState<Record<string, ApplicationModuleDto[]>>({});\r\n const [showAppModal, setShowAppModal] = useState(false);\r\n const [showModuleModal, setShowModuleModal] = useState(false);\r\n const [editingApp, setEditingApp] = useState<ApplicationListDto | null>(null);\r\n const [editingModule, setEditingModule] = useState<{ appId: string; module: ApplicationModuleDto } | null>(null);\r\n const [appFormData, setAppFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [moduleFormData, setModuleFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\r\n\r\n const loadApplications = useCallback(async () => {\r\n try {\r\n setLoading(true);\r\n const result = await adminApi.applications.getAll();\r\n setApplications(result);\r\n } catch (err) {\r\n console.error('Failed to load applications:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const loadModules = async (appId: string) => {\r\n try {\r\n const result = await adminApi.applications.getModules(appId);\r\n setModules(prev => ({ ...prev, [appId]: result }));\r\n } catch (err) {\r\n console.error('Failed to load modules:', err);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n loadApplications();\r\n }, [loadApplications]);\r\n\r\n const toggleApp = async (appId: string) => {\r\n const next = new Set(expandedApps);\r\n if (next.has(appId)) {\r\n next.delete(appId);\r\n } else {\r\n next.add(appId);\r\n if (!modules[appId]) {\r\n await loadModules(appId);\r\n }\r\n }\r\n setExpandedApps(next);\r\n };\r\n\r\n const openEditAppModal = (app: ApplicationListDto) => {\r\n setEditingApp(app);\r\n setAppFormData({\r\n label: app.label,\r\n description: app.description || '',\r\n icon: app.icon || '',\r\n iconType: app.iconType,\r\n route: app.route || '',\r\n displayOrder: app.displayOrder\r\n });\r\n setError(null);\r\n setShowAppModal(true);\r\n };\r\n\r\n const openEditModuleModal = (appId: string, module: ApplicationModuleDto) => {\r\n setEditingModule({ appId, module });\r\n setModuleFormData({\r\n label: module.label,\r\n description: module.description || '',\r\n icon: module.icon || '',\r\n iconType: module.iconType,\r\n route: module.route || '',\r\n displayOrder: module.displayOrder\r\n });\r\n setError(null);\r\n setShowModuleModal(true);\r\n };\r\n\r\n const handleAppSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingApp) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateApplicationRequest = {\r\n label: appFormData.label,\r\n description: appFormData.description,\r\n icon: appFormData.icon,\r\n iconType: appFormData.iconType,\r\n route: appFormData.route,\r\n displayOrder: appFormData.displayOrder\r\n };\r\n await adminApi.applications.update(editingApp.id, updateData);\r\n setShowAppModal(false);\r\n loadApplications();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleModuleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingModule) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateModuleRequest = {\r\n label: moduleFormData.label,\r\n description: moduleFormData.description,\r\n icon: moduleFormData.icon,\r\n iconType: moduleFormData.iconType,\r\n route: moduleFormData.route,\r\n displayOrder: moduleFormData.displayOrder\r\n };\r\n await adminApi.applications.updateModule(editingModule.appId, editingModule.module.id, updateData);\r\n setShowModuleModal(false);\r\n loadModules(editingModule.appId);\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleToggleAppStatus = async (app: ApplicationListDto) => {\r\n try {\r\n if (app.isActive) {\r\n await adminApi.applications.deactivate(app.id);\r\n } else {\r\n await adminApi.applications.activate(app.id);\r\n }\r\n loadApplications();\r\n } catch (err) {\r\n console.error('Failed to toggle app status:', err);\r\n }\r\n setMenuOpen(null);\r\n };\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('header.title'), href: '/administration' },\r\n { label: t('applications.title') }\r\n ]}\r\n />\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('applications.title')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('applications.subtitle')}</p>\r\n </div>\r\n </div>\r\n\r\n {/* Applications list */}\r\n <div className=\"space-y-4\">\r\n {loading && (\r\n <div className=\"flex justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n {!loading && applications.length === 0 && (\r\n <div className=\"text-center py-12 text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)]\">\r\n {t('applications.noApps')}\r\n </div>\r\n )}\r\n {!loading && applications.length > 0 && (\r\n applications.map(app => (\r\n <div key={app.id} className=\"bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] overflow-hidden\">\r\n <div className=\"flex items-center gap-4 p-4\">\r\n <button\r\n onClick={() => toggleApp(app.id)}\r\n className=\"p-1 rounded hover:bg-[var(--bg-hover)]\"\r\n >\r\n {expandedApps.has(app.id) ? (\r\n <ChevronDown className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <ChevronRight className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n )}\r\n </button>\r\n\r\n <div className=\"w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-900 flex items-center justify-center\">\r\n {app.iconType === 'Lucide' && app.icon && (\r\n <DynamicIcon name={app.icon} className=\"w-5 h-5 text-primary-600 dark:text-primary-400\" />\r\n )}\r\n {app.iconType === 'Url' && app.icon && (\r\n <img src={app.icon} alt=\"\" className=\"w-6 h-6\" />\r\n )}\r\n {!(app.iconType === 'Lucide' && app.icon) && !(app.iconType === 'Url' && app.icon) && (\r\n <div className=\"w-5 h-5 bg-primary-500 rounded\" />\r\n )}\r\n </div>\r\n\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-[var(--text-primary)]\">{app.label}</span>\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]\">\r\n {app.zone}\r\n </span>\r\n {!app.isActive && (\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300\">\r\n {t('common.inactive')}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.description || app.route}\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.modulesCount} {t('applications.modules')}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <button\r\n onClick={() => setMenuOpen(menuOpen === app.id ? null : app.id)}\r\n className=\"p-2 rounded-lg hover:bg-[var(--bg-tertiary)] transition-colors\"\r\n >\r\n <MoreHorizontal className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n </button>\r\n {menuOpen === app.id && (\r\n <div className=\"absolute right-0 top-full mt-1 w-48 py-1 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] shadow-lg z-10\">\r\n <button\r\n onClick={() => { openEditAppModal(app); setMenuOpen(null); }}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-4 h-4\" />\r\n {t('common.edit')}\r\n </button>\r\n <button\r\n onClick={() => handleToggleAppStatus(app)}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {app.isActive ? <EyeOff className=\"w-4 h-4\" /> : <Eye className=\"w-4 h-4\" />}\r\n {app.isActive ? t('common.deactivate') : t('common.activate')}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {expandedApps.has(app.id) && (\r\n <div className=\"border-t border-[var(--border-color)] p-4 bg-[var(--bg-primary)]\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"font-medium text-[var(--text-primary)]\">{t('applications.modules')}</h3>\r\n </div>\r\n\r\n {modules[app.id] ? (\r\n modules[app.id].length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {t('applications.noModules')}\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n {modules[app.id].map(module => (\r\n <div\r\n key={module.id}\r\n className=\"flex items-center gap-3 p-3 rounded-lg bg-[var(--bg-secondary)] border border-[var(--border-color)]\"\r\n >\r\n <div className=\"w-8 h-8 rounded-lg bg-[var(--bg-tertiary)] flex items-center justify-center\">\r\n {module.iconType === 'Lucide' && module.icon ? (\r\n <DynamicIcon name={module.icon} className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <div className=\"w-4 h-4 bg-[var(--text-tertiary)] rounded\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1\">\r\n <div className=\"font-medium text-sm text-[var(--text-primary)]\">{module.label}</div>\r\n <div className=\"text-xs text-[var(--text-secondary)]\">{module.route}</div>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n onClick={() => openEditModuleModal(app.id, module)}\r\n className=\"p-1.5 rounded-lg hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-3.5 h-3.5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"flex justify-center py-4\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n ))\r\n )}\r\n </div>\r\n\r\n {/* Application Edit Modal */}\r\n {showAppModal && editingApp && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.edit')}\r\n </h2>\r\n <button onClick={() => setShowAppModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleAppSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingApp.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={appFormData.label}\r\n onChange={e => setAppFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.description')}\r\n </label>\r\n <textarea\r\n value={appFormData.description}\r\n onChange={e => setAppFormData(prev => ({ ...prev, description: e.target.value }))}\r\n rows={2}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 resize-none\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={appFormData.iconType}\r\n onChange={e => setAppFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.icon}\r\n onChange={e => setAppFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n placeholder={appFormData.iconType === 'Lucide' ? 'Shield, Users, Settings...' : 'https://...'}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.route}\r\n onChange={e => setAppFormData(prev => ({ ...prev, route: e.target.value }))}\r\n placeholder=\"/administration/...\"\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowAppModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Module Edit Modal */}\r\n {showModuleModal && editingModule && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.editModule')}\r\n </h2>\r\n <button onClick={() => setShowModuleModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleModuleSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingModule.module.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={moduleFormData.label}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={moduleFormData.iconType}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.icon}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.route}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, route: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowModuleModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["DynamicIcon","name","className","IconComponent","LucideIcons","jsx","NavigationAppsPage","t","useTranslation","applications","setApplications","useState","loading","setLoading","expandedApps","setExpandedApps","modules","setModules","showAppModal","setShowAppModal","showModuleModal","setShowModuleModal","editingApp","setEditingApp","editingModule","setEditingModule","appFormData","setAppFormData","moduleFormData","setModuleFormData","saving","setSaving","error","setError","menuOpen","setMenuOpen","loadApplications","useCallback","result","adminApi","err","loadModules","appId","prev","useEffect","toggleApp","next","openEditAppModal","app","openEditModuleModal","module","handleAppSubmit","updateData","message","handleModuleSubmit","handleToggleAppStatus","jsxs","Breadcrumb","Loader2","ChevronDown","ChevronRight","MoreHorizontal","Edit2","EyeOff","Eye","X"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),B=require("react-i18next"),o=require("lucide-react"),x=require("./index-2wUhd9Lu.js");function H(s){const l=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const d in s)if(d!=="default"){const c=Object.getOwnPropertyDescriptor(s,d);Object.defineProperty(l,d,c.get?c:{enumerable:!0,get:()=>s[d]})}}return l.default=s,Object.freeze(l)}const G=H(o),L=({name:s,className:l})=>{const c=G[s];return c?e.jsx(c,{className:l}):null};function J(){const{t:s}=B.useTranslation("admin"),[l,d]=a.useState([]),[c,T]=a.useState(!0),[A,O]=a.useState(new Set),[y,E]=a.useState({}),[D,g]=a.useState(!1),[q,h]=a.useState(!1),[f,z]=a.useState(null),[m,F]=a.useState(null),[i,u]=a.useState({label:"",description:"",icon:"",iconType:"Lucide",route:"",displayOrder:0}),[n,b]=a.useState({label:"",description:"",icon:"",iconType:"Lucide",route:"",displayOrder:0}),[j,N]=a.useState(!1),[w,p]=a.useState(null),[C,S]=a.useState(null),k=a.useCallback(async()=>{try{T(!0);const t=await x.adminApi.applications.getAll();d(t)}catch(t){console.error("Failed to load applications:",t)}finally{T(!1)}},[]),M=async t=>{try{const r=await x.adminApi.applications.getModules(t);E(v=>({...v,[t]:r}))}catch(r){console.error("Failed to load modules:",r)}};a.useEffect(()=>{k()},[k]);const U=async t=>{const r=new Set(A);r.has(t)?r.delete(t):(r.add(t),y[t]||await M(t)),O(r)},P=t=>{z(t),u({label:t.label,description:t.description||"",icon:t.icon||"",iconType:t.iconType,route:t.route||"",displayOrder:t.displayOrder}),p(null),g(!0)},R=(t,r)=>{F({appId:t,module:r}),b({label:r.label,description:r.description||"",icon:r.icon||"",iconType:r.iconType,route:r.route||"",displayOrder:r.displayOrder}),p(null),h(!0)},I=async t=>{if(t.preventDefault(),!!f){N(!0),p(null);try{const r={label:i.label,description:i.description,icon:i.icon,iconType:i.iconType,route:i.route,displayOrder:i.displayOrder};await x.adminApi.applications.update(f.id,r),g(!1),k()}catch(r){const v=r instanceof Error?r.message:"An error occurred";p(v)}finally{N(!1)}}},_=async t=>{if(t.preventDefault(),!!m){N(!0),p(null);try{const r={label:n.label,description:n.description,icon:n.icon,iconType:n.iconType,route:n.route,displayOrder:n.displayOrder};await x.adminApi.applications.updateModule(m.appId,m.module.id,r),h(!1),M(m.appId)}catch(r){const v=r instanceof Error?r.message:"An error occurred";p(v)}finally{N(!1)}}},X=async t=>{try{t.isActive?await x.adminApi.applications.deactivate(t.id):await x.adminApi.applications.activate(t.id),k()}catch(r){console.error("Failed to toggle app status:",r)}S(null)};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(x.Breadcrumb,{items:[{label:s("header.title"),href:"/administration"},{label:s("applications.title")}]}),e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:s("applications.title")}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:s("applications.subtitle")})]})}),e.jsxs("div",{className:"space-y-4",children:[c&&e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(o.Loader2,{className:"w-6 h-6 animate-spin text-primary-500"})}),!c&&l.length===0&&e.jsx("div",{className:"text-center py-12 text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)]",children:s("applications.noApps")}),!c&&l.length>0&&l.map(t=>e.jsxs("div",{className:"bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-4 p-4",children:[e.jsx("button",{onClick:()=>U(t.id),className:"p-1 rounded hover:bg-[var(--bg-hover)]",children:A.has(t.id)?e.jsx(o.ChevronDown,{className:"w-5 h-5 text-[var(--text-secondary)]"}):e.jsx(o.ChevronRight,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-900 flex items-center justify-center",children:[t.iconType==="Lucide"&&t.icon&&e.jsx(L,{name:t.icon,className:"w-5 h-5 text-primary-600 dark:text-primary-400"}),t.iconType==="Url"&&t.icon&&e.jsx("img",{src:t.icon,alt:"",className:"w-6 h-6"}),!(t.iconType==="Lucide"&&t.icon)&&!(t.iconType==="Url"&&t.icon)&&e.jsx("div",{className:"w-5 h-5 bg-primary-500 rounded"})]}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.label}),e.jsx("span",{className:"px-2 py-0.5 text-xs rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",children:t.zone}),!t.isActive&&e.jsx("span",{className:"px-2 py-0.5 text-xs rounded-full bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300",children:s("common.inactive")})]}),e.jsx("div",{className:"text-sm text-[var(--text-secondary)]",children:t.description||t.route})]}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[t.modulesCount," ",s("applications.modules")]}),e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>S(C===t.id?null:t.id),className:"p-2 rounded-lg hover:bg-[var(--bg-tertiary)] transition-colors",children:e.jsx(o.MoreHorizontal,{className:"w-4 h-4 text-[var(--text-secondary)]"})}),C===t.id&&e.jsxs("div",{className:"absolute right-0 top-full mt-1 w-48 py-1 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] shadow-lg z-10",children:[e.jsxs("button",{onClick:()=>{P(t),S(null)},className:"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(o.Edit2,{className:"w-4 h-4"}),s("common.edit")]}),e.jsxs("button",{onClick:()=>X(t),className:"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:[t.isActive?e.jsx(o.EyeOff,{className:"w-4 h-4"}):e.jsx(o.Eye,{className:"w-4 h-4"}),t.isActive?s("common.deactivate"):s("common.activate")]})]})]})]}),A.has(t.id)&&e.jsxs("div",{className:"border-t border-[var(--border-color)] p-4 bg-[var(--bg-primary)]",children:[e.jsx("div",{className:"flex items-center justify-between mb-4",children:e.jsx("h3",{className:"font-medium text-[var(--text-primary)]",children:s("applications.modules")})}),y[t.id]?y[t.id].length===0?e.jsx("div",{className:"text-center py-8 text-[var(--text-secondary)]",children:s("applications.noModules")}):e.jsx("div",{className:"space-y-2",children:y[t.id].map(r=>e.jsxs("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-[var(--bg-secondary)] border border-[var(--border-color)]",children:[e.jsx("div",{className:"w-8 h-8 rounded-lg bg-[var(--bg-tertiary)] flex items-center justify-center",children:r.iconType==="Lucide"&&r.icon?e.jsx(L,{name:r.icon,className:"w-4 h-4 text-[var(--text-secondary)]"}):e.jsx("div",{className:"w-4 h-4 bg-[var(--text-tertiary)] rounded"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-medium text-sm text-[var(--text-primary)]",children:r.label}),e.jsx("div",{className:"text-xs text-[var(--text-secondary)]",children:r.route})]}),e.jsx("div",{className:"flex items-center gap-1",children:e.jsx("button",{onClick:()=>R(t.id,r),className:"p-1.5 rounded-lg hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(o.Edit2,{className:"w-3.5 h-3.5 text-[var(--text-secondary)]"})})})]},r.id))}):e.jsx("div",{className:"flex justify-center py-4",children:e.jsx(o.Loader2,{className:"w-5 h-5 animate-spin text-primary-500"})})]})]},t.id))]}),D&&f&&e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsx("h2",{className:"text-xl font-bold text-[var(--text-primary)]",children:s("applications.edit")}),e.jsx("button",{onClick:()=>g(!1),className:"p-2 rounded-lg hover:bg-[var(--bg-hover)]",children:e.jsx(o.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]}),w&&e.jsx("div",{className:"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm",children:w}),e.jsxs("form",{onSubmit:I,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.code")}),e.jsx("input",{type:"text",value:f.code,disabled:!0,className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] 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:s("applications.form.label")}),e.jsx("input",{type:"text",required:!0,value:i.label,onChange:t=>u(r=>({...r,label:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.description")}),e.jsx("textarea",{value:i.description,onChange:t=>u(r=>({...r,description:t.target.value})),rows:2,className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 resize-none"})]}),e.jsxs("div",{className:"grid 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:s("applications.form.iconType")}),e.jsxs("select",{value:i.iconType,onChange:t=>u(r=>({...r,iconType:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500",children:[e.jsx("option",{value:"Lucide",children:"Lucide Icon"}),e.jsx("option",{value:"Url",children:"URL"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.icon")}),e.jsx("input",{type:"text",value:i.icon,onChange:t=>u(r=>({...r,icon:t.target.value})),placeholder:i.iconType==="Lucide"?"Shield, Users, Settings...":"https://...",className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.route")}),e.jsx("input",{type:"text",value:i.route,onChange:t=>u(r=>({...r,route:t.target.value})),placeholder:"/administration/...",className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-4",children:[e.jsx("button",{type:"button",onClick:()=>g(!1),className:"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors",children:s("common.cancel")}),e.jsxs("button",{type:"submit",disabled:j,className:"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2",children:[j&&e.jsx(o.Loader2,{className:"w-4 h-4 animate-spin"}),s("common.save")]})]})]})]})}),q&&m&&e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsx("h2",{className:"text-xl font-bold text-[var(--text-primary)]",children:s("applications.editModule")}),e.jsx("button",{onClick:()=>h(!1),className:"p-2 rounded-lg hover:bg-[var(--bg-hover)]",children:e.jsx(o.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]}),w&&e.jsx("div",{className:"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm",children:w}),e.jsxs("form",{onSubmit:_,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.code")}),e.jsx("input",{type:"text",value:m.module.code,disabled:!0,className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] 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:s("applications.form.label")}),e.jsx("input",{type:"text",required:!0,value:n.label,onChange:t=>b(r=>({...r,label:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{className:"grid 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:s("applications.form.iconType")}),e.jsxs("select",{value:n.iconType,onChange:t=>b(r=>({...r,iconType:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500",children:[e.jsx("option",{value:"Lucide",children:"Lucide Icon"}),e.jsx("option",{value:"Url",children:"URL"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.icon")}),e.jsx("input",{type:"text",value:n.icon,onChange:t=>b(r=>({...r,icon:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.route")}),e.jsx("input",{type:"text",value:n.route,onChange:t=>b(r=>({...r,route:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-4",children:[e.jsx("button",{type:"button",onClick:()=>h(!1),className:"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors",children:s("common.cancel")}),e.jsxs("button",{type:"submit",disabled:j,className:"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2",children:[j&&e.jsx(o.Loader2,{className:"w-4 h-4 animate-spin"}),s("common.save")]})]})]})]})})]})}exports.NavigationAppsPage=J;
2
- //# sourceMappingURL=NavigationAppsPage-If7tmCFY.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),B=require("react-i18next"),o=require("lucide-react"),x=require("./index-IgLVXPg8.js");function H(s){const l=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const d in s)if(d!=="default"){const c=Object.getOwnPropertyDescriptor(s,d);Object.defineProperty(l,d,c.get?c:{enumerable:!0,get:()=>s[d]})}}return l.default=s,Object.freeze(l)}const G=H(o),L=({name:s,className:l})=>{const c=G[s];return c?e.jsx(c,{className:l}):null};function J(){const{t:s}=B.useTranslation("admin"),[l,d]=a.useState([]),[c,T]=a.useState(!0),[A,O]=a.useState(new Set),[y,E]=a.useState({}),[D,g]=a.useState(!1),[q,h]=a.useState(!1),[f,z]=a.useState(null),[m,F]=a.useState(null),[i,u]=a.useState({label:"",description:"",icon:"",iconType:"Lucide",route:"",displayOrder:0}),[n,b]=a.useState({label:"",description:"",icon:"",iconType:"Lucide",route:"",displayOrder:0}),[j,N]=a.useState(!1),[w,p]=a.useState(null),[C,S]=a.useState(null),k=a.useCallback(async()=>{try{T(!0);const t=await x.adminApi.applications.getAll();d(t)}catch(t){console.error("Failed to load applications:",t)}finally{T(!1)}},[]),M=async t=>{try{const r=await x.adminApi.applications.getModules(t);E(v=>({...v,[t]:r}))}catch(r){console.error("Failed to load modules:",r)}};a.useEffect(()=>{k()},[k]);const U=async t=>{const r=new Set(A);r.has(t)?r.delete(t):(r.add(t),y[t]||await M(t)),O(r)},P=t=>{z(t),u({label:t.label,description:t.description||"",icon:t.icon||"",iconType:t.iconType,route:t.route||"",displayOrder:t.displayOrder}),p(null),g(!0)},R=(t,r)=>{F({appId:t,module:r}),b({label:r.label,description:r.description||"",icon:r.icon||"",iconType:r.iconType,route:r.route||"",displayOrder:r.displayOrder}),p(null),h(!0)},I=async t=>{if(t.preventDefault(),!!f){N(!0),p(null);try{const r={label:i.label,description:i.description,icon:i.icon,iconType:i.iconType,route:i.route,displayOrder:i.displayOrder};await x.adminApi.applications.update(f.id,r),g(!1),k()}catch(r){const v=r instanceof Error?r.message:"An error occurred";p(v)}finally{N(!1)}}},_=async t=>{if(t.preventDefault(),!!m){N(!0),p(null);try{const r={label:n.label,description:n.description,icon:n.icon,iconType:n.iconType,route:n.route,displayOrder:n.displayOrder};await x.adminApi.applications.updateModule(m.appId,m.module.id,r),h(!1),M(m.appId)}catch(r){const v=r instanceof Error?r.message:"An error occurred";p(v)}finally{N(!1)}}},X=async t=>{try{t.isActive?await x.adminApi.applications.deactivate(t.id):await x.adminApi.applications.activate(t.id),k()}catch(r){console.error("Failed to toggle app status:",r)}S(null)};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(x.Breadcrumb,{items:[{label:s("header.title"),href:"/administration"},{label:s("applications.title")}]}),e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:s("applications.title")}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:s("applications.subtitle")})]})}),e.jsxs("div",{className:"space-y-4",children:[c&&e.jsx("div",{className:"flex justify-center py-12",children:e.jsx(o.Loader2,{className:"w-6 h-6 animate-spin text-primary-500"})}),!c&&l.length===0&&e.jsx("div",{className:"text-center py-12 text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)]",children:s("applications.noApps")}),!c&&l.length>0&&l.map(t=>e.jsxs("div",{className:"bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-4 p-4",children:[e.jsx("button",{onClick:()=>U(t.id),className:"p-1 rounded hover:bg-[var(--bg-hover)]",children:A.has(t.id)?e.jsx(o.ChevronDown,{className:"w-5 h-5 text-[var(--text-secondary)]"}):e.jsx(o.ChevronRight,{className:"w-5 h-5 text-[var(--text-secondary)]"})}),e.jsxs("div",{className:"w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-900 flex items-center justify-center",children:[t.iconType==="Lucide"&&t.icon&&e.jsx(L,{name:t.icon,className:"w-5 h-5 text-primary-600 dark:text-primary-400"}),t.iconType==="Url"&&t.icon&&e.jsx("img",{src:t.icon,alt:"",className:"w-6 h-6"}),!(t.iconType==="Lucide"&&t.icon)&&!(t.iconType==="Url"&&t.icon)&&e.jsx("div",{className:"w-5 h-5 bg-primary-500 rounded"})]}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.label}),e.jsx("span",{className:"px-2 py-0.5 text-xs rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]",children:t.zone}),!t.isActive&&e.jsx("span",{className:"px-2 py-0.5 text-xs rounded-full bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300",children:s("common.inactive")})]}),e.jsx("div",{className:"text-sm text-[var(--text-secondary)]",children:t.description||t.route})]}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[t.modulesCount," ",s("applications.modules")]}),e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>S(C===t.id?null:t.id),className:"p-2 rounded-lg hover:bg-[var(--bg-tertiary)] transition-colors",children:e.jsx(o.MoreHorizontal,{className:"w-4 h-4 text-[var(--text-secondary)]"})}),C===t.id&&e.jsxs("div",{className:"absolute right-0 top-full mt-1 w-48 py-1 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] shadow-lg z-10",children:[e.jsxs("button",{onClick:()=>{P(t),S(null)},className:"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(o.Edit2,{className:"w-4 h-4"}),s("common.edit")]}),e.jsxs("button",{onClick:()=>X(t),className:"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors",children:[t.isActive?e.jsx(o.EyeOff,{className:"w-4 h-4"}):e.jsx(o.Eye,{className:"w-4 h-4"}),t.isActive?s("common.deactivate"):s("common.activate")]})]})]})]}),A.has(t.id)&&e.jsxs("div",{className:"border-t border-[var(--border-color)] p-4 bg-[var(--bg-primary)]",children:[e.jsx("div",{className:"flex items-center justify-between mb-4",children:e.jsx("h3",{className:"font-medium text-[var(--text-primary)]",children:s("applications.modules")})}),y[t.id]?y[t.id].length===0?e.jsx("div",{className:"text-center py-8 text-[var(--text-secondary)]",children:s("applications.noModules")}):e.jsx("div",{className:"space-y-2",children:y[t.id].map(r=>e.jsxs("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-[var(--bg-secondary)] border border-[var(--border-color)]",children:[e.jsx("div",{className:"w-8 h-8 rounded-lg bg-[var(--bg-tertiary)] flex items-center justify-center",children:r.iconType==="Lucide"&&r.icon?e.jsx(L,{name:r.icon,className:"w-4 h-4 text-[var(--text-secondary)]"}):e.jsx("div",{className:"w-4 h-4 bg-[var(--text-tertiary)] rounded"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-medium text-sm text-[var(--text-primary)]",children:r.label}),e.jsx("div",{className:"text-xs text-[var(--text-secondary)]",children:r.route})]}),e.jsx("div",{className:"flex items-center gap-1",children:e.jsx("button",{onClick:()=>R(t.id,r),className:"p-1.5 rounded-lg hover:bg-[var(--bg-hover)] transition-colors",children:e.jsx(o.Edit2,{className:"w-3.5 h-3.5 text-[var(--text-secondary)]"})})})]},r.id))}):e.jsx("div",{className:"flex justify-center py-4",children:e.jsx(o.Loader2,{className:"w-5 h-5 animate-spin text-primary-500"})})]})]},t.id))]}),D&&f&&e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsx("h2",{className:"text-xl font-bold text-[var(--text-primary)]",children:s("applications.edit")}),e.jsx("button",{onClick:()=>g(!1),className:"p-2 rounded-lg hover:bg-[var(--bg-hover)]",children:e.jsx(o.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]}),w&&e.jsx("div",{className:"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm",children:w}),e.jsxs("form",{onSubmit:I,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.code")}),e.jsx("input",{type:"text",value:f.code,disabled:!0,className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] 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:s("applications.form.label")}),e.jsx("input",{type:"text",required:!0,value:i.label,onChange:t=>u(r=>({...r,label:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.description")}),e.jsx("textarea",{value:i.description,onChange:t=>u(r=>({...r,description:t.target.value})),rows:2,className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 resize-none"})]}),e.jsxs("div",{className:"grid 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:s("applications.form.iconType")}),e.jsxs("select",{value:i.iconType,onChange:t=>u(r=>({...r,iconType:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500",children:[e.jsx("option",{value:"Lucide",children:"Lucide Icon"}),e.jsx("option",{value:"Url",children:"URL"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.icon")}),e.jsx("input",{type:"text",value:i.icon,onChange:t=>u(r=>({...r,icon:t.target.value})),placeholder:i.iconType==="Lucide"?"Shield, Users, Settings...":"https://...",className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.route")}),e.jsx("input",{type:"text",value:i.route,onChange:t=>u(r=>({...r,route:t.target.value})),placeholder:"/administration/...",className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-4",children:[e.jsx("button",{type:"button",onClick:()=>g(!1),className:"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors",children:s("common.cancel")}),e.jsxs("button",{type:"submit",disabled:j,className:"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2",children:[j&&e.jsx(o.Loader2,{className:"w-4 h-4 animate-spin"}),s("common.save")]})]})]})]})}),q&&m&&e.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:e.jsxs("div",{className:"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsx("h2",{className:"text-xl font-bold text-[var(--text-primary)]",children:s("applications.editModule")}),e.jsx("button",{onClick:()=>h(!1),className:"p-2 rounded-lg hover:bg-[var(--bg-hover)]",children:e.jsx(o.X,{className:"w-5 h-5 text-[var(--text-secondary)]"})})]}),w&&e.jsx("div",{className:"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm",children:w}),e.jsxs("form",{onSubmit:_,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.code")}),e.jsx("input",{type:"text",value:m.module.code,disabled:!0,className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] 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:s("applications.form.label")}),e.jsx("input",{type:"text",required:!0,value:n.label,onChange:t=>b(r=>({...r,label:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{className:"grid 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:s("applications.form.iconType")}),e.jsxs("select",{value:n.iconType,onChange:t=>b(r=>({...r,iconType:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500",children:[e.jsx("option",{value:"Lucide",children:"Lucide Icon"}),e.jsx("option",{value:"Url",children:"URL"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.icon")}),e.jsx("input",{type:"text",value:n.icon,onChange:t=>b(r=>({...r,icon:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:s("applications.form.route")}),e.jsx("input",{type:"text",value:n.route,onChange:t=>b(r=>({...r,route:t.target.value})),className:"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500"})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-4",children:[e.jsx("button",{type:"button",onClick:()=>h(!1),className:"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors",children:s("common.cancel")}),e.jsxs("button",{type:"submit",disabled:j,className:"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2",children:[j&&e.jsx(o.Loader2,{className:"w-4 h-4 animate-spin"}),s("common.save")]})]})]})]})})]})}exports.NavigationAppsPage=J;
2
+ //# sourceMappingURL=NavigationAppsPage-THNPOAjv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationAppsPage-If7tmCFY.js","sources":["../../src/pages/platform/administration/applications/NavigationAppsPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Edit2, MoreHorizontal, X, Loader2, Eye, EyeOff, ChevronDown, ChevronRight } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport type { LucideIcon } from 'lucide-react';\r\nimport { adminApi, type ApplicationListDto, type ApplicationModuleDto, type UpdateApplicationRequest, type UpdateModuleRequest } from '@/services/api/adminApi';\r\n\r\n// Dynamic icon component\r\nconst DynamicIcon = ({ name, className }: { name: string; className?: string }) => {\r\n const icons = LucideIcons as unknown as Record<string, LucideIcon>;\r\n const IconComponent = icons[name];\r\n if (!IconComponent) return null;\r\n return <IconComponent className={className} />;\r\n};\r\n\r\nexport function NavigationAppsPage(): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const [applications, setApplications] = useState<ApplicationListDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [expandedApps, setExpandedApps] = useState<Set<string>>(new Set());\r\n const [modules, setModules] = useState<Record<string, ApplicationModuleDto[]>>({});\r\n const [showAppModal, setShowAppModal] = useState(false);\r\n const [showModuleModal, setShowModuleModal] = useState(false);\r\n const [editingApp, setEditingApp] = useState<ApplicationListDto | null>(null);\r\n const [editingModule, setEditingModule] = useState<{ appId: string; module: ApplicationModuleDto } | null>(null);\r\n const [appFormData, setAppFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [moduleFormData, setModuleFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\r\n\r\n const loadApplications = useCallback(async () => {\r\n try {\r\n setLoading(true);\r\n const result = await adminApi.applications.getAll();\r\n setApplications(result);\r\n } catch (err) {\r\n console.error('Failed to load applications:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const loadModules = async (appId: string) => {\r\n try {\r\n const result = await adminApi.applications.getModules(appId);\r\n setModules(prev => ({ ...prev, [appId]: result }));\r\n } catch (err) {\r\n console.error('Failed to load modules:', err);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n loadApplications();\r\n }, [loadApplications]);\r\n\r\n const toggleApp = async (appId: string) => {\r\n const next = new Set(expandedApps);\r\n if (next.has(appId)) {\r\n next.delete(appId);\r\n } else {\r\n next.add(appId);\r\n if (!modules[appId]) {\r\n await loadModules(appId);\r\n }\r\n }\r\n setExpandedApps(next);\r\n };\r\n\r\n const openEditAppModal = (app: ApplicationListDto) => {\r\n setEditingApp(app);\r\n setAppFormData({\r\n label: app.label,\r\n description: app.description || '',\r\n icon: app.icon || '',\r\n iconType: app.iconType,\r\n route: app.route || '',\r\n displayOrder: app.displayOrder\r\n });\r\n setError(null);\r\n setShowAppModal(true);\r\n };\r\n\r\n const openEditModuleModal = (appId: string, module: ApplicationModuleDto) => {\r\n setEditingModule({ appId, module });\r\n setModuleFormData({\r\n label: module.label,\r\n description: module.description || '',\r\n icon: module.icon || '',\r\n iconType: module.iconType,\r\n route: module.route || '',\r\n displayOrder: module.displayOrder\r\n });\r\n setError(null);\r\n setShowModuleModal(true);\r\n };\r\n\r\n const handleAppSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingApp) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateApplicationRequest = {\r\n label: appFormData.label,\r\n description: appFormData.description,\r\n icon: appFormData.icon,\r\n iconType: appFormData.iconType,\r\n route: appFormData.route,\r\n displayOrder: appFormData.displayOrder\r\n };\r\n await adminApi.applications.update(editingApp.id, updateData);\r\n setShowAppModal(false);\r\n loadApplications();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleModuleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingModule) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateModuleRequest = {\r\n label: moduleFormData.label,\r\n description: moduleFormData.description,\r\n icon: moduleFormData.icon,\r\n iconType: moduleFormData.iconType,\r\n route: moduleFormData.route,\r\n displayOrder: moduleFormData.displayOrder\r\n };\r\n await adminApi.applications.updateModule(editingModule.appId, editingModule.module.id, updateData);\r\n setShowModuleModal(false);\r\n loadModules(editingModule.appId);\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleToggleAppStatus = async (app: ApplicationListDto) => {\r\n try {\r\n if (app.isActive) {\r\n await adminApi.applications.deactivate(app.id);\r\n } else {\r\n await adminApi.applications.activate(app.id);\r\n }\r\n loadApplications();\r\n } catch (err) {\r\n console.error('Failed to toggle app status:', err);\r\n }\r\n setMenuOpen(null);\r\n };\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('header.title'), href: '/administration' },\r\n { label: t('applications.title') }\r\n ]}\r\n />\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('applications.title')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('applications.subtitle')}</p>\r\n </div>\r\n </div>\r\n\r\n {/* Applications list */}\r\n <div className=\"space-y-4\">\r\n {loading && (\r\n <div className=\"flex justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n {!loading && applications.length === 0 && (\r\n <div className=\"text-center py-12 text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)]\">\r\n {t('applications.noApps')}\r\n </div>\r\n )}\r\n {!loading && applications.length > 0 && (\r\n applications.map(app => (\r\n <div key={app.id} className=\"bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] overflow-hidden\">\r\n <div className=\"flex items-center gap-4 p-4\">\r\n <button\r\n onClick={() => toggleApp(app.id)}\r\n className=\"p-1 rounded hover:bg-[var(--bg-hover)]\"\r\n >\r\n {expandedApps.has(app.id) ? (\r\n <ChevronDown className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <ChevronRight className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n )}\r\n </button>\r\n\r\n <div className=\"w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-900 flex items-center justify-center\">\r\n {app.iconType === 'Lucide' && app.icon && (\r\n <DynamicIcon name={app.icon} className=\"w-5 h-5 text-primary-600 dark:text-primary-400\" />\r\n )}\r\n {app.iconType === 'Url' && app.icon && (\r\n <img src={app.icon} alt=\"\" className=\"w-6 h-6\" />\r\n )}\r\n {!(app.iconType === 'Lucide' && app.icon) && !(app.iconType === 'Url' && app.icon) && (\r\n <div className=\"w-5 h-5 bg-primary-500 rounded\" />\r\n )}\r\n </div>\r\n\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-[var(--text-primary)]\">{app.label}</span>\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]\">\r\n {app.zone}\r\n </span>\r\n {!app.isActive && (\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300\">\r\n {t('common.inactive')}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.description || app.route}\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.modulesCount} {t('applications.modules')}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <button\r\n onClick={() => setMenuOpen(menuOpen === app.id ? null : app.id)}\r\n className=\"p-2 rounded-lg hover:bg-[var(--bg-tertiary)] transition-colors\"\r\n >\r\n <MoreHorizontal className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n </button>\r\n {menuOpen === app.id && (\r\n <div className=\"absolute right-0 top-full mt-1 w-48 py-1 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] shadow-lg z-10\">\r\n <button\r\n onClick={() => { openEditAppModal(app); setMenuOpen(null); }}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-4 h-4\" />\r\n {t('common.edit')}\r\n </button>\r\n <button\r\n onClick={() => handleToggleAppStatus(app)}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {app.isActive ? <EyeOff className=\"w-4 h-4\" /> : <Eye className=\"w-4 h-4\" />}\r\n {app.isActive ? t('common.deactivate') : t('common.activate')}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {expandedApps.has(app.id) && (\r\n <div className=\"border-t border-[var(--border-color)] p-4 bg-[var(--bg-primary)]\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"font-medium text-[var(--text-primary)]\">{t('applications.modules')}</h3>\r\n </div>\r\n\r\n {modules[app.id] ? (\r\n modules[app.id].length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {t('applications.noModules')}\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n {modules[app.id].map(module => (\r\n <div\r\n key={module.id}\r\n className=\"flex items-center gap-3 p-3 rounded-lg bg-[var(--bg-secondary)] border border-[var(--border-color)]\"\r\n >\r\n <div className=\"w-8 h-8 rounded-lg bg-[var(--bg-tertiary)] flex items-center justify-center\">\r\n {module.iconType === 'Lucide' && module.icon ? (\r\n <DynamicIcon name={module.icon} className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <div className=\"w-4 h-4 bg-[var(--text-tertiary)] rounded\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1\">\r\n <div className=\"font-medium text-sm text-[var(--text-primary)]\">{module.label}</div>\r\n <div className=\"text-xs text-[var(--text-secondary)]\">{module.route}</div>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n onClick={() => openEditModuleModal(app.id, module)}\r\n className=\"p-1.5 rounded-lg hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-3.5 h-3.5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"flex justify-center py-4\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n ))\r\n )}\r\n </div>\r\n\r\n {/* Application Edit Modal */}\r\n {showAppModal && editingApp && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.edit')}\r\n </h2>\r\n <button onClick={() => setShowAppModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleAppSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingApp.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={appFormData.label}\r\n onChange={e => setAppFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.description')}\r\n </label>\r\n <textarea\r\n value={appFormData.description}\r\n onChange={e => setAppFormData(prev => ({ ...prev, description: e.target.value }))}\r\n rows={2}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 resize-none\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={appFormData.iconType}\r\n onChange={e => setAppFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.icon}\r\n onChange={e => setAppFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n placeholder={appFormData.iconType === 'Lucide' ? 'Shield, Users, Settings...' : 'https://...'}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.route}\r\n onChange={e => setAppFormData(prev => ({ ...prev, route: e.target.value }))}\r\n placeholder=\"/administration/...\"\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowAppModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Module Edit Modal */}\r\n {showModuleModal && editingModule && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.editModule')}\r\n </h2>\r\n <button onClick={() => setShowModuleModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleModuleSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingModule.module.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={moduleFormData.label}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={moduleFormData.iconType}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.icon}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.route}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, route: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowModuleModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["DynamicIcon","name","className","IconComponent","LucideIcons","jsx","NavigationAppsPage","t","useTranslation","applications","setApplications","useState","loading","setLoading","expandedApps","setExpandedApps","modules","setModules","showAppModal","setShowAppModal","showModuleModal","setShowModuleModal","editingApp","setEditingApp","editingModule","setEditingModule","appFormData","setAppFormData","moduleFormData","setModuleFormData","saving","setSaving","error","setError","menuOpen","setMenuOpen","loadApplications","useCallback","result","adminApi","err","loadModules","appId","prev","useEffect","toggleApp","next","openEditAppModal","app","openEditModuleModal","module","handleAppSubmit","e","updateData","message","handleModuleSubmit","handleToggleAppStatus","jsxs","Breadcrumb","Loader2","ChevronDown","ChevronRight","MoreHorizontal","Edit2","EyeOff","Eye","X"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationAppsPage-THNPOAjv.js","sources":["../../src/pages/platform/administration/applications/NavigationAppsPage.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Edit2, MoreHorizontal, X, Loader2, Eye, EyeOff, ChevronDown, ChevronRight } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport type { LucideIcon } from 'lucide-react';\r\nimport { adminApi, type ApplicationListDto, type ApplicationModuleDto, type UpdateApplicationRequest, type UpdateModuleRequest } from '@/services/api/adminApi';\r\n\r\n// Dynamic icon component\r\nconst DynamicIcon = ({ name, className }: { name: string; className?: string }) => {\r\n const icons = LucideIcons as unknown as Record<string, LucideIcon>;\r\n const IconComponent = icons[name];\r\n if (!IconComponent) return null;\r\n return <IconComponent className={className} />;\r\n};\r\n\r\nexport function NavigationAppsPage(): ReactElement {\r\n const { t } = useTranslation('admin');\r\n const [applications, setApplications] = useState<ApplicationListDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [expandedApps, setExpandedApps] = useState<Set<string>>(new Set());\r\n const [modules, setModules] = useState<Record<string, ApplicationModuleDto[]>>({});\r\n const [showAppModal, setShowAppModal] = useState(false);\r\n const [showModuleModal, setShowModuleModal] = useState(false);\r\n const [editingApp, setEditingApp] = useState<ApplicationListDto | null>(null);\r\n const [editingModule, setEditingModule] = useState<{ appId: string; module: ApplicationModuleDto } | null>(null);\r\n const [appFormData, setAppFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [moduleFormData, setModuleFormData] = useState({\r\n label: '',\r\n description: '',\r\n icon: '',\r\n iconType: 'Lucide',\r\n route: '',\r\n displayOrder: 0\r\n });\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\r\n\r\n const loadApplications = useCallback(async () => {\r\n try {\r\n setLoading(true);\r\n const result = await adminApi.applications.getAll();\r\n setApplications(result);\r\n } catch (err) {\r\n console.error('Failed to load applications:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const loadModules = async (appId: string) => {\r\n try {\r\n const result = await adminApi.applications.getModules(appId);\r\n setModules(prev => ({ ...prev, [appId]: result }));\r\n } catch (err) {\r\n console.error('Failed to load modules:', err);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n loadApplications();\r\n }, [loadApplications]);\r\n\r\n const toggleApp = async (appId: string) => {\r\n const next = new Set(expandedApps);\r\n if (next.has(appId)) {\r\n next.delete(appId);\r\n } else {\r\n next.add(appId);\r\n if (!modules[appId]) {\r\n await loadModules(appId);\r\n }\r\n }\r\n setExpandedApps(next);\r\n };\r\n\r\n const openEditAppModal = (app: ApplicationListDto) => {\r\n setEditingApp(app);\r\n setAppFormData({\r\n label: app.label,\r\n description: app.description || '',\r\n icon: app.icon || '',\r\n iconType: app.iconType,\r\n route: app.route || '',\r\n displayOrder: app.displayOrder\r\n });\r\n setError(null);\r\n setShowAppModal(true);\r\n };\r\n\r\n const openEditModuleModal = (appId: string, module: ApplicationModuleDto) => {\r\n setEditingModule({ appId, module });\r\n setModuleFormData({\r\n label: module.label,\r\n description: module.description || '',\r\n icon: module.icon || '',\r\n iconType: module.iconType,\r\n route: module.route || '',\r\n displayOrder: module.displayOrder\r\n });\r\n setError(null);\r\n setShowModuleModal(true);\r\n };\r\n\r\n const handleAppSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingApp) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateApplicationRequest = {\r\n label: appFormData.label,\r\n description: appFormData.description,\r\n icon: appFormData.icon,\r\n iconType: appFormData.iconType,\r\n route: appFormData.route,\r\n displayOrder: appFormData.displayOrder\r\n };\r\n await adminApi.applications.update(editingApp.id, updateData);\r\n setShowAppModal(false);\r\n loadApplications();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleModuleSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!editingModule) return;\r\n\r\n setSaving(true);\r\n setError(null);\r\n\r\n try {\r\n const updateData: UpdateModuleRequest = {\r\n label: moduleFormData.label,\r\n description: moduleFormData.description,\r\n icon: moduleFormData.icon,\r\n iconType: moduleFormData.iconType,\r\n route: moduleFormData.route,\r\n displayOrder: moduleFormData.displayOrder\r\n };\r\n await adminApi.applications.updateModule(editingModule.appId, editingModule.module.id, updateData);\r\n setShowModuleModal(false);\r\n loadModules(editingModule.appId);\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'An error occurred';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleToggleAppStatus = async (app: ApplicationListDto) => {\r\n try {\r\n if (app.isActive) {\r\n await adminApi.applications.deactivate(app.id);\r\n } else {\r\n await adminApi.applications.activate(app.id);\r\n }\r\n loadApplications();\r\n } catch (err) {\r\n console.error('Failed to toggle app status:', err);\r\n }\r\n setMenuOpen(null);\r\n };\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('header.title'), href: '/administration' },\r\n { label: t('applications.title') }\r\n ]}\r\n />\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('applications.title')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('applications.subtitle')}</p>\r\n </div>\r\n </div>\r\n\r\n {/* Applications list */}\r\n <div className=\"space-y-4\">\r\n {loading && (\r\n <div className=\"flex justify-center py-12\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n {!loading && applications.length === 0 && (\r\n <div className=\"text-center py-12 text-[var(--text-secondary)] bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)]\">\r\n {t('applications.noApps')}\r\n </div>\r\n )}\r\n {!loading && applications.length > 0 && (\r\n applications.map(app => (\r\n <div key={app.id} className=\"bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] overflow-hidden\">\r\n <div className=\"flex items-center gap-4 p-4\">\r\n <button\r\n onClick={() => toggleApp(app.id)}\r\n className=\"p-1 rounded hover:bg-[var(--bg-hover)]\"\r\n >\r\n {expandedApps.has(app.id) ? (\r\n <ChevronDown className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <ChevronRight className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n )}\r\n </button>\r\n\r\n <div className=\"w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-900 flex items-center justify-center\">\r\n {app.iconType === 'Lucide' && app.icon && (\r\n <DynamicIcon name={app.icon} className=\"w-5 h-5 text-primary-600 dark:text-primary-400\" />\r\n )}\r\n {app.iconType === 'Url' && app.icon && (\r\n <img src={app.icon} alt=\"\" className=\"w-6 h-6\" />\r\n )}\r\n {!(app.iconType === 'Lucide' && app.icon) && !(app.iconType === 'Url' && app.icon) && (\r\n <div className=\"w-5 h-5 bg-primary-500 rounded\" />\r\n )}\r\n </div>\r\n\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-[var(--text-primary)]\">{app.label}</span>\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-[var(--bg-tertiary)] text-[var(--text-secondary)]\">\r\n {app.zone}\r\n </span>\r\n {!app.isActive && (\r\n <span className=\"px-2 py-0.5 text-xs rounded-full bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300\">\r\n {t('common.inactive')}\r\n </span>\r\n )}\r\n </div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.description || app.route}\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {app.modulesCount} {t('applications.modules')}\r\n </div>\r\n\r\n <div className=\"relative\">\r\n <button\r\n onClick={() => setMenuOpen(menuOpen === app.id ? null : app.id)}\r\n className=\"p-2 rounded-lg hover:bg-[var(--bg-tertiary)] transition-colors\"\r\n >\r\n <MoreHorizontal className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n </button>\r\n {menuOpen === app.id && (\r\n <div className=\"absolute right-0 top-full mt-1 w-48 py-1 bg-[var(--bg-secondary)] rounded-xl border border-[var(--border-color)] shadow-lg z-10\">\r\n <button\r\n onClick={() => { openEditAppModal(app); setMenuOpen(null); }}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-4 h-4\" />\r\n {t('common.edit')}\r\n </button>\r\n <button\r\n onClick={() => handleToggleAppStatus(app)}\r\n className=\"w-full flex items-center gap-2 px-4 py-2 text-left text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {app.isActive ? <EyeOff className=\"w-4 h-4\" /> : <Eye className=\"w-4 h-4\" />}\r\n {app.isActive ? t('common.deactivate') : t('common.activate')}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {expandedApps.has(app.id) && (\r\n <div className=\"border-t border-[var(--border-color)] p-4 bg-[var(--bg-primary)]\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h3 className=\"font-medium text-[var(--text-primary)]\">{t('applications.modules')}</h3>\r\n </div>\r\n\r\n {modules[app.id] ? (\r\n modules[app.id].length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {t('applications.noModules')}\r\n </div>\r\n ) : (\r\n <div className=\"space-y-2\">\r\n {modules[app.id].map(module => (\r\n <div\r\n key={module.id}\r\n className=\"flex items-center gap-3 p-3 rounded-lg bg-[var(--bg-secondary)] border border-[var(--border-color)]\"\r\n >\r\n <div className=\"w-8 h-8 rounded-lg bg-[var(--bg-tertiary)] flex items-center justify-center\">\r\n {module.iconType === 'Lucide' && module.icon ? (\r\n <DynamicIcon name={module.icon} className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n ) : (\r\n <div className=\"w-4 h-4 bg-[var(--text-tertiary)] rounded\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1\">\r\n <div className=\"font-medium text-sm text-[var(--text-primary)]\">{module.label}</div>\r\n <div className=\"text-xs text-[var(--text-secondary)]\">{module.route}</div>\r\n </div>\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n onClick={() => openEditModuleModal(app.id, module)}\r\n className=\"p-1.5 rounded-lg hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <Edit2 className=\"w-3.5 h-3.5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n ) : (\r\n <div className=\"flex justify-center py-4\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-primary-500\" />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n ))\r\n )}\r\n </div>\r\n\r\n {/* Application Edit Modal */}\r\n {showAppModal && editingApp && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.edit')}\r\n </h2>\r\n <button onClick={() => setShowAppModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleAppSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingApp.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={appFormData.label}\r\n onChange={e => setAppFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.description')}\r\n </label>\r\n <textarea\r\n value={appFormData.description}\r\n onChange={e => setAppFormData(prev => ({ ...prev, description: e.target.value }))}\r\n rows={2}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500 resize-none\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={appFormData.iconType}\r\n onChange={e => setAppFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.icon}\r\n onChange={e => setAppFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n placeholder={appFormData.iconType === 'Lucide' ? 'Shield, Users, Settings...' : 'https://...'}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={appFormData.route}\r\n onChange={e => setAppFormData(prev => ({ ...prev, route: e.target.value }))}\r\n placeholder=\"/administration/...\"\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowAppModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Module Edit Modal */}\r\n {showModuleModal && editingModule && (\r\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\r\n <div className=\"bg-[var(--bg-primary)] rounded-2xl w-full max-w-lg p-6 m-4 max-h-[90vh] overflow-y-auto\">\r\n <div className=\"flex items-center justify-between mb-6\">\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">\r\n {t('applications.editModule')}\r\n </h2>\r\n <button onClick={() => setShowModuleModal(false)} className=\"p-2 rounded-lg hover:bg-[var(--bg-hover)]\">\r\n <X className=\"w-5 h-5 text-[var(--text-secondary)]\" />\r\n </button>\r\n </div>\r\n\r\n {error && (\r\n <div className=\"mb-4 p-3 rounded-lg bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300 text-sm\">\r\n {error}\r\n </div>\r\n )}\r\n\r\n <form onSubmit={handleModuleSubmit} className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={editingModule.module.code}\r\n disabled\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-tertiary)] text-[var(--text-muted)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.label')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n required\r\n value={moduleFormData.label}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, label: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"grid grid-cols-2 gap-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.iconType')}\r\n </label>\r\n <select\r\n value={moduleFormData.iconType}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, iconType: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n >\r\n <option value=\"Lucide\">Lucide Icon</option>\r\n <option value=\"Url\">URL</option>\r\n </select>\r\n </div>\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.icon')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.icon}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, icon: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('applications.form.route')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={moduleFormData.route}\r\n onChange={e => setModuleFormData(prev => ({ ...prev, route: e.target.value }))}\r\n className=\"w-full px-4 py-2 rounded-xl border border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-primary-500\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2 pt-4\">\r\n <button\r\n type=\"button\"\r\n onClick={() => setShowModuleModal(false)}\r\n className=\"px-4 py-2 rounded-xl bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] font-medium transition-colors\"\r\n >\r\n {t('common.cancel')}\r\n </button>\r\n <button\r\n type=\"submit\"\r\n disabled={saving}\r\n className=\"px-4 py-2 rounded-xl bg-primary-600 hover:bg-primary-700 text-white font-medium transition-colors disabled:opacity-50 flex items-center gap-2\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save')}\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["DynamicIcon","name","className","IconComponent","LucideIcons","jsx","NavigationAppsPage","t","useTranslation","applications","setApplications","useState","loading","setLoading","expandedApps","setExpandedApps","modules","setModules","showAppModal","setShowAppModal","showModuleModal","setShowModuleModal","editingApp","setEditingApp","editingModule","setEditingModule","appFormData","setAppFormData","moduleFormData","setModuleFormData","saving","setSaving","error","setError","menuOpen","setMenuOpen","loadApplications","useCallback","result","adminApi","err","loadModules","appId","prev","useEffect","toggleApp","next","openEditAppModal","app","openEditModuleModal","module","handleAppSubmit","e","updateData","message","handleModuleSubmit","handleToggleAppStatus","jsxs","Breadcrumb","Loader2","ChevronDown","ChevronRight","MoreHorizontal","Edit2","EyeOff","Eye","X"],"mappings":"wfAUMA,EAAc,CAAC,CAAE,KAAAC,EAAM,UAAAC,KAAsD,CAEjF,MAAMC,EADQC,EACcH,CAAI,EAChC,OAAKE,EACEE,MAACF,GAAc,UAAAD,EAAsB,EADjB,IAE7B,EAEO,SAASI,GAAmC,CACjD,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAAA,eAAe,OAAO,EAC9B,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAA+B,CAAA,CAAE,EACnE,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAI,EACrC,CAACG,EAAcC,CAAe,EAAIJ,EAAAA,SAAsB,IAAI,GAAK,EACjE,CAACK,EAASC,CAAU,EAAIN,EAAAA,SAAiD,CAAA,CAAE,EAC3E,CAACO,EAAcC,CAAe,EAAIR,EAAAA,SAAS,EAAK,EAChD,CAACS,EAAiBC,CAAkB,EAAIV,EAAAA,SAAS,EAAK,EACtD,CAACW,EAAYC,CAAa,EAAIZ,EAAAA,SAAoC,IAAI,EACtE,CAACa,EAAeC,CAAgB,EAAId,EAAAA,SAAiE,IAAI,EACzG,CAACe,EAAaC,CAAc,EAAIhB,WAAS,CAC7C,MAAO,GACP,YAAa,GACb,KAAM,GACN,SAAU,SACV,MAAO,GACP,aAAc,CAAA,CACf,EACK,CAACiB,EAAgBC,CAAiB,EAAIlB,WAAS,CACnD,MAAO,GACP,YAAa,GACb,KAAM,GACN,SAAU,SACV,MAAO,GACP,aAAc,CAAA,CACf,EACK,CAACmB,EAAQC,CAAS,EAAIpB,EAAAA,SAAS,EAAK,EACpC,CAACqB,EAAOC,CAAQ,EAAItB,EAAAA,SAAwB,IAAI,EAChD,CAACuB,EAAUC,CAAW,EAAIxB,EAAAA,SAAwB,IAAI,EAEtDyB,EAAmBC,EAAAA,YAAY,SAAY,CAC/C,GAAI,CACFxB,EAAW,EAAI,EACf,MAAMyB,EAAS,MAAMC,WAAS,aAAa,OAAA,EAC3C7B,EAAgB4B,CAAM,CACxB,OAASE,EAAK,CACZ,QAAQ,MAAM,+BAAgCA,CAAG,CACnD,QAAA,CACE3B,EAAW,EAAK,CAClB,CACF,EAAG,CAAA,CAAE,EAEC4B,EAAc,MAAOC,GAAkB,CAC3C,GAAI,CACF,MAAMJ,EAAS,MAAMC,EAAAA,SAAS,aAAa,WAAWG,CAAK,EAC3DzB,EAAW0B,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAGJ,GAAS,CACnD,OAASE,EAAK,CACZ,QAAQ,MAAM,0BAA2BA,CAAG,CAC9C,CACF,EAEAI,EAAAA,UAAU,IAAM,CACdR,EAAA,CACF,EAAG,CAACA,CAAgB,CAAC,EAErB,MAAMS,EAAY,MAAOH,GAAkB,CACzC,MAAMI,EAAO,IAAI,IAAIhC,CAAY,EAC7BgC,EAAK,IAAIJ,CAAK,EAChBI,EAAK,OAAOJ,CAAK,GAEjBI,EAAK,IAAIJ,CAAK,EACT1B,EAAQ0B,CAAK,GAChB,MAAMD,EAAYC,CAAK,GAG3B3B,EAAgB+B,CAAI,CACtB,EAEMC,EAAoBC,GAA4B,CACpDzB,EAAcyB,CAAG,EACjBrB,EAAe,CACb,MAAOqB,EAAI,MACX,YAAaA,EAAI,aAAe,GAChC,KAAMA,EAAI,MAAQ,GAClB,SAAUA,EAAI,SACd,MAAOA,EAAI,OAAS,GACpB,aAAcA,EAAI,YAAA,CACnB,EACDf,EAAS,IAAI,EACbd,EAAgB,EAAI,CACtB,EAEM8B,EAAsB,CAACP,EAAeQ,IAAiC,CAC3EzB,EAAiB,CAAE,MAAAiB,EAAO,OAAAQ,EAAQ,EAClCrB,EAAkB,CAChB,MAAOqB,EAAO,MACd,YAAaA,EAAO,aAAe,GACnC,KAAMA,EAAO,MAAQ,GACrB,SAAUA,EAAO,SACjB,MAAOA,EAAO,OAAS,GACvB,aAAcA,EAAO,YAAA,CACtB,EACDjB,EAAS,IAAI,EACbZ,EAAmB,EAAI,CACzB,EAEM8B,EAAkB,MAAOC,GAAuB,CAEpD,GADAA,EAAE,eAAA,EACE,EAAC9B,EAEL,CAAAS,EAAU,EAAI,EACdE,EAAS,IAAI,EAEb,GAAI,CACF,MAAMoB,EAAuC,CAC3C,MAAO3B,EAAY,MACnB,YAAaA,EAAY,YACzB,KAAMA,EAAY,KAClB,SAAUA,EAAY,SACtB,MAAOA,EAAY,MACnB,aAAcA,EAAY,YAAA,EAE5B,MAAMa,EAAAA,SAAS,aAAa,OAAOjB,EAAW,GAAI+B,CAAU,EAC5DlC,EAAgB,EAAK,EACrBiB,EAAA,CACF,OAASI,EAAc,CACrB,MAAMc,EAAUd,aAAe,MAAQA,EAAI,QAAU,oBACrDP,EAASqB,CAAO,CAClB,QAAA,CACEvB,EAAU,EAAK,CACjB,EACF,EAEMwB,EAAqB,MAAOH,GAAuB,CAEvD,GADAA,EAAE,eAAA,EACE,EAAC5B,EAEL,CAAAO,EAAU,EAAI,EACdE,EAAS,IAAI,EAEb,GAAI,CACF,MAAMoB,EAAkC,CACtC,MAAOzB,EAAe,MACtB,YAAaA,EAAe,YAC5B,KAAMA,EAAe,KACrB,SAAUA,EAAe,SACzB,MAAOA,EAAe,MACtB,aAAcA,EAAe,YAAA,EAE/B,MAAMW,EAAAA,SAAS,aAAa,aAAaf,EAAc,MAAOA,EAAc,OAAO,GAAI6B,CAAU,EACjGhC,EAAmB,EAAK,EACxBoB,EAAYjB,EAAc,KAAK,CACjC,OAASgB,EAAc,CACrB,MAAMc,EAAUd,aAAe,MAAQA,EAAI,QAAU,oBACrDP,EAASqB,CAAO,CAClB,QAAA,CACEvB,EAAU,EAAK,CACjB,EACF,EAEMyB,EAAwB,MAAOR,GAA4B,CAC/D,GAAI,CACEA,EAAI,SACN,MAAMT,EAAAA,SAAS,aAAa,WAAWS,EAAI,EAAE,EAE7C,MAAMT,EAAAA,SAAS,aAAa,SAASS,EAAI,EAAE,EAE7CZ,EAAA,CACF,OAASI,EAAK,CACZ,QAAQ,MAAM,+BAAgCA,CAAG,CACnD,CACAL,EAAY,IAAI,CAClB,EAEA,OACEsB,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAApD,EAAAA,IAACqD,EAAAA,WAAA,CACC,MAAO,CACL,CAAE,MAAOnD,EAAE,cAAc,EAAG,KAAM,iBAAA,EAClC,CAAE,MAAOA,EAAE,oBAAoB,CAAA,CAAE,CACnC,CAAA,EAGFF,MAAC,MAAA,CAAI,UAAU,oCACb,gBAAC,MAAA,CACC,SAAA,CAAAA,MAAC,KAAA,CAAG,UAAU,gDAAiD,SAAAE,EAAE,oBAAoB,EAAE,QACtF,IAAA,CAAE,UAAU,oCAAqC,SAAAA,EAAE,uBAAuB,CAAA,CAAE,CAAA,CAAA,CAC/E,CAAA,CACF,EAGAkD,EAAAA,KAAC,MAAA,CAAI,UAAU,YACZ,SAAA,CAAA7C,GACCP,EAAAA,IAAC,OAAI,UAAU,4BACb,eAACsD,EAAAA,QAAA,CAAQ,UAAU,wCAAwC,CAAA,CAC7D,EAED,CAAC/C,GAAWH,EAAa,SAAW,GACnCJ,EAAAA,IAAC,MAAA,CAAI,UAAU,yHACZ,SAAAE,EAAE,qBAAqB,CAAA,CAC1B,EAED,CAACK,GAAWH,EAAa,OAAS,GACjCA,EAAa,IAAIuC,GACfS,EAAAA,KAAC,MAAA,CAAiB,UAAU,0FAC1B,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAApD,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMwC,EAAUG,EAAI,EAAE,EAC/B,UAAU,yCAET,SAAAlC,EAAa,IAAIkC,EAAI,EAAE,EACtB3C,EAAAA,IAACuD,EAAAA,YAAA,CAAY,UAAU,sCAAA,CAAuC,EAE9DvD,EAAAA,IAACwD,EAAAA,aAAA,CAAa,UAAU,sCAAA,CAAuC,CAAA,CAAA,EAInEJ,EAAAA,KAAC,MAAA,CAAI,UAAU,2FACZ,SAAA,CAAAT,EAAI,WAAa,UAAYA,EAAI,MAChC3C,EAAAA,IAACL,GAAY,KAAMgD,EAAI,KAAM,UAAU,gDAAA,CAAiD,EAEzFA,EAAI,WAAa,OAASA,EAAI,MAC7B3C,EAAAA,IAAC,MAAA,CAAI,IAAK2C,EAAI,KAAM,IAAI,GAAG,UAAU,UAAU,EAEhD,EAAEA,EAAI,WAAa,UAAYA,EAAI,OAAS,EAAEA,EAAI,WAAa,OAASA,EAAI,OAC3E3C,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAA,CAAiC,CAAA,EAEpD,EAEAoD,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAApD,EAAAA,IAAC,OAAA,CAAK,UAAU,yCAA0C,SAAA2C,EAAI,MAAM,EACpE3C,EAAAA,IAAC,OAAA,CAAK,UAAU,wFACb,WAAI,KACP,EACC,CAAC2C,EAAI,UACJ3C,EAAAA,IAAC,QAAK,UAAU,6FACb,SAAAE,EAAE,iBAAiB,CAAA,CACtB,CAAA,EAEJ,QACC,MAAA,CAAI,UAAU,uCACZ,SAAAyC,EAAI,aAAeA,EAAI,KAAA,CAC1B,CAAA,EACF,EAEAS,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACZ,SAAA,CAAAT,EAAI,aAAa,IAAEzC,EAAE,sBAAsB,CAAA,EAC9C,EAEAkD,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAApD,EAAAA,IAAC,SAAA,CACC,QAAS,IAAM8B,EAAYD,IAAac,EAAI,GAAK,KAAOA,EAAI,EAAE,EAC9D,UAAU,iEAEV,SAAA3C,EAAAA,IAACyD,EAAAA,eAAA,CAAe,UAAU,sCAAA,CAAuC,CAAA,CAAA,EAElE5B,IAAac,EAAI,IAChBS,EAAAA,KAAC,MAAA,CAAI,UAAU,kIACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,QAAS,IAAM,CAAEV,EAAiBC,CAAG,EAAGb,EAAY,IAAI,CAAG,EAC3D,UAAU,6HAEV,SAAA,CAAA9B,EAAAA,IAAC0D,EAAAA,MAAA,CAAM,UAAU,SAAA,CAAU,EAC1BxD,EAAE,aAAa,CAAA,CAAA,CAAA,EAElBkD,EAAAA,KAAC,SAAA,CACC,QAAS,IAAMD,EAAsBR,CAAG,EACxC,UAAU,6HAET,SAAA,CAAAA,EAAI,eAAYgB,EAAAA,OAAA,CAAO,UAAU,UAAU,EAAK3D,EAAAA,IAAC4D,EAAAA,IAAA,CAAI,UAAU,SAAA,CAAU,EACzEjB,EAAI,SAAWzC,EAAE,mBAAmB,EAAIA,EAAE,iBAAiB,CAAA,CAAA,CAAA,CAC9D,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EACF,EAECO,EAAa,IAAIkC,EAAI,EAAE,GACtBS,OAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAApD,EAAAA,IAAC,MAAA,CAAI,UAAU,yCACb,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,yCAA0C,SAAAE,EAAE,sBAAsB,CAAA,CAAE,EACpF,EAECS,EAAQgC,EAAI,EAAE,EACbhC,EAAQgC,EAAI,EAAE,EAAE,SAAW,EACzB3C,EAAAA,IAAC,MAAA,CAAI,UAAU,gDACZ,SAAAE,EAAE,wBAAwB,CAAA,CAC7B,EAEAF,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAAW,EAAQgC,EAAI,EAAE,EAAE,IAAIE,GACnBO,EAAAA,KAAC,MAAA,CAEC,UAAU,sGAEV,SAAA,CAAApD,EAAAA,IAAC,MAAA,CAAI,UAAU,8EACZ,SAAA6C,EAAO,WAAa,UAAYA,EAAO,KACtC7C,EAAAA,IAACL,EAAA,CAAY,KAAMkD,EAAO,KAAM,UAAU,sCAAA,CAAuC,QAEhF,MAAA,CAAI,UAAU,4CAA4C,CAAA,CAE/D,EACAO,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAApD,EAAAA,IAAC,MAAA,CAAI,UAAU,iDAAkD,SAAA6C,EAAO,MAAM,EAC9E7C,EAAAA,IAAC,MAAA,CAAI,UAAU,uCAAwC,WAAO,KAAA,CAAM,CAAA,EACtE,EACAA,EAAAA,IAAC,MAAA,CAAI,UAAU,0BACb,SAAAA,EAAAA,IAAC,SAAA,CACC,QAAS,IAAM4C,EAAoBD,EAAI,GAAIE,CAAM,EACjD,UAAU,gEAEV,SAAA7C,EAAAA,IAAC0D,EAAAA,MAAA,CAAM,UAAU,0CAAA,CAA2C,CAAA,CAAA,CAC9D,CACF,CAAA,CAAA,EArBKb,EAAO,EAAA,CAuBf,CAAA,CACH,EAGF7C,EAAAA,IAAC,MAAA,CAAI,UAAU,2BACb,SAAAA,EAAAA,IAACsD,EAAAA,QAAA,CAAQ,UAAU,uCAAA,CAAwC,CAAA,CAC7D,CAAA,CAAA,CAEJ,CAAA,CAAA,EAxHMX,EAAI,EA0Hd,CACD,CAAA,EAEL,EAGC9B,GAAgBI,GACfjB,EAAAA,IAAC,MAAA,CAAI,UAAU,kEACb,SAAAoD,EAAAA,KAAC,MAAA,CAAI,UAAU,0FACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAApD,MAAC,KAAA,CAAG,UAAU,+CACX,SAAAE,EAAE,mBAAmB,EACxB,EACAF,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMc,EAAgB,EAAK,EAAG,UAAU,4CACvD,SAAAd,EAAAA,IAAC6D,EAAAA,EAAA,CAAE,UAAU,uCAAuC,CAAA,CACtD,CAAA,EACF,EAEClC,GACC3B,EAAAA,IAAC,MAAA,CAAI,UAAU,2FACZ,SAAA2B,EACH,EAGFyB,EAAAA,KAAC,OAAA,CAAK,SAAUN,EAAiB,UAAU,YACzC,SAAA,CAAAM,OAAC,MAAA,CACC,SAAA,CAAApD,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,wBAAwB,EAC7B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOiB,EAAW,KAClB,SAAQ,GACR,UAAU,qIAAA,CAAA,CACZ,EACF,SAEC,MAAA,CACC,SAAA,CAAAjB,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,yBAAyB,EAC9B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,SAAQ,GACR,MAAOqB,EAAY,MACnB,SAAU0B,GAAKzB,EAAegB,IAAS,CAAE,GAAGA,EAAM,MAAOS,EAAE,OAAO,KAAA,EAAQ,EAC1E,UAAU,4KAAA,CAAA,CACZ,EACF,SAEC,MAAA,CACC,SAAA,CAAA/C,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,+BAA+B,EACpC,EACAF,EAAAA,IAAC,WAAA,CACC,MAAOqB,EAAY,YACnB,SAAU0B,GAAKzB,EAAegB,IAAS,CAAE,GAAGA,EAAM,YAAaS,EAAE,OAAO,KAAA,EAAQ,EAChF,KAAM,EACN,UAAU,wLAAA,CAAA,CACZ,EACF,EAEAK,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAApD,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,4BAA4B,EACjC,EACAkD,EAAAA,KAAC,SAAA,CACC,MAAO/B,EAAY,SACnB,SAAU0B,GAAKzB,EAAegB,IAAS,CAAE,GAAGA,EAAM,SAAUS,EAAE,OAAO,KAAA,EAAQ,EAC7E,UAAU,6KAEV,SAAA,CAAA/C,EAAAA,IAAC,SAAA,CAAO,MAAM,SAAS,SAAA,cAAW,EAClCA,EAAAA,IAAC,SAAA,CAAO,MAAM,MAAM,SAAA,KAAA,CAAG,CAAA,CAAA,CAAA,CACzB,EACF,SACC,MAAA,CACC,SAAA,CAAAA,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,wBAAwB,EAC7B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOqB,EAAY,KACnB,SAAU0B,GAAKzB,EAAegB,IAAS,CAAE,GAAGA,EAAM,KAAMS,EAAE,OAAO,KAAA,EAAQ,EACzE,YAAa1B,EAAY,WAAa,SAAW,6BAA+B,cAChF,UAAU,4KAAA,CAAA,CACZ,CAAA,CACF,CAAA,EACF,SAEC,MAAA,CACC,SAAA,CAAArB,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,yBAAyB,EAC9B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOqB,EAAY,MACnB,SAAU0B,GAAKzB,EAAegB,IAAS,CAAE,GAAGA,EAAM,MAAOS,EAAE,OAAO,KAAA,EAAQ,EAC1E,YAAY,sBACZ,UAAU,4KAAA,CAAA,CACZ,EACF,EAEAK,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAApD,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMc,EAAgB,EAAK,EACpC,UAAU,mIAET,WAAE,eAAe,CAAA,CAAA,EAEpBsC,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,SAAU3B,EACV,UAAU,gJAET,SAAA,CAAAA,GAAUzB,EAAAA,IAACsD,EAAAA,QAAA,CAAQ,UAAU,sBAAA,CAAuB,EACpDpD,EAAE,aAAa,CAAA,CAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAIDa,GAAmBI,GAClBnB,EAAAA,IAAC,MAAA,CAAI,UAAU,kEACb,SAAAoD,EAAAA,KAAC,MAAA,CAAI,UAAU,0FACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAApD,MAAC,KAAA,CAAG,UAAU,+CACX,SAAAE,EAAE,yBAAyB,EAC9B,EACAF,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMgB,EAAmB,EAAK,EAAG,UAAU,4CAC1D,SAAAhB,EAAAA,IAAC6D,EAAAA,EAAA,CAAE,UAAU,uCAAuC,CAAA,CACtD,CAAA,EACF,EAEClC,GACC3B,EAAAA,IAAC,MAAA,CAAI,UAAU,2FACZ,SAAA2B,EACH,EAGFyB,EAAAA,KAAC,OAAA,CAAK,SAAUF,EAAoB,UAAU,YAC5C,SAAA,CAAAE,OAAC,MAAA,CACC,SAAA,CAAApD,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,wBAAwB,EAC7B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOmB,EAAc,OAAO,KAC5B,SAAQ,GACR,UAAU,qIAAA,CAAA,CACZ,EACF,SAEC,MAAA,CACC,SAAA,CAAAnB,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,yBAAyB,EAC9B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,SAAQ,GACR,MAAOuB,EAAe,MACtB,SAAUwB,GAAKvB,EAAkBc,IAAS,CAAE,GAAGA,EAAM,MAAOS,EAAE,OAAO,KAAA,EAAQ,EAC7E,UAAU,4KAAA,CAAA,CACZ,EACF,EAEAK,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAApD,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,4BAA4B,EACjC,EACAkD,EAAAA,KAAC,SAAA,CACC,MAAO7B,EAAe,SACtB,SAAUwB,GAAKvB,EAAkBc,IAAS,CAAE,GAAGA,EAAM,SAAUS,EAAE,OAAO,KAAA,EAAQ,EAChF,UAAU,6KAEV,SAAA,CAAA/C,EAAAA,IAAC,SAAA,CAAO,MAAM,SAAS,SAAA,cAAW,EAClCA,EAAAA,IAAC,SAAA,CAAO,MAAM,MAAM,SAAA,KAAA,CAAG,CAAA,CAAA,CAAA,CACzB,EACF,SACC,MAAA,CACC,SAAA,CAAAA,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,wBAAwB,EAC7B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOuB,EAAe,KACtB,SAAUwB,GAAKvB,EAAkBc,IAAS,CAAE,GAAGA,EAAM,KAAMS,EAAE,OAAO,KAAA,EAAQ,EAC5E,UAAU,4KAAA,CAAA,CACZ,CAAA,CACF,CAAA,EACF,SAEC,MAAA,CACC,SAAA,CAAA/C,MAAC,QAAA,CAAM,UAAU,8DACd,SAAAE,EAAE,yBAAyB,EAC9B,EACAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOuB,EAAe,MACtB,SAAUwB,GAAKvB,EAAkBc,IAAS,CAAE,GAAGA,EAAM,MAAOS,EAAE,OAAO,KAAA,EAAQ,EAC7E,UAAU,4KAAA,CAAA,CACZ,EACF,EAEAK,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAApD,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMgB,EAAmB,EAAK,EACvC,UAAU,mIAET,WAAE,eAAe,CAAA,CAAA,EAEpBoC,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,SAAU3B,EACV,UAAU,gJAET,SAAA,CAAAA,GAAUzB,EAAAA,IAACsD,EAAAA,QAAA,CAAQ,UAAU,sBAAA,CAAuB,EACpDpD,EAAE,aAAa,CAAA,CAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EAEJ,CAEJ"}
@@ -3,7 +3,7 @@ import { useState as s, useCallback as $, useEffect as W } from "react";
3
3
  import { useNavigate as q } from "react-router-dom";
4
4
  import { useTranslation as Z } from "react-i18next";
5
5
  import { Bell as S, Settings as z, Filter as G, CheckCheck as H, Trash2 as D, Loader2 as J, Check as K } from "lucide-react";
6
- import { a as Q, n as d, P as X, g as _ } from "./index-CwSaRXXg.js";
6
+ import { a as Q, n as d, P as X, g as _ } from "./index-lpIzhufD.js";
7
7
  import { C as ee } from "./ConfirmModal-BEfzLWOz.js";
8
8
  function de() {
9
9
  const m = q(), { t: n } = Z("common"), { currentTenant: F, userTenants: P, hasMultipleTenants: N } = Q(), [u, b] = s(!0), [c, i] = s([]), [j, h] = s(!1), [I, y] = s(!1), [p, g] = s(1), [k, C] = s(1), [f, x] = s(0), [l, M] = s(void 0), [v, B] = s(void 0), w = $(async () => {
@@ -252,4 +252,4 @@ function te(m) {
252
252
  export {
253
253
  de as NotificationsPage
254
254
  };
255
- //# sourceMappingURL=NotificationsPage-C29Lln5o.js.map
255
+ //# sourceMappingURL=NotificationsPage-CAbNW_Cn.js.map