@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":"PreferencesPage-B81MsNV1.js","sources":["../../src/pages/personal/myspace/PreferencesPage.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { useTabNavigation } from '@/hooks/useTabNavigation';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Palette, Globe, Bell, Loader2, Check, Star, X, Search, GripVertical } from 'lucide-react';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport type { LucideIcon } from 'lucide-react';\r\nimport { LanguageSwitcher } from '@/components/ui/LanguageSwitcher';\r\nimport { ThemeCustomizer } from '@/components/ui/ThemeCustomizer';\r\nimport { useTheme } from '@/contexts/ThemeContext';\r\nimport { useTenant } from '@/contexts/TenantContext';\r\nimport { useNavigation, type ModuleDto, type ApplicationDto } from '@/contexts/NavigationContext';\r\nimport { useFavoriteModules, type FavoriteModule } from '@/hooks/useFavoriteModules';\r\nimport { userApi } from '@/services/api/userApi';\r\n\r\nconst PREFERENCES_TABS = ['appearance', 'language', 'notifications', 'favorites'] as const;\r\ntype PreferencesTab = typeof PREFERENCES_TABS[number];\r\n\r\n// Dynamic icon component\r\nfunction 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) {\r\n return <Star className={className} />;\r\n }\r\n return <IconComponent className={className} />;\r\n}\r\n\r\nfunction getFavoriteButtonClass(isSelected: boolean, isDisabled: boolean): string {\r\n if (isSelected) return 'bg-[var(--accent-bg)] border-2 border-[var(--color-accent-500)]';\r\n if (isDisabled) return 'opacity-50 cursor-not-allowed bg-[var(--bg-tertiary)] border border-[var(--border-color)]';\r\n return 'bg-[var(--bg-primary)] border border-[var(--border-color)] hover:border-[var(--color-accent-500)]';\r\n}\r\n\r\nexport function PreferencesPage(): ReactElement | null {\r\n const { t, i18n } = useTranslation(['navigation', 'common']);\r\n const navigate = useNavigate();\r\n const { activeTab, setActiveTab } = useTabNavigation<PreferencesTab>('appearance', PREFERENCES_TABS);\r\n const { loadFromServer, isSyncing, selectedThemeTenant } = useTheme();\r\n const { currentTenant, isLoading: tenantLoading } = useTenant();\r\n const { menu } = useNavigation();\r\n const { favorites, toggleFavorite, isFavorite, canAddMore, maxFavorites, reorderFavorites, loading: favoritesLoading } = useFavoriteModules();\r\n const [syncSuccess, setSyncSuccess] = useState(false);\r\n const [moduleSearch, setModuleSearch] = useState('');\r\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\r\n const [dragOverIndex, setDragOverIndex] = useState<number | null>(null);\r\n const dragNodeRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const [emailNotifications, setEmailNotifications] = useState(true);\r\n const [securityAlerts, setSecurityAlerts] = useState(true);\r\n const [productUpdates, setProductUpdates] = useState(false);\r\n const [notificationsSaving, setNotificationsSaving] = useState(false);\r\n const [notificationsSaved, setNotificationsSaved] = useState(false);\r\n const notificationsSaveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const isInitialLoadRef = useRef(true);\r\n\r\n // Wait for tenant context to be loaded before fetching preferences\r\n useEffect(() => {\r\n if (!tenantLoading && currentTenant) {\r\n loadPreferences();\r\n }\r\n }, [tenantLoading, currentTenant]);\r\n\r\n const loadPreferences = async () => {\r\n try {\r\n const prefs = await userApi.preferences.get();\r\n setEmailNotifications(prefs.emailNotifications);\r\n setSecurityAlerts(prefs.pushNotifications);\r\n isInitialLoadRef.current = false;\r\n } catch {\r\n isInitialLoadRef.current = false;\r\n }\r\n };\r\n\r\n const saveNotifications = useCallback(async () => {\r\n setNotificationsSaving(true);\r\n setNotificationsSaved(false);\r\n try {\r\n await userApi.preferences.updateNotifications({\r\n emailNotifications,\r\n pushNotifications: securityAlerts,\r\n });\r\n setNotificationsSaved(true);\r\n setTimeout(() => setNotificationsSaved(false), 2000);\r\n } catch {\r\n console.error('[PreferencesPage] Failed to save notifications');\r\n } finally {\r\n setNotificationsSaving(false);\r\n }\r\n }, [emailNotifications, securityAlerts]);\r\n\r\n useEffect(() => {\r\n if (isInitialLoadRef.current) return;\r\n\r\n if (notificationsSaveTimeoutRef.current) {\r\n clearTimeout(notificationsSaveTimeoutRef.current);\r\n }\r\n\r\n notificationsSaveTimeoutRef.current = setTimeout(() => {\r\n saveNotifications();\r\n }, 1000);\r\n\r\n return () => {\r\n if (notificationsSaveTimeoutRef.current) {\r\n clearTimeout(notificationsSaveTimeoutRef.current);\r\n }\r\n };\r\n }, [emailNotifications, securityAlerts, saveNotifications]);\r\n\r\n const handleSync = async () => {\r\n // Determine which scope to sync based on selectedThemeTenant\r\n // null = global scope, string = tenant scope\r\n const scope = selectedThemeTenant === null ? 'global' : 'tenant';\r\n setSyncSuccess(false);\r\n try {\r\n await loadFromServer(scope);\r\n await loadPreferences();\r\n setSyncSuccess(true);\r\n setTimeout(() => setSyncSuccess(false), 3000);\r\n } catch (error) {\r\n console.error('[PreferencesPage] Sync failed:', error);\r\n }\r\n };\r\n\r\n const tabs = [\r\n { id: 'appearance' as const, label: 'Apparence', icon: Palette, description: 'Personnaliser le thème et les couleurs' },\r\n { id: 'language' as const, label: 'Langue', icon: Globe, description: 'Changer la langue de l\\'interface' },\r\n { id: 'notifications' as const, label: 'Notifications', icon: Bell, description: 'Gérer les notifications' },\r\n { id: 'favorites' as const, label: t('common:favorites.quickAccess'), icon: Star, description: 'Gérer vos modules favoris' },\r\n ];\r\n\r\n // Gather all modules grouped by application for favorites\r\n const modulesByApp: { app: ApplicationDto; modules: ModuleDto[] }[] = [];\r\n menu?.applications.forEach(app => {\r\n if ((app.modules?.length ?? 0) > 0) {\r\n modulesByApp.push({\r\n app,\r\n modules: app.modules,\r\n });\r\n }\r\n });\r\n\r\n const handleToggleFavorite = (module: ModuleDto, app: ApplicationDto) => {\r\n const favoriteModule: FavoriteModule = {\r\n id: module.id,\r\n code: module.code,\r\n label: module.label,\r\n icon: module.icon || 'Star',\r\n route: `/${app.code}/${module.code}`,\r\n applicationCode: app.code,\r\n applicationLabel: app.label,\r\n };\r\n toggleFavorite(favoriteModule);\r\n };\r\n\r\n const handleFavoriteClick = (module: FavoriteModule) => {\r\n if (module.route) {\r\n navigate(module.route);\r\n }\r\n };\r\n\r\n // Drag and drop handlers for reordering\r\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>, index: number) => {\r\n setDraggedIndex(index);\r\n dragNodeRef.current = e.currentTarget;\r\n e.dataTransfer.effectAllowed = 'move';\r\n e.dataTransfer.setData('text/plain', index.toString());\r\n // Add a slight delay to allow the drag image to be created before adding opacity\r\n setTimeout(() => {\r\n if (dragNodeRef.current) {\r\n dragNodeRef.current.style.opacity = '0.4';\r\n }\r\n }, 0);\r\n };\r\n\r\n const handleDragEnd = () => {\r\n if (dragNodeRef.current) {\r\n dragNodeRef.current.style.opacity = '1';\r\n }\r\n setDraggedIndex(null);\r\n setDragOverIndex(null);\r\n dragNodeRef.current = null;\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>, index: number) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'move';\r\n if (index !== draggedIndex) {\r\n setDragOverIndex(index);\r\n }\r\n };\r\n\r\n const handleDragLeave = () => {\r\n setDragOverIndex(null);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>, dropIndex: number) => {\r\n e.preventDefault();\r\n const dragIndex = draggedIndex;\r\n if (dragIndex === null || dragIndex === dropIndex) return;\r\n\r\n const newFavorites = [...favorites];\r\n const [draggedItem] = newFavorites.splice(dragIndex, 1);\r\n newFavorites.splice(dropIndex, 0, draggedItem);\r\n\r\n reorderFavorites(newFavorites);\r\n handleDragEnd();\r\n };\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('navigation:sidebar.preferences')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">Personnalisez votre expérience SmartStack</p>\r\n </div>\r\n\r\n {/* Tab Navigation */}\r\n <div className=\"border-b border-[var(--item-color-border)]\">\r\n <nav className=\"flex gap-1\" aria-label=\"Tabs\">\r\n {tabs.map((tab) => {\r\n const Icon = tab.icon;\r\n return (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-all border-b-2 ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-600)] bg-[var(--accent-bg)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n style={{ borderRadius: 'var(--radius-button) var(--radius-button) 0 0' }}\r\n >\r\n <Icon className=\"w-5 h-5\" />\r\n <span>{tab.label}</span>\r\n </button>\r\n );\r\n })}\r\n </nav>\r\n </div>\r\n\r\n {/* Tab Content */}\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--item-color-border)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n {activeTab === 'appearance' && (\r\n <div className=\"space-y-4\">\r\n <ThemeCustomizer\r\n onSync={handleSync}\r\n isSyncing={isSyncing}\r\n syncSuccess={syncSuccess}\r\n />\r\n </div>\r\n )}\r\n\r\n {activeTab === 'language' && (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">Langue</h2>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Sélectionnez la langue de l'interface\r\n </p>\r\n </div>\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">\r\n {i18n.language?.startsWith('fr') ? 'Français' : 'English'}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Langue actuelle de l'interface\r\n </p>\r\n </div>\r\n <LanguageSwitcher />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {activeTab === 'notifications' && (\r\n <div className=\"space-y-6\">\r\n <div className=\"flex items-start justify-between\">\r\n <div>\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">Notifications</h2>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Gérez vos préférences de notifications\r\n </p>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs text-[var(--text-muted)]\">\r\n {notificationsSaving && (\r\n <>\r\n <Loader2 className=\"w-3 h-3 animate-spin\" />\r\n <span>Sauvegarde...</span>\r\n </>\r\n )}\r\n {notificationsSaved && !notificationsSaving && (\r\n <>\r\n <Check className=\"w-3 h-3 text-green-500\" />\r\n <span className=\"text-green-600\">Sauvegardé</span>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"space-y-4\">\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Notifications par email</h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Recevoir des notifications par email\r\n </p>\r\n </div>\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"sr-only peer\"\r\n checked={emailNotifications}\r\n onChange={(e) => setEmailNotifications(e.target.checked)}\r\n />\r\n <div\r\n className=\"w-11 h-6 bg-[var(--bg-tertiary)] peer peer-checked:bg-[var(--color-accent-500)] after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <span className=\"after:rounded-full\" />\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Alertes de sécurité</h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Être notifié des événements de sécurité\r\n </p>\r\n </div>\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"sr-only peer\"\r\n checked={securityAlerts}\r\n onChange={(e) => setSecurityAlerts(e.target.checked)}\r\n />\r\n <div\r\n className=\"w-11 h-6 bg-[var(--bg-tertiary)] peer peer-checked:bg-[var(--color-accent-500)] after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <span className=\"after:rounded-full\" />\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Mises à jour produit</h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Nouvelles fonctionnalités et améliorations\r\n </p>\r\n </div>\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"sr-only peer\"\r\n checked={productUpdates}\r\n onChange={(e) => setProductUpdates(e.target.checked)}\r\n />\r\n <div\r\n className=\"w-11 h-6 bg-[var(--bg-tertiary)] peer peer-checked:bg-[var(--color-accent-500)] after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <span className=\"after:rounded-full\" />\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {activeTab === 'favorites' && (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">{t('common:favorites.quickAccess')}</h2>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n {t('common:favorites.selectModules', { count: favorites.length, max: maxFavorites })}\r\n </p>\r\n </div>\r\n\r\n {favoritesLoading && (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-[var(--color-accent-500)]\" />\r\n <span className=\"ml-2 text-[var(--text-secondary)]\">Chargement des favoris...</span>\r\n </div>\r\n )}\r\n\r\n {!favoritesLoading && (\r\n <>\r\n\r\n {/* Current Favorites */}\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Vos favoris actuels</h3>\r\n {favorites.length > 1 && (\r\n <span className=\"text-xs text-[var(--text-muted)]\">Glissez pour réorganiser</span>\r\n )}\r\n </div>\r\n {favorites.length === 0 ? (\r\n <p className=\"text-sm text-[var(--text-secondary)]\">Aucun favori sélectionné</p>\r\n ) : (\r\n <div className=\"flex flex-col gap-2\">\r\n {favorites.map((module, index) => (\r\n <div\r\n key={module.id}\r\n draggable\r\n onDragStart={(e) => handleDragStart(e, index)}\r\n onDragEnd={handleDragEnd}\r\n onDragOver={(e) => handleDragOver(e, index)}\r\n onDragLeave={handleDragLeave}\r\n onDrop={(e) => handleDrop(e, index)}\r\n className={`flex items-center gap-2 px-3 py-2 bg-[var(--accent-bg)] border text-[var(--color-accent-500)] cursor-grab active:cursor-grabbing transition-all ${\r\n dragOverIndex === index\r\n ? 'border-[var(--color-accent-500)] border-2 scale-[1.02]'\r\n : 'border-[var(--color-accent-500)]/50'\r\n }`}\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <GripVertical className=\"w-4 h-4 text-[var(--color-accent-400)] flex-shrink-0\" />\r\n <span className=\"text-xs text-[var(--color-accent-500)] font-mono w-4\">{index + 1}</span>\r\n <button\r\n onClick={() => handleFavoriteClick(module)}\r\n className=\"flex items-center gap-2 hover:underline flex-1\"\r\n >\r\n <DynamicIcon name={module.icon} className=\"w-4 h-4\" />\r\n <span className=\"text-sm font-medium\">{module.label}</span>\r\n <span className=\"text-xs text-[var(--text-muted)]\">({module.applicationLabel})</span>\r\n </button>\r\n <button\r\n onClick={() => toggleFavorite(module)}\r\n className=\"p-1 hover:bg-[var(--bg-tertiary)] rounded flex-shrink-0\"\r\n title=\"Retirer des favoris\"\r\n >\r\n <X className=\"w-3.5 h-3.5\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Available Modules */}\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Modules disponibles</h3>\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-muted)]\" />\r\n <input\r\n type=\"text\"\r\n placeholder=\"Rechercher un module...\"\r\n value={moduleSearch}\r\n onChange={(e) => setModuleSearch(e.target.value)}\r\n className=\"pl-9 pr-3 py-2 w-64 bg-[var(--bg-primary)] border border-[var(--border-color)] text-sm focus:outline-none focus:border-[var(--color-accent-500)]\"\r\n style={{ borderRadius: 'var(--radius-input)' }}\r\n />\r\n </div>\r\n </div>\r\n {modulesByApp.map(({ app, modules }) => {\r\n // Filter modules based on search\r\n const filteredModules = moduleSearch\r\n ? modules.filter(m =>\r\n m.label.toLowerCase().includes(moduleSearch.toLowerCase()) ||\r\n m.code.toLowerCase().includes(moduleSearch.toLowerCase()) ||\r\n app.label.toLowerCase().includes(moduleSearch.toLowerCase())\r\n )\r\n : modules;\r\n\r\n // Don't render app section if no modules match\r\n if (filteredModules.length === 0) return null;\r\n\r\n return (\r\n <div\r\n key={app.id}\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center gap-2 mb-3\">\r\n <DynamicIcon name={app.icon || 'Folder'} className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n <span className=\"font-medium text-[var(--text-primary)]\">{app.label}</span>\r\n <span className=\"text-xs text-[var(--text-muted)]\">({filteredModules.length} module{filteredModules.length > 1 ? 's' : ''})</span>\r\n </div>\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-2\">\r\n {filteredModules.map((module) => {\r\n const isSelected = isFavorite(module.id);\r\n const isDisabled = !isSelected && !canAddMore;\r\n\r\n return (\r\n <button\r\n key={module.id}\r\n onClick={() => handleToggleFavorite(module, app)}\r\n disabled={isDisabled}\r\n className={`flex items-center gap-3 p-3 transition-all ${\r\n getFavoriteButtonClass(isSelected, isDisabled)\r\n }`}\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <div className={`w-8 h-8 flex items-center justify-center ${\r\n isSelected\r\n ? 'bg-[var(--color-accent-600)] text-white'\r\n : 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]'\r\n }`} style={{ borderRadius: 'var(--radius-button)' }}>\r\n <DynamicIcon name={module.icon || 'Star'} className=\"w-4 h-4\" />\r\n </div>\r\n <span className={`text-sm ${\r\n isSelected ? 'font-medium text-[var(--color-accent-500)]' : 'text-[var(--text-primary)]'\r\n }`}>\r\n {module.label}\r\n </span>\r\n {isSelected && (\r\n <Check className=\"w-4 h-4 text-[var(--color-accent-500)] ml-auto\" />\r\n )}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n\r\n {(modulesByApp.length === 0 || (moduleSearch && modulesByApp.every(({ modules }) =>\r\n !modules.some(m =>\r\n m.label.toLowerCase().includes(moduleSearch.toLowerCase()) ||\r\n m.code.toLowerCase().includes(moduleSearch.toLowerCase())\r\n )\r\n ))) && (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {moduleSearch ? `Aucun module trouvé pour \"${moduleSearch}\"` : t('common:favorites.noModules')}\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["PREFERENCES_TABS","DynamicIcon","name","className","IconComponent","LucideIcons","jsx","Star","getFavoriteButtonClass","isSelected","isDisabled","PreferencesPage","t","i18n","useTranslation","navigate","useNavigate","activeTab","setActiveTab","useTabNavigation","loadFromServer","isSyncing","selectedThemeTenant","useTheme","currentTenant","tenantLoading","useTenant","menu","useNavigation","favorites","toggleFavorite","isFavorite","canAddMore","maxFavorites","reorderFavorites","favoritesLoading","useFavoriteModules","syncSuccess","setSyncSuccess","useState","moduleSearch","setModuleSearch","draggedIndex","setDraggedIndex","dragOverIndex","setDragOverIndex","dragNodeRef","useRef","emailNotifications","setEmailNotifications","securityAlerts","setSecurityAlerts","productUpdates","setProductUpdates","notificationsSaving","setNotificationsSaving","notificationsSaved","setNotificationsSaved","notificationsSaveTimeoutRef","isInitialLoadRef","useEffect","loadPreferences","prefs","userApi","saveNotifications","useCallback","handleSync","scope","error","tabs","Palette","Globe","Bell","modulesByApp","app","handleToggleFavorite","module","favoriteModule","handleFavoriteClick","handleDragStart","e","index","handleDragEnd","handleDragOver","handleDragLeave","handleDrop","dropIndex","dragIndex","newFavorites","draggedItem","jsxs","tab","Icon","ThemeCustomizer","LanguageSwitcher","Fragment","Loader2","Check","GripVertical","X","Search","modules","filteredModules","m"],"mappings":"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"}
1
+ {"version":3,"file":"PreferencesPage-Cqr9mAab.js","sources":["../../src/pages/personal/myspace/PreferencesPage.tsx"],"sourcesContent":["import { useState, useEffect, useRef, useCallback } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { useTabNavigation } from '@/hooks/useTabNavigation';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Palette, Globe, Bell, Loader2, Check, Star, X, Search, GripVertical } from 'lucide-react';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport type { LucideIcon } from 'lucide-react';\r\nimport { LanguageSwitcher } from '@/components/ui/LanguageSwitcher';\r\nimport { ThemeCustomizer } from '@/components/ui/ThemeCustomizer';\r\nimport { useTheme } from '@/contexts/ThemeContext';\r\nimport { useTenant } from '@/contexts/TenantContext';\r\nimport { useNavigation, type ModuleDto, type ApplicationDto } from '@/contexts/NavigationContext';\r\nimport { useFavoriteModules, type FavoriteModule } from '@/hooks/useFavoriteModules';\r\nimport { userApi } from '@/services/api/userApi';\r\n\r\nconst PREFERENCES_TABS = ['appearance', 'language', 'notifications', 'favorites'] as const;\r\ntype PreferencesTab = typeof PREFERENCES_TABS[number];\r\n\r\n// Dynamic icon component\r\nfunction 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) {\r\n return <Star className={className} />;\r\n }\r\n return <IconComponent className={className} />;\r\n}\r\n\r\nfunction getFavoriteButtonClass(isSelected: boolean, isDisabled: boolean): string {\r\n if (isSelected) return 'bg-[var(--accent-bg)] border-2 border-[var(--color-accent-500)]';\r\n if (isDisabled) return 'opacity-50 cursor-not-allowed bg-[var(--bg-tertiary)] border border-[var(--border-color)]';\r\n return 'bg-[var(--bg-primary)] border border-[var(--border-color)] hover:border-[var(--color-accent-500)]';\r\n}\r\n\r\nexport function PreferencesPage(): ReactElement | null {\r\n const { t, i18n } = useTranslation(['navigation', 'common']);\r\n const navigate = useNavigate();\r\n const { activeTab, setActiveTab } = useTabNavigation<PreferencesTab>('appearance', PREFERENCES_TABS);\r\n const { loadFromServer, isSyncing, selectedThemeTenant } = useTheme();\r\n const { currentTenant, isLoading: tenantLoading } = useTenant();\r\n const { menu } = useNavigation();\r\n const { favorites, toggleFavorite, isFavorite, canAddMore, maxFavorites, reorderFavorites, loading: favoritesLoading } = useFavoriteModules();\r\n const [syncSuccess, setSyncSuccess] = useState(false);\r\n const [moduleSearch, setModuleSearch] = useState('');\r\n const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\r\n const [dragOverIndex, setDragOverIndex] = useState<number | null>(null);\r\n const dragNodeRef = useRef<HTMLDivElement | null>(null);\r\n\r\n const [emailNotifications, setEmailNotifications] = useState(true);\r\n const [securityAlerts, setSecurityAlerts] = useState(true);\r\n const [productUpdates, setProductUpdates] = useState(false);\r\n const [notificationsSaving, setNotificationsSaving] = useState(false);\r\n const [notificationsSaved, setNotificationsSaved] = useState(false);\r\n const notificationsSaveTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const isInitialLoadRef = useRef(true);\r\n\r\n // Wait for tenant context to be loaded before fetching preferences\r\n useEffect(() => {\r\n if (!tenantLoading && currentTenant) {\r\n loadPreferences();\r\n }\r\n }, [tenantLoading, currentTenant]);\r\n\r\n const loadPreferences = async () => {\r\n try {\r\n const prefs = await userApi.preferences.get();\r\n setEmailNotifications(prefs.emailNotifications);\r\n setSecurityAlerts(prefs.pushNotifications);\r\n isInitialLoadRef.current = false;\r\n } catch {\r\n isInitialLoadRef.current = false;\r\n }\r\n };\r\n\r\n const saveNotifications = useCallback(async () => {\r\n setNotificationsSaving(true);\r\n setNotificationsSaved(false);\r\n try {\r\n await userApi.preferences.updateNotifications({\r\n emailNotifications,\r\n pushNotifications: securityAlerts,\r\n });\r\n setNotificationsSaved(true);\r\n setTimeout(() => setNotificationsSaved(false), 2000);\r\n } catch {\r\n console.error('[PreferencesPage] Failed to save notifications');\r\n } finally {\r\n setNotificationsSaving(false);\r\n }\r\n }, [emailNotifications, securityAlerts]);\r\n\r\n useEffect(() => {\r\n if (isInitialLoadRef.current) return;\r\n\r\n if (notificationsSaveTimeoutRef.current) {\r\n clearTimeout(notificationsSaveTimeoutRef.current);\r\n }\r\n\r\n notificationsSaveTimeoutRef.current = setTimeout(() => {\r\n saveNotifications();\r\n }, 1000);\r\n\r\n return () => {\r\n if (notificationsSaveTimeoutRef.current) {\r\n clearTimeout(notificationsSaveTimeoutRef.current);\r\n }\r\n };\r\n }, [emailNotifications, securityAlerts, saveNotifications]);\r\n\r\n const handleSync = async () => {\r\n // Determine which scope to sync based on selectedThemeTenant\r\n // null = global scope, string = tenant scope\r\n const scope = selectedThemeTenant === null ? 'global' : 'tenant';\r\n setSyncSuccess(false);\r\n try {\r\n await loadFromServer(scope);\r\n await loadPreferences();\r\n setSyncSuccess(true);\r\n setTimeout(() => setSyncSuccess(false), 3000);\r\n } catch (error) {\r\n console.error('[PreferencesPage] Sync failed:', error);\r\n }\r\n };\r\n\r\n const tabs = [\r\n { id: 'appearance' as const, label: 'Apparence', icon: Palette, description: 'Personnaliser le thème et les couleurs' },\r\n { id: 'language' as const, label: 'Langue', icon: Globe, description: 'Changer la langue de l\\'interface' },\r\n { id: 'notifications' as const, label: 'Notifications', icon: Bell, description: 'Gérer les notifications' },\r\n { id: 'favorites' as const, label: t('common:favorites.quickAccess'), icon: Star, description: 'Gérer vos modules favoris' },\r\n ];\r\n\r\n // Gather all modules grouped by application for favorites\r\n const modulesByApp: { app: ApplicationDto; modules: ModuleDto[] }[] = [];\r\n menu?.applications.forEach(app => {\r\n if ((app.modules?.length ?? 0) > 0) {\r\n modulesByApp.push({\r\n app,\r\n modules: app.modules,\r\n });\r\n }\r\n });\r\n\r\n const handleToggleFavorite = (module: ModuleDto, app: ApplicationDto) => {\r\n const favoriteModule: FavoriteModule = {\r\n id: module.id,\r\n code: module.code,\r\n label: module.label,\r\n icon: module.icon || 'Star',\r\n route: `/${app.code}/${module.code}`,\r\n applicationCode: app.code,\r\n applicationLabel: app.label,\r\n };\r\n toggleFavorite(favoriteModule);\r\n };\r\n\r\n const handleFavoriteClick = (module: FavoriteModule) => {\r\n if (module.route) {\r\n navigate(module.route);\r\n }\r\n };\r\n\r\n // Drag and drop handlers for reordering\r\n const handleDragStart = (e: React.DragEvent<HTMLDivElement>, index: number) => {\r\n setDraggedIndex(index);\r\n dragNodeRef.current = e.currentTarget;\r\n e.dataTransfer.effectAllowed = 'move';\r\n e.dataTransfer.setData('text/plain', index.toString());\r\n // Add a slight delay to allow the drag image to be created before adding opacity\r\n setTimeout(() => {\r\n if (dragNodeRef.current) {\r\n dragNodeRef.current.style.opacity = '0.4';\r\n }\r\n }, 0);\r\n };\r\n\r\n const handleDragEnd = () => {\r\n if (dragNodeRef.current) {\r\n dragNodeRef.current.style.opacity = '1';\r\n }\r\n setDraggedIndex(null);\r\n setDragOverIndex(null);\r\n dragNodeRef.current = null;\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>, index: number) => {\r\n e.preventDefault();\r\n e.dataTransfer.dropEffect = 'move';\r\n if (index !== draggedIndex) {\r\n setDragOverIndex(index);\r\n }\r\n };\r\n\r\n const handleDragLeave = () => {\r\n setDragOverIndex(null);\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent<HTMLDivElement>, dropIndex: number) => {\r\n e.preventDefault();\r\n const dragIndex = draggedIndex;\r\n if (dragIndex === null || dragIndex === dropIndex) return;\r\n\r\n const newFavorites = [...favorites];\r\n const [draggedItem] = newFavorites.splice(dragIndex, 1);\r\n newFavorites.splice(dropIndex, 0, draggedItem);\r\n\r\n reorderFavorites(newFavorites);\r\n handleDragEnd();\r\n };\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('navigation:sidebar.preferences')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">Personnalisez votre expérience SmartStack</p>\r\n </div>\r\n\r\n {/* Tab Navigation */}\r\n <div className=\"border-b border-[var(--item-color-border)]\">\r\n <nav className=\"flex gap-1\" aria-label=\"Tabs\">\r\n {tabs.map((tab) => {\r\n const Icon = tab.icon;\r\n return (\r\n <button\r\n key={tab.id}\r\n onClick={() => setActiveTab(tab.id)}\r\n className={`flex items-center gap-2 px-4 py-3 text-sm font-medium transition-all border-b-2 ${\r\n activeTab === tab.id\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-600)] bg-[var(--accent-bg)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n style={{ borderRadius: 'var(--radius-button) var(--radius-button) 0 0' }}\r\n >\r\n <Icon className=\"w-5 h-5\" />\r\n <span>{tab.label}</span>\r\n </button>\r\n );\r\n })}\r\n </nav>\r\n </div>\r\n\r\n {/* Tab Content */}\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--item-color-border)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n {activeTab === 'appearance' && (\r\n <div className=\"space-y-4\">\r\n <ThemeCustomizer\r\n onSync={handleSync}\r\n isSyncing={isSyncing}\r\n syncSuccess={syncSuccess}\r\n />\r\n </div>\r\n )}\r\n\r\n {activeTab === 'language' && (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">Langue</h2>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Sélectionnez la langue de l'interface\r\n </p>\r\n </div>\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">\r\n {i18n.language?.startsWith('fr') ? 'Français' : 'English'}\r\n </h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Langue actuelle de l'interface\r\n </p>\r\n </div>\r\n <LanguageSwitcher />\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {activeTab === 'notifications' && (\r\n <div className=\"space-y-6\">\r\n <div className=\"flex items-start justify-between\">\r\n <div>\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">Notifications</h2>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Gérez vos préférences de notifications\r\n </p>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs text-[var(--text-muted)]\">\r\n {notificationsSaving && (\r\n <>\r\n <Loader2 className=\"w-3 h-3 animate-spin\" />\r\n <span>Sauvegarde...</span>\r\n </>\r\n )}\r\n {notificationsSaved && !notificationsSaving && (\r\n <>\r\n <Check className=\"w-3 h-3 text-green-500\" />\r\n <span className=\"text-green-600\">Sauvegardé</span>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"space-y-4\">\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Notifications par email</h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Recevoir des notifications par email\r\n </p>\r\n </div>\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"sr-only peer\"\r\n checked={emailNotifications}\r\n onChange={(e) => setEmailNotifications(e.target.checked)}\r\n />\r\n <div\r\n className=\"w-11 h-6 bg-[var(--bg-tertiary)] peer peer-checked:bg-[var(--color-accent-500)] after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <span className=\"after:rounded-full\" />\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Alertes de sécurité</h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Être notifié des événements de sécurité\r\n </p>\r\n </div>\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"sr-only peer\"\r\n checked={securityAlerts}\r\n onChange={(e) => setSecurityAlerts(e.target.checked)}\r\n />\r\n <div\r\n className=\"w-11 h-6 bg-[var(--bg-tertiary)] peer peer-checked:bg-[var(--color-accent-500)] after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <span className=\"after:rounded-full\" />\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Mises à jour produit</h3>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n Nouvelles fonctionnalités et améliorations\r\n </p>\r\n </div>\r\n <label className=\"relative inline-flex items-center cursor-pointer\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"sr-only peer\"\r\n checked={productUpdates}\r\n onChange={(e) => setProductUpdates(e.target.checked)}\r\n />\r\n <div\r\n className=\"w-11 h-6 bg-[var(--bg-tertiary)] peer peer-checked:bg-[var(--color-accent-500)] after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:h-5 after:w-5 after:transition-all peer-checked:after:translate-x-full\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <span className=\"after:rounded-full\" />\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {activeTab === 'favorites' && (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h2 className=\"text-xl font-bold text-[var(--text-primary)]\">{t('common:favorites.quickAccess')}</h2>\r\n <p className=\"text-sm text-[var(--text-secondary)] mt-1\">\r\n {t('common:favorites.selectModules', { count: favorites.length, max: maxFavorites })}\r\n </p>\r\n </div>\r\n\r\n {favoritesLoading && (\r\n <div className=\"flex items-center justify-center py-8\">\r\n <Loader2 className=\"w-6 h-6 animate-spin text-[var(--color-accent-500)]\" />\r\n <span className=\"ml-2 text-[var(--text-secondary)]\">Chargement des favoris...</span>\r\n </div>\r\n )}\r\n\r\n {!favoritesLoading && (\r\n <>\r\n\r\n {/* Current Favorites */}\r\n <div\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center justify-between mb-3\">\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Vos favoris actuels</h3>\r\n {favorites.length > 1 && (\r\n <span className=\"text-xs text-[var(--text-muted)]\">Glissez pour réorganiser</span>\r\n )}\r\n </div>\r\n {favorites.length === 0 ? (\r\n <p className=\"text-sm text-[var(--text-secondary)]\">Aucun favori sélectionné</p>\r\n ) : (\r\n <div className=\"flex flex-col gap-2\">\r\n {favorites.map((module, index) => (\r\n <div\r\n key={module.id}\r\n draggable\r\n onDragStart={(e) => handleDragStart(e, index)}\r\n onDragEnd={handleDragEnd}\r\n onDragOver={(e) => handleDragOver(e, index)}\r\n onDragLeave={handleDragLeave}\r\n onDrop={(e) => handleDrop(e, index)}\r\n className={`flex items-center gap-2 px-3 py-2 bg-[var(--accent-bg)] border text-[var(--color-accent-500)] cursor-grab active:cursor-grabbing transition-all ${\r\n dragOverIndex === index\r\n ? 'border-[var(--color-accent-500)] border-2 scale-[1.02]'\r\n : 'border-[var(--color-accent-500)]/50'\r\n }`}\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <GripVertical className=\"w-4 h-4 text-[var(--color-accent-400)] flex-shrink-0\" />\r\n <span className=\"text-xs text-[var(--color-accent-500)] font-mono w-4\">{index + 1}</span>\r\n <button\r\n onClick={() => handleFavoriteClick(module)}\r\n className=\"flex items-center gap-2 hover:underline flex-1\"\r\n >\r\n <DynamicIcon name={module.icon} className=\"w-4 h-4\" />\r\n <span className=\"text-sm font-medium\">{module.label}</span>\r\n <span className=\"text-xs text-[var(--text-muted)]\">({module.applicationLabel})</span>\r\n </button>\r\n <button\r\n onClick={() => toggleFavorite(module)}\r\n className=\"p-1 hover:bg-[var(--bg-tertiary)] rounded flex-shrink-0\"\r\n title=\"Retirer des favoris\"\r\n >\r\n <X className=\"w-3.5 h-3.5\" />\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Available Modules */}\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <h3 className=\"font-semibold text-[var(--text-primary)]\">Modules disponibles</h3>\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-muted)]\" />\r\n <input\r\n type=\"text\"\r\n placeholder=\"Rechercher un module...\"\r\n value={moduleSearch}\r\n onChange={(e) => setModuleSearch(e.target.value)}\r\n className=\"pl-9 pr-3 py-2 w-64 bg-[var(--bg-primary)] border border-[var(--border-color)] text-sm focus:outline-none focus:border-[var(--color-accent-500)]\"\r\n style={{ borderRadius: 'var(--radius-input)' }}\r\n />\r\n </div>\r\n </div>\r\n {modulesByApp.map(({ app, modules }) => {\r\n // Filter modules based on search\r\n const filteredModules = moduleSearch\r\n ? modules.filter(m =>\r\n m.label.toLowerCase().includes(moduleSearch.toLowerCase()) ||\r\n m.code.toLowerCase().includes(moduleSearch.toLowerCase()) ||\r\n app.label.toLowerCase().includes(moduleSearch.toLowerCase())\r\n )\r\n : modules;\r\n\r\n // Don't render app section if no modules match\r\n if (filteredModules.length === 0) return null;\r\n\r\n return (\r\n <div\r\n key={app.id}\r\n className=\"p-4 bg-[var(--bg-secondary)] border border-[var(--item-color-border)]\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center gap-2 mb-3\">\r\n <DynamicIcon name={app.icon || 'Folder'} className=\"w-4 h-4 text-[var(--text-secondary)]\" />\r\n <span className=\"font-medium text-[var(--text-primary)]\">{app.label}</span>\r\n <span className=\"text-xs text-[var(--text-muted)]\">({filteredModules.length} module{filteredModules.length > 1 ? 's' : ''})</span>\r\n </div>\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-2\">\r\n {filteredModules.map((module) => {\r\n const isSelected = isFavorite(module.id);\r\n const isDisabled = !isSelected && !canAddMore;\r\n\r\n return (\r\n <button\r\n key={module.id}\r\n onClick={() => handleToggleFavorite(module, app)}\r\n disabled={isDisabled}\r\n className={`flex items-center gap-3 p-3 transition-all ${\r\n getFavoriteButtonClass(isSelected, isDisabled)\r\n }`}\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n <div className={`w-8 h-8 flex items-center justify-center ${\r\n isSelected\r\n ? 'bg-[var(--color-accent-600)] text-white'\r\n : 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]'\r\n }`} style={{ borderRadius: 'var(--radius-button)' }}>\r\n <DynamicIcon name={module.icon || 'Star'} className=\"w-4 h-4\" />\r\n </div>\r\n <span className={`text-sm ${\r\n isSelected ? 'font-medium text-[var(--color-accent-500)]' : 'text-[var(--text-primary)]'\r\n }`}>\r\n {module.label}\r\n </span>\r\n {isSelected && (\r\n <Check className=\"w-4 h-4 text-[var(--color-accent-500)] ml-auto\" />\r\n )}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n\r\n {(modulesByApp.length === 0 || (moduleSearch && modulesByApp.every(({ modules }) =>\r\n !modules.some(m =>\r\n m.label.toLowerCase().includes(moduleSearch.toLowerCase()) ||\r\n m.code.toLowerCase().includes(moduleSearch.toLowerCase())\r\n )\r\n ))) && (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {moduleSearch ? `Aucun module trouvé pour \"${moduleSearch}\"` : t('common:favorites.noModules')}\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["PREFERENCES_TABS","DynamicIcon","name","className","IconComponent","LucideIcons","jsx","Star","getFavoriteButtonClass","isSelected","isDisabled","PreferencesPage","t","i18n","useTranslation","navigate","useNavigate","activeTab","setActiveTab","useTabNavigation","loadFromServer","isSyncing","selectedThemeTenant","useTheme","currentTenant","tenantLoading","useTenant","menu","useNavigation","favorites","toggleFavorite","isFavorite","canAddMore","maxFavorites","reorderFavorites","favoritesLoading","useFavoriteModules","syncSuccess","setSyncSuccess","useState","moduleSearch","setModuleSearch","draggedIndex","setDraggedIndex","dragOverIndex","setDragOverIndex","dragNodeRef","useRef","emailNotifications","setEmailNotifications","securityAlerts","setSecurityAlerts","productUpdates","setProductUpdates","notificationsSaving","setNotificationsSaving","notificationsSaved","setNotificationsSaved","notificationsSaveTimeoutRef","isInitialLoadRef","useEffect","loadPreferences","prefs","userApi","saveNotifications","useCallback","handleSync","scope","error","tabs","Palette","Globe","Bell","modulesByApp","app","handleToggleFavorite","module","favoriteModule","handleFavoriteClick","handleDragStart","e","index","handleDragEnd","handleDragOver","handleDragLeave","handleDrop","dropIndex","dragIndex","newFavorites","draggedItem","jsxs","tab","Icon","ThemeCustomizer","LanguageSwitcher","Fragment","Loader2","Check","GripVertical","X","Search","modules","filteredModules","m"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
2
  import { useState as d, useEffect as m } from "react";
3
3
  import { useTranslation as v } from "react-i18next";
4
4
  import { Construction as b, X as p, Mail as x, Calendar as h } from "lucide-react";
5
- import { o as u } from "./index-CwSaRXXg.js";
5
+ import { o as u } from "./index-lpIzhufD.js";
6
6
  function C() {
7
7
  const { t } = v(["navigation", "common"]), { user: r } = u(), [i, o] = d(null);
8
8
  m(() => {
@@ -136,4 +136,4 @@ function C() {
136
136
  export {
137
137
  C as ProfilePage
138
138
  };
139
- //# sourceMappingURL=ProfilePage-DDrl10zj.js.map
139
+ //# sourceMappingURL=ProfilePage-BZVpg6-l.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePage-DDrl10zj.js","sources":["../../src/pages/personal/myspace/ProfilePage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Mail, Calendar, Construction, X } from 'lucide-react';\r\nimport { useAuth } from '@/contexts/AuthContext';\r\n\r\nexport function ProfilePage(): ReactElement {\r\n const { t } = useTranslation(['navigation', 'common']);\r\n const { user } = useAuth();\r\n const [notification, setNotification] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (notification) {\r\n const timer = setTimeout(() => setNotification(null), 4000);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [notification]);\r\n\r\n const handleComingSoon = () => {\r\n setNotification(t('common:underDevelopment.description'));\r\n };\r\n\r\n const displayName = user?.firstName && user?.lastName\r\n ? `${user.firstName} ${user.lastName}`\r\n : user?.email || t('common:name');\r\n\r\n const initials = user?.firstName && user?.lastName\r\n ? `${user.firstName.at(0)}${user.lastName.at(0)}`.toUpperCase()\r\n : user?.email?.at(0)?.toUpperCase() || 'U';\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('navigation:sidebar.profile')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('navigation:profile.subtitle')}</p>\r\n </div>\r\n\r\n {notification && (\r\n <div\r\n className=\"flex items-center gap-3 p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 text-amber-800 dark:text-amber-200\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <Construction className=\"w-5 h-5 flex-shrink-0\" />\r\n <span className=\"flex-1 text-sm\">{notification}</span>\r\n <button\r\n onClick={() => setNotification(null)}\r\n className=\"p-1 hover:bg-amber-100 dark:hover:bg-amber-800/30 rounded transition-colors\"\r\n >\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center gap-6 mb-6\">\r\n <div\r\n className=\"w-20 h-20 bg-gradient-to-br from-[var(--color-accent-500)] to-[var(--color-accent-600)] flex items-center justify-center text-white text-2xl font-bold\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n {initials}\r\n </div>\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">{displayName}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">{user?.email}</p>\r\n {user?.roles && user.roles.length > 0 && (\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {user.roles.map((role) => (\r\n <span\r\n key={role}\r\n className=\"px-2 py-1 text-xs font-medium bg-[var(--accent-bg)] text-[var(--color-accent-600)]\"\r\n style={{ borderRadius: 'var(--radius-badge)' }}\r\n >\r\n {role}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Mail className=\"w-5 h-5\" />\r\n <span>{user?.email || t('navigation:profile.notProvided')}</span>\r\n </div>\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Calendar className=\"w-5 h-5\" />\r\n <span>{t('navigation:profile.memberSince', { date: 'janvier 2024' })}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-6 pt-6 border-t border-[var(--border-color)]\">\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-4 py-2 bg-[var(--color-accent-500)] hover:bg-[var(--color-accent-600)] text-white font-medium transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <h3 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4\">{t('navigation:profile.security.title')}</h3>\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.password')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.lastChanged', { days: 30 })}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.twoFactor')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.notEnabled')}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('navigation:profile.security.enable')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ProfilePage","useTranslation","user","useAuth","notification","setNotification","useState","useEffect","timer","handleComingSoon","displayName","initials","jsxs","jsx","Construction","X","role","Mail","Calendar"],"mappings":"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"}
1
+ {"version":3,"file":"ProfilePage-BZVpg6-l.js","sources":["../../src/pages/personal/myspace/ProfilePage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Mail, Calendar, Construction, X } from 'lucide-react';\r\nimport { useAuth } from '@/contexts/AuthContext';\r\n\r\nexport function ProfilePage(): ReactElement {\r\n const { t } = useTranslation(['navigation', 'common']);\r\n const { user } = useAuth();\r\n const [notification, setNotification] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (notification) {\r\n const timer = setTimeout(() => setNotification(null), 4000);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [notification]);\r\n\r\n const handleComingSoon = () => {\r\n setNotification(t('common:underDevelopment.description'));\r\n };\r\n\r\n const displayName = user?.firstName && user?.lastName\r\n ? `${user.firstName} ${user.lastName}`\r\n : user?.email || t('common:name');\r\n\r\n const initials = user?.firstName && user?.lastName\r\n ? `${user.firstName.at(0)}${user.lastName.at(0)}`.toUpperCase()\r\n : user?.email?.at(0)?.toUpperCase() || 'U';\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('navigation:sidebar.profile')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('navigation:profile.subtitle')}</p>\r\n </div>\r\n\r\n {notification && (\r\n <div\r\n className=\"flex items-center gap-3 p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 text-amber-800 dark:text-amber-200\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <Construction className=\"w-5 h-5 flex-shrink-0\" />\r\n <span className=\"flex-1 text-sm\">{notification}</span>\r\n <button\r\n onClick={() => setNotification(null)}\r\n className=\"p-1 hover:bg-amber-100 dark:hover:bg-amber-800/30 rounded transition-colors\"\r\n >\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center gap-6 mb-6\">\r\n <div\r\n className=\"w-20 h-20 bg-gradient-to-br from-[var(--color-accent-500)] to-[var(--color-accent-600)] flex items-center justify-center text-white text-2xl font-bold\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n {initials}\r\n </div>\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">{displayName}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">{user?.email}</p>\r\n {user?.roles && user.roles.length > 0 && (\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {user.roles.map((role) => (\r\n <span\r\n key={role}\r\n className=\"px-2 py-1 text-xs font-medium bg-[var(--accent-bg)] text-[var(--color-accent-600)]\"\r\n style={{ borderRadius: 'var(--radius-badge)' }}\r\n >\r\n {role}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Mail className=\"w-5 h-5\" />\r\n <span>{user?.email || t('navigation:profile.notProvided')}</span>\r\n </div>\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Calendar className=\"w-5 h-5\" />\r\n <span>{t('navigation:profile.memberSince', { date: 'janvier 2024' })}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-6 pt-6 border-t border-[var(--border-color)]\">\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-4 py-2 bg-[var(--color-accent-500)] hover:bg-[var(--color-accent-600)] text-white font-medium transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <h3 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4\">{t('navigation:profile.security.title')}</h3>\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.password')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.lastChanged', { days: 30 })}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.twoFactor')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.notEnabled')}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('navigation:profile.security.enable')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ProfilePage","useTranslation","user","useAuth","notification","setNotification","useState","useEffect","timer","handleComingSoon","displayName","initials","jsxs","jsx","Construction","X","role","Mail","Calendar"],"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"),c=require("react"),m=require("react-i18next"),i=require("lucide-react"),x=require("./index-2wUhd9Lu.js");function v(){const{t}=m.useTranslation(["navigation","common"]),{user:r}=x.useAuth(),[a,n]=c.useState(null);c.useEffect(()=>{if(a){const s=setTimeout(()=>n(null),4e3);return()=>clearTimeout(s)}},[a]);const o=()=>{n(t("common:underDevelopment.description"))},l=r?.firstName&&r?.lastName?`${r.firstName} ${r.lastName}`:r?.email||t("common:name"),d=r?.firstName&&r?.lastName?`${r.firstName.at(0)}${r.lastName.at(0)}`.toUpperCase():r?.email?.at(0)?.toUpperCase()||"U";return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:t("navigation:sidebar.profile")}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:t("navigation:profile.subtitle")})]}),a&&e.jsxs("div",{className:"flex items-center gap-3 p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 text-amber-800 dark:text-amber-200",style:{borderRadius:"var(--radius-card)"},children:[e.jsx(i.Construction,{className:"w-5 h-5 flex-shrink-0"}),e.jsx("span",{className:"flex-1 text-sm",children:a}),e.jsx("button",{onClick:()=>n(null),className:"p-1 hover:bg-amber-100 dark:hover:bg-amber-800/30 rounded transition-colors",children:e.jsx(i.X,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] p-6",style:{borderRadius:"var(--radius-card)"},children:[e.jsxs("div",{className:"flex items-center gap-6 mb-6",children:[e.jsx("div",{className:"w-20 h-20 bg-gradient-to-br from-[var(--color-accent-500)] to-[var(--color-accent-600)] flex items-center justify-center text-white text-2xl font-bold",style:{borderRadius:"var(--radius-card)"},children:d}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:l}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:r?.email}),r?.roles&&r.roles.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:r.roles.map(s=>e.jsx("span",{className:"px-2 py-1 text-xs font-medium bg-[var(--accent-bg)] text-[var(--color-accent-600)]",style:{borderRadius:"var(--radius-badge)"},children:s},s))})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 text-[var(--text-secondary)]",children:[e.jsx(i.Mail,{className:"w-5 h-5"}),e.jsx("span",{children:r?.email||t("navigation:profile.notProvided")})]}),e.jsxs("div",{className:"flex items-center gap-3 text-[var(--text-secondary)]",children:[e.jsx(i.Calendar,{className:"w-5 h-5"}),e.jsx("span",{children:t("navigation:profile.memberSince",{date:"janvier 2024"})})]})]}),e.jsx("div",{className:"mt-6 pt-6 border-t border-[var(--border-color)]",children:e.jsx("button",{onClick:o,className:"px-4 py-2 bg-[var(--color-accent-500)] hover:bg-[var(--color-accent-600)] text-white font-medium transition-colors",style:{borderRadius:"var(--radius-button)"},children:t("common:buttons.edit")})})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] p-6",style:{borderRadius:"var(--radius-card)"},children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4",children:t("navigation:profile.security.title")}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:t("navigation:profile.security.password")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t("navigation:profile.security.lastChanged",{days:30})})]}),e.jsx("button",{onClick:o,className:"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors",style:{borderRadius:"var(--radius-button)"},children:t("common:buttons.edit")})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:t("navigation:profile.security.twoFactor")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t("navigation:profile.security.notEnabled")})]}),e.jsx("button",{onClick:o,className:"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors",style:{borderRadius:"var(--radius-button)"},children:t("navigation:profile.security.enable")})]})]})]})]})}exports.ProfilePage=v;
2
- //# sourceMappingURL=ProfilePage-DPoXwdnc.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("react"),m=require("react-i18next"),i=require("lucide-react"),x=require("./index-IgLVXPg8.js");function v(){const{t}=m.useTranslation(["navigation","common"]),{user:r}=x.useAuth(),[a,n]=c.useState(null);c.useEffect(()=>{if(a){const s=setTimeout(()=>n(null),4e3);return()=>clearTimeout(s)}},[a]);const o=()=>{n(t("common:underDevelopment.description"))},l=r?.firstName&&r?.lastName?`${r.firstName} ${r.lastName}`:r?.email||t("common:name"),d=r?.firstName&&r?.lastName?`${r.firstName.at(0)}${r.lastName.at(0)}`.toUpperCase():r?.email?.at(0)?.toUpperCase()||"U";return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:t("navigation:sidebar.profile")}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:t("navigation:profile.subtitle")})]}),a&&e.jsxs("div",{className:"flex items-center gap-3 p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 text-amber-800 dark:text-amber-200",style:{borderRadius:"var(--radius-card)"},children:[e.jsx(i.Construction,{className:"w-5 h-5 flex-shrink-0"}),e.jsx("span",{className:"flex-1 text-sm",children:a}),e.jsx("button",{onClick:()=>n(null),className:"p-1 hover:bg-amber-100 dark:hover:bg-amber-800/30 rounded transition-colors",children:e.jsx(i.X,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] p-6",style:{borderRadius:"var(--radius-card)"},children:[e.jsxs("div",{className:"flex items-center gap-6 mb-6",children:[e.jsx("div",{className:"w-20 h-20 bg-gradient-to-br from-[var(--color-accent-500)] to-[var(--color-accent-600)] flex items-center justify-center text-white text-2xl font-bold",style:{borderRadius:"var(--radius-card)"},children:d}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:l}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:r?.email}),r?.roles&&r.roles.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:r.roles.map(s=>e.jsx("span",{className:"px-2 py-1 text-xs font-medium bg-[var(--accent-bg)] text-[var(--color-accent-600)]",style:{borderRadius:"var(--radius-badge)"},children:s},s))})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 text-[var(--text-secondary)]",children:[e.jsx(i.Mail,{className:"w-5 h-5"}),e.jsx("span",{children:r?.email||t("navigation:profile.notProvided")})]}),e.jsxs("div",{className:"flex items-center gap-3 text-[var(--text-secondary)]",children:[e.jsx(i.Calendar,{className:"w-5 h-5"}),e.jsx("span",{children:t("navigation:profile.memberSince",{date:"janvier 2024"})})]})]}),e.jsx("div",{className:"mt-6 pt-6 border-t border-[var(--border-color)]",children:e.jsx("button",{onClick:o,className:"px-4 py-2 bg-[var(--color-accent-500)] hover:bg-[var(--color-accent-600)] text-white font-medium transition-colors",style:{borderRadius:"var(--radius-button)"},children:t("common:buttons.edit")})})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] p-6",style:{borderRadius:"var(--radius-card)"},children:[e.jsx("h3",{className:"text-lg font-semibold text-[var(--text-primary)] mb-4",children:t("navigation:profile.security.title")}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:t("navigation:profile.security.password")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t("navigation:profile.security.lastChanged",{days:30})})]}),e.jsx("button",{onClick:o,className:"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors",style:{borderRadius:"var(--radius-button)"},children:t("common:buttons.edit")})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-[var(--text-primary)]",children:t("navigation:profile.security.twoFactor")}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)]",children:t("navigation:profile.security.notEnabled")})]}),e.jsx("button",{onClick:o,className:"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors",style:{borderRadius:"var(--radius-button)"},children:t("navigation:profile.security.enable")})]})]})]})]})}exports.ProfilePage=v;
2
+ //# sourceMappingURL=ProfilePage-Cu_FITeL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePage-DPoXwdnc.js","sources":["../../src/pages/personal/myspace/ProfilePage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Mail, Calendar, Construction, X } from 'lucide-react';\r\nimport { useAuth } from '@/contexts/AuthContext';\r\n\r\nexport function ProfilePage(): ReactElement {\r\n const { t } = useTranslation(['navigation', 'common']);\r\n const { user } = useAuth();\r\n const [notification, setNotification] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (notification) {\r\n const timer = setTimeout(() => setNotification(null), 4000);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [notification]);\r\n\r\n const handleComingSoon = () => {\r\n setNotification(t('common:underDevelopment.description'));\r\n };\r\n\r\n const displayName = user?.firstName && user?.lastName\r\n ? `${user.firstName} ${user.lastName}`\r\n : user?.email || t('common:name');\r\n\r\n const initials = user?.firstName && user?.lastName\r\n ? `${user.firstName.at(0)}${user.lastName.at(0)}`.toUpperCase()\r\n : user?.email?.at(0)?.toUpperCase() || 'U';\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('navigation:sidebar.profile')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('navigation:profile.subtitle')}</p>\r\n </div>\r\n\r\n {notification && (\r\n <div\r\n className=\"flex items-center gap-3 p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 text-amber-800 dark:text-amber-200\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <Construction className=\"w-5 h-5 flex-shrink-0\" />\r\n <span className=\"flex-1 text-sm\">{notification}</span>\r\n <button\r\n onClick={() => setNotification(null)}\r\n className=\"p-1 hover:bg-amber-100 dark:hover:bg-amber-800/30 rounded transition-colors\"\r\n >\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center gap-6 mb-6\">\r\n <div\r\n className=\"w-20 h-20 bg-gradient-to-br from-[var(--color-accent-500)] to-[var(--color-accent-600)] flex items-center justify-center text-white text-2xl font-bold\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n {initials}\r\n </div>\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">{displayName}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">{user?.email}</p>\r\n {user?.roles && user.roles.length > 0 && (\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {user.roles.map((role) => (\r\n <span\r\n key={role}\r\n className=\"px-2 py-1 text-xs font-medium bg-[var(--accent-bg)] text-[var(--color-accent-600)]\"\r\n style={{ borderRadius: 'var(--radius-badge)' }}\r\n >\r\n {role}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Mail className=\"w-5 h-5\" />\r\n <span>{user?.email || t('navigation:profile.notProvided')}</span>\r\n </div>\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Calendar className=\"w-5 h-5\" />\r\n <span>{t('navigation:profile.memberSince', { date: 'janvier 2024' })}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-6 pt-6 border-t border-[var(--border-color)]\">\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-4 py-2 bg-[var(--color-accent-500)] hover:bg-[var(--color-accent-600)] text-white font-medium transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <h3 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4\">{t('navigation:profile.security.title')}</h3>\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.password')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.lastChanged', { days: 30 })}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.twoFactor')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.notEnabled')}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('navigation:profile.security.enable')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ProfilePage","useTranslation","user","useAuth","notification","setNotification","useState","useEffect","timer","handleComingSoon","displayName","initials","jsxs","jsx","Construction","X","role","Mail","Calendar"],"mappings":"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"}
1
+ {"version":3,"file":"ProfilePage-Cu_FITeL.js","sources":["../../src/pages/personal/myspace/ProfilePage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Mail, Calendar, Construction, X } from 'lucide-react';\r\nimport { useAuth } from '@/contexts/AuthContext';\r\n\r\nexport function ProfilePage(): ReactElement {\r\n const { t } = useTranslation(['navigation', 'common']);\r\n const { user } = useAuth();\r\n const [notification, setNotification] = useState<string | null>(null);\r\n\r\n useEffect(() => {\r\n if (notification) {\r\n const timer = setTimeout(() => setNotification(null), 4000);\r\n return () => clearTimeout(timer);\r\n }\r\n }, [notification]);\r\n\r\n const handleComingSoon = () => {\r\n setNotification(t('common:underDevelopment.description'));\r\n };\r\n\r\n const displayName = user?.firstName && user?.lastName\r\n ? `${user.firstName} ${user.lastName}`\r\n : user?.email || t('common:name');\r\n\r\n const initials = user?.firstName && user?.lastName\r\n ? `${user.firstName.at(0)}${user.lastName.at(0)}`.toUpperCase()\r\n : user?.email?.at(0)?.toUpperCase() || 'U';\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div>\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">{t('navigation:sidebar.profile')}</h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">{t('navigation:profile.subtitle')}</p>\r\n </div>\r\n\r\n {notification && (\r\n <div\r\n className=\"flex items-center gap-3 p-4 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 text-amber-800 dark:text-amber-200\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <Construction className=\"w-5 h-5 flex-shrink-0\" />\r\n <span className=\"flex-1 text-sm\">{notification}</span>\r\n <button\r\n onClick={() => setNotification(null)}\r\n className=\"p-1 hover:bg-amber-100 dark:hover:bg-amber-800/30 rounded transition-colors\"\r\n >\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <div className=\"flex items-center gap-6 mb-6\">\r\n <div\r\n className=\"w-20 h-20 bg-gradient-to-br from-[var(--color-accent-500)] to-[var(--color-accent-600)] flex items-center justify-center text-white text-2xl font-bold\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n {initials}\r\n </div>\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">{displayName}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">{user?.email}</p>\r\n {user?.roles && user.roles.length > 0 && (\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {user.roles.map((role) => (\r\n <span\r\n key={role}\r\n className=\"px-2 py-1 text-xs font-medium bg-[var(--accent-bg)] text-[var(--color-accent-600)]\"\r\n style={{ borderRadius: 'var(--radius-badge)' }}\r\n >\r\n {role}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Mail className=\"w-5 h-5\" />\r\n <span>{user?.email || t('navigation:profile.notProvided')}</span>\r\n </div>\r\n <div className=\"flex items-center gap-3 text-[var(--text-secondary)]\">\r\n <Calendar className=\"w-5 h-5\" />\r\n <span>{t('navigation:profile.memberSince', { date: 'janvier 2024' })}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-6 pt-6 border-t border-[var(--border-color)]\">\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-4 py-2 bg-[var(--color-accent-500)] hover:bg-[var(--color-accent-600)] text-white font-medium transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"bg-[var(--bg-card)] border border-[var(--border-color)] p-6\"\r\n style={{ borderRadius: 'var(--radius-card)' }}\r\n >\r\n <h3 className=\"text-lg font-semibold text-[var(--text-primary)] mb-4\">{t('navigation:profile.security.title')}</h3>\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.password')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.lastChanged', { days: 30 })}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('common:buttons.edit')}\r\n </button>\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <p className=\"font-medium text-[var(--text-primary)]\">{t('navigation:profile.security.twoFactor')}</p>\r\n <p className=\"text-sm text-[var(--text-secondary)]\">{t('navigation:profile.security.notEnabled')}</p>\r\n </div>\r\n <button\r\n onClick={handleComingSoon}\r\n className=\"px-3 py-1.5 text-sm bg-[var(--bg-tertiary)] hover:bg-[var(--bg-hover)] text-[var(--text-primary)] transition-colors\"\r\n style={{ borderRadius: 'var(--radius-button)' }}\r\n >\r\n {t('navigation:profile.security.enable')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ProfilePage","useTranslation","user","useAuth","notification","setNotification","useState","useEffect","timer","handleComingSoon","displayName","initials","jsxs","jsx","Construction","X","role","Mail","Calendar"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { jsxs as s, jsx as t, Fragment as ze } from "react/jsx-runtime";
2
2
  import { useState as v, useMemo as De, useCallback as Fe, useEffect as oe } from "react";
3
3
  import { useTranslation as Ue } from "react-i18next";
4
4
  import { Users as ie, Building2 as le, Briefcase as He, MapPin as Be, Globe as Le, AlertCircle as Oe, X as D, Search as Xe, GitMerge as F, History as de, Plus as Ge, Loader2 as J, Check as Je, MoreHorizontal as _e, Edit2 as qe, Trash2 as We } from "lucide-react";
5
- import { j as U, i as Ke, a as Qe, B as Ve } from "./index-CwSaRXXg.js";
6
- import { u as Ye, T as Ze } from "./TenantScopeSelector-Dz7i1I43.js";
5
+ import { j as U, i as Ke, a as Qe, B as Ve } from "./index-lpIzhufD.js";
6
+ import { u as Ye, T as Ze } from "./TenantScopeSelector-BWfYxvEa.js";
7
7
  const et = (a) => ({
8
8
  get: (n, p) => U.get(n, {
9
9
  ...p,
@@ -977,4 +977,4 @@ function it() {
977
977
  export {
978
978
  it as ReferencesManagementPage
979
979
  };
980
- //# sourceMappingURL=ReferencesManagementPage-eFsKjIEK.js.map
980
+ //# sourceMappingURL=ReferencesManagementPage-DUlVk9Ps.js.map