6 lines
172 KiB
JavaScript
6 lines
172 KiB
JavaScript
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function s(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=s(i);fetch(i.href,o)}})();function ns(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const se={},yt=[],We=()=>{},hn=()=>!1,Sl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Tl=e=>e.startsWith("onUpdate:"),ve=Object.assign,is=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Pi=Object.prototype.hasOwnProperty,Q=(e,t)=>Pi.call(e,t),D=Array.isArray,ct=e=>tl(e)==="[object Map]",lt=e=>tl(e)==="[object Set]",Ps=e=>tl(e)==="[object Date]",V=e=>typeof e=="function",ce=e=>typeof e=="string",Ze=e=>typeof e=="symbol",te=e=>e!==null&&typeof e=="object",mn=e=>(te(e)||V(e))&&V(e.then)&&V(e.catch),bn=Object.prototype.toString,tl=e=>bn.call(e),Oi=e=>tl(e).slice(8,-1),vn=e=>tl(e)==="[object Object]",os=e=>ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ft=ns(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$l=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},qi=/-\w/g,Ee=$l(e=>e.replace(qi,t=>t.slice(1).toUpperCase())),Ei=/\B([A-Z])/g,wt=$l(e=>e.replace(Ei,"-$1").toLowerCase()),gn=$l(e=>e.charAt(0).toUpperCase()+e.slice(1)),Nl=$l(e=>e?`on${gn(e)}`:""),Be=(e,t)=>!Object.is(e,t),dl=(e,...t)=>{for(let s=0;s<e.length;s++)e[s](...t)},yn=(e,t,s,n=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},_n=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Os;const Ml=()=>Os||(Os=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ft(e){if(D(e)){const t={};for(let s=0;s<e.length;s++){const n=e[s],i=ce(n)?Hi(n):ft(n);if(i)for(const o in i)t[o]=i[o]}return t}else if(ce(e)||te(e))return e}const Ri=/;(?![^(]*\))/g,Di=/:([^]+)/,Ni=/"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;function Hi(e){const t={};return e.replace(Ni,s=>s.startsWith("/*")?"":s).split(Ri).forEach(s=>{if(s){const n=s.split(Di);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function ze(e){let t="";if(ce(e))t=e;else if(D(e))for(let s=0;s<e.length;s++){const n=ze(e[s]);n&&(t+=n+" ")}else if(te(e))for(const s in e)e[s]&&(t+=s+" ");return t.trim()}const Li="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Fi=ns(Li);function xn(e){return!!e||e===""}function Vi(e,t,s){if(e.length!==t.length)return!1;let n=!0;for(let i=0;n&&i<e.length;i++)n=st(e[i],t[i],s);return n}function qs(e,t,s){if(e.size!==t.size)return!1;const n=Array.from(t),i=new Uint8Array(n.length);for(const o of e){let a=-1;for(let r=0;r<n.length;r++)if(!i[r]&&st(o,n[r],s)){a=r;break}if(a<0)return!1;i[a]=1}return!0}function Ui(e,t,s){let n=ct(e),i=ct(t);if(n||i||(n=lt(e),i=lt(t),n||i))return n&&i?qs(e,t,s):!1;const o=Object.keys(e).length,a=Object.keys(t).length;if(o!==a)return!1;for(const r in e){const c=e.hasOwnProperty(r),f=t.hasOwnProperty(r);if(c&&!f||!c&&f||!st(e[r],t[r],s))return!1}return String(e)===String(t)}function Es(e,t,s,n){s||(s=[new Map,new Map]);const[i,o]=s;if(i.has(e)||o.has(t))return i.get(e)===t&&o.get(t)===e;i.set(e,t),o.set(t,e);const a=n(e,t,s);return i.delete(e),o.delete(t),a}function st(e,t,s){if(e===t)return!0;let n=Ps(e),i=Ps(t);return n||i?n&&i?e.getTime()===t.getTime():!1:(n=Ze(e),i=Ze(t),n||i?e===t:(n=D(e),i=D(t),n||i?n&&i?Es(e,t,s,Vi):!1:(n=te(e),i=te(t),n||i?!n||!i?!1:Es(e,t,s,Ui):String(e)===String(t))))}function as(e,t){return e.findIndex(s=>st(s,t))}const wn=e=>!!(e&&e.__v_isRef===!0),T=e=>ce(e)?e:e==null?"":D(e)||te(e)&&(e.toString===bn||!V(e.toString))?wn(e)?T(e.value):JSON.stringify(e,kn,2):String(e),kn=(e,t)=>wn(t)?kn(e,t.value):ct(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,i],o)=>(s[Hl(n,o)+" =>"]=i,s),{})}:lt(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Hl(s))}:Ze(t)?Hl(t):te(t)&&!D(t)&&!vn(t)?String(t):t,Hl=(e,t="")=>{var s;return Ze(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let pe;class Ki{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&&pe&&(pe.active?(this.parent=pe,this.index=(pe.scopes||(pe.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){const n=this.scopes.slice();for(t=0,s=n.length;t<s;t++)n[t].pause()}for(t=0,s=this.effects.length;t<s;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,s;if(this.scopes){const i=this.scopes.slice();for(t=0,s=i.length;t<s;t++)i[t].resume()}const n=this.effects.slice();for(t=0,s=n.length;t<s;t++)n[t].resume()}}run(t){if(this._active){const s=pe;try{return pe=this,t()}finally{pe=s}}}on(){++this._on===1&&(this.prevScope=pe,pe=this)}off(){if(this._on>0&&--this._on===0){if(pe===this)pe=this.prevScope;else{let t=pe;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 s,n;for(s=0,n=this.effects.length;s<n;s++)this.effects[s].stop();for(this.effects.length=0,s=0,n=this.cleanups.length;s<n;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){const i=this.scopes.slice();for(s=0,n=i.length;s<n;s++)i[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const i=this.parent.scopes.pop();i&&i!==this&&(this.parent.scopes[this.index]=i,i.index=this.index)}this.parent=void 0}}}function Bi(){return pe}let oe;const Ll=new WeakSet;class Cn{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,pe&&(pe.active?pe.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Ll.has(this)&&(Ll.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Tn(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Rs(this),$n(this);const t=oe,s=Re;oe=this,Re=!0;try{return this.fn()}finally{Mn(this),oe=t,Re=s,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)us(t);this.deps=this.depsTail=void 0,Rs(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Ll.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Zl(this)&&this.run()}get dirty(){return Zl(this)}}let Sn=0,Vt,Ut;function Tn(e,t=!1){if(e.flags|=8,t){e.next=Ut,Ut=e;return}e.next=Vt,Vt=e}function rs(){Sn++}function cs(){if(--Sn>0)return;if(Ut){let t=Ut;for(Ut=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Vt;){let t=Vt;for(Vt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function $n(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Mn(e){let t,s=e.depsTail,n=s;for(;n;){const i=n.prevDep;n.version===-1?(n===s&&(s=i),us(n),Wi(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=i}e.deps=t,e.depsTail=s}function Zl(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(jn(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function jn(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===zt)||(e.globalVersion=zt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Zl(e))))return;e.flags|=2;const t=e.dep,s=oe,n=Re;oe=e,Re=!0;try{$n(e);const i=e.fn(e._value);(t.version===0||Be(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{oe=s,Re=n,Mn(e),e.flags&=-3}}function us(e,t=!1){const{dep:s,prevSub:n,nextSub:i}=e;if(n&&(n.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let o=s.computed.deps;o;o=o.nextDep)us(o,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Wi(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Re=!0;const In=[];function nt(){In.push(Re),Re=!1}function it(){const e=In.pop();Re=e===void 0?!0:e}function Rs(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=oe;oe=void 0;try{t()}finally{oe=s}}}let zt=0;class zi{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ds{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(!oe||!Re||oe===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==oe)s=this.activeLink=new zi(oe,this),oe.deps?(s.prevDep=oe.depsTail,oe.depsTail.nextDep=s,oe.depsTail=s):oe.deps=oe.depsTail=s,An(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=oe.depsTail,s.nextDep=void 0,oe.depsTail.nextDep=s,oe.depsTail=s,oe.deps===s&&(oe.deps=n)}return s}trigger(t){this.version++,zt++,this.notify(t)}notify(t){rs();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{cs()}}}function An(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)An(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Yl=new WeakMap,_t=Symbol(""),Gl=Symbol(""),Zt=Symbol("");function me(e,t,s){if(Re&&oe){let n=Yl.get(e);n||Yl.set(e,n=new Map);let i=n.get(s);i||(n.set(s,i=new ds),i.map=n,i.key=s),i.track()}}function et(e,t,s,n,i,o){const a=Yl.get(e);if(!a){zt++;return}const r=c=>{c&&c.trigger()};if(rs(),t==="clear")a.forEach(r);else{const c=D(e),f=c&&os(s);if(c&&s==="length"){const p=Number(n);a.forEach((m,w)=>{(w==="length"||w===Zt||!Ze(w)&&w>=p)&&r(m)})}else switch((s!==void 0||a.has(void 0))&&r(a.get(s)),f&&r(a.get(Zt)),t){case"add":c?f&&r(a.get("length")):(r(a.get(_t)),ct(e)&&r(a.get(Gl)));break;case"delete":c||(r(a.get(_t)),ct(e)&&r(a.get(Gl)));break;case"set":ct(e)&&r(a.get(_t));break}}cs()}function Ct(e){const t=X(e);return t===e||(me(t,"iterate",Zt),Ae(e))?t:Ye(e)?ut(e)?t.map(s=>pt(Pe(s))):t.map(pt):t.map(Pe)}function jl(e){return me(e=X(e),"iterate",Zt),e}function Ue(e,t){return Ye(e)?pt(ut(e)?Pe(t):t):Pe(t)}const Zi={__proto__:null,[Symbol.iterator](){return Fl(this,Symbol.iterator,e=>Ue(this,e))},concat(...e){return Ct(this).concat(...e.map(t=>D(t)?Ct(t):t))},entries(){return Fl(this,"entries",e=>(e[1]=Ue(this,e[1]),e))},every(e,t){return Ge(this,"every",e,t,void 0,arguments)},filter(e,t){return Ge(this,"filter",e,t,s=>s.map(n=>Ue(this,n)),arguments)},find(e,t){return Ge(this,"find",e,t,s=>Ue(this,s),arguments)},findIndex(e,t){return Ge(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ge(this,"findLast",e,t,s=>Ue(this,s),arguments)},findLastIndex(e,t){return Ge(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ge(this,"forEach",e,t,void 0,arguments)},includes(...e){return Vl(this,"includes",e)},indexOf(...e){return Vl(this,"indexOf",e)},join(e){return Ct(this).join(e)},lastIndexOf(...e){return Vl(this,"lastIndexOf",e)},map(e,t){return Ge(this,"map",e,t,void 0,arguments)},pop(){return Et(this,"pop")},push(...e){return Et(this,"push",e)},reduce(e,...t){return Ds(this,"reduce",e,t)},reduceRight(e,...t){return Ds(this,"reduceRight",e,t)},shift(){return Et(this,"shift")},some(e,t){return Ge(this,"some",e,t,void 0,arguments)},splice(...e){return Et(this,"splice",e)},toReversed(){return Ct(this).toReversed()},toSorted(e){return Ct(this).toSorted(e)},toSpliced(...e){return Ct(this).toSpliced(...e)},unshift(...e){return Et(this,"unshift",e)},values(){return Fl(this,"values",e=>Ue(this,e))}};function Fl(e,t,s){const n=jl(e),i=n[t]();return n!==e&&!Ae(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.done||(o.value=s(o.value)),o}),i}const Yi=Array.prototype;function Ge(e,t,s,n,i,o){const a=jl(e),r=a!==e&&!Ae(e),c=a[t];if(c!==Yi[t]){const m=c.apply(e,o);return r?Pe(m):m}let f=s;a!==e&&(r?f=function(m,w){return s.call(this,Ue(e,m),w,e)}:s.length>2&&(f=function(m,w){return s.call(this,m,w,e)}));const p=c.call(a,f,n);return r&&i?i(p):p}function Ds(e,t,s,n){const i=jl(e),o=i!==e&&!Ae(e);let a=s,r=!1;i!==e&&(o?(r=n.length===0,a=function(f,p,m){return r&&(r=!1,f=Ue(e,f)),s.call(this,f,Ue(e,p),m,e)}):s.length>3&&(a=function(f,p,m){return s.call(this,f,p,m,e)}));const c=i[t](a,...n);return r?Ue(e,c):c}function Vl(e,t,s){const n=X(e);me(n,"iterate",Zt);const i=n[t](...s);return(i===-1||i===!1)&&ms(s[0])?(s[0]=X(s[0]),n[t](...s)):i}function Et(e,t,s=[]){nt(),rs();const n=X(e)[t].apply(e,s);return cs(),it(),n}const Gi=ns("__proto__,__v_isRef,__isVue"),Pn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ze));function Ji(e){Ze(e)||(e=String(e));const t=X(this);return me(t,"has",e),t.hasOwnProperty(e)}class On{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const i=this._isReadonly,o=this._isShallow;if(s==="__v_isReactive")return!i;if(s==="__v_isReadonly")return i;if(s==="__v_isShallow")return o;if(s==="__v_raw")return n===(i?o?ao:Dn:o?Rn:En).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const a=D(t);if(!i){let c;if(a&&(c=Zi[s]))return c;if(s==="hasOwnProperty")return Ji}const r=Reflect.get(t,s,be(t)?t:n);if((Ze(s)?Pn.has(s):Gi(s))||(i||me(t,"get",s),o))return r;if(be(r)){const c=a&&os(s)?r:r.value;return i&&te(c)?Xl(c):c}return te(r)?i?Xl(r):fs(r):r}}class qn extends On{constructor(t=!1){super(!1,t)}set(t,s,n,i){let o=t[s];const a=D(t)&&os(s);if(!this._isShallow){const f=Ye(o);if(!Ae(n)&&!Ye(n)&&(o=X(o),n=X(n)),!a&&be(o)&&!be(n))return f||(o.value=n),!0}const r=a?Number(s)<t.length:Q(t,s),c=Reflect.set(t,s,n,be(t)?t:i);return t===X(i)&&c&&(r?Be(n,o)&&et(t,"set",s,n):et(t,"add",s,n)),c}deleteProperty(t,s){const n=Q(t,s);t[s];const i=Reflect.deleteProperty(t,s);return i&&n&&et(t,"delete",s,void 0),i}has(t,s){const n=Reflect.has(t,s);return(!Ze(s)||!Pn.has(s))&&me(t,"has",s),n}ownKeys(t){return me(t,"iterate",D(t)?"length":_t),Reflect.ownKeys(t)}}class Xi extends On{constructor(t=!1){super(!0,t)}set(t,s){return!0}deleteProperty(t,s){return!0}}const Qi=new qn,eo=new Xi,to=new qn(!0);const Jl=e=>e,al=e=>Reflect.getPrototypeOf(e);function lo(e,t,s){return function(...n){const i=this.__v_raw,o=X(i),a=ct(o),r=e==="entries"||e===Symbol.iterator&&a,c=e==="keys"&&a,f=i[e](...n),p=s?Jl:t?pt:Pe;return!t&&me(o,"iterate",c?Gl:_t),ve(Object.create(f),{next(){const{value:m,done:w}=f.next();return w?{value:m,done:w}:{value:r?[p(m[0]),p(m[1])]:p(m),done:w}}})}}function rl(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function so(e,t){const s={get(i){const o=this.__v_raw,a=X(o),r=X(i);e||(Be(i,r)&&me(a,"get",i),me(a,"get",r));const{has:c}=al(a),f=t?Jl:e?pt:Pe;if(c.call(a,i))return f(o.get(i));if(c.call(a,r))return f(o.get(r));o!==a&&o.get(i)},get size(){const i=this.__v_raw;return!e&&me(X(i),"iterate",_t),i.size},has(i){const o=this.__v_raw,a=X(o),r=X(i);return e||(Be(i,r)&&me(a,"has",i),me(a,"has",r)),i===r?o.has(i):o.has(i)||o.has(r)},forEach(i,o){const a=this,r=a.__v_raw,c=X(r),f=t?Jl:e?pt:Pe;return!e&&me(c,"iterate",_t),r.forEach((p,m)=>i.call(o,f(p),f(m),a))}};return ve(s,e?{add:rl("add"),set:rl("set"),delete:rl("delete"),clear:rl("clear")}:{add(i){const o=X(this),a=al(o),r=X(i),c=!t&&!Ae(i)&&!Ye(i)?r:i;return a.has.call(o,c)||Be(i,c)&&a.has.call(o,i)||Be(r,c)&&a.has.call(o,r)||(o.add(c),et(o,"add",c,c)),this},set(i,o){!t&&!Ae(o)&&!Ye(o)&&(o=X(o));const a=X(this),{has:r,get:c}=al(a);let f=r.call(a,i);f||(i=X(i),f=r.call(a,i));const p=c.call(a,i);return a.set(i,o),f?Be(o,p)&&et(a,"set",i,o):et(a,"add",i,o),this},delete(i){const o=X(this),{has:a,get:r}=al(o);let c=a.call(o,i);c||(i=X(i),c=a.call(o,i)),r&&r.call(o,i);const f=o.delete(i);return c&&et(o,"delete",i,void 0),f},clear(){const i=X(this),o=i.size!==0,a=i.clear();return o&&et(i,"clear",void 0,void 0),a}}),["keys","values","entries",Symbol.iterator].forEach(i=>{s[i]=lo(i,e,t)}),s}function ps(e,t){const s=so(e,t);return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(Q(s,i)&&i in n?s:n,i,o)}const no={get:ps(!1,!1)},io={get:ps(!1,!0)},oo={get:ps(!0,!1)};const En=new WeakMap,Rn=new WeakMap,Dn=new WeakMap,ao=new WeakMap;function ro(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fs(e){return Ye(e)?e:hs(e,!1,Qi,no,En)}function co(e){return hs(e,!1,to,io,Rn)}function Xl(e){return hs(e,!0,eo,oo,Dn)}function hs(e,t,s,n,i){if(!te(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const o=i.get(e);if(o)return o;const a=ro(Oi(e));if(a===0)return e;const r=new Proxy(e,a===2?n:s);return i.set(e,r),r}function ut(e){return Ye(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function Ye(e){return!!(e&&e.__v_isReadonly)}function Ae(e){return!!(e&&e.__v_isShallow)}function ms(e){return e?!!e.__v_raw:!1}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function uo(e){return!Q(e,"__v_skip")&&Object.isExtensible(e)&&yn(e,"__v_skip",!0),e}const Pe=e=>te(e)?fs(e):e,pt=e=>te(e)?Xl(e):e;function be(e){return e?e.__v_isRef===!0:!1}function fe(e){return Hn(e,!1)}function Nn(e){return Hn(e,!0)}function Hn(e,t){return be(e)?e:new po(e,t)}class po{constructor(t,s){this.dep=new ds,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:X(t),this._value=s?t:Pe(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Ae(t)||Ye(t);t=n?t:X(t),Be(t,s)&&(this._rawValue=t,this._value=n?t:Pe(t),this.dep.trigger())}}function H(e){return be(e)?e.value:e}const fo={get:(e,t,s)=>t==="__v_raw"?e:H(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const i=e[t];return be(i)&&!be(s)?(i.value=s,!0):Reflect.set(e,t,s,n)}};function Ln(e){return ut(e)?e:new Proxy(e,fo)}class ho{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new ds(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=zt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&oe!==this)return Tn(this,!0),!0}get value(){const t=this.dep.track();return jn(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function mo(e,t,s=!1){let n,i;return V(e)?n=e:(n=e.get,i=e.set),new ho(n,i,s)}const cl={},ml=new WeakMap;let gt;function bo(e,t=!1,s=gt){if(s){let n=ml.get(s);n||ml.set(s,n=[]),n.push(e)}}function vo(e,t,s=se){const{immediate:n,deep:i,once:o,scheduler:a,augmentJob:r,call:c}=s,f=O=>i?O:Ae(O)||i===!1||i===0?tt(O,1):tt(O);let p,m,w,k,W=!1,q=!1;if(be(e)?(m=()=>e.value,W=Ae(e)):ut(e)?(m=()=>f(e),W=!0):D(e)?(q=!0,W=e.some(O=>ut(O)||Ae(O)),m=()=>e.map(O=>{if(be(O))return O.value;if(ut(O))return f(O);if(V(O))return c?c(O,2):O()})):V(e)?t?m=c?()=>c(e,2):e:m=()=>{if(w){nt();try{w()}finally{it()}}const O=gt;gt=p;try{return c?c(e,3,[k]):e(k)}finally{gt=O}}:m=We,t&&i){const O=m,ne=i===!0?1/0:i;m=()=>tt(O(),ne)}const ae=Bi(),Z=()=>{p.stop(),ae&&ae.active&&is(ae.effects,p)};if(o&&t){const O=t;t=(...ne)=>{const L=O(...ne);return Z(),L}}let U=q?new Array(e.length).fill(cl):cl;const z=O=>{if(!(!(p.flags&1)||!p.dirty&&!O))if(t){const ne=p.run();if(O||i||W||(q?ne.some((L,x)=>Be(L,U[x])):Be(ne,U))){w&&w();const L=gt;gt=p;try{const x=[ne,U===cl?void 0:q&&U[0]===cl?[]:U,k];U=ne,c?c(t,3,x):t(...x)}finally{gt=L}}}else p.run()};return r&&r(z),p=new Cn(m),p.scheduler=a?()=>a(z,!1):z,k=O=>bo(O,!1,p),w=p.onStop=()=>{const O=ml.get(p);if(O){if(c)c(O,4);else for(const ne of O)ne();ml.delete(p)}},t?n?z(!0):U=p.run():a?a(z.bind(null,!0),!0):p.run(),Z.pause=p.pause.bind(p),Z.resume=p.resume.bind(p),Z.stop=Z,Z}function tt(e,t=1/0,s){if(t<=0||!te(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,be(e))tt(e.value,t,s);else if(D(e))for(let n=0;n<e.length;n++)tt(e[n],t,s);else if(lt(e)||ct(e))e.forEach(n=>{tt(n,t,s)});else if(vn(e)){for(const n in e)tt(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&tt(e[n],t,s)}return e}function ll(e,t,s,n){try{return n?e(...n):e()}catch(i){Il(i,t,s)}}function De(e,t,s,n){if(V(e)){const i=ll(e,t,s,n);return i&&mn(i)&&i.catch(o=>{Il(o,t,s)}),i}if(D(e)){const i=[];for(let o=0;o<e.length;o++)i.push(De(e[o],t,s,n));return i}}function Il(e,t,s,n=!0){const i=t?t.vnode:null,{errorHandler:o,throwUnhandledErrorInProduction:a}=t&&t.appContext.config||se;if(t){let r=t.parent;const c=t.proxy,f=`https://vuejs.org/error-reference/#runtime-${s}`;for(;r;){const p=r.ec;if(p){for(let m=0;m<p.length;m++)if(p[m](e,c,f)===!1)return}r=r.parent}if(o){nt(),ll(o,null,10,[e,c,f]),it();return}}go(e,s,i,n,a)}function go(e,t,s,n=!0,i=!1){if(i)throw e;console.error(e)}const _e=[];let Ve=-1;const Tt=[];let rt=null,St=0;const Fn=Promise.resolve();let bl=null;function Vn(e){const t=bl||Fn;return e?t.then(this?e.bind(this):e):t}function yo(e){let t=Ve+1,s=_e.length;for(;t<s;){const n=t+s>>>1,i=_e[n],o=Yt(i);o<e||o===e&&i.flags&2?t=n+1:s=n}return t}function bs(e){if(!(e.flags&1)){const t=Yt(e),s=_e[_e.length-1];!s||!(e.flags&2)&&t>=Yt(s)?_e.push(e):_e.splice(yo(t),0,e),e.flags|=1,Un()}}function Un(){bl||(bl=Fn.then(Bn))}function _o(e){if(!D(e))rt&&e.id===-1?rt.splice(St+1,0,e):e.flags&1||(Tt.push(e),e.flags|=1);else for(let t=0;t<e.length;t++)Tt.push(e[t]);Un()}function Ns(e,t,s=Ve+1){for(;s<_e.length;s++){const n=_e[s];if(n&&n.flags&2){if(e&&n.id!==e.uid)continue;_e.splice(s,1),s--,n.flags&4&&(n.flags&=-2),n(),n.flags&4||(n.flags&=-2)}}}function Kn(e){if(Tt.length){const t=[...new Set(Tt)].sort((s,n)=>Yt(s)-Yt(n));if(Tt.length=0,rt){for(let s=0;s<t.length;s++)rt.push(t[s]);return}for(rt=t,St=0;St<rt.length;St++){const s=rt[St];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}rt=null,St=0}}const Yt=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Bn(e){try{for(Ve=0;Ve<_e.length;Ve++){const t=_e[Ve];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),ll(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Ve<_e.length;Ve++){const t=_e[Ve];t&&(t.flags&=-2)}Ve=-1,_e.length=0,Kn(),bl=null,(_e.length||Tt.length)&&Bn()}}let Ie=null,Wn=null;function vl(e){const t=Ie;return Ie=e,Wn=e&&e.type.__scopeId||null,t}function xo(e,t=Ie,s){if(!t||e._n)return e;const n=(...i)=>{n._d&&Ys(-1);const o=vl(t),a=xt.length;let r;try{r=e(...i)}finally{for(let c=xt.length;c>a;c--)bi();vl(o),n._d&&Ys(1)}return r};return n._n=!0,n._c=!0,n._d=!0,n}function Je(e,t){if(Ie===null)return e;const s=El(Ie),n=e.dirs||(e.dirs=[]);for(let i=0;i<t.length;i++){let[o,a,r,c=se]=t[i];o&&(V(o)&&(o={mounted:o,updated:o}),o.deep&&tt(a),n.push({dir:o,instance:s,value:a,oldValue:void 0,arg:r,modifiers:c}))}return e}function bt(e,t,s,n){const i=e.dirs,o=t&&t.dirs;for(let a=0;a<i.length;a++){const r=i[a];o&&(r.oldValue=o[a].value);let c=r.dir[n];c&&(nt(),De(c,s,8,[e.el,r,e,t]),it())}}function wo(e,t){if(we){let s=we.provides;const n=we.parent&&we.parent.provides;n===s&&(s=we.provides=Object.create(n)),s[e]=t}}function pl(e,t,s=!1){const n=ba();if(n||$t){let i=$t?$t._context.provides:n?n.parent==null||n.ce?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides:void 0;if(i&&e in i)return i[e];if(arguments.length>1)return s&&V(t)?t.call(n&&n.proxy):t}}const ko=Symbol.for("v-scx"),Co=()=>pl(ko);function dt(e,t,s){return zn(e,t,s)}function zn(e,t,s=se){const{immediate:n,deep:i,flush:o,once:a}=s,r=ve({},s),c=t&&n||!t&&o!=="post";let f;if(Xt){if(o==="sync"){const k=Co();f=k.__watcherHandles||(k.__watcherHandles=[])}else if(!c){const k=()=>{};return k.stop=We,k.resume=We,k.pause=We,k}}const p=we;r.call=(k,W,q)=>De(k,p,W,q);let m=!1;o==="post"?r.scheduler=k=>{Ce(k,p&&p.suspense)}:o!=="sync"&&(m=!0,r.scheduler=(k,W)=>{W?k():bs(k)}),r.augmentJob=k=>{t&&(k.flags|=4),m&&(k.flags|=2,p&&(k.id=p.uid,k.i=p))};const w=vo(e,t,r);return Xt&&(f?f.push(w):c&&w()),w}function So(e,t,s){const n=this.proxy,i=ce(e)?e.includes(".")?Zn(n,e):()=>n[e]:e.bind(n,n);let o;V(t)?o=t:(o=t.handler,s=t);const a=sl(this),r=zn(i,o.bind(n),s);return a(),r}function Zn(e,t){const s=t.split(".");return()=>{let n=e;for(let i=0;i<s.length&&n;i++)n=n[s[i]];return n}}const To=Symbol("_vte"),Al=e=>e.__isTeleport,Ul=Symbol("_leaveCb");function $o(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==ot){t=s;break}}return t}function Yn(e){if(!gs(e))return Al(e.type)&&e.children?$o(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&V(s.default))return s.default()}}function vs(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;vs(Al(s.type)&&Yn(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Gn(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Hs(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const gl=new WeakMap;function Kt(e,t,s,n,i=!1){if(D(e)){e.forEach((q,ae)=>Kt(q,t&&(D(t)?t[ae]:t),s,n,i));return}if(Bt(n)&&!i){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Kt(e,t,s,n.component.subTree);return}const o=n.shapeFlag&4?El(n.component):n.el,a=i?null:o,{i:r,r:c}=e,f=t&&t.r,p=r.refs===se?r.refs={}:r.refs,m=r.setupState,w=X(m),k=m===se?hn:q=>Hs(p,q)?!1:Q(w,q),W=(q,ae)=>!(ae&&Hs(p,ae));if(f!=null&&f!==c){if(Ls(t),ce(f))p[f]=null,k(f)&&(m[f]=null);else if(be(f)){const q=t;W(f,q.k)&&(f.value=null),q.k&&(p[q.k]=null)}}if(V(c))ll(c,r,12,[a,p]);else{const q=ce(c),ae=be(c);if(q||ae){const Z=()=>{if(e.f){const U=q?k(c)?m[c]:p[c]:W()||!e.k?c.value:p[e.k];if(i)D(U)&&is(U,o);else if(D(U))U.includes(o)||U.push(o);else if(q)p[c]=[o],k(c)&&(m[c]=p[c]);else{const z=[o];W(c,e.k)&&(c.value=z),e.k&&(p[e.k]=z)}}else q?(p[c]=a,k(c)&&(m[c]=a)):ae&&(W(c,e.k)&&(c.value=a),e.k&&(p[e.k]=a))};if(a){const U=()=>{Z(),gl.delete(e)};U.id=-1,gl.set(e,U),Ce(U,s)}else Ls(e),Z()}}}function Ls(e){const t=gl.get(e);t&&(t.flags|=8,gl.delete(e))}Ml().requestIdleCallback;Ml().cancelIdleCallback;const Bt=e=>!!e.type.__asyncLoader,gs=e=>e.type.__isKeepAlive;function Mo(e,t){Jn(e,"a",t)}function jo(e,t){Jn(e,"da",t)}function Jn(e,t,s=we){const n=e.__wdc||(e.__wdc=()=>{let i=s;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Pl(t,n,s),s){let i=s.parent;for(;i&&i.parent;)gs(i.parent.vnode)&&Io(n,t,s,i),i=i.parent}}function Io(e,t,s,n){const i=Pl(t,e,n,!0);_s(()=>{is(n[t],i)},s)}function Pl(e,t,s=we,n=!1){if(s){const i=s[e]||(s[e]=[]),o=t.__weh||(t.__weh=(...a)=>{nt();const r=sl(s),c=De(t,s,e,a);return r(),it(),c});return n?i.unshift(o):i.push(o),o}}const at=e=>(t,s=we)=>{(!Xt||e==="sp")&&Pl(e,(...n)=>t(...n),s)},Ao=at("bm"),ys=at("m"),Po=at("bu"),Oo=at("u"),Xn=at("bum"),_s=at("um"),qo=at("sp"),Eo=at("rtg"),Ro=at("rtc");function Do(e,t=we){Pl("ec",e,t)}const No=Symbol.for("v-ndc");function xe(e,t,s,n){let i;const o=s,a=D(e);if(a||ce(e)){const r=a&&ut(e);let c=!1,f=!1;r&&(c=!Ae(e),f=Ye(e),e=jl(e)),i=new Array(e.length);for(let p=0,m=e.length;p<m;p++)i[p]=t(c?f?pt(Pe(e[p])):Pe(e[p]):e[p],p,void 0,o)}else if(typeof e=="number"){i=new Array(e);for(let r=0;r<e;r++)i[r]=t(r+1,r,void 0,o)}else if(te(e))if(e[Symbol.iterator])i=Array.from(e,(r,c)=>t(r,c,void 0,o));else{const r=Object.keys(e);i=new Array(r.length);for(let c=0,f=r.length;c<f;c++){const p=r[c];i[c]=t(e[p],p,c,o)}}else i=[];return i}const Ql=e=>e?xi(e)?El(e):Ql(e.parent):null,Wt=ve(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=>Ql(e.parent),$root:e=>Ql(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ei(e),$forceUpdate:e=>e.f||(e.f=()=>{bs(e.update)}),$nextTick:e=>e.n||(e.n=Vn.bind(e.proxy)),$watch:e=>So.bind(e)}),Kl=(e,t)=>e!==se&&!e.__isScriptSetup&&Q(e,t),Ho={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:i,props:o,accessCache:a,type:r,appContext:c}=e;if(t[0]!=="$"){const w=a[t];if(w!==void 0)switch(w){case 1:return n[t];case 2:return i[t];case 4:return s[t];case 3:return o[t]}else{if(Kl(n,t))return a[t]=1,n[t];if(i!==se&&Q(i,t))return a[t]=2,i[t];if(Q(o,t))return a[t]=3,o[t];if(s!==se&&Q(s,t))return a[t]=4,s[t];es&&(a[t]=0)}}const f=Wt[t];let p,m;if(f)return t==="$attrs"&&me(e.attrs,"get",""),f(e);if((p=r.__cssModules)&&(p=p[t]))return p;if(s!==se&&Q(s,t))return a[t]=4,s[t];if(m=c.config.globalProperties,Q(m,t))return m[t]},set({_:e},t,s){const{data:n,setupState:i,ctx:o}=e;return Kl(i,t)?(i[t]=s,!0):n!==se&&Q(n,t)?(n[t]=s,!0):Q(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:i,props:o,type:a}},r){let c;return!!(s[r]||e!==se&&r[0]!=="$"&&Q(e,r)||Kl(t,r)||Q(o,r)||Q(n,r)||Q(Wt,r)||Q(i.config.globalProperties,r)||(c=a.__cssModules)&&c[r])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:Q(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Fs(e){return D(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let es=!0;function Lo(e){const t=ei(e),s=e.proxy,n=e.ctx;es=!1,t.beforeCreate&&Vs(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:r,provide:c,inject:f,created:p,beforeMount:m,mounted:w,beforeUpdate:k,updated:W,activated:q,deactivated:ae,beforeDestroy:Z,beforeUnmount:U,destroyed:z,unmounted:O,render:ne,renderTracked:L,renderTriggered:x,errorCaptured:A,serverPrefetch:P,expose:J,inheritAttrs:Oe,components:kt,directives:nl,filters:Rl}=t;if(f&&Fo(f,n,null),a)for(const re in a){const ie=a[re];V(ie)&&(n[re]=ie.bind(s))}if(i){const re=i.call(s,s);te(re)&&(e.data=fs(re))}if(es=!0,o)for(const re in o){const ie=o[re],ht=V(ie)?ie.bind(s,s):V(ie.get)?ie.get.bind(s,s):We,il=!V(ie)&&V(ie.set)?ie.set.bind(s):We,mt=ke({get:ht,set:il});Object.defineProperty(n,re,{enumerable:!0,configurable:!0,get:()=>mt.value,set:qe=>mt.value=qe})}if(r)for(const re in r)Qn(r[re],n,s,re);if(c){const re=V(c)?c.call(s):c;Reflect.ownKeys(re).forEach(ie=>{wo(ie,re[ie])})}p&&Vs(p,e,"c");function ge(re,ie){D(ie)?ie.forEach(ht=>re(ht.bind(s))):ie&&re(ie.bind(s))}if(ge(Ao,m),ge(ys,w),ge(Po,k),ge(Oo,W),ge(Mo,q),ge(jo,ae),ge(Do,A),ge(Ro,L),ge(Eo,x),ge(Xn,U),ge(_s,O),ge(qo,P),D(J))if(J.length){const re=e.exposed||(e.exposed={});J.forEach(ie=>{Object.defineProperty(re,ie,{get:()=>s[ie],set:ht=>s[ie]=ht,enumerable:!0})})}else e.exposed||(e.exposed={});ne&&e.render===We&&(e.render=ne),Oe!=null&&(e.inheritAttrs=Oe),kt&&(e.components=kt),nl&&(e.directives=nl),P&&Gn(e)}function Fo(e,t,s=We){D(e)&&(e=ts(e));for(const n in e){const i=e[n];let o;te(i)?"default"in i?o=pl(i.from||n,i.default,!0):o=pl(i.from||n):o=pl(i),be(o)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[n]=o}}function Vs(e,t,s){De(D(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Qn(e,t,s,n){let i=n.includes(".")?Zn(s,n):()=>s[n];if(ce(e)){const o=t[e];V(o)&&dt(i,o)}else if(V(e))dt(i,e.bind(s));else if(te(e))if(D(e))e.forEach(o=>Qn(o,t,s,n));else{const o=V(e.handler)?e.handler.bind(s):t[e.handler];V(o)&&dt(i,o,e)}}function ei(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:a}}=e.appContext,r=o.get(t);let c;return r?c=r:!i.length&&!s&&!n?c=t:(c={},i.length&&i.forEach(f=>yl(c,f,a,!0)),yl(c,t,a)),te(t)&&o.set(t,c),c}function yl(e,t,s,n=!1){const{mixins:i,extends:o}=t;o&&yl(e,o,s,!0),i&&i.forEach(a=>yl(e,a,s,!0));for(const a in t)if(!(n&&a==="expose")){const r=Vo[a]||s&&s[a];e[a]=r?r(e[a],t[a]):t[a]}return e}const Vo={data:Us,props:Ks,emits:Ks,methods:Ht,computed:Ht,beforeCreate:ye,created:ye,beforeMount:ye,mounted:ye,beforeUpdate:ye,updated:ye,beforeDestroy:ye,beforeUnmount:ye,destroyed:ye,unmounted:ye,activated:ye,deactivated:ye,errorCaptured:ye,serverPrefetch:ye,components:Ht,directives:Ht,watch:Ko,provide:Us,inject:Uo};function Us(e,t){return t?e?function(){return ve(V(e)?e.call(this,this):e,V(t)?t.call(this,this):t)}:t:e}function Uo(e,t){return Ht(ts(e),ts(t))}function ts(e){if(D(e)){const t={};for(let s=0;s<e.length;s++)t[e[s]]=e[s];return t}return e}function ye(e,t){return e?[...new Set([].concat(e,t))]:t}function Ht(e,t){return e?ve(Object.create(null),e,t):t}function Ks(e,t){return e?D(e)&&D(t)?[...new Set([...e,...t])]:ve(Object.create(null),Fs(e),Fs(t??{})):t}function Ko(e,t){if(!e)return t;if(!t)return e;const s=ve(Object.create(null),e);for(const n in t)s[n]=ye(e[n],t[n]);return s}function ti(){return{app:null,config:{isNativeTag:hn,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Bo=0;function Wo(e,t){return function(n,i=null){V(n)||(n=ve({},n)),i!=null&&!te(i)&&(i=null);const o=ti(),a=new WeakSet,r=[];let c=!1;const f=o.app={_uid:Bo++,_component:n,_props:i,_container:null,_context:o,_instance:null,version:wa,get config(){return o.config},set config(p){},use(p,...m){return a.has(p)||(p&&V(p.install)?(a.add(p),p.install(f,...m)):V(p)&&(a.add(p),p(f,...m))),f},mixin(p){return o.mixins.includes(p)||o.mixins.push(p),f},component(p,m){return m?(o.components[p]=m,f):o.components[p]},directive(p,m){return m?(o.directives[p]=m,f):o.directives[p]},mount(p,m,w){if(!c){const k=f._ceVNode||F(n,i);return k.appContext=o,w===!0?w="svg":w===!1&&(w=void 0),e(k,p,w),c=!0,f._container=p,p.__vue_app__=f,El(k.component)}},onUnmount(p){r.push(p)},unmount(){c&&(De(r,f._instance,16),e(null,f._container),delete f._container.__vue_app__)},provide(p,m){return o.provides[p]=m,f},runWithContext(p){const m=$t;$t=f;try{return p()}finally{$t=m}}};return f}}let $t=null;const zo=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ee(t)}Modifiers`]||e[`${wt(t)}Modifiers`];function Zo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||se;let i=s;const o=t.startsWith("update:"),a=o&&zo(n,t.slice(7));a&&(a.trim&&(i=s.map(p=>ce(p)?p.trim():p)),a.number&&(i=i.map(_n)));let r,c=n[r=Nl(t)]||n[r=Nl(Ee(t))];!c&&o&&(c=n[r=Nl(wt(t))]),c&&De(c,e,6,i);const f=n[r+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,De(f,e,6,i)}}const Yo=new WeakMap;function li(e,t,s=!1){const n=s?Yo:t.emitsCache,i=n.get(e);if(i!==void 0)return i;const o=e.emits;let a={},r=!1;if(!V(e)){const c=f=>{const p=li(f,t,!0);p&&(r=!0,ve(a,p))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!r?(te(e)&&n.set(e,null),null):(D(o)?o.forEach(c=>a[c]=null):ve(a,o),te(e)&&n.set(e,a),a)}function Ol(e,t){return!e||!Sl(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Q(e,t[0].toLowerCase()+t.slice(1))||Q(e,wt(t))||Q(e,t))}function Bs(e){const{type:t,vnode:s,proxy:n,withProxy:i,propsOptions:[o],slots:a,attrs:r,emit:c,render:f,renderCache:p,props:m,data:w,setupState:k,ctx:W,inheritAttrs:q}=e,ae=vl(e);let Z,U;try{if(s.shapeFlag&4){const O=i||n,ne=O;Z=Ke(f.call(ne,O,p,m,k,w,W)),U=r}else{const O=t;Z=Ke(O.length>1?O(m,{attrs:r,slots:a,emit:c}):O(m,null)),U=t.props?r:Go(r)}}catch(O){xt.length=0,Il(O,e,1),Z=F(ot)}let z=Z;if(U&&q!==!1){const O=Object.keys(U),{shapeFlag:ne}=z;O.length&&ne&7&&(o&&O.some(Tl)&&(U=Jo(U,o)),z=It(z,U,!1,!0))}if(s.dirs&&(z=It(z,null,!1,!0),z.dirs=z.dirs?z.dirs.concat(s.dirs):s.dirs),s.transition){const O=Al(z.type)&&Yn(z)||z;vs(O,s.transition)}return Z=z,vl(ae),Z}const Go=e=>{let t;for(const s in e)(s==="class"||s==="style"||Sl(s))&&((t||(t={}))[s]=e[s]);return t},Jo=(e,t)=>{const s={};for(const n in e)(!Tl(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Xo(e,t,s){const{props:n,children:i,component:o}=e,{props:a,children:r,patchFlag:c}=t,f=o.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return n?Ws(n,a,f):!!a;if(c&8){const p=t.dynamicProps;for(let m=0;m<p.length;m++){const w=p[m];if(si(a,n,w)&&!Ol(f,w))return!0}}}else return(i||r)&&(!r||!r.$stable)?!0:n===a?!1:n?a?Ws(n,a,f):!0:!!a;return!1}function Ws(e,t,s){const n=Object.keys(t);if(n.length!==Object.keys(e).length)return!0;for(let i=0;i<n.length;i++){const o=n[i];if(si(t,e,o)&&!Ol(s,o))return!0}return!1}function si(e,t,s){const n=e[s],i=t[s];return s==="style"&&te(n)&&te(i)?!st(n,i):n!==i}function Qo({vnode:e,parent:t,suspense:s},n){for(;t;){const i=t.subTree;if(i.suspense&&i.suspense.activeBranch===e&&(i.suspense.vnode.el=i.el=n,e=i),i===e)(e=t.vnode).el=n,t=t.parent;else break}s&&s.activeBranch===e&&(s.vnode.el=n)}const ni={},ii=()=>Object.create(ni),oi=e=>Object.getPrototypeOf(e)===ni;function ea(e,t,s,n=!1){const i={},o=ii();e.propsDefaults=Object.create(null),ai(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);s?e.props=n?i:co(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function ta(e,t,s,n){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,r=X(i),[c]=e.propsOptions;let f=!1;if((n||a>0)&&!(a&16)){if(a&8){const p=e.vnode.dynamicProps;for(let m=0;m<p.length;m++){let w=p[m];if(Ol(e.emitsOptions,w))continue;const k=t[w];if(c)if(Q(o,w))k!==o[w]&&(o[w]=k,f=!0);else{const W=Ee(w);i[W]=ls(c,r,W,k,e,!1)}else k!==o[w]&&(o[w]=k,f=!0)}}}else{ai(e,t,i,o)&&(f=!0);let p;for(const m in r)(!t||!Q(t,m)&&((p=wt(m))===m||!Q(t,p)))&&(c?s&&(s[m]!==void 0||s[p]!==void 0)&&(i[m]=ls(c,r,m,void 0,e,!0)):delete i[m]);if(o!==r)for(const m in o)(!t||!Q(t,m))&&(delete o[m],f=!0)}f&&et(e.attrs,"set","")}function ai(e,t,s,n){const[i,o]=e.propsOptions;let a=!1,r;if(t)for(let c in t){if(Ft(c))continue;const f=t[c];let p;i&&Q(i,p=Ee(c))?!o||!o.includes(p)?s[p]=f:(r||(r={}))[p]=f:Ol(e.emitsOptions,c)||(!(c in n)||f!==n[c])&&(n[c]=f,a=!0)}if(o){const c=X(s),f=r||se;for(let p=0;p<o.length;p++){const m=o[p];s[m]=ls(i,c,m,f[m],e,!Q(f,m))}}return a}function ls(e,t,s,n,i,o){const a=e[s];if(a!=null){const r=Q(a,"default");if(r&&n===void 0){const c=a.default;if(a.type!==Function&&!a.skipFactory&&V(c)){const{propsDefaults:f}=i;if(s in f)n=f[s];else{const p=sl(i);n=f[s]=c.call(null,t),p()}}else n=c;i.ce&&i.ce._setProp(s,n)}a[0]&&(o&&!r?n=!1:a[1]&&(n===""||n===wt(s))&&(n=!0))}return n}const la=new WeakMap;function ri(e,t,s=!1){const n=s?la:t.propsCache,i=n.get(e);if(i)return i;const o=e.props,a={},r=[];let c=!1;if(!V(e)){const p=m=>{c=!0;const[w,k]=ri(m,t,!0);ve(a,w),k&&r.push(...k)};!s&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!o&&!c)return te(e)&&n.set(e,yt),yt;if(D(o))for(let p=0;p<o.length;p++){const m=Ee(o[p]);zs(m)&&(a[m]=se)}else if(o)for(const p in o){const m=Ee(p);if(zs(m)){const w=o[p],k=a[m]=D(w)||V(w)?{type:w}:ve({},w),W=k.type;let q=!1,ae=!0;if(D(W))for(let Z=0;Z<W.length;++Z){const U=W[Z],z=V(U)&&U.name;if(z==="Boolean"){q=!0;break}else z==="String"&&(ae=!1)}else q=V(W)&&W.name==="Boolean";k[0]=q,k[1]=ae,(q||Q(k,"default"))&&r.push(m)}}const f=[a,r];return te(e)&&n.set(e,f),f}function zs(e){return e[0]!=="$"&&!Ft(e)}const xs=e=>e==="_"||e==="_ctx"||e==="$stable",ws=e=>D(e)?e.map(Ke):[Ke(e)],sa=(e,t,s)=>{if(t._n)return t;const n=xo((...i)=>ws(t(...i)),s);return n._c=!1,n},ci=(e,t,s)=>{const n=e._ctx;for(const i in e){if(xs(i))continue;const o=e[i];if(V(o))t[i]=sa(i,o,n);else if(o!=null){const a=ws(o);t[i]=()=>a}}},ui=(e,t)=>{const s=ws(t);e.slots.default=()=>s},di=(e,t,s)=>{for(const n in t)(s||!xs(n))&&(e[n]=t[n])},na=(e,t,s)=>{const n=e.slots=ii();if(e.vnode.shapeFlag&32){const i=t._;i?(di(n,t,s),s&&yn(n,"_",i,!0)):ci(t,n)}else t&&ui(e,t)},ia=(e,t,s)=>{const{vnode:n,slots:i}=e;let o=!0,a=se;if(n.shapeFlag&32){const r=t._;r?s&&r===1?o=!1:di(i,t,s):(o=!t.$stable,ci(t,i)),a=t}else t&&(ui(e,t),a={default:1});if(o)for(const r in i)!xs(r)&&a[r]==null&&delete i[r]},Ce=ua;function oa(e){return aa(e)}function aa(e,t){const s=Ml();s.__VUE__=!0;const{insert:n,remove:i,patchProp:o,createElement:a,createText:r,createComment:c,setText:f,setElementText:p,parentNode:m,nextSibling:w,setScopeId:k=We,insertStaticContent:W}=e,q=(u,d,b,_=null,v=null,y=null,M=void 0,$=null,S=!!d.dynamicChildren)=>{if(u===d)return;u&&!Rt(u,d)&&(_=ol(u),qe(u,v,y,!0),u=null),d.patchFlag===-2&&(S=!1,d.dynamicChildren=null),d.dynamicChildren&&u&&u.dynamicChildren&&u.dynamicChildren.hasOnce&&(d.dynamicChildren===yt&&(d.dynamicChildren=[]),d.dynamicChildren.hasOnce=!0);const{type:g,ref:R,shapeFlag:I}=d;switch(g){case ql:ae(u,d,b,_);break;case ot:Z(u,d,b,_);break;case fl:u==null&&U(d,b,_,M);break;case G:kt(u,d,b,_,v,y,M,$,S);break;default:I&1?ne(u,d,b,_,v,y,M,$,S):I&6?nl(u,d,b,_,v,y,M,$,S):(I&64||I&128)&&g.process(u,d,b,_,v,y,M,$,S,Ot)}R!=null&&v?Kt(R,u&&u.ref,y,d||u,!d):R==null&&u&&u.ref!=null&&Kt(u.ref,null,y,u,!0)},ae=(u,d,b,_)=>{if(u==null)n(d.el=r(d.children),b,_);else{const v=d.el=u.el;d.children!==u.children&&f(v,d.children)}},Z=(u,d,b,_)=>{u==null?n(d.el=c(d.children||""),b,_):d.el=u.el},U=(u,d,b,_)=>{[u.el,u.anchor]=W(u.children,d,b,_,u.el,u.anchor)},z=({el:u,anchor:d},b,_)=>{let v;for(;u&&u!==d;)v=w(u),n(u,b,_),u=v;n(d,b,_)},O=({el:u,anchor:d})=>{let b;for(;u&&u!==d;)b=w(u),i(u),u=b;i(d)},ne=(u,d,b,_,v,y,M,$,S)=>{if(d.type==="svg"?M="svg":d.type==="math"&&(M="mathml"),u==null)L(d,b,_,v,y,M,$,S);else{const g=u.el&&u.el._isVueCE?u.el:null;try{g&&g._beginPatch(),P(u,d,v,y,M,$,S)}finally{g&&g._endPatch()}}},L=(u,d,b,_,v,y,M,$)=>{let S,g;const{props:R,shapeFlag:I,transition:E,dirs:N}=u;if(S=u.el=a(u.type,y,R&&R.is,R),I&8?p(S,u.children):I&16&&A(u.children,S,null,_,v,Bl(u,y),M,$),N&&bt(u,null,_,"created"),x(S,u,u.scopeId,M,_),R){for(const le in R)le!=="value"&&!Ft(le)&&o(S,le,null,R[le],y,_);"value"in R&&o(S,"value",null,R.value,y),(g=R.onVnodeBeforeMount)&&Fe(g,_,u)}N&&bt(u,null,_,"beforeMount");const Y=ra(v,E);Y&&E.beforeEnter(S),n(S,d,b),((g=R&&R.onVnodeMounted)||Y||N)&&Ce(()=>{g&&Fe(g,_,u),Y&&E.enter(S),N&&bt(u,null,_,"mounted")},v)},x=(u,d,b,_,v)=>{if(b&&k(u,b),_)for(let y=0;y<_.length;y++)k(u,_[y]);if(v){let y=v.subTree;if(d===y||mi(y.type)&&(y.ssContent===d||y.ssFallback===d)){const M=v.vnode;x(u,M,M.scopeId,M.slotScopeIds,v.parent)}}},A=(u,d,b,_,v,y,M,$,S=0)=>{for(let g=S;g<u.length;g++){const R=u[g]=$?Qe(u[g]):Ke(u[g]);q(null,R,d,b,_,v,y,M,$)}},P=(u,d,b,_,v,y,M)=>{const $=d.el=u.el;let{patchFlag:S,dynamicChildren:g,dirs:R}=d;S|=u.patchFlag&16;const I=u.props||se,E=d.props||se;let N;if(b&&vt(b,!1),(N=E.onVnodeBeforeUpdate)&&Fe(N,b,d,u),R&&bt(d,u,b,"beforeUpdate"),b&&vt(b,!0),g&&(!u.dynamicChildren||u.dynamicChildren.length!==g.length)&&(S=0,M=!1,g=null),(I.innerHTML&&E.innerHTML==null||I.textContent&&E.textContent==null)&&p($,""),g?J(u.dynamicChildren,g,$,b,_,Bl(d,v),y):M||ie(u,d,$,null,b,_,Bl(d,v),y,!1),S>0){if(S&16)Oe($,I,E,b,v);else if(S&2&&I.class!==E.class&&o($,"class",null,E.class,v),S&4&&o($,"style",I.style,E.style,v),S&8){const Y=d.dynamicProps;for(let le=0;le<Y.length;le++){const ee=Y[le],ue=I[ee],de=E[ee];(de!==ue||ee==="value")&&o($,ee,ue,de,v,b)}}S&1&&u.children!==d.children&&p($,d.children)}else!M&&g==null&&Oe($,I,E,b,v);((N=E.onVnodeUpdated)||R)&&Ce(()=>{N&&Fe(N,b,d,u),R&&bt(d,u,b,"updated")},_)},J=(u,d,b,_,v,y,M)=>{for(let $=0;$<d.length;$++){const S=u[$],g=d[$],R=S.el&&(S.type===G||!Rt(S,g)||S.shapeFlag&198)?m(S.el):b;q(S,g,R,null,_,v,y,M,!0)}},Oe=(u,d,b,_,v)=>{if(d!==b){if(d!==se)for(const y in d)!Ft(y)&&!(y in b)&&o(u,y,d[y],null,v,_);for(const y in b){if(Ft(y))continue;const M=b[y],$=d[y];M!==$&&y!=="value"&&o(u,y,$,M,v,_)}"value"in b&&o(u,"value",d.value,b.value,v)}},kt=(u,d,b,_,v,y,M,$,S)=>{const g=d.el=u?u.el:r(""),R=d.anchor=u?u.anchor:r("");let{patchFlag:I,dynamicChildren:E,slotScopeIds:N}=d;N&&($=$?$.concat(N):N),u==null?(n(g,b,_),n(R,b,_),A(d.children||[],b,R,v,y,M,$,S)):I>0&&I&64&&E&&u.dynamicChildren&&u.dynamicChildren.length===E.length?(J(u.dynamicChildren,E,b,v,y,M,$),(d.key!=null||v&&d===v.subTree)&&pi(u,d,!0)):ie(u,d,b,R,v,y,M,$,S)},nl=(u,d,b,_,v,y,M,$,S)=>{d.slotScopeIds=$,u==null?d.shapeFlag&512?v.ctx.activate(d,b,_,M,S):Rl(d,b,_,v,y,M,S):Ts(u,d,S)},Rl=(u,d,b,_,v,y,M)=>{const $=u.component=ma(u,_,v);if(gs(u)&&($.ctx.renderer=Ot),va($,!1,M),$.asyncDep){if(v&&v.registerDep($,ge,M),!u.el){const S=$.subTree=F(ot);Z(null,S,d,b),u.placeholder=S.el}}else ge($,u,d,b,v,y,M)},Ts=(u,d,b)=>{const _=d.component=u.component;if(Xo(u,d,b))if(_.asyncDep&&!_.asyncResolved){d.el=u.el,re(_,d,b);return}else _.next=d,_.update();else d.el=u.el,_.vnode=d},ge=(u,d,b,_,v,y,M)=>{const $=()=>{if(u.isMounted){let{next:I,bu:E,u:N,parent:Y,vnode:le}=u;{const He=fi(u);if(He){I&&(I.el=le.el,re(u,I,M)),He.asyncDep.then(()=>{Ce(()=>{u.isUnmounted||g()},v)});return}}let ee=I,ue;vt(u,!1),I?(I.el=le.el,re(u,I,M)):I=le,E&&dl(E),(ue=I.props&&I.props.onVnodeBeforeUpdate)&&Fe(ue,Y,I,le),vt(u,!0);const de=Bs(u),Ne=u.subTree;u.subTree=de,q(Ne,de,m(Ne.el),ol(Ne),u,v,y),I.el=de.el,ee===null&&Qo(u,de.el),N&&Ce(N,v),(ue=I.props&&I.props.onVnodeUpdated)&&Ce(()=>Fe(ue,Y,I,le),v)}else{let I;const{el:E,props:N}=d,{bm:Y,m:le,parent:ee,root:ue,type:de}=u,Ne=Bt(d);vt(u,!1),Y&&dl(Y),!Ne&&(I=N&&N.onVnodeBeforeMount)&&Fe(I,ee,d),vt(u,!0);{ue.ce&&ue.ce._hasShadowRoot()&&ue.ce._injectChildStyle(de,u.parent?u.parent.type:void 0);const He=u.subTree=Bs(u);q(null,He,b,_,u,v,y),d.el=He.el}if(le&&Ce(le,v),!Ne&&(I=N&&N.onVnodeMounted)){const He=d;Ce(()=>Fe(I,ee,He),v)}(d.shapeFlag&256||ee&&Bt(ee.vnode)&&ee.vnode.shapeFlag&256)&&u.a&&Ce(u.a,v),u.isMounted=!0,d=b=_=null}};u.scope.on();const S=u.effect=new Cn($);u.scope.off();const g=u.update=S.run.bind(S),R=u.job=S.runIfDirty.bind(S);R.i=u,R.id=u.uid,S.scheduler=()=>bs(R),vt(u,!0),g()},re=(u,d,b)=>{d.component=u;const _=u.vnode.props;u.vnode=d,u.next=null,ta(u,d.props,_,b),ia(u,d.children,b),nt(),Ns(u),it()},ie=(u,d,b,_,v,y,M,$,S=!1)=>{const g=u&&u.children,R=u?u.shapeFlag:0,I=d.children,{patchFlag:E,shapeFlag:N}=d;if(E>0){if(E&128){il(g,I,b,_,v,y,M,$,S);return}else if(E&256){ht(g,I,b,_,v,y,M,$,S);return}}N&8?(R&16&&Pt(g,v,y),I!==g&&p(b,I)):R&16?N&16?il(g,I,b,_,v,y,M,$,S):Pt(g,v,y,!0):(R&8&&p(b,""),N&16&&A(I,b,_,v,y,M,$,S))},ht=(u,d,b,_,v,y,M,$,S)=>{u=u||yt,d=d||yt;const g=u.length,R=d.length,I=Math.min(g,R);let E;for(E=0;E<I;E++){const N=d[E]=S?Qe(d[E]):Ke(d[E]);q(u[E],N,b,null,v,y,M,$,S)}g>R?Pt(u,v,y,!0,!1,I):A(d,b,_,v,y,M,$,S,I)},il=(u,d,b,_,v,y,M,$,S)=>{let g=0;const R=d.length;let I=u.length-1,E=R-1;for(;g<=I&&g<=E;){const N=u[g],Y=d[g]=S?Qe(d[g]):Ke(d[g]);if(Rt(N,Y))q(N,Y,b,null,v,y,M,$,S);else break;g++}for(;g<=I&&g<=E;){const N=u[I],Y=d[E]=S?Qe(d[E]):Ke(d[E]);if(Rt(N,Y))q(N,Y,b,null,v,y,M,$,S);else break;I--,E--}if(g>I){if(g<=E){const N=E+1,Y=N<R?d[N].el:_;for(;g<=E;)q(null,d[g]=S?Qe(d[g]):Ke(d[g]),b,Y,v,y,M,$,S),g++}}else if(g>E)for(;g<=I;)qe(u[g],v,y,!0),g++;else{const N=g,Y=g,le=new Map;for(g=Y;g<=E;g++){const $e=d[g]=S?Qe(d[g]):Ke(d[g]);$e.key!=null&&le.set($e.key,g)}let ee,ue=0;const de=E-Y+1;let Ne=!1,He=0;const qt=new Array(de);for(g=0;g<de;g++)qt[g]=0;for(g=N;g<=I;g++){const $e=u[g];if(ue>=de){qe($e,v,y,!0);continue}let Le;if($e.key!=null)Le=le.get($e.key);else for(ee=Y;ee<=E;ee++)if(qt[ee-Y]===0&&Rt($e,d[ee])){Le=ee;break}Le===void 0?qe($e,v,y,!0):(qt[Le-Y]=g+1,Le>=He?He=Le:Ne=!0,q($e,d[Le],b,null,v,y,M,$,S),ue++)}const js=Ne?ca(qt):yt;for(ee=js.length-1,g=de-1;g>=0;g--){const $e=Y+g,Le=d[$e],Is=d[$e+1],As=$e+1<R?Is.el||hi(Is):_;qt[g]===0?q(null,Le,b,As,v,y,M,$,S):Ne&&(ee<0||g!==js[ee]?mt(Le,b,As,2):ee--)}}},mt=(u,d,b,_,v=null)=>{const{el:y,type:M,transition:$,children:S,shapeFlag:g}=u;if(g&6){mt(u.component.subTree,d,b,_);return}if(g&128){u.suspense.move(d,b,_);return}if(g&64){M.move(u,d,b,Ot);return}if(M===G){n(y,d,b);for(let I=0;I<S.length;I++)mt(S[I],d,b,_);n(u.anchor,d,b);return}if(M===fl){z(u,d,b);return}if(_!==2&&g&1&&$)if(_===0)$.persisted&&!y[Ul]?n(y,d,b):($.beforeEnter(y),n(y,d,b),Ce(()=>$.enter(y),v));else{const{leave:I,delayLeave:E,afterLeave:N}=$,Y=()=>{u.ctx.isUnmounted?i(y):n(y,d,b)},le=()=>{const ee=y._isLeaving||!!y[Ul];y._isLeaving&&y[Ul](!0),$.persisted&&!ee?Y():I(y,()=>{Y(),N&&N()})};E?E(y,Y,le):le()}else n(y,d,b)},qe=(u,d,b,_=!1,v=!1)=>{const{type:y,props:M,ref:$,children:S,dynamicChildren:g,shapeFlag:R,patchFlag:I,dirs:E,cacheIndex:N,memo:Y}=u;if((I===-2||g&&g.hasOnce)&&(v=!1),$!=null&&(nt(),Kt($,null,b,u,!0),it()),N!=null&&(!u.ctx||u.ctx===d)&&(d.renderCache[N]=void 0),R&256){d.ctx.deactivate(u);return}const le=R&1&&E,ee=!Bt(u);let ue;if(ee&&(ue=M&&M.onVnodeBeforeUnmount)&&Fe(ue,d,u),R&6)Ai(u.component,b,_);else{if(R&128){u.suspense.unmount(b,_);return}le&&bt(u,null,d,"beforeUnmount"),R&64?u.type.remove(u,d,b,Ot,_):g&&!g.hasOnce&&(y!==G||I>0&&I&64)?Pt(g,d,b,!1,!0):(y===G&&I&384||!v&&R&16)&&Pt(S,d,b),_&&$s(u)}const de=Y!=null&&N==null;(ee&&(ue=M&&M.onVnodeUnmounted)||le||de)&&Ce(()=>{ue&&Fe(ue,d,u),le&&bt(u,null,d,"unmounted"),de&&(u.el=null)},b)},$s=u=>{const{type:d,el:b,anchor:_,transition:v}=u;if(d===G){Ii(b,_);return}if(d===fl){O(u),v&&!v.persisted&&v.afterLeave&&v.afterLeave();return}const y=()=>{i(b),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(u.shapeFlag&1&&v&&!v.persisted){const{leave:M,delayLeave:$}=v,S=()=>M(b,y);$?$(u.el,y,S):S()}else y()},Ii=(u,d)=>{let b;for(;u!==d;)b=w(u),i(u),u=b;i(d)},Ai=(u,d,b)=>{const{bum:_,scope:v,job:y,subTree:M,um:$,m:S,a:g}=u;Zs(S),Zs(g),_&&dl(_),v.stop(),y?(y.flags|=8,qe(M,u,d,b)):u.vnode.el&&M&&(M.transition=u.vnode.transition,qe(M,u,d,b)),$&&Ce($,d),Ce(()=>{u.isUnmounted=!0},d)},Pt=(u,d,b,_=!1,v=!1,y=0)=>{for(let M=y;M<u.length;M++)qe(u[M],d,b,_,v)},ol=u=>{if(u.shapeFlag&6)return ol(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=w(u.anchor||u.el),b=d&&d[To];return b?w(b):d};let Dl=!1;const Ms=(u,d,b)=>{let _;u==null?d._vnode&&(qe(d._vnode,null,null,!0),_=d._vnode.component):q(d._vnode||null,u,d,null,null,null,b),d._vnode=u,Dl||(Dl=!0,Ns(_),Kn(),Dl=!1)},Ot={p:q,um:qe,m:mt,r:$s,mt:Rl,mc:A,pc:ie,pbc:J,n:ol,o:e};return{render:Ms,hydrate:void 0,createApp:Wo(Ms)}}function Bl({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function vt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ra(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function pi(e,t,s=!1){const n=e.children,i=t.children;if(D(n)&&D(i))for(let o=0;o<n.length;o++){const a=n[o];let r=i[o];r.shapeFlag&1&&!r.dynamicChildren&&((r.patchFlag<=0||r.patchFlag===32)&&(r=i[o]=Qe(i[o]),r.el=a.el),!s&&r.patchFlag!==-2&&pi(a,r)),r.type===ql&&(r.patchFlag===-1&&(r=i[o]=Qe(r)),r.el=a.el),r.type===ot&&!r.el&&(r.el=a.el)}}function ca(e){const t=e.slice(),s=[0];let n,i,o,a,r;const c=e.length;for(n=0;n<c;n++){const f=e[n];if(f!==0){if(i=s[s.length-1],e[i]<f){t[n]=i,s.push(n);continue}for(o=0,a=s.length-1;o<a;)r=o+a>>1,e[s[r]]<f?o=r+1:a=r;f<e[s[o]]&&(o>0&&(t[n]=s[o-1]),s[o]=n)}}for(o=s.length,a=s[o-1];o-- >0;)s[o]=a,a=t[a];return s}function fi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:fi(t)}function Zs(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function hi(e){if(e.placeholder)return e.placeholder;const t=e.component;return t?hi(t.subTree):null}const mi=e=>e.__isSuspense;function ua(e,t){t&&t.pendingBranch?D(e)?t.effects.push(...e):t.effects.push(e):_o(e)}const G=Symbol.for("v-fgt"),ql=Symbol.for("v-txt"),ot=Symbol.for("v-cmt"),fl=Symbol.for("v-stc"),xt=[];let je=null;function C(e=!1){xt.push(je=e?null:[])}function bi(){xt.pop(),je=xt[xt.length-1]||null}let Gt=1;function Ys(e,t=!1){Gt+=e,e<0&&je&&t&&(je.hasOnce=!0)}function vi(e){return e.dynamicChildren=Gt>0?je||yt:null,bi(),Gt>0&&je&&je.push(e),e}function j(e,t,s,n,i,o){return vi(l(e,t,s,n,i,o,!0))}function jt(e,t,s,n,i){return vi(F(e,t,s,n,i,!0))}function gi(e){return e?e.__v_isVNode===!0:!1}function Rt(e,t){return e.type===t.type&&e.key===t.key}const yi=({key:e})=>e??null,hl=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ce(e)||be(e)||V(e)?{i:Ie,r:e,k:t,f:!!s}:e:null);function l(e,t=null,s=null,n=0,i=null,o=e===G?0:1,a=!1,r=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&yi(t),ref:t&&hl(t),scopeId:Wn,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Ie};return r?(_l(c,s),o&128&&e.normalize(c)):s&&(c.shapeFlag|=ce(s)?8:16),Gt>0&&!a&&je&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&je.push(c),c}const F=da;function da(e,t=null,s=null,n=0,i=null,o=!1){if((!e||e===No)&&(e=ot),gi(e)){const r=It(e,t,!0);return s&&_l(r,s),Gt>0&&!o&&je&&(r.shapeFlag&6?je[je.indexOf(e)]=r:je.push(r)),r.patchFlag=-2,r}if(xa(e)&&(e=e.__vccOpts),t){t=pa(t);let{class:r,style:c}=t;r&&!ce(r)&&(t.class=ze(r)),te(c)&&(ms(c)&&!D(c)&&(c=ve({},c)),t.style=ft(c))}const a=ce(e)?1:mi(e)?128:Al(e)?64:te(e)?4:V(e)?2:0;return l(e,t,s,n,i,a,o,!0)}function pa(e){return e?ms(e)||oi(e)?ve({},e):e:null}function It(e,t,s=!1,n=!1){const{props:i,ref:o,patchFlag:a,children:r,transition:c}=e,f=t?_i(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&yi(f),ref:t&&t.ref?s&&o?D(o)?o.concat(hl(t)):[o,hl(t)]:hl(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==G?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&It(e.ssContent),ssFallback:e.ssFallback&&It(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return c&&n&&vs(p,c.clone(p)),p}function h(e=" ",t=0){return F(ql,null,e,t)}function Me(e,t){const s=F(fl,null,e);return s.staticCount=t,s}function B(e="",t=!1){return t?(C(),jt(ot,null,e)):F(ot,null,e)}function Ke(e){return e==null||typeof e=="boolean"?F(ot):D(e)?F(G,null,e.slice()):gi(e)?Qe(e):F(ql,null,String(e))}function Qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:It(e)}function _l(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(D(t))s=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),_l(e,i()),i._c&&(i._d=!0));return}else{s=32;const i=t._;!i&&!oi(t)?t._ctx=Ie:i===3&&Ie&&(Ie.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(V(t)){if(n&65){_l(e,{default:t});return}t={default:t,_ctx:Ie},s=32}else t=String(t),n&64?(s=16,t=[h(t)]):s=8;e.children=t,e.shapeFlag|=s}function _i(...e){const t={};for(let s=0;s<e.length;s++){const n=e[s];for(const i in n)if(i==="class")t.class!==n.class&&(t.class=ze([t.class,n.class]));else if(i==="style")t.style=ft([t.style,n.style]);else if(Sl(i)){const o=t[i],a=n[i];a&&o!==a&&!(D(o)&&o.includes(a))?t[i]=o?[].concat(o,a):a:a==null&&o==null&&!Tl(i)&&(t[i]=a)}else i!==""&&(t[i]=n[i])}return t}function Fe(e,t,s,n=null){De(e,t,7,[s,n])}const fa=ti();let ha=0;function ma(e,t,s){const n=e.type,i=(t?t.appContext:e.appContext)||fa,o={uid:ha++,vnode:e,type:n,parent:t,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Ki(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(i.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ri(n,i),emitsOptions:li(n,i),emit:null,emitted:null,propsDefaults:se,inheritAttrs:n.inheritAttrs,ctx:se,data:se,props:se,attrs:se,slots:se,refs:se,setupState:se,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return o.ctx={_:o},o.root=t?t.root:o,o.emit=Zo.bind(null,o),e.ce&&e.ce(o),o}let we=null;const ba=()=>we||Ie;let xl,Jt;{const e=Ml(),t=(s,n)=>{let i;return(i=e[s])||(i=e[s]=[]),i.push(n),o=>{i.length>1?i.forEach(a=>a(o)):i[0](o)}};xl=t("__VUE_INSTANCE_SETTERS__",s=>we=s),Jt=t("__VUE_SSR_SETTERS__",s=>Xt=s)}const sl=e=>{const t=we;return xl(e),e.scope.on(),()=>{e.scope.off(),xl(t)}},Gs=()=>{we&&we.scope.off(),xl(null)};function xi(e){return e.vnode.shapeFlag&4}let Xt=!1;function va(e,t=!1,s=!1){t&&Jt(t);const{props:n,children:i}=e.vnode,o=xi(e);ea(e,n,o,t),na(e,i,s||t);const a=o?ga(e,t):void 0;return t&&Jt(!1),a}function ga(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ho);const{setup:n}=s;if(n){nt();const i=e.setupContext=n.length>1?_a(e):null,o=sl(e),a=ll(n,e,0,[e.props,i]),r=mn(a);if(it(),o(),(r||e.sp)&&!Bt(e)&&Gn(e),r){if(a.then(Gs,Gs),t)return a.then(c=>{Jt(!0);try{Js(e,c,t)}finally{Jt(!1)}}).catch(c=>{Il(c,e,0)});e.asyncDep=a}else Js(e,a)}else wi(e)}function Js(e,t,s){V(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:te(t)&&(e.setupState=Ln(t)),wi(e)}function wi(e,t,s){const n=e.type;e.render||(e.render=n.render||We);{const i=sl(e);nt();try{Lo(e)}finally{it(),i()}}}const ya={get(e,t){return me(e,"get",""),e[t]}};function _a(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,ya),slots:e.slots,emit:e.emit,expose:t}}function El(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ln(uo(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Wt)return Wt[s](e)},has(t,s){return s in t||s in Wt}})):e.proxy}function xa(e){return V(e)&&"__vccOpts"in e}const ke=(e,t)=>mo(e,t,Xt),wa="3.5.43";let ss;const Xs=typeof window<"u"&&window.trustedTypes;if(Xs)try{ss=Xs.createPolicy("vue",{createHTML:e=>e})}catch{}const ki=ss?e=>ss.createHTML(e):e=>e,ka="http://www.w3.org/2000/svg",Ca="http://www.w3.org/1998/Math/MathML",Xe=typeof document<"u"?document:null,Qs=Xe&&Xe.createElement("template"),Sa={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const i=t==="svg"?Xe.createElementNS(ka,e):t==="mathml"?Xe.createElementNS(Ca,e):s?Xe.createElement(e,{is:s}):Xe.createElement(e);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>Xe.createTextNode(e),createComment:e=>Xe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,i,o){const a=s?s.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),s),!(i===o||!(i=i.nextSibling)););else{Qs.innerHTML=ki(n==="svg"?`<svg>${e}</svg>`:n==="mathml"?`<math>${e}</math>`:e);const r=Qs.content;if(n==="svg"||n==="mathml"){const c=r.firstChild;for(;c.firstChild;)r.appendChild(c.firstChild);r.removeChild(c)}t.insertBefore(r,s)}return[a?a.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Ta=Symbol("_vtc");function $a(e,t,s){const n=e[Ta];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const wl=Symbol("_vod"),Ci=Symbol("_vsh"),Dt={name:"show",beforeMount(e,{value:t},{transition:s}){e[wl]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Nt(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:n}){!t!=!s&&(n?t?(n.beforeEnter(e),Nt(e,!0),n.enter(e)):n.leave(e,()=>{Nt(e,!1)}):Nt(e,t))},beforeUnmount(e,{value:t}){Nt(e,t)}};function Nt(e,t){e.style.display=t?e[wl]:"none",e[Ci]=!t}const Ma=Symbol(""),ja=/(?:^|;)\s*display\s*:/;function Ia(e,t,s){const n=e.style,i=ce(s);let o=!1;if(s&&!i){if(t)if(ce(t))for(const a of t.split(";")){const r=a.slice(0,a.indexOf(":")).trim();s[r]==null&&Lt(n,r,"")}else for(const a in t)s[a]==null&&Lt(n,a,"");for(const a in s){a==="display"&&(o=!0);const r=s[a];r!=null?Pa(e,a,!ce(t)&&t?t[a]:void 0,r)||Lt(n,a,r):Lt(n,a,"")}}else if(i){if(t!==s){const a=n[Ma];a&&(s+=";"+a),n.cssText=s,o=ja.test(s)}}else t&&e.removeAttribute("style");wl in e&&(e[wl]=o?n.display:"",e[Ci]&&(n.display="none"))}const ul=/\s*!important$/;function Lt(e,t,s){if(D(s))s.forEach(n=>Lt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))ul.test(s)?e.setProperty(t,s.replace(ul,""),"important"):e.setProperty(t,s);else{const n=Aa(e,t);ul.test(s)?e.setProperty(wt(n),s.replace(ul,""),"important"):e[n]=s}}const en=["Webkit","Moz","ms"],Wl={};function Aa(e,t){const s=Wl[t];if(s)return s;let n=Ee(t);if(n!=="filter"&&n in e)return Wl[t]=n;n=gn(n);for(let i=0;i<en.length;i++){const o=en[i]+n;if(o in e)return Wl[t]=o}return t}function Pa(e,t,s,n){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&ce(n)&&s===n}const tn="http://www.w3.org/1999/xlink";function ln(e,t,s,n,i,o=Fi(t)){n&&t.startsWith("xlink:")?s==null?e.removeAttributeNS(tn,t.slice(6,t.length)):e.setAttributeNS(tn,t,s):s==null||o&&!xn(s)?e.removeAttribute(t):e.setAttribute(t,o?"":Ze(s)?String(s):s)}function sn(e,t,s,n,i){if(t==="innerHTML"||t==="textContent"){s!=null&&(e[t]=t==="innerHTML"?ki(s):s);return}const o=e.tagName;if(t==="value"&&o!=="PROGRESS"&&!o.includes("-")){const r=o==="OPTION"?e.getAttribute("value")||"":e.value,c=s==null?e.type==="checkbox"?"on":"":String(s);(r!==c||!("_value"in e))&&(e.value=c),s==null&&e.removeAttribute(t),e._value=s;return}let a=!1;if(s===""||s==null){const r=typeof e[t];r==="boolean"?s=xn(s):s==null&&r==="string"?(s="",a=!0):r==="number"&&(s=0,a=!0)}try{e[t]=s}catch{}a&&e.removeAttribute(i||t)}function ks(e,t,s,n){e.addEventListener(t,s,n)}function Oa(e,t,s,n){e.removeEventListener(t,s,n)}const nn=Symbol("_vei");function qa(e,t,s,n,i=null){const o=e[nn]||(e[nn]={}),a=o[t];if(n&&a)a.value=n;else{const[r,c]=Da(t);if(n){const f=o[t]=La(n,i);ks(e,r,f,c)}else a&&(Oa(e,r,a,c),o[t]=void 0)}}const Ea=/(Once|Passive|Capture)$/,Ra=/^on:?(?:Once|Passive|Capture)$/;function Da(e){let t,s;for(;(s=e.match(Ea))&&!Ra.test(e);)t||(t={}),e=e.slice(0,e.length-s[1].length),t[s[1].toLowerCase()]=!0;return[e[2]===":"?e.slice(3):wt(e.slice(2)),t]}let zl=0;const Na=Promise.resolve(),Ha=()=>zl||(Na.then(()=>zl=0),zl=Date.now());function La(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const i=s.value;if(D(i)){const o=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{o.call(n),n._stopped=!0};const a=i.slice(),r=[n];for(let c=0;c<a.length&&!n._stopped;c++){const f=a[c];f&&De(f,t,5,r)}}else De(i,t,5,[n])};return s.value=e,s.attached=Ha(),s}const on=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Fa=(e,t,s,n,i,o)=>{const a=i==="svg";t==="class"?$a(e,n,a):t==="style"?Ia(e,s,n):Sl(t)?Tl(t)||qa(e,t,s,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Va(e,t,n,a))?(sn(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ln(e,t,n,a,o,t!=="value")):e._isVueCE&&(Ua(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ce(n)))?sn(e,Ee(t),n,o,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),ln(e,t,n,a))};function Va(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&on(t)&&V(s));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 i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return on(t)&&ce(s)?!1:t in e}function Ua(e,t){const s=e._def.props;if(!s)return!1;const n=Ee(t);return Array.isArray(s)?s.some(i=>Ee(i)===n):Object.keys(s).some(i=>Ee(i)===n)}const kl=e=>{const t=e.props["onUpdate:modelValue"]||!1;return D(t)?s=>dl(t,s):t},Mt=Symbol("_assign"),an={deep:!0,created(e,t,s){e[Mt]=kl(s),ks(e,"change",()=>{const n=e._modelValue,i=Qt(e),o=e.checked,a=e[Mt];if(D(n)){const r=as(n,i),c=r!==-1;if(o&&!c)a(n.concat(i));else if(!o&&c){const f=[...n];f.splice(r,1),a(f)}}else if(lt(n)){const r=new Set(n);o?r.add(i):r.delete(i),a(r)}else a(Si(e,o))})},mounted:rn,beforeUpdate(e,t,s){e[Mt]=kl(s),rn(e,t,s)}};function rn(e,{value:t,oldValue:s},n){e._modelValue=t;let i;if(D(t))i=as(t,n.props.value)>-1;else if(lt(t))i=t.has(n.props.value);else{if(t===s)return;i=st(t,Si(e,!0))}e.checked!==i&&(e.checked=i)}const cn={deep:!0,created(e,{value:t,modifiers:{number:s}},n){e._modelValue=t,ks(e,"change",()=>{const i=Array.prototype.filter.call(e.options,c=>c.selected).map(c=>s?_n(Qt(c)):Qt(c)),o=e.multiple,a=o?lt(e._modelValue)?new Set(i):i:i[0],r=e._pendingValue=[o,o?D(a)?i.slice():i:a];try{e[Mt](a)}finally{Vn(()=>{e._pendingValue===r&&(e._pendingValue=void 0)})}}),e[Mt]=kl(n)},mounted(e,{value:t}){un(e,t)},beforeUpdate(e,{value:t},s){e._modelValue=t,e[Mt]=kl(s)},updated(e,{value:t}){const s=e._pendingValue;e._pendingValue=void 0,(!s||s[0]!==e.multiple||!Ka(t,s[1],s[0]))&&un(e,t)}};function Ka(e,t,s){if(!s||D(e))return st(e,t);if(lt(e)){if(e.size!==t.length)return!1;for(const n of t)if(!e.has(n))return!1;return!0}return!1}function un(e,t){const s=e.multiple,n=D(t);if(!(s&&!n&&!lt(t))){for(let i=0,o=e.options.length;i<o;i++){const a=e.options[i],r=Qt(a);if(s)if(n){const c=typeof r;c==="string"||c==="number"?a.selected=t.some(f=>String(f)===String(r)):a.selected=as(t,r)>-1}else a.selected=t.has(r);else if(st(Qt(a),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Qt(e){return"_value"in e?e._value:e.value}function Si(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Ba=["ctrl","shift","alt","meta"],Wa={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)=>Ba.some(s=>e[`${s}Key`]&&!t.includes(s))},za=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((i,...o)=>{for(let a=0;a<t.length;a++){const r=Wa[t[a]];if(r&&r(i,t))return}return e(i,...o)}))},Za=ve({patchProp:Fa},Sa);let dn;function Ya(){return dn||(dn=oa(Za))}const Ga=((...e)=>{const t=Ya().createApp(...e),{mount:s}=t;return t.mount=n=>{const i=Xa(n);if(!i)return;const o=t._component;!V(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=s(i,!1,Ja(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t});function Ja(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Xa(e){return ce(e)?document.querySelector(e):e}const Qa={class:"app-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.65","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},er=["d"],he={__name:"AppIcon",props:{name:{type:String,default:"grid"}},setup(e){const t={shield:"M12 2 3 6v6c0 5 9 10 9 10s9-5 9-10V6Z M8 12l3 3 5-6",location:"M20 10c0 6-8 12-8 12S4 16 4 10a8 8 0 1 1 16 0 M15 10a3 3 0 1 1-6 0 3 3 0 0 1 6 0",home:"m3 10 9-7 9 7v10H3Z M9 20v-7h6v7",journal:"M5 3h14v18H5Z M8 7h8 M8 11h8 M8 15h5",grid:"M3 3h7v7H3Z M14 3h7v7h-7Z M3 14h7v7H3Z M14 14h7v7h-7Z",devices:"M3 4h18v12H3Z M8 20h8 M12 16v4",tree:"M9 2h6v6H9Z M2 16h6v6H2Z M16 16h6v6h-6Z M12 8v4 M5 16v-4h14v4",users:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2 M22 21v-2a4 4 0 0 0-3-3.8 M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8 M17 3a4 4 0 0 1 0 8",settings:"M9 3h6l1 4 4 1v8l-4 1-1 4H9l-1-4-4-1V8l4-1Z M15 12a3 3 0 1 0-6 0 3 3 0 0 0 6 0",database:"M3 6c0-5 18-5 18 0s-18 5-18 0V18c0 5 18 5 18 0V6 M3 12c0 5 18 5 18 0",network:"M9 2h6v6H9Z M2 16h6v6H2Z M16 16h6v6h-6Z M12 8v4 M5 16v-4h14v4",arrow:"M5 12h14 M14 7l5 5-5 5",router:"M3 13h18v8H3Z M6 13V5 M18 13V5 M7 17h.01 M11 17h.01 M15 17h3",camera:"M3 6h12v12H3Z M15 10l6-4v12l-6-4"};return(s,n)=>(C(),j("svg",Qa,[l("path",{d:t[e.name]||t.grid},null,8,er)]))}},tr={class:"sidebar"},lr={class:"nav flex-column",id:"main-navigation","aria-label":"主导航"},sr={"data-page":"households",class:"active"},nr={id:"scope-navigation",hidden:""},ir={"data-page":"journal"},or={"data-page":"overview"},ar={"data-page":"objects"},rr={"data-page":"heritage"},cr={"data-page":"users","data-admin":""},ur={"data-page":"settings"},dr={"data-page":"storage"},pr={__name:"AppSidebar",setup(e){return(t,s)=>(C(),j("aside",tr,[s[17]||(s[17]=Me('<a class="brand" href="/"><img id="brand-image" class="brand-icon" src="/zhao-icon.png" alt="赵字古文字风格标识"><span><span id="brand-name">赵府</span><small id="brand-subtitle">智能数字管家</small></span></a><button id="mobile-nav-toggle" class="quiet mobile-nav-toggle" aria-expanded="false" aria-controls="main-navigation" type="button">☰ 菜单</button><div class="nav-label">家宅 · 起居</div>',3)),l("nav",lr,[l("button",sr,[F(he,{name:"home"}),s[0]||(s[0]=h()),s[1]||(s[1]=l("span",null,"我的家庭与场所",-1))]),l("div",nr,[s[12]||(s[12]=l("div",{id:"scope-nav-name",class:"nav-label"},null,-1)),l("button",ir,[F(he,{name:"journal"}),s[2]||(s[2]=h()),s[3]||(s[3]=l("span",null,"记事与阅历",-1))]),l("button",or,[F(he,{name:"grid"}),s[4]||(s[4]=h()),s[5]||(s[5]=l("span",null,"场所总览",-1))]),l("button",ar,[F(he,{name:"devices"}),s[6]||(s[6]=h()),s[7]||(s[7]=l("span",null,"区域与设备",-1))]),l("button",rr,[F(he,{name:"tree"}),s[8]||(s[8]=h()),s[9]||(s[9]=l("span",null,"家庭传承",-1))]),l("button",cr,[F(he,{name:"users"}),s[10]||(s[10]=h()),s[11]||(s[11]=l("span",null,"成员与权限",-1))])]),l("button",ur,[F(he,{name:"settings"}),s[13]||(s[13]=h()),s[14]||(s[14]=l("span",null,"设置中心",-1))]),l("button",dr,[F(he,{name:"database"}),s[15]||(s[15]=h()),s[16]||(s[16]=l("span",null,"平台存储与审计",-1))])]),s[18]||(s[18]=Me('<div class="side-note"><span class="dot"></span> 独立部署 · 数据自有<p>按空间组织画面<br>让每一段记录有处可寻</p></div><p id="current-user" class="description"></p><button id="account-password" class="quiet" hidden>修改我的密码</button><button id="logout" class="quiet">退出登录</button>',4))]))}},Ti=(e,t)=>{const s=e.__vccOpts||e;for(const[n,i]of t)s[n]=i;return s},fr={};function hr(e,t){return C(),j("header",null,[...t[0]||(t[0]=[Me('<div><div class="eyebrow" id="brand-motto">赵氏家宅 · 起居有序</div><h1 id="page-title">我的家庭与场所</h1><p id="page-note">从一个空间,看到每一个位置。</p></div><div class="header-status"><span id="service-status" class="badge">等待连接</span><span id="clock"></span></div>',2)])])}const mr=Ti(fr,[["render",hr]]),K=Nn({state:{households:[],sites:[],cameras:[]},admin:!1,loggedIn:!1,page:"households",session:0,device:null}),Se=Nn({devices:[],groups:[],rows:[]});window.ZhaoVue={enabled:!0,accept(e){K.value=e},setDevices(e){Se.value=e},clear(){Se.value={devices:[],groups:[],rows:[]}}};const Te=()=>window.ZhaoVue,Cs=e=>({lan:"局域网",tailscale:"Tailscale",public:"公网",unknown:"接入待确认"})[e]||"接入待确认";function br(e=[]){const t=[{key:"home",label:"家庭",color:"#258b76",count:0},{key:"office",label:"办公",color:"#5c83cb",count:0},{key:"factory",label:"工厂",color:"#c69a52",count:0},{key:"other",label:"其他",color:"#8997a9",count:0}];let s=0,n=0;for(const o of e)(t.find(a=>a.key===(o.kind||"home"))||t[3]).count++,s+=Math.max(0,Number(o.deviceCount)||0),n+=Math.max(0,Number(o.sites)||0);let i=0;return{total:e.length,devices:s,areas:n,kinds:t.filter(o=>o.count).map(o=>{const a={...o,share:o.count/e.length*100,offset:i};return i+=a.share,a})}}const el=["#268575","#648bcc","#c49b5b","#8e82b5","#899aa5"],Cl=e=>Math.max(0,Math.floor(Number(e)||0));function $i(e=[]){return{series:[{type:"pie",radius:["62%","84%"],center:["50%","50%"],avoidLabelOverlap:!0,label:{show:!1},emphasis:{scale:!1},data:e.map((t,s)=>({name:t.label,value:Cl(t.count),itemStyle:{color:t.color||el[s%el.length],borderRadius:4}}))}]}}function Mi(e=[]){return{grid:{left:12,right:35,top:10,bottom:12,containLabel:!0},xAxis:{type:"value",minInterval:1,axisTick:{show:!1}},yAxis:{type:"category",inverse:!0,axisTick:{show:!1},axisLine:{show:!1},axisLabel:{width:90,overflow:"truncate"},data:e.map(t=>t.label)},series:[{type:"bar",barMaxWidth:20,label:{show:!0,position:"right"},data:e.map((t,s)=>({value:Cl(t.count),itemStyle:{color:t.color||el[s%el.length],borderRadius:[0,5,5,0]}}))}]}}function vr(e={}){const t=[...(e.assets||[]).map(a=>({...a,deviceType:"摄像机"})),...(e.recorders||[]).map(a=>({...a,deviceType:"录像机"})),...e.devices||[]],s=new Map,n=new Map,i={lan:"局域网",tailscale:"Tailscale",public:"公网",unknown:"待登记"};for(const a of t){const r=a.deviceType||"其他",c=i[a.networkAccess]||i.unknown;s.set(r,(s.get(r)||0)+1),n.set(c,(n.get(c)||0)+1)}const o=a=>[...a].map(([r,c])=>({label:r,count:c})).sort((r,c)=>c.count-r.count||r.label.localeCompare(c.label));return{total:t.length,types:o(s),networks:o(n)}}function ji(e,t){return{tooltip:{formatter:s=>s.dataType==="edge"?"已登记的上级连接":s.data.detail||s.name},series:[{type:"graph",layout:"none",roam:!0,draggable:!1,scaleLimit:{min:.2,max:4},symbol:"roundRect",symbolSize:[145,60],edgeSymbol:["none","arrow"],edgeSymbolSize:6,label:{show:!0,fontSize:11,width:128,overflow:"truncate",formatter:s=>s.data.caption||s.name},lineStyle:{color:"#8aa99f",width:2,curveness:.08},emphasis:{focus:"adjacency",lineStyle:{width:3}},data:e,links:t}]}}function gr(e=[],t=()=>""){const s=new Map(e.map(o=>[o.device.id,o])),n=e.map((o,a)=>({id:o.device.id,targetId:o.device.id,name:o.device.name,caption:o.device.name+`
|
||
`+((o.device.networkHosts||[])[0]||"IP 待填写"),detail:[o.device.name,o.device.deviceType,t(o.device.siteId)||"位置待登记",(o.device.networkHosts||[]).join(" / ")||"IP 待填写",{lan:"局域网",tailscale:"Tailscale",public:"公网"}[o.device.networkAccess]||"接入待确认"].join(`
|
||
`),x:Math.max(0,o.depth||0)*280,y:a*105,itemStyle:{color:o.device.source==="camera"?"#e1ebfb":"#dceddf",borderColor:o.device.source==="camera"?"#648bcc":"#468b73",borderWidth:1},label:{color:"#213f48"}})),i=e.flatMap(o=>{const a=s.get(o.device.uplinkId);return a&&a.depth+1===o.depth?[{source:a.device.id,target:o.device.id}]:[]});return ji(n,i)}function yr(e=[],t="赵府"){return ji([{id:"platform",name:t,x:0,y:0,symbolSize:[160,65],itemStyle:{color:"#286d5d"},label:{color:"#fff"}},...e.map((s,n)=>({id:"home:"+s.id,targetId:s.id,name:s.name,caption:s.name+`
|
||
`+Cl(s.deviceCount)+" 台设备",detail:[s.name,{home:"家庭",office:"办公",factory:"工厂"}[s.kind||"home"]||"场所",[s.province,s.city,s.district].filter(Boolean).join(" · "),Cl(s.deviceCount)+" 台已授权设备"].filter(Boolean).join(`
|
||
`),x:300,y:(n-(e.length-1)/2)*120,itemStyle:{color:"#e3efe8",borderColor:"#8ebaa6",borderWidth:1},label:{color:"#213f48"}}))],e.map(s=>({source:"platform",target:"home:"+s.id})))}const _r="modulepreload",xr=function(e){return"/ui/"+e},pn={},wr=function(t,s,n){let i=Promise.resolve();if(s&&s.length>0){let f=function(p){return Promise.all(p.map(m=>Promise.resolve(m).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};var a=f;document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),c=r?.nonce||r?.getAttribute("nonce");i=f(s.map(p=>{if(p=xr(p),p in pn)return;pn[p]=!0;const m=p.endsWith(".css"),w=m?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${w}`))return;const k=document.createElement("link");if(k.rel=m?"stylesheet":_r,m||(k.as="script"),k.crossOrigin="",k.href=p,c&&k.setAttribute("nonce",c),document.head.appendChild(k),m)return new Promise((W,q)=>{k.addEventListener("load",W),k.addEventListener("error",()=>q(new Error(`Unable to preload CSS for ${p}`)))})}))}function o(r){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=r,window.dispatchEvent(c),!c.defaultPrevented)throw r}return i.then(r=>{for(const c of r||[])c.status==="rejected"&&o(c.reason);return t().catch(o)})},kr={class:"local-chart-wrap"},Cr=["aria-label"],Sr={key:0,class:"small text-secondary px-3",role:"status"},At={__name:"LocalChart",props:{option:{type:Object,required:!0},label:String,active:{type:Boolean,default:!0},height:{type:Number,default:260}},emits:["select"],setup(e,{emit:t}){const s=e,n=t,i=fe(null),o=fe(!1);let a,r,c,f,p=!0,m=!1,w="",k="";function W(){a?.dispose(),a=null,w="",k=""}function q(){!f&&p&&(f=requestAnimationFrame(()=>{f=null,ae()}))}async function ae(){if(!p||!i.value||!s.active){W();return}const Z=Math.floor(i.value.clientWidth),U=Math.floor(i.value.clientHeight);if(!Z||!U)return;if(!a){if(m)return;m=!0;try{const P=await wr(()=>import("./charts-runtime-Q8qiYCVP.js"),[]);if(!p||!s.active||!i.value)return;a=P.init(i.value,null,{renderer:"canvas",devicePixelRatio:Math.min(window.devicePixelRatio||1,2)}),a.on("click",J=>{J.data?.targetId&&n("select",J.data.targetId)}),o.value=!1}catch(P){o.value=!0,console.error("Local chart unavailable",P);return}finally{m=!1}}const z=getComputedStyle(document.documentElement),O=z.getPropertyValue("--ink").trim()||"#253b46",ne=z.getPropertyValue("--ui-muted").trim()||"#627485",L=z.getPropertyValue("--ui-line").trim()||"#e3e9ef",x=JSON.stringify(s.option)+O+ne+L;if(x!==w){const P={...s.option,animation:!1,backgroundColor:"transparent",textStyle:{color:O,fontFamily:"system-ui, Microsoft YaHei, sans-serif"},aria:{enabled:!0,description:s.label},tooltip:{trigger:"item",renderMode:"richText",confine:!0,...s.option.tooltip}};for(const J of["xAxis","yAxis"])P[J]&&(P[J]={...P[J],axisLabel:{color:ne,...P[J].axisLabel},splitLine:{lineStyle:{color:L}}});P.series=(P.series||[]).map(J=>({...J,label:{color:O,...J.label}})),a.setOption(P,{notMerge:!0,lazyUpdate:!1}),w=x}const A=Z+":"+U;A!==k&&(a.resize({width:Z,height:U}),k=A)}return dt(()=>[s.option,s.active],q,{deep:!0,flush:"post"}),ys(()=>{r=new ResizeObserver(q),r.observe(i.value),c=new MutationObserver(q),c.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme","data-density"]}),q()}),Xn(()=>{p=!1,cancelAnimationFrame(f),r?.disconnect(),c?.disconnect(),W()}),(Z,U)=>(C(),j("div",kr,[l("div",{ref_key:"host",ref:i,class:"local-chart",role:"img","aria-label":e.label,style:ft({height:e.height+"px"})},null,12,Cr),o.value?(C(),j("p",Sr,"图表暂未加载,可查看下方数据。")):B("",!0)]))}},Tr={class:"col-12 col-xl-4"},$r={class:"dashboard-welcome h-100"},Mr={class:"dashboard-totals"},jr={class:"insight-scope"},Ir={class:"col-12 d-md-none"},Ar=["aria-expanded"],Pr={class:"col-12 col-md-5 col-xl-3 dashboard-chart-column"},Or={class:"chart-card h-100"},qr={class:"chart-heading"},Er={class:"badge"},Rr={key:1,class:"chart-empty"},Dr={class:"chart-legend"},Nr={class:"col-12 col-md-7 col-xl-5 dashboard-chart-column"},Hr={class:"chart-card h-100"},Lr={key:1,class:"chart-empty"},Fr={key:2,class:"chart-data"},Vr={__name:"HomeInsights",setup(e){const t=ke(()=>br(K.value.state.households)),s=fe(!1),n=ke(()=>K.value.loggedIn&&K.value.page==="households"),i=ke(()=>(K.value.state.households||[]).map(o=>({label:o.name,count:o.deviceCount||0})).sort((o,a)=>a.count-o.count).slice(0,8));return(o,a)=>(C(),j("section",{class:ze(["dashboard-grid row g-3 mb-4",{"charts-expanded":s.value}]),"aria-label":"已授权场所概览"},[l("div",Tr,[l("article",$r,[a[5]||(a[5]=l("span",{class:"insight-kicker"},"一处相连 · 各有归属",-1)),a[6]||(a[6]=l("h2",null,"家与日常,尽在掌握",-1)),a[7]||(a[7]=l("p",null,"从一处灯火,连接生活的每个空间。",-1)),l("div",Mr,[l("div",null,[l("strong",null,T(t.value.total),1),a[1]||(a[1]=l("span",null,"家庭与场所",-1))]),l("div",null,[l("strong",null,T(t.value.devices),1),a[2]||(a[2]=l("span",null,"已登记设备",-1))]),l("div",null,[l("strong",null,T(t.value.areas),1),a[3]||(a[3]=l("span",null,"区域空间",-1))])]),l("div",jr,[F(he,{name:"shield"}),a[4]||(a[4]=h(" 仅汇总你有权访问的家庭与场所",-1))])])]),l("div",Ir,[l("button",{class:"btn btn-outline-secondary w-100","aria-expanded":s.value,onClick:a[0]||(a[0]=r=>s.value=!s.value)},T(s.value?"收起图表统计":"展开图表统计"),9,Ar)]),l("div",Pr,[l("article",Or,[l("div",qr,[a[8]||(a[8]=l("h3",null,"空间分布",-1)),l("span",Er,T(t.value.total)+" 处",1)]),t.value.total?(C(),jt(At,{key:0,option:H($i)(t.value.kinds),active:n.value,height:160,label:"场所分布:"+t.value.kinds.map(r=>r.label+r.count+"个").join(",")},null,8,["option","active","label"])):(C(),j("p",Rr,"添加家庭或场所后显示分布")),l("div",Dr,[(C(!0),j(G,null,xe(t.value.kinds,r=>(C(),j("span",{key:r.key},[l("i",{style:ft({background:r.color})},null,4),h(T(r.label)+" ",1),l("b",null,T(r.count),1)]))),128))])])]),l("div",Nr,[l("article",Hr,[a[10]||(a[10]=l("div",{class:"chart-heading"},[l("h3",null,"设备分布"),l("span",{class:"small text-secondary"},"按场所 · 最多显示 8 处")],-1)),i.value.length?(C(),jt(At,{key:0,option:H(Mi)(i.value),active:n.value,height:190,label:"各场所已登记设备:"+i.value.map(r=>r.label+r.count+"台").join(",")},null,8,["option","active","label"])):(C(),j("p",Lr,"暂无已授权场所")),i.value.length?(C(),j("details",Fr,[a[9]||(a[9]=l("summary",null,"查看统计数字",-1)),l("ul",null,[(C(!0),j(G,null,xe(i.value,r=>(C(),j("li",{key:r.label},T(r.label)+":"+T(r.count)+" 台",1))),128))])])):B("",!0)])])],2))}},Ur={id:"page-households",class:"page"},Kr={class:"section-head"},Br={class:"count-pill"},Wr=["hidden"],zr={class:"btn-group",role:"group","aria-label":"场所显示方式"},Zr=["aria-pressed"],Yr=["aria-pressed"],Gr=["aria-expanded"],Jr={id:"home-layout-options",class:"home-layout-controls"},Xr=["disabled"],Qr=["value"],ec=["disabled"],tc=["value"],lc={class:"inline-check"},sc=["disabled"],nc={class:"inline-check"},ic=["disabled"],oc=["disabled"],ac=["disabled"],rc={id:"home-layout-status",role:"status",class:"small text-secondary"},cc={key:0,class:"group-title"},uc={class:"home-card-grid"},dc=["draggable","onDragstart","onDrop"],pc={class:"home-cover"},fc=["src","alt"],hc={class:"home-cover-content"},mc={class:"site-heading"},bc={class:"badge"},vc=["data-edit-household"],gc={class:"home-location"},yc={class:"card-body"},_c={key:0,class:"home-order-actions"},xc=["disabled","aria-label","onClick"],wc=["disabled","aria-label","onClick"],kc={class:"home-summary"},Cc={class:"home-numbers"},Sc={class:"compact-details"},Tc={class:"home-card-actions"},$c=["onClick"],Mc=["data-leadership"],jc={key:0,class:"empty"},Ic={id:"home-global-topology",class:"network-overview"},Ac={class:"network-platform"},Pc={key:0,class:"chart-network-surface mb-3"},Oc={class:"platform-place-grid"},qc=["onClick"],Ec={class:"badge"},Rc={class:"home-pagination"},Dc={id:"home-page-info"},Nc=["disabled"],Hc=["disabled"],Lc={__name:"HomeExplorer",setup(e){const t=fe({revision:0,columns:2,rows:2,groupCity:!1,order:[]}),s=fe(!1),n=fe(!1),i=fe(0),o=fe(!1),a=fe("cards"),r=fe(!1),c=fe(""),f=fe("");let p="";dt(K,L=>{const x=L.user?.id+":"+L.session;p!==x&&(p=x,s.value=!1,n.value=!1,i.value=0,o.value=!1,a.value="cards",r.value=!1,c.value="",f.value=""),!s.value&&!n.value&&(t.value={revision:0,columns:2,rows:2,groupCity:!1,order:[],...L.state.householdLayout})},{immediate:!0});const m=ke(()=>{const L=K.value.state.households||[],x=new Map(L.map(A=>[A.id,A]));return[...new Set([...t.value.order,...L.map(A=>A.id)])].filter(A=>x.has(A)).map(A=>x.get(A))}),w=ke(()=>t.value.columns*t.value.rows),k=ke(()=>Math.max(1,Math.ceil(m.value.length/w.value)));dt(k,L=>i.value=Math.min(i.value,L-1));const W=ke(()=>{const L=m.value.slice(i.value*w.value,(i.value+1)*w.value);if(!t.value.groupCity)return[{name:"",items:L}];const x=new Map;for(const A of L){const P=[A.geography?.country||A.country,A.province,A.city||"地区待填写"].filter(Boolean).join(" / ");x.has(P)||x.set(P,[]),x.get(P).push(A)}return[...x].map(([A,P])=>({name:A,items:P}))}),q=L=>({home:"家庭",office:"办公场所",factory:"工厂"})[L.kind||"home"]||"场所",ae=L=>Te().address?.(L)||[L.province,L.city,L.district].filter(Boolean).join(" · ")||"地区待填写";function Z(){s.value=!0,i.value=0,t.value.groupCity&&(o.value=!1),f.value="布局已调整,保存后下次登录会沿用。"}function U(L,x,A){if(n.value)return;const P=m.value.map(kt=>kt.id),J=P.indexOf(L),Oe=A?P.indexOf(A):J+x;J<0||Oe<0||Oe>=P.length||J===Oe||(P.splice(J,1),P.splice(Oe,0,L),t.value.order=P,s.value=!0,i.value=Math.floor(Oe/w.value))}function z(){s.value=!1,t.value={...K.value.state.householdLayout},i.value=0,f.value=""}async function O(){const L=p;n.value=!0;try{const x=await Te().saveLayout({...t.value});if(L!==p)return;t.value=x,s.value=!1,f.value="布局与卡片顺序已保存"}catch(x){!x.stale&&L===p&&(f.value=x.message)}finally{L===p&&(n.value=!1)}}async function ne(L,x=!1){await Te().enterHome(L.id,x)}return(L,x)=>(C(),j("section",Ur,[l("div",Kr,[l("div",null,[l("h2",null,[x[12]||(x[12]=h(" 我的空间 ",-1)),l("span",Br,T(m.value.length),1)]),x[13]||(x[13]=l("p",{class:"description mb-0"}," 家庭、办公与工厂,各自管理成员、区域和设备。 ",-1))]),l("button",{id:"new-household",class:"btn btn-primary",hidden:!H(K).platformAdmin}," + 新建家庭或场所 ",8,Wr)]),F(Vr),l("div",{class:ze(["home-toolbar",{"home-options-open":r.value}])},[l("div",zr,[l("button",{id:"home-card-view",class:ze(["btn btn-outline-secondary",{active:a.value==="cards"}]),"aria-pressed":a.value==="cards",onClick:x[0]||(x[0]=A=>a.value="cards")},[F(he,{name:"grid"}),x[14]||(x[14]=h(" 卡片",-1))],10,Zr),l("button",{id:"home-topology-view",class:ze(["btn btn-outline-secondary",{active:a.value==="topology"}]),"aria-pressed":a.value==="topology",onClick:x[1]||(x[1]=A=>a.value="topology")},[F(he,{name:"network"}),x[15]||(x[15]=h(" 整体拓扑 ",-1))],10,Yr)]),Je(l("button",{class:"btn btn-outline-secondary home-layout-toggle","aria-expanded":r.value,"aria-controls":"home-layout-options",onClick:x[2]||(x[2]=A=>r.value=!r.value)},T(r.value?"收起设置":"布局设置"),9,Gr),[[Dt,a.value==="cards"]]),Je(l("div",Jr,[l("label",null,[x[16]||(x[16]=h("每页 ",-1)),Je(l("select",{id:"home-columns","onUpdate:modelValue":x[3]||(x[3]=A=>t.value.columns=A),class:"form-select",disabled:n.value,onChange:Z},[(C(),j(G,null,xe(4,A=>l("option",{key:A,value:A},T(A)+" 列",9,Qr)),64))],40,Xr),[[cn,t.value.columns,void 0,{number:!0}]])]),x[19]||(x[19]=l("span",null,"×",-1)),Je(l("select",{id:"home-rows","onUpdate:modelValue":x[4]||(x[4]=A=>t.value.rows=A),"aria-label":"每页行数",class:"form-select",disabled:n.value,onChange:Z},[(C(),j(G,null,xe(4,A=>l("option",{key:A,value:A},T(A)+" 行",9,tc)),64))],40,ec),[[cn,t.value.rows,void 0,{number:!0}]]),l("label",lc,[Je(l("input",{id:"home-group-city","onUpdate:modelValue":x[5]||(x[5]=A=>t.value.groupCity=A),type:"checkbox",class:"form-check-input",disabled:n.value,onChange:Z},null,40,sc),[[an,t.value.groupCity]]),x[17]||(x[17]=h("按城市分组",-1))]),l("label",nc,[Je(l("input",{id:"home-arrange","onUpdate:modelValue":x[6]||(x[6]=A=>o.value=A),type:"checkbox",class:"form-check-input",disabled:t.value.groupCity||n.value},null,8,ic),[[an,o.value]]),x[18]||(x[18]=h("调整顺序",-1))]),l("button",{id:"home-layout-save",class:"btn btn-primary",disabled:!s.value||n.value,onClick:O},T(n.value?"保存中…":"保存布局"),9,oc),l("button",{id:"home-layout-reset",class:"btn btn-outline-secondary",disabled:!s.value||n.value,onClick:z}," 撤销 ",8,ac)],512),[[Dt,a.value==="cards"]])],2),l("p",rc,T(f.value||"布局仅影响你的账号;手机端自动适配为单列。"),1),Je(l("div",{id:"household-list",style:ft({"--home-columns":t.value.columns})},[(C(!0),j(G,null,xe(W.value,A=>(C(),j("section",{key:A.name,class:"home-city-group"},[A.name?(C(),j("h3",cc,T(A.name),1)):B("",!0),l("div",uc,[(C(!0),j(G,null,xe(A.items,P=>(C(),j("article",{key:P.id,class:"card home-card",draggable:o.value&&!n.value,onDragstart:J=>{c.value=P.id,J.dataTransfer.setData("text/plain",P.id)},onDragend:x[7]||(x[7]=J=>c.value=""),onDragover:x[8]||(x[8]=J=>o.value&&c.value&&J.preventDefault()),onDrop:za(J=>{o.value&&c.value&&U(c.value,0,P.id),c.value=""},["prevent"])},[l("div",pc,[P.coverUrl?(C(),j("img",{key:0,src:P.coverUrl,alt:P.name+"封面",loading:"lazy"},null,8,fc)):B("",!0),x[20]||(x[20]=l("div",{class:"cover-shade"},null,-1)),l("div",hc,[l("div",mc,[l("span",bc,[h(T(q(P)),1),P.id===H(K).state.familyId?(C(),j(G,{key:0},[h(" · 当前")],64)):B("",!0)]),H(K).admin?(C(),j("button",{key:0,class:"btn btn-sm cover-edit","data-edit-household":P.id}," 编辑 ",8,vc)):B("",!0)]),l("div",null,[l("h3",null,T(P.name),1),l("p",gc,T(ae(P)),1)])])]),l("div",yc,[o.value?(C(),j("div",_c,[x[21]||(x[21]=l("span",null,"拖动排序",-1)),l("button",{class:"btn btn-sm btn-outline-secondary",disabled:m.value[0]?.id===P.id||n.value,"aria-label":P.name+"前移",onClick:J=>U(P.id,-1)}," ←",8,xc),l("button",{class:"btn btn-sm btn-outline-secondary",disabled:m.value.at(-1)?.id===P.id||n.value,"aria-label":P.name+"后移",onClick:J=>U(P.id,1)}," → ",8,wc)])):B("",!0),l("p",kc,T(P.note||"成员、空间与设备,独立管理。"),1),l("div",Cc,[l("span",null,[l("b",null,T(P.deviceCount||0),1),x[22]||(x[22]=h("设备",-1))]),l("span",null,[l("b",null,T(P.sites||0),1),x[23]||(x[23]=h("区域",-1))]),l("span",null,[l("b",null,T(P.members||0),1),x[24]||(x[24]=h("成员",-1))])]),l("dl",Sc,[l("div",null,[l("dt",null,T(P.kind==="office"||P.kind==="factory"?"主要负责人":"一家之主"),1),l("dd",null,T(P.ownerName||"待指定"),1)]),l("div",null,[x[25]||(x[25]=l("dt",null,"备用负责人",-1)),l("dd",null,T(P.successorName||"待指定"),1)])]),l("div",Tc,[l("button",{class:"btn btn-primary",onClick:J=>ne(P)},[x[26]||(x[26]=h(" 进入空间 ",-1)),F(he,{name:"arrow"})],8,$c),P.canAssignOwner?(C(),j("button",{key:0,class:"btn btn-link","data-leadership":P.id}," 负责人安排 ",8,Mc)):B("",!0)])])],40,dc))),128))])]))),128)),m.value.length?B("",!0):(C(),j("div",jc," 登录后查看已授权的家庭与场所。 "))],4),[[Dt,a.value==="cards"]]),Je(l("div",Ic,[l("div",Ac,[F(he,{name:"network"}),l("div",null,[l("h3",null,T(H(K).brandName||"赵府")+" · 数字管家",1),l("p",null,T(m.value.length)+" 个已授权空间",1)])]),x[28]||(x[28]=l("p",{class:"description"}," 平台与场所的管理关系;进入场所查看内部设备及网络。 ",-1)),m.value.length?(C(),j("div",Pc,[F(At,{option:H(yr)(m.value,H(K).brandName||"赵府"),active:H(K).loggedIn&&H(K).page==="households"&&a.value==="topology",height:340,label:"平台及已授权场所关系图;点击场所进入内部网络,下面也可通过卡片进入。",onSelect:x[9]||(x[9]=A=>ne({id:A},!0))},null,8,["option","active"])])):B("",!0),l("div",Oc,[(C(!0),j(G,null,xe(m.value,A=>(C(),j("button",{key:A.id,class:"card platform-place-node",onClick:P=>ne(A,!0)},[l("span",Ec,T(q(A)),1),l("h3",null,T(A.name),1),l("p",null,T(ae(A)),1),l("span",null,T(A.deviceCount||0)+" 台设备",1),l("small",null,T((A.networkAccesses||[]).map(H(Cs)).join(" · ")||"网络待登记"),1),x[27]||(x[27]=l("span",{class:"network-open"},"查看网络拓扑 →",-1))],8,qc))),128))])],512),[[Dt,a.value==="topology"]]),Je(l("div",Rc,[l("span",Dc,"第 "+T(i.value+1)+" / "+T(k.value)+" 页 · 每页最多 "+T(w.value)+" 张",1),l("button",{id:"home-prev",class:"btn btn-outline-secondary",disabled:!i.value,onClick:x[10]||(x[10]=A=>i.value--)}," 上一页",8,Nc),l("button",{id:"home-next",class:"btn btn-outline-secondary",disabled:i.value>=k.value-1,onClick:x[11]||(x[11]=A=>i.value++)}," 下一页 ",8,Hc)],512),[[Dt,a.value==="cards"]])]))}},Fc={key:0,class:"network-status-block"},Vc={class:"network-status-title"},Uc=["disabled"],Kc={key:0,class:"text-danger small",role:"status"},Bc={key:0,class:"small text-secondary"},Wc={key:1,class:"small text-secondary"},zc={key:2,class:"small text-secondary"},Zc={class:"management-links"},Yc=["href"],Gc={key:0},Jc={class:"network-check-time"},Ss={__name:"NetworkStatus",props:{device:{type:Object,required:!0},active:{type:Boolean,default:!0}},setup(e){const t=e,s=fe(null),n=fe(!1),i=fe("");let o=0,a;const r=ke(()=>[t.device.id,t.device.source,t.device.managementHost,t.device.tailscaleHost,t.device.networkCidr,K.value.state.familyId,K.value.session,K.value.admin,t.active].join("|"));async function c(){const m=o;if(!(n.value||!K.value.admin||!t.active)){n.value=!0,i.value="";try{const w=await Te().api("/api/devices/network?source="+encodeURIComponent(t.device.source)+"&id="+encodeURIComponent(t.device.id));m===o&&(s.value=w)}catch(w){m===o&&!w.stale&&(i.value=w.message)}finally{m===o&&(n.value=!1,a=setTimeout(c,35e3))}}}dt(r,()=>{o++,clearTimeout(a),n.value=!1,s.value=null,i.value="",K.value.admin&&t.active&&c()},{immediate:!0}),_s(()=>{o++,clearTimeout(a)});const f=ke(()=>s.value?s.value.targets.some(m=>m.reachable)?"网络可达":"未连通":"等待检查");function p(){clearTimeout(a),c()}return(m,w)=>H(K).admin?(C(),j("div",Fc,[l("div",Vc,[l("span",null,[l("i",{class:ze(["status-dot",{online:s.value?.targets.some(k=>k.reachable)}])},null,2),h(T(n.value?"正在检查…":f.value),1)]),l("button",{class:"btn btn-sm btn-link",disabled:n.value,onClick:p},"检查网络",8,Uc)]),i.value?(C(),j("p",Kc,T(i.value),1)):B("",!0),s.value?(C(),j(G,{key:1},[(C(!0),j(G,null,xe(s.value.targets,k=>(C(),j("div",{key:k.kind,class:"network-target"},[l("span",null,T(k.kind==="tailscale"?"Tailscale":"设备地址"),1),l("code",null,T(k.host),1),l("span",{class:ze(k.reachable?"text-success":"text-secondary")},T(k.reachable?"服务可达":"未响应"),3)]))),128)),s.value.targets.length?B("",!0):(C(),j("p",Bc,"请编辑设备档案,填写 IP 或域名。")),s.value.tailscale?.available?(C(),j("p",Wc,[h("Tailscale 节点"+T(s.value.tailscale.online?"在线":"离线"),1),s.value.tailscale.subnet?(C(),j(G,{key:0},[h(" · "+T(s.value.tailscale.subnetAvailable?"已发布":"未检测到")+" "+T(s.value.tailscale.subnet)+" 路由",1)],64)):B("",!0)])):s.value.tailscale?(C(),j("p",zc,T(s.value.tailscale.note),1)):B("",!0),l("div",Zc,[(C(!0),j(G,null,xe(s.value.links,k=>(C(),j("a",{key:k.kind,href:k.url,target:"_blank",rel:"noopener noreferrer",class:"btn btn-sm btn-outline-secondary"},[h("打开管理后台 · "+T(k.kind==="tailscale"?"Tailscale":"局域网")+" ↗",1),k.verified?B("",!0):(C(),j("span",Gc,"(待连通)"))],8,Yc))),128))]),l("small",Jc,"检查于 "+T(new Date(s.value.checkedAt*1e3).toLocaleTimeString("zh-CN"))+" · 从服务器探测,打开后台需当前浏览器也能到达。",1)],64)):B("",!0)])):B("",!0)}},Xc={id:"asset-list"},Qc={class:"group-title"},eu={class:"count-pill"},tu={class:"device-card-grid"},lu={class:"card-body"},su={class:"device-card-heading"},nu={class:"device-symbol"},iu={class:"flex-grow-1"},ou={class:"small text-secondary"},au=["onClick"],ru={class:"device-location"},cu={class:"compact-details"},uu={class:"font-monospace"},du={key:0},pu={key:0,class:"device-tags"},fu={class:"card-footer device-card-actions"},hu=["onClick"],mu=["onClick"],bu=["onClick"],vu={key:0,class:"empty"},gu={__name:"DeviceCollection",setup(e){const t=i=>(K.value.state.cameras||[]).filter(o=>i.source==="camera"?o.assetId===i.id:o.recorderId===i.id||o.archiveRecorderId===i.id),s=i=>({["data-"+(i.source==="camera"?"edit-asset":i.source==="recorder"?"edit-recorder":"edit-device")]:i.id}),n=i=>/路由|网关|服务器/.test(i.deviceType)||/gl\.inet/i.test(i.brand||"");return(i,o)=>(C(),j("div",Xc,[(C(!0),j(G,null,xe(H(Se).groups,a=>(C(),j("section",{key:a.key,class:"device-group"},[l("h3",Qc,[h(T(a.labels.join(" / ")||"全部设备")+" ",1),l("span",eu,T(a.items.length),1)]),l("div",tu,[(C(!0),j(G,null,xe(a.items,r=>(C(),j("article",{key:r.source+r.id,class:"card device-card"},[l("div",lu,[l("div",su,[l("div",nu,[F(he,{name:r.source==="camera"?"camera":n(r)?"router":"devices"},null,8,["name"])]),l("div",iu,[l("span",ou,T(r.deviceType),1),l("h3",null,[l("button",{class:"device-title",onClick:c=>H(Te)().enterDevice(r.source,r.id)},T(r.name),9,au)])]),H(K).admin?(C(),j("button",_i({key:0,class:"btn btn-sm btn-outline-secondary"},{ref_for:!0},s(r))," 编辑 ",16)):B("",!0)]),l("p",ru,[h(T(H(Te)().location?.(r.siteId)||"区域待填写"),1),r.point?(C(),j(G,{key:0},[h(" · "+T(r.point),1)],64)):B("",!0)]),l("dl",cu,[l("div",null,[o[0]||(o[0]=l("dt",null,"品牌型号",-1)),l("dd",null,T([r.brand,r.model].filter(Boolean).join(" / ")||"未填写"),1)]),l("div",null,[o[1]||(o[1]=l("dt",null,"设备地址",-1)),l("dd",uu,T(r.networkHosts.join(" / ")||"未填写"),1)]),l("div",null,[o[2]||(o[2]=l("dt",null,"网络",-1)),l("dd",null,T(H(Cs)(r.networkAccess)),1)]),l("div",null,[o[3]||(o[3]=l("dt",null,"所有人 / 负责人",-1)),l("dd",null,T(r.ownerName||"待指定")+" / "+T(r.managerName||"待指定"),1)]),r.source!=="device"?(C(),j("div",du,[o[4]||(o[4]=l("dt",null,"镜头通道",-1)),l("dd",null,T(t(r).length)+" 个已配置",1)])):B("",!0)]),r.tags?.length?(C(),j("div",pu,[(C(!0),j(G,null,xe(r.tags,c=>(C(),j("span",{key:c},T(c),1))),128))])):B("",!0),n(r)?(C(),jt(Ss,{key:1,device:r,active:H(K).page==="objects"&&H(Se).mode==="cards"},null,8,["device","active"])):B("",!0)]),l("div",fu,[l("button",{class:"btn btn-sm btn-outline-secondary",onClick:c=>H(Te)().enterDevice(r.source,r.id,"device")}," 设备详情",8,hu),r.source!=="device"?(C(),j(G,{key:0},[H(K).admin?(C(),j("button",{key:0,class:"btn btn-sm btn-outline-secondary",onClick:c=>H(Te)().enterDevice(r.source,r.id,"cameras")}," 配置镜头",8,mu)):B("",!0),t(r).length?(C(),j("button",{key:1,class:"btn btn-sm btn-primary",onClick:c=>H(Te)().enterDevice(r.source,r.id,"live")}," 实时画面 ",8,bu)):B("",!0)],64)):B("",!0)])]))),128))])]))),128)),H(Se).devices.length?B("",!0):(C(),j("div",vu,[F(he,{name:"devices"}),o[5]||(o[5]=l("h3",null,"当前范围没有设备",-1)),o[6]||(o[6]=l("p",null,"调整筛选条件,或添加摄像机、路由器、灯等设备。",-1))]))]))}},yu={key:0,class:"network-diagram"},_u={class:"diagram-toolbar"},xu={class:"small text-secondary"},wu={class:"chart-network-surface"},ku={__name:"NetworkDiagram",setup(e){const t=fe(0),s=ke(()=>gr(Se.value.rows,Te().location)),n=ke(()=>K.value.loggedIn&&K.value.page==="objects"&&Se.value.mode==="topology");dt(()=>K.value.session+":"+K.value.state.familyId,()=>t.value++);function i(o){const a=Se.value.rows.find(r=>r.device.id===o);a&&Te().enterDevice(a.device.source,o,"device")}return(o,a)=>H(Se).rows.length?(C(),j("div",yu,[l("div",_u,[l("div",null,[a[1]||(a[1]=l("span",{class:"diagram-dot"},null,-1)),a[2]||(a[2]=l("strong",null,"设备连接图",-1)),l("span",xu,T(H(Se).rows.length)+" 台设备 · "+T(s.value.series[0].links.length)+" 条已登记连接",1)]),l("button",{class:"btn btn-sm btn-outline-secondary",onClick:a[0]||(a[0]=r=>t.value++)},"重置视图")]),l("div",wu,[(C(),jt(At,{key:t.value,option:s.value,active:n.value,height:400,label:"已登记设备连接图,可拖动缩放;下方设备详情提供相同信息及操作。",onSelect:i},null,8,["option","active"]))]),a[3]||(a[3]=l("p",{class:"diagram-note"},"拖动平移、滚轮或双指缩放;点击节点打开档案。未登记上级的设备独立显示;接入方式不代表在线状态。",-1))])):B("",!0)}},Cu={id:"device-topology",hidden:""},Su={class:"panel network-map"},Tu={class:"network-platform"},$u={class:"topology-nodes"},Mu={class:"card-body"},ju={class:"device-card-heading"},Iu={class:"flex-grow-1"},Au={class:"small text-secondary"},Pu=["onClick"],Ou=["onClick"],qu={class:"device-location"},Eu={class:"network-facts"},Ru={key:0},Du={key:1},Nu={key:2},Hu={key:3},Lu={key:0,class:"empty"},Fu={__name:"NetworkMap",setup(e){const t=ke(()=>(K.value.state.households||[]).find(s=>s.id===K.value.state.familyId));return(s,n)=>(C(),j("div",Cu,[l("section",Su,[l("div",Tu,[F(he,{name:"network"}),l("div",null,[l("h3",null,T(t.value?.name||"当前场所"),1),l("p",null,T(H(Se).devices.length)+" 台设备 · 随设备档案自动更新",1)])]),n[7]||(n[7]=l("p",{class:"description"}," 连线来自已确认的上级设备关系。上级未填写时单独列出;不代表已自动发现所有交换机或布线。 ",-1)),F(ku),n[8]||(n[8]=l("h3",{class:"network-details-heading"},"设备与连接详情",-1)),l("div",$u,[(C(!0),j(G,null,xe(H(Se).rows,i=>(C(),j("article",{key:i.device.id,class:ze(["network-node card",{nested:i.depth>0}]),style:ft({"--depth":Math.min(i.depth,5)})},[l("div",Mu,[l("div",ju,[F(he,{name:i.device.source==="camera"?"camera":"router"},null,8,["name"]),l("div",Iu,[l("span",Au,T(i.device.deviceType)+" · "+T(H(Cs)(i.device.networkAccess)),1),l("h3",null,[l("button",{class:"device-title",onClick:o=>H(Te)().enterDevice(i.device.source,i.device.id)},T(i.device.name),9,Pu)])]),l("button",{class:"btn btn-sm btn-outline-secondary",onClick:o=>H(Te)().enterDevice(i.device.source,i.device.id,"device")}," 详情 → ",8,Ou)]),l("p",qu,[h(T(H(Te)().location?.(i.device.siteId)||"未指定区域")+" ",1),i.device.point?(C(),j(G,{key:0},[h(" · "+T(i.device.point),1)],64)):B("",!0)]),l("div",Eu,[l("span",null,[n[0]||(n[0]=h("IP ",-1)),l("b",null,T(i.device.networkHosts.join(" / ")||"待填写"),1)]),i.device.tailscaleHost?(C(),j("span",Ru,[n[1]||(n[1]=h("Tailscale ",-1)),l("b",null,T(i.device.tailscaleHost),1)])):B("",!0),i.device.networkCidr?(C(),j("span",Du,[n[2]||(n[2]=h("网段 ",-1)),l("b",null,T(i.device.networkCidr),1)])):B("",!0),l("span",null,[n[3]||(n[3]=h("上级 ",-1)),l("b",null,T(i.parentName||"待确认 / 直接接入"),1)]),l("span",null,[n[4]||(n[4]=h("连接 ",-1)),l("b",null,T({wired:"网线",wifi:"Wi-Fi"}[i.device.connectionType]||"待确认"),1)]),i.via.length?(C(),j("span",Nu,[n[5]||(n[5]=h("取流经录像机 ",-1)),l("b",null,T(i.via.join("、")),1)])):B("",!0),i.archiveVia.length?(C(),j("span",Hu,[n[6]||(n[6]=h("录像归档 ",-1)),l("b",null,T(i.archiveVia.join("、")),1)])):B("",!0)]),/路由|网关|服务器/.test(i.device.deviceType)?(C(),jt(Ss,{key:0,device:i.device,active:H(K).page==="objects"&&H(Se).mode==="topology"},null,8,["device","active"])):B("",!0)])],6))),128)),H(Se).rows.length?B("",!0):(C(),j("p",Lu," 当前范围尚未登记设备。 "))])])]))}},Vu={key:0,class:"panel"},Uu={__name:"DeviceNetworkPanel",setup(e){return(t,s)=>H(K).admin&&H(K).device&&H(K).page==="device"?(C(),j("section",Vu,[s[0]||(s[0]=l("h3",null,"网络状态与管理入口",-1)),F(Ss,{device:H(K).device},null,8,["device"]),s[1]||(s[1]=l("p",{class:"description mb-0"},"只检查已登记的设备地址。常用端口未响应不一定表示断电;Tailscale 节点在线也不代表下级网段可达。",-1))])):B("",!0)}},Ku={key:0,class:"row g-3 mb-4","aria-label":"当前场所设备统计"},Bu={class:"col-12 col-lg-7"},Wu={class:"chart-card h-100"},zu={class:"chart-heading"},Zu={class:"small text-secondary"},Yu={class:"chart-data"},Gu={class:"col-12 col-lg-5"},Ju={class:"chart-card h-100"},Xu={class:"chart-legend"},Qu={__name:"ScopeInsights",setup(e){const t=ke(()=>vr(K.value.state)),s=ke(()=>K.value.loggedIn&&K.value.page==="overview");return(n,i)=>s.value&&t.value.total?(C(),j("section",Ku,[l("div",Bu,[l("article",Wu,[l("div",zu,[i[0]||(i[0]=l("h3",null,"设备类型",-1)),l("span",Zu,T(t.value.total)+" 台已授权设备",1)]),F(At,{option:H(Mi)(t.value.types.slice(0,8)),height:220,label:"设备类型:"+t.value.types.map(o=>o.label+o.count+"台").join(",")},null,8,["option","label"]),l("details",Yu,[i[1]||(i[1]=l("summary",null,"查看全部类型",-1)),l("ul",null,[(C(!0),j(G,null,xe(t.value.types,o=>(C(),j("li",{key:o.label},T(o.label)+":"+T(o.count)+" 台",1))),128))])])])]),l("div",Gu,[l("article",Ju,[i[2]||(i[2]=l("div",{class:"chart-heading"},[l("h3",null,"网络接入"),l("span",{class:"small text-secondary"},"来自设备档案")],-1)),F(At,{option:H($i)(t.value.networks),height:190,label:"登记的网络接入方式:"+t.value.networks.map(o=>o.label+o.count+"台").join(",")},null,8,["option","label"]),l("div",Xu,[(C(!0),j(G,null,xe(t.value.networks,(o,a)=>(C(),j("span",{key:o.label},[l("i",{style:ft({background:H(el)[a]})},null,4),h(T(o.label)+" ",1),l("b",null,T(o.count),1)]))),128))]),i[3]||(i[3]=l("p",{class:"small text-secondary mt-2 mb-0"},"接入方式不代表设备在线状态。",-1))])])])):B("",!0)}},ed={id:"page-overview",class:"page",hidden:""},td={id:"page-device",class:"page",hidden:""},ld={id:"page-objects",class:"page",hidden:""},sd={__name:"Workspace",setup(e){return(t,s)=>(C(),j(G,null,[s[5]||(s[5]=l("div",{id:"household-context",class:"household-context",hidden:""},[l("label",null,[h("当前归属 "),l("select",{id:"household-filter","aria-label":"当前归属"})]),l("span",{id:"household-context-note"}),l("button",{id:"scope-back",class:"quiet"},"返回场所")],-1)),s[6]||(s[6]=l("div",{id:"device-context",class:"device-context",hidden:""},[l("p",{id:"device-breadcrumb"}),l("div",{role:"group","aria-label":"设备功能"},[l("button",{class:"quiet","data-device-tab":"device"},"设备档案"),l("button",{class:"quiet","data-device-tab":"live"},"实时画面"),l("button",{class:"quiet","data-device-tab":"playback"},"录像回放"),l("button",{class:"quiet","data-device-tab":"cameras"},"镜头与设置")])],-1)),s[7]||(s[7]=Me('<div id="banner" class="banner" hidden></div><section class="metrics"><div><span>设备</span><strong id="metric-all">—</strong></div><div><span>已接通码流</span><strong id="metric-ready">—</strong></div><div><span>录像占用</span><strong id="metric-used">—</strong></div><div><span>空间档案</span><strong id="metric-sites">—</strong></div></section><div class="filter-row"><label>空间范围 <select id="site-filter"><option value="">全部空间</option></select></label><span id="filter-caption">可选择任意区域,包含其下级区域</span><button id="refresh" class="quiet">↻ 刷新状态</button></div>',3)),s[8]||(s[8]=l("section",{id:"page-settings",class:"page",hidden:""},[l("div",{class:"section-head"},[l("h2",null,"把这里布置成你习惯的样子"),l("button",{id:"settings-reload",class:"quiet"},"重新读取设置")]),l("p",{id:"settings-error",role:"status"}),l("div",{class:"settings-sections",role:"group","aria-label":"设置分类"},[l("button",{class:"quiet","data-settings-section":"preferences","aria-pressed":"true"},"我的偏好"),l("button",{class:"quiet","data-settings-section":"baidu","data-platform-setting":"",hidden:""},"网盘连接"),l("button",{class:"quiet","data-settings-section":"brand","data-platform-setting":"",hidden:""},"品牌与外观"),l("button",{class:"quiet","data-settings-section":"backup","data-platform-setting":"",hidden:""},"数据库备份")]),l("form",{id:"preferences-form",class:"panel"},[l("h3",null,"我的偏好"),l("p",{class:"description"},"只影响当前账号,保存后换电脑或手机登录也会沿用。切换选项可以预览,离开未保存的预览会撤销。"),l("div",{id:"personal-choices",class:"form-grid"}),l("p",{id:"preferences-status",role:"status"}),l("div",{class:"device-actions"},[l("button",{type:"submit"},"保存我的偏好"),l("button",{type:"button",id:"personal-follow",class:"quiet"},"全部跟随平台"),l("button",{type:"button",id:"personal-cancel",class:"quiet"},"撤销预览")])]),l("section",{id:"baidu-admin",class:"panel",hidden:""},[l("div",{class:"section-head"},[l("h3",null,"百度网盘 · 统一存储"),l("span",{class:"badge"},"仅超级管理员配置")]),l("p",{class:"description"},"连接一个网盘账号,统一保存封面、Logo、图标及各用户上传的照片、视频和语音。系统按用户、家庭和记事可见范围授权;网盘账号持有人本身可以管理网盘中的文件。服务器仅转发分片,不保存媒体原文件。"),l("details",{id:"baidu-storage-guide"},[l("summary",null,"文件存在哪里?"),l("ul",null,[l("li",null,"家庭与场所:按家庭或场所保存封面。"),l("li",null,"平台外观:保存 Logo 和图标。"),l("li",null,"个人记事:按家庭、用户分组,再分照片、视频、语音。"),l("li",null,"数据库备份:单独存放;新备份上传并校验成功后,清理超过一个自然月的旧云备份。")]),l("p",{class:"description"},"文字、权限和文件引用保存在本机数据库;个人媒体原文件保存在百度网盘。封面和品牌图片仅做有限的内存缓存。更换封面、移除附件或删除记事不会删除网盘原文件。")]),l("form",{id:"baidu-config"},[l("div",{class:"form-grid"},[l("label",null,[h("AppKey"),l("input",{name:"appKey",autocomplete:"off",maxlength:"150",required:""})]),l("label",null,[h("SecretKey"),l("input",{name:"secretKey",type:"password",autocomplete:"new-password",maxlength:"150"})]),l("label",null,[h("百度后台应用名称"),l("input",{name:"appFolder",value:"智家",required:"",maxlength:"40"})]),l("label",null,[h("OAuth 回调地址"),l("input",{name:"redirectUri",type:"url",placeholder:"https://你的域名/api/baidu/callback",required:"",maxlength:"400"})])]),l("p",{class:"description"},"回调地址须与百度后台完全一致。SecretKey 留空保持已保存值,SignKey 不需要填写。当前开发者应用仅限个人场景,适用范围以百度后台为准。"),l("p",{id:"baidu-config-status",role:"status"}),l("button",{type:"submit"},"保存网盘应用配置")]),l("hr"),l("p",{id:"baidu-status",role:"status"}),l("div",{class:"device-actions"},[l("button",{id:"baidu-connect"},"连接/重新授权百度网盘"),l("button",{id:"baidu-disconnect",class:"quiet"},"解除本机连接")]),l("p",{class:"description"},"解除连接不会删除云端文件。临时媒体地址由后台按需获取,令牌不发送给浏览器。网盘授权凭据单独保存在服务器受限目录,不包含在数据库备份或公开源码中。")]),l("div",{id:"settings-private",hidden:""},[l("form",{id:"brand-form",class:"panel"},[l("h3",null,"发布与品牌配置"),l("p",{class:"description"},"仅超级管理员可修改。名称、Logo、浏览器图标及登录文案会公开显示;适用于整套系统。已有个人偏好优先于平台默认。"),l("div",{class:"form-grid"},[l("label",null,[h("系统名称"),l("input",{name:"name",required:"",maxlength:"40"})]),l("label",null,[h("系统副标题"),l("input",{name:"subtitle",required:"",maxlength:"60"})]),l("label",{class:"full"},[h("页首题词"),l("input",{name:"motto",maxlength:"100"})]),l("label",null,[h("登录标题"),l("input",{name:"loginTitle",required:"",maxlength:"40"})]),l("label",null,[h("登录说明"),l("input",{name:"loginNote",maxlength:"160"})]),l("label",{class:"full"},[h("页脚说明"),l("input",{name:"footer",maxlength:"120"})])]),l("div",{class:"brand-image-grid"},[l("div",null,[l("img",{id:"brand-logo-preview",alt:"Logo 预览",src:"/zhao-icon.png"}),l("label",null,[h("更换系统 Logo"),l("input",{id:"brand-logo-file",type:"file",accept:"image/png,image/jpeg,image/webp"})]),l("button",{type:"button",id:"brand-logo-reset",class:"quiet"},"使用默认 Logo")]),l("div",null,[l("img",{id:"brand-icon-preview",alt:"浏览器图标预览",src:"/zhao-icon.png"}),l("label",null,[h("更换浏览器图标"),l("input",{id:"brand-icon-file",type:"file",accept:"image/png,image/jpeg,image/webp"})]),l("button",{type:"button",id:"brand-icon-reset",class:"quiet"},"使用默认图标")])]),l("p",{class:"description"},"支持 PNG、JPEG、WebP,原图最多 5 MB;上传时自动缩小,图片随系统数据库保存。"),l("h3",null,"新账号与跟随平台账号的默认外观"),l("div",{id:"brand-defaults",class:"form-grid"}),l("p",{id:"brand-status",role:"status"}),l("div",{class:"device-actions"},[l("button",{type:"submit"},"保存发布配置"),l("button",{type:"button",id:"brand-export",class:"quiet"},"导出发布配置"),l("label",{class:"config-import"},[h("导入配置到表单"),l("input",{id:"brand-import",type:"file",accept:"application/json,.json"})])]),l("p",{class:"description"},"导入后先核对再保存。导出的配置只含品牌与默认外观,不含账号、设备凭据、家庭资料和网络备份目录。")]),l("section",{id:"backup-panel",class:"panel"},[l("h3",null,"数据库备份"),l("p",{class:"description"},"整台服务的数据库包含所有家庭、账号、设备连接配置和网盘文件引用,因此仅超级管理员可操作。网盘中的照片、视频、语音及录像文件不包含在新数据库副本中;旧版备份可能仍含历史内嵌图片。恢复后所有账号需要重新登录。"),l("form",{id:"backup-form"},[l("div",{class:"form-grid"},[l("label",{class:"check full"},[l("input",{name:"enabled",type:"checkbox"}),h("启用每日定时备份")]),l("label",{class:"check full"},[l("input",{name:"baidu",type:"checkbox"}),h("同时上传到已连接的百度网盘")]),l("label",null,[h("每日时间(北京时间)"),l("input",{name:"time",type:"time",required:"",value:"03:00"})]),l("label",null,[h("本机/挂载目录保留份数"),l("input",{name:"keep",type:"number",min:"1",max:"90",required:"",value:"14"})]),l("label",{class:"full"},[h("网络备份目录(可留空)"),l("input",{name:"networkPath",maxlength:"500",placeholder:"/var/lib/zhaovision/network-backup"})])]),l("p",{class:"description"},"填写本服务器已挂载的网络盘目录。使用百度接口备份只需勾选上方选项;此路径用于其他已挂载的网络存储,不能填网页地址或分享链接。写入网络目录成功不等于已确认百度云端同步完成。"),l("p",{class:"description"},"默认部署允许写入 /var/lib/zhaovision 下的目录。挂载和目录权限须由主机管理员配置;本页不会保存网盘登录密码。保留份数只清理本机和挂载目录中本系统生成的旧备份,百度网盘保留最近一个自然月;新备份上传并校验成功后才清理本应用的过期副本。"),l("p",{id:"backup-local-path",class:"description"}),l("p",{id:"backup-save-status",role:"status"}),l("button",{type:"submit"},"保存备份设置")]),l("div",{class:"section-head"},[l("h3",null,"备份记录"),l("button",{id:"backup-run"},"立即备份数据库")]),l("p",{id:"backup-result",role:"status"}),l("div",{id:"backup-history"})])])],-1)),s[9]||(s[9]=l("section",{id:"page-journal",class:"page",hidden:""},[l("div",{class:"scope-intro"},[l("span",{class:"eyebrow"},"岁月有迹 · 日常成章"),l("h2",null,"把生活,写成自己的来时路"),l("p",null,"与家人分享近况,也为自己留下一份阅历。")]),l("form",{id:"journal-form",class:"panel journal-compose"},[l("input",{type:"hidden",name:"id"}),l("input",{type:"hidden",name:"revision",value:"0"}),l("input",{type:"hidden",name:"clientId"}),l("label",null,[h("此刻想记下什么?"),l("textarea",{name:"text",rows:"4",maxlength:"5000",placeholder:"今天的心情、一段往事,或一个值得记住的时刻…"})]),l("div",{class:"form-grid"},[l("label",null,[h("记事日期"),l("input",{name:"occurredOn",type:"date",required:""})]),l("label",null,[h("阅历分类"),l("select",{name:"category"},[l("option",null,"日常"),l("option",null,"成长"),l("option",null,"家庭"),l("option",null,"旅行"),l("option",null,"工作"),l("option",null,"其他")])]),l("label",null,[h("谁可以看到"),l("select",{name:"visibility"},[l("option",{value:"private"},"仅自己可见"),l("option",{value:"household"},"当前家庭/场所成员")])])]),l("div",{class:"journal-add-media"},[l("label",{class:"quiet"},[h("+ 照片、视频或语音"),l("input",{id:"journal-files",disabled:"",type:"file",accept:"image/jpeg,image/png,image/webp,video/mp4,video/quicktime,video/webm,audio/mpeg,audio/mp4,audio/aac,audio/wav,audio/ogg,audio/webm,.m4a"})]),l("button",{id:"journal-record",disabled:"",type:"button",class:"quiet"},"● 直接录音"),l("button",{id:"journal-stop-record",type:"button",hidden:""},"结束录音并上传"),l("button",{id:"journal-cancel-upload",type:"button",class:"quiet",hidden:""},"暂停上传")]),l("p",{id:"journal-cloud-note",class:"description"}),l("p",{class:"description"},"每条最多 9 个附件,单个文件最多 256 MB;一次上传一个文件。录音须通过 HTTPS 并允许麦克风,最长 5 分钟。上传完成后默认选中。保存后清空本次输入;再次使用可展开“我的附件库”。"),l("div",{id:"journal-upload-list",class:"journal-upload-grid"}),l("details",{id:"journal-library",class:"journal-library"},[l("summary",null,[h("我的附件库("),l("span",{id:"journal-library-count"},"0"),h(")")]),l("p",{class:"description"},"已上传的附件可预览、删除或再次用于记事。"),l("div",{id:"journal-library-list",class:"journal-upload-grid"})]),l("details",{id:"journal-trash",class:"journal-trash",hidden:""},[l("summary",null,[h("已删除附件("),l("span",{id:"journal-trash-count"},"0"),h(")")]),l("p",{class:"description"},"删除仅整理附件库,已发布的记事与网盘原文件保留。恢复后可再次使用。"),l("div",{id:"journal-trash-list"})]),l("p",{id:"journal-status",role:"status","aria-live":"polite"}),l("div",{class:"device-actions"},[l("button",{id:"journal-save",type:"submit"},"保存记事"),l("button",{id:"journal-new",type:"button",class:"quiet"},"另写一条")])]),l("form",{id:"journal-filter",class:"panel journal-filters"},[l("label",null,[h("查看方式"),l("select",{id:"journal-mode"},[l("option",{value:"feed"},"家庭/场所动态"),l("option",{value:"mine"},"我的个人阅历"),l("option",{value:"person"},"某个人的阅历")])]),l("label",{id:"journal-person-label",hidden:""},[h("人物"),l("select",{id:"journal-person"})]),l("label",null,[h("分类"),l("select",{id:"journal-category"},[l("option",{value:""},"全部分类"),l("option",null,"日常"),l("option",null,"成长"),l("option",null,"家庭"),l("option",null,"旅行"),l("option",null,"工作"),l("option",null,"其他")])]),l("label",null,[h("关键词"),l("input",{id:"journal-search",type:"search",maxlength:"120",placeholder:"在文字中查找"})]),l("label",null,[h("开始日期"),l("input",{id:"journal-from",type:"date"})]),l("label",null,[h("结束日期"),l("input",{id:"journal-to",type:"date"})]),l("button",{type:"submit"},"查询阅历"),l("button",{id:"journal-filter-clear",type:"button",class:"quiet"},"清除筛选")]),l("p",{class:"description"},"个人阅历保留同一条记事的文字、附件和互动;查看他人时只展示其分享给当前家庭/场所的内容。删除记事或移出附件列表不会删除网盘原文件。"),l("div",{class:"section-head"},[l("p",{id:"journal-query-status",role:"status"}),l("div",null,[l("button",{id:"journal-prev",class:"quiet"},"上一页"),l("button",{id:"journal-next",class:"quiet"},"下一页")])]),l("div",{id:"journal-list",class:"journal-feed"})],-1)),l("section",ed,[F(Qu),s[0]||(s[0]=l("div",{id:"scope-overview"},null,-1))]),l("section",td,[F(Uu),s[1]||(s[1]=l("div",{id:"device-detail"},null,-1))]),s[10]||(s[10]=l("section",{id:"page-heritage",class:"page",hidden:""},[l("div",{id:"heritage-home"})],-1)),s[11]||(s[11]=l("section",{id:"page-live",class:"page"},[l("div",{class:"section-head"},[l("h2",{id:"live-heading"},"本场所监控墙"),l("div",null,[l("label",null,[h("清晰度 "),l("select",{id:"quality"},[l("option",{value:"hd"},"主码流"),l("option",{value:"compat"},"子码流")])])])]),l("details",{class:"live-help"},[l("summary",null,"画面与清晰度说明"),l("p",{id:"wall-context",class:"description"},"这里汇总当前场所内已授权的镜头;点击摄像头详情可进入单台设备。"),l("p",{class:"description",id:"quality-note"},"主码流画面更清晰,最高 1920×1080;子码流更流畅,最高 768×432,适合网络较慢时使用。")]),l("div",{class:"wall-toolbar"},[l("label",null,[h("分屏 "),l("select",{id:"wall-layout"},[l("option",{value:"auto"},"自适应"),l("option",{value:"1"},"1 画面"),l("option",{value:"2"},"2 画面"),l("option",{value:"4"},"4 画面"),l("option",{value:"6"},"6 画面"),l("option",{value:"9"},"9 画面"),l("option",{value:"16"},"16 画面")])]),l("label",{class:"check"},[l("input",{id:"wall-arrange",type:"checkbox"}),h("调整顺序")]),l("div",{class:"wall-paging"},[l("button",{id:"wall-prev",class:"quiet","aria-label":"上一组画面"},"‹"),l("span",{id:"wall-page"}),l("button",{id:"wall-next",class:"quiet","aria-label":"下一组画面"},"›")]),l("span",{id:"wall-clock"}),l("button",{id:"wall-fullscreen"},"全屏监控")]),l("div",{id:"live-grid",class:"live-grid"}),l("section",{id:"ptz-panel",class:"ptz-panel",hidden:""},[l("div",null,[l("strong",{id:"ptz-title"},"云台"),l("p",{id:"ptz-status",role:"status"})]),l("div",{class:"ptz-pad"},[l("button",{"data-ptz-action":"up","aria-label":"云台向上"},"↑"),l("button",{"data-ptz-action":"left","aria-label":"云台向左"},"←"),l("button",{"data-ptz-action":"stop"},"停止"),l("button",{"data-ptz-action":"right","aria-label":"云台向右"},"→"),l("button",{"data-ptz-action":"down","aria-label":"云台向下"},"↓")]),l("div",{id:"ptz-presets"},[l("div",{class:"section-head"},[l("strong",null,[h("常用位置 "),l("small",{id:"preset-count"})]),l("button",{id:"preset-reload",class:"quiet"},"重新读取")]),l("p",{id:"preset-status",role:"status"}),l("div",{id:"preset-list"}),l("p",{class:"description"},"调整位置后可另存为新预置位。本版不覆盖已有位置,避免设备固件拒绝或误改。"),l("form",{id:"preset-form",hidden:""},[l("label",null,[h("当前位置名称"),l("input",{id:"preset-name",required:"",maxlength:"40",placeholder:"例如:大门、院子"})]),l("button",{type:"submit"},"保存当前位置")]),l("div",{id:"preset-confirmation",hidden:""},[l("p",{id:"preset-confirm-text"}),l("button",{id:"preset-confirm-yes"},"确认"),l("button",{id:"preset-confirm-cancel",class:"quiet"},"取消")])]),l("button",{id:"ptz-close",class:"quiet"},"收起云台")])],-1)),s[12]||(s[12]=l("section",{id:"page-playback",class:"page",hidden:""},[l("div",{class:"section-head"},[l("h2",null,[h("回到那一刻 "),l("small",null,"光阴")])]),l("div",{class:"panel playback-controls"},[l("label",null,[h("镜头 / 通道"),l("select",{id:"play-camera"})]),l("label",null,[h("录像来源"),l("select",{id:"archive-source"},[l("option",{value:"recorder"},"录像机原有录像(待接入)"),l("option",{value:"local"},"小电脑本机录像")])]),l("label",null,[h("日期"),l("input",{id:"play-date",type:"date"})]),l("button",{id:"query-recordings"},"查找录像"),l("span",{id:"play-info"},"选择日期,查看实际录像时段")]),l("aside",{id:"recording-health",class:"panel","aria-label":"本机录像状态",hidden:""},[l("div",{class:"section-head"},[l("strong",{id:"recording-health-text",role:"status"}),l("button",{id:"recording-configure",class:"quiet",hidden:""},"录像设置")]),l("p",{id:"recording-policy-note",class:"description"}),l("p",{id:"recording-start-note",class:"description"})]),l("div",{class:"video-panel"},[l("video",{id:"play-video",controls:"",playsinline:""}),l("div",{id:"play-empty",class:"video-empty"},"选择一个有录像的时间段")]),l("div",{class:"panel"},[l("div",{class:"timeline-head"},[l("strong",null,"当日时间轴"),l("span",null,[l("i",{class:"legend"}),h(" 有录像的时段 · 点击定位")])]),l("canvas",{id:"timeline",height:"76","aria-label":"录像时间轴"}),l("div",{class:"time-labels"},[l("span",null,"00:00"),l("span",null,"06:00"),l("span",null,"12:00"),l("span",null,"18:00"),l("span",null,"24:00")]),l("div",{class:"seek-row"},[l("label",null,[h("定位时间 "),l("input",{id:"seek-time",type:"time",step:"1",value:"12:00:00"})]),l("button",{id:"seek-button",class:"secondary"},"定位播放"),l("a",{id:"download",class:"button secondary",hidden:""},"下载原始片段")])]),l("div",{class:"panel"},[l("div",{class:"playback-tools"},[l("label",{class:"check"},[l("input",{id:"play-autonext",type:"checkbox",checked:""}),h("自动续播下一时段(跳过空档)")]),l("button",{id:"play-snapshot",class:"quiet"},"回放截图"),l("span",{id:"play-position",role:"status"})]),l("details",{class:"clip-editor"},[l("summary",null,"选取并下载指定片段"),l("form",{id:"clip-form"},[l("div",{class:"form-grid"},[l("label",null,[h("开始时间"),l("input",{id:"clip-start",type:"datetime-local",step:"1",required:""})]),l("label",null,[h("结束时间"),l("input",{id:"clip-end",type:"datetime-local",step:"1",required:""})])]),l("div",{class:"playback-tools"},[l("button",{type:"button",class:"quiet","data-clip-mark":"start"},"当前位置作起点"),l("button",{type:"button",class:"quiet","data-clip-mark":"end"},"当前位置作终点"),l("button",{type:"submit"},"生成下载链接"),l("a",{id:"clip-download",class:"button secondary",hidden:""},"下载所选片段")]),l("p",{id:"clip-status",role:"status",class:"description"}),l("p",{class:"description"},"每段最多一小时,不可跨越无录像时段。下载保留原始编码,剪辑边界可能受设备关键帧影响。")])])]),l("div",{id:"recording-list",class:"recording-list"})],-1)),s[13]||(s[13]=Me('<section id="page-cameras" class="page" hidden><div class="section-head"><h2>镜头通道 <small>通道</small></h2><button data-action="new-camera">+ 添加镜头通道</button></div><div class="panel discovery"><div><strong>发现局域网设备</strong><p>探测 RTSP 服务,添加后用设备账号连接。</p></div><input id="scan-network" placeholder="例如 192.168.1.0/24" aria-label="局域网网段"><button id="scan-button" class="secondary">开始探测</button></div><div id="scan-result"></div><div id="camera-list"></div></section>',1)),l("section",ld,[s[2]||(s[2]=Me('<div class="section-head"><h2>一物一档 <small>设备 · 归属</small></h2><div class="device-actions"><button class="quiet" data-page="sites" data-admin>管理区域</button><button data-action="new-asset">+ 摄像机</button><button data-action="new-recorder">+ 录像机</button><button id="new-device" data-admin>+ 其他设备</button></div></div><p class="description">同一设备可同时记录类型、区域、所有人、负责人和标签。分组顺序可自由组合,例如“灯 → 卧室”或“负责人 → 类型 → 区域”。人员归属不自动授予访问权限。</p>',2)),s[3]||(s[3]=l("div",{class:"panel device-view-controls"},[l("div",{class:"device-search-row"},[l("label",null,[h("设备类型"),l("select",{id:"device-type"},[l("option",{value:""},"所有类型")])]),l("label",null,[h("搜索设备或人员"),l("input",{id:"device-search",type:"search",placeholder:"例如:卧室 灯;也可查 IP、品牌、型号、人员"})]),l("button",{id:"device-clear",type:"button",class:"quiet",hidden:""},"清除设备筛选")]),l("div",{class:"device-actions view-presets",role:"group","aria-label":"设备分组方式"},[l("button",{type:"button",class:"quiet","data-group-preset":"space,type"},"按区域查看"),l("button",{type:"button",class:"quiet","data-group-preset":"type,space"},"按类型查看"),l("button",{type:"button",class:"quiet","data-group-preset":"manager,type,space"},"按负责人查看")]),l("details",{class:"group-custom"},[l("summary",null,"自定义分组顺序"),l("p",{class:"description"},"依次分组(前面的维度优先,区域按你定义的完整层级展示)"),l("div",{id:"device-group-order",class:"device-group-order"}),l("div",{class:"device-actions"},[l("button",{id:"device-group-add",class:"quiet"},"+ 增加分组维度"),l("button",{"data-admin":"",id:"device-view-save",class:"secondary"},"保存为本归属的默认视图")])]),l("p",{id:"device-count",class:"description"})],-1)),s[4]||(s[4]=l("div",{class:"device-actions",role:"group","aria-label":"设备展示方式"},[l("button",{id:"devices-card-view",class:"quiet","aria-pressed":"true"},"设备卡片"),l("button",{id:"devices-topology-view",class:"quiet","aria-pressed":"false"},"网络拓扑")],-1)),F(gu),F(Fu)]),s[14]||(s[14]=Me('<section id="page-recorders" class="page" hidden><div class="section-head"><h2>录像机 <small>存影</small></h2><button data-action="new-recorder">+ 添加录像机</button></div><p class="description">统一保存录像机地址与账号,镜头通道关联录像机。实时取流使用 RTSP;读取录像机已有历史录像,需要该型号的回放接口适配。</p><div id="recorder-list" class="site-grid"></div></section><section id="page-sites" class="page" hidden><div class="section-head"><h2>区域与空间 <small>自定层级</small></h2><button data-action="new-site">+ 新建空间</button></div><p class="description">在当前家庭或场所下自行划分区域,不限定层级数量。例如“一楼 → 卧室”或“厂区 → 车间 → 产线”。名称和区域类别均由你定义,地址信息按需填写。</p><div id="site-list" class="site-grid"></div></section><section id="page-storage" class="page" hidden><div class="section-head"><h2>录像与存储 <small>留存</small></h2></div><div class="storage-grid"><form id="storage-form" class="panel"><h3>录像保留策略</h3><label>保留天数<input name="retentionDays" type="number" min="1" max="365" required></label><label>录像容量上限(GB)<input name="maxGB" type="number" min="5" max="100000" required></label><label>磁盘预留空间(GB)<input name="reserveGB" type="number" min="2" max="1000" required></label><p class="description">默认最长保留 30 天,超过设定天数的录像会自动删除。容量上限由全部摄像头共用;达到上限或预留空间不足时暂停录像,空间恢复后继续。实际可留时长取决于码率和路数,未必存满设定天数。容量每 20 秒检查一次,可能有少量超出。</p><button type="submit">保存策略</button><span class="form-error"></span></form><div class="panel"><h3>运行状态</h3><dl id="storage-status"></dl><p class="description">开启摄像头的“持续录像”后,服务会保存主码流。预览默认使用主码流高清画面(最高 1920×1080、15 帧/秒),也可切换子码流流畅画面(最高 768×432、10 帧/秒)。本机录像保留设备原始编码。</p><h3>最近操作</h3><div id="audit-list"></div></div></div></section>',3)),s[15]||(s[15]=l("section",{id:"page-heritage-records",class:"page",hidden:""},[l("div",{class:"section-head"},[l("h2",{id:"heritage-records-title"},"文化与家风"),l("div",null,[l("button",{class:"quiet","data-page":"heritage"},"返回家庭传承"),l("button",{id:"heritage-new"},"+ 新建档案")])]),l("div",{class:"panel heritage-controls"},[l("label",null,[h("查找档案"),l("input",{id:"heritage-search",type:"search",placeholder:"名称、内容、相关人员"})]),l("label",{class:"check"},[l("input",{id:"heritage-archived",type:"checkbox"}),h("包含归档资料")]),l("button",{id:"heritage-reload",class:"quiet"},"重新载入")]),l("p",{id:"heritage-error",class:"form-error",role:"status"}),l("div",{id:"heritage-list",class:"site-grid"}),l("aside",{id:"heritage-detail",class:"panel",hidden:""})],-1)),s[16]||(s[16]=l("section",{id:"page-family",class:"page",hidden:""},[l("div",{class:"section-head"},[l("h2",null,[h("家族的来处与延续 "),l("small",null,"世系 · 传承")]),l("div",null,[l("button",{id:"family-reload",class:"quiet"},"重新载入"),l("button",{id:"family-export",class:"quiet"},"导出家谱"),l("button",{id:"new-person"},"+ 录入人物")])]),l("p",{class:"description"},"从祖辈到后辈,一张图看全家。点击人物查看档案,暖金色卡片是当前账号关联的本人。"),l("p",{id:"family-edit-note",class:"alert alert-info",role:"status"}),l("div",{class:"panel family-toolbar"},[l("label",null,[h("关系参照人物"),l("select",{id:"family-reference"})]),l("label",null,[h("查找人物"),l("input",{id:"family-search",type:"search",placeholder:"姓名、别名或籍贯"})]),l("button",{id:"family-find",class:"quiet",hidden:""},"定位搜索结果"),l("label",{class:"check"},[l("input",{id:"family-archived",type:"checkbox"}),h("显示归档人物")]),l("span",{id:"family-count"})]),l("div",{id:"family-error",class:"form-error",role:"status"}),l("div",{id:"family-workspace",class:"family-workspace"},[l("section",{id:"family-canvas-panel",class:"family-canvas-panel","aria-label":"全家关系图"},[l("div",{class:"family-map-heading"},[l("div",null,[l("span",{class:"eyebrow"},"枝叶相连 · 世代相承"),l("h2",{id:"family-view-title"},"全家关系图")]),l("div",{class:"family-view-tabs",role:"group","aria-label":"家谱显示方式"},[l("button",{id:"family-view-tree",class:"quiet","aria-pressed":"true"},"关系图"),l("button",{id:"family-view-list",class:"quiet","aria-pressed":"false"},"人物名册"),l("button",{id:"family-view-timeline",class:"quiet","aria-pressed":"false"},"家族时间线")])]),l("div",{id:"family-map-controls",class:"family-map-controls"},[l("div",{class:"family-zoom-controls"},[l("button",{id:"family-zoom-out",class:"quiet","aria-label":"缩小家谱"},"−"),l("output",{id:"family-zoom-value","aria-live":"polite"},"100%"),l("button",{id:"family-zoom-in",class:"quiet","aria-label":"放大家谱"},"+"),l("button",{id:"family-fit",class:"quiet"},"查看全谱")]),l("button",{id:"family-locate-self",class:"quiet"},"◎ 定位本人"),l("button",{id:"family-fullscreen",class:"quiet"},"全屏家谱")]),l("div",{id:"family-tree",class:"family-map-viewport",tabindex:"0",role:"region","aria-label":"家谱关系图,可拖动空白处或使用滚动条浏览"}),l("div",{id:"family-people",class:"family-people family-register",hidden:""}),l("section",{id:"family-events",hidden:"","aria-label":"家族重大记事"},[l("div",{class:"family-event-intro"},[l("div",null,[l("h3",null,"把值得记住的事,留给后来的人"),l("p",{class:"description"},"按事情发生的日期排列,可关联多位亲人,并附上详细记载或报道链接。")]),l("button",{id:"family-new-event"},"+ 写一则记事")]),l("div",{class:"family-event-filters"},[l("label",null,[h("关联人物"),l("select",{id:"family-event-person"},[l("option",{value:""},"全家")])]),l("label",null,[h("年份"),l("select",{id:"family-event-year"},[l("option",{value:""},"所有年份")])]),l("label",null,[h("排列"),l("select",{id:"family-event-order"},[l("option",{value:"desc"},"从近到远"),l("option",{value:"asc"},"从远到近")])]),l("label",null,[h("搜索记事"),l("input",{id:"family-event-search",type:"search",placeholder:"标题、摘要或正文"})]),l("label",{class:"check"},[l("input",{id:"family-event-relatives",type:"checkbox"}),h("包括此人的父母、配偶和子女")]),l("label",{id:"family-event-state-label"},[h("状态"),l("select",{id:"family-event-state"},[l("option",{value:"published"},"已发布"),l("option",{value:"draft"},"草稿箱"),l("option",{value:"archived"},"已归档"),l("option",{value:"all"},"全部")])]),l("button",{id:"family-event-clear",class:"quiet"},"清除筛选")]),l("p",{id:"family-event-count",class:"description",role:"status"}),l("div",{id:"family-timeline",class:"family-timeline"})]),l("div",{id:"family-map-footer",class:"family-map-footer"},[l("div",{class:"family-map-legend"},[l("span",null,[l("i",{class:"legend-self"}),h("本人")]),l("span",null,[l("i",{class:"legend-selected"}),h("正在查看")]),l("span",null,[l("i",{class:"legend-parent"}),h("父母 → 子女")]),l("span",null,[l("i",{class:"legend-spouse"}),h("配偶")]),l("span",null,[l("i",{class:"legend-adoptive"}),h("收养 / 继亲")])]),l("p",{id:"family-map-note",class:"description",role:"status"}),l("span",{class:"description"},"拖动空白处移动 · 点击人物查看档案 · 关系称谓按参照人物计算")])]),l("aside",{id:"family-detail",class:"panel family-inspector","aria-label":"人物档案"})])],-1)),F(Lc),s[17]||(s[17]=Me('<section id="page-users" class="page" hidden><div class="section-head"><h2>账号与人物关系 <small>ACCOUNTS</small></h2><button id="new-user">+ 新建账号</button></div><p class="description">这里只管理当前家庭或场所的账号。新账号默认没有摄像头或家谱访问权限;可按需授权。亲属称呼与管理权限分别设置,无需为每位家谱人物创建账号。</p><div id="user-list"></div></section><footer><span id="brand-footer">赵府 · 智能数字管家</span><span id="version">独立部署 / 数据自有</span></footer>',2))],64))}},nd={};function id(e,t){return C(),j(G,null,[t[0]||(t[0]=Me('<dialog id="auth-dialog"><form id="auth-form"><span class="eyebrow">灯火可亲 · 归家有时</span><h2 id="auth-title">欢迎回来</h2><p id="auth-note">使用自己的账号,进入家庭空间。</p><label id="setup-code-label" hidden>初始化码<input name="code" autocomplete="off"></label><label>用户名<input name="username" value="admin" maxlength="32" required autocomplete="username"></label><label>密码<input name="password" type="password" minlength="8" maxlength="128" required autocomplete="current-password"></label><p class="form-error"></p><button type="submit" class="wide">进入系统</button></form></dialog><dialog id="device-dialog"><form id="device-form"><div class="dialog-heading"><h2>设备档案</h2><button type="button" class="quiet" data-close="device-dialog">关闭</button></div><input name="id" type="hidden"><div class="form-grid"><label>设备名称 *<input name="name" required maxlength="120" placeholder="例如:卧室台灯、爸爸的手机"></label><label>设备类型 *<input name="deviceType" list="device-types" required maxlength="120" placeholder="可选择或自定义"></label><datalist id="device-types"><option value="灯"></option><option value="手机"></option><option value="冰箱"></option><option value="空调"></option><option value="传感器"></option><option value="电脑"></option><option value="路由器"></option><option value="交换机"></option><option value="无线接入点"></option><option value="其他"></option></datalist><label class="full">所在区域<select name="siteId"></select></label><label>品牌<input name="brand" maxlength="120"></label><label>型号<input name="model" maxlength="120"></label><label>序列号<input name="serial" maxlength="120"></label><label>所有人<select name="ownerRef" aria-label="所有人"></select><input name="ownerName" aria-label="手动填写所有人" maxlength="80" placeholder="姓名或单位" hidden></label><label>负责人<select name="managerRef" aria-label="负责人"></select><input name="managerName" aria-label="手动填写负责人" maxlength="80" placeholder="管理或维护人员" hidden></label><fieldset class="full device-network"><legend>网络与连接</legend><div class="form-grid"><label>设备 IP/域名<input name="managementHost" maxlength="253" placeholder="例如 192.168.8.160"></label><label>服务端接入方式<select name="networkAccess"><option value="unknown">待确认</option><option value="lan">局域网直连</option><option value="tailscale">Tailscale 跨网</option><option value="public">公网接入</option></select></label><label>Tailscale 地址(可选)<input name="tailscaleHost" maxlength="253" placeholder="100.x.x.x 或设备域名"></label><label>网关提供的网段(可选)<input name="networkCidr" maxlength="64" placeholder="例如 192.168.8.0/24"></label><label>上级设备<select name="uplinkId"></select></label><label>连接方式<select name="connectionType"><option value="unknown">待确认</option><option value="wired">网线连接</option><option value="wifi">Wi-Fi 连接</option></select></label></div><p class="description">保存后自动更新拓扑。网络信息用于设备档案;摄像机实际取流地址在“配置镜头”内设置。选择人员不改变账号访问权限。</p></fieldset><label class="full">自定义标签<input name="tags" maxlength="500" placeholder="用顿号或逗号分隔,例如:照明、常用、公共"></label><label class="full">备注<textarea name="note" maxlength="300" rows="3"></textarea></label></div><p class="description">手机、灯、冰箱等当前支持设备档案、分类和责任归属。自动控制需另行接入对应协议,登记不代表已连接设备。</p><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存设备</button></div></form></dialog><dialog id="heritage-dialog"><form id="heritage-form"><div class="dialog-heading"><h2 id="heritage-form-title">传承资料</h2><button type="button" class="quiet" data-close="heritage-dialog">关闭</button></div><input type="hidden" name="id"><input type="hidden" name="revision" value="0"><input type="hidden" name="kind"><div class="form-grid"><label class="full">档案名称 *<input name="name" required maxlength="120"></label><label>相关日期<input name="date" type="date"></label><label>讲述人 / 整理人<input name="contributor" maxlength="80"></label><label class="full">相关内容与来历<textarea name="content" rows="6" maxlength="8000"></textarea></label><label class="full">资料 / 报道链接<input name="sourceUrl" type="url" maxlength="1500" placeholder="https://"></label><label class="full">关联已有设备<select name="deviceReference"><option value="">不关联设备</option></select></label><label data-heritage-asset>所有人 / 共有说明<input name="ownerName" maxlength="80"></label><label data-heritage-asset>保管人<input name="custodianName" maxlength="80"></label><label data-heritage-asset>意向接收人<input name="successorName" maxlength="80"></label><label class="full" data-heritage-asset>交接意愿与说明<textarea name="handoverNote" rows="3" maxlength="2000"></textarea></label><label class="check full"><input type="checkbox" name="archived">归档(保留资料,可恢复)</label></div><p class="description">这里只保存资料和意愿;不会据此转移财产或授予任何账号权限。链接内容保存在原位置,本系统保存链接和文字记录。</p><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存档案</button></div></form></dialog><dialog id="site-dialog"><form id="site-form"><div class="dialog-heading"><h2>空间档案</h2><button type="button" class="quiet" data-close="site-dialog">关闭</button></div><input name="id" type="hidden"><div class="form-grid"><label>空间名称 *<input name="name" required maxlength="100" placeholder="例如:一楼、主卧、三号车间"></label><label>上级区域<select name="parentId"></select></label><label>区域类别<input name="category" maxlength="40" placeholder="自定,例如:楼层、卧室、车间、产线"></label><label>用途<select name="kind"><option value="home">家庭</option><option value="company">办公场所</option><option value="factory">工厂</option><option value="other">其他</option></select></label><label>所属家庭 / 单位<input name="owner" maxlength="100"></label><fieldset class="full geo-picker" data-geography="" data-geo-title="空间所在地"></fieldset><label>街道 / 乡镇<input name="street" maxlength="100"></label><label>小区 / 园区 / 村<input name="community" maxlength="100"></label><label>楼栋<input name="building" maxlength="100" placeholder="例如:3 号楼"></label><label>单元<input name="unit" maxlength="100"></label><label>楼层<input name="floor" maxlength="100"></label><label>门牌号<input name="door" maxlength="100" placeholder="例如:502"></label><label class="full">详细地址<input name="address" maxlength="240"></label><label class="full">备注<input name="note" maxlength="240"></label></div><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存空间</button></div></form></dialog><dialog id="camera-dialog"><form id="camera-form"><div class="dialog-heading"><h2>镜头通道配置</h2><button type="button" class="quiet" data-close="camera-dialog">关闭</button></div><input name="id" type="hidden"><div class="form-grid"><label class="full">所属摄像头对象 *<select name="assetId" required></select></label><label>接入方式<select name="sourceKind"><option value="recorder">通过录像机</option><option value="direct">直接连接摄像头</option></select></label><label>关联录像机<select name="recorderId"><option value="">请选择</option></select></label><label>录像机通道编号<input name="channelNumber" maxlength="30" placeholder="按录像机实际通道填写"></label><label>录像存储设备<select name="archiveRecorderId"><option value="">尚未绑定</option></select></label><label>历史录像主要保存于<select name="archiveSource"><option value="recorder">录像机</option><option value="local">本机</option></select></label><label>镜头 / 通道名称 *<input name="name" required maxlength="120" placeholder="例如:大门口"></label><label>所属空间 *<select name="siteId" required></select></label><label>安装位置<input name="point" maxlength="120" placeholder="例如:院门外侧"></label><label>品牌 / 型号<input name="model" maxlength="120"></label><label>设备 IP *<input name="host" required placeholder="局域网 IPv4 地址"></label><label>RTSP 端口<input name="port" type="number" value="554" min="1" max="65535" required></label><label>ONVIF 服务端口<input name="onvifPort" type="number" value="80" min="1" max="65535" required></label><label>设备用户名<input name="username" maxlength="120" autocomplete="off"></label><label>设备密码<input name="password" type="password" maxlength="256" autocomplete="new-password" placeholder="编辑时留空,保留原密码"></label><div class="full"><button id="onvif-read" type="button" class="secondary">读取 ONVIF 镜头配置</button><p class="description">直接接入摄像头时,可读取设备实际提供的媒体配置。端口请按设备填写:通常为 80,部分 TP-Link 设备为 2020。服务器需要能够访问该设备所在网络。</p><div id="onvif-result"></div></div><label class="full">常见码流路径<select id="path-preset"><option value="custom">手动填写</option><option value="tplink">TP-Link 单镜头</option><option value="hikvision">海康威视 / 兼容路径 · 通道 1</option><option value="dahua">大华 / 兼容路径 · 通道 1</option></select></label><label class="full">主码流路径 *<input name="mainPath" required maxlength="500" value="/stream1"></label><label class="full">子码流路径 *<input name="subPath" required maxlength="500" value="/stream2"></label><label class="check"><input name="enabled" type="checkbox" checked>启用连接</label><label class="check"><input name="record" type="checkbox">持续录像(保存到服务器,按保留策略清理)</label></div><p class="description">账号和密码只保存在本机受限数据目录。RTSP 服务响应代表设备可达,实际码流接通后才显示在线。路径预设需要与设备型号、通道一致。</p><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存设备</button></div></form></dialog><dialog id="asset-dialog"><form id="asset-form"><div class="dialog-heading"><h2>摄像头对象</h2><button type="button" class="quiet" data-close="asset-dialog">关闭</button></div><input name="id" type="hidden"><div class="form-grid"><label>对象名称 *<input name="name" required maxlength="120" placeholder="例如:院门双镜头摄像头"></label><label>所属空间 *<select name="siteId" required></select></label><label>品牌<input name="brand" maxlength="120"></label><label>型号<input name="model" maxlength="120"></label><label>序列号<input name="serial" maxlength="120"></label><label>物理镜头数<input name="lensCount" type="number" value="1" min="1" max="16" required></label><label>安装位置<input name="point" maxlength="120"></label><label>备注<input name="note" maxlength="120"></label><label>所有人<select name="ownerRef" aria-label="所有人"></select><input name="ownerName" aria-label="手动填写所有人" maxlength="80" placeholder="姓名或单位" hidden></label><label>负责人<select name="managerRef" aria-label="负责人"></select><input name="managerName" aria-label="手动填写负责人" maxlength="80" placeholder="管理或维护人员" hidden></label><fieldset class="full device-network"><legend>网络与连接</legend><div class="form-grid"><label>设备 IP/域名<input name="managementHost" maxlength="253" placeholder="例如 192.168.8.160"></label><label>服务端接入方式<select name="networkAccess"><option value="unknown">待确认</option><option value="lan">局域网直连</option><option value="tailscale">Tailscale 跨网</option><option value="public">公网接入</option></select></label><label>Tailscale 地址(可选)<input name="tailscaleHost" maxlength="253" placeholder="100.x.x.x 或设备域名"></label><label>网关提供的网段(可选)<input name="networkCidr" maxlength="64" placeholder="例如 192.168.8.0/24"></label><label>上级设备<select name="uplinkId"></select></label><label>连接方式<select name="connectionType"><option value="unknown">待确认</option><option value="wired">网线连接</option><option value="wifi">Wi-Fi 连接</option></select></label></div><p class="description">保存后自动更新拓扑。网络信息用于设备档案;摄像机实际取流地址在“配置镜头”内设置。选择人员不改变账号访问权限。</p></fieldset><label class="full">自定义标签<input name="tags" maxlength="500" placeholder="用顿号或逗号分隔,例如:照明、常用、公共"></label></div><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存对象</button></div></form></dialog><dialog id="recorder-dialog"><form id="recorder-form"><div class="dialog-heading"><h2>录像机配置</h2><button type="button" class="quiet" data-close="recorder-dialog">关闭</button></div><input name="id" type="hidden"><div class="form-grid"><label>录像机名称 *<input name="name" required maxlength="120"></label><label>所属空间 *<select name="siteId" required></select></label><label>品牌<input name="brand" maxlength="120"></label><label>型号<input name="model" maxlength="120"></label><label>录像机 IP *<input name="host" required></label><label>RTSP 端口<input name="port" type="number" value="554" min="1" max="65535" required></label><label>登录用户名<input name="username" maxlength="120" autocomplete="off"></label><label>设备密码<input name="password" type="password" maxlength="256" placeholder="留空保留原密码" autocomplete="new-password"></label><label class="full">接入驱动<select name="driver"><option value="generic-rtsp">通用 RTSP / 手动通道路径</option><option value="hikvision-rtsp">海康 / 兼容型号 RTSP 路径</option><option value="tplink-rtsp">TP-Link RTSP 路径</option><option value="dahua-rtsp">大华 / 兼容型号 RTSP 路径</option></select></label><label>所有人<select name="ownerRef" aria-label="所有人"></select><input name="ownerName" aria-label="手动填写所有人" maxlength="80" placeholder="姓名或单位" hidden></label><label>负责人<select name="managerRef" aria-label="负责人"></select><input name="managerName" aria-label="手动填写负责人" maxlength="80" placeholder="管理或维护人员" hidden></label><fieldset class="full device-network"><legend>网络与连接</legend><div class="form-grid"><label>设备 IP/域名<input name="managementHost" maxlength="253" placeholder="例如 192.168.8.160"></label><label>服务端接入方式<select name="networkAccess"><option value="unknown">待确认</option><option value="lan">局域网直连</option><option value="tailscale">Tailscale 跨网</option><option value="public">公网接入</option></select></label><label>Tailscale 地址(可选)<input name="tailscaleHost" maxlength="253" placeholder="100.x.x.x 或设备域名"></label><label>网关提供的网段(可选)<input name="networkCidr" maxlength="64" placeholder="例如 192.168.8.0/24"></label><label>上级设备<select name="uplinkId"></select></label><label>连接方式<select name="connectionType"><option value="unknown">待确认</option><option value="wired">网线连接</option><option value="wifi">Wi-Fi 连接</option></select></label></div><p class="description">保存后自动更新拓扑。网络信息用于设备档案;摄像机实际取流地址在“配置镜头”内设置。选择人员不改变账号访问权限。</p></fieldset><label class="full">自定义标签<input name="tags" maxlength="500" placeholder="用顿号或逗号分隔,例如:照明、常用、公共"></label></div><p class="description">驱动在当前版本提供路径模板。录像机历史录像检索、回放及通道自动导入,需要型号确认后接入,当前尚未实现。</p><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存录像机</button></div></form></dialog>',7)),t[1]||(t[1]=l("dialog",{id:"leadership-dialog"},[l("form",{id:"leadership-form"},[l("div",{class:"dialog-heading"},[l("h2",null,"负责人安排与交接"),l("button",{type:"button",class:"quiet","data-close":"leadership-dialog"},"关闭")]),l("input",{name:"id",type:"hidden"}),l("input",{name:"revision",type:"hidden"}),l("p",{class:"description"},"选择本家庭 / 场所的成员,分别指定主要和备用负责人。主要负责人即一家之主;选择普通成员时,需明确确认授予其本家庭管理权限。备用负责人可稍后安排。"),l("p",{id:"leadership-scope",class:"fw-semibold"}),l("div",{id:"leadership-empty",class:"alert alert-info",role:"status",hidden:""},"本家庭 / 场所还没有可选成员。请先添加本家庭管理员,保存账号后会自动返回这里。其他家庭的账号不会混入此列表。"),l("div",{class:"leadership-member-actions d-flex flex-wrap gap-2 mb-3"},[l("button",{type:"button",id:"leadership-new",class:"secondary"},"+ 添加本家庭管理员"),l("button",{type:"button",id:"leadership-members",class:"quiet"},"管理本家庭成员")]),l("div",{class:"form-grid"},[l("label",null,[h("主要负责人 *"),l("select",{name:"ownerId",required:""})]),l("label",null,[h("备用负责人"),l("select",{name:"successorId"})]),l("label",{id:"leadership-grant",class:"check full alert alert-warning",hidden:""},[l("input",{type:"checkbox",name:"grantManagement"}),l("span",{id:"leadership-grant-note"})]),l("label",{class:"full"},[h("安排 / 交接说明 *"),l("textarea",{name:"reason",required:"",maxlength:"300",rows:"3",placeholder:"说明负责人安排或本次交接原因"})])]),l("p",{class:"description"},"交接后原负责人仍保留本归属的管理员权限。系统不会依据未登录或家谱去世日期自动转移权限;交接记录可追溯。"),l("p",{class:"form-error",role:"status"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit"},"确认保存负责人安排")])])],-1)),t[2]||(t[2]=l("dialog",{id:"household-dialog"},[l("form",{id:"household-form"},[l("div",{class:"dialog-heading"},[l("h2",null,"家庭 / 场所档案"),l("button",{type:"button",class:"quiet","data-close":"household-dialog"},"关闭")]),l("input",{name:"id",type:"hidden"}),l("input",{name:"profileRevision",type:"hidden",value:"0"}),l("div",{class:"form-grid"},[l("label",{class:"full"},[h("归属名称 *"),l("input",{name:"name",maxlength:"80",required:"",placeholder:"例如:赵府、济南办公室、莱阳工厂"})]),l("label",{class:"full"},[h("归属类型"),l("select",{name:"kind"},[l("option",{value:"home"},"家庭"),l("option",{value:"office"},"办公场所"),l("option",{value:"factory"},"工厂")])]),l("fieldset",{class:"full geo-picker","data-geography":"","data-geo-title":"所在地"}),l("div",{class:"full cover-editor"},[l("img",{id:"household-cover-preview",alt:"场所封面预览",hidden:""}),l("label",null,[h("卡片封面照片"),l("input",{id:"household-cover-file",type:"file",accept:"image/png,image/jpeg,image/webp"})]),l("button",{type:"button",id:"household-cover-cancel",class:"quiet"},"取消本次图片选择"),l("button",{type:"button",id:"household-cover-reset",class:"quiet"},"使用默认封面"),l("p",{id:"household-cover-status",class:"description",role:"status","aria-live":"polite"},"照片仅向有权进入该家庭或场所的账号开放。")]),l("label",{class:"full"},[h("备注"),l("textarea",{name:"note",maxlength:"300",rows:"3"})])]),l("p",{class:"description"},"创建后进入该归属,建立管理员,再自行划分区域和登记设备。"),l("p",{class:"form-error"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit"},"保存家庭")])])],-1)),t[3]||(t[3]=Me('<dialog id="user-dialog"><form id="user-form"><div class="dialog-heading"><h2>账号档案</h2><button type="button" class="quiet" data-close="user-dialog">关闭</button></div><input name="id" type="hidden"><div class="form-grid"><label>用户名 *<input name="username" required minlength="3" maxlength="32" autocomplete="off"></label><label>显示名称 *<input name="name" required maxlength="80"></label><label>密码<input name="password" type="password" minlength="8" maxlength="128" autocomplete="new-password" placeholder="编辑时留空保留"></label><label>账号角色<select name="role"><option value="member">家庭 / 场所成员</option><option value="family_admin">家庭 / 场所管理员</option><option value="admin">超级管理员</option></select></label><label>家谱权限<select name="familyAccess"><option value="none">不可访问</option><option value="read">查看家谱</option><option value="edit">维护本人上下五代</option></select></label><label>文化与财产档案权限<select name="heritageAccess"><option value="none">不可访问</option><option value="read">查看资料</option><option value="edit">整理与维护</option></select></label><label>关联本人(设置后固定)<select name="personId"></select><small>维护范围按本人计算,不能通过改绑扩大;查看参照人物不改变权限。</small></label><label>这个账号是<select name="relatedToId"></select></label><label>的什么关系<input name="relationship" list="relationship-choices" maxlength="40" placeholder="可选择或自行填写"></label><fieldset class="full"><legend>允许查看摄像头的空间</legend><div id="user-sites"></div><p class="description">普通成员只访问本归属内已授权的区域。默认仅授权所选区域;勾选“包含下级区域”后同时包含其所有后代。管理员可管理本归属全部区域。</p></fieldset><label class="check full"><input name="includeSubspaces" type="checkbox">授权包含所选区域的所有下级区域(含以后新增)</label><label class="check"><input name="ptzControl" type="checkbox">允许控制已授权空间的摄像头云台</label><label class="check"><input name="disabled" type="checkbox">停用账号</label></div><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存账号</button></div></form></dialog><datalist id="relationship-choices"></datalist>',2)),t[4]||(t[4]=l("dialog",{id:"person-dialog"},[l("form",{id:"person-form"},[l("div",{class:"dialog-heading"},[l("h2",null,"家谱人物"),l("button",{type:"button",class:"quiet","data-close":"person-dialog"},"关闭")]),l("input",{name:"id",type:"hidden"}),l("input",{name:"revision",type:"hidden"}),l("p",{id:"person-self-note",class:"alert alert-info",hidden:""},"这将建立并固定关联为您本人,用于确定上下五代维护范围。如族谱已有您的人物,请关闭此窗口并请管理员关联,避免重复建档。"),l("fieldset",{id:"person-relative-fields"},[l("legend",null,"新人物与已有亲属的关系"),l("div",{class:"form-grid"},[l("label",null,[h("已有亲属"),l("select",{name:"relativeId"})]),l("label",null,[h("新人物是其"),l("select",{name:"relativeKind"},[l("option",{value:"parent"},"父母一方(上一代)"),l("option",{value:"child"},"子女(下一代)"),l("option",{value:"spouse"},"配偶(同代)")])])]),l("p",{class:"description"},"人物与关系一起保存,无需为亲属开设登录账号;超出五代时不会写入。")]),l("div",{class:"form-grid"},[l("label",null,[h("姓名 / 称呼 *"),l("input",{name:"name",required:"",maxlength:"80",placeholder:"姓名暂不知时可先填称呼"})]),l("label",null,[h("别名 / 字 / 号"),l("input",{name:"alias",maxlength:"120"})]),l("label",null,[h("性别"),l("select",{name:"gender"},[l("option",{value:"unknown"},"待确认"),l("option",{value:"male"},"男"),l("option",{value:"female"},"女")])]),l("label",null,[h("在世情况"),l("select",{name:"lifeStatus"},[l("option",{value:"alive"},"在世"),l("option",{value:"deceased"},"不在世"),l("option",{value:"unknown"},"待确认")])]),l("fieldset",{class:"family-date","data-date-field":"birthDate"},[l("legend",null,"出生日期"),l("input",{name:"birthDate",type:"hidden"}),l("label",null,[h("历法"),l("select",{"data-calendar":"","aria-label":"出生日期历法"},[l("option",{value:"solar"},"公历"),l("option",{value:"lunar"},"农历")])]),l("label",null,[h("日期"),l("input",{"data-date-value":"","aria-label":"出生日期",type:"text",inputmode:"numeric",placeholder:"YYYY-MM-DD",maxlength:"10"})]),l("label",{"data-leap-label":"",class:"check",hidden:""},[l("input",{"data-date-leap":"",type:"checkbox"}),h("闰月")]),l("output",{"data-date-hint":"","aria-live":"polite"},"日期不详可留空")]),l("fieldset",{class:"family-date","data-date-field":"deathDate",hidden:""},[l("legend",null,"去世日期"),l("input",{name:"deathDate",type:"hidden"}),l("label",null,[h("历法"),l("select",{"data-calendar":"","aria-label":"去世日期历法"},[l("option",{value:"solar"},"公历"),l("option",{value:"lunar"},"农历")])]),l("label",null,[h("日期"),l("input",{"data-date-value":"","aria-label":"去世日期",type:"text",inputmode:"numeric",placeholder:"YYYY-MM-DD",maxlength:"10"})]),l("label",{"data-leap-label":"",class:"check",hidden:""},[l("input",{"data-date-leap":"",type:"checkbox"}),h("闰月")]),l("output",{"data-date-hint":"","aria-live":"polite"},"日期不详可留空")]),l("label",{class:"full",id:"person-legacy-place"},[h("原籍贯/出生地记录"),l("input",{name:"birthplace",maxlength:"160"}),l("small",null,"历史填写内容保留,可在下方分别补充。")]),l("fieldset",{class:"full person-location"},[l("legend",null,"籍贯(祖籍)"),l("div",{class:"form-grid"},[l("fieldset",{class:"full geo-picker","data-geography":"native","data-geo-title":"籍贯(祖籍)"}),l("label",null,[h("乡镇/街道"),l("input",{name:"nativeTown",maxlength:"80",placeholder:"","aria-label":"籍贯(祖籍) · 乡镇/街道"})]),l("label",null,[h("村/社区"),l("input",{name:"nativeCommunity",maxlength:"80",placeholder:"","aria-label":"籍贯(祖籍) · 村/社区"})]),l("label",{class:"full"},[h("详细地址/历史地名"),l("input",{name:"nativeAddress",maxlength:"200",placeholder:"楼栋、门牌或旧称,可按已知信息填写","aria-label":"籍贯(祖籍) · 详细地址/历史地名"})])])]),l("fieldset",{class:"full person-location"},[l("legend",null,"出生地"),l("div",{class:"form-grid"},[l("fieldset",{class:"full geo-picker","data-geography":"birth","data-geo-title":"出生地"}),l("label",null,[h("乡镇/街道"),l("input",{name:"birthTown",maxlength:"80",placeholder:"","aria-label":"出生地 · 乡镇/街道"})]),l("label",null,[h("村/社区"),l("input",{name:"birthCommunity",maxlength:"80",placeholder:"","aria-label":"出生地 · 村/社区"})]),l("label",{class:"full"},[h("详细地址/历史地名"),l("input",{name:"birthAddress",maxlength:"200",placeholder:"楼栋、门牌或旧称,可按已知信息填写","aria-label":"出生地 · 详细地址/历史地名"})])])]),l("p",{class:"description full"},"籍贯与出生地可不同;选择中国、世界或自定义地域,不详的层级可留空。"),l("label",{class:"full"},[h("生平简介"),l("textarea",{name:"biography",rows:"4",maxlength:"2000"})]),l("label",{class:"full"},[h("备注 / 信息来源"),l("textarea",{name:"note",rows:"3",maxlength:"500",placeholder:"例如:长辈口述、族谱记载、待考证信息"})]),l("label",{class:"check"},[l("input",{name:"archived",type:"checkbox"}),h("归档人物(保留关系,可恢复)")])]),l("p",{class:"form-error"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit"},"保存人物")])])],-1)),t[5]||(t[5]=Me('<dialog id="relation-dialog"><form id="relation-form"><div class="dialog-heading"><h2>连接人物关系</h2><button type="button" class="quiet" data-close="relation-dialog">关闭</button></div><input name="id" type="hidden"><input name="revision" type="hidden"><div class="form-grid"><label>关系类型<select name="kind"><option value="parent">父母 → 子女</option><option value="spouse">配偶 ↔ 配偶</option></select></label><label>亲子属性<select name="lineage"><option value="unspecified">未注明</option><option value="biological">亲生</option><option value="adoptive">收养</option><option value="step">继亲</option></select></label><label>父母一方 / 配偶一方<select name="fromId" required></select></label><label>子女 / 另一位配偶<select name="toId" required></select></label><label class="full">关系备注<input name="note" maxlength="300"></label><label class="check"><input name="active" type="checkbox" checked>关系有效(取消后保留记录,可恢复)</label></div><p class="description">每条亲子关系连接一位父母与一位子女。双方需在本人上下五代内;不能通过移动或断开已确认世系来改变维护范围。</p><p class="form-error"></p><div class="dialog-footer"><button type="submit">保存关系</button></div></form></dialog>',1)),t[6]||(t[6]=l("dialog",{id:"event-dialog","aria-labelledby":"event-editor-title"},[l("form",{id:"event-form"},[l("div",{class:"dialog-heading"},[l("h2",{id:"event-editor-title"},"写一则家族记事"),l("button",{type:"button",class:"quiet","data-close":"event-dialog"},"关闭")]),l("input",{name:"id",type:"hidden"}),l("input",{name:"revision",type:"hidden"}),l("div",{class:"form-grid"},[l("label",{class:"full"},[h("记事标题 *"),l("input",{name:"title",required:"",maxlength:"160",placeholder:"用一句话概括这件事"})]),l("fieldset",{class:"family-date full","data-date-field":"eventDate"},[l("legend",null,"事情发生的日期 *"),l("input",{name:"eventDate",type:"hidden"}),l("label",null,[h("历法"),l("select",{"data-calendar":"","aria-label":"记事日期历法"},[l("option",{value:"solar"},"公历"),l("option",{value:"lunar"},"农历")])]),l("label",null,[h("日期"),l("input",{"data-date-value":"","aria-label":"记事日期",required:"",type:"text",inputmode:"numeric",placeholder:"YYYY-MM-DD",maxlength:"10"})]),l("label",{"data-leap-label":"",class:"check",hidden:""},[l("input",{"data-date-leap":"",type:"checkbox"}),h("闰月")]),l("output",{"data-date-hint":"","aria-live":"polite"})]),l("fieldset",{class:"full"},[l("legend",null,"关联人物(可多选)"),l("input",{id:"event-person-search",type:"search",placeholder:"查找要关联的亲人","aria-label":"查找关联人物"}),l("div",{id:"event-person-choices"}),l("p",{class:"description"},"未选择人物时记为全家记事。每位关联人物的档案都可以追溯到这条记事。")]),l("label",{class:"full"},[h("摘要"),l("textarea",{name:"summary",maxlength:"400",rows:"2",placeholder:"简要说明这件事"})]),l("label",{class:"full"},[h("详细记载"),l("textarea",{name:"body",maxlength:"12000",rows:"7",placeholder:"记录经过、意义、长辈口述或资料出处。可分段书写。"})]),l("label",null,[h("报道 / 资料来源"),l("input",{name:"sourceName",maxlength:"160",placeholder:"例如:报刊名称、个人博客"})]),l("label",null,[h("原始报道链接"),l("input",{name:"sourceUrl",type:"url",maxlength:"2000",placeholder:"https://…"})]),l("label",{class:"check full"},[l("input",{name:"archived",type:"checkbox"}),h("归档记事(保留内容,可恢复)")])]),l("p",{class:"description"},"正式发布后,有家谱查看权限的账号即可在时间线看到;草稿只对有编辑权限的人可见。"),l("p",{class:"form-error",role:"status"}),l("div",{class:"dialog-footer event-editor-actions"},[l("button",{type:"submit","data-save-event":"",value:"draft",class:"secondary"},"保存草稿"),l("button",{type:"submit","data-publish-event":"",value:"published"},"发布记事"),l("button",{type:"submit","data-withdraw-event":"",value:"draft",class:"secondary",hidden:""},"撤回为草稿")])])],-1)),t[7]||(t[7]=Me('<dialog id="event-detail-dialog" aria-labelledby="event-detail-title"><div class="dialog-heading"><span class="eyebrow">家事 · 家声</span><button type="button" class="quiet" data-close="event-detail-dialog">关闭</button></div><article id="event-detail-content"></article></dialog>',1)),t[8]||(t[8]=l("dialog",{id:"history-dialog","aria-labelledby":"history-title"},[l("div",{class:"dialog-heading"},[l("h2",{id:"history-title"},"修改记录"),l("button",{type:"button",class:"quiet","data-close":"history-dialog"},"关闭")]),l("p",{class:"description"},"人物、关系与记事每次保存都会留存版本。仅有家谱编辑权限的账号可查阅和恢复。"),l("p",{id:"history-error",class:"form-error",role:"status"}),l("div",{id:"history-list"}),l("button",{id:"history-more",class:"quiet",hidden:""},"加载更早记录"),l("article",{id:"history-detail"})],-1)),t[9]||(t[9]=l("dialog",{id:"password-dialog","aria-labelledby":"password-title"},[l("form",{id:"password-form"},[l("div",{class:"dialog-heading"},[l("h2",{id:"password-title"},"修改我的密码"),l("button",{type:"button",class:"quiet","data-close":"password-dialog"},"关闭")]),l("p",{id:"password-account",class:"description"}),l("label",null,[h("当前密码"),l("input",{name:"currentPassword",type:"password",required:"",maxlength:"128",autocomplete:"current-password"})]),l("label",null,[h("新密码"),l("input",{name:"newPassword",type:"password",required:"",minlength:"8",maxlength:"128",autocomplete:"new-password"})]),l("label",null,[h("再次输入新密码"),l("input",{name:"confirmPassword",type:"password",required:"",minlength:"8",maxlength:"128",autocomplete:"new-password"})]),l("p",{class:"description"},"保存后,这个账号在所有设备上都需要用新密码重新登录。"),l("p",{class:"form-error",role:"status"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit"},"保存新密码")])])],-1)),t[10]||(t[10]=l("dialog",{id:"camera-settings-dialog","aria-labelledby":"camera-settings-title"},[l("div",{class:"dialog-heading"},[l("h2",{id:"camera-settings-title"},"摄像机参数"),l("button",{class:"quiet","data-close":"camera-settings-dialog"},"关闭")]),l("div",{class:"section-head"},[l("label",null,[h("设置码流"),l("select",{id:"camera-settings-quality"},[l("option",{value:"main"},"主码流"),l("option",{value:"sub"},"子码流")])]),l("button",{id:"camera-settings-reload",class:"quiet"},"重新读取")]),l("div",{id:"camera-settings-info"}),l("p",{id:"camera-settings-status",class:"form-error",role:"status"}),l("form",{id:"camera-image-form"},[l("h3",null,"图像与日夜模式"),l("p",{class:"description"},"作用于当前物理镜头,主、子码流共用这些图像参数。"),l("div",{id:"camera-image-fields",class:"form-grid"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit",disabled:""},"保存图像参数")])]),l("form",{id:"camera-video-form"},[l("h3",null,"码流与清晰度"),l("p",{class:"description"},"作用于上方选定的码流。保存后画面可能短暂重连,录像机也会使用调整后的码流。本页保留原有视频编码。"),l("div",{id:"camera-video-fields",class:"form-grid"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit",disabled:""},"保存码流参数")])]),l("details",null,[l("summary",null,"其他萤石功能的接入情况"),l("ul",null,[l("li",null,"云台方向微调与预置位:在实时画面的“云台”中使用,按设备能力启用。"),l("li",null,"实时声音与全屏:通过画面播放器控制。"),l("li",null,"双向对讲、智能追踪、声光告警、隐私遮蔽、设备翻转、云录像和消息推送:当前尚未接入,请使用萤石 App。"),l("li",null,"录像机原有录像:仍通过录像机或原厂 App 查看;本系统已支持本机额外录像的回放。")]),l("p",{class:"description"},"功能按设备实际开放能力逐项接入,型号与固件不同可能有差异。")])],-1)),t[11]||(t[11]=l("div",{id:"toast",role:"status",hidden:""},null,-1)),t[12]||(t[12]=Me('<dialog id="snapshot-dialog" aria-labelledby="snapshot-title"><div class="dialog-heading"><h2 id="snapshot-title">画面截图</h2><button data-close="snapshot-dialog" class="quiet">关闭</button></div><img id="snapshot-image" alt="当前视频画面截图"><p id="snapshot-info" class="description"></p><a id="snapshot-save" class="button" download>下载 PNG 图片</a></dialog><dialog id="journal-preview" class="journal-preview" aria-labelledby="journal-preview-title"><header><h2 id="journal-preview-title">附件预览</h2><button id="journal-preview-close" type="button" class="quiet">关闭预览</button></header><div id="journal-preview-content"></div><footer><span>按 Esc 关闭预览</span><a id="journal-preview-download">下载原文件</a></footer></dialog>',2))],64)}const od=Ti(nd,[["render",id]]),ad=["/vendor/hls.min.js","/live-player.js","/kinship.js","/family-graph.js","/calendar.js","/device-model.js","/data/geography-data.js","/geography.js","/app.js","/monitor.js","/date-fields.js","/family-map.js","/family.js","/family-events.js","/family-history.js","/camera-settings.js","/recording-ranges.js","/recording-ui.js","/snapshot.js","/households.js","/devices.js","/steward.js","/heritage.js","/personalization.js","/file-hash.js","/journal.js"];function fn(e){if(!(e instanceof Element))return;const t=[e,...e.querySelectorAll("button,input,select,textarea,table")];for(const s of t)s.matches("button")&&!s.closest(".family-map-viewport")&&!s.classList.contains("btn")&&s.classList.add("btn",s.matches(".quiet,.secondary")?"btn-outline-secondary":"btn-primary"),s.matches("select")&&s.classList.add("form-select"),s.matches("textarea,input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=hidden])")&&s.classList.add("form-control"),s.matches("input[type=checkbox],input[type=radio]")&&s.classList.add("form-check-input"),s.matches("table")&&s.classList.add("table","align-middle")}async function rd(){fn(document.getElementById("app")),new MutationObserver(e=>{for(const t of e)for(const s of t.addedNodes)fn(s)}).observe(document.getElementById("app"),{childList:!0,subtree:!0});for(const e of[...ad,"/vue-bridge.js"])await new Promise((t,s)=>{const n=document.createElement("script");n.src=e+"?ui=0.1.43",n.onload=t,n.onerror=()=>s(new Error("Could not load "+e)),document.head.append(n)});await window.ZhaoVue.boot()}const cd=["data-page"],ud={key:0,class:"alert alert-danger",role:"alert"},dd={__name:"App",setup(e){const t=fe(!1);return ys(async()=>{try{await rd()}catch(s){console.error("Application startup failed",s),t.value=!0}}),(s,n)=>(C(),j(G,null,[F(pr),l("main",{"data-page":H(K).page},[F(mr),t.value?(C(),j("div",ud,"页面组件加载失败,请检查网络后重新打开页面。")):B("",!0),F(sd)],8,cd),F(od)],64))}};Ga(dd).mount("#app");
|