@cedros/login-react 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -0
- package/dist/AdminDepositList-Cx0xRwES.js +305 -0
- package/dist/AdminDepositList-Cx0xRwES.js.map +1 -0
- package/dist/AdminDepositList-UEcyRZkA.cjs +1 -0
- package/dist/AdminDepositList-UEcyRZkA.cjs.map +1 -0
- package/dist/AdminUserDetail-BzEIdNJh.cjs +1 -0
- package/dist/AdminUserDetail-BzEIdNJh.cjs.map +1 -0
- package/dist/AdminUserDetail-DHFDzY8B.js +1195 -0
- package/dist/AdminUserDetail-DHFDzY8B.js.map +1 -0
- package/dist/AdminWithdrawalHistory-0yxtMh6q.cjs +1 -0
- package/dist/AdminWithdrawalHistory-0yxtMh6q.cjs.map +1 -0
- package/dist/AdminWithdrawalHistory-BGjfrIe3.js +904 -0
- package/dist/AdminWithdrawalHistory-BGjfrIe3.js.map +1 -0
- package/dist/AuthenticationSettings-5Vi7Ib_A.cjs +1 -0
- package/dist/AuthenticationSettings-5Vi7Ib_A.cjs.map +1 -0
- package/dist/AuthenticationSettings-BPAh1my6.cjs +1 -0
- package/dist/AuthenticationSettings-BPAh1my6.cjs.map +1 -0
- package/dist/AuthenticationSettings-CJg8CJY9.js +9 -0
- package/dist/AuthenticationSettings-CJg8CJY9.js.map +1 -0
- package/dist/AuthenticationSettings-CR_i6TTS.js +495 -0
- package/dist/AuthenticationSettings-CR_i6TTS.js.map +1 -0
- package/dist/AutosaveStatus-CYkC2aI_.cjs +1 -0
- package/dist/AutosaveStatus-CYkC2aI_.cjs.map +1 -0
- package/dist/AutosaveStatus-N4uNS6-2.js +1497 -0
- package/dist/AutosaveStatus-N4uNS6-2.js.map +1 -0
- package/dist/CreditSystemSettings-BnAOK_tT.cjs +1 -0
- package/dist/CreditSystemSettings-BnAOK_tT.cjs.map +1 -0
- package/dist/CreditSystemSettings-CIf_SfJq.js +210 -0
- package/dist/CreditSystemSettings-CIf_SfJq.js.map +1 -0
- package/dist/CreditSystemSettings-CePYGgev.js +9 -0
- package/dist/CreditSystemSettings-CePYGgev.js.map +1 -0
- package/dist/CreditSystemSettings-Ck5WIMp3.cjs +1 -0
- package/dist/CreditSystemSettings-Ck5WIMp3.cjs.map +1 -0
- package/dist/{DepositsSection-0Hqr0yDm.js → DepositsSection-DA89uR9A.js} +5 -5
- package/dist/{DepositsSection-0Hqr0yDm.js.map → DepositsSection-DA89uR9A.js.map} +1 -1
- package/dist/DepositsSection-i6XdhLNs.cjs +1 -0
- package/dist/{DepositsSection-CGKCzM-H.cjs.map → DepositsSection-i6XdhLNs.cjs.map} +1 -1
- package/dist/EmailRegisterForm-BrDL3BZy.js +927 -0
- package/dist/EmailRegisterForm-BrDL3BZy.js.map +1 -0
- package/dist/EmailRegisterForm-CxktR-4J.cjs +1 -0
- package/dist/EmailRegisterForm-CxktR-4J.cjs.map +1 -0
- package/dist/EmailSettings-B8xwgd6_.cjs +1 -0
- package/dist/EmailSettings-B8xwgd6_.cjs.map +1 -0
- package/dist/{AuthenticationSettings-BSoIQ58T.js → EmailSettings-Bna7Z53E.js} +3 -3
- package/dist/EmailSettings-Bna7Z53E.js.map +1 -0
- package/dist/EmailSettings-DZywTTRq.cjs +1 -0
- package/dist/EmailSettings-DZywTTRq.cjs.map +1 -0
- package/dist/EmailSettings-DbMDfVaM.js +17 -0
- package/dist/EmailSettings-DbMDfVaM.js.map +1 -0
- package/dist/{EmbeddedWalletSettings-iVf_3pn3.js → EmbeddedWalletSettings-ANbhj3Lt.js} +3 -3
- package/dist/EmbeddedWalletSettings-ANbhj3Lt.js.map +1 -0
- package/dist/EmbeddedWalletSettings-BEztqO19.js +79 -0
- package/dist/EmbeddedWalletSettings-BEztqO19.js.map +1 -0
- package/dist/EmbeddedWalletSettings-D6M7pwgk.cjs +1 -0
- package/dist/EmbeddedWalletSettings-D6M7pwgk.cjs.map +1 -0
- package/dist/EmbeddedWalletSettings-DivEPn39.cjs +1 -0
- package/dist/EmbeddedWalletSettings-DivEPn39.cjs.map +1 -0
- package/dist/ErrorMessage-CHbYbVi2.cjs +1 -0
- package/dist/ErrorMessage-CHbYbVi2.cjs.map +1 -0
- package/dist/ErrorMessage-CcEK0pYO.js +64 -0
- package/dist/ErrorMessage-CcEK0pYO.js.map +1 -0
- package/dist/{GoogleLoginButton-BzHr545L.js → GoogleLoginButton-B3uRMJ_n.js} +4 -3
- package/dist/{GoogleLoginButton-BzHr545L.js.map → GoogleLoginButton-B3uRMJ_n.js.map} +1 -1
- package/dist/GoogleLoginButton-BydKswn4.cjs +1 -0
- package/dist/{GoogleLoginButton-DoAdOqb3.cjs.map → GoogleLoginButton-BydKswn4.cjs.map} +1 -1
- package/dist/LoadingSpinner-6vml-zwr.js +79 -0
- package/dist/LoadingSpinner-6vml-zwr.js.map +1 -0
- package/dist/LoadingSpinner-d6sSxgQN.cjs +1 -0
- package/dist/LoadingSpinner-d6sSxgQN.cjs.map +1 -0
- package/dist/PermissionsSection-BGaj_sI7.js +1026 -0
- package/dist/PermissionsSection-BGaj_sI7.js.map +1 -0
- package/dist/PermissionsSection-CKXXDfqi.cjs +1 -0
- package/dist/PermissionsSection-CKXXDfqi.cjs.map +1 -0
- package/dist/ServerSettings-B2RKhJtZ.js +84 -0
- package/dist/ServerSettings-B2RKhJtZ.js.map +1 -0
- package/dist/ServerSettings-BZXlm1BX.cjs +1 -0
- package/dist/ServerSettings-BZXlm1BX.cjs.map +1 -0
- package/dist/{ServerSettings-C_osdbiX.js → ServerSettings-Bqm4-bt2.js} +3 -3
- package/dist/ServerSettings-Bqm4-bt2.js.map +1 -0
- package/dist/ServerSettings-DZUKo6By.cjs +1 -0
- package/dist/ServerSettings-DZUKo6By.cjs.map +1 -0
- package/dist/SettingsPageLayout-COSYLMu7.cjs +1 -0
- package/dist/SettingsPageLayout-COSYLMu7.cjs.map +1 -0
- package/dist/SettingsPageLayout-DpgNEkuu.js +50 -0
- package/dist/SettingsPageLayout-DpgNEkuu.js.map +1 -0
- package/dist/{SolanaLoginButton-C-CfZxAZ.js → SolanaLoginButton-C_u9OppS.js} +5 -4
- package/dist/{SolanaLoginButton-C-CfZxAZ.js.map → SolanaLoginButton-C_u9OppS.js.map} +1 -1
- package/dist/SolanaLoginButton-fAW7kRUu.cjs +1 -0
- package/dist/{SolanaLoginButton-CPzms0kf.cjs.map → SolanaLoginButton-fAW7kRUu.cjs.map} +1 -1
- package/dist/StatsBar-BX-hHtTq.js +66 -0
- package/dist/StatsBar-BX-hHtTq.js.map +1 -0
- package/dist/StatsBar-DTUZCwDD.cjs +1 -0
- package/dist/StatsBar-DTUZCwDD.cjs.map +1 -0
- package/dist/{TeamSection-Bjt72upx.js → TeamSection-CvrCoa9D.js} +27 -26
- package/dist/TeamSection-CvrCoa9D.js.map +1 -0
- package/dist/TeamSection-DlUD5kp5.cjs +1 -0
- package/dist/TeamSection-DlUD5kp5.cjs.map +1 -0
- package/dist/UsersSection-C2U8Tb7V.cjs +1 -0
- package/dist/{UsersSection-DU86czWP.cjs.map → UsersSection-C2U8Tb7V.cjs.map} +1 -1
- package/dist/{UsersSection-hAcyfSZk.js → UsersSection-Dbh9PTSA.js} +17 -15
- package/dist/{UsersSection-hAcyfSZk.js.map → UsersSection-Dbh9PTSA.js.map} +1 -1
- package/dist/WebhookSettings-BT5q6AZ8.js +17 -0
- package/dist/WebhookSettings-BT5q6AZ8.js.map +1 -0
- package/dist/WebhookSettings-BWl_wsvg.cjs +1 -0
- package/dist/WebhookSettings-BWl_wsvg.cjs.map +1 -0
- package/dist/WebhookSettings-DXNH5bal.cjs +1 -0
- package/dist/WebhookSettings-DXNH5bal.cjs.map +1 -0
- package/dist/{WebhookSettings-IyhyTFes.js → WebhookSettings-bUg2u_p0.js} +4 -4
- package/dist/WebhookSettings-bUg2u_p0.js.map +1 -0
- package/dist/WithdrawalsSection-BL_LOUq8.cjs +1 -0
- package/dist/{WithdrawalsSection-iZJBuZ7O.cjs.map → WithdrawalsSection-BL_LOUq8.cjs.map} +1 -1
- package/dist/WithdrawalsSection-CN-lLnqX.js +20 -0
- package/dist/{WithdrawalsSection-B1415d-G.js.map → WithdrawalsSection-CN-lLnqX.js.map} +1 -1
- package/dist/admin-only.cjs +1 -0
- package/dist/admin-only.cjs.map +1 -0
- package/dist/{admin/types.d.ts → admin-only.d.ts} +228 -167
- package/dist/admin-only.js +8 -0
- package/dist/admin-only.js.map +1 -0
- package/dist/apiClient-B2JxVPlH.js +216 -0
- package/dist/apiClient-B2JxVPlH.js.map +1 -0
- package/dist/apiClient-CTTKhsYb.cjs +1 -0
- package/dist/apiClient-CTTKhsYb.cjs.map +1 -0
- package/dist/assets/argon2Worker-Bi5TuQvD.js.map +1 -1
- package/dist/email-only.cjs +1 -1
- package/dist/email-only.d.ts +634 -16
- package/dist/email-only.js +16 -13
- package/dist/email-only.js.map +1 -1
- package/dist/google-only.cjs +1 -1
- package/dist/google-only.d.ts +543 -13
- package/dist/google-only.js +11 -8
- package/dist/google-only.js.map +1 -1
- package/dist/index.cjs +2061 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5007 -144
- package/dist/index.js +13507 -116
- package/dist/index.js.map +1 -1
- package/dist/login-react.css +1 -1
- package/dist/plugin-5qRh-YhX.js +596 -0
- package/dist/plugin-5qRh-YhX.js.map +1 -0
- package/dist/plugin-BtYBW6JY.cjs +1 -0
- package/dist/plugin-BtYBW6JY.cjs.map +1 -0
- package/dist/sanitization-Bo_tn-L2.cjs +1 -0
- package/dist/sanitization-Bo_tn-L2.cjs.map +1 -0
- package/dist/sanitization-CQ-H1MSg.js +39 -0
- package/dist/sanitization-CQ-H1MSg.js.map +1 -0
- package/dist/shamir-AeLLfw0p.cjs +1 -0
- package/dist/shamir-AeLLfw0p.cjs.map +1 -0
- package/dist/{solanaKeypair-BlXol3nh.js → shamir-B0wConeK.js} +765 -757
- package/dist/shamir-B0wConeK.js.map +1 -0
- package/dist/silentWalletEnroll-B8pgdKZO.cjs +1 -0
- package/dist/silentWalletEnroll-B8pgdKZO.cjs.map +1 -0
- package/dist/silentWalletEnroll-DR2kPw7W.js +41 -0
- package/dist/silentWalletEnroll-DR2kPw7W.js.map +1 -0
- package/dist/solana-only.cjs +1 -1
- package/dist/solana-only.d.ts +594 -13
- package/dist/solana-only.js +12 -9
- package/dist/solana-only.js.map +1 -1
- package/dist/style.d.ts +1 -0
- package/dist/useAdminDeposits-BDY5KJ0-.js +151 -0
- package/dist/useAdminDeposits-BDY5KJ0-.js.map +1 -0
- package/dist/useAdminDeposits-Dvx3_UUE.cjs +1 -0
- package/dist/useAdminDeposits-Dvx3_UUE.cjs.map +1 -0
- package/dist/{ErrorMessage-DU2VBb85.js → useAuth-Bge6KaWN.js} +954 -1226
- package/dist/useAuth-Bge6KaWN.js.map +1 -0
- package/dist/useAuth-DhIDTLRd.cjs +1 -0
- package/dist/useAuth-DhIDTLRd.cjs.map +1 -0
- package/dist/useOrgs-Be3KH4ib.js +215 -0
- package/dist/useOrgs-Be3KH4ib.js.map +1 -0
- package/dist/useOrgs-CVbacmaQ.cjs +1 -0
- package/dist/useOrgs-CVbacmaQ.cjs.map +1 -0
- package/dist/useSystemSettings-D9Cr7ZTl.cjs +1 -0
- package/dist/useSystemSettings-D9Cr7ZTl.cjs.map +1 -0
- package/dist/useSystemSettings-DN5YqfNq.js +97 -0
- package/dist/useSystemSettings-DN5YqfNq.js.map +1 -0
- package/dist/{validation-BebL7hMF.js → validation-B8kMV3BL.js} +1 -1
- package/dist/{validation-BebL7hMF.js.map → validation-B8kMV3BL.js.map} +1 -1
- package/dist/{validation-BeXIfuHB.cjs → validation-BuGQrA-K.cjs} +1 -1
- package/dist/{validation-BeXIfuHB.cjs.map → validation-BuGQrA-K.cjs.map} +1 -1
- package/package.json +11 -1
- package/dist/AuthenticationSettings-BSoIQ58T.js.map +0 -1
- package/dist/AuthenticationSettings-CNmWEPFV.cjs +0 -1
- package/dist/AuthenticationSettings-CNmWEPFV.cjs.map +0 -1
- package/dist/CreditSystemSettings-BYxoFwaP.js +0 -9
- package/dist/CreditSystemSettings-BYxoFwaP.js.map +0 -1
- package/dist/CreditSystemSettings-D2fLorNx.cjs +0 -1
- package/dist/CreditSystemSettings-D2fLorNx.cjs.map +0 -1
- package/dist/DepositsSection-CGKCzM-H.cjs +0 -1
- package/dist/EmailRegisterForm-C0PStlj5.js +0 -961
- package/dist/EmailRegisterForm-C0PStlj5.js.map +0 -1
- package/dist/EmailRegisterForm-DaPLGws2.cjs +0 -1
- package/dist/EmailRegisterForm-DaPLGws2.cjs.map +0 -1
- package/dist/EmailSettings-CiLDwzNb.cjs +0 -1
- package/dist/EmailSettings-CiLDwzNb.cjs.map +0 -1
- package/dist/EmailSettings-DTjpO65J.js +0 -9
- package/dist/EmailSettings-DTjpO65J.js.map +0 -1
- package/dist/EmbeddedWalletSettings-CX7sYiPy.cjs +0 -1
- package/dist/EmbeddedWalletSettings-CX7sYiPy.cjs.map +0 -1
- package/dist/EmbeddedWalletSettings-iVf_3pn3.js.map +0 -1
- package/dist/ErrorMessage-BXHiYibN.cjs +0 -1
- package/dist/ErrorMessage-BXHiYibN.cjs.map +0 -1
- package/dist/ErrorMessage-DU2VBb85.js.map +0 -1
- package/dist/GoogleLoginButton-DoAdOqb3.cjs +0 -1
- package/dist/ServerSettings-C_osdbiX.js.map +0 -1
- package/dist/ServerSettings-HqSb_VDj.cjs +0 -1
- package/dist/ServerSettings-HqSb_VDj.cjs.map +0 -1
- package/dist/SolanaLoginButton-CPzms0kf.cjs +0 -1
- package/dist/TeamSection-Bjt72upx.js.map +0 -1
- package/dist/TeamSection-DZeWHkLd.cjs +0 -1
- package/dist/TeamSection-DZeWHkLd.cjs.map +0 -1
- package/dist/UsersSection-DU86czWP.cjs +0 -1
- package/dist/WebhookSettings-Br9bakAL.cjs +0 -1
- package/dist/WebhookSettings-Br9bakAL.cjs.map +0 -1
- package/dist/WebhookSettings-IyhyTFes.js.map +0 -1
- package/dist/WithdrawalsSection-B1415d-G.js +0 -20
- package/dist/WithdrawalsSection-iZJBuZ7O.cjs +0 -1
- package/dist/admin/AdminShell.d.ts +0 -38
- package/dist/admin/icons.d.ts +0 -2
- package/dist/admin/index.d.ts +0 -10
- package/dist/admin/plugin.d.ts +0 -3
- package/dist/admin/sections/AuthenticationSettings.d.ts +0 -3
- package/dist/admin/sections/CreditSystemSettings.d.ts +0 -3
- package/dist/admin/sections/DepositsSection.d.ts +0 -3
- package/dist/admin/sections/EmailSettings.d.ts +0 -3
- package/dist/admin/sections/EmbeddedWalletSettings.d.ts +0 -3
- package/dist/admin/sections/FeatureSettings.d.ts +0 -3
- package/dist/admin/sections/InvitesSection.d.ts +0 -3
- package/dist/admin/sections/MembersSection.d.ts +0 -3
- package/dist/admin/sections/ServerSettings.d.ts +0 -3
- package/dist/admin/sections/SettingsSections.d.ts +0 -7
- package/dist/admin/sections/TeamSection.d.ts +0 -3
- package/dist/admin/sections/UsersSection.d.ts +0 -3
- package/dist/admin/sections/WebhookSettings.d.ts +0 -3
- package/dist/admin/sections/WithdrawalsSection.d.ts +0 -3
- package/dist/components/LoginButton.d.ts +0 -23
- package/dist/components/LoginForm.d.ts +0 -9
- package/dist/components/LoginModal.d.ts +0 -9
- package/dist/components/admin/AdminUserDetail.d.ts +0 -23
- package/dist/components/admin/AdminUserList.d.ts +0 -21
- package/dist/components/admin/CedrosAdminDashboard.d.ts +0 -52
- package/dist/components/admin/PermissionsSection.d.ts +0 -7
- package/dist/components/admin/ProfileDropdown.d.ts +0 -34
- package/dist/components/admin/SetupWizard.d.ts +0 -30
- package/dist/components/admin/StatsBar.d.ts +0 -17
- package/dist/components/admin/SystemSettings.d.ts +0 -19
- package/dist/components/admin/settings/AuthenticationSettings.d.ts +0 -4
- package/dist/components/admin/settings/AutosaveStatus.d.ts +0 -6
- package/dist/components/admin/settings/CreditSystemSettings.d.ts +0 -6
- package/dist/components/admin/settings/EmailSettings.d.ts +0 -4
- package/dist/components/admin/settings/EmbeddedWalletSettings.d.ts +0 -4
- package/dist/components/admin/settings/FeatureSettings.d.ts +0 -4
- package/dist/components/admin/settings/MessagingSettings.d.ts +0 -4
- package/dist/components/admin/settings/SecuritySettings.d.ts +0 -4
- package/dist/components/admin/settings/ServerSettings.d.ts +0 -4
- package/dist/components/admin/settings/SettingsPageLayout.d.ts +0 -16
- package/dist/components/admin/settings/SsoProvidersSettings.d.ts +0 -4
- package/dist/components/admin/settings/WebhookSettings.d.ts +0 -4
- package/dist/components/admin/settings/index.d.ts +0 -31
- package/dist/components/admin/settings/settingsInputs.d.ts +0 -79
- package/dist/components/admin/settings/settingsMetadata.d.ts +0 -18
- package/dist/components/apple/AppleLoginButton.d.ts +0 -29
- package/dist/components/deposit/CreditBalance.d.ts +0 -19
- package/dist/components/deposit/DepositFlow.d.ts +0 -118
- package/dist/components/deposit/FeeConfigDisplay.d.ts +0 -15
- package/dist/components/deposit/History.d.ts +0 -21
- package/dist/components/deposit/TieredAmountSlider.d.ts +0 -19
- package/dist/components/deposit/TokenSelector.d.ts +0 -23
- package/dist/components/deposit/admin/AdminDepositList.d.ts +0 -21
- package/dist/components/deposit/admin/AdminDepositStats.d.ts +0 -15
- package/dist/components/deposit/admin/AdminPrivacyPeriodDeposits.d.ts +0 -19
- package/dist/components/deposit/admin/AdminWithdrawalHistory.d.ts +0 -19
- package/dist/components/deposit/admin/AdminWithdrawalQueue.d.ts +0 -23
- package/dist/components/deposit/admin/AdminWithdrawalStats.d.ts +0 -10
- package/dist/components/deposit/admin/FeatureDisabledMessage.d.ts +0 -15
- package/dist/components/deposit/admin/PrivacySystemStatus.d.ts +0 -15
- package/dist/components/deposit/admin/featureDisabled.d.ts +0 -14
- package/dist/components/deposit/admin/index.d.ts +0 -22
- package/dist/components/deposit/index.d.ts +0 -12
- package/dist/components/deposit/tierUtils.d.ts +0 -8
- package/dist/components/deposit/tokens.d.ts +0 -19
- package/dist/components/email/EmailLoginForm.d.ts +0 -11
- package/dist/components/email/EmailRegisterForm.d.ts +0 -14
- package/dist/components/email/ForgotPasswordForm.d.ts +0 -17
- package/dist/components/email/PasswordInput.d.ts +0 -14
- package/dist/components/email/ResetPasswordForm.d.ts +0 -22
- package/dist/components/google/GoogleLoginButton.d.ts +0 -12
- package/dist/components/invites/InviteForm.d.ts +0 -38
- package/dist/components/invites/InviteList.d.ts +0 -40
- package/dist/components/members/MemberList.d.ts +0 -47
- package/dist/components/org/CreateOrgForm.d.ts +0 -7
- package/dist/components/org/OrgAvatar.d.ts +0 -7
- package/dist/components/org/OrgListView.d.ts +0 -9
- package/dist/components/org/OrgSelector.d.ts +0 -52
- package/dist/components/org/OrgSwitcher.d.ts +0 -47
- package/dist/components/org/icons.d.ts +0 -8
- package/dist/components/profile/UserProfileSettings.d.ts +0 -35
- package/dist/components/profile/index.d.ts +0 -2
- package/dist/components/sessions/SessionList.d.ts +0 -33
- package/dist/components/shared/ErrorBoundary.d.ts +0 -38
- package/dist/components/shared/ErrorMessage.d.ts +0 -14
- package/dist/components/shared/LoadingSpinner.d.ts +0 -16
- package/dist/components/solana/SolanaLoginButton.d.ts +0 -49
- package/dist/components/templates/FullPageLayout.d.ts +0 -40
- package/dist/components/templates/SplitPageLayout.d.ts +0 -44
- package/dist/components/templates/index.d.ts +0 -4
- package/dist/components/totp/OtpInput.d.ts +0 -32
- package/dist/components/totp/QrCode.d.ts +0 -21
- package/dist/components/totp/TotpSettings.d.ts +0 -38
- package/dist/components/totp/TotpSetup.d.ts +0 -23
- package/dist/components/totp/TotpVerify.d.ts +0 -25
- package/dist/components/totp/index.d.ts +0 -10
- package/dist/components/wallet/CapabilityWarning.d.ts +0 -11
- package/dist/components/wallet/PasskeyPrompt.d.ts +0 -34
- package/dist/components/wallet/RecoveryPhraseDisplay.d.ts +0 -18
- package/dist/components/wallet/RecoveryPhraseInput.d.ts +0 -21
- package/dist/components/wallet/WalletAddressRow.d.ts +0 -10
- package/dist/components/wallet/WalletEnrollment.d.ts +0 -15
- package/dist/components/wallet/WalletManager.d.ts +0 -9
- package/dist/components/wallet/WalletRecovery.d.ts +0 -19
- package/dist/components/wallet/WalletStatus.d.ts +0 -28
- package/dist/components/wallet/WalletUnlock.d.ts +0 -23
- package/dist/components/wallet/index.d.ts +0 -23
- package/dist/components/webauthn/PasskeyLoginButton.d.ts +0 -8
- package/dist/context/CedrosLoginContext.d.ts +0 -24
- package/dist/context/CedrosLoginProvider.d.ts +0 -17
- package/dist/context/EmbeddedWalletExposure.d.ts +0 -19
- package/dist/context/useCedrosLogin.d.ts +0 -12
- package/dist/crypto/aesGcm.d.ts +0 -89
- package/dist/crypto/argon2.d.ts +0 -65
- package/dist/crypto/argon2Worker.d.ts +0 -1
- package/dist/crypto/argon2WorkerClient.d.ts +0 -28
- package/dist/crypto/bip39.d.ts +0 -106
- package/dist/crypto/capabilities.d.ts +0 -35
- package/dist/crypto/entropy.d.ts +0 -56
- package/dist/crypto/hkdf.d.ts +0 -38
- package/dist/crypto/index.d.ts +0 -30
- package/dist/crypto/secureWipe.d.ts +0 -71
- package/dist/crypto/shamir.d.ts +0 -52
- package/dist/crypto/solanaKeypair.d.ts +0 -63
- package/dist/crypto/types.d.ts +0 -134
- package/dist/crypto/webauthnPrf.d.ts +0 -108
- package/dist/hooks/useAdminDeposits.d.ts +0 -10
- package/dist/hooks/useAdminUsers.d.ts +0 -28
- package/dist/hooks/useAppleAuth.d.ts +0 -52
- package/dist/hooks/useAuth.d.ts +0 -34
- package/dist/hooks/useAuthSession.d.ts +0 -19
- package/dist/hooks/useAuthorize.d.ts +0 -62
- package/dist/hooks/useCredits.d.ts +0 -11
- package/dist/hooks/useDashboardPermissions.d.ts +0 -45
- package/dist/hooks/useDeposit.d.ts +0 -16
- package/dist/hooks/useEmailAuth.d.ts +0 -60
- package/dist/hooks/useGoogleAuth.d.ts +0 -67
- package/dist/hooks/useInstantLink.d.ts +0 -42
- package/dist/hooks/useInvites.d.ts +0 -57
- package/dist/hooks/useMembers.d.ts +0 -52
- package/dist/hooks/useOrgs.d.ts +0 -49
- package/dist/hooks/usePasswordReset.d.ts +0 -32
- package/dist/hooks/usePendingRecovery.d.ts +0 -34
- package/dist/hooks/useProfile.d.ts +0 -35
- package/dist/hooks/useRateLimiter.d.ts +0 -58
- package/dist/hooks/useServerFeatures.d.ts +0 -55
- package/dist/hooks/useSessions.d.ts +0 -45
- package/dist/hooks/useSettingsAutosave.d.ts +0 -29
- package/dist/hooks/useSetup.d.ts +0 -25
- package/dist/hooks/useSolanaAuth.d.ts +0 -30
- package/dist/hooks/useSsoProviders.d.ts +0 -52
- package/dist/hooks/useSystemSettings.d.ts +0 -47
- package/dist/hooks/useThemeManager.d.ts +0 -11
- package/dist/hooks/useTotp.d.ts +0 -52
- package/dist/hooks/useTotpVerify.d.ts +0 -38
- package/dist/hooks/useTransactionSigning.d.ts +0 -45
- package/dist/hooks/useWallet.d.ts +0 -10
- package/dist/hooks/useWalletDiscovery.d.ts +0 -24
- package/dist/hooks/useWalletEnrollment.d.ts +0 -9
- package/dist/hooks/useWalletMaterial.d.ts +0 -10
- package/dist/hooks/useWalletRecovery.d.ts +0 -9
- package/dist/hooks/useWalletSigning.d.ts +0 -31
- package/dist/hooks/useWebAuthn.d.ts +0 -25
- package/dist/i18n/I18nProvider.d.ts +0 -16
- package/dist/i18n/context.d.ts +0 -6
- package/dist/i18n/index.d.ts +0 -5
- package/dist/i18n/translations.d.ts +0 -66
- package/dist/i18n/useI18n.d.ts +0 -9
- package/dist/index-ZS9AwAal.cjs +0 -2061
- package/dist/index-ZS9AwAal.cjs.map +0 -1
- package/dist/index-dgg5tlO7.js +0 -19650
- package/dist/index-dgg5tlO7.js.map +0 -1
- package/dist/silentWalletEnroll-C3JRAD9_.js +0 -42
- package/dist/silentWalletEnroll-C3JRAD9_.js.map +0 -1
- package/dist/silentWalletEnroll-DRYQAQfg.cjs +0 -1
- package/dist/silentWalletEnroll-DRYQAQfg.cjs.map +0 -1
- package/dist/solanaKeypair-BlXol3nh.js.map +0 -1
- package/dist/solanaKeypair-C-lIR1JY.cjs +0 -1
- package/dist/solanaKeypair-C-lIR1JY.cjs.map +0 -1
- package/dist/types/adminUser.d.ts +0 -168
- package/dist/types/auth.d.ts +0 -122
- package/dist/types/config.d.ts +0 -266
- package/dist/types/deposit.d.ts +0 -490
- package/dist/types/index.d.ts +0 -13
- package/dist/types/invite.d.ts +0 -71
- package/dist/types/member.d.ts +0 -45
- package/dist/types/org.d.ts +0 -133
- package/dist/types/profile.d.ts +0 -56
- package/dist/types/session.d.ts +0 -28
- package/dist/types/setup.d.ts +0 -47
- package/dist/types/systemSettings.d.ts +0 -85
- package/dist/types/totp.d.ts +0 -52
- package/dist/types/wallet.d.ts +0 -309
- package/dist/utils/adminUserApi.d.ts +0 -60
- package/dist/utils/apiClient.d.ts +0 -78
- package/dist/utils/cryptoShim.d.ts +0 -17
- package/dist/utils/csrf.d.ts +0 -1
- package/dist/utils/deviceDetection.d.ts +0 -17
- package/dist/utils/embeddedWallet.d.ts +0 -75
- package/dist/utils/inviteApi.d.ts +0 -31
- package/dist/utils/memberApi.d.ts +0 -23
- package/dist/utils/orgApi.d.ts +0 -36
- package/dist/utils/profileApi.d.ts +0 -26
- package/dist/utils/sanitization.d.ts +0 -66
- package/dist/utils/sessionApi.d.ts +0 -16
- package/dist/utils/setupApi.d.ts +0 -21
- package/dist/utils/silentWalletEnroll.d.ts +0 -41
- package/dist/utils/systemSettingsApi.d.ts +0 -18
- package/dist/utils/tabSync.d.ts +0 -46
- package/dist/utils/tokenManager.d.ts +0 -107
- package/dist/utils/unlockCredential.d.ts +0 -5
- package/dist/utils/validation.d.ts +0 -48
- package/dist/utils/walletDetection.d.ts +0 -23
- package/dist/utils/webauthnJson.d.ts +0 -21
package/README.md
CHANGED
|
@@ -152,6 +152,13 @@ function AuthStatus() {
|
|
|
152
152
|
| `TotpVerify` | Verification prompt during login |
|
|
153
153
|
| `OtpInput` | 6-digit code input component |
|
|
154
154
|
|
|
155
|
+
### User Withdrawals
|
|
156
|
+
|
|
157
|
+
| Component | Description |
|
|
158
|
+
|-----------|-------------|
|
|
159
|
+
| `WithdrawalFlow` | Multi-step withdrawal wizard (token select, amount, confirm, success) |
|
|
160
|
+
| `WithdrawalHistory` | Paginated withdrawal history with Solana explorer links |
|
|
161
|
+
|
|
155
162
|
### Privacy Cash (Deposits & Credits)
|
|
156
163
|
|
|
157
164
|
| Component | Description |
|
|
@@ -456,6 +463,22 @@ const {
|
|
|
456
463
|
} = useSessions();
|
|
457
464
|
```
|
|
458
465
|
|
|
466
|
+
### User Withdrawals
|
|
467
|
+
|
|
468
|
+
```tsx
|
|
469
|
+
// Withdraw SOL/SPL tokens to external addresses
|
|
470
|
+
const {
|
|
471
|
+
getBalances, // Fetch SOL + SPL token balances from wallet
|
|
472
|
+
withdrawSol, // Withdraw native SOL (destination, amountLamports)
|
|
473
|
+
withdrawSpl, // Withdraw SPL token (destination, tokenMint, amount)
|
|
474
|
+
getHistory, // Paginated withdrawal history (limit, offset)
|
|
475
|
+
isSubmitting, // True while withdrawal is in flight
|
|
476
|
+
error, // Error message or null
|
|
477
|
+
clearError, // Clear error state
|
|
478
|
+
lastResult, // Most recent WithdrawalResponse
|
|
479
|
+
} = useWithdrawal();
|
|
480
|
+
```
|
|
481
|
+
|
|
459
482
|
### Privacy Cash (Deposits & Credits)
|
|
460
483
|
|
|
461
484
|
```tsx
|
|
@@ -984,6 +1007,45 @@ function InviteButton({ orgId }) {
|
|
|
984
1007
|
}
|
|
985
1008
|
```
|
|
986
1009
|
|
|
1010
|
+
### User Withdrawals
|
|
1011
|
+
|
|
1012
|
+
Withdraw SOL or SPL tokens from the user's embedded wallet to any external Solana address.
|
|
1013
|
+
Requires `feature_user_withdrawals` to be enabled via system settings.
|
|
1014
|
+
|
|
1015
|
+
```tsx
|
|
1016
|
+
import { WithdrawalFlow, WithdrawalHistory, useWithdrawal } from '@cedros/login-react';
|
|
1017
|
+
|
|
1018
|
+
// Multi-step withdrawal wizard
|
|
1019
|
+
function WithdrawPage() {
|
|
1020
|
+
return (
|
|
1021
|
+
<div>
|
|
1022
|
+
<WithdrawalFlow
|
|
1023
|
+
onSuccess={(result) => console.log('Sent:', result.txSignature)}
|
|
1024
|
+
onCancel={() => console.log('Cancelled')}
|
|
1025
|
+
/>
|
|
1026
|
+
|
|
1027
|
+
<WithdrawalHistory
|
|
1028
|
+
pageSize={10}
|
|
1029
|
+
onTransactionClick={(item) => console.log('Clicked:', item)}
|
|
1030
|
+
/>
|
|
1031
|
+
</div>
|
|
1032
|
+
);
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
// Using the hook directly
|
|
1036
|
+
function CustomWithdraw() {
|
|
1037
|
+
const { getBalances, withdrawSol, withdrawSpl, getHistory, isSubmitting } = useWithdrawal();
|
|
1038
|
+
|
|
1039
|
+
const handleWithdraw = async () => {
|
|
1040
|
+
const balances = await getBalances();
|
|
1041
|
+
const result = await withdrawSol('DestinationAddress...', 100_000_000);
|
|
1042
|
+
console.log('Tx:', result.txSignature, 'Fee:', result.feeLamports);
|
|
1043
|
+
};
|
|
1044
|
+
|
|
1045
|
+
return <button onClick={handleWithdraw} disabled={isSubmitting}>Withdraw</button>;
|
|
1046
|
+
}
|
|
1047
|
+
```
|
|
1048
|
+
|
|
987
1049
|
### Privacy Cash
|
|
988
1050
|
|
|
989
1051
|
**Deposits work in all wallet recovery modes**, but private (privacy-preserving) deposits require the wallet to be configured in "no-recovery" mode for security reasons.
|
|
@@ -1260,6 +1322,12 @@ import type {
|
|
|
1260
1322
|
SignTransactionRequest,
|
|
1261
1323
|
SignTransactionResponse,
|
|
1262
1324
|
|
|
1325
|
+
// User Withdrawal types
|
|
1326
|
+
WithdrawalResponse,
|
|
1327
|
+
WalletBalancesResponse,
|
|
1328
|
+
UserWithdrawalHistoryItem,
|
|
1329
|
+
UserWithdrawalHistoryResponse,
|
|
1330
|
+
|
|
1263
1331
|
// Privacy Cash types
|
|
1264
1332
|
DepositRequest,
|
|
1265
1333
|
DepositResponse,
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { jsxs as a, jsx as t, Fragment as W } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u, useCallback as T, useEffect as D, useMemo as V } from "react";
|
|
3
|
+
import { u as O } from "./useAdminDeposits-BDY5KJ0-.js";
|
|
4
|
+
import { S as B } from "./StatsBar-BX-hHtTq.js";
|
|
5
|
+
function Y({
|
|
6
|
+
refreshInterval: s = 0,
|
|
7
|
+
className: r = "",
|
|
8
|
+
onLoad: b
|
|
9
|
+
}) {
|
|
10
|
+
const { getStats: g, isLoading: y, error: f, clearError: A } = O(), [d, C] = u(null), [L, l] = u(null), m = T(async () => {
|
|
11
|
+
try {
|
|
12
|
+
const i = await g();
|
|
13
|
+
C(i), b?.(i), l(null);
|
|
14
|
+
} catch (i) {
|
|
15
|
+
const S = i && typeof i == "object" && "message" in i ? String(i.message) : "Failed to load stats";
|
|
16
|
+
l(S);
|
|
17
|
+
}
|
|
18
|
+
}, [g, b]);
|
|
19
|
+
D(() => {
|
|
20
|
+
m();
|
|
21
|
+
}, [m]), D(() => {
|
|
22
|
+
if (s <= 0) return;
|
|
23
|
+
const i = setInterval(m, s);
|
|
24
|
+
return () => clearInterval(i);
|
|
25
|
+
}, [s, m]);
|
|
26
|
+
const N = L || f;
|
|
27
|
+
return N ? /* @__PURE__ */ a("div", { className: `cedros-admin-stats cedros-admin-stats-error ${r}`, children: [
|
|
28
|
+
/* @__PURE__ */ t("p", { className: "cedros-admin-error", children: N }),
|
|
29
|
+
/* @__PURE__ */ t(
|
|
30
|
+
"button",
|
|
31
|
+
{
|
|
32
|
+
type: "button",
|
|
33
|
+
className: "cedros-button cedros-button-outline",
|
|
34
|
+
onClick: () => {
|
|
35
|
+
A(), l(null), m();
|
|
36
|
+
},
|
|
37
|
+
children: "Retry"
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
] }) : y && !d ? /* @__PURE__ */ a("div", { className: `cedros-admin-stats cedros-admin-stats-loading ${r}`, children: [
|
|
41
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-loading-indicator" }),
|
|
42
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-loading-text", children: "Loading statistics..." })
|
|
43
|
+
] }) : d ? /* @__PURE__ */ t("div", { className: `cedros-admin-stats ${r}`, children: /* @__PURE__ */ t(
|
|
44
|
+
B,
|
|
45
|
+
{
|
|
46
|
+
stats: [
|
|
47
|
+
{ label: "Total Deposits", value: d.totalDeposits },
|
|
48
|
+
{ label: "Private Deposits", value: d.inPrivacyPeriodCount ?? 0 },
|
|
49
|
+
{ label: "Standard Deposits", value: d.readyForWithdrawalCount ?? 0 },
|
|
50
|
+
{ label: "Microdeposits", value: d.nativeSolDepositCount ?? 0 }
|
|
51
|
+
],
|
|
52
|
+
isLoading: y,
|
|
53
|
+
onRefresh: m
|
|
54
|
+
}
|
|
55
|
+
) }) : null;
|
|
56
|
+
}
|
|
57
|
+
function K(s) {
|
|
58
|
+
return {
|
|
59
|
+
pending: "Pending",
|
|
60
|
+
detected: "Detected",
|
|
61
|
+
processing: "Processing",
|
|
62
|
+
completed: "Completed",
|
|
63
|
+
withdrawn: "Withdrawn",
|
|
64
|
+
partially_withdrawn: "Partially Withdrawn",
|
|
65
|
+
expired: "Expired",
|
|
66
|
+
failed: "Failed"
|
|
67
|
+
}[s] || s;
|
|
68
|
+
}
|
|
69
|
+
function U(s) {
|
|
70
|
+
return s === "completed" || s === "withdrawn" || s === "partially_withdrawn" ? "cedros-admin-deposit-success" : s === "failed" || s === "expired" ? "cedros-admin-deposit-error" : s === "processing" || s === "detected" ? "cedros-admin-deposit-processing" : "cedros-admin-deposit-pending";
|
|
71
|
+
}
|
|
72
|
+
function q(s) {
|
|
73
|
+
return s == null ? "—" : `${(s / 1e9).toFixed(4)} SOL`;
|
|
74
|
+
}
|
|
75
|
+
function G(s) {
|
|
76
|
+
return new Date(s).toLocaleDateString(void 0, {
|
|
77
|
+
year: "numeric",
|
|
78
|
+
month: "short",
|
|
79
|
+
day: "numeric",
|
|
80
|
+
hour: "2-digit",
|
|
81
|
+
minute: "2-digit"
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function F(s) {
|
|
85
|
+
return s.length <= 12 ? s : `${s.slice(0, 6)}...${s.slice(-4)}`;
|
|
86
|
+
}
|
|
87
|
+
function Z({
|
|
88
|
+
statusFilter: s,
|
|
89
|
+
pageSize: r = 20,
|
|
90
|
+
refreshInterval: b = 0,
|
|
91
|
+
className: g = "",
|
|
92
|
+
onLoad: y,
|
|
93
|
+
onDepositClick: f
|
|
94
|
+
}) {
|
|
95
|
+
const { listDeposits: A, isLoading: d, error: C, clearError: L } = O(), [l, m] = u([]), [N, i] = u(0), [S, P] = u(0), [R, k] = u(null), [n, j] = u("createdAt"), [c, I] = u("desc"), x = (e) => {
|
|
96
|
+
n === e ? I(c === "asc" ? "desc" : "asc") : (j(e), I("desc"));
|
|
97
|
+
}, _ = V(() => [...l].sort((e, o) => {
|
|
98
|
+
let p, h;
|
|
99
|
+
switch (n) {
|
|
100
|
+
case "userId":
|
|
101
|
+
p = e.userId.toLowerCase(), h = o.userId.toLowerCase();
|
|
102
|
+
break;
|
|
103
|
+
case "amountLamports":
|
|
104
|
+
p = e.amountLamports ?? 0, h = o.amountLamports ?? 0;
|
|
105
|
+
break;
|
|
106
|
+
case "status":
|
|
107
|
+
p = e.status, h = o.status;
|
|
108
|
+
break;
|
|
109
|
+
case "createdAt":
|
|
110
|
+
p = new Date(e.createdAt).getTime(), h = new Date(o.createdAt).getTime();
|
|
111
|
+
break;
|
|
112
|
+
case "txSignature":
|
|
113
|
+
p = e.txSignature || "", h = o.txSignature || "";
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
return p < h ? c === "asc" ? -1 : 1 : p > h ? c === "asc" ? 1 : -1 : 0;
|
|
119
|
+
}), [l, n, c]), v = T(async () => {
|
|
120
|
+
try {
|
|
121
|
+
const e = await A({ status: s, limit: r, offset: S });
|
|
122
|
+
m(e.deposits), i(e.total), y?.(e), k(null);
|
|
123
|
+
} catch (e) {
|
|
124
|
+
const o = e && typeof e == "object" && "message" in e ? String(e.message) : "Failed to load deposits";
|
|
125
|
+
k(o);
|
|
126
|
+
}
|
|
127
|
+
}, [s, r, S, A, y]);
|
|
128
|
+
D(() => {
|
|
129
|
+
P(0);
|
|
130
|
+
}, [s, r]), D(() => {
|
|
131
|
+
v();
|
|
132
|
+
}, [v]), D(() => {
|
|
133
|
+
if (b <= 0) return;
|
|
134
|
+
const e = setInterval(v, b);
|
|
135
|
+
return () => clearInterval(e);
|
|
136
|
+
}, [b, v]);
|
|
137
|
+
const $ = Math.ceil(N / r), w = Math.floor(S / r) + 1, E = (e) => {
|
|
138
|
+
const o = (e - 1) * r;
|
|
139
|
+
P(Math.max(0, Math.min(o, Math.max(0, N - 1))));
|
|
140
|
+
}, M = R || C;
|
|
141
|
+
return M ? /* @__PURE__ */ a("div", { className: `cedros-admin-deposit-list cedros-admin-deposit-list-error ${g}`, children: [
|
|
142
|
+
/* @__PURE__ */ t("p", { className: "cedros-admin-error", children: M }),
|
|
143
|
+
/* @__PURE__ */ t(
|
|
144
|
+
"button",
|
|
145
|
+
{
|
|
146
|
+
type: "button",
|
|
147
|
+
className: "cedros-button cedros-button-outline",
|
|
148
|
+
onClick: () => {
|
|
149
|
+
L(), k(null), v();
|
|
150
|
+
},
|
|
151
|
+
children: "Retry"
|
|
152
|
+
}
|
|
153
|
+
)
|
|
154
|
+
] }) : d && l.length === 0 ? /* @__PURE__ */ a("div", { className: `cedros-admin-deposit-list cedros-admin-deposit-list-loading ${g}`, children: [
|
|
155
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-loading-indicator" }),
|
|
156
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-loading-text", children: "Loading deposits..." })
|
|
157
|
+
] }) : /* @__PURE__ */ a("div", { className: `cedros-admin-deposit-list ${g}`, children: [
|
|
158
|
+
/* @__PURE__ */ a("div", { className: "cedros-admin-deposit-list-header", children: [
|
|
159
|
+
/* @__PURE__ */ t("h4", { className: "cedros-admin-deposit-list-title", children: "All Deposits" }),
|
|
160
|
+
/* @__PURE__ */ t(
|
|
161
|
+
"button",
|
|
162
|
+
{
|
|
163
|
+
type: "button",
|
|
164
|
+
className: "cedros-admin__stats-bar-refresh",
|
|
165
|
+
onClick: v,
|
|
166
|
+
disabled: d,
|
|
167
|
+
title: "Refresh deposits",
|
|
168
|
+
"aria-label": "Refresh deposits",
|
|
169
|
+
children: d ? "..." : "↻"
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
] }),
|
|
173
|
+
l.length === 0 ? /* @__PURE__ */ t("div", { className: "cedros-admin-empty", children: /* @__PURE__ */ t("p", { className: "cedros-admin-empty-message", children: "No deposits found." }) }) : /* @__PURE__ */ a(W, { children: [
|
|
174
|
+
/* @__PURE__ */ a("div", { className: "cedros-admin-deposit-table", children: [
|
|
175
|
+
/* @__PURE__ */ a("div", { className: "cedros-admin-deposit-thead", children: [
|
|
176
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
|
|
177
|
+
"button",
|
|
178
|
+
{
|
|
179
|
+
type: "button",
|
|
180
|
+
className: `cedros-admin-sort-button ${n === "userId" ? "cedros-admin-sort-active" : ""}`,
|
|
181
|
+
onClick: () => x("userId"),
|
|
182
|
+
"aria-label": "Sort by user",
|
|
183
|
+
children: [
|
|
184
|
+
"User",
|
|
185
|
+
" ",
|
|
186
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-sort-icon", children: n === "userId" ? c === "asc" ? "↑" : "↓" : "↕" })
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
) }),
|
|
190
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
|
|
191
|
+
"button",
|
|
192
|
+
{
|
|
193
|
+
type: "button",
|
|
194
|
+
className: `cedros-admin-sort-button ${n === "amountLamports" ? "cedros-admin-sort-active" : ""}`,
|
|
195
|
+
onClick: () => x("amountLamports"),
|
|
196
|
+
"aria-label": "Sort by amount",
|
|
197
|
+
children: [
|
|
198
|
+
"Amount",
|
|
199
|
+
" ",
|
|
200
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-sort-icon", children: n === "amountLamports" ? c === "asc" ? "↑" : "↓" : "↕" })
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
) }),
|
|
204
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
|
|
205
|
+
"button",
|
|
206
|
+
{
|
|
207
|
+
type: "button",
|
|
208
|
+
className: `cedros-admin-sort-button ${n === "status" ? "cedros-admin-sort-active" : ""}`,
|
|
209
|
+
onClick: () => x("status"),
|
|
210
|
+
"aria-label": "Sort by status",
|
|
211
|
+
children: [
|
|
212
|
+
"Status",
|
|
213
|
+
" ",
|
|
214
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-sort-icon", children: n === "status" ? c === "asc" ? "↑" : "↓" : "↕" })
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
) }),
|
|
218
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
|
|
219
|
+
"button",
|
|
220
|
+
{
|
|
221
|
+
type: "button",
|
|
222
|
+
className: `cedros-admin-sort-button ${n === "createdAt" ? "cedros-admin-sort-active" : ""}`,
|
|
223
|
+
onClick: () => x("createdAt"),
|
|
224
|
+
"aria-label": "Sort by created",
|
|
225
|
+
children: [
|
|
226
|
+
"Created",
|
|
227
|
+
" ",
|
|
228
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-sort-icon", children: n === "createdAt" ? c === "asc" ? "↑" : "↓" : "↕" })
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
) }),
|
|
232
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
|
|
233
|
+
"button",
|
|
234
|
+
{
|
|
235
|
+
type: "button",
|
|
236
|
+
className: `cedros-admin-sort-button ${n === "txSignature" ? "cedros-admin-sort-active" : ""}`,
|
|
237
|
+
onClick: () => x("txSignature"),
|
|
238
|
+
"aria-label": "Sort by transaction",
|
|
239
|
+
children: [
|
|
240
|
+
"Tx",
|
|
241
|
+
" ",
|
|
242
|
+
/* @__PURE__ */ t("span", { className: "cedros-admin-sort-icon", children: n === "txSignature" ? c === "asc" ? "↑" : "↓" : "↕" })
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
) })
|
|
246
|
+
] }),
|
|
247
|
+
_.map((e) => /* @__PURE__ */ a(
|
|
248
|
+
"div",
|
|
249
|
+
{
|
|
250
|
+
className: `cedros-admin-deposit-row ${U(e.status)}`,
|
|
251
|
+
onClick: () => f?.(e),
|
|
252
|
+
onKeyDown: (o) => {
|
|
253
|
+
(o.key === "Enter" || o.key === " ") && (o.preventDefault(), f?.(e));
|
|
254
|
+
},
|
|
255
|
+
role: f ? "button" : void 0,
|
|
256
|
+
tabIndex: f ? 0 : void 0,
|
|
257
|
+
children: [
|
|
258
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-td", title: e.userId, children: F(e.userId) }),
|
|
259
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-td", children: q(e.amountLamports) }),
|
|
260
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-td", children: /* @__PURE__ */ t("span", { className: "cedros-admin-status-badge", children: K(e.status) }) }),
|
|
261
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-td", children: G(e.createdAt) }),
|
|
262
|
+
/* @__PURE__ */ t("div", { className: "cedros-admin-deposit-td", title: e.txSignature || void 0, children: e.txSignature ? F(e.txSignature) : "—" })
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
e.id
|
|
266
|
+
))
|
|
267
|
+
] }),
|
|
268
|
+
$ > 1 && /* @__PURE__ */ a("div", { className: "cedros-admin-pagination", children: [
|
|
269
|
+
/* @__PURE__ */ t(
|
|
270
|
+
"button",
|
|
271
|
+
{
|
|
272
|
+
type: "button",
|
|
273
|
+
className: "cedros-button cedros-button-outline cedros-button-sm",
|
|
274
|
+
onClick: () => E(w - 1),
|
|
275
|
+
disabled: w <= 1,
|
|
276
|
+
children: "Previous"
|
|
277
|
+
}
|
|
278
|
+
),
|
|
279
|
+
/* @__PURE__ */ a("span", { className: "cedros-admin-page-info", children: [
|
|
280
|
+
"Page ",
|
|
281
|
+
w,
|
|
282
|
+
" of ",
|
|
283
|
+
$,
|
|
284
|
+
" (",
|
|
285
|
+
N,
|
|
286
|
+
" total)"
|
|
287
|
+
] }),
|
|
288
|
+
/* @__PURE__ */ t(
|
|
289
|
+
"button",
|
|
290
|
+
{
|
|
291
|
+
type: "button",
|
|
292
|
+
className: "cedros-button cedros-button-outline cedros-button-sm",
|
|
293
|
+
onClick: () => E(w + 1),
|
|
294
|
+
disabled: w >= $,
|
|
295
|
+
children: "Next"
|
|
296
|
+
}
|
|
297
|
+
)
|
|
298
|
+
] })
|
|
299
|
+
] })
|
|
300
|
+
] });
|
|
301
|
+
}
|
|
302
|
+
export {
|
|
303
|
+
Y as A,
|
|
304
|
+
Z as a
|
|
305
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminDepositList-Cx0xRwES.js","sources":["../src/components/deposit/admin/AdminDepositStats.tsx","../src/components/deposit/admin/AdminDepositList.tsx"],"sourcesContent":["/**\n * Admin deposit statistics component\n *\n * Shows aggregate statistics for Privacy Cash deposits.\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositStatsResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\nimport { StatsBar } from '../../admin/StatsBar';\n\nexport interface AdminDepositStatsProps {\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when stats are loaded */\n onLoad?: (stats: AdminDepositStatsResponse) => void;\n}\n\n/**\n * Admin deposit statistics display\n *\n * Shows total deposits, withdrawals, and pending amounts.\n */\nexport function AdminDepositStats({\n refreshInterval = 0,\n className = '',\n onLoad,\n}: AdminDepositStatsProps) {\n const { getStats, isLoading, error, clearError } = useAdminDeposits();\n\n const [stats, setStats] = useState<AdminDepositStatsResponse | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const fetchStats = useCallback(async () => {\n try {\n const result = await getStats();\n setStats(result);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load stats';\n setLoadError(message);\n }\n }, [getStats, onLoad]);\n\n // Fetch on mount\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchStats, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchStats]);\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div className={`cedros-admin-stats cedros-admin-stats-error ${className}`}>\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchStats();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state\n if (isLoading && !stats) {\n return (\n <div className={`cedros-admin-stats cedros-admin-stats-loading ${className}`}>\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading statistics...</span>\n </div>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n return (\n <div className={`cedros-admin-stats ${className}`}>\n <StatsBar\n stats={[\n { label: 'Total Deposits', value: stats.totalDeposits },\n { label: 'Private Deposits', value: stats.inPrivacyPeriodCount ?? 0 },\n { label: 'Standard Deposits', value: stats.readyForWithdrawalCount ?? 0 },\n { label: 'Microdeposits', value: stats.nativeSolDepositCount ?? 0 },\n ]}\n isLoading={isLoading}\n onRefresh={fetchStats}\n />\n </div>\n );\n}\n","/**\n * Admin deposit list component\n *\n * Shows a paginated list of all deposits across all users.\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositItem, AdminDepositListResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\n\ntype DepositSortField = 'userId' | 'amountLamports' | 'status' | 'createdAt' | 'txSignature';\ntype SortOrder = 'asc' | 'desc';\n\nexport interface AdminDepositListProps {\n /** Filter by status (comma-separated) */\n statusFilter?: string;\n /** Number of items per page (default: 20) */\n pageSize?: number;\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when list is loaded */\n onLoad?: (response: AdminDepositListResponse) => void;\n /** Callback when a deposit is clicked */\n onDepositClick?: (deposit: AdminDepositItem) => void;\n}\n\ntype DepositStatusType =\n | 'pending'\n | 'detected'\n | 'processing'\n | 'completed'\n | 'withdrawn'\n | 'partially_withdrawn'\n | 'expired'\n | 'failed';\n\nfunction getStatusLabel(status: DepositStatusType): string {\n const labels: Record<DepositStatusType, string> = {\n pending: 'Pending',\n detected: 'Detected',\n processing: 'Processing',\n completed: 'Completed',\n withdrawn: 'Withdrawn',\n partially_withdrawn: 'Partially Withdrawn',\n expired: 'Expired',\n failed: 'Failed',\n };\n return labels[status] || status;\n}\n\nfunction getStatusClass(status: DepositStatusType): string {\n if (status === 'completed' || status === 'withdrawn' || status === 'partially_withdrawn') {\n return 'cedros-admin-deposit-success';\n }\n if (status === 'failed' || status === 'expired') return 'cedros-admin-deposit-error';\n if (status === 'processing' || status === 'detected') return 'cedros-admin-deposit-processing';\n return 'cedros-admin-deposit-pending';\n}\n\nfunction formatAmount(lamports: number | null): string {\n if (lamports === null || lamports === undefined) return '—';\n const solAmount = lamports / 1_000_000_000;\n return `${solAmount.toFixed(4)} SOL`;\n}\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction truncateId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}...${id.slice(-4)}`;\n}\n\n/**\n * Admin deposit list display\n *\n * Shows paginated list of all deposits with user info.\n */\nexport function AdminDepositList({\n statusFilter,\n pageSize = 20,\n refreshInterval = 0,\n className = '',\n onLoad,\n onDepositClick,\n}: AdminDepositListProps) {\n const { listDeposits, isLoading, error, clearError } = useAdminDeposits();\n\n const [deposits, setDeposits] = useState<AdminDepositItem[]>([]);\n const [total, setTotal] = useState(0);\n const [offset, setOffset] = useState(0);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [sortField, setSortField] = useState<DepositSortField>('createdAt');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n\n const toggleSort = (field: DepositSortField) => {\n if (sortField === field) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n const sortedDeposits = useMemo(() => {\n return [...deposits].sort((a, b) => {\n let aVal: string | number | null;\n let bVal: string | number | null;\n\n switch (sortField) {\n case 'userId':\n aVal = a.userId.toLowerCase();\n bVal = b.userId.toLowerCase();\n break;\n case 'amountLamports':\n aVal = a.amountLamports ?? 0;\n bVal = b.amountLamports ?? 0;\n break;\n case 'status':\n aVal = a.status;\n bVal = b.status;\n break;\n case 'createdAt':\n aVal = new Date(a.createdAt).getTime();\n bVal = new Date(b.createdAt).getTime();\n break;\n case 'txSignature':\n aVal = a.txSignature || '';\n bVal = b.txSignature || '';\n break;\n default:\n return 0;\n }\n\n if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1;\n if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1;\n return 0;\n });\n }, [deposits, sortField, sortOrder]);\n\n const fetchDeposits = useCallback(async () => {\n try {\n const result = await listDeposits({ status: statusFilter, limit: pageSize, offset });\n setDeposits(result.deposits);\n setTotal(result.total);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load deposits';\n setLoadError(message);\n }\n }, [statusFilter, pageSize, offset, listDeposits, onLoad]);\n\n // Reset offset when filters change\n useEffect(() => {\n setOffset(0);\n }, [statusFilter, pageSize]);\n\n // Fetch on mount and when dependencies change\n useEffect(() => {\n fetchDeposits();\n }, [fetchDeposits]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchDeposits, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchDeposits]);\n\n const totalPages = Math.ceil(total / pageSize);\n const currentPage = Math.floor(offset / pageSize) + 1;\n\n const goToPage = (page: number) => {\n const newOffset = (page - 1) * pageSize;\n setOffset(Math.max(0, Math.min(newOffset, Math.max(0, total - 1))));\n };\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div className={`cedros-admin-deposit-list cedros-admin-deposit-list-error ${className}`}>\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchDeposits();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state (initial load only)\n if (isLoading && deposits.length === 0) {\n return (\n <div className={`cedros-admin-deposit-list cedros-admin-deposit-list-loading ${className}`}>\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading deposits...</span>\n </div>\n );\n }\n\n return (\n <div className={`cedros-admin-deposit-list ${className}`}>\n <div className=\"cedros-admin-deposit-list-header\">\n <h4 className=\"cedros-admin-deposit-list-title\">All Deposits</h4>\n <button\n type=\"button\"\n className=\"cedros-admin__stats-bar-refresh\"\n onClick={fetchDeposits}\n disabled={isLoading}\n title=\"Refresh deposits\"\n aria-label=\"Refresh deposits\"\n >\n {isLoading ? '...' : '↻'}\n </button>\n </div>\n\n {deposits.length === 0 ? (\n <div className=\"cedros-admin-empty\">\n <p className=\"cedros-admin-empty-message\">No deposits found.</p>\n </div>\n ) : (\n <>\n <div className=\"cedros-admin-deposit-table\">\n <div className=\"cedros-admin-deposit-thead\">\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'userId' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('userId')}\n aria-label=\"Sort by user\"\n >\n User{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'userId' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'amountLamports' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('amountLamports')}\n aria-label=\"Sort by amount\"\n >\n Amount{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'amountLamports' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'status' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('status')}\n aria-label=\"Sort by status\"\n >\n Status{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'status' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'createdAt' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('createdAt')}\n aria-label=\"Sort by created\"\n >\n Created{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'createdAt' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'txSignature' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('txSignature')}\n aria-label=\"Sort by transaction\"\n >\n Tx{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'txSignature' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n </div>\n {sortedDeposits.map((deposit) => (\n <div\n key={deposit.id}\n className={`cedros-admin-deposit-row ${getStatusClass(deposit.status)}`}\n onClick={() => onDepositClick?.(deposit)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onDepositClick?.(deposit);\n }\n }}\n role={onDepositClick ? 'button' : undefined}\n tabIndex={onDepositClick ? 0 : undefined}\n >\n <div className=\"cedros-admin-deposit-td\" title={deposit.userId}>\n {truncateId(deposit.userId)}\n </div>\n <div className=\"cedros-admin-deposit-td\">\n {formatAmount(deposit.amountLamports)}\n </div>\n <div className=\"cedros-admin-deposit-td\">\n <span className=\"cedros-admin-status-badge\">\n {getStatusLabel(deposit.status)}\n </span>\n </div>\n <div className=\"cedros-admin-deposit-td\">{formatDate(deposit.createdAt)}</div>\n <div className=\"cedros-admin-deposit-td\" title={deposit.txSignature || undefined}>\n {deposit.txSignature ? truncateId(deposit.txSignature) : '—'}\n </div>\n </div>\n ))}\n </div>\n\n {totalPages > 1 && (\n <div className=\"cedros-admin-pagination\">\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage - 1)}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <span className=\"cedros-admin-page-info\">\n Page {currentPage} of {totalPages} ({total} total)\n </span>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage + 1)}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":["AdminDepositStats","refreshInterval","className","onLoad","getStats","isLoading","error","clearError","useAdminDeposits","stats","setStats","useState","loadError","setLoadError","fetchStats","useCallback","result","err","message","useEffect","interval","errorMessage","jsxs","jsx","StatsBar","getStatusLabel","status","getStatusClass","formatAmount","lamports","formatDate","dateString","truncateId","id","AdminDepositList","statusFilter","pageSize","onDepositClick","listDeposits","deposits","setDeposits","total","setTotal","offset","setOffset","sortField","setSortField","sortOrder","setSortOrder","toggleSort","field","sortedDeposits","useMemo","a","b","aVal","bVal","fetchDeposits","totalPages","currentPage","goToPage","page","newOffset","Fragment","deposit","e"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),a=require("react"),I=require("./useAdminDeposits-Dvx3_UUE.cjs"),T=require("./StatsBar-DTUZCwDD.cjs");function O({refreshInterval:t=0,className:r="",onLoad:h}){const{getStats:x,isLoading:j,error:b,clearError:y}=I.useAdminDeposits(),[d,w]=a.useState(null),[D,l]=a.useState(null),u=a.useCallback(async()=>{try{const i=await x();w(i),h?.(i),l(null)}catch(i){const N=i&&typeof i=="object"&&"message"in i?String(i.message):"Failed to load stats";l(N)}},[x,h]);a.useEffect(()=>{u()},[u]),a.useEffect(()=>{if(t<=0)return;const i=setInterval(u,t);return()=>clearInterval(i)},[t,u]);const g=D||b;return g?e.jsxs("div",{className:`cedros-admin-stats cedros-admin-stats-error ${r}`,children:[e.jsx("p",{className:"cedros-admin-error",children:g}),e.jsx("button",{type:"button",className:"cedros-button cedros-button-outline",onClick:()=>{y(),l(null),u()},children:"Retry"})]}):j&&!d?e.jsxs("div",{className:`cedros-admin-stats cedros-admin-stats-loading ${r}`,children:[e.jsx("span",{className:"cedros-admin-loading-indicator"}),e.jsx("span",{className:"cedros-admin-loading-text",children:"Loading statistics..."})]}):d?e.jsx("div",{className:`cedros-admin-stats ${r}`,children:e.jsx(T.StatsBar,{stats:[{label:"Total Deposits",value:d.totalDeposits},{label:"Private Deposits",value:d.inPrivacyPeriodCount??0},{label:"Standard Deposits",value:d.readyForWithdrawalCount??0},{label:"Microdeposits",value:d.nativeSolDepositCount??0}],isLoading:j,onRefresh:u})}):null}function q(t){return{pending:"Pending",detected:"Detected",processing:"Processing",completed:"Completed",withdrawn:"Withdrawn",partially_withdrawn:"Partially Withdrawn",expired:"Expired",failed:"Failed"}[t]||t}function _(t){return t==="completed"||t==="withdrawn"||t==="partially_withdrawn"?"cedros-admin-deposit-success":t==="failed"||t==="expired"?"cedros-admin-deposit-error":t==="processing"||t==="detected"?"cedros-admin-deposit-processing":"cedros-admin-deposit-pending"}function W(t){return t==null?"—":`${(t/1e9).toFixed(4)} SOL`}function B(t){return new Date(t).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function P(t){return t.length<=12?t:`${t.slice(0,6)}...${t.slice(-4)}`}function V({statusFilter:t,pageSize:r=20,refreshInterval:h=0,className:x="",onLoad:j,onDepositClick:b}){const{listDeposits:y,isLoading:d,error:w,clearError:D}=I.useAdminDeposits(),[l,u]=a.useState([]),[g,i]=a.useState(0),[N,L]=a.useState(0),[M,A]=a.useState(null),[n,F]=a.useState("createdAt"),[c,k]=a.useState("desc"),v=s=>{n===s?k(c==="asc"?"desc":"asc"):(F(s),k("desc"))},R=a.useMemo(()=>[...l].sort((s,o)=>{let m,p;switch(n){case"userId":m=s.userId.toLowerCase(),p=o.userId.toLowerCase();break;case"amountLamports":m=s.amountLamports??0,p=o.amountLamports??0;break;case"status":m=s.status,p=o.status;break;case"createdAt":m=new Date(s.createdAt).getTime(),p=new Date(o.createdAt).getTime();break;case"txSignature":m=s.txSignature||"",p=o.txSignature||"";break;default:return 0}return m<p?c==="asc"?-1:1:m>p?c==="asc"?1:-1:0}),[l,n,c]),f=a.useCallback(async()=>{try{const s=await y({status:t,limit:r,offset:N});u(s.deposits),i(s.total),j?.(s),A(null)}catch(s){const o=s&&typeof s=="object"&&"message"in s?String(s.message):"Failed to load deposits";A(o)}},[t,r,N,y,j]);a.useEffect(()=>{L(0)},[t,r]),a.useEffect(()=>{f()},[f]),a.useEffect(()=>{if(h<=0)return;const s=setInterval(f,h);return()=>clearInterval(s)},[h,f]);const C=Math.ceil(g/r),S=Math.floor(N/r)+1,$=s=>{const o=(s-1)*r;L(Math.max(0,Math.min(o,Math.max(0,g-1))))},E=M||w;return E?e.jsxs("div",{className:`cedros-admin-deposit-list cedros-admin-deposit-list-error ${x}`,children:[e.jsx("p",{className:"cedros-admin-error",children:E}),e.jsx("button",{type:"button",className:"cedros-button cedros-button-outline",onClick:()=>{D(),A(null),f()},children:"Retry"})]}):d&&l.length===0?e.jsxs("div",{className:`cedros-admin-deposit-list cedros-admin-deposit-list-loading ${x}`,children:[e.jsx("span",{className:"cedros-admin-loading-indicator"}),e.jsx("span",{className:"cedros-admin-loading-text",children:"Loading deposits..."})]}):e.jsxs("div",{className:`cedros-admin-deposit-list ${x}`,children:[e.jsxs("div",{className:"cedros-admin-deposit-list-header",children:[e.jsx("h4",{className:"cedros-admin-deposit-list-title",children:"All Deposits"}),e.jsx("button",{type:"button",className:"cedros-admin__stats-bar-refresh",onClick:f,disabled:d,title:"Refresh deposits","aria-label":"Refresh deposits",children:d?"...":"↻"})]}),l.length===0?e.jsx("div",{className:"cedros-admin-empty",children:e.jsx("p",{className:"cedros-admin-empty-message",children:"No deposits found."})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"cedros-admin-deposit-table",children:[e.jsxs("div",{className:"cedros-admin-deposit-thead",children:[e.jsx("div",{className:"cedros-admin-deposit-th",children:e.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="userId"?"cedros-admin-sort-active":""}`,onClick:()=>v("userId"),"aria-label":"Sort by user",children:["User"," ",e.jsx("span",{className:"cedros-admin-sort-icon",children:n==="userId"?c==="asc"?"↑":"↓":"↕"})]})}),e.jsx("div",{className:"cedros-admin-deposit-th",children:e.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="amountLamports"?"cedros-admin-sort-active":""}`,onClick:()=>v("amountLamports"),"aria-label":"Sort by amount",children:["Amount"," ",e.jsx("span",{className:"cedros-admin-sort-icon",children:n==="amountLamports"?c==="asc"?"↑":"↓":"↕"})]})}),e.jsx("div",{className:"cedros-admin-deposit-th",children:e.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="status"?"cedros-admin-sort-active":""}`,onClick:()=>v("status"),"aria-label":"Sort by status",children:["Status"," ",e.jsx("span",{className:"cedros-admin-sort-icon",children:n==="status"?c==="asc"?"↑":"↓":"↕"})]})}),e.jsx("div",{className:"cedros-admin-deposit-th",children:e.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="createdAt"?"cedros-admin-sort-active":""}`,onClick:()=>v("createdAt"),"aria-label":"Sort by created",children:["Created"," ",e.jsx("span",{className:"cedros-admin-sort-icon",children:n==="createdAt"?c==="asc"?"↑":"↓":"↕"})]})}),e.jsx("div",{className:"cedros-admin-deposit-th",children:e.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="txSignature"?"cedros-admin-sort-active":""}`,onClick:()=>v("txSignature"),"aria-label":"Sort by transaction",children:["Tx"," ",e.jsx("span",{className:"cedros-admin-sort-icon",children:n==="txSignature"?c==="asc"?"↑":"↓":"↕"})]})})]}),R.map(s=>e.jsxs("div",{className:`cedros-admin-deposit-row ${_(s.status)}`,onClick:()=>b?.(s),onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),b?.(s))},role:b?"button":void 0,tabIndex:b?0:void 0,children:[e.jsx("div",{className:"cedros-admin-deposit-td",title:s.userId,children:P(s.userId)}),e.jsx("div",{className:"cedros-admin-deposit-td",children:W(s.amountLamports)}),e.jsx("div",{className:"cedros-admin-deposit-td",children:e.jsx("span",{className:"cedros-admin-status-badge",children:q(s.status)})}),e.jsx("div",{className:"cedros-admin-deposit-td",children:B(s.createdAt)}),e.jsx("div",{className:"cedros-admin-deposit-td",title:s.txSignature||void 0,children:s.txSignature?P(s.txSignature):"—"})]},s.id))]}),C>1&&e.jsxs("div",{className:"cedros-admin-pagination",children:[e.jsx("button",{type:"button",className:"cedros-button cedros-button-outline cedros-button-sm",onClick:()=>$(S-1),disabled:S<=1,children:"Previous"}),e.jsxs("span",{className:"cedros-admin-page-info",children:["Page ",S," of ",C," (",g," total)"]}),e.jsx("button",{type:"button",className:"cedros-button cedros-button-outline cedros-button-sm",onClick:()=>$(S+1),disabled:S>=C,children:"Next"})]})]})]})}exports.AdminDepositList=V;exports.AdminDepositStats=O;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminDepositList-UEcyRZkA.cjs","sources":["../src/components/deposit/admin/AdminDepositStats.tsx","../src/components/deposit/admin/AdminDepositList.tsx"],"sourcesContent":["/**\n * Admin deposit statistics component\n *\n * Shows aggregate statistics for Privacy Cash deposits.\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositStatsResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\nimport { StatsBar } from '../../admin/StatsBar';\n\nexport interface AdminDepositStatsProps {\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when stats are loaded */\n onLoad?: (stats: AdminDepositStatsResponse) => void;\n}\n\n/**\n * Admin deposit statistics display\n *\n * Shows total deposits, withdrawals, and pending amounts.\n */\nexport function AdminDepositStats({\n refreshInterval = 0,\n className = '',\n onLoad,\n}: AdminDepositStatsProps) {\n const { getStats, isLoading, error, clearError } = useAdminDeposits();\n\n const [stats, setStats] = useState<AdminDepositStatsResponse | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const fetchStats = useCallback(async () => {\n try {\n const result = await getStats();\n setStats(result);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load stats';\n setLoadError(message);\n }\n }, [getStats, onLoad]);\n\n // Fetch on mount\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchStats, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchStats]);\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div className={`cedros-admin-stats cedros-admin-stats-error ${className}`}>\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchStats();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state\n if (isLoading && !stats) {\n return (\n <div className={`cedros-admin-stats cedros-admin-stats-loading ${className}`}>\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading statistics...</span>\n </div>\n );\n }\n\n if (!stats) {\n return null;\n }\n\n return (\n <div className={`cedros-admin-stats ${className}`}>\n <StatsBar\n stats={[\n { label: 'Total Deposits', value: stats.totalDeposits },\n { label: 'Private Deposits', value: stats.inPrivacyPeriodCount ?? 0 },\n { label: 'Standard Deposits', value: stats.readyForWithdrawalCount ?? 0 },\n { label: 'Microdeposits', value: stats.nativeSolDepositCount ?? 0 },\n ]}\n isLoading={isLoading}\n onRefresh={fetchStats}\n />\n </div>\n );\n}\n","/**\n * Admin deposit list component\n *\n * Shows a paginated list of all deposits across all users.\n * Requires system admin privileges.\n */\n\nimport { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useAdminDeposits } from '../../../hooks/useAdminDeposits';\nimport type { AdminDepositItem, AdminDepositListResponse } from '../../../types/deposit';\nimport { FeatureDisabledMessage } from './FeatureDisabledMessage';\nimport { isFeatureDisabledError } from './featureDisabled';\n\ntype DepositSortField = 'userId' | 'amountLamports' | 'status' | 'createdAt' | 'txSignature';\ntype SortOrder = 'asc' | 'desc';\n\nexport interface AdminDepositListProps {\n /** Filter by status (comma-separated) */\n statusFilter?: string;\n /** Number of items per page (default: 20) */\n pageSize?: number;\n /** Auto-refresh interval in milliseconds (0 to disable) */\n refreshInterval?: number;\n /** Additional CSS classes */\n className?: string;\n /** Callback when list is loaded */\n onLoad?: (response: AdminDepositListResponse) => void;\n /** Callback when a deposit is clicked */\n onDepositClick?: (deposit: AdminDepositItem) => void;\n}\n\ntype DepositStatusType =\n | 'pending'\n | 'detected'\n | 'processing'\n | 'completed'\n | 'withdrawn'\n | 'partially_withdrawn'\n | 'expired'\n | 'failed';\n\nfunction getStatusLabel(status: DepositStatusType): string {\n const labels: Record<DepositStatusType, string> = {\n pending: 'Pending',\n detected: 'Detected',\n processing: 'Processing',\n completed: 'Completed',\n withdrawn: 'Withdrawn',\n partially_withdrawn: 'Partially Withdrawn',\n expired: 'Expired',\n failed: 'Failed',\n };\n return labels[status] || status;\n}\n\nfunction getStatusClass(status: DepositStatusType): string {\n if (status === 'completed' || status === 'withdrawn' || status === 'partially_withdrawn') {\n return 'cedros-admin-deposit-success';\n }\n if (status === 'failed' || status === 'expired') return 'cedros-admin-deposit-error';\n if (status === 'processing' || status === 'detected') return 'cedros-admin-deposit-processing';\n return 'cedros-admin-deposit-pending';\n}\n\nfunction formatAmount(lamports: number | null): string {\n if (lamports === null || lamports === undefined) return '—';\n const solAmount = lamports / 1_000_000_000;\n return `${solAmount.toFixed(4)} SOL`;\n}\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction truncateId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}...${id.slice(-4)}`;\n}\n\n/**\n * Admin deposit list display\n *\n * Shows paginated list of all deposits with user info.\n */\nexport function AdminDepositList({\n statusFilter,\n pageSize = 20,\n refreshInterval = 0,\n className = '',\n onLoad,\n onDepositClick,\n}: AdminDepositListProps) {\n const { listDeposits, isLoading, error, clearError } = useAdminDeposits();\n\n const [deposits, setDeposits] = useState<AdminDepositItem[]>([]);\n const [total, setTotal] = useState(0);\n const [offset, setOffset] = useState(0);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [sortField, setSortField] = useState<DepositSortField>('createdAt');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n\n const toggleSort = (field: DepositSortField) => {\n if (sortField === field) {\n setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n const sortedDeposits = useMemo(() => {\n return [...deposits].sort((a, b) => {\n let aVal: string | number | null;\n let bVal: string | number | null;\n\n switch (sortField) {\n case 'userId':\n aVal = a.userId.toLowerCase();\n bVal = b.userId.toLowerCase();\n break;\n case 'amountLamports':\n aVal = a.amountLamports ?? 0;\n bVal = b.amountLamports ?? 0;\n break;\n case 'status':\n aVal = a.status;\n bVal = b.status;\n break;\n case 'createdAt':\n aVal = new Date(a.createdAt).getTime();\n bVal = new Date(b.createdAt).getTime();\n break;\n case 'txSignature':\n aVal = a.txSignature || '';\n bVal = b.txSignature || '';\n break;\n default:\n return 0;\n }\n\n if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1;\n if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1;\n return 0;\n });\n }, [deposits, sortField, sortOrder]);\n\n const fetchDeposits = useCallback(async () => {\n try {\n const result = await listDeposits({ status: statusFilter, limit: pageSize, offset });\n setDeposits(result.deposits);\n setTotal(result.total);\n onLoad?.(result);\n setLoadError(null);\n } catch (err) {\n const message =\n err && typeof err === 'object' && 'message' in err\n ? String((err as { message: unknown }).message)\n : 'Failed to load deposits';\n setLoadError(message);\n }\n }, [statusFilter, pageSize, offset, listDeposits, onLoad]);\n\n // Reset offset when filters change\n useEffect(() => {\n setOffset(0);\n }, [statusFilter, pageSize]);\n\n // Fetch on mount and when dependencies change\n useEffect(() => {\n fetchDeposits();\n }, [fetchDeposits]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchDeposits, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, fetchDeposits]);\n\n const totalPages = Math.ceil(total / pageSize);\n const currentPage = Math.floor(offset / pageSize) + 1;\n\n const goToPage = (page: number) => {\n const newOffset = (page - 1) * pageSize;\n setOffset(Math.max(0, Math.min(newOffset, Math.max(0, total - 1))));\n };\n\n // Feature disabled state\n const errorMessage = loadError || error;\n if (isFeatureDisabledError(errorMessage)) {\n return <FeatureDisabledMessage feature=\"Privacy Cash\" className={className} />;\n }\n\n // Error state\n if (errorMessage) {\n return (\n <div className={`cedros-admin-deposit-list cedros-admin-deposit-list-error ${className}`}>\n <p className=\"cedros-admin-error\">{errorMessage}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={() => {\n clearError();\n setLoadError(null);\n fetchDeposits();\n }}\n >\n Retry\n </button>\n </div>\n );\n }\n\n // Loading state (initial load only)\n if (isLoading && deposits.length === 0) {\n return (\n <div className={`cedros-admin-deposit-list cedros-admin-deposit-list-loading ${className}`}>\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading deposits...</span>\n </div>\n );\n }\n\n return (\n <div className={`cedros-admin-deposit-list ${className}`}>\n <div className=\"cedros-admin-deposit-list-header\">\n <h4 className=\"cedros-admin-deposit-list-title\">All Deposits</h4>\n <button\n type=\"button\"\n className=\"cedros-admin__stats-bar-refresh\"\n onClick={fetchDeposits}\n disabled={isLoading}\n title=\"Refresh deposits\"\n aria-label=\"Refresh deposits\"\n >\n {isLoading ? '...' : '↻'}\n </button>\n </div>\n\n {deposits.length === 0 ? (\n <div className=\"cedros-admin-empty\">\n <p className=\"cedros-admin-empty-message\">No deposits found.</p>\n </div>\n ) : (\n <>\n <div className=\"cedros-admin-deposit-table\">\n <div className=\"cedros-admin-deposit-thead\">\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'userId' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('userId')}\n aria-label=\"Sort by user\"\n >\n User{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'userId' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'amountLamports' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('amountLamports')}\n aria-label=\"Sort by amount\"\n >\n Amount{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'amountLamports' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'status' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('status')}\n aria-label=\"Sort by status\"\n >\n Status{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'status' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'createdAt' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('createdAt')}\n aria-label=\"Sort by created\"\n >\n Created{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'createdAt' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n <div className=\"cedros-admin-deposit-th\">\n <button\n type=\"button\"\n className={`cedros-admin-sort-button ${sortField === 'txSignature' ? 'cedros-admin-sort-active' : ''}`}\n onClick={() => toggleSort('txSignature')}\n aria-label=\"Sort by transaction\"\n >\n Tx{' '}\n <span className=\"cedros-admin-sort-icon\">\n {sortField === 'txSignature' ? (sortOrder === 'asc' ? '↑' : '↓') : '↕'}\n </span>\n </button>\n </div>\n </div>\n {sortedDeposits.map((deposit) => (\n <div\n key={deposit.id}\n className={`cedros-admin-deposit-row ${getStatusClass(deposit.status)}`}\n onClick={() => onDepositClick?.(deposit)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onDepositClick?.(deposit);\n }\n }}\n role={onDepositClick ? 'button' : undefined}\n tabIndex={onDepositClick ? 0 : undefined}\n >\n <div className=\"cedros-admin-deposit-td\" title={deposit.userId}>\n {truncateId(deposit.userId)}\n </div>\n <div className=\"cedros-admin-deposit-td\">\n {formatAmount(deposit.amountLamports)}\n </div>\n <div className=\"cedros-admin-deposit-td\">\n <span className=\"cedros-admin-status-badge\">\n {getStatusLabel(deposit.status)}\n </span>\n </div>\n <div className=\"cedros-admin-deposit-td\">{formatDate(deposit.createdAt)}</div>\n <div className=\"cedros-admin-deposit-td\" title={deposit.txSignature || undefined}>\n {deposit.txSignature ? truncateId(deposit.txSignature) : '—'}\n </div>\n </div>\n ))}\n </div>\n\n {totalPages > 1 && (\n <div className=\"cedros-admin-pagination\">\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage - 1)}\n disabled={currentPage <= 1}\n >\n Previous\n </button>\n <span className=\"cedros-admin-page-info\">\n Page {currentPage} of {totalPages} ({total} total)\n </span>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline cedros-button-sm\"\n onClick={() => goToPage(currentPage + 1)}\n disabled={currentPage >= totalPages}\n >\n Next\n </button>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n"],"names":["AdminDepositStats","refreshInterval","className","onLoad","getStats","isLoading","error","clearError","useAdminDeposits","stats","setStats","useState","loadError","setLoadError","fetchStats","useCallback","result","err","message","useEffect","interval","errorMessage","jsxs","jsx","StatsBar","getStatusLabel","status","getStatusClass","formatAmount","lamports","formatDate","dateString","truncateId","id","AdminDepositList","statusFilter","pageSize","onDepositClick","listDeposits","deposits","setDeposits","total","setTotal","offset","setOffset","sortField","setSortField","sortOrder","setSortOrder","toggleSort","field","sortedDeposits","useMemo","a","b","aVal","bVal","fetchDeposits","totalPages","currentPage","goToPage","page","newOffset","Fragment","deposit","e"],"mappings":"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"}
|