@atlashub/smartstack 3.31.0 → 3.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{AgentSkillsPage-DcvOMm5k.js → AgentSkillsPage-BMxOA-nm.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-DcvOMm5k.js.map → AgentSkillsPage-BMxOA-nm.js.map} +1 -1
- package/dist/chunks/{AgentSkillsPage-CDMhqrhE.js → AgentSkillsPage-DSwfoazB.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-CDMhqrhE.js.map → AgentSkillsPage-DSwfoazB.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-YpJSDaWc.js → AgentWorkloadPage-B_emq8kd.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-YpJSDaWc.js.map → AgentWorkloadPage-B_emq8kd.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-DYBPNzjQ.js → AgentWorkloadPage-_USTeYWz.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-DYBPNzjQ.js.map → AgentWorkloadPage-_USTeYWz.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-9r1axtCg.js → ApiCatalogDetailPage-BC_HxVu5.js} +3 -3
- package/dist/chunks/{ApiCatalogDetailPage-9r1axtCg.js.map → ApiCatalogDetailPage-BC_HxVu5.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-TjCQ8_A8.js → ApiCatalogDetailPage-BI7zyZAd.js} +2 -2
- package/dist/chunks/{ApiCatalogDetailPage-TjCQ8_A8.js.map → ApiCatalogDetailPage-BI7zyZAd.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-COxazTnz.js → ApiCatalogPage-CutaHo5K.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-COxazTnz.js.map → ApiCatalogPage-CutaHo5K.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-QRysH0pT.js → ApiCatalogPage-M80MorHU.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-QRysH0pT.js.map → ApiCatalogPage-M80MorHU.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-jSHy3MPz.js → ApplicationDetailPage-DVY0wua0.js} +2 -2
- package/dist/chunks/{ApplicationDetailPage-jSHy3MPz.js.map → ApplicationDetailPage-DVY0wua0.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-Dbx01Ikm.js → ApplicationDetailPage-DzszwaIZ.js} +4 -4
- package/dist/chunks/{ApplicationDetailPage-Dbx01Ikm.js.map → ApplicationDetailPage-DzszwaIZ.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-CclKc0wI.js → ApplicationsDashboardPage-B3ptvnJz.js} +3 -3
- package/dist/chunks/{ApplicationsDashboardPage-CclKc0wI.js.map → ApplicationsDashboardPage-B3ptvnJz.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-CxWmOc1x.js → ApplicationsDashboardPage-D0pxqbEc.js} +2 -2
- package/dist/chunks/{ApplicationsDashboardPage-CxWmOc1x.js.map → ApplicationsDashboardPage-D0pxqbEc.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-D2l8cM3o.js → ApplicationsGridPage-Ca23FBSP.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-D2l8cM3o.js.map → ApplicationsGridPage-Ca23FBSP.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-BJXWXwyI.js → ApplicationsGridPage-qi2UCD24.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-BJXWXwyI.js.map → ApplicationsGridPage-qi2UCD24.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-CMosl3my.js → ApplicationsListPage-CEUmBXN0.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-CMosl3my.js.map → ApplicationsListPage-CEUmBXN0.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-Dc6NGQ61.js → ApplicationsListPage-cE82bv8j.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-Dc6NGQ61.js.map → ApplicationsListPage-cE82bv8j.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-DI-iMqoJ.js → ApplicationsPage-DW1BrVVN.js} +4 -4
- package/dist/chunks/{ApplicationsPage-DI-iMqoJ.js.map → ApplicationsPage-DW1BrVVN.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-DH7tpMlF.js → ApplicationsPage-RAqTs5HI.js} +2 -2
- package/dist/chunks/{ApplicationsPage-DH7tpMlF.js.map → ApplicationsPage-RAqTs5HI.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-E79QBSLb.js → AssignmentRulesPage-C0qnk3oR.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-E79QBSLb.js.map → AssignmentRulesPage-C0qnk3oR.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-B5UbujbZ.js → AssignmentRulesPage-CVgFmhEs.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-B5UbujbZ.js.map → AssignmentRulesPage-CVgFmhEs.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-CDFaL1gT.js → AssignmentsPage-Bv9HYtYN.js} +2 -2
- package/dist/chunks/{AssignmentsPage-CDFaL1gT.js.map → AssignmentsPage-Bv9HYtYN.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-CPeKJjyK.js → AssignmentsPage-z1q1C9Uz.js} +2 -2
- package/dist/chunks/{AssignmentsPage-CPeKJjyK.js.map → AssignmentsPage-z1q1C9Uz.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-BZ3Ocos5.js → AuthCallbackPage-CcteN6Kv.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-BZ3Ocos5.js.map → AuthCallbackPage-CcteN6Kv.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-Bml48QpH.js → AuthCallbackPage-DL5PJUYJ.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-Bml48QpH.js.map → AuthCallbackPage-DL5PJUYJ.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-DyzslZ06.js → ConfirmEmailPage-BP8VUz-A.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-DyzslZ06.js.map → ConfirmEmailPage-BP8VUz-A.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-DP1XPaKK.js → ConfirmEmailPage-CeflKXpN.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-DP1XPaKK.js.map → ConfirmEmailPage-CeflKXpN.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-Bz2KrMik.js → CreateSupportTicketPage-BAdvWb_8.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-Bz2KrMik.js.map → CreateSupportTicketPage-BAdvWb_8.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-hKjKM0Bh.js → CreateSupportTicketPage-DDiv79-p.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-hKjKM0Bh.js.map → CreateSupportTicketPage-DDiv79-p.js.map} +1 -1
- package/dist/chunks/{DashboardPage-B4nAd8Tj.js → DashboardPage-B_uyyRRE.js} +2 -2
- package/dist/chunks/{DashboardPage-B4nAd8Tj.js.map → DashboardPage-B_uyyRRE.js.map} +1 -1
- package/dist/chunks/{DashboardPage-rN7IFlTR.js → DashboardPage-CpoduSu7.js} +2 -2
- package/dist/chunks/{DashboardPage-rN7IFlTR.js.map → DashboardPage-CpoduSu7.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CjbNGMo1.js → DashboardPage-D4pyUgdM.js} +3 -3
- package/dist/chunks/{DashboardPage-CjbNGMo1.js.map → DashboardPage-D4pyUgdM.js.map} +1 -1
- package/dist/chunks/{DashboardPage-C9qgPBS-.js → DashboardPage-Kp-MCxW4.js} +3 -3
- package/dist/chunks/{DashboardPage-C9qgPBS-.js.map → DashboardPage-Kp-MCxW4.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-CGv2L62M.js → EscalationConfigPage-D-WCN6YS.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-CGv2L62M.js.map → EscalationConfigPage-D-WCN6YS.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-DpYDmsgw.js → EscalationConfigPage-UrLJarSI.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-DpYDmsgw.js.map → EscalationConfigPage-UrLJarSI.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-Db6sOrZN.js → ForceChangePasswordPage-BIh1SF5C.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-Db6sOrZN.js.map → ForceChangePasswordPage-BIh1SF5C.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-CLI_fpF4.js → ForceChangePasswordPage-FFZZRpU7.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-CLI_fpF4.js.map → ForceChangePasswordPage-FFZZRpU7.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-BhMz2B6A.js → ForgotPasswordPage-BKqRF7SF.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-BhMz2B6A.js.map → ForgotPasswordPage-BKqRF7SF.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-D06arMXO.js → ForgotPasswordPage-BXp8qQUX.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-D06arMXO.js.map → ForgotPasswordPage-BXp8qQUX.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-BCM8KBCd.js → GroupDetailPage-a0hBx-LO.js} +5 -5
- package/dist/chunks/{GroupDetailPage-BCM8KBCd.js.map → GroupDetailPage-a0hBx-LO.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-CGMV3bWt.js → GroupDetailPage-eGGJCqgq.js} +2 -2
- package/dist/chunks/{GroupDetailPage-CGMV3bWt.js.map → GroupDetailPage-eGGJCqgq.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-BBrwEomx.js → MyAccessRequestsPage-BgQSyy5d.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-BBrwEomx.js.map → MyAccessRequestsPage-BgQSyy5d.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-CrlWe3gd.js → MyAccessRequestsPage-Dmb0rUHO.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-CrlWe3gd.js.map → MyAccessRequestsPage-Dmb0rUHO.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-BOV34_rJ.js → MyTenantsPage-BZTeqyDr.js} +3 -3
- package/dist/chunks/{MyTenantsPage-BOV34_rJ.js.map → MyTenantsPage-BZTeqyDr.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-CK4-klmd.js → MyTenantsPage-kCHBF2uA.js} +2 -2
- package/dist/chunks/{MyTenantsPage-CK4-klmd.js.map → MyTenantsPage-kCHBF2uA.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-DuhpwhZx.js → MyTicketsPage-BwNIqpCE.js} +2 -2
- package/dist/chunks/{MyTicketsPage-DuhpwhZx.js.map → MyTicketsPage-BwNIqpCE.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-CFZ1G4dG.js → MyTicketsPage-CTpjkA5t.js} +2 -2
- package/dist/chunks/{MyTicketsPage-CFZ1G4dG.js.map → MyTicketsPage-CTpjkA5t.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-BnNQRfBP.js → NavigationAppsPage-DO5bTibb.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-BnNQRfBP.js.map → NavigationAppsPage-DO5bTibb.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-DdJxEoTZ.js → NavigationAppsPage-vx_n07SD.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-DdJxEoTZ.js.map → NavigationAppsPage-vx_n07SD.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-BllOlagk.js → NotificationsPage-Br9sb9AQ.js} +2 -2
- package/dist/chunks/{NotificationsPage-BllOlagk.js.map → NotificationsPage-Br9sb9AQ.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-D1T_ozHl.js → NotificationsPage-CRhd752L.js} +2 -2
- package/dist/chunks/{NotificationsPage-D1T_ozHl.js.map → NotificationsPage-CRhd752L.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-CrAQt7qL.js → OnboardingWizardPage-BIl3Usew.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-CrAQt7qL.js.map → OnboardingWizardPage-BIl3Usew.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-CioLaCYz.js → OnboardingWizardPage-CjqxWX7h.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-CioLaCYz.js.map → OnboardingWizardPage-CjqxWX7h.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-CvPqugYu.js → PermissionDetailPage-COIuJXH-.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-CvPqugYu.js.map → PermissionDetailPage-COIuJXH-.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-BIG78-1-.js → PermissionDetailPage-P_d6xnY0.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-BIG78-1-.js.map → PermissionDetailPage-P_d6xnY0.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-CDSuc8vw.js → PermissionsPage-BhjnMyFY.js} +2 -2
- package/dist/chunks/{PermissionsPage-CDSuc8vw.js.map → PermissionsPage-BhjnMyFY.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-XaOrGrPZ.js → PermissionsPage-CHYy8XFr.js} +2 -2
- package/dist/chunks/{PermissionsPage-XaOrGrPZ.js.map → PermissionsPage-CHYy8XFr.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-oSD7oQhJ.js → PortalDashboardPage-BwQ4NQrH.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-oSD7oQhJ.js.map → PortalDashboardPage-BwQ4NQrH.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-BsWVXkMe.js → PortalDashboardPage-hLJcfGnT.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-BsWVXkMe.js.map → PortalDashboardPage-hLJcfGnT.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-ca2BOdoH.js → PreferencesPage-DYYqisR0.js} +2 -2
- package/dist/chunks/{PreferencesPage-ca2BOdoH.js.map → PreferencesPage-DYYqisR0.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-DD0_XWdT.js → PreferencesPage-DzpM-lpD.js} +2 -2
- package/dist/chunks/{PreferencesPage-DD0_XWdT.js.map → PreferencesPage-DzpM-lpD.js.map} +1 -1
- package/dist/chunks/{ProfilePage-C8tUIOnb.js → ProfilePage-D98bvXeT.js} +2 -2
- package/dist/chunks/{ProfilePage-C8tUIOnb.js.map → ProfilePage-D98bvXeT.js.map} +1 -1
- package/dist/chunks/{ProfilePage-Bex_JN5N.js → ProfilePage-DWRDN0fo.js} +2 -2
- package/dist/chunks/{ProfilePage-Bex_JN5N.js.map → ProfilePage-DWRDN0fo.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-B-FXS2ln.js → ReferencesManagementPage-B0Cq9BHS.js} +2 -2
- package/dist/chunks/{ReferencesManagementPage-B-FXS2ln.js.map → ReferencesManagementPage-B0Cq9BHS.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-C8KZprkI.js → ReferencesManagementPage-CxbfOBs2.js} +3 -3
- package/dist/chunks/{ReferencesManagementPage-C8KZprkI.js.map → ReferencesManagementPage-CxbfOBs2.js.map} +1 -1
- package/dist/chunks/{RegisterPage-MWcVu-LY.js → RegisterPage-DMeq3GzW.js} +2 -2
- package/dist/chunks/{RegisterPage-MWcVu-LY.js.map → RegisterPage-DMeq3GzW.js.map} +1 -1
- package/dist/chunks/{RegisterPage-BYt__zKJ.js → RegisterPage-DvG2Php7.js} +2 -2
- package/dist/chunks/{RegisterPage-BYt__zKJ.js.map → RegisterPage-DvG2Php7.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-rCLUIj_T.js → ResetPasswordPage-DOTswepm.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-rCLUIj_T.js.map → ResetPasswordPage-DOTswepm.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-DaJiMj5Z.js → ResetPasswordPage-ntMMFvDo.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-DaJiMj5Z.js.map → ResetPasswordPage-ntMMFvDo.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-j7Rp6apG.js → ResolutionModal-CKt73sIZ.js} +2 -2
- package/dist/chunks/{ResolutionModal-j7Rp6apG.js.map → ResolutionModal-CKt73sIZ.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-DeuPnLWg.js → ResolutionModal-XGHCELez.js} +2 -2
- package/dist/chunks/{ResolutionModal-DeuPnLWg.js.map → ResolutionModal-XGHCELez.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-CLtZWX17.js → RoleDetailPage-BtnYTVN6.js} +3 -3
- package/dist/chunks/{RoleDetailPage-CLtZWX17.js.map → RoleDetailPage-BtnYTVN6.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-TGyGmLMM.js → RoleDetailPage-DAp65p0d.js} +2 -2
- package/dist/chunks/{RoleDetailPage-TGyGmLMM.js.map → RoleDetailPage-DAp65p0d.js.map} +1 -1
- package/dist/chunks/{RolesPage-Dm03fBBf.js → RolesPage-DyEhJHxw.js} +2 -2
- package/dist/chunks/{RolesPage-Dm03fBBf.js.map → RolesPage-DyEhJHxw.js.map} +1 -1
- package/dist/chunks/{RolesPage-C0c5G9e7.js → RolesPage-FmZCLEYo.js} +2 -2
- package/dist/chunks/{RolesPage-C0c5G9e7.js.map → RolesPage-FmZCLEYo.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-B4WDzEKi.js → SlaConfigPage-DTtP2Q4t.js} +2 -2
- package/dist/chunks/{SlaConfigPage-B4WDzEKi.js.map → SlaConfigPage-DTtP2Q4t.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-Cwo9NwxH.js → SlaConfigPage-LpVD_ai4.js} +2 -2
- package/dist/chunks/{SlaConfigPage-Cwo9NwxH.js.map → SlaConfigPage-LpVD_ai4.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-CL12dFy-.js → SupportPermissionsPage-BV8F_Tl3.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-CL12dFy-.js.map → SupportPermissionsPage-BV8F_Tl3.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-CneIhl30.js → SupportPermissionsPage-Bzfq6pKf.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-CneIhl30.js.map → SupportPermissionsPage-Bzfq6pKf.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-DStKmwHT.js → TemplatesPage-CYHH5WlP.js} +2 -2
- package/dist/chunks/{TemplatesPage-DStKmwHT.js.map → TemplatesPage-CYHH5WlP.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-X4Rrhs9p.js → TemplatesPage-czt_RH5f.js} +2 -2
- package/dist/chunks/{TemplatesPage-X4Rrhs9p.js.map → TemplatesPage-czt_RH5f.js.map} +1 -1
- package/dist/chunks/{TenantCard-BUBYWtvR.js → TenantCard-Bqh5PGJx.js} +2 -2
- package/dist/chunks/{TenantCard-BUBYWtvR.js.map → TenantCard-Bqh5PGJx.js.map} +1 -1
- package/dist/chunks/{TenantCard-CAgiB-NG.js → TenantCard-C6qKD480.js} +2 -2
- package/dist/chunks/{TenantCard-CAgiB-NG.js.map → TenantCard-C6qKD480.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-BAoah-mL.js → TenantScopeSelector-DWUP8Le7.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-BAoah-mL.js.map → TenantScopeSelector-DWUP8Le7.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-B9vtpIZx.js → TenantScopeSelector-DxQ7HNbh.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-B9vtpIZx.js.map → TenantScopeSelector-DxQ7HNbh.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-BFcP4X8s.js → TicketDetailPage-BuxXLcJi.js} +2 -2
- package/dist/chunks/{TicketDetailPage-BFcP4X8s.js.map → TicketDetailPage-BuxXLcJi.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-D_Npnt4A.js → TicketDetailPage-Dy4pg33-.js} +2 -2
- package/dist/chunks/{TicketDetailPage-D_Npnt4A.js.map → TicketDetailPage-Dy4pg33-.js.map} +1 -1
- package/dist/chunks/{TicketsPage-p21DLhUb.js → TicketsPage-Ck-HUgte.js} +2 -2
- package/dist/chunks/{TicketsPage-p21DLhUb.js.map → TicketsPage-Ck-HUgte.js.map} +1 -1
- package/dist/chunks/{TicketsPage-DBP9kalU.js → TicketsPage-jlN9JDzm.js} +2 -2
- package/dist/chunks/{TicketsPage-DBP9kalU.js.map → TicketsPage-jlN9JDzm.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-DOwShnG8.js → UserCreateTicketPage-BrRZyXMn.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-DOwShnG8.js.map → UserCreateTicketPage-BrRZyXMn.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-lvlvp2u6.js → UserCreateTicketPage-D58Ro4Nb.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-lvlvp2u6.js.map → UserCreateTicketPage-D58Ro4Nb.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-Dp6q6FEW.js → UserDashboardPage-C5ulSzaI.js} +2 -2
- package/dist/chunks/{UserDashboardPage-Dp6q6FEW.js.map → UserDashboardPage-C5ulSzaI.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-C_tm7Pld.js → UserDashboardPage-CjAx5OHh.js} +2 -2
- package/dist/chunks/{UserDashboardPage-C_tm7Pld.js.map → UserDashboardPage-CjAx5OHh.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-DXLxO7LF.js → UserDetailPage-Bhpry9xq.js} +2 -2
- package/dist/chunks/{UserDetailPage-DXLxO7LF.js.map → UserDetailPage-Bhpry9xq.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-6grZ6gmV.js → UserDetailPage-DUu2mA_n.js} +5 -5
- package/dist/chunks/{UserDetailPage-6grZ6gmV.js.map → UserDetailPage-DUu2mA_n.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-a4II5VEE.js → UserTicketDetailPage-DpFFjIso.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-a4II5VEE.js.map → UserTicketDetailPage-DpFFjIso.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-Ch9IfCPo.js → UserTicketDetailPage-YJvBWFEu.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-Ch9IfCPo.js.map → UserTicketDetailPage-YJvBWFEu.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-BeAv4QfV.js → UsersGroupsPage-b2PTQX_m.js} +2 -2
- package/dist/chunks/{UsersGroupsPage-BeAv4QfV.js.map → UsersGroupsPage-b2PTQX_m.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-B7Er0V4l.js → UsersGroupsPage-l33K3Nca.js} +3 -3
- package/dist/chunks/{UsersGroupsPage-B7Er0V4l.js.map → UsersGroupsPage-l33K3Nca.js.map} +1 -1
- package/dist/chunks/{UsersPage-ZR9r9vvf.js → UsersPage-BjC5ZqTa.js} +2 -2
- package/dist/chunks/{UsersPage-ZR9r9vvf.js.map → UsersPage-BjC5ZqTa.js.map} +1 -1
- package/dist/chunks/{UsersPage-0M1FLqOe.js → UsersPage-NsTukS8m.js} +2 -2
- package/dist/chunks/{UsersPage-0M1FLqOe.js.map → UsersPage-NsTukS8m.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-CBpF5d54.js → accessRequestsApi-C2usKVGJ.js} +2 -2
- package/dist/chunks/{accessRequestsApi-CBpF5d54.js.map → accessRequestsApi-C2usKVGJ.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-BJH8EE1K.js → accessRequestsApi-LuovcP6l.js} +2 -2
- package/dist/chunks/{accessRequestsApi-BJH8EE1K.js.map → accessRequestsApi-LuovcP6l.js.map} +1 -1
- package/dist/chunks/{aiApi-Dl7a2lWz.js → aiApi-B03u3zUH.js} +2 -2
- package/dist/chunks/{aiApi-Dl7a2lWz.js.map → aiApi-B03u3zUH.js.map} +1 -1
- package/dist/chunks/{aiApi-CkkWAvNB.js → aiApi-Cwg0B8PJ.js} +2 -2
- package/dist/chunks/{aiApi-CkkWAvNB.js.map → aiApi-Cwg0B8PJ.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-BwcSE_H1.js → applicationAnalyticsApi-BobBdehV.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-BwcSE_H1.js.map → applicationAnalyticsApi-BobBdehV.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-DKMmDvWk.js → applicationAnalyticsApi-jCZhWKOx.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-DKMmDvWk.js.map → applicationAnalyticsApi-jCZhWKOx.js.map} +1 -1
- package/dist/chunks/{groupsApi-BzDV3_Jc.js → groupsApi-CoxnW9vH.js} +2 -2
- package/dist/chunks/{groupsApi-BzDV3_Jc.js.map → groupsApi-CoxnW9vH.js.map} +1 -1
- package/dist/chunks/{groupsApi-CQ4vFMdP.js → groupsApi-D2lFFcgu.js} +2 -2
- package/dist/chunks/{groupsApi-CQ4vFMdP.js.map → groupsApi-D2lFFcgu.js.map} +1 -1
- package/dist/chunks/{index-Det9dEaQ.js → index-B5U_Jp0-.js} +2 -2
- package/dist/chunks/{index-Det9dEaQ.js.map → index-B5U_Jp0-.js.map} +1 -1
- package/dist/chunks/{index-D18t9DhC.js → index-BDB_a-p7.js} +4 -4
- package/dist/chunks/{index-D18t9DhC.js.map → index-BDB_a-p7.js.map} +1 -1
- package/dist/chunks/{index-CUZygY5Q.js → index-BbHRJz-n.js} +2 -2
- package/dist/chunks/{index-CUZygY5Q.js.map → index-BbHRJz-n.js.map} +1 -1
- package/dist/chunks/{index-CoHIgn5H.js → index-CI2WU5ZZ.js} +2 -2
- package/dist/chunks/{index-CoHIgn5H.js.map → index-CI2WU5ZZ.js.map} +1 -1
- package/dist/chunks/{index-D-2xSu5W.js → index-CLk9ClC2.js} +3 -3
- package/dist/chunks/{index-D-2xSu5W.js.map → index-CLk9ClC2.js.map} +1 -1
- package/dist/chunks/{index-Dbq-x5H9.js → index-CmTKGOa_.js} +2 -2
- package/dist/chunks/{index-Dbq-x5H9.js.map → index-CmTKGOa_.js.map} +1 -1
- package/dist/chunks/{index-k4USDz2P.js → index-D5oIr6PO.js} +2 -2
- package/dist/chunks/{index-k4USDz2P.js.map → index-D5oIr6PO.js.map} +1 -1
- package/dist/chunks/{index-Cib93xtp.js → index-DC6TBJV_.js} +2 -2
- package/dist/chunks/{index-Cib93xtp.js.map → index-DC6TBJV_.js.map} +1 -1
- package/dist/chunks/{index-CpY95_ro.js → index-DN97bp_f.js} +1128 -1093
- package/dist/chunks/index-DN97bp_f.js.map +1 -0
- package/dist/chunks/{index-BPMjxWVx.js → index-DRW5qV_L.js} +2 -2
- package/dist/chunks/{index-BPMjxWVx.js.map → index-DRW5qV_L.js.map} +1 -1
- package/dist/chunks/{index-DQd324n7.js → index-DcLZao1q.js} +2 -2
- package/dist/chunks/{index-DQd324n7.js.map → index-DcLZao1q.js.map} +1 -1
- package/dist/chunks/{index-bgT9XOKZ.js → index-DcMOmGtX.js} +2 -2
- package/dist/chunks/{index-bgT9XOKZ.js.map → index-DcMOmGtX.js.map} +1 -1
- package/dist/chunks/{index-DK5czlkn.js → index-DnML-nfd.js} +10 -10
- package/dist/chunks/index-DnML-nfd.js.map +1 -0
- package/dist/chunks/{index-BBmMbSZV.js → index-Drd59qAP.js} +8 -8
- package/dist/chunks/{index-BBmMbSZV.js.map → index-Drd59qAP.js.map} +1 -1
- package/dist/chunks/{index-CEbwdURd.js → index-EiIHjIgi.js} +2 -2
- package/dist/chunks/{index-CEbwdURd.js.map → index-EiIHjIgi.js.map} +1 -1
- package/dist/chunks/{index-BLlESTfA.js → index-axYz6ptj.js} +2 -2
- package/dist/chunks/{index-BLlESTfA.js.map → index-axYz6ptj.js.map} +1 -1
- package/dist/chunks/{index-Ci1SqFiY.js → index-lXrXnhFc.js} +2 -2
- package/dist/chunks/{index-Ci1SqFiY.js.map → index-lXrXnhFc.js.map} +1 -1
- package/dist/chunks/{index-h7ZrwrQg.js → index-rI-1r6c2.js} +2 -2
- package/dist/chunks/{index-h7ZrwrQg.js.map → index-rI-1r6c2.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-Dk6K-UTE.js → tenantIconMap-B4wAYGWP.js} +2 -2
- package/dist/chunks/{tenantIconMap-Dk6K-UTE.js.map → tenantIconMap-B4wAYGWP.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-7ihIWxAh.js → tenantIconMap-Cfm15HwB.js} +2 -2
- package/dist/chunks/{tenantIconMap-7ihIWxAh.js.map → tenantIconMap-Cfm15HwB.js.map} +1 -1
- package/dist/chunks/{ticketingApi-BCMKkzlv.js → ticketingApi-CLMAPZDw.js} +2 -2
- package/dist/chunks/{ticketingApi-BCMKkzlv.js.map → ticketingApi-CLMAPZDw.js.map} +1 -1
- package/dist/chunks/{ticketingApi-Dwn7pl5z.js → ticketingApi-CTap4NdE.js} +2 -2
- package/dist/chunks/{ticketingApi-Dwn7pl5z.js.map → ticketingApi-CTap4NdE.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-gJ7yhWyi.js → useAccessRequests-CBpDkq9o.js} +2 -2
- package/dist/chunks/{useAccessRequests-gJ7yhWyi.js.map → useAccessRequests-CBpDkq9o.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-Du7CvowE.js → useAccessRequests-Cj2-OoAW.js} +3 -3
- package/dist/chunks/{useAccessRequests-Du7CvowE.js.map → useAccessRequests-Cj2-OoAW.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-5wWea2Jg.js → useUserAccessRequests-C6l2VMe1.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-5wWea2Jg.js.map → useUserAccessRequests-C6l2VMe1.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-Bk_v8egy.js → useUserAccessRequests-Ds3K-ENU.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-Bk_v8egy.js.map → useUserAccessRequests-Ds3K-ENU.js.map} +1 -1
- package/dist/components/routing/DynamicRouter.d.ts.map +1 -1
- package/dist/components/routing/ProtectedRoute.d.ts.map +1 -1
- package/dist/contexts/AuthContext.d.ts.map +1 -1
- package/dist/contexts/NavigationContext.d.ts.map +1 -1
- package/dist/extensions/PageRegistry.d.ts +2 -0
- package/dist/extensions/PageRegistry.d.ts.map +1 -1
- package/dist/services/api/adminApi/settings.d.ts +8 -3
- package/dist/services/api/adminApi/settings.d.ts.map +1 -1
- package/dist/smartstack.cjs +1 -1
- package/dist/smartstack.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/index-CpY95_ro.js.map +0 -1
- package/dist/chunks/index-DK5czlkn.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react"),h=require("react-router-dom"),c=require("lucide-react"),m=require("./index-
|
|
2
|
-
//# sourceMappingURL=AuthCallbackPage-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react"),h=require("react-router-dom"),c=require("lucide-react"),m=require("./index-DnML-nfd.js"),v={auth_failed:"L'authentification a échoué. Veuillez réessayer.",no_email:"Impossible de récupérer votre adresse email depuis le fournisseur.",account_disabled:"Votre compte est désactivé. Contactez l'administrateur.",account_locked:"Votre compte est verrouillé. Contactez l'administrateur.",internal_error:"Une erreur interne est survenue. Veuillez réessayer."};function y(){const[o]=h.useSearchParams(),g=h.useNavigate(),[l,a]=u.useState("processing"),[x,d]=u.useState("");u.useEffect(()=>{const r=o.get("token"),i=o.get("refreshToken"),s=o.get("error");if(s){a("error"),d(v[s]||"Une erreur est survenue lors de l'authentification.");return}r&&i?f(r,i):(a("error"),d("Paramètres d'authentification manquants."))},[o]);const f=async(r,i)=>{try{localStorage.setItem("token",r),localStorage.setItem("refreshToken",i);try{const t=await m.getClientIpAddress(),n=m.detectDeviceType();(t||n)&&await fetch("/api/auth/update-session-client-info",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({clientIp:t,deviceType:n})})}catch{}const s=await fetch("/api/auth/me",{headers:{Authorization:`Bearer ${r}`}});if(!s.ok)throw new Error("Failed to fetch user info");const p=await s.json();localStorage.setItem("user",JSON.stringify(p));try{const t=await fetch("/api/onboarding/status",{headers:{Authorization:`Bearer ${r}`}});if(t.ok&&!(await t.json()).hasCompletedOnboarding){a("success"),setTimeout(()=>{window.location.href="/auth/onboarding"},1500);return}}catch{}try{const t=await m.userApi.preferences.get(),n={mode:t.theme||"dark",accentColorKey:t.accentColorKey||"indigo",borderRadius:t.borderRadius||{},itemPaletteKey:t.itemPaletteKey||"neutral"};localStorage.setItem("smartstack-theme-config",JSON.stringify(n)),t.language&&localStorage.setItem("i18nextLng",t.language)}catch{}a("success"),localStorage.removeItem("currentTenantId"),localStorage.removeItem("currentTenantSlug"),localStorage.removeItem("isGlobalView"),setTimeout(()=>{window.location.href="/myspace"},1500)}catch(s){console.error("Auth callback error:",s),a("error"),d("Erreur lors de la finalisation de l'authentification.")}},b=()=>{g("/login")};return e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-[var(--bg-primary)]",children:e.jsx("div",{className:"max-w-md w-full mx-4",children:e.jsxs("div",{className:"bg-[var(--bg-secondary)] rounded-2xl p-8 shadow-lg border border-[var(--border-color)]",children:[l==="processing"&&e.jsxs("div",{className:"text-center",children:[e.jsx(c.Loader2,{className:"w-16 h-16 mx-auto text-[var(--color-accent-500)] animate-spin mb-4"}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:"Authentification en cours..."}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:"Veuillez patienter pendant que nous finalisons votre connexion."})]}),l==="success"&&e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-16 h-16 mx-auto bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mb-4",children:e.jsx(c.CheckCircle,{className:"w-10 h-10 text-green-600 dark:text-green-400"})}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:"Connexion réussie !"}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:"Vous allez être redirigé vers votre espace personnel..."})]}),l==="error"&&e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-16 h-16 mx-auto bg-red-100 dark:bg-red-900/30 rounded-full flex items-center justify-center mb-4",children:e.jsx(c.XCircle,{className:"w-10 h-10 text-red-600 dark:text-red-400"})}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:"Échec de l'authentification"}),e.jsx("div",{className:"bg-red-50 dark:bg-red-900/20 rounded-lg p-4 mb-6",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(c.AlertCircle,{className:"w-5 h-5 text-red-600 dark:text-red-400 flex-shrink-0 mt-0.5"}),e.jsx("p",{className:"text-sm text-red-700 dark:text-red-300",children:x})]})}),e.jsx("button",{onClick:b,className:"btn btn-primary w-full",children:"Retourner à la connexion"})]})]})})})}exports.AuthCallbackPage=y;
|
|
2
|
+
//# sourceMappingURL=AuthCallbackPage-DL5PJUYJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthCallbackPage-Bml48QpH.js","sources":["../../src/pages/auth/AuthCallbackPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useSearchParams, useNavigate } from 'react-router-dom';\r\nimport { Loader2, CheckCircle, XCircle, AlertCircle } from 'lucide-react';\r\nimport { userApi } from '@/services/api/userApi';\r\nimport { getClientIpAddress } from '@/utils/ipDetection';\r\nimport { detectDeviceType } from '@/utils/deviceDetection';\r\n\r\ntype CallbackStatus = 'processing' | 'success' | 'error';\r\n\r\nconst errorMessages: Record<string, string> = {\r\n auth_failed: 'L\\'authentification a échoué. Veuillez réessayer.',\r\n no_email: 'Impossible de récupérer votre adresse email depuis le fournisseur.',\r\n account_disabled: 'Votre compte est désactivé. Contactez l\\'administrateur.',\r\n account_locked: 'Votre compte est verrouillé. Contactez l\\'administrateur.',\r\n internal_error: 'Une erreur interne est survenue. Veuillez réessayer.',\r\n};\r\n\r\nexport function AuthCallbackPage(): ReactElement {\r\n const [searchParams] = useSearchParams();\r\n const navigate = useNavigate();\r\n const [status, setStatus] = useState<CallbackStatus>('processing');\r\n const [errorMessage, setErrorMessage] = useState<string>('');\r\n\r\n useEffect(() => {\r\n const token = searchParams.get('token');\r\n const refreshToken = searchParams.get('refreshToken');\r\n const error = searchParams.get('error');\r\n\r\n if (error) {\r\n setStatus('error');\r\n setErrorMessage(errorMessages[error] || 'Une erreur est survenue lors de l\\'authentification.');\r\n return;\r\n }\r\n\r\n if (token && refreshToken) {\r\n handleSuccessfulAuth(token, refreshToken);\r\n } else {\r\n setStatus('error');\r\n setErrorMessage('Paramètres d\\'authentification manquants.');\r\n }\r\n }, [searchParams]);\r\n\r\n const handleSuccessfulAuth = async (token: string, refreshToken: string) => {\r\n try {\r\n localStorage.setItem('token', token);\r\n localStorage.setItem('refreshToken', refreshToken);\r\n\r\n // Update session with client-side IP address (retrieved via external service like ipify.org)\r\n // This is important for OAuth flows where the server can't reliably get the client IP\r\n try {\r\n const clientIp = await getClientIpAddress();\r\n const deviceType = detectDeviceType();\r\n\r\n if (clientIp || deviceType) {\r\n await fetch(`/api/auth/update-session-client-info`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify({ clientIp, deviceType }),\r\n });\r\n }\r\n } catch (ipError) {\r\n // Non-critical - continue with the flow even if IP update fails\r\n }\r\n\r\n // Fetch user info\r\n const userResponse = await fetch(`/api/auth/me`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (!userResponse.ok) {\r\n throw new Error('Failed to fetch user info');\r\n }\r\n\r\n const user = await userResponse.json();\r\n localStorage.setItem('user', JSON.stringify(user));\r\n\r\n // Check if user needs onboarding\r\n try {\r\n const onboardingResponse = await fetch(`/api/onboarding/status`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (onboardingResponse.ok) {\r\n const onboardingData = await onboardingResponse.json();\r\n if (!onboardingData.hasCompletedOnboarding) {\r\n // Redirect to onboarding wizard\r\n setStatus('success');\r\n setTimeout(() => {\r\n window.location.href = '/auth/onboarding';\r\n }, 1500);\r\n return;\r\n }\r\n }\r\n } catch {\r\n // Non-critical - continue with normal flow\r\n }\r\n\r\n // Fetch user preferences\r\n try {\r\n const prefs = await userApi.preferences.get();\r\n const themeConfig = {\r\n mode: prefs.theme || 'dark',\r\n accentColorKey: prefs.accentColorKey || 'indigo',\r\n borderRadius: prefs.borderRadius || {},\r\n itemPaletteKey: prefs.itemPaletteKey || 'neutral',\r\n };\r\n localStorage.setItem('smartstack-theme-config', JSON.stringify(themeConfig));\r\n if (prefs.language) {\r\n localStorage.setItem('i18nextLng', prefs.language);\r\n }\r\n } catch {\r\n // Non-critical - continue with defaults\r\n }\r\n\r\n setStatus('success');\r\n\r\n // Clear stale tenant state so TenantContext uses the user's configured default tenant (Priority 3: isDefault)\r\n localStorage.removeItem('currentTenantId');\r\n localStorage.removeItem('currentTenantSlug');\r\n localStorage.removeItem('isGlobalView');\r\n\r\n // Redirect after showing success\r\n setTimeout(() => {\r\n window.location.href = '/myspace';\r\n }, 1500);\r\n } catch (err) {\r\n console.error('Auth callback error:', err);\r\n setStatus('error');\r\n setErrorMessage('Erreur lors de la finalisation de l\\'authentification.');\r\n }\r\n };\r\n\r\n const handleRetry = () => {\r\n navigate('/login');\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-[var(--bg-primary)]\">\r\n <div className=\"max-w-md w-full mx-4\">\r\n <div className=\"bg-[var(--bg-secondary)] rounded-2xl p-8 shadow-lg border border-[var(--border-color)]\">\r\n {status === 'processing' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 mx-auto text-[var(--color-accent-500)] animate-spin mb-4\" />\r\n <h2 className=\"text-xl font-semibold mb-2\">Authentification en cours...</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Veuillez patienter pendant que nous finalisons votre connexion.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <CheckCircle className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Connexion réussie !</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Vous allez être redirigé vers votre espace personnel...\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'error' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-red-100 dark:bg-red-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Échec de l'authentification</h2>\r\n <div className=\"bg-red-50 dark:bg-red-900/20 rounded-lg p-4 mb-6\">\r\n <div className=\"flex items-start gap-3\">\r\n <AlertCircle className=\"w-5 h-5 text-red-600 dark:text-red-400 flex-shrink-0 mt-0.5\" />\r\n <p className=\"text-sm text-red-700 dark:text-red-300\">{errorMessage}</p>\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleRetry}\r\n className=\"btn btn-primary w-full\"\r\n >\r\n Retourner à la connexion\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["errorMessages","AuthCallbackPage","searchParams","useSearchParams","navigate","useNavigate","status","setStatus","useState","errorMessage","setErrorMessage","useEffect","token","refreshToken","error","handleSuccessfulAuth","clientIp","getClientIpAddress","deviceType","detectDeviceType","userResponse","user","onboardingResponse","prefs","userApi","themeConfig","err","handleRetry","jsx","jsxs","Loader2","CheckCircle","XCircle","AlertCircle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthCallbackPage-DL5PJUYJ.js","sources":["../../src/pages/auth/AuthCallbackPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useSearchParams, useNavigate } from 'react-router-dom';\r\nimport { Loader2, CheckCircle, XCircle, AlertCircle } from 'lucide-react';\r\nimport { userApi } from '@/services/api/userApi';\r\nimport { getClientIpAddress } from '@/utils/ipDetection';\r\nimport { detectDeviceType } from '@/utils/deviceDetection';\r\n\r\ntype CallbackStatus = 'processing' | 'success' | 'error';\r\n\r\nconst errorMessages: Record<string, string> = {\r\n auth_failed: 'L\\'authentification a échoué. Veuillez réessayer.',\r\n no_email: 'Impossible de récupérer votre adresse email depuis le fournisseur.',\r\n account_disabled: 'Votre compte est désactivé. Contactez l\\'administrateur.',\r\n account_locked: 'Votre compte est verrouillé. Contactez l\\'administrateur.',\r\n internal_error: 'Une erreur interne est survenue. Veuillez réessayer.',\r\n};\r\n\r\nexport function AuthCallbackPage(): ReactElement {\r\n const [searchParams] = useSearchParams();\r\n const navigate = useNavigate();\r\n const [status, setStatus] = useState<CallbackStatus>('processing');\r\n const [errorMessage, setErrorMessage] = useState<string>('');\r\n\r\n useEffect(() => {\r\n const token = searchParams.get('token');\r\n const refreshToken = searchParams.get('refreshToken');\r\n const error = searchParams.get('error');\r\n\r\n if (error) {\r\n setStatus('error');\r\n setErrorMessage(errorMessages[error] || 'Une erreur est survenue lors de l\\'authentification.');\r\n return;\r\n }\r\n\r\n if (token && refreshToken) {\r\n handleSuccessfulAuth(token, refreshToken);\r\n } else {\r\n setStatus('error');\r\n setErrorMessage('Paramètres d\\'authentification manquants.');\r\n }\r\n }, [searchParams]);\r\n\r\n const handleSuccessfulAuth = async (token: string, refreshToken: string) => {\r\n try {\r\n localStorage.setItem('token', token);\r\n localStorage.setItem('refreshToken', refreshToken);\r\n\r\n // Update session with client-side IP address (retrieved via external service like ipify.org)\r\n // This is important for OAuth flows where the server can't reliably get the client IP\r\n try {\r\n const clientIp = await getClientIpAddress();\r\n const deviceType = detectDeviceType();\r\n\r\n if (clientIp || deviceType) {\r\n await fetch(`/api/auth/update-session-client-info`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify({ clientIp, deviceType }),\r\n });\r\n }\r\n } catch (ipError) {\r\n // Non-critical - continue with the flow even if IP update fails\r\n }\r\n\r\n // Fetch user info\r\n const userResponse = await fetch(`/api/auth/me`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (!userResponse.ok) {\r\n throw new Error('Failed to fetch user info');\r\n }\r\n\r\n const user = await userResponse.json();\r\n localStorage.setItem('user', JSON.stringify(user));\r\n\r\n // Check if user needs onboarding\r\n try {\r\n const onboardingResponse = await fetch(`/api/onboarding/status`, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n if (onboardingResponse.ok) {\r\n const onboardingData = await onboardingResponse.json();\r\n if (!onboardingData.hasCompletedOnboarding) {\r\n // Redirect to onboarding wizard\r\n setStatus('success');\r\n setTimeout(() => {\r\n window.location.href = '/auth/onboarding';\r\n }, 1500);\r\n return;\r\n }\r\n }\r\n } catch {\r\n // Non-critical - continue with normal flow\r\n }\r\n\r\n // Fetch user preferences\r\n try {\r\n const prefs = await userApi.preferences.get();\r\n const themeConfig = {\r\n mode: prefs.theme || 'dark',\r\n accentColorKey: prefs.accentColorKey || 'indigo',\r\n borderRadius: prefs.borderRadius || {},\r\n itemPaletteKey: prefs.itemPaletteKey || 'neutral',\r\n };\r\n localStorage.setItem('smartstack-theme-config', JSON.stringify(themeConfig));\r\n if (prefs.language) {\r\n localStorage.setItem('i18nextLng', prefs.language);\r\n }\r\n } catch {\r\n // Non-critical - continue with defaults\r\n }\r\n\r\n setStatus('success');\r\n\r\n // Clear stale tenant state so TenantContext uses the user's configured default tenant (Priority 3: isDefault)\r\n localStorage.removeItem('currentTenantId');\r\n localStorage.removeItem('currentTenantSlug');\r\n localStorage.removeItem('isGlobalView');\r\n\r\n // Redirect after showing success\r\n setTimeout(() => {\r\n window.location.href = '/myspace';\r\n }, 1500);\r\n } catch (err) {\r\n console.error('Auth callback error:', err);\r\n setStatus('error');\r\n setErrorMessage('Erreur lors de la finalisation de l\\'authentification.');\r\n }\r\n };\r\n\r\n const handleRetry = () => {\r\n navigate('/login');\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-[var(--bg-primary)]\">\r\n <div className=\"max-w-md w-full mx-4\">\r\n <div className=\"bg-[var(--bg-secondary)] rounded-2xl p-8 shadow-lg border border-[var(--border-color)]\">\r\n {status === 'processing' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 mx-auto text-[var(--color-accent-500)] animate-spin mb-4\" />\r\n <h2 className=\"text-xl font-semibold mb-2\">Authentification en cours...</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Veuillez patienter pendant que nous finalisons votre connexion.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <CheckCircle className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Connexion réussie !</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n Vous allez être redirigé vers votre espace personnel...\r\n </p>\r\n </div>\r\n )}\r\n\r\n {status === 'error' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 mx-auto bg-red-100 dark:bg-red-900/30 rounded-full flex items-center justify-center mb-4\">\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold mb-2\">Échec de l'authentification</h2>\r\n <div className=\"bg-red-50 dark:bg-red-900/20 rounded-lg p-4 mb-6\">\r\n <div className=\"flex items-start gap-3\">\r\n <AlertCircle className=\"w-5 h-5 text-red-600 dark:text-red-400 flex-shrink-0 mt-0.5\" />\r\n <p className=\"text-sm text-red-700 dark:text-red-300\">{errorMessage}</p>\r\n </div>\r\n </div>\r\n <button\r\n onClick={handleRetry}\r\n className=\"btn btn-primary w-full\"\r\n >\r\n Retourner à la connexion\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["errorMessages","AuthCallbackPage","searchParams","useSearchParams","navigate","useNavigate","status","setStatus","useState","errorMessage","setErrorMessage","useEffect","token","refreshToken","error","handleSuccessfulAuth","clientIp","getClientIpAddress","deviceType","detectDeviceType","userResponse","user","onboardingResponse","prefs","userApi","themeConfig","err","handleRetry","jsx","jsxs","Loader2","CheckCircle","XCircle","AlertCircle"],"mappings":"iOAUMA,EAAwC,CAC5C,YAAa,mDACb,SAAU,qEACV,iBAAkB,0DAClB,eAAgB,2DAChB,eAAgB,sDAClB,EAEO,SAASC,GAAiC,CAC/C,KAAM,CAACC,CAAY,EAAIC,kBAAA,EACjBC,EAAWC,EAAAA,YAAA,EACX,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAyB,YAAY,EAC3D,CAACC,EAAcC,CAAe,EAAIF,EAAAA,SAAiB,EAAE,EAE3DG,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAQV,EAAa,IAAI,OAAO,EAChCW,EAAeX,EAAa,IAAI,cAAc,EAC9CY,EAAQZ,EAAa,IAAI,OAAO,EAEtC,GAAIY,EAAO,CACTP,EAAU,OAAO,EACjBG,EAAgBV,EAAcc,CAAK,GAAK,qDAAsD,EAC9F,MACF,CAEIF,GAASC,EACXE,EAAqBH,EAAOC,CAAY,GAExCN,EAAU,OAAO,EACjBG,EAAgB,0CAA2C,EAE/D,EAAG,CAACR,CAAY,CAAC,EAEjB,MAAMa,EAAuB,MAAOH,EAAeC,IAAyB,CAC1E,GAAI,CACF,aAAa,QAAQ,QAASD,CAAK,EACnC,aAAa,QAAQ,eAAgBC,CAAY,EAIjD,GAAI,CACF,MAAMG,EAAW,MAAMC,qBAAA,EACjBC,EAAaC,EAAAA,iBAAA,GAEfH,GAAYE,IACd,MAAM,MAAM,uCAAwC,CAClD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAUN,CAAK,EAAA,EAEhC,KAAM,KAAK,UAAU,CAAE,SAAAI,EAAU,WAAAE,EAAY,CAAA,CAC9C,CAEL,MAAkB,CAElB,CAGA,MAAME,EAAe,MAAM,MAAM,eAAgB,CAC/C,QAAS,CACP,cAAe,UAAUR,CAAK,EAAA,CAChC,CACD,EAED,GAAI,CAACQ,EAAa,GAChB,MAAM,IAAI,MAAM,2BAA2B,EAG7C,MAAMC,EAAO,MAAMD,EAAa,KAAA,EAChC,aAAa,QAAQ,OAAQ,KAAK,UAAUC,CAAI,CAAC,EAGjD,GAAI,CACF,MAAMC,EAAqB,MAAM,MAAM,yBAA0B,CAC/D,QAAS,CACP,cAAe,UAAUV,CAAK,EAAA,CAChC,CACD,EAED,GAAIU,EAAmB,IAEjB,EADmB,MAAMA,EAAmB,KAAA,GAC5B,uBAAwB,CAE1Cf,EAAU,SAAS,EACnB,WAAW,IAAM,CACf,OAAO,SAAS,KAAO,kBACzB,EAAG,IAAI,EACP,MACF,CAEJ,MAAQ,CAER,CAGA,GAAI,CACF,MAAMgB,EAAQ,MAAMC,UAAQ,YAAY,IAAA,EAClCC,EAAc,CAClB,KAAMF,EAAM,OAAS,OACrB,eAAgBA,EAAM,gBAAkB,SACxC,aAAcA,EAAM,cAAgB,CAAA,EACpC,eAAgBA,EAAM,gBAAkB,SAAA,EAE1C,aAAa,QAAQ,0BAA2B,KAAK,UAAUE,CAAW,CAAC,EACvEF,EAAM,UACR,aAAa,QAAQ,aAAcA,EAAM,QAAQ,CAErD,MAAQ,CAER,CAEAhB,EAAU,SAAS,EAGnB,aAAa,WAAW,iBAAiB,EACzC,aAAa,WAAW,mBAAmB,EAC3C,aAAa,WAAW,cAAc,EAGtC,WAAW,IAAM,CACf,OAAO,SAAS,KAAO,UACzB,EAAG,IAAI,CACT,OAASmB,EAAK,CACZ,QAAQ,MAAM,uBAAwBA,CAAG,EACzCnB,EAAU,OAAO,EACjBG,EAAgB,uDAAwD,CAC1E,CACF,EAEMiB,EAAc,IAAM,CACxBvB,EAAS,QAAQ,CACnB,EAEA,OACEwB,EAAAA,IAAC,MAAA,CAAI,UAAU,uEACb,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACb,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,yFACZ,SAAA,CAAAvB,IAAW,cACVuB,OAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAD,EAAAA,IAACE,EAAAA,QAAA,CAAQ,UAAU,oEAAA,CAAqE,EACxFF,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,+BAA4B,EACvEA,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,SAAA,iEAAA,CAE5C,CAAA,EACF,EAGDtB,IAAW,WACVuB,OAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAD,EAAAA,IAAC,OAAI,UAAU,yGACb,eAACG,EAAAA,YAAA,CAAY,UAAU,+CAA+C,CAAA,CACxE,EACAH,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,sBAAmB,EAC9DA,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,SAAA,yDAAA,CAE5C,CAAA,EACF,EAGDtB,IAAW,SACVuB,OAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAD,EAAAA,IAAC,OAAI,UAAU,qGACb,eAACI,EAAAA,QAAA,CAAQ,UAAU,2CAA2C,CAAA,CAChE,EACAJ,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA6B,SAAA,8BAA2B,QACrE,MAAA,CAAI,UAAU,mDACb,SAAAC,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAD,EAAAA,IAACK,EAAAA,YAAA,CAAY,UAAU,6DAAA,CAA8D,EACrFL,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,SAAAnB,CAAA,CAAa,CAAA,CAAA,CACtE,CAAA,CACF,EACAmB,EAAAA,IAAC,SAAA,CACC,QAASD,EACT,UAAU,yBACX,SAAA,0BAAA,CAAA,CAED,CAAA,CACF,CAAA,CAAA,CAEJ,EACF,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("react"),l=require("react-router-dom"),a=require("lucide-react"),x=require("./index-
|
|
2
|
-
//# sourceMappingURL=ConfirmEmailPage-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("react"),l=require("react-router-dom"),a=require("lucide-react"),x=require("./index-DnML-nfd.js");function w(){const[j]=l.useSearchParams(),c=j.get("token"),[r,n]=s.useState("loading"),[u,o]=s.useState(""),[g,N]=s.useState(""),[d,k]=s.useState(""),[h,f]=s.useState(!1),[b,m]=s.useState("");s.useEffect(()=>{if(!c){n("error"),o("Lien de confirmation invalide. Aucun token fourni.");return}(async()=>{try{const t=await x.authApi.confirmEmail(c);n("success"),o(t.message),N(t.email)}catch(t){const p=t,y=t?.code;n(y==="TOKEN_EXPIRED"?"expired":y==="TOKEN_ALREADY_USED"?"already_used":"error"),o(p?.message||"Une erreur est survenue lors de la confirmation.")}})()},[c]);const v=async i=>{if(i.preventDefault(),!!d){f(!0),m("");try{const t=await x.authApi.resendConfirmation(d);m(t.message)}catch(t){m(t?.message||"Erreur lors de l'envoi.")}finally{f(!1)}}};return e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 p-8",children:e.jsxs("div",{className:"w-full max-w-md",children:[e.jsx("div",{className:"flex justify-end mb-8",children:e.jsx(x.ThemeSwitcher,{})}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8",children:[r==="loading"&&e.jsxs("div",{className:"text-center",children:[e.jsx(a.Loader2,{className:"w-16 h-16 text-blue-500 animate-spin mx-auto mb-4"}),e.jsx("h2",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-2",children:"Confirmation en cours..."}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Veuillez patienter pendant que nous vérifions votre email."})]}),r==="success"&&e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4",children:e.jsx(a.CheckCircle2,{className:"w-10 h-10 text-green-600 dark:text-green-400"})}),e.jsx("h2",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-2",children:"Email confirmé !"}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:u}),g&&e.jsxs("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-6",children:["Compte : ",e.jsx("strong",{children:g})]}),e.jsx(l.Link,{to:"/login",className:"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all",children:"Se connecter"})]}),(r==="error"||r==="expired"||r==="already_used")&&e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 ${r==="already_used"?"bg-amber-100 dark:bg-amber-900/30":"bg-red-100 dark:bg-red-900/30"}`,children:r==="already_used"?e.jsx(a.CheckCircle2,{className:"w-10 h-10 text-amber-600 dark:text-amber-400"}):e.jsx(a.XCircle,{className:"w-10 h-10 text-red-600 dark:text-red-400"})}),e.jsxs("h2",{className:"text-xl font-semibold text-gray-900 dark:text-white mb-2",children:[r==="expired"&&"Lien expiré",r==="already_used"&&"Lien déjà utilisé",r==="error"&&"Erreur de confirmation"]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:u}),(r==="expired"||r==="error")&&e.jsxs("div",{className:"border-t border-gray-200 dark:border-gray-700 pt-6 mt-6",children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-4",children:"Demander un nouveau lien de confirmation :"}),e.jsxs("form",{onSubmit:v,className:"space-y-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none",children:e.jsx(a.Mail,{className:"h-5 w-5 text-gray-400"})}),e.jsx("input",{type:"email",value:d,onChange:i=>k(i.target.value),placeholder:"Votre email",className:"block w-full pl-10 pr-3 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent",required:!0})]}),e.jsxs("button",{type:"submit",disabled:h,className:"w-full flex items-center justify-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors",children:[h?e.jsx(a.Loader2,{className:"w-5 h-5 animate-spin"}):e.jsx(a.RefreshCw,{className:"w-5 h-5"}),"Renvoyer le lien"]})]}),b&&e.jsx("p",{className:"mt-3 text-sm text-green-600 dark:text-green-400",children:b})]}),r==="already_used"&&e.jsx(l.Link,{to:"/login",className:"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all",children:"Se connecter"})]})]}),e.jsx("p",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mt-6",children:e.jsx(l.Link,{to:"/login",className:"hover:underline",children:"Retour à la connexion"})})]})})}exports.ConfirmEmailPage=w;
|
|
2
|
+
//# sourceMappingURL=ConfirmEmailPage-BP8VUz-A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmEmailPage-DyzslZ06.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useSearchParams, Link } from 'react-router-dom';\r\nimport { CheckCircle2, XCircle, Loader2, Mail, RefreshCw } from 'lucide-react';\r\nimport { ThemeSwitcher } from '@/components/ui/ThemeSwitcher';\r\nimport { authApi } from '@/services/api/authApi';\r\n\r\ntype Status = 'loading' | 'success' | 'error' | 'expired' | 'already_used';\r\n\r\nexport function ConfirmEmailPage(): ReactElement {\r\n const [searchParams] = useSearchParams();\r\n const token = searchParams.get('token');\r\n\r\n const [status, setStatus] = useState<Status>('loading');\r\n const [message, setMessage] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [resendEmail, setResendEmail] = useState('');\r\n const [isResending, setIsResending] = useState(false);\r\n const [resendMessage, setResendMessage] = useState('');\r\n\r\n useEffect(() => {\r\n if (!token) {\r\n setStatus('error');\r\n setMessage('Lien de confirmation invalide. Aucun token fourni.');\r\n return;\r\n }\r\n\r\n const confirmEmail = async () => {\r\n try {\r\n const response = await authApi.confirmEmail(token);\r\n setStatus('success');\r\n setMessage(response.message);\r\n setEmail(response.email);\r\n } catch (err) {\r\n const error = err as { message?: string; code?: string };\r\n const code = (err as { code?: string })?.code;\r\n\r\n if (code === 'TOKEN_EXPIRED') {\r\n setStatus('expired');\r\n } else if (code === 'TOKEN_ALREADY_USED') {\r\n setStatus('already_used');\r\n } else {\r\n setStatus('error');\r\n }\r\n setMessage(error?.message || 'Une erreur est survenue lors de la confirmation.');\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token]);\r\n\r\n const handleResendConfirmation = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!resendEmail) return;\r\n\r\n setIsResending(true);\r\n setResendMessage('');\r\n\r\n try {\r\n const response = await authApi.resendConfirmation(resendEmail);\r\n setResendMessage(response.message);\r\n } catch (err) {\r\n const error = err as { message?: string };\r\n setResendMessage(error?.message || 'Erreur lors de l\\'envoi.');\r\n } finally {\r\n setIsResending(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 p-8\">\r\n <div className=\"w-full max-w-md\">\r\n <div className=\"flex justify-end mb-8\">\r\n <ThemeSwitcher />\r\n </div>\r\n\r\n <div className=\"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8\">\r\n {/* Loading State */}\r\n {status === 'loading' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 text-blue-500 animate-spin mx-auto mb-4\" />\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Confirmation en cours...\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Veuillez patienter pendant que nous vérifions votre email.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Success State */}\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4\">\r\n <CheckCircle2 className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Email confirmé !\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n {email && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 mb-6\">\r\n Compte : <strong>{email}</strong>\r\n </p>\r\n )}\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n </div>\r\n )}\r\n\r\n {/* Error / Expired / Already Used States */}\r\n {(status === 'error' || status === 'expired' || status === 'already_used') && (\r\n <div className=\"text-center\">\r\n <div className={`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 ${\r\n status === 'already_used'\r\n ? 'bg-amber-100 dark:bg-amber-900/30'\r\n : 'bg-red-100 dark:bg-red-900/30'\r\n }`}>\r\n {status === 'already_used' ? (\r\n <CheckCircle2 className=\"w-10 h-10 text-amber-600 dark:text-amber-400\" />\r\n ) : (\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n )}\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n {status === 'expired' && 'Lien expiré'}\r\n {status === 'already_used' && 'Lien déjà utilisé'}\r\n {status === 'error' && 'Erreur de confirmation'}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n\r\n {/* Resend Form */}\r\n {(status === 'expired' || status === 'error') && (\r\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-6 mt-6\">\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-4\">\r\n Demander un nouveau lien de confirmation :\r\n </p>\r\n <form onSubmit={handleResendConfirmation} className=\"space-y-3\">\r\n <div className=\"relative\">\r\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\r\n <Mail className=\"h-5 w-5 text-gray-400\" />\r\n </div>\r\n <input\r\n type=\"email\"\r\n value={resendEmail}\r\n onChange={(e) => setResendEmail(e.target.value)}\r\n placeholder=\"Votre email\"\r\n className=\"block w-full pl-10 pr-3 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\r\n required\r\n />\r\n </div>\r\n <button\r\n type=\"submit\"\r\n disabled={isResending}\r\n className=\"w-full flex items-center justify-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors\"\r\n >\r\n {isResending ? (\r\n <Loader2 className=\"w-5 h-5 animate-spin\" />\r\n ) : (\r\n <RefreshCw className=\"w-5 h-5\" />\r\n )}\r\n Renvoyer le lien\r\n </button>\r\n </form>\r\n {resendMessage && (\r\n <p className=\"mt-3 text-sm text-green-600 dark:text-green-400\">\r\n {resendMessage}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {status === 'already_used' && (\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-center text-sm text-gray-500 dark:text-gray-400 mt-6\">\r\n <Link to=\"/login\" className=\"hover:underline\">\r\n Retour à la connexion\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","searchParams","useSearchParams","token","status","setStatus","useState","message","setMessage","email","setEmail","resendEmail","setResendEmail","isResending","setIsResending","resendMessage","setResendMessage","useEffect","response","authApi","err","error","code","handleResendConfirmation","e","jsxs","jsx","ThemeSwitcher","Loader2","CheckCircle2","Link","XCircle","Mail","RefreshCw"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfirmEmailPage-BP8VUz-A.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useSearchParams, Link } from 'react-router-dom';\r\nimport { CheckCircle2, XCircle, Loader2, Mail, RefreshCw } from 'lucide-react';\r\nimport { ThemeSwitcher } from '@/components/ui/ThemeSwitcher';\r\nimport { authApi } from '@/services/api/authApi';\r\n\r\ntype Status = 'loading' | 'success' | 'error' | 'expired' | 'already_used';\r\n\r\nexport function ConfirmEmailPage(): ReactElement {\r\n const [searchParams] = useSearchParams();\r\n const token = searchParams.get('token');\r\n\r\n const [status, setStatus] = useState<Status>('loading');\r\n const [message, setMessage] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [resendEmail, setResendEmail] = useState('');\r\n const [isResending, setIsResending] = useState(false);\r\n const [resendMessage, setResendMessage] = useState('');\r\n\r\n useEffect(() => {\r\n if (!token) {\r\n setStatus('error');\r\n setMessage('Lien de confirmation invalide. Aucun token fourni.');\r\n return;\r\n }\r\n\r\n const confirmEmail = async () => {\r\n try {\r\n const response = await authApi.confirmEmail(token);\r\n setStatus('success');\r\n setMessage(response.message);\r\n setEmail(response.email);\r\n } catch (err) {\r\n const error = err as { message?: string; code?: string };\r\n const code = (err as { code?: string })?.code;\r\n\r\n if (code === 'TOKEN_EXPIRED') {\r\n setStatus('expired');\r\n } else if (code === 'TOKEN_ALREADY_USED') {\r\n setStatus('already_used');\r\n } else {\r\n setStatus('error');\r\n }\r\n setMessage(error?.message || 'Une erreur est survenue lors de la confirmation.');\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token]);\r\n\r\n const handleResendConfirmation = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!resendEmail) return;\r\n\r\n setIsResending(true);\r\n setResendMessage('');\r\n\r\n try {\r\n const response = await authApi.resendConfirmation(resendEmail);\r\n setResendMessage(response.message);\r\n } catch (err) {\r\n const error = err as { message?: string };\r\n setResendMessage(error?.message || 'Erreur lors de l\\'envoi.');\r\n } finally {\r\n setIsResending(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 p-8\">\r\n <div className=\"w-full max-w-md\">\r\n <div className=\"flex justify-end mb-8\">\r\n <ThemeSwitcher />\r\n </div>\r\n\r\n <div className=\"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8\">\r\n {/* Loading State */}\r\n {status === 'loading' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 text-blue-500 animate-spin mx-auto mb-4\" />\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Confirmation en cours...\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Veuillez patienter pendant que nous vérifions votre email.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Success State */}\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4\">\r\n <CheckCircle2 className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Email confirmé !\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n {email && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 mb-6\">\r\n Compte : <strong>{email}</strong>\r\n </p>\r\n )}\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n </div>\r\n )}\r\n\r\n {/* Error / Expired / Already Used States */}\r\n {(status === 'error' || status === 'expired' || status === 'already_used') && (\r\n <div className=\"text-center\">\r\n <div className={`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 ${\r\n status === 'already_used'\r\n ? 'bg-amber-100 dark:bg-amber-900/30'\r\n : 'bg-red-100 dark:bg-red-900/30'\r\n }`}>\r\n {status === 'already_used' ? (\r\n <CheckCircle2 className=\"w-10 h-10 text-amber-600 dark:text-amber-400\" />\r\n ) : (\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n )}\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n {status === 'expired' && 'Lien expiré'}\r\n {status === 'already_used' && 'Lien déjà utilisé'}\r\n {status === 'error' && 'Erreur de confirmation'}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n\r\n {/* Resend Form */}\r\n {(status === 'expired' || status === 'error') && (\r\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-6 mt-6\">\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-4\">\r\n Demander un nouveau lien de confirmation :\r\n </p>\r\n <form onSubmit={handleResendConfirmation} className=\"space-y-3\">\r\n <div className=\"relative\">\r\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\r\n <Mail className=\"h-5 w-5 text-gray-400\" />\r\n </div>\r\n <input\r\n type=\"email\"\r\n value={resendEmail}\r\n onChange={(e) => setResendEmail(e.target.value)}\r\n placeholder=\"Votre email\"\r\n className=\"block w-full pl-10 pr-3 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\r\n required\r\n />\r\n </div>\r\n <button\r\n type=\"submit\"\r\n disabled={isResending}\r\n className=\"w-full flex items-center justify-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors\"\r\n >\r\n {isResending ? (\r\n <Loader2 className=\"w-5 h-5 animate-spin\" />\r\n ) : (\r\n <RefreshCw className=\"w-5 h-5\" />\r\n )}\r\n Renvoyer le lien\r\n </button>\r\n </form>\r\n {resendMessage && (\r\n <p className=\"mt-3 text-sm text-green-600 dark:text-green-400\">\r\n {resendMessage}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {status === 'already_used' && (\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-center text-sm text-gray-500 dark:text-gray-400 mt-6\">\r\n <Link to=\"/login\" className=\"hover:underline\">\r\n Retour à la connexion\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","searchParams","useSearchParams","token","status","setStatus","useState","message","setMessage","email","setEmail","resendEmail","setResendEmail","isResending","setIsResending","resendMessage","setResendMessage","useEffect","response","authApi","err","error","code","handleResendConfirmation","e","jsxs","jsx","ThemeSwitcher","Loader2","CheckCircle2","Link","XCircle","Mail","RefreshCw"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState as s, useEffect as C } from "react";
|
|
3
3
|
import { useSearchParams as R, Link as m } from "react-router-dom";
|
|
4
4
|
import { Loader2 as y, CheckCircle2 as N, XCircle as j, Mail as _, RefreshCw as S } from "lucide-react";
|
|
5
|
-
import { T as L, c as v } from "./index-
|
|
5
|
+
import { T as L, c as v } from "./index-DN97bp_f.js";
|
|
6
6
|
function I() {
|
|
7
7
|
const [k] = R(), l = k.get("token"), [r, n] = s("loading"), [u, o] = s(""), [g, w] = s(""), [d, E] = s(""), [x, h] = s(!1), [f, c] = s("");
|
|
8
8
|
return C(() => {
|
|
@@ -112,4 +112,4 @@ function I() {
|
|
|
112
112
|
export {
|
|
113
113
|
I as ConfirmEmailPage
|
|
114
114
|
};
|
|
115
|
-
//# sourceMappingURL=ConfirmEmailPage-
|
|
115
|
+
//# sourceMappingURL=ConfirmEmailPage-CeflKXpN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmEmailPage-DP1XPaKK.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useSearchParams, Link } from 'react-router-dom';\r\nimport { CheckCircle2, XCircle, Loader2, Mail, RefreshCw } from 'lucide-react';\r\nimport { ThemeSwitcher } from '@/components/ui/ThemeSwitcher';\r\nimport { authApi } from '@/services/api/authApi';\r\n\r\ntype Status = 'loading' | 'success' | 'error' | 'expired' | 'already_used';\r\n\r\nexport function ConfirmEmailPage(): ReactElement {\r\n const [searchParams] = useSearchParams();\r\n const token = searchParams.get('token');\r\n\r\n const [status, setStatus] = useState<Status>('loading');\r\n const [message, setMessage] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [resendEmail, setResendEmail] = useState('');\r\n const [isResending, setIsResending] = useState(false);\r\n const [resendMessage, setResendMessage] = useState('');\r\n\r\n useEffect(() => {\r\n if (!token) {\r\n setStatus('error');\r\n setMessage('Lien de confirmation invalide. Aucun token fourni.');\r\n return;\r\n }\r\n\r\n const confirmEmail = async () => {\r\n try {\r\n const response = await authApi.confirmEmail(token);\r\n setStatus('success');\r\n setMessage(response.message);\r\n setEmail(response.email);\r\n } catch (err) {\r\n const error = err as { message?: string; code?: string };\r\n const code = (err as { code?: string })?.code;\r\n\r\n if (code === 'TOKEN_EXPIRED') {\r\n setStatus('expired');\r\n } else if (code === 'TOKEN_ALREADY_USED') {\r\n setStatus('already_used');\r\n } else {\r\n setStatus('error');\r\n }\r\n setMessage(error?.message || 'Une erreur est survenue lors de la confirmation.');\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token]);\r\n\r\n const handleResendConfirmation = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!resendEmail) return;\r\n\r\n setIsResending(true);\r\n setResendMessage('');\r\n\r\n try {\r\n const response = await authApi.resendConfirmation(resendEmail);\r\n setResendMessage(response.message);\r\n } catch (err) {\r\n const error = err as { message?: string };\r\n setResendMessage(error?.message || 'Erreur lors de l\\'envoi.');\r\n } finally {\r\n setIsResending(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 p-8\">\r\n <div className=\"w-full max-w-md\">\r\n <div className=\"flex justify-end mb-8\">\r\n <ThemeSwitcher />\r\n </div>\r\n\r\n <div className=\"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8\">\r\n {/* Loading State */}\r\n {status === 'loading' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 text-blue-500 animate-spin mx-auto mb-4\" />\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Confirmation en cours...\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Veuillez patienter pendant que nous vérifions votre email.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Success State */}\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4\">\r\n <CheckCircle2 className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Email confirmé !\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n {email && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 mb-6\">\r\n Compte : <strong>{email}</strong>\r\n </p>\r\n )}\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n </div>\r\n )}\r\n\r\n {/* Error / Expired / Already Used States */}\r\n {(status === 'error' || status === 'expired' || status === 'already_used') && (\r\n <div className=\"text-center\">\r\n <div className={`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 ${\r\n status === 'already_used'\r\n ? 'bg-amber-100 dark:bg-amber-900/30'\r\n : 'bg-red-100 dark:bg-red-900/30'\r\n }`}>\r\n {status === 'already_used' ? (\r\n <CheckCircle2 className=\"w-10 h-10 text-amber-600 dark:text-amber-400\" />\r\n ) : (\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n )}\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n {status === 'expired' && 'Lien expiré'}\r\n {status === 'already_used' && 'Lien déjà utilisé'}\r\n {status === 'error' && 'Erreur de confirmation'}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n\r\n {/* Resend Form */}\r\n {(status === 'expired' || status === 'error') && (\r\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-6 mt-6\">\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-4\">\r\n Demander un nouveau lien de confirmation :\r\n </p>\r\n <form onSubmit={handleResendConfirmation} className=\"space-y-3\">\r\n <div className=\"relative\">\r\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\r\n <Mail className=\"h-5 w-5 text-gray-400\" />\r\n </div>\r\n <input\r\n type=\"email\"\r\n value={resendEmail}\r\n onChange={(e) => setResendEmail(e.target.value)}\r\n placeholder=\"Votre email\"\r\n className=\"block w-full pl-10 pr-3 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\r\n required\r\n />\r\n </div>\r\n <button\r\n type=\"submit\"\r\n disabled={isResending}\r\n className=\"w-full flex items-center justify-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors\"\r\n >\r\n {isResending ? (\r\n <Loader2 className=\"w-5 h-5 animate-spin\" />\r\n ) : (\r\n <RefreshCw className=\"w-5 h-5\" />\r\n )}\r\n Renvoyer le lien\r\n </button>\r\n </form>\r\n {resendMessage && (\r\n <p className=\"mt-3 text-sm text-green-600 dark:text-green-400\">\r\n {resendMessage}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {status === 'already_used' && (\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-center text-sm text-gray-500 dark:text-gray-400 mt-6\">\r\n <Link to=\"/login\" className=\"hover:underline\">\r\n Retour à la connexion\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","searchParams","useSearchParams","token","status","setStatus","useState","message","setMessage","email","setEmail","resendEmail","setResendEmail","isResending","setIsResending","resendMessage","setResendMessage","useEffect","response","authApi","err","error","code","jsxs","jsx","ThemeSwitcher","Loader2","CheckCircle2","Link","XCircle","e","Mail","RefreshCw"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfirmEmailPage-CeflKXpN.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useSearchParams, Link } from 'react-router-dom';\r\nimport { CheckCircle2, XCircle, Loader2, Mail, RefreshCw } from 'lucide-react';\r\nimport { ThemeSwitcher } from '@/components/ui/ThemeSwitcher';\r\nimport { authApi } from '@/services/api/authApi';\r\n\r\ntype Status = 'loading' | 'success' | 'error' | 'expired' | 'already_used';\r\n\r\nexport function ConfirmEmailPage(): ReactElement {\r\n const [searchParams] = useSearchParams();\r\n const token = searchParams.get('token');\r\n\r\n const [status, setStatus] = useState<Status>('loading');\r\n const [message, setMessage] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [resendEmail, setResendEmail] = useState('');\r\n const [isResending, setIsResending] = useState(false);\r\n const [resendMessage, setResendMessage] = useState('');\r\n\r\n useEffect(() => {\r\n if (!token) {\r\n setStatus('error');\r\n setMessage('Lien de confirmation invalide. Aucun token fourni.');\r\n return;\r\n }\r\n\r\n const confirmEmail = async () => {\r\n try {\r\n const response = await authApi.confirmEmail(token);\r\n setStatus('success');\r\n setMessage(response.message);\r\n setEmail(response.email);\r\n } catch (err) {\r\n const error = err as { message?: string; code?: string };\r\n const code = (err as { code?: string })?.code;\r\n\r\n if (code === 'TOKEN_EXPIRED') {\r\n setStatus('expired');\r\n } else if (code === 'TOKEN_ALREADY_USED') {\r\n setStatus('already_used');\r\n } else {\r\n setStatus('error');\r\n }\r\n setMessage(error?.message || 'Une erreur est survenue lors de la confirmation.');\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token]);\r\n\r\n const handleResendConfirmation = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!resendEmail) return;\r\n\r\n setIsResending(true);\r\n setResendMessage('');\r\n\r\n try {\r\n const response = await authApi.resendConfirmation(resendEmail);\r\n setResendMessage(response.message);\r\n } catch (err) {\r\n const error = err as { message?: string };\r\n setResendMessage(error?.message || 'Erreur lors de l\\'envoi.');\r\n } finally {\r\n setIsResending(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 p-8\">\r\n <div className=\"w-full max-w-md\">\r\n <div className=\"flex justify-end mb-8\">\r\n <ThemeSwitcher />\r\n </div>\r\n\r\n <div className=\"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8\">\r\n {/* Loading State */}\r\n {status === 'loading' && (\r\n <div className=\"text-center\">\r\n <Loader2 className=\"w-16 h-16 text-blue-500 animate-spin mx-auto mb-4\" />\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Confirmation en cours...\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Veuillez patienter pendant que nous vérifions votre email.\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Success State */}\r\n {status === 'success' && (\r\n <div className=\"text-center\">\r\n <div className=\"w-16 h-16 bg-green-100 dark:bg-green-900/30 rounded-full flex items-center justify-center mx-auto mb-4\">\r\n <CheckCircle2 className=\"w-10 h-10 text-green-600 dark:text-green-400\" />\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n Email confirmé !\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n {email && (\r\n <p className=\"text-sm text-gray-500 dark:text-gray-400 mb-6\">\r\n Compte : <strong>{email}</strong>\r\n </p>\r\n )}\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n </div>\r\n )}\r\n\r\n {/* Error / Expired / Already Used States */}\r\n {(status === 'error' || status === 'expired' || status === 'already_used') && (\r\n <div className=\"text-center\">\r\n <div className={`w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4 ${\r\n status === 'already_used'\r\n ? 'bg-amber-100 dark:bg-amber-900/30'\r\n : 'bg-red-100 dark:bg-red-900/30'\r\n }`}>\r\n {status === 'already_used' ? (\r\n <CheckCircle2 className=\"w-10 h-10 text-amber-600 dark:text-amber-400\" />\r\n ) : (\r\n <XCircle className=\"w-10 h-10 text-red-600 dark:text-red-400\" />\r\n )}\r\n </div>\r\n <h2 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-2\">\r\n {status === 'expired' && 'Lien expiré'}\r\n {status === 'already_used' && 'Lien déjà utilisé'}\r\n {status === 'error' && 'Erreur de confirmation'}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400 mb-6\">\r\n {message}\r\n </p>\r\n\r\n {/* Resend Form */}\r\n {(status === 'expired' || status === 'error') && (\r\n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-6 mt-6\">\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mb-4\">\r\n Demander un nouveau lien de confirmation :\r\n </p>\r\n <form onSubmit={handleResendConfirmation} className=\"space-y-3\">\r\n <div className=\"relative\">\r\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\">\r\n <Mail className=\"h-5 w-5 text-gray-400\" />\r\n </div>\r\n <input\r\n type=\"email\"\r\n value={resendEmail}\r\n onChange={(e) => setResendEmail(e.target.value)}\r\n placeholder=\"Votre email\"\r\n className=\"block w-full pl-10 pr-3 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\r\n required\r\n />\r\n </div>\r\n <button\r\n type=\"submit\"\r\n disabled={isResending}\r\n className=\"w-full flex items-center justify-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors\"\r\n >\r\n {isResending ? (\r\n <Loader2 className=\"w-5 h-5 animate-spin\" />\r\n ) : (\r\n <RefreshCw className=\"w-5 h-5\" />\r\n )}\r\n Renvoyer le lien\r\n </button>\r\n </form>\r\n {resendMessage && (\r\n <p className=\"mt-3 text-sm text-green-600 dark:text-green-400\">\r\n {resendMessage}\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n\r\n {status === 'already_used' && (\r\n <Link\r\n to=\"/login\"\r\n className=\"inline-flex items-center justify-center gap-2 px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-medium hover:from-blue-700 hover:to-purple-700 transition-all\"\r\n >\r\n Se connecter\r\n </Link>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-center text-sm text-gray-500 dark:text-gray-400 mt-6\">\r\n <Link to=\"/login\" className=\"hover:underline\">\r\n Retour à la connexion\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","searchParams","useSearchParams","token","status","setStatus","useState","message","setMessage","email","setEmail","resendEmail","setResendEmail","isResending","setIsResending","resendMessage","setResendMessage","useEffect","response","authApi","err","error","code","jsxs","jsx","ThemeSwitcher","Loader2","CheckCircle2","Link","XCircle","e","Mail","RefreshCw"],"mappings":"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"}
|
package/dist/chunks/{CreateSupportTicketPage-Bz2KrMik.js → CreateSupportTicketPage-BAdvWb_8.js}
RENAMED
|
@@ -2,7 +2,7 @@ import { jsxs as r, jsx as t, Fragment as Qe } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState as l, useRef as Z, useCallback as b, useEffect as ee } from "react";
|
|
3
3
|
import { useNavigate as Xe, useSearchParams as We } from "react-router-dom";
|
|
4
4
|
import { useTranslation as _e } from "react-i18next";
|
|
5
|
-
import { a0 as U, a1 as we, a2 as de, i as ge, a as Ye, W as Je, B as Ze } from "./index-
|
|
5
|
+
import { a0 as U, a1 as we, a2 as de, i as ge, a as Ye, W as Je, B as Ze } from "./index-DN97bp_f.js";
|
|
6
6
|
import { ArrowLeft as ye, Headset as et, Trash2 as fe, Info as tt, ExternalLink as rt, AlertTriangle as xe, Check as st, Building2 as ve, Bug as ke, Lightbulb as at, Sparkles as nt, AppWindow as ot, MessageSquare as ct, HelpCircle as it, Loader2 as lt, Send as dt, Paperclip as mt, X as pt, Monitor as ut, Camera as Ne, Image as ht, FileText as gt, File as ft } from "lucide-react";
|
|
7
7
|
import { S as xt } from "./ScreenshotAnnotator-DEuQRcin.js";
|
|
8
8
|
const vt = 10 * 1024 * 1024, Se = [
|
|
@@ -909,4 +909,4 @@ function Dt() {
|
|
|
909
909
|
export {
|
|
910
910
|
Dt as CreateSupportTicketPage
|
|
911
911
|
};
|
|
912
|
-
//# sourceMappingURL=CreateSupportTicketPage-
|
|
912
|
+
//# sourceMappingURL=CreateSupportTicketPage-BAdvWb_8.js.map
|