PageSourceSearch

https://app.projectionlab.com/assets/ProDashboardPage-j6hbpl8C.js

js projectionlab.com collected 2026-10-03 22:04:36 UTC 42,852 bytes, 4 lines download raw bytes

1import{a as ht}from"./_sentry-release-injection-file-D0C08wkr.js";import{$w as _,Aw as Be,Bb as xt,DT as pe,Dw as P,ES as Te,JC as Ge,Jw as N,Kt as We,MT as T,OT as Pt,Qg as Vt,Ry as St,Sn as Ae,TS as re,Uw as r,Vb as ke,Vw as G,Ww as Y,XC as De,Xt as At,_C as Mt,_w as Ut,aw as Me,dw as It,ew as c,fC as _e,gb as Et,gw as z,hn as ge,i as Lt,in as Dt,iw as ee,kw as rt,lh as Qe,lw as W,mb as Tt,nw as A,oT as e,ow as I,qC as Ze,rs as Nt,rw as j,sw as u,t as ut,ti as Rt,tw as M,u as $t,uC as zt,ww as ct,xC as Ft,yw as Bt,zy as dt}from"./notification-3dyR30ZU.js";import{t as $e}from"./VSpacer-BzWomvfQ.js";import{f as he,j as Ee}from"./position-C2OiNljx.js";import{t as xe}from"./tooltip-CV9NLi_D.js";import{t as Gt}from"./VDataTable-D3osDhnl.js";import{c as qe}from"./AppCard-p6StRC4U.js";import{t as ze}from"./VBtn-Dre-bjrV.js";import{t as Wt}from"./AppAvatar-BghMMMeU.js";import{t as se}from"./VChip-BKcyvqVg.js";import{t as ue}from"./VTextField-D8DMzGwn.js";import{t as ce}from"./AppModal-iamMwIN3.js";import{t as Q}from"./VRow-CUnXqC5y.js";import{t as qt}from"./VContainer-DiCxppfH.js";import{t as K}from"./VCol-Dyqk9MxY.js";import{t as Ot}from"./VTextarea-D9i4edIJ.js";import{t as jt}from"./use-tours-D2eKJhpP.js";import{n as et,r as tt,t as Ne}from"./ClientProfileAvatar-BkFlUqOF.js";import{a as Pe,s as Kt}from"./rules-BdEZT_MI.js";import{t as Oe}from"./IconPicker-CrvBPfAe.js";import{n as Jt}from"./AppInputFieldTooltip-A4GSeRoR.js";import{n as lt}from"./display-gEESbqKd.js";import{n as mt}from"./rules-BqegNkNz.js";import{t as Yt}from"./ActionListMenu-BSg0dROS.js";import{t as Xt}from"./StackedSegmentGauge-DXFTRbaU.js";import{t as vt}from"./DashboardCard-BXUi4cTO.js";import{t as Ht}from"./AppSwitchRow-C5ladDkI.js";import{a as Qt,n as at,t as nt}from"./gauges-B2hQu1M0.js";import{t as Zt}from"./AuthProviderAvatar-BQZ2DF5P.js";import{n as el,r as tl,t as je}from"./ClientSeatsDonutGauge-DLJ1G2Fx.js";import{n as ot}from"./utils-jlqCUQaj.js";import{t as it}from"./RelativeDateCell-Sp1rA1cR.js";(function(){try{var l=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},a=new Error().stack;a&&(l._sentryDebugIds=l._sentryDebugIds||{},l._sentryDebugIds[a]="e38dfd09-de0e-46b2-ad81-b982bdb1a05e",l._sentryDebugIdIdentifier="sentry-dbid-e38dfd09-de0e-46b2-ad81-b982bdb1a05e")}catch{}})();var ll=["role"],al=["role"],nl=W({__name:"ClientProfileNameCell",props:{client:{},showAvatar:{type:Boolean,default:!0},avatarSize:{default:36},clickable:{type:Boolean,default:!1},nameClass:{},maxNameChars:{},originalName:{}},emits:["click"],setup(l,{emit:a}){const t=l,o=a,g=c(()=>t.client),v=c(()=>t.originalName||g.value.name||""),d=c(()=>{const i=t.maxNameChars;return typeof i=="number"&&i>0?dt(v.value,i):g.value.name}),p=c(()=>d.value!==v.value),y=c(()=>t.nameClass?t.nameClass:t.avatarSize>=36?"":"text-body-3"),b=c(()=>!(!g.value?.avatarSources||g.value.avatarSources.length===0));function s(){t.clickable&&o("click")}return(i,w)=>Y((P(),ee("div",{class:pe(["d-inline-flex align-center whitespace-nowrap pa-1",e(b)?"mega-round":"rounded-xl"]),role:l.clickable?"button":void 0,onClick:s},[Be(i.$slots,"avatar",{},()=>[l.showAvatar?(P(),A(Ne,{key:0,client:e(g),size:l.avatarSize},null,8,["client","size"])):j("",!0)]),M("div",{class:"d-inline-flex align-center pa-1 rounded-xl overlay-opacity-lighten-1",role:l.clickable?"button":void 0},[e(p)?Y((P(),ee("span",{key:0,class:pe(e(y))},[I(T(e(d)),1)],2)),[[xe,e(v),"top"]]):(P(),ee("span",{key:1,class:pe(e(y))},T(e(d)),3)),Be(i.$slots,"after-name")],8,al)],10,ll)),[[he,l.clickable]])}}),we=nl,ol=W({__name:"ClientPermissionsAvatar",props:{canEdit:{type:Boolean},avatarProps:{default:()=>({})}},setup(l){const a=l,t=c(()=>({size:32,icon:a.canEdit?"mdi-check":"mdi-lock",color:a.canEdit?"indigo-lighten-1":"blue-grey-lighten-1",tooltip:a.canEdit?"Client can edit":"Only you can edit",...a.avatarProps}));return(o,g)=>{const v=Wt;return Y((P(),A(v,Pt(It(e(t))),null,16)),[[xe,{text:e(t).tooltip},"top"]])}}}),il=ol,sl=ht(xt(),1),Ce=Te({name:"CircuitBreaker",color:"blue-grey",levels:{debug:!0}}),Ke={threshold:2,windowMs:300*1e3,backoffMs:600*1e3,persist:!1},st=new Map;function Je(l,a){const t=st.get(l);if(t)return t;let o={streak:0,lastFailureAt:0,disabledUntil:0};if(a&&typeof localStorage<"u")try{const g=localStorage.getItem(`cb:${l}`);if(g){const v=JSON.parse(g);v&&typeof v=="object"&&(o={streak:0,lastFailureAt:0,disabledUntil:typeof v.disabledUntil=="number"?v.disabledUntil:0})}}catch{Ce.error("failed to load circuit breaker state",{key:l})}return st.set(l,o),Ce.debug("loaded circuit breaker state",{key:l,state:o}),o}function pt(l,a,t){if(!(!t||typeof localStorage>"u")){try{localStorage.setItem(`cb:${l}`,JSON.stringify({disabledUntil:a.disabledUntil}))}catch{Ce.error("failed to persist circuit breaker state",{key:l})}Ce.debug("persisted circuit breaker state",{key:l,state:a})}}function rl(l,a={}){const{persist:t}={...Ke,...a},o=Je(l,!!t);return!(Date.now()<o.disabledUntil)}function ul(l,a={}){const{persist:t}={...Ke,...a},o=Je(l,!!t);o.streak=0,o.lastFailureAt=0,o.disabledUntil=0,pt(l,o,!!t),Ce.debug("recorded success",{key:l,state:o})}function cl(l,a={}){const{threshold:t,windowMs:o,backoffMs:g,persist:v}={...Ke,...a},d=Je(l,!!v),p=Date.now();p-d.lastFailureAt<=o?d.streak+=1:d.streak=1,d.lastFailureAt=p,d.streak>=t&&(d.disabledUntil=p+g),pt(l,d,!!v),Ce.debug("recorded failure",{key:l,state:d})}async function dl({key:l,primary:a,fallback:t,opts:o={}}
1){if(Ce.debug("withPlApiCircuitBreaker",{key:l}),!rl(l,o))return t();const g=await a();return g&&g.success?(ul(l,o),g):(cl(l,o),t())}var F=Te({name:"useProClients",color:"blue-grey",levels:{debug:!0}}),Ye=250,{activeClientProfile:Fe}=re(We()),{pro:ml}=re(Ae()),{errorNotification:vl}=ut(),H=_("auto"),pl=c(()=>H.value==="paged"),fl=c(()=>H.value==="full"),R=_([]),gl=c(()=>R.value.map(l=>{const a=l.userPreview?.data?.lastActiveAt||l.lastActiveAt;return{id:l.id,name:l.name,icon:l.icon||"",color:l.color||"",created:l.created,updatedAt:void 0,lastActiveAt:a,createdText:(0,sl.default)(l.created).format("MMM D, YYYY"),updatedAtText:lt(void 0,{fallback:"-"}),lastActiveAtText:lt(a,{fallback:"-"}),...l.metrics?{metrics:l.metrics}:{},meta:{permissions:l.meta?.permissions||{clientCanEdit:!1}},link:{status:l.link?.status||{linked:!1}},...l.userPreview&&{userPreview:l.userPreview,avatarSources:At(l.userPreview)}}})),be=_(void 0),ie=_(void 0),Ve=_(!1),fe=_(!1),Se=_(null),Le=_(!1),ft=_(!1),Ue=_(!1),gt=c(()=>!!(be.value&&R.value.length>=(be.value??0))),Cl=c(()=>!!ie.value&&!Ue.value),Ct=_(!1),Xe=c(()=>be.value??0),bt=c(()=>ml.value.maxClients),bl=c(()=>Math.max(0,bt.value-Xe.value)),kt=c(()=>R.value.filter(l=>!!l.link?.status?.linked).length),kl=c(()=>Math.max(0,Xe.value-kt.value)),X=null;function yt(){const l=new Set,a=[];for(const t of R.value)l.has(t.id)||(l.add(t.id),a.push(t));a.length!==R.value.length&&(R.value=a)}async function _t({mode:l,limit:a,cursor:t,includeMetrics:o=!0}){const g=_e.api.unifiedPro.getClients,v=_e.api.pro.getProClients;return dl({key:"unified.get-clients",primary:async()=>ge({url:g,body:{mode:l,limit:a,includeUserPreview:!0,...o?{includeMetrics:!0}:{},...t?{cursor:t}:{}},sendAuthToken:!0}),fallback:async()=>ge({url:v,body:{mode:l,limit:a,includeUserPreview:!0,...t?{cursor:t}:{}},sendAuthToken:!0}),opts:{threshold:2,windowMs:300*1e3,backoffMs:600*1e3,persist:!0}})}async function yl({mode:l,limit:a,cursor:t,includeMetrics:o=!0}={},{updateMode:g="hard"}={}){const v=l??H.value,d=a??(v==="paged"?Ye:void 0),p=!!o;Ct.value=p;const y=await _t({mode:v,limit:d,...t?{cursor:t}:{},includeMetrics:p});if(!y.success)throw new Error(y.message||"failed to fetch pro clients");const b=y.data;if(F.info("fetched pro clients",{data:b,effectiveMode:v,modeBefore:H.value,modeAfter:b.mode}),H.value=b.mode,F.debug("set mode: ",b.mode),g==="patch"){const s=new Map;R.value.forEach((i,w)=>s.set(i.id,w));for(const i of b.items||[]){const w=s.get(i.id);typeof w=="number"?Object.assign(R.value[w],i):R.value.push(i)}yt()}else R.value=b.items||[];be.value=b.total,ie.value=b.nextCursor,ft.value=!0,Ue.value=b.mode==="full"||gt.value}async function wt(l={},{silent:a=!1,updateMode:t}={silent:!1}){if(fe.value){F.debug("skipping new refresh: already refreshing, waiting for current request to finish"),X&&await X;return}if(a&&Ue.value&&(!l.mode||l.mode!=="full")&&!l.includeMetrics){F.debug("skipping silent refresh: full cache present");return}try{Se.value=null,fe.value=!0,Ve.value=!a;const o=H.value==="paged"&&R.value.length>Ye?"patch":"hard",g=t??o;X=yl({...l.mode&&{mode:l.mode},...l.limit&&{limit:l.limit},...l.includeMetrics&&{includeMetrics:l.includeMetrics}},{updateMode:g}),await X}catch(o){Se.value=o?`${o}`:"failed to refresh clients",F.error("failed to refresh clients",{error:o}),R.value=[],be.value=0,ie.value=void 0,vl({text:"Failed to refresh clients",details:`${o}`})}finally{X=null,fe.value=!1,Ve.value=!1}}async function _l(l={}){if(F.debug("loading more pro clients.,.."),fe.value){F.debug("skipped loading more pro clients: refresh in progress"),X&&await X;return}const a=l.mode??H.value,t=l.limit??Ye;if(!ie.value){F.debug("skipped loading more pro clients: no nextCursor",{nextCursor:ie.value,mode:a,limit:t,params:l});return}try{Se.value=null,fe.value=!0,Ve.value=!0,X=(async()=>{const o=await _t({mode:a,limit:t,cursor:ie.value,includeMetrics:Ct.value});if(!o.success)throw new Error(o.message||"failed to load more clients");const g=o.data;F.info("loaded more pro clients",{data:g,params:l,modeBefore:H.value,modeAfter:g.mode}),H.value=g.mode,F.debug("set mode: ",g.mode),R.value=R.value.concat(g.items||[]),yt(),be.value=g.total,ie.value=g.nextCursor,Ue.value=g.mode==="full"||gt.value})(),await X}catch(o){Se.value=o?`${o}`:"failed to load more clients",F.error("failed to load more clients",{error:o})}finally{X=null,fe.value=!1,Ve.value=!1}}function wl({id:l,data:a}){const t=R.value.find(o=>o.id===l);t&&(Object.assign(t,a),F.debug("patched raw client: ",t)),Fe.value?.id===l&&(Object.assign(Fe.value,a),F.debug("patched active client profile: ",Fe.value))}async function hl(){if(!Le.value)try{Le.value=!0,await wt()}catch(l){throw Le.value=!1,F.error("failed to initialize pro clients",{error:l}),l}}hl();function Ie(){return{mode:H,isPagedMode:pl,isFullMode:fl,rawClients:R,clients:gl,totalClients:be,nextCursor:ie,hasMore:Cl,hasFull
1Cache:Ue,refreshing:fe,loading:Ve,hasFetched:ft,initialized:Le,error:Se,clientsUsed:Xe,maxClients:bt,clientsRemaining:bl,linkedClientsCount:kt,unlinkedClientsCount:kl,refreshClients:wt,loadMoreClients:_l,applyLocalClientPatch:wl}}function xl(l){const{saveClientDoc:a}=Ae(),{isPagedMode:t,clients:o,totalClients:g,refreshClients:v,loadMoreClients:d,hasMore:p,loading:y,refreshing:b,hasFullCache:s,applyLocalClientPatch:i}=Ie(),w=_({term:""}),k=_(""),m=Et(n=>{k.value=(n||"").toLowerCase().trim()},250);G(()=>w.value.term,n=>m(n));const h=_([]),x=_(""),S=_(""),L=_(!1);function D(n){return x.value===n}function te(n){return L.value&&(x.value===n||S.value===n)}function B(n,C){C?(x.value=n,S.value=n):x.value===n&&(x.value="")}async function le(n){B(n.id,!1),L.value=!0;try{const C=await a(n);C&&C.clientProfileId&&C.data&&i({id:C.clientProfileId,data:C.data})}finally{L.value=!1}}const ae=c(()=>{const n=k.value;return n?o.value.filter(C=>{const O=(C.name||"").toLowerCase(),oe=(C.link?.status?.email||"").toLowerCase();return O.includes(n)||!!oe&&oe.includes(n)}):o.value}),de=c(()=>ae.value.map(n=>({...n,nameDisplay:dt(n.name||"",32),linkEmail:n.link?.status?.email||"",linkEmailDisplay:St(n.link?.status?.email||"",28),permissionsSort:n.meta?.permissions?.clientCanEdit?"Edit":"View",linkSort:n.link?.status?.linked?n.link?.status?.email?`${n.link.status.email} (Linked)`:"Linked":"zzzzzz",authProviders:(n.userPreview?.authUser?.providerData||[]).map(C=>({...Dt(C.providerId),email:C.email||"",displayName:C.displayName||void 0})),assetsSort:n.metrics?.totalAssets||0,assetsDisplay:typeof n.metrics?.totalAssets=="number"?Qe(n.metrics.totalAssets,2,0):"",netWorthSort:n.metrics?.total||0,netWorthDisplay:typeof n.metrics?.total=="number"?Qe(n.metrics.total,2,0):"",assetsGaugeItems:n.metrics?nt(at(n.metrics),{filterBuckets:C=>C!=="debt",useAssetEquity:!1}):[],netWorthGaugeItems:n.metrics?nt(at(n.metrics),{useAssetEquity:!0}):[],createdSort:(()=>{const C=ot(n.created);return C?C.getTime():0})(),lastActiveSort:(()=>{const C=ot(n.lastActiveAt);return C?C.getTime():0})()}))),ne=c(()=>[{title:"Name",value:"name",sortable:!0},{title:"Email",value:"linkSort",sortable:!0},{title:"Assets",value:"assetsSort",sortable:!0,align:"center"},{title:"Net Worth",value:"netWorthSort",sortable:!0,align:"center"},{title:"Permissions",value:"permissionsSort",sortable:!0},{title:"Created",value:"created",sortable:!0,sortRaw:(n,C)=>(n.createdSort||0)-(C.createdSort||0)},{title:"Last Active",value:"lastActiveAt",sortable:!0,sortRaw:(n,C)=>(n.lastActiveSort||0)-(C.lastActiveSort||0)},{title:"",value:"actions",sortable:!1}]),q=_([]);function me(n){const C=n.map(O=>O.id);Tt(q.value,C)||(q.value.length=0,q.value.push(...C))}function Z(n){return[{name:"Open Profile",icon:"mdi-launch",onClick:()=>l.onOpenProfile(n)},{name:"Invite Client",icon:"mdi-email-send",onClick:()=>l.onInvite(n),visible:!n.link?.status?.linked},{name:"Edit Info",icon:"mdi-pencil",onClick:()=>l.onEditInfo(n)},{name:"Edit Permissions",icon:"mdi-lock",onClick:()=>l.onEditPermissions(n)},{name:"Unlink Client Account",icon:"mdi-link-off",onClick:()=>l.onUnlink(n),visible:!!n.link?.status?.linked},{name:"Delete Client",icon:"mdi-delete",onClick:()=>l.onRemove(n)}].filter(C=>C.visible!==!1)}const J=c(()=>o.value.length),ve=c(()=>`Loaded ${J.value} of ${g.value??0} clients.${p.value?" Click to load more.":""}`);return G(k,async n=>{n&&(s.value||await v({mode:"full"}))}),{search:w,sortBy:h,isPagedMode:t,totalClients:g,loadedClients:J,clientsLoadTooltip:ve,clientsLoading:y,clientsRefreshing:b,hasMore:p,refreshClients:v,loadMoreClients:d,items:de,headers:ne,getClientActions:Z,onUpdateClientTableItems:me,isIconPickerOpenFor:D,isIconPickerLoadingFor:te,onIconPickerMenuUpdate:B,onIconPickerModelUpdate:le}}var Pl={class:"truncate"},Vl={class:"text-body-2 opacity-25"},Sl={class:"d-flex align-center"},Al={key:1},Ml=W({__name:"ProClientsTable",props:{extraLoading:{type:Boolean,default:!1}},emits:["open-profile","invite","edit-info","edit-permissions","unlink","remove","add-client"],setup(l,{emit:a}){const t=a,{screen:o}=ke(),{settings:g}=re($t()),v=n=>`${Nt(n,{siPrefixes:g.value.plots?.dashboardSiPrefixes??!0})}`,d=c(()=>({...Qt,orientation:"horizontal",showLegend:!1,formatter:v,length:48})),p=c(()=>"d-flex flex-column align-center justify-space-between"),y=c(()=>"opacity-100"),b=c(()=>"whitespace-nowrap order-first font-weight-normal mb-05"),s=c(()=>!1),{search:i,sortBy:w,isPagedMode:k,totalClients:m,loadedClients:h,clientsLoadTooltip:x,clientsLoading:S,clientsRefreshing:L,hasMore:D,refreshClients:te,loadMoreClients:B,items:le,headers:ae,getClientActions:de,onUpdateClientTableItems:ne,isIconPickerOpenFor:q,isIconPickerLoadingFor:me,onIconPickerMe
1nuUpdate:Z,onIconPickerModelUpdate:J}=xl({onOpenProfile:n=>t("open-profile",n),onInvite:n=>t("invite",n),onEditInfo:n=>t("edit-info",n),onEditPermissions:n=>t("edit-permissions",n),onUnlink:n=>t("unlink",n),onRemove:n=>t("remove",n)});function ve(n){return ne(n),n}return(n,C)=>{const O=Oe,oe=qe,E=we,V=Xt,ye=Jt,U=Zt,Re=Yt;return P(),A(vt,{"inline-mobile":""},{header:r(()=>[u(Q,{id:"clients-table-toolbar","no-gutters":"",class:"d-flex align-center"},{default:r(()=>[u(ue,{modelValue:e(i).term,"onUpdate:modelValue":C[0]||(C[0]=f=>e(i).term=f),color:"ink",variant:"filled",density:"comfortable","hide-details":"","prepend-inner-icon":"mdi-magnify",placeholder:"Search clients...",autocomplete:"off",clearable:"","clear-icon":"mdi-close",style:{"max-width":"400px"}},null,8,["modelValue"]),u($e),e(k)&&e(m)&&e(m)>0&&e(D)?Y((P(),A(se,{key:0,class:"mr-2 opacity-lighten-2 cursor-pointer",color:"indigo-lighten-1",onClick:e(B)},{default:r(()=>[u(Ee,{size:"16",class:"mr-1"},{default:r(()=>[...C[5]||(C[5]=[I(" mdi-account-group ",-1)])]),_:1}),I(" "+T(e(h))+" / "+T(e(m)),1)]),_:1},8,["onClick"])),[[xe,e(x),"top"]]):j("",!0),Y(u(ze,{icon:"mdi-refresh",variant:"text",size:"small",class:"mr-2",loading:e(S),disabled:e(S)||e(L),onClick:e(te)},null,8,["loading","disabled","onClick"]),[[xe,"Refresh","top"]]),Y((P(),A(ze,{color:"ink",icon:"",size:"small",class:"ml-2",onClick:C[1]||(C[1]=f=>t("add-client"))},{default:r(()=>[u(Ee,null,{default:r(()=>[...C[6]||(C[6]=[I("mdi-plus",-1)])]),_:1})]),_:1})),[[xe,"Add client","top"]])]),_:1})]),content:r(()=>[u(Gt,{"sort-by":e(w),"onUpdate:sortBy":C[3]||(C[3]=f=>N(w)?w.value=f:null),"mobile-breakpoint":100,class:"transparent rows-lg","hide-default-footer":!!(e(o).mobile&&e(le).length<25),headers:e(ae),items:e(le),loading:e(S)||l.extraLoading,"row-props":{class:"py-12"},"items-per-page":e(o).mobile?25:e(g).pro.itemsPerPage,"items-per-page-options":[5,10,15,25],style:{"border-radius":"var(--pl-ref-radius-lg)"},"onUpdate:itemsPerPage":C[4]||(C[4]=f=>e(g).pro.itemsPerPage=f)},{"no-data":r(()=>[u(Q,{"no-gutters":"",class:"d-flex justify-start justify-md-center pa-8"},{default:r(()=>[u(ze,{color:"ink",variant:"flat","prepend-icon":"mdi-plus",onClick:C[2]||(C[2]=f=>t("add-client"))},{default:r(()=>[...C[7]||(C[7]=[I(" Add your first client ",-1)])]),_:1})]),_:1})]),"item.name":r(({item:f})=>[u(E,{client:{...f,name:f.nameDisplay},"original-name":f.name,"avatar-size":42,clickable:"",onClick:$=>t("open-profile",f)},{avatar:r(()=>[u(oe,{"model-value":e(q)(f.id),"close-on-content-click":!1,"max-width":450,disabled:f.avatarSources&&f.avatarSources.length>0,density:"compact","onUpdate:modelValue":$=>e(Z)(f.id,$)},{activator:r(({props:$})=>[Y(u(Ne,z({client:f,size:42,tooltip:{location:"top",text:"Change Avatar",disabled:f.avatarSources&&f.avatarSources.length>0}},$,{loading:e(me)(f.id),onClick:Ge(He=>f.avatarSources&&f.avatarSources.length>0?t("open-profile",f):null,["stop"])}),null,16,["client","tooltip","loading","onClick"]),[[he]])]),default:r(()=>[u(O,{"model-value":f.icon,"color-picker":{modelValue:f.color},visible:e(q)(f.id),onClose:$=>e(Z)(f.id,!1),"onUpdate:modelValue":$=>{f.icon=$,e(J)(f)},"onUpdate:color":$=>{f.color=$,e(J)(f)}},null,8,["model-value","color-picker","visible","onClose","onUpdate:modelValue","onUpdate:color"])]),_:2},1032,["model-value","disabled","onUpdate:modelValue"])]),_:2},1032,["client","original-name","onClick"])]),"item.created":r(({item:f})=>[u(it,{value:f.created},null,8,["value"])]),"item.lastActiveAt":r(({item:f})=>[u(it,{value:f.lastActiveAt},null,8,["value"])]),"item.assetsSort":r(({item:f})=>[M("div",{class:pe(e(p))},[f.assetsGaugeItems&&f.assetsGaugeItems.length>0?(P(),A(V,z({key:0,items:f.assetsGaugeItems,class:e(y)},e(d)),null,16,["items","class"])):j("",!0),e(s)?(P(),A($e,{key:1})):j("",!0),M("span",{class:pe(e(b))},T(f.assetsDisplay),3)],2)]),"item.netWorthSort":r(({item:f})=>[M("div",{class:pe(e(p))},[f.netWorthGaugeItems&&f.netWorthGaugeItems.length>0?(P(),A(V,z({key:0,items:f.netWorthGaugeItems,class:e(y)},e(d)),null,16,["items","class"])):j("",!0),e(s)?(P(),A($e,{key:1})):j("",!0),M("span",{class:pe(e(b))},T(f.netWorthDisplay),3)],2)]),"item.permissionsSort":r(({item:f})=>[f.meta?.permissions?Y((P(),A(il,{key:0,"can-edit":!!f.meta.permissions.clientCanEdit,class:"cursor-pointer",onClick:$=>t("edit-permissions",f)},null,8,["can-edit","onClick"])),[[he]]):j("",!0)]),"item.linkSort":r(({item:f})=>[f.link?.status?(P(),ee(De,{key:0},[f.link.status?.linked?f.link.status?.linked?(P(),A(ye,{key:1,attrs:{location:"top"},width:250},{activator:r(({props:$})=>[Y((P(),A(se,z({class:"whitespace-nowrap truncate",color:"blue-grey-lighten-1",variant:"tonal"},$),{default:r(()=>[M("span",Pl,T(f.linkEmailDisplay),1)]),_:2},1040)),[[he]])]),content:r(()=>[C[10]||(C[10]=M("div",{class:"text-body-2 font-weight-black"},"Client Account",-1)),M("div",Vl,T(f.link.status.email),1)]),_:2},1024)):j("",!0):(P(),A(se,{key:0,color:"blue-grey-lighten-1",class:"whitespace-nowrap opacity-80",variant:"outlined",onClick:$=>t("invite",f)},{default:r(()=>[u(Ee,{size:"small",class:"mr-1"},{default:r(()=>[...C[8]||(C[8]=[I(" mdi-plus ",-1)])]),_:1}),C[9]||(C[9]=I(" Invite ",-1))]),_:1},8,["onClick"]))],64)):j("",!0)]),"item.auth":r(({item:f})=>[M("div",Sl,[f?.authProviders?.length?(P(!0),ee(De,{key:0},rt(f.authProviders,($,He)=>(P(),A(U,{key:`prov-${f.id}-${He}`,"auth-provider":$,"avatar-props":{size:32,class:"mr-1"}}
1,null,8,["auth-provider"]))),128)):(P(),ee("span",Al,"—"))])]),"item.actions":r(({item:f})=>[u(Re,{actions:e(de)(f),"activator-props":{icon:!0,variant:"text",size:"small"}},null,8,["actions"])]),"body.append":r(({items:f})=>[Be(n.$slots,"top",{set:ve(f)})]),_:2},1032,["sort-by","hide-default-footer","headers","items","loading","items-per-page"])]),_:3})}}}),Ul=Ml,Il=W({__name:"ProClientInfoModal",props:{modelValue:{type:Boolean},context:{}},emits:["update:modelValue","saved"],setup(l,{emit:a}){const t=l,o=a,{screen:g}=ke(),v=c({get:()=>t.modelValue,set:s=>o("update:modelValue",s)}),d=_(!1),p=_({name:t.context.client.name||"",icon:t.context.client.icon||"mdi-account",color:t.context.client.color||"blue-grey-lighten-1"});G(()=>t.modelValue,s=>{s&&(p.value.name=t.context.client.name||"",p.value.icon=t.context.client.icon||"mdi-account",p.value.color=t.context.client.color||"blue-grey-lighten-1",d.value=!1)});async function y(){const s={clientProfileId:t.context.client.id,data:{name:p.value.name,icon:p.value.icon,color:p.value.color}},i=await ge({url:_e.api.pro.setProClientData,body:s,sendAuthToken:!0});if(!i.success)throw new Error(i.message);o("saved"),v.value=!1}const b=c(()=>({title:{text:"Client Info"},actions:["Cancel",{text:"Save",color:"ink",onSubmit:y,notifications:{success:"Info saved",error:"Unable to save client info"}}]}));return(s,i)=>{const w=we,k=qe,m=ce;return P(),A(m,z({modelValue:e(v),"onUpdate:modelValue":i[5]||(i[5]=h=>N(v)?v.value=h:null)},e(b)),Me({content:r(()=>[u(Q,{class:"pa-0 ma-0 d-flex justify-start align-center"},{default:r(()=>[u(K,{cols:"auto",class:"pa-0"},{default:r(()=>[u(k,{modelValue:e(d),"onUpdate:modelValue":i[3]||(i[3]=h=>N(d)?d.value=h:null),"close-on-content-click":!1,"max-width":450,transition:"slide-y-transition",disabled:!!t.context.client.avatarSources,density:"compact"},{activator:r(({props:h})=>[Y(u(Ne,z({class:"mr-3",client:{name:e(p).name,icon:e(p).icon,color:e(p).color,avatarSources:t.context.client.avatarSources},size:56},h),null,16,["client"]),[[he]])]),default:r(()=>[u(Oe,{"model-value":e(p).icon,"color-picker":{modelValue:e(p).color},visible:e(d),onClose:i[0]||(i[0]=h=>d.value=!1),"onUpdate:modelValue":i[1]||(i[1]=h=>{e(p).icon=h,d.value=!1}),"onUpdate:color":i[2]||(i[2]=h=>e(p).color=h)},null,8,["model-value","color-picker","visible"])]),_:1},8,["modelValue","disabled"])]),_:1}),u(K,{class:"pa-0 flex-grow-1"},{default:r(()=>[u(ue,{modelValue:e(p).name,"onUpdate:modelValue":i[4]||(i[4]=h=>e(p).name=h),variant:"filled",label:"Client Name",type:"",color:"ink",rules:[e(Pe)]},null,8,["modelValue","rules"])]),_:1})]),_:1})]),_:2},[e(g).mobile?void 0:{name:"append-title",fn:r(()=>[u(w,{client:t.context.client,"avatar-size":32,"show-avatar":"","max-name-chars":24},null,8,["client"])]),key:"0"}]),1040,["modelValue"])}}}),El=Il,Ll=W({__name:"ProClientPermissionsModal",props:{modelValue:{type:Boolean},context:{}},emits:["update:modelValue","saved"],setup(l,{emit:a}){const t=l,o=a,{screen:g}=ke(),v=c({get:()=>t.modelValue,set:s=>o("update:modelValue",s)}),d=_({clientCanEdit:!!t.context.clientCanEdit});G(()=>t.modelValue,s=>{s&&(d.value.clientCanEdit=!!t.context.clientCanEdit)});const p=c(()=>t.context.client.id||"");async function y(){const s=await ge({url:_e.api.pro.setProClientPermissions,body:{clientProfileId:p.value,clientCanEdit:d.value.clientCanEdit},sendAuthToken:!0});if(!s.success)throw new Error(s.message);o("saved"),v.value=!1}const b=c(()=>({title:{text:"Client Permissions"},actions:["Cancel",{text:"Save",onSubmit:y,notifications:{success:"Permissions saved",error:"Unable to save permissions"}}]}));return(s,i)=>{const w=we,k=Ht,m=ce;return P(),A(m,z({modelValue:e(v),"onUpdate:modelValue":i[1]||(i[1]=h=>N(v)?v.value=h:null)},e(b)),Me({content:r(()=>[u(k,{modelValue:e(d).clientCanEdit,"onUpdate:modelValue":i[0]||(i[0]=h=>e(d).clientCanEdit=h),label:"Can Edit",color:"ink",variant:"inline",inset:"","label-class":"font-weight-bold",description:e(d).clientCanEdit?"Client can make and save changes to their plans without you.":"Client can view their plans and make temporary experimental changes, but cannot save them without you."},null,8,["modelValue","description"])]),_:2},[e(g).mobile?void 0:{name:"append-title",fn:r(()=>[u(w,{client:t.context.client,"avatar-size":28,"show-avatar":"","max-name-chars":24},null,8,["client"])]),key:"0"}]),1040,["modelValue"])}}}),Dl=Ll,Tl={class:"text-body-1 font-weight-black"},Nl=W({__name:"ProRequestMoreClientSeatsModal",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(l,{emit:a}){const t=l,o=a,{accountData:g}=re(We()),{isSignedIn:v}=re(Lt()),{clientsUsed:d,maxClients:p,linkedClientsCount:y}=Ie(),b=c({get:()=>t.modelValue,set:h=>o("update:modelValue",h)}),s=_("Request to increase client seats"),i=_(""),w=_("");G(()=>t.modelValue,h=>{h&&(s.value="Request to increase client seats",v.value&&g.value?.email&&(i.value=g.value.email),w.value=[`We would like to increase our client seat limit from ${p.value} to ${p.value+5}.`,"","Thanks!"].join(`
2`))});async function k(){await Vt({type:"contact-support",subject:s.value,email:v.value?g.value?.email||"":i.value,message:w.value,uid:g.value?.uid}),b.value=!1}const m=c(()=>({showClose:!1,actions:["Cancel",{text:"Submit",color:"ink",onSubmit:k,notifications:{success:"Request sent",error:"Unable to send request"}}]}));
2return(h,x)=>{const S=je,L=ce;return P(),A(L,z({modelValue:e(b),"onUpdate:modelValue":x[3]||(x[3]=D=>N(b)?b.value=D:null)},e(m)),{title:r(()=>[M("span",Tl,[x[5]||(x[5]=I(" Current Usage ",-1)),u(se,{color:"ink",class:"font-weight-black mx-1"},{default:r(()=>[u(Ee,{class:"mr-2"},{default:r(()=>[...x[4]||(x[4]=[I("mdi-account-group",-1)])]),_:1}),M("span",null,T(e(d))+" / "+T(e(p)),1)]),_:1})])]),"append-title":r(()=>[u(S,{"max-seats":e(p),"clients-used":e(d),"linked-count":e(y),"show-legend":!1,size:64},null,8,["max-seats","clients-used","linked-count"])]),content:r(()=>[u(Q,{class:"mt-2"},{default:r(()=>[u(K,{cols:"12"},{default:r(()=>[u(ue,{modelValue:e(s),"onUpdate:modelValue":x[0]||(x[0]=D=>N(s)?s.value=D:null),"hide-details":"auto",variant:"filled",label:"Subject",rules:[e(Pe)],"validate-on":"blur"},null,8,["modelValue","rules"])]),_:1}),e(v)?j("",!0):(P(),A(K,{key:0,cols:"12"},{default:r(()=>[u(ue,{modelValue:e(i),"onUpdate:modelValue":x[1]||(x[1]=D=>N(i)?i.value=D:null),"hide-details":"auto",variant:"filled",label:"Email address",rules:[e(Pe),e(Kt)],"validate-on":"blur"},null,8,["modelValue","rules"])]),_:1})),u(K,{cols:"12"},{default:r(()=>[u(Ot,{modelValue:e(w),"onUpdate:modelValue":x[2]||(x[2]=D=>N(w)?w.value=D:null),"hide-details":"auto",variant:"filled",label:"Message",rows:"4",rules:[e(Pe)],onKeydown:Ze(Ge(D=>null,["stop"]),["enter"]),onKeypress:Ze(Ge(D=>null,["stop"]),["enter"])},null,8,["modelValue","rules","onKeydown","onKeypress"])]),_:1})]),_:1})]),_:1},16,["modelValue"])}}}),Rl=Nl,$l={class:"text-body-1 text-medium-emphasis"},zl=W({__name:"ProClientSeatsModal",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(l,{emit:a}){const t=l,o=a,{clientsUsed:g,maxClients:v,clientsRemaining:d,linkedClientsCount:p}=Ie(),y=c({get:()=>t.modelValue,set:k=>o("update:modelValue",k)}),b=c(()=>el(d.value)),s=_(!1);function i(){s.value=!0,y.value=!1}const w=c(()=>({showBack:!0,showClose:!1,title:{text:"Client Seats"},actions:{layout:"row",actions:[{icon:"mdi-email",variant:"tonal",color:"ink",minWidth:52,href:Mt.emailSupport,target:"_blank",rel:"noopener",name:"Email",tooltip:{location:"top",text:"Email [email protected]",interactive:!0}},{icon:"mdi-form-select",variant:"elevated",color:"ink",minWidth:52,onClick:i,name:"Request",tooltip:{location:"top",text:"Request more client seats"}}]}}));return(k,m)=>{const h=je,x=ce,S=Rl;return P(),ee(De,null,[u(x,z({modelValue:y.value,"onUpdate:modelValue":m[0]||(m[0]=L=>y.value=L)},w.value),{"append-title":r(()=>[u(h,{"max-seats":e(v),"clients-used":e(g),"linked-count":e(p),"show-legend":!1,size:64},null,8,["max-seats","clients-used","linked-count"])]),content:r(()=>[M("p",$l,[m[2]||(m[2]=I(" Using ",-1)),u(se,{color:b.value,size:"small",class:"font-weight-black"},{default:r(()=>[I(T(e(g)),1)]),_:1},8,["color"]),m[3]||(m[3]=I(" of ",-1)),u(se,{color:b.value,size:"small",class:"font-weight-black"},{default:r(()=>[I(T(e(v)),1)]),_:1},8,["color"]),m[4]||(m[4]=I(" client seats, with ",-1)),u(se,{color:b.value,size:"small",class:"font-weight-black"},{default:r(()=>[I(T(e(d)),1)]),_:1},8,["color"]),m[5]||(m[5]=I(" remaining. ",-1))]),m[6]||(m[6]=M("p",{class:"text-body-1 text-medium-emphasis"}," To expand your limit for $2/mo per seat, or to learn about bulk pricing options, please send us a message. ",-1))]),_:1},16,["modelValue"]),u(S,{modelValue:s.value,"onUpdate:modelValue":m[1]||(m[1]=L=>s.value=L)},null,8,["modelValue"])],64)}}}),Fl=zl,Bl=W({__name:"ProInviteClientModal",props:{modelValue:{type:Boolean},context:{}},emits:["update:modelValue"],setup(l,{emit:a}){const t=Te({name:"ProInviteClientModal"}),o=l,g=a,{accountData:v}=re(We()),{pro:d}=re(Ae()),{screen:p}=ke(),y=ut(),b=c({get:()=>o.modelValue,set:k=>g("update:modelValue",k)}),s=c(()=>{try{if(o.context.client.id&&d.value?.aid&&v.value?.email){const k={};Object.assign(k,{1:o.context.client.id,2:d.value.aid,3:v.value.email});const m=JSON.stringify(k);return`${zt}/invite/${encodeURIComponent(btoa(m))}`}t.warn("Missing invite link inputs:",{clientId:o.context.client.id,aid:d.value?.aid,email:v.value?.email??"undefined"})}catch(k){t.error("Failed to generate invite link",k)}return""});function i(){if(!s.value){y.errorNotification({text:"Link not available"});return}navigator.clipboard.writeText(s.value),y.successNotification({text:"Copied to clipboard"})}const w=c(()=>({showClose:!1,showBack:!0,title:{text:"Invite Client"},actions:["Cancel",{icon:"mdi-content-copy",text:"Copy Link",color:"ink",onClick:i}]}));return(k,m)=>{const h=we,x=ce;return P(),A(x,z({modelValue:e(b),"onUpdate:modelValue":m[0]||(m[0]=S=>N(b)?b.value=S:null)},e(w)),Me({content:r(()=>[m[1]||(m[1]=M("p",{class:"text-body-2 text-medium-emphasis"}," Share this link with your client so they can view or collaborate on the projections you create together. ",-1)),u(Q,{"no-gutters":"",class:"my-4"},{default:r(()=>[u(ue,{value:e(s),readonly:"","hide-details":"",class:"readonly-unstyled"},null,8,["value"])]),_:1})]),_:2},[e(p).mobile?void 0:{name:"append-title",fn:r(()=>[u(h,{client:o.context.client,"avatar-size":32,"show-avatar":"","max-name-chars":24},null,8,["client"])]),key:"0"}]),1040,["modelValue"])}}}),Gl=Bl,Wl=W({__name:"ProNewClientModal",props:{modelValue:{type:Boolean}},emits:["update:modelValue","created"],setup(l,{emit:a}){const t=l,o=a,g=Ae(),v=c({get:()=>t.modelValue,set:k=>o("update:modelValue",k)}
2),d=_(!1),p=_(""),y=_(tt),b=_(et),s=_({icon:y.value,color:b.value});G(()=>s.value.icon,k=>{y.value=k}),G(()=>s.value.color,k=>{b.value=k}),G(()=>t.modelValue,k=>{k&&(p.value="",y.value=tt,b.value=et,s.value.icon=y.value,s.value.color=b.value,d.value=!1)});async function i(){o("created",await g.createNewClientProfile({name:p.value,icon:y.value,color:b.value})),v.value=!1}const w=c(()=>({title:{text:"Add Client"},actions:["Cancel",{text:"Create",color:"ink",onSubmit:i}]}));return(k,m)=>{const h=qe,x=ce;return P(),A(x,z({modelValue:e(v),"onUpdate:modelValue":m[5]||(m[5]=S=>N(v)?v.value=S:null)},e(w)),{content:r(()=>[u(Q,{class:"pa-0 ma-0 mb-6 d-flex justify-center align-center"},{default:r(()=>[u(K,{cols:"auto",class:"pa-0 pt-3"},{default:r(()=>[u(h,{modelValue:e(d),"onUpdate:modelValue":m[3]||(m[3]=S=>N(d)?d.value=S:null),"close-on-content-click":!1,"max-width":450,transition:"slide-y-transition",density:"compact"},{activator:r(({props:S})=>[u(Ne,z({client:{name:e(p),icon:e(y),color:e(b)},size:56,class:"mr-3"},S),null,16,["client"])]),default:r(()=>[u(Oe,{"model-value":e(s).icon,"color-picker":{modelValue:e(s).color},visible:e(d),onClose:m[0]||(m[0]=S=>d.value=!1),"onUpdate:modelValue":m[1]||(m[1]=S=>{e(s).icon=S,d.value=!1}),"onUpdate:color":m[2]||(m[2]=S=>e(s).color=S)},null,8,["model-value","color-picker","visible"])]),_:1},8,["modelValue"])]),_:1}),u(K,{class:"pa-0 pt-3 flex-grow-1"},{default:r(()=>[u(ue,{modelValue:e(p),"onUpdate:modelValue":m[4]||(m[4]=S=>N(p)?p.value=S:null),variant:"filled",label:"Client Name",type:"",color:"ink",rules:[e(Pe)]},null,8,["modelValue","rules"])]),_:1})]),_:1}),m[6]||(m[6]=M("p",{class:"text-body-1 text-medium-emphasis"}," A new client profile will be created, and you can begin adding details right away. ",-1))]),_:1},16,["modelValue"])}}}),ql=Wl,Ol={class:"text-medium-emphasis"},jl=W({__name:"ProRemoveClientModal",props:{modelValue:{type:Boolean},context:{}},emits:["update:modelValue","deleted"],setup(l,{emit:a}){const t=l,o=a,{screen:g}=ke(),v=c({get:()=>t.modelValue,set:s=>o("update:modelValue",s)}),d=_(""),p=c(()=>t.context.client.name||"");G(()=>t.modelValue,s=>{s&&(d.value="")});async function y(){const s=await ge({url:_e.api.pro.deleteProClient,body:{clientProfileId:t.context.client.id},sendAuthToken:!0});if(!s.success)throw new Error(s.message);o("deleted"),v.value=!1}const b=c(()=>({title:{icon:"mdi-delete",text:"Delete Client"},actions:["Cancel",{text:"Delete",color:"red",disabled:d.value!==p.value,onSubmit:y,notifications:{success:"Deleted successfully",error:"Unable to delete client"}}]}));return(s,i)=>{const w=we,k=ce;return P(),A(k,z({modelValue:e(v),"onUpdate:modelValue":i[1]||(i[1]=m=>N(v)?v.value=m:null)},e(b)),Me({content:r(()=>[M("div",Ol,[M("p",null,[M("b",null,T(e(p)),1),i[2]||(i[2]=I(" and all associated data will be permanently deleted. ",-1))]),M("p",null,[i[3]||(i[3]=I(" Confirm you want to delete by typing the name below: ",-1)),M("b",null,T(e(p)),1)])]),u(Q,{class:"ma-0"},{default:r(()=>[u(K,{cols:"12",sm:"12",class:"pa-0"},{default:r(()=>[u(ue,{modelValue:e(d),"onUpdate:modelValue":i[0]||(i[0]=m=>N(d)?d.value=m:null),placeholder:e(p),rules:[e(mt)(e(p))],variant:"filled","hide-details":"auto",type:"",color:"ink"},null,8,["modelValue","placeholder","rules"])]),_:1})]),_:1})]),_:2},[e(g).mobile?void 0:{name:"append-title",fn:r(()=>[u(w,{client:t.context.client,"avatar-size":28,"show-avatar":"","max-name-chars":24},null,8,["client"])]),key:"0"}]),1040,["modelValue"])}}}),Kl=jl,Jl={class:"text-medium-emphasis"},Yl=W({__name:"ProUnlinkClientModal",props:{modelValue:{type:Boolean},context:{}},emits:["update:modelValue","unlinked"],setup(l,{emit:a}){const t=l,o=a,{screen:g}=ke(),v=c({get:()=>t.modelValue,set:s=>o("update:modelValue",s)}),d=_(""),p=c(()=>t.context.linkedEmail||"");G(()=>t.modelValue,s=>{s&&(d.value="")});async function y(){const s=await ge({url:_e.api.pro.unlinkProClientAccount,body:{clientProfileId:t.context.client.id},sendAuthToken:!0});if(!s.success)throw new Error(s.message);o("unlinked"),v.value=!1}const b=c(()=>({title:{text:"Unlink Client Account"},actions:["Cancel",{text:"Unlink",color:"amber",disabled:d.value!==p.value,onSubmit:y,notifications:{success:"Client unlinked",error:"Unable to unlink client"}}]}));return(s,i)=>{const w=we,k=ce;return P(),A(k,z({modelValue:e(v),"onUpdate:modelValue":i[1]||(i[1]=m=>N(v)?v.value=m:null)},e(b)),Me({content:r(()=>[M("div",Jl,[M("p",null,[i[2]||(i[2]=I(" Access will be revoked for: ",-1)),u(se,{color:"blue-lighten-1"},{default:r(()=>[I(T(e(p)),1)]),_:1})]),i[3]||(i[3]=M("p",null," Confirm you want to revoke access by typing the current client email. ",-1))]),u(Q,null,{default:r(()=>[u(K,{cols:"12",sm:"12",class:"pa-0 pt-4"},{default:r(()=>[u(ue,{modelValue:e(d),"onUpdate:modelValue":i[0]||(i[0]=m=>N(d)?d.value=m:null),placeholder:e(p),rules:[e(mt)(e(p))],variant:"filled","hide-details":"auto",type:"",color:"ink"},null,8,["modelValue","placeholder","rules"])]),_:1})]),_:1})]),_:2},[e(g).mobile?void 0:{name:"append-title",fn:r(()=>[u(w,{client:t.context.client,"avatar-size":28,"show-avatar":"","max-name-chars":24},null,8,["client"])]),key:"0"}]),1040,["modelValue"])}}}),Xl=Yl;function Hl(l){const a={clients:0,total:0,totalAssets:0,totalLiabilities:0,savings:0,investments:{total:0,crypto:0,taxable:0,taxDeferred:0,taxFree:0},debt:0,assetValue:0,assetLiabilities:0,assetEquity:0};for(const t of l)t&&(a.clients+=1,a.total+=t.total,a.totalAssets+=t.totalAssets,a.totalLiabilities+=t.totalLiabilities,a.savings+=t.savings,a.debt+=t.debt,a.assetValue+=t.assetValue,a.assetLiabilities+=t.assetLiabilities,a.assetEquity+=t.asset
2Equity,a.investments.total+=t.investments.total,a.investments.crypto+=t.investments.crypto,a.investments.taxable+=t.investments.taxable,a.investments.taxDeferred+=t.investments.taxDeferred,a.investments.taxFree+=t.investments.taxFree);return a}function Ql(l){const{screen:a}=ke(),{totalClients:t,loading:o,rawClients:g,hasFullCache:v,refreshClients:d,clientsUsed:p,maxClients:y,clientsRemaining:b}=Ie(),s=_(!1),i=_(!1),w=c(()=>s.value||i.value),k=_(!1),m=c(()=>g.value.map(V=>V.metrics).filter(Boolean)),h=c(()=>t.value&&t.value>0),x=c(()=>m.value.length>0),S=c(()=>x.value&&!k.value?"local":"server"),L=c(()=>S.value==="local"),D=c(()=>S.value==="server"),te=c(()=>L.value?o.value:w.value),B=c(()=>m.value.length===0?null:Hl(m.value)),le=c(()=>m.value.length),ae=c(()=>t.value||0),de=c(()=>L.value&&!v.value),ne=_(null),q=c(()=>D.value?ne.value:B.value),me=c(()=>q.value?.totalAssets||0);async function Z(){if(!i.value){s.value=!0,i.value=!0;try{const V=await ge({url:Ft.api.unifiedPro.getGlobalAccountStats,body:{},sendAuthToken:!0,allowConcurrent:!0});if(!V.success||!V.data)return;const ye=V.data;typeof ye.totalAssets=="number"&&(ne.value=ye,k.value=!0)}finally{s.value=!1,i.value=!1}}}async function J(){if(!s.value){s.value=!0;try{try{await d({includeMetrics:!0},{silent:!0,updateMode:"patch"})}catch{}await Ut(),x.value||!h.value?(k.value=!1,s.value=!1):await Z()}finally{L.value&&(s.value=!1)}}}ct(()=>{J()});const ve=c(()=>({name:"Compute All",icon:"mdi-memory",loading:i.value,description:`Currently showing metrics for ${le.value}/${ae.value} clients.`,onClick:Z})),n=c(()=>de.value&&!te.value&&ae.value>0),C=c(()=>[...n.value?[ve.value]:[]]),O=c(()=>tl({clientsUsed:p.value,maxClients:y.value,clientsRemaining:b.value,clientsLoading:o.value,metrics:q.value||void 0,metricsLoading:te.value,includeNetWorth:!a.value.mobile,actions:C.value})),oe=c(()=>O.value.auaSegmentGauge),E=c(()=>O.value.netWorthSegmentGauge);return{assetsUnderAdvisement:me,refreshGlobalAccountStats:J,statCards:c(()=>O.value.statCards.map(V=>V.id==="clientSeats"&&l?.onClickClientSeats?{...V,onClickIcon:l.onClickClientSeats,iconClickable:!0}:V)),denseStatCards:c(()=>!1),auaSegmentGauge:oe,netWorthSegmentGauge:E}}var Zl=W({__name:"ProDashboardPage",setup(l){const a=Te({color:"black"}),t=Ae(),{postCheckoutModal:o}=Rt(),{setTour:g}=jt(),{pro:v}=re(t),{loadClientProfile:d}=t,p=_(!1),y=_(!1),{statCards:b,denseStatCards:s}=Ql({onClickClientSeats:()=>{y.value=!0}}),i=_({visible:!1,context:{client:{}}}),w=_({visible:!1,context:{client:{},clientCanEdit:!1}}),k=_({visible:!1,context:{client:{}}}),m=_({visible:!1,context:{client:{}}}),h=_({visible:!1,context:{client:{},linkedEmail:""}}),{clients:x,totalClients:S,clientsUsed:L,maxClients:D,linkedClientsCount:te,refreshClients:B,loading:le,hasFetched:ae}=Ie();async function de(){await B()}async function ne(){await B()}async function q(){await B()}async function me(){await B()}async function Z(){await B()}function J(){if((S.value??x.value.length)>=v.value.maxClients){y.value=!0;return}p.value=!0}function ve(E){i.value.visible=!0,i.value.context.client=E}function n(E){if(!E.meta?.permissions){a.error("cannot edit client permissions: failed to resolve client.meta.permissions");return}w.value.visible=!0,w.value.context.client=E,w.value.context.clientCanEdit=!!E.meta.permissions.clientCanEdit}function C(E){k.value.visible=!0,k.value.context.client=E}function O(E){m.value.visible=!0,m.value.context.client=E}function oe(E){h.value.visible=!0,h.value.context.client=E,h.value.context.linkedEmail=E.link?.status?.email||""}return ct(()=>{if(!v.value.hasSeenProTour){if(o.value.visible){const E=G(()=>o.value.visible,V=>{V||(g("pro"),E())});return}g("pro")}}),Bt(async()=>{await B({},{silent:ae.value})}),G(x,()=>{a.debug("watched clients: ",x.value)}),(E,V)=>{const ye=Ul;return P(),ee("div",null,[u(Fl,{modelValue:y.value,"onUpdate:modelValue":V[0]||(V[0]=U=>y.value=U)},null,8,["modelValue"]),u(ql,{modelValue:p.value,"onUpdate:modelValue":V[1]||(V[1]=U=>p.value=U),onCreated:de},null,8,["modelValue"]),u(Kl,{modelValue:i.value.visible,"onUpdate:modelValue":V[2]||(V[2]=U=>i.value.visible=U),context:i.value.context,onDeleted:ne},null,8,["modelValue","context"]),u(Dl,{modelValue:w.value.visible,"onUpdate:modelValue":V[3]||(V[3]=U=>w.value.visible=U),context:w.value.context,onSaved:q},null,8,["modelValue","context"]),u(El,{modelValue:k.value.visible,"onUpdate:modelValue":V[4]||(V[4]=U=>k.value.visible=U),context:k.value.context,onSaved:me},null,8,["modelValue","context"]),u(Gl,{modelValue:m.value.visible,"onUpdate:modelValue":V[5]||(V[5]=U=>m.value.visible=U),context:m.value.context},null,8,["modelValue","context"]),u(Xl,{modelValue:h.value.visible,"onUpdate:modelValue":V[6]||(V[6]=U=>h.value.visible=U),context:h.value.context,onUnlinked:Z},null,8,["modelValue","context"]),u(qt,{fluid:"",class:"pa-4 pt-lg-8"},{default:r(()=>[u(Q,null,{default:r(()=>[(P(!0),ee(De,null,rt(e(b),U=>(P(),A(K,{key:U.name,cols:"12",md:"4"},{default:r(()=>[u(vt,z({ref_for:!0},U,{"avatar-location":e(s)?"left":"right","avatar-type":e(s)?"icon":"avatar","name-class":e(s)?"text-body-2":void 0,"value-loading-indicator-type":"fade",class:"fill-height","onClick:icon":Re=>U.onClickIcon&&U.onClickIcon()}),{right:r(()=>[U.id==="clientSeats"?(P(),A(je,{key:0,"max-seats":e(D),"clients-used":e(L),"linked-count":e(te),loading:e(le),class:"cursor-pointer",onClick:V[7]||(V[7]=Re=>y.value=!0)},null,8,["max-seats","clients-used","linked-count","loading"])):j("",!0)]),_:2},1040,["avatar-location","avatar-type","name-class","onClick:icon"])]),_:2},1024))),128))]),_:1}),u(Q,{id:"clients-section"},{default:r(()=>[u(K,{id:"clients-table-card",cols:"12"},{default:r(()=>[u(ye,{"extra-loading":e(v).loading,onOpenProfile:e(d),onInvite:O,onEditInfo:C,onEditPermissions:n,onUnlink:oe,onRemove:ve,onAddClient:J},null,8,["extra-loading","onOpenProfile"])]),_:1})]),_:1})]),_:1})])}}}),Ea=Zl;export{Ea as default};
3
4//# sourceMappingURL=ProDashboardPage-j6hbpl8C.js.map

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.