@cedros/login-react 0.0.39 → 0.0.41
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-DUXpyiJ5.js → AuthenticationSettings-CSoFp-_2.js} +1 -1
- package/dist/{AuthenticationSettings-DUXpyiJ5.js.map → AuthenticationSettings-CSoFp-_2.js.map} +1 -1
- package/dist/{AuthenticationSettings-Dk1LX0CK.cjs → AuthenticationSettings-Cu5Z2mTC.cjs} +1 -1
- package/dist/{AuthenticationSettings-Dk1LX0CK.cjs.map → AuthenticationSettings-Cu5Z2mTC.cjs.map} +1 -1
- package/dist/{AuthenticationSettings-BF_7Ea6Z.js → AuthenticationSettings-D4ExU-2a.js} +1 -1
- package/dist/{AuthenticationSettings-BF_7Ea6Z.js.map → AuthenticationSettings-D4ExU-2a.js.map} +1 -1
- package/dist/{AuthenticationSettings-BMDrCVSf.cjs → AuthenticationSettings-DABzZHuI.cjs} +1 -1
- package/dist/{AuthenticationSettings-BMDrCVSf.cjs.map → AuthenticationSettings-DABzZHuI.cjs.map} +1 -1
- package/dist/AutosaveStatus-B1A1zORa.cjs +1 -0
- package/dist/AutosaveStatus-B1A1zORa.cjs.map +1 -0
- package/dist/{AutosaveStatus-CSZsp6w7.js → AutosaveStatus-DMjvXzP2.js} +526 -341
- package/dist/AutosaveStatus-DMjvXzP2.js.map +1 -0
- package/dist/CreditSystemSettings-BWuiRTtA.cjs +1 -0
- package/dist/CreditSystemSettings-BWuiRTtA.cjs.map +1 -0
- package/dist/{CreditSystemSettings-Cj21_Ug8.js → CreditSystemSettings-BjQdysRS.js} +1 -1
- package/dist/{CreditSystemSettings-Cj21_Ug8.js.map → CreditSystemSettings-BjQdysRS.js.map} +1 -1
- package/dist/{CreditSystemSettings-CLImarX-.cjs → CreditSystemSettings-DfSfQVE8.cjs} +1 -1
- package/dist/{CreditSystemSettings-CLImarX-.cjs.map → CreditSystemSettings-DfSfQVE8.cjs.map} +1 -1
- package/dist/{CreditSystemSettings-Buu7Y-7I.js → CreditSystemSettings-Du3ac0ID.js} +12 -7
- package/dist/CreditSystemSettings-Du3ac0ID.js.map +1 -0
- package/dist/EmailRegisterForm-CMXsa-_r.js +750 -0
- package/dist/EmailRegisterForm-CMXsa-_r.js.map +1 -0
- package/dist/EmailRegisterForm-i7f4St2N.cjs +1 -0
- package/dist/EmailRegisterForm-i7f4St2N.cjs.map +1 -0
- package/dist/EmailSettings-ASDHfI0K.js +86 -0
- package/dist/EmailSettings-ASDHfI0K.js.map +1 -0
- package/dist/EmailSettings-BcHo0cqk.cjs +1 -0
- package/dist/EmailSettings-BcHo0cqk.cjs.map +1 -0
- package/dist/{EmailSettings-CmxxnrA9.js → EmailSettings-CjngJwDS.js} +1 -1
- package/dist/{EmailSettings-CmxxnrA9.js.map → EmailSettings-CjngJwDS.js.map} +1 -1
- package/dist/{EmailSettings-9sdEAONl.cjs → EmailSettings-CswtKXhb.cjs} +1 -1
- package/dist/{EmailSettings-9sdEAONl.cjs.map → EmailSettings-CswtKXhb.cjs.map} +1 -1
- package/dist/{EmbeddedWalletSettings-BuLN_Uqc.cjs → EmbeddedWalletSettings-BXlboZ9-.cjs} +1 -1
- package/dist/{EmbeddedWalletSettings-BuLN_Uqc.cjs.map → EmbeddedWalletSettings-BXlboZ9-.cjs.map} +1 -1
- package/dist/{EmbeddedWalletSettings-DGq-kXbw.cjs → EmbeddedWalletSettings-BkwIbTkL.cjs} +1 -1
- package/dist/{EmbeddedWalletSettings-DGq-kXbw.cjs.map → EmbeddedWalletSettings-BkwIbTkL.cjs.map} +1 -1
- package/dist/{EmbeddedWalletSettings-CHkkCjyR.js → EmbeddedWalletSettings-CPLbqlxJ.js} +1 -1
- package/dist/{EmbeddedWalletSettings-CHkkCjyR.js.map → EmbeddedWalletSettings-CPLbqlxJ.js.map} +1 -1
- package/dist/{EmbeddedWalletSettings-M-D5N0eY.js → EmbeddedWalletSettings-CUY_X7Vj.js} +1 -1
- package/dist/{EmbeddedWalletSettings-M-D5N0eY.js.map → EmbeddedWalletSettings-CUY_X7Vj.js.map} +1 -1
- package/dist/{PermissionsSection-DEMVp7X3.cjs → PermissionsSection-B-6DJnN8.cjs} +1 -1
- package/dist/{PermissionsSection-DEMVp7X3.cjs.map → PermissionsSection-B-6DJnN8.cjs.map} +1 -1
- package/dist/{PermissionsSection-DNzOL1xW.js → PermissionsSection-BeFhIgQy.js} +22 -18
- package/dist/{PermissionsSection-DNzOL1xW.js.map → PermissionsSection-BeFhIgQy.js.map} +1 -1
- package/dist/{ServerSettings-DQemMrNv.js → ServerSettings-B9PNMse1.js} +1 -1
- package/dist/{ServerSettings-DQemMrNv.js.map → ServerSettings-B9PNMse1.js.map} +1 -1
- package/dist/{ServerSettings-qxi8aZO7.js → ServerSettings-BLoWX7KG.js} +1 -1
- package/dist/{ServerSettings-qxi8aZO7.js.map → ServerSettings-BLoWX7KG.js.map} +1 -1
- package/dist/{ServerSettings-CMmH5pZv.cjs → ServerSettings-BygCxOTY.cjs} +1 -1
- package/dist/{ServerSettings-CMmH5pZv.cjs.map → ServerSettings-BygCxOTY.cjs.map} +1 -1
- package/dist/{ServerSettings-DfimU7ay.cjs → ServerSettings-CgBdYspU.cjs} +1 -1
- package/dist/{ServerSettings-DfimU7ay.cjs.map → ServerSettings-CgBdYspU.cjs.map} +1 -1
- package/dist/{TeamSection-DopbZClq.cjs → TeamSection-B1t1tU-_.cjs} +1 -1
- package/dist/{TeamSection-DopbZClq.cjs.map → TeamSection-B1t1tU-_.cjs.map} +1 -1
- package/dist/{TeamSection-CoMXyFtz.js → TeamSection-DbSYDRdI.js} +1 -1
- package/dist/{TeamSection-CoMXyFtz.js.map → TeamSection-DbSYDRdI.js.map} +1 -1
- package/dist/{WebhookSettings-B8hAwhZ2.js → WebhookSettings-C-7Yxueu.js} +1 -1
- package/dist/{WebhookSettings-B8hAwhZ2.js.map → WebhookSettings-C-7Yxueu.js.map} +1 -1
- package/dist/{WebhookSettings-8QAqvkkO.js → WebhookSettings-C923ZSKa.js} +1 -1
- package/dist/{WebhookSettings-8QAqvkkO.js.map → WebhookSettings-C923ZSKa.js.map} +1 -1
- package/dist/{WebhookSettings-0sgWRI3U.cjs → WebhookSettings-CbU3cfTJ.cjs} +1 -1
- package/dist/{WebhookSettings-0sgWRI3U.cjs.map → WebhookSettings-CbU3cfTJ.cjs.map} +1 -1
- package/dist/{WebhookSettings-B6Y3Tnjv.cjs → WebhookSettings-D19u9Uok.cjs} +1 -1
- package/dist/{WebhookSettings-B6Y3Tnjv.cjs.map → WebhookSettings-D19u9Uok.cjs.map} +1 -1
- package/dist/admin-only.cjs +1 -1
- package/dist/admin-only.js +1 -1
- package/dist/email-only.cjs +1 -1
- package/dist/email-only.d.ts +1 -1
- package/dist/email-only.js +1 -1
- package/dist/index.cjs +13 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -8
- package/dist/index.js +4639 -4480
- package/dist/index.js.map +1 -1
- package/dist/login-react.css +1 -1
- package/dist/{plugin-C_NDZ2-D.js → plugin-BiftIhZe.js} +1 -1
- package/dist/{plugin-C_NDZ2-D.js.map → plugin-BiftIhZe.js.map} +1 -1
- package/dist/{plugin-CUxpAjL-.cjs → plugin-BtQdI_Ay.cjs} +1 -1
- package/dist/{plugin-CUxpAjL-.cjs.map → plugin-BtQdI_Ay.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/AutosaveStatus-BKsCIvPj.cjs +0 -1
- package/dist/AutosaveStatus-BKsCIvPj.cjs.map +0 -1
- package/dist/AutosaveStatus-CSZsp6w7.js.map +0 -1
- package/dist/CreditSystemSettings-Buu7Y-7I.js.map +0 -1
- package/dist/CreditSystemSettings-C2HkyMXy.cjs +0 -1
- package/dist/CreditSystemSettings-C2HkyMXy.cjs.map +0 -1
- package/dist/EmailRegisterForm-CNjYrqU6.cjs +0 -1
- package/dist/EmailRegisterForm-CNjYrqU6.cjs.map +0 -1
- package/dist/EmailRegisterForm-D2VaJouj.js +0 -750
- package/dist/EmailRegisterForm-D2VaJouj.js.map +0 -1
- package/dist/EmailSettings-DRfOF0Sf.js +0 -78
- package/dist/EmailSettings-DRfOF0Sf.js.map +0 -1
- package/dist/EmailSettings-eLlzzI5D.cjs +0 -1
- package/dist/EmailSettings-eLlzzI5D.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("react/jsx-runtime"),a=require("react"),p=require("./LoadingSpinner-d6sSxgQN.cjs"),_=require("./ErrorMessage-CHbYbVi2.cjs"),g=require("./AutosaveStatus-
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),a=require("react"),p=require("./LoadingSpinner-d6sSxgQN.cjs"),_=require("./ErrorMessage-CHbYbVi2.cjs"),g=require("./AutosaveStatus-B1A1zORa.cjs"),k=[{id:"integrations",label:"Integrations",keys:["server_cedros_pay_api_key"],requiredSetting:"feature_cedros_pay"},{id:"logging",label:"Logging",keys:["server_log_level"]},{id:"metrics",label:"Metrics",keys:["server_metrics_api_key"]},{id:"security",label:"Security",categories:["security","features"],keys:["feature_mfa","security_cors_origins","security_session_timeout"]}];function N({className:c}){const{settings:o,edits:h,isLoading:S,autosaveStatus:x,autosaveError:b,error:u,fetchSettings:m,handleChange:j,getEffectiveValue:y}=g.useSettingsAutosave(),t=a.useMemo(()=>k.filter(s=>s.requiredSetting?y(s.requiredSetting)==="true":!0),[y]),[r,d]=a.useState(null);a.useEffect(()=>{r===null&&t.length>0?d(t[0].id):r&&!t.some(s=>s.id===r)&&d(t[0]?.id??null)},[t,r]),a.useEffect(()=>{m()},[m]);const i=t.find(s=>s.id===r),v=a.useMemo(()=>{if(!i)return[];const s=i.categories??["server"],f=[];for(const n of s){const l=o[n]??[];f.push(...l)}return f.filter(n=>i.keys.includes(n.key)).sort((n,l)=>i.keys.indexOf(n.key)-i.keys.indexOf(l.key))},[o,i]);return S&&Object.keys(o).length===0?e.jsxs("div",{className:`cedros-system-settings cedros-system-settings-loading ${c??""}`,children:[e.jsx(p.LoadingSpinner,{}),e.jsx("span",{children:"Loading settings..."})]}):u?e.jsx("div",{className:`cedros-system-settings ${c??""}`,children:e.jsx(_.ErrorMessage,{error:u.message})}):e.jsxs("div",{className:`cedros-system-settings ${c??""}`,children:[e.jsxs("div",{className:"cedros-settings-page-header",children:[e.jsxs("div",{className:"cedros-settings-page-header-content",children:[e.jsx("h2",{className:"cedros-settings-page-title",children:"Auth Server"}),e.jsx("p",{className:"cedros-settings-page-description",children:"Server infrastructure settings. Some may be overridden by environment variables."})]}),e.jsx(g.AutosaveStatus,{status:x,error:b})]}),e.jsx("div",{className:"cedros-admin-tabs cedros-admin-tabs--line",children:t.map(s=>e.jsx("button",{type:"button",className:`cedros-admin-tab ${r===s.id?"cedros-admin-tab-active":""}`,onClick:()=>d(s.id),"aria-selected":r===s.id,role:"tab",children:s.label},s.id))}),e.jsx("div",{className:"cedros-admin-tab-content",role:"tabpanel",children:v.length===0?e.jsx("div",{className:"cedros-system-settings-empty",children:e.jsxs("p",{children:["No settings found for ",i?.label??"this section","."]})}):e.jsx(g.SettingsSection,{settings:v,edits:h,onChange:j})})]})}exports.ServerSettings=N;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerSettings-
|
|
1
|
+
{"version":3,"file":"ServerSettings-BygCxOTY.cjs","sources":["../src/components/admin/settings/ServerSettings.tsx"],"sourcesContent":["/**\n * Server settings page - infrastructure configuration with tabs\n *\n * Tab visibility:\n * - Integrations: only shown when `feature_cedros_pay` is enabled.\n * This tab contains the Cedros Pay API Key, which is only needed when\n * cedros-pay runs as a separate microservice. In co-located deployments\n * (e.g., cedros-login and cedros-pay in the same Rust binary), inter-service\n * auth uses JWT/JWKS and no API key is needed.\n * - Logging, Metrics, Security: always visible.\n */\nimport { useState, useEffect, useMemo } from 'react';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport { useSettingsAutosave } from '../../../hooks/useSettingsAutosave';\nimport { SettingsSection } from './settingsInputs';\nimport { AutosaveStatus } from './AutosaveStatus';\n\ntype ServerTab = 'integrations' | 'logging' | 'metrics' | 'security';\n\ninterface TabConfig {\n id: ServerTab;\n label: string;\n /** Categories to pull settings from (defaults to ['server']) */\n categories?: string[];\n keys: string[];\n /** When set, tab is only visible if this setting is 'true' */\n requiredSetting?: string;\n}\n\nconst TABS: TabConfig[] = [\n {\n id: 'integrations',\n label: 'Integrations',\n keys: ['server_cedros_pay_api_key'],\n requiredSetting: 'feature_cedros_pay',\n },\n {\n id: 'logging',\n label: 'Logging',\n keys: ['server_log_level'],\n },\n {\n id: 'metrics',\n label: 'Metrics',\n keys: ['server_metrics_api_key'],\n },\n {\n id: 'security',\n label: 'Security',\n categories: ['security', 'features'],\n keys: ['feature_mfa', 'security_cors_origins', 'security_session_timeout'],\n },\n];\n\nexport interface ServerSettingsProps {\n className?: string;\n}\n\nexport function ServerSettings({ className }: ServerSettingsProps) {\n const {\n settings,\n edits,\n isLoading,\n autosaveStatus,\n autosaveError,\n error,\n fetchSettings,\n handleChange,\n getEffectiveValue,\n } = useSettingsAutosave();\n\n // Filter tabs based on feature flags\n const visibleTabs = useMemo(\n () =>\n TABS.filter((tab) => {\n if (!tab.requiredSetting) return true;\n return getEffectiveValue(tab.requiredSetting) === 'true';\n }),\n [getEffectiveValue]\n );\n\n // Default to first visible tab\n const [activeTab, setActiveTab] = useState<ServerTab | null>(null);\n\n // Set initial tab when tabs become available\n useEffect(() => {\n if (activeTab === null && visibleTabs.length > 0) {\n setActiveTab(visibleTabs[0].id);\n } else if (activeTab && !visibleTabs.some((t) => t.id === activeTab)) {\n // Active tab was hidden (feature toggled off) — fall back\n setActiveTab(visibleTabs[0]?.id ?? null);\n }\n }, [visibleTabs, activeTab]);\n\n useEffect(() => {\n fetchSettings();\n }, [fetchSettings]);\n\n // Get current tab config\n const currentTab = visibleTabs.find((t) => t.id === activeTab);\n\n // Collect settings from all categories for the current tab\n const currentSettings = useMemo(() => {\n if (!currentTab) return [];\n const categories = currentTab.categories ?? ['server'];\n const allSettings: (typeof settings)[string] = [];\n for (const category of categories) {\n const categorySettings = settings[category] ?? [];\n allSettings.push(...categorySettings);\n }\n // Filter by keys and sort by keys order\n return allSettings\n .filter((s) => currentTab.keys.includes(s.key))\n .sort((a, b) => currentTab.keys.indexOf(a.key) - currentTab.keys.indexOf(b.key));\n }, [settings, currentTab]);\n\n if (isLoading && Object.keys(settings).length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className ?? ''}`}>\n <LoadingSpinner />\n <span>Loading settings...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <ErrorMessage error={error.message} />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className ?? ''}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">Auth Server</h2>\n <p className=\"cedros-settings-page-description\">\n Server infrastructure settings. Some may be overridden by environment variables.\n </p>\n </div>\n <AutosaveStatus status={autosaveStatus} error={autosaveError} />\n </div>\n\n {/* Tabs */}\n <div className=\"cedros-admin-tabs cedros-admin-tabs--line\">\n {visibleTabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`cedros-admin-tab ${activeTab === tab.id ? 'cedros-admin-tab-active' : ''}`}\n onClick={() => setActiveTab(tab.id)}\n aria-selected={activeTab === tab.id}\n role=\"tab\"\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Tab content */}\n <div className=\"cedros-admin-tab-content\" role=\"tabpanel\">\n {currentSettings.length === 0 ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No settings found for {currentTab?.label ?? 'this section'}.</p>\n </div>\n ) : (\n <SettingsSection settings={currentSettings} edits={edits} onChange={handleChange} />\n )}\n </div>\n </div>\n );\n}\n"],"names":["TABS","ServerSettings","className","settings","edits","isLoading","autosaveStatus","autosaveError","error","fetchSettings","handleChange","getEffectiveValue","useSettingsAutosave","visibleTabs","useMemo","tab","activeTab","setActiveTab","useState","useEffect","t","currentTab","currentSettings","categories","allSettings","category","categorySettings","s","a","b","jsx","LoadingSpinner","ErrorMessage","jsxs","AutosaveStatus","SettingsSection"],"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 r=require("./ServerSettings-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const r=require("./ServerSettings-BygCxOTY.cjs");function t(){return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(r.ServerSettings,{})})}exports.default=t;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerSettings-
|
|
1
|
+
{"version":3,"file":"ServerSettings-CgBdYspU.cjs","sources":["../src/admin/sections/ServerSettings.tsx"],"sourcesContent":["/**\n * Server Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport { ServerSettings as Settings } from '../../components/admin/settings';\n\nexport default function ServerSettings(): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["ServerSettings","jsx","Settings"],"mappings":"uLAOA,SAAwBA,GAAoC,CAC1D,aACG,MAAA,CAAI,UAAU,4BACb,SAAAC,MAACC,EAAAA,iBAAS,EACZ,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),n=require("./PermissionsSection-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),n=require("./PermissionsSection-B-6DJnN8.cjs"),k=require("./StatsBar-DTUZCwDD.cjs"),E=require("./useOrgs-CNqfn-fk.cjs");function T({pluginContext:p}){const[s,a]=b.useState("members"),{activeOrg:r,hasPermission:i,role:o,isLoading:f,error:u,fetchOrgs:I}=E.useOrgs(),{members:t,isLoading:C,error:L,fetchMembers:v,updateMemberRole:M,removeMember:y}=n.useMembers(r?.id??""),{invites:h,isLoading:g,error:j,fetchInvites:x,createInvite:S,cancelInvite:R,resendInvite:P}=n.useInvites(r?.id??"");b.useEffect(()=>{r?.id&&(v(),x())},[r?.id,v,x]);const d=b.useMemo(()=>t.reduce((l,N)=>(l[N.role]=(l[N.role]??0)+1,l),{}),[t]);if(f&&!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(u&&!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:u.message}),e.jsx("button",{type:"button",className:"cedros-button cedros-button-outline",onClick:I,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 c=i("invite:create"),_=i("invite:cancel"),m=h.length,O=d.owner??0,q=d.admin??0,w=d.member??0;return e.jsxs("div",{className:"cedros-dashboard__team",children:[e.jsx(k.StatsBar,{stats:[{label:"Owners",value:O},{label:"Admins",value:q},{label:"Members",value:w},{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:()=>a("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:()=>a("invites"),"aria-selected":s==="invites",role:"tab",children:["Pending Invites",m>0&&` (${m})`]}),o==="owner"&&e.jsx("button",{type:"button",className:`cedros-admin-tab ${s==="permissions"?"cedros-admin-tab-active":""}`,onClick:()=>a("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:t,currentUserId:p.userId,isLoading:C,error:L?.message,canManage:i("member:remove"),canChangeRoles:i("member:role_change"),onUpdateRole:M,onRemove:y}),s==="invites"&&e.jsxs("div",{className:"cedros-dashboard__invites",children:[c&&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:g,error:j?.message})]}),e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(n.InviteList,{invites:h,isLoading:g,error:j?.message,canManage:_||c,onCancel:_?R:void 0,onResend:c?P:void 0})})]}),s==="permissions"&&o==="owner"&&e.jsx(n.PermissionsSection,{userRole:o})]})]})}exports.default=T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamSection-DopbZClq.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, { useMemo, useState, useEffect } 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 {\n activeOrg,\n hasPermission,\n role,\n isLoading: orgsLoading,\n error: orgsError,\n fetchOrgs,\n } = useOrgs();\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 type=\"button\" className=\"cedros-button cedros-button-outline\" onClick={fetchOrgs}>\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\">No organizations found.</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","hasPermission","role","orgsLoading","orgsError","fetchOrgs","useOrgs","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","useEffect","roleCounts","useMemo","acc","member","jsxs","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TeamSection-B1t1tU-_.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, { useMemo, useState, useEffect } 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 {\n activeOrg,\n hasPermission,\n role,\n isLoading: orgsLoading,\n error: orgsError,\n fetchOrgs,\n } = useOrgs();\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 type=\"button\" className=\"cedros-button cedros-button-outline\" onClick={fetchOrgs}>\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\">No organizations found.</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","hasPermission","role","orgsLoading","orgsError","fetchOrgs","useOrgs","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","useEffect","roleCounts","useMemo","acc","member","jsxs","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as e, jsxs as a } from "react/jsx-runtime";
|
|
2
2
|
import { useState as O, useEffect as $, useMemo as T } from "react";
|
|
3
|
-
import { u as j, a as z, M as A, I as U, b as B, P as F } from "./PermissionsSection-
|
|
3
|
+
import { u as j, a as z, M as A, I as U, b as B, P as F } from "./PermissionsSection-BeFhIgQy.js";
|
|
4
4
|
import { S as q } from "./StatsBar-BX-hHtTq.js";
|
|
5
5
|
import { u as D } from "./useOrgs-C90KT9KP.js";
|
|
6
6
|
function V({ pluginContext: f }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamSection-CoMXyFtz.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, { useMemo, useState, useEffect } 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 {\n activeOrg,\n hasPermission,\n role,\n isLoading: orgsLoading,\n error: orgsError,\n fetchOrgs,\n } = useOrgs();\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 type=\"button\" className=\"cedros-button cedros-button-outline\" onClick={fetchOrgs}>\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\">No organizations found.</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","hasPermission","role","orgsLoading","orgsError","fetchOrgs","useOrgs","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","useEffect","roleCounts","useMemo","acc","member","jsxs","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TeamSection-DbSYDRdI.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, { useMemo, useState, useEffect } 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 {\n activeOrg,\n hasPermission,\n role,\n isLoading: orgsLoading,\n error: orgsError,\n fetchOrgs,\n } = useOrgs();\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 type=\"button\" className=\"cedros-button cedros-button-outline\" onClick={fetchOrgs}>\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\">No organizations found.</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","hasPermission","role","orgsLoading","orgsError","fetchOrgs","useOrgs","members","membersLoading","membersError","fetchMembers","updateMemberRole","removeMember","useMembers","invites","invitesLoading","invitesError","fetchInvites","createInvite","cancelInvite","resendInvite","useInvites","useEffect","roleCounts","useMemo","acc","member","jsxs","jsx","canInvite","canCancel","pendingCount","ownerCount","adminCount","memberCount","StatsBar","MemberList","InviteForm","InviteList","PermissionsSection"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsxs as t, jsx as e } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect as p } from "react";
|
|
3
3
|
import { L as v } from "./LoadingSpinner-6vml-zwr.js";
|
|
4
4
|
import { E as S } from "./ErrorMessage-CcEK0pYO.js";
|
|
5
|
-
import { u as y, A as N, S as E } from "./AutosaveStatus-
|
|
5
|
+
import { u as y, A as N, S as E } from "./AutosaveStatus-DMjvXzP2.js";
|
|
6
6
|
function b({
|
|
7
7
|
title: i,
|
|
8
8
|
description: d,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookSettings-
|
|
1
|
+
{"version":3,"file":"WebhookSettings-C-7Yxueu.js","sources":["../src/components/admin/settings/SettingsPageLayout.tsx","../src/components/admin/settings/WebhookSettings.tsx"],"sourcesContent":["/**\n * Shared layout for settings pages with autosave\n */\nimport { useEffect } from 'react';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport { useSettingsAutosave } from '../../../hooks/useSettingsAutosave';\nimport { SettingsSection } from './settingsInputs';\nimport { AutosaveStatus } from './AutosaveStatus';\n\nexport interface SettingsPageLayoutProps {\n /** Page title */\n title: string;\n /** Page description */\n description: string;\n /** Categories to display on this page */\n categories: string[];\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Shared layout component for settings pages.\n * Handles loading and displaying settings for specified categories.\n * Changes are automatically saved after a brief debounce.\n */\nexport function SettingsPageLayout({\n title,\n description,\n categories,\n className = '',\n}: SettingsPageLayoutProps) {\n const {\n settings,\n edits,\n isLoading,\n autosaveStatus,\n autosaveError,\n error,\n fetchSettings,\n handleChange,\n } = useSettingsAutosave();\n\n useEffect(() => {\n fetchSettings();\n }, [fetchSettings]);\n\n // Filter settings to only show relevant categories\n const relevantCategories = categories.filter((cat) => settings[cat]?.length > 0);\n\n if (isLoading && Object.keys(settings).length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className}`}>\n <LoadingSpinner />\n <span>Loading settings...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`cedros-system-settings ${className}`}>\n <ErrorMessage error={error.message} />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">{title}</h2>\n <p className=\"cedros-settings-page-description\">{description}</p>\n </div>\n <AutosaveStatus status={autosaveStatus} error={autosaveError} />\n </div>\n\n {relevantCategories.length === 0 ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No settings found for this section.</p>\n </div>\n ) : (\n relevantCategories.map((category) => (\n <SettingsSection\n key={category}\n settings={settings[category]}\n edits={edits}\n onChange={handleChange}\n />\n ))\n )}\n </div>\n );\n}\n","/**\n * Webhook settings page - HTTP webhook configuration\n */\nimport { SettingsPageLayout } from './SettingsPageLayout';\n\nconst CATEGORIES = ['webhook'];\n\nexport interface WebhookSettingsProps {\n className?: string;\n}\n\nexport function WebhookSettings({ className }: WebhookSettingsProps) {\n return (\n <SettingsPageLayout\n title=\"Webhooks\"\n description=\"Configure HTTP webhook notifications for authentication events.\"\n categories={CATEGORIES}\n className={className}\n />\n );\n}\n"],"names":["SettingsPageLayout","title","description","categories","className","settings","edits","isLoading","autosaveStatus","autosaveError","error","fetchSettings","handleChange","useSettingsAutosave","useEffect","relevantCategories","cat","jsxs","jsx","LoadingSpinner","ErrorMessage","AutosaveStatus","category","SettingsSection","CATEGORIES","WebhookSettings"],"mappings":";;;;;AA0BO,SAASA,EAAmB;AAAA,EACjC,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAA4B;AAC1B,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,EAAA,IACEC,EAAA;AAEJ,EAAAC,EAAU,MAAM;AACd,IAAAH,EAAA;AAAA,EACF,GAAG,CAACA,CAAa,CAAC;AAGlB,QAAMI,IAAqBZ,EAAW,OAAO,CAACa,MAAQX,EAASW,CAAG,GAAG,SAAS,CAAC;AAE/E,SAAIT,KAAa,OAAO,KAAKF,CAAQ,EAAE,WAAW,IAE9C,gBAAAY,EAAC,OAAA,EAAI,WAAW,yDAAyDb,CAAS,IAChF,UAAA;AAAA,IAAA,gBAAAc,EAACC,GAAA,EAAe;AAAA,IAChB,gBAAAD,EAAC,UAAK,UAAA,sBAAA,CAAmB;AAAA,EAAA,GAC3B,IAIAR,IAEA,gBAAAQ,EAAC,OAAA,EAAI,WAAW,0BAA0Bd,CAAS,IACjD,UAAA,gBAAAc,EAACE,GAAA,EAAa,OAAOV,EAAM,QAAA,CAAS,GACtC,IAKF,gBAAAO,EAAC,OAAA,EAAI,WAAW,0BAA0Bb,CAAS,IACjD,UAAA;AAAA,IAAA,gBAAAa,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,8BAA8B,UAAAjB,GAAM;AAAA,QAClD,gBAAAiB,EAAC,KAAA,EAAE,WAAU,oCAAoC,UAAAhB,EAAA,CAAY;AAAA,MAAA,GAC/D;AAAA,MACA,gBAAAgB,EAACG,GAAA,EAAe,QAAQb,GAAgB,OAAOC,EAAA,CAAe;AAAA,IAAA,GAChE;AAAA,IAECM,EAAmB,WAAW,IAC7B,gBAAAG,EAAC,SAAI,WAAU,gCACb,UAAA,gBAAAA,EAAC,KAAA,EAAE,iDAAmC,EAAA,CACxC,IAEAH,EAAmB,IAAI,CAACO,MACtB,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QAEC,UAAUlB,EAASiB,CAAQ;AAAA,QAC3B,OAAAhB;AAAA,QACA,UAAUM;AAAA,MAAA;AAAA,MAHLU;AAAA,IAAA,CAKR;AAAA,EAAA,GAEL;AAEJ;ACxFA,MAAME,IAAa,CAAC,SAAS;AAMtB,SAASC,EAAgB,EAAE,WAAArB,KAAmC;AACnE,SACE,gBAAAc;AAAA,IAAClB;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,aAAY;AAAA,MACZ,YAAYwB;AAAA,MACZ,WAAApB;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as o } from "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
|
-
import { W as t } from "./WebhookSettings-
|
|
3
|
+
import { W as t } from "./WebhookSettings-C-7Yxueu.js";
|
|
4
4
|
function i() {
|
|
5
5
|
return /* @__PURE__ */ o("div", { className: "cedros-dashboard__section", children: /* @__PURE__ */ o(t, {}) });
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookSettings-
|
|
1
|
+
{"version":3,"file":"WebhookSettings-C923ZSKa.js","sources":["../src/admin/sections/WebhookSettings.tsx"],"sourcesContent":["/**\n * Webhook Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport { WebhookSettings as Settings } from '../../components/admin/settings';\n\nexport default function WebhookSettings(): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["WebhookSettings","jsx","Settings"],"mappings":";;;AAOA,SAAwBA,IAAqC;AAC3D,2BACG,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAC,EAACC,KAAS,GACZ;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const e=require("react/jsx-runtime"),S=require("react"),f=require("./LoadingSpinner-d6sSxgQN.cjs"),p=require("./ErrorMessage-CHbYbVi2.cjs"),r=require("./AutosaveStatus-
|
|
1
|
+
"use strict";const e=require("react/jsx-runtime"),S=require("react"),f=require("./LoadingSpinner-d6sSxgQN.cjs"),p=require("./ErrorMessage-CHbYbVi2.cjs"),r=require("./AutosaveStatus-B1A1zORa.cjs");function g({title:t,description:d,categories:u,className:n=""}){const{settings:i,edits:h,isLoading:l,autosaveStatus:j,autosaveError:x,error:o,fetchSettings:a,handleChange:m}=r.useSettingsAutosave();S.useEffect(()=>{a()},[a]);const c=u.filter(s=>i[s]?.length>0);return l&&Object.keys(i).length===0?e.jsxs("div",{className:`cedros-system-settings cedros-system-settings-loading ${n}`,children:[e.jsx(f.LoadingSpinner,{}),e.jsx("span",{children:"Loading settings..."})]}):o?e.jsx("div",{className:`cedros-system-settings ${n}`,children:e.jsx(p.ErrorMessage,{error:o.message})}):e.jsxs("div",{className:`cedros-system-settings ${n}`,children:[e.jsxs("div",{className:"cedros-settings-page-header",children:[e.jsxs("div",{className:"cedros-settings-page-header-content",children:[e.jsx("h2",{className:"cedros-settings-page-title",children:t}),e.jsx("p",{className:"cedros-settings-page-description",children:d})]}),e.jsx(r.AutosaveStatus,{status:j,error:x})]}),c.length===0?e.jsx("div",{className:"cedros-system-settings-empty",children:e.jsx("p",{children:"No settings found for this section."})}):c.map(s=>e.jsx(r.SettingsSection,{settings:i[s],edits:h,onChange:m},s))]})}const v=["webhook"];function y({className:t}){return e.jsx(g,{title:"Webhooks",description:"Configure HTTP webhook notifications for authentication events.",categories:v,className:t})}exports.SettingsPageLayout=g;exports.WebhookSettings=y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookSettings-
|
|
1
|
+
{"version":3,"file":"WebhookSettings-CbU3cfTJ.cjs","sources":["../src/components/admin/settings/SettingsPageLayout.tsx","../src/components/admin/settings/WebhookSettings.tsx"],"sourcesContent":["/**\n * Shared layout for settings pages with autosave\n */\nimport { useEffect } from 'react';\nimport { LoadingSpinner } from '../../shared/LoadingSpinner';\nimport { ErrorMessage } from '../../shared/ErrorMessage';\nimport { useSettingsAutosave } from '../../../hooks/useSettingsAutosave';\nimport { SettingsSection } from './settingsInputs';\nimport { AutosaveStatus } from './AutosaveStatus';\n\nexport interface SettingsPageLayoutProps {\n /** Page title */\n title: string;\n /** Page description */\n description: string;\n /** Categories to display on this page */\n categories: string[];\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Shared layout component for settings pages.\n * Handles loading and displaying settings for specified categories.\n * Changes are automatically saved after a brief debounce.\n */\nexport function SettingsPageLayout({\n title,\n description,\n categories,\n className = '',\n}: SettingsPageLayoutProps) {\n const {\n settings,\n edits,\n isLoading,\n autosaveStatus,\n autosaveError,\n error,\n fetchSettings,\n handleChange,\n } = useSettingsAutosave();\n\n useEffect(() => {\n fetchSettings();\n }, [fetchSettings]);\n\n // Filter settings to only show relevant categories\n const relevantCategories = categories.filter((cat) => settings[cat]?.length > 0);\n\n if (isLoading && Object.keys(settings).length === 0) {\n return (\n <div className={`cedros-system-settings cedros-system-settings-loading ${className}`}>\n <LoadingSpinner />\n <span>Loading settings...</span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`cedros-system-settings ${className}`}>\n <ErrorMessage error={error.message} />\n </div>\n );\n }\n\n return (\n <div className={`cedros-system-settings ${className}`}>\n <div className=\"cedros-settings-page-header\">\n <div className=\"cedros-settings-page-header-content\">\n <h2 className=\"cedros-settings-page-title\">{title}</h2>\n <p className=\"cedros-settings-page-description\">{description}</p>\n </div>\n <AutosaveStatus status={autosaveStatus} error={autosaveError} />\n </div>\n\n {relevantCategories.length === 0 ? (\n <div className=\"cedros-system-settings-empty\">\n <p>No settings found for this section.</p>\n </div>\n ) : (\n relevantCategories.map((category) => (\n <SettingsSection\n key={category}\n settings={settings[category]}\n edits={edits}\n onChange={handleChange}\n />\n ))\n )}\n </div>\n );\n}\n","/**\n * Webhook settings page - HTTP webhook configuration\n */\nimport { SettingsPageLayout } from './SettingsPageLayout';\n\nconst CATEGORIES = ['webhook'];\n\nexport interface WebhookSettingsProps {\n className?: string;\n}\n\nexport function WebhookSettings({ className }: WebhookSettingsProps) {\n return (\n <SettingsPageLayout\n title=\"Webhooks\"\n description=\"Configure HTTP webhook notifications for authentication events.\"\n categories={CATEGORIES}\n className={className}\n />\n );\n}\n"],"names":["SettingsPageLayout","title","description","categories","className","settings","edits","isLoading","autosaveStatus","autosaveError","error","fetchSettings","handleChange","useSettingsAutosave","useEffect","relevantCategories","cat","jsxs","jsx","LoadingSpinner","ErrorMessage","AutosaveStatus","category","SettingsSection","CATEGORIES","WebhookSettings"],"mappings":"oMA0BO,SAASA,EAAmB,CACjC,MAAAC,EACA,YAAAC,EACA,WAAAC,EACA,UAAAC,EAAY,EACd,EAA4B,CAC1B,KAAM,CACJ,SAAAC,EACA,MAAAC,EACA,UAAAC,EACA,eAAAC,EACA,cAAAC,EACA,MAAAC,EACA,cAAAC,EACA,aAAAC,CAAA,EACEC,sBAAA,EAEJC,EAAAA,UAAU,IAAM,CACdH,EAAA,CACF,EAAG,CAACA,CAAa,CAAC,EAGlB,MAAMI,EAAqBZ,EAAW,OAAQa,GAAQX,EAASW,CAAG,GAAG,OAAS,CAAC,EAE/E,OAAIT,GAAa,OAAO,KAAKF,CAAQ,EAAE,SAAW,EAE9CY,EAAAA,KAAC,MAAA,CAAI,UAAW,yDAAyDb,CAAS,GAChF,SAAA,CAAAc,EAAAA,IAACC,EAAAA,eAAA,EAAe,EAChBD,EAAAA,IAAC,QAAK,SAAA,qBAAA,CAAmB,CAAA,EAC3B,EAIAR,EAEAQ,EAAAA,IAAC,MAAA,CAAI,UAAW,0BAA0Bd,CAAS,GACjD,SAAAc,EAAAA,IAACE,EAAAA,aAAA,CAAa,MAAOV,EAAM,OAAA,CAAS,EACtC,EAKFO,EAAAA,KAAC,MAAA,CAAI,UAAW,0BAA0Bb,CAAS,GACjD,SAAA,CAAAa,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,6BAA8B,SAAAjB,EAAM,EAClDiB,EAAAA,IAAC,IAAA,CAAE,UAAU,mCAAoC,SAAAhB,CAAA,CAAY,CAAA,EAC/D,EACAgB,EAAAA,IAACG,EAAAA,eAAA,CAAe,OAAQb,EAAgB,MAAOC,CAAA,CAAe,CAAA,EAChE,EAECM,EAAmB,SAAW,EAC7BG,EAAAA,IAAC,OAAI,UAAU,+BACb,SAAAA,EAAAA,IAAC,IAAA,CAAE,+CAAmC,CAAA,CACxC,EAEAH,EAAmB,IAAKO,GACtBJ,EAAAA,IAACK,EAAAA,gBAAA,CAEC,SAAUlB,EAASiB,CAAQ,EAC3B,MAAAhB,EACA,SAAUM,CAAA,EAHLU,CAAA,CAKR,CAAA,EAEL,CAEJ,CCxFA,MAAME,EAAa,CAAC,SAAS,EAMtB,SAASC,EAAgB,CAAE,UAAArB,GAAmC,CACnE,OACEc,EAAAA,IAAClB,EAAA,CACC,MAAM,WACN,YAAY,kEACZ,WAAYwB,EACZ,UAAApB,CAAA,CAAA,CAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const t=require("./WebhookSettings-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime");require("react");const t=require("./WebhookSettings-CbU3cfTJ.cjs");function o(){return e.jsx("div",{className:"cedros-dashboard__section",children:e.jsx(t.WebhookSettings,{})})}exports.default=o;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookSettings-
|
|
1
|
+
{"version":3,"file":"WebhookSettings-D19u9Uok.cjs","sources":["../src/admin/sections/WebhookSettings.tsx"],"sourcesContent":["/**\n * Webhook Settings Section - Plugin wrapper\n */\n\nimport React from 'react';\nimport { WebhookSettings as Settings } from '../../components/admin/settings';\n\nexport default function WebhookSettings(): React.JSX.Element {\n return (\n <div className=\"cedros-dashboard__section\">\n <Settings />\n </div>\n );\n}\n"],"names":["WebhookSettings","jsx","Settings"],"mappings":"wLAOA,SAAwBA,GAAqC,CAC3D,aACG,MAAA,CAAI,UAAU,4BACb,SAAAC,MAACC,EAAAA,kBAAS,EACZ,CAEJ"}
|
package/dist/admin-only.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./plugin-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./plugin-BtQdI_Ay.cjs");exports.AdminShell=e.AdminShell;exports.CEDROS_LOGIN_SECTION_IDS=e.CEDROS_LOGIN_SECTION_IDS;exports.Icons=e.Icons;exports.cedrosLoginPlugin=e.cedrosLoginPlugin;exports.loginPlugin=e.cedrosLoginPlugin;exports.useAdminShell=e.useAdminShell;
|
package/dist/admin-only.js
CHANGED
package/dist/email-only.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./useAuth-U5CYsHEU.cjs"),o=require("./useCedrosLogin-DtJorrE7.cjs"),e=require("./EmailRegisterForm-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./useAuth-U5CYsHEU.cjs"),o=require("./useCedrosLogin-DtJorrE7.cjs"),e=require("./EmailRegisterForm-i7f4St2N.cjs"),i=require("./LoadingSpinner-d6sSxgQN.cjs"),s=require("./ErrorMessage-CHbYbVi2.cjs"),n=require("./validation-BuGQrA-K.cjs");exports.CedrosLoginProvider=r.CedrosLoginProvider;exports.useAuth=r.useAuth;exports.useCedrosLogin=o.useCedrosLogin;exports.EmailLoginForm=e.EmailLoginForm;exports.EmailRegisterForm=e.EmailRegisterForm;exports.PasswordInput=e.PasswordInput;exports.useEmailAuth=e.useEmailAuth;exports.LoadingSpinner=i.LoadingSpinner;exports.ErrorMessage=s.ErrorMessage;exports.validatePassword=n.validatePassword;
|
package/dist/email-only.d.ts
CHANGED
|
@@ -620,7 +620,7 @@ export declare function useEmailAuth(): UseEmailAuthReturn;
|
|
|
620
620
|
declare interface UseEmailAuthReturn {
|
|
621
621
|
/** Login - may return mfaRequired if 2FA is enabled */
|
|
622
622
|
login: (email: string, password: string) => Promise<LoginResult>;
|
|
623
|
-
register: (email: string, password: string, name?: string) => Promise<AuthResponse>;
|
|
623
|
+
register: (email: string, password: string, name?: string, referral?: string) => Promise<AuthResponse>;
|
|
624
624
|
isLoading: boolean;
|
|
625
625
|
error: AuthError | null;
|
|
626
626
|
clearError: () => void;
|
package/dist/email-only.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as s, u as a } from "./useAuth-C-Vw-ggy.js";
|
|
2
2
|
import { u as i } from "./useCedrosLogin-CFfID-0i.js";
|
|
3
|
-
import { E as t, a as u, P as p, u as d } from "./EmailRegisterForm-
|
|
3
|
+
import { E as t, a as u, P as p, u as d } from "./EmailRegisterForm-CMXsa-_r.js";
|
|
4
4
|
import { L as f } from "./LoadingSpinner-6vml-zwr.js";
|
|
5
5
|
import { E as x } from "./ErrorMessage-CcEK0pYO.js";
|
|
6
6
|
import { v as L } from "./validation-B8kMV3BL.js";
|