@atlashub/smartstack 3.39.0-preview.1049 → 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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),p=require("react-i18next"),h=require("react-router-dom"),n=require("lucide-react"),i=require("./index-XOOiD_zY.js");function j(){const{t:a}=p.useTranslation("auth"),[d]=h.useSearchParams(),g=h.useNavigate(),[l,s]=o.useState("processing"),[x,u]=o.useState("");o.useEffect(()=>{const f={auth_failed:a("authCallbackPage.authFailedError"),no_email:a("authCallbackPage.noEmailError"),account_disabled:a("authCallbackPage.accountDisabledError"),account_locked:a("authCallbackPage.accountLockedError"),internal_error:a("authCallbackPage.internalError")},m=d.get("error");if(m){s("error"),u(f[m]||a("authCallbackPage.generalError"));return}(async()=>{try{try{const t=await i.getClientIpAddress(),r=i.detectDeviceType();(t||r)&&await fetch("/api/auth/update-session-client-info",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientIp:t,deviceType:r})})}catch{}const c=await fetch("/api/auth/me",{credentials:"include"});if(!c.ok)throw new Error("Failed to fetch user info");const k=await c.json();localStorage.setItem("user",JSON.stringify(k));try{const t=await fetch("/api/onboarding/status",{credentials:"include"});if(t.ok&&!(await t.json()).hasCompletedOnboarding){s("success"),setTimeout(()=>{window.location.href="/auth/onboarding"},1500);return}}catch{}try{const t=await i.userApi.preferences.get(),r={mode:t.theme||"dark",accentColorKey:t.accentColorKey||"indigo",borderRadius:t.borderRadius||{},itemPaletteKey:t.itemPaletteKey||"neutral"};localStorage.setItem("smartstack-theme-config",JSON.stringify(r)),t.language&&localStorage.setItem("i18nextLng",t.language)}catch{}s("success"),localStorage.removeItem("currentTenantId"),localStorage.removeItem("currentTenantSlug"),localStorage.removeItem("isGlobalView"),setTimeout(()=>{window.location.href="/myspace"},1500)}catch(c){console.error("Auth callback error:",c),s("error"),u(a("authCallbackPage.generalError"))}})()},[d,a]);const 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(n.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:a("authCallbackPage.processing")}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:a("authCallbackPage.success")})]}),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(n.CheckCircle,{className:"w-10 h-10 text-green-600 dark:text-green-400"})}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:a("authCallbackPage.success")}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:a("authCallbackPage.success")})]}),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(n.XCircle,{className:"w-10 h-10 text-red-600 dark:text-red-400"})}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:a("authCallbackPage.generalError")}),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(n.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:a("login.submit")})]})]})})})}exports.AuthCallbackPage=j;
2
- //# sourceMappingURL=AuthCallbackPage-CuS-efzY.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),p=require("react-i18next"),h=require("react-router-dom"),n=require("lucide-react"),i=require("./index-BDRogQH_.js");function j(){const{t:a}=p.useTranslation("auth"),[d]=h.useSearchParams(),g=h.useNavigate(),[l,s]=o.useState("processing"),[x,u]=o.useState("");o.useEffect(()=>{const f={auth_failed:a("authCallbackPage.authFailedError"),no_email:a("authCallbackPage.noEmailError"),account_disabled:a("authCallbackPage.accountDisabledError"),account_locked:a("authCallbackPage.accountLockedError"),internal_error:a("authCallbackPage.internalError")},m=d.get("error");if(m){s("error"),u(f[m]||a("authCallbackPage.generalError"));return}(async()=>{try{try{const t=await i.getClientIpAddress(),r=i.detectDeviceType();(t||r)&&await fetch("/api/auth/update-session-client-info",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({clientIp:t,deviceType:r})})}catch{}const c=await fetch("/api/auth/me",{credentials:"include"});if(!c.ok)throw new Error("Failed to fetch user info");const k=await c.json();localStorage.setItem("user",JSON.stringify(k));try{const t=await fetch("/api/onboarding/status",{credentials:"include"});if(t.ok&&!(await t.json()).hasCompletedOnboarding){s("success"),setTimeout(()=>{window.location.href="/auth/onboarding"},1500);return}}catch{}try{const t=await i.userApi.preferences.get(),r={mode:t.theme||"dark",accentColorKey:t.accentColorKey||"indigo",borderRadius:t.borderRadius||{},itemPaletteKey:t.itemPaletteKey||"neutral"};localStorage.setItem("smartstack-theme-config",JSON.stringify(r)),t.language&&localStorage.setItem("i18nextLng",t.language)}catch{}s("success"),localStorage.removeItem("currentTenantId"),localStorage.removeItem("currentTenantSlug"),localStorage.removeItem("isGlobalView"),setTimeout(()=>{window.location.href="/myspace"},1500)}catch(c){console.error("Auth callback error:",c),s("error"),u(a("authCallbackPage.generalError"))}})()},[d,a]);const 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(n.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:a("authCallbackPage.processing")}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:a("authCallbackPage.success")})]}),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(n.CheckCircle,{className:"w-10 h-10 text-green-600 dark:text-green-400"})}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:a("authCallbackPage.success")}),e.jsx("p",{className:"text-[var(--text-secondary)]",children:a("authCallbackPage.success")})]}),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(n.XCircle,{className:"w-10 h-10 text-red-600 dark:text-red-400"})}),e.jsx("h2",{className:"text-xl font-semibold mb-2",children:a("authCallbackPage.generalError")}),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(n.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:a("login.submit")})]})]})})})}exports.AuthCallbackPage=j;
2
+ //# sourceMappingURL=AuthCallbackPage-DPL68Asu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthCallbackPage-CuS-efzY.js","sources":["../../src/pages/auth/AuthCallbackPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\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// Note: Tokens are no longer read from URL params. The OAuth server sets httpOnly cookies\r\n// before redirecting here. We just call /api/auth/me with the cookie.\r\n\r\ntype CallbackStatus = 'processing' | 'success' | 'error';\r\n\r\nexport function AuthCallbackPage(): ReactElement {\r\n const { t } = useTranslation('auth');\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 errorMessages: Record<string, string> = {\r\n auth_failed: t('authCallbackPage.authFailedError'),\r\n no_email: t('authCallbackPage.noEmailError'),\r\n account_disabled: t('authCallbackPage.accountDisabledError'),\r\n account_locked: t('authCallbackPage.accountLockedError'),\r\n internal_error: t('authCallbackPage.internalError'),\r\n };\r\n\r\n const error = searchParams.get('error');\r\n\r\n if (error) {\r\n setStatus('error');\r\n setErrorMessage(errorMessages[error] || t('authCallbackPage.generalError'));\r\n return;\r\n }\r\n\r\n // OAuth flow: server set httpOnly cookies before redirecting here.\r\n // No tokens in URL — just call API with cookies to complete the flow.\r\n const handleSuccessfulAuth = async () => {\r\n try {\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 // Use fetch with credentials to send httpOnly cookies\r\n await fetch(`/api/auth/update-session-client-info`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ clientIp, deviceType }),\r\n });\r\n }\r\n } catch {\r\n // Non-critical - continue with the flow even if IP update fails\r\n }\r\n\r\n // Fetch user info — httpOnly cookie sent automatically\r\n const userResponse = await fetch(`/api/auth/me`, {\r\n credentials: 'include',\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 credentials: 'include',\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(t('authCallbackPage.generalError'));\r\n }\r\n };\r\n handleSuccessfulAuth();\r\n }, [searchParams, t]);\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\">{t('authCallbackPage.processing')}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n {t('authCallbackPage.success')}\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\">{t('authCallbackPage.success')}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n {t('authCallbackPage.success')}\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\">{t('authCallbackPage.generalError')}</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 {t('login.submit')}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["AuthCallbackPage","t","useTranslation","searchParams","useSearchParams","navigate","useNavigate","status","setStatus","useState","errorMessage","setErrorMessage","useEffect","errorMessages","error","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-DPL68Asu.js","sources":["../../src/pages/auth/AuthCallbackPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\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// Note: Tokens are no longer read from URL params. The OAuth server sets httpOnly cookies\r\n// before redirecting here. We just call /api/auth/me with the cookie.\r\n\r\ntype CallbackStatus = 'processing' | 'success' | 'error';\r\n\r\nexport function AuthCallbackPage(): ReactElement {\r\n const { t } = useTranslation('auth');\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 errorMessages: Record<string, string> = {\r\n auth_failed: t('authCallbackPage.authFailedError'),\r\n no_email: t('authCallbackPage.noEmailError'),\r\n account_disabled: t('authCallbackPage.accountDisabledError'),\r\n account_locked: t('authCallbackPage.accountLockedError'),\r\n internal_error: t('authCallbackPage.internalError'),\r\n };\r\n\r\n const error = searchParams.get('error');\r\n\r\n if (error) {\r\n setStatus('error');\r\n setErrorMessage(errorMessages[error] || t('authCallbackPage.generalError'));\r\n return;\r\n }\r\n\r\n // OAuth flow: server set httpOnly cookies before redirecting here.\r\n // No tokens in URL — just call API with cookies to complete the flow.\r\n const handleSuccessfulAuth = async () => {\r\n try {\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 // Use fetch with credentials to send httpOnly cookies\r\n await fetch(`/api/auth/update-session-client-info`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ clientIp, deviceType }),\r\n });\r\n }\r\n } catch {\r\n // Non-critical - continue with the flow even if IP update fails\r\n }\r\n\r\n // Fetch user info — httpOnly cookie sent automatically\r\n const userResponse = await fetch(`/api/auth/me`, {\r\n credentials: 'include',\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 credentials: 'include',\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(t('authCallbackPage.generalError'));\r\n }\r\n };\r\n handleSuccessfulAuth();\r\n }, [searchParams, t]);\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\">{t('authCallbackPage.processing')}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n {t('authCallbackPage.success')}\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\">{t('authCallbackPage.success')}</h2>\r\n <p className=\"text-[var(--text-secondary)]\">\r\n {t('authCallbackPage.success')}\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\">{t('authCallbackPage.generalError')}</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 {t('login.submit')}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["AuthCallbackPage","t","useTranslation","searchParams","useSearchParams","navigate","useNavigate","status","setStatus","useState","errorMessage","setErrorMessage","useEffect","errorMessages","error","clientIp","getClientIpAddress","deviceType","detectDeviceType","userResponse","user","onboardingResponse","prefs","userApi","themeConfig","err","handleRetry","jsx","jsxs","Loader2","CheckCircle","XCircle","AlertCircle"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { useState as i, useEffect as j } from "react";
3
3
  import { useTranslation as C } from "react-i18next";
