PageSourceSearch

https://roofv.ai/build/assets/Team-Dc3AMNGz.js

js roofv.ai collected 2026-10-05 14:24:47 UTC 11,081 bytes, 1 lines download raw bytes

1import{d as W,k as H,e as I,o as l,q as y,g as p,u as e,a as s,c as n,b as v,t as a,F as b,f,s as u,w as K,l as _,v as X,K as C,X as k,L as $}from"./vue-runtime-BQRJclI-.js";import{_ as z,a as w}from"./Layout.vue_vue_type_script_setup_true_lang-S9ndy8i3.js";import{_ as A}from"./InputError.vue_vue_type_script_setup_true_lang-DdokbPOq.js";import{_ as S}from"./index-Cb2RBfEp.js";import{t as o}from"./index-DW7t84mx.js";import{b as G}from"./AppLayout.vue_vue_type_script_setup_true_lang-rjYNyxvY.js";import{t as J}from"./analytics-n60hlbQi.js";import{C as V,m as Q,W as j}from"./app-CEZoZvWt.js";import{C as U,k as Y}from"./site-icons-BpOMQBK2.js";import{R as Z}from"./refresh-cw-CewpAoVU.js";import{T as M}from"./trash-2-KZyNtq4H.js";import"./Separator.vue_vue_type_script_setup_true_lang-CINbfgDb.js";import"./index-BtjU-9jb.js";import"./locale-CEc2pebt.js";import"./index-CzdlQSCI.js";import"./DropdownMenuTrigger.vue_vue_type_script_setup_true_lang-DEvFGbvk.js";import"./lucide-core-CAjyj2By.js";import"./DialogTitle.vue_vue_type_script_setup_true_lang-CGM6RULP.js";import"./workspaceUi-DowentTg.js";import"./api-EKzEAybP.js";import"./http-BoUr6vaJ.js";import"./file-spreadsheet-7TIKSeai.js";import"./chevron-right-Bi-N5nf3.js";import"./plus-BmU2lAth.js";import"./AppToast.vue_vue_type_script_setup_true_lang-DT3BCsva.js";import"./SessionExpiredNotice.vue_vue_type_script_setup_true_lang-C0jNvULT.js";const ee={class:"space-y-10"},te={key:0,class:"space-y-3"},se={class:"rounded-xl border border-vr-amber/40 bg-vr-amber/5 p-4"},oe={class:"text-sm font-bold text-vr-text"},re={class:"mt-2 space-y-1.5 text-sm text-vr-dim"},ae={class:"mt-3 text-sm text-vr-text"},le={key:1,class:"space-y-4"},ne={class:"flex flex-col gap-3 sm:flex-row"},ie={class:"flex-1"},ce=["value"],de={class:"text-xs text-vr-dim"},me={class:"flex flex-wrap items-center gap-3 text-sm"},pe={class:"vr-eyebrow"},ue={class:"flex items-center gap-1.5"},ve={class:"flex items-center gap-1.5"},_e={key:0,class:"max-h-56 overflow-y-auto rounded-lg border border-vr-line bg-vr-panel p-2"},be={key:0,class:"px-2 py-3 text-sm text-vr-dim"},xe=["value"],fe={class:"truncate text-vr-text"},he={key:1,class:"text-xs text-vr-amber"},ge={key:2,class:"space-y-3"},ye={class:"divide-y divide-vr-line/60 rounded-xl border border-vr-line"},ke={class:"min-w-0"},we={class:"truncate text-sm font-medium text-vr-text"},je={class:"font-mono text-[11px] text-vr-dim"},Ce={key:0,class:"text-red-400"},$e={class:"flex items-center gap-1"},Se=["onClick"],Ve=["onClick"],Ue={class:"space-y-3"},Me={class:"space-y-2"},Te={class:"flex flex-wrap items-center justify-between gap-2"},Be={class:"min-w-0"},qe={class:"truncate text-sm font-semibold text-vr-text"},Fe={key:0,class:"text-xs font-normal text-vr-dim"},Le={class:"truncate font-mono text-[11px] text-vr-dim"},Ne={key:0,class:"flex items-center gap-1"},Re=["onClick"],Ee=["onClick"],Oe={key:1,class:"vr-eyebrow"},De={key:0,class:"mt-3 space-y-3 border-t border-vr-line/60 pt-3"},Pe={class:"flex flex-wrap items-center gap-3 text-sm"},We=["value"],He={class:"flex items-center gap-1.5"},Ie={class:"flex items-center gap-1.5"},Ke={key:0,class:"max-h-56 overflow-y-auto rounded-lg border border-vr-line p-2"},Xe=["value"],ze={class:"truncate text-vr-text"},gt=W({__name:"Team",props:{members:{},invites:{},projects:{},roles:{},onTeamPlan:{type:Boolean},seats:{}},setup(T){const x=T,B=[{title:o("settings.team"),href:"/settings/team"}],q=r=>o(`team.role_${r}_help`),g=r=>o(`team.role_${r}`),F=r=>r.accessScope==="all"?o("team.all_jobs"):"projectCount"in r&&r.projectCount!=null?o("team.job_count",{count:r.projectCount}):o("team.specific_jobs"),d=V({email:"",role:"member",access_scope:"all",projects:[]});function L(){d.post("/settings/team/invitations",{preserveScroll:!0,onSuccess:()=>d.reset()})}function N(r){j.post(`/settings/team/invitations/${r}/resend`,{},{preserveScroll:!0})}function R(r){window.confirm(o("team.revoke_confirm"))&&j.delete(`/settings/team/invitations/${r}`,{preserveScroll:!0})}const h=H(null),m=V({role:"member",access_scope:"all",projects:[]});function E(r){h.value=r.id,m.clearErrors(),m.role=r.role==="owner"?"admin":r.role,m.access_scope=r.accessScope,m.projects=[...r.grantedUuids]}function O(r){m.patch(`/settings/team/members/${r.id}`,{preserveScroll:!0,onSuccess:()=>h.value=null})}function D(r){window.confirm(o("team.remove_confirm",{name:r.name||r.email}))&&j.delete(`/settings/team/members/${r.id}`,{preserveScroll:!0})}return(r,i)=>(l(),I(G,{breadcrumbs:B},{default:y(()=>[p(e(Q),{title:`${e(o)("settings.team")} — RoofV`},null,8,["title"]),p(z,null,{default:y(()=>[s("div",ee,[x.onTeamPlan?(l(),n("section",le,[p(w,{title:e(o)("team.invite_heading"),description:e(o)("team.invite_description",{remaining:x.seats.remaining,included:x.seats.included})},null,8,["title","description"]),s("form",{class:"space-y-3",onSubmit:K(L,["prevent"])},[s("div",ne,[s("div",ie,[_(s("input",{"onUpdate:modelValue":i[1]||(i[1]=t=>e(d).email=t),type:"email",placeholder:"[email protected]",class:"vr-control-h w-full rounded-lg border border-vr-line bg-vr-panel px-3 text-sm text-vr-text focus:border-vr-amber focus:outline-none"},null,512),[[X,e(d).email]]),p(A,{message:e(d).errors.email},null,8,["message"])]),_(s("select",{"onUpdate:modelValue":i[2]||(i[2]=t=>e(d).role=t),class:"vr-control-h rounded-lg border border-vr-line bg-vr-panel px-3 text-sm text-vr-text focus:border-vr-amber focus:outline-none"},[(l(!0),n(b,null,f(r.roles,t=>(l(),n("option",{key:t,value:t},a(g(t)),9,ce))),128))],512),[[C,e(d).role]])]),s("p",de,a(q(e(d).role)),1),s("div",me,[s("span",pe,a(e(o
1)("team.job_access")),1),s("label",ue,[_(s("input",{"onUpdate:modelValue":i[3]||(i[3]=t=>e(d).access_scope=t),type:"radio",value:"all",class:"text-vr-amber focus:ring-vr-amber"},null,512),[[k,e(d).access_scope]]),u(" "+a(e(o)("team.all_jobs")),1)]),s("label",ve,[_(s("input",{"onUpdate:modelValue":i[4]||(i[4]=t=>e(d).access_scope=t),type:"radio",value:"specific",class:"text-vr-amber focus:ring-vr-amber"},null,512),[[k,e(d).access_scope]]),u(" "+a(e(o)("team.specific_jobs")),1)])]),e(d).access_scope==="specific"?(l(),n("div",_e,[r.projects.length===0?(l(),n("p",be,a(e(o)("dashboard.no_jobs")),1)):v("",!0),(l(!0),n(b,null,f(r.projects,t=>(l(),n("label",{key:t.uuid,class:"flex items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-vr-raise/50"},[_(s("input",{"onUpdate:modelValue":i[5]||(i[5]=c=>e(d).projects=c),type:"checkbox",value:t.uuid,class:"rounded border-vr-line text-vr-amber focus:ring-vr-amber"},null,8,xe),[[$,e(d).projects]]),s("span",fe,a(t.address),1)]))),128))])):v("",!0),x.seats.remaining<1?(l(),n("p",he,a(e(o)("team.seats_full",{included:x.seats.included})),1)):v("",!0),p(e(S),{type:"submit",disabled:e(d).processing||!e(d).email||x.seats.remaining<1},{default:y(()=>[p(e(Y),{class:"h-4 w-4"}),u(" "+a(e(o)("team.send_invitation")),1)]),_:1},8,["disabled"])],32)])):(l(),n("section",te,[p(w,{title:e(o)("team.invite_heading"),description:e(o)("team.seats_plan")},null,8,["title","description"]),s("div",se,[s("p",oe,a(e(o)("team.wall_title")),1),s("ul",re,[(l(),n(b,null,f(["team.wall_b1","team.wall_b2","team.wall_b3"],t=>s("li",{key:t,class:"flex items-start gap-2"},[p(e(U),{class:"mt-0.5 h-4 w-4 shrink-0 text-vr-ok","aria-hidden":"true"}),u(" "+a(e(o)(t)),1)])),64))]),s("p",ae,a(e(o)("team.requires_plan",{seats:x.seats.included}))+" "+a(e(o)("team.contact_support_larger")),1),s("a",{href:"/pricing",class:"vr-tap mt-3 inline-flex h-9 items-center rounded-lg bg-vr-amber px-4 text-sm font-bold text-vr-amberink transition hover:bg-vr-amberhi",onClick:i[0]||(i[0]=t=>e(J)("upgrade_clicked",{surface:"team"}))},a(e(o)("team.upgrade_team")),1)])])),r.invites.length?(l(),n("section",ge,[p(w,{title:e(o)("team.pending_invitations")},null,8,["title"]),s("div",ye,[(l(!0),n(b,null,f(r.invites,t=>(l(),n("div",{key:t.id,class:"flex flex-wrap items-center justify-between gap-2 p-3"},[s("div",ke,[s("p",we,a(t.email),1),s("p",je,[u(a(g(t.role))+" · "+a(t.accessScope==="all"?e(o)("team.all_jobs"):e(o)("team.specific_jobs"))+" ",1),t.expired?(l(),n("span",Ce,"· "+a(e(o)("team.expired")),1)):v("",!0)])]),s("div",$e,[s("button",{type:"button",class:"vr-tap flex h-9 items-center gap-1 rounded-lg border border-vr-line px-2.5 text-xs text-vr-dim hover:text-vr-text",onClick:c=>N(t.id)},[p(e(Z),{class:"h-3.5 w-3.5"}),u(" "+a(e(o)("team.resend")),1)],8,Se),s("button",{type:"button",class:"vr-tap-sq flex h-9 w-9 items-center justify-center rounded-lg text-vr-dim hover:bg-red-400/10 hover:text-red-400",onClick:c=>R(t.id)},[p(e(M),{class:"h-4 w-4"})],8,Ve)])]))),128))])])):v("",!0),s("section",Ue,[p(w,{title:e(o)("team.members"),description:e(o)("team.member_count",{count:r.members.length})},null,8,["title","description"]),s("div",Me,[(l(!0),n(b,null,f(r.members,t=>(l(),n("div",{key:t.id,class:"rounded-xl border border-vr-line bg-vr-panel p-3"},[s("div",Te,[s("div",Be,[s("p",qe,[u(a(t.name||t.email)+" ",1),t.isSelf?(l(),n("span",Fe,"("+a(e(o)("team.you"))+")",1)):v("",!0)]),s("p",Le,[u(a(t.email)+" · "+a(g(t.role)),1),t.isOwner?v("",!0):(l(),n(b,{key:0},[u(" · "+a(F(t)),1)],64))])]),!t.isOwner&&!t.isSelf?(l(),n("div",Ne,[s("button",{type:"button",class:"h-9 rounded-lg border border-vr-line px-2.5 text-xs text-vr-dim hover:text-vr-text",onClick:c=>h.value===t.id?h.value=null:E(t)},a(h.value===t.id?e(o)("common.cancel"):e(o)("common.edit")),9,Re),s("button",{type:"button",class:"vr-tap-sq flex h-9 w-9 items-center justify-center rounded-lg text-vr-dim hover:bg-red-400/10 hover:text-red-400",onClick:c=>D(t)},[p(e(M),{class:"h-4 w-4"})],8,Ee)])):t.isOwner?(l(),n("span",Oe,a(e(o)("team.owner")),1)):v("",!0)]),h.value===t.id?(l(),n("div",De,[s("div",Pe,[_(s("select",{"onUpdate:modelValue":i[6]||(i[6]=c=>e(m).role=c),class:"vr-control-h rounded-lg border border-vr-line bg-vr-panel px-3 text-sm focus:border-vr-amber focus:outline-none"},[(l(!0),n(b,null,f(r.roles,c=>(l(),n("option",{key:c,value:c},a(g(c)),9,We))),128))],512),[[C,e(m).role]]),s("label",He,[_(s("input",{"onUpdate:modelValue":i[7]||(i[7]=c=>e(m).access_scope=c),type:"radio",value:"all",class:"text-vr-amber"},null,512),[[k,e(m).access_scope]]),u(" "+a(e(o)("team.all_jobs")),1)]),s("label",Ie,[_(s("input",{"onUpdate:modelValue":i[8]||(i[8]=c=>e(m).access_scope=c),type:"radio",value:"specific",class:"text-vr-amber"},null,512),[[k,e(m).access_scope]]),u(" "+a(e(o)("team.specific_jobs")),1)])]),e(m).access_scope==="specific"?(l(),n("div",Ke,[(l(!0),n(b,null,f(r.projects,c=>(l(),n("label",{key:c.uuid,class:"flex items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-vr-raise/50"},[_(s("input",{"onUpdate:modelValue":i[9]||(i[9]=P=>e(m).projects=P),type:"checkbox",value:c.uuid,class:"rounded border-vr-line text-vr-amber"},null,8,Xe),[[$,e(m).projects]]),s("span",ze,a(c.address),1)]))),128))])):v("",!0),p(e(S),{type:"button",disabled:e(m).processing,onClick:c=>O(t)},{default:y(()=>[p(e(U),{class:"h-4 w-4"}),u(" "+a(e(o)("team.save_changes")),1)]),_:2},1032,["disabled","onClick"])])):v("",!0)]))),128))])])])]),_:1})]),_:1}))}});
1export{gt 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.