diff --git a/orchestrator/src/views/AgenteDetail.vue b/orchestrator/src/views/AgenteDetail.vue index b4ea192..983886a 100644 --- a/orchestrator/src/views/AgenteDetail.vue +++ b/orchestrator/src/views/AgenteDetail.vue @@ -182,6 +182,7 @@ async function copiarWidget() { function canalVacio() { return { tipo: 'telegram', bot_token: '', phone_number_id: '', access_token: '', app_secret: '', verify_token: '', + usar_whisper_audio: false, usar_ocr_imagenes: false, } } @@ -206,7 +207,10 @@ async function guardarCanal() { verify_token: canalForm.value.verify_token, } try { - await api.post('/app/umind/canales', { agente_id: agenteIdNum.value, tipo: canalForm.value.tipo, credenciales, activo: true }) + await api.post('/app/umind/canales', { + agente_id: agenteIdNum.value, tipo: canalForm.value.tipo, credenciales, activo: true, + usar_whisper_audio: canalForm.value.usar_whisper_audio, usar_ocr_imagenes: canalForm.value.usar_ocr_imagenes, + }) showCanalForm.value = false await cargarCanales() } catch (e) { @@ -215,7 +219,26 @@ async function guardarCanal() { } async function toggleCanal(c) { - await api.put(`/app/umind/canales/${c.ID}`, { activo: !c.activo, credenciales: {} }) + await api.put(`/app/umind/canales/${c.ID}`, { + activo: !c.activo, credenciales: {}, + usar_whisper_audio: c.usar_whisper_audio, usar_ocr_imagenes: c.usar_ocr_imagenes, + }) + await cargarCanales() +} + +async function toggleCanalWhisper(c) { + await api.put(`/app/umind/canales/${c.ID}`, { + activo: c.activo, credenciales: {}, + usar_whisper_audio: !c.usar_whisper_audio, usar_ocr_imagenes: c.usar_ocr_imagenes, + }) + await cargarCanales() +} + +async function toggleCanalOcr(c) { + await api.put(`/app/umind/canales/${c.ID}`, { + activo: c.activo, credenciales: {}, + usar_whisper_audio: c.usar_whisper_audio, usar_ocr_imagenes: !c.usar_ocr_imagenes, + }) await cargarCanales() } @@ -497,6 +520,16 @@ onMounted(async () => { +
+ + +

Webhook: {{ c.webhook_url }}

@@ -542,6 +575,16 @@ onMounted(async () => { +
+ + +
diff --git a/pkg/models/umind_canal.go b/pkg/models/umind_canal.go index cb61b13..24b1f27 100644 --- a/pkg/models/umind_canal.go +++ b/pkg/models/umind_canal.go @@ -28,6 +28,11 @@ type UmindCanal struct { WebhookSecret string `json:"webhook_secret" gorm:"column:webhook_secret;uniqueIndex;size:40;not null"` CredencialesEnc string `json:"-" gorm:"column:credenciales_enc;type:text"` UltimoError string `json:"ultimo_error" gorm:"column:ultimo_error;type:text"` + // Si están activos, los mensajes de voz/audio e imágenes que llegan por + // este canal se transcriben (Whisper) o se les extrae el texto (OCR) + // antes de pasarlos al agente, en vez de ignorarse. + UsarWhisperAudio bool `json:"usar_whisper_audio" gorm:"column:usar_whisper_audio;default:false"` + UsarOcrImagenes bool `json:"usar_ocr_imagenes" gorm:"column:usar_ocr_imagenes;default:false"` } func (UmindCanal) TableName() string { return "umind_canales" } diff --git a/pkg/services/umind_canal_telegram_service.go b/pkg/services/umind_canal_telegram_service.go index c6167aa..152cefc 100644 --- a/pkg/services/umind_canal_telegram_service.go +++ b/pkg/services/umind_canal_telegram_service.go @@ -1,9 +1,12 @@ package services import ( + "encoding/json" "fmt" + "io" "net/http" "net/url" + "strings" "github.com/sujit-baniya/fiber-boilerplate/pkg/models" ) @@ -37,6 +40,92 @@ func ProcesarMensajeTelegramUmind(canal *models.UmindCanal, chatID int64, texto return (&TelegramService{}).SendMessageWithToken(chatID, respuesta, botToken) } +// ProcesarMediaTelegramUmind atiende notas de voz/audio y fotos entrantes: +// si el canal tiene la conversión habilitada, descarga el archivo vía +// getFile, lo pasa por Whisper/OCR y responde igual que un mensaje de texto. +// Si no está habilitada, se ignora en silencio. +func ProcesarMediaTelegramUmind(canal *models.UmindCanal, chatID int64, fileID, tipo string) error { + agente, err := models.GetUmindAgenteByID(canal.AgenteID) + if err != nil || !agente.Activo { + return fmt.Errorf("agente no encontrado o inactivo: %w", err) + } + credenciales, err := DescifrarCredencialesCanal(canal.CredencialesEnc) + if err != nil { + return fmt.Errorf("credenciales del canal corruptas: %w", err) + } + botToken := credenciales["bot_token"] + if botToken == "" { + return fmt.Errorf("el canal no tiene bot_token configurado") + } + + var texto string + switch tipo { + case "audio": + if !canal.UsarWhisperAudio { + return nil + } + data, err := descargarArchivoTelegram(botToken, fileID) + if err != nil { + return fmt.Errorf("no se pudo descargar el audio de Telegram: %w", err) + } + texto, err = TranscribirAudioSelfHosted(data, "audio.ogg") + if err != nil { + return err + } + case "image": + if !canal.UsarOcrImagenes { + return nil + } + data, err := descargarArchivoTelegram(botToken, fileID) + if err != nil { + return fmt.Errorf("no se pudo descargar la imagen de Telegram: %w", err) + } + texto, err = ExtraerTextoOCR(data, "image/jpeg") + if err != nil { + return err + } + default: + return nil + } + if strings.TrimSpace(texto) == "" { + return fmt.Errorf("no se pudo extraer texto del %s recibido", tipo) + } + + sessionID := fmt.Sprintf("tg:%d", chatID) + respuesta, err := ProcessWidgetMessage(agente, sessionID, texto) + if err != nil { + return fmt.Errorf("error del agente: %w", err) + } + return (&TelegramService{}).SendMessageWithToken(chatID, respuesta, botToken) +} + +// descargarArchivoTelegram resuelve el file_path de un file_id (getFile) y +// descarga el archivo desde el CDN de archivos de Telegram. +func descargarArchivoTelegram(botToken, fileID string) ([]byte, error) { + getFileURL := fmt.Sprintf("https://api.telegram.org/bot%s/getFile?file_id=%s", botToken, url.QueryEscape(fileID)) + resp, err := telegramHTTPClient.Get(getFileURL) + if err != nil { + return nil, fmt.Errorf("no se pudo consultar getFile: %w", err) + } + defer resp.Body.Close() + var out struct { + Result struct { + FilePath string `json:"file_path"` + } `json:"result"` + } + if err := json.NewDecoder(resp.Body).Decode(&out); err != nil || out.Result.FilePath == "" { + return nil, fmt.Errorf("respuesta inesperada de getFile") + } + + fileURL := fmt.Sprintf("https://api.telegram.org/file/bot%s/%s", botToken, out.Result.FilePath) + resp2, err := telegramHTTPClient.Get(fileURL) + if err != nil { + return nil, fmt.Errorf("no se pudo descargar el archivo: %w", err) + } + defer resp2.Body.Close() + return io.ReadAll(io.LimitReader(resp2.Body, 20*1024*1024)) +} + // RegistrarWebhookTelegram le dice a Telegram a qué URL mandar los updates // del bot — se llama una vez al crear el canal (o al reconfigurar el token). func RegistrarWebhookTelegram(botToken, webhookURL string) error { diff --git a/pkg/services/umind_canal_whatsapp_service.go b/pkg/services/umind_canal_whatsapp_service.go index b4b4ef3..c04b9ed 100644 --- a/pkg/services/umind_canal_whatsapp_service.go +++ b/pkg/services/umind_canal_whatsapp_service.go @@ -7,6 +7,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "io" "net/http" "strings" "time" @@ -44,11 +45,67 @@ func ProcesarMensajeWhatsAppUmind(canal *models.UmindCanal, from, texto string) if err != nil || !agente.Activo { return fmt.Errorf("agente no encontrado o inactivo: %w", err) } - credenciales, err := DescifrarCredencialesCanal(canal.CredencialesEnc) if err != nil { return fmt.Errorf("credenciales del canal corruptas: %w", err) } + return responderWhatsApp(agente, credenciales, from, texto) +} + +// ProcesarMediaWhatsAppUmind atiende audios/imágenes entrantes: si el canal +// tiene la conversión habilitada, descarga el archivo desde la Graph API, +// lo pasa por Whisper/OCR y sigue el mismo camino que un mensaje de texto. +// Si la conversión no está habilitada para ese tipo, se ignora en silencio +// (mismo comportamiento de antes de que existiera esta función). +func ProcesarMediaWhatsAppUmind(canal *models.UmindCanal, from, mediaID, tipo string) error { + agente, err := models.GetUmindAgenteByID(canal.AgenteID) + if err != nil || !agente.Activo { + return fmt.Errorf("agente no encontrado o inactivo: %w", err) + } + credenciales, err := DescifrarCredencialesCanal(canal.CredencialesEnc) + if err != nil { + return fmt.Errorf("credenciales del canal corruptas: %w", err) + } + + var texto string + switch tipo { + case "audio": + if !canal.UsarWhisperAudio { + return nil + } + data, _, err := descargarMediaWhatsApp(credenciales["access_token"], mediaID) + if err != nil { + return fmt.Errorf("no se pudo descargar el audio de WhatsApp: %w", err) + } + texto, err = TranscribirAudioSelfHosted(data, "audio.ogg") + if err != nil { + return err + } + case "image": + if !canal.UsarOcrImagenes { + return nil + } + data, mimeType, err := descargarMediaWhatsApp(credenciales["access_token"], mediaID) + if err != nil { + return fmt.Errorf("no se pudo descargar la imagen de WhatsApp: %w", err) + } + if mimeType == "" { + mimeType = "image/jpeg" + } + texto, err = ExtraerTextoOCR(data, mimeType) + if err != nil { + return err + } + default: + return nil + } + if strings.TrimSpace(texto) == "" { + return fmt.Errorf("no se pudo extraer texto del %s recibido", tipo) + } + return responderWhatsApp(agente, credenciales, from, texto) +} + +func responderWhatsApp(agente *models.UmindAgente, credenciales map[string]string, from, texto string) error { phoneNumberID := credenciales["phone_number_id"] accessToken := credenciales["access_token"] if phoneNumberID == "" || accessToken == "" { @@ -64,6 +121,49 @@ func ProcesarMensajeWhatsAppUmind(canal *models.UmindCanal, from, texto string) return enviarMensajeWhatsApp(phoneNumberID, accessToken, from, respuesta) } +// descargarMediaWhatsApp resuelve la URL temporal de un media_id (paso 1) y +// descarga el archivo (paso 2) — la Graph API de WhatsApp requiere ambos, y +// las dos llamadas necesitan el mismo Bearer token del canal. +func descargarMediaWhatsApp(accessToken, mediaID string) ([]byte, string, error) { + if accessToken == "" || mediaID == "" { + return nil, "", fmt.Errorf("access_token/media_id vacíos") + } + metaURL := fmt.Sprintf("https://graph.facebook.com/%s/%s", whatsappGraphAPIVersion, mediaID) + req, err := http.NewRequest(http.MethodGet, metaURL, nil) + if err != nil { + return nil, "", err + } + req.Header.Set("Authorization", "Bearer "+accessToken) + resp, err := umindWhatsappHTTPClient.Do(req) + if err != nil { + return nil, "", fmt.Errorf("no se pudo consultar el media en WhatsApp: %w", err) + } + defer resp.Body.Close() + var meta struct { + URL string `json:"url"` + MimeType string `json:"mime_type"` + } + if err := json.NewDecoder(resp.Body).Decode(&meta); err != nil || meta.URL == "" { + return nil, "", fmt.Errorf("respuesta inesperada al consultar el media de WhatsApp") + } + + req2, err := http.NewRequest(http.MethodGet, meta.URL, nil) + if err != nil { + return nil, "", err + } + req2.Header.Set("Authorization", "Bearer "+accessToken) + resp2, err := umindWhatsappHTTPClient.Do(req2) + if err != nil { + return nil, "", fmt.Errorf("no se pudo descargar el archivo de WhatsApp: %w", err) + } + defer resp2.Body.Close() + data, err := io.ReadAll(io.LimitReader(resp2.Body, 20*1024*1024)) + if err != nil { + return nil, "", err + } + return data, meta.MimeType, nil +} + func enviarMensajeWhatsApp(phoneNumberID, accessToken, to, texto string) error { payload := map[string]interface{}{ "messaging_product": "whatsapp", diff --git a/public/orchestrator/assets/index-CUIRjjam.js b/public/orchestrator/assets/index-CUIRjjam.js deleted file mode 100644 index 16b138e..0000000 --- a/public/orchestrator/assets/index-CUIRjjam.js +++ /dev/null @@ -1,26 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(s){if(s.ep)return;s.ep=!0;const o=n(s);fetch(s.href,o)}})();/** -* @vue/shared v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Fr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ue={},Ht=[],ut=()=>{},ro=()=>!1,Gn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),qn=e=>e.startsWith("onUpdate:"),we=Object.assign,Hr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ai=Object.prototype.hasOwnProperty,oe=(e,t)=>Ai.call(e,t),H=Array.isArray,Bt=e=>En(e)==="[object Map]",Zt=e=>En(e)==="[object Set]",us=e=>En(e)==="[object Date]",G=e=>typeof e=="function",he=e=>typeof e=="string",ct=e=>typeof e=="symbol",ae=e=>e!==null&&typeof e=="object",so=e=>(ae(e)||G(e))&&G(e.then)&&G(e.catch),oo=Object.prototype.toString,En=e=>oo.call(e),Si=e=>En(e).slice(8,-1),io=e=>En(e)==="[object Object]",Br=e=>he(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ln=Fr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Wn=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Ri=/-\w/g,Pe=Wn(e=>e.replace(Ri,t=>t.slice(1).toUpperCase())),Ii=/\B([A-Z])/g,jt=Wn(e=>e.replace(Ii,"-$1").toLowerCase()),zn=Wn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cr=Wn(e=>e?`on${zn(e)}`:""),at=(e,t)=>!Object.is(e,t),Pn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},Jn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let cs;const Yn=()=>cs||(cs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Qn(e){if(H(e)){const t={};for(let n=0;n{if(n){const r=n.split(Ti);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ce(e){let t="";if(he(e))t=e;else if(H(e))for(let n=0;nen(n,t))}const uo=e=>!!(e&&e.__v_isRef===!0),K=e=>he(e)?e:e==null?"":H(e)||ae(e)&&(e.toString===oo||!G(e.toString))?uo(e)?K(e.value):JSON.stringify(e,co,2):String(e),co=(e,t)=>uo(t)?co(e,t.value):Bt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[fr(r,o)+" =>"]=s,n),{})}:Zt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>fr(n))}:ct(t)?fr(t):ae(t)&&!H(t)&&!io(t)?String(t):t,fr=(e,t="")=>{var n;return ct(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let _e;class $i{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&_e&&(_e.active?(this.parent=_e,this.index=(_e.scopes||(_e.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const r=this.scopes.slice();for(t=0,n=r.length;t0&&--this._on===0){if(_e===this)_e=this.prevScope;else{let t=_e;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,r;for(n=0,r=this.effects.length;n0)return;if(cn){let t=cn;for(cn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;un;){let t=un;for(un=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 ho(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function mo(e){let t,n=e.depsTail,r=n;for(;r;){const s=r.prevDep;r.version===-1?(r===n&&(n=s),Wr(r),Ui(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=s}e.deps=t,e.depsTail=n}function Ar(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(yo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function yo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===mn)||(e.globalVersion=mn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ar(e))))return;e.flags|=2;const t=e.dep,n=fe,r=We;fe=e,We=!0;try{ho(e);const s=e.fn(e._value);(t.version===0||at(s,e._value))&&(e.flags|=128,e._value=s,t.version++)}catch(s){throw t.version++,s}finally{fe=n,We=r,mo(e),e.flags&=-3}}function Wr(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.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)Wr(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ui(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let We=!0;const xo=[];function bt(){xo.push(We),We=!1}function _t(){const e=xo.pop();We=e===void 0?!0:e}function fs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=fe;fe=void 0;try{t()}finally{fe=n}}}let mn=0;class Li{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 zr{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(!fe||!We||fe===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==fe)n=this.activeLink=new Li(fe,this),fe.deps?(n.prevDep=fe.depsTail,fe.depsTail.nextDep=n,fe.depsTail=n):fe.deps=fe.depsTail=n,vo(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=fe.depsTail,n.nextDep=void 0,fe.depsTail.nextDep=n,fe.depsTail=n,fe.deps===n&&(fe.deps=r)}return n}trigger(t){this.version++,mn++,this.notify(t)}notify(t){Gr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{qr()}}}function vo(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)vo(r)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Sr=new WeakMap,Mt=Symbol(""),Rr=Symbol(""),yn=Symbol("");function Ae(e,t,n){if(We&&fe){let r=Sr.get(e);r||Sr.set(e,r=new Map);let s=r.get(n);s||(r.set(n,s=new zr),s.map=r,s.key=n),s.track()}}function xt(e,t,n,r,s,o){const i=Sr.get(e);if(!i){mn++;return}const a=l=>{l&&l.trigger()};if(Gr(),t==="clear")i.forEach(a);else{const l=H(e),f=l&&Br(n);if(l&&n==="length"){const u=Number(r);i.forEach((g,y)=>{(y==="length"||y===yn||!ct(y)&&y>=u)&&a(g)})}else switch((n!==void 0||i.has(void 0))&&a(i.get(n)),f&&a(i.get(yn)),t){case"add":l?f&&a(i.get("length")):(a(i.get(Mt)),Bt(e)&&a(i.get(Rr)));break;case"delete":l||(a(i.get(Mt)),Bt(e)&&a(i.get(Rr)));break;case"set":Bt(e)&&a(i.get(Mt));break}}qr()}function Ut(e){const t=se(e);return t===e?t:(Ae(t,"iterate",yn),Ke(e)?t:t.map(Je))}function Xn(e){return Ae(e=se(e),"iterate",yn),e}function st(e,t){return kt(e)?Wt(Vt(e)?Je(t):t):Je(t)}const Fi={__proto__:null,[Symbol.iterator](){return pr(this,Symbol.iterator,e=>st(this,e))},concat(...e){return Ut(this).concat(...e.map(t=>H(t)?Ut(t):t))},entries(){return pr(this,"entries",e=>(e[1]=st(this,e[1]),e))},every(e,t){return gt(this,"every",e,t,void 0,arguments)},filter(e,t){return gt(this,"filter",e,t,n=>n.map(r=>st(this,r)),arguments)},find(e,t){return gt(this,"find",e,t,n=>st(this,n),arguments)},findIndex(e,t){return gt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return gt(this,"findLast",e,t,n=>st(this,n),arguments)},findLastIndex(e,t){return gt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return gt(this,"forEach",e,t,void 0,arguments)},includes(...e){return gr(this,"includes",e)},indexOf(...e){return gr(this,"indexOf",e)},join(e){return Ut(this).join(e)},lastIndexOf(...e){return gr(this,"lastIndexOf",e)},map(e,t){return gt(this,"map",e,t,void 0,arguments)},pop(){return nn(this,"pop")},push(...e){return nn(this,"push",e)},reduce(e,...t){return ds(this,"reduce",e,t)},reduceRight(e,...t){return ds(this,"reduceRight",e,t)},shift(){return nn(this,"shift")},some(e,t){return gt(this,"some",e,t,void 0,arguments)},splice(...e){return nn(this,"splice",e)},toReversed(){return Ut(this).toReversed()},toSorted(e){return Ut(this).toSorted(e)},toSpliced(...e){return Ut(this).toSpliced(...e)},unshift(...e){return nn(this,"unshift",e)},values(){return pr(this,"values",e=>st(this,e))}};function pr(e,t,n){const r=Xn(e),s=r[t]();return r!==e&&!Ke(e)&&(s._next=s.next,s.next=()=>{const o=s._next();return o.done||(o.value=n(o.value)),o}),s}const Hi=Array.prototype;function gt(e,t,n,r,s,o){const i=Xn(e),a=i!==e&&!Ke(e),l=i[t];if(l!==Hi[t]){const g=l.apply(e,o);return a?Je(g):g}let f=n;i!==e&&(a?f=function(g,y){return n.call(this,st(e,g),y,e)}:n.length>2&&(f=function(g,y){return n.call(this,g,y,e)}));const u=l.call(i,f,r);return a&&s?s(u):u}function ds(e,t,n,r){const s=Xn(e),o=s!==e&&!Ke(e);let i=n,a=!1;s!==e&&(o?(a=r.length===0,i=function(f,u,g){return a&&(a=!1,f=st(e,f)),n.call(this,f,st(e,u),g,e)}):n.length>3&&(i=function(f,u,g){return n.call(this,f,u,g,e)}));const l=s[t](i,...r);return a?st(e,l):l}function gr(e,t,n){const r=se(e);Ae(r,"iterate",yn);const s=r[t](...n);return(s===-1||s===!1)&&Qr(n[0])?(n[0]=se(n[0]),r[t](...n)):s}function nn(e,t,n=[]){bt(),Gr();const r=se(e)[t].apply(e,n);return qr(),_t(),r}const Bi=Fr("__proto__,__v_isRef,__isVue"),bo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ct));function Ki(e){ct(e)||(e=String(e));const t=se(this);return Ae(t,"has",e),t.hasOwnProperty(e)}class _o{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?ea:Co:o?Eo:wo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=H(t);if(!s){let l;if(i&&(l=Fi[n]))return l;if(n==="hasOwnProperty")return Ki}const a=Reflect.get(t,n,Re(t)?t:r);if((ct(n)?bo.has(n):Bi(n))||(s||Ae(t,"get",n),o))return a;if(Re(a)){const l=i&&Br(n)?a:a.value;return s&&ae(l)?Or(l):l}return ae(a)?s?Or(a):Zn(a):a}}class ko extends _o{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];const i=H(t)&&Br(n);if(!this._isShallow){const f=kt(o);if(!Ke(r)&&!kt(r)&&(o=se(o),r=se(r)),!i&&Re(o)&&!Re(r))return f||(o.value=r),!0}const a=i?Number(n)e,Sn=e=>Reflect.getPrototypeOf(e);function Ji(e,t,n){return function(...r){const s=this.__v_raw,o=se(s),i=Bt(o),a=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,f=s[e](...r),u=n?Ir:t?Wt:Je;return!t&&Ae(o,"iterate",l?Rr:Mt),we(Object.create(f),{next(){const{value:g,done:y}=f.next();return y?{value:g,done:y}:{value:a?[u(g[0]),u(g[1])]:u(g),done:y}}})}}function Rn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Yi(e,t){const n={get(s){const o=this.__v_raw,i=se(o),a=se(s);e||(at(s,a)&&Ae(i,"get",s),Ae(i,"get",a));const{has:l}=Sn(i),f=t?Ir:e?Wt:Je;if(l.call(i,s))return f(o.get(s));if(l.call(i,a))return f(o.get(a));o!==i&&o.get(s)},get size(){const s=this.__v_raw;return!e&&Ae(se(s),"iterate",Mt),s.size},has(s){const o=this.__v_raw,i=se(o),a=se(s);return e||(at(s,a)&&Ae(i,"has",s),Ae(i,"has",a)),s===a?o.has(s):o.has(s)||o.has(a)},forEach(s,o){const i=this,a=i.__v_raw,l=se(a),f=t?Ir:e?Wt:Je;return!e&&Ae(l,"iterate",Mt),a.forEach((u,g)=>s.call(o,f(u),f(g),i))}};return we(n,e?{add:Rn("add"),set:Rn("set"),delete:Rn("delete"),clear:Rn("clear")}:{add(s){const o=se(this),i=Sn(o),a=se(s),l=!t&&!Ke(s)&&!kt(s)?a:s;return i.has.call(o,l)||at(s,l)&&i.has.call(o,s)||at(a,l)&&i.has.call(o,a)||(o.add(l),xt(o,"add",l,l)),this},set(s,o){!t&&!Ke(o)&&!kt(o)&&(o=se(o));const i=se(this),{has:a,get:l}=Sn(i);let f=a.call(i,s);f||(s=se(s),f=a.call(i,s));const u=l.call(i,s);return i.set(s,o),f?at(o,u)&&xt(i,"set",s,o):xt(i,"add",s,o),this},delete(s){const o=se(this),{has:i,get:a}=Sn(o);let l=i.call(o,s);l||(s=se(s),l=i.call(o,s)),a&&a.call(o,s);const f=o.delete(s);return l&&xt(o,"delete",s,void 0),f},clear(){const s=se(this),o=s.size!==0,i=s.clear();return o&&xt(s,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(s=>{n[s]=Ji(s,e,t)}),n}function Jr(e,t){const n=Yi(e,t);return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(oe(n,s)&&s in r?n:r,s,o)}const Qi={get:Jr(!1,!1)},Xi={get:Jr(!1,!0)},Zi={get:Jr(!0,!1)};const wo=new WeakMap,Eo=new WeakMap,Co=new WeakMap,ea=new WeakMap;function ta(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Zn(e){return kt(e)?e:Yr(e,!1,qi,Qi,wo)}function Ao(e){return Yr(e,!1,zi,Xi,Eo)}function Or(e){return Yr(e,!0,Wi,Zi,Co)}function Yr(e,t,n,r,s){if(!ae(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=s.get(e);if(o)return o;const i=ta(Si(e));if(i===0)return e;const a=new Proxy(e,i===2?r:n);return s.set(e,a),a}function Vt(e){return kt(e)?Vt(e.__v_raw):!!(e&&e.__v_isReactive)}function kt(e){return!!(e&&e.__v_isReadonly)}function Ke(e){return!!(e&&e.__v_isShallow)}function Qr(e){return e?!!e.__v_raw:!1}function se(e){const t=e&&e.__v_raw;return t?se(t):e}function na(e){return!oe(e,"__v_skip")&&Object.isExtensible(e)&&ao(e,"__v_skip",!0),e}const Je=e=>ae(e)?Zn(e):e,Wt=e=>ae(e)?Or(e):e;function Re(e){return e?e.__v_isRef===!0:!1}function Y(e){return So(e,!1)}function ra(e){return So(e,!0)}function So(e,t){return Re(e)?e:new sa(e,t)}class sa{constructor(t,n){this.dep=new zr,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:se(t),this._value=n?t:Je(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,r=this.__v_isShallow||Ke(t)||kt(t);t=r?t:se(t),at(t,n)&&(this._rawValue=t,this._value=r?t:Je(t),this.dep.trigger())}}function Kt(e){return Re(e)?e.value:e}const oa={get:(e,t,n)=>t==="__v_raw"?e:Kt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return Re(s)&&!Re(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Ro(e){return Vt(e)?e:new Proxy(e,oa)}class ia{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new zr(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=mn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&fe!==this)return go(this,!0),!0}get value(){const t=this.dep.track();return yo(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function aa(e,t,n=!1){let r,s;return G(e)?r=e:(r=e.get,s=e.set),new ia(r,s,n)}const In={},Vn=new WeakMap;let Nt;function la(e,t=!1,n=Nt){if(n){let r=Vn.get(n);r||Vn.set(n,r=[]),r.push(e)}}function ua(e,t,n=ue){const{immediate:r,deep:s,once:o,scheduler:i,augmentJob:a,call:l}=n,f=E=>s?E:Ke(E)||s===!1||s===0?vt(E,1):vt(E);let u,g,y,v,j=!1,T=!1;if(Re(e)?(g=()=>e.value,j=Ke(e)):Vt(e)?(g=()=>f(e),j=!0):H(e)?(T=!0,j=e.some(E=>Vt(E)||Ke(E)),g=()=>e.map(E=>{if(Re(E))return E.value;if(Vt(E))return f(E);if(G(E))return l?l(E,2):E()})):G(e)?t?g=l?()=>l(e,2):e:g=()=>{if(y){bt();try{y()}finally{_t()}}const E=Nt;Nt=u;try{return l?l(e,3,[v]):e(v)}finally{Nt=E}}:g=ut,t&&s){const E=g,X=s===!0?1/0:s;g=()=>vt(E(),X)}const L=ji(),R=()=>{u.stop(),L&&L.active&&Hr(L.effects,u)};if(o&&t){const E=t;t=(...X)=>{const ce=E(...X);return R(),ce}}let b=T?new Array(e.length).fill(In):In;const V=E=>{if(!(!(u.flags&1)||!u.dirty&&!E))if(t){const X=u.run();if(E||s||j||(T?X.some((ce,te)=>at(ce,b[te])):at(X,b))){y&&y();const ce=Nt;Nt=u;try{const te=[X,b===In?void 0:T&&b[0]===In?[]:b,v];b=X,l?l(t,3,te):t(...te)}finally{Nt=ce}}}else u.run()};return a&&a(V),u=new fo(g),u.scheduler=i?()=>i(V,!1):V,v=E=>la(E,!1,u),y=u.onStop=()=>{const E=Vn.get(u);if(E){if(l)l(E,4);else for(const X of E)X();Vn.delete(u)}},t?r?V(!0):b=u.run():i?i(V.bind(null,!0),!0):u.run(),R.pause=u.pause.bind(u),R.resume=u.resume.bind(u),R.stop=R,R}function vt(e,t=1/0,n){if(t<=0||!ae(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Re(e))vt(e.value,t,n);else if(H(e))for(let r=0;r{vt(r,t,n)});else if(io(e)){for(const r in e)vt(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&vt(e[r],t,n)}return e}/** -* @vue/runtime-core v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Cn(e,t,n,r){try{return r?e(...r):e()}catch(s){er(s,t,n)}}function Ye(e,t,n,r){if(G(e)){const s=Cn(e,t,n,r);return s&&so(s)&&s.catch(o=>{er(o,t,n)}),s}if(H(e)){const s=[];for(let o=0;o>>1,s=Te[r],o=xn(s);o=xn(n)?Te.push(e):Te.splice(fa(t),0,e),e.flags|=1,Oo()}}function Oo(){$n||($n=Io.then(Po))}function da(e){if(!H(e))St&&e.id===-1?St.splice(Lt+1,0,e):e.flags&1||(Gt.push(e),e.flags|=1);else for(let t=0;txn(n)-xn(r));if(Gt.length=0,St){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Po(e){try{for(rt=0;rt{r._d&&Fn(-1);const o=jn(t),i=$t.length;let a;try{a=e(...s)}finally{for(let l=$t.length;l>i;l--)si();jn(o),r._d&&Fn(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r}function ne(e,t){if(Fe===null)return e;const n=ar(Fe),r=e.dirs||(e.dirs=[]);for(let s=0;s1)return n&&G(t)?t.call(r&&r.proxy):t}}const pa=Symbol.for("v-scx"),ga=()=>ze(pa);function Dn(e,t,n){return Do(e,t,n)}function Do(e,t,n=ue){const{immediate:r,deep:s,flush:o,once:i}=n,a=we({},n),l=t&&r||!t&&o!=="post";let f;if(_n){if(o==="sync"){const v=ga();f=v.__watcherHandles||(v.__watcherHandles=[])}else if(!l){const v=()=>{};return v.stop=ut,v.resume=ut,v.pause=ut,v}}const u=Se;a.call=(v,j,T)=>Ye(v,u,j,T);let g=!1;o==="post"?a.scheduler=v=>{Me(v,u&&u.suspense)}:o!=="sync"&&(g=!0,a.scheduler=(v,j)=>{j?v():Zr(v)}),a.augmentJob=v=>{t&&(v.flags|=4),g&&(v.flags|=2,u&&(v.id=u.uid,v.i=u))};const y=ua(e,t,a);return _n&&(f?f.push(y):l&&y()),y}function ha(e,t,n){const r=this.proxy,s=he(e)?e.includes(".")?Mo(r,e):()=>r[e]:e.bind(r,r);let o;G(t)?o=t:(o=t.handler,n=t);const i=An(this),a=Do(s,o.bind(r),n);return i(),a}function Mo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;se.__isTeleport,hr=Symbol("_leaveCb");function ya(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==wt){t=n;break}}return t}function Vo(e){if(!ts(e))return tr(e.type)&&e.children?ya(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&&G(n.default))return n.default()}}function es(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;es(tr(n.type)&&Vo(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function $o(e,t){return G(e)?we({name:e.name},t,{setup:e}):e}function jo(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function gs(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const Un=new WeakMap;function fn(e,t,n,r,s=!1){if(H(e)){e.forEach((T,L)=>fn(T,t&&(H(t)?t[L]:t),n,r,s));return}if(dn(r)&&!s){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&fn(e,t,n,r.component.subTree);return}const o=r.shapeFlag&4?ar(r.component):r.el,i=s?null:o,{i:a,r:l}=e,f=t&&t.r,u=a.refs===ue?a.refs={}:a.refs,g=a.setupState,y=se(g),v=g===ue?ro:T=>gs(u,T)?!1:oe(y,T),j=(T,L)=>!(L&&gs(u,L));if(f!=null&&f!==l){if(hs(t),he(f))u[f]=null,v(f)&&(g[f]=null);else if(Re(f)){const T=t;j(f,T.k)&&(f.value=null),T.k&&(u[T.k]=null)}}if(G(l))Cn(l,a,12,[i,u]);else{const T=he(l),L=Re(l);if(T||L){const R=()=>{if(e.f){const b=T?v(l)?g[l]:u[l]:j()||!e.k?l.value:u[e.k];if(s)H(b)&&Hr(b,o);else if(H(b))b.includes(o)||b.push(o);else if(T)u[l]=[o],v(l)&&(g[l]=u[l]);else{const V=[o];j(l,e.k)&&(l.value=V),e.k&&(u[e.k]=V)}}else T?(u[l]=i,v(l)&&(g[l]=i)):L&&(j(l,e.k)&&(l.value=i),e.k&&(u[e.k]=i))};if(i){const b=()=>{R(),Un.delete(e)};b.id=-1,Un.set(e,b),Me(b,n)}else hs(e),R()}}}function hs(e){const t=Un.get(e);t&&(t.flags|=8,Un.delete(e))}Yn().requestIdleCallback;Yn().cancelIdleCallback;const dn=e=>!!e.type.__asyncLoader,ts=e=>e.type.__isKeepAlive;function xa(e,t){Uo(e,"a",t)}function va(e,t){Uo(e,"da",t)}function Uo(e,t,n=Se){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(nr(t,r,n),n){let s=n.parent;for(;s&&s.parent;)ts(s.parent.vnode)&&ba(r,t,n,s),s=s.parent}}function ba(e,t,n,r){const s=nr(t,e,r,!0);Lo(()=>{Hr(r[t],s)},n)}function nr(e,t,n=Se,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{bt();const a=An(n),l=Ye(t,n,e,i);return a(),_t(),l});return r?s.unshift(o):s.push(o),o}}const Et=e=>(t,n=Se)=>{(!_n||e==="sp")&&nr(e,(...r)=>t(...r),n)},_a=Et("bm"),rr=Et("m"),ka=Et("bu"),wa=Et("u"),Ea=Et("bum"),Lo=Et("um"),Ca=Et("sp"),Aa=Et("rtg"),Sa=Et("rtc");function Ra(e,t=Se){nr("ec",e,t)}const Ia="components";function sr(e,t){return Ta(Ia,e,!0,t)||e}const Oa=Symbol.for("v-ndc");function Ta(e,t,n=!0,r=!1){const s=Fe||Se;if(s){const o=s.type;{const a=ml(o,!1);if(a&&(a===t||a===Pe(t)||a===zn(Pe(t))))return o}const i=ms(s[e]||o[e],t)||ms(s.appContext[e],t);return!i&&r?o:i}}function ms(e,t){return e&&(e[t]||e[Pe(t)]||e[zn(Pe(t))])}function Le(e,t,n,r){let s;const o=n,i=H(e);if(i||he(e)){const a=i&&Vt(e);let l=!1,f=!1;a&&(l=!Ke(e),f=kt(e),e=Xn(e)),s=new Array(e.length);for(let u=0,g=e.length;ut(a,l,void 0,o));else{const a=Object.keys(e);s=new Array(a.length);for(let l=0,f=a.length;le?ai(e)?ar(e):Tr(e.parent):null,pn=we(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=>Tr(e.parent),$root:e=>Tr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Ho(e),$forceUpdate:e=>e.f||(e.f=()=>{Zr(e.update)}),$nextTick:e=>e.n||(e.n=Xr.bind(e.proxy)),$watch:e=>ha.bind(e)}),mr=(e,t)=>e!==ue&&!e.__isScriptSetup&&oe(e,t),Pa={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:a,appContext:l}=e;if(t[0]!=="$"){const y=i[t];if(y!==void 0)switch(y){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!==ue&&oe(s,t))return i[t]=2,s[t];if(oe(o,t))return i[t]=3,o[t];if(n!==ue&&oe(n,t))return i[t]=4,n[t];Pr&&(i[t]=0)}}const f=pn[t];let u,g;if(f)return t==="$attrs"&&Ae(e.attrs,"get",""),f(e);if((u=a.__cssModules)&&(u=u[t]))return u;if(n!==ue&&oe(n,t))return i[t]=4,n[t];if(g=l.config.globalProperties,oe(g,t))return g[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return mr(s,t)?(s[t]=n,!0):r!==ue&&oe(r,t)?(r[t]=n,!0):oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,props:o,type:i}},a){let l;return!!(n[a]||e!==ue&&a[0]!=="$"&&oe(e,a)||mr(t,a)||oe(o,a)||oe(r,a)||oe(pn,a)||oe(s.config.globalProperties,a)||(l=i.__cssModules)&&l[a])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ys(e){return H(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Pr=!0;function Na(e){const t=Ho(e),n=e.proxy,r=e.ctx;Pr=!1,t.beforeCreate&&xs(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:a,provide:l,inject:f,created:u,beforeMount:g,mounted:y,beforeUpdate:v,updated:j,activated:T,deactivated:L,beforeDestroy:R,beforeUnmount:b,destroyed:V,unmounted:E,render:X,renderTracked:ce,renderTriggered:te,errorCaptured:W,serverPrefetch:Ge,expose:Ne,inheritAttrs:Xe,components:ft,directives:Be,filters:Ot}=t;if(f&&Da(f,r,null),i)for(const Z in i){const Q=i[Z];G(Q)&&(r[Z]=Q.bind(n))}if(s){const Z=s.call(n,n);ae(Z)&&(e.data=Zn(Z))}if(Pr=!0,o)for(const Z in o){const Q=o[Z],ee=G(Q)?Q.bind(n,n):G(Q.get)?Q.get.bind(n,n):ut,$e=!G(Q)&&G(Q.set)?Q.set.bind(n):ut,je=ke({get:ee,set:$e});Object.defineProperty(r,Z,{enumerable:!0,configurable:!0,get:()=>je.value,set:Ee=>je.value=Ee})}if(a)for(const Z in a)Fo(a[Z],r,n,Z);if(l){const Z=G(l)?l.call(n):l;Reflect.ownKeys(Z).forEach(Q=>{Nn(Q,Z[Q])})}u&&xs(u,e,"c");function me(Z,Q){H(Q)?Q.forEach(ee=>Z(ee.bind(n))):Q&&Z(Q.bind(n))}if(me(_a,g),me(rr,y),me(ka,v),me(wa,j),me(xa,T),me(va,L),me(Ra,W),me(Sa,ce),me(Aa,te),me(Ea,b),me(Lo,E),me(Ca,Ge),H(Ne))if(Ne.length){const Z=e.exposed||(e.exposed={});Ne.forEach(Q=>{Object.defineProperty(Z,Q,{get:()=>n[Q],set:ee=>n[Q]=ee,enumerable:!0})})}else e.exposed||(e.exposed={});X&&e.render===ut&&(e.render=X),Xe!=null&&(e.inheritAttrs=Xe),ft&&(e.components=ft),Be&&(e.directives=Be),Ge&&jo(e)}function Da(e,t,n=ut){H(e)&&(e=Nr(e));for(const r in e){const s=e[r];let o;ae(s)?"default"in s?o=ze(s.from||r,s.default,!0):o=ze(s.from||r):o=ze(s),Re(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function xs(e,t,n){Ye(H(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Fo(e,t,n,r){let s=r.includes(".")?Mo(n,r):()=>n[r];if(he(e)){const o=t[e];G(o)&&Dn(s,o)}else if(G(e))Dn(s,e.bind(n));else if(ae(e))if(H(e))e.forEach(o=>Fo(o,t,n,r));else{const o=G(e.handler)?e.handler.bind(n):t[e.handler];G(o)&&Dn(s,o,e)}}function Ho(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,a=o.get(t);let l;return a?l=a:!s.length&&!n&&!r?l=t:(l={},s.length&&s.forEach(f=>Ln(l,f,i,!0)),Ln(l,t,i)),ae(t)&&o.set(t,l),l}function Ln(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&Ln(e,o,n,!0),s&&s.forEach(i=>Ln(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const a=Ma[i]||n&&n[i];e[i]=a?a(e[i],t[i]):t[i]}return e}const Ma={data:vs,props:bs,emits:bs,methods:on,computed:on,beforeCreate:Ie,created:Ie,beforeMount:Ie,mounted:Ie,beforeUpdate:Ie,updated:Ie,beforeDestroy:Ie,beforeUnmount:Ie,destroyed:Ie,unmounted:Ie,activated:Ie,deactivated:Ie,errorCaptured:Ie,serverPrefetch:Ie,components:on,directives:on,watch:$a,provide:vs,inject:Va};function vs(e,t){return t?e?function(){return we(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Va(e,t){return on(Nr(e),Nr(t))}function Nr(e){if(H(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Pe(t)}Modifiers`]||e[`${jt(t)}Modifiers`];function Fa(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ue;let s=n;const o=t.startsWith("update:"),i=o&&La(r,t.slice(7));i&&(i.trim&&(s=n.map(u=>he(u)?u.trim():u)),i.number&&(s=n.map(Jn)));let a,l=r[a=cr(t)]||r[a=cr(Pe(t))];!l&&o&&(l=r[a=cr(jt(t))]),l&&Ye(l,e,6,s);const f=r[a+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,Ye(f,e,6,s)}}const Ha=new WeakMap;function Ko(e,t,n=!1){const r=n?Ha:t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},a=!1;if(!G(e)){const l=f=>{const u=Ko(f,t,!0);u&&(a=!0,we(i,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!o&&!a?(ae(e)&&r.set(e,null),null):(H(o)?o.forEach(l=>i[l]=null):we(i,o),ae(e)&&r.set(e,i),i)}function or(e,t){return!e||!Gn(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),oe(e,t[0].toLowerCase()+t.slice(1))||oe(e,jt(t))||oe(e,t))}function _s(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:a,emit:l,render:f,renderCache:u,props:g,data:y,setupState:v,ctx:j,inheritAttrs:T}=e,L=jn(e);let R,b;try{if(n.shapeFlag&4){const E=s||r,X=E;R=ot(f.call(X,E,u,g,v,y,j)),b=a}else{const E=t;R=ot(E.length>1?E(g,{attrs:a,slots:i,emit:l}):E(g,null)),b=t.props?a:Ba(a)}}catch(E){$t.length=0,er(E,e,1),R=xe(wt)}let V=R;if(b&&T!==!1){const E=Object.keys(b),{shapeFlag:X}=V;E.length&&X&7&&(o&&E.some(qn)&&(b=Ka(b,o)),V=Jt(V,b,!1,!0))}if(n.dirs&&(V=Jt(V,null,!1,!0),V.dirs=V.dirs?V.dirs.concat(n.dirs):n.dirs),n.transition){const E=tr(V.type)&&Vo(V)||V;es(E,n.transition)}return R=V,jn(L),R}const Ba=e=>{let t;for(const n in e)(n==="class"||n==="style"||Gn(n))&&((t||(t={}))[n]=e[n]);return t},Ka=(e,t)=>{const n={};for(const r in e)(!qn(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ga(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:a,patchFlag:l}=t,f=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?ks(r,i,f):!!i;if(l&8){const u=t.dynamicProps;for(let g=0;gObject.create(qo),zo=e=>Object.getPrototypeOf(e)===qo;function Wa(e,t,n,r=!1){const s={},o=Wo();e.propsDefaults=Object.create(null),Jo(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:Ao(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function za(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,a=se(s),[l]=e.propsOptions;let f=!1;if((r||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let g=0;g{l=!0;const[y,v]=Yo(g,t,!0);we(i,y),v&&a.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!l)return ae(e)&&r.set(e,Ht),Ht;if(H(o))for(let u=0;ue==="_"||e==="_ctx"||e==="$stable",rs=e=>H(e)?e.map(ot):[ot(e)],Ya=(e,t,n)=>{if(t._n)return t;const r=zt((...s)=>rs(t(...s)),n);return r._c=!1,r},Qo=(e,t,n)=>{const r=e._ctx;for(const s in e){if(ns(s))continue;const o=e[s];if(G(o))t[s]=Ya(s,o,r);else if(o!=null){const i=rs(o);t[s]=()=>i}}},Xo=(e,t)=>{const n=rs(t);e.slots.default=()=>n},Zo=(e,t,n)=>{for(const r in t)(n||!ns(r))&&(e[r]=t[r])},Qa=(e,t,n)=>{const r=e.slots=Wo();if(e.vnode.shapeFlag&32){const s=t._;s?(Zo(r,t,n),n&&ao(r,"_",s,!0)):Qo(t,r)}else t&&Xo(e,t)},Xa=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ue;if(r.shapeFlag&32){const a=t._;a?n&&a===1?o=!1:Zo(s,t,n):(o=!t.$stable,Qo(t,s)),i=t}else t&&(Xo(e,t),i={default:1});if(o)for(const a in s)!ns(a)&&i[a]==null&&delete s[a]},Me=rl;function Za(e){return el(e)}function el(e,t){const n=Yn();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:a,createComment:l,setText:f,setElementText:u,parentNode:g,nextSibling:y,setScopeId:v=ut,insertStaticContent:j}=e,T=(c,d,h,k=null,A=null,w=null,P=void 0,O=null,I=!!d.dynamicChildren)=>{if(c===d)return;c&&!rn(c,d)&&(k=C(c),Ee(c,A,w,!0),c=null),d.patchFlag===-2&&(I=!1,d.dynamicChildren=null);const{type:S,ref:F,shapeFlag:_}=d;switch(S){case ir:L(c,d,h,k);break;case wt:R(c,d,h,k);break;case xr:c==null&&b(d,h,k,P);break;case de:ft(c,d,h,k,A,w,P,O,I);break;default:_&1?X(c,d,h,k,A,w,P,O,I):_&6?Be(c,d,h,k,A,w,P,O,I):(_&64||_&128)&&S.process(c,d,h,k,A,w,P,O,I,U)}F!=null&&A?fn(F,c&&c.ref,w,d||c,!d):F==null&&c&&c.ref!=null&&fn(c.ref,null,w,c,!0)},L=(c,d,h,k)=>{if(c==null)r(d.el=a(d.children),h,k);else{const A=d.el=c.el;d.children!==c.children&&f(A,d.children)}},R=(c,d,h,k)=>{c==null?r(d.el=l(d.children||""),h,k):d.el=c.el},b=(c,d,h,k)=>{[c.el,c.anchor]=j(c.children,d,h,k,c.el,c.anchor)},V=({el:c,anchor:d},h,k)=>{let A;for(;c&&c!==d;)A=y(c),r(c,h,k),c=A;r(d,h,k)},E=({el:c,anchor:d})=>{let h;for(;c&&c!==d;)h=y(c),s(c),c=h;s(d)},X=(c,d,h,k,A,w,P,O,I)=>{if(d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),c==null)ce(d,h,k,A,w,P,O,I);else{const S=c.el&&c.el._isVueCE?c.el:null;try{S&&S._beginPatch(),Ge(c,d,A,w,P,O,I)}finally{S&&S._endPatch()}}},ce=(c,d,h,k,A,w,P,O)=>{let I,S;const{props:F,shapeFlag:_,transition:m,dirs:B}=c;if(I=c.el=i(c.type,w,F&&F.is,F),_&8?u(I,c.children):_&16&&W(c.children,I,null,k,A,yr(c,w),P,O),B&&Tt(c,null,k,"created"),te(I,c,c.scopeId,P,k),F){for(const q in F)q!=="value"&&!ln(q)&&o(I,q,null,F[q],w,k);"value"in F&&o(I,"value",null,F.value,w),(S=F.onVnodeBeforeMount)&&nt(S,k,c)}B&&Tt(c,null,k,"beforeMount");const x=tl(A,m);x&&m.beforeEnter(I),r(I,d,h),((S=F&&F.onVnodeMounted)||x||B)&&Me(()=>{try{S&&nt(S,k,c),x&&m.enter(I),B&&Tt(c,null,k,"mounted")}finally{}},A)},te=(c,d,h,k,A)=>{if(h&&v(c,h),k)for(let w=0;w{for(let S=I;S{const O=d.el=c.el;let{patchFlag:I,dynamicChildren:S,dirs:F}=d;I|=c.patchFlag&16;const _=c.props||ue,m=d.props||ue;let B;if(h&&Pt(h,!1),(B=m.onVnodeBeforeUpdate)&&nt(B,h,d,c),F&&Tt(d,c,h,"beforeUpdate"),h&&Pt(h,!0),S&&(!c.dynamicChildren||c.dynamicChildren.length!==S.length)&&(I=0,P=!1,S=null),(_.innerHTML&&m.innerHTML==null||_.textContent&&m.textContent==null)&&u(O,""),S?Ne(c.dynamicChildren,S,O,h,k,yr(d,A),w):P||Q(c,d,O,null,h,k,yr(d,A),w,!1),I>0){if(I&16)Xe(O,_,m,h,A);else if(I&2&&_.class!==m.class&&o(O,"class",null,m.class,A),I&4&&o(O,"style",_.style,m.style,A),I&8){const x=d.dynamicProps;for(let q=0;q{B&&nt(B,h,d,c),F&&Tt(d,c,h,"updated")},k)},Ne=(c,d,h,k,A,w,P)=>{for(let O=0;O{if(d!==h){if(d!==ue)for(const w in d)!ln(w)&&!(w in h)&&o(c,w,d[w],null,A,k);for(const w in h){if(ln(w))continue;const P=h[w],O=d[w];P!==O&&w!=="value"&&o(c,w,O,P,A,k)}"value"in h&&o(c,"value",d.value,h.value,A)}},ft=(c,d,h,k,A,w,P,O,I)=>{const S=d.el=c?c.el:a(""),F=d.anchor=c?c.anchor:a("");let{patchFlag:_,dynamicChildren:m,slotScopeIds:B}=d;B&&(O=O?O.concat(B):B),c==null?(r(S,h,k),r(F,h,k),W(d.children||[],h,F,A,w,P,O,I)):_>0&&_&64&&m&&c.dynamicChildren&&c.dynamicChildren.length===m.length?(Ne(c.dynamicChildren,m,h,A,w,P,O),(d.key!=null||A&&d===A.subTree)&&ei(c,d,!0)):Q(c,d,h,F,A,w,P,O,I)},Be=(c,d,h,k,A,w,P,O,I)=>{d.slotScopeIds=O,c==null?d.shapeFlag&512?A.ctx.activate(d,h,k,P,I):Ot(d,h,k,A,w,P,I):Ct(c,d,I)},Ot=(c,d,h,k,A,w,P)=>{const O=c.component=cl(c,k,A);if(ts(c)&&(O.ctx.renderer=U),dl(O,!1,P),O.asyncDep){if(A&&A.registerDep(O,me,P),!c.el){const I=O.subTree=xe(wt);R(null,I,d,h),c.placeholder=I.el}}else me(O,c,d,h,A,w,P)},Ct=(c,d,h)=>{const k=d.component=c.component;if(Ga(c,d,h))if(k.asyncDep&&!k.asyncResolved){Z(k,d,h);return}else k.next=d,k.update();else d.el=c.el,k.vnode=d},me=(c,d,h,k,A,w,P)=>{const O=()=>{if(c.isMounted){let{next:_,bu:m,u:B,parent:x,vnode:q}=c;{const et=ti(c);if(et){_&&(_.el=q.el,Z(c,_,P)),et.asyncDep.then(()=>{Me(()=>{c.isUnmounted||S()},A)});return}}let z=_,ye;Pt(c,!1),_?(_.el=q.el,Z(c,_,P)):_=q,m&&Pn(m),(ye=_.props&&_.props.onVnodeBeforeUpdate)&&nt(ye,x,_,q),Pt(c,!0);const be=_s(c),Ze=c.subTree;c.subTree=be,T(Ze,be,g(Ze.el),C(Ze),c,A,w),_.el=be.el,z===null&&qa(c,be.el),B&&Me(B,A),(ye=_.props&&_.props.onVnodeUpdated)&&Me(()=>nt(ye,x,_,q),A)}else{let _;const{el:m,props:B}=d,{bm:x,m:q,parent:z,root:ye,type:be}=c,Ze=dn(d);Pt(c,!1),x&&Pn(x),!Ze&&(_=B&&B.onVnodeBeforeMount)&&nt(_,z,d),Pt(c,!0);{ye.ce&&ye.ce._hasShadowRoot()&&ye.ce._injectChildStyle(be,c.parent?c.parent.type:void 0);const et=c.subTree=_s(c);T(null,et,h,k,c,A,w),d.el=et.el}if(q&&Me(q,A),!Ze&&(_=B&&B.onVnodeMounted)){const et=d;Me(()=>nt(_,z,et),A)}(d.shapeFlag&256||z&&dn(z.vnode)&&z.vnode.shapeFlag&256)&&c.a&&Me(c.a,A),c.isMounted=!0,d=h=k=null}};c.scope.on();const I=c.effect=new fo(O);c.scope.off();const S=c.update=I.run.bind(I),F=c.job=I.runIfDirty.bind(I);F.i=c,F.id=c.uid,I.scheduler=()=>Zr(F),Pt(c,!0),S()},Z=(c,d,h)=>{d.component=c;const k=c.vnode.props;c.vnode=d,c.next=null,za(c,d.props,k,h),Xa(c,d.children,h),bt(),ps(c),_t()},Q=(c,d,h,k,A,w,P,O,I=!1)=>{const S=c&&c.children,F=c?c.shapeFlag:0,_=d.children,{patchFlag:m,shapeFlag:B}=d;if(m>0){if(m&128){$e(S,_,h,k,A,w,P,O,I);return}else if(m&256){ee(S,_,h,k,A,w,P,O,I);return}}B&8?(F&16&&De(S,A,w),_!==S&&u(h,_)):F&16?B&16?$e(S,_,h,k,A,w,P,O,I):De(S,A,w,!0):(F&8&&u(h,""),B&16&&W(_,h,k,A,w,P,O,I))},ee=(c,d,h,k,A,w,P,O,I)=>{c=c||Ht,d=d||Ht;const S=c.length,F=d.length,_=Math.min(S,F);let m;for(m=0;m<_;m++){const B=d[m]=I?yt(d[m]):ot(d[m]);T(c[m],B,h,null,A,w,P,O,I)}S>F?De(c,A,w,!0,!1,_):W(d,h,k,A,w,P,O,I,_)},$e=(c,d,h,k,A,w,P,O,I)=>{let S=0;const F=d.length;let _=c.length-1,m=F-1;for(;S<=_&&S<=m;){const B=c[S],x=d[S]=I?yt(d[S]):ot(d[S]);if(rn(B,x))T(B,x,h,null,A,w,P,O,I);else break;S++}for(;S<=_&&S<=m;){const B=c[_],x=d[m]=I?yt(d[m]):ot(d[m]);if(rn(B,x))T(B,x,h,null,A,w,P,O,I);else break;_--,m--}if(S>_){if(S<=m){const B=m+1,x=Bm)for(;S<=_;)Ee(c[S],A,w,!0),S++;else{const B=S,x=S,q=new Map;for(S=x;S<=m;S++){const Ue=d[S]=I?yt(d[S]):ot(d[S]);Ue.key!=null&&q.set(Ue.key,S)}let z,ye=0;const be=m-x+1;let Ze=!1,et=0;const tn=new Array(be);for(S=0;S=be){Ee(Ue,A,w,!0);continue}let tt;if(Ue.key!=null)tt=q.get(Ue.key);else for(z=x;z<=m;z++)if(tn[z-x]===0&&rn(Ue,d[z])){tt=z;break}tt===void 0?Ee(Ue,A,w,!0):(tn[tt-x]=S+1,tt>=et?et=tt:Ze=!0,T(Ue,d[tt],h,null,A,w,P,O,I),ye++)}const is=Ze?nl(tn):Ht;for(z=is.length-1,S=be-1;S>=0;S--){const Ue=x+S,tt=d[Ue],as=d[Ue+1],ls=Ue+1{const{el:w,type:P,transition:O,children:I,shapeFlag:S}=c;if(S&6){je(c.component.subTree,d,h,k);return}if(S&128){c.suspense.move(d,h,k);return}if(S&64){P.move(c,d,h,U);return}if(P===de){r(w,d,h);for(let _=0;_O.enter(w),A));else{const{leave:_,delayLeave:m,afterLeave:B}=O,x=()=>{c.ctx.isUnmounted?s(w):r(w,d,h)},q=()=>{const z=w._isLeaving||!!w[hr];w._isLeaving&&w[hr](!0),O.persisted&&!z?x():_(w,()=>{x(),B&&B()})};m?m(w,x,q):q()}else r(w,d,h)},Ee=(c,d,h,k=!1,A=!1)=>{const{type:w,props:P,ref:O,children:I,dynamicChildren:S,shapeFlag:F,patchFlag:_,dirs:m,cacheIndex:B,memo:x}=c;if(_===-2&&(A=!1),O!=null&&(bt(),fn(O,null,h,c,!0),_t()),B!=null&&(d.renderCache[B]=void 0),F&256){d.ctx.deactivate(c);return}const q=F&1&&m,z=!dn(c);let ye;if(z&&(ye=P&&P.onVnodeBeforeUnmount)&&nt(ye,d,c),F&6)pt(c.component,h,k);else{if(F&128){c.suspense.unmount(h,k);return}q&&Tt(c,null,d,"beforeUnmount"),F&64?c.type.remove(c,d,h,U,k):S&&!S.hasOnce&&(w!==de||_>0&&_&64)?De(S,d,h,!1,!0):(w===de&&_&384||!A&&F&16)&&De(I,d,h),k&&dt(c)}const be=x!=null&&B==null;(z&&(ye=P&&P.onVnodeUnmounted)||q||be)&&Me(()=>{ye&&nt(ye,d,c),q&&Tt(c,null,d,"unmounted"),be&&(c.el=null)},h)},dt=c=>{const{type:d,el:h,anchor:k,transition:A}=c;if(d===de){qe(h,k);return}if(d===xr){E(c);return}const w=()=>{s(h),A&&!A.persisted&&A.afterLeave&&A.afterLeave()};if(c.shapeFlag&1&&A&&!A.persisted){const{leave:P,delayLeave:O}=A,I=()=>P(h,w);O?O(c.el,w,I):I()}else w()},qe=(c,d)=>{let h;for(;c!==d;)h=y(c),s(c),c=h;s(d)},pt=(c,d,h)=>{const{bum:k,scope:A,job:w,subTree:P,um:O,m:I,a:S}=c;Es(I),Es(S),k&&Pn(k),A.stop(),w&&(w.flags|=8,Ee(P,c,d,h)),O&&Me(O,d),Me(()=>{c.isUnmounted=!0},d)},De=(c,d,h,k=!1,A=!1,w=0)=>{for(let P=w;P{if(c.shapeFlag&6)return C(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const d=y(c.anchor||c.el),h=d&&d[ma];return h?y(h):d};let $=!1;const N=(c,d,h)=>{let k;c==null?d._vnode&&(Ee(d._vnode,null,null,!0),k=d._vnode.component):T(d._vnode||null,c,d,null,null,null,h),d._vnode=c,$||($=!0,ps(k),To(),$=!1)},U={p:T,um:Ee,m:je,r:dt,mt:Ot,mc:W,pc:Q,pbc:Ne,n:C,o:e};return{render:N,hydrate:void 0,createApp:Ua(N)}}function yr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Pt({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function tl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ei(e,t,n=!1){const r=e.children,s=t.children;if(H(r)&&H(s))for(let o=0;o>1,e[n[a]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function ti(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ti(t)}function Es(e){if(e)for(let t=0;te.__isSuspense;function rl(e,t){t&&t.pendingBranch?H(e)?t.effects.push(...e):t.effects.push(e):da(e)}const de=Symbol.for("v-fgt"),ir=Symbol.for("v-txt"),wt=Symbol.for("v-cmt"),xr=Symbol.for("v-stc"),$t=[];let He=null;function D(e=!1){$t.push(He=e?null:[])}function si(){$t.pop(),He=$t[$t.length-1]||null}let vn=1;function Fn(e,t=!1){vn+=e,e<0&&He&&t&&(He.hasOnce=!0)}function oi(e){return e.dynamicChildren=vn>0?He||Ht:null,si(),vn>0&&He&&He.push(e),e}function M(e,t,n,r,s,o){return oi(p(e,t,n,r,s,o,!0))}function sl(e,t,n,r,s){return oi(xe(e,t,n,r,s,!0))}function Hn(e){return e?e.__v_isVNode===!0:!1}function rn(e,t){return e.type===t.type&&e.key===t.key}const ii=({key:e})=>e??null,Mn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?he(e)||Re(e)||G(e)?{i:Fe,r:e,k:t,f:!!n}:e:null);function p(e,t=null,n=null,r=0,s=null,o=e===de?0:1,i=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ii(t),ref:t&&Mn(t),scopeId:No,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:Fe};return a?(Bn(l,n),o&128&&e.normalize(l)):n&&(l.shapeFlag|=he(n)?8:16),vn>0&&!i&&He&&(l.patchFlag>0||o&6)&&l.patchFlag!==32&&He.push(l),l}const xe=ol;function ol(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Oa)&&(e=wt),Hn(e)){const a=Jt(e,t,!0);return n&&Bn(a,n),vn>0&&!o&&He&&(a.shapeFlag&6?He[He.indexOf(e)]=a:He.push(a)),a.patchFlag=-2,a}if(yl(e)&&(e=e.__vccOpts),t){t=il(t);let{class:a,style:l}=t;a&&!he(a)&&(t.class=Ce(a)),ae(l)&&(Qr(l)&&!H(l)&&(l=we({},l)),t.style=Qn(l))}const i=he(e)?1:ri(e)?128:tr(e)?64:ae(e)?4:G(e)?2:0;return p(e,t,n,r,s,i,o,!0)}function il(e){return e?Qr(e)||zo(e)?we({},e):e:null}function Jt(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:a,transition:l}=e,f=t?al(s||{},t):s,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&ii(f),ref:t&&t.ref?n&&o?H(o)?o.concat(Mn(t)):[o,Mn(t)]:Mn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==de?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&r&&es(u,l.clone(u)),u}function Ve(e=" ",t=0){return xe(ir,null,e,t)}function ie(e="",t=!1){return t?(D(),sl(wt,null,e)):xe(wt,null,e)}function ot(e){return e==null||typeof e=="boolean"?xe(wt):H(e)?xe(de,null,e.slice()):Hn(e)?yt(e):xe(ir,null,String(e))}function yt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function Bn(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(H(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Bn(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!zo(t)?t._ctx=Fe:s===3&&Fe&&(Fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(G(t)){if(r&65){Bn(e,{default:t});return}t={default:t,_ctx:Fe},n=32}else t=String(t),r&64?(n=16,t=[Ve(t)]):n=8;e.children=t,e.shapeFlag|=n}function al(...e){const t={};for(let n=0;nSe||Fe;let Kn,bn;{const e=Yn(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Kn=t("__VUE_INSTANCE_SETTERS__",n=>Se=n),bn=t("__VUE_SSR_SETTERS__",n=>_n=n)}const An=e=>{const t=Se;return Kn(e),e.scope.on(),()=>{e.scope.off(),Kn(t)}},Cs=()=>{Se&&Se.scope.off(),Kn(null)};function ai(e){return e.vnode.shapeFlag&4}let _n=!1;function dl(e,t=!1,n=!1){t&&bn(t);const{props:r,children:s}=e.vnode,o=ai(e);Wa(e,r,o,t),Qa(e,s,n||t);const i=o?pl(e,t):void 0;return t&&bn(!1),i}function pl(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Pa);const{setup:r}=n;if(r){bt();const s=e.setupContext=r.length>1?hl(e):null,o=An(e),i=Cn(r,e,0,[e.props,s]),a=so(i);if(_t(),o(),(a||e.sp)&&!dn(e)&&jo(e),a){if(i.then(Cs,Cs),t)return i.then(l=>{bn(!0);try{As(e,l,t)}finally{bn(!1)}}).catch(l=>{er(l,e,0)});e.asyncDep=i}else As(e,i)}else li(e)}function As(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ae(t)&&(e.setupState=Ro(t)),li(e)}function li(e,t,n){const r=e.type;e.render||(e.render=r.render||ut);{const s=An(e);bt();try{Na(e)}finally{_t(),s()}}}const gl={get(e,t){return Ae(e,"get",""),e[t]}};function hl(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,gl),slots:e.slots,emit:e.emit,expose:t}}function ar(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ro(na(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in pn)return pn[n](e)},has(t,n){return n in t||n in pn}})):e.proxy}function ml(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function yl(e){return G(e)&&"__vccOpts"in e}const ke=(e,t)=>aa(e,t,_n);function ui(e,t,n){try{Fn(-1);const r=arguments.length;return r===2?ae(t)&&!H(t)?Hn(t)?xe(e,null,[t]):xe(e,t):xe(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Hn(n)&&(n=[n]),xe(e,t,n))}finally{Fn(1)}}const xl="3.5.41";/** -* @vue/runtime-dom v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Mr;const Ss=typeof window<"u"&&window.trustedTypes;if(Ss)try{Mr=Ss.createPolicy("vue",{createHTML:e=>e})}catch{}const ci=Mr?e=>Mr.createHTML(e):e=>e,vl="http://www.w3.org/2000/svg",bl="http://www.w3.org/1998/Math/MathML",mt=typeof document<"u"?document:null,Rs=mt&&mt.createElement("template"),_l={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?mt.createElementNS(vl,e):t==="mathml"?mt.createElementNS(bl,e):n?mt.createElement(e,{is:n}):mt.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>mt.createTextNode(e),createComment:e=>mt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>mt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Rs.innerHTML=ci(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const a=Rs.content;if(r==="svg"||r==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}t.insertBefore(a,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},kl=Symbol("_vtc");function wl(e,t,n){const r=e[kl];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Is=Symbol("_vod"),El=Symbol("_vsh"),Cl=Symbol(""),Al=/(?:^|;)\s*display\s*:/;function Sl(e,t,n){const r=e.style,s=he(n);let o=!1;if(n&&!s){if(t)if(he(t))for(const i of t.split(";")){const a=i.slice(0,i.indexOf(":")).trim();n[a]==null&&an(r,a,"")}else for(const i in t)n[i]==null&&an(r,i,"");for(const i in n){i==="display"&&(o=!0);const a=n[i];a!=null?Il(e,i,!he(t)&&t?t[i]:void 0,a)||an(r,i,a):an(r,i,"")}}else if(s){if(t!==n){const i=r[Cl];i&&(n+=";"+i),r.cssText=n,o=Al.test(n)}}else t&&e.removeAttribute("style");Is in e&&(e[Is]=o?r.display:"",e[El]&&(r.display="none"))}const Os=/\s*!important$/;function an(e,t,n){if(H(n))n.forEach(r=>an(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Rl(e,t);Os.test(n)?e.setProperty(jt(r),n.replace(Os,""),"important"):e[r]=n}}const Ts=["Webkit","Moz","ms"],vr={};function Rl(e,t){const n=vr[t];if(n)return n;let r=Pe(t);if(r!=="filter"&&r in e)return vr[t]=r;r=zn(r);for(let s=0;sbr||(Ml.then(()=>br=0),br=Date.now());function $l(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;const s=n.value;if(H(s)){const o=r.stopImmediatePropagation;r.stopImmediatePropagation=()=>{o.call(r),r._stopped=!0};const i=s.slice(),a=[r];for(let l=0;le.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,jl=(e,t,n,r,s,o)=>{const i=s==="svg";t==="class"?wl(e,r,i):t==="style"?Sl(e,n,r):Gn(t)?qn(t)||Tl(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ul(e,t,r,i))?(Ds(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ns(e,t,r,i,o,t!=="value")):e._isVueCE&&(Ll(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!he(r)))?Ds(e,Pe(t),r,o,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ns(e,t,r,i))};function Ul(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Vs(t)&&G(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Vs(t)&&he(n)?!1:t in e}function Ll(e,t){const n=e._def.props;if(!n)return!1;const r=Pe(t);return Array.isArray(n)?n.some(s=>Pe(s)===r):Object.keys(n).some(s=>Pe(s)===r)}const Yt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return H(t)?n=>Pn(t,n):t};function Fl(e){e.target.composing=!0}function $s(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const lt=Symbol("_assign"),On=Symbol("_initialValue");function _r(e,t,n){return t&&(e=e.trim()),n&&(e=Jn(e)),e}const pe={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e.parentNode&&(e.type==="text"?e[On]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[On]=e.defaultValue.replace(/\r\n?/g,` -`))),e[lt]=Yt(s);const o=r||s.props&&s.props.type==="number";It(e,t?"change":"input",i=>{i.target.composing||e[lt](_r(e.value,n,o))}),(n||o)&&It(e,"change",()=>{e.value=_r(e.value,n,o)}),t||(It(e,"compositionstart",Fl),It(e,"compositionend",$s),It(e,"change",$s))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){const s=t??"",o=e[On];delete e[On],o!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==o?e[lt](_r(e.value,n,r)):e.value=s},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[lt]=Yt(i),e.composing)return;const a=(o||e.type==="number")&&!/^0\d/.test(e.value)?Jn(e.value):e.value,l=t??"";if(a===l)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===l)||(e.value=l)}},gn={deep:!0,created(e,t,n){e[lt]=Yt(n),It(e,"change",()=>{const r=e._modelValue,s=kn(e),o=e.checked,i=e[lt];if(H(r)){const a=Kr(r,s),l=a!==-1;if(o&&!l)i(r.concat(s));else if(!o&&l){const f=[...r];f.splice(a,1),i(f)}}else if(Zt(r)){const a=new Set(r);o?a.add(s):a.delete(s),i(a)}else i(fi(e,o))})},mounted:js,beforeUpdate(e,t,n){e[lt]=Yt(n),js(e,t,n)}};function js(e,{value:t,oldValue:n},r){e._modelValue=t;let s;if(H(t))s=Kr(t,r.props.value)>-1;else if(Zt(t))s=t.has(r.props.value);else{if(t===n)return;s=en(t,fi(e,!0))}e.checked!==s&&(e.checked=s)}const Vr={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,It(e,"change",()=>{const s=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?Jn(kn(o)):kn(o));e[lt](e.multiple?Zt(e._modelValue)?new Set(s):s:s[0]),e._assigning=!0,Xr(()=>{e._assigning=!1})}),e[lt]=Yt(r)},mounted(e,{value:t}){Us(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[lt]=Yt(n)},updated(e,{value:t}){e._assigning||Us(e,t)}};function Us(e,t){const n=e.multiple,r=H(t);if(!(n&&!r&&!Zt(t))){for(let s=0,o=e.options.length;sString(f)===String(a)):i.selected=Kr(t,a)>-1}else i.selected=t.has(a);else if(en(kn(i),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function kn(e){return"_value"in e?e._value:e.value}function fi(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Hl=["ctrl","shift","alt","meta"],Bl={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)=>Hl.some(n=>e[`${n}Key`]&&!t.includes(n))},it=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=((s,...o)=>{for(let i=0;i{const t=Gl().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=zl(r);if(!s)return;const o=t._component;!G(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const i=n(s,!1,Wl(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t});function Wl(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function zl(e){return he(e)?document.querySelector(e):e}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */const Ft=typeof document<"u";function di(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Jl(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&di(e.default)}const re=Object.assign;function kr(e,t){const n={};for(const r in t){const s=t[r];n[r]=Qe(s)?s.map(e):e(s)}return n}const hn=()=>{},Qe=Array.isArray;function Fs(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}const pi=/#/g,Yl=/&/g,Ql=/\//g,Xl=/=/g,Zl=/\?/g,gi=/\+/g,eu=/%5B/g,tu=/%5D/g,hi=/%5E/g,nu=/%60/g,mi=/%7B/g,ru=/%7C/g,yi=/%7D/g,su=/%20/g;function ss(e){return e==null?"":encodeURI(""+e).replace(ru,"|").replace(eu,"[").replace(tu,"]")}function ou(e){return ss(e).replace(mi,"{").replace(yi,"}").replace(hi,"^")}function $r(e){return ss(e).replace(gi,"%2B").replace(su,"+").replace(pi,"%23").replace(Yl,"%26").replace(nu,"`").replace(mi,"{").replace(yi,"}").replace(hi,"^")}function iu(e){return $r(e).replace(Xl,"%3D")}function au(e){return ss(e).replace(pi,"%23").replace(Zl,"%3F")}function lu(e){return au(e).replace(Ql,"%2F")}function wn(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const uu=/\/$/,cu=e=>e.replace(uu,"");function wr(e,t,n="/"){let r,s={},o="",i="";const a=t.indexOf("#");let l=t.indexOf("?");return l=a>=0&&l>a?-1:l,l>=0&&(r=t.slice(0,l),o=t.slice(l,a>0?a:t.length),s=e(o.slice(1))),a>=0&&(r=r||t.slice(0,a),i=t.slice(a,t.length)),r=gu(r??t,n),{fullPath:r+o+i,path:r,query:s,hash:wn(i)}}function fu(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Hs(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function du(e,t,n){const r=t.matched.length-1,s=n.matched.length-1;return r>-1&&r===s&&Qt(t.matched[r],n.matched[s])&&xi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Qt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function xi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!pu(e[n],t[n]))return!1;return!0}function pu(e,t){return Qe(e)?Bs(e,t):Qe(t)?Bs(t,e):(e==null?void 0:e.valueOf())===(t==null?void 0:t.valueOf())}function Bs(e,t){return Qe(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function gu(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),s=r[r.length-1];(s===".."||s===".")&&r.push("");let o=n.length-1,i,a;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(i).join("/")}const At={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let jr=(function(e){return e.pop="pop",e.push="push",e})({}),Er=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function hu(e){if(!e)if(Ft){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),cu(e)}const mu=/^[^#]+#/;function yu(e,t){return e.replace(mu,"#")+t}function xu(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const lr=()=>({left:window.scrollX,top:window.scrollY});function vu(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=xu(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Ks(e,t){return(history.state?history.state.position-t:-1)+e}const Ur=new Map;function bu(e,t){Ur.set(e,t)}function _u(e){const t=Ur.get(e);return Ur.delete(e),t}function ku(e){return typeof e=="string"||e&&typeof e=="object"}function vi(e){return typeof e=="string"||typeof e=="symbol"}let ge=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const bi=Symbol("");ge.MATCHER_NOT_FOUND+"",ge.NAVIGATION_GUARD_REDIRECT+"",ge.NAVIGATION_ABORTED+"",ge.NAVIGATION_CANCELLED+"",ge.NAVIGATION_DUPLICATED+"";function Xt(e,t){return re(new Error,{type:e,[bi]:!0},t)}function ht(e,t){return e instanceof Error&&bi in e&&(t==null||!!(e.type&t))}const wu=["params","query","hash"];function Eu(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of wu)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Cu(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;rs&&$r(s)):[r&&$r(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Au(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Qe(r)?r.map(s=>s==null?null:""+s):r==null?r:""+r)}return t}const Su=Symbol(""),qs=Symbol(""),ur=Symbol(""),os=Symbol(""),Lr=Symbol("");function sn(){let e=[];function t(r){return e.push(r),()=>{const s=e.indexOf(r);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Rt(e,t,n,r,s,o=i=>i()){const i=r&&(r.enterCallbacks[s]=r.enterCallbacks[s]||[]);return()=>new Promise((a,l)=>{const f=y=>{y===!1?l(Xt(ge.NAVIGATION_ABORTED,{from:n,to:t})):y instanceof Error?l(y):ku(y)?l(Xt(ge.NAVIGATION_GUARD_REDIRECT,{from:t,to:y})):(i&&r.enterCallbacks[s]===i&&typeof y=="function"&&i.push(y),a())},u=o(()=>e.call(r&&r.instances[s],t,n,f));let g=Promise.resolve(u);e.length<3&&(g=g.then(f)),g.catch(y=>l(y))})}function Cr(e,t,n,r,s=o=>o()){const o=[];for(const i of e)for(const a in i.components){let l=i.components[a];if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(di(l)){const f=(l.__vccOpts||l)[t];f&&o.push(Rt(f,n,r,i,a,s))}else{let f=l();o.push(()=>f.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${a}" at "${i.path}"`);const g=Jl(u)?u.default:u;i.mods[a]=u,i.components[a]=g;const y=(g.__vccOpts||g)[t];return y&&Rt(y,n,r,i,a,s)()}))}}return o}function Ru(e,t){const n=[],r=[],s=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iQt(f,a))?r.push(a):n.push(a));const l=e.matched[i];l&&(t.matched.find(f=>Qt(f,l))||s.push(l))}return[n,r,s]}/*! - * vue-router v4.6.4 - * (c) 2025 Eduardo San Martin Morote - * @license MIT - */let Iu=()=>location.protocol+"//"+location.host;function _i(e,t){const{pathname:n,search:r,hash:s}=t,o=e.indexOf("#");if(o>-1){let i=s.includes(e.slice(o))?e.slice(o).length:1,a=s.slice(i);return a[0]!=="/"&&(a="/"+a),Hs(a,"")}return Hs(n,e)+r+s}function Ou(e,t,n,r){let s=[],o=[],i=null;const a=({state:y})=>{const v=_i(e,location),j=n.value,T=t.value;let L=0;if(y){if(n.value=v,t.value=y,i&&i===j){i=null;return}L=T?y.position-T.position:0}else r(v);s.forEach(R=>{R(n.value,j,{delta:L,type:jr.pop,direction:L?L>0?Er.forward:Er.back:Er.unknown})})};function l(){i=n.value}function f(y){s.push(y);const v=()=>{const j=s.indexOf(y);j>-1&&s.splice(j,1)};return o.push(v),v}function u(){if(document.visibilityState==="hidden"){const{history:y}=window;if(!y.state)return;y.replaceState(re({},y.state,{scroll:lr()}),"")}}function g(){for(const y of o)y();o=[],window.removeEventListener("popstate",a),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",a),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:l,listen:f,destroy:g}}function Ws(e,t,n,r=!1,s=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:s?lr():null}}function Tu(e){const{history:t,location:n}=window,r={value:_i(e,n)},s={value:t.state};s.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(l,f,u){const g=e.indexOf("#"),y=g>-1?(n.host&&document.querySelector("base")?e:e.slice(g))+l:Iu()+e+l;try{t[u?"replaceState":"pushState"](f,"",y),s.value=f}catch(v){console.error(v),n[u?"replace":"assign"](y)}}function i(l,f){o(l,re({},t.state,Ws(s.value.back,l,s.value.forward,!0),f,{position:s.value.position}),!0),r.value=l}function a(l,f){const u=re({},s.value,t.state,{forward:l,scroll:lr()});o(u.current,u,!0),o(l,re({},Ws(r.value,l,null),{position:u.position+1},f),!1),r.value=l}return{location:r,state:s,push:a,replace:i}}function Pu(e){e=hu(e);const t=Tu(e),n=Ou(e,t.state,t.location,t.replace);function r(o,i=!0){i||n.pauseListeners(),history.go(o)}const s=re({location:"",base:e,go:r,createHref:yu.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}let Dt=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ve=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ve||{});const Nu={type:Dt.Static,value:""},Du=/[a-zA-Z0-9_]/;function Mu(e){if(!e)return[[]];if(e==="/")return[[Nu]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(v){throw new Error(`ERR (${n})/"${f}": ${v}`)}let n=ve.Static,r=n;const s=[];let o;function i(){o&&s.push(o),o=[]}let a=0,l,f="",u="";function g(){f&&(n===ve.Static?o.push({type:Dt.Static,value:f}):n===ve.Param||n===ve.ParamRegExp||n===ve.ParamRegExpEnd?(o.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${f}) must be alone in its segment. eg: '/:ids+.`),o.push({type:Dt.Param,value:f,regexp:u,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),f="")}function y(){f+=l}for(;at.length?t.length===1&&t[0]===Oe.Static+Oe.Segment?1:-1:0}function ki(e,t){let n=0;const r=e.score,s=t.score;for(;n0&&t[t.length-1]<0}const Lu={strict:!1,end:!0,sensitive:!1};function Fu(e,t,n){const r=ju(Mu(e.path),n),s=re(r,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function Hu(e,t){const n=[],r=new Map;t=Fs(Lu,t);function s(g){return r.get(g)}function o(g,y,v){const j=!v,T=Qs(g);T.aliasOf=v&&v.record;const L=Fs(t,g),R=[T];if("alias"in g){const E=typeof g.alias=="string"?[g.alias]:g.alias;for(const X of E)R.push(Qs(re({},T,{components:v?v.record.components:T.components,path:X,aliasOf:v?v.record:T})))}let b,V;for(const E of R){const{path:X}=E;if(y&&X[0]!=="/"){const ce=y.record.path,te=ce[ce.length-1]==="/"?"":"/";E.path=y.record.path+(X&&te+X)}if(b=Fu(E,y,L),v?v.alias.push(b):(V=V||b,V!==b&&V.alias.push(b),j&&g.name&&!Xs(b)&&i(g.name)),wi(b)&&l(b),T.children){const ce=T.children;for(let te=0;te{i(V)}:hn}function i(g){if(vi(g)){const y=r.get(g);y&&(r.delete(g),n.splice(n.indexOf(y),1),y.children.forEach(i),y.alias.forEach(i))}else{const y=n.indexOf(g);y>-1&&(n.splice(y,1),g.record.name&&r.delete(g.record.name),g.children.forEach(i),g.alias.forEach(i))}}function a(){return n}function l(g){const y=Gu(g,n);n.splice(y,0,g),g.record.name&&!Xs(g)&&r.set(g.record.name,g)}function f(g,y){let v,j={},T,L;if("name"in g&&g.name){if(v=r.get(g.name),!v)throw Xt(ge.MATCHER_NOT_FOUND,{location:g});L=v.record.name,j=re(Ys(y.params,v.keys.filter(V=>!V.optional).concat(v.parent?v.parent.keys.filter(V=>V.optional):[]).map(V=>V.name)),g.params&&Ys(g.params,v.keys.map(V=>V.name))),T=v.stringify(j)}else if(g.path!=null)T=g.path,v=n.find(V=>V.re.test(T)),v&&(j=v.parse(T),L=v.record.name);else{if(v=y.name?r.get(y.name):n.find(V=>V.re.test(y.path)),!v)throw Xt(ge.MATCHER_NOT_FOUND,{location:g,currentLocation:y});L=v.record.name,j=re({},y.params,g.params),T=v.stringify(j)}const R=[];let b=v;for(;b;)R.unshift(b.record),b=b.parent;return{name:L,path:T,params:j,matched:R,meta:Ku(R)}}e.forEach(g=>o(g));function u(){n.length=0,r.clear()}return{addRoute:o,resolve:f,removeRoute:i,clearRoutes:u,getRoutes:a,getRecordMatcher:s}}function Ys(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Qs(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Bu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Bu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Xs(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Ku(e){return e.reduce((t,n)=>re(t,n.meta),{})}function Gu(e,t){let n=0,r=t.length;for(;n!==r;){const o=n+r>>1;ki(e,t[o])<0?r=o:n=o+1}const s=qu(e);return s&&(r=t.lastIndexOf(s,r-1)),r}function qu(e){let t=e;for(;t=t.parent;)if(wi(t)&&ki(e,t)===0)return t}function wi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Zs(e){const t=ze(ur),n=ze(os),r=ke(()=>{const l=Kt(e.to);return t.resolve(l)}),s=ke(()=>{const{matched:l}=r.value,{length:f}=l,u=l[f-1],g=n.matched;if(!u||!g.length)return-1;const y=g.findIndex(Qt.bind(null,u));if(y>-1)return y;const v=eo(l[f-2]);return f>1&&eo(u)===v&&g[g.length-1].path!==v?g.findIndex(Qt.bind(null,l[f-2])):y}),o=ke(()=>s.value>-1&&Qu(n.params,r.value.params)),i=ke(()=>s.value>-1&&s.value===n.matched.length-1&&xi(n.params,r.value.params));function a(l={}){if(Yu(l)){const f=t[Kt(e.replace)?"replace":"push"](Kt(e.to)).catch(hn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>f),f}return Promise.resolve()}return{route:r,href:ke(()=>r.value.href),isActive:o,isExactActive:i,navigate:a}}function Wu(e){return e.length===1?e[0]:e}const zu=$o({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Zs,setup(e,{slots:t}){const n=Zn(Zs(e)),{options:r}=ze(ur),s=ke(()=>({[to(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[to(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Wu(t.default(n));return e.custom?o:ui("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},o)}}}),Ju=zu;function Yu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Qu(e,t){for(const n in t){const r=t[n],s=e[n];if(typeof r=="string"){if(r!==s)return!1}else if(!Qe(s)||s.length!==r.length||r.some((o,i)=>o.valueOf()!==s[i].valueOf()))return!1}return!0}function eo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const to=(e,t,n)=>e??t??n,Xu=$o({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=ze(Lr),s=ke(()=>e.route||r.value),o=ze(qs,0),i=ke(()=>{let f=Kt(o);const{matched:u}=s.value;let g;for(;(g=u[f])&&!g.components;)f++;return f}),a=ke(()=>s.value.matched[i.value]);Nn(qs,ke(()=>i.value+1)),Nn(Su,a),Nn(Lr,s);const l=Y();return Dn(()=>[l.value,a.value,e.name],([f,u,g],[y,v,j])=>{u&&(u.instances[g]=f,v&&v!==u&&f&&f===y&&(u.leaveGuards.size||(u.leaveGuards=v.leaveGuards),u.updateGuards.size||(u.updateGuards=v.updateGuards))),f&&u&&(!v||!Qt(u,v)||!y)&&(u.enterCallbacks[g]||[]).forEach(T=>T(f))},{flush:"post"}),()=>{const f=s.value,u=e.name,g=a.value,y=g&&g.components[u];if(!y)return no(n.default,{Component:y,route:f});const v=g.props[u],j=v?v===!0?f.params:typeof v=="function"?v(f):v:null,L=ui(y,re({},j,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(g.instances[u]=null)},ref:l}));return no(n.default,{Component:L,route:f})||L}}});function no(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Zu=Xu;function ec(e){const t=Hu(e.routes,e),n=e.parseQuery||Cu,r=e.stringifyQuery||Gs,s=e.history,o=sn(),i=sn(),a=sn(),l=ra(At);let f=At;Ft&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=kr.bind(null,C=>""+C),g=kr.bind(null,lu),y=kr.bind(null,wn);function v(C,$){let N,U;return vi(C)?(N=t.getRecordMatcher(C),U=$):U=C,t.addRoute(U,N)}function j(C){const $=t.getRecordMatcher(C);$&&t.removeRoute($)}function T(){return t.getRoutes().map(C=>C.record)}function L(C){return!!t.getRecordMatcher(C)}function R(C,$){if($=re({},$||l.value),typeof C=="string"){const h=wr(n,C,$.path),k=t.resolve({path:h.path},$),A=s.createHref(h.fullPath);return re(h,k,{params:y(k.params),hash:wn(h.hash),redirectedFrom:void 0,href:A})}let N;if(C.path!=null)N=re({},C,{path:wr(n,C.path,$.path).path});else{const h=re({},C.params);for(const k in h)h[k]==null&&delete h[k];N=re({},C,{params:g(h)}),$.params=g($.params)}const U=t.resolve(N,$),J=C.hash||"";U.params=u(y(U.params));const c=fu(r,re({},C,{hash:ou(J),path:U.path})),d=s.createHref(c);return re({fullPath:c,hash:J,query:r===Gs?Au(C.query):C.query||{}},U,{redirectedFrom:void 0,href:d})}function b(C){return typeof C=="string"?wr(n,C,l.value.path):re({},C)}function V(C,$){if(f!==C)return Xt(ge.NAVIGATION_CANCELLED,{from:$,to:C})}function E(C){return te(C)}function X(C){return E(re(b(C),{replace:!0}))}function ce(C,$){const N=C.matched[C.matched.length-1];if(N&&N.redirect){const{redirect:U}=N;let J=typeof U=="function"?U(C,$):U;return typeof J=="string"&&(J=J.includes("?")||J.includes("#")?J=b(J):{path:J},J.params={}),re({query:C.query,hash:C.hash,params:J.path!=null?{}:C.params},J)}}function te(C,$){const N=f=R(C),U=l.value,J=C.state,c=C.force,d=C.replace===!0,h=ce(N,U);if(h)return te(re(b(h),{state:typeof h=="object"?re({},J,h.state):J,force:c,replace:d}),$||N);const k=N;k.redirectedFrom=$;let A;return!c&&du(r,U,N)&&(A=Xt(ge.NAVIGATION_DUPLICATED,{to:k,from:U}),je(U,U,!0,!1)),(A?Promise.resolve(A):Ne(k,U)).catch(w=>ht(w)?ht(w,ge.NAVIGATION_GUARD_REDIRECT)?w:$e(w):Q(w,k,U)).then(w=>{if(w){if(ht(w,ge.NAVIGATION_GUARD_REDIRECT))return te(re({replace:d},b(w.to),{state:typeof w.to=="object"?re({},J,w.to.state):J,force:c}),$||k)}else w=ft(k,U,!0,d,J);return Xe(k,U,w),w})}function W(C,$){const N=V(C,$);return N?Promise.reject(N):Promise.resolve()}function Ge(C){const $=qe.values().next().value;return $&&typeof $.runWithContext=="function"?$.runWithContext(C):C()}function Ne(C,$){let N;const[U,J,c]=Ru(C,$);N=Cr(U.reverse(),"beforeRouteLeave",C,$);for(const h of U)h.leaveGuards.forEach(k=>{N.push(Rt(k,C,$))});const d=W.bind(null,C,$);return N.push(d),De(N).then(()=>{N=[];for(const h of o.list())N.push(Rt(h,C,$));return N.push(d),De(N)}).then(()=>{N=Cr(J,"beforeRouteUpdate",C,$);for(const h of J)h.updateGuards.forEach(k=>{N.push(Rt(k,C,$))});return N.push(d),De(N)}).then(()=>{N=[];for(const h of c)if(h.beforeEnter)if(Qe(h.beforeEnter))for(const k of h.beforeEnter)N.push(Rt(k,C,$));else N.push(Rt(h.beforeEnter,C,$));return N.push(d),De(N)}).then(()=>(C.matched.forEach(h=>h.enterCallbacks={}),N=Cr(c,"beforeRouteEnter",C,$,Ge),N.push(d),De(N))).then(()=>{N=[];for(const h of i.list())N.push(Rt(h,C,$));return N.push(d),De(N)}).catch(h=>ht(h,ge.NAVIGATION_CANCELLED)?h:Promise.reject(h))}function Xe(C,$,N){a.list().forEach(U=>Ge(()=>U(C,$,N)))}function ft(C,$,N,U,J){const c=V(C,$);if(c)return c;const d=$===At,h=Ft?history.state:{};N&&(U||d?s.replace(C.fullPath,re({scroll:d&&h&&h.scroll},J)):s.push(C.fullPath,J)),l.value=C,je(C,$,N,d),$e()}let Be;function Ot(){Be||(Be=s.listen((C,$,N)=>{if(!pt.listening)return;const U=R(C),J=ce(U,pt.currentRoute.value);if(J){te(re(J,{replace:!0,force:!0}),U).catch(hn);return}f=U;const c=l.value;Ft&&bu(Ks(c.fullPath,N.delta),lr()),Ne(U,c).catch(d=>ht(d,ge.NAVIGATION_ABORTED|ge.NAVIGATION_CANCELLED)?d:ht(d,ge.NAVIGATION_GUARD_REDIRECT)?(te(re(b(d.to),{force:!0}),U).then(h=>{ht(h,ge.NAVIGATION_ABORTED|ge.NAVIGATION_DUPLICATED)&&!N.delta&&N.type===jr.pop&&s.go(-1,!1)}).catch(hn),Promise.reject()):(N.delta&&s.go(-N.delta,!1),Q(d,U,c))).then(d=>{d=d||ft(U,c,!1),d&&(N.delta&&!ht(d,ge.NAVIGATION_CANCELLED)?s.go(-N.delta,!1):N.type===jr.pop&&ht(d,ge.NAVIGATION_ABORTED|ge.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),Xe(U,c,d)}).catch(hn)}))}let Ct=sn(),me=sn(),Z;function Q(C,$,N){$e(C);const U=me.list();return U.length?U.forEach(J=>J(C,$,N)):console.error(C),Promise.reject(C)}function ee(){return Z&&l.value!==At?Promise.resolve():new Promise((C,$)=>{Ct.add([C,$])})}function $e(C){return Z||(Z=!C,Ot(),Ct.list().forEach(([$,N])=>C?N(C):$()),Ct.reset()),C}function je(C,$,N,U){const{scrollBehavior:J}=e;if(!Ft||!J)return Promise.resolve();const c=!N&&_u(Ks(C.fullPath,0))||(U||!N)&&history.state&&history.state.scroll||null;return Xr().then(()=>J(C,$,c)).then(d=>d&&vu(d)).catch(d=>Q(d,C,$))}const Ee=C=>s.go(C);let dt;const qe=new Set,pt={currentRoute:l,listening:!0,addRoute:v,removeRoute:j,clearRoutes:t.clearRoutes,hasRoute:L,getRoutes:T,resolve:R,options:e,push:E,replace:X,go:Ee,back:()=>Ee(-1),forward:()=>Ee(1),beforeEach:o.add,beforeResolve:i.add,afterEach:a.add,onError:me.add,isReady:ee,install(C){C.component("RouterLink",Ju),C.component("RouterView",Zu),C.config.globalProperties.$router=pt,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>Kt(l)}),Ft&&!dt&&l.value===At&&(dt=!0,E(s.location).catch(U=>{}));const $={};for(const U in At)Object.defineProperty($,U,{get:()=>l.value[U],enumerable:!0});C.provide(ur,pt),C.provide(os,Ao($)),C.provide(Lr,l);const N=C.unmount;qe.add(C),C.unmount=function(){qe.delete(C),qe.size<1&&(f=At,Be&&Be(),Be=null,l.value=At,dt=!1,Z=!1),N()}}};function De(C){return C.reduce(($,N)=>$.then(()=>Ge(N)),Promise.resolve())}return pt}function Ei(){return ze(ur)}function Ci(e){return ze(os)}async function Tn(e,t={}){const n=await fetch(e,{...t,headers:{"Content-Type":"application/json",...t.headers}}),r=n.headers.get("content-type")||"";if(n.redirected||!r.includes("application/json"))throw window.location.href="/login",new Error("Sesión expirada");const s=await n.json();if(!n.ok)throw new Error((s==null?void 0:s.error)||(s==null?void 0:s.message)||"Error de servidor");return s}const le={get:e=>Tn(e),post:(e,t)=>Tn(e,{method:"POST",body:JSON.stringify(t)}),put:(e,t)=>Tn(e,{method:"PUT",body:JSON.stringify(t)}),del:e=>Tn(e,{method:"DELETE"})},tc={class:"w-64 shrink-0 h-screen sticky top-0 flex flex-col border-r border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900"},nc={class:"px-4 py-4 border-b border-gray-200 dark:border-gray-800"},rc={key:0,class:"px-3 pt-2 text-xs text-red-600 dark:text-red-400"},sc={class:"flex-1 overflow-y-auto px-2 py-3 space-y-0.5"},oc={key:0,class:"px-2 text-xs text-gray-400"},ic={key:1,class:"px-2 text-xs text-gray-400"},ac={class:"truncate"},lc={class:"flex items-center gap-1 mt-0.5"},uc={class:"text-[11px] text-gray-400 dark:text-gray-500"},cc={class:"flex opacity-0 group-hover:opacity-100 transition-opacity pr-1.5 gap-0.5"},fc=["onClick"],dc=["onClick"],pc={class:"bg-white dark:bg-gray-900 rounded-xl p-6 w-full max-w-lg border border-gray-200 dark:border-gray-800"},gc={class:"font-semibold text-gray-800 dark:text-gray-100 mb-4"},hc={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-300"},mc={class:"flex justify-end gap-2 pt-2"},yc={__name:"Sidebar",setup(e,{expose:t}){const n=Ci(),r=Ei(),s=Y([]),o=Y(!0),i=Y(""),a=Y(!1),l=Y(null),f=Y(g()),u=ke(()=>n.params.tenantId||n.params.id);function g(){return{nombre:"",dominios_permitidos:"",activo:!0}}async function y(){o.value=!0,i.value="";try{const R=await le.get("/app/umind/tenants");s.value=R.items||[]}catch(R){i.value=R.message}finally{o.value=!1}}function v(){l.value=null,f.value=g(),a.value=!0}function j(R){l.value=R,f.value={nombre:R.nombre,dominios_permitidos:R.dominios_permitidos,activo:R.activo},a.value=!0}async function T(){const R={...f.value,dominios_permitidos:f.value.dominios_permitidos.split(",").map(b=>b.trim()).filter(Boolean)};try{if(l.value)await le.put(`/app/umind/tenants/${l.value.ID}`,R),a.value=!1,await y();else{const b=await le.post("/app/umind/tenants",R);a.value=!1,await y(),r.push(`/tenants/${b.id}`)}}catch(b){i.value=b.message}}async function L(R){confirm(`¿Eliminar el tenant "${R.nombre}"? Esto borra también sus agentes. No se puede deshacer.`)&&(await le.del(`/app/umind/tenants/${R.ID}`),u.value===String(R.ID)&&r.push("/"),await y())}return t({recargar:y}),rr(y),(R,b)=>{const V=sr("router-link");return D(),M(de,null,[p("aside",tc,[p("div",nc,[xe(V,{to:"/",class:"text-base font-semibold text-gray-800 dark:text-gray-100"},{default:zt(()=>[...b[5]||(b[5]=[Ve(" uMind ",-1),p("span",{class:"text-brand"},"Orquestador",-1)])]),_:1})]),p("div",{class:"px-3 pt-3"},[p("button",{class:"w-full bg-brand hover:bg-brand-dark text-white text-sm font-medium px-3 py-2 rounded-lg transition-colors",onClick:v}," + Nuevo tenant ")]),i.value?(D(),M("p",rc,K(i.value),1)):ie("",!0),p("nav",sc,[o.value?(D(),M("p",oc,"Cargando...")):s.value.length===0?(D(),M("p",ic,"Sin tenants todavía.")):ie("",!0),(D(!0),M(de,null,Le(s.value,E=>(D(),M("div",{key:E.ID,class:Ce(["group flex items-center rounded-lg transition-colors",u.value===String(E.ID)?"bg-brand/10 dark:bg-brand/20":"hover:bg-gray-100 dark:hover:bg-gray-800"])},[xe(V,{to:`/tenants/${E.ID}`,class:Ce(["flex-1 min-w-0 px-2.5 py-2 text-sm",u.value===String(E.ID)?"text-brand-dark dark:text-brand font-medium":"text-gray-700 dark:text-gray-300"])},{default:zt(()=>[p("div",ac,K(E.nombre),1),p("div",lc,[p("span",{class:Ce(["w-1.5 h-1.5 rounded-full",E.activo?"bg-green-500":"bg-gray-300 dark:bg-gray-600"])},null,2),p("span",uc,K(E.activo?"activo":"inactivo"),1)])]),_:2},1032,["to","class"]),p("div",cc,[p("button",{class:"p-1 text-gray-400 hover:text-gray-700 dark:hover:text-gray-200",title:"Editar",onClick:X=>j(E)}," ✎ ",8,fc),p("button",{class:"p-1 text-gray-400 hover:text-red-600",title:"Eliminar",onClick:X=>L(E)}," ✕ ",8,dc)])],2))),128))])]),a.value?(D(),M("div",{key:0,class:"fixed inset-0 bg-black/40 flex items-center justify-center p-4 z-50",onClick:b[4]||(b[4]=it(E=>a.value=!1,["self"]))},[p("div",pc,[p("h2",gc,K(l.value?"Editar tenant":"Nuevo tenant"),1),b[10]||(b[10]=p("p",{class:"text-xs text-gray-500 dark:text-gray-400 mb-3"}," Un tenant es el negocio/sitio dueño de los dominios permitidos. La config de IA, tono y demás se configuran por agente, dentro del tenant. ",-1)),p("form",{class:"space-y-3",onSubmit:it(T,["prevent"])},[p("div",null,[b[6]||(b[6]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Nombre",-1)),ne(p("input",{"onUpdate:modelValue":b[0]||(b[0]=E=>f.value.nombre=E),required:"",class:"w-full border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm"},null,512),[[pe,f.value.nombre]])]),p("div",null,[b[7]||(b[7]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Dominios permitidos (separados por coma)",-1)),ne(p("input",{"onUpdate:modelValue":b[1]||(b[1]=E=>f.value.dominios_permitidos=E),placeholder:"ejemplo.com, www.ejemplo.com",required:"",class:"w-full border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm"},null,512),[[pe,f.value.dominios_permitidos]])]),p("label",hc,[ne(p("input",{"onUpdate:modelValue":b[2]||(b[2]=E=>f.value.activo=E),type:"checkbox"},null,512),[[gn,f.value.activo]]),b[8]||(b[8]=Ve(" Activo ",-1))]),p("div",mc,[p("button",{type:"button",class:"px-4 py-2 text-sm text-gray-500 dark:text-gray-400",onClick:b[3]||(b[3]=E=>a.value=!1)}," Cancelar "),b[9]||(b[9]=p("button",{type:"submit",class:"bg-brand hover:bg-brand-dark text-white text-sm font-medium px-4 py-2 rounded-lg"}," Guardar ",-1))])],32)])])):ie("",!0)],64)}}},xc={class:"min-h-screen flex bg-gray-50 dark:bg-gray-950"},vc={class:"flex-1 min-w-0"},bc={class:"max-w-4xl mx-auto px-8 py-10"},_c={__name:"App",setup(e){return(t,n)=>{const r=sr("router-view");return D(),M("div",xc,[xe(yc),p("main",vc,[p("div",bc,[xe(r)])])])}}},kc=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},wc={},Ec={class:"flex flex-col items-center justify-center text-center py-24"};function Cc(e,t){return D(),M("div",Ec,[...t[0]||(t[0]=[p("div",{class:"text-4xl mb-4"},"💬",-1),p("h1",{class:"text-lg font-medium text-gray-700 dark:text-gray-200"},"Elegí un tenant de la izquierda",-1),p("p",{class:"text-sm text-gray-400 dark:text-gray-500 mt-1"},"o creá uno nuevo para empezar a configurar su agente.",-1)])])}const Ac=kc(wc,[["render",Cc]]),Sc={key:0,class:"mb-6"},Rc={class:"text-xl font-semibold text-gray-800 dark:text-gray-100"},Ic={class:"text-xs text-gray-500 dark:text-gray-500 mt-1"},Oc={key:1,class:"text-sm text-red-600 dark:text-red-400 mb-4"},Tc={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800"},Pc={key:0,class:"p-6 text-sm text-gray-500 dark:text-gray-400"},Nc={class:"font-medium text-gray-800 dark:text-gray-200"},Dc={class:"flex items-center gap-1 mt-0.5"},Mc={class:"text-xs text-gray-400 dark:text-gray-500"},Vc={class:"flex items-center gap-3 pr-4 text-sm"},$c=["onClick"],jc=["onClick"],Uc={class:"bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-xl p-6 w-full max-w-lg"},Lc={class:"font-semibold text-gray-800 dark:text-gray-100 mb-4"},Fc=["value"],Hc={class:"flex items-center gap-2"},Bc={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-300"},Kc={class:"flex justify-end gap-2 pt-2"},Gc={type:"submit",class:"bg-brand hover:bg-brand-dark text-white text-sm font-medium px-4 py-2 rounded-lg"},qc={__name:"TenantAgentes",props:{id:{type:String,required:!0}},setup(e){const t=e,n=ke(()=>Number(t.id)),r=Ei(),s=Y(null),o=Y([]),i=Y([]),a=Y(""),l=Y(!1),f=Y(null),u=Y(g());function g(){return{nombre:"",ai_config_id:null,tono:"",mensaje_bienvenida:"",color:"#8eb02f",activo:!0}}async function y(){a.value="";try{const[R,b,V]=await Promise.all([le.get("/app/umind/tenants"),le.get(`/app/umind/agentes?tenant_id=${t.id}`),le.get("/app/api/ai-config/select")]);s.value=(R.items||[]).find(E=>String(E.ID)===t.id)||null,o.value=b.items||[],i.value=V.registros||[]}catch(R){a.value=R.message}}function v(){f.value=null,u.value=g(),l.value=!0}function j(R){f.value=R,u.value={nombre:R.nombre,ai_config_id:R.ai_config_id,tono:R.tono,mensaje_bienvenida:R.mensaje_bienvenida,color:R.color||"#8eb02f",activo:R.activo},l.value=!0}async function T(){try{if(f.value)await le.put(`/app/umind/agentes/${f.value.ID}`,{tenant_id:n.value,...u.value}),l.value=!1,await y();else{const R=await le.post("/app/umind/agentes",{tenant_id:n.value,...u.value});l.value=!1,r.push(`/tenants/${n.value}/agentes/${R.id}`)}}catch(R){a.value=R.message}}async function L(R){confirm(`¿Eliminar el agente "${R.nombre}"? Esto no se puede deshacer.`)&&(await le.del(`/app/umind/agentes/${R.ID}`),await y())}return rr(y),(R,b)=>{const V=sr("router-link");return D(),M("div",null,[s.value?(D(),M("div",Sc,[p("h1",Rc,K(s.value.nombre),1),p("p",Ic,K(s.value.dominios_permitidos||"sin dominios configurados"),1)])):ie("",!0),a.value?(D(),M("p",Oc,K(a.value),1)):ie("",!0),p("div",{class:"flex items-center justify-between mb-4"},[b[9]||(b[9]=p("h2",{class:"text-sm font-medium text-gray-600 dark:text-gray-300"},"Agentes",-1)),p("button",{class:"bg-brand hover:bg-brand-dark text-white text-sm font-medium px-4 py-2 rounded-lg transition-colors",onClick:v}," + Nuevo agente ")]),p("div",Tc,[o.value.length===0?(D(),M("div",Pc," Todavía no hay agentes. Creá el primero. ")):ie("",!0),(D(!0),M(de,null,Le(o.value,E=>(D(),M("div",{key:E.ID,class:"group flex items-center justify-between hover:bg-gray-50 dark:hover:bg-gray-800"},[xe(V,{to:`/tenants/${n.value}/agentes/${E.ID}`,class:"flex-1 min-w-0 p-4"},{default:zt(()=>[p("div",Nc,K(E.nombre),1),p("div",Dc,[p("span",{class:Ce(["w-1.5 h-1.5 rounded-full",!E.activo&&"bg-gray-300 dark:bg-gray-600"]),style:Qn({background:E.activo?E.color||"#22c55e":void 0})},null,6),p("span",Mc,K(E.activo?"activo":"inactivo"),1)])]),_:2},1032,["to"]),p("div",Vc,[xe(V,{to:`/tenants/${n.value}/agentes/${E.ID}`,class:"text-brand font-medium opacity-0 group-hover:opacity-100 transition-opacity"},{default:zt(()=>[...b[10]||(b[10]=[Ve(" Configurar → ",-1)])]),_:1},8,["to"]),p("button",{class:"text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 opacity-0 group-hover:opacity-100 transition-opacity",title:"Editar",onClick:X=>j(E)},"✎",8,$c),p("button",{class:"text-gray-400 hover:text-red-600 opacity-0 group-hover:opacity-100 transition-opacity",title:"Eliminar",onClick:X=>L(E)},"✕",8,jc)])]))),128))]),l.value?(D(),M("div",{key:2,class:"fixed inset-0 bg-black/40 flex items-center justify-center p-4 z-50",onClick:b[8]||(b[8]=it(E=>l.value=!1,["self"]))},[p("div",Uc,[p("h2",Lc,K(f.value?"Editar agente":"Nuevo agente"),1),p("form",{class:"space-y-3",onSubmit:it(T,["prevent"])},[p("div",null,[b[11]||(b[11]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Nombre",-1)),ne(p("input",{"onUpdate:modelValue":b[0]||(b[0]=E=>u.value.nombre=E),required:"",placeholder:"ej: Ventas, Soporte",class:"w-full border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm"},null,512),[[pe,u.value.nombre]])]),p("div",null,[b[13]||(b[13]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Config de IA",-1)),ne(p("select",{"onUpdate:modelValue":b[1]||(b[1]=E=>u.value.ai_config_id=E),class:"w-full border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm"},[b[12]||(b[12]=p("option",{value:null},"— sin asignar —",-1)),(D(!0),M(de,null,Le(i.value,E=>(D(),M("option",{key:E.ID,value:E.ID},K(E.nombre)+" ("+K(E.provider)+")",9,Fc))),128))],512),[[Vr,u.value.ai_config_id]])]),p("div",null,[b[14]||(b[14]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Tono / personalidad",-1)),ne(p("textarea",{"onUpdate:modelValue":b[2]||(b[2]=E=>u.value.tono=E),rows:"2",class:"w-full border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm"},null,512),[[pe,u.value.tono]])]),p("div",null,[b[15]||(b[15]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Mensaje de bienvenida",-1)),ne(p("input",{"onUpdate:modelValue":b[3]||(b[3]=E=>u.value.mensaje_bienvenida=E),class:"w-full border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm"},null,512),[[pe,u.value.mensaje_bienvenida]])]),p("div",null,[b[16]||(b[16]=p("label",{class:"text-xs text-gray-500 dark:text-gray-400"},"Color del widget",-1)),p("div",Hc,[ne(p("input",{"onUpdate:modelValue":b[4]||(b[4]=E=>u.value.color=E),type:"color",class:"w-10 h-9 border border-gray-300 dark:border-gray-700 rounded cursor-pointer bg-white dark:bg-gray-800"},null,512),[[pe,u.value.color]]),ne(p("input",{"onUpdate:modelValue":b[5]||(b[5]=E=>u.value.color=E),type:"text",pattern:"#[0-9a-fA-F]{6}",class:"flex-1 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-100 rounded-lg px-3 py-2 text-sm font-mono"},null,512),[[pe,u.value.color]])])]),p("label",Bc,[ne(p("input",{"onUpdate:modelValue":b[6]||(b[6]=E=>u.value.activo=E),type:"checkbox"},null,512),[[gn,u.value.activo]]),b[17]||(b[17]=Ve(" Activo ",-1))]),p("div",Kc,[p("button",{type:"button",class:"px-4 py-2 text-sm text-gray-500 dark:text-gray-400",onClick:b[7]||(b[7]=E=>l.value=!1)},"Cancelar"),p("button",Gc,K(f.value?"Guardar":"Crear"),1)])],32)])])):ie("",!0)])}}},Wc={key:0,class:"mb-6 mt-1"},zc={class:"text-xl font-semibold text-gray-800 dark:text-gray-100"},Jc={class:"text-xs text-gray-500 dark:text-gray-500 mt-1"},Yc={class:"bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded"},Qc={key:1,class:"text-sm text-red-600 dark:text-red-400 mb-4"},Xc={class:"flex gap-1.5 mb-6 overflow-x-auto pb-1"},Zc=["onClick"],ef={key:2},tf=["disabled"],nf={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800"},rf={key:0,class:"p-6 text-sm text-gray-500 dark:text-gray-400"},sf={class:"text-sm text-gray-800 dark:text-gray-200"},of={class:"text-xs text-gray-500 dark:text-gray-500 mt-0.5"},af={key:0},lf={key:1,class:"text-red-600 dark:text-red-400"},uf=["onClick"],cf={key:3},ff={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800"},df={key:0,class:"p-6 text-sm text-gray-500 dark:text-gray-400"},pf={class:"text-sm text-gray-800 dark:text-gray-200 font-mono"},gf={class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},hf={class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},mf={key:0,class:"ml-1 text-green-600 dark:text-green-400"},yf={key:1,class:"ml-1 text-gray-400"},xf={class:"flex gap-3 text-sm shrink-0"},vf=["onClick"],bf=["onClick"],_f={class:"bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-xl p-6 w-full max-w-xl max-h-[85vh] overflow-y-auto"},kf={class:"font-semibold text-gray-800 dark:text-gray-100 mb-4"},wf={class:"border border-gray-200 dark:border-gray-800 rounded-lg p-3 space-y-2"},Ef=["onUpdate:modelValue"],Cf=["onUpdate:modelValue"],Af=["onUpdate:modelValue"],Sf={class:"text-xs text-gray-500 dark:text-gray-400 flex items-center gap-1"},Rf=["onUpdate:modelValue"],If=["onClick"],Of={key:0,class:"text-xs text-gray-400"},Tf={class:"border border-gray-200 dark:border-gray-800 rounded-lg p-3 space-y-2"},Pf={class:"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Nf={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-300"},Df={class:"flex justify-end gap-2 pt-2"},Mf={key:4},Vf={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 p-4 mb-4"},$f={class:"flex items-center justify-between mb-2"},jf={class:"bg-gray-50 dark:bg-gray-950 border border-gray-200 dark:border-gray-800 rounded-lg p-2.5 text-xs text-gray-700 dark:text-gray-300 overflow-x-auto"},Uf={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800"},Lf={key:0,class:"p-6 text-sm text-gray-500 dark:text-gray-400"},Ff={class:"flex items-center justify-between"},Hf={class:"font-medium text-gray-800 dark:text-gray-200 capitalize"},Bf={class:"flex gap-3 text-sm"},Kf=["onClick"],Gf=["onClick"],qf={class:"text-xs text-gray-500 dark:text-gray-400 mt-1 break-all"},Wf={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},zf={key:0,class:"text-xs text-gray-400 dark:text-gray-500 mt-1"},Jf={key:1,class:"text-xs text-red-600 dark:text-red-400 mt-1"},Yf={class:"bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-xl p-6 w-full max-w-md"},Qf={key:0},Xf={class:"flex justify-end gap-2 pt-2"},Zf={key:5},ed={class:"flex gap-2 mb-4"},td={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800"},nd={key:0,class:"p-6 text-sm text-gray-500 dark:text-gray-400"},rd={class:"font-medium text-gray-800 dark:text-gray-200 capitalize"},sd={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},od=["onClick"],id={key:6,class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 p-4 flex flex-col h-[28rem]"},ad={class:"flex-1 overflow-y-auto space-y-2 mb-3"},ld={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},ud={key:1,class:"text-xs text-gray-400 dark:text-gray-500"},cd=["disabled"],fd={key:7,class:"grid grid-cols-3 gap-4"},dd={class:"col-span-1 bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800 max-h-[28rem] overflow-y-auto"},pd={key:0,class:"p-4 text-sm text-gray-500 dark:text-gray-400"},gd=["onClick"],hd={class:"text-gray-800 dark:text-gray-200 truncate"},md={class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},yd={class:"col-span-2 bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 p-4 max-h-[28rem] overflow-y-auto space-y-2"},xd={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},vd={key:8},bd={class:"bg-white dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800 divide-y divide-gray-100 dark:divide-gray-800 max-h-[32rem] overflow-y-auto"},_d={key:0,class:"p-6 text-sm text-gray-500 dark:text-gray-400"},kd={class:"cursor-pointer flex items-center gap-2 text-sm"},wd={class:"text-gray-400 dark:text-gray-500 text-xs shrink-0"},Ed={class:"text-gray-800 dark:text-gray-200 truncate"},Cd={class:"text-gray-400 dark:text-gray-500 text-xs ml-auto shrink-0"},Ad={key:0,class:"mt-2 bg-gray-50 dark:bg-gray-950 border border-gray-200 dark:border-gray-800 rounded-lg p-2 text-xs text-gray-600 dark:text-gray-400 overflow-x-auto whitespace-pre-wrap"},Sd={__name:"AgenteDetail",props:{tenantId:{type:String,required:!0},agenteId:{type:String,required:!0}},setup(e){const t=e,n=ke(()=>Number(t.agenteId)),r=Ci(),s=Y(null),o=Y(""),i=Y(typeof r.query.tab=="string"?r.query.tab:"conocimiento"),a=Y([]),l=Y(""),f=Y(30),u=Y(!1);async function g(){const _=await le.get(`/app/umind/agentes?tenant_id=${t.tenantId}`);s.value=(_.items||[]).find(m=>String(m.ID)===t.agenteId)||null}async function y(){const _=await le.get(`/app/umind/documentos?agente_id=${t.agenteId}`);a.value=_.items||[]}async function v(){if(l.value.trim()){u.value=!0,o.value="";try{await le.post("/app/umind/documentos",{agente_id:n.value,url:l.value.trim(),max_paginas:Number(f.value)||30}),l.value="",await y()}catch(_){o.value=_.message}finally{u.value=!1}}}async function j(_){confirm("¿Eliminar esta fuente y sus fragmentos indexados?")&&(await le.del(`/app/umind/documentos/${_}`),await y())}const T=ke(()=>_=>({listo:"bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-400",procesando:"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-400",pendiente:"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400",error:"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-400"})[_]||"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"),L=Y([]),R=Y([]),b=Y(null);async function V(){const _=await le.get(`/app/umind/sesiones?agente_id=${t.agenteId}`);L.value=_.items||[]}async function E(_){b.value=_;const m=await le.get(`/app/umind/historial?agente_id=${t.agenteId}&session_id=${_}`);R.value=m.items||[]}const X=Y([]),ce=Y(!1),te=Y(null),W=Y(Ge());function Ge(){return{nombre:"",descripcion:"",url:"",auth_header_nombre:"",auth_header_valor:"",tocarAuth:!1,parametros:[],activa:!0}}async function Ne(){const _=await le.get(`/app/umind/tools?agente_id=${t.agenteId}`);X.value=_.items||[]}function Xe(){te.value=null,W.value=Ge(),ce.value=!0}function ft(_){te.value=_;let m=[];try{m=JSON.parse(_.parametros_json||"[]")||[]}catch{m=[]}W.value={nombre:_.nombre,descripcion:_.descripcion,url:_.url,auth_header_nombre:_.auth_header_nombre,auth_header_valor:"",tocarAuth:!1,parametros:m,activa:_.activa},ce.value=!0}function Be(){W.value.parametros.push({nombre:"",tipo:"string",descripcion:"",requerido:!1})}function Ot(_){W.value.parametros.splice(_,1)}async function Ct(){const _={agente_id:n.value,nombre:W.value.nombre.trim(),descripcion:W.value.descripcion,url:W.value.url.trim(),auth_header_nombre:W.value.auth_header_nombre,parametros:W.value.parametros,activa:W.value.activa};W.value.tocarAuth&&(_.auth_header_valor=W.value.auth_header_valor);try{te.value?await le.put(`/app/umind/tools/${te.value.ID}`,_):await le.post("/app/umind/tools",_),ce.value=!1,await Ne()}catch(m){o.value=m.message}}async function me(_){confirm(`¿Eliminar la tool "${_.nombre}"?`)&&(await le.del(`/app/umind/tools/${_.ID}`),await Ne())}const Z=Y([]),Q=Y(!1),ee=Y(dt()),$e=Y(!1),je=ke(()=>{var m;const _=((m=s.value)==null?void 0:m.site_key)||"TU_SITE_KEY";return` - + +
diff --git a/rest/controllers/api/umind_canal_webhook_controller.go b/rest/controllers/api/umind_canal_webhook_controller.go index b45ba80..ca28a2f 100644 --- a/rest/controllers/api/umind_canal_webhook_controller.go +++ b/rest/controllers/api/umind_canal_webhook_controller.go @@ -15,9 +15,16 @@ type umindTgChat struct { ID int64 `json:"id"` } +type umindTgFileRef struct { + FileID string `json:"file_id"` +} + type umindTgMessage struct { - Chat umindTgChat `json:"chat"` - Text string `json:"text"` + Chat umindTgChat `json:"chat"` + Text string `json:"text"` + Voice *umindTgFileRef `json:"voice"` + Audio *umindTgFileRef `json:"audio"` + Photo []umindTgFileRef `json:"photo"` } type umindTgUpdate struct { @@ -39,12 +46,23 @@ func UmindTelegramWebhook(c *fiber.Ctx) error { if err := c.BodyParser(&update); err != nil || update.Message == nil { return c.SendStatus(fiber.StatusOK) } - texto := strings.TrimSpace(update.Message.Text) - if texto == "" { - return c.SendStatus(fiber.StatusOK) - } + msg := update.Message - if err := services.ProcesarMensajeTelegramUmind(canal, update.Message.Chat.ID, texto); err != nil { + switch { + case msg.Voice != nil && msg.Voice.FileID != "": + err = services.ProcesarMediaTelegramUmind(canal, msg.Chat.ID, msg.Voice.FileID, "audio") + case msg.Audio != nil && msg.Audio.FileID != "": + err = services.ProcesarMediaTelegramUmind(canal, msg.Chat.ID, msg.Audio.FileID, "audio") + case len(msg.Photo) > 0: + err = services.ProcesarMediaTelegramUmind(canal, msg.Chat.ID, msg.Photo[len(msg.Photo)-1].FileID, "image") + default: + texto := strings.TrimSpace(msg.Text) + if texto == "" { + return c.SendStatus(fiber.StatusOK) + } + err = services.ProcesarMensajeTelegramUmind(canal, msg.Chat.ID, texto) + } + if err != nil { log.Printf("[UMIND_TELEGRAM] canal %d: %v", canal.ID, err) models.RegistrarEventoUmind(canal.AgenteID, "error", "canal_telegram", "Error procesando un mensaje de Telegram", err.Error()) } @@ -53,12 +71,18 @@ func UmindTelegramWebhook(c *fiber.Ctx) error { // ─── WhatsApp ──────────────────────────────────────────────────────────────── +type umindWaMediaRef struct { + ID string `json:"id"` +} + type umindWaMessage struct { From string `json:"from"` Type string `json:"type"` Text struct { Body string `json:"body"` } `json:"text"` + Image umindWaMediaRef `json:"image"` + Audio umindWaMediaRef `json:"audio"` } type umindWaValue struct { @@ -130,10 +154,28 @@ func UmindWhatsAppWebhook(c *fiber.Ctx) error { for _, entry := range payload.Entry { for _, change := range entry.Changes { for _, msg := range change.Value.Messages { - if msg.Type != "text" || strings.TrimSpace(msg.Text.Body) == "" { + var err error + switch msg.Type { + case "text": + texto := strings.TrimSpace(msg.Text.Body) + if texto == "" { + continue + } + err = services.ProcesarMensajeWhatsAppUmind(canal, msg.From, texto) + case "audio": + if msg.Audio.ID == "" { + continue + } + err = services.ProcesarMediaWhatsAppUmind(canal, msg.From, msg.Audio.ID, "audio") + case "image": + if msg.Image.ID == "" { + continue + } + err = services.ProcesarMediaWhatsAppUmind(canal, msg.From, msg.Image.ID, "image") + default: continue } - if err := services.ProcesarMensajeWhatsAppUmind(canal, msg.From, strings.TrimSpace(msg.Text.Body)); err != nil { + if err != nil { log.Printf("[UMIND_WHATSAPP] canal %d: %v", canal.ID, err) models.RegistrarEventoUmind(canal.AgenteID, "error", "canal_whatsapp", "Error procesando un mensaje de WhatsApp", err.Error()) } diff --git a/rest/controllers/umind_admin_controller.go b/rest/controllers/umind_admin_controller.go index 8adcea9..9dc6139 100644 --- a/rest/controllers/umind_admin_controller.go +++ b/rest/controllers/umind_admin_controller.go @@ -463,16 +463,19 @@ func GetUmindCanalesHandler(c *fiber.Ctx) error { out[i] = fiber.Map{ "ID": canal.ID, "agente_id": canal.AgenteID, "tipo": canal.Tipo, "activo": canal.Activo, "webhook_url": webhookURL, "ultimo_error": canal.UltimoError, + "usar_whisper_audio": canal.UsarWhisperAudio, "usar_ocr_imagenes": canal.UsarOcrImagenes, } } return c.JSON(fiber.Map{"items": out}) } type umindCanalReq struct { - AgenteID uint `json:"agente_id"` - Tipo string `json:"tipo"` - Credenciales map[string]string `json:"credenciales"` - Activo bool `json:"activo"` + AgenteID uint `json:"agente_id"` + Tipo string `json:"tipo"` + Credenciales map[string]string `json:"credenciales"` + Activo bool `json:"activo"` + UsarWhisperAudio bool `json:"usar_whisper_audio"` + UsarOcrImagenes bool `json:"usar_ocr_imagenes"` } func CreateUmindCanalHandler(c *fiber.Ctx) error { @@ -502,7 +505,10 @@ func CreateUmindCanalHandler(c *fiber.Ctx) error { if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } - canal := &models.UmindCanal{AgenteID: req.AgenteID, Tipo: req.Tipo, Activo: true, CredencialesEnc: credencialesEnc} + canal := &models.UmindCanal{ + AgenteID: req.AgenteID, Tipo: req.Tipo, Activo: true, CredencialesEnc: credencialesEnc, + UsarWhisperAudio: req.UsarWhisperAudio, UsarOcrImagenes: req.UsarOcrImagenes, + } if err := models.CreateUmindCanal(canal); err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } @@ -525,7 +531,7 @@ func UpdateUmindCanalHandler(c *fiber.Ctx) error { if err := c.BodyParser(&req); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "body inválido"}) } - updates := map[string]interface{}{"activo": req.Activo} + updates := map[string]interface{}{"activo": req.Activo, "usar_whisper_audio": req.UsarWhisperAudio, "usar_ocr_imagenes": req.UsarOcrImagenes} if len(req.Credenciales) > 0 { enc, err := services.CifrarCredencialesCanal(req.Credenciales) if err != nil {