PageSourceSearch

https://bliss-it-services.pages.dev/assets/AdminAccountManagerCommandCenter-CMql_P9t.js

js bliss-it-services.pages.dev collected 2026-10-03 05:38:56 UTC 108,488 bytes, 2 lines download raw bytes

1import{a as h,j as e}from"./three-vendors-DGQpa7F9.js";import{bm as Pe,bn as qe,l as Ue,B as W,L as Q,bo as Oe,f as Fe,bp as Be,bq as We,br as Ne,bs as ze,bt as He,bu as Ve,bv as Ke,bw as Se,bx as ke,by as Ye}from"./index-BxOGVMpa.js";function Ee(t){return t.replace(/[_-]+/g," ").replace(/\b\w/g,d=>d.toUpperCase())}function Qe(t){return t?new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(new Date(t*1e3)):"No date"}function Ge(t){return t==="in_progress"?"In progress":t==="done"?"Done":Ee(t)}function Je({title:t="My agent tasks",subtitle:d="Tasks routed to you or your staff role by Bliss agents.",limit:l=8}){const[u,f]=h.useState([]),[_,j]=h.useState({open:0,in_progress:0,priority:0}),[c,m]=h.useState(!0),[n,v]=h.useState(null),[C,A]=h.useState(null),w=async()=>{try{m(!0),v(null);const b=await Pe({statuses:["open","in_progress"],limit:l});f(b.data.tasks),j(b.data.metrics)}catch(b){v(b instanceof Error?b.message:"Unable to load your agent tasks.")}finally{m(!1)}};h.useEffect(()=>{w()},[l]);const T=async(b,M)=>{try{A(b),v(null),await qe(b,{status:M}),await w()}catch(r){v(r instanceof Error?r.message:"Unable to update task.")}finally{A(null)}};return e.jsxs("section",{className:"admin-system-card admin-my-agent-tasks",children:[e.jsxs("div",{className:"admin-system-card-head",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-system-kicker",children:"Agent Inbox"}),e.jsx("h3",{children:t}),e.jsx("p",{className:"admin-page-subtitle",children:d})]}),e.jsx("button",{type:"button",className:"admin-btn-secondary",onClick:()=>void w(),disabled:c,children:"Refresh"})]}),n&&e.jsx("div",{className:"admin-error",children:e.jsx("p",{children:n})}),e.jsxs("div",{className:"admin-system-metric-grid admin-my-agent-task-metrics",children:[e.jsxs("div",{className:"admin-system-metric",children:[e.jsx("span",{className:"admin-system-metric-label",children:"Open"}),e.jsx("strong",{children:_.open}),e.jsx("p",{children:"Waiting to start"})]}),e.jsxs("div",{className:"admin-system-metric",children:[e.jsx("span",{className:"admin-system-metric-label",children:"In progress"}),e.jsx("strong",{children:_.in_progress}),e.jsx("p",{children:"Currently active"})]}),e.jsxs("div",{className:"admin-system-metric",children:[e.jsx("span",{className:"admin-system-metric-label",children:"Priority"}),e.jsx("strong",{children:_.priority}),e.jsx("p",{children:"High or critical"})]})]}),c?e.jsx("div",{className:"admin-system-empty small",children:"Loading your agent tasks..."}):u.length===0?e.jsx("div",{className:"admin-system-empty small",children:"No agent tasks are assigned to you right now."}):e.jsx("div",{className:"admin-system-task-list compact",children:u.map(b=>e.jsxs("article",{className:`admin-system-task-row is-${b.status}`,children:[e.jsxs("div",{children:[e.jsxs("p",{className:"admin-system-kicker",children:[Ee(b.agent_key)," / ",b.priority]}),e.jsx("h4",{children:b.title}),b.summary&&e.jsx("p",{children:b.summary}),e.jsxs("p",{className:"admin-system-task-owner",children:[Ge(b.status)," · Updated ",Qe(b.updated_at)]})]}),e.jsxs("div",{className:"admin-system-task-actions",children:[b.status!=="in_progress"&&e.jsx("button",{type:"button",className:"admin-btn-secondary",disabled:C===b.id,onClick:()=>void T(b.id,"in_progress"),children:"Start"}),e.jsx("button",{type:"button",className:"admin-btn-primary",disabled:C===b.id,onClick:()=>void T(b.id,"done"),children:"Done"}),e.jsx("button",{type:"button",className:"admin-btn-secondary",disabled:C===b.id,onClick:()=>void T(b.id,"dismissed"),children:"Dismiss"})]})]},b.id))})]})}function Xe(t){if(!t)return!1;const d=new Date(t);if(Number.isNaN(d.getTime()))return!1;const l=new Date;return l.setHours(23,59,59,999),d.getTime()<=l.getTime()}function xe(t){if(!t)return"No date set";const d=new Date(t);return Number.isNaN(d.getTime())?"No date set":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}).format(d)}function Ze(t){if(!t)return"Not paid yet";const d=new Date(t);return Number.isNaN(d.getTime())?"Not paid yet":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(d)}function K(t){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}).format(t)}function F(t){return K(t/100)}function Ae(t){return t==null?"Unavailable":F(t)}function Ie(t){if(!t)return 0;const l=String(t).replace(/,/g,"").match(/\d+(?:\.\d+)?/g)?.map(Number).filter(u=>Number.isFinite(u))??[];return l.length?l.reduce((u,f)=>u+f,0)/l.length:0}function es(t){return t.salesOwner||t.sales_owner||"Assigned account"}const Te={name:"",email:"",company:"",source:"Account Manager",serviceType:"Bliss IT Services",projectValue:"",phone:"",website:"",siteUrl:"",priority:"Medium",priorityValueLevel:"Medium",nextAction:"",nextStep:"",notes:"",status:"Lead"};function ss(){const{session:t}=Ue(),[d,l]=h.useState([]),[u,f]=h.useState([]),[_,j]=h.useState([]),[c,m]=h.useState([]),[n,v]=
1h.useState(null),[C,A]=h.useState(!0),[w,T]=h.useState(null),[b,M]=h.useState(!1),[r,o]=h.useState(Te),[N,E]=h.useState(!1),[S,$]=h.useState(null),[i,p]=h.useState(null),[R,I]=h.useState({clientStatus:"healthy",contactOutcome:"reached_client",touchpointType:"Email",summary:"",risksBlockers:"",nextAction:"",nextActionDue:"",opportunityStatus:"none",confidenceScore:4});h.useEffect(()=>{let a=!0;return(async()=>{try{A(!0),T(null);const[x,g,k,L,V]=await Promise.all([Oe(),Fe(),Be(),We().catch(()=>[]),Ne().catch(()=>null)]);if(!a)return;l(x),f(g),j(k),m(L),v(V?.data.readiness??null)}catch(x){a&&T(x instanceof Error?x.message:"Unable to load account manager workspace.")}finally{a&&A(!1)}})(),()=>{a=!1}},[]);const z=h.useMemo(()=>u.filter(a=>Xe(a.nextActionDue??a.nextFollowUp)),[u]),ne=d.filter(a=>a.status!=="Paused"),de=u.filter(a=>!["Closed Won","Closed Lost"].includes(a.status)),H=h.useMemo(()=>new Map(d.map(a=>[a.id,a])),[d]),J=h.useMemo(()=>new Set(d.map(a=>a.id)),[d]),O=h.useMemo(()=>_.filter(a=>J.has(a.clientId)&&a.status==="Paid"),[J,_]),Y=h.useMemo(()=>{const a=new Date;return a.setDate(1),a.setHours(0,0,0,0),a},[]),te=h.useMemo(()=>O.filter(a=>{if(!a.createdAt)return!1;const s=new Date(a.createdAt);return!Number.isNaN(s.getTime())&&s>=Y}).reduce((a,s)=>a+Number(s.amount||0),0),[O,Y]),ie=h.useMemo(()=>O.reduce((a,s)=>a+Number(s.amount||0),0),[O]),B=a=>{const s=`${a.type??""} ${a.description??""} ${a.serviceData?.service_type??""}`.toLowerCase();return["monthly","recurring","hosting","email","subscription","maintenance","care"].some(x=>s.includes(x))},D=h.useMemo(()=>O.filter(a=>B(a)).filter(a=>{if(!a.createdAt)return!1;const s=new Date(a.createdAt);return!Number.isNaN(s.getTime())&&s>=Y}).reduce((a,s)=>a+Number(s.amount||0),0),[O,Y]),ve=Math.max(0,te-D)*.1+D*.05,X=n?n.balance.currentBalanceCents/100:ve,ge=n?n.blockedCommissionCents/100:0,ce=n&&n.capCents>0?Math.min(100,Math.round(n.payableCommissionCents/n.capCents*100)):0,Z=h.useMemo(()=>_.filter(a=>J.has(a.clientId)&&a.status==="Due"),[J,_]),oe=h.useMemo(()=>Z.filter(a=>{const s=a.due_date??(a.dueDate?new Date(a.dueDate*1e3).toISOString():null);if(!s)return!1;const x=new Date(s);return!Number.isNaN(x.getTime())&&x.getTime()<Date.now()}),[Z]),ue=h.useMemo(()=>Z.slice().sort((a,s)=>{const x=new Date(a.due_date??a.createdAt??"").getTime()||Number.POSITIVE_INFINITY,g=new Date(s.due_date??s.createdAt??"").getTime()||Number.POSITIVE_INFINITY;return x-g}).slice(0,5),[Z]),me=h.useMemo(()=>{const a=new Map;return d.forEach(s=>{s.status==="Paused"&&a.set(s.id,{client:s,reason:"Paused account"})}),oe.forEach(s=>{const x=H.get(s.clientId);x&&a.set(x.id,{client:x,reason:"Overdue invoice"})}),Array.from(a.values()).slice(0,6)},[H,d,oe]),le=u.filter(a=>!["Closed","Closed Won","Closed Lost","Active"].includes(a.status)),be=le.reduce((a,s)=>a+Ie(s.projectValue??s.budget),0),re=h.useMemo(()=>{const a=new Map;return le.forEach(s=>{const x=a.get(s.status)??{count:0,value:0};x.count+=1,x.value+=Ie(s.projectValue??s.budget),a.set(s.status,x)}),Array.from(a.entries()).map(([s,x])=>({stage:s,...x})).slice(0,6)},[le]),ee=h.useMemo(()=>{const a=Date.now(),s=new Date;s.setHours(23,59,59,999);const x=new Date;return x.setDate(x.getDate()+7),{overdue:u.filter(g=>{const k=g.nextActionDue??g.nextFollowUp;if(!k)return!1;const L=new Date(k).getTime();return!Number.isNaN(L)&&L<a}),today:u.filter(g=>{const k=g.nextActionDue??g.nextFollowUp;if(!k)return!1;const L=new Date(k).getTime();return!Number.isNaN(L)&&L>=a&&L<=s.getTime()}),week:u.filter(g=>{const k=g.nextActionDue??g.nextFollowUp;if(!k)return!1;const L=new Date(k).getTime();return!Number.isNaN(L)&&L>s.getTime()&&L<=x.getTime()})}},[u]),he=h.useMemo(()=>[...u.map(s=>({id:`lead-${s.id}`,label:`${s.status}: ${s.name}`,detail:s.nextAction||s.nextStep||s.email,date:s.updatedAt||s.createdAt,href:`/dashboard/admin/leads/${s.id}`})),...O.map(s=>({id:`invoice-${s.id}`,label:`Paid invoice ${K(Number(s.amount||0))}`,detail:H.get(s.clientId)?.name||"Assigned client",date:s.createdAt??null,href:`/dashboard/admin/clients/${s.clientId}`})),...c.map(s=>({id:`offer-${s.id}`,label:`${s.status==="accepted"?"Accepted":"Sent"} template: ${s.templateName}`,detail:s.leadName||s.leadEmail,date:s.acceptedAt||s.createdAt,href:`/dashboard/admin/leads/${s.leadId}`}))].filter(s=>s.date).sort((s,x)=>new Date(x.date||"").getTime()-new Date(s.date||"").getTime()).slice(0,8),[H,u,O,c]),pe=h.useMemo(()=>{const a=new Map;for(const s of O){const x=H.get(s.clientId);if(!x)continue;const g=a.get(x.id)??{client:x,income:0,invoiceCount:0};g.income+=Number(s.amount||0),g.invoiceCount+=1,a.set(x.id,g)}return Array.from(a.values()).sort((s,x)=>x.income-s.income).slice(0,5)},[H,O]),fe=async a=>{a.preventDefault();try{E(!0),T(null);const s=t?.name||t?.email||"",x=await ze({...r,owner:s,salesOwner:s,budget:r.projectValue,website:r.siteUrl||r.website});f(g=>[x,...g]),o(Te),M(!1)}catch(s){T(s instanceof Error?s.message:"Unable to create lead.")}finally{E(!1)}},ye=async a=>{if(a.revenue_type==="recurring_revenue"){p(a),I({clientStatus:"healthy",contactOutcome:"reached_client",touchpointType:"Email",summary:"",risksBlockers:"",nextAction:"",nextActionDue:"",opportunityStatus:"none",confidenceScore:4});return}try{$(a.id),T(null),await He({clientId:a.client_id,invoiceId:a.invoice_id,activityType:"follow_up_completed",title:"Commission qualifying follow-up completed",notes:`Logged from pay readiness for invoice ${a.invoice_id}.`});const s=await Ne();v(s.data.readiness)}catch(s){T(s instanceof Error?s.message:"Unable to log activity.")}finally{$(null)}},we=async a=>{if(a.preventDefault(),!(!i||!n))try{$(i.id),T(null),await Ve({...R,clientId:i.client_id,periodKey:n.periodKey});const s=await Ne();v(s.data.readiness),p(null)}catch(s){T(s instanceof Error?s.message:"Unable to submit monthly check-in.")}finally{$(null)}};return C?e.jsx("div",{className:"admin-loading",children:"Loading Account Manager workspace..."}):e.jsxs("div",{className:"admin-sales-page",children:[e.jsxs("section",{className:"admin-sales-hero",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Account Manager workspace"}),e.jsx("h1",{children:"My clients and leads."}),e.jsx("p",{children:"This view is limited to accounts and lead records assigned to you."})]}),e.jsxs("button",{type:"button",className:"admin-btn-primary",onClick:()=>M(a=>!a),children:[e.jsx(W,{name:"plus",size:16}),e.jsx("span",{children:b?"Close form":"New lead"})]})]}),w&&e.jsx("div",{className:"admin-error",children:e.jsx("p",{children:w})}),e.jsxs("section",{className:"admin-sales-metrics",children:[e.jsx(je,{icon:"clients",label:"Clients",value:d.length,detail:"Assigned accounts"}),e.jsx(je,{icon:"activity",label:"Active",value:ne.length,detail:"Not paused"}),e.jsx(je,{icon:"handshake",label:"Open leads",value:de.length,detail:"Still moving"}),e.jsx(je,{icon:"warning",label:"Due now",value:z.length,detail:"Follow-ups due today"})]}),e.jsx(Je,{title:"Account Manager tasks",subtitle:"Client, billing, follow-up, and escalation tasks assigned to you or the Account Manager role."}),e.jsxs("section",{className:"admin-sales-grid",children:[e.jsxs("div",{className:"admin-sales-panel admin-sales-panel--wide",children:[e.jsxs("div",{className:"admin-sales-panel-head",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Account Manager Dashboard"}),e.jsx("h2",{children:"Client income snapshot"})]}),e.jsx("span",{className:"admin-sales-badge",children:"Paid invoices only"})]}),e.jsxs("div",{className:"admin-account-dashboard-metrics",children:[e.jsxs("div",{children:[e.jsx("span",{children:"This month"}),e.jsx("strong",{children:K(te)}),e.jsx("small",{children:"Income from assigned clients"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Total managed income"}),e.jsx("strong",{children:K(ie)}),e.jsx("small",{children:"Paid invoice history"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Current balance"}),e.jsx("strong",{children:K(X)}),e.jsx("small",{children:n?"Approved and still owed":"Estimated from paid invoices"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Pending balance"}),e.jsx("strong",{children:n?F(n.balance.pendingBalanceCents):K(ge)}),e.jsx("small",{children:n?`${ce}% of $3,000 monthly cap used`:"Stripe payout setup or admin hold"})]})]})]}),e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Top clients"}),e.jsx("h2",{children:"By income"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[pe.map(a=>e.jsxs(Q,{className:"admin-sales-row",to:`/dashboard/admin/account-manager/clients/${a.client.id}`,children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.client.name||a.client.business||"Unnamed client"}),e.jsxs("small",{children:[a.invoiceCount," paid invoice",a.invoiceCount===1?"":"s"]})]}),e.jsx("em",{children:K(a.income)})]},a.client.id)),pe.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No paid income is recorded for assigned clients yet."})]})]})]}),e.jsxs("section",{className:"admin-sales-grid",children:[e.jsxs("div",{className:"admin-sales-panel admin-sales-panel--wide",children:[e.jsxs("div",{className:"admin-sales-panel-head",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Pipeline value"}),e.jsxs("h2",{children:[K(be)," open CRM value"]})]}),e.jsx("span",{className:"admin-sales-badge",children:"From project value"})]}),e.jsxs("div",{className:"admin-sales-pipeline",children:[re.map(a=>e.jsxs("div",{className:"admin-sales-stage",children:[e.jsx("span",{children:a.stage}),e.jsx("strong",{children:K(a.value)}),e.jsxs("small",{children:[a.count," lead",a.count===1?"":"s"]})]},a.stage)),re.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No open pipeline value yet."})]})]}),e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Follow-up queue"}),e.jsx("h2",{children:"Next touches"})]})}),e.jsxs("div",{className:"admin-account-dashboard-metrics admin-account-dashboard-metrics--compact",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Overdue"}),e.jsx("strong",{children:ee.overdue.length}),e.jsx("small",{children:"Past due"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Today"}),e.jsx("strong",{children:ee.today.length}),e.jsx("small",{children:"Due today"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"This week"}),e.jsx("strong",{children:ee.week.length}),e.jsx("small",{children:"Upcoming"})]})]})]})]}),e.jsxs("section",{className:"admin-sales-grid",children:[e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"At-risk clients"}),e.jsx("h2",{children:"Needs attention"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[me.map(a=>e.jsxs(Q,{className:"admin-sales-row",to:`/dashboard/admin/account-manager/clients/${a.client.id}`,children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.client.name||a.client.business||"Unnamed client"}),e.jsx("small",{children:a.client.email||"No email on file"})]}),e.jsx("em",{children:a.reason})]},a.client.id)),me.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No assigned clients are flagged at risk."})]})]}),e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Monthly billing"}),e.jsx("h2",{children:"Upcoming renewals"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[ue.map(a=>e.jsxs(Q,{className:"admin-sales-row",to:`/dashboard/admin/account-manager/clients/${a.clientId}`,children:[e.jsxs("span",{children:[e.jsx("strong",{children:H.get(a.clientId)?.name||"Assigned client"}),e.jsx("small",{children:a.description||a.type||xe(a.due_date??a.createdAt)})]}),e.jsx("em",{children:K(Number(a.amount||0))})]},a.id)),ue.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No due invoices for assigned clients right now."})]})]})]}),e.jsxs("section",{className:"admin-sales-grid",children:[e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Template offers"}),e.jsx("h2",{children:"Sent and accepted"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[c.slice(0,6).map(a=>e.jsxs(Q,{className:"admin-sales-row",to:`/dashboard/admin/leads/${a.leadId}`,children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.templateName}),e.jsx("small",{children:a.leadName||a.leadEmail})]}),e.jsx("em",{children:a.status})]},a.id)),c.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No template offers sent yet."})]})]}),e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Recent activity"}),e.jsx("h2",{children:"Latest movement"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[he.map(a=>e.jsxs(Q,{className:"admin-sales-row",to:a.href,children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.label}
1),e.jsx("small",{children:a.detail||"Updated record"})]}),e.jsx("em",{children:xe(a.date)})]},a.id)),he.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No recent activity yet."})]})]})]}),e.jsxs("section",{className:"admin-sales-panel",children:[e.jsxs("div",{className:"admin-sales-panel-head",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Pay readiness"}),e.jsx("h2",{children:"Commission status"})]}),e.jsx("span",{className:"admin-sales-badge",children:n?n.periodKey:"Current month"})]}),n?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"admin-account-dashboard-metrics",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Potential"}),e.jsx("strong",{children:F(n.rawCommissionCents)}),e.jsx("small",{children:"Calculated from collected revenue"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Approved"}),e.jsx("strong",{children:F(n.approvedCommissionCents)}),e.jsx("small",{children:"Ready once Stripe payout setup is complete"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Payable"}),e.jsx("strong",{children:F(n.balance.currentBalanceCents)}),e.jsxs("small",{children:[F(n.capRemainingCents)," cap room left"]})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Paid"}),e.jsx("strong",{children:F(n.paidCommissionCents)}),e.jsx("small",{children:Ze(n.weeklyPayout.lastPaidAt)})]})]}),e.jsxs("div",{className:"admin-account-dashboard-metrics",children:[e.jsxs("div",{children:[e.jsx("span",{children:n.weeklyPayout.commissionTrackingEnabled?"Next payout":"Commission tracking"}),e.jsx("strong",{children:F(n.weeklyPayout.scheduledPayoutCents)}),e.jsx("small",{children:n.weeklyPayout.automaticStripePayoutsEnabled?`Scheduled for ${xe(n.weeklyPayout.nextPayoutDate)}`:"Discontinued after August 28, 2026"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Processing"}),e.jsx("strong",{children:F(n.weeklyPayout.inFlightPayoutCents)}),e.jsx("small",{children:"Reserved in a payout batch"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Deferred"}),e.jsx("strong",{children:F(n.weeklyPayout.deferredPayoutCents)}),e.jsx("small",{children:n.weeklyPayout.lastFailureReason||"Waiting for enough available balance"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Paid this month"}),e.jsx("strong",{children:F(n.weeklyPayout.paidThisPeriodCents)}),e.jsx("small",{children:"Historical Stripe Connect payments"})]})]}),e.jsxs("div",{className:"admin-account-dashboard-metrics",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Platform available"}),e.jsx("strong",{children:Ae(n.balance.platformAvailableBalanceCents)}),e.jsx("small",{children:"Available for Account Manager transfers"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Platform pending"}),e.jsx("strong",{children:Ae(n.balance.platformPendingBalanceCents)}),e.jsx("small",{children:"Stripe balance not available yet"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Shortfall"}),e.jsx("strong",{children:F(n.balance.shortfallCents)}),e.jsx("small",{children:n.balance.platformBalanceStatus==="insufficient"?"Current balance exceeds available funds":"No known funding gap"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"Pay status"}),e.jsx("strong",{children:n.balance.paymentStatus.replace(/_/g," ")}),e.jsx("small",{children:n.balance.paymentStatusMessage})]})]}),e.jsxs("div",{className:"admin-sales-list",children:[n.entries.slice(0,8).map(a=>e.jsxs("div",{className:"admin-sales-row",children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.client_name||"Assigned client"}),e.jsx("small",{children:a.revenue_type.replace(/_/g," ")}),e.jsx("small",{children:a.status.replace(/_/g," ")}),a.missingWork&&e.jsx("small",{children:a.missingWork})]}),e.jsx("em",{children:F(a.commission_cents)}),a.missingWork&&e.jsx("button",{type:"button",className:"admin-btn-secondary",onClick:()=>ye(a),disabled:S===a.id,children:S===a.id?"Logging...":a.revenue_type==="recurring_revenue"?"Record check-in":"Log activity"})]},a.id)),n.entries.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No paid commission revenue is recorded for this month yet."})]}),i&&e.jsxs("form",{className:"admin-form-grid",onSubmit:we,children:[e.jsxs("div",{className:"admin-sales-panel-head",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Monthly check-in"}),e.jsx("h2",{children:i.client_name||"Assigned client"})]}),e.jsx("button",{type:"button",className:"admin-btn-secondary",onClick:()=>p(null),children:"Cancel"})]}),e.jsxs("label",{children:["Client status",e.jsxs("select",{value:R.clientStatus,onChange:a=>I(s=>({...s,clientStatus:a.target.value})),children:[e.jsx("option",{value:"healthy",children:"Healthy"}),e.jsx("option",{value:"needs_attention",children:"Needs attention"}),e.jsx("option",{value:"at_risk",children:"At risk"})]})]}),e.jsxs("label",{children:["Contact outcome",e.jsxs("select",{value:R.contactOutcome,onChange:a=>I(s=>({...s,contactOutcome:a.target.value})),children:[e.jsx("option",{value:"reached_client",children:"Reached client"}),e.jsx("option",{value:"attempted_no_response",children:"Attempted contact, no response"}),e.jsx("option",{value:"client_contacted_us",children:"Client contacted us"}),e.jsx("option",{value:"internal_review_only",children:"Internal account review only"}),e.jsx("option",{value:"could_not_contact",children:"Could not contact client"})]})]}),e.jsxs("label",{children:["Touchpoint type",e.jsxs("select",{value:R.touchpointType,onCh
1ange:a=>I(s=>({...s,touchpointType:a.target.value})),children:[e.jsx("option",{value:"Call",children:"Call"}),e.jsx("option",{value:"Email",children:"Email"}),e.jsx("option",{value:"Text",children:"Text"}),e.jsx("option",{value:"Meeting",children:"Meeting"}),e.jsx("option",{value:"Portal note",children:"Portal note"}),e.jsx("option",{value:"Internal review",children:"Internal review"})]})]}),e.jsxs("label",{children:["Upsell/retention opportunity",e.jsxs("select",{value:R.opportunityStatus,onChange:a=>I(s=>({...s,opportunityStatus:a.target.value})),children:[e.jsx("option",{value:"none",children:"None"}),e.jsx("option",{value:"possible",children:"Possible"}),e.jsx("option",{value:"active",children:"Active"})]})]}),e.jsxs("label",{className:"admin-form-span-2",children:["Summary",e.jsx("textarea",{value:R.summary,onChange:a=>I(s=>({...s,summary:a.target.value})),placeholder:"What happened, what was reviewed, or why contact could not happen?",required:!0})]}),e.jsxs("label",{className:"admin-form-span-2",children:["Risks or blockers",e.jsx("textarea",{value:R.risksBlockers,onChange:a=>I(s=>({...s,risksBlockers:a.target.value})),placeholder:"Required if the account needs attention or is at risk."})]}),e.jsxs("label",{children:["Next action",e.jsx("input",{value:R.nextAction,onChange:a=>I(s=>({...s,nextAction:a.target.value})),placeholder:"Required unless healthy"})]}),e.jsxs("label",{children:["Next action due",e.jsx("input",{type:"date",value:R.nextActionDue,onChange:a=>I(s=>({...s,nextActionDue:a.target.value}))})]}),e.jsxs("label",{children:["AM confidence",e.jsx("input",{type:"number",min:1,max:5,value:R.confidenceScore,onChange:a=>I(s=>({...s,confidenceScore:Number(a.target.value)}))})]}),e.jsx("div",{className:"admin-form-actions",children:e.jsx("button",{type:"submit",className:"admin-btn-primary",disabled:S===i.id,children:S===i.id?"Saving...":"Submit check-in"})})]})]}):e.jsx("p",{className:"admin-sales-empty",children:"Pay readiness is unavailable until the commission ledger is configured."})]}),b&&e.jsxs("section",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"New lead"}),e.jsx("h2",{children:"Add a lead you found"})]})}),e.jsxs("form",{onSubmit:fe,className:"admin-lead-command-create-grid",children:[e.jsxs("label",{children:[e.jsx("span",{children:"Client name"}),e.jsx("input",{value:r.name,onChange:a=>o(s=>({...s,name:a.target.value})),required:!0})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Email"}),e.jsx("input",{type:"email",value:r.email,onChange:a=>o(s=>({...s,email:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Phone"}),e.jsx("input",{value:r.phone??"",onChange:a=>o(s=>({...s,phone:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Company"}),e.jsx("input",{value:r.company??"",onChange:a=>o(s=>({...s,company:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Service type"}),e.jsx("input",{value:r.serviceType??"",onChange:a=>o(s=>({...s,serviceType:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Project value"}),e.jsx("input",{value:r.projectValue??"",onChange:a=>o(s=>({...s,projectValue:a.target.value,budget:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Source"}),e.jsx("input",{value:r.source??"",onChange:a=>o(s=>({...s,source:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Pipeline stage"}),e.jsxs("select",{value:r.status??"Lead",onChange:a=>o(s=>({...s,status:a.target.value})),children:[e.jsx("option",{value:"Lead",children:"Lead"}),e.jsx("option",{value:"Pending",children:"Pending"}),e.jsx("option",{value:"Demo Pending",children:"Demo Pending"}),e.jsx("option",{value:"Show Demo",children:"Show Demo"}),e.jsx("option",{value:"Client Thinking",children:"Client Thinking"}),e.jsx("option",{value:"Active",children:"Active"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Site"}),e.jsx("input",{value:r.siteUrl??"",onChange:a=>o(s=>({...s,siteUrl:a.target.value,website:a.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Priority"}),e.jsxs("select",{value:r.priorityValueLevel??r.priority??"",onChange:a=>o(s=>({...s,priority:a.target.value,priorityValueLevel:a.target.value})),children:[e.jsx("option",{value:"",children:"Not set"}),e.jsx("option",{value:"High",children:"High"}),e.jsx("option",{value:"Medium",children:"Medium"}),e.jsx("option",{value:"Low",children:"Low"})]})]}),e.jsxs("label",{className:"admin-lead-command-span-full",children:[e.jsx("span",{children:"Next action"}),e.jsx("input",{value:r.nextAction??"",onChange:a=>o(s=>({...s,nextAction:a.target.value,nextStep:a.target.value}))})]}),e.jsxs("label",{className:"admin-lead-command-span-full",children:[e.jsx("span",{children:"Notes"}),e.jsx("textarea",{value:r.notes??"",onChange:a=>o(s=>({...s,notes:a.target.value})),rows:3})]}),e.jsxs("div",{className:"admin-lead-command-create-actions",children:[e.jsx("button",{type:"button",className:"admin-btn-ghost",onClick:()=>M(!1),children:"Cancel"}),e.jsx("button",{type:"submit",className:"admin-btn-primary",disabled:N,children:N?"Creating...":"Create lead"})]})]})]}),e.jsxs("section",{className:"admin-sales-grid",children:[e.jsxs("div",{className:"admin-sales-panel admin-sales-panel--wide",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Clients"}),e.jsx("h2",{children:"My assigned clients"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[d.map(a=>e.jsxs(Q,{className:"admin-sales-row",to:`/dashboard/admin/account-manager/clients/${a.id}`,children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.name||a.business||"Unnamed client"}),e.jsxs("small",{children:[a.business||a.email||"No contact on file"," - ",es(a)]})]}),e.jsxs("span",{className:"admin-sales-row-aside",children:[e.jsx("em",{children:a.status}),e.jsx("strong",{children:"Open"})]})]},a.id)),d.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No clients are assigned to you yet."})]})]}),e.jsxs("div",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Follow-ups"}),e.jsx("h2",{children:"Due now"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[z.slice(0,8).map(a=>e.jsxs("div",{className:"admin-sales-row",children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.name}),e.jsxs("small",{children:[a.nextAction||a.nextStep||"Follow up"," - ",xe(a.nextActionDue??a.nextFollowUp)]})]}),e.jsx("em",{children:a.status})]},a.id)),z.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No follow-ups are due right now."})]})]})]}),e.jsxs("section",{className:"admin-sales-panel",children:[e.jsx("div",{className:"admin-sales-panel-head",children:e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Leads"}),e.jsx("h2",{children:"My assigned leads"})]})}),e.jsxs("div",{className:"admin-sales-list",children:[u.map(a=>e.jsxs(Q,{className:"admin-sales-row",to:`/dashboard/admin/leads/${a.id}`,children:[e.jsxs("span",{children:[e.jsx("strong",{children:a.name}),e.jsxs("small",{children:[a.company||a.email," - ",a.nextAction||a.nextStep||"No next action set"]})]}),e.jsx("em",{children:a.status})]},a.id)),u.length===0&&e.jsx("p",{className:"admin-sales-empty",children:"No leads are assigned to you yet."})]})]})]})}function je({icon:t,label:d,value:l,detail:u}){return e.jsxs("div",{className:"admin-sales-metric",children:[e.jsx("span",{className:"admin-sales-metric-icon",children:e.jsx(W,{name:t,size:18})}),e.jsxs("span",{children:[e.jsx("small",{children:d}),e.jsx("strong",{children:l}),e.jsx("em",{children:u})]})]})}const se=()=>({to:"",subject:"",body:"",clientId:"",leadId:"",sourceMessageId:"",sourceMailboxId:"",attachments:[]}),as=[{id:"home",label:"Home",icon:"grid"},{id:"inbox",label:"Inbox",icon:"inbox"},{id:"leads",label:"Leads",icon:"activity"},{id:"tasks",label:"Tasks",icon:"check-circle"},{id:"calendar",label:"Calendar",icon:"activity"},{id:"clients",label:"Clients",icon:"clients"},{id:"retention",label:"Retention",icon:"activity"},{id:"assistant",label:"Drafts",icon:"spark"},{id:"operations",label:"Operations",icon:"activity"},{id:"income",label:"Income",icon:"billing"}];function q(t){if(!t)return"No date";const d=typeof t=="number"?new Date(t*1e3):new Date(t);return Number.isNaN(d.getTime())?"No date":new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(d)}function Le(t){return t<1024?`${t} B`:t<1024*1024?`${Math.ceil(t/1024)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function U(t){return String(t.name||t.email||"Unnamed client")}function G(t){return String(t.id||"")}function ns(t){return String(t||"Account Manager").trim().split(/\s+/)[0]||"Account Manager"}const De={draft:"Draft",awaiting_approval:"Awaiting approval",scheduled:"Scheduled",sent:"Sent",dismissed:"Dismissed"},ts=2e4;function Me({status:t}){return e.jsxs("span",{className:`am-draft-status am-draft-status--${t}`,"aria-label":`Status: ${De[t]}`,children:[e.jsx("span",{"aria-hidden":"true"}),De[t]]})}function bs(){const[t,d]=h.useState("home"),[l,u]=h.useState(null),[f,_]=h.useState(!0),[j,c]=h.useState(!1),[m,n]=h.useState(null),[v,C]=h.useState(null),[A,w]=h.useState(null),[T,b]=h.useState(null),[M,r]=h.useState(null),[o,N]=h.useState(""),[E,S]=h.useState("inbox"),[$,i]=h.useState(""),[p,R]=h.useState(!1),[I,z]=h.useState(se),ne=h.useRef(null),[de,H]=h.useState({title:"",dueAt:"",priority:"medium",clientId:""}),[J,O]=h.useState({title:"",startsAt:"",endsAt:"",clientId:"",location:""}),[Y,te]=h.useState(""),ie=h.useRef(null);h.useEffect(()=>{p&&requestAnimationFrame(()=>{ne.current?.scrollIntoView({behavior:"smooth",block:"start"}),ne.current?.querySelector("textarea")?.focus()})},[p,I.sourceMessageId]);const B=async s=>{const x=new AbortController,g=window.setTimeout(()=>x.abort(),ts);try{s?.quiet||_(!0),n(null);const k=await Ke({folder:E,search:$,mailboxId:o||void 0,signal:x.signal});u(k.data),!o&&k.data.mailboxes[0]&&N(k.data.mailboxes[0].id),!A&&k.data.messages[0]&&w(k.data.messages[0].id)}catch(k){n(k instanceof DOMException&&k.name==="AbortError"?"The Account Manager command center took too long to respond. Please try again.":k instanceof Error?k.message:"Unable to load Account Manager command center.")}finally{window.clearTimeout(g),_(!1)}};h.useEffect(()=>{B()},[E,o]);const D=async(s,x)=>{try{c(!0),n(null),C(null);const g=await Se(s);return C(x),await B({quiet:!0}),g.data}catch(g){return n(g instanceof Error?g.message:"The Account Manager workspace could not complete that action."),null}finally{c(!1)}},y=h.useMemo(()=>l?.messages.find(s=>s.id===A)||null,[A,l?.messages]),ve=h.useMemo(()=>l?.drafts.find(s=>s.id===T)||null,[T,l?.drafts]),X=h.useMemo(()=>{const s=new Date().toISOString().slice(0,10);return l?.events.filter(x=>x.starts_at.slice(0,10)===s)||[]},[l?.events]);l?.tasks.filter(s=>s.status!=="completed"),l?.drafts.filter(s=>s.status==="awaiting_approval");const ge=async s=>{const g=(await D({action:"summarize_email",messageId:s.id},"Email summary is ready."))?.summary;g?.text&&r(g.text)},ce=async s=>{const g=(await D({action:"draft_reply",messageId:s.id},"Draft created. Review it before sending."))?.draft;
1g?.id&&(b(g.id),d("assistant"))},Z=async s=>{const g=(await D({action:"prepare_site_change_handoff",messageId:s.id},"Developer handoff drafted with the client evidence. Review it before sending."))?.draft;g?.id&&(b(g.id),d("assistant"))},oe=async s=>{s.siteChange&&await D({action:"approve_site_change_preview",requestId:s.siteChange.id},"Preview approved for client review. You can now prepare the client reply.")},ue=async s=>{if(!s.siteChange||!Y.trim())return;const g=(await D({action:"request_site_change_corrections",requestId:s.siteChange.id,corrections:Y.trim()},"Correction request drafted for the Developer."))?.draft;g?.id&&(b(g.id),d("assistant")),te("")},me=async s=>{if(!s.siteChange)return;const g=(await D({action:"prepare_client_site_change_preview",requestId:s.siteChange.id},"Client preview reply drafted for your review."))?.draft;g?.id&&(b(g.id),d("assistant"))},le=async s=>{if(!s.siteChange)return;const g=(await D({action:"prepare_client_clarification",requestId:s.siteChange.id},"Client clarification email drafted for your review."))?.draft;g?.id&&(b(g.id),d("assistant"))},be=async s=>{s.preventDefault();const g=s.nativeEvent.submitter?.value==="draft"?"draft":"awaiting_approval";try{c(!0),n(null),C(null);const L=(await Se({action:"create_draft",mailboxId:I.sourceMailboxId||o,to:[I.to],subject:I.subject,body:I.body,clientId:I.clientId||null,leadId:I.leadId||null,sourceMessageId:I.sourceMessageId||null,status:g})).data?.draft;if(!L?.id)throw new Error("The draft was created without a usable identifier.");const V=[];for(const _e of I.attachments)try{await ke(L.id,_e)}catch(Ce){V.push(`${_e.name}: ${Ce instanceof Error?Ce.message:"upload failed"}`)}b(L.id),z(se()),R(!1),d("assistant"),C(V.length?`Draft saved, but ${V.length} attachment${V.length===1?"":"s"} could not be added.`:g==="draft"?`Draft saved. Continue it anytime from Drafts${I.attachments.length?` with ${I.attachments.length} attachment${I.attachments.length===1?"":"s"}`:""}.`:`Email saved for final approval${I.attachments.length?` with ${I.attachments.length} attachment${I.attachments.length===1?"":"s"}`:""}.`),V.length&&n(V.join(" ")),await B({quiet:!0})}catch(k){n(k instanceof Error?k.message:"The draft could not be saved.")}finally{c(!1)}},re=s=>{z({...se(),to:String(s.email||""),clientId:s.relationship_type==="client"?s.id:"",leadId:s.relationship_type==="lead"?s.id:""}),R(!0),d("inbox")},ee=s=>{const x=s.to.find(g=>g.toLowerCase()!==s.mailboxAddress.toLowerCase());z({...se(),to:s.direction==="outbound"&&x||s.fromAddress,subject:/^re:/i.test(s.subject)?s.subject:`Re: ${s.subject}`,clientId:s.clientId||"",leadId:s.leadId||"",sourceMessageId:s.id,sourceMailboxId:s.mailboxId}),R(!0),d("inbox")},he=async(s,x)=>{if(x.length)try{c(!0),n(null),C(null);for(const g of x)await ke(s.id,g);C(`${x.length} attachment${x.length===1?"":"s"} added to the draft.`),await B({quiet:!0})}catch(g){n(g instanceof Error?g.message:"The attachment could not be uploaded."),await B({quiet:!0})}finally{c(!1)}},pe=async(s,x)=>{try{c(!0),n(null),C(null),await Ye(s.id,x.id),C(`${x.filename} removed from the draft.`),await B({quiet:!0})}catch(g){n(g instanceof Error?g.message:"The attachment could not be removed.")}finally{c(!1)}},fe=async s=>{s.preventDefault(),await D({action:"save_task",...de},"Task added."),H({title:"",dueAt:"",priority:"medium",clientId:""})},ye=async s=>{s.preventDefault(),await D({action:"save_event",...J},"Calendar event added."),O({title:"",startsAt:"",endsAt:"",clientId:"",location:""})},we=async s=>{if(!s)return;const x=await s.text();await D({action:"import_ics",ics:x},"Calendar imported."),ie.current&&(ie.current.value="")},a=()=>{const s=["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//Bliss IT Services//Account Manager Calendar//EN"];for(const k of l?.events||[]){const L=new Date(k.starts_at).toISOString().replace(/[-:]/g,"").replace(/\.\d{3}/,""),V=k.ends_at?new Date(k.ends_at).toISOString().replace(/[-:]/g,"").replace(/\.\d{3}/,""):L;s.push("BEGIN:VEVENT",`UID:${k.id}@blissits.com`,`DTSTART:${L}`,`DTEND:${V}`,`SUMMARY:${k.title.replace(/,/g,"\\,")}`,`DESCRIPTION:${String(k.description||"").replace(/\n/g,"\\n")}`,"END:VEVENT")}s.push("END:VCALENDAR");const x=URL.createObjectURL(new Blob([s.join(`\r
2`)],{type:"text/calendar"})),g=document.createElement("a");g.href=x,g.download="bliss-account-manager-calendar.ics",g.click(),URL.revokeObjectURL(x)};return f?e.jsx("div",{className:"admin-loading",children:"Loading Account Manager command center..."}):l?e.jsxs("div",{className:"am-command-center",children:[e.jsxs("header",{className:"am-command-header",children:[e.jsxs("div",{children:[e.jsx("p",{className:"admin-clean-kicker",children:"Account Manager command center"}),e.jsxs("h1",{children:["Good ",new Date().getHours()<12?"morning":new Date().getHours()<18?"afternoon":"evening",", ",ns(l.identity.name),"."]}
2),e.jsx("p",{children:"Lead and client communication, commitments, and follow-through in one place."})]}),e.jsxs("div",{className:"am-command-header__actions",children:[e.jsx("button",{className:"admin-btn-secondary",type:"button",onClick:()=>void B(),disabled:j,children:"Refresh"}),e.jsxs("button",{className:"admin-btn-primary",type:"button",onClick:()=>{z(se()),R(!0),d("inbox")},children:[e.jsx(W,{name:"plus",size:16}),"New email"]})]})]}),e.jsx("nav",{className:"am-command-tabs","aria-label":"Account Manager workspace",children:as.map(s=>e.jsxs("button",{type:"button",className:t===s.id?"is-active":"",onClick:()=>d(s.id),children:[e.jsx(W,{name:s.icon,size:17}),e.jsx("span",{children:s.label}),s.id==="inbox"&&l.metrics.unread>0?e.jsx("em",{children:l.metrics.unread}):null,s.id==="leads"&&l.metrics.nurtureDue+l.metrics.nurtureReplies>0?e.jsx("em",{children:l.metrics.nurtureDue+l.metrics.nurtureReplies}):null,s.id==="assistant"&&l.drafts.filter(x=>["draft","awaiting_approval"].includes(x.status)).length>0?e.jsx("em",{children:l.drafts.filter(x=>["draft","awaiting_approval"].includes(x.status)).length}):null,s.id==="retention"&&l.retentionControls.health.filter(x=>x.health_status==="at_risk").length>0?e.jsx("em",{children:l.retentionControls.health.filter(x=>x.health_status==="at_risk").length}):null]},s.id))}),m?e.jsx("div",{className:"am-command-feedback am-command-feedback--error",role:"alert",children:e.jsx("p",{children:m})}):null,v?e.jsxs("div",{className:"am-command-feedback am-command-feedback--success",role:"status",children:[e.jsx(W,{name:"check-circle",size:17}),v]}):null,t==="home"?e.jsxs("div",{className:"am-command-home",children:[e.jsxs("section",{className:"am-command-metrics","aria-label":"Today at a glance",children:[e.jsx(ae,{label:"Unread",value:l.metrics.unread,detail:"Across your mailboxes"}),e.jsx(ae,{label:"Welcomes",value:l.metrics.welcomeNeedsReview,detail:"Need review or delivery",tone:l.metrics.welcomeNeedsReview?"warning":void 0}),e.jsx(ae,{label:"Lead follow-up",value:l.metrics.nurtureDue,detail:"Ready for preparation",tone:l.metrics.nurtureDue?"warning":void 0}),e.jsx(ae,{label:"Needs approval",value:l.metrics.draftsAwaitingApproval,detail:"Drafts cannot send without you"}),e.jsx(ae,{label:"Due today",value:l.metrics.dueToday,detail:"Tasks and commitments"}),e.jsx(ae,{label:"Overdue",value:l.metrics.overdue,detail:"Clear these first",tone:l.metrics.overdue?"warning":void 0})]}),e.jsxs("section",{className:"am-command-grid am-command-grid--home",children:[e.jsxs("div",{className:"am-work-lane",children:[e.jsxs("div",{className:"am-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Decisions for you"}),e.jsx("h2",{children:"Messages that need movement"})]}),e.jsx("button",{type:"button",onClick:()=>d("inbox"),children:"Open inbox"})]}),l.messages.filter(s=>s.folder==="inbox"&&s.direction==="inbound").slice(0,5).map(s=>e.jsxs("button",{className:"am-priority-row",onClick:()=>{w(s.id),d("inbox")},children:[e.jsx("span",{className:`am-signal-dot ${s.status==="unread"?"is-new":""}`}),e.jsxs("span",{children:[e.jsx("strong",{children:s.subject}),e.jsxs("small",{children:[s.relationshipName||s.fromName||s.fromAddress," · ",s.preview]})]}),e.jsx(W,{name:"chevron-right",size:18})]},s.id)),l.messages.length?null:e.jsx(P,{title:"Your inbox is clear",body:"New assigned-client and shared Account Management messages will appear here."})]}),e.jsxs("aside",{className:"am-daily-rail",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Today"}),e.jsxs("h2",{children:[X.length," calendar item",X.length===1?"":"s"]})]}),X.slice(0,4).map(s=>e.jsxs("p",{children:[e.jsx("strong",{children:q(s.starts_at)}),s.title]},s.id)),X.length?null:e.jsx("p",{children:"No meetings or calendar commitments today."}),e.jsx("button",{type:"button",onClick:()=>d("calendar"),children:"View calendar"})]})]}),l.weeklyBrief?e.jsxs("section",{className:"am-weekly-brief",children:[e.jsxs("div",{children:[e.jsxs("span",{children:["Weekly brief · ",l.weeklyBrief.periodKey]}),e.jsx("h2",{children:"Your client relationship summary"})]}),e.jsx("pre",{children:l.weeklyBrief.summary}),e.jsx("small",{children:"Stored in this workspace and delivered only to your personal Bliss inbox."})]}):null]}):null,t==="inbox"?e.jsxs("section",{className:"am-inbox-shell",children:[e.jsxs("div",{className:"am-mail-toolbar",children:[e.jsx("div",{className:"am-mailbox-switcher",children:l.mailboxes.map(s=>e.jsxs("button",{type:"button",className:o===s.id?"is-active":"",onClick:()=>N(s.id),children:[e.jsx("span",{children:s.kind==="shared"?"Shared accounts inbox":"Personal inbox"}),s.email_address]},s.id))}),e.jsxs("div",{className:"am-mail-search",children:[e.jsx(W,{name:"search",size:17}),e.jsx("input",{value:$,onChange:s=>i(s.target.value),onKeyDown:s=>{s.key==="Enter"&&B()},placeholder:"Search this mailbox"}),e.jsx("button",{type:"button",onClick:()=>void B(),children:"Search"})]})]}),e.jsx("div",{className:"am-folder-bar",children:["inbox","sent","archive","trash","all"].map(s=>e.jsx("button",{type:"button",className:E===s?"is-active":"",onClick:()=>S(s),children:s},s))}),p?e.jsx(ls,{formRef:ne,compose:I,setCompose:z,workspace:l,mailboxId:o,onSubmit:be,onCancel:()=>{z(se()),R(!1)},busy:j}):null,e.jsxs("div",{className:"am-inbox-layout",children:[e.jsxs("div",{className:"am-message-list",children:[l.messages.map(s=>e.jsx(is,{message:s,active:A===s.id,onClick:()=>
2{w(s.id),r(null),D({action:"update_message",messageId:s.id,status:"read"},"")}},s.id)),l.messages.length?null:e.jsx(P,{title:"No mail in this view",body:"Try another folder or mailbox."})]}),e.jsx("div",{className:"am-reading-pane",children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"am-reading-head",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"am-relationship-label",children:[e.jsx("em",{children:y.relationshipType}),y.relationshipName||y.fromName||y.fromAddress]}),e.jsx("h2",{children:y.subject}),e.jsxs("small",{children:["From ",y.fromAddress," · ",q(y.sentAt||y.receivedAt)]})]}),e.jsxs("div",{className:"am-reading-actions",children:[e.jsx("button",{type:"button",onClick:()=>ee(y),disabled:j,children:"Reply"}),e.jsxs("button",{type:"button",onClick:()=>void ge(y),disabled:j,children:[e.jsx(W,{name:"spark",size:16}),"Summarize"]}),e.jsx("button",{type:"button",onClick:()=>void ce(y),disabled:j,children:"Draft with AI"}),y.mailboxKind==="shared"&&!y.assignedUserId?e.jsx("button",{type:"button",onClick:()=>void D({action:"assign_thread",mailboxId:y.mailboxId,threadId:y.threadId,clientId:y.clientId,leadId:y.leadId},"Conversation assigned to you."),children:"Claim"}):null]})]}),M?e.jsxs("div",{className:"am-ai-summary",children:[e.jsx("span",{children:"Bliss AI summary"}),e.jsx("pre",{children:M})]}):null,y.siteChange?e.jsxs("div",{className:"am-site-change-suggestion",children:[e.jsxs("div",{children:[e.jsxs("span",{children:["Site change · ",(y.siteChange.workflowState||y.siteChange.status).replaceAll("_"," ")]}),e.jsx("strong",{children:y.siteChange.summary}),e.jsxs("small",{children:[y.siteChange.attachmentCount?`${y.siteChange.attachmentCount} attachment${y.siteChange.attachmentCount===1?"":"s"} saved to the client’s R2 evidence folder. `:"",y.siteChange.developerEmail?`Assigned Developer: ${y.siteChange.developerName||y.siteChange.developerEmail}.`:"Assign a Developer before preparing the handoff."]})]}),y.siteChange.previewUrl?e.jsxs("a",{href:y.siteChange.previewUrl,target:"_blank",rel:"noreferrer",children:["Open preview revision ",y.siteChange.revision||1]}):null,!y.siteChange.workflowState||["sent_to_developer"].includes(y.siteChange.workflowState)?e.jsx("button",{type:"button",disabled:j||!y.siteChange.developerEmail,onClick:()=>void Z(y),children:y.siteChange.status==="drafted"?"Prepare another handoff draft":"Draft email to Developer"}):null,y.siteChange.workflowState==="clarification_needed"?e.jsx("button",{type:"button",disabled:j,onClick:()=>void le(y),children:"Draft clarification to client"}):null,["account_manager_review","client_changes_requested"].includes(y.siteChange.workflowState||"")?e.jsxs(e.Fragment,{children:[y.siteChange.workflowState==="account_manager_review"?e.jsx("button",{type:"button",disabled:j,onClick:()=>void oe(y),children:"Approve preview"}):null,e.jsxs("label",{children:["Corrections",e.jsx("textarea",{rows:3,value:Y,onChange:s=>te(s.target.value),placeholder:"Describe the exact correction for the Developer."})]}),e.jsx("button",{type:"button",disabled:j||!Y.trim(),onClick:()=>void ue(y),children:"Draft correction request"})]}):null,y.siteChange.workflowState==="account_manager_approved"?e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:j,onClick:()=>void me(y),children:"Draft client reply with preview"}):null,y.siteChange.workflowState==="awaiting_client"?e.jsx("small",{children:"Waiting for the client to approve this exact preview or request changes."}):null,y.siteChange.workflowState==="publish_queued"?e.jsx("small",{children:"The authenticated client approved this revision. Production publish is queued automatically."}):null,y.siteChange.workflowState==="client_changes_requested"?e.jsx("small",{children:"The client requested additional changes. Review their reply, then route the correction back to the Developer."}):null,e.jsx("small",{children:"Client-facing email always remains under Account Manager review. Production requires an authenticated client reply approving the current preview revision."})]}):null,e.jsx("div",{className:"am-message-body",children:y.body||"No readable message body."}),e.jsxs("div",{className:"am-reading-footer",children:[e.jsx("button",{type:"button",onClick:()=>void D({action:"update_message",messageId:y.id,folder:"archive"},"Message archived."),children:"Archive"}),e.jsx("button",{type:"button",onClick:()=>ee(y),children:"Reply manually"}),e.jsx("button",{type:"button",onClick:()=>void ce(y),children:"Reply with AI"})]})]}):e.jsx(P,{title:"Select a message",body:"Open an email to review its client context, summary, and next action."})})]})]}):null,t==="leads"?e.jsx(ms,{workspace:l,busy:j,onAction:D,onCompose:re,onDraft:s=>{b(s),d("assistant")}}):null,t==="tasks"?e.jsx(rs,{tasks:l.tasks,clients:l.clients,form:de,setForm:H,onSubmit:fe,onUpdate:(s,x)=>void D({action:"save_task",id:s.id,title:s.title,clientId:s.client_id,description:s.description,priority:s.priority,dueAt:s.due_at,status:x},x==="completed"?"Task completed.":"Task updated."),busy:j}):null,t==="calendar"?e.jsx(ds,{workspace:l,form:J,setForm:O,onSubmit:ye,onImport:we,onExport:a,inputRef:ie,busy:j}):null,t==="clients"?e.jsx(hs,{workspace:l,busy:j,onAction:D,onCompose:re}):null,t==="retention"?e.jsx(ps,{workspace:l,onAction:D,busy:j}):null,t==="assistant"?e.jsx(cs,{workspace:l,drafts:l.drafts,selected:ve,setSelected:b,onUpdate:(s,x)=>void D({action:"update_draft",draftId:s.id,...x},"Draft updated."),onSend:s=>void D({action:"approve_send_draft",draftId:s.id},"Approved email sent through Cloudflare Email Sending."),onSchedule:(s,x)=>void D({action:"schedule_draft",draftId:s.id,scheduledSendAt:x},"Email approved and scheduled for business hours."),onUpload:he,onRemove:pe,onAction:D,busy:j}):null,t==="operations"?e.jsx(xs,{workspace:l,onAction:D,busy:j}):null,t==="income"?e.jsx("div",{className:"am-income-legacy",children:e.jsx(ss,{})}):null]}):e.jsxs("div",{className:"admin-error",role:"alert",children:[e.jsx("p",{children:m||"Unable to load Account Manager command center."}),e.jsx("button",{type:"button",className:"admin-btn-primary",onClick:()=>void B(),children:"Try again"})]})}function ae({label:t,value:d,detail:l,tone:u}){return e.jsxs("div",{className:`am-metric ${u?`am-metric--${u}`:""}`,children:[e.jsx("span",{children:t}),e.jsx("strong",{children:d}),e.jsx("small",{children:l})]})}function P({title:t,body:d}){return e.jsxs("div",{className:"am-empty",children:[e.jsx(W,{name:"check-circle",size:28}),e.jsx("strong",{children:t}),e.jsx("p",{children:d})]})}function is({message:t,active:d,onClick:l}){return e.jsxs("button",{type:"button",className:`am-message-item ${d?"is-active":""} ${t.status==="unread"?"is-unread":""}`,onClick:l,children:[e.jsx("span",{className:"am-message-avatar",children:(t.fromName||t.fromAddress).slice(0,2).toUpperCase()}),e.jsxs("span",{children:[e.jsx("strong",{children:t.fromName||t.fromAddress}),e.jsx("b",{children:t.subject}),e.jsx("small",{children:t.preview||"No preview"})]}),e.jsx("time",{children:q(t.sentAt||t.receivedAt)})]})}function ls({formRef:t,compose:d,setCompose:l,workspace:u,onSubmit:f,onCancel:_,busy:j}){const c=d.clientId?`client:${d.clientId}`:d.leadId?`lead:${d.leadId}`:"",m=n=>l(v=>{const C=[...v.attachments];for(const A of n){if(C.length>=10)break;C.some(w=>w.name===A.name&&w.size===A.size)||C.push(A)}return{...v,attachments:C}});return e.jsxs("form",{ref:t,className:"am-compose",onSubmit:f,children:[e.jsxs("div",{children:[e.jsx("span",{children:d.sourceMessageId?"Manual reply":"New email"}),e.jsx("strong",{children:d.sourceMessageId?"No AI is used. The reply stays in the original email thread.":"Review is required before send"})]}),e.jsxs("label",{children:["To",e.jsx("input",{type:"email",required:!0,value:d.to,onChange:n=>l(v=>({...v,to:n.target.value}))})]}),e.jsxs("label",{children:["Relationship",e.jsxs("select",{value:c,onChange:n=>{const[v,C]=n.target.value.split(":");l(A=>({...A,clientId:v==="client"&&C||"",leadId:v==="lead"&&C||""}))},children:[e.jsx("option",{value:"",children:"No relationship link"}),e.jsx("optgroup",{label:"Leads",children:u.leads.map(n=>e.jsx("option",{value:`lead:${n.id}`,children:U(n)},`lead:${n.id}`))}),e.jsx("optgroup",{label:"Clients",children:u.clients.map(n=>e.jsx("option",{value:`client:${G(n)}`,children:U(n)},`client:${G(n)}`))})]})]}),e.jsxs("label",{className:"am-compose__subject",children:["Subject",e.jsx("input",{required:!0,value:d.subject,onChange:n=>l(v=>({...v,subject:n.target.value}))})]}),e.jsxs("label",{className:"am-compose__body",children:["Message",e.jsx("textarea",{required:!0,rows:
27,value:d.body,onChange:n=>l(v=>({...v,body:n.target.value}))})]}),e.jsxs("div",{className:"am-attachment-picker",children:[e.jsxs("label",{children:[e.jsx("span",{children:"Add attachments"}),e.jsx("input",{type:"file",multiple:!0,accept:".pdf,.png,.jpg,.jpeg,.gif,.webp,.txt,.csv,.docx,.xlsx",disabled:j||d.attachments.length>=10,onChange:n=>{m(Array.from(n.target.files||[])),n.target.value=""}})]}),e.jsx("small",{children:"Up to 10 files, 10 MB each and 25 MB total."}),d.attachments.length?e.jsx("div",{className:"am-attachment-list",children:d.attachments.map((n,v)=>e.jsxs("div",{children:[e.jsxs("span",{children:[e.jsx("strong",{children:n.name}),e.jsx("small",{children:Le(n.size)})]}),e.jsx("button",{type:"button","aria-label":`Remove ${n.name}`,onClick:()=>l(C=>({...C,attachments:C.attachments.filter((A,w)=>w!==v)})),children:"Remove"})]},`${n.name}-${n.size}-${v}`))}):null]}),e.jsxs("div",{className:"am-compose__actions",children:[e.jsx("button",{type:"button",onClick:_,children:"Cancel"}),e.jsx("button",{type:"submit",name:"draftStatus",value:"draft",formNoValidate:!0,disabled:j,children:"Save draft"}),e.jsx("button",{className:"admin-btn-primary",type:"submit",name:"draftStatus",value:"awaiting_approval",disabled:j,children:"Save for approval"})]})]})}function rs({tasks:t,clients:d,form:l,setForm:u,onSubmit:f,onUpdate:_,busy:j}){const c=t.filter(n=>n.status!=="completed"),m=t.filter(n=>n.status==="completed");return e.jsxs("section",{className:"am-workspace-section",children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Commitments"}),e.jsxs("h2",{children:[c.length," open task",c.length===1?"":"s"]})]})}),e.jsxs("form",{className:"am-inline-form",onSubmit:f,children:[e.jsx("input",{required:!0,placeholder:"Add a client commitment or follow-up",value:l.title,onChange:n=>u(v=>({...v,title:n.target.value}))}),e.jsxs("select",{value:l.clientId,onChange:n=>u(v=>({...v,clientId:n.target.value})),children:[e.jsx("option",{value:"",children:"No client"}),d.map(n=>e.jsx("option",{value:G(n),children:U(n)},G(n)))]}),e.jsx("input",{type:"datetime-local",value:l.dueAt,onChange:n=>u(v=>({...v,dueAt:n.target.value}))}),e.jsxs("select",{value:l.priority,onChange:n=>u(v=>({...v,priority:n.target.value})),children:[e.jsx("option",{children:"low"}),e.jsx("option",{children:"medium"}),e.jsx("option",{children:"high"}),e.jsx("option",{children:"critical"})]}),e.jsx("button",{className:"admin-btn-primary",disabled:j,children:"Add task"})]}),e.jsxs("div",{className:"am-task-list",children:[c.map(n=>e.jsxs("div",{className:"am-task-row",children:[e.jsx("button",{type:"button","aria-label":"Complete task",onClick:()=>_(n,"completed"),children:e.jsx("span",{})}),e.jsxs("span",{children:[e.jsx("strong",{children:n.title}),e.jsxs("small",{children:[d.find(v=>G(v)===n.client_id)?U(d.find(v=>G(v)===n.client_id)):"Internal"," · ",n.due_at?q(n.due_at):"No due date"]})]}),e.jsx("em",{children:n.priority})]},n.id)),c.length?null:e.jsx(P,{title:"No open tasks",body:"Add a commitment or let the Assistant create follow-up from email."})]}),m.length?e.jsxs("details",{className:"am-completed-tasks",children:[e.jsxs("summary",{children:[m.length," completed"]}),m.slice(0,20).map(n=>e.jsx("p",{children:n.title},n.id))]}):null]})}function ds({workspace:t,form:d,setForm:l,onSubmit:u,onImport:f,onExport:_,inputRef:j,busy:c}){return e.jsxs("section",{className:"am-workspace-section",children:[e.jsxs("div",{className:"am-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Schedule"}),e.jsx("h2",{children:"Calendar and commitments"})]}),e.jsxs("div",{children:[e.jsx("input",{ref:j,hidden:!0,type:"file",accept:".ics,text/calendar",onChange:m=>void f(m.target.files?.[0])}),e.jsx("button",{type:"button",onClick:()=>j.current?.click(),children:"Import ICS"}),e.jsx("button",{type:"button",onClick:_,children:"Export ICS"})]})]}),e.jsxs("form",{className:"am-inline-form am-inline-form--calendar",onSubmit:u,children:[e.jsx("input",{required:!0,placeholder:"Event title",value:d.title,onChange:m=>l(n=>({...n,title:m.target.value}))}),e.jsx("input",{required:!0,type:"datetime-local",value:d.startsAt,onChange:m=>l(n=>({...n,startsAt:m.target.value}))}),e.jsx("input",{type:"datetime-local",value:d.endsAt,onChange:m=>l(n=>({...n,endsAt:m.target.value}))}),e.jsxs("select",{value:d.clientId,onChange:m=>l(n=>({...n,clientId:m.target.value})),children:[e.jsx("option",{value:"",children:"No client"}),t.clients.map(m=>e.jsx("option",{value:G(m),children:U(m)},G(m)))]}),e.jsx("input",{placeholder:"Location or meeting link",value:d.location,onChange:m=>l(n=>({...n,location:m.target.value}))}
2),e.jsx("button",{className:"admin-btn-primary",disabled:c,children:"Add event"})]}),e.jsxs("div",{className:"am-calendar-list",children:[t.events.map(m=>e.jsxs("article",{children:[e.jsx("time",{children:q(m.starts_at)}),e.jsxs("span",{children:[e.jsx("strong",{children:m.title}),e.jsx("small",{children:m.location||"No location"})]})]},m.id)),t.events.length?null:e.jsx(P,{title:"Calendar is open",body:"Add an event or import an ICS calendar."})]})]})}function cs({workspace:t,drafts:d,selected:l,setSelected:u,onUpdate:f,onSend:_,onSchedule:j,onUpload:c,onRemove:m,onAction:n,busy:v}){const[C,A]=h.useState(""),[w,T]=h.useState(""),[b,M]=h.useState(""),[r,o]=h.useState("");h.useEffect(()=>{A(l?.to.join(", ")||""),T(l?.body||""),M(l?.subject||""),o("")},[l?.id,l?.to,l?.body,l?.subject]);const N=!!(l&&["draft","awaiting_approval"].includes(l.status)),E=()=>C.split(",").map(S=>S.trim()).filter(Boolean);return e.jsxs("div",{className:"am-assistant-workspace",children:[e.jsx(js,{workspace:t,onAction:n,busy:v}),e.jsxs("section",{className:"am-assistant-shell",children:[e.jsxs("div",{className:"am-draft-queue",children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Saved and prepared email"}),e.jsx("h2",{children:"Drafts"})]})}),d.map(S=>e.jsxs("button",{type:"button",className:l?.id===S.id?"is-active":"",onClick:()=>u(S.id),children:[e.jsxs("span",{children:[e.jsx("strong",{children:S.subject||"(No subject)"}),e.jsxs("span",{className:"am-draft-meta",children:[e.jsxs("small",{children:[S.sourceMessageId?"Reply":"New message"," · To ",S.to.join(", ")||"not set",S.scheduledSendAt?` · ${q(S.scheduledSendAt)}`:""]}),e.jsx(Me,{status:S.status})]})]}),e.jsx(W,{name:"chevron-right",size:17})]},S.id)),d.length?null:e.jsx(P,{title:"No drafts yet",body:"Save a new message or reply and it will remain here until you finish it."})]}),e.jsx("div",{className:"am-draft-editor",children:l?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"am-draft-editor__head",children:[e.jsx("span",{children:l.generatedBy==="human"?"Manual draft":"AI-assisted draft"}),e.jsx(Me,{status:l.status})]}),e.jsxs("label",{children:["To",e.jsx("input",{value:C,onChange:S=>A(S.target.value),disabled:!N})]}),e.jsxs("label",{children:["Subject",e.jsx("input",{value:b,onChange:S=>M(S.target.value),disabled:!N})]}),e.jsxs("label",{children:["Message",e.jsx("textarea",{rows:14,value:w,onChange:S=>T(S.target.value),disabled:!N})]}),l.attachmentIds?.length?e.jsxs("div",{className:"am-draft-attachment-receipt",children:[e.jsx(W,{name:"inbox",size:16}),e.jsxs("span",{children:[l.attachmentIds.length," client attachment",l.attachmentIds.length===1?"":"s"," will be included when this draft is approved."]})]}):null,e.jsxs("div",{className:"am-draft-attachments",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Attachments"}),e.jsxs("label",{className:N&&!v?"":"is-disabled",children:["Add files",e.jsx("input",{type:"file",multiple:!0,accept:".pdf,.png,.jpg,.jpeg,.gif,.webp,.txt,.csv,.docx,.xlsx",disabled:v||!N,onChange:S=>{const $=Array.from(S.target.files||[]);S.target.value="",c(l,$)}})]})]}),l.attachments?.length?e.jsx("div",{className:"am-attachment-list",children:l.attachments.map(S=>e.jsxs("div",{children:[e.jsxs("span",{children:[e.jsx("strong",{children:S.filename}),e.jsx("small",{children:Le(S.size)})]}),N?e.jsx("button",{type:"button",disabled:v,onClick:()=>void m(l,S),children:"Remove"}):null]},S.id))}):e.jsx("small",{children:"No uploaded files on this draft."}),e.jsx("small",{children:"PDF, image, text, CSV, Word, or Excel. Up to 10 MB each and 25 MB total."})]}),l.deliveryError?e.jsx("p",{className:"admin-error",children:l.deliveryError}):null,l.status==="scheduled"?e.jsxs("div",{className:"am-scheduled-receipt",children:[e.jsx("span",{children:"Approved for scheduled delivery"}),e.jsx("strong",{children:q(l.scheduledSendAt)}),e.jsx("small",{children:"The maintenance cycle will send this once it is due."})]}):null,e.jsxs("div",{className:"am-draft-actions",children:[l.status==="awaiting_approval"?e.jsxs("label",{className:"am-schedule-field",children:["Send later",e.jsx("input",{type:"datetime-local",value:r,onChange:S=>o(S.target.value)})]}):null,e.jsx("button",{type:"button",disabled:v||!N,onClick:()=>f(l,{to:E(),subject:b,body:w,status:"dismissed"}),children:"Dismiss"}),e.jsx("button",{type:"button",disabled:v||!N,onClick:()=>f(l,{to:E(),subject:b,body:w}),children:"Save changes"}),l.status==="draft"?e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:v,onClick:()=>f(l,{to:E(),subject:b,body:w,status:"awaiting_approval"}),children:"Ready for approval"}):null,e.jsx("button",{type:"button",disabled:v||l.status!=="awaiting_approval"||!r,onClick:()=>j(l,Math.floor(new Date(r).getTime()/1e3)),children:"Approve for later"}),e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:v||l.status!=="awaiting_approval",onClick:()=>_(l),children:"Approve and send"})]}),e.jsx("small",{children:"Bliss records your approval, final message, scheduled time, Cloudflare delivery result, and send receipt."})]}):e.jsx(P,{title:"Select a draft",body:"Continue a saved message or review one that is ready to send."})})]})]})}function os(t){return{needs_review:"Needs review",queued:"Queued",sending:"Sending",sent:"Sent",failed:"Failed",suppressed:"Suppressed",already_wel
2comed:"Already welcomed"}[String(t||"")]||"Not ready"}function Re(t){return{new_inquiry:"New inquiry",qualification:"Qualification",proposal_follow_up:"Proposal follow-up",long_term_nurture:"Long-term nurture"}[t]||t.replaceAll("_"," ")}function $e(t){return{active:"Ready",draft_ready:"Draft ready",awaiting_lead:"Waiting on lead",replied:"Reply received",paused:"Paused",stopped:"Stopped",converted:"Converted",unassigned:"Unassigned"}[t]||t.replaceAll("_"," ")}function us({workspace:t,busy:d,onAction:l}){const u=t.leadNurturePolicies.find(n=>n.id==="default")||t.leadNurturePolicies[0],[f,_]=h.useState(!1),[j,c]=h.useState({new_inquiry:(u?.cadence.new_inquiry||[2,5]).join(", "),qualification:(u?.cadence.qualification||[3,7]).join(", "),proposal_follow_up:(u?.cadence.proposal_follow_up||[3,7]).join(", "),long_term_nurture:(u?.cadence.long_term_nurture||[30]).join(", ")}),m=n=>n.split(",").map(Number).filter(v=>Number.isFinite(v)&&v>0);return e.jsxs("div",{className:"am-lead-policy",children:[e.jsxs("button",{type:"button",onClick:()=>_(n=>!n),children:[e.jsx("span",{children:"Follow-up policy"}),e.jsx("strong",{children:u?.name||"Default lead follow-up"}),e.jsx("small",{children:"Business-hours scheduling · configurable cadence"})]}),f?e.jsxs("form",{onSubmit:n=>{n.preventDefault(),l({action:"save_lead_nurture_policy",id:u?.id||"default",name:u?.name||"Default lead follow-up",cadence:{new_inquiry:m(j.new_inquiry),qualification:m(j.qualification),proposal_follow_up:m(j.proposal_follow_up),long_term_nurture:m(j.long_term_nurture)},businessHours:u?.businessHours||{timezone:"America/New_York",startHour:9,endHour:17,weekdays:[1,2,3,4,5]}},"Lead follow-up policy saved.")}
2,children:[e.jsxs("label",{children:["New inquiry days",e.jsx("input",{value:j.new_inquiry,onChange:n=>c(v=>({...v,new_inquiry:n.target.value}))})]}),e.jsxs("label",{children:["Qualification days",e.jsx("input",{value:j.qualification,onChange:n=>c(v=>({...v,qualification:n.target.value}))})]}),e.jsxs("label",{children:["Proposal days",e.jsx("input",{value:j.proposal_follow_up,onChange:n=>c(v=>({...v,proposal_follow_up:n.target.value}))})]}),e.jsxs("label",{children:["Long-term days",e.jsx("input",{value:j.long_term_nurture,onChange:n=>c(v=>({...v,long_term_nurture:n.target.value}))})]}),e.jsx("button",{className:"admin-btn-primary",disabled:d,children:"Save policy"})]}):null]})}function ms({workspace:t,busy:d,onAction:l,onCompose:u,onDraft:f}){const[_,j]=h.useState(t.leads[0]?.id||""),c=t.leads.find(o=>o.id===_)||t.leads[0]||null,m=t.leadNurture.find(o=>o.leadId===c?.id)||null,[n,v]=h.useState(m?.consentStatus||"service_inquiry"),[C,A]=h.useState("conversation"),[w,T]=h.useState("");h.useEffect(()=>v(m?.consentStatus||"service_inquiry"),[m?.leadId,m?.consentStatus]);const b=t.leadNurtureEvents.filter(o=>o.leadId===c?.id).slice(0,12),M=async()=>{if(!c)return;const N=(await l({action:"prepare_lead_nurture_draft",leadId:c.id},"The Assistant prepared a lead email for your review."))?.draft;N?.id&&f(N.id)},r=async o=>{if(!c)return;const N={pause:"Lead follow-up paused.",resume:"Lead follow-up resumed.",stop:"Lead follow-up stopped."};await l({action:"update_lead_nurture",leadId:c.id,nurtureAction:o,consentStatus:n,consentSource:C,consentEvidence:w},o?N[o]||"Lead follow-up updated.":"Lead email permission and evidence recorded.")};return e.jsxs("section",{className:"am-lead-workspace",children:[e.jsxs("div",{className:"am-lead-workspace__header",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Lead relationship desk"}),e.jsx("h2",{children:"Follow up with context—not a generic drip"}),e.jsx("p",{children:"Bliss prepares the next appropriate email. Nothing sends until an Account Manager approves it."})]}),e.jsxs("div",{children:[e.jsx("strong",{children:t.metrics.nurtureDue}),e.jsx("small",{children:"due now"}),e.jsx("strong",{children:t.metrics.nurtureReplies}),e.jsx("small",{children:"replies to review"})]})]}),t.canManageWelcomeTemplates?e.jsx(us,{workspace:t,busy:d,onAction:l}):null,e.jsxs("div",{className:"am-lead-workspace__body",children:[e.jsxs("div",{className:"am-lead-queue","aria-label":"Assigned leads",children:[t.leads.map(o=>{const N=t.leadNurture.find(E=>E.leadId===o.id);return e.jsxs("button",{type:"button",className:c?.id===o.id?"is-active":"",onClick:()=>j(o.id),children:[e.jsx("span",{className:`am-lead-state-dot is-${N?.status||"unassigned"}`}),e.jsxs("span",{children:[e.jsx("strong",{children:U(o)}),e.jsxs("small",{children:[Re(N?.stage||"new_inquiry")," · ",N?$e(N.status):"Unassigned"]})]}),N?.due?e.jsx("em",{children:"Due"}):N?.status==="replied"?e.jsx("em",{children:"Reply"}):null]},o.id)}),t.leads.length?null:e.jsx(P,{title:"No assigned leads",body:"New and assigned leads will appear here with their next relationship action."})]}),e.jsx("div",{className:"am-lead-inspector",children:c&&m?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"am-lead-inspector__title",children:[e.jsxs("div",{children:[e.jsx("span",{children:Re(m.stage)}),e.jsx("h2",{children:U(c)}),e.jsxs("p",{children:[String(c.email||"No email"),c.company?` · ${c.company}`:""]})]}),e.jsx("span",{className:`am-nurture-status is-${m.status}`,children:$e(m.status)})]}),e.jsxs("div",{className:"am-lead-next-action",children:[e.jsx("span",{children:"Recommended next action"}),e.jsx("strong",{children:m.recommendedAction}),e.jsx("small",{children:m.nextActionAt?`Scheduled for ${q(m.nextActionAt)}`:m.lastReplyAt?`Lead replied ${q(m.lastReplyAt)}`:"No automatic send is scheduled."}),e.jsxs("div",{children:[m.draft?e.jsx("button",{className:"admin-btn-primary",type:"button",onClick:()=>f(m.draft.id),children:"Review prepared draft"}):m.status==="active"?e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:d||!String(c.email||"").includes("@")||m.stage==="long_term_nurture"&&m.consentStatus!=="opted_in",onClick:()=>void M(),children:"Prepare recommended email"}):null,e.jsx("button",{type:"button",disabled:!String(c.email||"").includes("@"),onClick:()=>u(c),children:"Write manually"})]})]}),e.jsxs("div",{className:"am-lead-controls",children:[e.jsxs("label",{children:["Email permission",e.jsxs("select",{value:n,onChange:o=>v(o.target.value),children:[e.jsx("option",{value:"service_inquiry",children:"Current service inquiry"}),e.jsx("option",{value:"opted_in",children:"Opted in to ongoing email"}),e.jsx("option",{value:"unknown",children:"Unknown"}),e.jsx("option",{value:"opted_out",children:"Opted out"})]})]}),n!==m.consentStatus?e.jsxs(e.Fragment,{children:[e.jsxs("label",{children:["Evidence source",e.jsxs("select",{value:C,onChange:o=>A(o.target.value),children:[e.jsx("option",{value:"conversation",children:"Conversation"}),e.jsx("option",{value:"email_reply",children:"Email reply"}),e.jsx("option",{value:"web_form",children:"Web form"}),e.jsx("option",{value:"account_manager_record",children:"Account Manager record"})]})]}),e.jsxs("label",{className:"am-consent-evidence",children:["Consent evidence",e.jsx("input",{value:w,onChange:o=>T(o.target.value),placeholder:"When, where, and what the lead agreed to"})]})]}):null,e.jsx("button",{type:"button",disabled:d||n===m.consentStatus||n==="opted_in"&&!w.trim(),onClick:()=>void r(),children:"Save permission"}),["paused","stopped"].includes(m.status)?e.jsx("button",{type:"button",disabled:d||n==="opted_out",onClick:()=>void r("resume"),children:"Resume"}):e.jsx("button",{type:"button",disabled:d||["converted","unassigned"].includes(m.status),onClick:()=>void r("pause"),children:"Pause"}),e.jsx("button",{type:"button",disabled:d||["stopped","converted","unassigned"].includes(m.status),onClick:()=>void r("stop"),children:"Stop sequence"})]}),m.consentReceipt?e.jsxs("div",{className:"am-lead-evidence",children:[e.jsx("span",{children:"Latest consent receipt"}),e.jsxs("strong",{children:[m.consentReceipt.status.replaceAll("_"," ")," · ",m.consentReceipt.source.replaceAll("_"," ")]}),e.jsx("p",{children:m.consentReceipt.evidence||"Recorded from verified email behavior."}),e.jsx("small",{children:q(m.consentReceipt.occurredAt)})]}):null,m.replyTriage?e.jsxs("div",{className:"am-lead-triage",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Assistant reply triage"}),e.jsx("strong",{children:m.replyTriage.meetingRequested?"Meeting request detected":"Reply needs review"})]}),e.jsx("p",{children:m.replyTriage.summary}),m.replyTriage.questions.length?e.jsx("ul",{children:m.replyTriage.questions.map(o=>e.jsx("li",{children:o},o))}):null,e.jsx("small",{children:m.replyTriage.recommendedResponse})]}):null,e.jsxs("div",{className:"am-lead-timeline",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Relationship history"}),e.jsx("strong",{children:"Why Bliss recommends the next step"})]}),b.map(o=>e.jsxs("p",{children:[e.jsx("time",{children:q(o.occurredAt)}),e.jsxs("span",{children:[e.jsx("strong",{children:o.eventType.replaceAll("_"," ")}),e.jsx("small",{children:o.draftId?"Email draft recorded":o.messageId?"Inbound or outbound message recorded":"Lifecycle change recorded"})]})]},o.id)),b.length?null:e.jsx("p",{children:e.jsxs("span",{children:[e.jsx("strong",{children:"No nurture activity yet"}),e.jsx("small",{children:"The first prepared email will start the audited timeline."})]})})]})]}):c?e.jsx(P,{title:"Assign an Account Manager",body:"This lead cannot enter a follow-up sequence until ownership is explicit."}):e.jsx(P,{title:"Select a lead",body:"Choose an assigned lead to review its next relationship action."})})]})]})}function hs({workspace:t,busy:d,onAction:l,onCompose:u}){const[f,_]=h.useState("all"),j=t.relationships.filter(c=>f==="all"||c.relationship_type===f||f==="welcome"&&c.relationship_type==="client"&&!["sent","already_wel
2comed","suppressed"].includes(String(c.welcome_status||"")));return e.jsxs("section",{className:"am-workspace-section am-relationships-workspace",children:[e.jsxs("div",{className:"am-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Assigned relationships"}),e.jsxs("h2",{children:[t.clients.length," clients · ",t.leads.length," leads"]})]}),e.jsx("div",{className:"am-relationship-filters",children:["all","client","lead","welcome"].map(c=>e.jsx("button",{type:"button",className:f===c?"is-active":"",onClick:()=>_(c),children:c==="welcome"?`Welcome queue (${t.metrics.welcomeNeedsReview})`:c},c))})]}),e.jsxs("div",{className:"am-relationship-list",children:[j.map(c=>e.jsxs("article",{children:[e.jsx("span",{className:"am-client-avatar",children:U(c).slice(0,2).toUpperCase()}),e.jsxs("div",{className:"am-relationship-main",children:[e.jsxs("span",{children:[e.jsx("em",{children:c.relationship_type}),String(c.status||"Active")]}),e.jsx("strong",{children:U(c)}),e.jsxs("small",{children:[String(c.email||"No email address"),c.company||c.business?` · ${String(c.company||c.business)}`:""]})]}),c.relationship_type==="client"?e.jsxs("div",{className:`am-welcome-state is-${c.welcome_status||"none"}`,children:[e.jsx("span",{children:"Welcome"}),e.jsx("strong",{children:os(c.welcome_status)}),e.jsx("small",{children:c.welcome_sent_at?`${q(c.welcome_sent_at)} · ${c.welcome_recipient_email||c.email||"recipient recorded"}`:c.welcome_failure_reason||"No delivery recorded"}),c.welcome_manager_email?e.jsxs("small",{children:["From ",c.welcome_manager_email]}):null]}):e.jsxs("div",{className:"am-lead-email-state",children:[e.jsx("span",{children:"Email access"}),e.jsx("strong",{children:"Two-way"}),e.jsx("small",{children:"History follows conversion"})]}),e.jsxs("div",{className:"am-relationship-actions",children:[e.jsx("button",{type:"button",onClick:()=>u(c),children:"Email"}),c.relationship_type==="client"?e.jsxs("details",{children:[e.jsx("summary",{children:"Welcome actions"}),e.jsxs("div",{children:[t.activeWelcomeTemplate?e.jsxs("div",{className:"am-welcome-preview",children:[e.jsxs("small",{children:["Preview · version ",t.activeWelcomeTemplate.version]}),e.jsx("strong",{children:t.activeWelcomeTemplate.subject.replaceAll("{{client_name}}",U(c))}),e.jsxs("p",{children:[t.activeWelcomeTemplate.body.replaceAll("{{client_name}}",U(c)).replaceAll("{{company_name}}",String(c.business||c.name||"your organization")).replaceAll("{{manager_name}}",t.identity.name||"your Account Manager").replaceAll("{{manager_email}}",t.identity.email).slice(0,260),"…"]}),c.welcome_provider_message_id?e.jsxs("small",{children:["Receipt ",c.welcome_provider_message_id]}):null]}):e.jsx("small",{children:"Approve a template before sending."}),["sent","suppressed","already_welcomed"].includes(String(c.welcome_status||""))?null:e.jsx("button",{disabled:d||!t.activeWelcomeTemplate,type:"button",onClick:()=>void l({action:c.welcome_status==="failed"?"retry_welcome":"send_welcome",clientId:c.id},"Welcome email sent and recorded."),children:c.welcome_status==="failed"?"Retry":"Send welcome"}),c.welcome_status==="suppressed"||c.welcome_status==="already_welcomed"?e.jsx("button",{disabled:d,type:"button",onClick:()=>void l({action:"queue_welcome",clientId:c.id},"Client returned to the welcome queue."),children:"Return to queue"}):null,e.jsx("button",{disabled:d,type:"button",onClick:()=>void l({action:"mark_welcome_complete",clientId:c.id},"Client marked as already welcomed."),children:"Mark already welcomed"}),e.jsx("button",{disabled:d,type:"button",onClick:()=>void l({action:"suppress_welcome",clientId:c.id},"Welcome email suppressed."),children:"Suppress"}),e.jsx(Q,{to:`/dashboard/admin/account-manager/clients/${c.id}`,children:"Open client"})]})]}):null]})]},`${c.relationship_type}:${c.id}`)),j.length?null:e.jsx(P,{title:"No relationships in this view",body:"Change the filter or assign a client or lead to this Account Manager."})]})]})}function ps({workspace:t,onAction:d,busy:l}){const u=t.retentionControls,[f,_]=h.useState(u.health[0]?.client_id||t.clients[0]?.id||""),j=u.health.find(r=>
2r.client_id===f)||u.health[0]||null,[c,m]=h.useState({renewalAt:"",renewalStatus:"not_scheduled",nextReviewAt:"",churnRiskReason:""}),[n,v]=h.useState({workflowType:"renewal",reason:"",effectiveAt:""}),C=u.capacityPolicy,[A,w]=h.useState({name:String(C?.name||"Standard relationship capacity"),maxClients:String(C?.max_clients||35),maxOpenLeads:String(C?.max_open_leads||25),maxOverdueTasks:String(C?.max_overdue_tasks||5)});h.useEffect(()=>{if(!j)return;const r=o=>o?new Date(o*1e3-new Date().getTimezoneOffset()*6e4).toISOString().slice(0,16):"";m({renewalAt:r(j.renewal_at),renewalStatus:j.renewal_status||"not_scheduled",nextReviewAt:r(j.next_review_at),churnRiskReason:j.churn_risk_reason||""})},[j?.client_id,j?.renewal_at,j?.renewal_status,j?.next_review_at,j?.churn_risk_reason]);const T=u.health.filter(r=>r.health_status==="healthy").length,b=u.health.filter(r=>r.health_status==="watch").length,M=u.health.filter(r=>r.health_status==="at_risk").length;return e.jsxs("div",{className:"am-retention-workspace",children:[e.jsxs("header",{className:"am-retention-hero",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Client health & retention"}),e.jsx("h2",{children:"Protect the relationship before risk becomes churn."}),e.jsx("p",{children:"Health is evidence-backed. Renewals, recovery, and offboarding stay human-directed and auditable."})]}),e.jsxs("div",{className:"am-retention-summary",children:[e.jsxs("p",{children:[e.jsx("strong",{children:T})," healthy"]}),e.jsxs("p",{children:[e.jsx("strong",{children:b})," watch"]}),e.jsxs("p",{className:"is-risk",children:[e.jsx("strong",{children:M})," at risk"]})]})]}),e.jsxs("section",{className:"am-retention-main",children:[e.jsxs("div",{className:"am-health-list",children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Portfolio health"}),e.jsx("h2",{children:"What needs attention"})]})}),u.health.map(r=>e.jsxs("button",{type:"button",className:j?.client_id===r.client_id?"is-active":"",onClick:()=>_(r.client_id),children:[e.jsx("span",{className:`am-health-score is-${r.health_status}`,children:r.score}),e.jsxs("span",{children:[e.jsx("strong",{children:r.client_name}),e.jsxs("small",{children:[r.health_status.replace("_"," ")," · ",r.renewal_at?`renewal ${q(r.renewal_at)}`:"renewal not scheduled"]})]}),e.jsx(W,{name:"chevron-right",size:17})]},r.client_id)),u.health.length?null:e.jsx(P,{title:"No assigned client health records",body:"Assigned clients will be assessed from check-ins, commitments, billing, support, and lifecycle evidence."})]}),e.jsx("div",{className:"am-health-detail",children:j?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"am-health-detail__head",children:[e.jsxs("div",{children:[e.jsx("span",{children:j.health_status.replace("_"," ")}),e.jsx("h2",{children:j.client_name}),e.jsx("p",{children:j.client_email||"No client email recorded"})]}),e.jsxs("strong",{children:[j.score,e.jsx("small",{children:"/100"})]})]}),e.jsx("div",{className:"am-health-factors",children:j.factors.map((r,o)=>e.jsxs("p",{children:[e.jsxs("span",{children:[r.label,e.jsx("small",{children:r.detail})]}),e.jsxs("em",{className:r.impact<0?"is-negative":"is-positive",children:[r.impact>0?"+":"",r.impact]})]},`${r.label}:${o}`))}),e.jsxs("form",{className:"am-retention-form",onSubmit:r=>{r.preventDefault(),d({action:"save_client_retention",clientId:j.client_id,...c},"Renewal and risk controls saved.")},children:[e.jsxs("label",{children:["Renewal date",e.jsx("input",{type:"datetime-local",value:c.renewalAt,onCh
2ange:r=>m(o=>({...o,renewalAt:r.target.value}))})]}),e.jsxs("label",{children:["Renewal status",e.jsxs("select",{value:c.renewalStatus,onChange:r=>m(o=>({...o,renewalStatus:r.target.value})),children:[e.jsx("option",{value:"not_scheduled",children:"Not scheduled"}),e.jsx("option",{value:"scheduled",children:"Scheduled"}),e.jsx("option",{value:"in_review",children:"In review"}),e.jsx("option",{value:"renewed",children:"Renewed"}),e.jsx("option",{value:"declined",children:"Declined"})]})]}),e.jsxs("label",{children:["Next health review",e.jsx("input",{type:"datetime-local",value:c.nextReviewAt,onChange:r=>m(o=>({...o,nextReviewAt:r.target.value}))})]}),e.jsxs("label",{className:"is-wide",children:["Known churn risk",e.jsx("textarea",{rows:3,value:c.churnRiskReason,onChange:r=>m(o=>({...o,churnRiskReason:r.target.value})),placeholder:"Record the evidence, not a guess."})]}),e.jsx("button",{disabled:l,children:"Save client controls"})]}),e.jsxs("form",{className:"am-workflow-start",onSubmit:r=>{r.preventDefault(),d({action:"start_retention_workflow",clientId:j.client_id,...n},`${n.workflowType} workflow opened with a controlled checklist.`),v({workflowType:"renewal",reason:"",effectiveAt:""})},children:[e.jsxs("div",{children:[e.jsx("span",{children:"Start controlled workflow"}),e.jsx("small",{children:"No client contact, cancellation, or access removal happens automatically."})]}
2),e.jsxs("select",{value:n.workflowType,onChange:r=>v(o=>({...o,workflowType:r.target.value})),children:[e.jsx("option",{value:"renewal",children:"Renewal"}),e.jsx("option",{value:"retention",children:"Retention recovery"}),e.jsx("option",{value:"offboarding",children:"Offboarding"})]}),e.jsx("input",{required:!0,value:n.reason,onChange:r=>v(o=>({...o,reason:r.target.value})),placeholder:"Reason and evidence"}),e.jsx("input",{type:"datetime-local",value:n.effectiveAt,onChange:r=>v(o=>({...o,effectiveAt:r.target.value}))}),e.jsx("button",{className:"admin-btn-primary",disabled:l,children:"Open workflow"})]})]}):e.jsx(P,{title:"Select a client",body:"Choose a relationship to review its evidence and next action."})})]}),e.jsxs("section",{className:"am-retention-section",children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Active lifecycle work"}),e.jsx("h2",{children:"Renewals, recovery, and offboarding"})]})}),e.jsxs("div",{className:"am-workflow-grid",children:[u.workflows.filter(r=>r.status==="open").map(r=>e.jsxs("article",{children:[e.jsxs("div",{children:[e.jsx("span",{children:r.workflow_type}),e.jsx("strong",{children:r.client_name}),e.jsx("small",{children:r.reason||"Controlled workflow"})]}),r.checklist.map((o,N)=>e.jsxs("label",{children:[e.jsx("input",{type:"checkbox",checked:o.complete,disabled:l,onChange:E=>void d({action:"update_retention_workflow",id:r.id,checklistIndex:N,complete:E.target.checked},"Workflow evidence updated.")}),e.jsx("span",{children:o.label})]},`${r.id}:${N}`))]},r.id)),u.workflows.some(r=>r.status==="open")?null:e.jsx(P,{title:"No lifecycle workflow is open",body:"Open one only when a renewal, recovery effort, or authorized offboarding needs coordinated work."})]})]}),e.jsxs("section",{className:"am-retention-split",children:[e.jsxs("div",{children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Identity safety"}),e.jsx("h2",{children:"Possible duplicates"}),e.jsx("p",{children:"Bliss never silently merges records. Linking preserves both histories and names the primary."})]})}),u.duplicates.map(r=>e.jsxs("article",{className:"am-duplicate-row",children:[e.jsxs("div",{children:[e.jsx("strong",{children:r.entity_a_name||r.entity_a_id}),e.jsx("small",{children:r.entity_a_type})]}),e.jsxs("em",{children:[r.confidence,"%"]}),e.jsxs("div",{children:[e.jsx("strong",{children:r.entity_b_name||r.entity_b_id}),e.jsx("small",{children:r.entity_b_type})]}),e.jsx("p",{children:r.reasons.join(" · ")}),t.canManageOperatingControls?e.jsxs("div",{className:"am-duplicate-actions",children:[e.jsx("button",{disabled:l,onClick:()=>void d({action:"resolve_duplicate",id:r.id,resolution:"link",primary:`${r.entity_a_type}:${r.entity_a_id}`},"Records linked without deleting either history."),children:"Keep left as primary"}),e.jsx("button",{disabled:l,onClick:()=>void d({action:"resolve_duplicate",id:r.id,resolution:"link",primary:`${r.entity_b_type}:${r.entity_b_id}`},"Records linked without deleting either history."),children:"Keep right as primary"}),e.jsx("button",{disabled:l,onClick:()=>void d({action:"resolve_duplicate",id:r.id,resolution:"ignore"},"Duplicate suggestion dismissed."),children:"Not a duplicate"})]}):null]},r.id)),u.duplicates.length?null:e.jsx(P,{title:"No unresolved duplicate candidates",body:"Email, phone, and website matches are reviewed here before any records are linked."})]}),e.jsxs("div",{children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Workload balance"}),e.jsx("h2",{children:"Capacity by manager"})]})}),e.jsx("div",{className:"am-capacity-list",children:u.managerLoads.map(r=>e.jsxs("article",{children:[e.jsxs("div",{children:[e.jsx("strong",{children:r.name||r.email}),e.jsxs("small",{children:[r.clientCount," clients · ",r.openLeadCount," open leads · ",r.overdueTasks," overdue"]})]}),e.jsxs("span",{className:`is-${r.status}`,children:[r.loadPercent,"%"]})]},r.id))}),t.canManageOperatingControls?e.jsxs("form",{className:"am-capacity-policy",onSubmit:r=>{r.preventDefault(),d({action:"save_capacity_policy",...A},"Capacity guardrails updated.")},children:[e.jsxs("label",{children:["Maximum clients",e.jsx("input",{type:"number",min:"1",value:A.maxClients,onChange:r=>w(o=>({...o,maxClients:r.target.value}))})]}),e.jsxs("label",{children:["Maximum open leads",e.jsx("input",{type:"number",min:"1",value:A.maxOpenLeads,onChange:r=>w(o=>({...o,maxOpenLeads:r.target.value}))})]}
2),e.jsxs("label",{children:["Maximum overdue tasks",e.jsx("input",{type:"number",min:"0",value:A.maxOverdueTasks,onChange:r=>w(o=>({...o,maxOverdueTasks:r.target.value}))})]}),e.jsx("button",{disabled:l,children:"Save capacity policy"})]}):null]})]})]})}function xs({workspace:t,onAction:d,busy:l}){const u=t.operatingControls,[f,_]=h.useState({primaryUserId:"",backupUserId:"",startsAt:"",endsAt:"",reason:""}),[j,c]=h.useState({relationship:"",managerUserId:""}),m=h.useMemo(()=>{try{return JSON.parse(String(u.slaPolicy?.business_hours_json||"{}"))}catch{return{}}},[u.slaPolicy]),[n,v]=h.useState({name:String(u.slaPolicy?.name||"Relationship response policy"),firstResponseMinutes:String(u.slaPolicy?.first_response_minutes||240),replyResponseMinutes:String(u.slaPolicy?.reply_response_minutes||240),overdueEscalationMinutes:String(u.slaPolicy?.overdue_escalation_minutes||120),timezone:String(m.timezone||"America/New_York"),startHour:String(m.startHour??9),endHour:String(m.endHour??17)}),[C,A]=h.useState(t.leads[0]?.id||""),w=t.leads.find(i=>i.id===C)||t.leads[0]||null,T=u.leadAssessments.find(i=>String(i.lead_id)===w?.id)||null,[b,M]=h.useState({sourceType:String(w?.source_type||""),referralSource:String(w?.referral_source||""),utmSource:String(w?.utm_source||""),utmMedium:String(w?.utm_medium||""),utmCampaign:String(w?.utm_campaign||""),fitStatus:String(w?.fit_status||"unknown"),lostReason:String(w?.lost_reason||""),status:String(w?.status||""),manualScore:""});h.useEffect(()=>M({sourceType:String(w?.source_type||""),referralSource:String(w?.referral_source||""),utmSource:String(w?.utm_source||""),utmMedium:String(w?.utm_medium||""),utmCampaign:String(w?.utm_campaign||""),fitStatus:String(w?.fit_status||"unknown"),lostReason:String(w?.lost_reason||""),status:String(w?.status||""),manualScore:""}),[w?.id]);const[r,o]=h.useState({relationship:"",outcome:"",decisions:"",commitments:"",nextSteps:"",followUpDueAt:""}),[N,E]=h.useState({id:"",stage:"new_inquiry",name:"",subject:"",body:"",experimentKey:""}),S=i=>{const p=u.nurtureTemplates.find(R=>String(R.id)===i);E(p?{id:String(p.id),stage:String(p.stage),name:String(p.name),subject:String(p.subject),body:String(p.text_body),experimentKey:String(p.experiment_key||"")}:{id:"",stage:"new_inquiry",name:"",subject:"",body:"",experimentKey:""})},$=u.forecast;return e.jsxs("div",{className:"am-ops-workspace",children:[e.jsxs("header",{className:"am-ops-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"Relationship operations"}),e.jsx("h2",{children:"Coverage, response health, and pipeline evidence"}),e.jsx("p",{children:"Manage exceptions and improve the system without turning this workspace into a second CRM."})]}),e.jsxs("div",{className:`am-forecast-state is-${$.status}`,children:[e.jsx("span",{children:"Current pipeline outlook"}),e.jsx("strong",{children:$.status==="ready"?`${$.projected30DayConversions} expected`:"Learning"}),e.jsxs("small",{children:[$.converted," conversions across ",$.sampleSize," leads"]})]})]}),e.jsxs("section",{className:"am-ops-sla",children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Response control"}),e.jsxs("h2",{children:[u.slaIncidents.length," open SLA exception",u.slaIncidents.length===1?"":"s"]}),e.jsx("p",{children:"Active coverage automatically receives overdue work and temporary mailbox access."})]})}),e.jsxs("div",{className:"am-ops-incident-list",children:[u.slaIncidents.map(i=>e.jsxs("article",{children:[e.jsx("span",{className:`am-severity is-${String(i.severity)}`,children:String(i.severity)}),e.jsxs("div",{children:[e.jsx("strong",{children:String(i.lead_name||"Lead response")}),e.jsxs("small",{children:[String(i.incident_type||"").replaceAll("_"," ")," · due ",q(Number(i.due_at))]})]}),e.jsx("button",{type:"button",disabled:l,onClick:()=>void d({action:"resolve_sla_incident",id:i.id},"Response exception resolved and its task completed."),children:"Resolve"})]},String(i.id))),u.slaIncidents.length?null:e.jsx(P,{title:"Response commitments are healthy",body:"New SLA exceptions and coverage-routed work will appear here."})]}),t.canManageOperatingControls?e.jsxs("form",{className:"am-ops-inline",onSubmit:i=>{i.preventDefault(),d({action:"save_sla_policy",...n,businessHours:{timezone:n.timezone,startHour:Number(n.startHour),endHour:Number(n.endHour),weekdays:[1,2,3,4,5]}},"Business-hours response policy updated.")}
2,children:[e.jsxs("label",{children:["First response (minutes)",e.jsx("input",{type:"number",min:"15",value:n.firstResponseMinutes,onChange:i=>v(p=>({...p,firstResponseMinutes:i.target.value}))})]}),e.jsxs("label",{children:["Reply response (minutes)",e.jsx("input",{type:"number",min:"15",value:n.replyResponseMinutes,onChange:i=>v(p=>({...p,replyResponseMinutes:i.target.value}))})]}),e.jsxs("label",{children:["Critical after (minutes)",e.jsx("input",{type:"number",min:"0",value:n.overdueEscalationMinutes,onChange:i=>v(p=>({...p,overdueEscalationMinutes:i.target.value}))})]}),e.jsxs("label",{children:["Timezone",e.jsx("input",{value:n.timezone,onChange:i=>v(p=>({...p,timezone:i.target.value}))})]}),e.jsxs("label",{children:["Day starts",e.jsx("input",{type:"number",min:"0",max:"23",value:n.startHour,onChange:i=>v(p=>({...p,startHour:i.target.value}))})]}),e.jsxs("label",{children:["Day ends",e.jsx("input",{type:"number",min:"1",max:"24",value:n.endHour,onChange:i=>v(p=>({...p,endHour:i.target.value}))})]}),e.jsx("button",{className:"admin-btn-primary",disabled:l,children:"Save response policy"})]}):null]}),e.jsxs("section",{className:"am-ops-split",children:[e.jsxs("div",{children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Absence coverage"}),e.jsx("h2",{children:"Account Manager backup"})]})}),t.canManageOperatingControls?e.jsxs("form",{className:"am-ops-inline am-reassignment",onSubmit:i=>{i.preventDefault();const[p,R]=j.relationship.split(":");d({action:"reassign_relationship",clientId:p==="client"?R:null,leadId:p==="lead"?R:null,managerUserId:j.managerUserId},"Relationship ownership, mailbox routing, and follow-up responsibility reassigned."),c({relationship:"",managerUserId:""})},children:[e.jsxs("div",{children:[e.jsx("span",{children:"Permanent reassignment"}),e.jsx("small",{children:"Moves ownership, mailbox routing, and lead follow-up together."})]}),e.jsxs("label",{children:["Relationship",e.jsxs("select",{required:!0,value:j.relationship,onChange:i=>c(p=>({...p,relationship:i.target.value})),children:[e.jsx("option",{value:"",children:"Choose client or lead"}),t.clients.map(i=>e.jsxs("option",{value:`client:${i.id}`,children:["Client · ",U(i)]},`client:${i.id}`)),t.leads.map(i=>e.jsxs("option",{value:`lead:${i.id}`,children:["Lead · ",U(i)]},`lead:${i.id}`))]})]}),e.jsxs("label",{children:["New manager",e.jsxs("select",{required:!0,value:j.managerUserId,onChange:i=>c(p=>({...p,managerUserId:i.target.value})),children:[e.jsx("option",{value:"",children:"Choose manager"}),u.managers.map(i=>e.jsx("option",{value:i.id,children:i.name||i.email},i.id))]})]}),e.jsx("button",{className:"admin-btn-primary",disabled:l,children:"Reassign"})]}):null,t.canManageOperatingControls?e.jsxs("form",{className:"am-ops-form",onSubmit:i=>{i.preventDefault(),d({action:"save_coverage",...f},"Coverage scheduled. The backup will receive active mailbox access and SLA work."),_({primaryUserId:"",backupUserId:"",startsAt:"",endsAt:"",reason:""})},children:[e.jsxs("label",{children:["Primary manager",e.jsxs("select",{required:!0,value:f.primaryUserId,onChange:i=>_(p=>({...p,primaryUserId:i.target.value})),children:[e.jsx("option",{value:"",children:"Choose manager"}),u.managers.map(i=>e.jsx("option",{value:i.id,children:i.name||i.email},i.id))]})]}),e.jsxs("label",{children:["Backup manager",e.jsxs("select",{required:!0,value:f.backupUserId,onChange:i=>_(p=>({...p,backupUserId:i.target.value})),children:[e.jsx("option",{value:"",children:"Choose backup"}),u.managers.map(i=>e.jsx("option",{value:i.id,children:i.name||i.email},i.id))]})]}),e.jsxs("label",{children:["Starts",e.jsx("input",{required:!0,type:"datetime-local",value:f.startsAt,onChange:i=>_(p=>({...p,startsAt:i.target.value}))})]}),e.jsxs("label",{children:["Ends",e.jsx("input",{required:!0,type:"datetime-local",value:f.endsAt,onChange:i=>_(p=>({...p,endsAt:i.target.value}))})]}),e.jsxs("label",{className:"is-wide",children:["Reason",e.jsx("input",{value:f.reason,onChange:i=>_(p=>({...p,reason:i.target.value})),placeholder:"Vacation, leave, or scheduled backup"})]}),e.jsx("button",{className:"admin-btn-primary",disabled:l,children:"Schedule coverage"})]}):null,e.jsxs("div",{className:"am-coverage-list",children:[u.coverage.map(i=>e.jsxs("p",{children:[e.jsxs("span",{children:[e.jsx("strong",{children:String(i.primary_name||i.primary_email)}),e.jsxs("small",{children:["covered by ",String(i.backup_name||i.backup_email)," · ",q(Number(i.starts_at)),"–",q(Number(i.ends_at))]})]}),e.jsx("em",{children:String(i.status)}),t.canManageOperatingControls&&!["completed","cancelled"].includes(String(i.status))?e.jsx("button",{type:"button",onClick:()=>void d({action:"cancel_coverage",id:i.id},"Coverage cancelled."),children:"Cancel"}):null]},String(i.id))),u.coverage.length?null:e.jsx(P,{title:"No coverage scheduled",body:"The assigned Account Manager remains responsible for every relationship."})]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Evidence-based forecast"}),e.jsx("h2",{children:$.status==="ready"?`${Math.round($.conversionRate*100)}% observed conversion rate`:"Not enough history yet"})]})}),e.jsxs("div",{className:"am-forecast-detail",children:[e.jsx("strong",{children:$.open}),e.jsx("span",{children:"open leads"}),e.jsx("strong",{children:$.converted}),e.jsx("span",{children:"converted"}),e.jsx("p",{children:$.status==="ready"?`At the observed rate, the current open pipeline supports approximately ${$.projected30DayConversions} conversions. This is a directional operating estimate, not a revenue promise.`:`Bliss will activate a directional forecast after at least ${$.minimumSampleSize} leads and ${$.minimumConversions} conversions. Until then, the system reports evidence without pretending the sample is predictive.`})]})]})]}),e.jsxs("section",{className:"am-ops-split",children:[e.jsxs("div",{children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Qualification and attribution"}),e.jsx("h2",{children:"Lead evidence"})]})}),w?e.jsxs(e.Fragment,{children:[e.jsx("select",{className:"am-ops-lead-select",value:w.id,onChange:i=>A(i.target.value),children:t.leads.map(i=>e.jsx("option",{value:i.id,children:U(i)},i.id))}),e.jsxs("div",{className:"am-score-line",children:[e.jsx("strong",{children:Number(T?.score||0)}),e.jsxs("span",{children:[e.jsxs("b",{children:[String(T?.score_band||"low")," readiness"]}),e.jsx("small",{children:String(T?.source_summary||"Unattributed")})]})]}),e.jsxs("form",{className:"am-ops-form",onSubmit:i=>{i.preventDefault(),d({action:"save_lead_lifecycle",leadId:w.id,...b,manualScore:b.manualScore||null},"Lead qualification, attribution, and score updated.")},children:[e.jsxs("label",{children:["Source type",e.jsx("input",{value:b.sourceType,onCh
2ange:i=>M(p=>({...p,sourceType:i.target.value}))})]}),e.jsxs("label",{children:["Referral source",e.jsx("input",{value:b.referralSource,onChange:i=>M(p=>({...p,referralSource:i.target.value}))})]}),e.jsxs("label",{children:["UTM source",e.jsx("input",{value:b.utmSource,onChange:i=>M(p=>({...p,utmSource:i.target.value}))})]}),e.jsxs("label",{children:["UTM campaign",e.jsx("input",{value:b.utmCampaign,onChange:i=>M(p=>({...p,utmCampaign:i.target.value}))})]}),e.jsxs("label",{children:["Fit",e.jsxs("select",{value:b.fitStatus,onChange:i=>M(p=>({...p,fitStatus:i.target.value})),children:[e.jsx("option",{value:"unknown",children:"Not reviewed"}),e.jsx("option",{value:"qualified",children:"Qualified"}),e.jsx("option",{value:"good",children:"Good fit"}),e.jsx("option",{value:"not_fit",children:"Not a fit"})]})]}),e.jsxs("label",{children:["Manual score",e.jsx("input",{type:"number",min:"0",max:"100",value:b.manualScore,onChange:i=>M(p=>({...p,manualScore:i.target.value})),placeholder:"Automatic"})]}),e.jsxs("label",{className:"is-wide",children:["Closed/lost reason",e.jsx("input",{value:b.lostReason,onChange:i=>M(p=>({...p,lostReason:i.target.value})),placeholder:"Required when closing a lead"})]}),e.jsx("button",{className:"admin-btn-primary",disabled:l,children:"Save lead evidence"})]})]}):e.jsx(P,{title:"No lead to assess",body:"Assigned leads will receive an explainable readiness score."})]}),e.jsxs("div",{children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Meeting continuity"}),e.jsx("h2",{children:"Outcome and commitments"})]})}),e.jsxs("form",{className:"am-ops-form",onSubmit:i=>{i.preventDefault();const[p,R]=r.relationship.split(":");d({action:"record_meeting_outcome",clientId:p==="client"?R:null,leadId:p==="lead"?R:null,outcome:r.outcome,decisions:r.decisions,commitments:r.commitments,nextSteps:r.nextSteps,followUpDueAt:r.followUpDueAt},"Meeting outcome recorded and follow-up task created."),o({relationship:"",outcome:"",decisions:"",commitments:"",nextSteps:"",followUpDueAt:""})},children:[e.jsxs("label",{className:"is-wide",children:["Relationship",e.jsxs("select",{required:!0,value:r.relationship,onChange:i=>o(p=>({...p,relationship:i.target.value})),children:[e.jsx("option",{value:"",children:"Choose lead or client"}),t.leads.map(i=>e.jsxs("option",{value:`lead:${i.id}`,children:["Lead · ",U(i)]},`lead:${i.id}`)),t.clients.map(i=>e.jsxs("option",{value:`client:${i.id}`,children:["Client · ",U(i)]},`client:${i.id}`))]})]}),e.jsxs("label",{className:"is-wide",children:["Outcome",e.jsx("textarea",{required:!0,rows:3,value:r.outcome,onChange:i=>o(p=>({...p,outcome:i.target.value}))})]}),e.jsxs("label",{children:["Decisions",e.jsx("textarea",{rows:3,value:r.decisions,onChange:i=>o(p=>({...p,decisions:i.target.value})),placeholder:"One per line"})]}),e.jsxs("label",{children:["Commitments",e.jsx("textarea",{rows:3,value:r.commitments,onChange:i=>o(p=>({...p,commitments:i.target.value})),placeholder:"One per line"})]}),e.jsxs("label",{className:"is-wide",children:["Next steps",e.jsx("textarea",{rows:3,value:r.nextSteps,onChange:i=>o(p=>({...p,nextSteps:i.target.value}))})]}),e.jsxs("label",{children:["Follow-up due",e.jsx("input",{type:"datetime-local",value:r.followUpDueAt,onChange:i=>o(p=>({...p,followUpDueAt:i.target.value}))})]}),e.jsx("button",{className:"admin-btn-primary",disabled:l,children:"Record outcome"})]}),e.jsx("div",{className:"am-meeting-history",children:u.meetingOutcomes.slice(0,5).map(i=>e.jsxs("p",{children:[e.jsx("strong",{children:String(i.outcome)}),e.jsxs("small",{children:[q(Number(i.created_at)),i.follow_up_due_at?` · follow-up ${q(Number(i.follow_up_due_at))}`:""]})]},String(i.id)))})]})]}),e.jsxs("section",{className:"am-template-ops",children:[e.jsx("div",{className:"am-section-heading",children:e.jsxs("div",{children:[e.jsx("span",{children:"Nurture quality"}),e.jsx("h2",{children:"Versioned templates and observed results"}),e.jsx("p",{children:"Templates guide the Assistant; every generated message still requires human approval."})]})}),e.jsxs("div",{className:"am-template-history",children:[e.jsx("div",{children:u.nurtureTemplates.map(i=>e.jsxs("button",{type:"button",className:N.id===i.id?"is-active":"",onClick:()=>S(String(i.id)),children:[e.jsxs("span",{children:[e.jsx("strong",{children:String(i.name)}),e.jsxs("small",{children:[String(i.stage).replaceAll("_"," ")," · v",String(i.version)," · ",String(i.status)]})]}),e.jsxs("em",{children:[String(i.sent||0)," sent · ",String(i.replies||0)," replies · ",String(i.conversions||0)," conversions"]})]},String(i.id)))}),t.canManageOperatingControls?e.jsxs("form",{className:"am-template-editor",onSubmit:i=>{i.preventDefault(),d({action:"save_nurture_template",...N},N.id?"Template draft updated.":"New template version created for review.")},children:[e.jsxs("label",{children:["Stage",e.jsxs("select",{value:N.stage,onChange:i=>E(p=>({...p,stage:i.target.value})),children:[e.jsx("option",{value:"new_inquiry",children:"New inquiry"}
2),e.jsx("option",{value:"qualification",children:"Qualification"}),e.jsx("option",{value:"proposal_follow_up",children:"Proposal follow-up"}),e.jsx("option",{value:"long_term_nurture",children:"Long-term nurture"})]})]}),e.jsxs("label",{children:["Name",e.jsx("input",{required:!0,value:N.name,onChange:i=>E(p=>({...p,name:i.target.value}))})]}),e.jsxs("label",{children:["Experiment key",e.jsx("input",{value:N.experimentKey,onChange:i=>E(p=>({...p,experimentKey:i.target.value})),placeholder:"Optional controlled comparison"})]}),e.jsxs("label",{children:["Subject",e.jsx("input",{required:!0,value:N.subject,onChange:i=>E(p=>({...p,subject:i.target.value}))})]}),e.jsxs("label",{children:["Assistant direction",e.jsx("textarea",{required:!0,rows:6,value:N.body,onChange:i=>E(p=>({...p,body:i.target.value}))})]}),e.jsxs("div",{children:[e.jsx("button",{type:"button",onClick:()=>S(""),children:"New version"}),e.jsx("button",{disabled:l,children:N.id?"Save draft":"Create draft"}),N.id?e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:l,onClick:()=>void d({action:"save_nurture_template",...N,approve:!0},"Template approved as the active version for this stage."),children:"Approve version"}):null]})]}):null]})]})]})}function js({workspace:t,onAction:d,busy:l}){const u=t.welcomeTemplates.find(n=>n.status==="draft")||null,f=u||t.activeWelcomeTemplate,[_,j]=h.useState(f?.subject||""),[c,m]=h.useState(f?.body||"");return h.useEffect(()=>{j(f?.subject||""),m(f?.body||"")},[f?.id,f?.subject,f?.body]),e.jsxs("section",{className:"am-welcome-template",children:[e.jsxs("div",{className:"am-section-heading",children:[e.jsxs("div",{children:[e.jsx("span",{children:"New client introduction"}),e.jsx("h2",{children:"Approved welcome template"}),e.jsx("p",{children:t.activeWelcomeTemplate?`Version ${t.activeWelcomeTemplate.version} automatically welcomes newly assigned clients.`:"No automated welcome can send until an administrator approves a template."})]}),t.canManageWelcomeTemplates?e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:l||!!u,onClick:()=>void d({action:"generate_welcome_template"},"The Assistant prepared a welcome template for review."),children:"Ask Assistant to draft"}):null]}),f?e.jsxs("div",{className:"am-welcome-template__editor",children:[e.jsxs("div",{children:[e.jsxs("span",{className:`am-template-status is-${f.status}`,children:[f.status," · version ",f.version]}),e.jsxs("label",{children:["Subject",e.jsx("input",{value:_,onChange:n=>j(n.target.value),disabled:!t.canManageWelcomeTemplates||f.status!=="draft"})]}),e.jsxs("label",{children:["Message",e.jsx("textarea",{rows:9,value:c,onChange:n=>m(n.target.value),disabled:!t.canManageWelcomeTemplates||f.status!=="draft"})]})]}),e.jsxs("aside",{children:[e.jsx("strong",{children:"Safe personalization"}),e.jsx("code",{children:"{{client_name}}"}),e.jsx("code",{children:"{{company_name}}"}),e.jsx("code",{children:"{{manager_name}}"}),e.jsx("code",{children:"{{manager_email}}"}),e.jsx("p",{children:"Portal invitations and service activation remain separate emails."}),t.canManageWelcomeTemplates&&f.status==="draft"?e.jsxs("div",{children:[e.jsx("button",{type:"button",disabled:l,onClick:()=>void d({action:"update_welcome_template",templateId:f.id,subject:_,body:c},"Template draft saved."),children:"Save draft"}),e.jsx("button",{className:"admin-btn-primary",type:"button",disabled:l,onClick:()=>void d({action:"update_welcome_template",templateId:f.id,subject:_,body:c,approve:!0},"Welcome template approved. New assignments can now send automatically."),children:"Approve template"})]}):null,t.canManageWelcomeTemplates&&f.status==="approved"?e.jsx("button",{type:"button",disabled:l,onClick:()=>void d({action:"update_welcome_template",templateId:f.id,retire:!0},"Welcome template retired. Automatic welcomes are paused until a new version is approved."),children:"Retire active version"}):null]})]}):e.jsx(P,{title:"No welcome template yet",body:"Ask the Assistant to prepare the first version, then review and approve it once."})]})}export{bs as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.