1import{E as ie}from"./B81A0o-P.js";import{b as je,a as ue,E as de}from"./DRrrrkWA.js";import{t as ce,u as Q,d as We,E as x}from"./uVtHs5w9.js";import{E as Ke}from"./BRvyKYWH.js";import{b as G,d as C,_ as J,e as He,f as $e,g as Ge,h as Ce,j as Se,E as A,w as Ve,u as Xe,k as xe,z as Je,l as Ze,m as Ye,n as Qe}from"./DwUzRJah.js";/* empty css */import{m as le,u as et,E as D}from"./B1bNjX91.js";import{u as ee}from"./CtdghKbR.js";import{c as tt}from"./BRvJ2Q8d.js";import{E as at}from"./rD863a5t.js";import{e as L,D as W,C as F,ai as Ue,a4 as me,c as U,o as k,i as V,I as P,j as t,a as $,q as I,H as T,t as H,k as M,w as y,J as st,a5 as Fe,aj as Re,ak as R,r as N,F as Y,n as ot,ab as Le,ac as K,b as m,s as lt,B as rt,$ as re,al as ve,U as ge,m as nt,K as it,a0 as ut,am as ye,a8 as we,y as X,d as B,_ as Te,af as Me,ag as te,M as pe,z as fe,an as Ne,ao as dt,l as ct}from"./CvkQNRNp.js";import{i as pt}from"./CU7bArYE.js";import{E as Z}from"./DWgvGGge.js";import{A as ft}from"./Cy7nxg2_.js";import"./GpkAbSo7.js";import"./_qyubZML.js";import"./oMN-r9CP.js";var mt=1,vt=4;function he(r){return je(r,mt|vt)}const gt=G({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:r=>r>=0&&r<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:C(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:C([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:C(Function),default:r=>`${r}%`}}),yt=L({name:"ElProgress"}),wt=L({...yt,props:gt,setup(r){const s=r,o={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},u=W("progress"),p=F(()=>{const i={width:`${s.percentage}%`,animationDuration:`${s.duration}s`},E=b(s.percentage);return E.includes("gradient")?i.background=E:i.backgroundColor=E,i}),n=F(()=>(s.strokeWidth/s.width*100).toFixed(1)),d=F(()=>["circle","dashboard"].includes(s.type)?Number.parseInt(`${50-Number.parseFloat(n.value)/2}`,10):0),w=F(()=>{const i=d.value,E=s.type==="dashboard";return` 2 M 50 50 3 m 0 ${E?"":"-"}${i} 4 a ${i} ${i} 0 1 1 0 ${E?"-":""}${i*2} 5 a ${i} ${i} 0 1 1 0 ${E?"":"-"}${i*2} 6 `}),c=F(()=>2*Math.PI*d.value),_=F(()=>s.type==="dashboard"?.75:1),S=F(()=>`${-1*c.value*(1-_.value)/2}px`),h=F(()=>({strokeDasharray:`${c.value*_.value}px, ${c.value}px`,strokeDashoffset:S.value})),g=F(()=>({strokeDasharray:`${c.value*_.value*(s.percentage/100)}px, ${c.value}px`,strokeDashoffset:S.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),a=F(()=>{let i;return s.color?i=b(s.percentage):i=o[s.status]||o.default,i}),l=F(()=>s.status==="warning"?He:s.type==="line"?s.status==="success"?$e:Ge:s.status==="success"?Ce:Se),e=F(()=>s.type==="line"?12+s.strokeWidth*.4:s.width*.111111+2),v=F(()=>s.format(s.percentage));function f(i){const E=100/i.length;return i.map((O,q)=>me(O)?{color:O,percentage:(q+1)*E}:O).sort((O,q)=>O.percentage-q.percentage)}const b=i=>{var E;const{color:z}=s;if(Ue(z))return z(i);if(me(z))return z;{const O=f(z);for(const q of O)if(q.percentage>i)return q.color;return(E=O[O.length-1])==null?void 0:E.color}};return(i,E)=>(k(),U("div",{class:P([t(u).b(),t(u).m(i.type),t(u).is(i.status),{[t(u).m("without-text")]:!i.showText,[t(u).m("text-inside")]:i.textInside}]),role:"progressbar","aria-valuenow":i.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[i.type==="line"?(k(),U("div",{key:0,class:P(t(u).b("bar"))},[$("div",{class:P(t(u).be("bar","outer")),style:I({height:`${i.strokeWidth}px`})},[$("div",{class:P([t(u).be("bar","inner"),{[t(u).bem("bar","inner","indeterminate")]:i.indeterminate},{[t(u).bem("bar","inner","striped")]:i.striped},{[t(u).bem("bar","inner","striped-flow")]:i.stripedFlow}]),style:I(t(p))},[(i.showText||i.$slots.default)&&i.textInside?(k(),U("div",{key:0,class:P(t(u).be("bar","innerText"))},[T(i.$slots,"default",{percentage:i.percentage},()=>[$("span",null,H(t(v)),1)])],2)):V("v-if",!0)],6)],6)],2)):(k(),U("div",{key:1,class:P(t(u).b("circle")),style:I({height:`${i.width}px`,width:`${i.width}px`})},[(k(),U("svg",{viewBox:"0 0 100 100"},[$("path",{class:P(t(u).be("circle","track")),d:t(w),stroke:`var(${t(u).cssVarName("fill-color-light")}
6, #e5e9f2)`,"stroke-linecap":i.strokeLinecap,"stroke-width":t(n),fill:"none",style:I(t(h))},null,14,["d","stroke","stroke-linecap","stroke-width"]),$("path",{class:P(t(u).be("circle","path")),d:t(w),stroke:t(a),fill:"none",opacity:i.percentage?1:0,"stroke-linecap":i.strokeLinecap,"stroke-width":t(n),style:I(t(g))},null,14,["d","stroke","opacity","stroke-linecap","stroke-width"])]))],6)),(i.showText||i.$slots.default)&&!i.textInside?(k(),U("div",{key:2,class:P(t(u).e("text")),style:I({fontSize:`${t(e)}px`})},[T(i.$slots,"default",{percentage:i.percentage},()=>[i.status?(k(),M(t(A),{key:1},{default:y(()=>[(k(),M(st(t(l))))]),_:1})):(k(),U("span",{key:0},H(t(v)),1))])],6)):V("v-if",!0)],10,["aria-valuenow"]))}});var ht=J(wt,[["__file","progress.vue"]]);const bt=Ve(ht),Oe=Symbol("uploadContextKey"),_t="ElUpload";class kt extends Error{constructor(s,o,u,p){super(s),this.name="UploadAjaxError",this.status=o,this.method=u,this.url=p}}function be(r,s,o){let u;return o.response?u=`${o.response.error||o.response}`:o.responseText?u=`${o.responseText}`:u=`fail to ${s.method} ${r} ${o.status}`,new kt(u,o.status,s.method,r)}function Et(r){const s=r.responseText||r.response;if(!s)return s;try{return JSON.parse(s)}catch{return s}}const Pt=r=>{typeof XMLHttpRequest>"u"&&ce(_t,"XMLHttpRequest is undefined");const s=new XMLHttpRequest,o=r.action;s.upload&&s.upload.addEventListener("progress",n=>{const d=n;d.percent=n.total>0?n.loaded/n.total*100:0,r.onProgress(d)});const u=new FormData;if(r.data)for(const[n,d]of Object.entries(r.data))Fe(d)&&d.length?u.append(n,...d):u.append(n,d);u.append(r.filename,r.file,r.file.name),s.addEventListener("error",()=>{r.onError(be(o,r,s))}),s.addEventListener("load",()=>{if(s.status<200||s.status>=300)return r.onError(be(o,r,s));r.onSuccess(Et(s))}),s.open(r.method,o,!0),r.withCredentials&&"withCredentials"in s&&(s.withCredentials=!0);const p=r.headers||{};if(p instanceof Headers)p.forEach((n,d)=>s.setRequestHeader(d,n));else for(const[n,d]of Object.entries(p))Re(d)||s.setRequestHeader(n,String(d));return s.send(u),s},De=["text","picture","picture-card"];let $t=1;const ne=()=>Date.now()+$t++,qe=G({action:{type:String,default:"#"},headers:{type:C(Object)},method:{type:String,default:"post"},data:{type:C([Object,Function,Promise]),default:()=>le({})},multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:C(Array),default:()=>le([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:De,default:"text"},httpRequest:{type:C(Function),default:Pt},disabled:Boolean,limit:Number}),Ct=G({...qe,beforeUpload:{type:C(Function),default:R},beforeRemove:{type:C(Function)},onRemove:{type:C(Function),default:R},onChange:{type:C(Function),default:R},onPreview:{type:C(Function),default:R},onSuccess:{type:C(Function),default:R},onProgress:{type:C(Function),default:R},onError:{type:C(Function),default:R},onExceed:{type:C(Function),default:R},crossorigin:{type:C(String)}}),St=G({files:{type:C(Array),default:()=>le([])},disabled:Boolean,handlePreview:{type:C(Function),default:R},listType:{type:String,values:De,default:"text"},crossorigin:{type:C(String)}}),Vt={remove:r=>!!r},Ut=L({name:"ElUploadList"}),Ft=L({...Ut,props:St,emits:Vt,setup(r,{emit:s}){const o=r,{t:u}=Xe(),p=W("upload"),n=W("icon"),d=W("list"),w=Q(),c=N(!1),_=F(()=>[p.b("list"),p.bm("list",o.listType),p.is("disabled",o.disabled)]),S=h=>{s("remove",h)};return(h,g)=>(k(),M(lt,{tag:"ul",class:P(t(_)),name:t(d).b()},{default:y(()=>[(k(!0),U(Y,null,ot(h.files,(a,l)=>(k(),U("li",{key:a.uid||a.name,class:P([t(p).be("list","item"),t(p).is(a.status),{focusing:c.value}]),tabindex:"0",onKeydown:Le(e=>!t(w)&&S(a),["delete"]),onFocus:e=>c.value=!0,onBlur:e=>c.value=!1,onClick:e=>c.value=!1},[T(h.$slots,"default",{file:a,index:l},()=>[h.listType==="picture"||a.status!=="uploading"&&h.listType==="picture-card"?(k(),U("img",{key:0,class:P(t(p).be("list","item-thumbnail")),src:a.url,crossorigin:h.crossorigin,alt:""},null,10,["src","crossorigin"])):V("v-if",!0),a.status==="uploading"||h.listType!=="picture-card"?(k(),U("div",{key:1,class:P(t(p).be("list","item-info"))},[$("a",{class:P(t(p).be("list","item-name")),onClick:K(e=>h.handlePreview(a),["prevent"])},[m(t(A),{class:P(t(n).m("document"))},{default:y(()=>[m(t(xe))]),_:1},8,["class"]),$("span",{class:P(t(p).be("list","item-file-name")),title:a.name},H(a.name),11,["title"])],10,["onClick"]),a.status==="uploading"?(k(),M(t(bt),{key:0,t
6ype:h.listType==="picture-card"?"circle":"line","stroke-width":h.listType==="picture-card"?6:2,percentage:Number(a.percentage),style:I(h.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):V("v-if",!0)],2)):V("v-if",!0),$("label",{class:P(t(p).be("list","item-status-label"))},[h.listType==="text"?(k(),M(t(A),{key:0,class:P([t(n).m("upload-success"),t(n).m("circle-check")])},{default:y(()=>[m(t($e))]),_:1},8,["class"])):["picture-card","picture"].includes(h.listType)?(k(),M(t(A),{key:1,class:P([t(n).m("upload-success"),t(n).m("check")])},{default:y(()=>[m(t(Ce))]),_:1},8,["class"])):V("v-if",!0)],2),t(w)?V("v-if",!0):(k(),M(t(A),{key:2,class:P(t(n).m("close")),onClick:e=>S(a)},{default:y(()=>[m(t(Se))]),_:2},1032,["class","onClick"])),V(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),V(" This is a bug which needs to be fixed "),V(" TODO: Fix the incorrect navigation interaction "),t(w)?V("v-if",!0):(k(),U("i",{key:3,class:P(t(n).m("close-tip"))},H(t(u)("el.upload.deleteTip")),3)),h.listType==="picture-card"?(k(),U("span",{key:4,class:P(t(p).be("list","item-actions"))},[$("span",{class:P(t(p).be("list","item-preview")),onClick:e=>h.handlePreview(a)},[m(t(A),{class:P(t(n).m("zoom-in"))},{default:y(()=>[m(t(Je))]),_:1},8,["class"])],10,["onClick"]),t(w)?V("v-if",!0):(k(),U("span",{key:0,class:P(t(p).be("list","item-delete")),onClick:e=>S(a)},[m(t(A),{class:P(t(n).m("delete"))},{default:y(()=>[m(t(Ze))]),_:1},8,["class"])],10,["onClick"]))],2)):V("v-if",!0)])],42,["onKeydown","onFocus","onBlur","onClick"]))),128)),T(h.$slots,"append")]),_:3},8,["class","name"]))}});
6var _e=J(Ft,[["__file","upload-list.vue"]]);const Rt=G({disabled:Boolean}),Lt={file:r=>Fe(r)},Be="ElUploadDrag",Tt=L({name:Be}),Mt=L({...Tt,props:Rt,emits:Lt,setup(r,{emit:s}){rt(Oe)||ce(Be,"usage: <el-upload><el-upload-dragger /></el-upload>");const u=W("upload"),p=N(!1),n=Q(),d=_=>{if(n.value)return;p.value=!1,_.stopPropagation();const S=Array.from(_.dataTransfer.files),h=_.dataTransfer.items||[];S.forEach((g,a)=>{var l;const e=h[a],v=(l=e?.webkitGetAsEntry)==null?void 0:l.call(e);v&&(g.isDirectory=v.isDirectory)}),s("file",S)},w=()=>{n.value||(p.value=!0)},c=_=>{_.currentTarget.contains(_.relatedTarget)||(p.value=!1)};return(_,S)=>(k(),U("div",{class:P([t(u).b("dragger"),t(u).is("dragover",p.value)]),onDrop:K(d,["prevent"]),onDragover:K(w,["prevent"]),onDragleave:K(c,["prevent"])},[T(_.$slots,"default")],42,["onDrop","onDragover","onDragleave"]))}});var Nt=J(Mt,[["__file","upload-dragger.vue"]]);const Ot=G({...qe,beforeUpload:{type:C(Function),default:R},onRemove:{type:C(Function),default:R},onStart:{type:C(Function),default:R},onSuccess:{type:C(Function),default:R},onProgress:{type:C(Function),default:R},onError:{type:C(Function),default:R},onExceed:{type:C(Function),default:R}}),Dt=L({name:"ElUploadContent",inheritAttrs:!1}),qt=L({...Dt,props:Ot,setup(r,{expose:s}){const o=r,u=W("upload"),p=Q(),n=re({}),d=re(),w=e=>{if(e.length===0)return;const{autoUpload:v,limit:f,fileList:b,multiple:i,onStart:E,onExceed:z}=o;if(f&&b.length+e.length>f){z(e,b);return}i||(e=e.slice(0,1));for(const O of e){const q=O;q.uid=ne(),E(q),v&&c(q)}},c=async e=>{if(d.value.value="",!o.beforeUpload)return S(e);let v,f={};try{const i=o.data,E=o.beforeUpload(e);f=ve(o.data)?he(o.data):o.data,v=await E,ve(o.data)&&pt(i,f)&&(f=he(o.data))}catch{v=!1}if(v===!1){o.onRemove(e);return}let b=e;
6v instanceof Blob&&(v instanceof File?b=v:b=new File([v],e.name,{type:e.type})),S(Object.assign(b,{uid:e.uid}),f)},_=async(e,v)=>Ue(e)?e(v):e,S=async(e,v)=>{const{headers:f,data:b,method:i,withCredentials:E,name:z,action:O,onProgress:q,onSuccess:ze,onError:Ae,httpRequest:Ie}=o;try{v=await _(v??b,e)}catch{o.onRemove(e);return}const{uid:ae}=e,se={headers:f||{},withCredentials:E,file:e,data:v,method:i,filename:z,action:O,onProgress:j=>{q(j,e)},onSuccess:j=>{ze(j,e),delete n.value[ae]},onError:j=>{Ae(j,e),delete n.value[ae]}},oe=Ie(se);n.value[ae]=oe,oe instanceof Promise&&oe.then(se.onSuccess,se.onError)},h=e=>{const v=e.target.files;v&&w(Array.from(v))},g=()=>{p.value||(d.value.value="",d.value.click())},a=()=>{g()};return s({abort:e=>{Ye(n.value).filter(e?([f])=>String(e.uid)===f:()=>!0).forEach(([f,b])=>{b instanceof XMLHttpRequest&&b.abort(),delete n.value[f]})},upload:c}),(e,v)=>(k(),U("div",{class:P([t(u).b(),t(u).m(e.listType),t(u).is("drag",e.drag),t(u).is("disabled",t(p))]),tabindex:t(p)?"-1":"0",onClick:g,onKeydown:Le(K(a,["self"]),["enter","space"])},[e.drag?(k(),M(Nt,{key:0,disabled:t(p),onFile:w},{default:y(()=>[T(e.$slots,"default")]),_:3},8,["disabled"])):T(e.$slots,"default",{key:1}),$("input",{ref_key:"inputRef",ref:d,class:P(t(u).e("input")),name:e.name,disabled:t(p),multiple:e.multiple,accept:e.accept,type:"file",onChange:h,onClick:K(()=>{},["stop"])},null,42,["name","disabled","multiple","accept","onClick"])],42,["tabindex","onKeydown"]))}});var ke=J(qt,[["__file","upload-content.vue"]]);const Ee="ElUpload",Pe=r=>{var s;(s=r.url)!=null&&s.startsWith("blob:")&&URL.revokeObjectURL(r.url)},Bt=(r,s)=>{const o=et(r,"fileList",void 0,{passive:!0}),u=a=>o.value.find(l=>l.uid===a.uid);function p(a){var l;(l=s.value)==null||l.abort(a)}function n(a=["ready","uploading","success","fail"]){o.value=o.value.filter(l=>!a.includes(l.status))}function d(a){o.value=o.value.filter(l=>l.uid!==a.uid)}const w=(a,l)=>{const e=u(l);e&&(console.error(a),e.status="fail",d(e),r.onError(a,e,o.value),r.onChange(e,o.value))},c=(a,l)=>{const e=u(l);e&&(r.onProgress(a,e,o.value),e.status="uploading",e.percentage=Math.round(a.percent))},_=(a,l)=>{const e=u(l);e&&(e.status="success",e.response=a,r.onSuccess(a,e,o.value),r.onChange(e,o.value))},S=a=>{Re(a.uid)&&(a.uid=ne());const l={name:a.name,percentage:0,status:"ready",size:a.size,raw:a,uid:a.uid};if(r.listType==="picture-card"||r.listType==="picture")try{l.url=URL.createObjectURL(a)}catch(e){We(Ee,e.message),r.onError(e,l,o.value)}o.value=[...o.value,l],r.onChange(l,o.value)},h=async a=>{const l=a instanceof File?u(a):a;l||ce(Ee,"file to be removed not found");const e=v=>{p(v),d(v),r.onRemove(v,o.value),Pe(v)};r.beforeRemove?await r.beforeRemove(l,o.value)!==!1&&e(l):e(l)};function g(){o.value.filter(({status:a})=>a==="ready").forEach(({raw:a})=>{var l;return a&&((l=s.value)==null?void 0:l.upload(a))})}return ge(()=>r.listType,a=>{a!=="picture-card"&&a!=="picture"||(o.value=o.value.map(l=>{const{raw:e,url:v}=l;if(!v&&e)try{l.url=URL.createObjectURL(e)}catch(f){r.onError(f,l,o.value)}return l}))}),ge(o,a=>{for(const l of a)l.uid||(l.uid=ne()),l.status||(l.status="success")},{immediate:!0,deep:!0}),{uploadFiles:o,abort:p,clearFiles:n,handleError:w,handleProgress:c,handleStart:S,handleSuccess:_,handleRemove:h,submit:g,revokeFileObjectURL:Pe}},zt=L({name:"ElUpload"}),At=L({...zt,props:Ct,setup(r,{expose:s}){const o=r,u=Q(),p=re(),{abort:n,submit:d,clearFiles:w,uploadFiles:c,handleStart:_,handleError:S,handleRemove:h,handleSuccess:g,handleProgress:a,revokeFileObjectURL:l}=Bt(o,p),e=F(()=>o.listType==="picture-card"),v=F(()=>({...o,fileList:c.value,onStart:_,onProgress:a,onSuccess:g,onError:S,onRemove:h}));return nt(()=>{c.value.forEach(l)}),it(Oe,{accept:ut(o,"accept")}),s({abort:n,submit:d,clearFiles:w,handleStart:_,handleRemove:h}),(f,b)=>(k(),U("div",null,[t(e)&&f.showFileList?(k(),M(_e,{key:0,disabled:t(u),"list-type":f.listType,files:t(c),crossorigin:f.crossorigin,"handle-preview":f.onPreview,onRemove:t(h)},ye({append:y(()=>[m(ke,we({ref_key:"uploadRef",ref:p},t(v)),{default:y(()=>[f.$slots.trigger?T(f.$slots,"trigger",{key:0}):V("v-if",!0),!f.$slots.trigger&&f.$slots.default?T(f.$slots,"default",{key:1}):V("v-if",!0)]),_:3},16)]),_:2},[f.$slots.file?{name:"default",fn:y(({file:i,index:E})=>[T(f.$slots,"file",{file:i,index:E})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):V("v-if",!0),!t(e)||t(e)&&!f.showFileList?(k(),M(ke,we({key:1,ref_key:"uploadRef",ref:p},t(v)),{default:y(()=>[f.$slots.trigger?T(f.$slots,"trigger",{key:0}):V("v-if",!0),!f.$slots.trigger&&f.$slots.default?T(f.$slots,"default",{key:1}):V("v-if",!0)]),_:3},16)):V("v-if",!0),f.$slots.trigger?T(f.$slots,"default",{key:2}):V("v-if",!0),T(f.$slots,"tip"),!t(e)&&f.showFileList?(k(),M(_e,{key:3,disabled:t(u),"list-type":f.listType,files:t(c),crossorigin:f.crossorigin,"handle-preview":f.onPreview,onRemove:t(h)},ye({_:2},[f.$slots.file?{name:"default",fn:y(({file:i,index:E})=>[T(f.$slots,"file",{file:i,index:E})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):V("v-if",!0)]))}});var It=J(At,[["__file","upload.vue"]]);const jt=Ve(It),Wt={class:"image flex items-center gap-20 mb-16"},Kt={class:"upload-container"},Ht="https://linda-img.nyc3.cdn.digitaloceanspaces.com/production/images/account/no-avatar.png",Gt=L({__name:"ProfileImageUpload",setup(r){const s=ee(),{$api:o}=X(),u=N(!1),p=N(!1),n=async w=>{const{file:c}=w,_=new FormData;_.append("file",c),p.value=!0;try{await o("/user/avatar/",{method:"POST",body:_}),D.success("Profile picture updated successfully"),await s.fetchUser(),u.value=!1}
6catch(S){S.response?.status===413&&D.error("File is too large. Please choose a smaller image")}finally{p.value=!1}},d=w=>w.size>2097152?(D.error("File size should not exceed 2MB"),!1):!0;return(w,c)=>{const _=at,S=A,h=jt,g=Z;return k(),U(Y,null,[$("div",Wt,[m(_,{size:64,src:t(s).user?.avatar_url||Ht,fit:"cover"},null,8,["src"]),$("div",{class:"change",onClick:c[0]||(c[0]=a=>u.value=!0)},"Change Profile Picture")]),m(g,{modelValue:u.value,"onUpdate:modelValue":c[1]||(c[1]=a=>u.value=a),title:"Upload Profile Picture",width:"400px"},{default:y(()=>[$("div",Kt,[m(h,{class:"upload-area",drag:"",action:"#","auto-upload":!0,"show-file-list":!1,"http-request":n,"before-upload":d,accept:"image/*"},{default:y(()=>[p.value?(k(),U(Y,{key:0},[m(S,{class:"el-icon--upload mt-30 mb-30",style:{"font-size":"30px"}},{default:y(()=>[m(t(Qe))]),_:1}),c[2]||(c[2]=$("div",{class:"el-upload__text"}," Uploading... ",-1))],64)):(k(),U(Y,{key:1},[c[3]||(c[3]=$("div",{class:"el-upload__text mt-30 mb-10"},[B(" Drop file here or "),$("em",null,"click to upload")],-1)),c[4]||(c[4]=$("div",{class:"hint mt-4 text-gray-500 text-sm"},[B(" Supported formats: JPG, PNG "),$("br"),B(" Maximum file size: 2MB ")],-1))],64))]),_:1})])]),_:1},8,["modelValue"])],64)}}}),Xt=Object.assign(Te(Gt,[["__scopeId","data-v-a9aebb8c"]]),{__name:"AccountProfileImageUpload"}),xt={class:"mb-4"},Jt=L({__name:"ChangeEmailModal",props:Me({email:{}},{modelValue:{default:!1},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const{$api:s}=X(),o=te(r,"modelValue"),u=N(!1),p=async()=>{try{u.value=!0,await s("/user/email/change/send/",{method:"POST"}),o.value=!1,D.success("Successfully")}catch(n){D.error(n?.response?.data?.detail||"Something went wrong")}finally{u.value=!1}};return(n,d)=>{const w=x,c=Z;return k(),M(c,{modelValue:o.value,"onUpdate:modelValue":d[0]||(d[0]=_=>o.value=_),title:"Change your email address",style:{width:"100%","max-width":"600px"},"close-on-click-modal":!1},{footer:y(()=>[m(w,{type:"warning",size:"large",class:"w-full",onClick:p,loading:u.value},{default:y(()=>[...d[3]||(d[3]=[B(" Send request ",-1)])]),_:1},8,["loading"])]),default:y(()=>[$("p",xt,[d[1]||(d[1]=B(" We will send you an email to ",-1)),$("strong",null,H(n.email),1),d[2]||(d[2]=B(" to confirm your request for a change. Please click the link in the email to proceed. ",-1))])]),_:1},8,["modelValue"])}}}),Zt=Object.assign(Jt,{__name:"ProfileChangeEmailModal"}),Yt=L({__name:"NewEmailModal",props:{modelValue:{default:!1},modelModifiers:{}},emits:["update:modelValue"],setup(r){const s=te(r,"modelValue"),o=fe(),u=Ne(),p=ee(),{$api:n}=X(),d=N(),w=N(!1),c=pe({email:"",confirmEmail:""}),S={email:[{required:!0,message:"Please input email",trigger:"blur"},{type:"email",message:"Please input correct email",trigger:"blur"}],confirmEmail:[{required:!0,validator:(g,a,l)=>{a===""?l(new Error("Please confirm your email")):a!==c.email?l(new Error("Emails do not match")):l()},trigger:["blur","change"]}]},h=async()=>{d.value&&await d.value.validate(async g=>{if(g)try{w.value=!0,await n("/user/email/change/",{method:"POST",body:{email:c.email,change_email_token:o.query.email}}),p.fetchUser(),s.value=!1,D.success("Successfully"),u.replace({query:{}})}catch(a){D.error(a?.response?.data?.detail||"Something went wrong")}finally{w.value=!1}})};return(g,a)=>{const l=ie,e=ue,v=de,f=x,b=Z;return k(),M(b,{modelValue:s.value,"onUpdate:modelValue":a[2]||(a[2]=i=>s.value=i),title:"Change your email address.",style:{width:"100%","max-width":"600px"},"close-on-click-modal":!1},{footer:y(()=>[m(f,{type:"warning",size:"large",class:"w-full",loading:w.value,onClick:h},{default:y(()=>[...a[3]||(a[3]=[B(" Save ",-1)])]),_:1},8,["loading"])]),default:y(()=>[a[4]||(a[4]=$("div",{class:"mb-20"},"Enter a new email for your Linda account.",-1)),m(v,{ref_key:"formRef",ref:d,model:c,rules:S,"label-position":"top","hide-required-asterisk":"",size:"large"},{default:y(()=>[m(e,{label:"New Email",prop:"email"},{default:y(()=>[m(l,{modelValue:c.email,"onUpdate:modelValue":a[0]||(a[0]=i=>c.email=i),placeholder:"Email"},null,8,["modelValue"])]),_:1}),m(e,{label:"Confirm New Email",prop:"confirmEmail"},{default:y(()=>[m(l,{modelValue:c.confirmEmail,"onUpdate:modelValue":a[1]||(a[1]=i=>c.confirmEmail=i),placeholder:"Email"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])}}}),Qt=Object.assign(Yt,{__name:"ProfileNewEmailModal"}),ea={class:"mb-4"},ta=L({__name:"ChangePasswordModal",props:Me({email:{}},{modelValue:{default:!1},modelModifiers:{}}),emits:["update:modelValue"],setup(r){const{$api:s}=X(),o=te(r,"modelValue"),u=N(!1),p=async()=>{try{u.value=!0,await s("/user/password/change/send/",{method:"POST"}),o.value=!1,D.success("Successfully")}catch(n){D.error(n?.response?.data?.detail||"Something went wrong")}finally{u.value=!1}};return(n,d)=>{const w=x,c=Z;
6return k(),M(c,{modelValue:o.value,"onUpdate:modelValue":d[0]||(d[0]=_=>o.value=_),title:"Change your password",style:{width:"100%","max-width":"600px"},"close-on-click-modal":!1},{footer:y(()=>[m(w,{type:"warning",size:"large",class:"w-full",onClick:p,loading:u.value},{default:y(()=>[...d[3]||(d[3]=[B(" Send request ",-1)])]),_:1},8,["loading"])]),default:y(()=>[$("p",ea,[d[1]||(d[1]=B(" We will send you an email to ",-1)),$("strong",null,H(n.email),1),d[2]||(d[2]=B(" to confirm your request for a password change. Please click the link in the email to proceed. ",-1))])]),_:1},8,["modelValue"])}}}),aa=Object.assign(ta,{__name:"ProfileChangePasswordModal"}),sa=L({__name:"NewPasswordModal",props:{modelValue:{default:!1},modelModifiers:{}},emits:["update:modelValue"],setup(r){const s=te(r,"modelValue"),o=fe(),u=Ne(),p=ee(),{$api:n}=X(),d=N(),w=N(!1),c=pe({password:"",confirmPassword:""}),h={password:[{required:!0,message:"Please input password",trigger:"blur"},{min:6,message:"Password must be at least 6 characters",trigger:"blur"},{validator:(a,l,e)=>{if(l==="")e(new Error("Please input the password"));else if(!/[A-Z]/.test(l))e(new Error("Password must have at least one uppercase letter"));else{if(c.confirmPassword!==""){if(!d.value)return;d.value.validateField("confirmPassword")}e()}},trigger:["blur","change"]}],confirmPassword:[{required:!0,validator:(a,l,e)=>{l===""?e(new Error("Please confirm your password")):l!==c.password?e(new Error("Passwords do not match")):e()},trigger:["blur","change"]}]},g=async()=>{d.value&&await d.value.validate(async a=>{if(a)try{w.value=!0,await n("/user/password/change/",{method:"POST",body:{password:c.password,change_password_token:o.query.password}}),p.fetchUser(),s.value=!1,D.success("Successfully"),u.replace({query:{}})}catch(l){D.error(l?.response?.data?.detail||"Something went wrong")}finally{w.value=!1}})};return(a,l)=>{const e=ie,v=ue,f=de,b=x,i=Z;return k(),M(i,{modelValue:s.value,"onUpdate:modelValue":l[2]||(l[2]=E=>s.value=E),title:"Change your password.",style:{width:"100%","max-width":"600px"},"close-on-click-modal":!1},{footer:y(()=>[m(b,{type:"warning",size:"large",class:"w-full",loading:w.value,onClick:g},{default:y(()=>[...l[3]||(l[3]=[B("Save",-1)])]),_:1},8,["loading"])]),default:y(()=>[l[4]||(l[4]=$("div",{class:"mb-20"},"Enter a new password for your Linda account.",-1)),m(f,{ref_key:"formRef",ref:d,model:c,rules:h,"label-position":"top","hide-required-asterisk":"",size:"large"},{default:y(()=>[m(v,{label:"New Password",prop:"password"},{default:y(()=>[m(e,{modelValue:c.password,"onUpdate:modelValue":l[0]||(l[0]=E=>c.password=E),type:"password",placeholder:"Password"},null,8,["modelValue"])]),_:1}),m(v,{label:"Confirm New Password",prop:"confirmPassword"},{default:y(()=>[m(e,{modelValue:c.confirmPassword,"onUpdate:modelValue":l[1]||(l[1]=E=>c.confirmPassword=E),type:"password",placeholder:"Password"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])}}}),oa=Object.assign(sa,{__name:"ProfileNewPasswordModal"}),la={class:"profile-page"},ra={class:"actions"},na=L({__name:"profile",setup(r){const s=ee(),o=fe(),{$api:u}=X(),p=N(!1),n=pe({email:"",first_name:"",last_name:"",password:"password"}),d=N(!1),w=N(!1),c=N(!1),_=N(!1),S=tt(async()=>{if(!n.first_name||!n.last_name){D.error("First name and last name are required");return}p.value=!0,await u("/user/",{method:"PUT",body:{first_name:n.first_name,last_name:n.last_name}}),p.value=!1,D.success("Profile updated successfully"),await s.fetchUser()},()=>{p.value=!1});return dt(()=>{n.email=s.user?.email||"",n.first_name=s.user?.first_name||"",n.last_name=s.user?.last_name||""}),ct(()=>{o.query.email?w.value=!0:o.query.password&&(_.value=!0)}),(h,g)=>{const a=ie,l=ue,e=x,v=de,f=Ke;return k(),U("div",la,[m(ft,{title:"My Profile"},{default:y(()=>[g[11]||(g[11]=$("div",{class:"description"}," Save your favorite products to WatchList. We'll track price changes and notify you when the price drops. ",-1)),m(f,{shadow:"never",class:"custom"},{default:y(()=>[m(Xt),m(v,{model:n,"label-position":"top",style:{"max-width":"400px"}},{default:y(()=>[m(l,{label:"First Name"},{default:y(()=>[m(a,{modelValue:n.first_name,"onUpdate:modelValue":g[0]||(g[0]=b=>n.first_name=b),size:"large",placeholder:"First Name"},null,8,["modelValue"])]),_:1}),m(l,{label:"Last Name"},{default:y(()=>[m(a,{modelValue:n.last_name,"onUpdate:modelValue":g[1]||(g[1]=b=>n.last_name=b),size:"large",placeholder:"Last Name"},null,8,["modelValue"])]),_:1}),m(l,{label:"Email"},{default:y(()=>[m(a,{modelValue:n.email,"onUpdate:modelValue":g[2]||(g[2]=b=>n.email=b),size:"large",placeholder:"Email",disabled:""},null,8,["modelValue"])]),_:1}),m(l,{label:"Password"},{default:y(()=>[m(a,{modelValue:n.password,"onUpdate:modelValue":g[3]||(g[3]=b=>n.password=b),type:"password",size:"large",disabled:""},null,8,["modelValue"])]),_:1}),$("div",ra,[$("div",{class:"pointer",onClick:g[4]||(g[4]=b=>d.value=!0)},"Change email"),$("div",{class:"pointer",onClick:g[5]||(g[5]=b=>c.value=!0)},"Change Password")]),m(l,null,{default:y(()=>[m(e,{type:"warning",size:"large",loading:p.value,onClick:t(S)},{default:y(()=>[...g[10]||(g[10]=[B(" Save Changes ",-1)])]),_:1},8,["loading","onClick"])]),_:1})]),_:1},8,["model"])]),_:1})]),_:1}),m(Zt,{modelValue:d.value,"onUpdate:modelValue":g[6]||(g[6]=b=>d.value=b),email:n.email},null,8,["modelValue","email"]),m(Qt,{modelValue:w.value,"onUpdate:modelValue":g[7]||(g[7]=b=>w.value=b)},null,8,["modelValue"]),m(aa,{modelValue:c.value,"onUpdate:modelValue":g[8]||(g[8]=b=>c.value=b),email:n.email},null,8,["modelValue","email"]),m(oa,{modelValue:_.value,"onUpdate:modelValue":g[9]||(g[9]=b=>_.value=b)},null,8,["modelValue"])])}}}),$a=Te(na,[["__scopeId","data-v-e5a1005c"]]);export{$a as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.