diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..f650315 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,27 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules + +# next.js +/.next/ +/out/ + +# production +/build + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts \ No newline at end of file diff --git a/frontend/dist/assets/index-BoaPXc3b.js b/frontend/dist/assets/index-BoaPXc3b.js new file mode 100644 index 0000000..36cadaa --- /dev/null +++ b/frontend/dist/assets/index-BoaPXc3b.js @@ -0,0 +1,18 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))n(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"&&n(o)}).observe(document,{childList:!0,subtree:!0});function s(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 n(r){if(r.ep)return;r.ep=!0;const i=s(r);fetch(r.href,i)}})();/** +* @vue/shared v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Ds(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const j={},tt=[],Te=()=>{},Wr=()=>!1,kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ls=e=>e.startsWith("onUpdate:"),se=Object.assign,Hs=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},qr=Object.prototype.hasOwnProperty,D=(e,t)=>qr.call(e,t),A=Array.isArray,st=e=>es(e)==="[object Map]",Dn=e=>es(e)==="[object Set]",P=e=>typeof e=="function",G=e=>typeof e=="string",Ve=e=>typeof e=="symbol",B=e=>e!==null&&typeof e=="object",Ln=e=>(B(e)||P(e))&&P(e.then)&&P(e.catch),Hn=Object.prototype.toString,es=e=>Hn.call(e),Gr=e=>es(e).slice(8,-1),jn=e=>es(e)==="[object Object]",js=e=>G(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,gt=Ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ts=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Jr=/-(\w)/g,Ne=ts(e=>e.replace(Jr,(t,s)=>s?s.toUpperCase():"")),Yr=/\B([A-Z])/g,Be=ts(e=>e.replace(Yr,"-$1").toLowerCase()),Nn=ts(e=>e.charAt(0).toUpperCase()+e.slice(1)),as=ts(e=>e?`on${Nn(e)}`:""),je=(e,t)=>!Object.is(e,t),Kt=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},Cs=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let rn;const ss=()=>rn||(rn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ns(e){if(A(e)){const t={};for(let s=0;s{if(s){const n=s.split(Xr);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Ot(e){let t="";if(G(e))t=e;else if(A(e))for(let s=0;s!!(e&&e.__v_isRef===!0),qt=e=>G(e)?e:e==null?"":A(e)||B(e)&&(e.toString===Hn||!P(e.toString))?Un(e)?qt(e.value):JSON.stringify(e,Vn,2):String(e),Vn=(e,t)=>Un(t)?Vn(e,t.value):st(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,r],i)=>(s[ds(n,i)+" =>"]=r,s),{})}:Dn(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>ds(s))}:Ve(t)?ds(t):B(t)&&!A(t)&&!jn(t)?String(t):t,ds=(e,t="")=>{var s;return Ve(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** +* @vue/reactivity v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ie;class ti{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=ie,!t&&ie&&(this.index=(ie.scopes||(ie.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(ie=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(_t){let t=_t;for(_t=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;mt;){let t=mt;for(mt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function Gn(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Jn(e){let t,s=e.depsTail,n=s;for(;n;){const r=n.prevDep;n.version===-1?(n===s&&(s=r),Vs(n),ni(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=r}e.deps=t,e.depsTail=s}function Ts(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Yn(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Yn(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===wt)||(e.globalVersion=wt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ts(e))))return;e.flags|=2;const t=e.dep,s=U,n=ge;U=e,ge=!0;try{Gn(e);const r=e.fn(e._value);(t.version===0||je(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{U=s,ge=n,Jn(e),e.flags&=-3}}function Vs(e,t=!1){const{dep:s,prevSub:n,nextSub:r}=e;if(n&&(n.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)Vs(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function ni(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let ge=!0;const zn=[];function Ie(){zn.push(ge),ge=!1}function Re(){const e=zn.pop();ge=e===void 0?!0:e}function on(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=U;U=void 0;try{t()}finally{U=s}}}let wt=0;class ri{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!U||!ge||U===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==U)s=this.activeLink=new ri(U,this),U.deps?(s.prevDep=U.depsTail,U.depsTail.nextDep=s,U.depsTail=s):U.deps=U.depsTail=s,Xn(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=U.depsTail,s.nextDep=void 0,U.depsTail.nextDep=s,U.depsTail=s,U.deps===s&&(U.deps=n)}return s}trigger(t){this.version++,wt++,this.notify(t)}notify(t){Ks();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Us()}}}function Xn(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Xn(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Es=new WeakMap,Xe=Symbol(""),Os=Symbol(""),St=Symbol("");function X(e,t,s){if(ge&&U){let n=Es.get(e);n||Es.set(e,n=new Map);let r=n.get(s);r||(n.set(s,r=new Bs),r.map=n,r.key=s),r.track()}}function Ae(e,t,s,n,r,i){const o=Es.get(e);if(!o){wt++;return}const l=f=>{f&&f.trigger()};if(Ks(),t==="clear")o.forEach(l);else{const f=A(e),h=f&&js(s);if(f&&s==="length"){const a=Number(n);o.forEach((p,S)=>{(S==="length"||S===St||!Ve(S)&&S>=a)&&l(p)})}else switch((s!==void 0||o.has(void 0))&&l(o.get(s)),h&&l(o.get(St)),t){case"add":f?h&&l(o.get("length")):(l(o.get(Xe)),st(e)&&l(o.get(Os)));break;case"delete":f||(l(o.get(Xe)),st(e)&&l(o.get(Os)));break;case"set":st(e)&&l(o.get(Xe));break}}Us()}function Ze(e){const t=$(e);return t===e?t:(X(t,"iterate",St),pe(e)?t:t.map(Y))}function ns(e){return X(e=$(e),"iterate",St),e}const ii={__proto__:null,[Symbol.iterator](){return ps(this,Symbol.iterator,Y)},concat(...e){return Ze(this).concat(...e.map(t=>A(t)?Ze(t):t))},entries(){return ps(this,"entries",e=>(e[1]=Y(e[1]),e))},every(e,t){return Oe(this,"every",e,t,void 0,arguments)},filter(e,t){return Oe(this,"filter",e,t,s=>s.map(Y),arguments)},find(e,t){return Oe(this,"find",e,t,Y,arguments)},findIndex(e,t){return Oe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Oe(this,"findLast",e,t,Y,arguments)},findLastIndex(e,t){return Oe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Oe(this,"forEach",e,t,void 0,arguments)},includes(...e){return gs(this,"includes",e)},indexOf(...e){return gs(this,"indexOf",e)},join(e){return Ze(this).join(e)},lastIndexOf(...e){return gs(this,"lastIndexOf",e)},map(e,t){return Oe(this,"map",e,t,void 0,arguments)},pop(){return at(this,"pop")},push(...e){return at(this,"push",e)},reduce(e,...t){return ln(this,"reduce",e,t)},reduceRight(e,...t){return ln(this,"reduceRight",e,t)},shift(){return at(this,"shift")},some(e,t){return Oe(this,"some",e,t,void 0,arguments)},splice(...e){return at(this,"splice",e)},toReversed(){return Ze(this).toReversed()},toSorted(e){return Ze(this).toSorted(e)},toSpliced(...e){return Ze(this).toSpliced(...e)},unshift(...e){return at(this,"unshift",e)},values(){return ps(this,"values",Y)}};function ps(e,t,s){const n=ns(e),r=n[t]();return n!==e&&!pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=s(i.value)),i}),r}const oi=Array.prototype;function Oe(e,t,s,n,r,i){const o=ns(e),l=o!==e&&!pe(e),f=o[t];if(f!==oi[t]){const p=f.apply(e,i);return l?Y(p):p}let h=s;o!==e&&(l?h=function(p,S){return s.call(this,Y(p),S,e)}:s.length>2&&(h=function(p,S){return s.call(this,p,S,e)}));const a=f.call(o,h,n);return l&&r?r(a):a}function ln(e,t,s,n){const r=ns(e);let i=s;return r!==e&&(pe(e)?s.length>3&&(i=function(o,l,f){return s.call(this,o,l,f,e)}):i=function(o,l,f){return s.call(this,o,Y(l),f,e)}),r[t](i,...n)}function gs(e,t,s){const n=$(e);X(n,"iterate",St);const r=n[t](...s);return(r===-1||r===!1)&&Js(s[0])?(s[0]=$(s[0]),n[t](...s)):r}function at(e,t,s=[]){Ie(),Ks();const n=$(e)[t].apply(e,s);return Us(),Re(),n}const li=Ds("__proto__,__v_isRef,__isVue"),Zn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ve));function ci(e){Ve(e)||(e=String(e));const t=$(this);return X(t,"has",e),t.hasOwnProperty(e)}class Qn{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!r;if(s==="__v_isReadonly")return r;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(r?i?bi:sr:i?tr:er).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const o=A(t);if(!r){let f;if(o&&(f=ii[s]))return f;if(s==="hasOwnProperty")return ci}const l=Reflect.get(t,s,Z(t)?t:n);return(Ve(s)?Zn.has(s):li(s))||(r||X(t,"get",s),i)?l:Z(l)?o&&js(s)?l:l.value:B(l)?r?nr(l):qs(l):l}}class kn extends Qn{constructor(t=!1){super(!1,t)}set(t,s,n,r){let i=t[s];if(!this._isShallow){const f=Ke(i);if(!pe(n)&&!Ke(n)&&(i=$(i),n=$(n)),!A(t)&&Z(i)&&!Z(n))return f?!1:(i.value=n,!0)}const o=A(t)&&js(s)?Number(s)e,Lt=e=>Reflect.getPrototypeOf(e);function hi(e,t,s){return function(...n){const r=this.__v_raw,i=$(r),o=st(i),l=e==="entries"||e===Symbol.iterator&&o,f=e==="keys"&&o,h=r[e](...n),a=s?Ms:t?Gt:Y;return!t&&X(i,"iterate",f?Os:Xe),{next(){const{value:p,done:S}=h.next();return S?{value:p,done:S}:{value:l?[a(p[0]),a(p[1])]:a(p),done:S}},[Symbol.iterator](){return this}}}}function Ht(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function pi(e,t){const s={get(r){const i=this.__v_raw,o=$(i),l=$(r);e||(je(r,l)&&X(o,"get",r),X(o,"get",l));const{has:f}=Lt(o),h=t?Ms:e?Gt:Y;if(f.call(o,r))return h(i.get(r));if(f.call(o,l))return h(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&X($(r),"iterate",Xe),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=$(i),l=$(r);return e||(je(r,l)&&X(o,"has",r),X(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,f=$(l),h=t?Ms:e?Gt:Y;return!e&&X(f,"iterate",Xe),l.forEach((a,p)=>r.call(i,h(a),h(p),o))}};return se(s,e?{add:Ht("add"),set:Ht("set"),delete:Ht("delete"),clear:Ht("clear")}:{add(r){!t&&!pe(r)&&!Ke(r)&&(r=$(r));const i=$(this);return Lt(i).has.call(i,r)||(i.add(r),Ae(i,"add",r,r)),this},set(r,i){!t&&!pe(i)&&!Ke(i)&&(i=$(i));const o=$(this),{has:l,get:f}=Lt(o);let h=l.call(o,r);h||(r=$(r),h=l.call(o,r));const a=f.call(o,r);return o.set(r,i),h?je(i,a)&&Ae(o,"set",r,i):Ae(o,"add",r,i),this},delete(r){const i=$(this),{has:o,get:l}=Lt(i);let f=o.call(i,r);f||(r=$(r),f=o.call(i,r)),l&&l.call(i,r);const h=i.delete(r);return f&&Ae(i,"delete",r,void 0),h},clear(){const r=$(this),i=r.size!==0,o=r.clear();return i&&Ae(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{s[r]=hi(r,e,t)}),s}function Ws(e,t){const s=pi(e,t);return(n,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?n:Reflect.get(D(s,r)&&r in n?s:n,r,i)}const gi={get:Ws(!1,!1)},mi={get:Ws(!1,!0)},_i={get:Ws(!0,!1)};const er=new WeakMap,tr=new WeakMap,sr=new WeakMap,bi=new WeakMap;function yi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function vi(e){return e.__v_skip||!Object.isExtensible(e)?0:yi(Gr(e))}function qs(e){return Ke(e)?e:Gs(e,!1,ui,gi,er)}function xi(e){return Gs(e,!1,di,mi,tr)}function nr(e){return Gs(e,!0,ai,_i,sr)}function Gs(e,t,s,n,r){if(!B(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=vi(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?n:s);return r.set(e,l),l}function nt(e){return Ke(e)?nt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ke(e){return!!(e&&e.__v_isReadonly)}function pe(e){return!!(e&&e.__v_isShallow)}function Js(e){return e?!!e.__v_raw:!1}function $(e){const t=e&&e.__v_raw;return t?$(t):e}function wi(e){return!D(e,"__v_skip")&&Object.isExtensible(e)&&Ss(e,"__v_skip",!0),e}const Y=e=>B(e)?qs(e):e,Gt=e=>B(e)?nr(e):e;function Z(e){return e?e.__v_isRef===!0:!1}function et(e){return Si(e,!1)}function Si(e,t){return Z(e)?e:new Ci(e,t)}class Ci{constructor(t,s){this.dep=new Bs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:$(t),this._value=s?t:Y(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||pe(t)||Ke(t);t=n?t:$(t),je(t,s)&&(this._rawValue=t,this._value=n?t:Y(t),this.dep.trigger())}}function Ti(e){return Z(e)?e.value:e}const Ei={get:(e,t,s)=>t==="__v_raw"?e:Ti(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const r=e[t];return Z(r)&&!Z(s)?(r.value=s,!0):Reflect.set(e,t,s,n)}};function rr(e){return nt(e)?e:new Proxy(e,Ei)}class Oi{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Bs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=wt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&U!==this)return qn(this,!0),!0}get value(){const t=this.dep.track();return Yn(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Mi(e,t,s=!1){let n,r;return P(e)?n=e:(n=e.get,r=e.set),new Oi(n,r,s)}const jt={},Jt=new WeakMap;let ze;function Ai(e,t=!1,s=ze){if(s){let n=Jt.get(s);n||Jt.set(s,n=[]),n.push(e)}}function Pi(e,t,s=j){const{immediate:n,deep:r,once:i,scheduler:o,augmentJob:l,call:f}=s,h=O=>r?O:pe(O)||r===!1||r===0?Pe(O,1):Pe(O);let a,p,S,C,F=!1,R=!1;if(Z(e)?(p=()=>e.value,F=pe(e)):nt(e)?(p=()=>h(e),F=!0):A(e)?(R=!0,F=e.some(O=>nt(O)||pe(O)),p=()=>e.map(O=>{if(Z(O))return O.value;if(nt(O))return h(O);if(P(O))return f?f(O,2):O()})):P(e)?t?p=f?()=>f(e,2):e:p=()=>{if(S){Ie();try{S()}finally{Re()}}const O=ze;ze=a;try{return f?f(e,3,[C]):e(C)}finally{ze=O}}:p=Te,t&&r){const O=p,J=r===!0?1/0:r;p=()=>Pe(O(),J)}const z=si(),H=()=>{a.stop(),z&&z.active&&Hs(z.effects,a)};if(i&&t){const O=t;t=(...J)=>{O(...J),H()}}let W=R?new Array(e.length).fill(jt):jt;const q=O=>{if(!(!(a.flags&1)||!a.dirty&&!O))if(t){const J=a.run();if(r||F||(R?J.some(($e,_e)=>je($e,W[_e])):je(J,W))){S&&S();const $e=ze;ze=a;try{const _e=[J,W===jt?void 0:R&&W[0]===jt?[]:W,C];W=J,f?f(t,3,_e):t(..._e)}finally{ze=$e}}}else a.run()};return l&&l(q),a=new Bn(p),a.scheduler=o?()=>o(q,!1):q,C=O=>Ai(O,!1,a),S=a.onStop=()=>{const O=Jt.get(a);if(O){if(f)f(O,4);else for(const J of O)J();Jt.delete(a)}},t?n?q(!0):W=a.run():o?o(q.bind(null,!0),!0):a.run(),H.pause=a.pause.bind(a),H.resume=a.resume.bind(a),H.stop=H,H}function Pe(e,t=1/0,s){if(t<=0||!B(e)||e.__v_skip||(s=s||new Set,s.has(e)))return e;if(s.add(e),t--,Z(e))Pe(e.value,t,s);else if(A(e))for(let n=0;n{Pe(n,t,s)});else if(jn(e)){for(const n in e)Pe(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&Pe(e[n],t,s)}return e}/** +* @vue/runtime-core v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Mt(e,t,s,n){try{return n?e(...n):e()}catch(r){rs(r,t,s)}}function Ee(e,t,s,n){if(P(e)){const r=Mt(e,t,s,n);return r&&Ln(r)&&r.catch(i=>{rs(i,t,s)}),r}if(A(e)){const r=[];for(let i=0;i>>1,r=ee[n],i=Ct(r);i=Ct(s)?ee.push(e):ee.splice(Ri(t),0,e),e.flags|=1,lr()}}function lr(){Yt||(Yt=ir.then(fr))}function Fi(e){A(e)?rt.push(...e):Le&&e.id===-1?Le.splice(Qe+1,0,e):e.flags&1||(rt.push(e),e.flags|=1),lr()}function cn(e,t,s=Se+1){for(;sCt(s)-Ct(n));if(rt.length=0,Le){Le.push(...t);return}for(Le=t,Qe=0;Qee.id==null?e.flags&2?-1:1/0:e.id;function fr(e){try{for(Se=0;Se{n._d&&_n(-1);const i=zt(t);let o;try{o=e(...r)}finally{zt(i),n._d&&_n(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function ar(e,t){if(he===null)return e;const s=cs(he),n=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport;function zs(e,t){e.shapeFlag&6&&e.component?(e.transition=t,zs(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function dr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function bt(e,t,s,n,r=!1){if(A(e)){e.forEach((F,R)=>bt(F,t&&(A(t)?t[R]:t),s,n,r));return}if(yt(n)&&!r){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&bt(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?cs(n.component):n.el,o=r?null:i,{i:l,r:f}=e,h=t&&t.r,a=l.refs===j?l.refs={}:l.refs,p=l.setupState,S=$(p),C=p===j?()=>!1:F=>D(S,F);if(h!=null&&h!==f&&(G(h)?(a[h]=null,C(h)&&(p[h]=null)):Z(h)&&(h.value=null)),P(f))Mt(f,l,12,[o,a]);else{const F=G(f),R=Z(f);if(F||R){const z=()=>{if(e.f){const H=F?C(f)?p[f]:a[f]:f.value;r?A(H)&&Hs(H,i):A(H)?H.includes(i)||H.push(i):F?(a[f]=[i],C(f)&&(p[f]=a[f])):(f.value=[i],e.k&&(a[e.k]=f.value))}else F?(a[f]=o,C(f)&&(p[f]=o)):R&&(f.value=o,e.k&&(a[e.k]=o))};o?(z.id=-1,ce(z,s)):z()}}}ss().requestIdleCallback;ss().cancelIdleCallback;const yt=e=>!!e.type.__asyncLoader,hr=e=>e.type.__isKeepAlive;function Hi(e,t){pr(e,"a",t)}function ji(e,t){pr(e,"da",t)}function pr(e,t,s=te){const n=e.__wdc||(e.__wdc=()=>{let r=s;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(is(t,n,s),s){let r=s.parent;for(;r&&r.parent;)hr(r.parent.vnode)&&Ni(n,t,s,r),r=r.parent}}function Ni(e,t,s,n){const r=is(t,e,n,!0);mr(()=>{Hs(n[t],r)},s)}function is(e,t,s=te,n=!1){if(s){const r=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ie();const l=At(s),f=Ee(t,s,e,o);return l(),Re(),f});return n?r.unshift(i):r.push(i),i}}const Fe=e=>(t,s=te)=>{(!Et||e==="sp")&&is(e,(...n)=>t(...n),s)},Ki=Fe("bm"),gr=Fe("m"),Ui=Fe("bu"),Vi=Fe("u"),Bi=Fe("bum"),mr=Fe("um"),Wi=Fe("sp"),qi=Fe("rtg"),Gi=Fe("rtc");function Ji(e,t=te){is("ec",e,t)}const Yi=Symbol.for("v-ndc");function _r(e,t,s,n){let r;const i=s,o=A(e);if(o||G(e)){const l=o&&nt(e);let f=!1,h=!1;l&&(f=!pe(e),h=Ke(e),e=ns(e)),r=new Array(e.length);for(let a=0,p=e.length;at(l,f,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let f=0,h=l.length;fe?jr(e)?cs(e):As(e.parent):null,vt=se(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=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>yr(e),$forceUpdate:e=>e.f||(e.f=()=>{Ys(e.update)}),$nextTick:e=>e.n||(e.n=or.bind(e.proxy)),$watch:e=>_o.bind(e)}),ms=(e,t)=>e!==j&&!e.__isScriptSetup&&D(e,t),zi={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:r,props:i,accessCache:o,type:l,appContext:f}=e;let h;if(t[0]!=="$"){const C=o[t];if(C!==void 0)switch(C){case 1:return n[t];case 2:return r[t];case 4:return s[t];case 3:return i[t]}else{if(ms(n,t))return o[t]=1,n[t];if(r!==j&&D(r,t))return o[t]=2,r[t];if((h=e.propsOptions[0])&&D(h,t))return o[t]=3,i[t];if(s!==j&&D(s,t))return o[t]=4,s[t];Ps&&(o[t]=0)}}const a=vt[t];let p,S;if(a)return t==="$attrs"&&X(e.attrs,"get",""),a(e);if((p=l.__cssModules)&&(p=p[t]))return p;if(s!==j&&D(s,t))return o[t]=4,s[t];if(S=f.config.globalProperties,D(S,t))return S[t]},set({_:e},t,s){const{data:n,setupState:r,ctx:i}=e;return ms(r,t)?(r[t]=s,!0):n!==j&&D(n,t)?(n[t]=s,!0):D(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:r,propsOptions:i}},o){let l;return!!s[o]||e!==j&&D(e,o)||ms(t,o)||(l=i[0])&&D(l,o)||D(n,o)||D(vt,o)||D(r.config.globalProperties,o)},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:D(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function fn(e){return A(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Ps=!0;function Xi(e){const t=yr(e),s=e.proxy,n=e.ctx;Ps=!1,t.beforeCreate&&un(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:f,inject:h,created:a,beforeMount:p,mounted:S,beforeUpdate:C,updated:F,activated:R,deactivated:z,beforeDestroy:H,beforeUnmount:W,destroyed:q,unmounted:O,render:J,renderTracked:$e,renderTriggered:_e,errorCaptured:De,serverPrefetch:It,expose:We,inheritAttrs:lt,components:Rt,directives:Ft,filters:fs}=t;if(h&&Zi(h,n,null),o)for(const V in o){const N=o[V];P(N)&&(n[V]=N.bind(s))}if(r){const V=r.call(s,s);B(V)&&(e.data=qs(V))}if(Ps=!0,i)for(const V in i){const N=i[V],qe=P(N)?N.bind(s,s):P(N.get)?N.get.bind(s,s):Te,$t=!P(N)&&P(N.set)?N.set.bind(s):Te,Ge=No({get:qe,set:$t});Object.defineProperty(n,V,{enumerable:!0,configurable:!0,get:()=>Ge.value,set:be=>Ge.value=be})}if(l)for(const V in l)br(l[V],n,s,V);if(f){const V=P(f)?f.call(s):f;Reflect.ownKeys(V).forEach(N=>{no(N,V[N])})}a&&un(a,e,"c");function Q(V,N){A(N)?N.forEach(qe=>V(qe.bind(s))):N&&V(N.bind(s))}if(Q(Ki,p),Q(gr,S),Q(Ui,C),Q(Vi,F),Q(Hi,R),Q(ji,z),Q(Ji,De),Q(Gi,$e),Q(qi,_e),Q(Bi,W),Q(mr,O),Q(Wi,It),A(We))if(We.length){const V=e.exposed||(e.exposed={});We.forEach(N=>{Object.defineProperty(V,N,{get:()=>s[N],set:qe=>s[N]=qe})})}else e.exposed||(e.exposed={});J&&e.render===Te&&(e.render=J),lt!=null&&(e.inheritAttrs=lt),Rt&&(e.components=Rt),Ft&&(e.directives=Ft),It&&dr(e)}function Zi(e,t,s=Te){A(e)&&(e=Is(e));for(const n in e){const r=e[n];let i;B(r)?"default"in r?i=Ut(r.from||n,r.default,!0):i=Ut(r.from||n):i=Ut(r),Z(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[n]=i}}function un(e,t,s){Ee(A(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function br(e,t,s,n){let r=n.includes(".")?Rr(s,n):()=>s[n];if(G(e)){const i=t[e];P(i)&&Vt(r,i)}else if(P(e))Vt(r,e.bind(s));else if(B(e))if(A(e))e.forEach(i=>br(i,t,s,n));else{const i=P(e.handler)?e.handler.bind(s):t[e.handler];P(i)&&Vt(r,i,e)}}function yr(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let f;return l?f=l:!r.length&&!s&&!n?f=t:(f={},r.length&&r.forEach(h=>Xt(f,h,o,!0)),Xt(f,t,o)),B(t)&&i.set(t,f),f}function Xt(e,t,s,n=!1){const{mixins:r,extends:i}=t;i&&Xt(e,i,s,!0),r&&r.forEach(o=>Xt(e,o,s,!0));for(const o in t)if(!(n&&o==="expose")){const l=Qi[o]||s&&s[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Qi={data:an,props:dn,emits:dn,methods:pt,computed:pt,beforeCreate:k,created:k,beforeMount:k,mounted:k,beforeUpdate:k,updated:k,beforeDestroy:k,beforeUnmount:k,destroyed:k,unmounted:k,activated:k,deactivated:k,errorCaptured:k,serverPrefetch:k,components:pt,directives:pt,watch:eo,provide:an,inject:ki};function an(e,t){return t?e?function(){return se(P(e)?e.call(this,this):e,P(t)?t.call(this,this):t)}:t:e}function ki(e,t){return pt(Is(e),Is(t))}function Is(e){if(A(e)){const t={};for(let s=0;s1)return s&&P(t)?t.call(n&&n.proxy):t}}const xr={},wr=()=>Object.create(xr),Sr=e=>Object.getPrototypeOf(e)===xr;function ro(e,t,s,n=!1){const r={},i=wr();e.propsDefaults=Object.create(null),Cr(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);s?e.props=n?r:xi(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function io(e,t,s,n){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=$(r),[f]=e.propsOptions;let h=!1;if((n||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let p=0;p{f=!0;const[S,C]=Tr(p,t,!0);se(o,S),C&&l.push(...C)};!s&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!f)return B(e)&&n.set(e,tt),tt;if(A(i))for(let a=0;ae[0]==="_"||e==="$stable",Zs=e=>A(e)?e.map(Ce):[Ce(e)],lo=(e,t,s)=>{if(t._n)return t;const n=$i((...r)=>Zs(t(...r)),s);return n._c=!1,n},Er=(e,t,s)=>{const n=e._ctx;for(const r in e){if(Xs(r))continue;const i=e[r];if(P(i))t[r]=lo(r,i,n);else if(i!=null){const o=Zs(i);t[r]=()=>o}}},Or=(e,t)=>{const s=Zs(t);e.slots.default=()=>s},Mr=(e,t,s)=>{for(const n in t)(s||!Xs(n))&&(e[n]=t[n])},co=(e,t,s)=>{const n=e.slots=wr();if(e.vnode.shapeFlag&32){const r=t.__;r&&Ss(n,"__",r,!0);const i=t._;i?(Mr(n,t,s),s&&Ss(n,"_",i,!0)):Er(t,n)}else t&&Or(e,t)},fo=(e,t,s)=>{const{vnode:n,slots:r}=e;let i=!0,o=j;if(n.shapeFlag&32){const l=t._;l?s&&l===1?i=!1:Mr(r,t,s):(i=!t.$stable,Er(t,r)),o=t}else t&&(Or(e,t),o={default:1});if(i)for(const l in r)!Xs(l)&&o[l]==null&&delete r[l]},ce=Co;function uo(e){return ao(e)}function ao(e,t){const s=ss();s.__VUE__=!0;const{insert:n,remove:r,patchProp:i,createElement:o,createText:l,createComment:f,setText:h,setElementText:a,parentNode:p,nextSibling:S,setScopeId:C=Te,insertStaticContent:F}=e,R=(c,u,d,_=null,g=null,m=null,x=void 0,v=null,y=!!u.dynamicChildren)=>{if(c===u)return;c&&!dt(c,u)&&(_=Dt(c),be(c,g,m,!0),c=null),u.patchFlag===-2&&(y=!1,u.dynamicChildren=null);const{type:b,ref:E,shapeFlag:w}=u;switch(b){case ls:z(c,u,d,_);break;case Ue:H(c,u,d,_);break;case bs:c==null&&W(u,d,_,x);break;case ae:Rt(c,u,d,_,g,m,x,v,y);break;default:w&1?J(c,u,d,_,g,m,x,v,y):w&6?Ft(c,u,d,_,g,m,x,v,y):(w&64||w&128)&&b.process(c,u,d,_,g,m,x,v,y,ft)}E!=null&&g?bt(E,c&&c.ref,m,u||c,!u):E==null&&c&&c.ref!=null&&bt(c.ref,null,m,c,!0)},z=(c,u,d,_)=>{if(c==null)n(u.el=l(u.children),d,_);else{const g=u.el=c.el;u.children!==c.children&&h(g,u.children)}},H=(c,u,d,_)=>{c==null?n(u.el=f(u.children||""),d,_):u.el=c.el},W=(c,u,d,_)=>{[c.el,c.anchor]=F(c.children,u,d,_,c.el,c.anchor)},q=({el:c,anchor:u},d,_)=>{let g;for(;c&&c!==u;)g=S(c),n(c,d,_),c=g;n(u,d,_)},O=({el:c,anchor:u})=>{let d;for(;c&&c!==u;)d=S(c),r(c),c=d;r(u)},J=(c,u,d,_,g,m,x,v,y)=>{u.type==="svg"?x="svg":u.type==="math"&&(x="mathml"),c==null?$e(u,d,_,g,m,x,v,y):It(c,u,g,m,x,v,y)},$e=(c,u,d,_,g,m,x,v)=>{let y,b;const{props:E,shapeFlag:w,transition:T,dirs:M}=c;if(y=c.el=o(c.type,m,E&&E.is,E),w&8?a(y,c.children):w&16&&De(c.children,y,null,_,g,_s(c,m),x,v),M&&Je(c,null,_,"created"),_e(y,c,c.scopeId,x,_),E){for(const K in E)K!=="value"&&!gt(K)&&i(y,K,null,E[K],m,_);"value"in E&&i(y,"value",null,E.value,m),(b=E.onVnodeBeforeMount)&&we(b,_,c)}M&&Je(c,null,_,"beforeMount");const I=ho(g,T);I&&T.beforeEnter(y),n(y,u,d),((b=E&&E.onVnodeMounted)||I||M)&&ce(()=>{b&&we(b,_,c),I&&T.enter(y),M&&Je(c,null,_,"mounted")},g)},_e=(c,u,d,_,g)=>{if(d&&C(c,d),_)for(let m=0;m<_.length;m++)C(c,_[m]);if(g){let m=g.subTree;if(u===m||$r(m.type)&&(m.ssContent===u||m.ssFallback===u)){const x=g.vnode;_e(c,x,x.scopeId,x.slotScopeIds,g.parent)}}},De=(c,u,d,_,g,m,x,v,y=0)=>{for(let b=y;b{const v=u.el=c.el;let{patchFlag:y,dynamicChildren:b,dirs:E}=u;y|=c.patchFlag&16;const w=c.props||j,T=u.props||j;let M;if(d&&Ye(d,!1),(M=T.onVnodeBeforeUpdate)&&we(M,d,u,c),E&&Je(u,c,d,"beforeUpdate"),d&&Ye(d,!0),(w.innerHTML&&T.innerHTML==null||w.textContent&&T.textContent==null)&&a(v,""),b?We(c.dynamicChildren,b,v,d,_,_s(u,g),m):x||N(c,u,v,null,d,_,_s(u,g),m,!1),y>0){if(y&16)lt(v,w,T,d,g);else if(y&2&&w.class!==T.class&&i(v,"class",null,T.class,g),y&4&&i(v,"style",w.style,T.style,g),y&8){const I=u.dynamicProps;for(let K=0;K{M&&we(M,d,u,c),E&&Je(u,c,d,"updated")},_)},We=(c,u,d,_,g,m,x)=>{for(let v=0;v{if(u!==d){if(u!==j)for(const m in u)!gt(m)&&!(m in d)&&i(c,m,u[m],null,g,_);for(const m in d){if(gt(m))continue;const x=d[m],v=u[m];x!==v&&m!=="value"&&i(c,m,v,x,g,_)}"value"in d&&i(c,"value",u.value,d.value,g)}},Rt=(c,u,d,_,g,m,x,v,y)=>{const b=u.el=c?c.el:l(""),E=u.anchor=c?c.anchor:l("");let{patchFlag:w,dynamicChildren:T,slotScopeIds:M}=u;M&&(v=v?v.concat(M):M),c==null?(n(b,d,_),n(E,d,_),De(u.children||[],d,E,g,m,x,v,y)):w>0&&w&64&&T&&c.dynamicChildren?(We(c.dynamicChildren,T,d,g,m,x,v),(u.key!=null||g&&u===g.subTree)&&Ar(c,u,!0)):N(c,u,d,E,g,m,x,v,y)},Ft=(c,u,d,_,g,m,x,v,y)=>{u.slotScopeIds=v,c==null?u.shapeFlag&512?g.ctx.activate(u,d,_,x,y):fs(u,d,_,g,m,x,y):ks(c,u,y)},fs=(c,u,d,_,g,m,x)=>{const v=c.component=Fo(c,_,g);if(hr(c)&&(v.ctx.renderer=ft),$o(v,!1,x),v.asyncDep){if(g&&g.registerDep(v,Q,x),!c.el){const y=v.subTree=oe(Ue);H(null,y,u,d)}}else Q(v,c,u,d,g,m,x)},ks=(c,u,d)=>{const _=u.component=c.component;if(wo(c,u,d))if(_.asyncDep&&!_.asyncResolved){V(_,u,d);return}else _.next=u,_.update();else u.el=c.el,_.vnode=u},Q=(c,u,d,_,g,m,x)=>{const v=()=>{if(c.isMounted){let{next:w,bu:T,u:M,parent:I,vnode:K}=c;{const ve=Pr(c);if(ve){w&&(w.el=K.el,V(c,w,x)),ve.asyncDep.then(()=>{c.isUnmounted||v()});return}}let L=w,ne;Ye(c,!1),w?(w.el=K.el,V(c,w,x)):w=K,T&&Kt(T),(ne=w.props&&w.props.onVnodeBeforeUpdate)&&we(ne,I,w,K),Ye(c,!0);const re=gn(c),ye=c.subTree;c.subTree=re,R(ye,re,p(ye.el),Dt(ye),c,g,m),w.el=re.el,L===null&&So(c,re.el),M&&ce(M,g),(ne=w.props&&w.props.onVnodeUpdated)&&ce(()=>we(ne,I,w,K),g)}else{let w;const{el:T,props:M}=u,{bm:I,m:K,parent:L,root:ne,type:re}=c,ye=yt(u);Ye(c,!1),I&&Kt(I),!ye&&(w=M&&M.onVnodeBeforeMount)&&we(w,L,u),Ye(c,!0);{ne.ce&&ne.ce._def.shadowRoot!==!1&&ne.ce._injectChildStyle(re);const ve=c.subTree=gn(c);R(null,ve,d,_,c,g,m),u.el=ve.el}if(K&&ce(K,g),!ye&&(w=M&&M.onVnodeMounted)){const ve=u;ce(()=>we(w,L,ve),g)}(u.shapeFlag&256||L&&yt(L.vnode)&&L.vnode.shapeFlag&256)&&c.a&&ce(c.a,g),c.isMounted=!0,u=d=_=null}};c.scope.on();const y=c.effect=new Bn(v);c.scope.off();const b=c.update=y.run.bind(y),E=c.job=y.runIfDirty.bind(y);E.i=c,E.id=c.uid,y.scheduler=()=>Ys(E),Ye(c,!0),b()},V=(c,u,d)=>{u.component=c;const _=c.vnode.props;c.vnode=u,c.next=null,io(c,u.props,_,d),fo(c,u.children,d),Ie(),cn(c),Re()},N=(c,u,d,_,g,m,x,v,y=!1)=>{const b=c&&c.children,E=c?c.shapeFlag:0,w=u.children,{patchFlag:T,shapeFlag:M}=u;if(T>0){if(T&128){$t(b,w,d,_,g,m,x,v,y);return}else if(T&256){qe(b,w,d,_,g,m,x,v,y);return}}M&8?(E&16&&ct(b,g,m),w!==b&&a(d,w)):E&16?M&16?$t(b,w,d,_,g,m,x,v,y):ct(b,g,m,!0):(E&8&&a(d,""),M&16&&De(w,d,_,g,m,x,v,y))},qe=(c,u,d,_,g,m,x,v,y)=>{c=c||tt,u=u||tt;const b=c.length,E=u.length,w=Math.min(b,E);let T;for(T=0;TE?ct(c,g,m,!0,!1,w):De(u,d,_,g,m,x,v,y,w)},$t=(c,u,d,_,g,m,x,v,y)=>{let b=0;const E=u.length;let w=c.length-1,T=E-1;for(;b<=w&&b<=T;){const M=c[b],I=u[b]=y?He(u[b]):Ce(u[b]);if(dt(M,I))R(M,I,d,null,g,m,x,v,y);else break;b++}for(;b<=w&&b<=T;){const M=c[w],I=u[T]=y?He(u[T]):Ce(u[T]);if(dt(M,I))R(M,I,d,null,g,m,x,v,y);else break;w--,T--}if(b>w){if(b<=T){const M=T+1,I=MT)for(;b<=w;)be(c[b],g,m,!0),b++;else{const M=b,I=b,K=new Map;for(b=I;b<=T;b++){const le=u[b]=y?He(u[b]):Ce(u[b]);le.key!=null&&K.set(le.key,b)}let L,ne=0;const re=T-I+1;let ye=!1,ve=0;const ut=new Array(re);for(b=0;b=re){be(le,g,m,!0);continue}let xe;if(le.key!=null)xe=K.get(le.key);else for(L=I;L<=T;L++)if(ut[L-I]===0&&dt(le,u[L])){xe=L;break}xe===void 0?be(le,g,m,!0):(ut[xe-I]=b+1,xe>=ve?ve=xe:ye=!0,R(le,u[xe],d,null,g,m,x,v,y),ne++)}const sn=ye?po(ut):tt;for(L=sn.length-1,b=re-1;b>=0;b--){const le=I+b,xe=u[le],nn=le+1{const{el:m,type:x,transition:v,children:y,shapeFlag:b}=c;if(b&6){Ge(c.component.subTree,u,d,_);return}if(b&128){c.suspense.move(u,d,_);return}if(b&64){x.move(c,u,d,ft);return}if(x===ae){n(m,u,d);for(let w=0;wv.enter(m),g);else{const{leave:w,delayLeave:T,afterLeave:M}=v,I=()=>{c.ctx.isUnmounted?r(m):n(m,u,d)},K=()=>{w(m,()=>{I(),M&&M()})};T?T(m,I,K):K()}else n(m,u,d)},be=(c,u,d,_=!1,g=!1)=>{const{type:m,props:x,ref:v,children:y,dynamicChildren:b,shapeFlag:E,patchFlag:w,dirs:T,cacheIndex:M}=c;if(w===-2&&(g=!1),v!=null&&(Ie(),bt(v,null,d,c,!0),Re()),M!=null&&(u.renderCache[M]=void 0),E&256){u.ctx.deactivate(c);return}const I=E&1&&T,K=!yt(c);let L;if(K&&(L=x&&x.onVnodeBeforeUnmount)&&we(L,u,c),E&6)Br(c.component,d,_);else{if(E&128){c.suspense.unmount(d,_);return}I&&Je(c,null,u,"beforeUnmount"),E&64?c.type.remove(c,u,d,ft,_):b&&!b.hasOnce&&(m!==ae||w>0&&w&64)?ct(b,u,d,!1,!0):(m===ae&&w&384||!g&&E&16)&&ct(y,u,d),_&&en(c)}(K&&(L=x&&x.onVnodeUnmounted)||I)&&ce(()=>{L&&we(L,u,c),I&&Je(c,null,u,"unmounted")},d)},en=c=>{const{type:u,el:d,anchor:_,transition:g}=c;if(u===ae){Vr(d,_);return}if(u===bs){O(c);return}const m=()=>{r(d),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(c.shapeFlag&1&&g&&!g.persisted){const{leave:x,delayLeave:v}=g,y=()=>x(d,m);v?v(c.el,m,y):y()}else m()},Vr=(c,u)=>{let d;for(;c!==u;)d=S(c),r(c),c=d;r(u)},Br=(c,u,d)=>{const{bum:_,scope:g,job:m,subTree:x,um:v,m:y,a:b,parent:E,slots:{__:w}}=c;pn(y),pn(b),_&&Kt(_),E&&A(w)&&w.forEach(T=>{E.renderCache[T]=void 0}),g.stop(),m&&(m.flags|=8,be(x,c,u,d)),v&&ce(v,u),ce(()=>{c.isUnmounted=!0},u),u&&u.pendingBranch&&!u.isUnmounted&&c.asyncDep&&!c.asyncResolved&&c.suspenseId===u.pendingId&&(u.deps--,u.deps===0&&u.resolve())},ct=(c,u,d,_=!1,g=!1,m=0)=>{for(let x=m;x{if(c.shapeFlag&6)return Dt(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const u=S(c.anchor||c.el),d=u&&u[Di];return d?S(d):u};let us=!1;const tn=(c,u,d)=>{c==null?u._vnode&&be(u._vnode,null,null,!0):R(u._vnode||null,c,u,null,null,null,d),u._vnode=c,us||(us=!0,cn(),cr(),us=!1)},ft={p:R,um:be,m:Ge,r:en,mt:fs,mc:De,pc:N,pbc:We,n:Dt,o:e};return{render:tn,hydrate:void 0,createApp:so(tn)}}function _s({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Ye({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ho(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ar(e,t,s=!1){const n=e.children,r=t.children;if(A(n)&&A(r))for(let i=0;i>1,e[s[l]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,o=s[i-1];i-- >0;)s[i]=o,o=t[o];return s}function Pr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Pr(t)}function pn(e){if(e)for(let t=0;tUt(go);function Vt(e,t,s){return Ir(e,t,s)}function Ir(e,t,s=j){const{immediate:n,deep:r,flush:i,once:o}=s,l=se({},s),f=t&&n||!t&&i!=="post";let h;if(Et){if(i==="sync"){const C=mo();h=C.__watcherHandles||(C.__watcherHandles=[])}else if(!f){const C=()=>{};return C.stop=Te,C.resume=Te,C.pause=Te,C}}const a=te;l.call=(C,F,R)=>Ee(C,a,F,R);let p=!1;i==="post"?l.scheduler=C=>{ce(C,a&&a.suspense)}:i!=="sync"&&(p=!0,l.scheduler=(C,F)=>{F?C():Ys(C)}),l.augmentJob=C=>{t&&(C.flags|=4),p&&(C.flags|=2,a&&(C.id=a.uid,C.i=a))};const S=Pi(e,t,l);return Et&&(h?h.push(S):f&&S()),S}function _o(e,t,s){const n=this.proxy,r=G(e)?e.includes(".")?Rr(n,e):()=>n[e]:e.bind(n,n);let i;P(t)?i=t:(i=t.handler,s=t);const o=At(this),l=Ir(r,i.bind(n),s);return o(),l}function Rr(e,t){const s=t.split(".");return()=>{let n=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ne(t)}Modifiers`]||e[`${Be(t)}Modifiers`];function yo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||j;let r=s;const i=t.startsWith("update:"),o=i&&bo(n,t.slice(7));o&&(o.trim&&(r=s.map(a=>G(a)?a.trim():a)),o.number&&(r=s.map(Cs)));let l,f=n[l=as(t)]||n[l=as(Ne(t))];!f&&i&&(f=n[l=as(Be(t))]),f&&Ee(f,e,6,r);const h=n[l+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ee(h,e,6,r)}}function Fr(e,t,s=!1){const n=t.emitsCache,r=n.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!P(e)){const f=h=>{const a=Fr(h,t,!0);a&&(l=!0,se(o,a))};!s&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!i&&!l?(B(e)&&n.set(e,null),null):(A(i)?i.forEach(f=>o[f]=null):se(o,i),B(e)&&n.set(e,o),o)}function os(e,t){return!e||!kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),D(e,t[0].toLowerCase()+t.slice(1))||D(e,Be(t))||D(e,t))}function gn(e){const{type:t,vnode:s,proxy:n,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:f,render:h,renderCache:a,props:p,data:S,setupState:C,ctx:F,inheritAttrs:R}=e,z=zt(e);let H,W;try{if(s.shapeFlag&4){const O=r||n,J=O;H=Ce(h.call(J,O,a,p,C,S,F)),W=l}else{const O=t;H=Ce(O.length>1?O(p,{attrs:l,slots:o,emit:f}):O(p,null)),W=t.props?l:vo(l)}}catch(O){xt.length=0,rs(O,e,1),H=oe(Ue)}let q=H;if(W&&R!==!1){const O=Object.keys(W),{shapeFlag:J}=q;O.length&&J&7&&(i&&O.some(Ls)&&(W=xo(W,i)),q=ot(q,W,!1,!0))}return s.dirs&&(q=ot(q,null,!1,!0),q.dirs=q.dirs?q.dirs.concat(s.dirs):s.dirs),s.transition&&zs(q,s.transition),H=q,zt(z),H}const vo=e=>{let t;for(const s in e)(s==="class"||s==="style"||kt(s))&&((t||(t={}))[s]=e[s]);return t},xo=(e,t)=>{const s={};for(const n in e)(!Ls(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function wo(e,t,s){const{props:n,children:r,component:i}=e,{props:o,children:l,patchFlag:f}=t,h=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&f>=0){if(f&1024)return!0;if(f&16)return n?mn(n,o,h):!!o;if(f&8){const a=t.dynamicProps;for(let p=0;pe.__isSuspense;function Co(e,t){t&&t.pendingBranch?A(e)?t.effects.push(...e):t.effects.push(e):Fi(e)}const ae=Symbol.for("v-fgt"),ls=Symbol.for("v-txt"),Ue=Symbol.for("v-cmt"),bs=Symbol.for("v-stc"),xt=[];let ue=null;function fe(e=!1){xt.push(ue=e?null:[])}function To(){xt.pop(),ue=xt[xt.length-1]||null}let Tt=1;function _n(e,t=!1){Tt+=e,e<0&&ue&&t&&(ue.hasOnce=!0)}function Dr(e){return e.dynamicChildren=Tt>0?ue||tt:null,To(),Tt>0&&ue&&ue.push(e),e}function de(e,t,s,n,r,i){return Dr(me(e,t,s,n,r,i,!0))}function Eo(e,t,s,n,r){return Dr(oe(e,t,s,n,r,!0))}function Lr(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const Hr=({key:e})=>e??null,Bt=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?G(e)||Z(e)||P(e)?{i:he,r:e,k:t,f:!!s}:e:null);function me(e,t=null,s=null,n=0,r=null,i=e===ae?0:1,o=!1,l=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Hr(t),ref:t&&Bt(t),scopeId:ur,slotScopeIds:null,children:s,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:n,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:he};return l?(Qs(f,s),i&128&&e.normalize(f)):s&&(f.shapeFlag|=G(s)?8:16),Tt>0&&!o&&ue&&(f.patchFlag>0||i&6)&&f.patchFlag!==32&&ue.push(f),f}const oe=Oo;function Oo(e,t=null,s=null,n=0,r=null,i=!1){if((!e||e===Yi)&&(e=Ue),Lr(e)){const l=ot(e,t,!0);return s&&Qs(l,s),Tt>0&&!i&&ue&&(l.shapeFlag&6?ue[ue.indexOf(e)]=l:ue.push(l)),l.patchFlag=-2,l}if(jo(e)&&(e=e.__vccOpts),t){t=Mo(t);let{class:l,style:f}=t;l&&!G(l)&&(t.class=Ot(l)),B(f)&&(Js(f)&&!A(f)&&(f=se({},f)),t.style=Ns(f))}const o=G(e)?1:$r(e)?128:Li(e)?64:B(e)?4:P(e)?2:0;return me(e,t,s,n,r,o,i,!0)}function Mo(e){return e?Js(e)||Sr(e)?se({},e):e:null}function ot(e,t,s=!1,n=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:f}=e,h=t?Po(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&Hr(h),ref:t&&t.ref?s&&i?A(i)?i.concat(Bt(t)):[i,Bt(t)]:Bt(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!==ae?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ot(e.ssContent),ssFallback:e.ssFallback&&ot(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return f&&n&&zs(a,f.clone(a)),a}function Ao(e=" ",t=0){return oe(ls,null,e,t)}function bn(e="",t=!1){return t?(fe(),Eo(Ue,null,e)):oe(Ue,null,e)}function Ce(e){return e==null||typeof e=="boolean"?oe(Ue):A(e)?oe(ae,null,e.slice()):Lr(e)?He(e):oe(ls,null,String(e))}function He(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ot(e)}function Qs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(A(t))s=16;else if(typeof t=="object")if(n&65){const r=t.default;r&&(r._c&&(r._d=!1),Qs(e,r()),r._c&&(r._d=!0));return}else{s=32;const r=t._;!r&&!Sr(t)?t._ctx=he:r===3&&he&&(he.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else P(t)?(t={default:t,_ctx:he},s=32):(t=String(t),n&64?(s=16,t=[Ao(t)]):s=8);e.children=t,e.shapeFlag|=s}function Po(...e){const t={};for(let s=0;s{let r;return(r=e[s])||(r=e[s]=[]),r.push(n),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Zt=t("__VUE_INSTANCE_SETTERS__",s=>te=s),Fs=t("__VUE_SSR_SETTERS__",s=>Et=s)}const At=e=>{const t=te;return Zt(e),e.scope.on(),()=>{e.scope.off(),Zt(t)}},yn=()=>{te&&te.scope.off(),Zt(null)};function jr(e){return e.vnode.shapeFlag&4}let Et=!1;function $o(e,t=!1,s=!1){t&&Fs(t);const{props:n,children:r}=e.vnode,i=jr(e);ro(e,n,i,t),co(e,r,s||t);const o=i?Do(e,t):void 0;return t&&Fs(!1),o}function Do(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,zi);const{setup:n}=s;if(n){Ie();const r=e.setupContext=n.length>1?Ho(e):null,i=At(e),o=Mt(n,e,0,[e.props,r]),l=Ln(o);if(Re(),i(),(l||e.sp)&&!yt(e)&&dr(e),l){if(o.then(yn,yn),t)return o.then(f=>{vn(e,f)}).catch(f=>{rs(f,e,0)});e.asyncDep=o}else vn(e,o)}else Nr(e)}function vn(e,t,s){P(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:B(t)&&(e.setupState=rr(t)),Nr(e)}function Nr(e,t,s){const n=e.type;e.render||(e.render=n.render||Te);{const r=At(e);Ie();try{Xi(e)}finally{Re(),r()}}}const Lo={get(e,t){return X(e,"get",""),e[t]}};function Ho(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,Lo),slots:e.slots,emit:e.emit,expose:t}}function cs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(rr(wi(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in vt)return vt[s](e)},has(t,s){return s in t||s in vt}})):e.proxy}function jo(e){return P(e)&&"__vccOpts"in e}const No=(e,t)=>Mi(e,t,Et),Ko="3.5.17";/** +* @vue/runtime-dom v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let $s;const xn=typeof window<"u"&&window.trustedTypes;if(xn)try{$s=xn.createPolicy("vue",{createHTML:e=>e})}catch{}const Kr=$s?e=>$s.createHTML(e):e=>e,Uo="http://www.w3.org/2000/svg",Vo="http://www.w3.org/1998/Math/MathML",Me=typeof document<"u"?document:null,wn=Me&&Me.createElement("template"),Bo={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const r=t==="svg"?Me.createElementNS(Uo,e):t==="mathml"?Me.createElementNS(Vo,e):s?Me.createElement(e,{is:s}):Me.createElement(e);return e==="select"&&n&&n.multiple!=null&&r.setAttribute("multiple",n.multiple),r},createText:e=>Me.createTextNode(e),createComment:e=>Me.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Me.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,r,i){const o=s?s.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),s),!(r===i||!(r=r.nextSibling)););else{wn.innerHTML=Kr(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const l=wn.content;if(n==="svg"||n==="mathml"){const f=l.firstChild;for(;f.firstChild;)l.appendChild(f.firstChild);l.removeChild(f)}t.insertBefore(l,s)}return[o?o.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Wo=Symbol("_vtc");function qo(e,t,s){const n=e[Wo];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Qt=Symbol("_vod"),Ur=Symbol("_vsh"),Go={beforeMount(e,{value:t},{transition:s}){e[Qt]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):ht(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),ht(e,!0),n.enter(e)):n.leave(e,()=>{ht(e,!1)}):ht(e,t))},beforeUnmount(e,{value:t}){ht(e,t)}};function ht(e,t){e.style.display=t?e[Qt]:"none",e[Ur]=!t}const Jo=Symbol(""),Yo=/(^|;)\s*display\s*:/;function zo(e,t,s){const n=e.style,r=G(s);let i=!1;if(s&&!r){if(t)if(G(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();s[l]==null&&Wt(n,l,"")}else for(const o in t)s[o]==null&&Wt(n,o,"");for(const o in s)o==="display"&&(i=!0),Wt(n,o,s[o])}else if(r){if(t!==s){const o=n[Jo];o&&(s+=";"+o),n.cssText=s,i=Yo.test(s)}}else t&&e.removeAttribute("style");Qt in e&&(e[Qt]=i?n.display:"",e[Ur]&&(n.display="none"))}const Sn=/\s*!important$/;function Wt(e,t,s){if(A(s))s.forEach(n=>Wt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Xo(e,t);Sn.test(s)?e.setProperty(Be(n),s.replace(Sn,""),"important"):e[n]=s}}const Cn=["Webkit","Moz","ms"],ys={};function Xo(e,t){const s=ys[t];if(s)return s;let n=Ne(t);if(n!=="filter"&&n in e)return ys[t]=n;n=Nn(n);for(let r=0;rvs||(el.then(()=>vs=0),vs=Date.now());function sl(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;Ee(nl(n,s.value),t,5,[n])};return s.value=e,s.attached=tl(),s}function nl(e,t){if(A(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(n=>r=>!r._stopped&&n&&n(r))}else return t}const Pn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rl=(e,t,s,n,r,i)=>{const o=r==="svg";t==="class"?qo(e,n,o):t==="style"?zo(e,s,n):kt(t)?Ls(t)||Qo(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):il(e,t,n,o))?(On(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&En(e,t,n,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!G(n))?On(e,Ne(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),En(e,t,n,o))};function il(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Pn(t)&&P(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||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 Pn(t)&&G(s)?!1:t in e}const In=e=>{const t=e.props["onUpdate:modelValue"]||!1;return A(t)?s=>Kt(t,s):t};function ol(e){e.target.composing=!0}function Rn(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const xs=Symbol("_assign"),ll={created(e,{modifiers:{lazy:t,trim:s,number:n}},r){e[xs]=In(r);const i=n||r.props&&r.props.type==="number";ke(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;s&&(l=l.trim()),i&&(l=Cs(l)),e[xs](l)}),s&&ke(e,"change",()=>{e.value=e.value.trim()}),t||(ke(e,"compositionstart",ol),ke(e,"compositionend",Rn),ke(e,"change",Rn))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:r,number:i}},o){if(e[xs]=In(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Cs(e.value):e.value,f=t??"";l!==f&&(document.activeElement===e&&e.type!=="range"&&(n&&t===s||r&&e.value.trim()===f)||(e.value=f))}},cl=["ctrl","shift","alt","meta"],fl={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)=>cl.some(s=>e[`${s}Key`]&&!t.includes(s))},ws=(e,t)=>{const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=(r,...i)=>{for(let o=0;o{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=r=>{if(!("key"in r))return;const i=Be(r.key);if(t.some(o=>o===i||ul[o]===i))return e(r)})},al=se({patchProp:rl},Bo);let $n;function dl(){return $n||($n=uo(al))}const hl=(...e)=>{const t=dl().createApp(...e),{mount:s}=t;return t.mount=n=>{const r=gl(n);if(!r)return;const i=t._component;!P(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=s(r,!1,pl(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function pl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function gl(e){return G(e)?document.querySelector(e):e}const Pt=(e,t)=>{const s=e.__vccOpts||e;for(const[n,r]of t)s[n]=r;return s},ml={class:"sidebar"},_l={class:"chat-list"},bl=["onClick"],yl={__name:"ChatSidebar",props:{chats:{type:Array,required:!0},currentChatId:{type:String,default:""}},emits:["select-chat","create-chat"],setup(e){return(t,s)=>(fe(),de("aside",ml,[s[1]||(s[1]=me("h2",null,"🗂️ Chats",-1)),me("button",{class:"new-chat-btn",onClick:s[0]||(s[0]=n=>t.$emit("create-chat"))}," ➕ Nuevo chat "),me("ul",_l,[(fe(!0),de(ae,null,_r(e.chats,n=>(fe(),de("li",{key:n.id,class:Ot({active:n.id===e.currentChatId}),onClick:r=>t.$emit("select-chat",n.id)},qt(n.name),11,bl))),128))])]))}},vl=Pt(yl,[["__scopeId","data-v-cd451cf6"]]),xl={formatDate(e){if(!e)return"";const t=new Date(e),s=t.getDate().toString().padStart(2,"0"),n=(t.getMonth()+1).toString().padStart(2,"0"),r=t.getFullYear(),i=t.getHours().toString().padStart(2,"0"),o=t.getMinutes().toString().padStart(2,"0");return`${s}/${n}/${r} ${i}:${o}`}},wl={class:"timestamp"},Sl={key:0,class:"spinner"},Cl={key:1,class:"thinking-text"},Tl={__name:"ChatMessages",props:{messages:{type:Array,required:!0},isLoading:{type:Boolean,default:!1}},setup(e){const t=e,s=et(null);Vt(()=>t.messages.length,async()=>{await or(),s.value&&(s.value.scrollTop=s.value.scrollHeight)});const n=r=>xl.formatDate(r);return(r,i)=>(fe(),de(ae,null,[me("div",{class:"chat-log",ref_key:"chatLog",ref:s},[(fe(!0),de(ae,null,_r(e.messages,(o,l)=>ar((fe(),de("div",{key:l,class:Ot(["bubble",o.role])},[me("span",null,qt(o.text),1),me("em",wl,qt(n(o.date)),1)],2)),[[Go,o.text]])),128))],512),e.isLoading?(fe(),de("div",Sl)):bn("",!0),e.isLoading?(fe(),de("div",Cl,"Pensando...")):bn("",!0)],64))}},El=Pt(Tl,[["__scopeId","data-v-96cd1719"]]),Ol=["disabled","onKeydown"],Ml=["disabled"],Al={__name:"ChatForm",props:{disabled:{type:Boolean,default:!1}},emits:["send-message"],setup(e,{emit:t}){const s=t,n=et(""),r=()=>{n.value.trim()&&(s("send-message",n.value.trim()),n.value="")},i=()=>{n.value+=` +`};return(o,l)=>(fe(),de("form",{class:"chat-form",onSubmit:ws(r,["prevent"])},[ar(me("textarea",{"onUpdate:modelValue":l[0]||(l[0]=f=>n.value=f),"aria-label":"Pregunta del usuario",placeholder:"Escribe tu mensaje...",autocomplete:"off",required:"",disabled:e.disabled,onKeydown:[Fn(ws(r,["exact","prevent"]),["enter"]),Fn(ws(i,["shift","exact"]),["enter"])]},null,40,Ol),[[ll,n.value]]),me("button",{type:"submit",disabled:e.disabled||!n.value.trim()}," Enviar ",8,Ml)],32))}},Pl=Pt(Al,[["__scopeId","data-v-dca915bb"]]),Il={class:"main-content"},Rl={__name:"ChatMain",props:{messages:{type:Array,required:!0},isLoading:{type:Boolean,default:!1}},emits:["send-message"],setup(e,{emit:t}){const s=t,n=r=>{s("send-message",r)};return(r,i)=>(fe(),de("main",Il,[i[0]||(i[0]=me("h1",{class:"main-title"},"🤖 Chat IA Offline",-1)),oe(El,{messages:e.messages,"is-loading":e.isLoading},null,8,["messages","is-loading"]),oe(Pl,{onSendMessage:n,disabled:e.isLoading},null,8,["disabled"])]))}},Fl=Pt(Rl,[["__scopeId","data-v-2c6be2f2"]]);class $l{async getChats(){try{const t=await fetch("/api/v1/chats",{method:"GET"});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return await t.json()}catch(t){throw console.error("Error fetching chats:",t),t}}async createChat(){try{const t=await fetch("/api/v1/chats",{method:"POST"});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}`);return await t.text()}catch(t){throw console.error("Error creating chat:",t),t}}async getChatMessages(t){try{const s=await fetch(`/api/v1/chats/${t}`);if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}catch(s){throw console.error("Error fetching messages:",s),s}}async sendMessage(t,s){try{const n=await fetch(`/api/v1/chats/${t}`,{method:"PUT",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({prompt:s})});if(!n.ok)throw new Error(`HTTP error! status: ${n.status}`);return await n.json()}catch(n){throw console.error("Error sending message:",n),n}}}const Nt=new $l,Dl={class:"layout-container"},Ll={__name:"ChatLayout",setup(e){const t=et(""),s=et([]),n=et([]),r=et(!1),i=async()=>{try{const a=await Nt.getChats();s.value=a,!t.value&&a.length>0&&(t.value=a[0].id,await o(t.value))}catch(a){console.error("Error cargando historial:",a)}},o=async a=>{try{const p=await Nt.getChatMessages(a);n.value=p}catch(p){console.error("Error al cargar mensajes:",p),n.value.push({role:"bot",text:"❌ Error cargando mensajes del chat.",date:new Date().toISOString()})}},l=async a=>{a!==t.value&&(t.value=a,await o(t.value))},f=async()=>{try{const a=await Nt.createChat();t.value=a,await i(),await o(t.value)}catch(a){console.error("Error al crear nuevo chat:",a),n.value&&n.value.push({role:"bot",text:"❌ Error creando nuevo chat.",date:new Date().toISOString()})}},h=async a=>{t.value||await f();const p={role:"user",text:a,date:new Date().toISOString()};n.value.push(p),r.value=!0;try{const S=await Nt.sendMessage(t.value,a);t.value=S.chatId;const C={role:"bot",text:S.text,date:S.date};n.value.push(C),await i()}catch(S){console.error("Error enviando mensaje:",S),n.value.push({role:"bot",text:"❌ Error procesando la respuesta.",date:new Date().toISOString()})}finally{r.value=!1}};return gr(async()=>{await i()}),(a,p)=>(fe(),de("div",Dl,[oe(vl,{chats:s.value,"current-chat-id":t.value,onSelectChat:l,onCreateChat:f},null,8,["chats","current-chat-id"]),oe(Fl,{messages:n.value,"is-loading":r.value,onSendMessage:h},null,8,["messages","is-loading"])]))}},Hl=Pt(Ll,[["__scopeId","data-v-6fe96f7a"]]),jl={id:"app"},Nl={__name:"App",setup(e){return(t,s)=>(fe(),de("div",jl,[oe(Hl)]))}};hl(Nl).mount("#app"); diff --git a/frontend/dist/assets/index-Kwm2enAh.css b/frontend/dist/assets/index-Kwm2enAh.css new file mode 100644 index 0000000..0069149 --- /dev/null +++ b/frontend/dist/assets/index-Kwm2enAh.css @@ -0,0 +1 @@ +.sidebar[data-v-cd451cf6]{width:25%;min-width:200px;background-color:#1b1d23;color:#fff;padding:1.5rem 1rem;box-sizing:border-box;border-right:1px solid #2c2e34;display:flex;flex-direction:column}.sidebar h2[data-v-cd451cf6]{font-size:1.25rem;margin-bottom:1rem;color:#5a90ff}.new-chat-btn[data-v-cd451cf6]{margin-bottom:10px;padding:8px;font-size:14px;cursor:pointer;background-color:#5a90ff;color:#fff;border:none;border-radius:8px;transition:background-color .2s ease}.new-chat-btn[data-v-cd451cf6]:hover{background-color:#4076e0}.chat-list[data-v-cd451cf6]{list-style:none;padding:0;margin:0;overflow-y:auto;flex-grow:1}.chat-list li[data-v-cd451cf6]{padding:.5rem .75rem;cursor:pointer;border-radius:8px;transition:background-color .2s ease;font-size:.95rem}.chat-list li[data-v-cd451cf6]:hover{background-color:#2c2f3a}.chat-list li.active[data-v-cd451cf6]{background-color:#3451d1;color:#fff;font-weight:700}.chat-log[data-v-96cd1719]{flex:1 1 auto;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:1.25rem 1.5rem;box-sizing:border-box;background-color:#1a1c22;border-radius:16px;scrollbar-width:thin;scrollbar-color:#5a90ff33 transparent}.chat-log[data-v-96cd1719]::-webkit-scrollbar{width:6px}.chat-log[data-v-96cd1719]::-webkit-scrollbar-thumb{background-color:#5a90ff55;border-radius:3px}.bubble[data-v-96cd1719]{max-width:75%;padding:14px 18px;border-radius:20px;line-height:1.5;font-size:1rem;word-wrap:break-word;-webkit-user-select:text;user-select:text;transition:background-color .3s ease,color .3s ease;opacity:0;transform:translateY(10px);animation:slideFadeIn-96cd1719 .3s forwards}@keyframes slideFadeIn-96cd1719{to{opacity:1;transform:translateY(0)}}.user[data-v-96cd1719]{background-color:#3451d1;align-self:flex-end;color:#fff;border-radius:20px 20px 4px}.bot[data-v-96cd1719]{background-color:#2a2d35;align-self:flex-start;color:#a4c8ff;font-style:italic;border-radius:20px 20px 20px 4px}.timestamp[data-v-96cd1719]{display:block;text-align:right;font-size:.75rem;color:#999;margin-top:6px;font-style:normal;opacity:.7;-webkit-user-select:none;user-select:none}.spinner[data-v-96cd1719]{margin:1rem auto;width:36px;height:36px;border:4px solid rgba(90,144,255,.2);border-top-color:#5a90ff;border-radius:50%;animation:spin-96cd1719 1s linear infinite}@keyframes spin-96cd1719{to{transform:rotate(360deg)}}.thinking-text[data-v-96cd1719]{text-align:center;color:#5a90ff;font-style:italic;margin-top:.5rem;font-weight:600;-webkit-user-select:none;user-select:none}.chat-form[data-v-dca915bb]{flex-shrink:0;margin-top:1.25rem;display:flex;gap:12px;padding:0;box-sizing:border-box;background:transparent;border-radius:0}textarea[data-v-dca915bb]{flex-grow:1;min-height:4.25rem;border-radius:16px;border:1px solid #2d2f36;padding:1rem 1.25rem;font-size:1rem;resize:none;outline:none;background-color:#1c1e24;color:#e6e9ef;font-family:inherit;max-width:100%;overflow-y:auto;box-sizing:border-box;transition:border-color .25s ease,background-color .25s ease}textarea[data-v-dca915bb]::placeholder{color:#6a6e7c;font-style:italic;opacity:.9}textarea[data-v-dca915bb]:focus{border-color:#5a90ff;background-color:#20232a}button[data-v-dca915bb]{background-color:#5a90ff;border:none;border-radius:14px;color:#fff;padding:0 1.75rem;font-weight:600;font-size:1rem;cursor:pointer;transition:background-color .25s ease,transform .1s ease;white-space:nowrap}button[data-v-dca915bb]:hover:not(:disabled){background-color:#4076e0}button[data-v-dca915bb]:active:not(:disabled){transform:translateY(1px);background-color:#305dc0}button[data-v-dca915bb]:disabled{opacity:.5;cursor:not-allowed;background-color:#3a4a6a}.main-content[data-v-2c6be2f2]{width:75%;box-sizing:border-box;display:flex;flex-direction:column;padding:2rem 1.25rem 1rem;background-color:#121217;overflow:hidden}.main-title[data-v-2c6be2f2]{text-align:center;margin-bottom:1.25rem;color:#5a90ff;font-weight:700;font-size:1.75rem;letter-spacing:.05em;-webkit-user-select:none;user-select:none}.layout-container[data-v-6fe96f7a]{display:flex;height:100vh;width:100vw;overflow:hidden}#app{height:100vh;width:100vw}html,body{margin:0;padding:0;height:100%;background:#121217;color:#e0e4e8;font-family:Segoe UI Variable,Segoe UI,Tahoma,Geneva,Verdana,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;padding:0;height:100vh;background-color:#121217}@media (max-width: 768px){.layout-container{flex-direction:column}.sidebar{width:100%!important;border-right:none;border-bottom:1px solid #2c2e34}.main-content{width:100%!important}} diff --git a/frontend/dist/favicon/apple-touch-icon.png b/frontend/dist/favicon/apple-touch-icon.png new file mode 100644 index 0000000..9216595 Binary files /dev/null and b/frontend/dist/favicon/apple-touch-icon.png differ diff --git a/frontend/dist/favicon/favicon-96x96.png b/frontend/dist/favicon/favicon-96x96.png new file mode 100644 index 0000000..c36543c Binary files /dev/null and b/frontend/dist/favicon/favicon-96x96.png differ diff --git a/frontend/dist/favicon/favicon.ico b/frontend/dist/favicon/favicon.ico new file mode 100644 index 0000000..6252b45 Binary files /dev/null and b/frontend/dist/favicon/favicon.ico differ diff --git a/frontend/dist/favicon/favicon.svg b/frontend/dist/favicon/favicon.svg new file mode 100644 index 0000000..558d58f --- /dev/null +++ b/frontend/dist/favicon/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/frontend/dist/favicon/web-app-manifest-192x192.png b/frontend/dist/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000..00d737d Binary files /dev/null and b/frontend/dist/favicon/web-app-manifest-192x192.png differ diff --git a/frontend/dist/favicon/web-app-manifest-512x512.png b/frontend/dist/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000..76db085 Binary files /dev/null and b/frontend/dist/favicon/web-app-manifest-512x512.png differ diff --git a/frontend/dist/index.html b/frontend/dist/index.html new file mode 100644 index 0000000..e277321 --- /dev/null +++ b/frontend/dist/index.html @@ -0,0 +1,19 @@ + + + + + + Chat IA Offline - Vue App + + + + + + + + + + +
+ + diff --git a/frontend/dist/robots.txt b/frontend/dist/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/frontend/dist/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/frontend/dist/site.webmanifest b/frontend/dist/site.webmanifest new file mode 100644 index 0000000..ccf313a --- /dev/null +++ b/frontend/dist/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "MyWebSite", + "short_name": "MySite", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..05a4e60 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + Chat IA Offline - Vue App + + + + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..ad40dee --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1132 @@ +{ + "name": "chat-ia-vue", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "chat-ia-vue", + "version": "1.0.0", + "dependencies": { + "vue": "^3.4.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", + "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/shared": "3.5.17", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", + "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", + "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/compiler-core": "3.5.17", + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", + "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.17.tgz", + "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.17.tgz", + "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", + "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.17", + "@vue/runtime-core": "3.5.17", + "@vue/shared": "3.5.17", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.17.tgz", + "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17" + }, + "peerDependencies": { + "vue": "3.5.17" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", + "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.17.tgz", + "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-sfc": "3.5.17", + "@vue/runtime-dom": "3.5.17", + "@vue/server-renderer": "3.5.17", + "@vue/shared": "3.5.17" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..003f6cf --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,17 @@ +{ + "name": "chat-ia-vue", + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.4.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.0.0" + } +} \ No newline at end of file diff --git a/frontend/public/favicon/apple-touch-icon.png b/frontend/public/favicon/apple-touch-icon.png new file mode 100644 index 0000000..9216595 Binary files /dev/null and b/frontend/public/favicon/apple-touch-icon.png differ diff --git a/frontend/public/favicon/favicon-96x96.png b/frontend/public/favicon/favicon-96x96.png new file mode 100644 index 0000000..c36543c Binary files /dev/null and b/frontend/public/favicon/favicon-96x96.png differ diff --git a/frontend/public/favicon/favicon.ico b/frontend/public/favicon/favicon.ico new file mode 100644 index 0000000..6252b45 Binary files /dev/null and b/frontend/public/favicon/favicon.ico differ diff --git a/frontend/public/favicon/favicon.svg b/frontend/public/favicon/favicon.svg new file mode 100644 index 0000000..558d58f --- /dev/null +++ b/frontend/public/favicon/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/frontend/public/favicon/web-app-manifest-192x192.png b/frontend/public/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000..00d737d Binary files /dev/null and b/frontend/public/favicon/web-app-manifest-192x192.png differ diff --git a/frontend/public/favicon/web-app-manifest-512x512.png b/frontend/public/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000..76db085 Binary files /dev/null and b/frontend/public/favicon/web-app-manifest-512x512.png differ diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/frontend/public/site.webmanifest b/frontend/public/site.webmanifest new file mode 100644 index 0000000..ccf313a --- /dev/null +++ b/frontend/public/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "MyWebSite", + "short_name": "MySite", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..351f186 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/frontend/src/assets/styles.css b/frontend/src/assets/styles.css new file mode 100644 index 0000000..731903f --- /dev/null +++ b/frontend/src/assets/styles.css @@ -0,0 +1,36 @@ +/* Base y fuente */ +html, +body { + margin: 0; + padding: 0; + height: 100%; + background: #121217; + color: #e0e4e8; + font-family: "Segoe UI Variable", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + margin: 0; + padding: 0; + height: 100vh; + background-color: #121217; +} + +/* Responsive */ +@media (max-width: 768px) { + .layout-container { + flex-direction: column; + } + + .sidebar { + width: 100% !important; + border-right: none; + border-bottom: 1px solid #2c2e34; + } + + .main-content { + width: 100% !important; + } +} diff --git a/frontend/src/components/ChatForm.vue b/frontend/src/components/ChatForm.vue new file mode 100644 index 0000000..2dfe56f --- /dev/null +++ b/frontend/src/components/ChatForm.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/frontend/src/components/ChatLayout.vue b/frontend/src/components/ChatLayout.vue new file mode 100644 index 0000000..e778757 --- /dev/null +++ b/frontend/src/components/ChatLayout.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/frontend/src/components/ChatMain.vue b/frontend/src/components/ChatMain.vue new file mode 100644 index 0000000..8b7c320 --- /dev/null +++ b/frontend/src/components/ChatMain.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/frontend/src/components/ChatMessages.vue b/frontend/src/components/ChatMessages.vue new file mode 100644 index 0000000..78684a8 --- /dev/null +++ b/frontend/src/components/ChatMessages.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/frontend/src/components/ChatSidebar.vue b/frontend/src/components/ChatSidebar.vue new file mode 100644 index 0000000..1106762 --- /dev/null +++ b/frontend/src/components/ChatSidebar.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..a81cf37 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,5 @@ +import { createApp } from "vue" +import App from "./App.vue" +import "./assets/styles.css" + +createApp(App).mount("#app") diff --git a/frontend/src/services/chatService.js b/frontend/src/services/chatService.js new file mode 100644 index 0000000..d9a77b6 --- /dev/null +++ b/frontend/src/services/chatService.js @@ -0,0 +1,63 @@ +class ChatService { + async getChats() { + try { + const response = await fetch("/api/v1/chats", { method: "GET" }) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error("Error fetching chats:", error) + throw error + } + } + + async createChat() { + try { + const response = await fetch("/api/v1/chats", { + method: "POST", + }) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.text() + } catch (error) { + console.error("Error creating chat:", error) + throw error + } + } + + async getChatMessages(chatId) { + try { + const response = await fetch(`/api/v1/chats/${chatId}`) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error("Error fetching messages:", error) + throw error + } + } + + async sendMessage(chatId, prompt) { + try { + const response = await fetch(`/api/v1/chats/${chatId}`, { + method: "PUT", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: new URLSearchParams({ prompt }), + }) + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + return await response.json() + } catch (error) { + console.error("Error sending message:", error) + throw error + } + } +} + +export const chatService = new ChatService() diff --git a/frontend/src/utils/dateUtils.ts b/frontend/src/utils/dateUtils.ts new file mode 100644 index 0000000..95130bc --- /dev/null +++ b/frontend/src/utils/dateUtils.ts @@ -0,0 +1,14 @@ +export const dateUtils = { + formatDate(date) { + if (!date) return "" + + const d = new Date(date) + const day = d.getDate().toString().padStart(2, "0") + const month = (d.getMonth() + 1).toString().padStart(2, "0") + const year = d.getFullYear() + const hours = d.getHours().toString().padStart(2, "0") + const minutes = d.getMinutes().toString().padStart(2, "0") + + return `${day}/${month}/${year} ${hours}:${minutes}` + }, +} diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..3e6399d --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from "vite" +import vue from "@vitejs/plugin-vue" + +export default defineConfig({ + plugins: [vue()], + server: { + port: 3000, + proxy: { + "/api": { + target: "http://localhost:8080", + changeOrigin: true, + }, + }, + }, +})