i18n(th): professional, natural Thai; make Users button prominent

- Rewrite TH translations to professional/natural Thai (e.g. app 'ระบบฝึกทักษะการขาย'
  instead of 'ตัวฝึกขาย', 'บุคคลต้นแบบ' for persona, tiers 'พร้อมตัดสินใจซื้อ',
  'จุดอ่อนที่ควรฝึกเพิ่มเติม', 'ปิดการขายได้/ไม่ได้' for won/lost, etc.)
- Users button in admin overview now solid sky-blue (was faint .soft gray) so it's visible.
This commit is contained in:
Macky
2026-08-08 08:01:08 +07:00
parent acba183dc1
commit 88892be1d9
18 changed files with 57 additions and 55 deletions

View File

@@ -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-CNkuf2ya.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-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};

View File

@@ -0,0 +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};

View File

@@ -0,0 +1 @@
.stat[data-v-9558687f]{text-align:center;min-width:110px}.stat div[data-v-9558687f]{color:var(--muted);font-size:12px}.stat strong[data-v-9558687f]{font-size:20px}.filter-bar[data-v-9558687f]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.filter-bar input[type=date][data-v-9558687f]{width:auto}.grid[data-v-9558687f]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.tier-card[data-v-9558687f]{display:flex;flex-direction:column}.badge.won[data-v-9558687f]{background:#dcfce7;color:#166534}.badge.lost[data-v-9558687f]{background:#fee2e2;color:#991b1b}.badge.not_tried[data-v-9558687f]{background:#eef2ff;color:#4338ca}.bar[data-v-9558687f]{background:#eef0f5;border-radius:999px;height:10px;overflow:hidden;margin-top:10px}.bar-fill[data-v-9558687f]{background:linear-gradient(90deg,var(--accent),var(--accent-2));height:100%;border-radius:999px;transition:width .4s ease}.users-btn[data-v-9558687f]{background:#0ea5e9;border-color:transparent;color:#fff;font-weight:600}.users-btn[data-v-9558687f]:not(:disabled):hover{background:#0284c7;box-shadow:0 6px 16px #0ea5e959}

View File

@@ -1 +0,0 @@
.stat[data-v-d6f85218]{text-align:center;min-width:110px}.stat div[data-v-d6f85218]{color:var(--muted);font-size:12px}.stat strong[data-v-d6f85218]{font-size:20px}.filter-bar[data-v-d6f85218]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.filter-bar input[type=date][data-v-d6f85218]{width:auto}.grid[data-v-d6f85218]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.tier-card[data-v-d6f85218]{display:flex;flex-direction:column}.badge.won[data-v-d6f85218]{background:#dcfce7;color:#166534}.badge.lost[data-v-d6f85218]{background:#fee2e2;color:#991b1b}.badge.not_tried[data-v-d6f85218]{background:#eef2ff;color:#4338ca}.bar[data-v-d6f85218]{background:#eef0f5;border-radius:999px;height:10px;overflow:hidden;margin-top:10px}.bar-fill[data-v-d6f85218]{background:linear-gradient(90deg,var(--accent),var(--accent-2));height:100%;border-radius:999px;transition:width .4s ease}

View File

@@ -1 +0,0 @@
import{_ as x,k,c,a as s,t,u as a,i as l,l as m,m as y,w as f,v as h,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-CNkuf2ya.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:"soft"},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"}},os={class:"badge won"},as={class:"badge lost"},ls={class:"badge not_tried"},ns={class:"muted",style:{"margin-top":"8px"}},is={__name:"Analytics",setup(rs){const o=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{o.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(a(l).t("adminOverview")),1),s("div",z,[m(p,{to:"/admin/users"},{default:y(()=>[s("button",D,"👥 "+t(a(l).t("users")),1)]),_:1}),m(p,{to:"/admin/new-group"},{default:y(()=>[s("button",F," "+t(a(l).t("addProduct")),1)]),_:1})])]),s("div",M,[s("span",P,"🗓 "+t(a(l).t("dateRange")),1),f(s("input",{type:"date","onUpdate:modelValue":e[0]||(e[0]=n=>i.value=n)},null,512),[[h,i.value]]),e[2]||(e[2]=s("span",null,"",-1)),f(s("input",{type:"date","onUpdate:modelValue":e[1]||(e[1]=n=>r.value=n)},null,512),[[h,r.value]]),s("button",{class:"primary",onClick:w,disabled:d.value},"→ "+t(a(l).t("apply")),9,R),s("button",{onClick:b,disabled:d.value},t(a(l).t("clear")),9,T)]),s("div",U,[s("div",W,[e[3]||(e[3]=s("div",null,"Sessions",-1)),s("strong",null,t(o.value.overall.total_sessions),1)]),s("div",q,[e[4]||(e[4]=s("div",null,"Wins",-1)),s("strong",E,t(o.value.overall.wins),1)]),s("div",I,[e[5]||(e[5]=s("div",null,"Losses",-1)),s("strong",O,t(o.value.overall.losses),1)]),s("div",G,[e[6]||(e[6]=s("div",null,"Avg score",-1)),s("strong",null,t(o.value.overall.avg_score),1)]),s("div",H,[e[7]||(e[7]=s("div",null,"Trainees",-1)),s("strong",null,t(o.value.trainee_count),1)])]),s("div",J,[s("div",K,[s("strong",null,t(a(l).t("closeRate")),1),s("strong",null,t(o.value.overall.close_rate)+"%",1)]),s("div",Q,[s("div",{class:"bar-fill",style:C({width:(o.value.overall.close_rate||0)+"%"})},null,4)]),s("div",X,t(o.value.overall.wins)+" "+t(a(l).t("won").toLowerCase())+" / "+t(o.value.overall.total_sessions)+" sessions ",1)]),s("h3",Y,t(a(l).t("hardestPersonas")),1),o.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(o.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",os,t(n.wins)+"W",1),s("span",as,t(n.losses)+"L",1),s("span",ls,t(n.plays)+" plays",1)]),s("div",ns,t(a(l).t("score"))+": "+t(n.avg_score),1)]))),128))])])}}},us=x(is,[["__scopeId","data-v-d6f85218"]]);export{us as default};

View File

@@ -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-CNkuf2ya.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-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};

View File

@@ -1 +1 @@
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-CNkuf2ya.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};
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};

View File

@@ -1 +1 @@
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-CNkuf2ya.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};
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};

View File

@@ -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-CNkuf2ya.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-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};

View File

@@ -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-CNkuf2ya.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-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};

View File

@@ -1 +1 @@
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-CNkuf2ya.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};
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};

View File

@@ -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-CNkuf2ya.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-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};

View File

@@ -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-CNkuf2ya.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-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};

View File

@@ -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-CNkuf2ya.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-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};

File diff suppressed because one or more lines are too long

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sales Trainer</title>
<script type="module" crossorigin src="/assets/index-CNkuf2ya.js"></script>
<script type="module" crossorigin src="/assets/index-gmrXNPrQ.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-HCrojZU7.css">
</head>
<body>