1import{_ as Ze}from"./Dct_O3tS.js";import{G as Qe,bv as je,c0 as et,f as ve,j as m,k as ue,l as te,x as me,m as he,c as n,a as e,d as E,t as a,g as t,y as X,z as Q,F as H,r as Z,s as p,b as ae,w as Se,e as Ce,o as s,n as ce,_ as pe,q as ee,D as xe,al as ke,E as Ee,a4 as Ue,L as $e,V as tt,S as at,U as st,B as Ne,X as ot,a3 as nt,av as lt}from"./C50AyZvh.js";import{u as fe}from"./B5FHHZ2D.js";import{c as it}from"./dmjvb0iw.js";import{P as rt}from"./B923TTvg.js";import{D as Be}from"./DYex93fB.js";import{_ as dt}from"./DwoFeAId.js";import{_ as ut}from"./C7mJ65Mf.js";import{b as ct}from"./CtxXwhlM.js";import"./qPEno8tq.js";import"./kfULpy2f.js";import"./CeCN_HYq.js";import"./CybpB02T.js";import"./Bc_tMqAi.js";import"./QWbL0wFd.js";import"./UP0A0_tE.js";import"./CDf_Km49.js";/** 2 * @license lucide-vue-next v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const mt=Qe("VideoOffIcon",[["path",{d:"M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196",key:"w8jjjt"}],["path",{d:"M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2",key:"1xawa7"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),vt=je().email().max(320),pt=(R,M=200)=>typeof R=="string"?R.replace(/[\u0000-\u001f\u007f]/g," ").trim().slice(0,M):"";function ft(R){const M=pt(R,320).toLowerCase();return vt.safeParse(M).success?M:""}function gt(R){const M=new Map;for(const f of R){const l=ft(f.email);l&&M.set(l,[...M.get(l)||[],{...f,email:l}])}return[...M.values()].map(f=>{const l=f.filter(U=>U.sources.includes("crm")),o=l[0]||f.find(U=>U.name)||f[0],k=new Set(l.map(U=>U.leadId).filter(Boolean)).size>1;return{...o,sources:[...new Set(f.flatMap(U=>U.sources))],leadId:k?void 0:o.leadId,score:k?0:o.score,reason:k?void 0:o.reason}}).sort((f,l)=>l.score-f.score||(f.name||f.email).localeCompare(l.name||l.email))}const Re=R=>R.normalize("NFKD").replace(new RegExp("\\p{M}","gu"),"").toLocaleLowerCase();function bt(R,M){const f=Re(M).trim().split(/\s+/).filter(Boolean);return R.filter(l=>f.every(o=>Re([l.name,l.email,l.company].join(" ")).includes(o)))}function Fe(R){return[...new Set(R.split(/[\s,;]+/).map(M=>M.trim().toLowerCase()).filter(Boolean))]}function yt(R){return et(je().email().max(320)).max(24).safeParse(R).success}function Ve(R,M,f,l=Date.now()){const o=M?l:Date.parse(R);return!Number.isFinite(o)||!M&&o<=l||!Number.isInteger(f)||f<1||f>480?null:{startsAt:new Date(o).toISOString(),endsAt:new Date(o+f*6e4).toISOString()}}const _t={class:"space-y-4"},ht={class:"field"},wt=["placeholder"],kt={class:"flex flex-wrap gap-2"},xt=["aria-pressed","onClick"],$t={key:0,class:"ml-1","aria-hidden":"true"},It={key:0,role:"status",class:"text-sm text-muted-foreground"},St={key:1,role:"alert",class:"text-sm text-destructive"},Ct=["onClick"],Ut={key:0,class:"text-xs text-muted-foreground"},zt={key:1,class:"text-xs text-muted-foreground"},Mt={key:2,class:"text-xs text-muted-foreground"},Tt={key:3,class:"rounded-xl border p-3 text-sm"},Lt={key:4,class:"rounded-xl bg-primary/5 p-3 space-y-3"},At={class:"text-sm font-medium"},Ot={class:"flex flex-wrap gap-2"},Rt={class:"min-w-0 break-all"},Vt=["aria-label","onClick"],Dt={key:0,class:"flex items-start gap-2 text-sm"},Pt=["checked"],jt={key:1,class:"text-xs text-muted-foreground"},Et={key:2,class:"field"},Nt=["value"],Bt={value:""},Ft=["value"],Wt={key:5,role:"alert",class:"text-sm text-destructive"},Ht={key:6,class:"space-y-2"},qt={class:"text-sm font-semibold"},Jt={key:0,class:"text-xs text-muted-foreground"},Kt={class:"max-h-64 overflow-y-auto rounded-xl border divide-y divide-border"},Xt=["aria-pressed","onClick"],Gt={class:"min-w-0 flex-1"},Yt={class:"block font-medium text-sm break-words"},Zt={key:0,class:"block text-xs text-muted-foreground break-all"},Qt={key:1,class:"block text-xs text-muted-foreground break-words"},ea={key:2,class:"block text-xs text-primary mt-1"},ta={class:"text-[10px] text-muted-foreground shrink-0 max-w-20 text-right break-words"},aa={key:7,class:"text-sm text-muted-foreground"},sa={class:"border-t pt-4"},oa={class:"cursor-pointer text-sm font-medium"},na={class:"field mt-3"},la=["value"],ia={class:"mt-2 text-xs text-muted-foreground"},ra=ve({__name:"InvitePicker",props:{modelValue:{},emails:{},leadId:{},saveContacts:{type:Boolean}},emits:["update:saveContacts","update:modelValue","update:emails","update:leadId"],setup(R,{emit:M}){const f=R,l=M,{t:o}=fe(),_=m(""),k=m("all"),U=m(20),b=m(!1),I=ue({}),C=ue({crm:!1,mail:!1,calendar:!1}),S=ue({crm:!1,mail:!1,calendar:!1}),d=te(()=>f.modelValue),r=te(()=>d.value.filter(c=>c.leadId)),j=te(()=>gt(Object.values(I).flatMap(c=>c.contacts))),z=te(()=>bt(j.value.filter(c=>k.value==="all"||c.sources.includes(k.value)),_.value)),V=te(()=>z.value.slice(0,U.value)),T=c=>({crm:"contactCrm",mail:"contactMailSource",calendar:"contactCalendarSource"})[c];me([_,k],()=>{U.value=20});async function F(c,A=!1){if(!(C[c]||I[c]&&!A)){C[c]=!0,S[c]=!1;try{I[c]=await $fetch("/api/business/meetings/contacts",{query:{source:c}})}catch{S[c]=!0}finally{C[c]=!1}}}function i(c){k.value=c,F(c)}function g(c){b.value=!1;let A=d.value.filter(y=>y.email!==c.email);if(A.length===d.value.length){if(new Set([...A.map(y=>y.email),...Fe(f.emails),c.email]).size>24){b.value=!0;return}A=[...A,c]}l("update:modelValue",A);const L=A.filter(y=>y.leadId);l("update:leadId",L.length===1?L[0].leadId:L.some(y=>
6y.leadId===f.leadId)?f.leadId:void 0)}return he(()=>{F("crm")}),(c,A)=>{var y;const L=Ce;return s(),n("div",_t,[e("label",ht,[E(a(t(o)("contactSearch")),1),X(e("input",{"onUpdate:modelValue":A[0]||(A[0]=u=>_.value=u),type:"search",class:"input",placeholder:t(o)("contactSearchHint"),autocomplete:"off"},null,8,wt),[[Q,_.value]])]),e("div",kt,[(s(),n(H,null,Z(["crm","mail","calendar"],u=>e("button",{key:u,type:"button","aria-pressed":k.value===u,class:"source",onClick:w=>i(u)},[E(a(t(o)(u==="crm"?"contactCrm":u==="mail"?"contactMail":"contactCalendar")),1),C[u]?(s(),n("span",$t,"â¦")):p("",!0)],8,xt)),64)),k.value!=="all"?(s(),n("button",{key:0,type:"button",class:"source",onClick:A[1]||(A[1]=u=>k.value="all")},a(t(o)("contactAll")),1)):p("",!0)]),(s(),n(H,null,Z(["crm","mail","calendar"],u=>(s(),n(H,{key:u},[C[u]?(s(),n("p",It,a(t(o)("contactLoading",{source:t(o)(T(u))})),1)):p("",!0),S[u]?(s(),n("div",St,[e("p",null,a(t(o)("contactLoadFailed",{source:t(o)(T(u))})),1),e("button",{type:"button",class:"underline mt-1",onClick:w=>F(u,!0)},a(t(o)("refresh")),9,Ct)])):p("",!0)],64))),64)),(k.value==="all"?Object.values(I).some(u=>u.partial):(y=I[k.value])!=null&&y.partial)?(s(),n("p",Ut,a(t(o)("contactPartial")),1)):p("",!0),k.value==="mail"?(s(),n("p",zt,a(t(o)("contactMailHint")),1)):p("",!0),k.value==="calendar"?(s(),n("p",Mt,a(t(o)("contactCalendarHint")),1)):p("",!0),k.value==="calendar"&&I.calendar&&!I.calendar.connected?(s(),n("div",Tt,[e("p",null,a(t(o)("contactNoCalendar")),1),ae(L,{to:"/dashboard/business/calendar",target:"_blank",class:"text-primary underline"},{default:Se(()=>[E(a(t(o)("contactConnectCalendar")),1)]),_:1})])):p("",!0),d.value.length?(s(),n("div",Lt,[e("p",At,a(t(o)("contactSelected",{count:d.value.length})),1),e("ul",Ot,[(s(!0),n(H,null,Z(d.value,u=>(s(),n("li",{key:u.email,class:"max-w-full flex items-center gap-2 rounded-lg border bg-background px-3 py-1.5 text-sm"},[e("span",Rt,a(u.name||u.email),1),e("button",{type:"button","aria-label":t(o)("contactRemove",{name:u.name||u.email}),class:"shrink-0 px-1 font-bold",onClick:w=>g(u)},"Ã",8,Vt)]))),128))]),d.value.some(u=>!u.sources.includes("crm"))?(s(),n("label",Dt,[e("input",{type:"checkbox",checked:c.saveContacts,class:"mt-1",onChange:A[2]||(A[2]=u=>l("update:saveContacts",u.target.checked))},null,40,Pt),E(a(t(o)("contactSaveSelected")),1)])):p("",!0),r.value.length===1?(s(),n("p",jt,a(t(o)("contactLinked",{name:r.value[0].name||r.value[0].email})),1)):r.value.length>1?(s(),n("label",Et,[E(a(t(o)("contactPrimary")),1),e("select",{value:c.leadId||"",class:"input",onChange:A[3]||(A[3]=u=>l("update:leadId",Number(u.target.value)||void 0))},[e("option",Bt,a(t(o)("withoutCustomer")),1),(s(!0),n(H,null,Z(r.value,u=>(s(),n("option",{key:u.leadId,value:u.leadId},a(u.name||u.email),9,Ft))),128))],40,Nt)])):p("",!0)])):p("",!0),b.value?(s(),n("p",Wt,a(t(o)("wizardInvalidEmail
6s")),1)):p("",!0),V.value.length?(s(),n("div",Ht,[e("p",qt,a(t(o)("contactResults")),1),!_.value.trim()&&V.value.some(u=>u.score>0)?(s(),n("p",Jt,a(t(o)("contactRecommended")),1)):p("",!0),e("ul",Kt,[(s(!0),n(H,null,Z(V.value,u=>(s(),n("li",{key:u.email},[e("button",{type:"button",class:"w-full flex gap-3 items-start p-3 text-left hover:bg-muted/60 focus-visible:bg-muted/60","aria-pressed":d.value.some(w=>w.email===u.email),onClick:w=>g(u)},[e("span",{class:ce(["mt-0.5 h-5 w-5 shrink-0 rounded border flex items-center justify-center",d.value.some(w=>w.email===u.email)?"bg-primary text-primary-foreground border-primary":"border-input"]),"aria-hidden":"true"},a(d.value.some(w=>w.email===u.email)?"â":"+"),3),e("span",Gt,[e("span",Yt,a(u.name||u.email),1),u.name?(s(),n("span",Zt,a(u.email),1)):p("",!0),u.company?(s(),n("span",Qt,a(u.company),1)):p("",!0),u.reason?(s(),n("span",ea,a(t(o)(u.reason)),1)):p("",!0)]),e("span",ta,a(u.sources.map(w=>t(o)(T(w))).join(" · ")),1)],8,Xt)]))),128))]),z.value.length>U.value?(s(),n("button",{key:1,type:"button",class:"source",onClick:A[4]||(A[4]=u=>U.value+=20)},a(t(o)("contactMore")),1)):p("",!0)])):!C.crm&&!C.mail&&!C.calendar?(s(),n("p",aa,a(t(o)("contactEmpty")),1)):p("",!0),e("details",sa,[e("summary",oa,a(t(o)("contactManual")),1),e("label",na,[E(a(t(o)("wizardEmails")),1),e("textarea",{value:c.emails,rows:"2",maxlength:"8025",class:"input",inputmode:"email",autocomplete:"off",spellcheck:"false",onInput:A[5]||(A[5]=u=>l("update:emails",u.target.value))},null,40,la)]),e("p",ia,a(t(o)("wizardInvitesHint")),1)])])}}}),da=pe(ra,[["__scopeId","data-v-0f185a6c"]]),ua=["aria-label"],ca={class:"flex items-center justify-between gap-4 mb-6"},ma={class:"text-xl font-semibold"},va=["disabled"],pa={key:0},fa=["aria-label"],ga=["aria-current"],ba={class:"sr-only sm:not-sr-only sm:text-sm font-medium break-words"},ya=["disabled"],_a={key:0,class:"space-y-5"},ha={class:"flex gap-2"},wa=["aria-pressed"],ka=["aria-pressed"],xa={class:"grid sm:grid-cols-2 gap-4"},$a={key:0,class:"field"},Ia=["min"],Sa={class:"field"},Ca={class:"text-sm text-muted-foreground"},Ua={key:2,class:"space-y-4"},za={class:"field"},Ma=["placeholder"],Ta={class:"field"},La={class:"text-sm text-muted-foreground"},Aa={key:3,class:"space-y-4"},Oa={class:"rounded-xl bg-muted/40 p-4 space-y-4 text-sm"},Ra={class:"text-muted-foreground"},Va={class:"font-semibold mt-1 break-words"},Da={class:"text-muted-foreground"},Pa={class:"mt-1"},ja={class:"text-muted-foreground"},Ea={class:"mt-1 break-words"},Na={key:0},Ba={class:"text-muted-foreground"},Fa={class:"mt-1 whitespace-pre-wrap break-words"},Wa={key:0,class:"text-sm text-muted-foreground"},Ha={key:1,class:"text-sm text-muted-foreground"},qa={key:2,class:"text-sm text-muted-foreground"},Ja={key:3,class:"text-sm text-muted-foreground"},Ka={key:4,role:"alert",class:"text-sm text-destructive"},Xa={class:"flex justify-between gap-3 border-t pt-5"},Ga=["disabled"],Ya={key:1},Za={type:"submit",class:"primary"},Qa={key:1,class:"space-y-4"},es={key:0,role:"alert",class:"rounded-xl bg-amber-500/10 p-4 text-sm"},ts={key:1,role:"alert",class:"rounded-xl bg-amber-500/10 p-4 text-sm"},as={key:2,role:"status",class:"text-sm text-muted-foreground"},ss={class:"font-semibold"},os={class:"rounded-xl border p-4 space-y-2"},ns={class:"text-sm font-medium"},ls=["href"],is={class:"flex flex-wrap gap-2"},rs={key:3,role:"alert",class:"text-sm text-destructive"},We=ve({__name:"CreateWizard",props:{immediate:{type:Boolean}},emits:["close","created","manage","busy"],setup(R,{emit:M}){const f=R,l=M,{t:o,locale:_,errorText:k}=fe(),U=["wizardTime","wizardInvites","wizardDetails","wizardConfirm"],b=m(0),I=m(f.immediate),C=m(60),S=m(""),d=m(""),r=m(""),j=m(!1),z=m(""),V=m(!1),T=m(!1),F=m(null),i=m(null),g=W=>new Date(W.getTime()-W.getTimezoneOffset()*6e4).toISOString().slice(0,16),c=m(g(new Date(Date.now()+36e5))),A=g(new Date),L=Intl.DateTimeFormat().resolvedOptions().timeZone,y=m(!0),u=m(!1),w=m([]),B=m(),D=te(()=>[...new Set([...w.value.map(W=>W.email),...Fe(S.value)])]),q=m(null),G=m(null),oe=crypto.randomUUID();he(()=>{var W,$;(W=F.value)==null||W.scrollIntoView({behavior:"smooth",block:"start"}),($=i.value)==null||$.focus({preventScroll:!0})});async function Y(W){var $;b.value=W,z.value="",await ke(),($=i.value)==null||$.focus({preventScroll:!0})}async function J(){if(j.value)return;if(z.value="",b.value===0&&!Ve(c.value,I.value,C.value)){z.value=o("wizardInvalidTime");return}
6if(b.value===1&&!yt(D.value)){z.value=o("wizardInvalidEmails");return}if(b.value<3){await Y(b.value+1);return}const W=G.value||Ve(c.value,I.value,C.value);if(!W){await Y(0),z.value=o("wizardInvalidTime");return}G.value||(G.value={id:crypto.randomUUID(),title:d.value.trim()||o("defaultTitle"),description:r.value.trim(),...B.value?{leadId:B.value}:{},...y.value&&w.value.some($=>!$.sources.includes("crm"))?{importContacts:w.value.map(({email:$,name:ne,company:le})=>({email:$,name:ne,company:le}))}:{},...W,settings:it.parse({maxParticipants:Math.max(10,D.value.length+1)})}),j.value=!0,l("busy",!0);try{const $=await $fetch("/api/business/meetings",{method:"POST",body:G.value});if(D.value.length)try{const ne=await $fetch(`/api/business/meetings/${$.roomId}/invite`,{method:"POST",body:{id:oe,emails:D.value,timeZone:L}});V.value=!ne.ok}catch{V.value=!0}u.value=$.contactsSaved===!1,q.value=$,l("created"),I.value&&!V.value&&!u.value&&await Ee(`/dashboard/business/meetings/${q.value.roomId}`)}catch($){z.value=k($)}finally{j.value=!1,l("busy",!1)}}async function O(){try{await navigator.clipboard.writeText(q.value.url),T.value=!0,z.value=""}catch{z.value=o("copyFailed")}}return(W,$)=>{var le,be;const ne=Ce;return s(),n("section",{ref_key:"container",ref:F,class:"rounded-2xl border bg-card p-5 sm:p-7 scroll-mt-6","aria-label":t(o)("wizardHeading")},[e("div",ca,[e("h2",ma,a(q.value?t(o)("ready"):t(o)("wizardHeading")),1),e("button",{type:"button",class:"secondary",disabled:j.value,onClick:$[0]||($[0]=P=>l("close"))},a(t(o)("close")),9,va)]),q.value?(s(),n("div",Qa,[u.value?(s(),n("p",es,a(t(o)("contactSaveWarning")),1)):p("",!0),V.value?(s(),n("p",ts,a(t(o)("wizardInviteWarning")),1)):(s(),n("p",as,a(t(o)(D.value.length?"sent":"notInvited")),1)),e("p",ss,a(d.value.trim()||t(o)("defaultTitle")),1),e("div",os,[e("p",ns,a(t(o)("guestJoin")),1),e("a",{href:q.value.url,target:"_blank",rel:"noopener noreferrer",class:"block break-all text-sm text-primary underline"},a(q.value.url),9,ls),e("button",{class:"secondary",onClick:O},a(t(o)(T.value?"copied":"copy")),1)]),e("div",is,[ae(ne,{to:`/dashboard/business/meetings/${q.value.roomId}`,class:"primary"},{default:Se(()=>[E(a(t(o)("hostJoin")),1)]),_:1},8,["to"]),e("button",{class:"secondary",onClick:$[12]||($[12]=P=>l("manage",q.value.roomId))},a(t(o)("details")),1)]),z.value?(s(),n("p",rs,a(z.value),1)):p("",!0)])):(s(),n("div",pa,[e("ol",{class:"grid grid-cols-4 gap-2 mb-8","aria-label":t(o)("wizardHeading")},[(s(),n(H,null,Z(U,(P,ge)=>e("li",{key:P,"aria-current":b.value===ge?"step":void 0,class:ce(["border-t-2 pt-3 min-w-0",b.value>=ge?"border-primary text-foreground":"border-border text-muted-foreground"])},[e("span",{class:ce(["flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold mb-2",b.value===ge?"bg-primary text-primary-foreground":"bg-muted"])},a(ge+1),3),e("span",ba,a(t(o)(P)),1)],10,ga)),64))],8,fa),e("form",{onSubmit:xe(J,["prevent"])},[e("fieldset",{disabled:j.value,class:"min-w-0 space-y-5"},[e("h3",{ref_key:"stepHeading",ref:i,tabindex:"-1",class:"text-lg font-semibold outline-none"},a(t(o)(U[b.value])),513),b.value===0?(s(),n("div",_a,[e("div",ha,[e("button",{type:"button",class:ce(I.value?"primary":"secondary"),"aria-pressed":I.value,onClick:$[1]||($[1]=P=>I.value=!0)},a(t(o)("startNow")),11,wa),e("button",{type:"button",class:ce(I.value?"secondary":"primary"),"aria-pressed":!I.value,onClick:$[2]||($[2]=P=>I.value=!1)},a(t(o)("later")),11,ka)]),e("div",xa,[I.value?p("",!0):(s(),n("label",$a,[E(a(t(o)("startsAt")),1),X(e("input",{"onUpdate:modelValue":$[3]||($[3]=P=>c.value=P),required:"",type:"datetime-local",min:t(A),class:"input"},null,8,Ia),[[Q,c.value]])])),e("label",Sa,[E(a(t(o)("duration")),1),X(e("input",{"onUpdate:modelValue":$[4]||($[4]=P=>C.value=P),type:"number",required:"",min:"1",max:"480",step:"1",class:"input"},null,512),[[Q,C.value,void 0,{number:!0}]])])]),e("p",Ca,a(t(o)("localTime",{zone:t(L)})),1)])):b.value===1?(s(),ee(da,{key:1,modelValue:w.value,"onUpdate:modelValue":$[5]||($[5]=P=>w.value=P),emails:S.value,"onUpdate:emails":$[6]||($[6]=P=>S.value=P),"lead-id":B.value,"onUpdate:leadId":$[7]||($[7]=P=>B.value=P),"save-contacts":y.value,"onUpdate:saveContacts":$[8]||($[8]=P=>y.value=P)},null,8,["modelValue","emails","lead-id","save-contacts"])):b.value===2?(s(),n("div",Ua,[e("label",za,[E(a(t(o)("wizardTitle")),1),X(e("input",{"onUpdate:modelValue":$[9]||($[9]=P=>d.value=P),maxlength:"200",placeholder:t(o)("defaultTitle"),class:"input"},null,8,Ma),[[Q,d.value]])]),e("label",Ta,[E(a(t(o)("wizardInfo")),1),X(e("textarea",{"onUpdate:modelValue":$[10]||($[10]=P=>r.value=P),maxlength:"2000",rows:"3",class:"input"},null,512),[[Q,r.value]])]),e("p",La,a(t(o)("wizardInfoHint")),1)])):(s(),n("div",Aa,[e("dl",Oa,[e("div",null,[e("dt",Ra,a(t(o)("title")),1),e("dd",Va,a(d.value.trim()||t(o)("defaultTitle")),1)]),e("div",null,[e("dt",Da,a(t(o)("wizardTime")),1),e("dd",Pa,a(I.value?t(o)("startNow"):new Date(c.value).toLocaleStr
6ing(t(_)))+" · "+a(t(o)("wizardMinutes",{count:C.value})),1)]),e("div",null,[e("dt",ja,a(t(o)("wizardInvites")),1),e("dd",Ea,a(D.value.length?D.value.join(", "):t(o)("wizardNoInvites")),1)]),r.value.trim()?(s(),n("div",Na,[e("dt",Ba,a(t(o)("wizardInfo")),1),e("dd",Fa,a(r.value.trim()),1)])):p("",!0)]),B.value?(s(),n("p",Wa,a(t(o)("contactLinked",{name:((le=w.value.find(P=>P.leadId===B.value))==null?void 0:le.name)||((be=w.value.find(P=>P.leadId===B.value))==null?void 0:be.email)})),1)):p("",!0),y.value&&w.value.some(P=>!P.sources.includes("crm"))?(s(),n("p",Ha,a(t(o)("contactSaveSelected")),1)):p("",!0),D.value.length?(s(),n("p",qa,a(t(o)("wizardSendHint",{count:D.value.length})),1)):p("",!0),I.value?p("",!0):(s(),n("p",Ja,a(t(o)("hostReminder")),1))])),z.value?(s(),n("p",Ka,a(z.value),1)):p("",!0),e("div",Xa,[b.value>0?(s(),n("button",{key:0,type:"button",class:"secondary",disabled:!!G.value,onClick:$[11]||($[11]=P=>Y(b.value-1))},a(t(o)("wizardBack")),9,Ga)):(s(),n("span",Ya)),e("button",Za,a(j.value?t(o)("loading"):b.value<3?t(o)("wizardNext"):I.value?D.value.length?t(o)("wizardStartSend"):t(o)("wizardStart"):D.value.length?t(o)("wizardCreateSend"):t(o)("create")),1)])],8,ya)],32)]))],8,ua)}}});function De(R){const M=R;M.__i18n=M.__i18n||[],M.__i18n.push({locale:"",resource:{en:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Start and send"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Start wizard"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Create and send"}}},sv:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Starta och skicka"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Starta guiden"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Skapa och skicka"}}},de:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Starten und senden"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Assistent starten"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Erstellen und senden"}}},el:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Îεκίνα και ÏÏείλε"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Îεκίνα Ïον οδηγÏ"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"ÎημιοÏÏγηÏε και ÏÏείλε"}}},es:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar y enviar"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar asistente"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Crear y enviar"}}},pt:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar e enviar"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar assistente"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Criar e enviar"}}},da:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Start og send"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Start guiden"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Opret og send"}}},no:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Start og send"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Start veiviseren"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Opprett og send"}}},fi:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Aloita ja lähetä"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"Käynnistä ohjattu toiminto"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Luo ja lähetä"}}},lv:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"SÄkt un nosÅ«tÄ«t"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"SÄkt vedni"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Izveidot un nosÅ«tÄ«t"}}},ar:{startAndSend:{t:0,b:{t:2,i:[{t:3}],s:"ابدأ ÙØ£Ø±Ø³Ù"}},startWizard:{t:0,b:{t:2,i:[{t:3}],s:"بدء اÙÙ
Ø¹Ø§ÙØ¬ Ø§ÙØªÙجÙÙÙ"}},createAndSend:{t:0,b:{t:2,i:[{t:3}],s:"Ø¥ÙØ´Ø§Ø¡ ÙØ¥Ø±Ø³Ø§Ù"}}}}})}typeof De=="function"&&De(We);const ds=pe(We,[["__scopeId","data-v-58410a3c"]]),us=["aria-busy"],cs=["aria-label"],ms=["src"],vs={key:1,class:"absolute inset-0 flex items-center justify-center bg-black/15"},ps={class:"rounded-full bg-black/65 p-2 text-white"},fs={key:3,class:"flex flex-col items-center gap-1 p-2"},gs={class:"text-[11px]"},bs={class:"min-w-0"},ys={class:"mb-1 flex items-center gap-2 text-xs"},_s={class:"rounded-full bg-muted px-2 py-1 text-muted-foreground"},hs={key:0,class:"text-muted-foreground"},ws={class:"text-base font-semibold"},ks=["aria-label"],xs={class:"mt-1 text-sm text-muted-foreground"},$s={key:0,class:"mt-1 truncate text-xs text-muted-foreground"},Is={class:"relative z-10 col-span-2 flex flex-wrap items-center gap-2 sm:col-span-1 sm:justify-end"}
6,Ss=["disabled","title"],Cs=["aria-label","title"],Us=ve({__name:"ListRow",props:{meeting:{},review:{},loading:{type:Boolean},error:{},downloading:{type:Boolean},upcoming:{type:Boolean}},emits:["open","load","download","copy"],setup(R,{emit:M}){const f=R,l=M,{t:o,locale:_}=fe(),k=m(null),U=m(!1),b=te(()=>{var d;return(d=f.review)==null?void 0:d.recordings[0]}),I=d=>new Date(d).toLocaleString(_.value);me(()=>{var d;return(d=b.value)==null?void 0:d.url},()=>{U.value=!1});function C(d){const r=d.target;Number.isFinite(r.duration)&&r.duration>0&&(r.currentTime=Math.min(.1,r.duration/2))}let S;return he(()=>{if(typeof IntersectionObserver>"u"){l("load");return}S=new IntersectionObserver(d=>{d.some(r=>r.isIntersecting)&&(l("load"),S==null||S.disconnect())},{rootMargin:"100px"}),k.value&&S.observe(k.value)}),Ue(()=>S==null?void 0:S.disconnect()),(d,r)=>{var z,V,T;const j=Ce;return s(),n("li",{ref_key:"row",ref:k,class:"relative grid grid-cols-[6.5rem_minmax(0,1fr)] items-center gap-4 rounded-xl border border-border bg-card p-4 transition hover:bg-muted/30 sm:grid-cols-[8rem_minmax(0,1fr)_auto]","aria-busy":d.loading},[e("button",{type:"button",class:"relative z-10 aspect-video w-full overflow-hidden rounded-lg bg-muted text-muted-foreground focus-visible:ring-2 focus-visible:ring-primary","aria-label":t(o)(b.value?"previewVideo":"reviewMeeting")+": "+d.meeting.title,onClick:r[1]||(r[1]=F=>d.$emit("open",b.value?"video":"overview"))},[b.value&&!U.value?(s(),n("video",{key:b.value.url,src:b.value.url+"#t=0.1",muted:"",playsinline:"",preload:"metadata","aria-hidden":"true",tabindex:"-1",class:"pointer-events-none h-full w-full object-cover",onLoadedmetadata:C,onError:r[0]||(r[0]=F=>U.value=!0)},null,40,ms)):p("",!0),b.value?(s(),n("span",vs,[e("span",ps,[ae(t(rt),{class:"h-5 w-5 fill-current"})])])):d.loading||!d.review&&!d.error?(s(),ee(t($e),{key:2,class:"mx-auto h-5 w-5 animate-spin"})):(s(),n("span",fs,[ae(t(mt),{class:"h-5 w-5"}),e("span",gs,a(t(o)("noVideo")),1)]))],8,cs),e("div",bs,[e("div",ys,[e("span",_s,a(t(o)("status_"+d.meeting.status)),1),(z=d.review)!=null&&z.recordingInProgress?(s(),n("span",hs,a(t(o)("recordingPending")),1)):p("",!0)]),e("h2",ws,[e("button",{type:"button",class:"text-left after:absolute after:inset-0 after:rounded-xl focus-visible:outline-none focus-visible:after:ring-2 focus-visible:after:ring-primary","aria-label":t(o)("reviewMeeting")+": "+d.meeting.title,onClick:r[2]||(r[2]=F=>d.$emit("open","overview"))},a(d.meeting.title),9,ks)]),e("p",xs,a(I(d.meeting.startsAt)),1),(V=d.meeting.brand)!=null&&V.name?(s(),n("p",$s,a(d.meeting.brand.name),1)):p("",!0),d.error||(T=d.review)!=null&&T.recordingsUnavailable?(s(),n("button",{key:1,type:"button",class:"relative z-10 mt-1 text-xs text-destructive underline",onClick:r[3]||(r[3]=F=>d.$emit("load",!0))},a(t(o)("reviewUnavailable")),1)):p("",!0)]),e("div",Is,[d.upcoming?(s(),ee(j,{key:0,to:"/dashboard/business/meetings/"+d.meeting.roomId,class:"inline-flex items-center gap-1.5 rounded-lg bg-primary px-3 py-2 text-sm font-medium text-primary-foreground"},{default:Se(()=>[ae(t(tt),{class:"h-4 w-4"}),E(a(t(o)("hostJoin")),1)]),_:1},8,["to"])):p("",!0),e("button",{type:"button",class:"row-action",onClick:r[4]||(r[4]=F=>d.$emit("open","summary"))},[ae(t(at),{class:"h-4 w-4"}),E(a(t(o)("meetingSummary")),1)]),e("button",{type:"button",class:"row-action",disabled:d.downloading,title:t(o)("packageHint"),onClick:r[5]||(r[5]=F=>d.$emit("download"))},[d.downloading?(s(),ee(t($e),{key:0,class:"h-4 w-4 animate-spin"})):(s(),ee(t(Be),{key:1,class:"h-4 w-4"})),E(a(t(o)(d.downloading?"preparingPackage":"downloadPackage")),1)],8,Ss),e("button",{type:"button",class:"row-action px-2","aria-label":t(o)("guestJoin"),title:t(o)("guestJoin"),onClick:r[6]||(r[6]=F=>d.$emit("copy"))},[ae(t(st),{class:"h-4 w-4"})],8,Cs)])],8,us)}}}),zs=pe(Us,[["__scopeId","data-v-14e223c0"]]),Ms={key:0,class:"space-y-5"},Ts={class:"flex items-start justify-between gap-4"},Ls={id:"meeting-review-title",class:"text-xl font-semibold"},As={class:"mt-1 text-sm text-muted-foreground"},Os=["aria-label"],Rs={class:"flex flex-wrap gap-2"},Vs=["aria-pressed","onClick"],Ds={key:0,class:"flex items-center gap-2 text-muted-foreground",role:"status"},Ps={key:1,role:"alert",class:"rounded-lg bg-destructive/10 p-3 text-destructive"},js={class:"text-inherit"},Es={key:0,class:"space-y-3"},Ns={class:"font-semibold"},Bs={key:0,class:"text-destructive"},Fs={key:1,class:"text-sm text-muted-foreground"},Ws={key:0,class:"block text-sm"}
6,Hs=["value"],qs=["src","autoplay","aria-label"],Js={key:2,role:"alert",class:"text-sm text-destructive"},Ks={key:3,class:"rounded-xl bg-muted p-6 text-sm text-muted-foreground"},Xs={key:1,class:"space-y-3"},Gs={class:"font-semibold"},Ys={key:0,class:"whitespace-pre-wrap text-sm leading-relaxed"},Zs={key:1,class:"text-sm text-muted-foreground"},Qs=["disabled"],eo={class:"space-y-3 border-t pt-4"},to={key:0,role:"status",class:"text-sm text-muted-foreground"},ao={class:"flex flex-wrap gap-2"},so=["disabled"],oo={class:"text-xs text-muted-foreground"},no=ve({__name:"ReviewDialog",props:{meeting:{},review:{},loading:{type:Boolean},error:{},downloading:{type:Boolean},generating:{type:Boolean},notice:{}},emits:["refresh","download","generate","manage"],setup(R,{expose:M,emit:f}){const l=R,o=f,{t:_,locale:k}=fe(),U=m(null),b=m(null),I=m(!1),C=m(""),S=m(!1),d=m("overview"),r=te(()=>{var i,g;return((i=l.review)==null?void 0:i.recordings.find(c=>c.id===C.value))||((g=l.review)==null?void 0:g.recordings[0])}),j=i=>new Date(i).toLocaleString(k.value);me(()=>{var i;return(i=l.review)==null?void 0:i.recordings},i=>{var g;i!=null&&i.some(c=>c.id===C.value)||(C.value=((g=i==null?void 0:i[0])==null?void 0:g.id)||"")},{immediate:!0}),me(()=>{var i;return(i=r.value)==null?void 0:i.url},()=>{S.value=!1}),me(d,()=>{var i;return(i=b.value)==null?void 0:i.pause()});function z(i){var g,c,A;d.value=i,C.value=((c=(g=l.review)==null?void 0:g.recordings[0])==null?void 0:c.id)||"",S.value=!1,I.value=!0,(A=U.value)==null||A.showModal()}function V(){var i;(i=b.value)==null||i.pause(),I.value=!1}function T(){var i;(i=U.value)==null||i.close(),o("manage")}function F(i){var c;if(i.target!==U.value)return;const g=U.value.getBoundingClientRect();(i.clientX<g.left||i.clientX>g.right||i.clientY<g.top||i.clientY>g.bottom)&&((c=U.value)==null||c.close())}return M({open:z}),(i,g)=>(s(),n("dialog",{ref_key:"dialog",ref:U,"aria-labelledby":"meeting-review-title",class:"review-dialog",onClose:V,onClick:F},[i.meeting?(s(),n("div",Ms,[e("header",Ts,[e("div",null,[e("h2",Ls,a(i.meeting.title),1),e("p",As,a(j(i.meeting.startsAt)),1)]),e("button",{type:"button",autofocus:"",class:"rounded-lg p-2 hover:bg-muted","aria-label":t(_)("close"),onClick:g[0]||(g[0]=c=>{var A;return(A=U.value)==null?void 0:A.close()})},[ae(t(ot),{class:"h-5 w-5"})],8,Os)]),e("div",Rs,[(s(),n(H,null,Z(["overview","video","summary"],c=>e("button",{key:c,type:"button","aria-pressed":d.value===c,class:ce(["rounded-lg px-3 py-2 text-sm",d.value===c?"bg-primary text-primary-foreground":"bg-muted text-foreground"]),onClick:A=>d.value=c},a(t(_)(c==="overview"?"reviewMeeting":c==="video"?"meetingRecordings":"meetingSummary")),11,Vs)),64))]),i.loading?(s(),n("p",Ds,[ae(t($e),{class:"h-4 w-4 animate-spin"}),E(a(t(_)("loading")),1)])):p("",!0),i.error?(s(),n("div",Ps,[e("p",js,a(i.error),1),e("button",{class:"mt-2 underline",onClick:g[1]||(g[1]=c=>i.$emit("refresh"))},a(t(_)("refresh")),1)])):p("",!0),i.review?(s(),n(H,{key:2},[d.value!=="summary"?(s(),n("section",Es,[e("h3",Ns,a(t(_)("meetingRecordings")),1),i.review.recordingsUnavailable?(s(),n("p",Bs,[E(a(t(_)("reviewUnavailable"))+" ",1),e("button",{class:"underline",onClick:g[2]||(g[2]=c=>i.$emit("refresh"))},a(t(_)("refresh")),1)])):p("",!0),i.review.recordingInProgress?(s(),n("p",Fs,a(t(_)("recordingPending")),1)):p("",!0),i.review.recordings.length?(s(),n(H,{key:2},[i.review.recordings.length>1?(s(),n("label",Ws,[E(a(t(_)("recordingCount",{count:i.review.recordings.length})),1),X(e("select",{"onUpdate:modelValue":g[3]||(g[3]=c=>C.value=c),class:"mt-2 w-full rounded-lg border bg-background p-2"},[(s(!0),n(H,null,Z(i.review.recordings,c=>(s(),n("option",{key:c.id,value:c.id},a(j(c.startedAt)),9,Hs))),128))],512),[[Ne,C.value]])])):p("",!0),I.value&&r.value?(s(),n("video",{ref_key:"player",ref:b,key:r.value.url,src:r.value.url,autoplay:d.value==="video",controls:"",playsinline:"",preload:"metadata",class:"aspect-video w-full rounded-xl bg-black","aria-label":t(_)("previewVideo"),onError:g[4]||(g[4]=c=>S.value=!0)},null,40,qs)):p("",!0),S.value?(s(),n("p",Js,[E(a(t(_)("reviewUnavailable"))+" ",1),e("button",{class:"underline",onClick:g[5]||(g[5]=c=>i.$emit("refresh"))},a(t(_)("refresh")),1)])):p("",!0)],64)):i.review.recordingsUnavailable?p("",!0):(s(),n("p",Ks,a(t(_)("noRecordings")),1))])):p("",!0),d.value!=="video"?(s(),n("section",Xs,[e("h3",Gs,a(t(_)("summary")),1),i.review.summary?(s(),n("p",Ys,a(i.review.summary),1)):(s(),n("p",Zs,a(t(_)("noSummary")),1)),i.review.summary?p("",!0):(s(),n("button",{key:2,type:"button",class:"rounded-lg border px-3 py-2 text-sm disabled:opacity-50",disabled:i.generating,onClick:g[6]||(g[6]=c=>i.$emit("generate"))},a(t(_)(i.generating?"loading":"generateSummary")),9,Qs))])):p("",!0)],64)):p("",!0),e("footer",eo,[i.notice?(s(),n("p",to,a(i.notice),1)):p("",!0),e("div",ao,[e("button",{type:"button",class:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50",disabled:i.downloading,onClick:g[7]||(g[7]=c=>i.$emit("download"))},[i.downloading?(s(),ee(t($e),{key:0,class:"h-4 w-4 animate-spin"})):(s(),ee(t(Be),{key:1,class:"h-4 w-4"})),E(a(t(_)(i.downloading?"preparingPackage":"downloadPackage")),1)],8,so),e("button",{type:"button",class:"rounded-lg border px-4 py-2 text-sm",onClick:T},a(t(_)("details")),1)]),e("p",oo,a(t(_)("packageHint")),1)])])):p("",!0)],544))}}),lo=pe(no,[["__scopeId","data-v-4e14ea72"]]);function Pe(R,M,f){return[R,M,f].every(Number.isFinite)&&R>=0&&M>R&&M<=f&&M-R<=90}const io={class:"space-y-3 rounded-lg border p-3"},ro={class:"font-medium"},uo={class:"text-xs text-muted-foreground"},co=["src","controls"],mo={key:2,class:"grid grid-cols-2 gap-2"},vo={class:"text-sm"},po=["disabled"],fo={class:"text-sm"},go=["disabled"],bo=["disabled"],yo=["value"],_o=["src","aria-label"],ho=["href","download"],wo={key:7,role:"alert",class:"text-sm text-destructive"},ko=ve({__name:"MeetingClipExport",props:{roomId:{},recordingId:{}}
6,setup(R){const M=R,{t:f}=fe(),l=m(null),o=m(""),_=m(0),k=m(30),U=m(0),b=m(!1),I=m(0),C=m(""),S=m(""),d=m("webm");let r,j,z,V,T,F,i=!1,g=!1;function c(){var w;U.value=((w=l.value)==null?void 0:w.duration)||0,k.value=Math.min(30,U.value)}function A(){o.value="/api/business/meetings/"+M.roomId+"/recording?id="+encodeURIComponent(M.recordingId)}function L(){var w;if(clearInterval(F),(w=l.value)==null||w.pause(),T==null||T.getTracks().forEach(B=>B.stop()),T=void 0,j){try{r==null||r.disconnect(j)}catch{}j=void 0}b.value=!1}function y(){g=!0,z&&z.state!=="inactive"&&z.stop(),L()}async function u(){if(!(b.value||!l.value||!Pe(_.value,k.value,U.value))){b.value=!0,g=!1,C.value="",I.value=0,S.value&&(URL.revokeObjectURL(S.value),S.value="");try{const w=l.value,B=["video/webm;codecs=vp8,opus","video/mp4"].find(J=>MediaRecorder.isTypeSupported(J));if(!B)throw new Error("unsupported");if(d.value=B.startsWith("video/mp4")?"mp4":"webm",V||(V=new AudioContext,r=V.createMediaElementSource(w),r.connect(V.destination)),await V.resume(),i||g){L();return}j=V.createMediaStreamDestination(),r.connect(j);const D=document.createElement("canvas");D.width=w.videoWidth||1280,D.height=w.videoHeight||720;const q=D.getContext("2d");if(!q)throw new Error("unsupported");const G=D.captureStream(30);if(T=new MediaStream([...G.getVideoTracks(),...j.stream.getAudioTracks()]),w.currentTime=_.value,await new Promise((J,O)=>{if(!w.seeking){J();return}const W=setTimeout(()=>{w.removeEventListener("seeked",$),O(new Error("seek"))},1e4);function $(){clearTimeout(W),J()}w.addEventListener("seeked",$,{once:!0})}),i||g){L();return}const oe=[];if(z=new MediaRecorder(T,{mimeType:B,videoBitsPerSecond:4e6}),z.ondataavailable=J=>{J.data.size&&oe.push(J.data)},z.onerror=()=>{C.value=f("clipFailed"),y()},z.onstop=()=>{!i&&!g&&(S.value=URL.createObjectURL(new Blob(oe,{type:B}))),L()},q.drawImage(w,0,0,D.width,D.height),await w.play(),i||g){L();return}z.start(250);const Y=performance.now();F=nt(()=>{!z||z.state==="inactive"||(q.drawImage(w,0,0,D.width,D.height),I.value=Math.min(1,(w.currentTime-_.value)/(k.value-_.value)),w.currentTime>=k.value||w.ended?z.stop():performance.now()-Y>12e4&&(C.value=f("clipFailed"),y()))},33)}catch{C.value=f("clipFailed"),y()}}}return me(()=>M.recordingId,()=>{y(),V==null||V.close(),V=void 0,r=void 0,o.value="",U.value=0,S.value&&URL.revokeObjectURL(S.value),S.value=""}),Ue(()=>{i=!0,y(),V==null||V.close(),V=void 0,r=void 0,S.value&&URL.revokeObjectURL(S.value)}),(w,B)=>(s(),n("section",io,[e("h4",ro,a(t(f)("exportClip")),1),e("p",uo,a(t(f)("clipHint")),1),o.value?p("",!0):(s(),n("button",{key:0,class:"button",onClick:A},a(t(f)("prepareClip")),1)),o.value?(s(),n("video",{key:1,ref_key:"video",ref:l,src:o.value,controls:!b.value,playsinline:"",preload:"metadata",class:"w-full rounded-lg bg-black",onLoadedmetadata:c},null,40,co)):p("",!0),o.value?(s(),n("div",mo,[e("label",vo,[E(a(t(f)("clipStart")),1),X(e("input",{"onUpdate:modelValue":B[0]||(B[0]=D=>_.value=D),type:"number",min:"0",step:"0.1",class:"field",disabled:b.value},null,8,po),[[Q,_.value,void 0,{number:!0}]])]),e("label",fo,[E(a(t(f)("clipEnd")),1),X(e("input",{"onUpdate:modelValue":B[1]||(B[1]=D=>k.value=D),type:"number",min:"0",step:"0.1",class:"field",disabled:b.value},null,8,go),[[Q,k.value,void 0,{number:!0}]])])])):p("",!0),o.value&&!b.value?(s(),n("button",{key:3,class:"button",disabled:!t(Pe)(_.value,k.value,U.value),onClick:u},a(t(f)("exportClip")),9,bo)):p("",!0),b.value?(s(),n(H,{key:4},[e("progress",{value:I.value,max:"1",class:"w-full"},null,8,yo),e("button",{class:"button",onClick:y},a(t(f)("cancelClip")),1)],64)):p("",!0),S.value?(s(),n("video",{key:5,src:S.value,"aria-label":t(f)("clipPreview"),controls:"",class:"w-full rounded-lg"},null,8,_o)):p("",!0),S.value?(s(),n("a",{key:6,href:S.value,download:"meeting-clip."+d.value,class:"button inline-block"},a(t(f)("downloadFile")),9,ho)):p("",!0),C.value?(s(),n("p",wo,a(C.value),1)):p("",!0)]))}}),xo=pe(ko,[["__scopeId","data-v-fe19e568"]]),$o={class:"rounded-xl border p-4 space-y-4"},Io={class:"font-semibold"},So={key:0,role:"alert",class:"text-destructive text-sm"},Co={key:1,role:"status",class:"text-sm"},Uo={class:"flex flex-wrap gap-2"},zo=["disabled","onClick"],Mo={class:"text-xs text-muted-foreground"},To={class:"flex gap-2"},Lo={class:"flex-1 text-sm"},Ao=["disabled"],Oo={class:"cursor-pointer"},Ro={class:"text-sm mt-2"},Vo={class:"cursor-pointer"},Do={class:"space-y-3 mt-3"},Po={class:"block text-sm"},jo=["value"],Eo={key:0,class:"text-sm"},No={class:"text-sm block"},Bo={class:"flex flex-wrap gap-2"},Fo=["disabled"],Wo=["disabled"],Ho=["href"],qo=ve({__name:"MeetingFollowup",props:{roomId:{},url:{}},setup(R){const M=R,{t:f,errorText:l}=fe(),o=m(null),_=m(null),k=m(""),U=m(""),b=m(""),I=m(""),C=m(""),S=m(""),d=m(!1),r="/api/business/meetings/"+M.roomId;let j=crypto.randomUUID();
6async function z(L){if(!d.value){d.value=!0,C.value="",S.value="";try{await L()}catch(y){C.value=l(y)}finally{d.value=!1}}}async function V(){var L;o.value=await $fetch(r+"/followup"),k.value=((L=o.value.drafts.at(-1))==null?void 0:L.text)||""}async function T(){await z(async()=>{var L;_.value=await $fetch(r+"/replay"),b.value=_.value.recordingId||((L=_.value.recordings.find(y=>y.url))==null?void 0:L.id)||"",I.value=(_.value.chapters||[]).map(y=>`${y.seconds} | ${y.title}`).join(` 7`)})}async function F(L){await z(async()=>{const y=await $fetch(r+"/copilot",{method:"POST",body:{kind:L}});k.value=y.text,j=crypto.randomUUID()})}async function i(){await z(async()=>{await $fetch(r+"/followup",{method:"POST",body:{id:j,email:U.value,text:k.value}}),S.value=f("saved"),j=crypto.randomUUID()})}async function g(L){await z(async()=>{const y=I.value.split(` 8`).filter(u=>u.trim()).map(u=>{const w=u.indexOf("|");return{seconds:w<0?NaN:Number(u.slice(0,w).trim()),title:u.slice(w+1).trim()}});await $fetch(r+"/replay",{method:"POST",body:{published:L,recordingId:L?b.value:_.value.recordingId,chapters:y}}),_.value=await $fetch(r+"/replay"),S.value=f("saved")})}async function c(L){await z(async()=>{await navigator.clipboard.writeText(L),S.value=f("copied")})}function A(){const L=URL.createObjectURL(new Blob([k.value],{type:"text/markdown"})),y=document.createElement("a");y.href=L,y.download="meeting-content.md",y.click(),setTimeout(()=>URL.revokeObjectURL(L),1e3)}return he(()=>z(V)),(L,y)=>{var u,w,B,D,q,G,oe,Y,J;return s(),n("section",$o,[e("h3",Io,a(t(f)("followupStudio")),1),C.value?(s(),n("p",So,a(C.value),1)):p("",!0),S.value?(s(),n("p",Co,a(S.value),1)):p("",!0),e("div",Uo,[(s(),n(H,null,Z(["chapters","followup","content"],O=>e("button",{key:O,class:"button",disabled:d.value,onClick:W=>F(O)},a(t(f)({chapters:"generateChapters",followup:"generateFollowup",content:"generateContent"}[O])),9,zo)),64))]),k.value?(s(),n(H,{key:2},[e("p",Mo,a(t(f)("draftReview")),1),X(e("textarea",{"onUpdate:modelValue":y[0]||(y[0]=O=>k.value=O),class:"field min-h-64",maxlength:"12000"},null,512),[[Q,k.value]]),e("div",To,[e("button",{class:"button",onClick:y[1]||(y[1]=O=>c(k.value))},a(t(f)("copy")),1),e("button",{class:"button",onClick:A},a(t(f)("downloadFile")),1)]),e("form",{class:"flex gap-2",onSubmit:xe(i,["prevent"])},[e("label",Lo,[E(a(t(f)("crmContactEmail")),1),X(e("input",{"onUpdate:modelValue":y[2]||(y[2]=O=>U.value=O),type:"email",required:"",class:"field"},null,512),[[Q,U.value]])]),e("button",{class:"button self-end",disabled:d.value},a(t(f)("saveCrmLead")),9,Ao)],32)],64)):p("",!0),e("details",null,[e("summary",Oo,a(t(f)("registrations"))+" · "+a(((w=(u=o.value)==null?void 0:u.registrations)==null?void 0:w.length)||0),1),e("ul",Ro,[(s(!0),n(H,null,Z(((B=o.value)==null?void 0:B.registrations)||[],O=>(s(),n("li",{key:O.id},a(O.name)+" · "+a(O.email),1))),128))])]),e("details",{onToggle:y[7]||(y[7]=O=>O.target.open&&T())},[e("summary",Vo,a(t(f)("replaySettings")),1),e("div",Do,[e("label",Po,[E(a(t(f)("recordingSelect")),1),X(e("select",{"onUpdate:modelValue":y[3]||(y[3]=O=>b.value=O),class:"field"},[(s(!0),n(H,null,Z(((q=(D=_.value)==null?void 0:D.recordings)==null?void 0:q.filter(O=>O.url))||[],O=>(s(),n("option",{key:O.id,value:O.id},a(new Date(O.startedAt).toLocaleString()),9,jo))),128))],512),[[Ne,b.value]])]),(oe=(G=_.value)==null?void 0:G.recordings)!=null&&oe.some(O=>O.url)?p("",!0):(s(),n("p",Eo,a(t(f)("noContent")),1)),e("label",No,[E(a(t(f)("chapterLines")),1),X(e("textarea",{"onUpdate:modelValue":y[4]||(y[4]=O=>I.value=O),class:"field"},null,512),[[Q,I.value]])]),e("div",Bo,[e("button",{class:"button",disabled:d.value||!b.value,onClick:y[5]||(y[5]=O=>g(!0))},a(t(f)("publishReplay")),9,Fo),e("button",{class:"button",disabled:d.value||!((Y=_.value)!=null&&Y.published),onClick:y[6]||(y[6]=O=>g(!1))},a(t(f)("unpublishReplay")),9,Wo),(J=_.value)!=null&&J.published?(s(),n("a",{key:0,href:L.url.replace("/meet/","/replay/"),class:"button",target:"_blank",rel:"noopener noreferrer"},a(t(f)("replayLink")),9,Ho)):p("",!0)])])],32),b.value?(s(),ee(xo,{key:3,"room
8-id":L.roomId,"recording-id":b.value},null,8,["room-id","recording-id"])):p("",!0)])}}}),Jo=pe(qo,[["__scopeId","data-v-050e722c"]]),Ko={class:"max-w-6xl mx-auto space-y-6 pb-12","data-guide":"business-meetings"},Xo={class:"flex flex-wrap justify-between items-start gap-4"},Go={class:"text-3xl font-bold tracking-tight"},Yo={class:"text-muted-foreground mt-2 max-w-xl"},Zo={class:"flex flex-wrap gap-2"},Qo=["disabled"],en=["disabled"],tn=["disabled"],an={key:0,class:"rounded-xl bg-destructive/10 text-destructive p-4",role:"alert"},sn={key:1,class:"rounded-xl bg-primary/10 p-4 text-sm",role:"status"},on={key:2,class:"space-y-3","aria-busy":"true"},nn={class:"flex gap-2"},ln=["aria-pressed","onClick"],rn={key:0,class:"ml-2 tabular-nums"},dn={key:4,class:"rounded-2xl border border-dashed p-12 text-center text-muted-foreground"},un=["aria-label"],cn={class:"flex justify-between items-start"},mn={class:"text-xl font-semibold"},vn={class:"text-muted-foreground text-sm"},pn={key:0,class:"text-sm whitespace-pre-wrap break-words"},fn={class:"flex flex-wrap gap-2"},gn=["href"],bn=["disabled"],yn=["disabled"],_n=["disabled"],hn=["disabled"],wn=["disabled"],kn={class:"field flex-1 min-w-64"},xn=["disabled"],$n={key:1},In={class:"cursor-pointer text-sm font-semibold"},Sn={class:"field"},Cn={class:"field"},Un=["disabled"],zn={class:"text-sm text-muted-foreground"},Mn={class:"text-sm text-muted-foreground"},Tn={class:"font-semibold"},Ln={class:"text-xs text-muted-foreground"},An={class:"whitespace-pre-wrap mt-3 text-sm"},On={class:"cursor-pointer font-semibold"},Rn={class:"field mt-3"},Vn={class:"max-h-96 overflow-auto space-y-3 mt-4"},Dn={class:"text-muted-foreground"},Pn={class:"whitespace-pre-wrap"},jn=ve({__name:"index",setup(R){const M=lt(),f=m(null),{t:l,locale:o,errorText:_}=fe(),k=m(!0),U=m(!1),b=m(!1),I=m(""),C=m(""),S=m(!1),d=m([]),r=m(null),j=m([]),z=m(""),V=m(null),T=m(null),F=m(0),i=m(!1),g=ue({}),c=ue({}),A=ue({}),L=ue({}),y=new Map;let u=0,w=!1;const B=[];async function D(h,v=!1){var de;const N=h.roomId;if(y.has(N))return y.get(N);if(!v&&((de=g[N])!=null&&de.data))return g[N].data;g[N]={...g[N],loading:!0,error:""};const se=(async()=>{u>=3?await new Promise(K=>B.push(K)):u++;try{if(w)return;const K=await $fetch(`/api/business/meetings/${N}/review`);return w||(g[N]={data:K,loading:!1,error:""}),K}catch(K){w||(g[N]={...g[N],loading:!1,error:_(K)})}finally{y.delete(N);const K=B.shift();K?K():u--}})();return y.set(N,se),se}async function q(h,v){var N;T.value=h,await ke(),(N=V.value)==null||N.open(v),await D(h,!0)}async function G(h){const v=h.roomId;if(!c[v]){c[v]=!0,A[v]="",L[v]="",I.value="";try{const N=o.value.split("-")[0],se=`/api/business/meetings/${v}/package?locale=${encodeURIComponent(N)}`,de=await $fetch(se+"&check=true"),K=document.createElement("a");K.href=se,K.download=de.filename,document.body.append(K),K.click(),K.remove(),C.value=L[v]=l("packageStarted")}catch(N){I.value=A[v]=_(N)}finally{c[v]=!1}}}async function oe(){const h=T.value;if(!(!h||i.value)){i.value=!0;try{await $fetch(`/api/business/meetings/${h.roomId}/action`,{method:"POST",body:{action:"summary"}}),await D(h,!0)}catch(v){g[h.roomId]={...g[h.roomId],loading:!1,error:_(v)}}finally{i.value=!1}}}Ue(()=>{w=!0});const Y=m("upcoming"),J=m(""),O=m(""),W=m(""),$=m(0),ne=m(!1),le=te(()=>ct(d.value)),be=te(()=>le.value[Y.value]),P=te(()=>{var h;return(h=j.value.find(v=>v.id.startsWith("note:meeting-info:")))==null?void 0:h.text}),ge=te(()=>{var h;return(h=j.value.filter(v=>v.kind==="summary").at(-1))==null?void 0:h.text}),we=h=>{const v=new Date(h);return new Date(v.getTime()-v.getTimezoneOffset()*6e4).toISOString().slice(0,16)};async function ye(){k.value=!0,I.value="";try{const h=await $fetch("/api/business/meetings");d.value=h.meetings;for(const v of Object.keys(g))delete g[Number(v)];F.value++,U.value=h.configured,h.configured||(I.value=l("notConfigured"))}catch(h){I.value=_(h),U.value=!1}finally{k.value=!1}}function ze(h){ne.value=h,$.value++,S.value=!0}async function He(h){const v=d.value.find(N=>N.roomId===h);v?(S.value=!1,await Me(v)):await Ee({path:"/dashboard/business/meetings",query:{room:h}})}async function re(h){if(!b.value){b.value=!0,I.value="",C.value="";try{await h()}catch(v){I.value=_(v)}finally{b.value=!1}}}async function Me(h){var v;r.value=h,O.value=we(h.startsAt),W.value=we(h.endsAt),J.value="",await re(Te),await ke(),(v=f.value)==null||v.scrollIntoView({behavior:"smooth",block:"start"})}async function Te(){if(!r.value)return;const h=await $fetch("/api/business/meetings/"+r.value.roomId);j.value=h.events}async function qe(h){await re(async()=>{await navigator.clipboard.writeText(h),C.value=l("copied")})}async function Ie(h){await re(async()=>{const v=await $fetch("/api/business/meetings/"+r.value.roomId+"/action",{method:"POST",body:{action:h}});(v.calendarUpdated===!1||v.invitationsSent===!1)&&(C.value=l("updatesFailed")),await Te(),await ye()})}async function Je(){confirm(l("cancelConfirm"))&&(await Ie("cancel"),r.value=null)}async function Ke(){confirm(l("eraseConfirm"))&&await Ie("erase")}async function Xe(){await re(async()=>{const h=await $fetch("/api/business/meetings/"+r.value.roomId+"/invite",{method:"POST",body:{id:crypto.randomUUID(),emails:J.value.split(",").map(v=>
8v.trim()).filter(Boolean)}});C.value=h.ok?l("sent"):l("error")})}async function Ge(){await re(async()=>{const h=await $fetch("/api/business/meetings/"+r.value.roomId+"/update",{method:"POST",body:{title:r.value.title,startsAt:new Date(O.value).toISOString(),endsAt:new Date(W.value).toISOString()}});await ye(),C.value=h.calendarUpdated&&h.invitationsSent?l("saved"):l("updatesFailed")})}async function Ye(){await re(async()=>{await $fetch("/api/business/meetings/"+r.value.roomId+"/calendar",{method:"POST"}),C.value=l("saved")})}async function Le(){const h=Number(M.query.room);!Number.isSafeInteger(h)||h<1||await re(async()=>{var N;const v=await $fetch("/api/business/meetings/"+h);r.value={...v.room,roomId:h},j.value=v.events,O.value=we(v.room.startsAt),W.value=we(v.room.endsAt),J.value="",Y.value=le.value.upcoming.some(se=>se.roomId===h)?"upcoming":"history",await ke(),(N=f.value)==null||N.scrollIntoView({behavior:"smooth",block:"start"})})}return he(async()=>{await ye(),await Le()}),me(()=>M.query.room,Le),(h,v)=>{var se,de,K;const N=Ze;return s(),n("div",Ko,[ae(N,{active:"meetings"}),e("header",Xo,[e("div",null,[e("h1",Go,a(t(l)("meetings")),1),e("p",Yo,a(t(l)("subtitle")),1)]),e("div",Zo,[e("button",{class:"secondary",disabled:k.value||b.value,onClick:ye},a(k.value?t(l)("loading"):t(l)("refresh")),9,Qo),e("button",{class:"primary",disabled:!U.value||k.value||b.value,onClick:v[0]||(v[0]=x=>ze(!0))},a(t(l)("startNow")),9,en),e("button",{class:"secondary",disabled:!U.value||k.value||b.value,onClick:v[1]||(v[1]=x=>ze(!1))},a(t(l)("schedule")),9,tn)])]),I.value?(s(),n("p",an,a(I.value),1)):p("",!0),C.value?(s(),n("p",sn,a(C.value),1)):p("",!0),k.value?(s(),n("div",on,[(s(),n(H,null,Z(3,x=>e("div",{key:x,class:"h-28 rounded-xl bg-muted animate-pulse"})),64))])):p("",!0),S.value?(s(),ee(ds,{key:$.value,immediate:ne.value,onClose:v[2]||(v[2]=x=>S.value=!1),onBusy:v[3]||(v[3]=x=>b.value=x),onCreated:ye,onManage:He},null,8,["immediate"])):p("",!0),e("nav",nn,[(s(),n(H,null,Z(["upcoming","history"],x=>e("button",{key:x,"aria-pressed":Y.value===x,class:ce(Y.value===x?"primary":"secondary"),onClick:ie=>Y.value=x},[E(a(t(l)(x)),1),k.value?p("",!0):(s(),n("span",rn,a(le.value[x].length),1))],10,ln)),64))]),!k.value&&!I.value&&!be.value.length?(s(),n("p",dn,a(t(l)("empty")),1)):p("",!0),e("ul",{class:"space-y-3","aria-label":t(l)("meetings")},[(s(!0),n(H,null,Z(be.value,x=>{var ie,Ae,Oe;return s(),ee(zs,{key:F.value+":"+x.roomId,meeting:x,review:(ie=g[x.roomId])==null?void 0:ie.data,loading:(Ae=g[x.roomId])==null?void 0:Ae.loading,error:(Oe=g[x.roomId])==null?void 0:Oe.error,downloading:!!c[x.roomId],upcoming:Y.value==="upcoming"&&U.value,onLoad:_e=>D(x,_e),onOpen:_e=>q(x,_e),onDownload:_e=>G(x),onCopy:_e=>qe(x.url)},null,8,["meeting","review","loading","error","downloading","upcoming","onLoad","onOpen","onDownload","onCopy"])}),128))],8,un),ae(lo,{ref_key:"reviewDialog",ref:V,meeting:T.value,review:T.value?(se=g[T.value.roomId])==null?void 0:se.data:void 0,loading:T.value?(de=g[T.value.roomId])==null?void 0:de.loading:!1,error:T.value?A[T.value.roomId]||((K=g[T.value.roomId])==null?void 0:K.error):"",notice:T.value?L[T.value.roomId]:"",downloading:T.value?!!c[T.value.roomId]:!1,generating:i.value,onRefresh:v[4]||(v[4]=x=>T.value&&D(T.value,!0)),onDownload:v[5]||(v[5]=x=>T.value&&G(T.value)),onGenerate:oe,onManage:v[6]||(v[6]=x=>T.value&&Me(T.value))},null,8,["meeting","review","loading","error","notice","downloading","generating"]),r.value?(s(),n("section",{key:5,ref_key:"detailsSection",ref:f,class:"rounded-2xl border bg-card p-6 space-y-5"},[e("div",cn,[e("div",null,[e("h2",mn,a(r.value.title),1),e("p",vn,a(t(l)("details")),1)]),e("button",{class:"secondary",onClick:v[7]||(v[7]=x=>r.value=null)},a(t(l)("close")),1)]),P.value?(s(),n("p",pn,a(P.value),1)):p("",!0),e("div",fn,[e("a",{class:"secondary",href:r.value.url.replace("/meet/","/api/meet/public/")+"/calendar"},a(t(l)("download")),9,gn),e("button",{class:"secondary",disabled:b.value,onClick:Ye},a(t(l)("syncCalendar")),9,bn),e("button",{class:"secondary",disabled:b.value,onClick:v[8]||(v[8]=x=>G(r.value))},a(t(l)("downloadPackage")),9,yn),e("button",{class:"secondary",disabled:b.value,onClick:v[9]||(v[9]=x=>Ie("summary"))},a(t(l)("generateSummary")),9,_n),["ended","cancelled"].includes(r.value.status)?(s(),n("button",{key:1,class:"secondary text-destructive",disabled:b.value,onClick:Ke},a(t(l)("erase")),9,wn)):(s(),n("button",{key:0,class:"secondary",disabled:b.value,onClick:Je},a(t(l)("cancel")),9,hn))]),e("form",{class:"flex flex-wrap gap-2 items-end",onSubmit:xe(Xe,["prevent"])},[e("label",kn,[E(a(t(l)("emails")),1),X(e("input",{"onUpdate:modelValue":v[10]||(v[10]=x=>J.value=x),required:"",class:"input"},null,512),[[Q,J.value]])]),e("button",{class:"primary",disabled:b.value},a(t(l)("invite")),9,xn)],32),r.value.status==="scheduled"?(s(),n("details",$n,[e("summary",In,a(t(l)("reschedule")),1),e("form",{class:"grid sm:grid-cols-2 gap-3 mt-3",onSubmit:xe(Ge,["prevent"])},[e("label",Sn,[E(a(t(l)("startsAt")),1),X(e("input",{"onUpdate:modelValue":v[11]||(v[11]=x=>O.value=x),type:"datetime-local",required:"",class:"input"},null,512),[[Q,O.value]])]),e("label",Cn,[E(a(t(l)("endsAt")),1),X(e("input",{"onUpdate:modelValue":v[12]||(v[12]=x=>W.value=x),type:"datetime-local",required:"",class:"input"},null,512),[[Q,W.value]])]),e("button",{class:"primary",disabled:b.value},a(t(l)("save")),9,Un),e("p",zn,a(t(l)("inviteUpdated")),1)],32)])):p("",!0),e("p",Mn,a(t(l)("audioMinutes",{minutes:Math.round(j.value.filter(x=>x.kind==="usage").reduce((x,ie)=>x+(ie.audioSeconds||0),0)/60)})),1),(s(),ee(dt,{key:"customer-"+r.value.roomId,"room-id":r.value.roomId},null,8,["room-id"])),(s(),ee(ut,{key:"recordings-"+r.value.roomId,"room-id":r.value.roomId},null,8,["room-id"])),(s(),ee(Jo,{key:r.value.roomId,"room-id":r.value.roomId,url:r.value.url},null,8,["room-id","url"])),e("div",null,[e("h3",Tn,a(t(l)("summary")),1),e("p",Ln,a(t(l)("privateSummary")),1),e("p",An,a(ge.value||t(l)("noContent")),1)]),e("details",null,[e("summary",On,a(t(l)("transcript"))+" · "+a(t(l)("chat")),1),e("label",Rn,[E(a(t(l)("message")),1),X(e("input",{"onUpdate:modelValue":v[13]||(v[13]=x=>z.value=x),class:"input"},null,512),[[Q,z.value]])]),e("div",Vn,[(s(!0),n(H,null,Z(j.value.filter(x=>["chat","transcript","card"].includes(x.kind)&&JSON.stringify(x).toLowerCase().includes(z.value.toLowerCase())),x=>{var ie;return s(),n("article",{key:x.id,class:"rounded-lg bg-muted/40 p-3 text-sm"},[e("span",Dn,a(x.sender==="assistant"?t(l)("assistant"):x.name),1),e("p",Pn,a(x.text||((ie=x.card)==null?void 0:ie.title)),1)])}),128))])])],512)):p("",!0)])}}}),sl=pe(jn,[["__scopeId","data-v-0f75fefc"]]);export{sl 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.