@atlashub/smartstack 3.39.0 → 3.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/chunks/{AgentSkillsPage-DgqyaZwI.js → AgentSkillsPage-BS_W2KTh.js} +2 -2
  2. package/dist/chunks/{AgentSkillsPage-DgqyaZwI.js.map → AgentSkillsPage-BS_W2KTh.js.map} +1 -1
  3. package/dist/chunks/{AgentSkillsPage-ojivq0Cu.js → AgentSkillsPage-CmDFLnp7.js} +2 -2
  4. package/dist/chunks/{AgentSkillsPage-ojivq0Cu.js.map → AgentSkillsPage-CmDFLnp7.js.map} +1 -1
  5. package/dist/chunks/{AgentWorkloadPage-BGGTfOLs.js → AgentWorkloadPage-C8IvYfhT.js} +2 -2
  6. package/dist/chunks/{AgentWorkloadPage-BGGTfOLs.js.map → AgentWorkloadPage-C8IvYfhT.js.map} +1 -1
  7. package/dist/chunks/{AgentWorkloadPage-DWsC5VoS.js → AgentWorkloadPage-JXsQbwuM.js} +2 -2
  8. package/dist/chunks/{AgentWorkloadPage-DWsC5VoS.js.map → AgentWorkloadPage-JXsQbwuM.js.map} +1 -1
  9. package/dist/chunks/{ApiCatalogDetailPage-7EifQOAh.js → ApiCatalogDetailPage-CYOt34Vy.js} +2 -2
  10. package/dist/chunks/{ApiCatalogDetailPage-7EifQOAh.js.map → ApiCatalogDetailPage-CYOt34Vy.js.map} +1 -1
  11. package/dist/chunks/{ApiCatalogDetailPage-BD7XE4xK.js → ApiCatalogDetailPage-wFZDsTGy.js} +3 -3
  12. package/dist/chunks/{ApiCatalogDetailPage-BD7XE4xK.js.map → ApiCatalogDetailPage-wFZDsTGy.js.map} +1 -1
  13. package/dist/chunks/{ApiCatalogPage-BfPoZGD3.js → ApiCatalogPage-Bdm3HNGP.js} +2 -2
  14. package/dist/chunks/{ApiCatalogPage-BfPoZGD3.js.map → ApiCatalogPage-Bdm3HNGP.js.map} +1 -1
  15. package/dist/chunks/{ApiCatalogPage-BOPTnk-b.js → ApiCatalogPage-m_TWQyGv.js} +2 -2
  16. package/dist/chunks/{ApiCatalogPage-BOPTnk-b.js.map → ApiCatalogPage-m_TWQyGv.js.map} +1 -1
  17. package/dist/chunks/ApplicationDetailPage-C2BSpEoW.js +2 -0
  18. package/dist/chunks/{ApplicationDetailPage-CWdz0TS4.js.map → ApplicationDetailPage-C2BSpEoW.js.map} +1 -1
  19. package/dist/chunks/{ApplicationDetailPage-CDQqViuH.js → ApplicationDetailPage-CcgDAP-J.js} +503 -501
  20. package/dist/chunks/{ApplicationDetailPage-CDQqViuH.js.map → ApplicationDetailPage-CcgDAP-J.js.map} +1 -1
  21. package/dist/chunks/{ApplicationsDashboardPage-ZyXm2Cd1.js → ApplicationsDashboardPage-CDIjziL3.js} +3 -3
  22. package/dist/chunks/{ApplicationsDashboardPage-ZyXm2Cd1.js.map → ApplicationsDashboardPage-CDIjziL3.js.map} +1 -1
  23. package/dist/chunks/{ApplicationsDashboardPage-BH4S3qA2.js → ApplicationsDashboardPage-DslDyNzJ.js} +2 -2
  24. package/dist/chunks/{ApplicationsDashboardPage-BH4S3qA2.js.map → ApplicationsDashboardPage-DslDyNzJ.js.map} +1 -1
  25. package/dist/chunks/{ApplicationsGridPage-D0fU1_Le.js → ApplicationsGridPage-BCjsQGU0.js} +2 -2
  26. package/dist/chunks/{ApplicationsGridPage-D0fU1_Le.js.map → ApplicationsGridPage-BCjsQGU0.js.map} +1 -1
  27. package/dist/chunks/{ApplicationsGridPage-C1WF2Htv.js → ApplicationsGridPage-CIfKiCND.js} +2 -2
  28. package/dist/chunks/{ApplicationsGridPage-C1WF2Htv.js.map → ApplicationsGridPage-CIfKiCND.js.map} +1 -1
  29. package/dist/chunks/{ApplicationsListPage-Cxvt2_WQ.js → ApplicationsListPage-CT75kNcH.js} +2 -2
  30. package/dist/chunks/{ApplicationsListPage-Cxvt2_WQ.js.map → ApplicationsListPage-CT75kNcH.js.map} +1 -1
  31. package/dist/chunks/{ApplicationsListPage-B3ItaY4r.js → ApplicationsListPage-D2B4PZ5n.js} +2 -2
  32. package/dist/chunks/{ApplicationsListPage-B3ItaY4r.js.map → ApplicationsListPage-D2B4PZ5n.js.map} +1 -1
  33. package/dist/chunks/{ApplicationsPage-BqfNR-kc.js → ApplicationsPage-CaTBtduL.js} +2 -2
  34. package/dist/chunks/{ApplicationsPage-BqfNR-kc.js.map → ApplicationsPage-CaTBtduL.js.map} +1 -1
  35. package/dist/chunks/{ApplicationsPage-DuxuWfrN.js → ApplicationsPage-DW1LhL0U.js} +4 -4
  36. package/dist/chunks/{ApplicationsPage-DuxuWfrN.js.map → ApplicationsPage-DW1LhL0U.js.map} +1 -1
  37. package/dist/chunks/{AssignmentRulesPage-CR1C7V0a.js → AssignmentRulesPage-Bt9M0ki7.js} +2 -2
  38. package/dist/chunks/{AssignmentRulesPage-CR1C7V0a.js.map → AssignmentRulesPage-Bt9M0ki7.js.map} +1 -1
  39. package/dist/chunks/{AssignmentRulesPage-C4Jouh2g.js → AssignmentRulesPage-Y7xv60NY.js} +2 -2
  40. package/dist/chunks/{AssignmentRulesPage-C4Jouh2g.js.map → AssignmentRulesPage-Y7xv60NY.js.map} +1 -1
  41. package/dist/chunks/{AssignmentsPage-v8QUJkE7.js → AssignmentsPage-1eQGTjTi.js} +2 -2
  42. package/dist/chunks/{AssignmentsPage-v8QUJkE7.js.map → AssignmentsPage-1eQGTjTi.js.map} +1 -1
  43. package/dist/chunks/{AssignmentsPage-CjuGAd8n.js → AssignmentsPage-RURdPvfZ.js} +2 -2
  44. package/dist/chunks/{AssignmentsPage-CjuGAd8n.js.map → AssignmentsPage-RURdPvfZ.js.map} +1 -1
  45. package/dist/chunks/{AuthCallbackPage-BxIXPUJk.js → AuthCallbackPage-8hF0jYlK.js} +2 -2
  46. package/dist/chunks/{AuthCallbackPage-BxIXPUJk.js.map → AuthCallbackPage-8hF0jYlK.js.map} +1 -1
  47. package/dist/chunks/{AuthCallbackPage-CuS-efzY.js → AuthCallbackPage-DPL68Asu.js} +2 -2
  48. package/dist/chunks/{AuthCallbackPage-CuS-efzY.js.map → AuthCallbackPage-DPL68Asu.js.map} +1 -1
  49. package/dist/chunks/{ConfirmEmailPage-CWIqy2bT.js → ConfirmEmailPage-BKlpZkVk.js} +2 -2
  50. package/dist/chunks/{ConfirmEmailPage-CWIqy2bT.js.map → ConfirmEmailPage-BKlpZkVk.js.map} +1 -1
  51. package/dist/chunks/{ConfirmEmailPage-CkN8IfP-.js → ConfirmEmailPage-CawSZypI.js} +2 -2
  52. package/dist/chunks/{ConfirmEmailPage-CkN8IfP-.js.map → ConfirmEmailPage-CawSZypI.js.map} +1 -1
  53. package/dist/chunks/{CreateSupportTicketPage-Df0ow5ge.js → CreateSupportTicketPage-AwbMbBIH.js} +2 -2
  54. package/dist/chunks/{CreateSupportTicketPage-Df0ow5ge.js.map → CreateSupportTicketPage-AwbMbBIH.js.map} +1 -1
  55. package/dist/chunks/{CreateSupportTicketPage-CmrDfFxP.js → CreateSupportTicketPage-Dg1YW1eA.js} +2 -2
  56. package/dist/chunks/{CreateSupportTicketPage-CmrDfFxP.js.map → CreateSupportTicketPage-Dg1YW1eA.js.map} +1 -1
  57. package/dist/chunks/{DashboardPage-B4Pi5P3O.js → DashboardPage-B4YxOF-9.js} +3 -3
  58. package/dist/chunks/{DashboardPage-B4Pi5P3O.js.map → DashboardPage-B4YxOF-9.js.map} +1 -1
  59. package/dist/chunks/{DashboardPage-wEKZ_DWf.js → DashboardPage-BZxjinar.js} +2 -2
  60. package/dist/chunks/{DashboardPage-wEKZ_DWf.js.map → DashboardPage-BZxjinar.js.map} +1 -1
  61. package/dist/chunks/{DashboardPage-BAqpoxCW.js → DashboardPage-Bo09y8r7.js} +3 -3
  62. package/dist/chunks/{DashboardPage-BAqpoxCW.js.map → DashboardPage-Bo09y8r7.js.map} +1 -1
  63. package/dist/chunks/{DashboardPage-BT5kFaQA.js → DashboardPage-Cq5adDjP.js} +2 -2
  64. package/dist/chunks/{DashboardPage-BT5kFaQA.js.map → DashboardPage-Cq5adDjP.js.map} +1 -1
  65. package/dist/chunks/{EscalationConfigPage-4pF38E4N.js → EscalationConfigPage-C8Hv5naz.js} +2 -2
  66. package/dist/chunks/{EscalationConfigPage-4pF38E4N.js.map → EscalationConfigPage-C8Hv5naz.js.map} +1 -1
  67. package/dist/chunks/{EscalationConfigPage-Bcifnt_h.js → EscalationConfigPage-DNAqMRxA.js} +2 -2
  68. package/dist/chunks/{EscalationConfigPage-Bcifnt_h.js.map → EscalationConfigPage-DNAqMRxA.js.map} +1 -1
  69. package/dist/chunks/{ForceChangePasswordPage-CBaMV_PS.js → ForceChangePasswordPage-BURE_vNg.js} +2 -2
  70. package/dist/chunks/{ForceChangePasswordPage-CBaMV_PS.js.map → ForceChangePasswordPage-BURE_vNg.js.map} +1 -1
  71. package/dist/chunks/{ForceChangePasswordPage-ClDXluX1.js → ForceChangePasswordPage-C6jDZshk.js} +2 -2
  72. package/dist/chunks/{ForceChangePasswordPage-ClDXluX1.js.map → ForceChangePasswordPage-C6jDZshk.js.map} +1 -1
  73. package/dist/chunks/{ForgotPasswordPage--ueWRNSO.js → ForgotPasswordPage-C5HLYbz4.js} +2 -2
  74. package/dist/chunks/{ForgotPasswordPage--ueWRNSO.js.map → ForgotPasswordPage-C5HLYbz4.js.map} +1 -1
  75. package/dist/chunks/{ForgotPasswordPage-CzpAkP5R.js → ForgotPasswordPage-D3ZQBtjd.js} +2 -2
  76. package/dist/chunks/{ForgotPasswordPage-CzpAkP5R.js.map → ForgotPasswordPage-D3ZQBtjd.js.map} +1 -1
  77. package/dist/chunks/{GroupDetailPage-dXNOoSXE.js → GroupDetailPage-CTuzp9Vp.js} +5 -5
  78. package/dist/chunks/{GroupDetailPage-dXNOoSXE.js.map → GroupDetailPage-CTuzp9Vp.js.map} +1 -1
  79. package/dist/chunks/{GroupDetailPage-BIgBzQk0.js → GroupDetailPage-NJc2zCxC.js} +2 -2
  80. package/dist/chunks/{GroupDetailPage-BIgBzQk0.js.map → GroupDetailPage-NJc2zCxC.js.map} +1 -1
  81. package/dist/chunks/{MyAccessRequestsPage-K2NXkdy4.js → MyAccessRequestsPage-Cvr29Pnq.js} +2 -2
  82. package/dist/chunks/{MyAccessRequestsPage-K2NXkdy4.js.map → MyAccessRequestsPage-Cvr29Pnq.js.map} +1 -1
  83. package/dist/chunks/{MyAccessRequestsPage-Be8VvLhh.js → MyAccessRequestsPage-t6I24rHN.js} +2 -2
  84. package/dist/chunks/{MyAccessRequestsPage-Be8VvLhh.js.map → MyAccessRequestsPage-t6I24rHN.js.map} +1 -1
  85. package/dist/chunks/{MyTenantsPage-BXx1nPC8.js → MyTenantsPage-Dy2RZ_Ei.js} +2 -2
  86. package/dist/chunks/{MyTenantsPage-BXx1nPC8.js.map → MyTenantsPage-Dy2RZ_Ei.js.map} +1 -1
  87. package/dist/chunks/{MyTenantsPage-B9ZAUeCa.js → MyTenantsPage-SvDCQ4Wt.js} +3 -3
  88. package/dist/chunks/{MyTenantsPage-B9ZAUeCa.js.map → MyTenantsPage-SvDCQ4Wt.js.map} +1 -1
  89. package/dist/chunks/{MyTicketsPage-C9MSmmR5.js → MyTicketsPage-C3lEBFD9.js} +2 -2
  90. package/dist/chunks/{MyTicketsPage-C9MSmmR5.js.map → MyTicketsPage-C3lEBFD9.js.map} +1 -1
  91. package/dist/chunks/{MyTicketsPage-d0PoJpnX.js → MyTicketsPage-DydDgFyz.js} +2 -2
  92. package/dist/chunks/{MyTicketsPage-d0PoJpnX.js.map → MyTicketsPage-DydDgFyz.js.map} +1 -1
  93. package/dist/chunks/{NavigationAppsPage-CJ3BjLlz.js → NavigationAppsPage-Dyv767w8.js} +2 -2
  94. package/dist/chunks/{NavigationAppsPage-CJ3BjLlz.js.map → NavigationAppsPage-Dyv767w8.js.map} +1 -1
  95. package/dist/chunks/{NavigationAppsPage-8t2xbddT.js → NavigationAppsPage-WqSspaVo.js} +2 -2
  96. package/dist/chunks/{NavigationAppsPage-8t2xbddT.js.map → NavigationAppsPage-WqSspaVo.js.map} +1 -1
  97. package/dist/chunks/{NotificationsPage-_62-bmuk.js → NotificationsPage-Di4I95PM.js} +2 -2
  98. package/dist/chunks/{NotificationsPage-_62-bmuk.js.map → NotificationsPage-Di4I95PM.js.map} +1 -1
  99. package/dist/chunks/{NotificationsPage-CLHfVUxm.js → NotificationsPage-elSovpBw.js} +2 -2
  100. package/dist/chunks/{NotificationsPage-CLHfVUxm.js.map → NotificationsPage-elSovpBw.js.map} +1 -1
  101. package/dist/chunks/{OnboardingWizardPage-Dkc22Jc4.js → OnboardingWizardPage-fdWdkwiT.js} +2 -2
  102. package/dist/chunks/{OnboardingWizardPage-Dkc22Jc4.js.map → OnboardingWizardPage-fdWdkwiT.js.map} +1 -1
  103. package/dist/chunks/{OnboardingWizardPage-D1rzD6gR.js → OnboardingWizardPage-nPLe2buQ.js} +2 -2
  104. package/dist/chunks/{OnboardingWizardPage-D1rzD6gR.js.map → OnboardingWizardPage-nPLe2buQ.js.map} +1 -1
  105. package/dist/chunks/{PermissionDetailPage-BSvSe4SI.js → PermissionDetailPage-B8C7tWFP.js} +2 -2
  106. package/dist/chunks/{PermissionDetailPage-BSvSe4SI.js.map → PermissionDetailPage-B8C7tWFP.js.map} +1 -1
  107. package/dist/chunks/{PermissionDetailPage-_HhbxzlG.js → PermissionDetailPage-IUgUaTkE.js} +2 -2
  108. package/dist/chunks/{PermissionDetailPage-_HhbxzlG.js.map → PermissionDetailPage-IUgUaTkE.js.map} +1 -1
  109. package/dist/chunks/{PermissionsPage-Xb92YAHn.js → PermissionsPage-CmX5sQf2.js} +2 -2
  110. package/dist/chunks/{PermissionsPage-Xb92YAHn.js.map → PermissionsPage-CmX5sQf2.js.map} +1 -1
  111. package/dist/chunks/{PermissionsPage-B0M4gA5m.js → PermissionsPage-Kg0rduOM.js} +2 -2
  112. package/dist/chunks/{PermissionsPage-B0M4gA5m.js.map → PermissionsPage-Kg0rduOM.js.map} +1 -1
  113. package/dist/chunks/{PortalDashboardPage-DTeMESj9.js → PortalDashboardPage-CCAYuhtI.js} +2 -2
  114. package/dist/chunks/{PortalDashboardPage-DTeMESj9.js.map → PortalDashboardPage-CCAYuhtI.js.map} +1 -1
  115. package/dist/chunks/{PortalDashboardPage-pt9hipR4.js → PortalDashboardPage-Dme1XmzN.js} +2 -2
  116. package/dist/chunks/{PortalDashboardPage-pt9hipR4.js.map → PortalDashboardPage-Dme1XmzN.js.map} +1 -1
  117. package/dist/chunks/{PreferencesPage-Cy30AWIN.js → PreferencesPage-Ct6xWAFp.js} +2 -2
  118. package/dist/chunks/{PreferencesPage-Cy30AWIN.js.map → PreferencesPage-Ct6xWAFp.js.map} +1 -1
  119. package/dist/chunks/{PreferencesPage-CsHVGMgp.js → PreferencesPage-Db2RjMpm.js} +2 -2
  120. package/dist/chunks/{PreferencesPage-CsHVGMgp.js.map → PreferencesPage-Db2RjMpm.js.map} +1 -1
  121. package/dist/chunks/{ProfilePage-6Gf7igUI.js → ProfilePage-D6Xb1ALH.js} +2 -2
  122. package/dist/chunks/{ProfilePage-6Gf7igUI.js.map → ProfilePage-D6Xb1ALH.js.map} +1 -1
  123. package/dist/chunks/{ProfilePage-BzBWkztf.js → ProfilePage-DN2s-lfp.js} +2 -2
  124. package/dist/chunks/{ProfilePage-BzBWkztf.js.map → ProfilePage-DN2s-lfp.js.map} +1 -1
  125. package/dist/chunks/{ReferencesManagementPage-DEDoHrnU.js → ReferencesManagementPage-B5mcshG1.js} +2 -2
  126. package/dist/chunks/{ReferencesManagementPage-DEDoHrnU.js.map → ReferencesManagementPage-B5mcshG1.js.map} +1 -1
  127. package/dist/chunks/{ReferencesManagementPage-DD1QiFYr.js → ReferencesManagementPage-DB975ktX.js} +3 -3
  128. package/dist/chunks/{ReferencesManagementPage-DD1QiFYr.js.map → ReferencesManagementPage-DB975ktX.js.map} +1 -1
  129. package/dist/chunks/{RegisterPage-asdx33fV.js → RegisterPage-ZskZrLZH.js} +2 -2
  130. package/dist/chunks/{RegisterPage-asdx33fV.js.map → RegisterPage-ZskZrLZH.js.map} +1 -1
  131. package/dist/chunks/{RegisterPage-CIPHRYkl.js → RegisterPage-b8yIPVgh.js} +2 -2
  132. package/dist/chunks/{RegisterPage-CIPHRYkl.js.map → RegisterPage-b8yIPVgh.js.map} +1 -1
  133. package/dist/chunks/{ResetPasswordPage-B4Dj24vU.js → ResetPasswordPage-CeAvfsE-.js} +2 -2
  134. package/dist/chunks/{ResetPasswordPage-B4Dj24vU.js.map → ResetPasswordPage-CeAvfsE-.js.map} +1 -1
  135. package/dist/chunks/{ResetPasswordPage-B8MWH_Vi.js → ResetPasswordPage-Dzp5dCp8.js} +2 -2
  136. package/dist/chunks/{ResetPasswordPage-B8MWH_Vi.js.map → ResetPasswordPage-Dzp5dCp8.js.map} +1 -1
  137. package/dist/chunks/{ResolutionModal-Cs6T441o.js → ResolutionModal-CRVN7gHv.js} +2 -2
  138. package/dist/chunks/{ResolutionModal-Cs6T441o.js.map → ResolutionModal-CRVN7gHv.js.map} +1 -1
  139. package/dist/chunks/{ResolutionModal-rLoFOxm9.js → ResolutionModal-DJOw1sLT.js} +2 -2
  140. package/dist/chunks/{ResolutionModal-rLoFOxm9.js.map → ResolutionModal-DJOw1sLT.js.map} +1 -1
  141. package/dist/chunks/{RoleDetailPage-Pkw0wU5g.js → RoleDetailPage-CLVoFVF8.js} +2 -2
  142. package/dist/chunks/{RoleDetailPage-Pkw0wU5g.js.map → RoleDetailPage-CLVoFVF8.js.map} +1 -1
  143. package/dist/chunks/{RoleDetailPage-CNFG6j6P.js → RoleDetailPage-XGnPD_8C.js} +3 -3
  144. package/dist/chunks/{RoleDetailPage-CNFG6j6P.js.map → RoleDetailPage-XGnPD_8C.js.map} +1 -1
  145. package/dist/chunks/{RolesPage-BHEkMR2O.js → RolesPage-BnAMpR2b.js} +2 -2
  146. package/dist/chunks/{RolesPage-BHEkMR2O.js.map → RolesPage-BnAMpR2b.js.map} +1 -1
  147. package/dist/chunks/{RolesPage-D35jwDJU.js → RolesPage-Czj9LMkL.js} +2 -2
  148. package/dist/chunks/{RolesPage-D35jwDJU.js.map → RolesPage-Czj9LMkL.js.map} +1 -1
  149. package/dist/chunks/{SlaConfigPage-DtonDehw.js → SlaConfigPage-HM0MpIlg.js} +2 -2
  150. package/dist/chunks/{SlaConfigPage-DtonDehw.js.map → SlaConfigPage-HM0MpIlg.js.map} +1 -1
  151. package/dist/chunks/{SlaConfigPage-C5Jstix-.js → SlaConfigPage-ZRyAs8aY.js} +2 -2
  152. package/dist/chunks/{SlaConfigPage-C5Jstix-.js.map → SlaConfigPage-ZRyAs8aY.js.map} +1 -1
  153. package/dist/chunks/{SupportPermissionsPage-6pC73oCY.js → SupportPermissionsPage-CxJuGgcQ.js} +2 -2
  154. package/dist/chunks/{SupportPermissionsPage-6pC73oCY.js.map → SupportPermissionsPage-CxJuGgcQ.js.map} +1 -1
  155. package/dist/chunks/{SupportPermissionsPage-CsJKGt__.js → SupportPermissionsPage-DNd323OK.js} +2 -2
  156. package/dist/chunks/{SupportPermissionsPage-CsJKGt__.js.map → SupportPermissionsPage-DNd323OK.js.map} +1 -1
  157. package/dist/chunks/{TemplatesPage-DjmYOGEC.js → TemplatesPage-CdwPLsHj.js} +2 -2
  158. package/dist/chunks/{TemplatesPage-DjmYOGEC.js.map → TemplatesPage-CdwPLsHj.js.map} +1 -1
  159. package/dist/chunks/{TemplatesPage-DlY91VO_.js → TemplatesPage-Co3ygZvF.js} +2 -2
  160. package/dist/chunks/{TemplatesPage-DlY91VO_.js.map → TemplatesPage-Co3ygZvF.js.map} +1 -1
  161. package/dist/chunks/{TenantCard-BHLcv2gD.js → TenantCard-CmCfIK2F.js} +2 -2
  162. package/dist/chunks/{TenantCard-BHLcv2gD.js.map → TenantCard-CmCfIK2F.js.map} +1 -1
  163. package/dist/chunks/{TenantCard-DGCKVvKI.js → TenantCard-DI66acce.js} +2 -2
  164. package/dist/chunks/{TenantCard-DGCKVvKI.js.map → TenantCard-DI66acce.js.map} +1 -1
  165. package/dist/chunks/{TenantScopeSelector-dsSwnOWg.js → TenantScopeSelector-5NOwmFX2.js} +2 -2
  166. package/dist/chunks/{TenantScopeSelector-dsSwnOWg.js.map → TenantScopeSelector-5NOwmFX2.js.map} +1 -1
  167. package/dist/chunks/{TenantScopeSelector-CU5z5PJH.js → TenantScopeSelector-CEFgxiWt.js} +2 -2
  168. package/dist/chunks/{TenantScopeSelector-CU5z5PJH.js.map → TenantScopeSelector-CEFgxiWt.js.map} +1 -1
  169. package/dist/chunks/{TicketDetailPage-BQHMaRmq.js → TicketDetailPage-BhZ-mpv7.js} +2 -2
  170. package/dist/chunks/{TicketDetailPage-BQHMaRmq.js.map → TicketDetailPage-BhZ-mpv7.js.map} +1 -1
  171. package/dist/chunks/{TicketDetailPage-Bk_0uQ3B.js → TicketDetailPage-BxOiOG22.js} +2 -2
  172. package/dist/chunks/{TicketDetailPage-Bk_0uQ3B.js.map → TicketDetailPage-BxOiOG22.js.map} +1 -1
  173. package/dist/chunks/{TicketsPage-CufUJctx.js → TicketsPage-BiTvIcM8.js} +2 -2
  174. package/dist/chunks/{TicketsPage-CufUJctx.js.map → TicketsPage-BiTvIcM8.js.map} +1 -1
  175. package/dist/chunks/{TicketsPage-C8QQ4SKy.js → TicketsPage-CSiinHME.js} +2 -2
  176. package/dist/chunks/{TicketsPage-C8QQ4SKy.js.map → TicketsPage-CSiinHME.js.map} +1 -1
  177. package/dist/chunks/{UserCreateTicketPage-DoEMtJoe.js → UserCreateTicketPage-B3TW1oV7.js} +2 -2
  178. package/dist/chunks/{UserCreateTicketPage-DoEMtJoe.js.map → UserCreateTicketPage-B3TW1oV7.js.map} +1 -1
  179. package/dist/chunks/{UserCreateTicketPage-XxjNlR9K.js → UserCreateTicketPage-BszUd_WZ.js} +2 -2
  180. package/dist/chunks/{UserCreateTicketPage-XxjNlR9K.js.map → UserCreateTicketPage-BszUd_WZ.js.map} +1 -1
  181. package/dist/chunks/{UserDashboardPage-fdhZwMLg.js → UserDashboardPage-C6MvatAb.js} +2 -2
  182. package/dist/chunks/{UserDashboardPage-fdhZwMLg.js.map → UserDashboardPage-C6MvatAb.js.map} +1 -1
  183. package/dist/chunks/{UserDashboardPage-BV1d2hMG.js → UserDashboardPage-Dtt9VzG_.js} +2 -2
  184. package/dist/chunks/{UserDashboardPage-BV1d2hMG.js.map → UserDashboardPage-Dtt9VzG_.js.map} +1 -1
  185. package/dist/chunks/{UserDetailPage-C97e-Dax.js → UserDetailPage-BEEV2vlJ.js} +5 -5
  186. package/dist/chunks/{UserDetailPage-C97e-Dax.js.map → UserDetailPage-BEEV2vlJ.js.map} +1 -1
  187. package/dist/chunks/{UserDetailPage-BcA7Vhb2.js → UserDetailPage-Dw5OHheZ.js} +2 -2
  188. package/dist/chunks/{UserDetailPage-BcA7Vhb2.js.map → UserDetailPage-Dw5OHheZ.js.map} +1 -1
  189. package/dist/chunks/{UserTicketDetailPage-BA2syxXG.js → UserTicketDetailPage-B4YkzzbR.js} +2 -2
  190. package/dist/chunks/{UserTicketDetailPage-BA2syxXG.js.map → UserTicketDetailPage-B4YkzzbR.js.map} +1 -1
  191. package/dist/chunks/{UserTicketDetailPage-CXuZVAa2.js → UserTicketDetailPage-DCFV-0ny.js} +2 -2
  192. package/dist/chunks/{UserTicketDetailPage-CXuZVAa2.js.map → UserTicketDetailPage-DCFV-0ny.js.map} +1 -1
  193. package/dist/chunks/{UsersGroupsPage-CPVk31Dh.js → UsersGroupsPage-CY-l9fTp.js} +3 -3
  194. package/dist/chunks/{UsersGroupsPage-CPVk31Dh.js.map → UsersGroupsPage-CY-l9fTp.js.map} +1 -1
  195. package/dist/chunks/{UsersGroupsPage-DS2YiUE4.js → UsersGroupsPage-c28vYHN9.js} +2 -2
  196. package/dist/chunks/{UsersGroupsPage-DS2YiUE4.js.map → UsersGroupsPage-c28vYHN9.js.map} +1 -1
  197. package/dist/chunks/{UsersPage-BIXWHFmG.js → UsersPage-1sLlq9QD.js} +2 -2
  198. package/dist/chunks/{UsersPage-BIXWHFmG.js.map → UsersPage-1sLlq9QD.js.map} +1 -1
  199. package/dist/chunks/{UsersPage-DS8aWUKj.js → UsersPage-Bm-uNxh0.js} +2 -2
  200. package/dist/chunks/{UsersPage-DS8aWUKj.js.map → UsersPage-Bm-uNxh0.js.map} +1 -1
  201. package/dist/chunks/{accessRequestsApi-C-r0mrCH.js → accessRequestsApi-CJPjyEkH.js} +2 -2
  202. package/dist/chunks/{accessRequestsApi-C-r0mrCH.js.map → accessRequestsApi-CJPjyEkH.js.map} +1 -1
  203. package/dist/chunks/{accessRequestsApi-k3ZwhcFb.js → accessRequestsApi-D_pj1wl6.js} +2 -2
  204. package/dist/chunks/{accessRequestsApi-k3ZwhcFb.js.map → accessRequestsApi-D_pj1wl6.js.map} +1 -1
  205. package/dist/chunks/{aiApi-B-H-76wM.js → aiApi-ByF-oo1J.js} +2 -2
  206. package/dist/chunks/{aiApi-B-H-76wM.js.map → aiApi-ByF-oo1J.js.map} +1 -1
  207. package/dist/chunks/{aiApi-CcdrBILv.js → aiApi-Dt3fj0dU.js} +2 -2
  208. package/dist/chunks/{aiApi-CcdrBILv.js.map → aiApi-Dt3fj0dU.js.map} +1 -1
  209. package/dist/chunks/{applicationAnalyticsApi-CO3tk6Ju.js → applicationAnalyticsApi-BgG3SGJm.js} +2 -2
  210. package/dist/chunks/{applicationAnalyticsApi-CO3tk6Ju.js.map → applicationAnalyticsApi-BgG3SGJm.js.map} +1 -1
  211. package/dist/chunks/{applicationAnalyticsApi-CLVdVLDu.js → applicationAnalyticsApi-ktD65iLO.js} +2 -2
  212. package/dist/chunks/{applicationAnalyticsApi-CLVdVLDu.js.map → applicationAnalyticsApi-ktD65iLO.js.map} +1 -1
  213. package/dist/chunks/{groupsApi-DExOJZPF.js → groupsApi-C-FLWPCO.js} +2 -2
  214. package/dist/chunks/{groupsApi-DExOJZPF.js.map → groupsApi-C-FLWPCO.js.map} +1 -1
  215. package/dist/chunks/{groupsApi-CyqyYsmi.js → groupsApi-CBI5vMLa.js} +2 -2
  216. package/dist/chunks/{groupsApi-CyqyYsmi.js.map → groupsApi-CBI5vMLa.js.map} +1 -1
  217. package/dist/chunks/{index-DtAReZI6.js → index-B727-QSU.js} +2 -2
  218. package/dist/chunks/{index-DtAReZI6.js.map → index-B727-QSU.js.map} +1 -1
  219. package/dist/chunks/{index-BlOgmQzc.js → index-B9q3vx13.js} +2 -2
  220. package/dist/chunks/{index-BlOgmQzc.js.map → index-B9q3vx13.js.map} +1 -1
  221. package/dist/chunks/{index-VSQ2prtJ.js → index-BD-REzV9.js} +2 -2
  222. package/dist/chunks/{index-VSQ2prtJ.js.map → index-BD-REzV9.js.map} +1 -1
  223. package/dist/chunks/{index-XOOiD_zY.js → index-BDRogQH_.js} +3 -3
  224. package/dist/chunks/{index-XOOiD_zY.js.map → index-BDRogQH_.js.map} +1 -1
  225. package/dist/chunks/{index-DOQyf5yZ.js → index-C-DYxdvd.js} +8 -8
  226. package/dist/chunks/{index-DOQyf5yZ.js.map → index-C-DYxdvd.js.map} +1 -1
  227. package/dist/chunks/{index-Cq80YBne.js → index-CBtjGPod.js} +105 -105
  228. package/dist/chunks/{index-Cq80YBne.js.map → index-CBtjGPod.js.map} +1 -1
  229. package/dist/chunks/{index-dlXYTPWH.js → index-CF1cvNUL.js} +4 -4
  230. package/dist/chunks/{index-dlXYTPWH.js.map → index-CF1cvNUL.js.map} +1 -1
  231. package/dist/chunks/{index-COA_xJVJ.js → index-CH0pTHy1.js} +2 -2
  232. package/dist/chunks/{index-COA_xJVJ.js.map → index-CH0pTHy1.js.map} +1 -1
  233. package/dist/chunks/{index-DjZQ6ZG_.js → index-Ca88RIuT.js} +2 -2
  234. package/dist/chunks/{index-DjZQ6ZG_.js.map → index-Ca88RIuT.js.map} +1 -1
  235. package/dist/chunks/{index-Cj-9tGpd.js → index-CkWvsvKW.js} +2 -2
  236. package/dist/chunks/{index-Cj-9tGpd.js.map → index-CkWvsvKW.js.map} +1 -1
  237. package/dist/chunks/{index-EL_ZNnMH.js → index-CzYKE5fL.js} +2 -2
  238. package/dist/chunks/{index-EL_ZNnMH.js.map → index-CzYKE5fL.js.map} +1 -1
  239. package/dist/chunks/{index-qXfYaEmV.js → index-D32ol7lq.js} +2 -2
  240. package/dist/chunks/{index-qXfYaEmV.js.map → index-D32ol7lq.js.map} +1 -1
  241. package/dist/chunks/{index-DMQQ0KyA.js → index-D7hmx9IX.js} +2 -2
  242. package/dist/chunks/{index-DMQQ0KyA.js.map → index-D7hmx9IX.js.map} +1 -1
  243. package/dist/chunks/{index-BetDcNZm.js → index-DThcQmwZ.js} +2 -2
  244. package/dist/chunks/{index-BetDcNZm.js.map → index-DThcQmwZ.js.map} +1 -1
  245. package/dist/chunks/{index-C7h5yvcP.js → index-D_3J6ziZ.js} +2 -2
  246. package/dist/chunks/{index-C7h5yvcP.js.map → index-D_3J6ziZ.js.map} +1 -1
  247. package/dist/chunks/{index-C_nDTEP5.js → index-JSjfMShT.js} +2 -2
  248. package/dist/chunks/{index-C_nDTEP5.js.map → index-JSjfMShT.js.map} +1 -1
  249. package/dist/chunks/{index-COXxU0FH.js → index-gzXJw_ow.js} +3 -3
  250. package/dist/chunks/{index-COXxU0FH.js.map → index-gzXJw_ow.js.map} +1 -1
  251. package/dist/chunks/{index-jJxtz2bs.js → index-rRAbl04H.js} +2 -2
  252. package/dist/chunks/{index-jJxtz2bs.js.map → index-rRAbl04H.js.map} +1 -1
  253. package/dist/chunks/{tenantIconMap-Ddvguo0l.js → tenantIconMap-Cw-hQ9n4.js} +2 -2
  254. package/dist/chunks/{tenantIconMap-Ddvguo0l.js.map → tenantIconMap-Cw-hQ9n4.js.map} +1 -1
  255. package/dist/chunks/{tenantIconMap-DBa5MjIz.js → tenantIconMap-DinwojNW.js} +2 -2
  256. package/dist/chunks/{tenantIconMap-DBa5MjIz.js.map → tenantIconMap-DinwojNW.js.map} +1 -1
  257. package/dist/chunks/{ticketingApi-Cr6QSv0g.js → ticketingApi-CcWdebXv.js} +2 -2
  258. package/dist/chunks/{ticketingApi-Cr6QSv0g.js.map → ticketingApi-CcWdebXv.js.map} +1 -1
  259. package/dist/chunks/{ticketingApi-D6s75rOB.js → ticketingApi-x0BwZ1NH.js} +2 -2
  260. package/dist/chunks/{ticketingApi-D6s75rOB.js.map → ticketingApi-x0BwZ1NH.js.map} +1 -1
  261. package/dist/chunks/{useAccessRequests-VuQT-n-P.js → useAccessRequests-BBTIYht3.js} +2 -2
  262. package/dist/chunks/{useAccessRequests-VuQT-n-P.js.map → useAccessRequests-BBTIYht3.js.map} +1 -1
  263. package/dist/chunks/{useAccessRequests-CanI2ypo.js → useAccessRequests-BBUj9XY9.js} +71 -71
  264. package/dist/chunks/{useAccessRequests-CanI2ypo.js.map → useAccessRequests-BBUj9XY9.js.map} +1 -1
  265. package/dist/chunks/{useUserAccessRequests-BEVZLX_M.js → useUserAccessRequests-BKQxcOXH.js} +2 -2
  266. package/dist/chunks/{useUserAccessRequests-BEVZLX_M.js.map → useUserAccessRequests-BKQxcOXH.js.map} +1 -1
  267. package/dist/chunks/{useUserAccessRequests-Ba40FDLm.js → useUserAccessRequests-BPUPiP55.js} +2 -2
  268. package/dist/chunks/{useUserAccessRequests-Ba40FDLm.js.map → useUserAccessRequests-BPUPiP55.js.map} +1 -1
  269. package/dist/pages/platform/administration/applications/ApplicationDetailPage.d.ts.map +1 -1
  270. package/dist/smartstack.cjs +1 -1
  271. package/dist/smartstack.js +1 -1
  272. package/package.json +1 -1
  273. package/dist/chunks/ApplicationDetailPage-CWdz0TS4.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesPage-CsHVGMgp.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 } rounded-[var(--radius-button) var(--radius-button) 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 rounded-[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)] rounded-[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)] rounded-[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 rounded-[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)] rounded-[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 rounded-[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)] rounded-[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 rounded-[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)] rounded-[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 } rounded-[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)] rounded-[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)] rounded-[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 } rounded-[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 } rounded-[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-Db2RjMpm.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 } rounded-[var(--radius-button) var(--radius-button) 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 rounded-[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)] rounded-[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)] rounded-[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 rounded-[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)] rounded-[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 rounded-[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)] rounded-[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 rounded-[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)] rounded-[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 } rounded-[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)] rounded-[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)] rounded-[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 } rounded-[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 } rounded-[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,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-XOOiD_zY.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 rounded-[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 rounded-[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 rounded-[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)] rounded-[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 rounded-[var(--radius-button)]",children:t("common:buttons.edit")})})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] p-6 rounded-[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 rounded-[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 rounded-[var(--radius-button)]",children:t("navigation:profile.security.enable")})]})]})]})]})}exports.ProfilePage=v;
