@cedros/login-react 0.0.13 → 0.0.14

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 (185) hide show
  1. package/dist/AdminDepositList-CyT4VBH8.js +311 -0
  2. package/dist/AdminDepositList-CyT4VBH8.js.map +1 -0
  3. package/dist/AdminDepositList-b2AXtLg0.cjs +1 -0
  4. package/dist/AdminDepositList-b2AXtLg0.cjs.map +1 -0
  5. package/dist/{AdminWithdrawalHistory-BGjfrIe3.js → AdminWithdrawalHistory-Cud-yuWy.js} +295 -283
  6. package/dist/AdminWithdrawalHistory-Cud-yuWy.js.map +1 -0
  7. package/dist/AdminWithdrawalHistory-DL9zbu2b.cjs +1 -0
  8. package/dist/AdminWithdrawalHistory-DL9zbu2b.cjs.map +1 -0
  9. package/dist/{AuthenticationSettings-5Vi7Ib_A.cjs → AuthenticationSettings-D739nNul.cjs} +1 -1
  10. package/dist/{AuthenticationSettings-5Vi7Ib_A.cjs.map → AuthenticationSettings-D739nNul.cjs.map} +1 -1
  11. package/dist/AuthenticationSettings-DtLoxQ2z.cjs +1 -0
  12. package/dist/{AuthenticationSettings-BPAh1my6.cjs.map → AuthenticationSettings-DtLoxQ2z.cjs.map} +1 -1
  13. package/dist/{AuthenticationSettings-CJg8CJY9.js → AuthenticationSettings-Dx3JCI3m.js} +1 -1
  14. package/dist/{AuthenticationSettings-CJg8CJY9.js.map → AuthenticationSettings-Dx3JCI3m.js.map} +1 -1
  15. package/dist/{AuthenticationSettings-CR_i6TTS.js → AuthenticationSettings-vowmQPXz.js} +170 -140
  16. package/dist/{AuthenticationSettings-CR_i6TTS.js.map → AuthenticationSettings-vowmQPXz.js.map} +1 -1
  17. package/dist/{AutosaveStatus-CYkC2aI_.cjs → AutosaveStatus-CCrZszKA.cjs} +1 -1
  18. package/dist/{AutosaveStatus-CYkC2aI_.cjs.map → AutosaveStatus-CCrZszKA.cjs.map} +1 -1
  19. package/dist/{AutosaveStatus-N4uNS6-2.js → AutosaveStatus-Ciyt350A.js} +1 -1
  20. package/dist/{AutosaveStatus-N4uNS6-2.js.map → AutosaveStatus-Ciyt350A.js.map} +1 -1
  21. package/dist/{CreditSystemSettings-CIf_SfJq.js → CreditSystemSettings-BQ3h4CyM.js} +1 -1
  22. package/dist/{CreditSystemSettings-CIf_SfJq.js.map → CreditSystemSettings-BQ3h4CyM.js.map} +1 -1
  23. package/dist/{CreditSystemSettings-BnAOK_tT.cjs → CreditSystemSettings-C6dUsu72.cjs} +1 -1
  24. package/dist/{CreditSystemSettings-BnAOK_tT.cjs.map → CreditSystemSettings-C6dUsu72.cjs.map} +1 -1
  25. package/dist/{CreditSystemSettings-Ck5WIMp3.cjs → CreditSystemSettings-CBot8EPW.cjs} +1 -1
  26. package/dist/{CreditSystemSettings-Ck5WIMp3.cjs.map → CreditSystemSettings-CBot8EPW.cjs.map} +1 -1
  27. package/dist/{CreditSystemSettings-CePYGgev.js → CreditSystemSettings-bVuNLsqp.js} +1 -1
  28. package/dist/{CreditSystemSettings-CePYGgev.js.map → CreditSystemSettings-bVuNLsqp.js.map} +1 -1
  29. package/dist/DepositsSection-BkKUS4vk.cjs +1 -0
  30. package/dist/DepositsSection-BkKUS4vk.cjs.map +1 -0
  31. package/dist/{DepositsSection-DA89uR9A.js → DepositsSection-DD9MKUFt.js} +20 -14
  32. package/dist/DepositsSection-DD9MKUFt.js.map +1 -0
  33. package/dist/EmailRegisterForm-Pvm3I8GP.cjs +1 -0
  34. package/dist/{EmailRegisterForm-CxktR-4J.cjs.map → EmailRegisterForm-Pvm3I8GP.cjs.map} +1 -1
  35. package/dist/{EmailRegisterForm-BrDL3BZy.js → EmailRegisterForm-nI0BOIxR.js} +2 -2
  36. package/dist/{EmailRegisterForm-BrDL3BZy.js.map → EmailRegisterForm-nI0BOIxR.js.map} +1 -1
  37. package/dist/{EmailSettings-DZywTTRq.cjs → EmailSettings-B9qwPSiM.cjs} +1 -1
  38. package/dist/{EmailSettings-DZywTTRq.cjs.map → EmailSettings-B9qwPSiM.cjs.map} +1 -1
  39. package/dist/{EmailSettings-DbMDfVaM.js → EmailSettings-CCA8dNCi.js} +1 -1
  40. package/dist/{EmailSettings-DbMDfVaM.js.map → EmailSettings-CCA8dNCi.js.map} +1 -1
  41. package/dist/{EmailSettings-B8xwgd6_.cjs → EmailSettings-RbgAq9FB.cjs} +1 -1
  42. package/dist/{EmailSettings-B8xwgd6_.cjs.map → EmailSettings-RbgAq9FB.cjs.map} +1 -1
  43. package/dist/{EmailSettings-Bna7Z53E.js → EmailSettings-mxlKNcPl.js} +1 -1
  44. package/dist/{EmailSettings-Bna7Z53E.js.map → EmailSettings-mxlKNcPl.js.map} +1 -1
  45. package/dist/{EmbeddedWalletSettings-DivEPn39.cjs → EmbeddedWalletSettings-B4h-8rxB.cjs} +1 -1
  46. package/dist/{EmbeddedWalletSettings-DivEPn39.cjs.map → EmbeddedWalletSettings-B4h-8rxB.cjs.map} +1 -1
  47. package/dist/{EmbeddedWalletSettings-BEztqO19.js → EmbeddedWalletSettings-BInZvFZf.js} +1 -1
  48. package/dist/{EmbeddedWalletSettings-BEztqO19.js.map → EmbeddedWalletSettings-BInZvFZf.js.map} +1 -1
  49. package/dist/{EmbeddedWalletSettings-ANbhj3Lt.js → EmbeddedWalletSettings-CXlZFFDw.js} +1 -1
  50. package/dist/{EmbeddedWalletSettings-ANbhj3Lt.js.map → EmbeddedWalletSettings-CXlZFFDw.js.map} +1 -1
  51. package/dist/{EmbeddedWalletSettings-D6M7pwgk.cjs → EmbeddedWalletSettings-D5JXae1L.cjs} +1 -1
  52. package/dist/{EmbeddedWalletSettings-D6M7pwgk.cjs.map → EmbeddedWalletSettings-D5JXae1L.cjs.map} +1 -1
  53. package/dist/{GoogleLoginButton-B3uRMJ_n.js → GoogleLoginButton-CXwp4LsQ.js} +1 -1
  54. package/dist/{GoogleLoginButton-B3uRMJ_n.js.map → GoogleLoginButton-CXwp4LsQ.js.map} +1 -1
  55. package/dist/GoogleLoginButton-zS_69-KV.cjs +1 -0
  56. package/dist/{GoogleLoginButton-BydKswn4.cjs.map → GoogleLoginButton-zS_69-KV.cjs.map} +1 -1
  57. package/dist/PermissionsSection-BPbE-hNx.cjs +1 -0
  58. package/dist/{PermissionsSection-CKXXDfqi.cjs.map → PermissionsSection-BPbE-hNx.cjs.map} +1 -1
  59. package/dist/{PermissionsSection-BGaj_sI7.js → PermissionsSection-CighC1p6.js} +3 -3
  60. package/dist/{PermissionsSection-BGaj_sI7.js.map → PermissionsSection-CighC1p6.js.map} +1 -1
  61. package/dist/{ServerSettings-B2RKhJtZ.js → ServerSettings-BE8fsE5k.js} +1 -1
  62. package/dist/{ServerSettings-B2RKhJtZ.js.map → ServerSettings-BE8fsE5k.js.map} +1 -1
  63. package/dist/{ServerSettings-BZXlm1BX.cjs → ServerSettings-CYTlQ2xy.cjs} +1 -1
  64. package/dist/{ServerSettings-BZXlm1BX.cjs.map → ServerSettings-CYTlQ2xy.cjs.map} +1 -1
  65. package/dist/{ServerSettings-DZUKo6By.cjs → ServerSettings-DFs9jQ3f.cjs} +1 -1
  66. package/dist/{ServerSettings-DZUKo6By.cjs.map → ServerSettings-DFs9jQ3f.cjs.map} +1 -1
  67. package/dist/{ServerSettings-Bqm4-bt2.js → ServerSettings-pSmWDC1d.js} +1 -1
  68. package/dist/{ServerSettings-Bqm4-bt2.js.map → ServerSettings-pSmWDC1d.js.map} +1 -1
  69. package/dist/{SettingsPageLayout-DpgNEkuu.js → SettingsPageLayout--GZ_iHLc.js} +1 -1
  70. package/dist/{SettingsPageLayout-DpgNEkuu.js.map → SettingsPageLayout--GZ_iHLc.js.map} +1 -1
  71. package/dist/{SettingsPageLayout-COSYLMu7.cjs → SettingsPageLayout-j5lMjEID.cjs} +1 -1
  72. package/dist/{SettingsPageLayout-COSYLMu7.cjs.map → SettingsPageLayout-j5lMjEID.cjs.map} +1 -1
  73. package/dist/SolanaLoginButton-BjOxpE1C.cjs +1 -0
  74. package/dist/{SolanaLoginButton-fAW7kRUu.cjs.map → SolanaLoginButton-BjOxpE1C.cjs.map} +1 -1
  75. package/dist/{SolanaLoginButton-C_u9OppS.js → SolanaLoginButton-P22QjBaO.js} +1 -1
  76. package/dist/{SolanaLoginButton-C_u9OppS.js.map → SolanaLoginButton-P22QjBaO.js.map} +1 -1
  77. package/dist/{TeamSection-CvrCoa9D.js → TeamSection-BIECkp7g.js} +2 -2
  78. package/dist/{TeamSection-CvrCoa9D.js.map → TeamSection-BIECkp7g.js.map} +1 -1
  79. package/dist/{TeamSection-DlUD5kp5.cjs → TeamSection-BOH9pv_E.cjs} +1 -1
  80. package/dist/{TeamSection-DlUD5kp5.cjs.map → TeamSection-BOH9pv_E.cjs.map} +1 -1
  81. package/dist/UsersSection-e6q7FHzx.cjs +1 -0
  82. package/dist/UsersSection-e6q7FHzx.cjs.map +1 -0
  83. package/dist/UsersSection-t-zm0jZW.js +33 -0
  84. package/dist/UsersSection-t-zm0jZW.js.map +1 -0
  85. package/dist/{WebhookSettings-bUg2u_p0.js → WebhookSettings-Bb70MbFj.js} +1 -1
  86. package/dist/{WebhookSettings-bUg2u_p0.js.map → WebhookSettings-Bb70MbFj.js.map} +1 -1
  87. package/dist/{WebhookSettings-BWl_wsvg.cjs → WebhookSettings-C-gvNAW1.cjs} +1 -1
  88. package/dist/{WebhookSettings-BWl_wsvg.cjs.map → WebhookSettings-C-gvNAW1.cjs.map} +1 -1
  89. package/dist/{WebhookSettings-DXNH5bal.cjs → WebhookSettings-CGyDKjrm.cjs} +1 -1
  90. package/dist/{WebhookSettings-DXNH5bal.cjs.map → WebhookSettings-CGyDKjrm.cjs.map} +1 -1
  91. package/dist/{WebhookSettings-BT5q6AZ8.js → WebhookSettings-kIstSjZi.js} +1 -1
  92. package/dist/{WebhookSettings-BT5q6AZ8.js.map → WebhookSettings-kIstSjZi.js.map} +1 -1
  93. package/dist/WithdrawalsSection-sljIyeaz.cjs +1 -0
  94. package/dist/WithdrawalsSection-sljIyeaz.cjs.map +1 -0
  95. package/dist/WithdrawalsSection-yRDTVFsb.js +27 -0
  96. package/dist/WithdrawalsSection-yRDTVFsb.js.map +1 -0
  97. package/dist/admin-only.cjs +1 -1
  98. package/dist/admin-only.js +1 -1
  99. package/dist/email-only.cjs +1 -1
  100. package/dist/email-only.d.ts +13 -2
  101. package/dist/email-only.js +3 -3
  102. package/dist/google-only.cjs +1 -1
  103. package/dist/google-only.d.ts +13 -2
  104. package/dist/google-only.js +3 -3
  105. package/dist/index.cjs +12 -12
  106. package/dist/index.cjs.map +1 -1
  107. package/dist/index.d.ts +31 -8
  108. package/dist/index.js +1066 -1092
  109. package/dist/index.js.map +1 -1
  110. package/dist/{plugin-BtYBW6JY.cjs → plugin-8_dpq7tC.cjs} +1 -1
  111. package/dist/{plugin-BtYBW6JY.cjs.map → plugin-8_dpq7tC.cjs.map} +1 -1
  112. package/dist/{plugin-5qRh-YhX.js → plugin-D1NdppqC.js} +1 -1
  113. package/dist/{plugin-5qRh-YhX.js.map → plugin-D1NdppqC.js.map} +1 -1
  114. package/dist/{shamir-AeLLfw0p.cjs → shamir-4DyQMJCk.cjs} +1 -1
  115. package/dist/{shamir-AeLLfw0p.cjs.map → shamir-4DyQMJCk.cjs.map} +1 -1
  116. package/dist/{shamir-B0wConeK.js → shamir-L-s-Tp1Z.js} +1 -1
  117. package/dist/{shamir-B0wConeK.js.map → shamir-L-s-Tp1Z.js.map} +1 -1
  118. package/dist/silentWalletEnroll-BgTb4H5I.cjs +1 -0
  119. package/dist/{silentWalletEnroll-B8pgdKZO.cjs.map → silentWalletEnroll-BgTb4H5I.cjs.map} +1 -1
  120. package/dist/{silentWalletEnroll-DR2kPw7W.js → silentWalletEnroll-DWt6Pr3B.js} +3 -3
  121. package/dist/{silentWalletEnroll-DR2kPw7W.js.map → silentWalletEnroll-DWt6Pr3B.js.map} +1 -1
  122. package/dist/solana-only.cjs +1 -1
  123. package/dist/solana-only.d.ts +13 -2
  124. package/dist/solana-only.js +3 -3
  125. package/dist/{useAdminDeposits-BDY5KJ0-.js → useAdminDeposits-BTSyeAfg.js} +1 -1
  126. package/dist/{useAdminDeposits-BDY5KJ0-.js.map → useAdminDeposits-BTSyeAfg.js.map} +1 -1
  127. package/dist/useAdminDeposits-BkkCwHWp.cjs +1 -0
  128. package/dist/{useAdminDeposits-Dvx3_UUE.cjs.map → useAdminDeposits-BkkCwHWp.cjs.map} +1 -1
  129. package/dist/{useAuth-Bge6KaWN.js → useAuth-C3dpk0po.js} +597 -561
  130. package/dist/useAuth-C3dpk0po.js.map +1 -0
  131. package/dist/useAuth-D3Pk_H3z.cjs +1 -0
  132. package/dist/useAuth-D3Pk_H3z.cjs.map +1 -0
  133. package/dist/useCedrosLogin-C9MrcZvh.cjs +1 -0
  134. package/dist/useCedrosLogin-C9MrcZvh.cjs.map +1 -0
  135. package/dist/{apiClient-B2JxVPlH.js → useCedrosLogin-_94MmGGq.js} +29 -29
  136. package/dist/useCedrosLogin-_94MmGGq.js.map +1 -0
  137. package/dist/{useOrgs-Be3KH4ib.js → useOrgs-C3pzMA9h.js} +1 -1
  138. package/dist/{useOrgs-Be3KH4ib.js.map → useOrgs-C3pzMA9h.js.map} +1 -1
  139. package/dist/useOrgs-DDVRCaVi.cjs +1 -0
  140. package/dist/{useOrgs-CVbacmaQ.cjs.map → useOrgs-DDVRCaVi.cjs.map} +1 -1
  141. package/dist/{useSystemSettings-DN5YqfNq.js → useSystemSettings-DBlAMjFi.js} +1 -1
  142. package/dist/{useSystemSettings-DN5YqfNq.js.map → useSystemSettings-DBlAMjFi.js.map} +1 -1
  143. package/dist/useSystemSettings-DRrreszl.cjs +1 -0
  144. package/dist/{useSystemSettings-D9Cr7ZTl.cjs.map → useSystemSettings-DRrreszl.cjs.map} +1 -1
  145. package/dist/useUsersStatsSummary-8qY7iP4G.cjs +1 -0
  146. package/dist/useUsersStatsSummary-8qY7iP4G.cjs.map +1 -0
  147. package/dist/{AdminUserDetail-DHFDzY8B.js → useUsersStatsSummary-NjEFvWuz.js} +431 -380
  148. package/dist/useUsersStatsSummary-NjEFvWuz.js.map +1 -0
  149. package/package.json +1 -1
  150. package/dist/AdminDepositList-Cx0xRwES.js +0 -305
  151. package/dist/AdminDepositList-Cx0xRwES.js.map +0 -1
  152. package/dist/AdminDepositList-UEcyRZkA.cjs +0 -1
  153. package/dist/AdminDepositList-UEcyRZkA.cjs.map +0 -1
  154. package/dist/AdminUserDetail-BzEIdNJh.cjs +0 -1
  155. package/dist/AdminUserDetail-BzEIdNJh.cjs.map +0 -1
  156. package/dist/AdminUserDetail-DHFDzY8B.js.map +0 -1
  157. package/dist/AdminWithdrawalHistory-0yxtMh6q.cjs +0 -1
  158. package/dist/AdminWithdrawalHistory-0yxtMh6q.cjs.map +0 -1
  159. package/dist/AdminWithdrawalHistory-BGjfrIe3.js.map +0 -1
  160. package/dist/AuthenticationSettings-BPAh1my6.cjs +0 -1
  161. package/dist/DepositsSection-DA89uR9A.js.map +0 -1
  162. package/dist/DepositsSection-i6XdhLNs.cjs +0 -1
  163. package/dist/DepositsSection-i6XdhLNs.cjs.map +0 -1
  164. package/dist/EmailRegisterForm-CxktR-4J.cjs +0 -1
  165. package/dist/GoogleLoginButton-BydKswn4.cjs +0 -1
  166. package/dist/PermissionsSection-CKXXDfqi.cjs +0 -1
  167. package/dist/SolanaLoginButton-fAW7kRUu.cjs +0 -1
  168. package/dist/UsersSection-C2U8Tb7V.cjs +0 -1
  169. package/dist/UsersSection-C2U8Tb7V.cjs.map +0 -1
  170. package/dist/UsersSection-Dbh9PTSA.js +0 -83
  171. package/dist/UsersSection-Dbh9PTSA.js.map +0 -1
  172. package/dist/WithdrawalsSection-BL_LOUq8.cjs +0 -1
  173. package/dist/WithdrawalsSection-BL_LOUq8.cjs.map +0 -1
  174. package/dist/WithdrawalsSection-CN-lLnqX.js +0 -20
  175. package/dist/WithdrawalsSection-CN-lLnqX.js.map +0 -1
  176. package/dist/apiClient-B2JxVPlH.js.map +0 -1
  177. package/dist/apiClient-CTTKhsYb.cjs +0 -1
  178. package/dist/apiClient-CTTKhsYb.cjs.map +0 -1
  179. package/dist/silentWalletEnroll-B8pgdKZO.cjs +0 -1
  180. package/dist/useAdminDeposits-Dvx3_UUE.cjs +0 -1
  181. package/dist/useAuth-Bge6KaWN.js.map +0 -1
  182. package/dist/useAuth-DhIDTLRd.cjs +0 -1
  183. package/dist/useAuth-DhIDTLRd.cjs.map +0 -1
  184. package/dist/useOrgs-CVbacmaQ.cjs +0 -1
  185. package/dist/useSystemSettings-D9Cr7ZTl.cjs +0 -1
