1import{d as C,aA as fe,q as _,u as e,ct as ve,a7 as pe,aB as _e,w as s,a2 as ge,o as d,c4 as B,b as a,e as o,t as p,a as u,bw as H,l as ye,c as k,f as b,_ as $,ai as P,cf as be,c7 as z,cu as X,bu as L,b_ as q,bZ as F,br as V,c2 as Q,cv as D,bv as G,F as T,y as j,cw as W,cx as xe,cy as ee,bI as $e,bE as ke,bF as we,bG as Ce,bH as Se,aM as ze,cz as Ie,cA as Me,i as Z,cB as Ee,cC as Ue,aq as Re,ap as Ne,al as he,am as Oe,an as Ae,aY as Be,cD as Te,G as Ve,j as De,I as je,R as Pe,z as S,bB as Le,bJ as qe,bC as Fe,Y as x,cE as R,T as Ge,U as Je}from"./index-44DxmEFA.js";import{_ as Ye,a as Ke,b as Ze,c as He,d as Xe}from"./index-m0rCN635.js";import{_ as te}from"./Input.vue_vue_type_script_setup_true_lang-DWM0zgxr.js";import{_ as Qe}from"./EmptyState.vue_vue_type_script_setup_true_lang-DfiPYrW4.js";import{_ as We}from"./ListSkeleton.vue_vue_type_script_setup_true_lang-DTAEdAch.js";import{_ as et}from"./DialogFooter.vue_vue_type_script_setup_true_lang-CAmUUukf.js";import{_ as tt}from"./SectionPage.vue_vue_type_script_setup_true_lang-cUsvsIMX.js";import"./Loader.vue_vue_type_script_setup_true_lang-DxGl7QtU.js";import"./AlertTitle.vue_vue_type_script_setup_true_lang-Dxf4ZPw7.js";const st=C({__name:"SheetDescription",props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(l){const v=l,n=fe(v,"class");return(m,g)=>(d(),_(e(ve),pe({class:e(_e)("text-sm text-muted-foreground",v.class)},e(n)),{default:s(()=>[ge(m.$slots,"default")]),_:3},16,["class"]))}}),at={class:"min-h-0 flex-1 space-y-4 overflow-y-auto px-5 py-4"},nt={class:"space-y-1.5"},it={key:0,class:"text-xs text-destructive"},ot=C({__name:"InviteMemberSheet",props:z({orgName:{},inviting:{type:Boolean},inviteError:{}},{open:{type:Boolean,required:!0},openModifiers:{},email:{required:!0},emailModifiers:{}}),emits:z(["send","close"],["update:open","update:email"]),setup(l,{emit:v}){const n=l,m=v,g=B(l,"open"),f=B(l,"email");return(i,t)=>(d(),_(e(Ye),{open:g.value,"onUpdate:open":t[4]||(t[4]=r=>g.value=r)},{default:s(()=>[a(e(Ke),{side:"right",size:"md",class:"flex h-full w-full max-w-md flex-col p-0 sm:max-w-md"},{default:s(()=>[a(e(Ze),{class:"shrink-0 border-b px-5 py-4"},{default:s(()=>[a(e(He),null,{default:s(()=>[...t[5]||(t[5]=[o("Invite Team Member",-1)])]),_:1}),a(e(st),null,{default:s(()=>[o(" Send a member invitation for "+p(n.orgName)+". ",1)]),_:1})]),_:1}),u("div",at,[u("div",nt,[a(e(H),{for:"invite-email"},{default:s(()=>[...t[6]||(t[6]=[o(" Email Address ",-1),u("span",{class:"text-destructive"},"*",-1)])]),_:1}),a(e(te),{id:"invite-email",modelValue:f.value,"onUpdate:modelValue":t[0]||(t[0]=r=>f.value=r),type:"email",placeholder:"[email protected]",class:"w-full",autofocus:"",onKeyup:t[1]||(t[1]=ye(r=>m("send"),["enter"]))},null,8,["modelValue"]),n.inviteError?(d(),k("p",it,p(n.inviteError),1)):b("",!0)]),t[7]||(t[7]=u("p",{class:"text-sm text-muted-foreground"},[o(" They'll receive an email with a link to join your organization as a "),u("strong",null,"Member"),o(". ")],-1))]),a(e(Xe),{class:"shrink-0 justify-end border-t px-5 py-4"},{default:s(()=>[a(e($),{variant:"ghost",size:"sm",onClick:t[2]||(t[2]=r=>m("close"))},{default:s(()=>[...t[8]||(t[8]=[o(" Cancel ",-1)])]),_:1}),a(e($),{size:"sm",disabled:n.inviting||!f.value.trim(),onClick:t[3]||(t[3]=r=>m("send"))},{default:s(()=>[n.inviting?(d(),_(e(P),{key:0,class:"mr-2 size-4 animate-spin"})):(d(),_(e(be),{key:1,class:"mr-2 size-4"})),t[9]||(t[9]=o(" Send Invitation ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]))}});function A(l){return l.name||l.full_name||l.email}function lt(l){const v=l.trim().split(/[\s@._-]+/).filter(Boolean);return(v.length>1?v.slice(0,2):v.slice(0,1)).map(n=>{var m;return((m=n[0])==null?void 0:m.toUpperCase())??""}).join("")}function se(l){return l?new Date(l).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"N/A"}function rt(l){return X[l]||l}const dt=Object.entries(X).filter(([l])=>l!=="member").map(([l,v])=>({value:l,label:v})),ut={class:"flex items-center gap-2"},mt={key:0,class:"p-4"},ct={key:1,class:"divide-y divide-border"},ft={class:"flex min-w-0 items-center gap-3"},vt={class:"min-w-0"},pt={class:"truncate text-sm font-medium text-foreground"},_t={key:0,class:"truncate text-xs text-muted-foreground"},gt={class:"mt-1 flex items-center gap-2 text-xs text-muted-foreground"},yt={class:"flex shrink-0 items-center gap-2 sm:justify-end"},bt=C({__name:"MembersCard",props:{members:{},isAdmin:{type:Boolean},currentUserId:{},loading:{type:Boolean,default:!1}},emits:["invite","update-role","remove"],setup(l,{emit:v}){const n=l,m=v;function g(f){return n.isAdmin&&f.user_id!==n.currentUserId}return(f,i)=>(d(),_(e(L),{class:"rounded-md shadow-none"},{default:s(()=>[a(e(q),{class:"flex flex-row items-center justify-between gap-4 p-4"},{default:s(()=>[u("div",null,[u("div",ut,[a(e(F),{class:"text-base"},{default:s(()=>[...i[2]||(i[2]=[o("Team Members",-1)])]),_:1}),a(e(V),{variant:"metadata",class:"tabular-nums"},{default:s(()=>[o(p(n.members.length),1)]),_:1}
1)]),a(e(Q),{class:"mt-1"},{default:s(()=>[...i[3]||(i[3]=[o(" Manage who has access to your organization ",-1)])]),_:1})]),n.isAdmin?(d(),_(e($),{key:0,size:"sm",variant:"outline",onClick:i[0]||(i[0]=t=>m("invite"))},{default:s(()=>[a(e(D),{class:"size-4"}),i[4]||(i[4]=o(" Invite Member ",-1))]),_:1})):b("",!0)]),_:1}),a(e(G),{class:"p-0"},{default:s(()=>[n.loading&&n.members.length===0?(d(),k("div",mt,[a(We,{rows:3,"row-class":"h-14"})])):n.members.length>0?(d(),k("div",ct,[(d(!0),k(T,null,j(n.members,t=>(d(),k("div",{key:t.id,class:"flex flex-col gap-3 px-4 py-3 transition-colors hover:bg-muted/50 sm:flex-row sm:items-center sm:justify-between"},[u("div",ft,[a(e(W),{class:"shrink-0"},{default:s(()=>[t.avatar_url?(d(),_(e(xe),{key:0,src:t.avatar_url,alt:e(A)(t)},null,8,["src","alt"])):b("",!0),a(e(ee),null,{default:s(()=>[o(p(e(lt)(e(A)(t))),1)]),_:2},1024)]),_:2},1024),u("div",vt,[u("p",pt,p(e(A)(t)),1),e(A)(t)!==t.email?(d(),k("p",_t,p(t.email),1)):b("",!0),u("div",gt,[a(e(V),{variant:t.status==="active"?"success":"warning"},{default:s(()=>[o(p(t.status==="active"?"Active":"Pending"),1)]),_:2},1032,["variant"]),u("span",null," Joined "+p(e(se)(t.joined_at||t.invited_at)),1)])])]),u("div",yt,[a(e($e),{modelValue:t.role,"onUpdate:modelValue":[r=>t.role=r,r=>m("update-role",t)],disabled:!g(t)},{default:s(()=>[a(e(ke),{class:"h-8 w-32 text-xs"},{default:s(()=>[a(e(we))]),_:1}),a(e(Ce),null,{default:s(()=>[(d(!0),k(T,null,j(e(dt),r=>(d(),_(e(Se),{key:r.value,value:r.value},{default:s(()=>[o(p(r.label),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue","disabled"]),g(t)?(d(),_(e($),{key:0,variant:"destructive-ghost",size:"icon-sm","aria-label":"Remove member",onClick:r=>m("remove",t)},{default:s(()=>[a(e(ze),{class:"size-4"})]),_:1},8,["onClick"])):b("",!0)])]))),128))])):(d(),_(Qe,{key:2,icon:e(Ie),tone:"muted",title:"No members yet",description:"Invite your team to collaborate on sessions and bug reports.",compact:""},Me({_:2},[n.isAdmin?{name:"action",fn:s(()=>[a(e($),{size:"xs",onClick:i[1]||(i[1]=t=>m("invite"))},{default:s(()=>[a(e(D),{class:"size-3.5"}),i[5]||(i[5]=o(" Invite your first member ",-1))]),_:1})]),key:"0"}:void 0]),1032,["icon"]))]),_:1})]),_:1}))}}),xt={class:"flex flex-col gap-4 sm:flex-row sm:items-start"},$t={class:"min-w-0 flex-1"},kt={class:"grid gap-3 sm:grid-cols-[1fr_auto] sm:items-end"},wt={class:"space-y-1.5"},Ct=C({__name:"OrgInfoCard",props:z({orgName:{},isAdmin:{type:Boolean},updating:{type:Boolean}},{name:{required:!0},nameModifiers:{}}),emits:z(["save"],["update:name"]),setup(l,{emit:v}){const n=l,m=v,g=B(l,"name"),f=Z(()=>(n.orgName||"?").split(/\s+/).slice(0,2).map(t=>{var r;return((r=t[0])==null?void 0:r.toUpperCase())??""}).join("")),i=Z(()=>n.updating||g.value===n.orgName||!g.value.trim());return(t,r)=>(d(),_(e(L),{class:"rounded-md shadow-none"},{default:s(()=>[a(e(q),{class:"p-4"},{default:s(()=>[a(e(F),{class:"text-base"},{default:s(()=>[...r[2]||(r[2]=[o("Organization Information",-1)])]),_:1}),a(e(Q),null,{default:s(()=>[...r[3]||(r[3]=[o(" Update your organization's display name. ",-1)])]),_:1})]),_:1}),a(e(G),{class:"p-4 pt-0"},{default:s(()=>[u("div",xt,[a(e(W),{size:"base"},{default:s(()=>[a(e(ee),null,{default:s(()=>[o(p(f.value),1)]),_:1})]),_:1}),u("div",$t,[u("div",kt,[u("div",wt,[a(e(H),{for:"org-name"},{default:s(()=>[...r[4]||(r[4]=[o("Organization Name",-1)])]),_:1}),a(e(te),{id:"org-name",modelValue:g.value,"onUpdate:modelValue":r[0]||(r[0]=N=>g.value=N),class:"w-full",disabled:!n.isAdmin||n.updating,placeholder:"My Organization"},null,8,["modelValue","disabled"])]),n.isAdmin?(d(),_(e($),{key:0,size:"sm",disabled:i.value,onClick:r[1]||(r[1]=N=>m("save"))},{default:s(()=>[n.updating?(d(),_(e(P),{key:0,class:"size-4 animate-spin"})):b("",!0),r[5]||(r[5]=o(" Save ",-1))]),_:1},8,["disabled"])):b("",!0)])])])]),_:1})]),_:1}))}}),St={class:"divide-y divide-border"},zt={class:"flex min-w-0 items-center gap-3"},It={class:"flex size-9 shrink-0 items-center justify-center rounded-md bg-primary/10 text-primary"},Mt={class:"min-w-0"},Et={class:"truncate text-sm font-medium text-foreground"},Ut={class:"mt-0.5 text-xs text-muted-foreground"},Rt={class:"flex shrink-0 items-center gap-1 sm:justify-end"},Nt=C({__name:"PendingInvitationsCard",props:{invitations:{}},emits:["copy-link","revoke"],setup(l,{emit:v}){const n=l,m=v;return(g,f)=>(d(),_(e(L),{class:"rounded-md shadow-none"},{default:s(()=>[a(e(q),{class:"flex flex-row items-center gap-2 p-4"},{default:s(()=>[a(e(F),{class:"text-base"},{default:s(()=>[...f[0]||(f[0]=[o("Pending Invitations",-1)])]),_:1}),a(e(V),{variant:"warning",class:"tabular-nums"},{default:s(()=>[o(p(n.invitations.length)+" pending ",1)]),_:1})]),_:1}),a(e(G),{class:"p-0"},{default:s(()=>[u("div",St,[(d(!0),k(T,null,j(n.invitations,i=>(d(),k("div",{key:i.id,class:"flex flex-col gap-3 px-4 py-3 transition-colors hover:bg-muted/50 sm:flex-row sm:items-center sm:justify-between"},[u("div",zt,[u("div",It,[a(e(Ee),{class:"size-4"})]),u("div",Mt,[u("p",Et,p(i.email),1),u("p",Ut,p(e(rt)(i.role))+" · Invited "+p(e(se)(i.
1created_at)),1)])]),u("div",Rt,[a(e($),{variant:"ghost",size:"sm",onClick:t=>m("copy-link",i.token)},{default:s(()=>[a(e(Ue),{class:"size-3.5"}),f[1]||(f[1]=o(" Copy link ",-1))]),_:1},8,["onClick"]),a(e($),{variant:"destructive-ghost",size:"sm",onClick:t=>m("revoke",i)},{default:s(()=>[...f[2]||(f[2]=[o(" Revoke ",-1)])]),_:1},8,["onClick"])])]))),128))])]),_:1})]),_:1}))}}),ht={class:"font-medium text-foreground"},Ot=C({__name:"RemoveMemberDialog",props:z({member:{},orgName:{},removing:{type:Boolean}},{open:{type:Boolean,required:!0},openModifiers:{}}),emits:z(["confirm","cancel"],["update:open"]),setup(l,{emit:v}){const n=l,m=v,g=B(l,"open");return(f,i)=>(d(),_(e(Re),{open:g.value,"onUpdate:open":i[2]||(i[2]=t=>g.value=t)},{default:s(()=>[a(e(Ne),{size:"sm","show-close":!1,class:"rounded-lg sm:rounded-lg"},{default:s(()=>[a(e(he),{class:"space-y-2 text-left"},{default:s(()=>[a(e(Oe),null,{default:s(()=>[...i[3]||(i[3]=[o("Remove member",-1)])]),_:1}),a(e(Ae),null,{default:s(()=>{var t;return[i[4]||(i[4]=o(" This will remove ",-1)),u("span",ht,p((t=n.member)==null?void 0:t.email),1),o(" from "+p(n.orgName)+". ",1)]}),_:1})]),_:1}),i[7]||(i[7]=u("p",{class:"pt-2 text-sm text-muted-foreground"}," They will lose access to this organization immediately. You can invite them again later if needed. ",-1)),a(e(et),{class:"gap-2 sm:gap-2"},{default:s(()=>[a(e($),{size:"sm",variant:"outline",disabled:n.removing,onClick:i[0]||(i[0]=t=>m("cancel"))},{default:s(()=>[...i[5]||(i[5]=[o(" Cancel ",-1)])]),_:1},8,["disabled"]),a(e($),{size:"sm",variant:"destructive",class:"text-destructive-foreground",disabled:n.removing,onClick:i[1]||(i[1]=t=>m("confirm"))},{default:s(()=>[n.removing?(d(),_(e(P),{key:0,class:"mr-2 size-4 animate-spin"})):b("",!0),i[6]||(i[6]=o(" Remove ",-1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1},8,["open"]))}}),At={class:"mx-auto w-full max-w-5xl px-4 py-5 sm:px-6 lg:px-8"},Bt={class:"mb-4 text-xs text-muted-foreground"},Tt={class:"tabular-nums"},Vt={class:"space-y-4"},Kt=C({__name:"OrganizationSettings",setup(l){const v=Pe(),n=Be(),{orgName:m,members:g,invitations:f,currentUserId:i,isAdmin:t,loading:r,updating:N,inviting:ae,error:J,inviteError:ne}=Te(n),ie=Ve("organization"),I=S(!1),M=S(!1),h=S(!1),E=S(null),O=S(""),U=S("");De(m,c=>{U.value=c});function Y(){I.value=!1,O.value="",n.clearError()}function K(){h.value||(M.value=!1,E.value=null)}const oe=async()=>{if(t.value)try{await n.updateOrgName(U.value.trim()),x.success(R.UPDATE_SUCCESS)}catch(c){x.error(c.message||"Failed to update organization name")}},le=async c=>{if(t.value)try{await n.updateMemberRole(c.id,c.role),x.success(R.MEMBER_ROLE_UPDATE_SUCCESS)}catch{x.error("Failed to update member role"),await n.loadMembers()}},re=c=>{!t.value||c.user_id===i.value||(E.value=c,M.value=!0)},de=async()=>{const c=E.value;if(!c||!t.value||c.user_id===i.value){K();return}h.value=!0;try{await n.removeMember(c.id),x.success(R.MEMBER_REMOVE_SUCCESS),M.value=!1,E.value=null}catch{x.error("Failed to remove member")}finally{h.value=!1}},ue=async()=>{try{const{emailSent:c}=await n.sendInvitation(O.value.trim());ie.report("invite_teammate",!0),Ge(Je.TEAM_MEMBER_INVITED,{email_sent:c}),Y(),c?x.success(R.INVITATION_SEND_SUCCESS):x.warning("Invitation created",{description:"The invitation was saved but the email could not be delivered. Share the link manually from Pending Invitations."})}catch{}},me=async c=>{const y=`${window.location.origin}/invite/${c}`;await navigator.clipboard.writeText(y),x.success("Invite link copied!")},ce=async c=>{if(confirm(`Revoke invitation for ${c.email}?`))try{await n.revokeInvitation(c.id),x.success(R.INVITATION_REVOKE_SUCCESS)}catch{x.error("Failed to revoke invitation")}};return je(async()=>{if(await n.loadOrganization(),U.value=m.value,!n.currentUserId){await v.push("/login");return}await Promise.all([n.loadMembers(),t.value?n.loadInvitations():Promise.resolve()])}),(c,y)=>(d(),_(tt,{title:"Organization Settings",subtitle:"Manage members, roles, invitations, and organization details.","show-back-button":"","show-loader":!1},{"header-actions":s(()=>[e(t)?(d(),_(e($),{key:0,size:"xs",class:"shrink-0","data-tour":"invite-member",onClick:y[0]||(y[0]=w=>I.value=!0)},{default:s(()=>[a(e(D),{class:"size-3.5"}),y[6]||(y[6]=o(" Invite Member ",-1))]),_:1})):b("",!0)]),default:s(()=>[u("div",At,[u("p",Bt,[u("span",Tt,p(e(g).length),1),o(" "+p(e(g).length===1?"member":"members")+" ",1),e(t)&&e(f).length>0?(d(),k(T,{key:0},[o(" · "+p(e(f).length)+" pending ",1)],64)):b("",!0)]),e(J)?(d(),_(e(Le),{key:0,variant:"destructive",class:"mb-4"},{default:s(()=>[a(e(qe),{class:"size-4"}),a(e(Fe),null,{default:s(()=>[o(p(e(J)),1)]),_:1})]),_:1})):b("",!0),u("div",Vt,[a(Ct,{name:U.value,"onUpdate:name":y[1]||(y[1]=w=>U.value=w),"org-name":e(m),"is-admin":e(t),updating:e(N),onSave:oe},null,8,["name","org-name","is-admin","updating"]),a(bt,{members:e(g),"is-admin":e(t),"current-user-id":e(i),loading:e(r),onInvite:y[2]||(y[2]=w=>I.value=!0),onUpdateRole:le,onRemove:re},null,8,["members","is-admin","current-user-id","loading"]),e(t)&&e(f).length>0?(d(),_(Nt,{key:0,invitations:e(f),onCopyLink:me,onRevoke:ce},null,8,["invitations"])):b("",!0)])]),a(ot,{open:I.value,"onUpdate:open":y[3]||(y[3]=w=>I.value=w),email:O.value,"onUpdate:email":y[4]||(y[4]=w=>O.value=w),"org-name":e(m),inviting:e(ae),"invite-error":e(ne),onSend:ue,onClose:Y},null,8,["open","email","org-name","inviting","invite-error"]),a(Ot,{open:M.value,"onUpdate:open":y[5]||(y[5]=w=>
1M.value=w),member:E.value,"org-name":e(m),removing:h.value,onConfirm:de,onCancel:K},null,8,["open","member","org-name","removing"])]),_:1}))}});export{Kt 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.