4
4
  import { useSearchParams as _, Link as g } from "react-router-dom";
5
5
  import { Loader2 as N, CheckCircle2 as k, XCircle as R, Mail as M, RefreshCw as S } from "lucide-react";
6
- import { T as D, c as E } from "./index-Cq80YBne.js";
6
+ import { T as D, c as E } from "./index-CBtjGPod.js";
7
7
  function X() {
8
8
  const { t: r } = C("auth"), [w] = _(), m = w.get("token"), [a, l] = i("loading"), [f, o] = i(""), [u, v] = i(""), [c, P] = i(""), [h, x] = i(!1), [p, d] = i("");
9
9
  j(() => {
@@ -116,4 +116,4 @@ function X() {
116
116
  export {
117
117
  X as ConfirmEmailPage
118
118
  };
119
- //# sourceMappingURL=ConfirmEmailPage-CWIqy2bT.js.map
119
+ //# sourceMappingURL=ConfirmEmailPage-BKlpZkVk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmEmailPage-CWIqy2bT.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\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 { t } = useTranslation('auth');\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(t('confirmEmailPage.invalidTokenMessage'));\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 || t('confirmEmailPage.errorMessage'));\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token, t]);\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 || t('common:error'));\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 {t('confirmEmailPage.loadingTitle')}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n {t('confirmEmailPage.loadingMessage')}\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 {t('confirmEmailPage.successTitle')}\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 {t('confirmEmailPage.account')} <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 {t('confirmEmailPage.signIn')}\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' && t('confirmEmailPage.expiredTitle')}\r\n {status === 'already_used' && t('confirmEmailPage.alreadyUsedTitle')}\r\n {status === 'error' && t('confirmEmailPage.errorTitle')}\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 {t('confirmEmailPage.resendConfirmation')}\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={t('confirmEmailPage.emailPlaceholder')}\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 {t('confirmEmailPage.resendButton')}\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 {t('confirmEmailPage.signIn')}\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 {t('confirmEmailPage.backToLogin')}\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","t","useTranslation","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":";;;;;;AAUO,SAASA,IAAiC;AAC/C,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,MAAM,GAC7B,CAACC,CAAY,IAAIC,EAAA,GACjBC,IAAQF,EAAa,IAAI,OAAO,GAEhC,CAACG,GAAQC,CAAS,IAAIC,EAAiB,SAAS,GAChD,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAE,GACnC,CAACG,GAAOC,CAAQ,IAAIJ,EAAS,EAAE,GAC/B,CAACK,GAAaC,CAAc,IAAIN,EAAS,EAAE,GAC3C,CAACO,GAAaC,CAAc,IAAIR,EAAS,EAAK,GAC9C,CAACS,GAAeC,CAAgB,IAAIV,EAAS,EAAE;AAErD,EAAAW,EAAU,MAAM;AACd,QAAI,CAACd,GAAO;AACV,MAAAE,EAAU,OAAO,GACjBG,EAAWT,EAAE,sCAAsC,CAAC;AACpD;AAAA,IACF;AAuBA,KArBqB,YAAY;AAC/B,UAAI;AACF,cAAMmB,IAAW,MAAMC,EAAQ,aAAahB,CAAK;AACjD,QAAAE,EAAU,SAAS,GACnBG,EAAWU,EAAS,OAAO,GAC3BR,EAASQ,EAAS,KAAK;AAAA,MACzB,SAASE,GAAK;AACZ,cAAMC,IAAQD,GACRE,IAAQF,GAA2B;AAEzC,QACEf,EADEiB,MAAS,kBACD,YACDA,MAAS,uBACR,iBAEA,OAJS,GAMrBd,EAAWa,GAAO,WAAWtB,EAAE,+BAA+B,CAAC;AAAA,MACjE;AAAA,IACF,GAEA;AAAA,EACF,GAAG,CAACI,GAAOJ,CAAC,CAAC;AAEb,QAAMwB,IAA2B,OAAOC,MAAuB;AAE7D,QADAA,EAAE,eAAA,GACE,EAACb,GAEL;AAAA,MAAAG,EAAe,EAAI,GACnBE,EAAiB,EAAE;AAEnB,UAAI;AACF,cAAME,IAAW,MAAMC,EAAQ,mBAAmBR,CAAW;AAC7D,QAAAK,EAAiBE,EAAS,OAAO;AAAA,MACnC,SAASE,GAAK;AAEZ,QAAAJ,EADcI,GACU,WAAWrB,EAAE,cAAc,CAAC;AAAA,MACtD,UAAA;AACE,QAAAe,EAAe,EAAK;AAAA,MACtB;AAAA;AAAA,EACF;AAEA,2BACG,OAAA,EAAI,WAAU,iFACb,UAAA,gBAAAW,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA,gBAAAA,EAACC,KAAc,GACjB;AAAA,IAEA,gBAAAF,EAAC,OAAA,EAAI,WAAU,uDAEZ,UAAA;AAAA,MAAArB,MAAW,aACV,gBAAAqB,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAC,EAACE,GAAA,EAAQ,WAAU,oDAAA,CAAoD;AAAA,0BACtE,MAAA,EAAG,WAAU,4DACX,UAAA7B,EAAE,+BAA+B,GACpC;AAAA,0BACC,KAAA,EAAE,WAAU,oCACV,UAAAA,EAAE,iCAAiC,EAAA,CACtC;AAAA,MAAA,GACF;AAAA,MAIDK,MAAW,aACV,gBAAAqB,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAU,0GACb,4BAACG,GAAA,EAAa,WAAU,gDAA+C,EAAA,CACzE;AAAA,0BACC,MAAA,EAAG,WAAU,4DACX,UAAA9B,EAAE,+BAA+B,GACpC;AAAA,QACA,gBAAA2B,EAAC,KAAA,EAAE,WAAU,yCACV,UAAAnB,GACH;AAAA,QACCE,KACC,gBAAAgB,EAAC,KAAA,EAAE,WAAU,iDACV,UAAA;AAAA,UAAA1B,EAAE,0BAA0B;AAAA,UAAE;AAAA,UAAC,gBAAA2B,EAAC,YAAQ,UAAAjB,EAAA,CAAM;AAAA,QAAA,GACjD;AAAA,QAEF,gBAAAiB;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAET,YAAE,yBAAyB;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B,GACF;AAAA,OAIA1B,MAAW,WAAWA,MAAW,aAAaA,MAAW,mBACzD,gBAAAqB,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,SAAI,WAAW,wEACdtB,MAAW,iBACP,sCACA,+BACN,IACG,UAAAA,MAAW,iBACV,gBAAAsB,EAACG,GAAA,EAAa,WAAU,+CAAA,CAA+C,sBAEtEE,GAAA,EAAQ,WAAU,4CAA2C,EAAA,CAElE;AAAA,QACA,gBAAAN,EAAC,MAAA,EAAG,WAAU,4DACX,UAAA;AAAA,UAAArB,MAAW,aAAaL,EAAE,+BAA+B;AAAA,UACzDK,MAAW,kBAAkBL,EAAE,mCAAmC;AAAA,UAClEK,MAAW,WAAWL,EAAE,6BAA6B;AAAA,QAAA,GACxD;AAAA,QACA,gBAAA2B,EAAC,KAAA,EAAE,WAAU,yCACV,UAAAnB,GACH;AAAA,SAGEH,MAAW,aAAaA,MAAW,YACnC,gBAAAqB,EAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,UAAA,gBAAAC,EAAC,KAAA,EAAE,WAAU,iDACV,UAAA3B,EAAE,qCAAqC,GAC1C;AAAA,UACA,gBAAA0B,EAAC,QAAA,EAAK,UAAUF,GAA0B,WAAU,aAClD,UAAA;AAAA,YAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,cAAA,gBAAAC,EAAC,SAAI,WAAU,wEACb,4BAACM,GAAA,EAAK,WAAU,yBAAwB,EAAA,CAC1C;AAAA,cACA,gBAAAN;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,OAAOf;AAAA,kBACP,UAAU,CAACa,MAAMZ,EAAeY,EAAE,OAAO,KAAK;AAAA,kBAC9C,aAAazB,EAAE,mCAAmC;AAAA,kBAClD,WAAU;AAAA,kBACV,UAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACV,GACF;AAAA,YACA,gBAAA0B;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAUZ;AAAA,gBACV,WAAU;AAAA,gBAET,UAAA;AAAA,kBAAAA,IACC,gBAAAa,EAACE,KAAQ,WAAU,uBAAA,CAAuB,IAE1C,gBAAAF,EAACO,GAAA,EAAU,WAAU,UAAA,CAAU;AAAA,kBAEhClC,EAAE,+BAA+B;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACpC,GACF;AAAA,UACCgB,KACC,gBAAAW,EAAC,KAAA,EAAE,WAAU,mDACV,UAAAX,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QAGDX,MAAW,kBACV,gBAAAsB;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,WAAU;AAAA,YAET,YAAE,yBAAyB;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,IAEA,gBAAAJ,EAAC,KAAA,EAAE,WAAU,6DACX,UAAA,gBAAAA,EAACI,GAAA,EAAK,IAAG,UAAS,WAAU,mBACzB,UAAA/B,EAAE,8BAA8B,GACnC,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"ConfirmEmailPage-BKlpZkVk.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\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 { t } = useTranslation('auth');\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(t('confirmEmailPage.invalidTokenMessage'));\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 || t('confirmEmailPage.errorMessage'));\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token, t]);\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 || t('common:error'));\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 {t('confirmEmailPage.loadingTitle')}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n {t('confirmEmailPage.loadingMessage')}\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 {t('confirmEmailPage.successTitle')}\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 {t('confirmEmailPage.account')} <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 {t('confirmEmailPage.signIn')}\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' && t('confirmEmailPage.expiredTitle')}\r\n {status === 'already_used' && t('confirmEmailPage.alreadyUsedTitle')}\r\n {status === 'error' && t('confirmEmailPage.errorTitle')}\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 {t('confirmEmailPage.resendConfirmation')}\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={t('confirmEmailPage.emailPlaceholder')}\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 {t('confirmEmailPage.resendButton')}\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 {t('confirmEmailPage.signIn')}\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 {t('confirmEmailPage.backToLogin')}\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","t","useTranslation","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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("react"),v=require("react-i18next"),c=require("react-router-dom"),i=require("lucide-react"),g=require("./index-XOOiD_zY.js");function P(){const{t:r}=v.useTranslation("auth"),[N]=c.useSearchParams(),o=N.get("token"),[a,n]=s.useState("loading"),[u,m]=s.useState(""),[h,k]=s.useState(""),[d,E]=s.useState(""),[f,b]=s.useState(!1),[y,x]=s.useState("");s.useEffect(()=>{if(!o){n("error"),m(r("confirmEmailPage.invalidTokenMessage"));return}(async()=>{try{const t=await g.authApi.confirmEmail(o);n("success"),m(t.message),k(t.email)}catch(t){const p=t,j=t?.code;n(j==="TOKEN_EXPIRED"?"expired":j==="TOKEN_ALREADY_USED"?"already_used":"error"),m(p?.message||r("confirmEmailPage.errorMessage"))}})()},[o,r]);const w=async l=>{if(l.preventDefault(),!!d){b(!0),x("");try{const t=await g.authApi.resendConfirmation(d);x(t.message)}catch(t){x(t?.message||r("common:error"))}finally{b(!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(g.ThemeSwitcher,{})}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8",children:[a==="loading"&&e.jsxs("div",{className:"text-center",children:[e.jsx(i.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:r("confirmEmailPage.loadingTitle")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:r("confirmEmailPage.loadingMessage")})]}),a==="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(i.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:r("confirmEmailPage.successTitle")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:u}),h&&e.jsxs("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-6",children:[r("confirmEmailPage.account")," ",e.jsx("strong",{children:h})]}),e.jsx(c.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:r("confirmEmailPage.signIn")})]}),(a==="error"||a==="expired"||a==="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 ${a==="already_used"?"bg-amber-100 dark:bg-amber-900/30":"bg-red-100 dark:bg-red-900/30"}`,children:a==="already_used"?e.jsx(i.CheckCircle2,{className:"w-10 h-10 text-amber-600 dark:text-amber-400"}):e.jsx(i.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:[a==="expired"&&r("confirmEmailPage.expiredTitle"),a==="already_used"&&r("confirmEmailPage.alreadyUsedTitle"),a==="error"&&r("confirmEmailPage.errorTitle")]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:u}),(a==="expired"||a==="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:r("confirmEmailPage.resendConfirmation")}),e.jsxs("form",{onSubmit:w,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(i.Mail,{className:"h-5 w-5 text-gray-400"})}),e.jsx("input",{type:"email",value:d,onChange:l=>E(l.target.value),placeholder:r("confirmEmailPage.emailPlaceholder"),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:f,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:[f?e.jsx(i.Loader2,{className:"w-5 h-5 animate-spin"}):e.jsx(i.RefreshCw,{className:"w-5 h-5"}),r("confirmEmailPage.resendButton")]})]}),y&&e.jsx("p",{className:"mt-3 text-sm text-green-600 dark:text-green-400",children:y})]}),a==="already_used"&&e.jsx(c.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:r("confirmEmailPage.signIn")})]})]}),e.jsx("p",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mt-6",children:e.jsx(c.Link,{to:"/login",className:"hover:underline",children:r("confirmEmailPage.backToLogin")})})]})})}exports.ConfirmEmailPage=P;
2
- //# sourceMappingURL=ConfirmEmailPage-CkN8IfP-.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("react"),v=require("react-i18next"),c=require("react-router-dom"),i=require("lucide-react"),g=require("./index-BDRogQH_.js");function P(){const{t:r}=v.useTranslation("auth"),[N]=c.useSearchParams(),o=N.get("token"),[a,n]=s.useState("loading"),[u,m]=s.useState(""),[h,k]=s.useState(""),[d,E]=s.useState(""),[f,b]=s.useState(!1),[y,x]=s.useState("");s.useEffect(()=>{if(!o){n("error"),m(r("confirmEmailPage.invalidTokenMessage"));return}(async()=>{try{const t=await g.authApi.confirmEmail(o);n("success"),m(t.message),k(t.email)}catch(t){const p=t,j=t?.code;n(j==="TOKEN_EXPIRED"?"expired":j==="TOKEN_ALREADY_USED"?"already_used":"error"),m(p?.message||r("confirmEmailPage.errorMessage"))}})()},[o,r]);const w=async l=>{if(l.preventDefault(),!!d){b(!0),x("");try{const t=await g.authApi.resendConfirmation(d);x(t.message)}catch(t){x(t?.message||r("common:error"))}finally{b(!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(g.ThemeSwitcher,{})}),e.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-xl p-8",children:[a==="loading"&&e.jsxs("div",{className:"text-center",children:[e.jsx(i.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:r("confirmEmailPage.loadingTitle")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:r("confirmEmailPage.loadingMessage")})]}),a==="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(i.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:r("confirmEmailPage.successTitle")}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:u}),h&&e.jsxs("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-6",children:[r("confirmEmailPage.account")," ",e.jsx("strong",{children:h})]}),e.jsx(c.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:r("confirmEmailPage.signIn")})]}),(a==="error"||a==="expired"||a==="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 ${a==="already_used"?"bg-amber-100 dark:bg-amber-900/30":"bg-red-100 dark:bg-red-900/30"}`,children:a==="already_used"?e.jsx(i.CheckCircle2,{className:"w-10 h-10 text-amber-600 dark:text-amber-400"}):e.jsx(i.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:[a==="expired"&&r("confirmEmailPage.expiredTitle"),a==="already_used"&&r("confirmEmailPage.alreadyUsedTitle"),a==="error"&&r("confirmEmailPage.errorTitle")]}),e.jsx("p",{className:"text-gray-600 dark:text-gray-400 mb-6",children:u}),(a==="expired"||a==="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:r("confirmEmailPage.resendConfirmation")}),e.jsxs("form",{onSubmit:w,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(i.Mail,{className:"h-5 w-5 text-gray-400"})}),e.jsx("input",{type:"email",value:d,onChange:l=>E(l.target.value),placeholder:r("confirmEmailPage.emailPlaceholder"),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:f,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:[f?e.jsx(i.Loader2,{className:"w-5 h-5 animate-spin"}):e.jsx(i.RefreshCw,{className:"w-5 h-5"}),r("confirmEmailPage.resendButton")]})]}),y&&e.jsx("p",{className:"mt-3 text-sm text-green-600 dark:text-green-400",children:y})]}),a==="already_used"&&e.jsx(c.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:r("confirmEmailPage.signIn")})]})]}),e.jsx("p",{className:"text-center text-sm text-gray-500 dark:text-gray-400 mt-6",children:e.jsx(c.Link,{to:"/login",className:"hover:underline",children:r("confirmEmailPage.backToLogin")})})]})})}exports.ConfirmEmailPage=P;
2
+ //# sourceMappingURL=ConfirmEmailPage-CawSZypI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmEmailPage-CkN8IfP-.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\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 { t } = useTranslation('auth');\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(t('confirmEmailPage.invalidTokenMessage'));\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 || t('confirmEmailPage.errorMessage'));\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token, t]);\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 || t('common:error'));\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 {t('confirmEmailPage.loadingTitle')}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n {t('confirmEmailPage.loadingMessage')}\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 {t('confirmEmailPage.successTitle')}\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 {t('confirmEmailPage.account')} <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 {t('confirmEmailPage.signIn')}\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' && t('confirmEmailPage.expiredTitle')}\r\n {status === 'already_used' && t('confirmEmailPage.alreadyUsedTitle')}\r\n {status === 'error' && t('confirmEmailPage.errorTitle')}\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 {t('confirmEmailPage.resendConfirmation')}\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={t('confirmEmailPage.emailPlaceholder')}\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 {t('confirmEmailPage.resendButton')}\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 {t('confirmEmailPage.signIn')}\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 {t('confirmEmailPage.backToLogin')}\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","t","useTranslation","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-CawSZypI.js","sources":["../../src/pages/auth/ConfirmEmailPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\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 { t } = useTranslation('auth');\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(t('confirmEmailPage.invalidTokenMessage'));\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 || t('confirmEmailPage.errorMessage'));\r\n }\r\n };\r\n\r\n confirmEmail();\r\n }, [token, t]);\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 || t('common:error'));\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 {t('confirmEmailPage.loadingTitle')}\r\n </h2>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n {t('confirmEmailPage.loadingMessage')}\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 {t('confirmEmailPage.successTitle')}\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 {t('confirmEmailPage.account')} <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 {t('confirmEmailPage.signIn')}\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' && t('confirmEmailPage.expiredTitle')}\r\n {status === 'already_used' && t('confirmEmailPage.alreadyUsedTitle')}\r\n {status === 'error' && t('confirmEmailPage.errorTitle')}\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 {t('confirmEmailPage.resendConfirmation')}\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={t('confirmEmailPage.emailPlaceholder')}\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 {t('confirmEmailPage.resendButton')}\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 {t('confirmEmailPage.signIn')}\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 {t('confirmEmailPage.backToLogin')}\r\n </Link>\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["ConfirmEmailPage","t","useTranslation","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 { 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 H, a1 as we, a2 as de, i as ge, a as Ye, W as Je, B as Ze } from "./index-Cq80YBne.js";
5
+ import { a0 as H, a1 as we, a2 as de, i as ge, a as Ye, W as Je, B as Ze } from "./index-CBtjGPod.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-mFJbKqEg.js";
8
8
  const vt = 10 * 1024 * 1024, Se = [
@@ -915,4 +915,4 @@ function Dt() {
915
915
  export {
916
916
  Dt as CreateSupportTicketPage
917
917
  };
918
- //# sourceMappingURL=CreateSupportTicketPage-Df0ow5ge.js.map
918
+ //# sourceMappingURL=CreateSupportTicketPage-AwbMbBIH.js.map