2
- //# sourceMappingURL=ProfilePage-6Gf7igUI.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-BDRogQH_.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 rounded-[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 rounded-[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 rounded-[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)] rounded-[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 rounded-[var(--radius-button)]",children:t("common:buttons.edit")})})]}),e.jsxs("div",{className:"bg-[var(--bg-card)] border border-[var(--border-color)] p-6 rounded-[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 rounded-[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 rounded-[var(--radius-button)]",children:t("navigation:profile.security.enable")})]})]})]})]})}exports.ProfilePage=v;
2
+ //# sourceMappingURL=ProfilePage-D6Xb1ALH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePage-6Gf7igUI.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 rounded-[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 rounded-[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 rounded-[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)] rounded-[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 rounded-[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 rounded-[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 rounded-[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 rounded-[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":"8NAMO,SAASA,GAA4B,CAC1C,KAAM,CAAE,CAAA,EAAMC,EAAAA,eAAe,CAAC,aAAc,QAAQ,CAAC,EAC/C,CAAE,KAAAC,CAAA,EAASC,UAAA,EACX,CAACC,EAAcC,CAAe,EAAIC,EAAAA,SAAwB,IAAI,EAEpEC,EAAAA,UAAU,IAAM,CACd,GAAIH,EAAc,CAChB,MAAMI,EAAQ,WAAW,IAAMH,EAAgB,IAAI,EAAG,GAAI,EAC1D,MAAO,IAAM,aAAaG,CAAK,CACjC,CACF,EAAG,CAACJ,CAAY,CAAC,EAEjB,MAAMK,EAAmB,IAAM,CAC7BJ,EAAgB,EAAE,qCAAqC,CAAC,CAC1D,EAEMK,EAAcR,GAAM,WAAaA,GAAM,SACzC,GAAGA,EAAK,SAAS,IAAIA,EAAK,QAAQ,GAClCA,GAAM,OAAS,EAAE,aAAa,EAE5BS,EAAWT,GAAM,WAAaA,GAAM,SACtC,GAAGA,EAAK,UAAU,GAAG,CAAC,CAAC,GAAGA,EAAK,SAAS,GAAG,CAAC,CAAC,GAAG,YAAA,EAChDA,GAAM,OAAO,GAAG,CAAC,GAAG,YAAA,GAAiB,IAEzC,OACEU,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,gDAAiD,SAAA,EAAE,4BAA4B,EAAE,QAC9F,IAAA,CAAE,UAAU,oCAAqC,SAAA,EAAE,6BAA6B,CAAA,CAAE,CAAA,EACrF,EAECT,GACCQ,EAAAA,KAAC,MAAA,CACC,UAAU,6KAEV,SAAA,CAAAC,EAAAA,IAACC,EAAAA,aAAA,CAAa,UAAU,uBAAA,CAAwB,EAChDD,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,SAAAT,EAAa,EAC/CS,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMR,EAAgB,IAAI,EACnC,UAAU,8EAEV,SAAAQ,EAAAA,IAACE,EAAAA,EAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CAAA,CACzB,CAAA,CAAA,EAIJH,EAAAA,KAAC,MAAA,CACC,UAAU,2FAEV,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACC,UAAU,sLAET,SAAAF,CAAA,CAAA,SAEF,MAAA,CACC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAG,UAAU,mDAAoD,SAAAH,EAAY,EAC9EG,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAAgC,YAAM,MAAM,EACxDX,GAAM,OAASA,EAAK,MAAM,OAAS,GAClCW,EAAAA,IAAC,MAAA,CAAI,UAAU,4BACZ,SAAAX,EAAK,MAAM,IAAKc,GACfH,EAAAA,IAAC,OAAA,CAEC,UAAU,mHAET,SAAAG,CAAA,EAHIA,CAAA,CAKR,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,EACF,EAEAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uDACb,SAAA,CAAAC,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,SAAA,CAAU,QACzB,OAAA,CAAM,SAAAf,GAAM,OAAS,EAAE,gCAAgC,CAAA,CAAE,CAAA,EAC5D,EACAU,EAAAA,KAAC,MAAA,CAAI,UAAU,uDACb,SAAA,CAAAC,EAAAA,IAACK,EAAAA,SAAA,CAAS,UAAU,SAAA,CAAU,EAC9BL,MAAC,QAAM,SAAA,EAAE,iCAAkC,CAAE,KAAM,cAAA,CAAgB,CAAA,CAAE,CAAA,CAAA,CACvE,CAAA,EACF,EAEAA,EAAAA,IAAC,MAAA,CAAI,UAAU,kDACb,SAAAA,EAAAA,IAAC,SAAA,CACC,QAASJ,EACT,UAAU,oJAET,WAAE,qBAAqB,CAAA,CAAA,CAC1B,CACF,CAAA,CAAA,CAAA,EAGFG,EAAAA,KAAC,MAAA,CACC,UAAU,2FAEV,SAAA,CAAAC,MAAC,KAAA,CAAG,UAAU,wDAAyD,SAAA,EAAE,mCAAmC,EAAE,EAC9GD,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC,IAAA,CAAE,UAAU,yCAA0C,SAAA,EAAE,sCAAsC,EAAE,EACjGA,EAAAA,IAAC,IAAA,CAAE,UAAU,uCAAwC,SAAA,EAAE,0CAA2C,CAAE,KAAM,EAAA,CAAI,CAAA,CAAE,CAAA,EAClH,EACAA,EAAAA,IAAC,SAAA,CACC,QAASJ,EACT,UAAU,qJAET,WAAE,qBAAqB,CAAA,CAAA,CAC1B,EACF,EACAG,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC,IAAA,CAAE,UAAU,yCAA0C,SAAA,EAAE,uCAAuC,EAAE,QACjG,IAAA,CAAE,UAAU,uCAAwC,SAAA,EAAE,wCAAwC,CAAA,CAAE,CAAA,EACnG,EACAA,EAAAA,IAAC,SAAA,CACC,QAASJ,EACT,UAAU,qJAET,WAAE,oCAAoC,CAAA,CAAA,CACzC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,EACF,CAEJ"}
1
+ {"version":3,"file":"ProfilePage-D6Xb1ALH.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 rounded-[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 rounded-[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 rounded-[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)] rounded-[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 rounded-[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 rounded-[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 rounded-[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 rounded-[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,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-Cq80YBne.js";
5
+ import { o as u } from "./index-CBtjGPod.js";
6
6
  function C() {
7
7
  const { t } = v(["navigation", "common"]), { user: r } = u(), [i, o] = d(null);
8
8
  m(() => {
@@ -128,4 +128,4 @@ function C() {
128
128
  export {
129
129
  C as ProfilePage
130
130
  };
131
- //# sourceMappingURL=ProfilePage-BzBWkztf.js.map
131
+ //# sourceMappingURL=ProfilePage-DN2s-lfp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePage-BzBWkztf.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 rounded-[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 rounded-[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 rounded-[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)] rounded-[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 rounded-[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 rounded-[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 rounded-[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 rounded-[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":";;;;;AAMO,SAASA,IAA4B;AAC1C,QAAM,EAAE,EAAA,IAAMC,EAAe,CAAC,cAAc,QAAQ,CAAC,GAC/C,EAAE,MAAAC,EAAA,IAASC,EAAA,GACX,CAACC,GAAcC,CAAe,IAAIC,EAAwB,IAAI;AAEpE,EAAAC,EAAU,MAAM;AACd,QAAIH,GAAc;AAChB,YAAMI,IAAQ,WAAW,MAAMH,EAAgB,IAAI,GAAG,GAAI;AAC1D,aAAO,MAAM,aAAaG,CAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAACJ,CAAY,CAAC;AAEjB,QAAMK,IAAmB,MAAM;AAC7B,IAAAJ,EAAgB,EAAE,qCAAqC,CAAC;AAAA,EAC1D,GAEMK,IAAcR,GAAM,aAAaA,GAAM,WACzC,GAAGA,EAAK,SAAS,IAAIA,EAAK,QAAQ,KAClCA,GAAM,SAAS,EAAE,aAAa,GAE5BS,IAAWT,GAAM,aAAaA,GAAM,WACtC,GAAGA,EAAK,UAAU,GAAG,CAAC,CAAC,GAAGA,EAAK,SAAS,GAAG,CAAC,CAAC,GAAG,YAAA,IAChDA,GAAM,OAAO,GAAG,CAAC,GAAG,YAAA,KAAiB;AAEzC,SACE,gBAAAU,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,MAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,iDAAiD,UAAA,EAAE,4BAA4B,GAAE;AAAA,wBAC9F,KAAA,EAAE,WAAU,qCAAqC,UAAA,EAAE,6BAA6B,EAAA,CAAE;AAAA,IAAA,GACrF;AAAA,IAECT,KACC,gBAAAQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAC,EAACC,GAAA,EAAa,WAAU,wBAAA,CAAwB;AAAA,UAChD,gBAAAD,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAT,GAAa;AAAA,UAC/C,gBAAAS;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAMR,EAAgB,IAAI;AAAA,cACnC,WAAU;AAAA,cAEV,UAAA,gBAAAQ,EAACE,GAAA,EAAE,WAAU,UAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACzB;AAAA,MAAA;AAAA,IAAA;AAAA,IAIJ,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBAET,UAAAF;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEF,OAAA,EACC,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,oDAAoD,UAAAH,GAAY;AAAA,cAC9E,gBAAAG,EAAC,KAAA,EAAE,WAAU,gCAAgC,aAAM,OAAM;AAAA,cACxDX,GAAM,SAASA,EAAK,MAAM,SAAS,KAClC,gBAAAW,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAAX,EAAK,MAAM,IAAI,CAACc,MACf,gBAAAH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAET,UAAAG;AAAA,gBAAA;AAAA,gBAHIA;AAAA,cAAA,CAKR,EAAA,CACH;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,cAAA,gBAAAC,EAACI,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,gCACzB,QAAA,EAAM,UAAAf,GAAM,SAAS,EAAE,gCAAgC,EAAA,CAAE;AAAA,YAAA,GAC5D;AAAA,YACA,gBAAAU,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,cAAA,gBAAAC,EAACK,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,cAC9B,gBAAAL,EAAC,UAAM,UAAA,EAAE,kCAAkC,EAAE,MAAM,eAAA,CAAgB,EAAA,CAAE;AAAA,YAAA,EAAA,CACvE;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAA,EAAC,OAAA,EAAI,WAAU,mDACb,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASJ;AAAA,cACT,WAAU;AAAA,cAET,YAAE,qBAAqB;AAAA,YAAA;AAAA,UAAA,EAC1B,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,yDAAyD,UAAA,EAAE,mCAAmC,GAAE;AAAA,UAC9G,gBAAAD,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,0CAA0C,UAAA,EAAE,sCAAsC,GAAE;AAAA,gBACjG,gBAAAA,EAAC,KAAA,EAAE,WAAU,wCAAwC,UAAA,EAAE,2CAA2C,EAAE,MAAM,GAAA,CAAI,EAAA,CAAE;AAAA,cAAA,GAClH;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAASJ;AAAA,kBACT,WAAU;AAAA,kBAET,YAAE,qBAAqB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC1B,GACF;AAAA,YACA,gBAAAG,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,gBAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,0CAA0C,UAAA,EAAE,uCAAuC,GAAE;AAAA,kCACjG,KAAA,EAAE,WAAU,wCAAwC,UAAA,EAAE,wCAAwC,EAAA,CAAE;AAAA,cAAA,GACnG;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAASJ;AAAA,kBACT,WAAU;AAAA,kBAET,YAAE,oCAAoC;AAAA,gBAAA;AAAA,cAAA;AAAA,YACzC,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
1
+ {"version":3,"file":"ProfilePage-DN2s-lfp.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 rounded-[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 rounded-[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 rounded-[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)] rounded-[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 rounded-[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 rounded-[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 rounded-[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 rounded-[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"),l=require("react"),Me=require("react-i18next"),i=require("lucide-react"),C=require("./index-XOOiD_zY.js"),se=require("./TenantScopeSelector-dsSwnOWg.js"),Ae=a=>({get:(s,u)=>C.apiClient.get(s,{...u,headers:a?{...u?.headers,"X-Tenant-Slug":a}:u?.headers}).then(r=>r.data),post:(s,u,r)=>C.apiClient.post(s,u,{...r,headers:a?{...r?.headers,"X-Tenant-Slug":a}:r?.headers}).then(c=>c.data),put:(s,u,r)=>C.apiClient.put(s,u,{...r,headers:a?{...r?.headers,"X-Tenant-Slug":a}:r?.headers}).then(c=>c.data),patch:(s,u,r)=>C.apiClient.patch(s,u,{...r,headers:a?{...r?.headers,"X-Tenant-Slug":a}:r?.headers}).then(c=>c.data),delete:(s,u)=>C.apiClient.delete(s,{...u,headers:a?{...u?.headers,"X-Tenant-Slug":a}:u?.headers}).then(r=>r.data)}),q={Company:0,Department:1,JobTitle:2,Office:3},v="/api/administration/users/references",Ie=a=>{const s=a?Ae(a):C.api,u=(r,c,d)=>{const h=new URLSearchParams;c&&h.append("tenantId",c),d&&Object.entries(d).forEach(([f,b])=>{b!==void 0&&h.append(f,String(b))});const o=h.toString();return o?`${v}/${r}?${o}`:`${v}/${r}`};return{companies:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("companies",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("companies",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/companies/${r}`,c)},activate:async r=>{await s.patch(`${v}/companies/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/companies/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/companies/${r}`)}},departments:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("departments",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("departments",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/departments/${r}`,c)},activate:async r=>{await s.patch(`${v}/departments/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/departments/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/departments/${r}`)}},jobTitles:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("job-titles",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("job-titles",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/job-titles/${r}`,c)},activate:async r=>{await s.patch(`${v}/job-titles/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/job-titles/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/job-titles/${r}`)}},offices:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("offices",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("offices",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/offices/${r}`,c)},activate:async r=>{await s.patch(`${v}/offices/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/offices/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/offices/${r}`)}},merge:{execute:async r=>s.post(`${v}/merge`,r),preview:async r=>s.post(`${v}/merge/preview`,r),getHistory:async(r,c,d,h)=>{const o=new URLSearchParams;r&&o.append("tenantId",r),c!==void 0&&o.append("referenceType",String(c)),d&&o.append("from",d),h&&o.append("to",h);const f=o.toString(),b=f?`${v}/merge/history?${f}`:`${v}/merge/history`;return s.get(b)}}}},ne=Ie;function Re(){const{t:a}=Me.useTranslation("admin"),{currentTenant:s,userTenants:u,switchTenant:r}=C.useTenant(),{tenants:c}=se.useAdminTenants(),[d,h]=l.useState(s?{tenantId:s.id,tenantSlug:s.slug,tenantUserId:"",tenantName:s.name}:"global"),o=d==="global",f=o?null:d.tenantId,b=o?void 0:d.tenantSlug,p=l.useMemo(()=>ne(b),[b]),[N,ce]=l.useState("departments"),[T,oe]=l.useState([]),[G,W]=l.useState(!0),[$,ie]=l.useState(""),[F,le]=l.useState(!1),[w,A]=l.useState(new Set),[g,U]=l.useState(1),[M]=l.useState(20),[K,de]=l.useState(0),[I,me]=l.useState(0),[xe,H]=l.useState(!1),[ue,L]=l.useState(!1),[pe,X]=l.useState(!1),[ve,O]=l.useState(!1),[R,Q]=l.useState(null),[B,V]=l.useState(null),[Y,he]=l.useState([]),[J,D]=l.useState(null),[x,S]=l.useState({code:"",name:""}),[P,Z]=l.useState(null),[ee,te]=l.useState(""),[E,z]=l.useState(!1),[ae,j]=l.useState(null),re=[{id:"departments",label:a("references.tabs.departments","Departments"),icon:i.Users,referenceType:q.Department},{id:"companies",label:a("references.tabs.companies","Companies"),icon:i.Building2,referenceType:q.Company},{id:"jobTitles",label:a("references.tabs.jobTitles","Job Titles"),icon:i.Briefcase,referenceType:q.JobTitle},{id:"offices",label:a("references.tabs.offices","Offices"),icon:i.MapPin,referenceType:q.Office}],_=re.find(t=>t.id===N),y=f,k=l.useCallback(async()=>{try{W(!0);const t=ne(b??void 0),n=F?void 0:!0;let m;switch(N){case"companies":m=await t.companies.getAll(y,$||void 0,n,void 0,g,M);break;case"departments":m=await t.departments.getAll(y,$||void 0,n,void 0,g,M);break;case"jobTitles":m=await t.jobTitles.getAll(y,$||void 0,n,void 0,g,M);break;case"offices":m=await t.offices.getAll(y,$||void 0,n,void 0,g,M);break;default:m={items:[],totalCount:0,page:1,pageSize:20,totalPages:0,hasPreviousPage:!1,hasNextPage:!1}}oe(m.items),de(m.totalCount),me(m.totalPages),A(new Set)}catch(t){console.error("Failed to load references:",t),j("Failed to load references")}finally{W(!1)}},[b,N,y,$,F,g,M]);l.useEffect(()=>{k()},[k]),l.useEffect(()=>{U(1)},[N,$,F,d]);const be=t=>{const n=new Set(w);n.has(t)?n.delete(t):n.add(t),A(n)},fe=()=>{w.size===T.length?A(new Set):A(new Set(T.map(t=>t.id)))},ge=async t=>{try{await r(t);const n=u.find(m=>m.id===t);n&&h({tenantId:n.id,tenantSlug:n.slug,tenantUserId:"",tenantName:n.name})}catch(n){console.error("Failed to switch tenant:",n)}},ye=async()=>{if(y)try{switch(z(!0),j(null),N){case"companies":await p.companies.create(y,x);break;case"departments":await p.departments.create(y,x);break;case"jobTitles":await p.jobTitles.create(y,x);break;case"offices":await p.offices.create(y,x);break}H(!1),S({code:"",name:""}),k()}catch(t){const n=t instanceof Error?t.message:"Failed to create";j(n)}finally{z(!1)}},je=async()=>{if(R)try{z(!0),j(null);const t={name:x.name,shortName:x.shortName,description:x.description};switch(N){case"companies":await p.companies.update(R.id,t);break;case"departments":await p.departments.update(R.id,t);break;case"jobTitles":await p.jobTitles.update(R.id,t);break;case"offices":await p.offices.update(R.id,t);break}L(!1),Q(null),k()}catch(t){const n=t instanceof Error?t.message:"Failed to update";j(n)}finally{z(!1)}},Ne=async t=>{if(confirm(a("references.confirmDelete","Are you sure you want to delete this reference?")))try{switch(N){case"companies":await p.companies.delete(t);break;case"departments":await p.departments.delete(t);break;case"jobTitles":await p.jobTitles.delete(t);break;case"offices":await p.offices.delete(t);break}k()}catch(n){const m=n instanceof Error?n.message:"Failed to delete";j(m)}},we=async t=>{try{if(t.isActive)switch(N){case"companies":await p.companies.deactivate(t.id);break;case"departments":await p.departments.deactivate(t.id);break;case"jobTitles":await p.jobTitles.deactivate(t.id);break;case"offices":await p.offices.deactivate(t.id);break}else switch(N){case"companies":await p.companies.activate(t.id);break;case"departments":await p.departments.activate(t.id);break;case"jobTitles":await p.jobTitles.activate(t.id);break;case"offices":await p.offices.activate(t.id);break}k()}catch(n){const m=n instanceof Error?n.message:"Failed to toggle status";j(m)}},Se=async()=>{if(!(w.size<2))try{const t=await p.merge.preview({tenantId:y,referenceType:_.referenceType,sourceIds:Array.from(w)});V(t),Z(null),te(""),X(!0)}catch(t){console.error("Failed to get merge preview:",t),j("Failed to preview merge")}},ke=async()=>{if(!P||!B)return;const t=Array.from(w).filter(n=>n!==P);try{z(!0),j(null),await p.merge.execute({tenantId:y,referenceType:_.referenceType,targetId:P,sourceIds:t,reason:ee||void 0}),X(!1),A(new Set),V(null),k()}catch(n){const m=n instanceof Error?n.message:"Failed to merge";j(m)}finally{z(!1)}},Ce=async()=>{try{const t=await p.merge.getHistory(y,_.referenceType);he(t),O(!0)}catch(t){console.error("Failed to load merge history:",t),j("Failed to load merge history")}},Te=t=>{Q(t),S({code:t.code,name:t.name,shortName:t.shortName,description:t.description}),L(!0),D(null)},$e=t=>t.isMerged?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)]",children:[e.jsx(i.GitMerge,{className:"w-3 h-3"}),a("references.merged","Merged")]}):t.isActive?null:e.jsx("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--bg-secondary)] text-[var(--text-secondary)]",children:a("references.inactive","Inactive")});return e.jsxs("div",{className:"p-6",children:[e.jsx("div",{className:"mb-6",children:e.jsx(C.Breadcrumb,{items:[{label:a("admin.title","Administration"),href:"/administration"},{label:a("users.title","Users"),href:"/administration/users"},{label:a("references.title","References")}]})}),e.jsxs("div",{className:"mb-6",children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:a("references.title","Reference Data Management")}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:a("references.description","Manage companies, departments, job titles, and offices for your organization")}),e.jsxs("div",{className:"mt-4",children:[e.jsx(se.TenantScopeSelector,{value:d,onChange:h,adminTenants:c.map(t=>({tenantId:t.id,tenantSlug:t.slug,tenantName:t.name,tenantType:t.type}))}),o&&e.jsxs("p",{className:"mt-2 text-sm text-[var(--text-secondary)] flex items-center gap-1.5",children:[e.jsx(i.Globe,{className:"w-4 h-4"}),a("references.globalModeInfo","Showing references from all tenants. Select a tenant to manage its data.")]})]})]}),ae&&e.jsxs("div",{className:"mb-4 p-4 bg-[var(--error-bg)] border border-[var(--error-border)] rounded-[var(--radius-card)]",children:[e.jsxs("div",{className:"flex items-center",children:[e.jsx(i.AlertCircle,{className:"w-5 h-5 text-[var(--error-text)]"}),e.jsx("span",{className:"ml-2 text-[var(--error-text)]",children:ae}),e.jsx("button",{onClick:()=>j(null),className:"ml-auto text-[var(--error-text)]",children:e.jsx(i.X,{className:"w-4 h-4"})})]}),e.jsx("button",{onClick:()=>k(),className:"mt-2 text-sm text-[var(--error-text)] hover:opacity-80 underline",children:a("common.retry","Retry")})]}),e.jsx("div",{className:"border-b border-[var(--border-color)] mb-6",children:e.jsx("nav",{className:"flex gap-4 -mb-px",children:re.map(t=>{const n=t.icon,m=N===t.id;return e.jsxs("button",{onClick:()=>{ce(t.id),A(new Set)},className:`flex items-center gap-2 px-4 py-3 border-b-2 font-medium text-sm transition-colors ${m?"border-[var(--color-accent-500)] text-[var(--color-accent-600)]":"border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]"}`,children:[e.jsx(n,{className:"w-4 h-4"}),t.label]},t.id)})})}),e.jsxs("div",{className:"flex items-center justify-between gap-4 mb-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(i.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("input",{type:"text",value:$,onChange:t=>ie(t.target.value),placeholder:a("common.search","Search..."),className:"pl-10 pr-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("label",{className:"flex items-center gap-2 text-sm text-[var(--text-secondary)]",children:[e.jsx("input",{type:"checkbox",checked:F,onChange:t=>le(t.target.checked),className:"rounded border-[var(--border-color)]"}),a("references.showInactive","Show inactive")]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[w.size>=2&&!o&&e.jsxs("button",{onClick:Se,className:"flex items-center gap-2 px-4 py-2 bg-[var(--info-dot)] text-white rounded-[var(--radius-button)] hover:opacity-90 transition-opacity",children:[e.jsx(i.GitMerge,{className:"w-4 h-4"}),a("references.merge","Merge")," (",w.size,")"]}),!o&&e.jsxs("button",{onClick:Ce,className:"flex items-center gap-2 px-4 py-2 border border-[var(--border-color)] text-[var(--text-primary)] rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(i.History,{className:"w-4 h-4"}),a("references.history","History")]}),e.jsxs("button",{onClick:()=>{S({code:"",name:""}),H(!0)},disabled:o,title:o?a("references.selectTenantToCreate","Select a tenant to create a reference"):void 0,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] transition-colors ${o?"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed":"bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]"}`,children:[e.jsx(i.Plus,{className:"w-4 h-4"}),a("common.create","Create")]})]})]}),e.jsxs("div",{className:"card overflow-hidden",children:[G&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(i.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})}),!G&&T.length===0&&e.jsx("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:a("references.noItems","No items found")}),!G&&T.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)] border-b border-[var(--border-color)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"w-12 px-4 py-3",children:!o&&e.jsx("input",{type:"checkbox",checked:w.size===T.length&&T.length>0,onChange:fe,className:"rounded border-[var(--border-color)]"})}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.code","Code")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.name","Name")}),o&&e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.tenant","Tenant")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.shortName","Short Name")}),e.jsx("th",{className:"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]",children:a("references.users","Users")}),e.jsx("th",{className:"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]",children:a("references.status","Status")}),e.jsx("th",{className:"w-20 px-4 py-3"})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:T.map(t=>e.jsxs("tr",{className:`hover:bg-[var(--bg-hover)] transition-colors ${w.has(t.id)?"bg-[var(--info-bg)]":""} ${t.isMerged?"opacity-60":""}`,children:[e.jsx("td",{className:"px-4 py-3",children:!o&&e.jsx("input",{type:"checkbox",checked:w.has(t.id),onChange:()=>be(t.id),disabled:t.isMerged,className:"rounded border-[var(--border-color)]"})}),e.jsx("td",{className:"px-4 py-3 font-mono text-sm text-[var(--text-primary)]",children:t.code}),e.jsx("td",{className:"px-4 py-3 text-[var(--text-primary)]",children:t.name}),o&&e.jsx("td",{className:"px-4 py-3",children:t.tenantName?e.jsxs("button",{onClick:()=>t.tenantId&&ge(t.tenantId),className:"inline-flex items-center gap-1.5 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)] hover:opacity-80 transition-opacity",title:a("references.switchToTenant","Switch to this tenant"),children:[e.jsx(i.Building2,{className:"w-3 h-3"}),t.tenantName]}):e.jsx("span",{className:"text-[var(--text-tertiary)]",children:"-"})}),e.jsx("td",{className:"px-4 py-3 text-[var(--text-secondary)]",children:t.shortName||"-"}),e.jsx("td",{className:"px-4 py-3 text-center",children:e.jsxs("span",{className:"inline-flex items-center gap-1 text-[var(--text-secondary)]",children:[e.jsx(i.Users,{className:"w-4 h-4"}),t.userCount]})}),e.jsxs("td",{className:"px-4 py-3 text-center",children:[$e(t),t.isActive&&!t.isMerged&&e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--success-bg)] text-[var(--success-text)]",children:[e.jsx(i.Check,{className:"w-3 h-3"}),a("references.active","Active")]})]}),e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>D(J===t.id?null:t.id),className:"p-2 hover:bg-[var(--bg-secondary)] rounded-[var(--radius-button)] transition-colors",disabled:t.isMerged||o,children:e.jsx(i.MoreHorizontal,{className:"w-4 h-4"})}),J===t.id&&e.jsxs("div",{className:"absolute right-0 top-full mt-1 w-48 bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-card)] shadow-lg z-10",children:[e.jsxs("button",{onClick:()=>Te(t),className:"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",children:[e.jsx(i.Edit2,{className:"w-4 h-4"}),a("common.edit","Edit")]}),e.jsx("button",{onClick:()=>{we(t),D(null)},className:"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",children:t.isActive?a("common.deactivate","Deactivate"):a("common.activate","Activate")}),t.userCount===0&&e.jsxs("button",{onClick:()=>{Ne(t.id),D(null)},className:"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--error-text)] hover:bg-[var(--error-bg)]",children:[e.jsx(i.Trash2,{className:"w-4 h-4"}),a("common.delete","Delete")]})]})]})})]},t.id))})]}),e.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-t border-[var(--border-color)] bg-[var(--bg-secondary)]",children:[e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[a("references.showing","Showing")," ",(g-1)*M+1," ",a("references.to","to")," ",Math.min(g*M,K)," ",a("references.of","of")," ",K," ",a("references.results","results")]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>U(t=>Math.max(1,t-1)),disabled:g===1,className:"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:a("common.previous","Previous")}),e.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:Math.min(5,I)},(t,n)=>{let m;return I<=5||g<=3?m=n+1:g>=I-2?m=I-4+n:m=g-2+n,e.jsx("button",{onClick:()=>U(m),className:`px-3 py-1.5 rounded-[var(--radius-button)] transition-colors ${g===m?"bg-[var(--color-accent-600)] text-white":"border border-[var(--border-color)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)]"}`,children:m},m)})}),e.jsx("button",{onClick:()=>U(t=>Math.min(I,t+1)),disabled:g===I,className:"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:a("common.next","Next")})]})]})]})]}),xe&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-md p-6 m-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:a("references.createTitle","Create Reference")}),e.jsx("button",{onClick:()=>H(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:[a("references.code","Code")," *"]}),e.jsx("input",{type:"text",value:x.code,onChange:t=>S({...x,code:t.target.value}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:[a("references.name","Name")," *"]}),e.jsx("input",{type:"text",value:x.name,onChange:t=>S({...x,name:t.target.value}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.shortName","Short Name")}),e.jsx("input",{type:"text",value:x.shortName||"",onChange:t=>S({...x,shortName:t.target.value||null}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.description","Description")}),e.jsx("textarea",{value:x.description||"",onChange:t=>S({...x,description:t.target.value||null}),rows:3,className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}),e.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[e.jsx("button",{onClick:()=>H(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.cancel","Cancel")}),e.jsxs("button",{onClick:ye,disabled:E||!x.code||!x.name,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50",children:[E&&e.jsx(i.Loader2,{className:"w-4 h-4 animate-spin"}),a("common.create","Create")]})]})]})}),ue&&R&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-md p-6 m-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:a("references.editTitle","Edit Reference")}),e.jsx("button",{onClick:()=>L(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.code","Code")}),e.jsx("input",{type:"text",value:x.code,disabled:!0,className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:[a("references.name","Name")," *"]}),e.jsx("input",{type:"text",value:x.name,onChange:t=>S({...x,name:t.target.value}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.shortName","Short Name")}),e.jsx("input",{type:"text",value:x.shortName||"",onChange:t=>S({...x,shortName:t.target.value||null}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.description","Description")}),e.jsx("textarea",{value:x.description||"",onChange:t=>S({...x,description:t.target.value||null}),rows:3,className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}),e.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[e.jsx("button",{onClick:()=>L(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.cancel","Cancel")}),e.jsxs("button",{onClick:je,disabled:E||!x.name,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50",children:[E&&e.jsx(i.Loader2,{className:"w-4 h-4 animate-spin"}),a("common.save","Save")]})]})]})}),pe&&B&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-lg p-6 m-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(i.GitMerge,{className:"w-5 h-5 text-[var(--info-dot)]"}),a("references.mergeTitle","Merge References")]}),e.jsx("button",{onClick:()=>X(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mb-4",children:a("references.mergeDescription","Select the target reference. All other selected references will be merged into it and their users will be reassigned.")}),e.jsxs("div",{className:"space-y-2 mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)]",children:a("references.selectTarget","Select target reference")}),B.sources.map(t=>e.jsxs("label",{className:`flex items-center gap-3 p-3 border rounded-[var(--radius-card)] cursor-pointer transition-colors ${P===t.id?"border-[var(--info-dot)] bg-[var(--info-bg)]":"border-[var(--border-color)] hover:border-[var(--color-accent-500)]"}`,children:[e.jsx("input",{type:"radio",name:"mergeTarget",value:t.id,checked:P===t.id,onChange:()=>Z(t.id),className:"text-[var(--info-dot)]"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-medium text-[var(--text-primary)]",children:t.name}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[t.code," ",t.shortName&&`(${t.shortName})`]})]}),e.jsxs("span",{className:"text-sm text-[var(--text-secondary)]",children:[t.userCount," ",a("references.users","users")]})]},t.id))]}),e.jsxs("div",{className:"mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.mergeReason","Reason (optional)")}),e.jsx("textarea",{value:ee,onChange:t=>te(t.target.value),rows:2,placeholder:a("references.mergeReasonPlaceholder","Why are you merging these references?"),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsx("div",{className:"p-3 bg-[var(--warning-bg)] border border-[var(--warning-border)] rounded-[var(--radius-card)] mb-4",children:e.jsxs("p",{className:"text-sm text-[var(--warning-text)]",children:[e.jsx("strong",{children:B.totalUsersAffected})," ",a("references.usersWillBeReassigned","users will be reassigned")]})}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{onClick:()=>X(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.cancel","Cancel")}),e.jsxs("button",{onClick:ke,disabled:E||!P,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--info-dot)] text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:[E&&e.jsx(i.Loader2,{className:"w-4 h-4 animate-spin"}),e.jsx(i.GitMerge,{className:"w-4 h-4"}),a("references.merge","Merge")]})]})]})}),ve&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-2xl p-6 m-4 max-h-[80vh] overflow-hidden flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(i.History,{className:"w-5 h-5"}),a("references.historyTitle","Merge History")]}),e.jsx("button",{onClick:()=>O(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsx("div",{className:"overflow-y-auto flex-1",children:Y.length===0?e.jsx("div",{className:"text-center py-8 text-[var(--text-secondary)]",children:a("references.noHistory","No merge history found")}):e.jsx("div",{className:"space-y-3",children:Y.map(t=>e.jsxs("div",{className:"p-4 border border-[var(--border-color)] rounded-[var(--radius-card)]",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(i.GitMerge,{className:"w-4 h-4 text-[var(--info-dot)]"}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.sourceReferenceName}),e.jsx("span",{className:"text-[var(--text-secondary)]",children:"→"}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.targetReferenceName})]}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)] space-y-1",children:[e.jsxs("div",{children:[t.affectedUserCount," users reassigned"]}),e.jsxs("div",{children:["By ",t.mergedByUserName]}),e.jsx("div",{children:new Date(t.mergedAt).toLocaleString()}),t.mergeReason&&e.jsxs("div",{className:"italic",children:['"',t.mergeReason,'"']})]})]},t.id))})}),e.jsx("div",{className:"flex justify-end mt-4 pt-4 border-t border-[var(--border-color)]",children:e.jsx("button",{onClick:()=>O(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.close","Close")})})]})}),J&&e.jsx("button",{type:"button",className:"fixed inset-0 z-0",onClick:()=>D(null),"aria-label":"Close menu"})]})}exports.ReferencesManagementPage=Re;
2
- //# sourceMappingURL=ReferencesManagementPage-DEDoHrnU.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("react"),Me=require("react-i18next"),i=require("lucide-react"),C=require("./index-BDRogQH_.js"),se=require("./TenantScopeSelector-5NOwmFX2.js"),Ae=a=>({get:(s,u)=>C.apiClient.get(s,{...u,headers:a?{...u?.headers,"X-Tenant-Slug":a}:u?.headers}).then(r=>r.data),post:(s,u,r)=>C.apiClient.post(s,u,{...r,headers:a?{...r?.headers,"X-Tenant-Slug":a}:r?.headers}).then(c=>c.data),put:(s,u,r)=>C.apiClient.put(s,u,{...r,headers:a?{...r?.headers,"X-Tenant-Slug":a}:r?.headers}).then(c=>c.data),patch:(s,u,r)=>C.apiClient.patch(s,u,{...r,headers:a?{...r?.headers,"X-Tenant-Slug":a}:r?.headers}).then(c=>c.data),delete:(s,u)=>C.apiClient.delete(s,{...u,headers:a?{...u?.headers,"X-Tenant-Slug":a}:u?.headers}).then(r=>r.data)}),q={Company:0,Department:1,JobTitle:2,Office:3},v="/api/administration/users/references",Ie=a=>{const s=a?Ae(a):C.api,u=(r,c,d)=>{const h=new URLSearchParams;c&&h.append("tenantId",c),d&&Object.entries(d).forEach(([f,b])=>{b!==void 0&&h.append(f,String(b))});const o=h.toString();return o?`${v}/${r}?${o}`:`${v}/${r}`};return{companies:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("companies",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("companies",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/companies/${r}`,c)},activate:async r=>{await s.patch(`${v}/companies/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/companies/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/companies/${r}`)}},departments:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("departments",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("departments",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/departments/${r}`,c)},activate:async r=>{await s.patch(`${v}/departments/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/departments/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/departments/${r}`)}},jobTitles:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("job-titles",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("job-titles",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/job-titles/${r}`,c)},activate:async r=>{await s.patch(`${v}/job-titles/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/job-titles/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/job-titles/${r}`)}},offices:{getAll:async(r,c,d,h,o=1,f=20)=>{const b=u("offices",r,{search:c,isActive:d,source:h,page:o,pageSize:f});return s.get(b)},create:async(r,c)=>{const d=u("offices",r);return s.post(d,c)},update:async(r,c)=>{await s.put(`${v}/offices/${r}`,c)},activate:async r=>{await s.patch(`${v}/offices/${r}/activate`)},deactivate:async r=>{await s.patch(`${v}/offices/${r}/deactivate`)},delete:async r=>{await s.delete(`${v}/offices/${r}`)}},merge:{execute:async r=>s.post(`${v}/merge`,r),preview:async r=>s.post(`${v}/merge/preview`,r),getHistory:async(r,c,d,h)=>{const o=new URLSearchParams;r&&o.append("tenantId",r),c!==void 0&&o.append("referenceType",String(c)),d&&o.append("from",d),h&&o.append("to",h);const f=o.toString(),b=f?`${v}/merge/history?${f}`:`${v}/merge/history`;return s.get(b)}}}},ne=Ie;function Re(){const{t:a}=Me.useTranslation("admin"),{currentTenant:s,userTenants:u,switchTenant:r}=C.useTenant(),{tenants:c}=se.useAdminTenants(),[d,h]=l.useState(s?{tenantId:s.id,tenantSlug:s.slug,tenantUserId:"",tenantName:s.name}:"global"),o=d==="global",f=o?null:d.tenantId,b=o?void 0:d.tenantSlug,p=l.useMemo(()=>ne(b),[b]),[N,ce]=l.useState("departments"),[T,oe]=l.useState([]),[G,W]=l.useState(!0),[$,ie]=l.useState(""),[F,le]=l.useState(!1),[w,A]=l.useState(new Set),[g,U]=l.useState(1),[M]=l.useState(20),[K,de]=l.useState(0),[I,me]=l.useState(0),[xe,H]=l.useState(!1),[ue,L]=l.useState(!1),[pe,X]=l.useState(!1),[ve,O]=l.useState(!1),[R,Q]=l.useState(null),[B,V]=l.useState(null),[Y,he]=l.useState([]),[J,D]=l.useState(null),[x,S]=l.useState({code:"",name:""}),[P,Z]=l.useState(null),[ee,te]=l.useState(""),[E,z]=l.useState(!1),[ae,j]=l.useState(null),re=[{id:"departments",label:a("references.tabs.departments","Departments"),icon:i.Users,referenceType:q.Department},{id:"companies",label:a("references.tabs.companies","Companies"),icon:i.Building2,referenceType:q.Company},{id:"jobTitles",label:a("references.tabs.jobTitles","Job Titles"),icon:i.Briefcase,referenceType:q.JobTitle},{id:"offices",label:a("references.tabs.offices","Offices"),icon:i.MapPin,referenceType:q.Office}],_=re.find(t=>t.id===N),y=f,k=l.useCallback(async()=>{try{W(!0);const t=ne(b??void 0),n=F?void 0:!0;let m;switch(N){case"companies":m=await t.companies.getAll(y,$||void 0,n,void 0,g,M);break;case"departments":m=await t.departments.getAll(y,$||void 0,n,void 0,g,M);break;case"jobTitles":m=await t.jobTitles.getAll(y,$||void 0,n,void 0,g,M);break;case"offices":m=await t.offices.getAll(y,$||void 0,n,void 0,g,M);break;default:m={items:[],totalCount:0,page:1,pageSize:20,totalPages:0,hasPreviousPage:!1,hasNextPage:!1}}oe(m.items),de(m.totalCount),me(m.totalPages),A(new Set)}catch(t){console.error("Failed to load references:",t),j("Failed to load references")}finally{W(!1)}},[b,N,y,$,F,g,M]);l.useEffect(()=>{k()},[k]),l.useEffect(()=>{U(1)},[N,$,F,d]);const be=t=>{const n=new Set(w);n.has(t)?n.delete(t):n.add(t),A(n)},fe=()=>{w.size===T.length?A(new Set):A(new Set(T.map(t=>t.id)))},ge=async t=>{try{await r(t);const n=u.find(m=>m.id===t);n&&h({tenantId:n.id,tenantSlug:n.slug,tenantUserId:"",tenantName:n.name})}catch(n){console.error("Failed to switch tenant:",n)}},ye=async()=>{if(y)try{switch(z(!0),j(null),N){case"companies":await p.companies.create(y,x);break;case"departments":await p.departments.create(y,x);break;case"jobTitles":await p.jobTitles.create(y,x);break;case"offices":await p.offices.create(y,x);break}H(!1),S({code:"",name:""}),k()}catch(t){const n=t instanceof Error?t.message:"Failed to create";j(n)}finally{z(!1)}},je=async()=>{if(R)try{z(!0),j(null);const t={name:x.name,shortName:x.shortName,description:x.description};switch(N){case"companies":await p.companies.update(R.id,t);break;case"departments":await p.departments.update(R.id,t);break;case"jobTitles":await p.jobTitles.update(R.id,t);break;case"offices":await p.offices.update(R.id,t);break}L(!1),Q(null),k()}catch(t){const n=t instanceof Error?t.message:"Failed to update";j(n)}finally{z(!1)}},Ne=async t=>{if(confirm(a("references.confirmDelete","Are you sure you want to delete this reference?")))try{switch(N){case"companies":await p.companies.delete(t);break;case"departments":await p.departments.delete(t);break;case"jobTitles":await p.jobTitles.delete(t);break;case"offices":await p.offices.delete(t);break}k()}catch(n){const m=n instanceof Error?n.message:"Failed to delete";j(m)}},we=async t=>{try{if(t.isActive)switch(N){case"companies":await p.companies.deactivate(t.id);break;case"departments":await p.departments.deactivate(t.id);break;case"jobTitles":await p.jobTitles.deactivate(t.id);break;case"offices":await p.offices.deactivate(t.id);break}else switch(N){case"companies":await p.companies.activate(t.id);break;case"departments":await p.departments.activate(t.id);break;case"jobTitles":await p.jobTitles.activate(t.id);break;case"offices":await p.offices.activate(t.id);break}k()}catch(n){const m=n instanceof Error?n.message:"Failed to toggle status";j(m)}},Se=async()=>{if(!(w.size<2))try{const t=await p.merge.preview({tenantId:y,referenceType:_.referenceType,sourceIds:Array.from(w)});V(t),Z(null),te(""),X(!0)}catch(t){console.error("Failed to get merge preview:",t),j("Failed to preview merge")}},ke=async()=>{if(!P||!B)return;const t=Array.from(w).filter(n=>n!==P);try{z(!0),j(null),await p.merge.execute({tenantId:y,referenceType:_.referenceType,targetId:P,sourceIds:t,reason:ee||void 0}),X(!1),A(new Set),V(null),k()}catch(n){const m=n instanceof Error?n.message:"Failed to merge";j(m)}finally{z(!1)}},Ce=async()=>{try{const t=await p.merge.getHistory(y,_.referenceType);he(t),O(!0)}catch(t){console.error("Failed to load merge history:",t),j("Failed to load merge history")}},Te=t=>{Q(t),S({code:t.code,name:t.name,shortName:t.shortName,description:t.description}),L(!0),D(null)},$e=t=>t.isMerged?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)]",children:[e.jsx(i.GitMerge,{className:"w-3 h-3"}),a("references.merged","Merged")]}):t.isActive?null:e.jsx("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--bg-secondary)] text-[var(--text-secondary)]",children:a("references.inactive","Inactive")});return e.jsxs("div",{className:"p-6",children:[e.jsx("div",{className:"mb-6",children:e.jsx(C.Breadcrumb,{items:[{label:a("admin.title","Administration"),href:"/administration"},{label:a("users.title","Users"),href:"/administration/users"},{label:a("references.title","References")}]})}),e.jsxs("div",{className:"mb-6",children:[e.jsx("h1",{className:"text-2xl font-bold text-[var(--text-primary)]",children:a("references.title","Reference Data Management")}),e.jsx("p",{className:"text-[var(--text-secondary)] mt-1",children:a("references.description","Manage companies, departments, job titles, and offices for your organization")}),e.jsxs("div",{className:"mt-4",children:[e.jsx(se.TenantScopeSelector,{value:d,onChange:h,adminTenants:c.map(t=>({tenantId:t.id,tenantSlug:t.slug,tenantName:t.name,tenantType:t.type}))}),o&&e.jsxs("p",{className:"mt-2 text-sm text-[var(--text-secondary)] flex items-center gap-1.5",children:[e.jsx(i.Globe,{className:"w-4 h-4"}),a("references.globalModeInfo","Showing references from all tenants. Select a tenant to manage its data.")]})]})]}),ae&&e.jsxs("div",{className:"mb-4 p-4 bg-[var(--error-bg)] border border-[var(--error-border)] rounded-[var(--radius-card)]",children:[e.jsxs("div",{className:"flex items-center",children:[e.jsx(i.AlertCircle,{className:"w-5 h-5 text-[var(--error-text)]"}),e.jsx("span",{className:"ml-2 text-[var(--error-text)]",children:ae}),e.jsx("button",{onClick:()=>j(null),className:"ml-auto text-[var(--error-text)]",children:e.jsx(i.X,{className:"w-4 h-4"})})]}),e.jsx("button",{onClick:()=>k(),className:"mt-2 text-sm text-[var(--error-text)] hover:opacity-80 underline",children:a("common.retry","Retry")})]}),e.jsx("div",{className:"border-b border-[var(--border-color)] mb-6",children:e.jsx("nav",{className:"flex gap-4 -mb-px",children:re.map(t=>{const n=t.icon,m=N===t.id;return e.jsxs("button",{onClick:()=>{ce(t.id),A(new Set)},className:`flex items-center gap-2 px-4 py-3 border-b-2 font-medium text-sm transition-colors ${m?"border-[var(--color-accent-500)] text-[var(--color-accent-600)]":"border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]"}`,children:[e.jsx(n,{className:"w-4 h-4"}),t.label]},t.id)})})}),e.jsxs("div",{className:"flex items-center justify-between gap-4 mb-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(i.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]"}),e.jsx("input",{type:"text",value:$,onChange:t=>ie(t.target.value),placeholder:a("common.search","Search..."),className:"pl-10 pr-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("label",{className:"flex items-center gap-2 text-sm text-[var(--text-secondary)]",children:[e.jsx("input",{type:"checkbox",checked:F,onChange:t=>le(t.target.checked),className:"rounded border-[var(--border-color)]"}),a("references.showInactive","Show inactive")]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[w.size>=2&&!o&&e.jsxs("button",{onClick:Se,className:"flex items-center gap-2 px-4 py-2 bg-[var(--info-dot)] text-white rounded-[var(--radius-button)] hover:opacity-90 transition-opacity",children:[e.jsx(i.GitMerge,{className:"w-4 h-4"}),a("references.merge","Merge")," (",w.size,")"]}),!o&&e.jsxs("button",{onClick:Ce,className:"flex items-center gap-2 px-4 py-2 border border-[var(--border-color)] text-[var(--text-primary)] rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors",children:[e.jsx(i.History,{className:"w-4 h-4"}),a("references.history","History")]}),e.jsxs("button",{onClick:()=>{S({code:"",name:""}),H(!0)},disabled:o,title:o?a("references.selectTenantToCreate","Select a tenant to create a reference"):void 0,className:`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] transition-colors ${o?"bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed":"bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]"}`,children:[e.jsx(i.Plus,{className:"w-4 h-4"}),a("common.create","Create")]})]})]}),e.jsxs("div",{className:"card overflow-hidden",children:[G&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(i.Loader2,{className:"w-8 h-8 animate-spin text-[var(--color-accent-500)]"})}),!G&&T.length===0&&e.jsx("div",{className:"text-center py-12 text-[var(--text-secondary)]",children:a("references.noItems","No items found")}),!G&&T.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{className:"bg-[var(--bg-secondary)] border-b border-[var(--border-color)]",children:e.jsxs("tr",{children:[e.jsx("th",{className:"w-12 px-4 py-3",children:!o&&e.jsx("input",{type:"checkbox",checked:w.size===T.length&&T.length>0,onChange:fe,className:"rounded border-[var(--border-color)]"})}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.code","Code")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.name","Name")}),o&&e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.tenant","Tenant")}),e.jsx("th",{className:"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]",children:a("references.shortName","Short Name")}),e.jsx("th",{className:"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]",children:a("references.users","Users")}),e.jsx("th",{className:"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]",children:a("references.status","Status")}),e.jsx("th",{className:"w-20 px-4 py-3"})]})}),e.jsx("tbody",{className:"divide-y divide-[var(--border-color)]",children:T.map(t=>e.jsxs("tr",{className:`hover:bg-[var(--bg-hover)] transition-colors ${w.has(t.id)?"bg-[var(--info-bg)]":""} ${t.isMerged?"opacity-60":""}`,children:[e.jsx("td",{className:"px-4 py-3",children:!o&&e.jsx("input",{type:"checkbox",checked:w.has(t.id),onChange:()=>be(t.id),disabled:t.isMerged,className:"rounded border-[var(--border-color)]"})}),e.jsx("td",{className:"px-4 py-3 font-mono text-sm text-[var(--text-primary)]",children:t.code}),e.jsx("td",{className:"px-4 py-3 text-[var(--text-primary)]",children:t.name}),o&&e.jsx("td",{className:"px-4 py-3",children:t.tenantName?e.jsxs("button",{onClick:()=>t.tenantId&&ge(t.tenantId),className:"inline-flex items-center gap-1.5 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)] hover:opacity-80 transition-opacity",title:a("references.switchToTenant","Switch to this tenant"),children:[e.jsx(i.Building2,{className:"w-3 h-3"}),t.tenantName]}):e.jsx("span",{className:"text-[var(--text-tertiary)]",children:"-"})}),e.jsx("td",{className:"px-4 py-3 text-[var(--text-secondary)]",children:t.shortName||"-"}),e.jsx("td",{className:"px-4 py-3 text-center",children:e.jsxs("span",{className:"inline-flex items-center gap-1 text-[var(--text-secondary)]",children:[e.jsx(i.Users,{className:"w-4 h-4"}),t.userCount]})}),e.jsxs("td",{className:"px-4 py-3 text-center",children:[$e(t),t.isActive&&!t.isMerged&&e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--success-bg)] text-[var(--success-text)]",children:[e.jsx(i.Check,{className:"w-3 h-3"}),a("references.active","Active")]})]}),e.jsx("td",{className:"px-4 py-3",children:e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>D(J===t.id?null:t.id),className:"p-2 hover:bg-[var(--bg-secondary)] rounded-[var(--radius-button)] transition-colors",disabled:t.isMerged||o,children:e.jsx(i.MoreHorizontal,{className:"w-4 h-4"})}),J===t.id&&e.jsxs("div",{className:"absolute right-0 top-full mt-1 w-48 bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-card)] shadow-lg z-10",children:[e.jsxs("button",{onClick:()=>Te(t),className:"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",children:[e.jsx(i.Edit2,{className:"w-4 h-4"}),a("common.edit","Edit")]}),e.jsx("button",{onClick:()=>{we(t),D(null)},className:"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]",children:t.isActive?a("common.deactivate","Deactivate"):a("common.activate","Activate")}),t.userCount===0&&e.jsxs("button",{onClick:()=>{Ne(t.id),D(null)},className:"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--error-text)] hover:bg-[var(--error-bg)]",children:[e.jsx(i.Trash2,{className:"w-4 h-4"}),a("common.delete","Delete")]})]})]})})]},t.id))})]}),e.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-t border-[var(--border-color)] bg-[var(--bg-secondary)]",children:[e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[a("references.showing","Showing")," ",(g-1)*M+1," ",a("references.to","to")," ",Math.min(g*M,K)," ",a("references.of","of")," ",K," ",a("references.results","results")]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>U(t=>Math.max(1,t-1)),disabled:g===1,className:"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:a("common.previous","Previous")}),e.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:Math.min(5,I)},(t,n)=>{let m;return I<=5||g<=3?m=n+1:g>=I-2?m=I-4+n:m=g-2+n,e.jsx("button",{onClick:()=>U(m),className:`px-3 py-1.5 rounded-[var(--radius-button)] transition-colors ${g===m?"bg-[var(--color-accent-600)] text-white":"border border-[var(--border-color)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)]"}`,children:m},m)})}),e.jsx("button",{onClick:()=>U(t=>Math.min(I,t+1)),disabled:g===I,className:"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:a("common.next","Next")})]})]})]})]}),xe&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-md p-6 m-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:a("references.createTitle","Create Reference")}),e.jsx("button",{onClick:()=>H(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:[a("references.code","Code")," *"]}),e.jsx("input",{type:"text",value:x.code,onChange:t=>S({...x,code:t.target.value}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:[a("references.name","Name")," *"]}),e.jsx("input",{type:"text",value:x.name,onChange:t=>S({...x,name:t.target.value}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.shortName","Short Name")}),e.jsx("input",{type:"text",value:x.shortName||"",onChange:t=>S({...x,shortName:t.target.value||null}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.description","Description")}),e.jsx("textarea",{value:x.description||"",onChange:t=>S({...x,description:t.target.value||null}),rows:3,className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}),e.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[e.jsx("button",{onClick:()=>H(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.cancel","Cancel")}),e.jsxs("button",{onClick:ye,disabled:E||!x.code||!x.name,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50",children:[E&&e.jsx(i.Loader2,{className:"w-4 h-4 animate-spin"}),a("common.create","Create")]})]})]})}),ue&&R&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-md p-6 m-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h2",{className:"text-xl font-semibold text-[var(--text-primary)]",children:a("references.editTitle","Edit Reference")}),e.jsx("button",{onClick:()=>L(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.code","Code")}),e.jsx("input",{type:"text",value:x.code,disabled:!0,className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:[a("references.name","Name")," *"]}),e.jsx("input",{type:"text",value:x.name,onChange:t=>S({...x,name:t.target.value}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.shortName","Short Name")}),e.jsx("input",{type:"text",value:x.shortName||"",onChange:t=>S({...x,shortName:t.target.value||null}),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.description","Description")}),e.jsx("textarea",{value:x.description||"",onChange:t=>S({...x,description:t.target.value||null}),rows:3,className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]})]}),e.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[e.jsx("button",{onClick:()=>L(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.cancel","Cancel")}),e.jsxs("button",{onClick:je,disabled:E||!x.name,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50",children:[E&&e.jsx(i.Loader2,{className:"w-4 h-4 animate-spin"}),a("common.save","Save")]})]})]})}),pe&&B&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-lg p-6 m-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(i.GitMerge,{className:"w-5 h-5 text-[var(--info-dot)]"}),a("references.mergeTitle","Merge References")]}),e.jsx("button",{onClick:()=>X(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsx("p",{className:"text-sm text-[var(--text-secondary)] mb-4",children:a("references.mergeDescription","Select the target reference. All other selected references will be merged into it and their users will be reassigned.")}),e.jsxs("div",{className:"space-y-2 mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)]",children:a("references.selectTarget","Select target reference")}),B.sources.map(t=>e.jsxs("label",{className:`flex items-center gap-3 p-3 border rounded-[var(--radius-card)] cursor-pointer transition-colors ${P===t.id?"border-[var(--info-dot)] bg-[var(--info-bg)]":"border-[var(--border-color)] hover:border-[var(--color-accent-500)]"}`,children:[e.jsx("input",{type:"radio",name:"mergeTarget",value:t.id,checked:P===t.id,onChange:()=>Z(t.id),className:"text-[var(--info-dot)]"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-medium text-[var(--text-primary)]",children:t.name}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)]",children:[t.code," ",t.shortName&&`(${t.shortName})`]})]}),e.jsxs("span",{className:"text-sm text-[var(--text-secondary)]",children:[t.userCount," ",a("references.users","users")]})]},t.id))]}),e.jsxs("div",{className:"mb-4",children:[e.jsx("label",{className:"block text-sm font-medium text-[var(--text-secondary)] mb-1",children:a("references.mergeReason","Reason (optional)")}),e.jsx("textarea",{value:ee,onChange:t=>te(t.target.value),rows:2,placeholder:a("references.mergeReasonPlaceholder","Why are you merging these references?"),className:"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]"})]}),e.jsx("div",{className:"p-3 bg-[var(--warning-bg)] border border-[var(--warning-border)] rounded-[var(--radius-card)] mb-4",children:e.jsxs("p",{className:"text-sm text-[var(--warning-text)]",children:[e.jsx("strong",{children:B.totalUsersAffected})," ",a("references.usersWillBeReassigned","users will be reassigned")]})}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{onClick:()=>X(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.cancel","Cancel")}),e.jsxs("button",{onClick:ke,disabled:E||!P,className:"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--info-dot)] text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:[E&&e.jsx(i.Loader2,{className:"w-4 h-4 animate-spin"}),e.jsx(i.GitMerge,{className:"w-4 h-4"}),a("references.merge","Merge")]})]})]})}),ve&&e.jsx("div",{className:"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50",children:e.jsxs("div",{className:"card w-full max-w-2xl p-6 m-4 max-h-[80vh] overflow-hidden flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("h2",{className:"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2",children:[e.jsx(i.History,{className:"w-5 h-5"}),a("references.historyTitle","Merge History")]}),e.jsx("button",{onClick:()=>O(!1),className:"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]",children:e.jsx(i.X,{className:"w-5 h-5"})})]}),e.jsx("div",{className:"overflow-y-auto flex-1",children:Y.length===0?e.jsx("div",{className:"text-center py-8 text-[var(--text-secondary)]",children:a("references.noHistory","No merge history found")}):e.jsx("div",{className:"space-y-3",children:Y.map(t=>e.jsxs("div",{className:"p-4 border border-[var(--border-color)] rounded-[var(--radius-card)]",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(i.GitMerge,{className:"w-4 h-4 text-[var(--info-dot)]"}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.sourceReferenceName}),e.jsx("span",{className:"text-[var(--text-secondary)]",children:"→"}),e.jsx("span",{className:"font-medium text-[var(--text-primary)]",children:t.targetReferenceName})]}),e.jsxs("div",{className:"text-sm text-[var(--text-secondary)] space-y-1",children:[e.jsxs("div",{children:[t.affectedUserCount," users reassigned"]}),e.jsxs("div",{children:["By ",t.mergedByUserName]}),e.jsx("div",{children:new Date(t.mergedAt).toLocaleString()}),t.mergeReason&&e.jsxs("div",{className:"italic",children:['"',t.mergeReason,'"']})]})]},t.id))})}),e.jsx("div",{className:"flex justify-end mt-4 pt-4 border-t border-[var(--border-color)]",children:e.jsx("button",{onClick:()=>O(!1),className:"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors",children:a("common.close","Close")})})]})}),J&&e.jsx("button",{type:"button",className:"fixed inset-0 z-0",onClick:()=>D(null),"aria-label":"Close menu"})]})}exports.ReferencesManagementPage=Re;
2
+ //# sourceMappingURL=ReferencesManagementPage-B5mcshG1.js.map