@cedros/login-react 0.0.5 → 0.0.7

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 (84) hide show
  1. package/dist/{AuthenticationSettings-BKvfIsUy.js → AuthenticationSettings-BXdMia7P.js} +1 -1
  2. package/dist/{AuthenticationSettings-BKvfIsUy.js.map → AuthenticationSettings-BXdMia7P.js.map} +1 -1
  3. package/dist/{AuthenticationSettings-CEVF1qTV.cjs → AuthenticationSettings-Bfeqd7W-.cjs} +1 -1
  4. package/dist/{AuthenticationSettings-CEVF1qTV.cjs.map → AuthenticationSettings-Bfeqd7W-.cjs.map} +1 -1
  5. package/dist/{CreditSystemSettings-BL7Lx9MI.js → CreditSystemSettings-DJMEmrf_.js} +1 -1
  6. package/dist/{CreditSystemSettings-BL7Lx9MI.js.map → CreditSystemSettings-DJMEmrf_.js.map} +1 -1
  7. package/dist/{CreditSystemSettings-CVxamkZ8.cjs → CreditSystemSettings-WGw9JvgT.cjs} +1 -1
  8. package/dist/{CreditSystemSettings-CVxamkZ8.cjs.map → CreditSystemSettings-WGw9JvgT.cjs.map} +1 -1
  9. package/dist/{DepositsSection-BzlzofEm.cjs → DepositsSection-DU4Bhlqq.cjs} +1 -1
  10. package/dist/{DepositsSection-BzlzofEm.cjs.map → DepositsSection-DU4Bhlqq.cjs.map} +1 -1
  11. package/dist/{DepositsSection-b-VfjqkR.js → DepositsSection-kAvvxI0T.js} +1 -1
  12. package/dist/{DepositsSection-b-VfjqkR.js.map → DepositsSection-kAvvxI0T.js.map} +1 -1
  13. package/dist/{EmailRegisterForm-BChCiZ5B.js → EmailRegisterForm-C0PStlj5.js} +2 -2
  14. package/dist/{EmailRegisterForm-BChCiZ5B.js.map → EmailRegisterForm-C0PStlj5.js.map} +1 -1
  15. package/dist/{EmailRegisterForm-B-ys4E3C.cjs → EmailRegisterForm-DaPLGws2.cjs} +1 -1
  16. package/dist/{EmailRegisterForm-B-ys4E3C.cjs.map → EmailRegisterForm-DaPLGws2.cjs.map} +1 -1
  17. package/dist/{EmailSettings-D2Y_T3ea.cjs → EmailSettings-BVkP4RUk.cjs} +1 -1
  18. package/dist/{EmailSettings-D2Y_T3ea.cjs.map → EmailSettings-BVkP4RUk.cjs.map} +1 -1
  19. package/dist/{EmailSettings-D4kz8cRX.js → EmailSettings-CVWUlpf0.js} +1 -1
  20. package/dist/{EmailSettings-D4kz8cRX.js.map → EmailSettings-CVWUlpf0.js.map} +1 -1
  21. package/dist/{EmbeddedWalletSettings-BAAnDY3_.js → EmbeddedWalletSettings-DnfPy42K.js} +1 -1
  22. package/dist/{EmbeddedWalletSettings-BAAnDY3_.js.map → EmbeddedWalletSettings-DnfPy42K.js.map} +1 -1
  23. package/dist/{EmbeddedWalletSettings-D8oqefzm.cjs → EmbeddedWalletSettings-DusUuNnf.cjs} +1 -1
  24. package/dist/{EmbeddedWalletSettings-D8oqefzm.cjs.map → EmbeddedWalletSettings-DusUuNnf.cjs.map} +1 -1
  25. package/dist/ErrorMessage-BXHiYibN.cjs +1 -0
  26. package/dist/{ErrorMessage-CntMyn93.cjs.map → ErrorMessage-BXHiYibN.cjs.map} +1 -1
  27. package/dist/{ErrorMessage-C8vKB0JG.js → ErrorMessage-DU2VBb85.js} +3 -2
  28. package/dist/{ErrorMessage-C8vKB0JG.js.map → ErrorMessage-DU2VBb85.js.map} +1 -1
  29. package/dist/{GoogleLoginButton-Ceo2sYvX.js → GoogleLoginButton-BzHr545L.js} +1 -1
  30. package/dist/{GoogleLoginButton-Ceo2sYvX.js.map → GoogleLoginButton-BzHr545L.js.map} +1 -1
  31. package/dist/{GoogleLoginButton-CJNJ-THo.cjs → GoogleLoginButton-DoAdOqb3.cjs} +1 -1
  32. package/dist/{GoogleLoginButton-CJNJ-THo.cjs.map → GoogleLoginButton-DoAdOqb3.cjs.map} +1 -1
  33. package/dist/{ServerSettings-BRcS4sht.js → ServerSettings-Bf0ttYFA.js} +1 -1
  34. package/dist/{ServerSettings-BRcS4sht.js.map → ServerSettings-Bf0ttYFA.js.map} +1 -1
  35. package/dist/{ServerSettings-Yrumq_CL.cjs → ServerSettings-BpuEK_Jg.cjs} +1 -1
  36. package/dist/{ServerSettings-Yrumq_CL.cjs.map → ServerSettings-BpuEK_Jg.cjs.map} +1 -1
  37. package/dist/{SolanaLoginButton-CqVOcPa7.js → SolanaLoginButton-C-CfZxAZ.js} +1 -1
  38. package/dist/{SolanaLoginButton-CqVOcPa7.js.map → SolanaLoginButton-C-CfZxAZ.js.map} +1 -1
  39. package/dist/{SolanaLoginButton-BlSgPW50.cjs → SolanaLoginButton-CPzms0kf.cjs} +1 -1
  40. package/dist/{SolanaLoginButton-BlSgPW50.cjs.map → SolanaLoginButton-CPzms0kf.cjs.map} +1 -1
  41. package/dist/{TeamSection-Dec3HxDj.js → TeamSection-BsQBGXeH.js} +51 -47
  42. package/dist/TeamSection-BsQBGXeH.js.map +1 -0
  43. package/dist/TeamSection-D6NxE8fI.cjs +1 -0
  44. package/dist/TeamSection-D6NxE8fI.cjs.map +1 -0
  45. package/dist/{UsersSection-D1uLBhoF.js → UsersSection-C5m0V9hD.js} +1 -1
  46. package/dist/{UsersSection-D1uLBhoF.js.map → UsersSection-C5m0V9hD.js.map} +1 -1
  47. package/dist/{UsersSection-BImSsHRA.cjs → UsersSection-NKQI8uhX.cjs} +1 -1
  48. package/dist/{UsersSection-BImSsHRA.cjs.map → UsersSection-NKQI8uhX.cjs.map} +1 -1
  49. package/dist/{WebhookSettings-fOHCAQqx.cjs → WebhookSettings-DgLem4Gn.cjs} +1 -1
  50. package/dist/{WebhookSettings-fOHCAQqx.cjs.map → WebhookSettings-DgLem4Gn.cjs.map} +1 -1
  51. package/dist/{WebhookSettings-BD-PNXDX.js → WebhookSettings-q5irnlg2.js} +1 -1
  52. package/dist/{WebhookSettings-BD-PNXDX.js.map → WebhookSettings-q5irnlg2.js.map} +1 -1
  53. package/dist/{WithdrawalsSection-_7gHudQ8.cjs → WithdrawalsSection-CwzpigYd.cjs} +1 -1
  54. package/dist/{WithdrawalsSection-_7gHudQ8.cjs.map → WithdrawalsSection-CwzpigYd.cjs.map} +1 -1
  55. package/dist/{WithdrawalsSection-CLlPpKHf.js → WithdrawalsSection-D7YieP1d.js} +1 -1
  56. package/dist/{WithdrawalsSection-CLlPpKHf.js.map → WithdrawalsSection-D7YieP1d.js.map} +1 -1
  57. package/dist/email-only.cjs +1 -1
  58. package/dist/email-only.js +2 -2
  59. package/dist/google-only.cjs +1 -1
  60. package/dist/google-only.js +2 -2
  61. package/dist/{index-BRvCMGd5.js → index-C_Zi7Tna.js} +2055 -2014
  62. package/dist/index-C_Zi7Tna.js.map +1 -0
  63. package/dist/{index-Ca3FT7KM.cjs → index-UErJ9d0z.cjs} +13 -13
  64. package/dist/index-UErJ9d0z.cjs.map +1 -0
  65. package/dist/index.cjs +1 -1
  66. package/dist/index.js +9 -9
  67. package/dist/{silentWalletEnroll-CQK5i65l.js → silentWalletEnroll-C3JRAD9_.js} +2 -2
  68. package/dist/{silentWalletEnroll-CQK5i65l.js.map → silentWalletEnroll-C3JRAD9_.js.map} +1 -1
  69. package/dist/{silentWalletEnroll-DBfS2sLe.cjs → silentWalletEnroll-DRYQAQfg.cjs} +1 -1
  70. package/dist/{silentWalletEnroll-DBfS2sLe.cjs.map → silentWalletEnroll-DRYQAQfg.cjs.map} +1 -1
  71. package/dist/solana-only.cjs +1 -1
  72. package/dist/solana-only.js +2 -2
  73. package/dist/{solanaKeypair-BD7Kq1Mw.js → solanaKeypair-BlXol3nh.js} +1 -1
  74. package/dist/{solanaKeypair-BD7Kq1Mw.js.map → solanaKeypair-BlXol3nh.js.map} +1 -1
  75. package/dist/{solanaKeypair-CBQxm2hw.cjs → solanaKeypair-C-lIR1JY.cjs} +1 -1
  76. package/dist/{solanaKeypair-CBQxm2hw.cjs.map → solanaKeypair-C-lIR1JY.cjs.map} +1 -1
  77. package/dist/types/setup.d.ts +2 -0
  78. package/package.json +1 -1
  79. package/dist/ErrorMessage-CntMyn93.cjs +0 -1
  80. package/dist/TeamSection-BgFEYBD7.cjs +0 -1
  81. package/dist/TeamSection-BgFEYBD7.cjs.map +0 -1
  82. package/dist/TeamSection-Dec3HxDj.js.map +0 -1
  83. package/dist/index-BRvCMGd5.js.map +0 -1
  84. package/dist/index-Ca3FT7KM.cjs.map +0 -1
