1import{j as e}from"./vendor-radix-BnNg3BH5.js";import{r as d,i as Ke,d as Qe}from"./vendor-react-67mgcWXU.js";import{C as w,a as S,b as C,d as P}from"./card-DpKBVi42.js";import{s as N,q as I,D as $e,e as Ae,f as Ee,g as De,v as re,I as fe,w as Me,x as ze,y as ke,z as Te,A as Y,G as Ue,B as $,b as _e,ab as We,U as Xe,V as Je,W as J,Y as Z}from"./index-Epr9psQo.js";import{B as z}from"./badge-Cl7apleB.js";import{S as q}from"./skeleton-CXDkv5zX.js";import{u as Ze}from"./usePracticeLeadership-ClHdx9at.js";import{a as es}from"./formatLabel-C4RR0vUw.js";import{S as Ge}from"./settings-CFzYyjTl.js";import{P as Fe}from"./percent-De53lZjx.js";import{D as ce}from"./dollar-sign-CC-jyV1q.js";import{C as Ie}from"./clock-BYWbH6MV.js";import{C as pe}from"./checkbox-CaPhqoy3.js";import{S as ve}from"./scroll-area-OnGFamwr.js";import{U as ee}from"./users-uAR6_Qvs.js";import{U as Le}from"./user-plus-Cz5haDJC.js";import{U as ss}from"./user-minus-qCg8sxPr.js";import{F as Ne}from"./folder-kanban-C52eeuLF.js";import{B as ye}from"./building-2-DODpaxwc.js";import{M as G}from"./metric-DK0Tcl4m.js";import{P as le}from"./progress-OXAVVpg3.js";import{s as Ve}from"./startOfMonth-DSkvSDwv.js";import{f as ne}from"./format-Bw8okCdv.js";import{s as ts}from"./subMonths-Cf3G1AKu.js";import{e as as}from"./endOfMonth-BJH_LSY0.js";import{T as de}from"./trending-up-CXZcoU_y.js";import{T as rs}from"./target-CyHaUH9t.js";import{R as ns,A as is,C as ls,X as cs,Y as ds,T as os,L as ms,e as qe}from"./vendor-charts-Dck3qfzI.js";import{T as us}from"./trending-down-CFwiQb3W.js";import{C as xs}from"./crown-BKEU7eeR.js";import{L as hs}from"./layout-dashboard-C8KK_nWn.js";import{P as ge}from"./plus-DRTmwF2W.js";import"./vendor-supabase-CTlrDMdV.js";import"./vendor-query-PMAhJHCS.js";import"./vendor-motion-CSzk-Fqg.js";import"./en-US-DJiZ5LCQ.js";import"./addMonths-CAHQ-5pQ.js";function fs({practiceId:a,open:m,onOpenChange:s,onSaved:u}){const[o,r]=d.useState({utilization_target:80,revenue_goal:null,target_margin_percent:null,default_hourly_rate:null,billing_increment_override:null}),[h,g]=d.useState(!1),[j,i]=d.useState(!1);d.useEffect(()=>{m&&a&&p()},[m,a]);const p=async()=>{g(!0);try{const{data:n}=await N.from("practices").select("utilization_target, revenue_goal, target_margin_percent").eq("id",a).maybeSingle(),{data:y}=await N.from("practice_settings").select("default_hourly_rate, billing_increment_override").eq("practice_id",a).maybeSingle();r({utilization_target:n?.utilization_target??80,revenue_goal:n?.revenue_goal??null,target_margin_percent:n?.target_margin_percent??null,default_hourly_rate:y?.default_hourly_rate??null,billing_increment_override:y?.billing_increment_override??null})}catch(n){console.error("Error loading practice settings:",n),I.error("Failed to load settings")}finally{g(!1)}},f=async()=>{i(!0);try{const{error:n}=await N.from("practices").update({utilization_target:o.utilization_target,revenue_goal:o.revenue_goal,target_margin_percent:o.target_margin_percent}).eq("id",a);if(n)throw n;const{error:y}=await N.from("practice_settings").upsert({practice_id:a,default_hourly_rate:o.default_hourly_rate,billing_increment_override:o.billing_increment_override},{onConflict:"practice_id"});if(y)throw y;I.success("Practice settings saved"),s(!1),u?.()}catch(n){console.error("Error saving settings:",n),I.error("Failed to save settings")}finally{i(!1)}};return e.jsx($e,{open:m,onOpenChange:s,children:e.jsxs(Ae,{className:"sm:max-w-md",children:[e.jsx(Ee,{children:e.jsxs(De,{className:"flex items-center gap-2",children:[e.jsx(Ge,{className:"h-5 w-5"}),"Practice Settings"]})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{htmlFor:"utilization",className:"flex items-center gap-2",children:[e.jsx(Fe,{className:"h-4 w-4 text-muted-foreground"}),"Utilization Target (%)"]}),e.jsx(fe,{id:"utilization",type:"number",min:0,max:100,value:o.utilization_target,onChange:n=>r({...o,utilization_target:parseInt(n.target.value)||80}),disabled:h})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{htmlFor:"revenue",className:"flex items-center gap-2",children:[e.jsx(ce,{className:"h-4 w-4 text-muted-foreground"}),"Revenue Goal (Quarterly)"]}),e.jsx(fe,{id:"revenue",type:"number",min:0,placeholder:"e.g., 300000",value:o.revenue_goal??"",onChange:n=>r({...o,revenue_goal:n.target.value?parseFloat(n.target.value):null}),disabled:h})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{htmlFor:"margin",className:"flex items-center gap-2",children:[e.jsx(Fe,{className:"h-4 w-4 text-muted-foreground"}),"Target Margin (%)"]}),e.jsx(fe,{id:"margin",type:"number",min:0,max:100,placeholder:"e.g., 45",value:o.target_margin_percent??"",onChange:n=>r({...o,target_margin_percent:n.target.value?parseFloat(n.target.value):null}),disabled:h})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{htmlFor:"rate",className:"flex items-center gap-2",children:[e.jsx(ce,{className:"h-4 w-4 text-muted-foreground"}),"Default Hourly Rate"]}),e.jsx(fe,{id:"rate",type:"number",min:0,placeholder:"e.g., 175",value:o.default_hourly_rate??"",onChange:n=>r({...o,default_hourly_rate:n.target.value?parseFloat(n.target.value):null}),disabled:h})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{htmlFor:"increment",className:"flex items-center gap-2",children:[e.jsx(Ie,{className:"h-4 w-4 text-muted-foreground"}),"Billing Increment Override"]}),e.jsxs(Me,{value:o.billing_increment_override?.toString()||"__default__",onValueChange:n=>r({...o,billing_increment_override:n==="__default__"?null:parseInt(n)}),disabled:h,children:[e.jsx(ze,{children:e.jsx(ke,{placeholder:"Use organization default"})}),e.jsxs(Te,{children:[e.jsx(Y,{value:"__default__",children:"Use organization default"}),e.jsx(Y,{value:"6",children:"6 minutes"}),e.jsx(Y,{value:"15",children:"15 minutes"}),e.jsx(Y,{value:"30",children:"30 minutes"})]})]})]})]}),e.jsxs(Ue,{children:[e.jsx($,{variant:"outline",onClick:()=>s(!1),children:"Cancel"}),e.jsx($,{onClick:f,disabled:j||h,children:j?"Saving...":"Save Settings"})]})]})})}function gs({practiceId:a,practiceName:m,open:s,onOpenChange:u,onAssigned:o}
1){const[r,h]=d.useState([]),[g,j]=d.useState([]),[i,p]=d.useState(new Set),[f,n]=d.useState(new Set),[y,A]=d.useState(!1),[k,E]=d.useState(!1),{currentTenant:b}=_e();d.useEffect(()=>{s&&b?.id&&L()},[s,b?.id,a]);const L=async()=>{if(b?.id){A(!0);try{const{data:l}=await N.from("tenant_members").select("user_id").eq("tenant_id",b.id),x=l?.map(v=>v.user_id)||[];if(x.length===0){h([]),j([]);return}const{data:R}=await N.from("profiles").select("id, user_id, full_name, title, practice_id").in("user_id",x).is("practice_id",null),{data:c}=await N.from("profiles").select("id, user_id, full_name, title, practice_id").in("user_id",x).eq("practice_id",a);h(R||[]),j(c||[]),p(new Set),n(new Set)}catch(l){console.error("Error loading staff:",l),I.error("Failed to load staff members")}finally{A(!1)}}},F=async()=>{E(!0);try{if(i.size>0){const{error:x}=await N.from("profiles").update({practice_id:a}).in("id",Array.from(i));if(x)throw x}if(f.size>0){const{error:x}=await N.from("profiles").update({practice_id:null}).in("id",Array.from(f));if(x)throw x}const l=i.size+f.size;I.success(`Updated ${l} staff assignment${l!==1?"s":""}`),u(!1),o?.()}catch(l){console.error("Error updating assignments:",l),I.error("Failed to update staff assignments")}finally{E(!1)}},V=l=>{const x=new Set(i);x.has(l)?x.delete(l):x.add(l),p(x)},D=l=>{const x=new Set(f);x.has(l)?x.delete(l):x.add(l),n(x)},T=i.size>0||f.size>0;return e.jsx($e,{open:s,onOpenChange:u,children:e.jsxs(Ae,{className:"sm:max-w-2xl max-h-[90vh]",children:[e.jsx(Ee,{children:e.jsxs(De,{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-5 w-5"}),"Manage Staff - ",m]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-sm font-medium flex items-center gap-2",children:[e.jsx(Le,{className:"h-4 w-4 text-muted-foreground"}),"Unassigned Staff"]}),e.jsx(z,{variant:"outline",children:r.length})]}),e.jsx(ve,{className:"h-64 border rounded-md p-2",children:y?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:"Loading..."}):r.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:"No unassigned staff"}):e.jsx("div",{className:"space-y-2",children:r.map(l=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md hover:bg-muted cursor-pointer",onClick:()=>V(l.id),children:[e.jsx(pe,{checked:i.has(l.id),onCheckedChange:()=>V(l.id)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:l.full_name||"Unnamed"}),e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:l.title||"No title"})]})]},l.id))})}),i.size>0&&e.jsxs("p",{className:"text-xs text-success",children:[i.size," to be assigned"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-sm font-medium flex items-center gap-2",children:[e.jsx(ss,{className:"h-4 w-4 text-muted-foreground"}),"Current Members"]}),e.jsx(z,{variant:"secondary",children:g.length})]}),e.jsx(ve,{className:"h-64 border rounded-md p-2",children:y?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:"Loading..."}):g.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:"No staff assigned yet"}):e.jsx("div",{className:"space-y-2",children:g.map(l=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md hover:bg-muted cursor-pointer",onClick:()=>D(l.id),children:[e.jsx(pe,{checked:f.has(l.id),onCheckedChange:()=>D(l.id)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:l.full_name||"Unnamed"}),e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:l.title||"No title"})]})]},l.id))})}),f.size>0&&e.jsxs("p",{className:"text-xs text-destructive",children:[f.size," to be unassigned"]})]})]}),e.jsxs(Ue,{children:[e.jsx($,{variant:"outline",onClick:()=>u(!1),children:"Cancel"}
1),e.jsx($,{onClick:F,disabled:k||!T,children:k?"Saving...":`Save Changes${T?` (${i.size+f.size})`:""}`})]})]})})}function Re({practiceId:a,practiceName:m,entityType:s,open:u,onOpenChange:o,onAssigned:r}){const[h,g]=d.useState([]),[j,i]=d.useState([]),[p,f]=d.useState(new Set),[n,y]=d.useState(new Set),[A,k]=d.useState(!1),[E,b]=d.useState(!1),{currentTenant:L}=_e(),F=s==="projects"?"Projects":"Clients",V=s==="projects"?Ne:ye;d.useEffect(()=>{u&&L?.id&&D()},[u,L?.id,a,s]);const D=async()=>{if(L?.id){k(!0);try{const{data:c}=await N.from(s).select("id, name, status, practice_id").eq("tenant_id",L.id).is("practice_id",null),{data:v}=await N.from(s).select("id, name, status, practice_id").eq("tenant_id",L.id).eq("practice_id",a);g(c||[]),i(v||[]),f(new Set),y(new Set)}catch(c){console.error("Error loading entities:",c),I.error(`Failed to load ${F.toLowerCase()}`)}finally{k(!1)}}},T=async()=>{b(!0);try{if(p.size>0){const{error:v}=await N.from(s).update({practice_id:a}).in("id",Array.from(p));if(v)throw v}if(n.size>0){const{error:v}=await N.from(s).update({practice_id:null}).in("id",Array.from(n));if(v)throw v}const c=p.size+n.size;I.success(`Updated ${c} ${F.toLowerCase()}`),o(!1),r?.()}catch(c){console.error("Error updating assignments:",c),I.error(`Failed to update ${F.toLowerCase()}`)}finally{b(!1)}},l=c=>{const v=new Set(p);v.has(c)?v.delete(c):v.add(c),f(v)},x=c=>{const v=new Set(n);v.has(c)?v.delete(c):v.add(c),y(v)},R=p.size>0||n.size>0;return e.jsx($e,{open:u,onOpenChange:o,children:e.jsxs(Ae,{className:"sm:max-w-2xl max-h-[90vh]",children:[e.jsx(Ee,{children:e.jsxs(De,{className:"flex items-center gap-2",children:[e.jsx(V,{className:"h-5 w-5"}),"Manage ",F," - ",m]})}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-sm font-medium",children:["Unassigned ",F]}),e.jsx(z,{variant:"outline",children:h.length})]}),e.jsx(ve,{className:"h-64 border rounded-md p-2",children:A?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:"Loading..."}):h.length===0?e.jsxs("p",{className:"text-sm text-muted-foreground text-center py-4",children:["All ",F.toLowerCase()," are assigned"]}):e.jsx("div",{className:"space-y-2",children:h.map(c=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md hover:bg-muted cursor-pointer",onClick:()=>l(c.id),children:[e.jsx(pe,{checked:p.has(c.id),onCheckedChange:()=>l(c.id)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:c.name}),c.status&&e.jsx(z,{variant:"secondary",className:"text-xs",children:c.status})]})]},c.id))})}),p.size>0&&e.jsxs("p",{className:"text-xs text-success",children:[p.size," to be assigned"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-sm font-medium",children:["Current ",F]}),e.jsx(z,{variant:"secondary",children:j.length})]}),e.jsx(ve,{className:"h-64 border rounded-md p-2",children:A?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-4",children:"Loading..."}):j.length===0?e.jsxs("p",{className:"text-sm text-muted-foreground text-center py-4",children:["No ",F.toLowerCase()," assigned yet"]}):e.jsx("div",{className:"space-y-2",children:j.map(c=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md hover:bg-muted cursor-pointer",onClick:()=>x(c.id),children:[e.jsx(pe,{checked:n.has(c.id),onCheckedChange:()=>x(c.id)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:c.name}),c.status&&e.jsx(z,{variant:"secondary",className:"text-xs",children:c.status})]})]},c.id))})}),n.size>0&&e.jsxs("p",{className:"text-xs text-destructive",children:[n.size," to be unassigned"]})]})]}),e.jsxs(Ue,{children:[e.jsx($,{variant:"outline",onClick:()=>o(!1),children:"Cancel"}),e.jsx($,{onClick:T,disabled:E||!R,children:E?"Saving...":`Save Changes${R?` (${p.size+n.size})`:""}`})]})]})})}function He(a,m="quarter"){const[s,u]=d.useState({revenue:0,laborCost:0,grossProfit:0,grossMarginPercent:0,utilizationRate:0,staffCount:0,revenuePerStaff:0,costPerStaff:0,billableHours:0,totalHours:0,revenueVsGoal:0,marginVsTarget:0,pipelineValue:0,pipelineCoverage:0}),[o,r]=d.useState([]),[h,g]=d.useState(!0),{currentTenant:j}=_e(),i=d.useCallback(f=>{const n=new Date;let y;switch(f){case"month":y=Ve(n);break;case"quarter":const A=Math.floor(n.getMonth()/3)*3;y=new Date(n.getFullYear(),A,1);break;case"year":y=new Date(n.getFullYear(),0,1);break}return{startDate:ne(y,"yyyy-MM-dd"),endDate:ne(n,"yyyy-MM-dd")}},[]),p=d.useCallback(async()=>
1{if(!a||!j?.id){g(!1);return}g(!0);const{startDate:f,endDate:n}=i(m);try{const{data:y}=await N.from("tenant_members").select("user_id").eq("tenant_id",j.id),A=y?.map(M=>M.user_id)||[];let k=[];if(A.length>0){const{data:M}=await N.from("profiles").select("id, user_id, hourly_rate, weekly_hours_target, utilization_target, profile_financials(hourly_cost)").in("user_id",A).eq("practice_id",a);k=(M||[]).map(_=>{const O=Array.isArray(_.profile_financials)?_.profile_financials[0]:_.profile_financials;return{..._,hourly_cost:O?.hourly_cost??null}})}const E=k?.map(M=>M.id)||[],b=k?.length||0,{data:L}=await N.from("practices").select("utilization_target, revenue_goal, target_margin_percent").eq("id",a).maybeSingle(),F=L?.utilization_target||80,V=L?.revenue_goal||0,D=L?.target_margin_percent||40;let T=0,l=0,x=0,R=0;if(E.length>0){const{data:M}=await N.from("time_entries").select("user_id, hours, billable_minutes, actual_minutes, rate_override, is_billable").in("user_id",E).gte("date",f).lte("date",n);if(M)for(const _ of M){const O=k?.find(he=>he.id===_.user_id),K=_.rate_override||O?.hourly_rate||150,te=O?.hourly_cost||(O?.hourly_rate?O.hourly_rate*.6:90),ae=_.billable_minutes||0,B=_.actual_minutes||Math.round(_.hours*60)||0;_.is_billable&&(T+=ae/60*K,x+=ae),l+=B/60*te,R+=B}}const{data:c}=await N.from("prospects").select("deal_value").eq("tenant_id",j.id).eq("practice_id",a).not("stage","in","(won,lost)"),v=c?.reduce((M,_)=>M+(_.deal_value||0),0)||0,Q=T-l,oe=T>0?Q/T*100:0,W=x/60,me=R/60,be=m==="month"?4:m==="quarter"?13:52,ue=k?.reduce((M,_)=>M+(_.weekly_hours_target||40),0)/(b||1),H=b*ue*be,X=H>0?W/H*100:0,we=b>0?T/b:0,t=b>0?l/b:0,Se=V>0?T/V*100:0,Ce=D>0?oe/D*100:0,se=V>0?v/V*100:0;u({revenue:T,laborCost:l,grossProfit:Q,grossMarginPercent:oe,utilizationRate:X,staffCount:b,revenuePerStaff:we,costPerStaff:t,billableHours:W,totalHours:me,revenueVsGoal:Se,marginVsTarget:Ce,pipelineValue:v,pipelineCoverage:se});const xe=[];for(let M=5;M>=0;M--){const _=Ve(ts(new Date,M)),O=as(_);let K=0,te=0;if(E.length>0){const{data:ae}=await N.from("time_entries").select("user_id, hours, billable_minutes, actual_minutes, rate_override, is_billable").in("user_id",E).gte("date",ne(_,"yyyy-MM-dd")).lte("date",ne(O,"yyyy-MM-dd"));if(ae)for(const B of ae){const he=k?.find(Ye=>Ye.id===B.user_id),Oe=B.rate_override||he?.hourly_rate||150,Be=he?.hourly_cost||90;B.is_billable&&(K+=(B.billable_minutes||0)/60*Oe),te+=(B.actual_minutes||0)/60*Be}}xe.push({month:ne(_,"MMM"),revenue:K,cost:te,margin:K>0?(K-te)/K*100:0})}r(xe)}catch(y){console.error("Error loading practice financials:",y)}finally{g(!1)}},[a,j?.id,m,i]);return d.useEffect(()=>{p()},[p]),{financials:s,monthlyTrend:o,isLoading:h,refetch:p}}function ie(a){return a>=1e6?`$${(a/1e6).toFixed(1)}M`:a>=1e3?`$${(a/1e3).toFixed(0)}k`:`$${a.toFixed(0)}`}function js({practiceId:a,staffCount:m,activeProjects:s,clientCount:u,pipelineValue:o}){const{financials:r,isLoading:h}=He(a,"quarter");if(h)return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"grid gap-4 md:grid-cols-4",children:[1,2,3,4].map(p=>e.jsx(q,{className:"h-24"},p))}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsx(q,{className:"h-40"}),e.jsx(q,{className:"h-40"})]})]});const g=Math.round(Math.min(r.utilizationRate,100)*.3+Math.min(r.revenueVsGoal,100)*.4+Math.min(r.marginVsTarget,100)*.3),j=g>=80?"Healthy":g>=60?"Attention":"Critical",i=g>=80?"text-success":g>=60?"text-warning":"text-destructive";return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-4",children:[e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Staff"}),e.jsx(ee,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:m}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"team members"})]})]}),e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Projects"}),e.jsx(Ne,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:s}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"active projects"})]})]}),e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Clients"}),e.jsx(ye,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:u}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"active clients"})]})]}),e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Pipeline"}),e.jsx(de,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:ie(o)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"in active pipeline"})]})]})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[e.jsxs(w,{children:[e.jsx(S,{children:e.jsxs(C,{className:"flex items-center justify-between",children:["Practice Health",e.jsx(z,{variant:g>=80?"default":g>=60?"secondary":"destructive",children:j})]})}),e.jsxs(P,{className:"space-y-4",children:[e.jsx("div",{className:"flex items-center justify-center",children:e.jsxs("div",{className:"relative w-32 h-32",children:[e.jsxs("svg",{className:"w-full h-full -rotate-90",viewBox:"0 0 100 100",children:[e.jsx("circle",{className:"text-muted stroke-current",strokeWidth:"10",fill:"transparent",r:"40",cx:"50",cy:"50"}),e.jsx("circle",{className:`${i} stroke-current`,strokeWidth:"10",strokeLinecap:"round",fill:"transparent",r:"40",cx:"50",cy:"50",strokeDasharray:`${g*2.51} 251`})]}),e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx(G,{size:"lg",className:i,children:g})})]})}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Utilization"}),e.jsxs("span",{className:"font-medium",children:[r.utilizationRate.toFixed(0),"%"]})]}),e.jsx(le,{value:Math.min(r.utilizationRate,100),className:"h-1.5"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Revenue Goal"}),e.jsxs("span",{className:"font-medium",children:[r.revenueVsGoal.toFixed(0),"%"]})]}),e.jsx(le,{value:Math.min(r.revenueVsGoal,100),className:"h-1.5"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Margin Target"}),e.jsxs("span",{className:"font-medium",children:[r.marginVsTarget.toFixed(0),"%"]})]}),e.jsx(le,{value:Math.min(r.marginVsTarget,100),className:"h-1.5"})]})]})]})]}),e.jsxs(w,{children:[e.jsx(S,{children:e.jsx(C,{children:"Financial Snapshot (QTD)"})}),e.jsxs(P,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(ce,{className:"h-4 w-4"}),"Revenue"]}),e.jsx("p",{className:"text-xl font-bold",children:ie(r.revenue)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(rs,{className:"h-4 w-4"}),"Gross Profit"]}),e.jsx("p",{className:"text-xl font-bold text-success",children:ie(r.grossProfit)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(Fe,{className:"h-4 w-4"}),"Margin"]}),e.jsxs("p",{className:"text-xl font-bold",children:[r.grossMarginPercent.toFixed(1),"%"]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(ee,{className:"h-4 w-4"}),"Rev/Staff"]}),e.jsx("p",{className:"text-xl font-bold",children:ie(r.revenuePerStaff)})]})]}),e.jsxs("div",{className:"pt-4 border-t",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Pipeline Coverage"}),e.jsxs(z,{variant:r.pipelineCoverage>=150?"default":"secondary",children:[r.pipelineCoverage.toFixed(0),"%"]})]}),e.jsx(le,{value:Math.min(r.pipelineCoverage,200)/2,className:"h-2 mt-2"}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:[ie(r.pipelineValue)," in pipeline"]})]})]})]})]})]})}function U(a){return a>=1e6?`$${(a/1e6).toFixed(1)}
1M`:a>=1e3?`$${(a/1e3).toFixed(0)}k`:`$${a.toFixed(0)}`}function je({title:a,value:m,subtitle:s,icon:u,trend:o,trendLabel:r}){return e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:a}),e.jsx(u,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:m}),s&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:s}),r&&e.jsxs("div",{className:"flex items-center gap-1 mt-1",children:[o==="up"&&e.jsx(de,{className:"h-3 w-3 text-success"}),o==="down"&&e.jsx(us,{className:"h-3 w-3 text-destructive"}),e.jsx("span",{className:`text-xs ${o==="up"?"text-success":o==="down"?"text-destructive":"text-muted-foreground"}`,children:r})]})]})]})}function Pe({label:a,current:m,target:s,percentage:u,color:o="primary"}){return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:a}),e.jsxs("span",{className:"font-medium",children:[m," / ",s]})]}),e.jsx(le,{value:Math.min(u,100),className:"h-2"}),e.jsxs("div",{className:"flex justify-between text-xs text-muted-foreground",children:[e.jsxs("span",{children:[u.toFixed(0),"% of target"]}),u>=100&&e.jsx(z,{variant:"secondary",className:"text-xs",children:"Target Met"})]})]})}function ps({practiceId:a,period:m}){const{financials:s,monthlyTrend:u,isLoading:o}=He(a,m);if(o)return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"grid gap-4 md:grid-cols-4",children:[1,2,3,4].map(h=>e.jsx(q,{className:"h-28"},h))}),e.jsx(q,{className:"h-64"})]});const r=m==="month"?"This Month":m==="quarter"?"This Quarter":"This Year";return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-4",children:[e.jsx(je,{title:"Revenue",value:U(s.revenue),subtitle:r,icon:ce,trend:s.revenueVsGoal>=100?"up":s.revenueVsGoal>=70?"neutral":"down",trendLabel:`${s.revenueVsGoal.toFixed(0)}% of goal`}),e.jsx(je,{title:"Labor Cost",value:U(s.laborCost),subtitle:r,icon:ee}),e.jsx(je,{title:"Gross Profit",value:U(s.grossProfit),subtitle:`${s.grossMarginPercent.toFixed(1)}% margin`,icon:de,trend:s.grossMarginPercent>=40?"up":s.grossMarginPercent>=25?"neutral":"down"}),e.jsx(je,{title:"Utilization",value:`${s.utilizationRate.toFixed(0)}%`,subtitle:`${s.billableHours.toFixed(0)} billable hours`,icon:Ie,trend:s.utilizationRate>=75?"up":s.utilizationRate>=60?"neutral":"down"})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[e.jsxs(w,{children:[e.jsx(S,{children:e.jsx(C,{className:"text-lg",children:"P&L Summary"})}),e.jsxs(P,{className:"space-y-4",children:[e.jsxs("div",{className:"flex justify-between py-2 border-b",children:[e.jsx("span",{className:"text-muted-foreground",children:"Revenue"}),e.jsx("span",{className:"font-medium",children:U(s.revenue)})]}),e.jsxs("div",{className:"flex justify-between py-2 border-b",children:[e.jsx("span",{className:"text-muted-foreground",children:"Labor Cost"}),e.jsxs("span",{className:"font-medium text-destructive",children:["-",U(s.laborCost)]})]}),e.jsxs("div",{className:"flex justify-between py-2 border-b font-medium",children:[e.jsx("span",{children:"Gross Profit"}),e.jsx("span",{className:s.grossProfit>=0?"text-success":"text-destructive",children:U(s.grossProfit)})]}),e.jsxs("div",{className:"flex justify-between py-2",children:[e.jsx("span",{className:"text-muted-foreground",children:"Gross Margin"}),e.jsxs(z,{variant:s.grossMarginPercent>=40?"default":"secondary",children:[s.grossMarginPercent.toFixed(1),"%"]})]})]})]}),e.jsxs(w,{children:[e.jsx(S,{children:e.jsx(C,{className:"text-lg",children:"Targets & Goals"})}),e.jsxs(P,{className:"space-y-6",children:[e.jsx(Pe,{label:"Revenue vs Goal",current:U(s.revenue),target:"Goal",percentage:s.revenueVsGoal,color:s.revenueVsGoal>=100?"green":"primary"}),e.jsx(Pe,{label:"Margin vs Target",current:`${s.grossMarginPercent.toFixed(0)}%`,target:"Target",percentage:s.marginVsTarget,color:s.marginVsTarget>=100?"green":"primary"}),e.jsx(Pe,{label:"Pipeline Coverage",current:U(s.pipelineValue),target:"Revenue Goal",percentage:s.pipelineCoverage,color:s.pipelineCoverage>=150?"green":"primary"})]})]})]}),e.jsxs(w,{children:[e.jsx(S,{children:e.jsx(C,{className:"text-lg",children:"Revenue & Cost Trend (6 Months)"})}),e.jsx(P,{children:e.jsx("div",{className:"h-64",children:e.jsx(ns,{width:"100%",height:"100%",children:e.jsxs(is,{data:u,children:[e.jsx(ls,{strokeDasharray:"3 3",className:"stroke-muted"}),e.jsx(cs,{dataKey:"month",className:"text-xs"}),e.jsx(ds,{tickFormatter:h=>U(h),className:"text-xs"}),e.jsx(os,{formatter:h=>U(h),contentStyle:{borderRadius:"8px"}}),e.jsx(ms,{}),e.jsx(qe,{type:"monotone",dataKey:"revenue",name:"Revenue",stackId:"1",stroke:"hsl(var(--primary))",fill:"hsl(var(--primary) / 0.3)"}),e.jsx(qe,{type:"monotone",dataKey:"cost",name:"Labor Cost",stackId:"2",stroke:"hsl(var(--destructive))",fill:"hsl(var(--destructive) / 0.3)"})]})})})})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-3",children:[e.jsxs(w,{children:[e.jsx(S,{className:"pb-2",children:e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Staff Count"})}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:s.staffCount}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"assigned to this practice"})]})]}),e.jsxs(w,{children:[e.jsx(S,{className:"pb-2",children:e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Revenue per Staff"})}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:U(s.revenuePerStaff)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r})]})]}),e.jsxs(w,{children:[e.jsx(S,{className:"pb-2",children:e.jsx(C,{className:"text-sm font-medium text-muted-foreground",children:"Cost per Staff"})}),e.jsxs(P,{children:[e.jsx(G,{size:"md",children:U(s.costPerStaff)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r})]})]})]})]})}async function vs(a,m){const{data:s}=await N.from("tenant_members").select("user_id").eq("tenant_id",a),u=(s||[]).map(j=>
1j.user_id);let o=[];if(u.length>0){const{data:j}=await N.from("profiles").select("id, user_id, full_name, title, avatar_url, org_level_id, practice_id, hourly_rate").in("user_id",u).eq("practice_id",m);o=j||[]}const{data:r}=await N.from("projects").select("id, name, status, client_id").eq("tenant_id",a).eq("practice_id",m),{data:h}=await N.from("clients").select("id, name, industry, status").eq("tenant_id",a).eq("practice_id",m),{data:g}=await N.from("prospects").select("id, company_name, deal_value, stage").eq("tenant_id",a).eq("practice_id",m);return{staff:o||[],projects:r||[],clients:h||[],prospects:g||[]}}function at(){const{practiceId:a}=Ke(),m=Qe(),{ledPractices:s,isPracticeLeader:u,isLoading:o}=Ze(),{practices:r,isLoading:h,refetch:g}=We(),{currentTenant:j}=_e(),[i,p]=d.useState(a||null),[f,n]=d.useState({staffCount:0,activeProjects:0,totalProjects:0,clientCount:0,pipelineValue:0,prospectCount:0}),[y,A]=d.useState([]),[k,E]=d.useState([]),[b,L]=d.useState([]),[F,V]=d.useState([]),[D,T]=d.useState(!0),[l,x]=d.useState(!1),[R,c]=d.use
1State(!1),[v,Q]=d.useState(!1),[oe,W]=d.useState(!1),[me,be]=d.useState("quarter");d.useEffect(()=>{!i&&s.length>0?p(s[0].id):!i&&r.length>0&&!u&&p(r[0].id)},[s,r,i,u]),d.useEffect(()=>{i&&i!==a&&m(`/practice/${i}`,{replace:!0})},[i,a,m]);const ue=async()=>{if(!(!i||!j?.id)){T(!0);try{const t=await vs(j.id,i);A(t.staff),E(t.projects),L(t.clients),V(t.prospects);const Se=t.projects.filter(se=>se.status==="active").length,Ce=t.prospects.reduce((se,xe)=>se+(xe.deal_value||0),0);n({staffCount:t.staff.length,activeProjects:Se,totalProjects:t.projects.length,clientCount:t.clients.length,pipelineValue:Ce,prospectCount:t.prospects.length})}catch(t){console.error("Error loading practice data:",t)}finally{T(!1)}}};d.useEffect(()=>{ue()},[i,j?.id]);const H=r.find(t=>t.id===i),X=()=>{ue(),g()};if(o||h)return e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsx(q,{className:"h-10 w-64"}),e.jsx("div",{className:"grid gap-4 md:grid-cols-4",children:[1,2,3,4].map(t=>e.jsx(q,{className:"h-24"},t))})]});const we=u?s:r;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"Practice Management"}),u&&e.jsxs(z,{variant:"secondary",className:"gap-1",children:[e.jsx(xs,{className:"h-3 w-3"}),"Practice Leader"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(Me,{value:i||"",onValueChange:p,children:[e.jsx(ze,{className:"w-64",children:e.jsx(ke,{placeholder:"Select Practice"})}),e.jsx(Te,{children:we.map(t=>e.jsx(Y,{value:t.id,children:e.jsxs("span",{className:"flex items-center gap-2",children:[t.color&&e.jsx("span",{className:"h-2 w-2 rounded-full",style:{backgroundColor:t.color}}),t.name]})},t.id))})]}),i&&e.jsx($,{variant:"outline",size:"icon",onClick:()=>x(!0),"aria-label":"Settings",children:e.jsx(Ge,{className:"h-4 w-4"})})]})]}),i&&H&&e.jsxs(Xe,{defaultValue:"overview",className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(Je,{children:[e.jsxs(J,{value:"overview",className:"gap-2",children:[e.jsx(hs,{className:"h-4 w-4"}),"Overview"]}),e.jsxs(J,{value:"staff",className:"gap-2",children:[e.jsx(ee,{className:"h-4 w-4"}),"Staff (",f.staffCount,")"]}),e.jsxs(J,{value:"projects",className:"gap-2",children:[e.jsx(Ne,{className:"h-4 w-4"}),"Projects (",f.totalProjects,")"]}),e.jsxs(J,{value:"clients",className:"gap-2",children:[e.jsx(ye,{className:"h-4 w-4"}),"Clients (",f.clientCount,")"]}),e.jsxs(J,{value:"pipeline",className:"gap-2",children:[e.jsx(de,{className:"h-4 w-4"}),"Pipeline (",f.prospectCount,")"]}),e.jsxs(J,{value:"financials",className:"gap-2",children:[e.jsx(ce,{className:"h-4 w-4"}),"Financials"]})]}),e.jsxs(Me,{value:me,onValueChange:t=>be(t),children:[e.jsx(ze,{className:"w-32",children:e.jsx(ke,{})}),e.jsxs(Te,{children:[e.jsx(Y,{value:"month",children:"This Month"}),e.jsx(Y,{value:"quarter",children:"This Quarter"}),e.jsx(Y,{value:"year",children:"This Year"})]})]})]}),e.jsx(Z,{value:"overview",children:e.jsx(js,{practiceId:i,staffCount:f.staffCount,activeProjects:f.activeProjects,clientCount:f.clientCount,pipelineValue:f.pipelineValue})}),e.jsx(Z,{value:"staff",children:e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between",children:[e.jsx(C,{children:"Staff Members"}),e.jsxs($,{size:"sm",onClick:()=>c(!0),children:[e.jsx(Le,{className:"h-4 w-4 mr-2"}),"Manage Staff"]})]}),e.jsx(P,{children:D?e.jsx("div",{className:"space-y-2",children:[1,2,3].map(t=>e.jsx(q,{className:"h-12"},t))}):y.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(ee,{className:"h-12 w-12 mx-auto text-muted-foreground mb-4"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"No staff members assigned to this practice yet."}),e.jsxs($,{onClick:()=>c(!0),children:[e.jsx(Le,{className:"h-4 w-4 mr-2"}),"Assign Staff"]})]}):e.jsx("div",{className:"space-y-2",children:y.map(t=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg border cursor-pointer hover:bg-muted/50",onClick:()=>m(`/team/${t.id}`),children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-primary hover:underline",children:t.full_name||"Unnamed"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t.title||"No title"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[t.hourly_rate&&e.jsxs(z,{variant:"outline",children:["$",t.hourly_rate,"/hr"]}),e.jsx(z,{variant:"secondary",children:t.org_level_id?"Assigned":"No Level"})]})]},t.id))})})]})}),e.jsx(Z,{value:"projects",children:e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between",children:[e.jsx(C,{children:"Projects"}),e.jsxs($,{size:"sm",onClick:()=>Q(!0),children:[e.jsx(ge,{className:"h-4 w-4 mr-2"}),"Manage Projects"]})]}),e.jsx(P,{children:D?e.jsx("div",{className:"space-y-2",children:[1,2,3].map(t=>e.jsx(q,{className:"h-12"},t))}):k.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(Ne,{className:"h-12 w-12 mx-auto text-muted-foreground mb-4"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"No projects assigned to this practice yet."}),e.jsxs($,{onClick:()=>Q(!0),children:[e.jsx(ge,{className:"h-4 w-4 mr-2"}),"Assign Projects"]})]}):e.jsx("div",{className:"space-y-2",children:k.map(t=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg border cursor-pointer hover:bg-muted/50",onClick:()=>m(`/projects/${t.id}`),children:[e.jsx("div",{children:e.jsx("p",{className:"font-medium",children:t.name})}),e.jsx(z,{variant:t.status==="active"?"default":"secondary",children:t.status})]},t.id))})})]})}),e.jsx(Z,{value:"clients",children:e.jsxs(w,{children:[e.jsxs(S,{className:"flex flex-row items-center justify-between",children:[e.jsx(C,{children:"Clients"}),e.jsxs($,{size:"sm",onClick:()=>W(!0),children:[e.jsx(ge,{className:"h-4 w-4 mr-2"}),"Manage Clients"]})]}),e.jsx(P,{children:D?e.jsx("div",{className:"space-y-2",children:[1,2,3].map(t=>e.jsx(q,{className:"h-12"},t))}):b.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(ye,{className:"h-12 w-12 mx-auto text-muted-foreground mb-4"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"No clients assigned to this practice yet."}),e.jsxs($,{onClick:()=>W(!0),children:[e.jsx(ge,{className:"h-4 w-4 mr-2"}),"Assign Clients"]})]}):e.jsx("div",{className:"space-y-2",children:b.map(t=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg border cursor-pointer hover:bg-muted/50",onClick:()=>m(`/clients/${t.id}`),children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:t.name}),e.jsx("p",{className:"text-sm text-muted-foreground",children:es(t.industry)||"No industry"})]}),e.jsx(z,{variant:"outline",children:t.status||"active"})]},t.id))})})]})}),e.jsx(Z,{value:"pipeline",children:e.jsxs(w,{children:[e.jsx(S,{children:e.jsx(C,{children:"Pipeline"})}),e.jsx(P,{children:D?e.jsx("div",{className:"space-y-2",children:[1,2,3].map(t=>e.jsx(q,{className:"h-12"},t))}):F.length===0?e.jsxs("div",{className:"text-center py-8",children:[e.jsx(de,{className:"h-12 w-12 mx-auto text-muted-foreground mb-4"}),e.jsx("p",{className:"text-muted-foreground",children:"No prospects assigned to this practice yet."})]}):e.jsx("div",{className:"space-y-2",children:F.map(t=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg border cursor-pointer hover:bg-muted/50",onClick:()=>m(`/pipeline/${t.id}`),children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:t.company_name}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["$",(t.deal_value||0).toLocaleStr
1ing()]})]}),e.jsx(z,{variant:"secondary",children:t.stage})]},t.id))})})]})}),e.jsx(Z,{value:"financials",children:e.jsx(ps,{practiceId:i,period:me})})]}),i&&H&&e.jsxs(e.Fragment,{children:[e.jsx(fs,{practiceId:i,open:l,onOpenChange:x,onSaved:X}),e.jsx(gs,{practiceId:i,practiceName:H.name,open:R,onOpenChange:c,onAssigned:X}),e.jsx(Re,{practiceId:i,practiceName:H.name,entityType:"projects",open:v,onOpenChange:Q,onAssigned:X}),e.jsx(Re,{practiceId:i,practiceName:H.name,entityType:"clients",open:oe,onOpenChange:W,onAssigned:X})]})]})}export{at 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.