From 6155d729dd66710bf3f14942ea2eeaceef147af5 Mon Sep 17 00:00:00 2001 From: butschster Date: Tue, 31 Mar 2026 11:58:33 +0400 Subject: [PATCH 1/4] feat: add Sentry v2 structured storage, parser, and REST API Parse Sentry envelopes into typed tables (error events, exceptions, breadcrumbs, traces, transactions, spans, logs) with fingerprint-based grouping, span classification for service map, and 7 new REST endpoints. Transactions and standalone spans/logs are stored in structured tables only and do not create canonical feed events. Adds FRONTEND_DIR env var to serve frontend from disk during development. --- docker-compose.yaml | 9 + internal/app/app.go | 18 +- .../frontend/dist/assets/@vue-D49oQ32p.js | 29 + .../dist/assets/@vue-flow-K9X6_1I3.js | 26 + modules/sentry/api.go | 94 ++++ modules/sentry/api_exceptions.go | 456 ++++++++++++++++ modules/sentry/api_logs.go | 92 ++++ modules/sentry/api_service_map.go | 146 +++++ modules/sentry/api_test.go | 428 +++++++++++++++ modules/sentry/api_traces.go | 229 ++++++++ modules/sentry/embed.go | 6 + modules/sentry/envelope.go | 71 +++ modules/sentry/fingerprint.go | 31 ++ modules/sentry/handler.go | 257 +++++++-- modules/sentry/handler_test.go | 6 +- ...00020_create_sentry_error_events_table.sql | 23 + ..._000021_create_sentry_exceptions_table.sql | 14 + ...000022_create_sentry_breadcrumbs_table.sql | 13 + ...1_01_000023_create_sentry_traces_table.sql | 7 + ...00024_create_sentry_transactions_table.sql | 20 + ...01_01_000025_create_sentry_spans_table.sql | 24 + ..._01_01_000026_create_sentry_logs_table.sql | 15 + modules/sentry/module.go | 22 +- modules/sentry/span_classifier.go | 60 +++ modules/sentry/storage_test.go | 507 ++++++++++++++++++ modules/sentry/store_error.go | 171 ++++++ modules/sentry/store_log.go | 86 +++ modules/sentry/store_transaction.go | 281 ++++++++++ modules/sentry/types.go | 175 ++++++ 29 files changed, 3267 insertions(+), 49 deletions(-) create mode 100644 internal/frontend/dist/assets/@vue-D49oQ32p.js create mode 100644 internal/frontend/dist/assets/@vue-flow-K9X6_1I3.js create mode 100644 modules/sentry/api.go create mode 100644 modules/sentry/api_exceptions.go create mode 100644 modules/sentry/api_logs.go create mode 100644 modules/sentry/api_service_map.go create mode 100644 modules/sentry/api_test.go create mode 100644 modules/sentry/api_traces.go create mode 100644 modules/sentry/embed.go create mode 100644 modules/sentry/envelope.go create mode 100644 modules/sentry/fingerprint.go create mode 100644 modules/sentry/migrations/2024_01_01_000020_create_sentry_error_events_table.sql create mode 100644 modules/sentry/migrations/2024_01_01_000021_create_sentry_exceptions_table.sql create mode 100644 modules/sentry/migrations/2024_01_01_000022_create_sentry_breadcrumbs_table.sql create mode 100644 modules/sentry/migrations/2024_01_01_000023_create_sentry_traces_table.sql create mode 100644 modules/sentry/migrations/2024_01_01_000024_create_sentry_transactions_table.sql create mode 100644 modules/sentry/migrations/2024_01_01_000025_create_sentry_spans_table.sql create mode 100644 modules/sentry/migrations/2024_01_01_000026_create_sentry_logs_table.sql create mode 100644 modules/sentry/span_classifier.go create mode 100644 modules/sentry/storage_test.go create mode 100644 modules/sentry/store_error.go create mode 100644 modules/sentry/store_log.go create mode 100644 modules/sentry/store_transaction.go create mode 100644 modules/sentry/types.go diff --git a/docker-compose.yaml b/docker-compose.yaml index 42d1648..c67b908 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -8,6 +8,10 @@ services: - "${SMTP_PORT:-1025}:1025" # SMTP - "${VAR_DUMPER_PORT:-9912}:9912" # VarDumper - "${MONOLOG_PORT:-9913}:9913" # Monolog + volumes: + - ../frontend/dist:/app/frontend/dist:ro # Mount local frontend build for development + environment: + FRONTEND_DIR: /app/frontend/dist # Serve from mounted volume instead of embedded networks: - buggregator @@ -40,12 +44,17 @@ services: RAY_PORT: 8000 VAR_DUMPER_SERVER: buggregator:9912 SENTRY_LARAVEL_DSN: http://sentry@buggregator:8000/default + SENTRY_TRACES_SAMPLE_RATE: "1.0" LOG_SOCKET_URL: buggregator:9913 INSPECTOR_URL: http://inspector@buggregator:8000 INSPECTOR_API_KEY: test PROFILER_ENDPOINT: http://profiler@buggregator:8000 HTTP_DUMP_ENDPOINT: http://http-dump@buggregator:8000 SMS_ENDPOINT: http://buggregator:8000/sms + volumes: + - ../examples/app:/app/app:ro + - ../examples/routes:/app/routes:ro + - ../examples/config/sentry.php:/app/config/sentry.php:ro networks: - buggregator diff --git a/internal/app/app.go b/internal/app/app.go index 0b5dfa6..98f1a30 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -162,11 +162,19 @@ func (a *App) Run() { mux.HandleFunc("GET /connection/websocket", a.hub.HandleUpgrade) mux.HandleFunc("GET /ws", a.hub.HandleUpgrade) - // Prepare embedded frontend filesystem. - frontendFS, err := fs.Sub(frontend.Dist, "dist") - if err != nil { - slog.Error("failed to load frontend", "err", err) - os.Exit(1) + // Prepare frontend filesystem. + // When FRONTEND_DIR is set, serve from disk (for development); otherwise use embedded build. + var frontendFS fs.FS + if dir := os.Getenv("FRONTEND_DIR"); dir != "" { + slog.Info("serving frontend from disk", "dir", dir) + frontendFS = os.DirFS(dir) + } else { + var err error + frontendFS, err = fs.Sub(frontend.Dist, "dist") + if err != nil { + slog.Error("failed to load frontend", "err", err) + os.Exit(1) + } } // Register ingestion pipeline + frontend fallback as catch-all. diff --git a/internal/frontend/dist/assets/@vue-D49oQ32p.js b/internal/frontend/dist/assets/@vue-D49oQ32p.js new file mode 100644 index 0000000..103abba --- /dev/null +++ b/internal/frontend/dist/assets/@vue-D49oQ32p.js @@ -0,0 +1,29 @@ +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Xe(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const B=Object.freeze({}),Rt=Object.freeze([]),de=()=>{},ki=()=>!1,cn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$n=e=>e.startsWith("onUpdate:"),re=Object.assign,Ur=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ui=Object.prototype.hasOwnProperty,W=(e,t)=>Ui.call(e,t),M=Array.isArray,mt=e=>fn(e)==="[object Map]",Gn=e=>fn(e)==="[object Set]",fs=e=>fn(e)==="[object Date]",R=e=>typeof e=="function",Z=e=>typeof e=="string",Re=e=>typeof e=="symbol",G=e=>e!==null&&typeof e=="object",Br=e=>(G(e)||R(e))&&R(e.then)&&R(e.catch),no=Object.prototype.toString,fn=e=>no.call(e),Kr=e=>fn(e).slice(8,-1),ro=e=>fn(e)==="[object Object]",Wr=e=>Z(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Yt=Xe(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bi=Xe("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),qn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ki=/-(\w)/g,pe=qn(e=>e.replace(Ki,(t,n)=>n?n.toUpperCase():"")),Wi=/\B([A-Z])/g,We=qn(e=>e.replace(Wi,"-$1").toLowerCase()),St=qn(e=>e.charAt(0).toUpperCase()+e.slice(1)),dt=qn(e=>e?`on${St(e)}`:""),ve=(e,t)=>!Object.is(e,t),Mt=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},Mn=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Gi=e=>{const t=Z(e)?Number(e):NaN;return isNaN(t)?e:t};let as;const an=()=>as||(as=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Gr(e){if(M(e)){const t={};for(let n=0;n{if(n){const r=n.split(Ji);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function qr(e){let t="";if(Z(e))t=e;else if(M(e))for(let n=0;nJn(n,t))}const oo=e=>!!(e&&e.__v_isRef===!0),ll=e=>Z(e)?e:e==null?"":M(e)||G(e)&&(e.toString===no||!R(e.toString))?oo(e)?ll(e.value):JSON.stringify(e,io,2):String(e),io=(e,t)=>oo(t)?io(e,t.value):mt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[fr(r,o)+" =>"]=s,n),{})}:Gn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>fr(n))}:Re(t)?fr(t):G(t)&&!M(t)&&!ro(t)?String(t):t,fr=(e,t="")=>{var n;return Re(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function $e(e,...t){console.warn(`[Vue warn] ${e}`,...t)}let _e;class lo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(Qt){let t=Qt;for(Qt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;zt;){let t=zt;for(zt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function uo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function po(e){let t,n=e.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),zr(r),fl(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function xr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ho(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ho(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===en))return;e.globalVersion=en;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!xr(e)){e.flags&=-3;return}const n=J,r=Pe;J=e,Pe=!0;try{uo(e);const s=e.fn(e._value);(t.version===0||ve(s,e._value))&&(e._value=s,t.version++)}catch(s){throw t.version++,s}finally{J=n,Pe=r,po(e),e.flags&=-3}}function zr(e,t=!1){const{dep:n,prevSub:r,nextSub:s}=e;if(r&&(r.nextSub=s,e.prevSub=void 0),s&&(s.prevSub=r,e.nextSub=void 0),n.subsHead===e&&(n.subsHead=s),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)zr(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function fl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Pe=!0;const go=[];function Ze(){go.push(Pe),Pe=!1}function et(){const e=go.pop();Pe=e===void 0?!0:e}function us(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=J;J=void 0;try{t()}finally{J=n}}}let en=0;class al{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Yn{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.subsHead=void 0}track(t){if(!J||!Pe||J===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==J)n=this.activeLink=new al(J,this),J.deps?(n.prevDep=J.depsTail,J.depsTail.nextDep=n,J.depsTail=n):J.deps=J.depsTail=n,mo(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=J.depsTail,n.nextDep=void 0,J.depsTail.nextDep=n,J.depsTail=n,J.deps===n&&(J.deps=r)}return J.onTrack&&J.onTrack(re({effect:J},t)),n}trigger(t){this.version++,en++,this.notify(t)}notify(t){Jr();try{for(let n=this.subsHead;n;n=n.nextSub)n.sub.onTrigger&&!(n.sub.flags&8)&&n.sub.onTrigger(re({effect:n.sub},t));for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Yr()}}}function mo(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)mo(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subsHead===void 0&&(e.dep.subsHead=e),e.dep.subs=e}}const Pn=new WeakMap,yt=Symbol("Object iterate"),Sr=Symbol("Map keys iterate"),tn=Symbol("Array iterate");function fe(e,t,n){if(Pe&&J){let r=Pn.get(e);r||Pn.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new Yn),s.map=r,s.key=n),s.track({target:e,type:t,key:n})}}function ke(e,t,n,r,s,o){const i=Pn.get(e);if(!i){en++;return}const l=c=>{c&&c.trigger({target:e,type:t,key:n,newValue:r,oldValue:s,oldTarget:o})};if(Jr(),t==="clear")i.forEach(l);else{const c=M(e),p=c&&Wr(n);if(c&&n==="length"){const u=Number(r);i.forEach((a,h)=>{(h==="length"||h===tn||!Re(h)&&h>=u)&&l(a)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),p&&l(i.get(tn)),t){case"add":c?p&&l(i.get("length")):(l(i.get(yt)),mt(e)&&l(i.get(Sr)));break;case"delete":c||(l(i.get(yt)),mt(e)&&l(i.get(Sr)));break;case"set":mt(e)&&l(i.get(yt));break}}Yr()}function ul(e,t){const n=Pn.get(e);return n&&n.get(t)}function Et(e){const t=L(e);return t===e?t:(fe(t,"iterate",tn),Te(e)?t:t.map(ue))}function zn(e){return fe(e=L(e),"iterate",tn),e}const dl={__proto__:null,[Symbol.iterator](){return ur(this,Symbol.iterator,ue)},concat(...e){return Et(this).concat(...e.map(t=>M(t)?Et(t):t))},entries(){return ur(this,"entries",e=>(e[1]=ue(e[1]),e))},every(e,t){return qe(this,"every",e,t,void 0,arguments)},filter(e,t){return qe(this,"filter",e,t,n=>n.map(ue),arguments)},find(e,t){return qe(this,"find",e,t,ue,arguments)},findIndex(e,t){return qe(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return qe(this,"findLast",e,t,ue,arguments)},findLastIndex(e,t){return qe(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return qe(this,"forEach",e,t,void 0,arguments)},includes(...e){return dr(this,"includes",e)},indexOf(...e){return dr(this,"indexOf",e)},join(e){return Et(this).join(e)},lastIndexOf(...e){return dr(this,"lastIndexOf",e)},map(e,t){return qe(this,"map",e,t,void 0,arguments)},pop(){return Bt(this,"pop")},push(...e){return Bt(this,"push",e)},reduce(e,...t){return ds(this,"reduce",e,t)},reduceRight(e,...t){return ds(this,"reduceRight",e,t)},shift(){return Bt(this,"shift")},some(e,t){return qe(this,"some",e,t,void 0,arguments)},splice(...e){return Bt(this,"splice",e)},toReversed(){return Et(this).toReversed()},toSorted(e){return Et(this).toSorted(e)},toSpliced(...e){return Et(this).toSpliced(...e)},unshift(...e){return Bt(this,"unshift",e)},values(){return ur(this,"values",ue)}};function ur(e,t,n){const r=zn(e),s=r[t]();return r!==e&&!Te(e)&&(s._next=s.next,s.next=()=>{const o=s._next();return o.value&&(o.value=n(o.value)),o}),s}const pl=Array.prototype;function qe(e,t,n,r,s,o){const i=zn(e),l=i!==e&&!Te(e),c=i[t];if(c!==pl[t]){const a=c.apply(e,o);return l?ue(a):a}let p=n;i!==e&&(l?p=function(a,h){return n.call(this,ue(a),h,e)}:n.length>2&&(p=function(a,h){return n.call(this,a,h,e)}));const u=c.call(i,p,r);return l&&s?s(u):u}function ds(e,t,n,r){const s=zn(e);let o=n;return s!==e&&(Te(e)?n.length>3&&(o=function(i,l,c){return n.call(this,i,l,c,e)}):o=function(i,l,c){return n.call(this,i,ue(l),c,e)}),s[t](o,...r)}function dr(e,t,n){const r=L(e);fe(r,"iterate",tn);const s=r[t](...n);return(s===-1||s===!1)&&nn(n[0])?(n[0]=L(n[0]),r[t](...n)):s}function Bt(e,t,n=[]){Ze(),Jr();const r=L(e)[t].apply(e,n);return Yr(),et(),r}const hl=Xe("__proto__,__v_isRef,__isVue"),yo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Re));function gl(e){Re(e)||(e=String(e));const t=L(this);return fe(t,"has",e),t.hasOwnProperty(e)}class bo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n==="__v_skip")return t.__v_skip;const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?To:So:o?xo:wo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=M(t);if(!s){let c;if(i&&(c=dl[n]))return c;if(n==="hasOwnProperty")return gl}const l=Reflect.get(t,n,oe(t)?t:r);return(Re(n)?yo.has(n):hl(n))||(s||fe(t,"get",n),o)?l:oe(l)?i&&Wr(n)?l:l.value:G(l)?s?Co(l):Qr(l):l}}class _o extends bo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=Qe(o);if(!Te(r)&&!Qe(r)&&(o=L(o),r=L(r)),!M(t)&&oe(o)&&!oe(r))return c?!1:(o.value=r,!0)}const i=M(t)&&Wr(n)?Number(n)e,yn=e=>Reflect.getPrototypeOf(e);function vl(e,t,n){return function(...r){const s=this.__v_raw,o=L(s),i=mt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,p=s[e](...r),u=n?Tr:t?Cr:ue;return!t&&fe(o,"iterate",c?Sr:yt),{next(){const{value:a,done:h}=p.next();return h?{value:a,done:h}:{value:l?[u(a[0]),u(a[1])]:u(a),done:h}},[Symbol.iterator](){return this}}}}function bn(e){return function(...t){{const n=t[0]?`on key "${t[0]}" `:"";$e(`${St(e)} operation ${n}failed: target is readonly.`,L(this))}return e==="delete"?!1:e==="clear"?void 0:this}}function wl(e,t){const n={get(s){const o=this.__v_raw,i=L(o),l=L(s);e||(ve(s,l)&&fe(i,"get",s),fe(i,"get",l));const{has:c}=yn(i),p=t?Tr:e?Cr:ue;if(c.call(i,s))return p(o.get(s));if(c.call(i,l))return p(o.get(l));o!==i&&o.get(s)},get size(){const s=this.__v_raw;return!e&&fe(L(s),"iterate",yt),Reflect.get(s,"size",s)},has(s){const o=this.__v_raw,i=L(o),l=L(s);return e||(ve(s,l)&&fe(i,"has",s),fe(i,"has",l)),s===l?o.has(s):o.has(s)||o.has(l)},forEach(s,o){const i=this,l=i.__v_raw,c=L(l),p=t?Tr:e?Cr:ue;return!e&&fe(c,"iterate",yt),l.forEach((u,a)=>s.call(o,p(u),p(a),i))}};return re(n,e?{add:bn("add"),set:bn("set"),delete:bn("delete"),clear:bn("clear")}:{add(s){!t&&!Te(s)&&!Qe(s)&&(s=L(s));const o=L(this);return yn(o).has.call(o,s)||(o.add(s),ke(o,"add",s,s)),this},set(s,o){!t&&!Te(o)&&!Qe(o)&&(o=L(o));const i=L(this),{has:l,get:c}=yn(i);let p=l.call(i,s);p?ps(i,l,s):(s=L(s),p=l.call(i,s));const u=c.call(i,s);return i.set(s,o),p?ve(o,u)&&ke(i,"set",s,o,u):ke(i,"add",s,o),this},delete(s){const o=L(this),{has:i,get:l}=yn(o);let c=i.call(o,s);c?ps(o,i,s):(s=L(s),c=i.call(o,s));const p=l?l.call(o,s):void 0,u=o.delete(s);return c&&ke(o,"delete",s,void 0,p),u},clear(){const s=L(this),o=s.size!==0,i=mt(s)?new Map(s):new Set(s),l=s.clear();return o&&ke(s,"clear",void 0,void 0,i),l}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=vl(s,e,t)}),n}function Qn(e,t){const n=wl(e,t);return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(W(n,s)&&s in r?n:r,s,o)}const xl={get:Qn(!1,!1)},Sl={get:Qn(!1,!0)},Tl={get:Qn(!0,!1)},Cl={get:Qn(!0,!0)};function ps(e,t,n){const r=L(n);if(r!==n&&t.call(e,r)){const s=Kr(e);$e(`Reactive ${s} contains both the raw and reactive versions of the same object${s==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}const wo=new WeakMap,xo=new WeakMap,So=new WeakMap,To=new WeakMap;function Ol(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function El(e){return e.__v_skip||!Object.isExtensible(e)?0:Ol(Kr(e))}function Qr(e){return Qe(e)?e:Xn(e,!1,ml,xl,wo)}function Al(e){return Xn(e,!1,bl,Sl,xo)}function Co(e){return Xn(e,!0,yl,Tl,So)}function Be(e){return Xn(e,!0,_l,Cl,To)}function Xn(e,t,n,r,s){if(!G(e))return $e(`value cannot be made ${t?"readonly":"reactive"}: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=El(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function bt(e){return Qe(e)?bt(e.__v_raw):!!(e&&e.__v_isReactive)}function Qe(e){return!!(e&&e.__v_isReadonly)}function Te(e){return!!(e&&e.__v_isShallow)}function nn(e){return e?!!e.__v_raw:!1}function L(e){const t=e&&e.__v_raw;return t?L(t):e}function $l(e){return!W(e,"__v_skip")&&Object.isExtensible(e)&&In(e,"__v_skip",!0),e}const ue=e=>G(e)?Qr(e):e,Cr=e=>G(e)?Co(e):e;function oe(e){return e?e.__v_isRef===!0:!1}function Or(e){return Oo(e,!1)}function xa(e){return Oo(e,!0)}function Oo(e,t){return oe(e)?e:new Il(e,t)}class Il{constructor(t,n){this.dep=new Yn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:L(t),this._value=n?t:ue(t),this.__v_isShallow=n}get value(){return this.dep.track({target:this,type:"get",key:"value"}),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Te(t)||Qe(t);t=r?t:L(t),ve(t,n)&&(this._rawValue=t,this._value=r?t:ue(t),this.dep.trigger({target:this,type:"set",key:"value",newValue:t,oldValue:n}))}}function Eo(e){return oe(e)?e.value:e}function Sa(e){return R(e)?e():Eo(e)}const Ml={get:(e,t,n)=>t==="__v_raw"?e:Eo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return oe(s)&&!oe(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Ao(e){return bt(e)?e:new Proxy(e,Ml)}class Pl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Yn,{get:r,set:s}=t(n.track.bind(n),n.trigger.bind(n));this._get=r,this._set=s}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Rl(e){return new Pl(e)}function Ta(e){nn(e)||$e("toRefs() expects a reactive object but received a plain one.");const t=M(e)?new Array(e.length):{};for(const n in e)t[n]=$o(e,n);return t}class Fl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ul(L(this._object),this._key)}}class Dl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ca(e,t,n){return oe(e)?e:R(e)?new Dl(e):G(e)&&arguments.length>1?$o(e,t,n):Or(e)}function $o(e,t,n){const r=e[t];return oe(r)?r:new Fl(e,t,n)}class Ll{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Yn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=en-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&J!==this)return ao(this,!0),!0}get value(){const t=this.dep.track({target:this,type:"get",key:"value"});return ho(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter?this.setter(t):$e("Write operation failed: computed value is readonly")}}function Nl(e,t,n=!1){let r,s;return R(e)?r=e:(r=e.get,s=e.set),new Ll(r,s,n)}const _n={},Rn=new WeakMap;let pt;function jl(e,t=!1,n=pt){if(n){let r=Rn.get(n);r||Rn.set(n,r=[]),r.push(e)}else t||$e("onWatcherCleanup() was called when there was no active watcher to associate with.")}function Vl(e,t,n=B){const{immediate:r,deep:s,once:o,scheduler:i,augmentJob:l,call:c}=n,p=$=>{(n.onWarn||$e)("Invalid watch source: ",$,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},u=$=>s?$:Te($)||s===!1||s===0?ze($,1):ze($);let a,h,m,T,E=!1,ee=!1;if(oe(e)?(h=()=>e.value,E=Te(e)):bt(e)?(h=()=>u(e),E=!0):M(e)?(ee=!0,E=e.some($=>bt($)||Te($)),h=()=>e.map($=>{if(oe($))return $.value;if(bt($))return u($);if(R($))return c?c($,2):$();p($)})):R(e)?t?h=c?()=>c(e,2):e:h=()=>{if(m){Ze();try{m()}finally{et()}}const $=pt;pt=a;try{return c?c(e,3,[T]):e(T)}finally{pt=$}}:(h=de,p(e)),t&&s){const $=h,j=s===!0?1/0:s;h=()=>ze($(),j)}const N=cl(),Q=()=>{a.stop(),N&&N.active&&Ur(N.effects,a)};if(o&&t){const $=t;t=(...j)=>{$(...j),Q()}}let V=ee?new Array(e.length).fill(_n):_n;const se=$=>{if(!(!(a.flags&1)||!a.dirty&&!$))if(t){const j=a.run();if(s||E||(ee?j.some((ne,q)=>ve(ne,V[q])):ve(j,V))){m&&m();const ne=pt;pt=a;try{const q=[j,V===_n?void 0:ee&&V[0]===_n?[]:V,T];c?c(t,3,q):t(...q),V=j}finally{pt=ne}}}else a.run()};return l&&l(se),a=new co(h),a.scheduler=i?()=>i(se,!1):se,T=$=>jl($,!1,a),m=a.onStop=()=>{const $=Rn.get(a);if($){if(c)c($,4);else for(const j of $)j();Rn.delete(a)}},a.onTrack=n.onTrack,a.onTrigger=n.onTrigger,t?r?se(!0):V=a.run():i?i(se.bind(null,!0),!0):a.run(),Q.pause=a.pause.bind(a),Q.resume=a.resume.bind(a),Q.stop=Q,Q}function ze(e,t=1/0,n){if(t<=0||!G(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,oe(e))ze(e.value,t,n);else if(M(e))for(let r=0;r{ze(r,t,n)});else if(ro(e)){for(const r in e)ze(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&ze(e[r],t,n)}return e}/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const _t=[];function xn(e){_t.push(e)}function Sn(){_t.pop()}let pr=!1;function _(e,...t){if(pr)return;pr=!0,Ze();const n=_t.length?_t[_t.length-1].component:null,r=n&&n.appContext.config.warnHandler,s=Hl();if(r)jt(r,n,11,[e+t.map(o=>{var i,l;return(l=(i=o.toString)==null?void 0:i.call(o))!=null?l:JSON.stringify(o)}).join(""),n&&n.proxy,s.map(({vnode:o})=>`at <${or(n,o.type)}>`).join(` +`),s]);else{const o=[`[Vue warn]: ${e}`,...t];s.length&&o.push(` +`,...kl(s)),console.warn(...o)}et(),pr=!1}function Hl(){let e=_t[_t.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const r=e.component&&e.component.parent;e=r&&r.vnode}return t}function kl(e){const t=[];return e.forEach((n,r)=>{t.push(...r===0?[]:[` +`],...Ul(n))}),t}function Ul({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",r=e.component?e.component.parent==null:!1,s=` at <${or(e.component,e.type,r)}`,o=">"+n;return e.props?[s,...Bl(e.props),o]:[s+o]}function Bl(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(r=>{t.push(...Io(r,e[r]))}),n.length>3&&t.push(" ..."),t}function Io(e,t,n){return Z(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:oe(t)?(t=Io(e,L(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):R(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=L(t),n?t:[`${e}=`,t])}function Kl(e,t){e!==void 0&&(typeof e!="number"?_(`${t} is not a valid number - got ${JSON.stringify(e)}.`):isNaN(e)&&_(`${t} is NaN - the duration expression might be incorrect.`))}const Xr={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function jt(e,t,n,r){try{return r?e(...r):e()}catch(s){un(s,t,n)}}function Fe(e,t,n,r){if(R(e)){const s=jt(e,t,n,r);return s&&Br(s)&&s.catch(o=>{un(o,t,n)}),s}if(M(e)){const s=[];for(let o=0;o>>1,s=we[r],o=rn(s);o=rn(n)?we.push(e):we.splice(ql(t),0,e),e.flags|=1,Ro()}}function Ro(){Fn||(Fn=Mo.then(Lo))}function Fo(e){M(e)?Ft.push(...e):st&&e.id===-1?st.splice(Pt+1,0,e):e.flags&1||(Ft.push(e),e.flags|=1),Ro()}function hs(e,t,n=He+1){for(t=t||new Map;nrn(n)-rn(r));if(Ft.length=0,st){st.push(...t);return}for(st=t,e=e||new Map,Pt=0;Pte.id==null?e.flags&2?-1:1/0:e.id;function Lo(e){e=e||new Map;const t=n=>Zr(e,n);try{for(He=0;HeGl){const r=t.i,s=r&&os(r.type);return un(`Maximum recursive updates exceeded${s?` in component <${s}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return e.set(t,n+1),!1}let Me=!1;const Tn=new Map;an().__VUE_HMR_RUNTIME__={createRecord:hr(No),rerender:hr(zl),reload:hr(Ql)};const Tt=new Map;function Jl(e){const t=e.type.__hmrId;let n=Tt.get(t);n||(No(t,e.type),n=Tt.get(t)),n.instances.add(e)}function Yl(e){Tt.get(e.type.__hmrId).instances.delete(e)}function No(e,t){return Tt.has(e)?!1:(Tt.set(e,{initialDef:Dn(t),instances:new Set}),!0)}function Dn(e){return Fi(e)?e.__vccOpts:e}function zl(e,t){const n=Tt.get(e);n&&(n.initialDef.render=t,[...n.instances].forEach(r=>{t&&(r.render=t,Dn(r.type).render=t),r.renderCache=[],Me=!0,r.update(),Me=!1}))}function Ql(e,t){const n=Tt.get(e);if(!n)return;t=Dn(t),gs(n.initialDef,t);const r=[...n.instances];for(let s=0;s{Me=!0,o.parent.update(),Me=!1,l.delete(o)}):o.appContext.reload?o.appContext.reload():typeof window<"u"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required."),o.root.ce&&o!==o.root&&o.root.ce._removeChildStyle(i)}Fo(()=>{Tn.clear()})}function gs(e,t){re(e,t);for(const n in e)n!=="__file"&&!(n in t)&&delete e[n]}function hr(e){return(t,n)=>{try{return e(t,n)}catch(r){console.error(r),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let Ue,qt=[],Er=!1;function dn(e,...t){Ue?Ue.emit(e,...t):Er||qt.push({event:e,args:t})}function jo(e,t){var n,r;Ue=e,Ue?(Ue.enabled=!0,qt.forEach(({event:s,args:o})=>Ue.emit(s,...o)),qt=[]):typeof window<"u"&&window.HTMLElement&&!((r=(n=window.navigator)==null?void 0:n.userAgent)!=null&&r.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(o=>{jo(o,t)}),setTimeout(()=>{Ue||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Er=!0,qt=[])},3e3)):(Er=!0,qt=[])}function Xl(e,t){dn("app:init",e,t,{Fragment:Oe,Text:hn,Comment:ie,Static:Xt})}function Zl(e){dn("app:unmount",e)}const ec=es("component:added"),Vo=es("component:updated"),tc=es("component:removed"),nc=e=>{Ue&&typeof Ue.cleanupBuffer=="function"&&!Ue.cleanupBuffer(e)&&tc(e)};/*! #__NO_SIDE_EFFECTS__ */function es(e){return t=>{dn(e,t.appContext.app,t.uid,t.parent?t.parent.uid:void 0,t)}}const rc=Ho("perf:start"),sc=Ho("perf:end");function Ho(e){return(t,n,r)=>{dn(e,t.appContext.app,t.uid,t,n,r)}}function oc(e,t,n){dn("component:emit",e.appContext.app,e,t,n)}let le=null,ko=null;function Ln(e){const t=le;return le=e,ko=e&&e.type.__scopeId||null,t}function ic(e,t=le,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&Ps(-1);const o=Ln(t);let i;try{i=e(...s)}finally{Ln(o),r._d&&Ps(1)}return Vo(t),i};return r._n=!0,r._c=!0,r._d=!0,r}function Uo(e){Bi(e)&&_("Do not use built-in directive ids as custom directive id: "+e)}function Oa(e,t){if(le===null)return _("withDirectives can only be used inside render functions."),e;const n=sr(le),r=e.dirs||(e.dirs=[]);for(let s=0;se.__isTeleport,vt=e=>e&&(e.disabled||e.disabled===""),ms=e=>e&&(e.defer||e.defer===""),ys=e=>typeof SVGElement<"u"&&e instanceof SVGElement,bs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ar=(e,t)=>{const n=e&&e.to;if(Z(n))if(t){const r=t(n);return!r&&!vt(e)&&_(`Failed to locate Teleport target with selector "${n}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`),r}else return _("Current renderer does not support string target for Teleports. (missing querySelector renderer option)"),null;else return!n&&!vt(e)&&_(`Invalid Teleport target: ${n}`),n},Wo={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,p){const{mc:u,pc:a,pbc:h,o:{insert:m,querySelector:T,createText:E,createComment:ee}}=p,N=vt(t.props);let{shapeFlag:Q,children:V,dynamicChildren:se}=t;if(Me&&(c=!1,se=null),e==null){const $=t.el=ee("teleport start"),j=t.anchor=ee("teleport end");m($,n,r),m(j,n,r);const ne=(I,H)=>{Q&16&&(s&&s.isCE&&(s.ce._teleportTarget=I),u(V,I,H,s,o,i,l,c))},q=()=>{const I=t.target=Ar(t.props,T),H=Go(I,t,E,m);I?(i!=="svg"&&ys(I)?i="svg":i!=="mathml"&&bs(I)&&(i="mathml"),N||(ne(I,H),Cn(t,!1))):N||_("Invalid Teleport target on mount:",I,`(${typeof I})`)};N&&(ne(n,j),Cn(t,!0)),ms(t.props)?be(()=>{q(),t.el.__isMounted=!0},o):q()}else{if(ms(t.props)&&!e.el.__isMounted){be(()=>{Wo.process(e,t,n,r,s,o,i,l,c,p),delete e.el.__isMounted},o);return}t.el=e.el,t.targetStart=e.targetStart;const $=t.anchor=e.anchor,j=t.target=e.target,ne=t.targetAnchor=e.targetAnchor,q=vt(e.props),I=q?n:j,H=q?$:ne;if(i==="svg"||ys(j)?i="svg":(i==="mathml"||bs(j))&&(i="mathml"),se?(h(e.dynamicChildren,se,I,s,o,i,l),Hn(e,t,!0)):c||a(e,t,I,H,s,o,i,l,!1),N)q?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):vn(t,n,$,p,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Y=t.target=Ar(t.props,T);Y?vn(t,Y,null,p,0):_("Invalid Teleport target on update:",j,`(${typeof j})`)}else q&&vn(t,j,ne,p,1);Cn(t,N)}},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:p,targetAnchor:u,target:a,props:h}=e;if(a&&(s(p),s(u)),o&&s(c),i&16){const m=o||!vt(h);for(let T=0;T{e.isMounted=!0}),ti(()=>{e.isUnmounting=!0}),e}const Ae=[Function,Array],qo={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ae,onEnter:Ae,onAfterEnter:Ae,onEnterCancelled:Ae,onBeforeLeave:Ae,onLeave:Ae,onAfterLeave:Ae,onLeaveCancelled:Ae,onBeforeAppear:Ae,onAppear:Ae,onAfterAppear:Ae,onAppearCancelled:Ae},Jo=e=>{const t=e.subTree;return t.component?Jo(t.component):t},fc={name:"BaseTransition",props:qo,setup(e,{slots:t}){const n=rr(),r=cc();return()=>{const s=t.default&&Qo(t.default(),!0);if(!s||!s.length)return;const o=Yo(s),i=L(e),{mode:l}=i;if(l&&l!=="in-out"&&l!=="out-in"&&l!=="default"&&_(`invalid mode: ${l}`),r.isLeaving)return gr(o);const c=_s(o);if(!c)return gr(o);let p=$r(c,i,r,n,a=>p=a);c.type!==ie&&sn(c,p);let u=n.subTree&&_s(n.subTree);if(u&&u.type!==ie&&!ht(c,u)&&Jo(n).type!==ie){let a=$r(u,i,r,n);if(sn(u,a),l==="out-in"&&c.type!==ie)return r.isLeaving=!0,a.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete a.afterLeave,u=void 0},gr(o);l==="in-out"&&c.type!==ie?a.delayLeave=(h,m,T)=>{const E=zo(r,u);E[String(u.key)]=u,h[ot]=()=>{m(),h[ot]=void 0,delete p.delayedLeave,u=void 0},p.delayedLeave=()=>{T(),delete p.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}};function Yo(e){let t=e[0];if(e.length>1){let n=!1;for(const r of e)if(r.type!==ie){if(n){_(" can only be used on a single element or component. Use for lists.");break}t=r,n=!0}}return t}const ac=fc;function zo(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function $r(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:p,onAfterEnter:u,onEnterCancelled:a,onBeforeLeave:h,onLeave:m,onAfterLeave:T,onLeaveCancelled:E,onBeforeAppear:ee,onAppear:N,onAfterAppear:Q,onAppearCancelled:V}=t,se=String(e.key),$=zo(n,e),j=(I,H)=>{I&&Fe(I,r,9,H)},ne=(I,H)=>{const Y=H[1];j(I,H),M(I)?I.every(A=>A.length<=1)&&Y():I.length<=1&&Y()},q={mode:i,persisted:l,beforeEnter(I){let H=c;if(!n.isMounted)if(o)H=ee||c;else return;I[ot]&&I[ot](!0);const Y=$[se];Y&&ht(e,Y)&&Y.el[ot]&&Y.el[ot](),j(H,[I])},enter(I){let H=p,Y=u,A=a;if(!n.isMounted)if(o)H=N||p,Y=Q||u,A=V||a;else return;let te=!1;const he=I[wn]=ge=>{te||(te=!0,ge?j(A,[I]):j(Y,[I]),q.delayedLeave&&q.delayedLeave(),I[wn]=void 0)};H?ne(H,[I,he]):he()},leave(I,H){const Y=String(e.key);if(I[wn]&&I[wn](!0),n.isUnmounting)return H();j(h,[I]);let A=!1;const te=I[ot]=he=>{A||(A=!0,H(),he?j(E,[I]):j(T,[I]),I[ot]=void 0,$[Y]===e&&delete $[Y])};$[Y]=e,m?ne(m,[I,te]):te()},clone(I){const H=$r(I,t,n,r,s);return s&&s(H),H}};return q}function gr(e){if(pn(e))return e=Ge(e),e.children=null,e}function _s(e){if(!pn(e))return Ko(e.type)&&e.children?Yo(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&R(n.default))return n.default()}}function sn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,sn(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 Qo(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;oNn(T,t&&(M(t)?t[E]:t),n,r,s));return}if(Dt(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&Nn(e,t,n,r.component.subTree);return}const o=r.shapeFlag&4?sr(r.component):r.el,i=s?null:o,{i:l,r:c}=e;if(!l){_("Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.");return}const p=t&&t.r,u=l.refs===B?l.refs={}:l.refs,a=l.setupState,h=L(a),m=a===B?()=>!1:T=>(W(h,T)&&!oe(h[T])&&_(`Template ref "${T}" used on a non-ref value. It will not work in the production build.`),uc.has(h[T])?!1:W(h,T));if(p!=null&&p!==c&&(Z(p)?(u[p]=null,m(p)&&(a[p]=null)):oe(p)&&(p.value=null)),R(c))jt(c,l,12,[i,u]);else{const T=Z(c),E=oe(c);if(T||E){const ee=()=>{if(e.f){const N=T?m(c)?a[c]:u[c]:c.value;s?M(N)&&Ur(N,o):M(N)?N.includes(o)||N.push(o):T?(u[c]=[o],m(c)&&(a[c]=u[c])):(c.value=[o],e.k&&(u[e.k]=c.value))}else T?(u[c]=i,m(c)&&(a[c]=i)):E?(c.value=i,e.k&&(u[e.k]=i)):_("Invalid template ref type:",c,`(${typeof c})`)};i?(ee.id=-1,be(ee,n)):ee()}else _("Invalid template ref type:",c,`(${typeof c})`)}}an().requestIdleCallback;an().cancelIdleCallback;const Dt=e=>!!e.type.__asyncLoader,pn=e=>e.type.__isKeepAlive;function dc(e,t){Zo(e,"a",t)}function pc(e,t){Zo(e,"da",t)}function Zo(e,t,n=ce){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(er(t,r,n),n){let s=n.parent;for(;s&&s.parent;)pn(s.parent.vnode)&&hc(r,t,n,s),s=s.parent}}function hc(e,t,n,r){const s=er(t,e,r,!0);ni(()=>{Ur(r[t],s)},n)}function er(e,t,n=ce,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ze();const l=gn(n),c=Fe(t,n,e,i);return l(),et(),c});return r?s.unshift(o):s.push(o),o}else{const s=dt(Xr[e].replace(/ hook$/,""));_(`${s} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}const tt=e=>(t,n=ce)=>{(!on||e==="sp")&&er(e,(...r)=>t(...r),n)},gc=tt("bm"),ei=tt("m"),mc=tt("bu"),yc=tt("u"),ti=tt("bum"),ni=tt("um"),bc=tt("sp"),_c=tt("rtg"),vc=tt("rtc");function wc(e,t=ce){er("ec",e,t)}const ri="components";function $a(e,t){return oi(ri,e,!0,t)||e}const si=Symbol.for("v-ndc");function Ia(e){return Z(e)?oi(ri,e,!1)||e:e||si}function oi(e,t,n=!0,r=!1){const s=le||ce;if(s){const o=s.type;{const l=os(o,!1);if(l&&(l===t||l===pe(t)||l===St(pe(t))))return o}const i=vs(s[e]||o[e],t)||vs(s.appContext[e],t);return!i&&r?o:(n&&!i&&_(`Failed to resolve ${e.slice(0,-1)}: ${t} +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.`),i)}else _(`resolve${St(e.slice(0,-1))} can only be used in render() or setup().`)}function vs(e,t){return e&&(e[t]||e[pe(t)]||e[St(pe(t))])}function Ma(e,t,n,r){let s;const o=n&&n[r],i=M(e);if(i||Z(e)){const l=i&&bt(e);let c=!1;l&&(c=!Te(e),e=zn(e)),s=new Array(e.length);for(let p=0,u=e.length;pt(l,c,void 0,o&&o[c]));else{const l=Object.keys(e);s=new Array(l.length);for(let c=0,p=l.length;c1&&(_("SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template."),o=()=>[]),o&&o._c&&(o._d=!1),Lr();const i=o&&ii(o(n)),l=n.key||i&&i.key,c=Nr(Oe,{key:(l&&!Re(l)?l:`_${t}`)+(!i&&r?"_fb":"")},i||(r?r():[]),i&&e._===1?64:-2);return!s&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),o&&o._c&&(o._d=!0),c}function ii(e){return e.some(t=>Ct(t)?!(t.type===ie||t.type===Oe&&!ii(t.children)):!0)?e:null}const Ir=e=>e?Mi(e)?sr(e):Ir(e.parent):null,wt=re(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>Be(e.props),$attrs:e=>Be(e.attrs),$slots:e=>Be(e.slots),$refs:e=>Be(e.refs),$parent:e=>Ir(e.parent),$root:e=>Ir(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ai(e),$forceUpdate:e=>e.f||(e.f=()=>{Zn(e.update)}),$nextTick:e=>e.n||(e.n=Po.bind(e.proxy)),$watch:e=>tf.bind(e)}),ts=e=>e==="_"||e==="$",mr=(e,t)=>e!==B&&!e.__isScriptSetup&&W(e,t),li={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;if(t==="__isVue")return!0;let p;if(t[0]!=="$"){const m=i[t];if(m!==void 0)switch(m){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(mr(r,t))return i[t]=1,r[t];if(s!==B&&W(s,t))return i[t]=2,s[t];if((p=e.propsOptions[0])&&W(p,t))return i[t]=3,o[t];if(n!==B&&W(n,t))return i[t]=4,n[t];Mr&&(i[t]=0)}}const u=wt[t];let a,h;if(u)return t==="$attrs"?(fe(e.attrs,"get",""),kn()):t==="$slots"&&fe(e,"get",t),u(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==B&&W(n,t))return i[t]=4,n[t];if(h=c.config.globalProperties,W(h,t))return h[t];le&&(!Z(t)||t.indexOf("__v")!==0)&&(s!==B&&ts(t[0])&&W(s,t)?_(`Property ${JSON.stringify(t)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`):e===le&&_(`Property ${JSON.stringify(t)} was accessed during render but is not defined on instance.`))},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return mr(s,t)?(s[t]=n,!0):s.__isScriptSetup&&W(s,t)?(_(`Cannot mutate