@cedros/login-react 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AuthenticationSettings-UOHce4G0.cjs → AuthenticationSettings-BxpBLsUX.cjs} +1 -1
- package/dist/{AuthenticationSettings-UOHce4G0.cjs.map → AuthenticationSettings-BxpBLsUX.cjs.map} +1 -1
- package/dist/{AuthenticationSettings-EaQzrn7-.js → AuthenticationSettings-eTN4qtHV.js} +1 -1
- package/dist/{AuthenticationSettings-EaQzrn7-.js.map → AuthenticationSettings-eTN4qtHV.js.map} +1 -1
- package/dist/{CreditSystemSettings-BClUVM4R.cjs → CreditSystemSettings-BuBKDfKL.cjs} +1 -1
- package/dist/{CreditSystemSettings-BClUVM4R.cjs.map → CreditSystemSettings-BuBKDfKL.cjs.map} +1 -1
- package/dist/{CreditSystemSettings-BcoLajmO.js → CreditSystemSettings-D7avf3PS.js} +1 -1
- package/dist/{CreditSystemSettings-BcoLajmO.js.map → CreditSystemSettings-D7avf3PS.js.map} +1 -1
- package/dist/{DepositsSection-DPr60Pty.cjs → DepositsSection-DEh9Oy0V.cjs} +1 -1
- package/dist/{DepositsSection-DPr60Pty.cjs.map → DepositsSection-DEh9Oy0V.cjs.map} +1 -1
- package/dist/{DepositsSection-C6DUs6iI.js → DepositsSection-Db4irTZb.js} +1 -1
- package/dist/{DepositsSection-C6DUs6iI.js.map → DepositsSection-Db4irTZb.js.map} +1 -1
- package/dist/{EmailSettings-BM7tGO1t.cjs → EmailSettings-CGocWYc0.cjs} +1 -1
- package/dist/{EmailSettings-BM7tGO1t.cjs.map → EmailSettings-CGocWYc0.cjs.map} +1 -1
- package/dist/{EmailSettings-DFVkODH_.js → EmailSettings-sN1OCw50.js} +1 -1
- package/dist/{EmailSettings-DFVkODH_.js.map → EmailSettings-sN1OCw50.js.map} +1 -1
- package/dist/{EmbeddedWalletSettings-DGJST5MD.cjs → EmbeddedWalletSettings-NZfbc5K8.cjs} +1 -1
- package/dist/{EmbeddedWalletSettings-DGJST5MD.cjs.map → EmbeddedWalletSettings-NZfbc5K8.cjs.map} +1 -1
- package/dist/{EmbeddedWalletSettings-BnHEtzpS.js → EmbeddedWalletSettings-qpRuCk4R.js} +1 -1
- package/dist/{EmbeddedWalletSettings-BnHEtzpS.js.map → EmbeddedWalletSettings-qpRuCk4R.js.map} +1 -1
- package/dist/{ServerSettings-B2YxkgLu.cjs → ServerSettings-Bkr_xuDx.cjs} +1 -1
- package/dist/{ServerSettings-B2YxkgLu.cjs.map → ServerSettings-Bkr_xuDx.cjs.map} +1 -1
- package/dist/{ServerSettings-jIwIl7mV.js → ServerSettings-CQn3-uuP.js} +1 -1
- package/dist/{ServerSettings-jIwIl7mV.js.map → ServerSettings-CQn3-uuP.js.map} +1 -1
- package/dist/{TeamSection-D_9-sbM5.js → TeamSection-DNozLdU4.js} +19 -19
- package/dist/TeamSection-DNozLdU4.js.map +1 -0
- package/dist/TeamSection-W9SC2Keh.cjs +1 -0
- package/dist/TeamSection-W9SC2Keh.cjs.map +1 -0
- package/dist/{UsersSection-nwTQCl2X.cjs → UsersSection-DDfHW_ao.cjs} +1 -1
- package/dist/{UsersSection-nwTQCl2X.cjs.map → UsersSection-DDfHW_ao.cjs.map} +1 -1
- package/dist/{UsersSection--yCs-uC9.js → UsersSection-DlfHGrJK.js} +1 -1
- package/dist/{UsersSection--yCs-uC9.js.map → UsersSection-DlfHGrJK.js.map} +1 -1
- package/dist/{WebhookSettings-CDLNe806.cjs → WebhookSettings-9dcnVNH_.cjs} +1 -1
- package/dist/{WebhookSettings-CDLNe806.cjs.map → WebhookSettings-9dcnVNH_.cjs.map} +1 -1
- package/dist/{WebhookSettings-C_3R0bqk.js → WebhookSettings-Cx30aHt_.js} +1 -1
- package/dist/{WebhookSettings-C_3R0bqk.js.map → WebhookSettings-Cx30aHt_.js.map} +1 -1
- package/dist/{WithdrawalsSection-wDptaqpp.cjs → WithdrawalsSection-MFj2muP6.cjs} +1 -1
- package/dist/{WithdrawalsSection-wDptaqpp.cjs.map → WithdrawalsSection-MFj2muP6.cjs.map} +1 -1
- package/dist/{WithdrawalsSection-5I0Ax4H0.js → WithdrawalsSection-ouu6VoQA.js} +1 -1
- package/dist/{WithdrawalsSection-5I0Ax4H0.js.map → WithdrawalsSection-ouu6VoQA.js.map} +1 -1
- package/dist/{index-RSdLR9t4.cjs → index-CCOKNxfU.cjs} +1 -1
- package/dist/{index-RSdLR9t4.cjs.map → index-CCOKNxfU.cjs.map} +1 -1
- package/dist/{index-BO6O-6S_.js → index-Djb8LQZ6.js} +1 -1
- package/dist/{index-BO6O-6S_.js.map → index-Djb8LQZ6.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/TeamSection-CnCzNEe9.cjs +0 -1
- package/dist/TeamSection-CnCzNEe9.cjs.map +0 -1
- package/dist/TeamSection-D_9-sbM5.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./ErrorMessage-BXHiYibN.cjs"),e=require("./index-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./ErrorMessage-BXHiYibN.cjs"),e=require("./index-CCOKNxfU.cjs"),s=require("./EmailRegisterForm-DaPLGws2.cjs"),i=require("./GoogleLoginButton-DoAdOqb3.cjs"),o=require("./SolanaLoginButton-CPzms0kf.cjs"),n=require("./validation-BeXIfuHB.cjs");exports.CedrosLoginProvider=t.CedrosLoginProvider;exports.ErrorMessage=t.ErrorMessage;exports.LoadingSpinner=t.LoadingSpinner;exports.getEmbeddedWalletInfo=t.getEmbeddedWalletInfo;exports.isEmbeddedWalletAvailable=t.isEmbeddedWalletAvailable;exports.useAuth=t.useAuth;exports.useCedrosLogin=t.useCedrosLogin;exports.useWallet=t.useWallet;exports.useWalletMaterial=t.useWalletMaterial;exports.AdminDepositList=e.AdminDepositList;exports.AdminDepositStats=e.AdminDepositStats;exports.AdminIcons=e.Icons;exports.AdminPrivacyPeriodDeposits=e.AdminPrivacyPeriodDeposits;exports.AdminShell=e.AdminShell;exports.AdminUserList=e.AdminUserList;exports.AdminWithdrawalHistory=e.AdminWithdrawalHistory;exports.AdminWithdrawalQueue=e.AdminWithdrawalQueue;exports.AdminWithdrawalStats=e.AdminWithdrawalStats;exports.AppleLoginButton=e.AppleLoginButton;exports.AuthenticationSettings=e.AuthenticationSettings;exports.CapabilityWarning=e.CapabilityWarning;exports.CedrosAdminDashboard=e.CedrosAdminDashboard;exports.CreditBalance=e.CreditBalance;exports.CreditSystemSettings=e.CreditSystemSettings;exports.DepositFlow=e.DepositFlow;exports.EmailSettings=e.EmailSettings;exports.EmbeddedWalletSettings=e.EmbeddedWalletSettings;exports.ErrorBoundary=e.ErrorBoundary;exports.ForgotPasswordForm=e.ForgotPasswordForm;exports.FullPageLayout=e.FullPageLayout;exports.History=e.History;exports.I18nProvider=e.I18nProvider;exports.InviteForm=e.InviteForm;exports.InviteList=e.InviteList;exports.LoginButton=e.LoginButton;exports.LoginForm=e.LoginForm;exports.LoginModal=e.LoginModal;exports.MemberList=e.MemberList;exports.OrgSelector=e.OrgSelector;exports.OrgSwitcher=e.OrgSwitcher;exports.PasskeyLoginButton=e.PasskeyLoginButton;exports.PasskeyPrompt=e.PasskeyPrompt;exports.PrivacyCashSettings=e.CreditSystemSettings;exports.ProfileDropdown=e.ProfileDropdown;exports.RecoveryPhraseDisplay=e.RecoveryPhraseDisplay;exports.RecoveryPhraseInput=e.RecoveryPhraseInput;exports.ResetPasswordForm=e.ResetPasswordForm;exports.SUPPORTED_TOKENS=e.SUPPORTED_TOKENS;exports.SecuritySettings=e.SecuritySettings;exports.ServerSettings=e.ServerSettings;exports.SessionList=e.SessionList;exports.SettingsPageLayout=e.SettingsPageLayout;exports.SetupWizard=e.SetupWizard;exports.SplitPageLayout=e.SplitPageLayout;exports.SystemSettings=e.SystemSettings;exports.TieredAmountSlider=e.TieredAmountSlider;exports.TokenSelector=e.TokenSelector;exports.TotpSettings=e.TotpSettings;exports.TotpSetup=e.TotpSetup;exports.UserProfileSettings=e.UserProfileSettings;exports.WalletAddressRow=e.WalletAddressRow;exports.WalletEnrollment=e.WalletEnrollment;exports.WalletManager=e.WalletManager;exports.WalletRecovery=e.WalletRecovery;exports.WalletStatus=e.WalletStatus;exports.WalletUnlock=e.WalletUnlock;exports.WebhookSettings=e.WebhookSettings;exports.cedrosLoginPlugin=e.cedrosLoginPlugin;exports.defaultTranslations=e.defaultTranslations;exports.getTierForAmount=e.getTierForAmount;exports.loginPlugin=e.cedrosLoginPlugin;exports.mergeTranslations=e.mergeTranslations;exports.useAdminDeposits=e.useAdminDeposits;exports.useAdminShell=e.useAdminShell;exports.useAdminUsers=e.useAdminUsers;exports.useAppleAuth=e.useAppleAuth;exports.useAuthorize=e.useAuthorize;exports.useCredits=e.useCredits;exports.useDeposit=e.useDeposit;exports.useInvites=e.useInvites;exports.useLocale=e.useLocale;exports.useMembers=e.useMembers;exports.useOrgs=e.useOrgs;exports.usePasskeySigning=e.usePasskeySigning;exports.usePasswordReset=e.usePasswordReset;exports.usePendingRecovery=e.usePendingRecovery;exports.useProfile=e.useProfile;exports.useServerFeatures=e.useServerFeatures;exports.useSessions=e.useSessions;exports.useSetup=e.useSetup;exports.useSystemSettings=e.useSystemSettings;exports.useTotp=e.useTotp;exports.useTransactionSigning=e.useTransactionSigning;exports.useTranslations=e.useTranslations;exports.useWalletEnrollment=e.useWalletEnrollment;exports.useWalletRecovery=e.useWalletRecovery;exports.useWalletSigning=e.useWalletSigning;exports.useWebAuthn=e.useWebAuthn;exports.EmailLoginForm=s.EmailLoginForm;exports.EmailRegisterForm=s.EmailRegisterForm;exports.OtpInput=s.OtpInput;exports.PasswordInput=s.PasswordInput;exports.TotpVerify=s.TotpVerify;exports.useEmailAuth=s.useEmailAuth;exports.useInstantLink=s.useInstantLink;exports.useTotpVerify=s.useTotpVerify;exports.GoogleLoginButton=i.GoogleLoginButton;exports.useGoogleAuth=i.useGoogleAuth;exports.SolanaLoginButton=o.SolanaLoginButton;exports.useSolanaAuth=o.useSolanaAuth;exports.validatePassword=n.validatePassword;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { C as e, E as t, L as o, B as i, z as r, a as n, u as l, x as u, n as d } from "./ErrorMessage-DU2VBb85.js";
|
|
2
|
-
import { h as m, g as S, $ as p, j as P, Y as A, a as y, l as L, k as W, i as h, r as c, m as v, y as E, Q as T, a8 as f, C as w, a3 as b, n as F, E as C, ac as D, F as I, aa as R, a9 as k, av as x, I as B, f as O, L as M, q as U, p as z, M as G, O as H, t as V, s as _, K as j, C as q, T as K, w as N, x as Q, R as J, a7 as X, V as Y, o as Z, v as $, X as ss, U as as, ab as es, N as ts, a5 as os, a4 as is, a1 as rs, a0 as ns, a2 as ls, H as us, z as ds, J as gs, D as ms, G as Ss, B as ps, W as Ps, _ as As, ay as ys, a6 as Ls, _ as Ws, az as hs, ar as cs, Z as vs, u as Es, ad as Ts, ah as fs, aq as ws, ap as bs, e as Fs, ax as Cs, d as Ds, c as Is, ak as Rs, af as ks, am as xs, au as Bs, at as Os, ag as Ms, as as Us, b as zs, ao as Gs, an as Hs, aw as Vs, ai as _s, al as js, aj as qs, ae as Ks } from "./index-
|
|
2
|
+
import { h as m, g as S, $ as p, j as P, Y as A, a as y, l as L, k as W, i as h, r as c, m as v, y as E, Q as T, a8 as f, C as w, a3 as b, n as F, E as C, ac as D, F as I, aa as R, a9 as k, av as x, I as B, f as O, L as M, q as U, p as z, M as G, O as H, t as V, s as _, K as j, C as q, T as K, w as N, x as Q, R as J, a7 as X, V as Y, o as Z, v as $, X as ss, U as as, ab as es, N as ts, a5 as os, a4 as is, a1 as rs, a0 as ns, a2 as ls, H as us, z as ds, J as gs, D as ms, G as Ss, B as ps, W as Ps, _ as As, ay as ys, a6 as Ls, _ as Ws, az as hs, ar as cs, Z as vs, u as Es, ad as Ts, ah as fs, aq as ws, ap as bs, e as Fs, ax as Cs, d as Ds, c as Is, ak as Rs, af as ks, am as xs, au as Bs, at as Os, ag as Ms, as as Us, b as zs, ao as Gs, an as Hs, aw as Vs, ai as _s, al as js, aj as qs, ae as Ks } from "./index-Djb8LQZ6.js";
|
|
3
3
|
import { E as Qs, a as Js, O as Xs, P as Ys, T as Zs, u as $s, d as sa, e as aa } from "./EmailRegisterForm-C0PStlj5.js";
|
|
4
4
|
import { G as ta, u as oa } from "./GoogleLoginButton-BzHr545L.js";
|
|
5
5
|
import { S as ra, u as na } from "./SolanaLoginButton-C-CfZxAZ.js";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),n=require("./index-RSdLR9t4.cjs");function T({pluginContext:f}){const[s,o]=a.useState("members"),{activeOrg:r,orgs:I,hasPermission:i,role:t,isLoading:C,error:v,fetchOrgs:u}=n.useOrgs();a.useEffect(()=>{I.length===0&&u()},[]);const{members:d,isLoading:L,error:M,fetchMembers:h,updateMemberRole:y,removeMember:R}=n.useMembers(r?.id??""),{invites:g,isLoading:x,error:j,fetchInvites:_,createInvite:S,cancelInvite:P,resendInvite:w}=n.useInvites(r?.id??"");a.useEffect(()=>{r?.id&&(h(),_())},[r?.id,h,_]);const c=a.useMemo(()=>d.reduce((b,p)=>(b[p.role]=(b[p.role]??0)+1,b),{}),[d]);if(C&&!r)return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsxs("div",{className:"cedros-dashboard__empty",children:[e.jsx("span",{className:"cedros-admin-loading-indicator"}),e.jsx("span",{className:"cedros-admin-loading-text",children:"Loading organization..."})]})});if(v&&!r)return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsxs("div",{className:"cedros-dashboard__empty",children:[e.jsx("p",{className:"cedros-admin-error",children:v.message}),e.jsx("button",{type:"button",className:"cedros-button cedros-button-outline",onClick:u,children:"Retry"})]})});if(!r)return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx("div",{className:"cedros-dashboard__empty",children:"No organizations found."})});const l=i("invite:create"),N=i("invite:cancel"),m=g.length,E=c.owner??0,O=c.admin??0,k=c.member??0;return e.jsxs("div",{className:"cedros-dashboard__team",children:[e.jsx(n.StatsBar,{stats:[{label:"Owners",value:E},{label:"Admins",value:O},{label:"Members",value:k},{label:"Pending Invites",value:m}]}),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:()=>o("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:()=>o("invites"),"aria-selected":s==="invites",role:"tab",children:["Pending Invites",m>0&&` (${m})`]}),t==="owner"&&e.jsx("button",{type:"button",className:`cedros-admin-tab ${s==="permissions"?"cedros-admin-tab-active":""}`,onClick:()=>o("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:d,currentUserId:f.userId,isLoading:L,error:M?.message,canManage:i("member:remove"),canChangeRoles:i("member:role_change"),onUpdateRole:y,onRemove:R}),s==="invites"&&e.jsxs("div",{className:"cedros-dashboard__invites",children:[l&&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:x,error:j?.message})]}),e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(n.InviteList,{invites:g,isLoading:x,error:j?.message,canManage:N||l,onCancel:N?P:void 0,onResend:l?w:void 0})})]}),s==="permissions"&&t==="owner"&&e.jsx(n.PermissionsSection,{userRole:t})]})]})}exports.default=T;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TeamSection-CnCzNEe9.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, isLoading: orgsLoading, error: orgsError, 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 (orgsLoading && !activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading organization...</span>\n </div>\n </div>\n );\n }\n\n if (orgsError && !activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n <p className=\"cedros-admin-error\">{orgsError.message}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={fetchOrgs}\n >\n Retry\n </button>\n </div>\n </div>\n );\n }\n\n if (!activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n No organizations found.\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","orgsLoading","orgsError","fetchOrgs","useOrgs","useEffect","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","roleCounts","useMemo","acc","member","jsxs","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TeamSection-D_9-sbM5.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, isLoading: orgsLoading, error: orgsError, 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 (orgsLoading && !activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n <span className=\"cedros-admin-loading-indicator\" />\n <span className=\"cedros-admin-loading-text\">Loading organization...</span>\n </div>\n </div>\n );\n }\n\n if (orgsError && !activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n <p className=\"cedros-admin-error\">{orgsError.message}</p>\n <button\n type=\"button\"\n className=\"cedros-button cedros-button-outline\"\n onClick={fetchOrgs}\n >\n Retry\n </button>\n </div>\n </div>\n );\n }\n\n if (!activeOrg) {\n return (\n <div className=\"cedros-dashboard__section\">\n <div className=\"cedros-dashboard__empty\">\n No organizations found.\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","orgsLoading","orgsError","fetchOrgs","useOrgs","useEffect","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","roleCounts","useMemo","acc","member","jsxs","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
|