@@ -1,49 +1,53 @@
1
- import { jsx as e, jsxs as a } from "react/jsx-runtime";
2
- import { useState as $, useEffect as k, useMemo as x } from "react";
3
- import { c as E, d as O, e as T, S as j, M as A, I as U, f as z, P as B } from "./index-BRvCMGd5.js";
4
- function G({ pluginContext: I }) {
5
- const [s, r] = $("members"), { activeOrg: n, hasPermission: i, role: o } = E(), {
6
- members: t,
7
- isLoading: N,
8
- error: f,
1
+ import { jsx as e, jsxs as n } from "react/jsx-runtime";
2
+ import { useState as x, useEffect as f, useMemo as E } from "react";
3
+ import { c as T, d as j, e as A, S as U, M as z, I as B, f as F, P as q } from "./index-C_Zi7Tna.js";
4
+ function J({ pluginContext: I }) {
5
+ const [s, r] = x("members"), { activeOrg: a, orgs: N, hasPermission: i, role: t, fetchOrgs: C } = T();
6
+ f(() => {
7
+ N.length === 0 && C();
8
+ }, []);
9
+ const {
10
+ members: o,
11
+ isLoading: M,
12
+ error: L,
9
13
  fetchMembers: b,
10
- updateMemberRole: C,
11
- removeMember: M
12
- } = O(n?.id ?? ""), {
14
+ updateMemberRole: S,
15
+ removeMember: P
16
+ } = j(a?.id ?? ""), {
13
17
  invites: v,
14
18
  isLoading: u,
15
19
  error: h,
16
20
  fetchInvites: g,
17
- createInvite: L,
18
- cancelInvite: S,
19
- resendInvite: P
20
- } = T(n?.id ?? "");
21
- k(() => {
22
- n?.id && (b(), g());
23
- }, [n?.id, b, g]);
24
- const d = x(
25
- () => t.reduce(
21
+ createInvite: R,
22
+ cancelInvite: w,
23
+ resendInvite: y
24
+ } = A(a?.id ?? "");
25
+ f(() => {
26
+ a?.id && (b(), g());
27
+ }, [a?.id, b, g]);
28
+ const d = E(
29
+ () => o.reduce(
26
30
  (l, p) => (l[p.role] = (l[p.role] ?? 0) + 1, l),
27
31
  {}
28
32
  ),
29
- [t]
33
+ [o]
30
34
  );
31
- if (!n)
35
+ if (!a)
32
36
  return /* @__PURE__ */ e("div", { className: "cedros-dashboard__section", children: /* @__PURE__ */ e("div", { className: "cedros-dashboard__empty", children: "Select an organization to manage team members." }) });
33
- const c = i("invite:create"), _ = i("invite:cancel"), m = v.length, R = d.owner ?? 0, w = d.admin ?? 0, y = d.member ?? 0;
34
- return /* @__PURE__ */ a("div", { className: "cedros-dashboard__team", children: [
37
+ const c = i("invite:create"), _ = i("invite:cancel"), m = v.length, O = d.owner ?? 0, $ = d.admin ?? 0, k = d.member ?? 0;
38
+ return /* @__PURE__ */ n("div", { className: "cedros-dashboard__team", children: [
35
39
  /* @__PURE__ */ e(
36
- j,
40
+ U,
37
41
  {
38
42
  stats: [
39
- { label: "Owners", value: R },
40
- { label: "Admins", value: w },
41
- { label: "Members", value: y },
43
+ { label: "Owners", value: O },
44
+ { label: "Admins", value: $ },
45
+ { label: "Members", value: k },
42
46
  { label: "Pending Invites", value: m }
43
47
  ]
44
48
  }
45
49
  ),
46
- /* @__PURE__ */ a("div", { className: "cedros-admin-tabs cedros-admin-tabs--line", children: [
50
+ /* @__PURE__ */ n("div", { className: "cedros-admin-tabs cedros-admin-tabs--line", children: [
47
51
  /* @__PURE__ */ e(
48
52
  "button",
49
53
  {
@@ -55,7 +59,7 @@ function G({ pluginContext: I }) {
55
59
  children: "Members"
56
60
  }
57
61
  ),
58
- /* @__PURE__ */ a(
62
+ /* @__PURE__ */ n(
59
63
  "button",
60
64
  {
61
65
  type: "button",
@@ -69,7 +73,7 @@ function G({ pluginContext: I }) {
69
73
  ]
70
74
  }
71
75
  ),
72
- o === "owner" && /* @__PURE__ */ e(
76
+ t === "owner" && /* @__PURE__ */ e(
73
77
  "button",
74
78
  {
75
79
  type: "button",
@@ -81,48 +85,48 @@ function G({ pluginContext: I }) {
81
85
  }
82
86
  )
83
87
  ] }),
84
- /* @__PURE__ */ a("div", { className: "cedros-admin-tab-content", role: "tabpanel", children: [
88
+ /* @__PURE__ */ n("div", { className: "cedros-admin-tab-content", role: "tabpanel", children: [
85
89
  s === "members" && /* @__PURE__ */ e(
86
- A,
90
+ z,
87
91
  {
88
- members: t,
92
+ members: o,
89
93
  currentUserId: I.userId,
90
- isLoading: N,
91
- error: f?.message,
94
+ isLoading: M,
95
+ error: L?.message,
92
96
  canManage: i("member:remove"),
93
97
  canChangeRoles: i("member:role_change"),
94
- onUpdateRole: C,
95
- onRemove: M
98
+ onUpdateRole: S,
99
+ onRemove: P
96
100
  }
97
101
  ),
98
- s === "invites" && /* @__PURE__ */ a("div", { className: "cedros-dashboard__invites", children: [
99
- c && /* @__PURE__ */ a("div", { className: "cedros-dashboard__section", children: [
102
+ s === "invites" && /* @__PURE__ */ n("div", { className: "cedros-dashboard__invites", children: [
103
+ c && /* @__PURE__ */ n("div", { className: "cedros-dashboard__section", children: [
100
104
  /* @__PURE__ */ e("div", { className: "cedros-dashboard__section-header", children: /* @__PURE__ */ e("h3", { className: "cedros-dashboard__section-title", children: "Send Invitation" }) }),
101
105
  /* @__PURE__ */ e(
102
- U,
106
+ B,
103
107
  {
104
- onSubmit: L,
108
+ onSubmit: R,
105
109
  isLoading: u,
106
110
  error: h?.message
107
111
  }
108
112
  )
109
113
  ] }),
110
114
  /* @__PURE__ */ e("div", { className: "cedros-dashboard__section", children: /* @__PURE__ */ e(
111
- z,
115
+ F,
112
116
  {
113
117
  invites: v,
114
118
  isLoading: u,
115
119
  error: h?.message,
116
120
  canManage: _ || c,
117
- onCancel: _ ? S : void 0,
118
- onResend: c ? P : void 0
121
+ onCancel: _ ? w : void 0,
122
+ onResend: c ? y : void 0
119
123
  }
120
124
  ) })
121
125
  ] }),
122
- s === "permissions" && o === "owner" && /* @__PURE__ */ e(B, { userRole: o })
126
+ s === "permissions" && t === "owner" && /* @__PURE__ */ e(q, { userRole: t })
123
127
  ] })
124
128
  ] });
125
129
  }
126
130
  export {
127
- G as default
131
+ J as default
128
132
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamSection-BsQBGXeH.js","sources":["../src/admin/sections/TeamSection.tsx"],"sourcesContent":["/**\n * Team Section - Plugin wrapper\n *\n * Combined team member management and invites for organizations.\n */\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { MemberList } from '../../components/members/MemberList';\nimport { InviteForm } from '../../components/invites/InviteForm';\nimport { InviteList } from '../../components/invites/InviteList';\nimport { StatsBar } from '../../components/admin/StatsBar';\nimport { PermissionsSection } from '../../components/admin/PermissionsSection';\nimport { useOrgs } from '../../hooks/useOrgs';\nimport { useMembers } from '../../hooks/useMembers';\nimport { useInvites } from '../../hooks/useInvites';\n\ntype TeamTab = 'members' | 'invites' | 'permissions';\n\nexport default function TeamSection({ pluginContext }: AdminSectionProps): React.JSX.Element {\n const [activeTab, setActiveTab] = useState<TeamTab>('members');\n const { activeOrg, orgs, hasPermission, role, fetchOrgs } = useOrgs();\n\n // Auto-fetch orgs on mount so activeOrg gets auto-selected\n useEffect(() => {\n if (orgs.length === 0) {\n fetchOrgs();\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const {\n members,\n isLoading: membersLoading,\n error: membersError,\n fetchMembers,\n updateMemberRole,\n removeMember,\n } = useMembers(activeOrg?.id ?? '');\n const {\n invites,\n isLoading: invitesLoading,\n error: invitesError,\n fetchInvites,\n createInvite,\n cancelInvite,\n resendInvite,\n } = useInvites(activeOrg?.id ?? '');\n\n useEffect(() => {\n if (activeOrg?.id) {\n fetchMembers();\n fetchInvites();\n }\n }, [activeOrg?.id, fetchMembers, fetchInvites]);\n\n // P-01: Compute role counts BEFORE any early return to follow React Hooks rules\n const roleCounts = useMemo(\n () =>\n members.reduce(\n (acc, member) => {\n acc[member.role] = (acc[member.role] ?? 0) + 1;\n return acc;\n },\n {} as Record<string, number>\n ),\n [members]\n );\n\n if (!activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n Select an organization to manage team members.\n </div>\n </div>\n );\n }\n\n const canInvite = hasPermission('invite:create');\n const canCancel = hasPermission('invite:cancel');\n const pendingCount = invites.length;\n const ownerCount = roleCounts.owner ?? 0;\n const adminCount = roleCounts.admin ?? 0;\n const memberCount = roleCounts.member ?? 0;\n\n return (\n <div className=\"cedros-dashboard__team\">\n <StatsBar\n stats={[\n { label: 'Owners', value: ownerCount },\n { label: 'Admins', value: adminCount },\n { label: 'Members', value: memberCount },\n { label: 'Pending Invites', value: pendingCount },\n ]}\n />\n {/* Tabs */}\n <div className=\"cedros-admin-tabs cedros-admin-tabs--line\">\n <button\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === 'members' ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab('members')}\n aria-selected={activeTab === 'members'}\n role=\"tab\"\n >\n Members\n </button>\n <button\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === 'invites' ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab('invites')}\n aria-selected={activeTab === 'invites'}\n role=\"tab\"\n >\n Pending Invites{pendingCount > 0 && ` (${pendingCount})`}\n </button>\n {role === 'owner' && (\n <button\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === 'permissions' ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab('permissions')}\n aria-selected={activeTab === 'permissions'}\n role=\"tab\"\n >\n Permissions\n </button>\n )}\n </div>\n\n {/* Tab content */}\n <div className=\"cedros-admin-tab-content\" role=\"tabpanel\">\n {activeTab === 'members' && (\n <MemberList\n members={members}\n currentUserId={pluginContext.userId}\n isLoading={membersLoading}\n error={membersError?.message}\n canManage={hasPermission('member:remove')}\n canChangeRoles={hasPermission('member:role_change')}\n onUpdateRole={updateMemberRole}\n onRemove={removeMember}\n />\n )}\n\n {activeTab === 'invites' && (\n <div className=\"cedros-dashboard__invites\">\n {canInvite && (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__section-header\">\n <h3 className=\"cedros-dashboard__section-title\">Send Invitation</h3>\n </div>\n <InviteForm\n onSubmit={createInvite}\n isLoading={invitesLoading}\n error={invitesError?.message}\n />\n </div>\n )}\n\n <div className=\"cedros-dashboard__section\">\n <InviteList\n invites={invites}\n isLoading={invitesLoading}\n error={invitesError?.message}\n canManage={canCancel || canInvite}\n onCancel={canCancel ? cancelInvite : undefined}\n onResend={canInvite ? resendInvite : undefined}\n />\n </div>\n </div>\n )}\n\n {activeTab === 'permissions' && role === 'owner' && <PermissionsSection userRole={role} />}\n </div>\n </div>\n );\n}\n"],"names":["TeamSection","pluginContext","activeTab","setActiveTab","useState","activeOrg","orgs","hasPermission","role","fetchOrgs","useOrgs","useEffect","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","roleCounts","useMemo","acc","member","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","jsxs","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":";;;AAmBA,SAAwBA,EAAY,EAAE,eAAAC,KAAuD;AAC3F,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAkB,SAAS,GACvD,EAAE,WAAAC,GAAW,MAAAC,GAAM,eAAAC,GAAe,MAAAC,GAAM,WAAAC,EAAA,IAAcC,EAAA;AAG5D,EAAAC,EAAU,MAAM;AACd,IAAIL,EAAK,WAAW,KAClBG,EAAA;AAAA,EAEJ,GAAG,CAAA,CAAE;AAEL,QAAM;AAAA,IACJ,SAAAG;AAAA,IACA,WAAWC;AAAA,IACX,OAAOC;AAAA,IACP,cAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAWb,GAAW,MAAM,EAAE,GAC5B;AAAA,IACJ,SAAAc;AAAA,IACA,WAAWC;AAAA,IACX,OAAOC;AAAA,IACP,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAWrB,GAAW,MAAM,EAAE;AAElC,EAAAM,EAAU,MAAM;AACd,IAAIN,GAAW,OACbU,EAAA,GACAO,EAAA;AAAA,EAEJ,GAAG,CAACjB,GAAW,IAAIU,GAAcO,CAAY,CAAC;AAG9C,QAAMK,IAAaC;AAAA,IACjB,MACEhB,EAAQ;AAAA,MACN,CAACiB,GAAKC,OACJD,EAAIC,EAAO,IAAI,KAAKD,EAAIC,EAAO,IAAI,KAAK,KAAK,GACtCD;AAAA,MAET,CAAA;AAAA,IAAC;AAAA,IAEL,CAACjB,CAAO;AAAA,EAAA;AAGV,MAAI,CAACP;AACH,WACE,gBAAA0B,EAAC,SAAI,WAAU,6BACb,4BAAC,OAAA,EAAI,WAAU,2BAA0B,UAAA,iDAAA,CAEzC,EAAA,CACF;AAIJ,QAAMC,IAAYzB,EAAc,eAAe,GACzC0B,IAAY1B,EAAc,eAAe,GACzC2B,IAAef,EAAQ,QACvBgB,IAAaR,EAAW,SAAS,GACjCS,IAAaT,EAAW,SAAS,GACjCU,IAAcV,EAAW,UAAU;AAEzC,SACE,gBAAAW,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,IAAA,gBAAAP;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,EAAE,OAAO,UAAU,OAAOJ,EAAA;AAAA,UAC1B,EAAE,OAAO,UAAU,OAAOC,EAAA;AAAA,UAC1B,EAAE,OAAO,WAAW,OAAOC,EAAA;AAAA,UAC3B,EAAE,OAAO,mBAAmB,OAAOH,EAAA;AAAA,QAAa;AAAA,MAClD;AAAA,IAAA;AAAA,IAGF,gBAAAI,EAAC,OAAA,EAAI,WAAU,6CACb,UAAA;AAAA,MAAA,gBAAAP;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,oBAAoB7B,MAAc,YAAY,4BAA4B,EAAE;AAAA,UACvF,SAAS,MAAMC,EAAa,SAAS;AAAA,UACrC,iBAAeD,MAAc;AAAA,UAC7B,MAAK;AAAA,UACN,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,gBAAAoC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,oBAAoBpC,MAAc,YAAY,4BAA4B,EAAE;AAAA,UACvF,SAAS,MAAMC,EAAa,SAAS;AAAA,UACrC,iBAAeD,MAAc;AAAA,UAC7B,MAAK;AAAA,UACN,UAAA;AAAA,YAAA;AAAA,YACiBgC,IAAe,KAAK,KAAKA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEtD1B,MAAS,WACR,gBAAAuB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,oBAAoB7B,MAAc,gBAAgB,4BAA4B,EAAE;AAAA,UAC3F,SAAS,MAAMC,EAAa,aAAa;AAAA,UACzC,iBAAeD,MAAc;AAAA,UAC7B,MAAK;AAAA,UACN,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GAEJ;AAAA,IAGA,gBAAAoC,EAAC,OAAA,EAAI,WAAU,4BAA2B,MAAK,YAC5C,UAAA;AAAA,MAAApC,MAAc,aACb,gBAAA6B;AAAA,QAACS;AAAA,QAAA;AAAA,UACC,SAAA5B;AAAA,UACA,eAAeX,EAAc;AAAA,UAC7B,WAAWY;AAAA,UACX,OAAOC,GAAc;AAAA,UACrB,WAAWP,EAAc,eAAe;AAAA,UACxC,gBAAgBA,EAAc,oBAAoB;AAAA,UAClD,cAAcS;AAAA,UACd,UAAUC;AAAA,QAAA;AAAA,MAAA;AAAA,MAIbf,MAAc,aACb,gBAAAoC,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAA;AAAA,QAAAN,KACC,gBAAAM,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA,gBAAAA,EAAC,QAAG,WAAU,mCAAkC,6BAAe,EAAA,CACjE;AAAA,UACA,gBAAAA;AAAA,YAACU;AAAA,YAAA;AAAA,cACC,UAAUlB;AAAA,cACV,WAAWH;AAAA,cACX,OAAOC,GAAc;AAAA,YAAA;AAAA,UAAA;AAAA,QACvB,GACF;AAAA,QAGF,gBAAAU,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,SAAAvB;AAAA,YACA,WAAWC;AAAA,YACX,OAAOC,GAAc;AAAA,YACrB,WAAWY,KAAaD;AAAA,YACxB,UAAUC,IAAYT,IAAe;AAAA,YACrC,UAAUQ,IAAYP,IAAe;AAAA,UAAA;AAAA,QAAA,EACvC,CACF;AAAA,MAAA,GACF;AAAA,MAGDvB,MAAc,iBAAiBM,MAAS,WAAW,gBAAAuB,EAACY,GAAA,EAAmB,UAAUnC,EAAA,CAAM;AAAA,IAAA,EAAA,CAC1F;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),n=require("./index-UErJ9d0z.cjs");function E({pluginContext:f}){const[s,t]=a.useState("members"),{activeOrg:i,orgs:p,hasPermission:r,role:o,fetchOrgs:I}=n.useOrgs();a.useEffect(()=>{p.length===0&&I()},[]);const{members:c,isLoading:N,error:C,fetchMembers:v,updateMemberRole:M,removeMember:L}=n.useMembers(i?.id??""),{invites:u,isLoading:h,error:g,fetchInvites:j,createInvite:S,cancelInvite:R,resendInvite:y}=n.useInvites(i?.id??"");a.useEffect(()=>{i?.id&&(v(),j())},[i?.id,v,j]);const d=a.useMemo(()=>c.reduce((b,_)=>(b[_.role]=(b[_.role]??0)+1,b),{}),[c]);if(!i)return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx("div",{className:"cedros-dashboard__empty",children:"Select an organization to manage team members."})});const m=r("invite:create"),x=r("invite:cancel"),l=u.length,P=d.owner??0,w=d.admin??0,O=d.member??0;return e.jsxs("div",{className:"cedros-dashboard__team",children:[e.jsx(n.StatsBar,{stats:[{label:"Owners",value:P},{label:"Admins",value:w},{label:"Members",value:O},{label:"Pending Invites",value:l}]}),e.jsxs("div",{className:"cedros-admin-tabs cedros-admin-tabs--line",children:[e.jsx("button",{type:"button",className:`cedros-admin-tab ${s==="members"?"cedros-admin-tab-active":""}`,onClick:()=>t("members"),"aria-selected":s==="members",role:"tab",children:"Members"}),e.jsxs("button",{type:"button",className:`cedros-admin-tab ${s==="invites"?"cedros-admin-tab-active":""}`,onClick:()=>t("invites"),"aria-selected":s==="invites",role:"tab",children:["Pending Invites",l>0&&` (${l})`]}),o==="owner"&&e.jsx("button",{type:"button",className:`cedros-admin-tab ${s==="permissions"?"cedros-admin-tab-active":""}`,onClick:()=>t("permissions"),"aria-selected":s==="permissions",role:"tab",children:"Permissions"})]}),e.jsxs("div",{className:"cedros-admin-tab-content",role:"tabpanel",children:[s==="members"&&e.jsx(n.MemberList,{members:c,currentUserId:f.userId,isLoading:N,error:C?.message,canManage:r("member:remove"),canChangeRoles:r("member:role_change"),onUpdateRole:M,onRemove:L}),s==="invites"&&e.jsxs("div",{className:"cedros-dashboard__invites",children:[m&&e.jsxs("div",{className:"cedros-dashboard__section",children:[e.jsx("div",{className:"cedros-dashboard__section-header",children:e.jsx("h3",{className:"cedros-dashboard__section-title",children:"Send Invitation"})}),e.jsx(n.InviteForm,{onSubmit:S,isLoading:h,error:g?.message})]}),e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(n.InviteList,{invites:u,isLoading:h,error:g?.message,canManage:x||m,onCancel:x?R:void 0,onResend:m?y:void 0})})]}),s==="permissions"&&o==="owner"&&e.jsx(n.PermissionsSection,{userRole:o})]})]})}exports.default=E;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamSection-D6NxE8fI.cjs","sources":["../src/admin/sections/TeamSection.tsx"],"sourcesContent":["/**\n * Team Section - Plugin wrapper\n *\n * Combined team member management and invites for organizations.\n */\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { MemberList } from '../../components/members/MemberList';\nimport { InviteForm } from '../../components/invites/InviteForm';\nimport { InviteList } from '../../components/invites/InviteList';\nimport { StatsBar } from '../../components/admin/StatsBar';\nimport { PermissionsSection } from '../../components/admin/PermissionsSection';\nimport { useOrgs } from '../../hooks/useOrgs';\nimport { useMembers } from '../../hooks/useMembers';\nimport { useInvites } from '../../hooks/useInvites';\n\ntype TeamTab = 'members' | 'invites' | 'permissions';\n\nexport default function TeamSection({ pluginContext }: AdminSectionProps): React.JSX.Element {\n const [activeTab, setActiveTab] = useState<TeamTab>('members');\n const { activeOrg, orgs, hasPermission, role, fetchOrgs } = useOrgs();\n\n // Auto-fetch orgs on mount so activeOrg gets auto-selected\n useEffect(() => {\n if (orgs.length === 0) {\n fetchOrgs();\n }\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const {\n members,\n isLoading: membersLoading,\n error: membersError,\n fetchMembers,\n updateMemberRole,\n removeMember,\n } = useMembers(activeOrg?.id ?? '');\n const {\n invites,\n isLoading: invitesLoading,\n error: invitesError,\n fetchInvites,\n createInvite,\n cancelInvite,\n resendInvite,\n } = useInvites(activeOrg?.id ?? '');\n\n useEffect(() => {\n if (activeOrg?.id) {\n fetchMembers();\n fetchInvites();\n }\n }, [activeOrg?.id, fetchMembers, fetchInvites]);\n\n // P-01: Compute role counts BEFORE any early return to follow React Hooks rules\n const roleCounts = useMemo(\n () =>\n members.reduce(\n (acc, member) => {\n acc[member.role] = (acc[member.role] ?? 0) + 1;\n return acc;\n },\n {} as Record<string, number>\n ),\n [members]\n );\n\n if (!activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n Select an organization to manage team members.\n </div>\n </div>\n );\n }\n\n const canInvite = hasPermission('invite:create');\n const canCancel = hasPermission('invite:cancel');\n const pendingCount = invites.length;\n const ownerCount = roleCounts.owner ?? 0;\n const adminCount = roleCounts.admin ?? 0;\n const memberCount = roleCounts.member ?? 0;\n\n return (\n <div className=\"cedros-dashboard__team\">\n <StatsBar\n stats={[\n { label: 'Owners', value: ownerCount },\n { label: 'Admins', value: adminCount },\n { label: 'Members', value: memberCount },\n { label: 'Pending Invites', value: pendingCount },\n ]}\n />\n {/* Tabs */}\n <div className=\"cedros-admin-tabs cedros-admin-tabs--line\">\n <button\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === 'members' ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab('members')}\n aria-selected={activeTab === 'members'}\n role=\"tab\"\n >\n Members\n </button>\n <button\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === 'invites' ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab('invites')}\n aria-selected={activeTab === 'invites'}\n role=\"tab\"\n >\n Pending Invites{pendingCount > 0 && ` (${pendingCount})`}\n </button>\n {role === 'owner' && (\n <button\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === 'permissions' ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab('permissions')}\n aria-selected={activeTab === 'permissions'}\n role=\"tab\"\n >\n Permissions\n </button>\n )}\n </div>\n\n {/* Tab content */}\n <div className=\"cedros-admin-tab-content\" role=\"tabpanel\">\n {activeTab === 'members' && (\n <MemberList\n members={members}\n currentUserId={pluginContext.userId}\n isLoading={membersLoading}\n error={membersError?.message}\n canManage={hasPermission('member:remove')}\n canChangeRoles={hasPermission('member:role_change')}\n onUpdateRole={updateMemberRole}\n onRemove={removeMember}\n />\n )}\n\n {activeTab === 'invites' && (\n <div className=\"cedros-dashboard__invites\">\n {canInvite && (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__section-header\">\n <h3 className=\"cedros-dashboard__section-title\">Send Invitation</h3>\n </div>\n <InviteForm\n onSubmit={createInvite}\n isLoading={invitesLoading}\n error={invitesError?.message}\n />\n </div>\n )}\n\n <div className=\"cedros-dashboard__section\">\n <InviteList\n invites={invites}\n isLoading={invitesLoading}\n error={invitesError?.message}\n canManage={canCancel || canInvite}\n onCancel={canCancel ? cancelInvite : undefined}\n onResend={canInvite ? resendInvite : undefined}\n />\n </div>\n </div>\n )}\n\n {activeTab === 'permissions' && role === 'owner' && <PermissionsSection userRole={role} />}\n </div>\n </div>\n );\n}\n"],"names":["TeamSection","pluginContext","activeTab","setActiveTab","useState","activeOrg","orgs","hasPermission","role","fetchOrgs","useOrgs","useEffect","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","roleCounts","useMemo","acc","member","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","jsxs","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as a, jsxs as p } from "react/jsx-runtime";
2
2
  import { useState as l, useEffect as S, useCallback as _, useMemo as U } from "react";
3
- import { A as E, S as I, a as v, u as y, b as A } from "./index-BRvCMGd5.js";
3
+ import { A as E, S as I, a as v, u as y, b as A } from "./index-C_Zi7Tna.js";
4
4
  const L = ["email", "google", "apple", "solana", "webauthn", "sso"], T = {
5
5
  email: "Email Users",
6
6
  google: "Google Users",
@@ -1 +1 @@
1
- {"version":3,"file":"UsersSection-D1uLBhoF.js","sources":["../src/admin/sections/UsersSection.tsx"],"sourcesContent":["/**\n * Users Section - Plugin wrapper\n *\n * Admin user management with list and detail views.\n */\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { AdminUserList } from '../../components/admin/AdminUserList';\nimport { AdminUserDetail } from '../../components/admin/AdminUserDetail';\nimport { StatsBar } from '../../components/admin/StatsBar';\nimport { useAdminUsers } from '../../hooks/useAdminUsers';\nimport { useSystemSettings } from '../../hooks/useSystemSettings';\nimport type { AdminUser, AdminUserStatsResponse } from '../../types';\n\nconst METHOD_ORDER = ['email', 'google', 'apple', 'solana', 'webauthn', 'sso'] as const;\n\nconst METHOD_LABELS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'Email Users',\n google: 'Google Users',\n apple: 'Apple Users',\n solana: 'Solana Users',\n webauthn: 'Passkey Users',\n sso: 'SSO Provider Users',\n};\n\nconst METHOD_SETTINGS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'auth_email_enabled',\n google: 'auth_google_enabled',\n apple: 'auth_apple_enabled',\n solana: 'auth_solana_enabled',\n webauthn: 'auth_webauthn_enabled',\n sso: 'feature_sso',\n};\n\nfunction useUsersStats() {\n const { getStats } = useAdminUsers();\n const { fetchSettings, getValue } = useSystemSettings();\n const [stats, setStats] = useState<AdminUserStatsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [settingsFetched, setSettingsFetched] = useState(false);\n\n useEffect(() => {\n if (!settingsFetched) {\n fetchSettings();\n setSettingsFetched(true);\n }\n }, [fetchSettings, settingsFetched]);\n\n const isSettingEnabled = useCallback(\n (key: string): boolean => {\n const value = getValue(key);\n if (value === undefined) return false;\n return value === 'true' || value === '1';\n },\n [getValue]\n );\n\n const fetchStats = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await getStats();\n setStats(result);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load user stats');\n } finally {\n setIsLoading(false);\n }\n }, [getStats]);\n\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n const statsItems = useMemo(() => {\n const items = [{ label: 'Total Users', value: stats?.total ?? '—' }];\n\n METHOD_ORDER.forEach((method) => {\n if (!isSettingEnabled(METHOD_SETTINGS[method])) return;\n items.push({\n label: METHOD_LABELS[method],\n value: stats?.authMethodCounts[method] ?? 0,\n });\n });\n\n return items;\n }, [stats, isSettingEnabled]);\n\n return { statsItems, isLoading, error, refresh: fetchStats };\n}\n\nexport default function UsersSection({\n pluginContext,\n pageSize = 20,\n}: AdminSectionProps): React.JSX.Element {\n const [selectedUser, setSelectedUser] = useState<AdminUser | null>(null);\n const { statsItems, isLoading, error, refresh } = useUsersStats();\n\n if (selectedUser) {\n return (\n <div className=\"cedros-dashboard__section\">\n <AdminUserDetail\n userId={selectedUser.id}\n onBack={() => setSelectedUser(null)}\n currentUserId={pluginContext.userId}\n />\n </div>\n );\n }\n\n return (\n <div className=\"cedros-dashboard__section\">\n <StatsBar stats={statsItems} isLoading={isLoading} onRefresh={refresh} />\n {error && <p className=\"cedros-admin-error-inline\">{error}</p>}\n <p className=\"cedros-dashboard__text-muted\">\n All registered users in the system. Requires system admin privileges.\n </p>\n <AdminUserList\n pageSize={pageSize}\n currentUserId={pluginContext.userId}\n onUserClick={(user) => setSelectedUser(user)}\n />\n </div>\n );\n}\n"],"names":["METHOD_ORDER","METHOD_LABELS","METHOD_SETTINGS","useUsersStats","getStats","useAdminUsers","fetchSettings","getValue","useSystemSettings","stats","setStats","useState","isLoading","setIsLoading","error","setError","settingsFetched","setSettingsFetched","useEffect","isSettingEnabled","useCallback","key","value","fetchStats","result","err","useMemo","items","method","UsersSection","pluginContext","pageSize","selectedUser","setSelectedUser","statsItems","refresh","jsx","AdminUserDetail","jsxs","StatsBar","AdminUserList","user"],"mappings":"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"}
1
+ {"version":3,"file":"UsersSection-C5m0V9hD.js","sources":["../src/admin/sections/UsersSection.tsx"],"sourcesContent":["/**\n * Users Section - Plugin wrapper\n *\n * Admin user management with list and detail views.\n */\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { AdminUserList } from '../../components/admin/AdminUserList';\nimport { AdminUserDetail } from '../../components/admin/AdminUserDetail';\nimport { StatsBar } from '../../components/admin/StatsBar';\nimport { useAdminUsers } from '../../hooks/useAdminUsers';\nimport { useSystemSettings } from '../../hooks/useSystemSettings';\nimport type { AdminUser, AdminUserStatsResponse } from '../../types';\n\nconst METHOD_ORDER = ['email', 'google', 'apple', 'solana', 'webauthn', 'sso'] as const;\n\nconst METHOD_LABELS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'Email Users',\n google: 'Google Users',\n apple: 'Apple Users',\n solana: 'Solana Users',\n webauthn: 'Passkey Users',\n sso: 'SSO Provider Users',\n};\n\nconst METHOD_SETTINGS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'auth_email_enabled',\n google: 'auth_google_enabled',\n apple: 'auth_apple_enabled',\n solana: 'auth_solana_enabled',\n webauthn: 'auth_webauthn_enabled',\n sso: 'feature_sso',\n};\n\nfunction useUsersStats() {\n const { getStats } = useAdminUsers();\n const { fetchSettings, getValue } = useSystemSettings();\n const [stats, setStats] = useState<AdminUserStatsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [settingsFetched, setSettingsFetched] = useState(false);\n\n useEffect(() => {\n if (!settingsFetched) {\n fetchSettings();\n setSettingsFetched(true);\n }\n }, [fetchSettings, settingsFetched]);\n\n const isSettingEnabled = useCallback(\n (key: string): boolean => {\n const value = getValue(key);\n if (value === undefined) return false;\n return value === 'true' || value === '1';\n },\n [getValue]\n );\n\n const fetchStats = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await getStats();\n setStats(result);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load user stats');\n } finally {\n setIsLoading(false);\n }\n }, [getStats]);\n\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n const statsItems = useMemo(() => {\n const items = [{ label: 'Total Users', value: stats?.total ?? '—' }];\n\n METHOD_ORDER.forEach((method) => {\n if (!isSettingEnabled(METHOD_SETTINGS[method])) return;\n items.push({\n label: METHOD_LABELS[method],\n value: stats?.authMethodCounts[method] ?? 0,\n });\n });\n\n return items;\n }, [stats, isSettingEnabled]);\n\n return { statsItems, isLoading, error, refresh: fetchStats };\n}\n\nexport default function UsersSection({\n pluginContext,\n pageSize = 20,\n}: AdminSectionProps): React.JSX.Element {\n const [selectedUser, setSelectedUser] = useState<AdminUser | null>(null);\n const { statsItems, isLoading, error, refresh } = useUsersStats();\n\n if (selectedUser) {\n return (\n <div className=\"cedros-dashboard__section\">\n <AdminUserDetail\n userId={selectedUser.id}\n onBack={() => setSelectedUser(null)}\n currentUserId={pluginContext.userId}\n />\n </div>\n );\n }\n\n return (\n <div className=\"cedros-dashboard__section\">\n <StatsBar stats={statsItems} isLoading={isLoading} onRefresh={refresh} />\n {error && <p className=\"cedros-admin-error-inline\">{error}</p>}\n <p className=\"cedros-dashboard__text-muted\">\n All registered users in the system. Requires system admin privileges.\n </p>\n <AdminUserList\n pageSize={pageSize}\n currentUserId={pluginContext.userId}\n onUserClick={(user) => setSelectedUser(user)}\n />\n </div>\n );\n}\n"],"names":["METHOD_ORDER","METHOD_LABELS","METHOD_SETTINGS","useUsersStats","getStats","useAdminUsers","fetchSettings","getValue","useSystemSettings","stats","setStats","useState","isLoading","setIsLoading","error","setError","settingsFetched","setSettingsFetched","useEffect","isSettingEnabled","useCallback","key","value","fetchStats","result","err","useMemo","items","method","UsersSection","pluginContext","pageSize","selectedUser","setSelectedUser","statsItems","refresh","jsx","AdminUserDetail","jsxs","StatsBar","AdminUserList","user"],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),e=require("react"),u=require("./index-Ca3FT7KM.cjs"),b=["email","google","apple","solana","webauthn","sso"],U={email:"Email Users",google:"Google Users",apple:"Apple Users",solana:"Solana Users",webauthn:"Passkey Users",sso:"SSO Provider Users"},p={email:"auth_email_enabled",google:"auth_google_enabled",apple:"auth_apple_enabled",solana:"auth_solana_enabled",webauthn:"auth_webauthn_enabled",sso:"feature_sso"};function E(){const{getStats:n}=u.useAdminUsers(),{fetchSettings:i,getValue:l}=u.useSystemSettings(),[r,d]=e.useState(null),[h,o]=e.useState(!1),[f,c]=e.useState(null),[m,_]=e.useState(!1);e.useEffect(()=>{m||(i(),_(!0))},[i,m]);const g=e.useCallback(s=>{const t=l(s);return t===void 0?!1:t==="true"||t==="1"},[l]),S=e.useCallback(async()=>{o(!0),c(null);try{const s=await n();d(s)}catch(s){c(s instanceof Error?s.message:"Failed to load user stats")}finally{o(!1)}},[n]);return e.useEffect(()=>{S()},[S]),{statsItems:e.useMemo(()=>{const s=[{label:"Total Users",value:r?.total??"—"}];return b.forEach(t=>{g(p[t])&&s.push({label:U[t],value:r?.authMethodCounts[t]??0})}),s},[r,g]),isLoading:h,error:f,refresh:S}}function I({pluginContext:n,pageSize:i=20}){const[l,r]=e.useState(null),{statsItems:d,isLoading:h,error:o,refresh:f}=E();return l?a.jsx("div",{className:"cedros-dashboard__section",children:a.jsx(u.AdminUserDetail,{userId:l.id,onBack:()=>r(null),currentUserId:n.userId})}):a.jsxs("div",{className:"cedros-dashboard__section",children:[a.jsx(u.StatsBar,{stats:d,isLoading:h,onRefresh:f}),o&&a.jsx("p",{className:"cedros-admin-error-inline",children:o}),a.jsx("p",{className:"cedros-dashboard__text-muted",children:"All registered users in the system. Requires system admin privileges."}),a.jsx(u.AdminUserList,{pageSize:i,currentUserId:n.userId,onUserClick:c=>r(c)})]})}exports.default=I;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),e=require("react"),u=require("./index-UErJ9d0z.cjs"),b=["email","google","apple","solana","webauthn","sso"],U={email:"Email Users",google:"Google Users",apple:"Apple Users",solana:"Solana Users",webauthn:"Passkey Users",sso:"SSO Provider Users"},p={email:"auth_email_enabled",google:"auth_google_enabled",apple:"auth_apple_enabled",solana:"auth_solana_enabled",webauthn:"auth_webauthn_enabled",sso:"feature_sso"};function E(){const{getStats:n}=u.useAdminUsers(),{fetchSettings:i,getValue:l}=u.useSystemSettings(),[r,d]=e.useState(null),[h,o]=e.useState(!1),[f,c]=e.useState(null),[m,_]=e.useState(!1);e.useEffect(()=>{m||(i(),_(!0))},[i,m]);const g=e.useCallback(s=>{const t=l(s);return t===void 0?!1:t==="true"||t==="1"},[l]),S=e.useCallback(async()=>{o(!0),c(null);try{const s=await n();d(s)}catch(s){c(s instanceof Error?s.message:"Failed to load user stats")}finally{o(!1)}},[n]);return e.useEffect(()=>{S()},[S]),{statsItems:e.useMemo(()=>{const s=[{label:"Total Users",value:r?.total??"—"}];return b.forEach(t=>{g(p[t])&&s.push({label:U[t],value:r?.authMethodCounts[t]??0})}),s},[r,g]),isLoading:h,error:f,refresh:S}}function I({pluginContext:n,pageSize:i=20}){const[l,r]=e.useState(null),{statsItems:d,isLoading:h,error:o,refresh:f}=E();return l?a.jsx("div",{className:"cedros-dashboard__section",children:a.jsx(u.AdminUserDetail,{userId:l.id,onBack:()=>r(null),currentUserId:n.userId})}):a.jsxs("div",{className:"cedros-dashboard__section",children:[a.jsx(u.StatsBar,{stats:d,isLoading:h,onRefresh:f}),o&&a.jsx("p",{className:"cedros-admin-error-inline",children:o}),a.jsx("p",{className:"cedros-dashboard__text-muted",children:"All registered users in the system. Requires system admin privileges."}),a.jsx(u.AdminUserList,{pageSize:i,currentUserId:n.userId,onUserClick:c=>r(c)})]})}exports.default=I;
@@ -1 +1 @@
1
- {"version":3,"file":"UsersSection-BImSsHRA.cjs","sources":["../src/admin/sections/UsersSection.tsx"],"sourcesContent":["/**\n * Users Section - Plugin wrapper\n *\n * Admin user management with list and detail views.\n */\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { AdminUserList } from '../../components/admin/AdminUserList';\nimport { AdminUserDetail } from '../../components/admin/AdminUserDetail';\nimport { StatsBar } from '../../components/admin/StatsBar';\nimport { useAdminUsers } from '../../hooks/useAdminUsers';\nimport { useSystemSettings } from '../../hooks/useSystemSettings';\nimport type { AdminUser, AdminUserStatsResponse } from '../../types';\n\nconst METHOD_ORDER = ['email', 'google', 'apple', 'solana', 'webauthn', 'sso'] as const;\n\nconst METHOD_LABELS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'Email Users',\n google: 'Google Users',\n apple: 'Apple Users',\n solana: 'Solana Users',\n webauthn: 'Passkey Users',\n sso: 'SSO Provider Users',\n};\n\nconst METHOD_SETTINGS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'auth_email_enabled',\n google: 'auth_google_enabled',\n apple: 'auth_apple_enabled',\n solana: 'auth_solana_enabled',\n webauthn: 'auth_webauthn_enabled',\n sso: 'feature_sso',\n};\n\nfunction useUsersStats() {\n const { getStats } = useAdminUsers();\n const { fetchSettings, getValue } = useSystemSettings();\n const [stats, setStats] = useState<AdminUserStatsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [settingsFetched, setSettingsFetched] = useState(false);\n\n useEffect(() => {\n if (!settingsFetched) {\n fetchSettings();\n setSettingsFetched(true);\n }\n }, [fetchSettings, settingsFetched]);\n\n const isSettingEnabled = useCallback(\n (key: string): boolean => {\n const value = getValue(key);\n if (value === undefined) return false;\n return value === 'true' || value === '1';\n },\n [getValue]\n );\n\n const fetchStats = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await getStats();\n setStats(result);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load user stats');\n } finally {\n setIsLoading(false);\n }\n }, [getStats]);\n\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n const statsItems = useMemo(() => {\n const items = [{ label: 'Total Users', value: stats?.total ?? '—' }];\n\n METHOD_ORDER.forEach((method) => {\n if (!isSettingEnabled(METHOD_SETTINGS[method])) return;\n items.push({\n label: METHOD_LABELS[method],\n value: stats?.authMethodCounts[method] ?? 0,\n });\n });\n\n return items;\n }, [stats, isSettingEnabled]);\n\n return { statsItems, isLoading, error, refresh: fetchStats };\n}\n\nexport default function UsersSection({\n pluginContext,\n pageSize = 20,\n}: AdminSectionProps): React.JSX.Element {\n const [selectedUser, setSelectedUser] = useState<AdminUser | null>(null);\n const { statsItems, isLoading, error, refresh } = useUsersStats();\n\n if (selectedUser) {\n return (\n <div className=\"cedros-dashboard__section\">\n <AdminUserDetail\n userId={selectedUser.id}\n onBack={() => setSelectedUser(null)}\n currentUserId={pluginContext.userId}\n />\n </div>\n );\n }\n\n return (\n <div className=\"cedros-dashboard__section\">\n <StatsBar stats={statsItems} isLoading={isLoading} onRefresh={refresh} />\n {error && <p className=\"cedros-admin-error-inline\">{error}</p>}\n <p className=\"cedros-dashboard__text-muted\">\n All registered users in the system. Requires system admin privileges.\n </p>\n <AdminUserList\n pageSize={pageSize}\n currentUserId={pluginContext.userId}\n onUserClick={(user) => setSelectedUser(user)}\n />\n </div>\n );\n}\n"],"names":["METHOD_ORDER","METHOD_LABELS","METHOD_SETTINGS","useUsersStats","getStats","useAdminUsers","fetchSettings","getValue","useSystemSettings","stats","setStats","useState","isLoading","setIsLoading","error","setError","settingsFetched","setSettingsFetched","useEffect","isSettingEnabled","useCallback","key","value","fetchStats","result","err","useMemo","items","method","UsersSection","pluginContext","pageSize","selectedUser","setSelectedUser","statsItems","refresh","jsx","AdminUserDetail","jsxs","StatsBar","AdminUserList","user"],"mappings":"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"}
1
+ {"version":3,"file":"UsersSection-NKQI8uhX.cjs","sources":["../src/admin/sections/UsersSection.tsx"],"sourcesContent":["/**\n * Users Section - Plugin wrapper\n *\n * Admin user management with list and detail views.\n */\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { AdminUserList } from '../../components/admin/AdminUserList';\nimport { AdminUserDetail } from '../../components/admin/AdminUserDetail';\nimport { StatsBar } from '../../components/admin/StatsBar';\nimport { useAdminUsers } from '../../hooks/useAdminUsers';\nimport { useSystemSettings } from '../../hooks/useSystemSettings';\nimport type { AdminUser, AdminUserStatsResponse } from '../../types';\n\nconst METHOD_ORDER = ['email', 'google', 'apple', 'solana', 'webauthn', 'sso'] as const;\n\nconst METHOD_LABELS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'Email Users',\n google: 'Google Users',\n apple: 'Apple Users',\n solana: 'Solana Users',\n webauthn: 'Passkey Users',\n sso: 'SSO Provider Users',\n};\n\nconst METHOD_SETTINGS: Record<(typeof METHOD_ORDER)[number], string> = {\n email: 'auth_email_enabled',\n google: 'auth_google_enabled',\n apple: 'auth_apple_enabled',\n solana: 'auth_solana_enabled',\n webauthn: 'auth_webauthn_enabled',\n sso: 'feature_sso',\n};\n\nfunction useUsersStats() {\n const { getStats } = useAdminUsers();\n const { fetchSettings, getValue } = useSystemSettings();\n const [stats, setStats] = useState<AdminUserStatsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [settingsFetched, setSettingsFetched] = useState(false);\n\n useEffect(() => {\n if (!settingsFetched) {\n fetchSettings();\n setSettingsFetched(true);\n }\n }, [fetchSettings, settingsFetched]);\n\n const isSettingEnabled = useCallback(\n (key: string): boolean => {\n const value = getValue(key);\n if (value === undefined) return false;\n return value === 'true' || value === '1';\n },\n [getValue]\n );\n\n const fetchStats = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await getStats();\n setStats(result);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load user stats');\n } finally {\n setIsLoading(false);\n }\n }, [getStats]);\n\n useEffect(() => {\n fetchStats();\n }, [fetchStats]);\n\n const statsItems = useMemo(() => {\n const items = [{ label: 'Total Users', value: stats?.total ?? '—' }];\n\n METHOD_ORDER.forEach((method) => {\n if (!isSettingEnabled(METHOD_SETTINGS[method])) return;\n items.push({\n label: METHOD_LABELS[method],\n value: stats?.authMethodCounts[method] ?? 0,\n });\n });\n\n return items;\n }, [stats, isSettingEnabled]);\n\n return { statsItems, isLoading, error, refresh: fetchStats };\n}\n\nexport default function UsersSection({\n pluginContext,\n pageSize = 20,\n}: AdminSectionProps): React.JSX.Element {\n const [selectedUser, setSelectedUser] = useState<AdminUser | null>(null);\n const { statsItems, isLoading, error, refresh } = useUsersStats();\n\n if (selectedUser) {\n return (\n <div className=\"cedros-dashboard__section\">\n <AdminUserDetail\n userId={selectedUser.id}\n onBack={() => setSelectedUser(null)}\n currentUserId={pluginContext.userId}\n />\n </div>\n );\n }\n\n return (\n <div className=\"cedros-dashboard__section\">\n <StatsBar stats={statsItems} isLoading={isLoading} onRefresh={refresh} />\n {error && <p className=\"cedros-admin-error-inline\">{error}</p>}\n <p className=\"cedros-dashboard__text-muted\">\n All registered users in the system. Requires system admin privileges.\n </p>\n <AdminUserList\n pageSize={pageSize}\n currentUserId={pluginContext.userId}\n onUserClick={(user) => setSelectedUser(user)}\n />\n </div>\n );\n}\n"],"names":["METHOD_ORDER","METHOD_LABELS","METHOD_SETTINGS","useUsersStats","getStats","useAdminUsers","fetchSettings","getValue","useSystemSettings","stats","setStats","useState","isLoading","setIsLoading","error","setError","settingsFetched","setSettingsFetched","useEffect","isSettingEnabled","useCallback","key","value","fetchStats","result","err","useMemo","items","method","UsersSection","pluginContext","pageSize","selectedUser","setSelectedUser","statsItems","refresh","jsx","AdminUserDetail","jsxs","StatsBar","AdminUserList","user"],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const t=require("./index-Ca3FT7KM.cjs");function r(o){return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(t.WebhookSettings,{})})}exports.default=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const t=require("./index-UErJ9d0z.cjs");function r(o){return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(t.WebhookSettings,{})})}exports.default=r;
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookSettings-fOHCAQqx.cjs","sources":["../src/admin/sections/WebhookSettings.tsx"],"sourcesContent":["/**\n * Webhook Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { WebhookSettings as Settings } from '../../components/admin/settings';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport default function WebhookSettings(_props: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["WebhookSettings","_props","jsx","Settings"],"mappings":"8KASA,SAAwBA,EAAgBC,EAA8C,CACpF,aACG,MAAA,CAAI,UAAU,4BACb,SAAAC,MAACC,EAAAA,kBAAS,EACZ,CAEJ"}
1
+ {"version":3,"file":"WebhookSettings-DgLem4Gn.cjs","sources":["../src/admin/sections/WebhookSettings.tsx"],"sourcesContent":["/**\n * Webhook Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { WebhookSettings as Settings } from '../../components/admin/settings';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport default function WebhookSettings(_props: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["WebhookSettings","_props","jsx","Settings"],"mappings":"8KASA,SAAwBA,EAAgBC,EAA8C,CACpF,aACG,MAAA,CAAI,UAAU,4BACb,SAAAC,MAACC,EAAAA,kBAAS,EACZ,CAEJ"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as o } from "react/jsx-runtime";
2
2
  import "react";
3
- import { W as r } from "./index-BRvCMGd5.js";
3
+ import { W as r } from "./index-C_Zi7Tna.js";
4
4
  function a(t) {
5
5
  return /* @__PURE__ */ o("div", { className: "cedros-dashboard__section", children: /* @__PURE__ */ o(r, {}) });
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookSettings-BD-PNXDX.js","sources":["../src/admin/sections/WebhookSettings.tsx"],"sourcesContent":["/**\n * Webhook Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { WebhookSettings as Settings } from '../../components/admin/settings';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport default function WebhookSettings(_props: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["WebhookSettings","_props","jsx","Settings"],"mappings":";;;AASA,SAAwBA,EAAgBC,GAA8C;AACpF,2BACG,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAC,EAACC,KAAS,GACZ;AAEJ;"}
1
+ {"version":3,"file":"WebhookSettings-q5irnlg2.js","sources":["../src/admin/sections/WebhookSettings.tsx"],"sourcesContent":["/**\n * Webhook Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport { WebhookSettings as Settings } from '../../components/admin/settings';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport default function WebhookSettings(_props: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["WebhookSettings","_props","jsx","Settings"],"mappings":";;;AASA,SAAwBA,EAAgBC,GAA8C;AACpF,2BACG,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAC,EAACC,KAAS,GACZ;AAEJ;"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime");require("react");const s=require("./index-Ca3FT7KM.cjs");function a({pageSize:e=20,refreshInterval:i=0}){return d.jsxs("div",{className:"cedros-dashboard__withdrawals",children:[d.jsx(s.AdminWithdrawalStats,{refreshInterval:i}),d.jsx("p",{className:"cedros-dashboard__text-muted",children:"Track deposits through the withdrawal pipeline: privacy period, ready for processing, and completed."}),d.jsxs("div",{className:"cedros-dashboard__pipeline",children:[d.jsx(s.AdminPrivacyPeriodDeposits,{pageSize:e,refreshInterval:i}),d.jsx(s.AdminWithdrawalQueue,{pageSize:e,refreshInterval:i}),d.jsx(s.AdminWithdrawalHistory,{pageSize:e,refreshInterval:i})]})]})}exports.default=a;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime");require("react");const s=require("./index-UErJ9d0z.cjs");function a({pageSize:e=20,refreshInterval:i=0}){return d.jsxs("div",{className:"cedros-dashboard__withdrawals",children:[d.jsx(s.AdminWithdrawalStats,{refreshInterval:i}),d.jsx("p",{className:"cedros-dashboard__text-muted",children:"Track deposits through the withdrawal pipeline: privacy period, ready for processing, and completed."}),d.jsxs("div",{className:"cedros-dashboard__pipeline",children:[d.jsx(s.AdminPrivacyPeriodDeposits,{pageSize:e,refreshInterval:i}),d.jsx(s.AdminWithdrawalQueue,{pageSize:e,refreshInterval:i}),d.jsx(s.AdminWithdrawalHistory,{pageSize:e,refreshInterval:i})]})]})}exports.default=a;
@@ -1 +1 @@
1
- {"version":3,"file":"WithdrawalsSection-_7gHudQ8.cjs","sources":["../src/admin/sections/WithdrawalsSection.tsx"],"sourcesContent":["/**\n * Withdrawals Section - Plugin wrapper\n *\n * Admin withdrawal pipeline: privacy period, queue, and history.\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport {\n AdminPrivacyPeriodDeposits,\n AdminWithdrawalQueue,\n AdminWithdrawalHistory,\n AdminWithdrawalStats,\n} from '../../components/deposit/admin';\n\nexport default function WithdrawalsSection({\n pageSize = 20,\n refreshInterval = 0,\n}: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__withdrawals\">\n <AdminWithdrawalStats refreshInterval={refreshInterval} />\n <p className=\"cedros-dashboard__text-muted\">\n Track deposits through the withdrawal pipeline: privacy period, ready for processing, and\n completed.\n </p>\n\n {/* Pipeline view: Privacy Period -> Ready -> Completed */}\n <div className=\"cedros-dashboard__pipeline\">\n <AdminPrivacyPeriodDeposits pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalQueue pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalHistory pageSize={pageSize} refreshInterval={refreshInterval} />\n </div>\n </div>\n );\n}\n"],"names":["WithdrawalsSection","pageSize","refreshInterval","jsxs","jsx","AdminWithdrawalStats","AdminPrivacyPeriodDeposits","AdminWithdrawalQueue","AdminWithdrawalHistory"],"mappings":"8KAeA,SAAwBA,EAAmB,CACzC,SAAAC,EAAW,GACX,gBAAAC,EAAkB,CACpB,EAAyC,CACvC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAC,MAACC,EAAAA,sBAAqB,gBAAAH,EAAkC,EACxDE,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,SAAA,uGAG5C,EAGAD,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAC,EAAAA,IAACE,EAAAA,2BAAA,CAA2B,SAAAL,EAAoB,gBAAAC,CAAA,CAAkC,EAClFE,EAAAA,IAACG,EAAAA,qBAAA,CAAqB,SAAAN,EAAoB,gBAAAC,CAAA,CAAkC,EAC5EE,EAAAA,IAACI,EAAAA,uBAAA,CAAuB,SAAAP,EAAoB,gBAAAC,CAAA,CAAkC,CAAA,CAAA,CAChF,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"WithdrawalsSection-CwzpigYd.cjs","sources":["../src/admin/sections/WithdrawalsSection.tsx"],"sourcesContent":["/**\n * Withdrawals Section - Plugin wrapper\n *\n * Admin withdrawal pipeline: privacy period, queue, and history.\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport {\n AdminPrivacyPeriodDeposits,\n AdminWithdrawalQueue,\n AdminWithdrawalHistory,\n AdminWithdrawalStats,\n} from '../../components/deposit/admin';\n\nexport default function WithdrawalsSection({\n pageSize = 20,\n refreshInterval = 0,\n}: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__withdrawals\">\n <AdminWithdrawalStats refreshInterval={refreshInterval} />\n <p className=\"cedros-dashboard__text-muted\">\n Track deposits through the withdrawal pipeline: privacy period, ready for processing, and\n completed.\n </p>\n\n {/* Pipeline view: Privacy Period -> Ready -> Completed */}\n <div className=\"cedros-dashboard__pipeline\">\n <AdminPrivacyPeriodDeposits pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalQueue pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalHistory pageSize={pageSize} refreshInterval={refreshInterval} />\n </div>\n </div>\n );\n}\n"],"names":["WithdrawalsSection","pageSize","refreshInterval","jsxs","jsx","AdminWithdrawalStats","AdminPrivacyPeriodDeposits","AdminWithdrawalQueue","AdminWithdrawalHistory"],"mappings":"8KAeA,SAAwBA,EAAmB,CACzC,SAAAC,EAAW,GACX,gBAAAC,EAAkB,CACpB,EAAyC,CACvC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAC,MAACC,EAAAA,sBAAqB,gBAAAH,EAAkC,EACxDE,EAAAA,IAAC,IAAA,CAAE,UAAU,+BAA+B,SAAA,uGAG5C,EAGAD,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAC,EAAAA,IAACE,EAAAA,2BAAA,CAA2B,SAAAL,EAAoB,gBAAAC,CAAA,CAAkC,EAClFE,EAAAA,IAACG,EAAAA,qBAAA,CAAqB,SAAAN,EAAoB,gBAAAC,CAAA,CAAkC,EAC5EE,EAAAA,IAACI,EAAAA,uBAAA,CAAuB,SAAAP,EAAoB,gBAAAC,CAAA,CAAkC,CAAA,CAAA,CAChF,CAAA,EACF,CAEJ"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as s, jsx as d } from "react/jsx-runtime";
2
2
  import "react";
3
- import { i as r, j as o, k as t, l as e } from "./index-BRvCMGd5.js";
3
+ import { i as r, j as o, k as t, l as e } from "./index-C_Zi7Tna.js";
4
4
  function p({
5
5
  pageSize: i = 20,
6
6
  refreshInterval: a = 0
@@ -1 +1 @@
1
- {"version":3,"file":"WithdrawalsSection-CLlPpKHf.js","sources":["../src/admin/sections/WithdrawalsSection.tsx"],"sourcesContent":["/**\n * Withdrawals Section - Plugin wrapper\n *\n * Admin withdrawal pipeline: privacy period, queue, and history.\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport {\n AdminPrivacyPeriodDeposits,\n AdminWithdrawalQueue,\n AdminWithdrawalHistory,\n AdminWithdrawalStats,\n} from '../../components/deposit/admin';\n\nexport default function WithdrawalsSection({\n pageSize = 20,\n refreshInterval = 0,\n}: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__withdrawals\">\n <AdminWithdrawalStats refreshInterval={refreshInterval} />\n <p className=\"cedros-dashboard__text-muted\">\n Track deposits through the withdrawal pipeline: privacy period, ready for processing, and\n completed.\n </p>\n\n {/* Pipeline view: Privacy Period -> Ready -> Completed */}\n <div className=\"cedros-dashboard__pipeline\">\n <AdminPrivacyPeriodDeposits pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalQueue pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalHistory pageSize={pageSize} refreshInterval={refreshInterval} />\n </div>\n </div>\n );\n}\n"],"names":["WithdrawalsSection","pageSize","refreshInterval","jsxs","jsx","AdminWithdrawalStats","AdminPrivacyPeriodDeposits","AdminWithdrawalQueue","AdminWithdrawalHistory"],"mappings":";;;AAeA,SAAwBA,EAAmB;AAAA,EACzC,UAAAC,IAAW;AAAA,EACX,iBAAAC,IAAkB;AACpB,GAAyC;AACvC,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAqB,iBAAAH,GAAkC;AAAA,IACxD,gBAAAE,EAAC,KAAA,EAAE,WAAU,gCAA+B,UAAA,wGAG5C;AAAA,IAGA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,MAAA,gBAAAC,EAACE,GAAA,EAA2B,UAAAL,GAAoB,iBAAAC,EAAA,CAAkC;AAAA,MAClF,gBAAAE,EAACG,GAAA,EAAqB,UAAAN,GAAoB,iBAAAC,EAAA,CAAkC;AAAA,MAC5E,gBAAAE,EAACI,GAAA,EAAuB,UAAAP,GAAoB,iBAAAC,EAAA,CAAkC;AAAA,IAAA,EAAA,CAChF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"WithdrawalsSection-D7YieP1d.js","sources":["../src/admin/sections/WithdrawalsSection.tsx"],"sourcesContent":["/**\n * Withdrawals Section - Plugin wrapper\n *\n * Admin withdrawal pipeline: privacy period, queue, and history.\n */\n\nimport React from 'react';\nimport type { AdminSectionProps } from '../types';\nimport {\n AdminPrivacyPeriodDeposits,\n AdminWithdrawalQueue,\n AdminWithdrawalHistory,\n AdminWithdrawalStats,\n} from '../../components/deposit/admin';\n\nexport default function WithdrawalsSection({\n pageSize = 20,\n refreshInterval = 0,\n}: AdminSectionProps): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__withdrawals\">\n <AdminWithdrawalStats refreshInterval={refreshInterval} />\n <p className=\"cedros-dashboard__text-muted\">\n Track deposits through the withdrawal pipeline: privacy period, ready for processing, and\n completed.\n </p>\n\n {/* Pipeline view: Privacy Period -> Ready -> Completed */}\n <div className=\"cedros-dashboard__pipeline\">\n <AdminPrivacyPeriodDeposits pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalQueue pageSize={pageSize} refreshInterval={refreshInterval} />\n <AdminWithdrawalHistory pageSize={pageSize} refreshInterval={refreshInterval} />\n </div>\n </div>\n );\n}\n"],"names":["WithdrawalsSection","pageSize","refreshInterval","jsxs","jsx","AdminWithdrawalStats","AdminPrivacyPeriodDeposits","AdminWithdrawalQueue","AdminWithdrawalHistory"],"mappings":";;;AAeA,SAAwBA,EAAmB;AAAA,EACzC,UAAAC,IAAW;AAAA,EACX,iBAAAC,IAAkB;AACpB,GAAyC;AACvC,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAqB,iBAAAH,GAAkC;AAAA,IACxD,gBAAAE,EAAC,KAAA,EAAE,WAAU,gCAA+B,UAAA,wGAG5C;AAAA,IAGA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,MAAA,gBAAAC,EAACE,GAAA,EAA2B,UAAAL,GAAoB,iBAAAC,EAAA,CAAkC;AAAA,MAClF,gBAAAE,EAACG,GAAA,EAAqB,UAAAN,GAAoB,iBAAAC,EAAA,CAAkC;AAAA,MAC5E,gBAAAE,EAACI,GAAA,EAAuB,UAAAP,GAAoB,iBAAAC,EAAA,CAAkC;AAAA,IAAA,EAAA,CAChF;AAAA,EAAA,GACF;AAEJ;"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ErrorMessage-CntMyn93.cjs"),r=require("./EmailRegisterForm-B-ys4E3C.cjs"),o=require("./validation-BeXIfuHB.cjs");exports.CedrosLoginProvider=e.CedrosLoginProvider;exports.ErrorMessage=e.ErrorMessage;exports.LoadingSpinner=e.LoadingSpinner;exports.useAuth=e.useAuth;exports.useCedrosLogin=e.useCedrosLogin;exports.EmailLoginForm=r.EmailLoginForm;exports.EmailRegisterForm=r.EmailRegisterForm;exports.PasswordInput=r.PasswordInput;exports.useEmailAuth=r.useEmailAuth;exports.validatePassword=o.validatePassword;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ErrorMessage-BXHiYibN.cjs"),r=require("./EmailRegisterForm-DaPLGws2.cjs"),o=require("./validation-BeXIfuHB.cjs");exports.CedrosLoginProvider=e.CedrosLoginProvider;exports.ErrorMessage=e.ErrorMessage;exports.LoadingSpinner=e.LoadingSpinner;exports.useAuth=e.useAuth;exports.useCedrosLogin=e.useCedrosLogin;exports.EmailLoginForm=r.EmailLoginForm;exports.EmailRegisterForm=r.EmailRegisterForm;exports.PasswordInput=r.PasswordInput;exports.useEmailAuth=r.useEmailAuth;exports.validatePassword=o.validatePassword;
@@ -1,5 +1,5 @@
1
- import { C as r, E as o, L as e, a as i, u as m } from "./ErrorMessage-C8vKB0JG.js";
2
- import { E as u, a as d, P as n, u as g } from "./EmailRegisterForm-BChCiZ5B.js";
1
+ import { C as r, E as o, L as e, a as i, u as m } from "./ErrorMessage-DU2VBb85.js";
2
+ import { E as u, a as d, P as n, u as g } from "./EmailRegisterForm-C0PStlj5.js";
3
3
  import { v as p } from "./validation-BebL7hMF.js";
4
4
  export {
5
5
  r as CedrosLoginProvider,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./ErrorMessage-CntMyn93.cjs"),e=require("./GoogleLoginButton-CJNJ-THo.cjs");exports.CedrosLoginProvider=o.CedrosLoginProvider;exports.ErrorMessage=o.ErrorMessage;exports.LoadingSpinner=o.LoadingSpinner;exports.useAuth=o.useAuth;exports.useCedrosLogin=o.useCedrosLogin;exports.GoogleLoginButton=e.GoogleLoginButton;exports.useGoogleAuth=e.useGoogleAuth;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./ErrorMessage-BXHiYibN.cjs"),e=require("./GoogleLoginButton-DoAdOqb3.cjs");exports.CedrosLoginProvider=o.CedrosLoginProvider;exports.ErrorMessage=o.ErrorMessage;exports.LoadingSpinner=o.LoadingSpinner;exports.useAuth=o.useAuth;exports.useCedrosLogin=o.useCedrosLogin;exports.GoogleLoginButton=e.GoogleLoginButton;exports.useGoogleAuth=e.useGoogleAuth;
@@ -1,5 +1,5 @@
1
- import { C as e, E as r, L as a, a as u, u as g } from "./ErrorMessage-C8vKB0JG.js";
2
- import { G as i, u as t } from "./GoogleLoginButton-Ceo2sYvX.js";
1
+ import { C as e, E as r, L as a, a as u, u as g } from "./ErrorMessage-DU2VBb85.js";
2
+ import { G as i, u as t } from "./GoogleLoginButton-BzHr545L.js";
3
3
  export {
4
4
  e as CedrosLoginProvider,
5
5
  r as ErrorMessage,