@@ -0,0 +1,311 @@
1
+ import { jsxs as a, jsx as e, Fragment as V } from "react/jsx-runtime";
2
+ import { useState as p, useCallback as O, useEffect as f, useMemo as B } from "react";
3
+ import { u as R } from "./useAdminDeposits-BTSyeAfg.js";
4
+ import { S as K } from "./StatsBar-BX-hHtTq.js";
5
+ function Z({
6
+ refreshInterval: s = 0,
7
+ refreshSignal: r,
8
+ className: h = "",
9
+ onLoad: b
10
+ }) {
11
+ const { getStats: N, isLoading: w, error: y, clearError: C } = R(), [d, L] = p(null), [k, m] = p(null), c = O(async () => {
12
+ try {
13
+ const i = await N();
14
+ L(i), b?.(i), m(null);
15
+ } catch (i) {
16
+ const S = i && typeof i == "object" && "message" in i ? String(i.message) : "Failed to load stats";
17
+ m(S);
18
+ }
19
+ }, [N, b]);
20
+ f(() => {
21
+ c();
22
+ }, [c]), f(() => {
23
+ r !== void 0 && c();
24
+ }, [r, c]), f(() => {
25
+ if (r !== void 0 || s <= 0) return;
26
+ const i = setInterval(c, s);
27
+ return () => clearInterval(i);
28
+ }, [s, r, c]);
29
+ const x = k || y;
30
+ return x ? /* @__PURE__ */ a("div", { className: `cedros-admin-stats cedros-admin-stats-error ${h}`, children: [
31
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error", children: x }),
32
+ /* @__PURE__ */ e(
33
+ "button",
34
+ {
35
+ type: "button",
36
+ className: "cedros-button cedros-button-outline",
37
+ onClick: () => {
38
+ C(), m(null), c();
39
+ },
40
+ children: "Retry"
41
+ }
42
+ )
43
+ ] }) : w && !d ? /* @__PURE__ */ a("div", { className: `cedros-admin-stats cedros-admin-stats-loading ${h}`, children: [
44
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
45
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-text", children: "Loading statistics..." })
46
+ ] }) : d ? /* @__PURE__ */ e("div", { className: `cedros-admin-stats ${h}`, children: /* @__PURE__ */ e(
47
+ K,
48
+ {
49
+ stats: [
50
+ { label: "Total Deposits", value: d.totalDeposits },
51
+ { label: "Private Deposits", value: d.inPrivacyPeriodCount ?? 0 },
52
+ { label: "Standard Deposits", value: d.readyForWithdrawalCount ?? 0 },
53
+ { label: "Microdeposits", value: d.nativeSolDepositCount ?? 0 }
54
+ ],
55
+ isLoading: w,
56
+ onRefresh: c
57
+ }
58
+ ) }) : null;
59
+ }
60
+ function U(s) {
61
+ return {
62
+ pending: "Pending",
63
+ detected: "Detected",
64
+ processing: "Processing",
65
+ completed: "Completed",
66
+ withdrawn: "Withdrawn",
67
+ partially_withdrawn: "Partially Withdrawn",
68
+ expired: "Expired",
69
+ failed: "Failed"
70
+ }[s] || s;
71
+ }
72
+ function q(s) {
73
+ 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";
74
+ }
75
+ function G(s) {
76
+ return s == null ? "—" : `${(s / 1e9).toFixed(4)} SOL`;
77
+ }
78
+ function H(s) {
79
+ return new Date(s).toLocaleDateString(void 0, {
80
+ year: "numeric",
81
+ month: "short",
82
+ day: "numeric",
83
+ hour: "2-digit",
84
+ minute: "2-digit"
85
+ });
86
+ }
87
+ function T(s) {
88
+ return s.length <= 12 ? s : `${s.slice(0, 6)}...${s.slice(-4)}`;
89
+ }
90
+ function z({
91
+ statusFilter: s,
92
+ pageSize: r = 20,
93
+ refreshInterval: h = 0,
94
+ refreshSignal: b,
95
+ className: N = "",
96
+ onLoad: w,
97
+ onDepositClick: y
98
+ }) {
99
+ const { listDeposits: C, isLoading: d, error: L, clearError: k } = R(), [m, c] = p([]), [x, i] = p(0), [S, I] = p(0), [j, $] = p(null), [o, _] = p("createdAt"), [l, E] = p("desc"), D = (t) => {
100
+ o === t ? E(l === "asc" ? "desc" : "asc") : (_(t), E("desc"));
101
+ }, W = B(() => [...m].sort((t, n) => {
102
+ let g, v;
103
+ switch (o) {
104
+ case "userId":
105
+ g = t.userId.toLowerCase(), v = n.userId.toLowerCase();
106
+ break;
107
+ case "amountLamports":
108
+ g = t.amountLamports ?? 0, v = n.amountLamports ?? 0;
109
+ break;
110
+ case "status":
111
+ g = t.status, v = n.status;
112
+ break;
113
+ case "createdAt":
114
+ g = new Date(t.createdAt).getTime(), v = new Date(n.createdAt).getTime();
115
+ break;
116
+ case "txSignature":
117
+ g = t.txSignature || "", v = n.txSignature || "";
118
+ break;
119
+ default:
120
+ return 0;
121
+ }
122
+ return g < v ? l === "asc" ? -1 : 1 : g > v ? l === "asc" ? 1 : -1 : 0;
123
+ }), [m, o, l]), u = O(async () => {
124
+ try {
125
+ const t = await C({ status: s, limit: r, offset: S });
126
+ c(t.deposits), i(t.total), w?.(t), $(null);
127
+ } catch (t) {
128
+ const n = t && typeof t == "object" && "message" in t ? String(t.message) : "Failed to load deposits";
129
+ $(n);
130
+ }
131
+ }, [s, r, S, C, w]);
132
+ f(() => {
133
+ I(0);
134
+ }, [s, r]), f(() => {
135
+ u();
136
+ }, [u]), f(() => {
137
+ b !== void 0 && u();
138
+ }, [b, u]), f(() => {
139
+ if (b !== void 0 || h <= 0) return;
140
+ const t = setInterval(u, h);
141
+ return () => clearInterval(t);
142
+ }, [h, b, u]);
143
+ const P = Math.ceil(x / r), A = Math.floor(S / r) + 1, M = (t) => {
144
+ const n = (t - 1) * r;
145
+ I(Math.max(0, Math.min(n, Math.max(0, x - 1))));
146
+ }, F = j || L;
147
+ return F ? /* @__PURE__ */ a("div", { className: `cedros-admin-deposit-list cedros-admin-deposit-list-error ${N}`, children: [
148
+ /* @__PURE__ */ e("p", { className: "cedros-admin-error", children: F }),
149
+ /* @__PURE__ */ e(
150
+ "button",
151
+ {
152
+ type: "button",
153
+ className: "cedros-button cedros-button-outline",
154
+ onClick: () => {
155
+ k(), $(null), u();
156
+ },
157
+ children: "Retry"
158
+ }
159
+ )
160
+ ] }) : d && m.length === 0 ? /* @__PURE__ */ a("div", { className: `cedros-admin-deposit-list cedros-admin-deposit-list-loading ${N}`, children: [
161
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-indicator" }),
162
+ /* @__PURE__ */ e("span", { className: "cedros-admin-loading-text", children: "Loading deposits..." })
163
+ ] }) : /* @__PURE__ */ a("div", { className: `cedros-admin-deposit-list ${N}`, children: [
164
+ /* @__PURE__ */ a("div", { className: "cedros-admin-deposit-list-header", children: [
165
+ /* @__PURE__ */ e("h4", { className: "cedros-admin-deposit-list-title", children: "All Deposits" }),
166
+ /* @__PURE__ */ e(
167
+ "button",
168
+ {
169
+ type: "button",
170
+ className: "cedros-admin__stats-bar-refresh",
171
+ onClick: u,
172
+ disabled: d,
173
+ title: "Refresh deposits",
174
+ "aria-label": "Refresh deposits",
175
+ children: d ? "..." : "↻"
176
+ }
177
+ )
178
+ ] }),
179
+ m.length === 0 ? /* @__PURE__ */ e("div", { className: "cedros-admin-empty", children: /* @__PURE__ */ e("p", { className: "cedros-admin-empty-message", children: "No deposits found." }) }) : /* @__PURE__ */ a(V, { children: [
180
+ /* @__PURE__ */ a("div", { className: "cedros-admin-deposit-table", children: [
181
+ /* @__PURE__ */ a("div", { className: "cedros-admin-deposit-thead", children: [
182
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
183
+ "button",
184
+ {
185
+ type: "button",
186
+ className: `cedros-admin-sort-button ${o === "userId" ? "cedros-admin-sort-active" : ""}`,
187
+ onClick: () => D("userId"),
188
+ "aria-label": "Sort by user",
189
+ children: [
190
+ "User",
191
+ " ",
192
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: o === "userId" ? l === "asc" ? "↑" : "↓" : "↕" })
193
+ ]
194
+ }
195
+ ) }),
196
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
197
+ "button",
198
+ {
199
+ type: "button",
200
+ className: `cedros-admin-sort-button ${o === "amountLamports" ? "cedros-admin-sort-active" : ""}`,
201
+ onClick: () => D("amountLamports"),
202
+ "aria-label": "Sort by amount",
203
+ children: [
204
+ "Amount",
205
+ " ",
206
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: o === "amountLamports" ? l === "asc" ? "↑" : "↓" : "↕" })
207
+ ]
208
+ }
209
+ ) }),
210
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
211
+ "button",
212
+ {
213
+ type: "button",
214
+ className: `cedros-admin-sort-button ${o === "status" ? "cedros-admin-sort-active" : ""}`,
215
+ onClick: () => D("status"),
216
+ "aria-label": "Sort by status",
217
+ children: [
218
+ "Status",
219
+ " ",
220
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: o === "status" ? l === "asc" ? "↑" : "↓" : "↕" })
221
+ ]
222
+ }
223
+ ) }),
224
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
225
+ "button",
226
+ {
227
+ type: "button",
228
+ className: `cedros-admin-sort-button ${o === "createdAt" ? "cedros-admin-sort-active" : ""}`,
229
+ onClick: () => D("createdAt"),
230
+ "aria-label": "Sort by created",
231
+ children: [
232
+ "Created",
233
+ " ",
234
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: o === "createdAt" ? l === "asc" ? "↑" : "↓" : "↕" })
235
+ ]
236
+ }
237
+ ) }),
238
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-th", children: /* @__PURE__ */ a(
239
+ "button",
240
+ {
241
+ type: "button",
242
+ className: `cedros-admin-sort-button ${o === "txSignature" ? "cedros-admin-sort-active" : ""}`,
243
+ onClick: () => D("txSignature"),
244
+ "aria-label": "Sort by transaction",
245
+ children: [
246
+ "Tx",
247
+ " ",
248
+ /* @__PURE__ */ e("span", { className: "cedros-admin-sort-icon", children: o === "txSignature" ? l === "asc" ? "↑" : "↓" : "↕" })
249
+ ]
250
+ }
251
+ ) })
252
+ ] }),
253
+ W.map((t) => /* @__PURE__ */ a(
254
+ "div",
255
+ {
256
+ className: `cedros-admin-deposit-row ${q(t.status)}`,
257
+ onClick: () => y?.(t),
258
+ onKeyDown: (n) => {
259
+ (n.key === "Enter" || n.key === " ") && (n.preventDefault(), y?.(t));
260
+ },
261
+ role: y ? "button" : void 0,
262
+ tabIndex: y ? 0 : void 0,
263
+ children: [
264
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-td", title: t.userId, children: T(t.userId) }),
265
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-td", children: G(t.amountLamports) }),
266
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-td", children: /* @__PURE__ */ e("span", { className: "cedros-admin-status-badge", children: U(t.status) }) }),
267
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-td", children: H(t.createdAt) }),
268
+ /* @__PURE__ */ e("div", { className: "cedros-admin-deposit-td", title: t.txSignature || void 0, children: t.txSignature ? T(t.txSignature) : "—" })
269
+ ]
270
+ },
271
+ t.id
272
+ ))
273
+ ] }),
274
+ P > 1 && /* @__PURE__ */ a("div", { className: "cedros-admin-pagination", children: [
275
+ /* @__PURE__ */ e(
276
+ "button",
277
+ {
278
+ type: "button",
279
+ className: "cedros-button cedros-button-outline cedros-button-sm",
280
+ onClick: () => M(A - 1),
281
+ disabled: A <= 1,
282
+ children: "Previous"
283
+ }
284
+ ),
285
+ /* @__PURE__ */ a("span", { className: "cedros-admin-page-info", children: [
286
+ "Page ",
287
+ A,
288
+ " of ",
289
+ P,
290
+ " (",
291
+ x,
292
+ " total)"
293
+ ] }),
294
+ /* @__PURE__ */ e(
295
+ "button",
296
+ {
297
+ type: "button",
298
+ className: "cedros-button cedros-button-outline cedros-button-sm",
299
+ onClick: () => M(A + 1),
300
+ disabled: A >= P,
301
+ children: "Next"
302
+ }
303
+ )
304
+ ] })
305
+ ] })
306
+ ] });
307
+ }
308
+ export {
309
+ Z as A,
310
+ z as a
311
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDepositList-CyT4VBH8.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 /** External refresh signal from parent coordinator */\n refreshSignal?: 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 refreshSignal,\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 useEffect(() => {\n if (refreshSignal === undefined) return;\n fetchStats();\n }, [refreshSignal, fetchStats]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshSignal !== undefined) return;\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchStats, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, refreshSignal, 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 /** External refresh signal from parent coordinator */\n refreshSignal?: 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 refreshSignal,\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 useEffect(() => {\n if (refreshSignal === undefined) return;\n fetchDeposits();\n }, [refreshSignal, fetchDeposits]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshSignal !== undefined) return;\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchDeposits, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, refreshSignal, 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","refreshSignal","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 t=require("react/jsx-runtime"),a=require("react"),M=require("./useAdminDeposits-BkkCwHWp.cjs"),O=require("./StatsBar-DTUZCwDD.cjs");function q({refreshInterval:s=0,refreshSignal:r,className:p="",onLoad:h}){const{getStats:f,isLoading:v,error:j,clearError:w}=M.useAdminDeposits(),[d,D]=a.useState(null),[A,u]=a.useState(null),c=a.useCallback(async()=>{try{const i=await f();D(i),h?.(i),u(null)}catch(i){const N=i&&typeof i=="object"&&"message"in i?String(i.message):"Failed to load stats";u(N)}},[f,h]);a.useEffect(()=>{c()},[c]),a.useEffect(()=>{r!==void 0&&c()},[r,c]),a.useEffect(()=>{if(r!==void 0||s<=0)return;const i=setInterval(c,s);return()=>clearInterval(i)},[s,r,c]);const g=A||j;return g?t.jsxs("div",{className:`cedros-admin-stats cedros-admin-stats-error ${p}`,children:[t.jsx("p",{className:"cedros-admin-error",children:g}),t.jsx("button",{type:"button",className:"cedros-button cedros-button-outline",onClick:()=>{w(),u(null),c()},children:"Retry"})]}):v&&!d?t.jsxs("div",{className:`cedros-admin-stats cedros-admin-stats-loading ${p}`,children:[t.jsx("span",{className:"cedros-admin-loading-indicator"}),t.jsx("span",{className:"cedros-admin-loading-text",children:"Loading statistics..."})]}):d?t.jsx("div",{className:`cedros-admin-stats ${p}`,children:t.jsx(O.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:v,onRefresh:c})}):null}function _(s){return{pending:"Pending",detected:"Detected",processing:"Processing",completed:"Completed",withdrawn:"Withdrawn",partially_withdrawn:"Partially Withdrawn",expired:"Expired",failed:"Failed"}[s]||s}function W(s){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"}function B(s){return s==null?"—":`${(s/1e9).toFixed(4)} SOL`}function V(s){return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function I(s){return s.length<=12?s:`${s.slice(0,6)}...${s.slice(-4)}`}function K({statusFilter:s,pageSize:r=20,refreshInterval:p=0,refreshSignal:h,className:f="",onLoad:v,onDepositClick:j}){const{listDeposits:w,isLoading:d,error:D,clearError:A}=M.useAdminDeposits(),[u,c]=a.useState([]),[g,i]=a.useState(0),[N,k]=a.useState(0),[F,C]=a.useState(null),[n,R]=a.useState("createdAt"),[l,E]=a.useState("desc"),y=e=>{n===e?E(l==="asc"?"desc":"asc"):(R(e),E("desc"))},T=a.useMemo(()=>[...u].sort((e,o)=>{let x,b;switch(n){case"userId":x=e.userId.toLowerCase(),b=o.userId.toLowerCase();break;case"amountLamports":x=e.amountLamports??0,b=o.amountLamports??0;break;case"status":x=e.status,b=o.status;break;case"createdAt":x=new Date(e.createdAt).getTime(),b=new Date(o.createdAt).getTime();break;case"txSignature":x=e.txSignature||"",b=o.txSignature||"";break;default:return 0}return x<b?l==="asc"?-1:1:x>b?l==="asc"?1:-1:0}),[u,n,l]),m=a.useCallback(async()=>{try{const e=await w({status:s,limit:r,offset:N});c(e.deposits),i(e.total),v?.(e),C(null)}catch(e){const o=e&&typeof e=="object"&&"message"in e?String(e.message):"Failed to load deposits";C(o)}},[s,r,N,w,v]);a.useEffect(()=>{k(0)},[s,r]),a.useEffect(()=>{m()},[m]),a.useEffect(()=>{h!==void 0&&m()},[h,m]),a.useEffect(()=>{if(h!==void 0||p<=0)return;const e=setInterval(m,p);return()=>clearInterval(e)},[p,h,m]);const L=Math.ceil(g/r),S=Math.floor(N/r)+1,$=e=>{const o=(e-1)*r;k(Math.max(0,Math.min(o,Math.max(0,g-1))))},P=F||D;return P?t.jsxs("div",{className:`cedros-admin-deposit-list cedros-admin-deposit-list-error ${f}`,children:[t.jsx("p",{className:"cedros-admin-error",children:P}),t.jsx("button",{type:"button",className:"cedros-button cedros-button-outline",onClick:()=>{A(),C(null),m()},children:"Retry"})]}):d&&u.length===0?t.jsxs("div",{className:`cedros-admin-deposit-list cedros-admin-deposit-list-loading ${f}`,children:[t.jsx("span",{className:"cedros-admin-loading-indicator"}),t.jsx("span",{className:"cedros-admin-loading-text",children:"Loading deposits..."})]}):t.jsxs("div",{className:`cedros-admin-deposit-list ${f}`,children:[t.jsxs("div",{className:"cedros-admin-deposit-list-header",children:[t.jsx("h4",{className:"cedros-admin-deposit-list-title",children:"All Deposits"}),t.jsx("button",{type:"button",className:"cedros-admin__stats-bar-refresh",onClick:m,disabled:d,title:"Refresh deposits","aria-label":"Refresh deposits",children:d?"...":"↻"})]}),u.length===0?t.jsx("div",{className:"cedros-admin-empty",children:t.jsx("p",{className:"cedros-admin-empty-message",children:"No deposits found."})}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"cedros-admin-deposit-table",children:[t.jsxs("div",{className:"cedros-admin-deposit-thead",children:[t.jsx("div",{className:"cedros-admin-deposit-th",children:t.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="userId"?"cedros-admin-sort-active":""}`,onClick:()=>y("userId"),"aria-label":"Sort by user",children:["User"," ",t.jsx("span",{className:"cedros-admin-sort-icon",children:n==="userId"?l==="asc"?"↑":"↓":"↕"})]})}),t.jsx("div",{className:"cedros-admin-deposit-th",children:t.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="amountLamports"?"cedros-admin-sort-active":""}`,onClick:()=>y("amountLamports"),"aria-label":"Sort by amount",children:["Amount"," ",t.jsx("span",{className:"cedros-admin-sort-icon",children:n==="amountLamports"?l==="asc"?"↑":"↓":"↕"})]})}),t.jsx("div",{className:"cedros-admin-deposit-th",children:t.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="status"?"cedros-admin-sort-active":""}`,onClick:()=>y("status"),"aria-label":"Sort by status",children:["Status"," ",t.jsx("span",{className:"cedros-admin-sort-icon",children:n==="status"?l==="asc"?"↑":"↓":"↕"})]})}),t.jsx("div",{className:"cedros-admin-deposit-th",children:t.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="createdAt"?"cedros-admin-sort-active":""}`,onClick:()=>y("createdAt"),"aria-label":"Sort by created",children:["Created"," ",t.jsx("span",{className:"cedros-admin-sort-icon",children:n==="createdAt"?l==="asc"?"↑":"↓":"↕"})]})}),t.jsx("div",{className:"cedros-admin-deposit-th",children:t.jsxs("button",{type:"button",className:`cedros-admin-sort-button ${n==="txSignature"?"cedros-admin-sort-active":""}`,onClick:()=>y("txSignature"),"aria-label":"Sort by transaction",children:["Tx"," ",t.jsx("span",{className:"cedros-admin-sort-icon",children:n==="txSignature"?l==="asc"?"↑":"↓":"↕"})]})})]}),T.map(e=>t.jsxs("div",{className:`cedros-admin-deposit-row ${W(e.status)}`,onClick:()=>j?.(e),onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),j?.(e))},role:j?"button":void 0,tabIndex:j?0:void 0,children:[t.jsx("div",{className:"cedros-admin-deposit-td",title:e.userId,children:I(e.userId)}),t.jsx("div",{className:"cedros-admin-deposit-td",children:B(e.amountLamports)}),t.jsx("div",{className:"cedros-admin-deposit-td",children:t.jsx("span",{className:"cedros-admin-status-badge",children:_(e.status)})}),t.jsx("div",{className:"cedros-admin-deposit-td",children:V(e.createdAt)}),t.jsx("div",{className:"cedros-admin-deposit-td",title:e.txSignature||void 0,children:e.txSignature?I(e.txSignature):"—"})]},e.id))]}),L>1&&t.jsxs("div",{className:"cedros-admin-pagination",children:[t.jsx("button",{type:"button",className:"cedros-button cedros-button-outline cedros-button-sm",onClick:()=>$(S-1),disabled:S<=1,children:"Previous"}),t.jsxs("span",{className:"cedros-admin-page-info",children:["Page ",S," of ",L," (",g," total)"]}),t.jsx("button",{type:"button",className:"cedros-button cedros-button-outline cedros-button-sm",onClick:()=>$(S+1),disabled:S>=L,children:"Next"})]})]})]})}exports.AdminDepositList=K;exports.AdminDepositStats=q;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDepositList-b2AXtLg0.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 /** External refresh signal from parent coordinator */\n refreshSignal?: 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 refreshSignal,\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 useEffect(() => {\n if (refreshSignal === undefined) return;\n fetchStats();\n }, [refreshSignal, fetchStats]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshSignal !== undefined) return;\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchStats, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, refreshSignal, 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 /** External refresh signal from parent coordinator */\n refreshSignal?: 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 refreshSignal,\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 useEffect(() => {\n if (refreshSignal === undefined) return;\n fetchDeposits();\n }, [refreshSignal, fetchDeposits]);\n\n // Auto-refresh\n useEffect(() => {\n if (refreshSignal !== undefined) return;\n if (refreshInterval <= 0) return;\n\n const interval = setInterval(fetchDeposits, refreshInterval);\n return () => clearInterval(interval);\n }, [refreshInterval, refreshSignal, 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","refreshSignal","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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"}