From 39d1aa04e45cc4067d0245c2e07cdbb0e3cfe1ab Mon Sep 17 00:00:00 2001 From: Macky Date: Sat, 8 Aug 2026 10:24:53 +0700 Subject: [PATCH] ux(ui): readable persona form instead of raw JSON + step-by-step guides for non-IT users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GroupEdit: replace raw JSON persona dump with a labeled, sectioned PersonaForm (ข้อมูลพื้นฐาน / ข้อมูลลูกค้า / การขาย / ช่องทาง) shown in a modal; admin edits by field. - New reusable components/PersonaForm.vue. - GroupBuilder + Personas: add friendly step-by-step guidance cards ('วิธีสร้าง', 'วิธีฝึก') so admins/trainees know what to do at each step. - Rebuild dist. --- ...ers-r15xKxjs.js => AdminUsers-Dk0NfGIJ.js} | 2 +- ...tics-BothIrTb.js => Analytics-CSPAOjOx.js} | 2 +- .../{Chat-CYFTB7sZ.js => Chat-A2iClHWr.js} | 2 +- .../dist/assets/GroupBuilder-B8gqmNUJ.css | 1 + frontend/dist/assets/GroupBuilder-CxLYlayH.js | 1 - frontend/dist/assets/GroupBuilder-DfeKEJj_.js | 1 + frontend/dist/assets/GroupEdit-BpqVXcH5.css | 1 - frontend/dist/assets/GroupEdit-CZ_bpnDf.js | 4 + frontend/dist/assets/GroupEdit-DiRZ2lxy.js | 1 - frontend/dist/assets/GroupEdit-b5HdCSuv.css | 1 + .../{Login-71KwBI7P.js => Login-B_jgPg0c.js} | 2 +- ...yBoard-CjsbrOsq.js => MyBoard-C90Y_TAq.js} | 2 +- frontend/dist/assets/Personas-BGoC8X56.js | 1 - frontend/dist/assets/Personas-Be_DU4st.css | 1 + frontend/dist/assets/Personas-C5Hggrz_.js | 1 + frontend/dist/assets/Personas-CuqA1oqu.css | 1 - ...tings-D5fpvNb-.js => Settings-B4k75Ydt.js} | 2 +- .../{Setup-DofFBOwX.js => Setup-CvsspD_8.js} | 2 +- ...ining-CBrtrJhQ.js => Training-BxzfTOYv.js} | 2 +- .../{index-gmrXNPrQ.js => index-B2m5OgR7.js} | 12 +- frontend/dist/index.html | 2 +- frontend/src/components/PersonaForm.vue | 129 ++++++++++++++++++ frontend/src/views/GroupBuilder.vue | 81 ++++++----- frontend/src/views/GroupEdit.vue | 93 ++++++++----- frontend/src/views/Personas.vue | 9 ++ 25 files changed, 273 insertions(+), 83 deletions(-) rename frontend/dist/assets/{AdminUsers-r15xKxjs.js => AdminUsers-Dk0NfGIJ.js} (96%) rename frontend/dist/assets/{Analytics-BothIrTb.js => Analytics-CSPAOjOx.js} (98%) rename frontend/dist/assets/{Chat-CYFTB7sZ.js => Chat-A2iClHWr.js} (98%) create mode 100644 frontend/dist/assets/GroupBuilder-B8gqmNUJ.css delete mode 100644 frontend/dist/assets/GroupBuilder-CxLYlayH.js create mode 100644 frontend/dist/assets/GroupBuilder-DfeKEJj_.js delete mode 100644 frontend/dist/assets/GroupEdit-BpqVXcH5.css create mode 100644 frontend/dist/assets/GroupEdit-CZ_bpnDf.js delete mode 100644 frontend/dist/assets/GroupEdit-DiRZ2lxy.js create mode 100644 frontend/dist/assets/GroupEdit-b5HdCSuv.css rename frontend/dist/assets/{Login-71KwBI7P.js => Login-B_jgPg0c.js} (92%) rename frontend/dist/assets/{MyBoard-CjsbrOsq.js => MyBoard-C90Y_TAq.js} (96%) delete mode 100644 frontend/dist/assets/Personas-BGoC8X56.js create mode 100644 frontend/dist/assets/Personas-Be_DU4st.css create mode 100644 frontend/dist/assets/Personas-C5Hggrz_.js delete mode 100644 frontend/dist/assets/Personas-CuqA1oqu.css rename frontend/dist/assets/{Settings-D5fpvNb-.js => Settings-B4k75Ydt.js} (96%) rename frontend/dist/assets/{Setup-DofFBOwX.js => Setup-CvsspD_8.js} (96%) rename frontend/dist/assets/{Training-CBrtrJhQ.js => Training-BxzfTOYv.js} (97%) rename frontend/dist/assets/{index-gmrXNPrQ.js => index-B2m5OgR7.js} (90%) create mode 100644 frontend/src/components/PersonaForm.vue diff --git a/frontend/dist/assets/AdminUsers-r15xKxjs.js b/frontend/dist/assets/AdminUsers-Dk0NfGIJ.js similarity index 96% rename from frontend/dist/assets/AdminUsers-r15xKxjs.js rename to frontend/dist/assets/AdminUsers-Dk0NfGIJ.js index 1c00b46..51eeb3f 100644 --- a/frontend/dist/assets/AdminUsers-r15xKxjs.js +++ b/frontend/dist/assets/AdminUsers-Dk0NfGIJ.js @@ -1 +1 @@ -import{k as x,c as r,a,t,u,i as d,w as n,v as m,C as g,e as _,F as U,p as k,q as f,r as p,o as i,z as V}from"./index-gmrXNPrQ.js";const b={class:"card",style:{"margin-bottom":"16px"}},C={class:"row"},h={key:0,class:"error"},B={style:{flex:"1"}},M={class:"badge"},D={__name:"AdminUsers",setup(N){const v=p([]),o=p(""),s=p({name:"",email:"",password:"",role:"user"});async function c(){v.value=(await f.adminListUsers()).users}async function w(){o.value="";try{await f.adminCreateUser({...s.value}),s.value={name:"",email:"",password:"",role:"user"},await c()}catch(y){o.value=y.message}}return x(c),(y,l)=>(i(),r("div",null,[a("h2",null,t(u(d).t("users")),1),a("div",b,[a("h4",null,"+ "+t(u(d).t("create"))+" user",1),a("div",C,[n(a("input",{"onUpdate:modelValue":l[0]||(l[0]=e=>s.value.name=e),placeholder:"Name",style:{flex:"1"}},null,512),[[m,s.value.name]]),n(a("input",{"onUpdate:modelValue":l[1]||(l[1]=e=>s.value.email=e),placeholder:"Email",style:{flex:"1"}},null,512),[[m,s.value.email]]),n(a("input",{"onUpdate:modelValue":l[2]||(l[2]=e=>s.value.password=e),type:"password",placeholder:"Temp password",style:{flex:"1"}},null,512),[[m,s.value.password]]),n(a("select",{"onUpdate:modelValue":l[3]||(l[3]=e=>s.value.role=e),style:{flex:"1"}},[...l[4]||(l[4]=[a("option",{value:"user"},"user",-1),a("option",{value:"admin"},"admin",-1)])],512),[[g,s.value.role]]),a("button",{class:"primary",onClick:w},t(u(d).t("create")),1)]),o.value?(i(),r("div",h,t(o.value),1)):_("",!0)]),(i(!0),r(U,null,k(v.value,e=>(i(),r("div",{class:"card",key:e.id,style:{"margin-bottom":"8px",display:"flex","align-items":"center",gap:"12px"}},[a("strong",B,t(e.name)+" ("+t(e.email)+")",1),a("span",M,t(e.role),1),a("span",{class:V(["badge",e.active?"won":"lost"])},t(e.active?"active":"inactive"),3)]))),128))]))}};export{D as default}; +import{k as x,c as r,a,t,u,i as d,w as n,v as m,C as g,e as _,F as U,p as k,q as f,r as p,o as i,z as V}from"./index-B2m5OgR7.js";const b={class:"card",style:{"margin-bottom":"16px"}},C={class:"row"},h={key:0,class:"error"},B={style:{flex:"1"}},M={class:"badge"},D={__name:"AdminUsers",setup(N){const v=p([]),o=p(""),s=p({name:"",email:"",password:"",role:"user"});async function c(){v.value=(await f.adminListUsers()).users}async function w(){o.value="";try{await f.adminCreateUser({...s.value}),s.value={name:"",email:"",password:"",role:"user"},await c()}catch(y){o.value=y.message}}return x(c),(y,l)=>(i(),r("div",null,[a("h2",null,t(u(d).t("users")),1),a("div",b,[a("h4",null,"+ "+t(u(d).t("create"))+" user",1),a("div",C,[n(a("input",{"onUpdate:modelValue":l[0]||(l[0]=e=>s.value.name=e),placeholder:"Name",style:{flex:"1"}},null,512),[[m,s.value.name]]),n(a("input",{"onUpdate:modelValue":l[1]||(l[1]=e=>s.value.email=e),placeholder:"Email",style:{flex:"1"}},null,512),[[m,s.value.email]]),n(a("input",{"onUpdate:modelValue":l[2]||(l[2]=e=>s.value.password=e),type:"password",placeholder:"Temp password",style:{flex:"1"}},null,512),[[m,s.value.password]]),n(a("select",{"onUpdate:modelValue":l[3]||(l[3]=e=>s.value.role=e),style:{flex:"1"}},[...l[4]||(l[4]=[a("option",{value:"user"},"user",-1),a("option",{value:"admin"},"admin",-1)])],512),[[g,s.value.role]]),a("button",{class:"primary",onClick:w},t(u(d).t("create")),1)]),o.value?(i(),r("div",h,t(o.value),1)):_("",!0)]),(i(!0),r(U,null,k(v.value,e=>(i(),r("div",{class:"card",key:e.id,style:{"margin-bottom":"8px",display:"flex","align-items":"center",gap:"12px"}},[a("strong",B,t(e.name)+" ("+t(e.email)+")",1),a("span",M,t(e.role),1),a("span",{class:V(["badge",e.active?"won":"lost"])},t(e.active?"active":"inactive"),3)]))),128))]))}};export{D as default}; diff --git a/frontend/dist/assets/Analytics-BothIrTb.js b/frontend/dist/assets/Analytics-CSPAOjOx.js similarity index 98% rename from frontend/dist/assets/Analytics-BothIrTb.js rename to frontend/dist/assets/Analytics-CSPAOjOx.js index 0930610..107f9de 100644 --- a/frontend/dist/assets/Analytics-BothIrTb.js +++ b/frontend/dist/assets/Analytics-CSPAOjOx.js @@ -1 +1 @@ -import{_ as x,k,c,a as s,t,u as o,i as l,l as m,m as y,w as h,v as f,n as C,e as N,F as V,p as L,q as A,s as B,r as u,o as _}from"./index-gmrXNPrQ.js";const S={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},j={style:{margin:"0"}},z={class:"row",style:{"margin-left":"auto",gap:"10px"}},D={class:"users-btn"},F={class:"primary"},M={class:"card filter-bar"},P={class:"muted"},R=["disabled"],T=["disabled"],U={class:"row",style:{gap:"16px",margin:"16px 0"}},W={class:"card stat"},q={class:"card stat"},E={style:{color:"var(--green)"}},I={class:"card stat"},O={style:{color:"var(--red)"}},G={class:"card stat"},H={class:"card stat"},J={class:"card"},K={class:"row",style:{"justify-content":"space-between","align-items":"center"}},Q={class:"bar"},X={class:"muted",style:{"font-size":"12px","margin-top":"6px"}},Y={style:{"margin-top":"20px"}},Z={key:0,class:"card empty-state"},$={class:"grid"},ss={class:"row",style:{"justify-content":"space-between"}},ts={class:"muted"},es={class:"row",style:{"margin-top":"10px",gap:"8px"}},as={class:"badge won"},os={class:"badge lost"},ls={class:"badge not_tried"},ns={class:"muted",style:{"margin-top":"8px"}},is={__name:"Analytics",setup(rs){const a=u({overall:{total_sessions:0,wins:0,losses:0,close_rate:0,avg_score:0},trainee_count:0,hardest_personas:[]}),i=u(""),r=u(""),d=u(!1);async function v(){d.value=!0;try{a.value=await A.analytics({from:i.value,to:r.value})}finally{d.value=!1}}function w(){v()}function b(){i.value="",r.value="",v()}return k(v),(ds,e)=>{const p=B("router-link");return _(),c("div",null,[s("div",S,[s("h2",j,"📊 "+t(o(l).t("adminOverview")),1),s("div",z,[m(p,{to:"/admin/users"},{default:y(()=>[s("button",D,"👥 "+t(o(l).t("users")),1)]),_:1}),m(p,{to:"/admin/new-group"},{default:y(()=>[s("button",F,"+ "+t(o(l).t("addProduct")),1)]),_:1})])]),s("div",M,[s("span",P,"🗓 "+t(o(l).t("dateRange")),1),h(s("input",{type:"date","onUpdate:modelValue":e[0]||(e[0]=n=>i.value=n)},null,512),[[f,i.value]]),e[2]||(e[2]=s("span",null,"–",-1)),h(s("input",{type:"date","onUpdate:modelValue":e[1]||(e[1]=n=>r.value=n)},null,512),[[f,r.value]]),s("button",{class:"primary",onClick:w,disabled:d.value},"→ "+t(o(l).t("apply")),9,R),s("button",{onClick:b,disabled:d.value},t(o(l).t("clear")),9,T)]),s("div",U,[s("div",W,[e[3]||(e[3]=s("div",null,"Sessions",-1)),s("strong",null,t(a.value.overall.total_sessions),1)]),s("div",q,[e[4]||(e[4]=s("div",null,"Wins",-1)),s("strong",E,t(a.value.overall.wins),1)]),s("div",I,[e[5]||(e[5]=s("div",null,"Losses",-1)),s("strong",O,t(a.value.overall.losses),1)]),s("div",G,[e[6]||(e[6]=s("div",null,"Avg score",-1)),s("strong",null,t(a.value.overall.avg_score),1)]),s("div",H,[e[7]||(e[7]=s("div",null,"Trainees",-1)),s("strong",null,t(a.value.trainee_count),1)])]),s("div",J,[s("div",K,[s("strong",null,t(o(l).t("closeRate")),1),s("strong",null,t(a.value.overall.close_rate)+"%",1)]),s("div",Q,[s("div",{class:"bar-fill",style:C({width:(a.value.overall.close_rate||0)+"%"})},null,4)]),s("div",X,t(a.value.overall.wins)+" "+t(o(l).t("won").toLowerCase())+" / "+t(a.value.overall.total_sessions)+" sessions ",1)]),s("h3",Y,t(o(l).t("hardestPersonas")),1),a.value.hardest_personas.length===0?(_(),c("div",Z,[...e[8]||(e[8]=[s("strong",null,"No data",-1),s("span",null,"No sessions in this date range.",-1)])])):N("",!0),s("div",$,[(_(!0),c(V,null,L(a.value.hardest_personas,(n,g)=>(_(),c("div",{key:g,class:"card lift tier-card"},[s("div",ss,[s("strong",null,t(n.persona_name),1),s("span",ts,"#"+t(g+1),1)]),s("div",es,[s("span",as,t(n.wins)+"W",1),s("span",os,t(n.losses)+"L",1),s("span",ls,t(n.plays)+" plays",1)]),s("div",ns,t(o(l).t("score"))+": "+t(n.avg_score),1)]))),128))])])}}},us=x(is,[["__scopeId","data-v-9558687f"]]);export{us as default}; +import{_ as x,k,c,a as s,t,u as o,i as l,l as m,m as y,w as h,v as f,n as C,e as N,F as V,p as L,q as A,s as B,r as u,o as _}from"./index-B2m5OgR7.js";const S={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},j={style:{margin:"0"}},z={class:"row",style:{"margin-left":"auto",gap:"10px"}},D={class:"users-btn"},F={class:"primary"},M={class:"card filter-bar"},P={class:"muted"},R=["disabled"],T=["disabled"],U={class:"row",style:{gap:"16px",margin:"16px 0"}},W={class:"card stat"},q={class:"card stat"},E={style:{color:"var(--green)"}},I={class:"card stat"},O={style:{color:"var(--red)"}},G={class:"card stat"},H={class:"card stat"},J={class:"card"},K={class:"row",style:{"justify-content":"space-between","align-items":"center"}},Q={class:"bar"},X={class:"muted",style:{"font-size":"12px","margin-top":"6px"}},Y={style:{"margin-top":"20px"}},Z={key:0,class:"card empty-state"},$={class:"grid"},ss={class:"row",style:{"justify-content":"space-between"}},ts={class:"muted"},es={class:"row",style:{"margin-top":"10px",gap:"8px"}},as={class:"badge won"},os={class:"badge lost"},ls={class:"badge not_tried"},ns={class:"muted",style:{"margin-top":"8px"}},is={__name:"Analytics",setup(rs){const a=u({overall:{total_sessions:0,wins:0,losses:0,close_rate:0,avg_score:0},trainee_count:0,hardest_personas:[]}),i=u(""),r=u(""),d=u(!1);async function v(){d.value=!0;try{a.value=await A.analytics({from:i.value,to:r.value})}finally{d.value=!1}}function w(){v()}function b(){i.value="",r.value="",v()}return k(v),(ds,e)=>{const p=B("router-link");return _(),c("div",null,[s("div",S,[s("h2",j,"📊 "+t(o(l).t("adminOverview")),1),s("div",z,[m(p,{to:"/admin/users"},{default:y(()=>[s("button",D,"👥 "+t(o(l).t("users")),1)]),_:1}),m(p,{to:"/admin/new-group"},{default:y(()=>[s("button",F,"+ "+t(o(l).t("addProduct")),1)]),_:1})])]),s("div",M,[s("span",P,"🗓 "+t(o(l).t("dateRange")),1),h(s("input",{type:"date","onUpdate:modelValue":e[0]||(e[0]=n=>i.value=n)},null,512),[[f,i.value]]),e[2]||(e[2]=s("span",null,"–",-1)),h(s("input",{type:"date","onUpdate:modelValue":e[1]||(e[1]=n=>r.value=n)},null,512),[[f,r.value]]),s("button",{class:"primary",onClick:w,disabled:d.value},"→ "+t(o(l).t("apply")),9,R),s("button",{onClick:b,disabled:d.value},t(o(l).t("clear")),9,T)]),s("div",U,[s("div",W,[e[3]||(e[3]=s("div",null,"Sessions",-1)),s("strong",null,t(a.value.overall.total_sessions),1)]),s("div",q,[e[4]||(e[4]=s("div",null,"Wins",-1)),s("strong",E,t(a.value.overall.wins),1)]),s("div",I,[e[5]||(e[5]=s("div",null,"Losses",-1)),s("strong",O,t(a.value.overall.losses),1)]),s("div",G,[e[6]||(e[6]=s("div",null,"Avg score",-1)),s("strong",null,t(a.value.overall.avg_score),1)]),s("div",H,[e[7]||(e[7]=s("div",null,"Trainees",-1)),s("strong",null,t(a.value.trainee_count),1)])]),s("div",J,[s("div",K,[s("strong",null,t(o(l).t("closeRate")),1),s("strong",null,t(a.value.overall.close_rate)+"%",1)]),s("div",Q,[s("div",{class:"bar-fill",style:C({width:(a.value.overall.close_rate||0)+"%"})},null,4)]),s("div",X,t(a.value.overall.wins)+" "+t(o(l).t("won").toLowerCase())+" / "+t(a.value.overall.total_sessions)+" sessions ",1)]),s("h3",Y,t(o(l).t("hardestPersonas")),1),a.value.hardest_personas.length===0?(_(),c("div",Z,[...e[8]||(e[8]=[s("strong",null,"No data",-1),s("span",null,"No sessions in this date range.",-1)])])):N("",!0),s("div",$,[(_(!0),c(V,null,L(a.value.hardest_personas,(n,g)=>(_(),c("div",{key:g,class:"card lift tier-card"},[s("div",ss,[s("strong",null,t(n.persona_name),1),s("span",ts,"#"+t(g+1),1)]),s("div",es,[s("span",as,t(n.wins)+"W",1),s("span",os,t(n.losses)+"L",1),s("span",ls,t(n.plays)+" plays",1)]),s("div",ns,t(o(l).t("score"))+": "+t(n.avg_score),1)]))),128))])])}}},us=x(is,[["__scopeId","data-v-9558687f"]]);export{us as default}; diff --git a/frontend/dist/assets/Chat-CYFTB7sZ.js b/frontend/dist/assets/Chat-A2iClHWr.js similarity index 98% rename from frontend/dist/assets/Chat-CYFTB7sZ.js rename to frontend/dist/assets/Chat-A2iClHWr.js index 0c51201..be2ca53 100644 --- a/frontend/dist/assets/Chat-CYFTB7sZ.js +++ b/frontend/dist/assets/Chat-A2iClHWr.js @@ -1 +1 @@ -import{_ as K,k as M,q as k,c as t,l as S,m as D,u as l,a as s,t as e,z as C,e as i,j as m,i as n,F,p as I,w as q,v as E,b as H,h as J,r as c,B as L,s as O,o}from"./index-gmrXNPrQ.js";const P={class:"row",style:{"align-items":"center","margin-bottom":"12px"}},R={style:{margin:"0"}},U={key:0,class:"muted"},$=["disabled"],A={key:0,class:"spinner",style:{"margin-right":"4px"}},G={key:0,class:"card task"},Q={key:0},W={key:0,class:"bubble msg-customer muted"},X={key:2,class:"composer"},Y=["disabled","placeholder"],Z=["disabled"],ee={key:3,class:"card debrief"},se={key:0},ae={class:"json"},te={class:"primary",style:{"margin-top":"12px"}},le={__name:"Chat",setup(ne){const N=J(),_=N.params.gid,g=N.params.pid,r=c(null),f=c(!1),v=c([]),p=c(""),d=c(!1),u=c(null),w=c(""),j=c(null);function T(){L(()=>{y.value&&(y.value.scrollTop=y.value.scrollHeight)})}const y=c(null);M(async()=>{r.value=(await k.getPersona(_,g)).persona;const a=await k.chatStart(_,g);j.value=a.session.id,a.session.task&&(w.value=a.session.task),v.value=a.session.messages||[],f.value=!0,v.value.length&&T()});async function V(){if(p.value.trim()){d.value=!0;try{const a=await k.chatSend(_,g,p.value.trim());v.value=a.messages,p.value="",T()}catch(a){alert(a.message)}finally{d.value=!1}}}async function z(){if(confirm(n.t("finish")+"?")){d.value=!0;try{const a=await k.chatFinish(_,g);u.value=a.debrief,v.value=a.session.messages}catch(a){alert(a.message)}finally{d.value=!1}}}return(a,b)=>{const B=O("router-link");return o(),t("div",null,[S(B,{to:`/groups/${l(_)}/personas`,class:"btn-back"},{default:D(()=>[m("← "+e(l(n).t("personas")),1)]),_:1},8,["to"]),s("div",P,[s("h2",R,e(r.value?r.value.name:"..."),1),s("span",{class:C(["badge",r.value&&r.value.channel])},e(r.value?r.value.channel:""),3),r.value?(o(),t("span",U,e(r.value.profession)+" · "+e(r.value.age_group),1)):i("",!0),s("button",{class:"danger",style:{"margin-left":"auto"},onClick:z,disabled:v.value.length===0||!!u.value},[d.value?(o(),t("span",A)):i("",!0),m(e(l(n).t("finish")),1)],8,$)]),f.value?i("",!0):(o(),t("div",G,[s("strong",null,"📣 "+e(l(n).t("sellerInitiated")),1),w.value?(o(),t("div",Q,e(w.value),1)):i("",!0)])),f.value?(o(),t("div",{key:1,class:"thread",ref_key:"thread",ref:y},[(o(!0),t(F,null,I(v.value,(h,x)=>(o(),t("div",{key:x,class:C(["bubble",h.role==="seller"?"msg-seller":"msg-customer"])},e(h.text),3))),128)),d.value?(o(),t("div",W,"...")):i("",!0)],512)):i("",!0),f.value&&!u.value?(o(),t("div",X,[q(s("input",{"onUpdate:modelValue":b[0]||(b[0]=h=>p.value=h),onKeyup:H(V,["enter"]),disabled:d.value,placeholder:l(n).t("send")},null,40,Y),[[E,p.value]]),s("button",{class:"primary",onClick:V,disabled:d.value||!p.value.trim()},e(l(n).t("send")),9,Z)])):i("",!0),u.value?(o(),t("div",ee,[s("h3",null,e(l(n).t("debrief")),1),s("p",null,[s("span",{class:C(["badge",u.value.outcome])},e(u.value.outcome==="won"?l(n).t("won"):l(n).t("lost")),3),m(" — "+e(l(n).t("score"))+": ",1),s("strong",null,e(u.value.score),1)]),s("p",null,[s("strong",null,e(l(n).t("pain"))+":",1),m(" "+e(u.value.pain||"—"),1)]),s("p",null,[s("strong",null,e(l(n).t("why"))+":",1),m(" "+e(u.value.why),1)]),u.value.coaching&&u.value.coaching.length?(o(),t("div",se,[b[1]||(b[1]=s("strong",null,"Coaching:",-1)),s("ul",null,[(o(!0),t(F,null,I(u.value.coaching,(h,x)=>(o(),t("li",{key:x},e(h),1))),128))])])):i("",!0),s("details",null,[s("summary",null,e(l(n).t("reveal")),1),s("pre",ae,e(JSON.stringify(u.value.revealed_persona,null,2)),1)]),S(B,{to:"/"},{default:D(()=>[s("button",te,e(l(n).t("dashboard")),1)]),_:1})])):i("",!0)])}}},ue=K(le,[["__scopeId","data-v-4f54526a"]]);export{ue as default}; +import{_ as K,k as M,q as k,c as t,l as S,m as D,u as l,a as s,t as e,z as C,e as i,j as m,i as n,F,p as I,w as q,v as E,b as H,h as J,r as c,B as L,s as O,o}from"./index-B2m5OgR7.js";const P={class:"row",style:{"align-items":"center","margin-bottom":"12px"}},R={style:{margin:"0"}},U={key:0,class:"muted"},$=["disabled"],A={key:0,class:"spinner",style:{"margin-right":"4px"}},G={key:0,class:"card task"},Q={key:0},W={key:0,class:"bubble msg-customer muted"},X={key:2,class:"composer"},Y=["disabled","placeholder"],Z=["disabled"],ee={key:3,class:"card debrief"},se={key:0},ae={class:"json"},te={class:"primary",style:{"margin-top":"12px"}},le={__name:"Chat",setup(ne){const N=J(),_=N.params.gid,g=N.params.pid,r=c(null),f=c(!1),v=c([]),p=c(""),d=c(!1),u=c(null),w=c(""),j=c(null);function T(){L(()=>{y.value&&(y.value.scrollTop=y.value.scrollHeight)})}const y=c(null);M(async()=>{r.value=(await k.getPersona(_,g)).persona;const a=await k.chatStart(_,g);j.value=a.session.id,a.session.task&&(w.value=a.session.task),v.value=a.session.messages||[],f.value=!0,v.value.length&&T()});async function V(){if(p.value.trim()){d.value=!0;try{const a=await k.chatSend(_,g,p.value.trim());v.value=a.messages,p.value="",T()}catch(a){alert(a.message)}finally{d.value=!1}}}async function z(){if(confirm(n.t("finish")+"?")){d.value=!0;try{const a=await k.chatFinish(_,g);u.value=a.debrief,v.value=a.session.messages}catch(a){alert(a.message)}finally{d.value=!1}}}return(a,b)=>{const B=O("router-link");return o(),t("div",null,[S(B,{to:`/groups/${l(_)}/personas`,class:"btn-back"},{default:D(()=>[m("← "+e(l(n).t("personas")),1)]),_:1},8,["to"]),s("div",P,[s("h2",R,e(r.value?r.value.name:"..."),1),s("span",{class:C(["badge",r.value&&r.value.channel])},e(r.value?r.value.channel:""),3),r.value?(o(),t("span",U,e(r.value.profession)+" · "+e(r.value.age_group),1)):i("",!0),s("button",{class:"danger",style:{"margin-left":"auto"},onClick:z,disabled:v.value.length===0||!!u.value},[d.value?(o(),t("span",A)):i("",!0),m(e(l(n).t("finish")),1)],8,$)]),f.value?i("",!0):(o(),t("div",G,[s("strong",null,"📣 "+e(l(n).t("sellerInitiated")),1),w.value?(o(),t("div",Q,e(w.value),1)):i("",!0)])),f.value?(o(),t("div",{key:1,class:"thread",ref_key:"thread",ref:y},[(o(!0),t(F,null,I(v.value,(h,x)=>(o(),t("div",{key:x,class:C(["bubble",h.role==="seller"?"msg-seller":"msg-customer"])},e(h.text),3))),128)),d.value?(o(),t("div",W,"...")):i("",!0)],512)):i("",!0),f.value&&!u.value?(o(),t("div",X,[q(s("input",{"onUpdate:modelValue":b[0]||(b[0]=h=>p.value=h),onKeyup:H(V,["enter"]),disabled:d.value,placeholder:l(n).t("send")},null,40,Y),[[E,p.value]]),s("button",{class:"primary",onClick:V,disabled:d.value||!p.value.trim()},e(l(n).t("send")),9,Z)])):i("",!0),u.value?(o(),t("div",ee,[s("h3",null,e(l(n).t("debrief")),1),s("p",null,[s("span",{class:C(["badge",u.value.outcome])},e(u.value.outcome==="won"?l(n).t("won"):l(n).t("lost")),3),m(" — "+e(l(n).t("score"))+": ",1),s("strong",null,e(u.value.score),1)]),s("p",null,[s("strong",null,e(l(n).t("pain"))+":",1),m(" "+e(u.value.pain||"—"),1)]),s("p",null,[s("strong",null,e(l(n).t("why"))+":",1),m(" "+e(u.value.why),1)]),u.value.coaching&&u.value.coaching.length?(o(),t("div",se,[b[1]||(b[1]=s("strong",null,"Coaching:",-1)),s("ul",null,[(o(!0),t(F,null,I(u.value.coaching,(h,x)=>(o(),t("li",{key:x},e(h),1))),128))])])):i("",!0),s("details",null,[s("summary",null,e(l(n).t("reveal")),1),s("pre",ae,e(JSON.stringify(u.value.revealed_persona,null,2)),1)]),S(B,{to:"/"},{default:D(()=>[s("button",te,e(l(n).t("dashboard")),1)]),_:1})])):i("",!0)])}}},ue=K(le,[["__scopeId","data-v-4f54526a"]]);export{ue as default}; diff --git a/frontend/dist/assets/GroupBuilder-B8gqmNUJ.css b/frontend/dist/assets/GroupBuilder-B8gqmNUJ.css new file mode 100644 index 0000000..3ebadca --- /dev/null +++ b/frontend/dist/assets/GroupBuilder-B8gqmNUJ.css @@ -0,0 +1 @@ +.guide[data-v-c7f3b0ac]{background:#eef2ff;border-color:#c7d2fe;margin-bottom:16px}.req[data-v-c7f3b0ac]{color:var(--red)} diff --git a/frontend/dist/assets/GroupBuilder-CxLYlayH.js b/frontend/dist/assets/GroupBuilder-CxLYlayH.js deleted file mode 100644 index cda1767..0000000 --- a/frontend/dist/assets/GroupBuilder-CxLYlayH.js +++ /dev/null @@ -1 +0,0 @@ -import{c as g,a as e,t as l,u as o,i as n,w as r,v,C as m,e as x,r as p,g as k,o as f,q as w}from"./index-gmrXNPrQ.js";const V={class:"card"},B={class:"row"},C={style:{flex:"1"}},U={value:"facebook"},D={value:"line"},F={style:{flex:"1"}},S={value:"th"},E={value:"en"},G={key:0,class:"error"},M=["disabled"],A={__name:"GroupBuilder",setup(N){const h=k(),t=p({product:"",segment:"",description:"",channel:"facebook",language:"th"}),c=p([]),d=p(""),i=p(!1);function _(a){c.value=Array.from(a.target.files||[])}async function b(){i.value=!0,d.value="";try{const a=new FormData;a.append("product",t.value.product),a.append("segment",t.value.segment),a.append("description",t.value.description),a.append("channel",t.value.channel),a.append("language",t.value.language),c.value.forEach(y=>a.append("files",y));const u=(await w.createGroup(a)).group.id;h.push(`/admin/groups/${u}/edit`)}catch(a){d.value=a.message}finally{i.value=!1}}return(a,s)=>(f(),g("div",V,[e("h2",null,l(o(n).t("groupBuilder")),1),e("label",null,l(o(n).t("product")),1),r(e("textarea",{"onUpdate:modelValue":s[0]||(s[0]=u=>t.value.product=u),rows:"3",placeholder:"e.g. Cloud POS for small restaurants"},null,512),[[v,t.value.product]]),e("label",null,l(o(n).t("segment")),1),r(e("input",{"onUpdate:modelValue":s[1]||(s[1]=u=>t.value.segment=u)},null,512),[[v,t.value.segment]]),e("label",null,l(o(n).t("description")),1),r(e("textarea",{"onUpdate:modelValue":s[2]||(s[2]=u=>t.value.description=u),rows:"3"},null,512),[[v,t.value.description]]),e("div",B,[e("div",C,[e("label",null,l(o(n).t("channel")),1),r(e("select",{"onUpdate:modelValue":s[3]||(s[3]=u=>t.value.channel=u)},[e("option",U,l(o(n).t("facebook")),1),e("option",D,l(o(n).t("line")),1)],512),[[m,t.value.channel]])]),e("div",F,[e("label",null,l(o(n).t("language")),1),r(e("select",{"onUpdate:modelValue":s[4]||(s[4]=u=>t.value.language=u)},[e("option",S,l(o(n).t("thai")),1),e("option",E,l(o(n).t("english")),1)],512),[[m,t.value.language]])])]),e("label",null,"📎 Files (.pdf/.md/.txt) — "+l(o(n).t("product"))+" can come from here",1),e("input",{type:"file",multiple:"",accept:".pdf,.md,.txt",onChange:_},null,32),d.value?(f(),g("div",G,l(d.value),1)):x("",!0),e("button",{class:"primary",style:{"margin-top":"16px"},disabled:i.value||!t.value.product&&!c.value.length,onClick:b},l(i.value?"...":o(n).t("create")),9,M)]))}};export{A as default}; diff --git a/frontend/dist/assets/GroupBuilder-DfeKEJj_.js b/frontend/dist/assets/GroupBuilder-DfeKEJj_.js new file mode 100644 index 0000000..79ee376 --- /dev/null +++ b/frontend/dist/assets/GroupBuilder-DfeKEJj_.js @@ -0,0 +1 @@ +import{_ as k,c as f,l as V,m as w,a as e,j as r,t as a,u as s,i as u,w as d,v as m,C as _,e as C,s as B,r as c,q as S,g as U,o as h}from"./index-B2m5OgR7.js";const N={class:"card"},D={style:{"margin-top":"0"}},E={class:"row"},G={style:{flex:"1"}},M={value:"facebook"},P={value:"line"},q={style:{flex:"1"}},F={value:"th"},O={value:"en"},T={key:0,class:"error"},j=["disabled"],A={__name:"GroupBuilder",setup(I){const b=U(),t=c({product:"",segment:"",description:"",channel:"facebook",language:"th"}),v=c([]),i=c(""),p=c(!1);function x(n){v.value=Array.from(n.target.files||[])}async function y(){p.value=!0,i.value="";try{const n=new FormData;n.append("product",t.value.product),n.append("segment",t.value.segment),n.append("description",t.value.description),n.append("channel",t.value.channel),n.append("language",t.value.language),v.value.forEach(o=>n.append("files",o));const g=(await S.createGroup(n)).group.id;b.push(`/admin/groups/${g}/edit`)}catch(n){i.value=n.message}finally{p.value=!1}}return(n,l)=>{const g=B("router-link");return h(),f("div",null,[V(g,{to:"/training",class:"btn-back"},{default:w(()=>[r("← "+a(s(u).t("training")),1)]),_:1}),l[7]||(l[7]=e("div",{class:"card guide"},[e("strong",null,"📋 วิธีสร้างกลุ่มบุคคลต้นแบบ"),e("ol",{style:{margin:"8px 0 0","padding-left":"20px","line-height":"1.8"}},[e("li",null,[r("กรอก "),e("strong",null,"ชื่อ/รายละเอียดสินค้าหรือบริการ"),r(" ที่อยากให้ทีมฝึกขาย (ช่องด้านล่าง)")]),e("li",null,"(ไม่บังคับ) ระบุกลุ่มลูกค้าเป้าหมาย หรืออัปโหลดไฟล์เอกสารสินค้า .pdf/.md/.txt"),e("li",null,[r("กด "),e("strong",null,"สร้าง"),r(" — ระบบจะพาไปหน้าสร้างบุคคลต้นแบบ (ลูกค้าจำลอง)")])])],-1)),e("div",N,[e("h2",D,"📦 "+a(s(u).t("addProduct")),1),e("label",null,[r(a(s(u).t("product"))+" ",1),l[5]||(l[5]=e("span",{class:"req"},"*",-1))]),d(e("textarea",{"onUpdate:modelValue":l[0]||(l[0]=o=>t.value.product=o),rows:"3",placeholder:"เช่น ระบบ POS สำหรับร้านอาหาร Cloud POS for small restaurants"},null,512),[[m,t.value.product]]),e("label",null,a(s(u).t("segment")),1),d(e("input",{"onUpdate:modelValue":l[1]||(l[1]=o=>t.value.segment=o),placeholder:"เช่น SMEs ร้านอาหารในกรุงเทพ"},null,512),[[m,t.value.segment]]),e("label",null,a(s(u).t("description")),1),d(e("textarea",{"onUpdate:modelValue":l[2]||(l[2]=o=>t.value.description=o),rows:"3",placeholder:"รายละเอียดเพิ่มเติม เช่น จุดเด่นสินค้า ราคา ฯลฯ (ไม่บังคับ)"},null,512),[[m,t.value.description]]),e("div",E,[e("div",G,[e("label",null,a(s(u).t("channel")),1),d(e("select",{"onUpdate:modelValue":l[3]||(l[3]=o=>t.value.channel=o)},[e("option",M,a(s(u).t("facebook")),1),e("option",P,a(s(u).t("line")),1)],512),[[_,t.value.channel]])]),e("div",q,[e("label",null,a(s(u).t("language")),1),d(e("select",{"onUpdate:modelValue":l[4]||(l[4]=o=>t.value.language=o)},[e("option",F,a(s(u).t("thai")),1),e("option",O,a(s(u).t("english")),1)],512),[[_,t.value.language]])])]),l[6]||(l[6]=e("label",null,"📎 ไฟล์เอกสารสินค้า (.pdf/.md/.txt) — ใช้เป็นข้อมูลให้ระบบได้",-1)),e("input",{type:"file",multiple:"",accept:".pdf,.md,.txt",onChange:x},null,32),i.value?(h(),f("div",T,a(i.value),1)):C("",!0),e("button",{class:"primary",style:{"margin-top":"16px"},disabled:p.value||!t.value.product&&!v.value.length,onClick:y},a(p.value?"กำลังสร้าง…":"➕ สร้างกลุ่มบุคคลต้นแบบ"),9,j)])])}}},$=k(A,[["__scopeId","data-v-c7f3b0ac"]]);export{$ as default}; diff --git a/frontend/dist/assets/GroupEdit-BpqVXcH5.css b/frontend/dist/assets/GroupEdit-BpqVXcH5.css deleted file mode 100644 index 7175369..0000000 --- a/frontend/dist/assets/GroupEdit-BpqVXcH5.css +++ /dev/null @@ -1 +0,0 @@ -.grid[data-v-ee1c1944]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.pcard[data-v-ee1c1944]{display:flex;flex-direction:column}.pcard button[data-v-ee1c1944]{margin-top:auto}.json[data-v-ee1c1944]{background:#0f172a;color:#9ca3af;padding:10px;border-radius:8px;font-size:11px;overflow:auto;max-height:220px} diff --git a/frontend/dist/assets/GroupEdit-CZ_bpnDf.js b/frontend/dist/assets/GroupEdit-CZ_bpnDf.js new file mode 100644 index 0000000..4f597d2 --- /dev/null +++ b/frontend/dist/assets/GroupEdit-CZ_bpnDf.js @@ -0,0 +1,4 @@ +import{_ as G,D as z,o as v,c as f,a as l,t as i,w as s,v as u,C as A,e as c,E as M,r as k,k as D,l as S,m as I,u as T,i as N,j as y,F as P,p as E,G as q,h as J,q as _,s as R,z as F}from"./index-B2m5OgR7.js";const H={class:"persona-form"},K={class:"muted"},Q={class:"sec"},W={class:"row"},X={class:"f"},Y={class:"f"},Z={class:"f"},h={class:"row"},ll={class:"f"},el={class:"f"},nl={class:"f"},tl={class:"sec"},ol={class:"row"},sl={class:"f"},il={class:"f"},al={class:"f"},ul={class:"sec"},rl={class:"sec"},dl={class:"row"},ml={class:"f"},vl={class:"f"},fl={key:0,class:"muted"},gl={class:"row actions"},bl=["disabled"],yl={__name:"PersonaForm",props:{persona:{type:Object,required:!0}},emits:["save","cancel"],setup(w,{emit:L}){const x=w,$=L,t=M({name:"",difficulty:1,tier:"B",profession:"",age_group:"",location:"",income:"",budget:"",lifestyle:"",background:"",personality:"",communication_style:"",goal:"",decision_timeline:"",opener:"",channel:"line",initiation_mode:"customer",special:""}),d=k(""),b=k(""),m=k(""),V=k(!1);function U(n){return Array.isArray(n)?n.join(` +`):String(n||"")}function C(n){return n.split(` +`).map(e=>e.trim()).filter(Boolean)}z(()=>x.persona,n=>{Object.assign(t,{name:(n==null?void 0:n.name)||"",difficulty:(n==null?void 0:n.difficulty)??1,tier:(n==null?void 0:n.tier)||"B",profession:(n==null?void 0:n.profession)||"",age_group:(n==null?void 0:n.age_group)||"",location:(n==null?void 0:n.location)||"",income:(n==null?void 0:n.income)||"",budget:(n==null?void 0:n.budget)||"",lifestyle:(n==null?void 0:n.lifestyle)||"",background:(n==null?void 0:n.background)||"",personality:(n==null?void 0:n.personality)||"",communication_style:(n==null?void 0:n.communication_style)||"",goal:(n==null?void 0:n.goal)||"",decision_timeline:(n==null?void 0:n.decision_timeline)||"",opener:(n==null?void 0:n.opener)||"",channel:(n==null?void 0:n.channel)||"line",initiation_mode:(n==null?void 0:n.initiation_mode)||"customer",special:(n==null?void 0:n.special)||""}),d.value=U(n==null?void 0:n.pains),b.value=U(n==null?void 0:n.objections),m.value=U(n==null?void 0:n.negotiation_levers)},{immediate:!0});function B(){$("save",{...t,pains:C(d.value),objections:C(b.value),negotiation_levers:C(m.value)})}return(n,e)=>(v(),f("div",H,[l("h3",null,i(w.persona.name||"New persona"),1),l("p",K,i(w.persona.profession)+" · "+i(w.persona.personality),1),l("div",Q,[e[28]||(e[28]=l("h4",null,"👤 ข้อมูลพื้นฐาน",-1)),l("div",W,[l("div",X,[e[21]||(e[21]=l("label",null,"ชื่อ",-1)),s(l("input",{"onUpdate:modelValue":e[0]||(e[0]=o=>t.name=o)},null,512),[[u,t.name]])]),l("div",Y,[e[22]||(e[22]=l("label",null,"ระดับความยาก (1-5)",-1)),s(l("input",{"onUpdate:modelValue":e[1]||(e[1]=o=>t.difficulty=o),type:"number",min:"1",max:"5"},null,512),[[u,t.difficulty,void 0,{number:!0}]])]),l("div",Z,[e[24]||(e[24]=l("label",null,"ระดับลูกค้า",-1)),s(l("select",{"onUpdate:modelValue":e[2]||(e[2]=o=>t.tier=o)},[...e[23]||(e[23]=[l("option",{value:"A"},"A — พร้อมตัดสินใจซื้อ",-1),l("option",{value:"B"},"B — ยังไม่แน่ใจ",-1),l("option",{value:"C"},"C — ไม่สนใจแต่มีปัญหา",-1)])],512),[[A,t.tier]])])]),l("div",h,[l("div",ll,[e[25]||(e[25]=l("label",null,"อาชีพ",-1)),s(l("input",{"onUpdate:modelValue":e[3]||(e[3]=o=>t.profession=o)},null,512),[[u,t.profession]])]),l("div",el,[e[26]||(e[26]=l("label",null,"ช่วงอายุ",-1)),s(l("input",{"onUpdate:modelValue":e[4]||(e[4]=o=>t.age_group=o)},null,512),[[u,t.age_group]])]),l("div",nl,[e[27]||(e[27]=l("label",null,"พื้นที่",-1)),s(l("input",{"onUpdate:modelValue":e[5]||(e[5]=o=>t.location=o)},null,512),[[u,t.location]])])])]),l("div",tl,[e[32]||(e[32]=l("h4",null,"💼 ข้อมูลลูกค้า",-1)),l("div",ol,[l("div",sl,[e[29]||(e[29]=l("label",null,"รายได้/สถานะการเงิน",-1)),s(l("input",{"onUpdate:modelValue":e[6]||(e[6]=o=>t.income=o)},null,512),[[u,t.income]])]),l("div",il,[e[30]||(e[30]=l("label",null,"งบประมาณ",-1)),s(l("input",{"onUpdate:modelValue":e[7]||(e[7]=o=>t.budget=o)},null,512),[[u,t.budget]])]),l("div",al,[e[31]||(e[31]=l("label",null,"ไลฟ์สไตล์",-1)),s(l("input",{"onUpdate:modelValue":e[8]||(e[8]=o=>t.lifestyle=o)},null,512),[[u,t.lifestyle]])])]),e[33]||(e[33]=l("label",null,"ภูมิหลัง",-1)),s(l("textarea",{"onUpdate:modelValue":e[9]||(e[9]=o=>t.background=o)},null,512),[[u,t.background]]),e[34]||(e[34]=l("label",null,"บุคลิก / วิธีพูดคุย",-1)),s(l("textarea",{"onUpdate:modelValue":e[10]||(e[10]=o=>t.personality=o)},null,512),[[u,t.personality]]),e[35]||(e[35]=l("label",null,"สไตล์การสื่อสาร",-1)),s(l("textarea",{"onUpdate:modelValue":e[11]||(e[11]=o=>t.communication_style=o)},null,512),[[u,t.communication_style]])]),l("div",ul,[e[36]||(e[36]=l("h4",null,"🎯 การขาย",-1)),e[37]||(e[37]=l("label",null,"เป้าหมาย",-1)),s(l("textarea",{"onUpdate:modelValue":e[12]||(e[12]=o=>t.goal=o)},null,512),[[u,t.goal]]),e[38]||(e[38]=l("label",null,"กรอบเวลาในการตัดสินใจ",-1)),s(l("input",{"onUpdate:modelValue":e[13]||(e[13]=o=>t.decision_timeline=o)},null,512),[[u,t.decision_timeline]]),e[39]||(e[39]=l("label",null,"Pain (ปัญหา) แบบ 1 ต่อบรรทัด",-1)),s(l("textarea",{"onUpdate:modelValue":e[14]||(e[14]=o=>d.value=o),placeholder:`เช่น ต้นทุนสูงเกินไป +ระบบล้าสมัย`},null,512),[[u,d.value]]),e[40]||(e[40]=l("label",null,"ข้อโต้แย้ง (Objections) 1 ต่อบรรทัด",-1)),s(l("textarea",{"onUpdate:modelValue":e[15]||(e[15]=o=>b.value=o)},null,512),[[u,b.value]]),e[41]||(e[41]=l("label",null,"สิ่งที่ใช้ต่อรอง (เช่น ส่วนลด, ฟรีติดตั้ง)",-1)),s(l("textarea",{"onUpdate:modelValue":e[16]||(e[16]=o=>m.value=o)},null,512),[[u,m.value]]),e[42]||(e[42]=l("label",null,"ช่องทางสำหรับลูกค้าเปิดบทสนทนา (opener)",-1)),s(l("textarea",{"onUpdate:modelValue":e[17]||(e[17]=o=>t.opener=o)},null,512),[[u,t.opener]])]),l("div",rl,[e[47]||(e[47]=l("h4",null,"📡 ช่องทาง & โหมด",-1)),l("div",dl,[l("div",ml,[e[44]||(e[44]=l("label",null,"ช่องทาง",-1)),s(l("select",{"onUpdate:modelValue":e[18]||(e[18]=o=>t.channel=o)},[...e[43]||(e[43]=[l("option",{value:"line"},"LINE",-1),l("option",{value:"facebook"},"Facebook",-1)])],512),[[A,t.channel]])]),l("div",vl,[e[46]||(e[46]=l("label",null,"ใครเริ่มคุยก่อน",-1)),s(l("select",{"onUpdate:modelValue":e[19]||(e[19]=o=>t.initiation_mode=o)},[...e[45]||(e[45]=[l("option",{value:"customer"},"ลูกค้าทักก่อน",-1),l("option",{value:"seller"},"เราต้องเริ่มขาย (เชิงรุก)",-1)])],512),[[A,t.initiation_mode]])])]),t.special?(v(),f("label",fl,"พิเศษ: "+i(t.special),1)):c("",!0)]),l("div",gl,[l("button",{class:"primary",onClick:B,disabled:V.value},i(V.value?"กำลังบันทึก…":"💾 บันทึกบุคคลต้นแบบ"),9,bl),l("button",{onClick:e[20]||(e[20]=o=>n.$emit("cancel"))},"ปิด")])]))}},kl=G(yl,[["__scopeId","data-v-738758fc"]]),xl={class:"row",style:{"align-items":"center","margin-bottom":"8px"}},Vl={style:{margin:"0"}},cl={class:"row",style:{"margin-left":"auto",gap:"10px"}},wl=["disabled"],$l={key:0,class:"spinner"},Ul={key:0,class:"muted"},Cl={key:1,class:"error",style:{margin:"12px 0"}},pl={key:2,class:"card empty-state"},_l={class:"grid"},Bl={class:"row",style:{"justify-content":"space-between","align-items":"center"}},jl={class:"diff"},Al={class:"muted"},Nl={class:"muted"},Pl=["onClick"],El={class:"modal"},Ll={__name:"GroupEdit",setup(w){const x=J().params.gid,$=k(null),t=k([]),d=k(!1),b=k(""),m=k(null);async function V(){const a=await _.getGroup(x);$.value=a.group,t.value=(await _.listPersonas(x)).personas}function U(a){return t.value.filter(r=>r.tier===a)}function C(a){return N.t(a==="A"?"tierA":a==="B"?"tierB":"tierC")}function B(a){return{A:"tier-a",B:"tier-b",C:"tier-c"}[a]||""}async function n(){d.value=!0,b.value="";try{const a=await _.analyzeGroup(x);t.value=a.personas,await V()}catch(a){b.value=a.message}finally{d.value=!1}}function e(a){m.value=JSON.parse(JSON.stringify(a))}async function o(a){d.value=!0;try{await _.updatePersona(x,m.value.id,a),m.value=null,await V()}catch(r){b.value=r.message}finally{d.value=!1}}return D(V),(a,r)=>{const O=R("router-link");return v(),f("div",null,[S(O,{to:"/training",class:"btn-back"},{default:I(()=>[y("← "+i(T(N).t("training")),1)]),_:1}),l("div",xl,[l("h2",Vl,"🛠 "+i(T(N).t("managePersonas")),1),l("div",cl,[l("button",{onClick:n,disabled:d.value,class:"primary"},[d.value?(v(),f("span",$l)):c("",!0),y(i(d.value?"กำลังสร้าง…":"✨ สร้าง/วิเคราะห์บุคคลต้นแบบ"),1)],8,wl)])]),$.value?(v(),f("p",Ul,[r[2]||(r[2]=y("สินค้า: ",-1)),l("strong",null,i($.value.title),1)])):c("",!0),b.value?(v(),f("div",Cl,i(b.value),1)):c("",!0),r[4]||(r[4]=l("div",{class:"card guide"},[l("strong",null,"วิธีใช้หน้านี้"),l("ol",{style:{margin:"8px 0 0","padding-left":"20px","line-height":"1.8"}},[l("li",null,[y("กดปุ่ม "),l("strong",null,"✨ สร้าง/วิเคราะห์บุคคลต้นแบบ"),y(" เพื่อให้ระบบสร้างลูกค้าจำลอง 15 คน (ระดับ A/B/C)")]),l("li",null,[y("แต่ละการ์ดคือลูกค้าจำลอง 1 คน — กด "),l("strong",null,"✏️ แก้ไข"),y(" เพื่อปรับรายละเอียดให้ตรงใจ")]),l("li",null,[y("เมื่อพร้อมให้ผู้ใช้ฝึก กด "),l("strong",null,"เปิดใช้งาน"),y(" (ยังทำในขั้นถัดไป)")])])],-1)),t.value.length===0&&!d.value?(v(),f("div",pl,[...r[3]||(r[3]=[l("strong",null,"ยังไม่มีบุคคลต้นแบบ",-1),l("span",null,'กด "✨ สร้าง/วิเคราะห์บุคคลต้นแบบ" เพื่อให้ระบบสร้างลูกค้าจำลองให้',-1)])])):c("",!0),(v(),f(P,null,E(["A","B","C"],p=>l("div",{key:p,style:{"margin-bottom":"20px"}},[l("h4",null,i(C(p)),1),l("div",_l,[(v(!0),f(P,null,E(U(p),g=>(v(),f("div",{key:g.id,class:"card pcard"},[l("div",Bl,[l("strong",null,i(g.name),1),l("span",{class:F(["badge",B(g.tier)])},i(g.tier),3)]),l("div",jl,[(v(),f(P,null,E(5,j=>l("span",{key:j,class:F(["star",{on:j<=(g.difficulty||1)}])},"★",2)),64))]),l("div",Al,i(g.profession)+" · "+i(g.age_group)+" · "+i(g.location),1),l("div",Nl,i(g.channel)+" · "+i(g.initiation_mode==="seller"?"เริ่มขายเอง":"ลูกค้าทักก่อน"),1),l("button",{class:"edit-btn",onClick:j=>e(g)},"✏️ แก้ไขรายละเอียด",8,Pl)]))),128))])])),64)),m.value?(v(),f("div",{key:3,class:"modal-backdrop",onClick:r[1]||(r[1]=q(p=>m.value=null,["self"]))},[l("div",El,[S(kl,{persona:m.value,onSave:o,onCancel:r[0]||(r[0]=p=>m.value=null)},null,8,["persona"])])])):c("",!0)])}}},Tl=G(Ll,[["__scopeId","data-v-812ba03f"]]);export{Tl as default}; diff --git a/frontend/dist/assets/GroupEdit-DiRZ2lxy.js b/frontend/dist/assets/GroupEdit-DiRZ2lxy.js deleted file mode 100644 index 766c4fe..0000000 --- a/frontend/dist/assets/GroupEdit-DiRZ2lxy.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as S,k as E,c as n,l as J,m as O,a as t,t as e,u as d,i as l,e as m,j as k,F as b,p as x,h as z,q as y,s as G,r as v,o}from"./index-gmrXNPrQ.js";const V={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},j={style:{margin:"0"}},A=["disabled"],P={key:0,class:"spinner",style:{"margin-right":"4px"}},F={key:0,class:"error"},I={key:1,class:"card empty-state"},L={class:"grid"},T={class:"row"},q={key:0,class:"badge"},D={class:"muted"},M={class:"muted",style:{"margin-top":"4px"}},R={style:{"margin-top":"8px"},open:""},$={class:"json"},H=["onClick"],K={__name:"GroupEdit",setup(Q){const _=z().params.gid,g=v(null),p=v([]),i=v(!1),u=v("");async function f(){const s=await y.getGroup(_);g.value=s.group,p.value=(await y.listPersonas(_)).personas}function N(s){return p.value.filter(r=>r.tier===s)}function w(s){return l.t(s==="A"?"tierA":s==="B"?"tierB":"tierC")}async function C(){i.value=!0,u.value="";try{const s=await y.analyzeGroup(_);p.value=s.personas,await f()}catch(s){u.value=s.message}finally{i.value=!1}}function B(s){const r=prompt("Edit persona JSON (full fields):",JSON.stringify(s,null,2));if(r)try{const c=JSON.parse(r);y.updatePersona(_,s.id,c).then(f)}catch(c){u.value="Invalid JSON: "+c.message}}return E(f),(s,r)=>{const c=G("router-link");return o(),n("div",null,[J(c,{to:"/",class:"btn-back"},{default:O(()=>[k("← "+e(d(l).t("dashboard")),1)]),_:1}),t("div",V,[t("h2",j,e(d(l).t("groupBuilder"))+" — "+e(g.value&&g.value.title),1),t("button",{class:"primary",style:{"margin-left":"auto"},onClick:C,disabled:i.value},[i.value?(o(),n("span",P)):m("",!0),k(e(d(l).t("analyze")),1)],8,A)]),u.value?(o(),n("div",F,e(u.value),1)):m("",!0),p.value.length===0&&!i.value?(o(),n("div",I,[r[0]||(r[0]=t("strong",null,"No personas yet",-1)),t("span",null,"Click "+e(d(l).t("analyze"))+" to generate the 15 personas (5 per tier).",1)])):m("",!0),(o(),n(b,null,x(["A","B","C"],h=>t("div",{key:h,style:{"margin-bottom":"20px"}},[t("h4",null,e(w(h)),1),t("div",L,[(o(!0),n(b,null,x(N(h),a=>(o(),n("div",{key:a.id,class:"card pcard"},[t("div",T,[t("strong",null,e(a.name),1),a.special==="wrong_text"?(o(),n("span",q,"⚠️ wrong_text")):m("",!0)]),t("div",D,e(a.profession)+" · "+e(a.age_group)+" · "+e(a.channel)+" · "+e(a.initiation_mode),1),t("div",M,"diff "+e(a.difficulty)+" · "+e(a.income)+" · "+e(a.personality),1),t("details",R,[t("summary",null,e(d(l).t("reveal")),1),t("pre",$,e(JSON.stringify(a,null,2)),1)]),t("button",{onClick:W=>B(a)},"✏️ Edit",8,H)]))),128))])])),64))])}}},Y=S(K,[["__scopeId","data-v-ee1c1944"]]);export{Y as default}; diff --git a/frontend/dist/assets/GroupEdit-b5HdCSuv.css b/frontend/dist/assets/GroupEdit-b5HdCSuv.css new file mode 100644 index 0000000..6aea95c --- /dev/null +++ b/frontend/dist/assets/GroupEdit-b5HdCSuv.css @@ -0,0 +1 @@ +.sec[data-v-738758fc]{margin-top:20px}.sec h4[data-v-738758fc]{margin:0 0 10px;padding-bottom:6px;border-bottom:1px solid var(--border)}.row[data-v-738758fc]{display:flex;gap:12px;flex-wrap:wrap}.f[data-v-738758fc]{flex:1;min-width:140px}label[data-v-738758fc]{font-size:13px;color:var(--muted);display:block;margin:10px 0 4px}input[data-v-738758fc],select[data-v-738758fc],textarea[data-v-738758fc]{width:100%}.actions[data-v-738758fc]{margin-top:20px}.grid[data-v-812ba03f]{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}.pcard[data-v-812ba03f]{display:flex;flex-direction:column}.edit-btn[data-v-812ba03f]{margin-top:auto}.star[data-v-812ba03f]{color:#d8dbe3}.star.on[data-v-812ba03f]{color:#f59e0b}.badge.tier-a[data-v-812ba03f]{background:#dcfce7;color:#166534}.badge.tier-b[data-v-812ba03f]{background:#fef9c3;color:#854d0e}.badge.tier-c[data-v-812ba03f]{background:#fee2e2;color:#991b1b}.guide[data-v-812ba03f]{background:#eef2ff;border-color:#c7d2fe;margin-bottom:16px}.modal-backdrop[data-v-812ba03f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;justify-content:center;align-items:flex-start;padding:40px 16px;z-index:50;overflow:auto}.modal[data-v-812ba03f]{background:#fff;border-radius:14px;padding:24px;width:100%;max-width:720px;box-shadow:0 20px 50px #00000040} diff --git a/frontend/dist/assets/Login-71KwBI7P.js b/frontend/dist/assets/Login-B_jgPg0c.js similarity index 92% rename from frontend/dist/assets/Login-71KwBI7P.js rename to frontend/dist/assets/Login-B_jgPg0c.js index 231de43..291d9e6 100644 --- a/frontend/dist/assets/Login-71KwBI7P.js +++ b/frontend/dist/assets/Login-B_jgPg0c.js @@ -1 +1 @@ -import{_ as b,c as d,a as e,t as s,u as c,i as o,w as y,v as x,b as w,d as k,e as S,r as l,f,g as V,h as B,o as v}from"./index-gmrXNPrQ.js";const C={class:"login-wrap"},D={class:"card login-card"},K={class:"pw-wrap"},E=["type"],L=["aria-label"],M={key:0,class:"error",role:"alert"},N=["disabled"],R={key:0,class:"spinner"},U={key:1},q={__name:"Login",setup(H){const g=B(),_=V(),n=l(""),u=l(""),a=l(!1),r=l(""),i=l(!1);async function m(){r.value="",i.value=!0;try{await f.login(n.value.trim(),u.value),f.mustSetup?_.push({path:"/setup"}):_.push(g.query.redirect||"/")}catch{r.value=o.t("loginError")}finally{i.value=!1}}return(h,t)=>(v(),d("div",C,[e("div",D,[e("h1",null,"🎯 "+s(c(o).t("app")),1),t[3]||(t[3]=e("p",{class:"muted",style:{"margin-top":"-8px"}},"Sales training simulator",-1)),e("label",null,s(c(o).t("username")),1),y(e("input",{"onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),type:"text",autocomplete:"username",onKeyup:w(m,["enter"])},null,544),[[x,n.value]]),e("label",null,s(c(o).t("password")),1),e("div",K,[y(e("input",{"onUpdate:modelValue":t[1]||(t[1]=p=>u.value=p),type:a.value?"text":"password",autocomplete:"current-password",onKeyup:w(m,["enter"])},null,40,E),[[k,u.value]]),e("button",{type:"button",class:"pw-toggle",onClick:t[2]||(t[2]=p=>a.value=!a.value),"aria-label":a.value?"Hide password":"Show password"},s(a.value?"🙈":"👁"),9,L)]),r.value?(v(),d("div",M,s(r.value),1)):S("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:i.value||!n.value||!u.value,onClick:m},[i.value?(v(),d("span",R)):(v(),d("span",U,s(c(o).t("login")),1))],8,N)])]))}},P=b(q,[["__scopeId","data-v-f7904d9f"]]);export{P as default}; +import{_ as b,c as d,a as e,t as s,u as c,i as o,w as y,v as x,b as w,d as k,e as S,r as l,f,g as V,h as B,o as v}from"./index-B2m5OgR7.js";const C={class:"login-wrap"},D={class:"card login-card"},K={class:"pw-wrap"},E=["type"],L=["aria-label"],M={key:0,class:"error",role:"alert"},N=["disabled"],R={key:0,class:"spinner"},U={key:1},q={__name:"Login",setup(H){const g=B(),_=V(),n=l(""),u=l(""),a=l(!1),r=l(""),i=l(!1);async function m(){r.value="",i.value=!0;try{await f.login(n.value.trim(),u.value),f.mustSetup?_.push({path:"/setup"}):_.push(g.query.redirect||"/")}catch{r.value=o.t("loginError")}finally{i.value=!1}}return(h,t)=>(v(),d("div",C,[e("div",D,[e("h1",null,"🎯 "+s(c(o).t("app")),1),t[3]||(t[3]=e("p",{class:"muted",style:{"margin-top":"-8px"}},"Sales training simulator",-1)),e("label",null,s(c(o).t("username")),1),y(e("input",{"onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),type:"text",autocomplete:"username",onKeyup:w(m,["enter"])},null,544),[[x,n.value]]),e("label",null,s(c(o).t("password")),1),e("div",K,[y(e("input",{"onUpdate:modelValue":t[1]||(t[1]=p=>u.value=p),type:a.value?"text":"password",autocomplete:"current-password",onKeyup:w(m,["enter"])},null,40,E),[[k,u.value]]),e("button",{type:"button",class:"pw-toggle",onClick:t[2]||(t[2]=p=>a.value=!a.value),"aria-label":a.value?"Hide password":"Show password"},s(a.value?"🙈":"👁"),9,L)]),r.value?(v(),d("div",M,s(r.value),1)):S("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:i.value||!n.value||!u.value,onClick:m},[i.value?(v(),d("span",R)):(v(),d("span",U,s(c(o).t("login")),1))],8,N)])]))}},P=b(q,[["__scopeId","data-v-f7904d9f"]]);export{P as default}; diff --git a/frontend/dist/assets/MyBoard-CjsbrOsq.js b/frontend/dist/assets/MyBoard-C90Y_TAq.js similarity index 96% rename from frontend/dist/assets/MyBoard-CjsbrOsq.js rename to frontend/dist/assets/MyBoard-C90Y_TAq.js index f242520..2dd1cf1 100644 --- a/frontend/dist/assets/MyBoard-CjsbrOsq.js +++ b/frontend/dist/assets/MyBoard-C90Y_TAq.js @@ -1 +1 @@ -import{_ as f,k as x,q as v,c as l,a as t,t as s,u as e,i as a,e as m,w as k,x as b,F as B,p as S,r as _,y as c,o as r,z as D}from"./index-gmrXNPrQ.js";const M={key:0,class:"row stat-row"},N={class:"card stat"},T={class:"card stat won"},z={class:"card stat lost"},C={class:"card stat"},F={key:1,class:"card"},V={key:2,class:"card empty-state"},j={class:"card",style:{"margin-top":"20px"}},q={style:{"margin-top":"0"}},E={__name:"MyBoard",setup(G){const o=_([]),u=_([]),p=_(!0),y=c(()=>o.value.length),g=c(()=>o.value.filter(n=>n.my_outcome==="won").length),h=c(()=>o.value.filter(n=>n.my_outcome==="lost").length),w=c(()=>o.value.filter(n=>n.my_outcome==="not_tried").length);return x(async()=>{try{o.value=(await v.myBoard()).board||[],u.value=(await v.mySessions()).sessions||[]}finally{p.value=!1}}),(n,i)=>(r(),l("div",null,[t("h2",null,"📊 "+s(e(a).t("myDashboard")),1),p.value?m("",!0):(r(),l("div",M,[t("div",N,[t("span",null,s(e(a).t("total")),1),t("strong",null,s(y.value),1)]),t("div",T,[t("span",null,s(e(a).t("won")),1),t("strong",null,s(g.value),1)]),t("div",z,[t("span",null,s(e(a).t("lost")),1),t("strong",null,s(h.value),1)]),t("div",C,[t("span",null,s(e(a).t("notTried")),1),t("strong",null,s(w.value),1)])])),p.value?(r(),l("div",F,[...i[0]||(i[0]=[t("div",{class:"skeleton",style:{height:"50px"}},null,-1)])])):o.value.length===0?(r(),l("div",V,[...i[1]||(i[1]=[t("strong",null,"No practice yet",-1),t("span",null,"Go to Training and try closing a sale with a persona.",-1)])])):m("",!0),k(t("div",j,[t("h3",q,s(e(a).t("mySessions")),1),(r(!0),l(B,null,S(u.value,d=>(r(),l("div",{key:d.id,style:{display:"flex","justify-content":"space-between",padding:"8px 0","border-bottom":"1px solid var(--border)"}},[t("span",null,s(d.persona_name),1),t("span",{class:D(["badge",d.outcome])},s(d.outcome==="won"?e(a).t("won"):e(a).t("lost")),3)]))),128))],512),[[b,u.value.length]])]))}},L=f(E,[["__scopeId","data-v-1f6ea068"]]);export{L as default}; +import{_ as f,k as x,q as v,c as l,a as t,t as s,u as e,i as a,e as m,w as k,x as b,F as B,p as S,r as _,y as c,o as r,z as D}from"./index-B2m5OgR7.js";const M={key:0,class:"row stat-row"},N={class:"card stat"},T={class:"card stat won"},z={class:"card stat lost"},C={class:"card stat"},F={key:1,class:"card"},V={key:2,class:"card empty-state"},j={class:"card",style:{"margin-top":"20px"}},q={style:{"margin-top":"0"}},E={__name:"MyBoard",setup(G){const o=_([]),u=_([]),p=_(!0),y=c(()=>o.value.length),g=c(()=>o.value.filter(n=>n.my_outcome==="won").length),h=c(()=>o.value.filter(n=>n.my_outcome==="lost").length),w=c(()=>o.value.filter(n=>n.my_outcome==="not_tried").length);return x(async()=>{try{o.value=(await v.myBoard()).board||[],u.value=(await v.mySessions()).sessions||[]}finally{p.value=!1}}),(n,i)=>(r(),l("div",null,[t("h2",null,"📊 "+s(e(a).t("myDashboard")),1),p.value?m("",!0):(r(),l("div",M,[t("div",N,[t("span",null,s(e(a).t("total")),1),t("strong",null,s(y.value),1)]),t("div",T,[t("span",null,s(e(a).t("won")),1),t("strong",null,s(g.value),1)]),t("div",z,[t("span",null,s(e(a).t("lost")),1),t("strong",null,s(h.value),1)]),t("div",C,[t("span",null,s(e(a).t("notTried")),1),t("strong",null,s(w.value),1)])])),p.value?(r(),l("div",F,[...i[0]||(i[0]=[t("div",{class:"skeleton",style:{height:"50px"}},null,-1)])])):o.value.length===0?(r(),l("div",V,[...i[1]||(i[1]=[t("strong",null,"No practice yet",-1),t("span",null,"Go to Training and try closing a sale with a persona.",-1)])])):m("",!0),k(t("div",j,[t("h3",q,s(e(a).t("mySessions")),1),(r(!0),l(B,null,S(u.value,d=>(r(),l("div",{key:d.id,style:{display:"flex","justify-content":"space-between",padding:"8px 0","border-bottom":"1px solid var(--border)"}},[t("span",null,s(d.persona_name),1),t("span",{class:D(["badge",d.outcome])},s(d.outcome==="won"?e(a).t("won"):e(a).t("lost")),3)]))),128))],512),[[b,u.value.length]])]))}},L=f(E,[["__scopeId","data-v-1f6ea068"]]);export{L as default}; diff --git a/frontend/dist/assets/Personas-BGoC8X56.js b/frontend/dist/assets/Personas-BGoC8X56.js deleted file mode 100644 index 259d011..0000000 --- a/frontend/dist/assets/Personas-BGoC8X56.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as $,k as N,c as r,l as v,m as u,a as t,t as s,u as a,i as o,f as b,e as V,F as _,p as y,h as z,q as I,s as L,r as k,o as n,j as x,z as f,A as w}from"./index-gmrXNPrQ.js";const T={class:"row",style:{"align-items":"center"}},j={style:{margin:"0"}},F={class:"muted",style:{"margin-left":"auto"}},q={key:0,class:"row",style:{margin:"12px 0",gap:"10px"}},D={class:"primary"},E={class:"grid"},M={class:"row",style:{"justify-content":"space-between"}},R={class:"diff"},S={class:"muted"},G={class:"muted"},H={class:"muted"},J={class:"muted",style:{"margin-top":"6px"}},K={class:"primary",style:{width:"100%"}},O={class:"primary",style:{width:"100%"}},Q={key:1,class:"muted",style:{"margin-top":"auto","font-size":"12px"}},U={__name:"Personas",setup(W){const c=z().params.gid,p=k([]),A=k(!0);async function B(){try{p.value=(await I.listPersonas(c)).personas}finally{A.value=!1}}function C(i){return p.value.filter(l=>l.tier===i)}function P(i){return o.t(i==="A"?"tierA":i==="B"?"tierB":"tierC")}function g(i){return i==="won"?o.t("won"):i==="lost"?o.t("lost"):o.t("notTried")}return N(B),(i,l)=>{const d=L("router-link");return n(),r("div",null,[v(d,{to:"/training",class:"btn-back"},{default:u(()=>[x("← "+s(a(o).t("training")),1)]),_:1}),t("div",T,[t("h2",j,s(a(o).t("personas")),1),t("span",F,s(a(o).t("selectPersona")),1)]),a(b).isAdmin?(n(),r("div",q,[v(d,{to:`/admin/groups/${a(c)}/edit`},{default:u(()=>[t("button",D,"🛠 "+s(a(o).t("managePersonas")),1)]),_:1},8,["to"]),l[0]||(l[0]=t("span",{class:"muted"},"Admin: full persona data + edit available here.",-1))])):V("",!0),(n(),r(_,null,y(["A","B","C"],m=>t("div",{key:m,style:{margin:"20px 0"}},[t("h4",null,s(P(m)),1),t("div",E,[(n(!0),r(_,null,y(C(m),e=>(n(),r("div",{key:e.id,class:"card pcard lift"},[t("div",M,[t("strong",null,s(e.name),1),t("span",{class:f(["badge",e.my_outcome])},s(g(e.my_outcome)),3)]),t("div",R,[(n(),r(_,null,y(5,h=>t("span",{key:h,class:f(["star",{on:h<=(e.difficulty||1)}])},"★",2)),64)),t("span",S,s(a(o).t("difficulty"))+" "+s(e.difficulty||1)+"/5",1)]),t("div",G,[x(s(e.profession)+" · "+s(e.age_group)+" · "+s(e.location),1),l[1]||(l[1]=t("br",null,null,-1)),t("span",{class:f(["badge",e.channel])},s(e.channel),3),t("span",H," · "+s(e.initiation_mode==="seller"?a(o).t("sellerInitiated"):a(o).t("customerInitiated")),1)]),t("div",J,s(e.product_context),1),a(b).isAdmin?(n(),w(d,{key:0,to:`/groups/${a(c)}/chat/${e.id}`,style:{"margin-top":"auto"}},{default:u(()=>[t("button",K,s(a(o).t("chat")),1)]),_:1},8,["to"])):(n(),r(_,{key:1},[e.my_outcome==="not_tried"?(n(),w(d,{key:0,to:`/groups/${a(c)}/chat/${e.id}`,style:{"margin-top":"auto"}},{default:u(()=>[t("button",O,s(a(o).t("chat")),1)]),_:1},8,["to"])):(n(),r("div",Q,"✓ "+s(a(o).t("trained"))+" ("+s(g(e.my_outcome))+")",1))],64))]))),128))])])),64))])}}},Z=$(U,[["__scopeId","data-v-f8bfbe2d"]]);export{Z as default}; diff --git a/frontend/dist/assets/Personas-Be_DU4st.css b/frontend/dist/assets/Personas-Be_DU4st.css new file mode 100644 index 0000000..3966539 --- /dev/null +++ b/frontend/dist/assets/Personas-Be_DU4st.css @@ -0,0 +1 @@ +.grid[data-v-0fa25205]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.pcard[data-v-0fa25205]{display:flex;flex-direction:column;min-height:190px}.diff[data-v-0fa25205]{margin:8px 0}.star[data-v-0fa25205]{color:#d8dbe3}.star.on[data-v-0fa25205]{color:#f59e0b}.badge.won[data-v-0fa25205]{background:#dcfce7;color:#166534}.badge.lost[data-v-0fa25205]{background:#fee2e2;color:#991b1b}.badge.not_tried[data-v-0fa25205]{background:#eef2ff;color:#4338ca}.guide[data-v-0fa25205]{background:#eef2ff;border-color:#c7d2fe;margin:12px 0 16px} diff --git a/frontend/dist/assets/Personas-C5Hggrz_.js b/frontend/dist/assets/Personas-C5Hggrz_.js new file mode 100644 index 0000000..c1c2a82 --- /dev/null +++ b/frontend/dist/assets/Personas-C5Hggrz_.js @@ -0,0 +1 @@ +import{_ as N,k as V,c as i,l as k,m as u,a as t,t as s,u as a,i as n,f as y,e as b,F as _,p as f,h as z,q as I,s as L,r as x,o,j as w,z as p,A}from"./index-B2m5OgR7.js";const T={class:"row",style:{"align-items":"center"}},j={style:{margin:"0"}},F={class:"muted",style:{"margin-left":"auto"}},q={key:0,class:"card guide"},D={key:1,class:"row",style:{margin:"12px 0",gap:"10px"}},E={class:"primary"},M={class:"grid"},R={class:"row",style:{"justify-content":"space-between"}},S={class:"diff"},G={class:"muted"},H={class:"muted"},J={class:"muted"},K={class:"muted",style:{"margin-top":"6px"}},O={class:"primary",style:{width:"100%"}},Q={class:"primary",style:{width:"100%"}},U={key:1,class:"muted",style:{"margin-top":"auto","font-size":"12px"}},W={__name:"Personas",setup(X){const d=z().params.gid,g=x([]),B=x(!0);async function C(){try{g.value=(await I.listPersonas(d)).personas}finally{B.value=!1}}function P(l){return g.value.filter(r=>r.tier===l)}function $(l){return n.t(l==="A"?"tierA":l==="B"?"tierB":"tierC")}function h(l){return l==="won"?n.t("won"):l==="lost"?n.t("lost"):n.t("notTried")}return V(C),(l,r)=>{const c=L("router-link");return o(),i("div",null,[k(c,{to:"/training",class:"btn-back"},{default:u(()=>[w("← "+s(a(n).t("training")),1)]),_:1}),t("div",T,[t("h2",j,s(a(n).t("personas")),1),t("span",F,s(a(n).t("selectPersona")),1)]),a(y).isAdmin?b("",!0):(o(),i("div",q,[...r[0]||(r[0]=[t("strong",null,"🎯 วิธีฝึก",-1),t("ol",{style:{margin:"8px 0 0","padding-left":"20px","line-height":"1.8"}},[t("li",null,"เลือกลูกค้าจำลอง (บุคคลต้นแบบ) คนหนึ่งที่อยากฝึกด้วย"),t("li",null,"ระดับ A ง่ายสุด → ระดับ C ยากสุด (ดูจากดาว ★ ความยาก)"),t("li",null,"กดปุ่มสำหรับฝึกแชทกับลูกค้าคนนั้น (ฝึกได้คนละครั้งเท่านั้น)")],-1)])])),a(y).isAdmin?(o(),i("div",D,[k(c,{to:`/admin/groups/${a(d)}/edit`},{default:u(()=>[t("button",E,"🛠 "+s(a(n).t("managePersonas")),1)]),_:1},8,["to"]),r[1]||(r[1]=t("span",{class:"muted"},"Admin: full persona data + edit available here.",-1))])):b("",!0),(o(),i(_,null,f(["A","B","C"],m=>t("div",{key:m,style:{margin:"20px 0"}},[t("h4",null,s($(m)),1),t("div",M,[(o(!0),i(_,null,f(P(m),e=>(o(),i("div",{key:e.id,class:"card pcard lift"},[t("div",R,[t("strong",null,s(e.name),1),t("span",{class:p(["badge",e.my_outcome])},s(h(e.my_outcome)),3)]),t("div",S,[(o(),i(_,null,f(5,v=>t("span",{key:v,class:p(["star",{on:v<=(e.difficulty||1)}])},"★",2)),64)),t("span",G,s(a(n).t("difficulty"))+" "+s(e.difficulty||1)+"/5",1)]),t("div",H,[w(s(e.profession)+" · "+s(e.age_group)+" · "+s(e.location),1),r[2]||(r[2]=t("br",null,null,-1)),t("span",{class:p(["badge",e.channel])},s(e.channel),3),t("span",J," · "+s(e.initiation_mode==="seller"?a(n).t("sellerInitiated"):a(n).t("customerInitiated")),1)]),t("div",K,s(e.product_context),1),a(y).isAdmin?(o(),A(c,{key:0,to:`/groups/${a(d)}/chat/${e.id}`,style:{"margin-top":"auto"}},{default:u(()=>[t("button",O,s(a(n).t("chat")),1)]),_:1},8,["to"])):(o(),i(_,{key:1},[e.my_outcome==="not_tried"?(o(),A(c,{key:0,to:`/groups/${a(d)}/chat/${e.id}`,style:{"margin-top":"auto"}},{default:u(()=>[t("button",Q,s(a(n).t("chat")),1)]),_:1},8,["to"])):(o(),i("div",U,"✓ "+s(a(n).t("trained"))+" ("+s(h(e.my_outcome))+")",1))],64))]))),128))])])),64))])}}},tt=N(W,[["__scopeId","data-v-0fa25205"]]);export{tt as default}; diff --git a/frontend/dist/assets/Personas-CuqA1oqu.css b/frontend/dist/assets/Personas-CuqA1oqu.css deleted file mode 100644 index de0beae..0000000 --- a/frontend/dist/assets/Personas-CuqA1oqu.css +++ /dev/null @@ -1 +0,0 @@ -.grid[data-v-f8bfbe2d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.pcard[data-v-f8bfbe2d]{display:flex;flex-direction:column;min-height:190px}.diff[data-v-f8bfbe2d]{margin:8px 0}.star[data-v-f8bfbe2d]{color:#d8dbe3}.star.on[data-v-f8bfbe2d]{color:#f59e0b}.badge.won[data-v-f8bfbe2d]{background:#dcfce7;color:#166534}.badge.lost[data-v-f8bfbe2d]{background:#fee2e2;color:#991b1b}.badge.not_tried[data-v-f8bfbe2d]{background:#eef2ff;color:#4338ca} diff --git a/frontend/dist/assets/Settings-D5fpvNb-.js b/frontend/dist/assets/Settings-B4k75Ydt.js similarity index 96% rename from frontend/dist/assets/Settings-D5fpvNb-.js rename to frontend/dist/assets/Settings-B4k75Ydt.js index e86ac58..f22a8c0 100644 --- a/frontend/dist/assets/Settings-D5fpvNb-.js +++ b/frontend/dist/assets/Settings-B4k75Ydt.js @@ -1 +1 @@ -import{_ as j,r as v,f as u,c as y,a as e,t as o,u as l,i as s,j as x,w as h,v as b,e as k,z as B,q as S,o as f}from"./index-gmrXNPrQ.js";const z={class:"card"},D={style:{"margin-top":"0"}},E={class:"muted"},M=["value"],$={class:"row",style:{gap:"10px","margin-top":"16px"}},q=["disabled"],I={key:0,class:"spinner"},L={class:"card",style:{"margin-top":"16px"}},O={style:{"margin-top":"0"}},A={class:"row",style:{gap:"10px","margin-top":"16px"}},F=["disabled"],G={key:0,class:"spinner"},H={class:"card",style:{"margin-top":"16px"}},J={style:{"margin-top":"0"}},K={class:"row"},Q={key:0,class:"error",role:"alert"},R={key:1,class:"ok",role:"status"},W={__name:"Settings",setup(X){var V,C;const m=v(((V=u.user)==null?void 0:V.name)||""),c=v(((C=u.user)==null?void 0:C.email)||""),i=v(""),_=v(""),r=v(""),p=v(""),w=v(!1),g=v(!1);async function U(){var d,a;r.value="",p.value="",w.value=!0;try{const n={};if(m.value&&m.value!==((d=u.user)==null?void 0:d.name)&&(n.name=m.value),c.value&&c.value!==((a=u.user)==null?void 0:a.email)&&(n.email=c.value),Object.keys(n).length){const t=await S.updateProfile(n);u.user=t.user,p.value=s.t("saved")}}catch(n){r.value=n.message}finally{w.value=!1}}async function N(){var d,a,n;if(r.value="",p.value="",i.value.length<4){r.value=s.t("passwordTooShort");return}if(i.value!==_.value){r.value=s.t("passwordMismatch");return}g.value=!0;try{const t=((d=u.user)==null?void 0:d.username)||((a=u.user)==null?void 0:a.id)||"",T=await S.setup({username:t,email:c.value||((n=u.user)==null?void 0:n.email),password:i.value});u.user=T.user,i.value="",_.value="",p.value=s.t("saved")}catch(t){r.value=t.message}finally{g.value=!1}}function P(d){s.set(d)}return(d,a)=>{var n;return f(),y("div",null,[e("h2",null,"⚙️ "+o(l(s).t("settings")),1),e("div",z,[e("h3",D,"👤 "+o(l(s).t("profile")),1),e("label",null,[x(o(l(s).t("username"))+" ",1),e("span",E,"("+o(l(s).t("readonly"))+")",1)]),e("input",{value:((n=l(u).user)==null?void 0:n.username)||"",disabled:""},null,8,M),e("label",null,o(l(s).t("name")),1),h(e("input",{"onUpdate:modelValue":a[0]||(a[0]=t=>m.value=t),type:"text"},null,512),[[b,m.value]]),e("label",null,o(l(s).t("email")),1),h(e("input",{"onUpdate:modelValue":a[1]||(a[1]=t=>c.value=t),type:"email"},null,512),[[b,c.value]]),e("div",$,[e("button",{class:"primary",disabled:w.value,onClick:U},[w.value?(f(),y("span",I)):k("",!0),x(o(l(s).t("saveProfile")),1)],8,q)])]),e("div",L,[e("h3",O,"🔒 "+o(l(s).t("changePassword")),1),e("label",null,o(l(s).t("newPassword")),1),h(e("input",{"onUpdate:modelValue":a[2]||(a[2]=t=>i.value=t),type:"password",autocomplete:"new-password"},null,512),[[b,i.value]]),e("label",null,o(l(s).t("confirmPassword")),1),h(e("input",{"onUpdate:modelValue":a[3]||(a[3]=t=>_.value=t),type:"password",autocomplete:"new-password"},null,512),[[b,_.value]]),e("div",A,[e("button",{class:"primary",disabled:g.value||!i.value||i.value!==_.value,onClick:N},[g.value?(f(),y("span",G)):k("",!0),x(o(l(s).t("save")),1)],8,F)])]),e("div",H,[e("h3",J,"🌐 "+o(l(s).t("language")),1),e("div",K,[e("button",{class:B({active:l(s).locale==="th"}),onClick:a[4]||(a[4]=t=>P("th"))},"ไทย",2),e("button",{class:B({active:l(s).locale==="en"}),onClick:a[5]||(a[5]=t=>P("en"))},"English",2)])]),r.value?(f(),y("div",Q,o(r.value),1)):k("",!0),p.value?(f(),y("div",R,"✅ "+o(p.value),1)):k("",!0)])}}},Z=j(W,[["__scopeId","data-v-2dca72e5"]]);export{Z as default}; +import{_ as j,r as v,f as u,c as y,a as e,t as o,u as l,i as s,j as x,w as h,v as b,e as k,z as B,q as S,o as f}from"./index-B2m5OgR7.js";const z={class:"card"},D={style:{"margin-top":"0"}},E={class:"muted"},M=["value"],$={class:"row",style:{gap:"10px","margin-top":"16px"}},q=["disabled"],I={key:0,class:"spinner"},L={class:"card",style:{"margin-top":"16px"}},O={style:{"margin-top":"0"}},A={class:"row",style:{gap:"10px","margin-top":"16px"}},F=["disabled"],G={key:0,class:"spinner"},H={class:"card",style:{"margin-top":"16px"}},J={style:{"margin-top":"0"}},K={class:"row"},Q={key:0,class:"error",role:"alert"},R={key:1,class:"ok",role:"status"},W={__name:"Settings",setup(X){var V,C;const m=v(((V=u.user)==null?void 0:V.name)||""),c=v(((C=u.user)==null?void 0:C.email)||""),i=v(""),_=v(""),r=v(""),p=v(""),w=v(!1),g=v(!1);async function U(){var d,a;r.value="",p.value="",w.value=!0;try{const n={};if(m.value&&m.value!==((d=u.user)==null?void 0:d.name)&&(n.name=m.value),c.value&&c.value!==((a=u.user)==null?void 0:a.email)&&(n.email=c.value),Object.keys(n).length){const t=await S.updateProfile(n);u.user=t.user,p.value=s.t("saved")}}catch(n){r.value=n.message}finally{w.value=!1}}async function N(){var d,a,n;if(r.value="",p.value="",i.value.length<4){r.value=s.t("passwordTooShort");return}if(i.value!==_.value){r.value=s.t("passwordMismatch");return}g.value=!0;try{const t=((d=u.user)==null?void 0:d.username)||((a=u.user)==null?void 0:a.id)||"",T=await S.setup({username:t,email:c.value||((n=u.user)==null?void 0:n.email),password:i.value});u.user=T.user,i.value="",_.value="",p.value=s.t("saved")}catch(t){r.value=t.message}finally{g.value=!1}}function P(d){s.set(d)}return(d,a)=>{var n;return f(),y("div",null,[e("h2",null,"⚙️ "+o(l(s).t("settings")),1),e("div",z,[e("h3",D,"👤 "+o(l(s).t("profile")),1),e("label",null,[x(o(l(s).t("username"))+" ",1),e("span",E,"("+o(l(s).t("readonly"))+")",1)]),e("input",{value:((n=l(u).user)==null?void 0:n.username)||"",disabled:""},null,8,M),e("label",null,o(l(s).t("name")),1),h(e("input",{"onUpdate:modelValue":a[0]||(a[0]=t=>m.value=t),type:"text"},null,512),[[b,m.value]]),e("label",null,o(l(s).t("email")),1),h(e("input",{"onUpdate:modelValue":a[1]||(a[1]=t=>c.value=t),type:"email"},null,512),[[b,c.value]]),e("div",$,[e("button",{class:"primary",disabled:w.value,onClick:U},[w.value?(f(),y("span",I)):k("",!0),x(o(l(s).t("saveProfile")),1)],8,q)])]),e("div",L,[e("h3",O,"🔒 "+o(l(s).t("changePassword")),1),e("label",null,o(l(s).t("newPassword")),1),h(e("input",{"onUpdate:modelValue":a[2]||(a[2]=t=>i.value=t),type:"password",autocomplete:"new-password"},null,512),[[b,i.value]]),e("label",null,o(l(s).t("confirmPassword")),1),h(e("input",{"onUpdate:modelValue":a[3]||(a[3]=t=>_.value=t),type:"password",autocomplete:"new-password"},null,512),[[b,_.value]]),e("div",A,[e("button",{class:"primary",disabled:g.value||!i.value||i.value!==_.value,onClick:N},[g.value?(f(),y("span",G)):k("",!0),x(o(l(s).t("save")),1)],8,F)])]),e("div",H,[e("h3",J,"🌐 "+o(l(s).t("language")),1),e("div",K,[e("button",{class:B({active:l(s).locale==="th"}),onClick:a[4]||(a[4]=t=>P("th"))},"ไทย",2),e("button",{class:B({active:l(s).locale==="en"}),onClick:a[5]||(a[5]=t=>P("en"))},"English",2)])]),r.value?(f(),y("div",Q,o(r.value),1)):k("",!0),p.value?(f(),y("div",R,"✅ "+o(p.value),1)):k("",!0)])}}},Z=j(W,[["__scopeId","data-v-2dca72e5"]]);export{Z as default}; diff --git a/frontend/dist/assets/Setup-DofFBOwX.js b/frontend/dist/assets/Setup-CvsspD_8.js similarity index 96% rename from frontend/dist/assets/Setup-DofFBOwX.js rename to frontend/dist/assets/Setup-CvsspD_8.js index 1d131f7..1fdab7a 100644 --- a/frontend/dist/assets/Setup-DofFBOwX.js +++ b/frontend/dist/assets/Setup-CvsspD_8.js @@ -1 +1 @@ -import{_ as x,c as v,a as e,t,u as s,i as a,j as S,f as _,w,v as f,b as y,e as V,r,g as K,o as m}from"./index-gmrXNPrQ.js";const T={class:"setup-wrap"},B={class:"card setup-card"},N={class:"muted"},U={key:0,class:"error",role:"alert"},C=["disabled"],D={key:0,class:"spinner"},M={key:1},P={__name:"Setup",setup(j){const k=K(),i=r(""),l=r(""),p=r(""),o=r(""),d=r(!1);async function c(){if(o.value="",l.value.length<4){o.value=a.t("passwordTooShort");return}if(l.value!==p.value){o.value=a.t("passwordMismatch");return}d.value=!0;try{await _.finishSetup(i.value.trim(),l.value),k.push("/")}catch(h){o.value=h.message}finally{d.value=!1}}return(h,u)=>{var b,g;return m(),v("div",T,[e("div",B,[e("h1",null,"🔐 "+t(s(a).t("setupTitle")),1),e("p",N,[S(t(s(a).t("setupSubtitle"))+" ",1),e("strong",null,t(((b=s(_).user)==null?void 0:b.name)||((g=s(_).user)==null?void 0:g.username)),1)]),e("label",null,t(s(a).t("email")),1),w(e("input",{"onUpdate:modelValue":u[0]||(u[0]=n=>i.value=n),type:"email",autocomplete:"email",onKeyup:y(c,["enter"])},null,544),[[f,i.value]]),e("label",null,t(s(a).t("newPassword")),1),w(e("input",{"onUpdate:modelValue":u[1]||(u[1]=n=>l.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,l.value]]),e("label",null,t(s(a).t("confirmPassword")),1),w(e("input",{"onUpdate:modelValue":u[2]||(u[2]=n=>p.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,p.value]]),o.value?(m(),v("div",U,t(o.value),1)):V("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:d.value||!i.value||!l.value||l.value!==p.value,onClick:c},[d.value?(m(),v("span",D)):(m(),v("span",M,t(s(a).t("save")),1))],8,C)])])}}},I=x(P,[["__scopeId","data-v-f190e120"]]);export{I as default}; +import{_ as x,c as v,a as e,t,u as s,i as a,j as S,f as _,w,v as f,b as y,e as V,r,g as K,o as m}from"./index-B2m5OgR7.js";const T={class:"setup-wrap"},B={class:"card setup-card"},N={class:"muted"},U={key:0,class:"error",role:"alert"},C=["disabled"],D={key:0,class:"spinner"},M={key:1},P={__name:"Setup",setup(j){const k=K(),i=r(""),l=r(""),p=r(""),o=r(""),d=r(!1);async function c(){if(o.value="",l.value.length<4){o.value=a.t("passwordTooShort");return}if(l.value!==p.value){o.value=a.t("passwordMismatch");return}d.value=!0;try{await _.finishSetup(i.value.trim(),l.value),k.push("/")}catch(h){o.value=h.message}finally{d.value=!1}}return(h,u)=>{var b,g;return m(),v("div",T,[e("div",B,[e("h1",null,"🔐 "+t(s(a).t("setupTitle")),1),e("p",N,[S(t(s(a).t("setupSubtitle"))+" ",1),e("strong",null,t(((b=s(_).user)==null?void 0:b.name)||((g=s(_).user)==null?void 0:g.username)),1)]),e("label",null,t(s(a).t("email")),1),w(e("input",{"onUpdate:modelValue":u[0]||(u[0]=n=>i.value=n),type:"email",autocomplete:"email",onKeyup:y(c,["enter"])},null,544),[[f,i.value]]),e("label",null,t(s(a).t("newPassword")),1),w(e("input",{"onUpdate:modelValue":u[1]||(u[1]=n=>l.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,l.value]]),e("label",null,t(s(a).t("confirmPassword")),1),w(e("input",{"onUpdate:modelValue":u[2]||(u[2]=n=>p.value=n),type:"password",autocomplete:"new-password",onKeyup:y(c,["enter"])},null,544),[[f,p.value]]),o.value?(m(),v("div",U,t(o.value),1)):V("",!0),e("button",{class:"primary",style:{width:"100%","margin-top":"16px"},disabled:d.value||!i.value||!l.value||l.value!==p.value,onClick:c},[d.value?(m(),v("span",D)):(m(),v("span",M,t(s(a).t("save")),1))],8,C)])])}}},I=x(P,[["__scopeId","data-v-f190e120"]]);export{I as default}; diff --git a/frontend/dist/assets/Training-CBrtrJhQ.js b/frontend/dist/assets/Training-BxzfTOYv.js similarity index 97% rename from frontend/dist/assets/Training-CBrtrJhQ.js rename to frontend/dist/assets/Training-BxzfTOYv.js index 64c5c9f..a0e7380 100644 --- a/frontend/dist/assets/Training-CBrtrJhQ.js +++ b/frontend/dist/assets/Training-BxzfTOYv.js @@ -1 +1 @@ -import{_ as k,k as x,q as w,f as d,c as r,a as t,t as e,u as s,i as o,A as _,m,e as y,F as b,p as A,r as h,s as C,o as i,z as f}from"./index-gmrXNPrQ.js";const B={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},N={style:{margin:"0"}},P={style:{"margin-left":"auto"}},z={class:"primary"},T={class:"muted"},F={key:0,class:"card",style:{"min-height":"80px"}},L={key:1,class:"card empty-state"},S={key:0},V={key:1},$={class:"grid"},j={class:"card lift train-card"},q={class:"row",style:{"justify-content":"space-between"}},D={class:"muted",style:{margin:"6px 0 12px"}},E={class:"row",style:{gap:"8px"}},G={class:"muted"},I={class:"primary",style:{width:"100%","margin-top":"12px"}},M={__name:"Training",setup(H){const c=h([]),u=h(!0);function v(a){return a.sales_kit&&a.sales_kit.productName||a.input&&a.input.product||""}function g(a){return a.personas||a.persona_count||0}return x(async()=>{try{const a=(await w.listGroups()).groups||[];c.value=d.isAdmin?a:a.filter(l=>l.status==="ready")}finally{u.value=!1}}),(a,l)=>{const p=C("router-link");return i(),r("div",null,[t("div",B,[t("h2",N,"🎯 "+e(s(o).t("training")),1),t("div",P,[s(d).isAdmin?(i(),_(p,{key:0,to:"/admin/new-group"},{default:m(()=>[t("button",z,"+ "+e(s(o).t("addProduct")),1)]),_:1})):y("",!0)])]),t("p",T,e(s(o).t("trainingSubtitle")),1),u.value?(i(),r("div",F,[...l[0]||(l[0]=[t("div",{class:"skeleton",style:{height:"50px"}},null,-1)])])):c.value.length===0?(i(),r("div",L,[t("strong",null,e(s(o).t("noTraining")),1),s(d).isAdmin?(i(),r("span",S,'Click "'+e(s(o).t("addProduct"))+'" to create a persona group.',1)):(i(),r("span",V,"Ask an admin to create a persona group first."))])):y("",!0),t("div",$,[(i(!0),r(b,null,A(c.value,n=>(i(),_(p,{key:n.id,to:s(d).isAdmin?`/admin/groups/${n.id}/edit`:`/groups/${n.id}/personas`,style:{"text-decoration":"none"}},{default:m(()=>[t("div",j,[t("div",q,[t("strong",null,e(n.title),1),t("span",{class:f(["badge",n.status==="ready"?"ready":"draft"])},e(n.status),3)]),t("div",D,e(v(n)),1),t("div",E,[t("span",{class:f(["badge",n.channel||"line"])},e(n.channel||"line"),3),t("span",G,e(g(n))+" "+e(s(o).t("personas").toLowerCase()),1)]),t("button",I,e(s(d).isAdmin?n.status==="ready"?s(o).t("managePersonas"):s(o).t("analyze"):s(o).t("selectPersona")),1)])]),_:2},1032,["to"]))),128))])])}}},K=k(M,[["__scopeId","data-v-901c9d3d"]]);export{K as default}; +import{_ as k,k as x,q as w,f as d,c as r,a as t,t as e,u as s,i as o,A as _,m,e as y,F as b,p as A,r as h,s as C,o as i,z as f}from"./index-B2m5OgR7.js";const B={class:"row",style:{"align-items":"center","margin-bottom":"16px"}},N={style:{margin:"0"}},P={style:{"margin-left":"auto"}},z={class:"primary"},T={class:"muted"},F={key:0,class:"card",style:{"min-height":"80px"}},L={key:1,class:"card empty-state"},S={key:0},V={key:1},$={class:"grid"},j={class:"card lift train-card"},q={class:"row",style:{"justify-content":"space-between"}},D={class:"muted",style:{margin:"6px 0 12px"}},E={class:"row",style:{gap:"8px"}},G={class:"muted"},I={class:"primary",style:{width:"100%","margin-top":"12px"}},M={__name:"Training",setup(H){const c=h([]),u=h(!0);function v(a){return a.sales_kit&&a.sales_kit.productName||a.input&&a.input.product||""}function g(a){return a.personas||a.persona_count||0}return x(async()=>{try{const a=(await w.listGroups()).groups||[];c.value=d.isAdmin?a:a.filter(l=>l.status==="ready")}finally{u.value=!1}}),(a,l)=>{const p=C("router-link");return i(),r("div",null,[t("div",B,[t("h2",N,"🎯 "+e(s(o).t("training")),1),t("div",P,[s(d).isAdmin?(i(),_(p,{key:0,to:"/admin/new-group"},{default:m(()=>[t("button",z,"+ "+e(s(o).t("addProduct")),1)]),_:1})):y("",!0)])]),t("p",T,e(s(o).t("trainingSubtitle")),1),u.value?(i(),r("div",F,[...l[0]||(l[0]=[t("div",{class:"skeleton",style:{height:"50px"}},null,-1)])])):c.value.length===0?(i(),r("div",L,[t("strong",null,e(s(o).t("noTraining")),1),s(d).isAdmin?(i(),r("span",S,'Click "'+e(s(o).t("addProduct"))+'" to create a persona group.',1)):(i(),r("span",V,"Ask an admin to create a persona group first."))])):y("",!0),t("div",$,[(i(!0),r(b,null,A(c.value,n=>(i(),_(p,{key:n.id,to:s(d).isAdmin?`/admin/groups/${n.id}/edit`:`/groups/${n.id}/personas`,style:{"text-decoration":"none"}},{default:m(()=>[t("div",j,[t("div",q,[t("strong",null,e(n.title),1),t("span",{class:f(["badge",n.status==="ready"?"ready":"draft"])},e(n.status),3)]),t("div",D,e(v(n)),1),t("div",E,[t("span",{class:f(["badge",n.channel||"line"])},e(n.channel||"line"),3),t("span",G,e(g(n))+" "+e(s(o).t("personas").toLowerCase()),1)]),t("button",I,e(s(d).isAdmin?n.status==="ready"?s(o).t("managePersonas"):s(o).t("analyze"):s(o).t("selectPersona")),1)])]),_:2},1032,["to"]))),128))])])}}},K=k(M,[["__scopeId","data-v-901c9d3d"]]);export{K as default}; diff --git a/frontend/dist/assets/index-gmrXNPrQ.js b/frontend/dist/assets/index-B2m5OgR7.js similarity index 90% rename from frontend/dist/assets/index-gmrXNPrQ.js rename to frontend/dist/assets/index-B2m5OgR7.js index 16134b2..36038af 100644 --- a/frontend/dist/assets/index-gmrXNPrQ.js +++ b/frontend/dist/assets/index-B2m5OgR7.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-71KwBI7P.js","assets/Login-D3svPLnW.css","assets/Setup-DofFBOwX.js","assets/Setup-BdS_6JlN.css","assets/Analytics-BothIrTb.js","assets/Analytics-ButgVyTK.css","assets/MyBoard-CjsbrOsq.js","assets/MyBoard-Ch6WeOlD.css","assets/Training-CBrtrJhQ.js","assets/Training-BcDA5IbA.css","assets/Personas-BGoC8X56.js","assets/Personas-CuqA1oqu.css","assets/Chat-CYFTB7sZ.js","assets/Chat-D5cDjkYb.css","assets/Settings-D5fpvNb-.js","assets/Settings-y28ROmym.css","assets/GroupEdit-DiRZ2lxy.js","assets/GroupEdit-BpqVXcH5.css"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-B_jgPg0c.js","assets/Login-D3svPLnW.css","assets/Setup-CvsspD_8.js","assets/Setup-BdS_6JlN.css","assets/Analytics-CSPAOjOx.js","assets/Analytics-ButgVyTK.css","assets/MyBoard-C90Y_TAq.js","assets/MyBoard-Ch6WeOlD.css","assets/Training-BxzfTOYv.js","assets/Training-BcDA5IbA.css","assets/Personas-C5Hggrz_.js","assets/Personas-Be_DU4st.css","assets/Chat-A2iClHWr.js","assets/Chat-D5cDjkYb.css","assets/Settings-B4k75Ydt.js","assets/Settings-y28ROmym.css","assets/GroupBuilder-DfeKEJj_.js","assets/GroupBuilder-B8gqmNUJ.css","assets/GroupEdit-CZ_bpnDf.js","assets/GroupEdit-b5HdCSuv.css"])))=>i.map(i=>d[i]); (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();/** * @vue/shared v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -11,17 +11,17 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-71KwBI7P. * @vue/runtime-core v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function Sn(e,t,n,s){try{return s?e(...s):e()}catch(r){Yn(r,t,n)}}function Me(e,t,n,s){if(B(e)){const r=Sn(e,t,n,s);return r&&li(r)&&r.catch(i=>{Yn(i,t,n)}),r}if(V(e)){const r=[];for(let i=0;i>>1,r=ye[s],i=mn(r);i=mn(n)?ye.push(e):ye.splice(_l(t),0,e),e.flags|=1,Ni()}}function Ni(){Mn||(Mn=Ii.then(Mi))}function yl(e){if(!V(e))gt&&e.id===-1?gt.splice(Lt+1,0,e):e.flags&1||(kt.push(e),e.flags|=1);else for(let t=0;tmn(n)-mn(s));if(kt.length=0,gt){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Mi(e){try{for(Ke=0;Ke{s._d&&Hn(-1);const i=Ln(t),o=Ot.length;let l;try{l=e(...r)}finally{for(let c=Ot.length;c>o;c--)lo();Ln(i),s._d&&Hn(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function bu(e,t){if(Ae===null)return e;const n=ts(Ae),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&B(t)?t.call(s&&s.proxy):t}}const vl=Symbol.for("v-scx"),bl=()=>Ne(vl);function In(e,t,n){return Vi(e,t,n)}function Vi(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n),c=t&&s||!t&&i!=="post";let f;if(vn){if(i==="sync"){const m=bl();f=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=ze,m.resume=ze,m.pause=ze,m}}const u=he;l.call=(m,I,R)=>Me(m,u,I,R);let h=!1;i==="post"?l.scheduler=m=>{Ee(m,u&&u.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(m,I)=>{I?m():Xs(m)}),l.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const g=gl(e,t,l);return vn&&(f?f.push(g):c&&g()),g}function El(e,t,n){const s=this.proxy,r=se(e)?e.includes(".")?Fi(s,e):()=>s[e]:e.bind(s,s);let i;B(t)?i=t:(i=t.handler,n=t);const o=An(this),l=Vi(r,i.bind(s),n);return o(),l}function Fi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,as=Symbol("_leaveCb");function Al(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==at){t=n;break}}return t}function Hi(e){if(!er(e))return Qn(e.type)&&e.children?Al(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&B(n.default))return n.default()}}function Zs(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;Zs(Qn(n.type)&&Hi(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ui(e,t){return B(e)?fe({name:e.name},t,{setup:e}):e}function Bi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function hr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const Vn=new WeakMap;function un(e,t,n,s,r=!1){if(V(e)){e.forEach((R,U)=>un(R,t&&(V(t)?t[U]:t),n,s,r));return}if(fn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&un(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ts(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,u=l.refs===X?l.refs={}:l.refs,h=l.setupState,g=W(h),m=h===X?oi:R=>hr(u,R)?!1:$(g,R),I=(R,U)=>!(U&&hr(u,U));if(f!=null&&f!==c){if(pr(t),se(f))u[f]=null,m(f)&&(h[f]=null);else if(pe(f)){const R=t;I(f,R.k)&&(f.value=null),R.k&&(u[R.k]=null)}}if(B(c))Sn(c,l,12,[o,u]);else{const R=se(c),U=pe(c);if(R||U){const F=()=>{if(e.f){const P=R?m(c)?h[c]:u[c]:I()||!e.k?c.value:u[e.k];if(r)V(P)&&Bs(P,i);else if(V(P))P.includes(i)||P.push(i);else if(R)u[c]=[i],m(c)&&(h[c]=u[c]);else{const N=[i];I(c,e.k)&&(c.value=N),e.k&&(u[e.k]=N)}}else R?(u[c]=o,m(c)&&(h[c]=o)):U&&(I(c,e.k)&&(c.value=o),e.k&&(u[e.k]=o))};if(o){const P=()=>{F(),Vn.delete(e)};P.id=-1,Vn.set(e,P),Ee(P,n)}else pr(e),F()}}}function pr(e){const t=Vn.get(e);t&&(t.flags|=8,Vn.delete(e))}zn().requestIdleCallback;zn().cancelIdleCallback;const fn=e=>!!e.type.__asyncLoader,er=e=>e.type.__isKeepAlive;function wl(e,t){ji(e,"a",t)}function Rl(e,t){ji(e,"da",t)}function ji(e,t,n=he){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Xn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)er(r.parent.vnode)&&xl(s,t,n,r),r=r.parent}}function xl(e,t,n,s){const r=Xn(t,e,s,!0);Gi(()=>{Bs(s[t],r)},n)}function Xn(e,t,n=he,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ot();const l=An(n),c=Me(t,n,e,o);return l(),lt(),c});return s?r.unshift(i):r.push(i),i}}const ut=e=>(t,n=he)=>{(!vn||e==="sp")&&Xn(e,(...s)=>t(...s),n)},Tl=ut("bm"),ki=ut("m"),Pl=ut("bu"),Cl=ut("u"),Ol=ut("bum"),Gi=ut("um"),Il=ut("sp"),Nl=ut("rtg"),Dl=ut("rtc");function Ml(e,t=he){Xn("ec",e,t)}const Ll="components";function gr(e,t){return Fl(Ll,e,!0,t)||e}const Vl=Symbol.for("v-ndc");function Fl(e,t,n=!0,s=!1){const r=Ae||he;if(r){const i=r.type;{const l=Ec(i,!1);if(l&&(l===t||l===ve(t)||l===$n(ve(t))))return i}const o=mr(r[e]||i[e],t)||mr(r.appContext[e],t);return!o&&s?i:o}}function mr(e,t){return e&&(e[t]||e[ve(t)]||e[$n(ve(t))])}function Eu(e,t,n,s){let r;const i=n,o=V(e);if(o||se(e)){const l=o&&Ct(e);let c=!1,f=!1;l&&(c=!Ce(e),f=ct(e),e=Jn(e)),r=new Array(e.length);for(let u=0,h=e.length;ut(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;ce?uo(e)?ts(e):Ps(e.parent):null,dn=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ps(e.parent),$root:e=>Ps(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Wi(e),$forceUpdate:e=>e.f||(e.f=()=>{Xs(e.update)}),$nextTick:e=>e.n||(e.n=Qs.bind(e.proxy)),$watch:e=>El.bind(e)}),us=(e,t)=>e!==X&&!e.__isScriptSetup&&$(e,t),Hl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const g=o[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(us(s,t))return o[t]=1,s[t];if(r!==X&&$(r,t))return o[t]=2,r[t];if($(i,t))return o[t]=3,i[t];if(n!==X&&$(n,t))return o[t]=4,n[t];Cs&&(o[t]=0)}}const f=dn[t];let u,h;if(f)return t==="$attrs"&&de(e.attrs,"get",""),f(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==X&&$(n,t))return o[t]=4,n[t];if(h=c.config.globalProperties,$(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return us(r,t)?(r[t]=n,!0):s!==X&&$(s,t)?(s[t]=n,!0):$(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==X&&l[0]!=="$"&&$(e,l)||us(t,l)||$(i,l)||$(s,l)||$(dn,l)||$(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:$(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function _r(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Cs=!0;function Ul(e){const t=Wi(e),n=e.proxy,s=e.ctx;Cs=!1,t.beforeCreate&&yr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:u,beforeMount:h,mounted:g,beforeUpdate:m,updated:I,activated:R,deactivated:U,beforeDestroy:F,beforeUnmount:P,destroyed:N,unmounted:O,render:Y,renderTracked:ie,renderTriggered:ee,errorCaptured:Ve,serverPrefetch:ft,expose:Fe,inheritAttrs:dt,components:bt,directives:He,filters:Qt}=t;if(f&&Bl(f,s,null),o)for(const z in o){const G=o[z];B(G)&&(s[z]=G.bind(n))}if(r){const z=r.call(n,n);q(z)&&(e.data=Yt(z))}if(Cs=!0,i)for(const z in i){const G=i[z],Ye=B(G)?G.bind(n,n):B(G.get)?G.get.bind(n,n):ze,ht=!B(G)&&B(G.set)?G.set.bind(n):ze,Ue=Oe({get:Ye,set:ht});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:be=>Ue.value=be})}if(l)for(const z in l)Ki(l[z],s,n,z);if(c){const z=B(c)?c.call(n):c;Reflect.ownKeys(z).forEach(G=>{On(G,z[G])})}u&&yr(u,e,"c");function le(z,G){V(G)?G.forEach(Ye=>z(Ye.bind(n))):G&&z(G.bind(n))}if(le(Tl,h),le(ki,g),le(Pl,m),le(Cl,I),le(wl,R),le(Rl,U),le(Ml,Ve),le(Dl,ie),le(Nl,ee),le(Ol,P),le(Gi,O),le(Il,ft),V(Fe))if(Fe.length){const z=e.exposed||(e.exposed={});Fe.forEach(G=>{Object.defineProperty(z,G,{get:()=>n[G],set:Ye=>n[G]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});Y&&e.render===ze&&(e.render=Y),dt!=null&&(e.inheritAttrs=dt),bt&&(e.components=bt),He&&(e.directives=He),ft&&Bi(e)}function Bl(e,t,n=ze){V(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;q(r)?"default"in r?i=Ne(r.from||s,r.default,!0):i=Ne(r.from||s):i=Ne(r),pe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function yr(e,t,n){Me(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ki(e,t,n,s){let r=s.includes(".")?Fi(n,s):()=>n[s];if(se(e)){const i=t[e];B(i)&&In(r,i)}else if(B(e))In(r,e.bind(n));else if(q(e))if(V(e))e.forEach(i=>Ki(i,t,n,s));else{const i=B(e.handler)?e.handler.bind(n):t[e.handler];B(i)&&In(r,i,e)}}function Wi(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Fn(c,f,o,!0)),Fn(c,t,o)),q(t)&&i.set(t,c),c}function Fn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Fn(e,i,n,!0),r&&r.forEach(o=>Fn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=jl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const jl={data:vr,props:br,emits:br,methods:sn,computed:sn,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:sn,directives:sn,watch:Gl,provide:vr,inject:kl};function vr(e,t){return t?e?function(){return fe(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function kl(e,t){return sn(Os(e),Os(t))}function Os(e){if(V(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ve(t)}Modifiers`]||e[`${vt(t)}Modifiers`];function ql(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&$l(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>se(u)?u.trim():u)),o.number&&(r=n.map(qn)));let l,c=s[l=rs(t)]||s[l=rs(ve(t))];!c&&i&&(c=s[l=rs(vt(t))]),c&&Me(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Me(f,e,6,r)}}const zl=new WeakMap;function qi(e,t,n=!1){const s=n?zl:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!B(e)){const c=f=>{const u=qi(f,t,!0);u&&(l=!0,fe(o,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(q(e)&&s.set(e,null),null):(V(i)?i.forEach(c=>o[c]=null):fe(o,i),q(e)&&s.set(e,o),o)}function Zn(e,t){return!e||!Gn(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),$(e,t[0].toLowerCase()+t.slice(1))||$(e,vt(t))||$(e,t))}function Er(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:u,props:h,data:g,setupState:m,ctx:I,inheritAttrs:R}=e,U=Ln(e);let F,P;try{if(n.shapeFlag&4){const O=r||s,Y=O;F=$e(f.call(Y,O,u,h,m,g,I)),P=l}else{const O=t;F=$e(O.length>1?O(h,{attrs:l,slots:o,emit:c}):O(h,null)),P=t.props?l:Jl(l)}}catch(O){Ot.length=0,Yn(O,e,1),F=ue(at)}let N=F;if(P&&R!==!1){const O=Object.keys(P),{shapeFlag:Y}=N;O.length&&Y&7&&(i&&O.some(Kn)&&(P=Yl(P,i)),N=Wt(N,P,!1,!0))}if(n.dirs&&(N=Wt(N,null,!1,!0),N.dirs=N.dirs?N.dirs.concat(n.dirs):n.dirs),n.transition){const O=Qn(N.type)&&Hi(N)||N;Zs(O,n.transition)}return F=N,Ln(U),F}const Jl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},Yl=(e,t)=>{const n={};for(const s in e)(!Kn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ql(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Sr(s,o,f):!!o;if(c&8){const u=t.dynamicProps;for(let h=0;hObject.create(Ji),Qi=e=>Object.getPrototypeOf(e)===Ji;function Zl(e,t,n,s=!1){const r={},i=Yi();e.propsDefaults=Object.create(null),Xi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Pi(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ec(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=W(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,m]=Zi(h,t,!0);fe(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!c)return q(e)&&s.set(e,Ut),Ut;if(V(i))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",nr=e=>V(e)?e.map($e):[$e(e)],nc=(e,t,n)=>{if(t._n)return t;const s=Vt((...r)=>nr(t(...r)),n);return s._c=!1,s},eo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(tr(r))continue;const i=e[r];if(B(i))t[r]=nc(r,i,s);else if(i!=null){const o=nr(i);t[r]=()=>o}}},to=(e,t)=>{const n=nr(t);e.slots.default=()=>n},no=(e,t,n)=>{for(const s in t)(n||!tr(s))&&(e[s]=t[s])},sc=(e,t,n)=>{const s=e.slots=Yi();if(e.vnode.shapeFlag&32){const r=t._;r?(no(s,t,n),n&&ui(s,"_",r,!0)):eo(t,s)}else t&&to(e,t)},rc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:no(r,t,n):(i=!t.$stable,eo(t,r)),o=t}else t&&(to(e,t),o={default:1});if(i)for(const l in r)!tr(l)&&o[l]==null&&delete r[l]},Ee=ac;function ic(e){return oc(e)}function oc(e,t){const n=zn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:u,parentNode:h,nextSibling:g,setScopeId:m=ze,insertStaticContent:I}=e,R=(a,d,p,y=null,b=null,_=null,w=void 0,A=null,S=!!d.dynamicChildren)=>{if(a===d)return;a&&!en(a,d)&&(y=v(a),be(a,b,_,!0),a=null),d.patchFlag===-2&&(S=!1,d.dynamicChildren=null);const{type:E,ref:L,shapeFlag:T}=d;switch(E){case es:U(a,d,p,y);break;case at:F(a,d,p,y);break;case ds:a==null&&P(d,p,y,w);break;case tt:bt(a,d,p,y,b,_,w,A,S);break;default:T&1?Y(a,d,p,y,b,_,w,A,S):T&6?He(a,d,p,y,b,_,w,A,S):(T&64||T&128)&&E.process(a,d,p,y,b,_,w,A,S,D)}L!=null&&b?un(L,a&&a.ref,_,d||a,!d):L==null&&a&&a.ref!=null&&un(a.ref,null,_,a,!0)},U=(a,d,p,y)=>{if(a==null)s(d.el=l(d.children),p,y);else{const b=d.el=a.el;d.children!==a.children&&f(b,d.children)}},F=(a,d,p,y)=>{a==null?s(d.el=c(d.children||""),p,y):d.el=a.el},P=(a,d,p,y)=>{[a.el,a.anchor]=I(a.children,d,p,y,a.el,a.anchor)},N=({el:a,anchor:d},p,y)=>{let b;for(;a&&a!==d;)b=g(a),s(a,p,y),a=b;s(d,p,y)},O=({el:a,anchor:d})=>{let p;for(;a&&a!==d;)p=g(a),r(a),a=p;r(d)},Y=(a,d,p,y,b,_,w,A,S)=>{if(d.type==="svg"?w="svg":d.type==="math"&&(w="mathml"),a==null)ie(d,p,y,b,_,w,A,S);else{const E=a.el&&a.el._isVueCE?a.el:null;try{E&&E._beginPatch(),ft(a,d,b,_,w,A,S)}finally{E&&E._endPatch()}}},ie=(a,d,p,y,b,_,w,A)=>{let S,E;const{props:L,shapeFlag:T,transition:M,dirs:H}=a;if(S=a.el=o(a.type,_,L&&L.is,L),T&8?u(S,a.children):T&16&&Ve(a.children,S,null,y,b,fs(a,_),w,A),H&&St(a,null,y,"created"),ee(S,a,a.scopeId,w,y),L){for(const Q in L)Q!=="value"&&!ln(Q)&&i(S,Q,null,L[Q],_,y);"value"in L&&i(S,"value",null,L.value,_),(E=L.onVnodeBeforeMount)&&Ge(E,y,a)}H&&St(a,null,y,"beforeMount");const k=lc(b,M);k&&M.beforeEnter(S),s(S,d,p),((E=L&&L.onVnodeMounted)||k||H)&&Ee(()=>{try{E&&Ge(E,y,a),k&&M.enter(S),H&&St(a,null,y,"mounted")}finally{}},b)},ee=(a,d,p,y,b)=>{if(p&&m(a,p),y)for(let _=0;_{for(let E=S;E{const A=d.el=a.el;let{patchFlag:S,dynamicChildren:E,dirs:L}=d;S|=a.patchFlag&16;const T=a.props||X,M=d.props||X;let H;if(p&&At(p,!1),(H=M.onVnodeBeforeUpdate)&&Ge(H,p,d,a),L&&St(d,a,p,"beforeUpdate"),p&&At(p,!0),E&&(!a.dynamicChildren||a.dynamicChildren.length!==E.length)&&(S=0,w=!1,E=null),(T.innerHTML&&M.innerHTML==null||T.textContent&&M.textContent==null)&&u(A,""),E?Fe(a.dynamicChildren,E,A,p,y,fs(d,b),_):w||G(a,d,A,null,p,y,fs(d,b),_,!1),S>0){if(S&16)dt(A,T,M,p,b);else if(S&2&&T.class!==M.class&&i(A,"class",null,M.class,b),S&4&&i(A,"style",T.style,M.style,b),S&8){const k=d.dynamicProps;for(let Q=0;Q{H&&Ge(H,p,d,a),L&&St(d,a,p,"updated")},y)},Fe=(a,d,p,y,b,_,w)=>{for(let A=0;A{if(d!==p){if(d!==X)for(const _ in d)!ln(_)&&!(_ in p)&&i(a,_,d[_],null,b,y);for(const _ in p){if(ln(_))continue;const w=p[_],A=d[_];w!==A&&_!=="value"&&i(a,_,A,w,b,y)}"value"in p&&i(a,"value",d.value,p.value,b)}},bt=(a,d,p,y,b,_,w,A,S)=>{const E=d.el=a?a.el:l(""),L=d.anchor=a?a.anchor:l("");let{patchFlag:T,dynamicChildren:M,slotScopeIds:H}=d;H&&(A=A?A.concat(H):H),a==null?(s(E,p,y),s(L,p,y),Ve(d.children||[],p,L,b,_,w,A,S)):T>0&&T&64&&M&&a.dynamicChildren&&a.dynamicChildren.length===M.length?(Fe(a.dynamicChildren,M,p,b,_,w,A),(d.key!=null||b&&d===b.subTree)&&so(a,d,!0)):G(a,d,p,L,b,_,w,A,S)},He=(a,d,p,y,b,_,w,A,S)=>{d.slotScopeIds=A,a==null?d.shapeFlag&512?b.ctx.activate(d,p,y,w,S):Qt(d,p,y,b,_,w,S):It(a,d,S)},Qt=(a,d,p,y,b,_,w)=>{const A=a.component=gc(a,y,b);if(er(a)&&(A.ctx.renderer=D),_c(A,!1,w),A.asyncDep){if(b&&b.registerDep(A,le,w),!a.el){const S=A.subTree=ue(at);F(null,S,d,p),a.placeholder=S.el}}else le(A,a,d,p,b,_,w)},It=(a,d,p)=>{const y=d.component=a.component;if(Ql(a,d,p))if(y.asyncDep&&!y.asyncResolved){z(y,d,p);return}else y.next=d,y.update();else d.el=a.el,y.vnode=d},le=(a,d,p,y,b,_,w)=>{const A=()=>{if(a.isMounted){let{next:T,bu:M,u:H,parent:k,vnode:Q}=a;{const je=ro(a);if(je){T&&(T.el=Q.el,z(a,T,w)),je.asyncDep.then(()=>{Ee(()=>{a.isUnmounted||E()},b)});return}}let J=T,re;At(a,!1),T?(T.el=Q.el,z(a,T,w)):T=Q,M&&Cn(M),(re=T.props&&T.props.onVnodeBeforeUpdate)&&Ge(re,k,T,Q),At(a,!0);const ce=Er(a),Be=a.subTree;a.subTree=ce,R(Be,ce,h(Be.el),v(Be),a,b,_),T.el=ce.el,J===null&&Xl(a,ce.el),H&&Ee(H,b),(re=T.props&&T.props.onVnodeUpdated)&&Ee(()=>Ge(re,k,T,Q),b)}else{let T;const{el:M,props:H}=d,{bm:k,m:Q,parent:J,root:re,type:ce}=a,Be=fn(d);At(a,!1),k&&Cn(k),!Be&&(T=H&&H.onVnodeBeforeMount)&&Ge(T,J,d),At(a,!0);{re.ce&&re.ce._hasShadowRoot()&&re.ce._injectChildStyle(ce,a.parent?a.parent.type:void 0);const je=a.subTree=Er(a);R(null,je,p,y,a,b,_),d.el=je.el}if(Q&&Ee(Q,b),!Be&&(T=H&&H.onVnodeMounted)){const je=d;Ee(()=>Ge(T,J,je),b)}(d.shapeFlag&256||J&&fn(J.vnode)&&J.vnode.shapeFlag&256)&&a.a&&Ee(a.a,b),a.isMounted=!0,d=p=y=null}};a.scope.on();const S=a.effect=new pi(A);a.scope.off();const E=a.update=S.run.bind(S),L=a.job=S.runIfDirty.bind(S);L.i=a,L.id=a.uid,S.scheduler=()=>Xs(L),At(a,!0),E()},z=(a,d,p)=>{d.component=a;const y=a.vnode.props;a.vnode=d,a.next=null,ec(a,d.props,y,p),rc(a,d.children,p),ot(),dr(a),lt()},G=(a,d,p,y,b,_,w,A,S=!1)=>{const E=a&&a.children,L=a?a.shapeFlag:0,T=d.children,{patchFlag:M,shapeFlag:H}=d;if(M>0){if(M&128){ht(E,T,p,y,b,_,w,A,S);return}else if(M&256){Ye(E,T,p,y,b,_,w,A,S);return}}H&8?(L&16&&xe(E,b,_),T!==E&&u(p,T)):L&16?H&16?ht(E,T,p,y,b,_,w,A,S):xe(E,b,_,!0):(L&8&&u(p,""),H&16&&Ve(T,p,y,b,_,w,A,S))},Ye=(a,d,p,y,b,_,w,A,S)=>{a=a||Ut,d=d||Ut;const E=a.length,L=d.length,T=Math.min(E,L);let M;for(M=0;ML?xe(a,b,_,!0,!1,T):Ve(d,p,y,b,_,w,A,S,T)},ht=(a,d,p,y,b,_,w,A,S)=>{let E=0;const L=d.length;let T=a.length-1,M=L-1;for(;E<=T&&E<=M;){const H=a[E],k=d[E]=S?nt(d[E]):$e(d[E]);if(en(H,k))R(H,k,p,null,b,_,w,A,S);else break;E++}for(;E<=T&&E<=M;){const H=a[T],k=d[M]=S?nt(d[M]):$e(d[M]);if(en(H,k))R(H,k,p,null,b,_,w,A,S);else break;T--,M--}if(E>T){if(E<=M){const H=M+1,k=HM)for(;E<=T;)be(a[E],b,_,!0),E++;else{const H=E,k=E,Q=new Map;for(E=k;E<=M;E++){const Se=d[E]=S?nt(d[E]):$e(d[E]);Se.key!=null&&Q.set(Se.key,E)}let J,re=0;const ce=M-k+1;let Be=!1,je=0;const Xt=new Array(ce);for(E=0;E=ce){be(Se,b,_,!0);continue}let ke;if(Se.key!=null)ke=Q.get(Se.key);else for(J=k;J<=M;J++)if(Xt[J-k]===0&&en(Se,d[J])){ke=J;break}ke===void 0?be(Se,b,_,!0):(Xt[ke-k]=E+1,ke>=je?je=ke:Be=!0,R(Se,d[ke],p,null,b,_,w,A,S),re++)}const ir=Be?cc(Xt):Ut;for(J=ir.length-1,E=ce-1;E>=0;E--){const Se=k+E,ke=d[Se],or=d[Se+1],lr=Se+1{const{el:_,type:w,transition:A,children:S,shapeFlag:E}=a;if(E&6){Ue(a.component.subTree,d,p,y);return}if(E&128){a.suspense.move(d,p,y);return}if(E&64){w.move(a,d,p,D);return}if(w===tt){s(_,d,p);for(let T=0;TA.enter(_),b));else{const{leave:T,delayLeave:M,afterLeave:H}=A,k=()=>{a.ctx.isUnmounted?r(_):s(_,d,p)},Q=()=>{const J=_._isLeaving||!!_[as];_._isLeaving&&_[as](!0),A.persisted&&!J?k():T(_,()=>{k(),H&&H()})};M?M(_,k,Q):Q()}else s(_,d,p)},be=(a,d,p,y=!1,b=!1)=>{const{type:_,props:w,ref:A,children:S,dynamicChildren:E,shapeFlag:L,patchFlag:T,dirs:M,cacheIndex:H,memo:k}=a;if(T===-2&&(b=!1),A!=null&&(ot(),un(A,null,p,a,!0),lt()),H!=null&&(d.renderCache[H]=void 0),L&256){d.ctx.deactivate(a);return}const Q=L&1&&M,J=!fn(a);let re;if(J&&(re=w&&w.onVnodeBeforeUnmount)&&Ge(re,d,a),L&6)Et(a.component,p,y);else{if(L&128){a.suspense.unmount(p,y);return}Q&&St(a,null,d,"beforeUnmount"),L&64?a.type.remove(a,d,p,D,y):E&&!E.hasOnce&&(_!==tt||T>0&&T&64)?xe(E,d,p,!1,!0):(_===tt&&T&384||!b&&L&16)&&xe(S,d,p),y&&Nt(a)}const ce=k!=null&&H==null;(J&&(re=w&&w.onVnodeUnmounted)||Q||ce)&&Ee(()=>{re&&Ge(re,d,a),Q&&St(a,null,d,"unmounted"),ce&&(a.el=null)},p)},Nt=a=>{const{type:d,el:p,anchor:y,transition:b}=a;if(d===tt){Dt(p,y);return}if(d===ds){O(a);return}const _=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:w,delayLeave:A}=b,S=()=>w(p,_);A?A(a.el,_,S):S()}else _()},Dt=(a,d)=>{let p;for(;a!==d;)p=g(a),r(a),a=p;r(d)},Et=(a,d,p)=>{const{bum:y,scope:b,job:_,subTree:w,um:A,m:S,a:E}=a;wr(S),wr(E),y&&Cn(y),b.stop(),_&&(_.flags|=8,be(w,a,d,p)),A&&Ee(A,d),Ee(()=>{a.isUnmounted=!0},d)},xe=(a,d,p,y=!1,b=!1,_=0)=>{for(let w=_;w{if(a.shapeFlag&6)return v(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=g(a.anchor||a.el),p=d&&d[Sl];return p?g(p):d};let C=!1;const x=(a,d,p)=>{let y;a==null?d._vnode&&(be(d._vnode,null,null,!0),y=d._vnode.component):R(d._vnode||null,a,d,null,null,null,p),d._vnode=a,C||(C=!0,dr(y),Di(),C=!1)},D={p:R,um:be,m:Ue,r:Nt,mt:Qt,mc:Ve,pc:G,pbc:Fe,n:v,o:e};return{render:x,hydrate:void 0,createApp:Wl(x)}}function fs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function At({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function lc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function so(e,t,n=!1){const s=e.children,r=t.children;if(V(s)&&V(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function ro(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ro(t)}function wr(e){if(e)for(let t=0;te.__isSuspense;function ac(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):yl(e)}const tt=Symbol.for("v-fgt"),es=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),ds=Symbol.for("v-stc"),Ot=[];let we=null;function rn(e=!1){Ot.push(we=e?null:[])}function lo(){Ot.pop(),we=Ot[Ot.length-1]||null}let _n=1;function Hn(e,t=!1){_n+=e,e<0&&we&&t&&(we.hasOnce=!0)}function co(e){return e.dynamicChildren=_n>0?we||Ut:null,lo(),_n>0&&we&&we.push(e),e}function Rr(e,t,n,s,r,i){return co(xt(e,t,n,s,r,i,!0))}function Ns(e,t,n,s,r){return co(ue(e,t,n,s,r,!0))}function Un(e){return e?e.__v_isVNode===!0:!1}function en(e,t){return e.type===t.type&&e.key===t.key}const ao=({key:e})=>e??null,Nn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||pe(e)||B(e)?{i:Ae,r:e,k:t,f:!!n}:e:null);function xt(e,t=null,n=null,s=0,r=null,i=e===tt?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ao(t),ref:t&&Nn(t),scopeId:Li,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ae};return l?(Bn(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),_n>0&&!o&&we&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&we.push(c),c}const ue=uc;function uc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Vl)&&(e=at),Un(e)){const l=Wt(e,t,!0);return n&&Bn(l,n),_n>0&&!i&&we&&(l.shapeFlag&6?we[we.indexOf(e)]=l:we.push(l)),l.patchFlag=-2,l}if(Sc(e)&&(e=e.__vccOpts),t){t=fc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=jt(l)),q(c)&&(Ys(c)&&!V(c)&&(c=fe({},c)),t.style=ks(c))}const o=se(e)?1:oo(e)?128:Qn(e)?64:q(e)?4:B(e)?2:0;return xt(e,t,n,s,r,o,i,!0)}function fc(e){return e?Ys(e)||Qi(e)?fe({},e):e:null}function Wt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?dc(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&ao(f),ref:t&&t.ref?n&&i?V(i)?i.concat(Nn(t)):[i,Nn(t)]:Nn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Wt(e.ssContent),ssFallback:e.ssFallback&&Wt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Zs(u,c.clone(u)),u}function Ft(e=" ",t=0){return ue(es,null,e,t)}function xr(e="",t=!1){return t?(rn(),Ns(at,null,e)):ue(at,null,e)}function $e(e){return e==null||typeof e=="boolean"?ue(at):V(e)?ue(tt,null,e.slice()):Un(e)?nt(e):ue(es,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Wt(e)}function Bn(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Bn(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Qi(t)?t._ctx=Ae:r===3&&Ae&&(Ae.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(B(t)){if(s&65){Bn(e,{default:t});return}t={default:t,_ctx:Ae},n=32}else t=String(t),s&64?(n=16,t=[Ft(t)]):n=8;e.children=t,e.shapeFlag|=n}function dc(...e){const t={};for(let n=0;nhe||Ae;let jn,yn;{const e=zn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};jn=t("__VUE_INSTANCE_SETTERS__",n=>he=n),yn=t("__VUE_SSR_SETTERS__",n=>vn=n)}const An=e=>{const t=he;return jn(e),e.scope.on(),()=>{e.scope.off(),jn(t)}},Tr=()=>{he&&he.scope.off(),jn(null)};function uo(e){return e.vnode.shapeFlag&4}let vn=!1;function _c(e,t=!1,n=!1){t&&yn(t);const{props:s,children:r}=e.vnode,i=uo(e);Zl(e,s,i,t),sc(e,r,n||t);const o=i?yc(e,t):void 0;return t&&yn(!1),o}function yc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Hl);const{setup:s}=n;if(s){ot();const r=e.setupContext=s.length>1?bc(e):null,i=An(e),o=Sn(s,e,0,[e.props,r]),l=li(o);if(lt(),i(),(l||e.sp)&&!fn(e)&&Bi(e),l){if(o.then(Tr,Tr),t)return o.then(c=>{yn(!0);try{Pr(e,c,t)}finally{yn(!1)}}).catch(c=>{Yn(c,e,0)});e.asyncDep=o}else Pr(e,o)}else fo(e)}function Pr(e,t,n){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:q(t)&&(e.setupState=Oi(t)),fo(e)}function fo(e,t,n){const s=e.type;e.render||(e.render=s.render||ze);{const r=An(e);ot();try{Ul(e)}finally{lt(),r()}}}const vc={get(e,t){return de(e,"get",""),e[t]}};function bc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,vc),slots:e.slots,emit:e.emit,expose:t}}function ts(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Oi(ll(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in dn)return dn[n](e)},has(t,n){return n in t||n in dn}})):e.proxy}function Ec(e,t=!0){return B(e)?e.displayName||e.name:e.name||t&&e.__name}function Sc(e){return B(e)&&"__vccOpts"in e}const Oe=(e,t)=>hl(e,t,vn);function ho(e,t,n){try{Hn(-1);const s=arguments.length;return s===2?q(t)&&!V(t)?Un(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Un(n)&&(n=[n]),ue(e,t,n))}finally{Hn(1)}}const Ac="3.5.41";/** +**/function Sn(e,t,n,s){try{return s?e(...s):e()}catch(r){Yn(r,t,n)}}function Me(e,t,n,s){if(B(e)){const r=Sn(e,t,n,s);return r&&li(r)&&r.catch(i=>{Yn(i,t,n)}),r}if(V(e)){const r=[];for(let i=0;i>>1,r=ye[s],i=mn(r);i=mn(n)?ye.push(e):ye.splice(_l(t),0,e),e.flags|=1,Ni()}}function Ni(){Mn||(Mn=Ii.then(Mi))}function yl(e){if(!V(e))gt&&e.id===-1?gt.splice(Lt+1,0,e):e.flags&1||(kt.push(e),e.flags|=1);else for(let t=0;tmn(n)-mn(s));if(kt.length=0,gt){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Mi(e){try{for(Ke=0;Ke{s._d&&Hn(-1);const i=Ln(t),o=Ot.length;let l;try{l=e(...r)}finally{for(let c=Ot.length;c>o;c--)lo();Ln(i),s._d&&Hn(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function Su(e,t){if(Ae===null)return e;const n=ts(Ae),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&B(t)?t.call(s&&s.proxy):t}}const vl=Symbol.for("v-scx"),bl=()=>Ne(vl);function In(e,t,n){return Vi(e,t,n)}function Vi(e,t,n=X){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n),c=t&&s||!t&&i!=="post";let f;if(vn){if(i==="sync"){const m=bl();f=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=ze,m.resume=ze,m.pause=ze,m}}const u=he;l.call=(m,I,R)=>Me(m,u,I,R);let h=!1;i==="post"?l.scheduler=m=>{Ee(m,u&&u.suspense)}:i!=="sync"&&(h=!0,l.scheduler=(m,I)=>{I?m():Xs(m)}),l.augmentJob=m=>{t&&(m.flags|=4),h&&(m.flags|=2,u&&(m.id=u.uid,m.i=u))};const g=gl(e,t,l);return vn&&(f?f.push(g):c&&g()),g}function El(e,t,n){const s=this.proxy,r=se(e)?e.includes(".")?Fi(s,e):()=>s[e]:e.bind(s,s);let i;B(t)?i=t:(i=t.handler,n=t);const o=An(this),l=Vi(r,i.bind(s),n);return o(),l}function Fi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,as=Symbol("_leaveCb");function Al(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==at){t=n;break}}return t}function Hi(e){if(!er(e))return Qn(e.type)&&e.children?Al(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&B(n.default))return n.default()}}function Zs(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;Zs(Qn(n.type)&&Hi(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ui(e,t){return B(e)?fe({name:e.name},t,{setup:e}):e}function Bi(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function hr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const Vn=new WeakMap;function un(e,t,n,s,r=!1){if(V(e)){e.forEach((R,U)=>un(R,t&&(V(t)?t[U]:t),n,s,r));return}if(fn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&un(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ts(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,u=l.refs===X?l.refs={}:l.refs,h=l.setupState,g=W(h),m=h===X?oi:R=>hr(u,R)?!1:$(g,R),I=(R,U)=>!(U&&hr(u,U));if(f!=null&&f!==c){if(pr(t),se(f))u[f]=null,m(f)&&(h[f]=null);else if(pe(f)){const R=t;I(f,R.k)&&(f.value=null),R.k&&(u[R.k]=null)}}if(B(c))Sn(c,l,12,[o,u]);else{const R=se(c),U=pe(c);if(R||U){const F=()=>{if(e.f){const P=R?m(c)?h[c]:u[c]:I()||!e.k?c.value:u[e.k];if(r)V(P)&&Bs(P,i);else if(V(P))P.includes(i)||P.push(i);else if(R)u[c]=[i],m(c)&&(h[c]=u[c]);else{const N=[i];I(c,e.k)&&(c.value=N),e.k&&(u[e.k]=N)}}else R?(u[c]=o,m(c)&&(h[c]=o)):U&&(I(c,e.k)&&(c.value=o),e.k&&(u[e.k]=o))};if(o){const P=()=>{F(),Vn.delete(e)};P.id=-1,Vn.set(e,P),Ee(P,n)}else pr(e),F()}}}function pr(e){const t=Vn.get(e);t&&(t.flags|=8,Vn.delete(e))}zn().requestIdleCallback;zn().cancelIdleCallback;const fn=e=>!!e.type.__asyncLoader,er=e=>e.type.__isKeepAlive;function wl(e,t){ji(e,"a",t)}function Rl(e,t){ji(e,"da",t)}function ji(e,t,n=he){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Xn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)er(r.parent.vnode)&&xl(s,t,n,r),r=r.parent}}function xl(e,t,n,s){const r=Xn(t,e,s,!0);Gi(()=>{Bs(s[t],r)},n)}function Xn(e,t,n=he,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{ot();const l=An(n),c=Me(t,n,e,o);return l(),lt(),c});return s?r.unshift(i):r.push(i),i}}const ut=e=>(t,n=he)=>{(!vn||e==="sp")&&Xn(e,(...s)=>t(...s),n)},Tl=ut("bm"),ki=ut("m"),Pl=ut("bu"),Cl=ut("u"),Ol=ut("bum"),Gi=ut("um"),Il=ut("sp"),Nl=ut("rtg"),Dl=ut("rtc");function Ml(e,t=he){Xn("ec",e,t)}const Ll="components";function gr(e,t){return Fl(Ll,e,!0,t)||e}const Vl=Symbol.for("v-ndc");function Fl(e,t,n=!0,s=!1){const r=Ae||he;if(r){const i=r.type;{const l=Ec(i,!1);if(l&&(l===t||l===ve(t)||l===$n(ve(t))))return i}const o=mr(r[e]||i[e],t)||mr(r.appContext[e],t);return!o&&s?i:o}}function mr(e,t){return e&&(e[t]||e[ve(t)]||e[$n(ve(t))])}function Au(e,t,n,s){let r;const i=n,o=V(e);if(o||se(e)){const l=o&&Ct(e);let c=!1,f=!1;l&&(c=!Ce(e),f=ct(e),e=Jn(e)),r=new Array(e.length);for(let u=0,h=e.length;ut(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;ce?uo(e)?ts(e):Ps(e.parent):null,dn=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ps(e.parent),$root:e=>Ps(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Wi(e),$forceUpdate:e=>e.f||(e.f=()=>{Xs(e.update)}),$nextTick:e=>e.n||(e.n=Qs.bind(e.proxy)),$watch:e=>El.bind(e)}),us=(e,t)=>e!==X&&!e.__isScriptSetup&&$(e,t),Hl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const g=o[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(us(s,t))return o[t]=1,s[t];if(r!==X&&$(r,t))return o[t]=2,r[t];if($(i,t))return o[t]=3,i[t];if(n!==X&&$(n,t))return o[t]=4,n[t];Cs&&(o[t]=0)}}const f=dn[t];let u,h;if(f)return t==="$attrs"&&de(e.attrs,"get",""),f(e);if((u=l.__cssModules)&&(u=u[t]))return u;if(n!==X&&$(n,t))return o[t]=4,n[t];if(h=c.config.globalProperties,$(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return us(r,t)?(r[t]=n,!0):s!==X&&$(s,t)?(s[t]=n,!0):$(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==X&&l[0]!=="$"&&$(e,l)||us(t,l)||$(i,l)||$(s,l)||$(dn,l)||$(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:$(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function _r(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Cs=!0;function Ul(e){const t=Wi(e),n=e.proxy,s=e.ctx;Cs=!1,t.beforeCreate&&yr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:u,beforeMount:h,mounted:g,beforeUpdate:m,updated:I,activated:R,deactivated:U,beforeDestroy:F,beforeUnmount:P,destroyed:N,unmounted:O,render:Y,renderTracked:ie,renderTriggered:ee,errorCaptured:Ve,serverPrefetch:ft,expose:Fe,inheritAttrs:dt,components:bt,directives:He,filters:Qt}=t;if(f&&Bl(f,s,null),o)for(const z in o){const G=o[z];B(G)&&(s[z]=G.bind(n))}if(r){const z=r.call(n,n);q(z)&&(e.data=Yt(z))}if(Cs=!0,i)for(const z in i){const G=i[z],Ye=B(G)?G.bind(n,n):B(G.get)?G.get.bind(n,n):ze,ht=!B(G)&&B(G.set)?G.set.bind(n):ze,Ue=Oe({get:Ye,set:ht});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:be=>Ue.value=be})}if(l)for(const z in l)Ki(l[z],s,n,z);if(c){const z=B(c)?c.call(n):c;Reflect.ownKeys(z).forEach(G=>{On(G,z[G])})}u&&yr(u,e,"c");function le(z,G){V(G)?G.forEach(Ye=>z(Ye.bind(n))):G&&z(G.bind(n))}if(le(Tl,h),le(ki,g),le(Pl,m),le(Cl,I),le(wl,R),le(Rl,U),le(Ml,Ve),le(Dl,ie),le(Nl,ee),le(Ol,P),le(Gi,O),le(Il,ft),V(Fe))if(Fe.length){const z=e.exposed||(e.exposed={});Fe.forEach(G=>{Object.defineProperty(z,G,{get:()=>n[G],set:Ye=>n[G]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});Y&&e.render===ze&&(e.render=Y),dt!=null&&(e.inheritAttrs=dt),bt&&(e.components=bt),He&&(e.directives=He),ft&&Bi(e)}function Bl(e,t,n=ze){V(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;q(r)?"default"in r?i=Ne(r.from||s,r.default,!0):i=Ne(r.from||s):i=Ne(r),pe(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function yr(e,t,n){Me(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ki(e,t,n,s){let r=s.includes(".")?Fi(n,s):()=>n[s];if(se(e)){const i=t[e];B(i)&&In(r,i)}else if(B(e))In(r,e.bind(n));else if(q(e))if(V(e))e.forEach(i=>Ki(i,t,n,s));else{const i=B(e.handler)?e.handler.bind(n):t[e.handler];B(i)&&In(r,i,e)}}function Wi(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Fn(c,f,o,!0)),Fn(c,t,o)),q(t)&&i.set(t,c),c}function Fn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Fn(e,i,n,!0),r&&r.forEach(o=>Fn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=jl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const jl={data:vr,props:br,emits:br,methods:sn,computed:sn,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:sn,directives:sn,watch:Gl,provide:vr,inject:kl};function vr(e,t){return t?e?function(){return fe(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function kl(e,t){return sn(Os(e),Os(t))}function Os(e){if(V(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ve(t)}Modifiers`]||e[`${vt(t)}Modifiers`];function ql(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||X;let r=n;const i=t.startsWith("update:"),o=i&&$l(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>se(u)?u.trim():u)),o.number&&(r=n.map(qn)));let l,c=s[l=rs(t)]||s[l=rs(ve(t))];!c&&i&&(c=s[l=rs(vt(t))]),c&&Me(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Me(f,e,6,r)}}const zl=new WeakMap;function qi(e,t,n=!1){const s=n?zl:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!B(e)){const c=f=>{const u=qi(f,t,!0);u&&(l=!0,fe(o,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(q(e)&&s.set(e,null),null):(V(i)?i.forEach(c=>o[c]=null):fe(o,i),q(e)&&s.set(e,o),o)}function Zn(e,t){return!e||!Gn(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),$(e,t[0].toLowerCase()+t.slice(1))||$(e,vt(t))||$(e,t))}function Er(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:u,props:h,data:g,setupState:m,ctx:I,inheritAttrs:R}=e,U=Ln(e);let F,P;try{if(n.shapeFlag&4){const O=r||s,Y=O;F=$e(f.call(Y,O,u,h,m,g,I)),P=l}else{const O=t;F=$e(O.length>1?O(h,{attrs:l,slots:o,emit:c}):O(h,null)),P=t.props?l:Jl(l)}}catch(O){Ot.length=0,Yn(O,e,1),F=ue(at)}let N=F;if(P&&R!==!1){const O=Object.keys(P),{shapeFlag:Y}=N;O.length&&Y&7&&(i&&O.some(Kn)&&(P=Yl(P,i)),N=Wt(N,P,!1,!0))}if(n.dirs&&(N=Wt(N,null,!1,!0),N.dirs=N.dirs?N.dirs.concat(n.dirs):n.dirs),n.transition){const O=Qn(N.type)&&Hi(N)||N;Zs(O,n.transition)}return F=N,Ln(U),F}const Jl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},Yl=(e,t)=>{const n={};for(const s in e)(!Kn(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ql(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Sr(s,o,f):!!o;if(c&8){const u=t.dynamicProps;for(let h=0;hObject.create(Ji),Qi=e=>Object.getPrototypeOf(e)===Ji;function Zl(e,t,n,s=!1){const r={},i=Yi();e.propsDefaults=Object.create(null),Xi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Pi(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ec(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=W(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,m]=Zi(h,t,!0);fe(o,g),m&&l.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!i&&!c)return q(e)&&s.set(e,Ut),Ut;if(V(i))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",nr=e=>V(e)?e.map($e):[$e(e)],nc=(e,t,n)=>{if(t._n)return t;const s=Vt((...r)=>nr(t(...r)),n);return s._c=!1,s},eo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(tr(r))continue;const i=e[r];if(B(i))t[r]=nc(r,i,s);else if(i!=null){const o=nr(i);t[r]=()=>o}}},to=(e,t)=>{const n=nr(t);e.slots.default=()=>n},no=(e,t,n)=>{for(const s in t)(n||!tr(s))&&(e[s]=t[s])},sc=(e,t,n)=>{const s=e.slots=Yi();if(e.vnode.shapeFlag&32){const r=t._;r?(no(s,t,n),n&&ui(s,"_",r,!0)):eo(t,s)}else t&&to(e,t)},rc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=X;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:no(r,t,n):(i=!t.$stable,eo(t,r)),o=t}else t&&(to(e,t),o={default:1});if(i)for(const l in r)!tr(l)&&o[l]==null&&delete r[l]},Ee=ac;function ic(e){return oc(e)}function oc(e,t){const n=zn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:u,parentNode:h,nextSibling:g,setScopeId:m=ze,insertStaticContent:I}=e,R=(a,d,p,y=null,b=null,_=null,w=void 0,A=null,S=!!d.dynamicChildren)=>{if(a===d)return;a&&!en(a,d)&&(y=v(a),be(a,b,_,!0),a=null),d.patchFlag===-2&&(S=!1,d.dynamicChildren=null);const{type:E,ref:L,shapeFlag:T}=d;switch(E){case es:U(a,d,p,y);break;case at:F(a,d,p,y);break;case ds:a==null&&P(d,p,y,w);break;case tt:bt(a,d,p,y,b,_,w,A,S);break;default:T&1?Y(a,d,p,y,b,_,w,A,S):T&6?He(a,d,p,y,b,_,w,A,S):(T&64||T&128)&&E.process(a,d,p,y,b,_,w,A,S,D)}L!=null&&b?un(L,a&&a.ref,_,d||a,!d):L==null&&a&&a.ref!=null&&un(a.ref,null,_,a,!0)},U=(a,d,p,y)=>{if(a==null)s(d.el=l(d.children),p,y);else{const b=d.el=a.el;d.children!==a.children&&f(b,d.children)}},F=(a,d,p,y)=>{a==null?s(d.el=c(d.children||""),p,y):d.el=a.el},P=(a,d,p,y)=>{[a.el,a.anchor]=I(a.children,d,p,y,a.el,a.anchor)},N=({el:a,anchor:d},p,y)=>{let b;for(;a&&a!==d;)b=g(a),s(a,p,y),a=b;s(d,p,y)},O=({el:a,anchor:d})=>{let p;for(;a&&a!==d;)p=g(a),r(a),a=p;r(d)},Y=(a,d,p,y,b,_,w,A,S)=>{if(d.type==="svg"?w="svg":d.type==="math"&&(w="mathml"),a==null)ie(d,p,y,b,_,w,A,S);else{const E=a.el&&a.el._isVueCE?a.el:null;try{E&&E._beginPatch(),ft(a,d,b,_,w,A,S)}finally{E&&E._endPatch()}}},ie=(a,d,p,y,b,_,w,A)=>{let S,E;const{props:L,shapeFlag:T,transition:M,dirs:H}=a;if(S=a.el=o(a.type,_,L&&L.is,L),T&8?u(S,a.children):T&16&&Ve(a.children,S,null,y,b,fs(a,_),w,A),H&&St(a,null,y,"created"),ee(S,a,a.scopeId,w,y),L){for(const Q in L)Q!=="value"&&!ln(Q)&&i(S,Q,null,L[Q],_,y);"value"in L&&i(S,"value",null,L.value,_),(E=L.onVnodeBeforeMount)&&Ge(E,y,a)}H&&St(a,null,y,"beforeMount");const k=lc(b,M);k&&M.beforeEnter(S),s(S,d,p),((E=L&&L.onVnodeMounted)||k||H)&&Ee(()=>{try{E&&Ge(E,y,a),k&&M.enter(S),H&&St(a,null,y,"mounted")}finally{}},b)},ee=(a,d,p,y,b)=>{if(p&&m(a,p),y)for(let _=0;_{for(let E=S;E{const A=d.el=a.el;let{patchFlag:S,dynamicChildren:E,dirs:L}=d;S|=a.patchFlag&16;const T=a.props||X,M=d.props||X;let H;if(p&&At(p,!1),(H=M.onVnodeBeforeUpdate)&&Ge(H,p,d,a),L&&St(d,a,p,"beforeUpdate"),p&&At(p,!0),E&&(!a.dynamicChildren||a.dynamicChildren.length!==E.length)&&(S=0,w=!1,E=null),(T.innerHTML&&M.innerHTML==null||T.textContent&&M.textContent==null)&&u(A,""),E?Fe(a.dynamicChildren,E,A,p,y,fs(d,b),_):w||G(a,d,A,null,p,y,fs(d,b),_,!1),S>0){if(S&16)dt(A,T,M,p,b);else if(S&2&&T.class!==M.class&&i(A,"class",null,M.class,b),S&4&&i(A,"style",T.style,M.style,b),S&8){const k=d.dynamicProps;for(let Q=0;Q{H&&Ge(H,p,d,a),L&&St(d,a,p,"updated")},y)},Fe=(a,d,p,y,b,_,w)=>{for(let A=0;A{if(d!==p){if(d!==X)for(const _ in d)!ln(_)&&!(_ in p)&&i(a,_,d[_],null,b,y);for(const _ in p){if(ln(_))continue;const w=p[_],A=d[_];w!==A&&_!=="value"&&i(a,_,A,w,b,y)}"value"in p&&i(a,"value",d.value,p.value,b)}},bt=(a,d,p,y,b,_,w,A,S)=>{const E=d.el=a?a.el:l(""),L=d.anchor=a?a.anchor:l("");let{patchFlag:T,dynamicChildren:M,slotScopeIds:H}=d;H&&(A=A?A.concat(H):H),a==null?(s(E,p,y),s(L,p,y),Ve(d.children||[],p,L,b,_,w,A,S)):T>0&&T&64&&M&&a.dynamicChildren&&a.dynamicChildren.length===M.length?(Fe(a.dynamicChildren,M,p,b,_,w,A),(d.key!=null||b&&d===b.subTree)&&so(a,d,!0)):G(a,d,p,L,b,_,w,A,S)},He=(a,d,p,y,b,_,w,A,S)=>{d.slotScopeIds=A,a==null?d.shapeFlag&512?b.ctx.activate(d,p,y,w,S):Qt(d,p,y,b,_,w,S):It(a,d,S)},Qt=(a,d,p,y,b,_,w)=>{const A=a.component=gc(a,y,b);if(er(a)&&(A.ctx.renderer=D),_c(A,!1,w),A.asyncDep){if(b&&b.registerDep(A,le,w),!a.el){const S=A.subTree=ue(at);F(null,S,d,p),a.placeholder=S.el}}else le(A,a,d,p,b,_,w)},It=(a,d,p)=>{const y=d.component=a.component;if(Ql(a,d,p))if(y.asyncDep&&!y.asyncResolved){z(y,d,p);return}else y.next=d,y.update();else d.el=a.el,y.vnode=d},le=(a,d,p,y,b,_,w)=>{const A=()=>{if(a.isMounted){let{next:T,bu:M,u:H,parent:k,vnode:Q}=a;{const je=ro(a);if(je){T&&(T.el=Q.el,z(a,T,w)),je.asyncDep.then(()=>{Ee(()=>{a.isUnmounted||E()},b)});return}}let J=T,re;At(a,!1),T?(T.el=Q.el,z(a,T,w)):T=Q,M&&Cn(M),(re=T.props&&T.props.onVnodeBeforeUpdate)&&Ge(re,k,T,Q),At(a,!0);const ce=Er(a),Be=a.subTree;a.subTree=ce,R(Be,ce,h(Be.el),v(Be),a,b,_),T.el=ce.el,J===null&&Xl(a,ce.el),H&&Ee(H,b),(re=T.props&&T.props.onVnodeUpdated)&&Ee(()=>Ge(re,k,T,Q),b)}else{let T;const{el:M,props:H}=d,{bm:k,m:Q,parent:J,root:re,type:ce}=a,Be=fn(d);At(a,!1),k&&Cn(k),!Be&&(T=H&&H.onVnodeBeforeMount)&&Ge(T,J,d),At(a,!0);{re.ce&&re.ce._hasShadowRoot()&&re.ce._injectChildStyle(ce,a.parent?a.parent.type:void 0);const je=a.subTree=Er(a);R(null,je,p,y,a,b,_),d.el=je.el}if(Q&&Ee(Q,b),!Be&&(T=H&&H.onVnodeMounted)){const je=d;Ee(()=>Ge(T,J,je),b)}(d.shapeFlag&256||J&&fn(J.vnode)&&J.vnode.shapeFlag&256)&&a.a&&Ee(a.a,b),a.isMounted=!0,d=p=y=null}};a.scope.on();const S=a.effect=new pi(A);a.scope.off();const E=a.update=S.run.bind(S),L=a.job=S.runIfDirty.bind(S);L.i=a,L.id=a.uid,S.scheduler=()=>Xs(L),At(a,!0),E()},z=(a,d,p)=>{d.component=a;const y=a.vnode.props;a.vnode=d,a.next=null,ec(a,d.props,y,p),rc(a,d.children,p),ot(),dr(a),lt()},G=(a,d,p,y,b,_,w,A,S=!1)=>{const E=a&&a.children,L=a?a.shapeFlag:0,T=d.children,{patchFlag:M,shapeFlag:H}=d;if(M>0){if(M&128){ht(E,T,p,y,b,_,w,A,S);return}else if(M&256){Ye(E,T,p,y,b,_,w,A,S);return}}H&8?(L&16&&xe(E,b,_),T!==E&&u(p,T)):L&16?H&16?ht(E,T,p,y,b,_,w,A,S):xe(E,b,_,!0):(L&8&&u(p,""),H&16&&Ve(T,p,y,b,_,w,A,S))},Ye=(a,d,p,y,b,_,w,A,S)=>{a=a||Ut,d=d||Ut;const E=a.length,L=d.length,T=Math.min(E,L);let M;for(M=0;ML?xe(a,b,_,!0,!1,T):Ve(d,p,y,b,_,w,A,S,T)},ht=(a,d,p,y,b,_,w,A,S)=>{let E=0;const L=d.length;let T=a.length-1,M=L-1;for(;E<=T&&E<=M;){const H=a[E],k=d[E]=S?nt(d[E]):$e(d[E]);if(en(H,k))R(H,k,p,null,b,_,w,A,S);else break;E++}for(;E<=T&&E<=M;){const H=a[T],k=d[M]=S?nt(d[M]):$e(d[M]);if(en(H,k))R(H,k,p,null,b,_,w,A,S);else break;T--,M--}if(E>T){if(E<=M){const H=M+1,k=HM)for(;E<=T;)be(a[E],b,_,!0),E++;else{const H=E,k=E,Q=new Map;for(E=k;E<=M;E++){const Se=d[E]=S?nt(d[E]):$e(d[E]);Se.key!=null&&Q.set(Se.key,E)}let J,re=0;const ce=M-k+1;let Be=!1,je=0;const Xt=new Array(ce);for(E=0;E=ce){be(Se,b,_,!0);continue}let ke;if(Se.key!=null)ke=Q.get(Se.key);else for(J=k;J<=M;J++)if(Xt[J-k]===0&&en(Se,d[J])){ke=J;break}ke===void 0?be(Se,b,_,!0):(Xt[ke-k]=E+1,ke>=je?je=ke:Be=!0,R(Se,d[ke],p,null,b,_,w,A,S),re++)}const ir=Be?cc(Xt):Ut;for(J=ir.length-1,E=ce-1;E>=0;E--){const Se=k+E,ke=d[Se],or=d[Se+1],lr=Se+1{const{el:_,type:w,transition:A,children:S,shapeFlag:E}=a;if(E&6){Ue(a.component.subTree,d,p,y);return}if(E&128){a.suspense.move(d,p,y);return}if(E&64){w.move(a,d,p,D);return}if(w===tt){s(_,d,p);for(let T=0;TA.enter(_),b));else{const{leave:T,delayLeave:M,afterLeave:H}=A,k=()=>{a.ctx.isUnmounted?r(_):s(_,d,p)},Q=()=>{const J=_._isLeaving||!!_[as];_._isLeaving&&_[as](!0),A.persisted&&!J?k():T(_,()=>{k(),H&&H()})};M?M(_,k,Q):Q()}else s(_,d,p)},be=(a,d,p,y=!1,b=!1)=>{const{type:_,props:w,ref:A,children:S,dynamicChildren:E,shapeFlag:L,patchFlag:T,dirs:M,cacheIndex:H,memo:k}=a;if(T===-2&&(b=!1),A!=null&&(ot(),un(A,null,p,a,!0),lt()),H!=null&&(d.renderCache[H]=void 0),L&256){d.ctx.deactivate(a);return}const Q=L&1&&M,J=!fn(a);let re;if(J&&(re=w&&w.onVnodeBeforeUnmount)&&Ge(re,d,a),L&6)Et(a.component,p,y);else{if(L&128){a.suspense.unmount(p,y);return}Q&&St(a,null,d,"beforeUnmount"),L&64?a.type.remove(a,d,p,D,y):E&&!E.hasOnce&&(_!==tt||T>0&&T&64)?xe(E,d,p,!1,!0):(_===tt&&T&384||!b&&L&16)&&xe(S,d,p),y&&Nt(a)}const ce=k!=null&&H==null;(J&&(re=w&&w.onVnodeUnmounted)||Q||ce)&&Ee(()=>{re&&Ge(re,d,a),Q&&St(a,null,d,"unmounted"),ce&&(a.el=null)},p)},Nt=a=>{const{type:d,el:p,anchor:y,transition:b}=a;if(d===tt){Dt(p,y);return}if(d===ds){O(a);return}const _=()=>{r(p),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:w,delayLeave:A}=b,S=()=>w(p,_);A?A(a.el,_,S):S()}else _()},Dt=(a,d)=>{let p;for(;a!==d;)p=g(a),r(a),a=p;r(d)},Et=(a,d,p)=>{const{bum:y,scope:b,job:_,subTree:w,um:A,m:S,a:E}=a;wr(S),wr(E),y&&Cn(y),b.stop(),_&&(_.flags|=8,be(w,a,d,p)),A&&Ee(A,d),Ee(()=>{a.isUnmounted=!0},d)},xe=(a,d,p,y=!1,b=!1,_=0)=>{for(let w=_;w{if(a.shapeFlag&6)return v(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=g(a.anchor||a.el),p=d&&d[Sl];return p?g(p):d};let C=!1;const x=(a,d,p)=>{let y;a==null?d._vnode&&(be(d._vnode,null,null,!0),y=d._vnode.component):R(d._vnode||null,a,d,null,null,null,p),d._vnode=a,C||(C=!0,dr(y),Di(),C=!1)},D={p:R,um:be,m:Ue,r:Nt,mt:Qt,mc:Ve,pc:G,pbc:Fe,n:v,o:e};return{render:x,hydrate:void 0,createApp:Wl(x)}}function fs({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function At({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function lc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function so(e,t,n=!1){const s=e.children,r=t.children;if(V(s)&&V(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function ro(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ro(t)}function wr(e){if(e)for(let t=0;te.__isSuspense;function ac(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):yl(e)}const tt=Symbol.for("v-fgt"),es=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),ds=Symbol.for("v-stc"),Ot=[];let we=null;function rn(e=!1){Ot.push(we=e?null:[])}function lo(){Ot.pop(),we=Ot[Ot.length-1]||null}let _n=1;function Hn(e,t=!1){_n+=e,e<0&&we&&t&&(we.hasOnce=!0)}function co(e){return e.dynamicChildren=_n>0?we||Ut:null,lo(),_n>0&&we&&we.push(e),e}function Rr(e,t,n,s,r,i){return co(xt(e,t,n,s,r,i,!0))}function Ns(e,t,n,s,r){return co(ue(e,t,n,s,r,!0))}function Un(e){return e?e.__v_isVNode===!0:!1}function en(e,t){return e.type===t.type&&e.key===t.key}const ao=({key:e})=>e??null,Nn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||pe(e)||B(e)?{i:Ae,r:e,k:t,f:!!n}:e:null);function xt(e,t=null,n=null,s=0,r=null,i=e===tt?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ao(t),ref:t&&Nn(t),scopeId:Li,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:Ae};return l?(Bn(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),_n>0&&!o&&we&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&we.push(c),c}const ue=uc;function uc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Vl)&&(e=at),Un(e)){const l=Wt(e,t,!0);return n&&Bn(l,n),_n>0&&!i&&we&&(l.shapeFlag&6?we[we.indexOf(e)]=l:we.push(l)),l.patchFlag=-2,l}if(Sc(e)&&(e=e.__vccOpts),t){t=fc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=jt(l)),q(c)&&(Ys(c)&&!V(c)&&(c=fe({},c)),t.style=ks(c))}const o=se(e)?1:oo(e)?128:Qn(e)?64:q(e)?4:B(e)?2:0;return xt(e,t,n,s,r,o,i,!0)}function fc(e){return e?Ys(e)||Qi(e)?fe({},e):e:null}function Wt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?dc(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&ao(f),ref:t&&t.ref?n&&i?V(i)?i.concat(Nn(t)):[i,Nn(t)]:Nn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==tt?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Wt(e.ssContent),ssFallback:e.ssFallback&&Wt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Zs(u,c.clone(u)),u}function Ft(e=" ",t=0){return ue(es,null,e,t)}function xr(e="",t=!1){return t?(rn(),Ns(at,null,e)):ue(at,null,e)}function $e(e){return e==null||typeof e=="boolean"?ue(at):V(e)?ue(tt,null,e.slice()):Un(e)?nt(e):ue(es,null,String(e))}function nt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Wt(e)}function Bn(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Bn(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Qi(t)?t._ctx=Ae:r===3&&Ae&&(Ae.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(B(t)){if(s&65){Bn(e,{default:t});return}t={default:t,_ctx:Ae},n=32}else t=String(t),s&64?(n=16,t=[Ft(t)]):n=8;e.children=t,e.shapeFlag|=n}function dc(...e){const t={};for(let n=0;nhe||Ae;let jn,yn;{const e=zn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};jn=t("__VUE_INSTANCE_SETTERS__",n=>he=n),yn=t("__VUE_SSR_SETTERS__",n=>vn=n)}const An=e=>{const t=he;return jn(e),e.scope.on(),()=>{e.scope.off(),jn(t)}},Tr=()=>{he&&he.scope.off(),jn(null)};function uo(e){return e.vnode.shapeFlag&4}let vn=!1;function _c(e,t=!1,n=!1){t&&yn(t);const{props:s,children:r}=e.vnode,i=uo(e);Zl(e,s,i,t),sc(e,r,n||t);const o=i?yc(e,t):void 0;return t&&yn(!1),o}function yc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Hl);const{setup:s}=n;if(s){ot();const r=e.setupContext=s.length>1?bc(e):null,i=An(e),o=Sn(s,e,0,[e.props,r]),l=li(o);if(lt(),i(),(l||e.sp)&&!fn(e)&&Bi(e),l){if(o.then(Tr,Tr),t)return o.then(c=>{yn(!0);try{Pr(e,c,t)}finally{yn(!1)}}).catch(c=>{Yn(c,e,0)});e.asyncDep=o}else Pr(e,o)}else fo(e)}function Pr(e,t,n){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:q(t)&&(e.setupState=Oi(t)),fo(e)}function fo(e,t,n){const s=e.type;e.render||(e.render=s.render||ze);{const r=An(e);ot();try{Ul(e)}finally{lt(),r()}}}const vc={get(e,t){return de(e,"get",""),e[t]}};function bc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,vc),slots:e.slots,emit:e.emit,expose:t}}function ts(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Oi(ll(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in dn)return dn[n](e)},has(t,n){return n in t||n in dn}})):e.proxy}function Ec(e,t=!0){return B(e)?e.displayName||e.name:e.name||t&&e.__name}function Sc(e){return B(e)&&"__vccOpts"in e}const Oe=(e,t)=>hl(e,t,vn);function ho(e,t,n){try{Hn(-1);const s=arguments.length;return s===2?q(t)&&!V(t)?Un(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Un(n)&&(n=[n]),ue(e,t,n))}finally{Hn(1)}}const Ac="3.5.41";/** * @vue/runtime-dom v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Ds;const Cr=typeof window<"u"&&window.trustedTypes;if(Cr)try{Ds=Cr.createPolicy("vue",{createHTML:e=>e})}catch{}const po=Ds?e=>Ds.createHTML(e):e=>e,wc="http://www.w3.org/2000/svg",Rc="http://www.w3.org/1998/Math/MathML",et=typeof document<"u"?document:null,Or=et&&et.createElement("template"),xc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?et.createElementNS(wc,e):t==="mathml"?et.createElementNS(Rc,e):n?et.createElement(e,{is:n}):et.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>et.createTextNode(e),createComment:e=>et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Or.innerHTML=po(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Or.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Tc=Symbol("_vtc");function Pc(e,t,n){const s=e[Tc];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const kn=Symbol("_vod"),go=Symbol("_vsh"),Su={name:"show",beforeMount(e,{value:t},{transition:n}){e[kn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),tn(e,!0),s.enter(e)):s.leave(e,()=>{tn(e,!1)}):tn(e,t))},beforeUnmount(e,{value:t}){tn(e,t)}};function tn(e,t){e.style.display=t?e[kn]:"none",e[go]=!t}const Cc=Symbol(""),Oc=/(?:^|;)\s*display\s*:/;function Ic(e,t,n){const s=e.style,r=se(n);let i=!1;if(n&&!r){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?Dc(e,o,!se(t)&&t?t[o]:void 0,l)||on(s,o,l):on(s,o,"")}}else if(r){if(t!==n){const o=s[Cc];o&&(n+=";"+o),s.cssText=n,i=Oc.test(n)}}else t&&e.removeAttribute("style");kn in e&&(e[kn]=i?s.display:"",e[go]&&(s.display="none"))}const Ir=/\s*!important$/;function on(e,t,n){if(V(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Nc(e,t);Ir.test(n)?e.setProperty(vt(s),n.replace(Ir,""),"important"):e[s]=n}}const Nr=["Webkit","Moz","ms"],hs={};function Nc(e,t){const n=hs[t];if(n)return n;let s=ve(t);if(s!=="filter"&&s in e)return hs[t]=s;s=$n(s);for(let r=0;rps||(Uc.then(()=>ps=0),ps=Date.now());function jc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(V(r)){const i=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{i.call(s),s._stopped=!0};const o=r.slice(),l=[s];for(let c=0;ce.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,kc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Pc(e,s,o):t==="style"?Ic(e,n,s):Gn(t)?Kn(t)||Lc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Gc(e,t,s,o))?(Lr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Mr(e,t,s,o,i,t!=="value")):e._isVueCE&&(Kc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!se(s)))?Lr(e,ve(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Mr(e,t,s,o))};function Gc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fr(t)&&B(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Fr(t)&&se(n)?!1:t in e}function Kc(e,t){const n=e._def.props;if(!n)return!1;const s=ve(t);return Array.isArray(n)?n.some(r=>ve(r)===s):Object.keys(n).some(r=>ve(r)===s)}const yt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?n=>Cn(t,n):t};function Wc(e){e.target.composing=!0}function Hr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Re=Symbol("_assign"),Tn=Symbol("_initialValue");function gs(e,t,n){return t&&(e=e.trim()),n&&(e=qn(e)),e}const Ur={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e.parentNode&&(e.type==="text"?e[Tn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Tn]=e.defaultValue.replace(/\r\n?/g,` -`))),e[Re]=yt(r);const i=s||r.props&&r.props.type==="number";it(e,t?"change":"input",o=>{o.target.composing||e[Re](gs(e.value,n,i))}),(n||i)&&it(e,"change",()=>{e.value=gs(e.value,n,i)}),t||(it(e,"compositionstart",Wc),it(e,"compositionend",Hr),it(e,"change",Hr))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const r=t??"",i=e[Tn];delete e[Tn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Re](gs(e.value,n,s)):e.value=r},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Re]=yt(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?qn(e.value):e.value,c=t??"";if(l===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},$c={deep:!0,created(e,t,n){e[Re]=yt(n),it(e,"change",()=>{const s=e._modelValue,r=$t(e),i=e.checked,o=e[Re];if(V(s)){const l=Gs(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const f=[...s];f.splice(l,1),o(f)}}else if(Jt(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(mo(e,i))})},mounted:Br,beforeUpdate(e,t,n){e[Re]=yt(n),Br(e,t,n)}};function Br(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(V(t))r=Gs(t,s.props.value)>-1;else if(Jt(t))r=t.has(s.props.value);else{if(t===n)return;r=_t(t,mo(e,!0))}e.checked!==r&&(e.checked=r)}const qc={created(e,{value:t},n){e.checked=_t(t,n.props.value),e[Re]=yt(n),it(e,"change",()=>{e[Re]($t(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Re]=yt(s),t!==n&&(e.checked=_t(t,s.props.value))}},zc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,it(e,"change",()=>{const r=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?qn($t(i)):$t(i));e[Re](e.multiple?Jt(e._modelValue)?new Set(r):r:r[0]),e._assigning=!0,Qs(()=>{e._assigning=!1})}),e[Re]=yt(s)},mounted(e,{value:t}){jr(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Re]=yt(n)},updated(e,{value:t}){e._assigning||jr(e,t)}};function jr(e,t){const n=e.multiple,s=V(t);if(!(n&&!s&&!Jt(t))){for(let r=0,i=e.options.length;rString(f)===String(l)):o.selected=Gs(t,l)>-1}else o.selected=t.has(l);else if(_t($t(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function $t(e){return"_value"in e?e._value:e.value}function mo(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Au={created(e,t,n){Pn(e,t,n,null,"created")},mounted(e,t,n){Pn(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Pn(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Pn(e,t,n,s,"updated")}};function Jc(e,t){switch(e){case"SELECT":return zc;case"TEXTAREA":return Ur;default:switch(t){case"checkbox":return $c;case"radio":return qc;default:return Ur}}}function Pn(e,t,n,s,r){const o=Jc(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const Yc={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},wu=(e,t)=>{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=vt(r.key);if(t.some(o=>o===i||Yc[o]===i))return e(r)})},Qc=fe({patchProp:kc},xc);let kr;function Xc(){return kr||(kr=ic(Qc))}const Zc=(...e)=>{const t=Xc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=ta(s);if(!r)return;const i=t._component;!B(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,ea(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function ea(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ta(e){return se(e)?document.querySelector(e):e}/*! +**/let Ds;const Cr=typeof window<"u"&&window.trustedTypes;if(Cr)try{Ds=Cr.createPolicy("vue",{createHTML:e=>e})}catch{}const po=Ds?e=>Ds.createHTML(e):e=>e,wc="http://www.w3.org/2000/svg",Rc="http://www.w3.org/1998/Math/MathML",et=typeof document<"u"?document:null,Or=et&&et.createElement("template"),xc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?et.createElementNS(wc,e):t==="mathml"?et.createElementNS(Rc,e):n?et.createElement(e,{is:n}):et.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>et.createTextNode(e),createComment:e=>et.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>et.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Or.innerHTML=po(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Or.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Tc=Symbol("_vtc");function Pc(e,t,n){const s=e[Tc];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const kn=Symbol("_vod"),go=Symbol("_vsh"),wu={name:"show",beforeMount(e,{value:t},{transition:n}){e[kn]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),tn(e,!0),s.enter(e)):s.leave(e,()=>{tn(e,!1)}):tn(e,t))},beforeUnmount(e,{value:t}){tn(e,t)}};function tn(e,t){e.style.display=t?e[kn]:"none",e[go]=!t}const Cc=Symbol(""),Oc=/(?:^|;)\s*display\s*:/;function Ic(e,t,n){const s=e.style,r=se(n);let i=!1;if(n&&!r){if(t)if(se(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&on(s,l,"")}else for(const o in t)n[o]==null&&on(s,o,"");for(const o in n){o==="display"&&(i=!0);const l=n[o];l!=null?Dc(e,o,!se(t)&&t?t[o]:void 0,l)||on(s,o,l):on(s,o,"")}}else if(r){if(t!==n){const o=s[Cc];o&&(n+=";"+o),s.cssText=n,i=Oc.test(n)}}else t&&e.removeAttribute("style");kn in e&&(e[kn]=i?s.display:"",e[go]&&(s.display="none"))}const Ir=/\s*!important$/;function on(e,t,n){if(V(n))n.forEach(s=>on(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Nc(e,t);Ir.test(n)?e.setProperty(vt(s),n.replace(Ir,""),"important"):e[s]=n}}const Nr=["Webkit","Moz","ms"],hs={};function Nc(e,t){const n=hs[t];if(n)return n;let s=ve(t);if(s!=="filter"&&s in e)return hs[t]=s;s=$n(s);for(let r=0;rps||(Uc.then(()=>ps=0),ps=Date.now());function jc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const r=n.value;if(V(r)){const i=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{i.call(s),s._stopped=!0};const o=r.slice(),l=[s];for(let c=0;ce.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,kc=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?Pc(e,s,o):t==="style"?Ic(e,n,s):Gn(t)?Kn(t)||Lc(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Gc(e,t,s,o))?(Lr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Mr(e,t,s,o,i,t!=="value")):e._isVueCE&&(Kc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!se(s)))?Lr(e,ve(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Mr(e,t,s,o))};function Gc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fr(t)&&B(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Fr(t)&&se(n)?!1:t in e}function Kc(e,t){const n=e._def.props;if(!n)return!1;const s=ve(t);return Array.isArray(n)?n.some(r=>ve(r)===s):Object.keys(n).some(r=>ve(r)===s)}const yt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?n=>Cn(t,n):t};function Wc(e){e.target.composing=!0}function Hr(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Re=Symbol("_assign"),Tn=Symbol("_initialValue");function gs(e,t,n){return t&&(e=e.trim()),n&&(e=qn(e)),e}const Ur={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e.parentNode&&(e.type==="text"?e[Tn]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Tn]=e.defaultValue.replace(/\r\n?/g,` +`))),e[Re]=yt(r);const i=s||r.props&&r.props.type==="number";it(e,t?"change":"input",o=>{o.target.composing||e[Re](gs(e.value,n,i))}),(n||i)&&it(e,"change",()=>{e.value=gs(e.value,n,i)}),t||(it(e,"compositionstart",Wc),it(e,"compositionend",Hr),it(e,"change",Hr))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const r=t??"",i=e[Tn];delete e[Tn],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[Re](gs(e.value,n,s)):e.value=r},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Re]=yt(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?qn(e.value):e.value,c=t??"";if(l===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c)}},$c={deep:!0,created(e,t,n){e[Re]=yt(n),it(e,"change",()=>{const s=e._modelValue,r=$t(e),i=e.checked,o=e[Re];if(V(s)){const l=Gs(s,r),c=l!==-1;if(i&&!c)o(s.concat(r));else if(!i&&c){const f=[...s];f.splice(l,1),o(f)}}else if(Jt(s)){const l=new Set(s);i?l.add(r):l.delete(r),o(l)}else o(mo(e,i))})},mounted:Br,beforeUpdate(e,t,n){e[Re]=yt(n),Br(e,t,n)}};function Br(e,{value:t,oldValue:n},s){e._modelValue=t;let r;if(V(t))r=Gs(t,s.props.value)>-1;else if(Jt(t))r=t.has(s.props.value);else{if(t===n)return;r=_t(t,mo(e,!0))}e.checked!==r&&(e.checked=r)}const qc={created(e,{value:t},n){e.checked=_t(t,n.props.value),e[Re]=yt(n),it(e,"change",()=>{e[Re]($t(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Re]=yt(s),t!==n&&(e.checked=_t(t,s.props.value))}},zc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,it(e,"change",()=>{const r=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>n?qn($t(i)):$t(i));e[Re](e.multiple?Jt(e._modelValue)?new Set(r):r:r[0]),e._assigning=!0,Qs(()=>{e._assigning=!1})}),e[Re]=yt(s)},mounted(e,{value:t}){jr(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Re]=yt(n)},updated(e,{value:t}){e._assigning||jr(e,t)}};function jr(e,t){const n=e.multiple,s=V(t);if(!(n&&!s&&!Jt(t))){for(let r=0,i=e.options.length;rString(f)===String(l)):o.selected=Gs(t,l)>-1}else o.selected=t.has(l);else if(_t($t(o),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function $t(e){return"_value"in e?e._value:e.value}function mo(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Ru={created(e,t,n){Pn(e,t,n,null,"created")},mounted(e,t,n){Pn(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Pn(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Pn(e,t,n,s,"updated")}};function Jc(e,t){switch(e){case"SELECT":return zc;case"TEXTAREA":return Ur;default:switch(t){case"checkbox":return $c;case"radio":return qc;default:return Ur}}}function Pn(e,t,n,s,r){const o=Jc(e.tagName,n.props&&n.props.type)[r];o&&o(e,t,n,s)}const Yc=["ctrl","shift","alt","meta"],Qc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Yc.some(n=>e[`${n}Key`]&&!t.includes(n))},xu=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=vt(r.key);if(t.some(o=>o===i||Xc[o]===i))return e(r)})},Zc=fe({patchProp:kc},xc);let kr;function ea(){return kr||(kr=ic(Zc))}const ta=(...e)=>{const t=ea().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=sa(s);if(!r)return;const i=t._component;!B(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,na(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function na(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sa(e){return se(e)?document.querySelector(e):e}/*! * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */const Ht=typeof document<"u";function _o(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function na(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&_o(e.default)}const K=Object.assign;function ms(e,t){const n={};for(const s in t){const r=t[s];n[s]=Le(r)?r.map(e):e(r)}return n}const hn=()=>{},Le=Array.isArray;function Gr(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const yo=/#/g,sa=/&/g,ra=/\//g,ia=/=/g,oa=/\?/g,vo=/\+/g,la=/%5B/g,ca=/%5D/g,bo=/%5E/g,aa=/%60/g,Eo=/%7B/g,ua=/%7C/g,So=/%7D/g,fa=/%20/g;function sr(e){return e==null?"":encodeURI(""+e).replace(ua,"|").replace(la,"[").replace(ca,"]")}function da(e){return sr(e).replace(Eo,"{").replace(So,"}").replace(bo,"^")}function Ms(e){return sr(e).replace(vo,"%2B").replace(fa,"+").replace(yo,"%23").replace(sa,"%26").replace(aa,"`").replace(Eo,"{").replace(So,"}").replace(bo,"^")}function ha(e){return Ms(e).replace(ia,"%3D")}function pa(e){return sr(e).replace(yo,"%23").replace(oa,"%3F")}function ga(e){return pa(e).replace(ra,"%2F")}function bn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const ma=/\/$/,_a=e=>e.replace(ma,"");function _s(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return c=l>=0&&c>l?-1:c,c>=0&&(s=t.slice(0,c),i=t.slice(c,l>0?l:t.length),r=e(i.slice(1))),l>=0&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Ea(s??t,n),{fullPath:s+i+o,path:s,query:r,hash:bn(o)}}function ya(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Kr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function va(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&qt(t.matched[s],n.matched[r])&&Ao(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function qt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ao(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!ba(e[n],t[n]))return!1;return!0}function ba(e,t){return Le(e)?Wr(e,t):Le(t)?Wr(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Wr(e,t){return Le(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ea(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Ls=function(e){return e.pop="pop",e.push="push",e}({}),ys=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function Sa(e){if(!e)if(Ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),_a(e)}const Aa=/^[^#]+#/;function wa(e,t){return e.replace(Aa,"#")+t}function Ra(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const ns=()=>({left:window.scrollX,top:window.scrollY});function xa(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Ra(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function $r(e,t){return(history.state?history.state.position-t:-1)+e}const Vs=new Map;function Ta(e,t){Vs.set(e,t)}function Pa(e){const t=Vs.get(e);return Vs.delete(e),t}function Ca(e){return typeof e=="string"||e&&typeof e=="object"}function wo(e){return typeof e=="string"||typeof e=="symbol"}let ne=function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e}({});const Ro=Symbol("");ne.MATCHER_NOT_FOUND+"",ne.NAVIGATION_GUARD_REDIRECT+"",ne.NAVIGATION_ABORTED+"",ne.NAVIGATION_CANCELLED+"",ne.NAVIGATION_DUPLICATED+"";function zt(e,t){return K(new Error,{type:e,[Ro]:!0},t)}function Xe(e,t){return e instanceof Error&&Ro in e&&(t==null||!!(e.type&t))}const Oa=["params","query","hash"];function Ia(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Oa)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Na(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Ms(r)):[s&&Ms(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function Da(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Le(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Ma=Symbol(""),zr=Symbol(""),ss=Symbol(""),rr=Symbol(""),Fs=Symbol("");function nn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function mt(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const f=g=>{g===!1?c(zt(ne.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?c(g):Ca(g)?c(zt(ne.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),l())},u=i(()=>e.call(s&&s.instances[r],t,n,f));let h=Promise.resolve(u);e.length<3&&(h=h.then(f)),h.catch(g=>c(g))})}function vs(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let c=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(_o(c)){const f=(c.__vccOpts||c)[t];f&&i.push(mt(f,n,s,o,l,r))}else{let f=c();i.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const h=na(u)?u.default:u;o.mods[l]=u,o.components[l]=h;const g=(h.__vccOpts||h)[t];return g&&mt(g,n,s,o,l,r)()}))}}return i}function La(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oqt(f,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(f=>qt(f,c))||r.push(c))}return[n,s,r]}/*! + */const Ht=typeof document<"u";function _o(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ra(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&_o(e.default)}const K=Object.assign;function ms(e,t){const n={};for(const s in t){const r=t[s];n[s]=Le(r)?r.map(e):e(r)}return n}const hn=()=>{},Le=Array.isArray;function Gr(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}const yo=/#/g,ia=/&/g,oa=/\//g,la=/=/g,ca=/\?/g,vo=/\+/g,aa=/%5B/g,ua=/%5D/g,bo=/%5E/g,fa=/%60/g,Eo=/%7B/g,da=/%7C/g,So=/%7D/g,ha=/%20/g;function sr(e){return e==null?"":encodeURI(""+e).replace(da,"|").replace(aa,"[").replace(ua,"]")}function pa(e){return sr(e).replace(Eo,"{").replace(So,"}").replace(bo,"^")}function Ms(e){return sr(e).replace(vo,"%2B").replace(ha,"+").replace(yo,"%23").replace(ia,"%26").replace(fa,"`").replace(Eo,"{").replace(So,"}").replace(bo,"^")}function ga(e){return Ms(e).replace(la,"%3D")}function ma(e){return sr(e).replace(yo,"%23").replace(ca,"%3F")}function _a(e){return ma(e).replace(oa,"%2F")}function bn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const ya=/\/$/,va=e=>e.replace(ya,"");function _s(e,t,n="/"){let s,r={},i="",o="";const l=t.indexOf("#");let c=t.indexOf("?");return c=l>=0&&c>l?-1:c,c>=0&&(s=t.slice(0,c),i=t.slice(c,l>0?l:t.length),r=e(i.slice(1))),l>=0&&(s=s||t.slice(0,l),o=t.slice(l,t.length)),s=Aa(s??t,n),{fullPath:s+i+o,path:s,query:r,hash:bn(o)}}function ba(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Kr(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ea(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&qt(t.matched[s],n.matched[r])&&Ao(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function qt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ao(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Sa(e[n],t[n]))return!1;return!0}function Sa(e,t){return Le(e)?Wr(e,t):Le(t)?Wr(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Wr(e,t){return Le(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Aa(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let i=n.length-1,o,l;for(o=0;o1&&i--;else break;return n.slice(0,i).join("/")+"/"+s.slice(o).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let Ls=function(e){return e.pop="pop",e.push="push",e}({}),ys=function(e){return e.back="back",e.forward="forward",e.unknown="",e}({});function wa(e){if(!e)if(Ht){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),va(e)}const Ra=/^[^#]+#/;function xa(e,t){return e.replace(Ra,"#")+t}function Ta(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const ns=()=>({left:window.scrollX,top:window.scrollY});function Pa(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Ta(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function $r(e,t){return(history.state?history.state.position-t:-1)+e}const Vs=new Map;function Ca(e,t){Vs.set(e,t)}function Oa(e){const t=Vs.get(e);return Vs.delete(e),t}function Ia(e){return typeof e=="string"||e&&typeof e=="object"}function wo(e){return typeof e=="string"||typeof e=="symbol"}let ne=function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e}({});const Ro=Symbol("");ne.MATCHER_NOT_FOUND+"",ne.NAVIGATION_GUARD_REDIRECT+"",ne.NAVIGATION_ABORTED+"",ne.NAVIGATION_CANCELLED+"",ne.NAVIGATION_DUPLICATED+"";function zt(e,t){return K(new Error,{type:e,[Ro]:!0},t)}function Xe(e,t){return e instanceof Error&&Ro in e&&(t==null||!!(e.type&t))}const Na=["params","query","hash"];function Da(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Na)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Ma(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let s=0;sr&&Ms(r)):[s&&Ms(s)]).forEach(r=>{r!==void 0&&(t+=(t.length?"&":"")+n,r!=null&&(t+="="+r))})}return t}function La(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=Le(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Va=Symbol(""),zr=Symbol(""),ss=Symbol(""),rr=Symbol(""),Fs=Symbol("");function nn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function mt(e,t,n,s,r,i=o=>o()){const o=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const f=g=>{g===!1?c(zt(ne.NAVIGATION_ABORTED,{from:n,to:t})):g instanceof Error?c(g):Ia(g)?c(zt(ne.NAVIGATION_GUARD_REDIRECT,{from:t,to:g})):(o&&s.enterCallbacks[r]===o&&typeof g=="function"&&o.push(g),l())},u=i(()=>e.call(s&&s.instances[r],t,n,f));let h=Promise.resolve(u);e.length<3&&(h=h.then(f)),h.catch(g=>c(g))})}function vs(e,t,n,s,r=i=>i()){const i=[];for(const o of e)for(const l in o.components){let c=o.components[l];if(!(t!=="beforeRouteEnter"&&!o.instances[l]))if(_o(c)){const f=(c.__vccOpts||c)[t];f&&i.push(mt(f,n,s,o,l,r))}else{let f=c();i.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${o.path}"`);const h=ra(u)?u.default:u;o.mods[l]=u,o.components[l]=h;const g=(h.__vccOpts||h)[t];return g&&mt(g,n,s,o,l,r)()}))}}return i}function Fa(e,t){const n=[],s=[],r=[],i=Math.max(t.matched.length,e.matched.length);for(let o=0;oqt(f,l))?s.push(l):n.push(l));const c=e.matched[o];c&&(t.matched.find(f=>qt(f,c))||r.push(c))}return[n,s,r]}/*! * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let Va=()=>location.protocol+"//"+location.host;function xo(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),Kr(l,"")}return Kr(n,e)+s+r}function Fa(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=xo(e,location),I=n.value,R=t.value;let U=0;if(g){if(n.value=m,t.value=g,o&&o===I){o=null;return}U=R?g.position-R.position:0}else s(m);r.forEach(F=>{F(n.value,I,{delta:U,type:Ls.pop,direction:U?U>0?ys.forward:ys.back:ys.unknown})})};function c(){o=n.value}function f(g){r.push(g);const m=()=>{const I=r.indexOf(g);I>-1&&r.splice(I,1)};return i.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(K({},g.state,{scroll:ns()}),"")}}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:f,destroy:h}}function Jr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?ns():null}}function Ha(e){const{history:t,location:n}=window,s={value:xo(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,f,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:Va()+e+c;try{t[u?"replaceState":"pushState"](f,"",g),r.value=f}catch(m){console.error(m),n[u?"replace":"assign"](g)}}function o(c,f){i(c,K({},t.state,Jr(r.value.back,c,r.value.forward,!0),f,{position:r.value.position}),!0),s.value=c}function l(c,f){const u=K({},r.value,t.state,{forward:c,scroll:ns()});i(u.current,u,!0),i(c,K({},Jr(s.value,c,null),{position:u.position+1},f),!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function Ua(e){e=Sa(e);const t=Ha(e),n=Fa(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:wa.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Tt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var oe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(oe||{});const Ba={type:Tt.Static,value:""},ja=/[a-zA-Z0-9_]/;function ka(e){if(!e)return[[]];if(e==="/")return[[Ba]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${f}": ${m}`)}let n=oe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,f="",u="";function h(){f&&(n===oe.Static?i.push({type:Tt.Static,value:f}):n===oe.Param||n===oe.ParamRegExp||n===oe.ParamRegExpEnd?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Tt.Param,value:f,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=c}for(;lt.length?t.length===1&&t[0]===me.Static+me.Segment?1:-1:0}function To(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const qa={strict:!1,end:!0,sensitive:!1};function za(e,t,n){const s=Wa(ka(e.path),n),r=K(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Ja(e,t){const n=[],s=new Map;t=Gr(qa,t);function r(h){return s.get(h)}function i(h,g,m){const I=!m,R=Zr(h);R.aliasOf=m&&m.record;const U=Gr(t,h),F=[R];if("alias"in h){const O=typeof h.alias=="string"?[h.alias]:h.alias;for(const Y of O)F.push(Zr(K({},R,{components:m?m.record.components:R.components,path:Y,aliasOf:m?m.record:R})))}let P,N;for(const O of F){const{path:Y}=O;if(g&&Y[0]!=="/"){const ie=g.record.path,ee=ie[ie.length-1]==="/"?"":"/";O.path=g.record.path+(Y&&ee+Y)}if(P=za(O,g,U),m?m.alias.push(P):(N=N||P,N!==P&&N.alias.push(P),I&&h.name&&!ei(P)&&o(h.name)),Po(P)&&c(P),R.children){const ie=R.children;for(let ee=0;ee{o(N)}:hn}function o(h){if(wo(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=Xa(h,n);n.splice(g,0,h),h.record.name&&!ei(h)&&s.set(h.record.name,h)}function f(h,g){let m,I={},R,U;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h});U=m.record.name,I=K(Xr(g.params,m.keys.filter(N=>!N.optional).concat(m.parent?m.parent.keys.filter(N=>N.optional):[]).map(N=>N.name)),h.params&&Xr(h.params,m.keys.map(N=>N.name))),R=m.stringify(I)}else if(h.path!=null)R=h.path,m=n.find(N=>N.re.test(R)),m&&(I=m.parse(R),U=m.record.name);else{if(m=g.name?s.get(g.name):n.find(N=>N.re.test(g.path)),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h,currentLocation:g});U=m.record.name,I=K({},g.params,h.params),R=m.stringify(I)}const F=[];let P=m;for(;P;)F.unshift(P.record),P=P.parent;return{name:U,path:R,params:I,matched:F,meta:Qa(F)}}e.forEach(h=>i(h));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:f,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Xr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Zr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ya(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Ya(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function ei(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Qa(e){return e.reduce((t,n)=>K(t,n.meta),{})}function Xa(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;To(e,t[i])<0?s=i:n=i+1}const r=Za(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function Za(e){let t=e;for(;t=t.parent;)if(Po(t)&&To(e,t)===0)return t}function Po({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function ti(e){const t=Ne(ss),n=Ne(rr),s=Oe(()=>{const c=_e(e.to);return t.resolve(c)}),r=Oe(()=>{const{matched:c}=s.value,{length:f}=c,u=c[f-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(qt.bind(null,u));if(g>-1)return g;const m=ni(c[f-2]);return f>1&&ni(u)===m&&h[h.length-1].path!==m?h.findIndex(qt.bind(null,c[f-2])):g}),i=Oe(()=>r.value>-1&&ru(n.params,s.value.params)),o=Oe(()=>r.value>-1&&r.value===n.matched.length-1&&Ao(n.params,s.value.params));function l(c={}){if(su(c)){const f=t[_e(e.replace)?"replace":"push"](_e(e.to)).catch(hn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:s,href:Oe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function eu(e){return e.length===1?e[0]:e}const tu=Ui({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:ti,setup(e,{slots:t}){const n=Yt(ti(e)),{options:s}=Ne(ss),r=Oe(()=>({[si(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[si(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&eu(t.default(n));return e.custom?i:ho("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),nu=tu;function su(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ru(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Le(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function ni(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const si=(e,t,n)=>e??t??n,iu=Ui({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Ne(Fs),r=Oe(()=>e.route||s.value),i=Ne(zr,0),o=Oe(()=>{let f=_e(i);const{matched:u}=r.value;let h;for(;(h=u[f])&&!h.components;)f++;return f}),l=Oe(()=>r.value.matched[o.value]);On(zr,Oe(()=>o.value+1)),On(Ma,l),On(Fs,r);const c=cl();return In(()=>[c.value,l.value,e.name],([f,u,h],[g,m,I])=>{u&&(u.instances[h]=f,m&&m!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),f&&u&&(!m||!qt(u,m)||!g)&&(u.enterCallbacks[h]||[]).forEach(R=>R(f))},{flush:"post"}),()=>{const f=r.value,u=e.name,h=l.value,g=h&&h.components[u];if(!g)return ri(n.default,{Component:g,route:f});const m=h.props[u],I=m?m===!0?f.params:typeof m=="function"?m(f):m:null,U=ho(g,K({},I,t,{onVnodeUnmounted:F=>{F.component.isUnmounted&&(h.instances[u]=null)},ref:c}));return ri(n.default,{Component:U,route:f})||U}}});function ri(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const ou=iu;function lu(e){const t=Ja(e.routes,e),n=e.parseQuery||Na,s=e.stringifyQuery||qr,r=e.history,i=nn(),o=nn(),l=nn(),c=al(pt);let f=pt;Ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ms.bind(null,v=>""+v),h=ms.bind(null,ga),g=ms.bind(null,bn);function m(v,C){let x,D;return wo(v)?(x=t.getRecordMatcher(v),D=C):D=v,t.addRoute(D,x)}function I(v){const C=t.getRecordMatcher(v);C&&t.removeRoute(C)}function R(){return t.getRoutes().map(v=>v.record)}function U(v){return!!t.getRecordMatcher(v)}function F(v,C){if(C=K({},C||c.value),typeof v=="string"){const p=_s(n,v,C.path),y=t.resolve({path:p.path},C),b=r.createHref(p.fullPath);return K(p,y,{params:g(y.params),hash:bn(p.hash),redirectedFrom:void 0,href:b})}let x;if(v.path!=null)x=K({},v,{path:_s(n,v.path,C.path).path});else{const p=K({},v.params);for(const y in p)p[y]==null&&delete p[y];x=K({},v,{params:h(p)}),C.params=h(C.params)}const D=t.resolve(x,C),j=v.hash||"";D.params=u(g(D.params));const a=ya(s,K({},v,{hash:da(j),path:D.path})),d=r.createHref(a);return K({fullPath:a,hash:j,query:s===qr?Da(v.query):v.query||{}},D,{redirectedFrom:void 0,href:d})}function P(v){return typeof v=="string"?_s(n,v,c.value.path):K({},v)}function N(v,C){if(f!==v)return zt(ne.NAVIGATION_CANCELLED,{from:C,to:v})}function O(v){return ee(v)}function Y(v){return O(K(P(v),{replace:!0}))}function ie(v,C){const x=v.matched[v.matched.length-1];if(x&&x.redirect){const{redirect:D}=x;let j=typeof D=="function"?D(v,C):D;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=P(j):{path:j},j.params={}),K({query:v.query,hash:v.hash,params:j.path!=null?{}:v.params},j)}}function ee(v,C){const x=f=F(v),D=c.value,j=v.state,a=v.force,d=v.replace===!0,p=ie(x,D);if(p)return ee(K(P(p),{state:typeof p=="object"?K({},j,p.state):j,force:a,replace:d}),C||x);const y=x;y.redirectedFrom=C;let b;return!a&&va(s,D,x)&&(b=zt(ne.NAVIGATION_DUPLICATED,{to:y,from:D}),Ue(D,D,!0,!1)),(b?Promise.resolve(b):Fe(y,D)).catch(_=>Xe(_)?Xe(_,ne.NAVIGATION_GUARD_REDIRECT)?_:ht(_):G(_,y,D)).then(_=>{if(_){if(Xe(_,ne.NAVIGATION_GUARD_REDIRECT))return ee(K({replace:d},P(_.to),{state:typeof _.to=="object"?K({},j,_.to.state):j,force:a}),C||y)}else _=bt(y,D,!0,d,j);return dt(y,D,_),_})}function Ve(v,C){const x=N(v,C);return x?Promise.reject(x):Promise.resolve()}function ft(v){const C=Dt.values().next().value;return C&&typeof C.runWithContext=="function"?C.runWithContext(v):v()}function Fe(v,C){let x;const[D,j,a]=La(v,C);x=vs(D.reverse(),"beforeRouteLeave",v,C);for(const p of D)p.leaveGuards.forEach(y=>{x.push(mt(y,v,C))});const d=Ve.bind(null,v,C);return x.push(d),xe(x).then(()=>{x=[];for(const p of i.list())x.push(mt(p,v,C));return x.push(d),xe(x)}).then(()=>{x=vs(j,"beforeRouteUpdate",v,C);for(const p of j)p.updateGuards.forEach(y=>{x.push(mt(y,v,C))});return x.push(d),xe(x)}).then(()=>{x=[];for(const p of a)if(p.beforeEnter)if(Le(p.beforeEnter))for(const y of p.beforeEnter)x.push(mt(y,v,C));else x.push(mt(p.beforeEnter,v,C));return x.push(d),xe(x)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),x=vs(a,"beforeRouteEnter",v,C,ft),x.push(d),xe(x))).then(()=>{x=[];for(const p of o.list())x.push(mt(p,v,C));return x.push(d),xe(x)}).catch(p=>Xe(p,ne.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function dt(v,C,x){l.list().forEach(D=>ft(()=>D(v,C,x)))}function bt(v,C,x,D,j){const a=N(v,C);if(a)return a;const d=C===pt,p=Ht?history.state:{};x&&(D||d?r.replace(v.fullPath,K({scroll:d&&p&&p.scroll},j)):r.push(v.fullPath,j)),c.value=v,Ue(v,C,x,d),ht()}let He;function Qt(){He||(He=r.listen((v,C,x)=>{if(!Et.listening)return;const D=F(v),j=ie(D,Et.currentRoute.value);if(j){ee(K(j,{replace:!0,force:!0}),D).catch(hn);return}f=D;const a=c.value;Ht&&Ta($r(a.fullPath,x.delta),ns()),Fe(D,a).catch(d=>Xe(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_CANCELLED)?d:Xe(d,ne.NAVIGATION_GUARD_REDIRECT)?(ee(K(P(d.to),{force:!0}),D).then(p=>{Xe(p,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&!x.delta&&x.type===Ls.pop&&r.go(-1,!1)}).catch(hn),Promise.reject()):(x.delta&&r.go(-x.delta,!1),G(d,D,a))).then(d=>{d=d||bt(D,a,!1),d&&(x.delta&&!Xe(d,ne.NAVIGATION_CANCELLED)?r.go(-x.delta,!1):x.type===Ls.pop&&Xe(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),dt(D,a,d)}).catch(hn)}))}let It=nn(),le=nn(),z;function G(v,C,x){ht(v);const D=le.list();return D.length?D.forEach(j=>j(v,C,x)):console.error(v),Promise.reject(v)}function Ye(){return z&&c.value!==pt?Promise.resolve():new Promise((v,C)=>{It.add([v,C])})}function ht(v){return z||(z=!v,Qt(),It.list().forEach(([C,x])=>v?x(v):C()),It.reset()),v}function Ue(v,C,x,D){const{scrollBehavior:j}=e;if(!Ht||!j)return Promise.resolve();const a=!x&&Pa($r(v.fullPath,0))||(D||!x)&&history.state&&history.state.scroll||null;return Qs().then(()=>j(v,C,a)).then(d=>d&&xa(d)).catch(d=>G(d,v,C))}const be=v=>r.go(v);let Nt;const Dt=new Set,Et={currentRoute:c,listening:!0,addRoute:m,removeRoute:I,clearRoutes:t.clearRoutes,hasRoute:U,getRoutes:R,resolve:F,options:e,push:O,replace:Y,go:be,back:()=>be(-1),forward:()=>be(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:le.add,isReady:Ye,install(v){v.component("RouterLink",nu),v.component("RouterView",ou),v.config.globalProperties.$router=Et,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>_e(c)}),Ht&&!Nt&&c.value===pt&&(Nt=!0,O(r.location).catch(D=>{}));const C={};for(const D in pt)Object.defineProperty(C,D,{get:()=>c.value[D],enumerable:!0});v.provide(ss,Et),v.provide(rr,Pi(C)),v.provide(Fs,c);const x=v.unmount;Dt.add(v),v.unmount=function(){Dt.delete(v),Dt.size<1&&(f=pt,He&&He(),He=null,c.value=pt,Nt=!1,z=!1),x()}}};function xe(v){return v.reduce((C,x)=>C.then(()=>ft(x)),Promise.resolve())}return Et}function cu(){return Ne(ss)}function Ru(e){return Ne(rr)}const Hs="st_token";function Co(){return localStorage.getItem(Hs)}function bs(e){e?localStorage.setItem(Hs,e):localStorage.removeItem(Hs)}async function te(e,t,n,s=!1){const r={},i=Co();i&&(r.Authorization=`Bearer ${i}`);let o=n;!s&&n!==void 0&&n!==null&&(r["Content-Type"]="application/json",o=JSON.stringify(n));const l=await fetch(t,{method:e,headers:r,body:o});let c=null;try{c=await l.json()}catch{}if(!l.ok){const f=c&&(c.error||c.message)||`HTTP ${l.status}`;throw new Error(f)}return c}const Es={login:(e,t)=>te("POST","/api/auth/login",{username:e,password:t}),me:()=>te("GET","/api/auth/me"),setup:e=>te("POST","/api/auth/setup",e),updateProfile:e=>te("PATCH","/api/auth/profile",e),adminCreateUser:e=>te("POST","/api/admin/users",e),adminListUsers:()=>te("GET","/api/admin/users"),adminUpdateUser:(e,t)=>te("PUT",`/api/admin/users/${e}`,t),createGroup:e=>te("POST","/api/groups",e,!0),listGroups:()=>te("GET","/api/groups"),getGroup:e=>te("GET",`/api/groups/${e}`),analyzeGroup:e=>te("POST",`/api/groups/${e}/analyze`),listPersonas:e=>te("GET",`/api/groups/${e}/personas`),getPersona:(e,t)=>te("GET",`/api/groups/${e}/personas/${t}`),updatePersona:(e,t,n)=>te("PUT",`/api/groups/${e}/personas/${t}`,n),chatStart:(e,t)=>te("POST",`/api/chat/${e}/personas/${t}/chat/start`),chatSend:(e,t,n)=>te("POST",`/api/chat/${e}/personas/${t}/chat/send`,{text:n}),chatFinish:(e,t)=>te("POST",`/api/chat/${e}/personas/${t}/chat/finish`),mySessions:()=>te("GET","/api/chat/sessions"),myBoard:()=>te("GET","/api/me/board"),weakAreas:()=>te("GET","/api/me/weak-areas"),myPersonas:()=>te("GET","/api/me/personas"),generatePersona:e=>te("POST","/api/me/personas/generate",e),analytics:(e={})=>{const t=new URLSearchParams;e.from&&t.set("from",e.from),e.to&&t.set("to",e.to);const n=t.toString();return te("GET",`/api/analytics${n?`?${n}`:""}`)}},Pe=Yt({user:null,token:Co(),mustSetup:!1,get role(){return this.user?this.user.role:null},get isAdmin(){return this.role==="admin"||this.role==="super_admin"},async load(){var e;if(!this.token)return null;try{const t=await Es.me();return this.user=t.user,this.mustSetup=!!((e=t.user)!=null&&e.must_setup),this.user}catch{return this.user=null,this.mustSetup=!1,bs(null),null}},async login(e,t){const n=await Es.login(e,t);return this.token=n.token,bs(n.token),this.user=n.user,this.mustSetup=!!n.must_setup,n.user},async finishSetup(e,t){const n=await Es.setup({username:this.user.username||this.user.id,email:e,password:t});return this.user=n.user,this.mustSetup=!1,n.user},logout(){this.user=null,this.token=null,this.mustSetup=!1,bs(null)}}),Ss={en:{app:"Sales Trainer",login:"Login",logout:"Logout",username:"Username",email:"Email",password:"Password",newPassword:"New password",confirmPassword:"Confirm password",save:"Save",passwordTooShort:"Password must be at least 4 characters",passwordMismatch:"Passwords do not match",setupTitle:"Set up your account",setupSubtitle:"First login for ",loginError:"Invalid credentials",dashboard:"Dashboard",training:"Training",myDashboard:"My dashboard",adminOverview:"Admin overview",settings:"Settings",account:"Account",profile:"Profile",readonly:"read-only",name:"Display name",saveProfile:"Save profile",changePassword:"Change password",optional:"optional",saved:"Saved",total:"Total",dateRange:"Date range",apply:"Apply",clear:"Clear",hardestPersonas:"Hardest personas",closeRate:"Close rate",managePersonas:"Manage personas",difficulty:"Difficulty",trained:"Trained",addProduct:"Add product",trainingSubtitle:"Pick a product group, then choose a persona to practice closing the sale.",noTraining:"No training groups available",groups:"Persona Groups",myTraining:"My Training",adminTools:"Admin Tools",users:"Users",analytics:"Analytics",groupBuilder:"Group Builder",create:"Create",analyze:"Analyze",manual:"Manual",edit:"Edit",product:"Product",segment:"Initial customer segment (optional)",description:"Additional description / scenario (optional)",channel:"Channel",facebook:"Facebook",line:"LINE",language:"Language",thai:"Thai",english:"English",personas:"Personas",tierA:"Tier A — Ready to buy",tierB:"Tier B — Unsure",tierC:"Tier C — Not interested but has pain",selectPersona:"Select a persona to practice",chat:"Chat",start:"Start",send:"Send",finish:"Finish & get result",debrief:"Result & Coaching",won:"Won",lost:"Lost",notTried:"Not tried",score:"Score",pain:"Pain",why:"Reason",reveal:"Revealed persona details",generatePersona:"Generate my persona",weakAreas:"My weak areas",mySessions:"My sessions",openSaleTask:"The customer did NOT message first. You must open the sale.",sellerInitiated:"You must open the sale (outbound)",customerInitiated:"The customer will message you first"},th:{app:"ระบบฝึกทักษะการขาย",login:"เข้าสู่ระบบ",logout:"ออกจากระบบ",username:"ชื่อผู้ใช้",email:"อีเมล",password:"รหัสผ่าน",newPassword:"รหัสผ่านใหม่",confirmPassword:"ยืนยันรหัสผ่าน",save:"บันทึก",passwordTooShort:"รหัสผ่านต้องมีความยาวอย่างน้อย 4 ตัวอักษร",passwordMismatch:"รหัสผ่านที่ยืนยันไม่ตรงกัน",setupTitle:"ตั้งค่าบัญชีของคุณ",setupSubtitle:"เข้าสู่ระบบครั้งแรกสำหรับ ",loginError:"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง",dashboard:"หน้าหลัก",training:"การฝึก",myDashboard:"ภาพรวมผลการฝึก",adminOverview:"ภาพรวมผู้ดูแล",settings:"การตั้งค่า",account:"บัญชี",profile:"ข้อมูลส่วนตัว",readonly:"อ่านอย่างเดียว",name:"ชื่อที่แสดง",saveProfile:"บันทึกข้อมูล",changePassword:"เปลี่ยนรหัสผ่าน",optional:"ไม่บังคับ",saved:"บันทึกเรียบร้อย",total:"ทั้งหมด",dateRange:"ช่วงเวลา",apply:"กรอง",clear:"ล้าง",hardestPersonas:"บุคคลต้นแบบที่ขายยากที่สุด",closeRate:"อัตราปิดการขาย",managePersonas:"จัดการบุคคลต้นแบบ",difficulty:"ระดับความยาก",trained:"ฝึกแล้ว",addProduct:"เพิ่มสินค้า",trainingSubtitle:"เลือกกลุ่มสินค้า แล้วเลือกบุคคลต้นแบบเพื่อฝึกปิดการขาย",noTraining:"ยังไม่มีกลุ่มฝึก",groups:"กลุ่มบุคคลต้นแบบลูกค้า (Persona)",myTraining:"ประวัติการฝึก",adminTools:"เครื่องมือผู้ดูแลระบบ",users:"ผู้ใช้งาน",analytics:"สถิติ",groupBuilder:"สร้างกลุ่มบุคคลต้นแบบ",create:"สร้าง",analyze:"วิเคราะห์",manual:"ระบุเอง",edit:"แก้ไข",product:"สินค้า/บริการ",segment:"กลุ่มลูกค้าเป้าหมายเบื้องต้น (ไม่บังคับ)",description:"คำอธิบายหรือรายละเอียดเพิ่มเติม (ไม่บังคับ)",channel:"ช่องทางติดต่อ",facebook:"Facebook",line:"LINE",language:"ภาษา",thai:"ไทย",english:"อังกฤษ",personas:"บุคคลต้นแบบ",tierA:"ระดับ A — พร้อมตัดสินใจซื้อ",tierB:"ระดับ B — ยังไม่แน่ใจ",tierC:"ระดับ C — ไม่สนใจแต่มีปัญหา",selectPersona:"เลือกบุคคลต้นแบบเพื่อฝึก",chat:"แชท",start:"เริ่มต้น",send:"ส่ง",finish:"สรุปผล",debrief:"ผลลัพธ์และข้อเสนอแนะ",won:"ปิดการขายได้",lost:"ปิดการขายไม่ได้",notTried:"ยังไม่ได้ฝึก",score:"คะแนน",pain:"ปัญหาของลูกค้า",why:"เหตุผล",reveal:"รายละเอียดบุคคลต้นแบบที่ถูกซ่อนไว้",generatePersona:"สร้างบุคคลต้นแบบเพิ่มเติม",weakAreas:"จุดอ่อนที่ควรฝึกเพิ่มเติม",mySessions:"ประวัติการฝึกของฉัน",openSaleTask:"ลูกค้ายังไม่ได้ทักเข้ามา คุณต้องเป็นฝ่ายเริ่มบทสนทนาการขายเอง",sellerInitiated:"คุณต้องเริ่มการขายในเชิงรุก",customerInitiated:"ลูกค้าจะติดต่อเข้ามาก่อน"}},Ze=Yt({locale:localStorage.getItem("locale")||"th",t(e){return Ss[this.locale]&&Ss[this.locale][e]||Ss.en[e]||e},set(e){this.locale=e,localStorage.setItem("locale",e)}}),au=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},uu={class:"app"},fu={key:0,class:"topnav"},du={class:"tabs"},hu={class:"nav-right"},pu={class:"main"},gu={__name:"App",setup(e){const t=cu();function n(){Ze.set(Ze.locale==="th"?"en":"th")}function s(){Pe.logout(),t.push("/login")}return ki(()=>{Pe.token&&!Pe.user&&Pe.load()}),(r,i)=>{const o=gr("router-link"),l=gr("router-view");return rn(),Rr("div",uu,[_e(Pe).user?(rn(),Rr("nav",fu,[ue(o,{to:"/",class:"brand"},{default:Vt(()=>[Ft("🎯 "+wt(_e(Ze).t("app")),1)]),_:1}),xt("div",du,[_e(Pe).isAdmin?(rn(),Ns(o,{key:0,to:"/",class:jt(["tab",{active:r.$route.path==="/"}])},{default:Vt(()=>[Ft(wt(_e(Ze).t("adminOverview")),1)]),_:1},8,["class"])):xr("",!0),ue(o,{to:"/my/board",class:jt(["tab",{active:r.$route.path==="/my/board"}])},{default:Vt(()=>[Ft(wt(_e(Ze).t("myDashboard")),1)]),_:1},8,["class"]),ue(o,{to:"/training",class:jt(["tab",{active:r.$route.path==="/training"}])},{default:Vt(()=>[Ft(wt(_e(Ze).t("training")),1)]),_:1},8,["class"])]),xt("div",hu,[xt("button",{onClick:n,class:"lang"},wt(_e(Ze).locale==="th"?"EN":"TH"),1),ue(o,{to:"/settings",class:"icon-btn",title:"Settings"},{default:Vt(()=>[...i[0]||(i[0]=[Ft("⚙️",-1)])]),_:1}),xt("button",{onClick:s,class:"logout-btn"},"⏻ "+wt(_e(Ze).t("logout")),1)])])):xr("",!0),xt("main",pu,[(rn(),Ns(l,{key:_e(Ze).locale}))])])}}},mu=au(gu,[["__scopeId","data-v-836c19dc"]]),_u="modulepreload",yu=function(e){return"/"+e},ii={},Te=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=yu(c),c in ii)return;ii[c]=!0;const f=c.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${u}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":_u,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,m)=>{h.addEventListener("load",g),h.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},vu=[{path:"/login",component:()=>Te(()=>import("./Login-71KwBI7P.js"),__vite__mapDeps([0,1])),meta:{public:!0}},{path:"/setup",component:()=>Te(()=>import("./Setup-DofFBOwX.js"),__vite__mapDeps([2,3]))},{path:"/",component:()=>Te(()=>import("./Analytics-BothIrTb.js"),__vite__mapDeps([4,5])),meta:{admin:!0}},{path:"/my/board",component:()=>Te(()=>import("./MyBoard-CjsbrOsq.js"),__vite__mapDeps([6,7]))},{path:"/training",component:()=>Te(()=>import("./Training-CBrtrJhQ.js"),__vite__mapDeps([8,9]))},{path:"/groups/:gid/personas",component:()=>Te(()=>import("./Personas-BGoC8X56.js"),__vite__mapDeps([10,11]))},{path:"/groups/:gid/chat/:pid",component:()=>Te(()=>import("./Chat-CYFTB7sZ.js"),__vite__mapDeps([12,13]))},{path:"/settings",component:()=>Te(()=>import("./Settings-D5fpvNb-.js"),__vite__mapDeps([14,15]))},{path:"/admin/new-group",component:()=>Te(()=>import("./GroupBuilder-CxLYlayH.js"),[]),meta:{admin:!0}},{path:"/admin/groups/:gid/edit",component:()=>Te(()=>import("./GroupEdit-DiRZ2lxy.js"),__vite__mapDeps([16,17])),meta:{admin:!0}},{path:"/admin/users",component:()=>Te(()=>import("./AdminUsers-r15xKxjs.js"),[]),meta:{admin:!0}},{path:"/admin/analytics",component:()=>Te(()=>import("./Analytics-BothIrTb.js"),__vite__mapDeps([4,5])),meta:{admin:!0}}],Oo=lu({history:Ua(),routes:vu});Oo.beforeEach(async e=>e.meta.public?!0:(Pe.user||await Pe.load(),Pe.user?Pe.mustSetup&&e.path!=="/setup"?{path:"/setup"}:e.path==="/"&&!Pe.isAdmin?{path:"/my/board"}:e.meta.admin&&!Pe.isAdmin?{path:"/my/board"}:!0:{path:"/login",query:{redirect:e.fullPath}}));Zc(mu).use(Oo).mount("#app");export{Ns as A,Qs as B,zc as C,tt as F,au as _,xt as a,wu as b,Rr as c,Au as d,xr as e,Pe as f,cu as g,Ru as h,Ze as i,Ft as j,ki as k,ue as l,Vt as m,ks as n,rn as o,Eu as p,Es as q,cl as r,gr as s,wt as t,_e as u,Ur as v,bu as w,Su as x,Oe as y,jt as z}; + */let Ha=()=>location.protocol+"//"+location.host;function xo(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let o=r.includes(e.slice(i))?e.slice(i).length:1,l=r.slice(o);return l[0]!=="/"&&(l="/"+l),Kr(l,"")}return Kr(n,e)+s+r}function Ua(e,t,n,s){let r=[],i=[],o=null;const l=({state:g})=>{const m=xo(e,location),I=n.value,R=t.value;let U=0;if(g){if(n.value=m,t.value=g,o&&o===I){o=null;return}U=R?g.position-R.position:0}else s(m);r.forEach(F=>{F(n.value,I,{delta:U,type:Ls.pop,direction:U?U>0?ys.forward:ys.back:ys.unknown})})};function c(){o=n.value}function f(g){r.push(g);const m=()=>{const I=r.indexOf(g);I>-1&&r.splice(I,1)};return i.push(m),m}function u(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(K({},g.state,{scroll:ns()}),"")}}function h(){for(const g of i)g();i=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:c,listen:f,destroy:h}}function Jr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?ns():null}}function Ba(e){const{history:t,location:n}=window,s={value:xo(e,n)},r={value:t.state};r.value||i(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function i(c,f,u){const h=e.indexOf("#"),g=h>-1?(n.host&&document.querySelector("base")?e:e.slice(h))+c:Ha()+e+c;try{t[u?"replaceState":"pushState"](f,"",g),r.value=f}catch(m){console.error(m),n[u?"replace":"assign"](g)}}function o(c,f){i(c,K({},t.state,Jr(r.value.back,c,r.value.forward,!0),f,{position:r.value.position}),!0),s.value=c}function l(c,f){const u=K({},r.value,t.state,{forward:c,scroll:ns()});i(u.current,u,!0),i(c,K({},Jr(s.value,c,null),{position:u.position+1},f),!1),s.value=c}return{location:s,state:r,push:l,replace:o}}function ja(e){e=wa(e);const t=Ba(e),n=Ua(e,t.state,t.location,t.replace);function s(i,o=!0){o||n.pauseListeners(),history.go(i)}const r=K({location:"",base:e,go:s,createHref:xa.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Tt=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var oe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(oe||{});const ka={type:Tt.Static,value:""},Ga=/[a-zA-Z0-9_]/;function Ka(e){if(!e)return[[]];if(e==="/")return[[ka]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${f}": ${m}`)}let n=oe.Static,s=n;const r=[];let i;function o(){i&&r.push(i),i=[]}let l=0,c,f="",u="";function h(){f&&(n===oe.Static?i.push({type:Tt.Static,value:f}):n===oe.Param||n===oe.ParamRegExp||n===oe.ParamRegExpEnd?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),i.push({type:Tt.Param,value:f,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),f="")}function g(){f+=c}for(;lt.length?t.length===1&&t[0]===me.Static+me.Segment?1:-1:0}function To(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Ja={strict:!1,end:!0,sensitive:!1};function Ya(e,t,n){const s=qa(Ka(e.path),n),r=K(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Qa(e,t){const n=[],s=new Map;t=Gr(Ja,t);function r(h){return s.get(h)}function i(h,g,m){const I=!m,R=Zr(h);R.aliasOf=m&&m.record;const U=Gr(t,h),F=[R];if("alias"in h){const O=typeof h.alias=="string"?[h.alias]:h.alias;for(const Y of O)F.push(Zr(K({},R,{components:m?m.record.components:R.components,path:Y,aliasOf:m?m.record:R})))}let P,N;for(const O of F){const{path:Y}=O;if(g&&Y[0]!=="/"){const ie=g.record.path,ee=ie[ie.length-1]==="/"?"":"/";O.path=g.record.path+(Y&&ee+Y)}if(P=Ya(O,g,U),m?m.alias.push(P):(N=N||P,N!==P&&N.alias.push(P),I&&h.name&&!ei(P)&&o(h.name)),Po(P)&&c(P),R.children){const ie=R.children;for(let ee=0;ee{o(N)}:hn}function o(h){if(wo(h)){const g=s.get(h);g&&(s.delete(h),n.splice(n.indexOf(g),1),g.children.forEach(o),g.alias.forEach(o))}else{const g=n.indexOf(h);g>-1&&(n.splice(g,1),h.record.name&&s.delete(h.record.name),h.children.forEach(o),h.alias.forEach(o))}}function l(){return n}function c(h){const g=eu(h,n);n.splice(g,0,h),h.record.name&&!ei(h)&&s.set(h.record.name,h)}function f(h,g){let m,I={},R,U;if("name"in h&&h.name){if(m=s.get(h.name),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h});U=m.record.name,I=K(Xr(g.params,m.keys.filter(N=>!N.optional).concat(m.parent?m.parent.keys.filter(N=>N.optional):[]).map(N=>N.name)),h.params&&Xr(h.params,m.keys.map(N=>N.name))),R=m.stringify(I)}else if(h.path!=null)R=h.path,m=n.find(N=>N.re.test(R)),m&&(I=m.parse(R),U=m.record.name);else{if(m=g.name?s.get(g.name):n.find(N=>N.re.test(g.path)),!m)throw zt(ne.MATCHER_NOT_FOUND,{location:h,currentLocation:g});U=m.record.name,I=K({},g.params,h.params),R=m.stringify(I)}const F=[];let P=m;for(;P;)F.unshift(P.record),P=P.parent;return{name:U,path:R,params:I,matched:F,meta:Za(F)}}e.forEach(h=>i(h));function u(){n.length=0,s.clear()}return{addRoute:i,resolve:f,removeRoute:o,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Xr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function Zr(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Xa(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Xa(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function ei(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Za(e){return e.reduce((t,n)=>K(t,n.meta),{})}function eu(e,t){let n=0,s=t.length;for(;n!==s;){const i=n+s>>1;To(e,t[i])<0?s=i:n=i+1}const r=tu(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function tu(e){let t=e;for(;t=t.parent;)if(Po(t)&&To(e,t)===0)return t}function Po({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function ti(e){const t=Ne(ss),n=Ne(rr),s=Oe(()=>{const c=_e(e.to);return t.resolve(c)}),r=Oe(()=>{const{matched:c}=s.value,{length:f}=c,u=c[f-1],h=n.matched;if(!u||!h.length)return-1;const g=h.findIndex(qt.bind(null,u));if(g>-1)return g;const m=ni(c[f-2]);return f>1&&ni(u)===m&&h[h.length-1].path!==m?h.findIndex(qt.bind(null,c[f-2])):g}),i=Oe(()=>r.value>-1&&ou(n.params,s.value.params)),o=Oe(()=>r.value>-1&&r.value===n.matched.length-1&&Ao(n.params,s.value.params));function l(c={}){if(iu(c)){const f=t[_e(e.replace)?"replace":"push"](_e(e.to)).catch(hn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:s,href:Oe(()=>s.value.href),isActive:i,isExactActive:o,navigate:l}}function nu(e){return e.length===1?e[0]:e}const su=Ui({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:ti,setup(e,{slots:t}){const n=Yt(ti(e)),{options:s}=Ne(ss),r=Oe(()=>({[si(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[si(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&nu(t.default(n));return e.custom?i:ho("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),ru=su;function iu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ou(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Le(r)||r.length!==s.length||s.some((i,o)=>i.valueOf()!==r[o].valueOf()))return!1}return!0}function ni(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const si=(e,t,n)=>e??t??n,lu=Ui({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=Ne(Fs),r=Oe(()=>e.route||s.value),i=Ne(zr,0),o=Oe(()=>{let f=_e(i);const{matched:u}=r.value;let h;for(;(h=u[f])&&!h.components;)f++;return f}),l=Oe(()=>r.value.matched[o.value]);On(zr,Oe(()=>o.value+1)),On(Va,l),On(Fs,r);const c=cl();return In(()=>[c.value,l.value,e.name],([f,u,h],[g,m,I])=>{u&&(u.instances[h]=f,m&&m!==u&&f&&f===g&&(u.leaveGuards.size||(u.leaveGuards=m.leaveGuards),u.updateGuards.size||(u.updateGuards=m.updateGuards))),f&&u&&(!m||!qt(u,m)||!g)&&(u.enterCallbacks[h]||[]).forEach(R=>R(f))},{flush:"post"}),()=>{const f=r.value,u=e.name,h=l.value,g=h&&h.components[u];if(!g)return ri(n.default,{Component:g,route:f});const m=h.props[u],I=m?m===!0?f.params:typeof m=="function"?m(f):m:null,U=ho(g,K({},I,t,{onVnodeUnmounted:F=>{F.component.isUnmounted&&(h.instances[u]=null)},ref:c}));return ri(n.default,{Component:U,route:f})||U}}});function ri(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const cu=lu;function au(e){const t=Qa(e.routes,e),n=e.parseQuery||Ma,s=e.stringifyQuery||qr,r=e.history,i=nn(),o=nn(),l=nn(),c=al(pt);let f=pt;Ht&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=ms.bind(null,v=>""+v),h=ms.bind(null,_a),g=ms.bind(null,bn);function m(v,C){let x,D;return wo(v)?(x=t.getRecordMatcher(v),D=C):D=v,t.addRoute(D,x)}function I(v){const C=t.getRecordMatcher(v);C&&t.removeRoute(C)}function R(){return t.getRoutes().map(v=>v.record)}function U(v){return!!t.getRecordMatcher(v)}function F(v,C){if(C=K({},C||c.value),typeof v=="string"){const p=_s(n,v,C.path),y=t.resolve({path:p.path},C),b=r.createHref(p.fullPath);return K(p,y,{params:g(y.params),hash:bn(p.hash),redirectedFrom:void 0,href:b})}let x;if(v.path!=null)x=K({},v,{path:_s(n,v.path,C.path).path});else{const p=K({},v.params);for(const y in p)p[y]==null&&delete p[y];x=K({},v,{params:h(p)}),C.params=h(C.params)}const D=t.resolve(x,C),j=v.hash||"";D.params=u(g(D.params));const a=ba(s,K({},v,{hash:pa(j),path:D.path})),d=r.createHref(a);return K({fullPath:a,hash:j,query:s===qr?La(v.query):v.query||{}},D,{redirectedFrom:void 0,href:d})}function P(v){return typeof v=="string"?_s(n,v,c.value.path):K({},v)}function N(v,C){if(f!==v)return zt(ne.NAVIGATION_CANCELLED,{from:C,to:v})}function O(v){return ee(v)}function Y(v){return O(K(P(v),{replace:!0}))}function ie(v,C){const x=v.matched[v.matched.length-1];if(x&&x.redirect){const{redirect:D}=x;let j=typeof D=="function"?D(v,C):D;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=P(j):{path:j},j.params={}),K({query:v.query,hash:v.hash,params:j.path!=null?{}:v.params},j)}}function ee(v,C){const x=f=F(v),D=c.value,j=v.state,a=v.force,d=v.replace===!0,p=ie(x,D);if(p)return ee(K(P(p),{state:typeof p=="object"?K({},j,p.state):j,force:a,replace:d}),C||x);const y=x;y.redirectedFrom=C;let b;return!a&&Ea(s,D,x)&&(b=zt(ne.NAVIGATION_DUPLICATED,{to:y,from:D}),Ue(D,D,!0,!1)),(b?Promise.resolve(b):Fe(y,D)).catch(_=>Xe(_)?Xe(_,ne.NAVIGATION_GUARD_REDIRECT)?_:ht(_):G(_,y,D)).then(_=>{if(_){if(Xe(_,ne.NAVIGATION_GUARD_REDIRECT))return ee(K({replace:d},P(_.to),{state:typeof _.to=="object"?K({},j,_.to.state):j,force:a}),C||y)}else _=bt(y,D,!0,d,j);return dt(y,D,_),_})}function Ve(v,C){const x=N(v,C);return x?Promise.reject(x):Promise.resolve()}function ft(v){const C=Dt.values().next().value;return C&&typeof C.runWithContext=="function"?C.runWithContext(v):v()}function Fe(v,C){let x;const[D,j,a]=Fa(v,C);x=vs(D.reverse(),"beforeRouteLeave",v,C);for(const p of D)p.leaveGuards.forEach(y=>{x.push(mt(y,v,C))});const d=Ve.bind(null,v,C);return x.push(d),xe(x).then(()=>{x=[];for(const p of i.list())x.push(mt(p,v,C));return x.push(d),xe(x)}).then(()=>{x=vs(j,"beforeRouteUpdate",v,C);for(const p of j)p.updateGuards.forEach(y=>{x.push(mt(y,v,C))});return x.push(d),xe(x)}).then(()=>{x=[];for(const p of a)if(p.beforeEnter)if(Le(p.beforeEnter))for(const y of p.beforeEnter)x.push(mt(y,v,C));else x.push(mt(p.beforeEnter,v,C));return x.push(d),xe(x)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),x=vs(a,"beforeRouteEnter",v,C,ft),x.push(d),xe(x))).then(()=>{x=[];for(const p of o.list())x.push(mt(p,v,C));return x.push(d),xe(x)}).catch(p=>Xe(p,ne.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function dt(v,C,x){l.list().forEach(D=>ft(()=>D(v,C,x)))}function bt(v,C,x,D,j){const a=N(v,C);if(a)return a;const d=C===pt,p=Ht?history.state:{};x&&(D||d?r.replace(v.fullPath,K({scroll:d&&p&&p.scroll},j)):r.push(v.fullPath,j)),c.value=v,Ue(v,C,x,d),ht()}let He;function Qt(){He||(He=r.listen((v,C,x)=>{if(!Et.listening)return;const D=F(v),j=ie(D,Et.currentRoute.value);if(j){ee(K(j,{replace:!0,force:!0}),D).catch(hn);return}f=D;const a=c.value;Ht&&Ca($r(a.fullPath,x.delta),ns()),Fe(D,a).catch(d=>Xe(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_CANCELLED)?d:Xe(d,ne.NAVIGATION_GUARD_REDIRECT)?(ee(K(P(d.to),{force:!0}),D).then(p=>{Xe(p,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&!x.delta&&x.type===Ls.pop&&r.go(-1,!1)}).catch(hn),Promise.reject()):(x.delta&&r.go(-x.delta,!1),G(d,D,a))).then(d=>{d=d||bt(D,a,!1),d&&(x.delta&&!Xe(d,ne.NAVIGATION_CANCELLED)?r.go(-x.delta,!1):x.type===Ls.pop&&Xe(d,ne.NAVIGATION_ABORTED|ne.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),dt(D,a,d)}).catch(hn)}))}let It=nn(),le=nn(),z;function G(v,C,x){ht(v);const D=le.list();return D.length?D.forEach(j=>j(v,C,x)):console.error(v),Promise.reject(v)}function Ye(){return z&&c.value!==pt?Promise.resolve():new Promise((v,C)=>{It.add([v,C])})}function ht(v){return z||(z=!v,Qt(),It.list().forEach(([C,x])=>v?x(v):C()),It.reset()),v}function Ue(v,C,x,D){const{scrollBehavior:j}=e;if(!Ht||!j)return Promise.resolve();const a=!x&&Oa($r(v.fullPath,0))||(D||!x)&&history.state&&history.state.scroll||null;return Qs().then(()=>j(v,C,a)).then(d=>d&&Pa(d)).catch(d=>G(d,v,C))}const be=v=>r.go(v);let Nt;const Dt=new Set,Et={currentRoute:c,listening:!0,addRoute:m,removeRoute:I,clearRoutes:t.clearRoutes,hasRoute:U,getRoutes:R,resolve:F,options:e,push:O,replace:Y,go:be,back:()=>be(-1),forward:()=>be(1),beforeEach:i.add,beforeResolve:o.add,afterEach:l.add,onError:le.add,isReady:Ye,install(v){v.component("RouterLink",ru),v.component("RouterView",cu),v.config.globalProperties.$router=Et,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>_e(c)}),Ht&&!Nt&&c.value===pt&&(Nt=!0,O(r.location).catch(D=>{}));const C={};for(const D in pt)Object.defineProperty(C,D,{get:()=>c.value[D],enumerable:!0});v.provide(ss,Et),v.provide(rr,Pi(C)),v.provide(Fs,c);const x=v.unmount;Dt.add(v),v.unmount=function(){Dt.delete(v),Dt.size<1&&(f=pt,He&&He(),He=null,c.value=pt,Nt=!1,z=!1),x()}}};function xe(v){return v.reduce((C,x)=>C.then(()=>ft(x)),Promise.resolve())}return Et}function uu(){return Ne(ss)}function Pu(e){return Ne(rr)}const Hs="st_token";function Co(){return localStorage.getItem(Hs)}function bs(e){e?localStorage.setItem(Hs,e):localStorage.removeItem(Hs)}async function te(e,t,n,s=!1){const r={},i=Co();i&&(r.Authorization=`Bearer ${i}`);let o=n;!s&&n!==void 0&&n!==null&&(r["Content-Type"]="application/json",o=JSON.stringify(n));const l=await fetch(t,{method:e,headers:r,body:o});let c=null;try{c=await l.json()}catch{}if(!l.ok){const f=c&&(c.error||c.message)||`HTTP ${l.status}`;throw new Error(f)}return c}const Es={login:(e,t)=>te("POST","/api/auth/login",{username:e,password:t}),me:()=>te("GET","/api/auth/me"),setup:e=>te("POST","/api/auth/setup",e),updateProfile:e=>te("PATCH","/api/auth/profile",e),adminCreateUser:e=>te("POST","/api/admin/users",e),adminListUsers:()=>te("GET","/api/admin/users"),adminUpdateUser:(e,t)=>te("PUT",`/api/admin/users/${e}`,t),createGroup:e=>te("POST","/api/groups",e,!0),listGroups:()=>te("GET","/api/groups"),getGroup:e=>te("GET",`/api/groups/${e}`),analyzeGroup:e=>te("POST",`/api/groups/${e}/analyze`),listPersonas:e=>te("GET",`/api/groups/${e}/personas`),getPersona:(e,t)=>te("GET",`/api/groups/${e}/personas/${t}`),updatePersona:(e,t,n)=>te("PUT",`/api/groups/${e}/personas/${t}`,n),chatStart:(e,t)=>te("POST",`/api/chat/${e}/personas/${t}/chat/start`),chatSend:(e,t,n)=>te("POST",`/api/chat/${e}/personas/${t}/chat/send`,{text:n}),chatFinish:(e,t)=>te("POST",`/api/chat/${e}/personas/${t}/chat/finish`),mySessions:()=>te("GET","/api/chat/sessions"),myBoard:()=>te("GET","/api/me/board"),weakAreas:()=>te("GET","/api/me/weak-areas"),myPersonas:()=>te("GET","/api/me/personas"),generatePersona:e=>te("POST","/api/me/personas/generate",e),analytics:(e={})=>{const t=new URLSearchParams;e.from&&t.set("from",e.from),e.to&&t.set("to",e.to);const n=t.toString();return te("GET",`/api/analytics${n?`?${n}`:""}`)}},Pe=Yt({user:null,token:Co(),mustSetup:!1,get role(){return this.user?this.user.role:null},get isAdmin(){return this.role==="admin"||this.role==="super_admin"},async load(){var e;if(!this.token)return null;try{const t=await Es.me();return this.user=t.user,this.mustSetup=!!((e=t.user)!=null&&e.must_setup),this.user}catch{return this.user=null,this.mustSetup=!1,bs(null),null}},async login(e,t){const n=await Es.login(e,t);return this.token=n.token,bs(n.token),this.user=n.user,this.mustSetup=!!n.must_setup,n.user},async finishSetup(e,t){const n=await Es.setup({username:this.user.username||this.user.id,email:e,password:t});return this.user=n.user,this.mustSetup=!1,n.user},logout(){this.user=null,this.token=null,this.mustSetup=!1,bs(null)}}),Ss={en:{app:"Sales Trainer",login:"Login",logout:"Logout",username:"Username",email:"Email",password:"Password",newPassword:"New password",confirmPassword:"Confirm password",save:"Save",passwordTooShort:"Password must be at least 4 characters",passwordMismatch:"Passwords do not match",setupTitle:"Set up your account",setupSubtitle:"First login for ",loginError:"Invalid credentials",dashboard:"Dashboard",training:"Training",myDashboard:"My dashboard",adminOverview:"Admin overview",settings:"Settings",account:"Account",profile:"Profile",readonly:"read-only",name:"Display name",saveProfile:"Save profile",changePassword:"Change password",optional:"optional",saved:"Saved",total:"Total",dateRange:"Date range",apply:"Apply",clear:"Clear",hardestPersonas:"Hardest personas",closeRate:"Close rate",managePersonas:"Manage personas",difficulty:"Difficulty",trained:"Trained",addProduct:"Add product",trainingSubtitle:"Pick a product group, then choose a persona to practice closing the sale.",noTraining:"No training groups available",groups:"Persona Groups",myTraining:"My Training",adminTools:"Admin Tools",users:"Users",analytics:"Analytics",groupBuilder:"Group Builder",create:"Create",analyze:"Analyze",manual:"Manual",edit:"Edit",product:"Product",segment:"Initial customer segment (optional)",description:"Additional description / scenario (optional)",channel:"Channel",facebook:"Facebook",line:"LINE",language:"Language",thai:"Thai",english:"English",personas:"Personas",tierA:"Tier A — Ready to buy",tierB:"Tier B — Unsure",tierC:"Tier C — Not interested but has pain",selectPersona:"Select a persona to practice",chat:"Chat",start:"Start",send:"Send",finish:"Finish & get result",debrief:"Result & Coaching",won:"Won",lost:"Lost",notTried:"Not tried",score:"Score",pain:"Pain",why:"Reason",reveal:"Revealed persona details",generatePersona:"Generate my persona",weakAreas:"My weak areas",mySessions:"My sessions",openSaleTask:"The customer did NOT message first. You must open the sale.",sellerInitiated:"You must open the sale (outbound)",customerInitiated:"The customer will message you first"},th:{app:"ระบบฝึกทักษะการขาย",login:"เข้าสู่ระบบ",logout:"ออกจากระบบ",username:"ชื่อผู้ใช้",email:"อีเมล",password:"รหัสผ่าน",newPassword:"รหัสผ่านใหม่",confirmPassword:"ยืนยันรหัสผ่าน",save:"บันทึก",passwordTooShort:"รหัสผ่านต้องมีความยาวอย่างน้อย 4 ตัวอักษร",passwordMismatch:"รหัสผ่านที่ยืนยันไม่ตรงกัน",setupTitle:"ตั้งค่าบัญชีของคุณ",setupSubtitle:"เข้าสู่ระบบครั้งแรกสำหรับ ",loginError:"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง",dashboard:"หน้าหลัก",training:"การฝึก",myDashboard:"ภาพรวมผลการฝึก",adminOverview:"ภาพรวมผู้ดูแล",settings:"การตั้งค่า",account:"บัญชี",profile:"ข้อมูลส่วนตัว",readonly:"อ่านอย่างเดียว",name:"ชื่อที่แสดง",saveProfile:"บันทึกข้อมูล",changePassword:"เปลี่ยนรหัสผ่าน",optional:"ไม่บังคับ",saved:"บันทึกเรียบร้อย",total:"ทั้งหมด",dateRange:"ช่วงเวลา",apply:"กรอง",clear:"ล้าง",hardestPersonas:"บุคคลต้นแบบที่ขายยากที่สุด",closeRate:"อัตราปิดการขาย",managePersonas:"จัดการบุคคลต้นแบบ",difficulty:"ระดับความยาก",trained:"ฝึกแล้ว",addProduct:"เพิ่มสินค้า",trainingSubtitle:"เลือกกลุ่มสินค้า แล้วเลือกบุคคลต้นแบบเพื่อฝึกปิดการขาย",noTraining:"ยังไม่มีกลุ่มฝึก",groups:"กลุ่มบุคคลต้นแบบลูกค้า (Persona)",myTraining:"ประวัติการฝึก",adminTools:"เครื่องมือผู้ดูแลระบบ",users:"ผู้ใช้งาน",analytics:"สถิติ",groupBuilder:"สร้างกลุ่มบุคคลต้นแบบ",create:"สร้าง",analyze:"วิเคราะห์",manual:"ระบุเอง",edit:"แก้ไข",product:"สินค้า/บริการ",segment:"กลุ่มลูกค้าเป้าหมายเบื้องต้น (ไม่บังคับ)",description:"คำอธิบายหรือรายละเอียดเพิ่มเติม (ไม่บังคับ)",channel:"ช่องทางติดต่อ",facebook:"Facebook",line:"LINE",language:"ภาษา",thai:"ไทย",english:"อังกฤษ",personas:"บุคคลต้นแบบ",tierA:"ระดับ A — พร้อมตัดสินใจซื้อ",tierB:"ระดับ B — ยังไม่แน่ใจ",tierC:"ระดับ C — ไม่สนใจแต่มีปัญหา",selectPersona:"เลือกบุคคลต้นแบบเพื่อฝึก",chat:"แชท",start:"เริ่มต้น",send:"ส่ง",finish:"สรุปผล",debrief:"ผลลัพธ์และข้อเสนอแนะ",won:"ปิดการขายได้",lost:"ปิดการขายไม่ได้",notTried:"ยังไม่ได้ฝึก",score:"คะแนน",pain:"ปัญหาของลูกค้า",why:"เหตุผล",reveal:"รายละเอียดบุคคลต้นแบบที่ถูกซ่อนไว้",generatePersona:"สร้างบุคคลต้นแบบเพิ่มเติม",weakAreas:"จุดอ่อนที่ควรฝึกเพิ่มเติม",mySessions:"ประวัติการฝึกของฉัน",openSaleTask:"ลูกค้ายังไม่ได้ทักเข้ามา คุณต้องเป็นฝ่ายเริ่มบทสนทนาการขายเอง",sellerInitiated:"คุณต้องเริ่มการขายในเชิงรุก",customerInitiated:"ลูกค้าจะติดต่อเข้ามาก่อน"}},Ze=Yt({locale:localStorage.getItem("locale")||"th",t(e){return Ss[this.locale]&&Ss[this.locale][e]||Ss.en[e]||e},set(e){this.locale=e,localStorage.setItem("locale",e)}}),fu=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},du={class:"app"},hu={key:0,class:"topnav"},pu={class:"tabs"},gu={class:"nav-right"},mu={class:"main"},_u={__name:"App",setup(e){const t=uu();function n(){Ze.set(Ze.locale==="th"?"en":"th")}function s(){Pe.logout(),t.push("/login")}return ki(()=>{Pe.token&&!Pe.user&&Pe.load()}),(r,i)=>{const o=gr("router-link"),l=gr("router-view");return rn(),Rr("div",du,[_e(Pe).user?(rn(),Rr("nav",hu,[ue(o,{to:"/",class:"brand"},{default:Vt(()=>[Ft("🎯 "+wt(_e(Ze).t("app")),1)]),_:1}),xt("div",pu,[_e(Pe).isAdmin?(rn(),Ns(o,{key:0,to:"/",class:jt(["tab",{active:r.$route.path==="/"}])},{default:Vt(()=>[Ft(wt(_e(Ze).t("adminOverview")),1)]),_:1},8,["class"])):xr("",!0),ue(o,{to:"/my/board",class:jt(["tab",{active:r.$route.path==="/my/board"}])},{default:Vt(()=>[Ft(wt(_e(Ze).t("myDashboard")),1)]),_:1},8,["class"]),ue(o,{to:"/training",class:jt(["tab",{active:r.$route.path==="/training"}])},{default:Vt(()=>[Ft(wt(_e(Ze).t("training")),1)]),_:1},8,["class"])]),xt("div",gu,[xt("button",{onClick:n,class:"lang"},wt(_e(Ze).locale==="th"?"EN":"TH"),1),ue(o,{to:"/settings",class:"icon-btn",title:"Settings"},{default:Vt(()=>[...i[0]||(i[0]=[Ft("⚙️",-1)])]),_:1}),xt("button",{onClick:s,class:"logout-btn"},"⏻ "+wt(_e(Ze).t("logout")),1)])])):xr("",!0),xt("main",mu,[(rn(),Ns(l,{key:_e(Ze).locale}))])])}}},yu=fu(_u,[["__scopeId","data-v-836c19dc"]]),vu="modulepreload",bu=function(e){return"/"+e},ii={},Te=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=bu(c),c in ii)return;ii[c]=!0;const f=c.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${u}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":vu,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,m)=>{h.addEventListener("load",g),h.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},Eu=[{path:"/login",component:()=>Te(()=>import("./Login-B_jgPg0c.js"),__vite__mapDeps([0,1])),meta:{public:!0}},{path:"/setup",component:()=>Te(()=>import("./Setup-CvsspD_8.js"),__vite__mapDeps([2,3]))},{path:"/",component:()=>Te(()=>import("./Analytics-CSPAOjOx.js"),__vite__mapDeps([4,5])),meta:{admin:!0}},{path:"/my/board",component:()=>Te(()=>import("./MyBoard-C90Y_TAq.js"),__vite__mapDeps([6,7]))},{path:"/training",component:()=>Te(()=>import("./Training-BxzfTOYv.js"),__vite__mapDeps([8,9]))},{path:"/groups/:gid/personas",component:()=>Te(()=>import("./Personas-C5Hggrz_.js"),__vite__mapDeps([10,11]))},{path:"/groups/:gid/chat/:pid",component:()=>Te(()=>import("./Chat-A2iClHWr.js"),__vite__mapDeps([12,13]))},{path:"/settings",component:()=>Te(()=>import("./Settings-B4k75Ydt.js"),__vite__mapDeps([14,15]))},{path:"/admin/new-group",component:()=>Te(()=>import("./GroupBuilder-DfeKEJj_.js"),__vite__mapDeps([16,17])),meta:{admin:!0}},{path:"/admin/groups/:gid/edit",component:()=>Te(()=>import("./GroupEdit-CZ_bpnDf.js"),__vite__mapDeps([18,19])),meta:{admin:!0}},{path:"/admin/users",component:()=>Te(()=>import("./AdminUsers-Dk0NfGIJ.js"),[]),meta:{admin:!0}},{path:"/admin/analytics",component:()=>Te(()=>import("./Analytics-CSPAOjOx.js"),__vite__mapDeps([4,5])),meta:{admin:!0}}],Oo=au({history:ja(),routes:Eu});Oo.beforeEach(async e=>e.meta.public?!0:(Pe.user||await Pe.load(),Pe.user?Pe.mustSetup&&e.path!=="/setup"?{path:"/setup"}:e.path==="/"&&!Pe.isAdmin?{path:"/my/board"}:e.meta.admin&&!Pe.isAdmin?{path:"/my/board"}:!0:{path:"/login",query:{redirect:e.fullPath}}));ta(yu).use(Oo).mount("#app");export{Ns as A,Qs as B,zc as C,In as D,Yt as E,tt as F,xu as G,fu as _,xt as a,Tu as b,Rr as c,Ru as d,xr as e,Pe as f,uu as g,Pu as h,Ze as i,Ft as j,ki as k,ue as l,Vt as m,ks as n,rn as o,Au as p,Es as q,cl as r,gr as s,wt as t,_e as u,Ur as v,Su as w,wu as x,Oe as y,jt as z}; diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 7212452..442480a 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -4,7 +4,7 @@ Sales Trainer - + diff --git a/frontend/src/components/PersonaForm.vue b/frontend/src/components/PersonaForm.vue new file mode 100644 index 0000000..97e32e8 --- /dev/null +++ b/frontend/src/components/PersonaForm.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/frontend/src/views/GroupBuilder.vue b/frontend/src/views/GroupBuilder.vue index a24e011..c37c20c 100644 --- a/frontend/src/views/GroupBuilder.vue +++ b/frontend/src/views/GroupBuilder.vue @@ -1,39 +1,53 @@ @@ -73,3 +87,8 @@ async function create() { } } + + diff --git a/frontend/src/views/GroupEdit.vue b/frontend/src/views/GroupEdit.vue index 051c99e..571ba51 100644 --- a/frontend/src/views/GroupEdit.vue +++ b/frontend/src/views/GroupEdit.vue @@ -1,37 +1,58 @@ @@ -40,6 +61,7 @@ import { onMounted, ref } from 'vue' import { useRoute } from 'vue-router' import { api } from '../api' import { i18n } from '../i18n' +import PersonaForm from '../components/PersonaForm.vue' const route = useRoute() const gid = route.params.gid @@ -47,6 +69,7 @@ const group = ref(null) const personas = ref([]) const busy = ref(false) const error = ref('') +const editing = ref(null) async function load() { const data = await api.getGroup(gid) @@ -55,9 +78,9 @@ async function load() { } function byTier(t) { return personas.value.filter((p) => p.tier === t) } function tierLabel(t) { return i18n.t(t === 'A' ? 'tierA' : t === 'B' ? 'tierB' : 'tierC') } +function tierClass(t) { return { A: 'tier-a', B: 'tier-b', C: 'tier-c' }[t] || '' } async function analyze() { - busy.value = true - error.value = '' + busy.value = true; error.value = '' try { const data = await api.analyzeGroup(gid) personas.value = data.personas @@ -65,23 +88,29 @@ async function analyze() { } catch (e) { error.value = e.message } finally { busy.value = false } } -function editPersona(p) { - const json = prompt('Edit persona JSON (full fields):', JSON.stringify(p, null, 2)) - if (!json) return +function openEdit(p) { editing.value = JSON.parse(JSON.stringify(p)) } +async function savePersona(payload) { + busy.value = true try { - const parsed = JSON.parse(json) - api.updatePersona(gid, p.id, parsed).then(load) - } catch (e) { error.value = 'Invalid JSON: ' + e.message } + await api.updatePersona(gid, editing.value.id, payload) + editing.value = null + await load() + } catch (e) { error.value = e.message } + finally { busy.value = false } } onMounted(load) diff --git a/frontend/src/views/Personas.vue b/frontend/src/views/Personas.vue index d33782c..71c81ac 100644 --- a/frontend/src/views/Personas.vue +++ b/frontend/src/views/Personas.vue @@ -5,6 +5,14 @@

{{ i18n.t('personas') }}

{{ i18n.t('selectPersona') }} +
+ 🎯 วิธีฝึก +
    +
  1. เลือกลูกค้าจำลอง (บุคคลต้นแบบ) คนหนึ่งที่อยากฝึกด้วย
  2. +
  3. ระดับ A ง่ายสุด → ระดับ C ยากสุด (ดูจากดาว ★ ความยาก)
  4. +
  5. กดปุ่มสำหรับฝึกแชทกับลูกค้าคนนั้น (ฝึกได้คนละครั้งเท่านั้น)
  6. +
+
@@ -81,4 +89,5 @@ onMounted(load) .badge.won { background: #dcfce7; color: #166534; } .badge.lost { background: #fee2e2; color: #991b1b; } .badge.not_tried { background: #eef2ff; color: #4338ca; } +.guide { background: #eef2ff; border-color: #c7d2fe; margin: 12px 0 16px; }