2 lines
164 KiB
JavaScript
2 lines
164 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 ss(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const le={},vt=[],ze=()=>{},dn=()=>!1,xl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),wl=e=>e.startsWith("onUpdate:"),be=Object.assign,ns=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Ti=Object.prototype.hasOwnProperty,G=(e,t)=>Ti.call(e,t),E=Array.isArray,ct=e=>Xt(e)==="[object Map]",lt=e=>Xt(e)==="[object Set]",As=e=>Xt(e)==="[object Date]",N=e=>typeof e=="function",re=e=>typeof e=="string",Ze=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",pn=e=>(ee(e)||N(e))&&N(e.then)&&N(e.catch),fn=Object.prototype.toString,Xt=e=>fn.call(e),$i=e=>Xt(e).slice(8,-1),hn=e=>Xt(e)==="[object Object]",is=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Nt=ss(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),kl=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Mi=/-\w/g,qe=kl(e=>e.replace(Mi,t=>t.slice(1).toUpperCase())),ji=/\B([A-Z])/g,pt=kl(e=>e.replace(ji,"-$1").toLowerCase()),mn=kl(e=>e.charAt(0).toUpperCase()+e.slice(1)),El=kl(e=>e?`on${mn(e)}`:""),Ue=(e,t)=>!Object.is(e,t),rl=(e,...t)=>{for(let s=0;s<e.length;s++)e[s](...t)},bn=(e,t,s,n=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},gn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Is;const Cl=()=>Is||(Is=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function jt(e){if(E(e)){const t={};for(let s=0;s<e.length;s++){const n=e[s],i=re(n)?qi(n):jt(n);if(i)for(const o in i)t[o]=i[o]}return t}else if(re(e)||ee(e))return e}const Ai=/;(?![^(]*\))/g,Ii=/:([^]+)/,Pi=/"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;function qi(e){const t={};return e.replace(Pi,s=>s.startsWith("/*")?"":s).split(Ai).forEach(s=>{if(s){const n=s.split(Ii);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function tt(e){let t="";if(re(e))t=e;else if(E(e))for(let s=0;s<e.length;s++){const n=tt(e[s]);n&&(t+=n+" ")}else if(ee(e))for(const s in e)e[s]&&(t+=s+" ");return t.trim()}const Oi="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Ei=ss(Oi);function vn(e){return!!e||e===""}function Ri(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 Ps(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 Di(e,t,s){let n=ct(e),i=ct(t);if(n||i||(n=lt(e),i=lt(t),n||i))return n&&i?Ps(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),h=t.hasOwnProperty(r);if(c&&!h||!c&&h||!st(e[r],t[r],s))return!1}return String(e)===String(t)}function qs(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=As(e),i=As(t);return n||i?n&&i?e.getTime()===t.getTime():!1:(n=Ze(e),i=Ze(t),n||i?e===t:(n=E(e),i=E(t),n||i?n&&i?qs(e,t,s,Ri):!1:(n=ee(e),i=ee(t),n||i?!n||!i?!1:qs(e,t,s,Di):String(e)===String(t))))}function os(e,t){return e.findIndex(s=>st(s,t))}const yn=e=>!!(e&&e.__v_isRef===!0),k=e=>re(e)?e:e==null?"":E(e)||ee(e)&&(e.toString===fn||!N(e.toString))?yn(e)?k(e.value):JSON.stringify(e,_n,2):String(e),_n=(e,t)=>yn(t)?_n(e,t.value):ct(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,i],o)=>(s[Rl(n,o)+" =>"]=i,s),{})}:lt(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Rl(s))}:Ze(t)?Rl(t):ee(t)&&!E(t)&&!hn(t)?String(t):t,Rl=(e,t="")=>{var s;return Ze(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let fe;class Hi{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&&fe&&(fe.active?(this.parent=fe,this.index=(fe.scopes||(fe.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=fe;try{return fe=this,t()}finally{fe=s}}}on(){++this._on===1&&(this.prevScope=fe,fe=this)}off(){if(this._on>0&&--this._on===0){if(fe===this)fe=this.prevScope;else{let t=fe;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 Ni(){return fe}let ne;const Dl=new WeakSet;class xn{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,fe&&(fe.active?fe.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Dl.has(this)&&(Dl.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||kn(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Os(this),Cn(this);const t=ne,s=Oe;ne=this,Oe=!0;try{return this.fn()}finally{Sn(this),ne=t,Oe=s,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)cs(t);this.deps=this.depsTail=void 0,Os(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Dl.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Bl(this)&&this.run()}get dirty(){return Bl(this)}}let wn=0,Ft,Lt;function kn(e,t=!1){if(e.flags|=8,t){e.next=Lt,Lt=e;return}e.next=Ft,Ft=e}function as(){wn++}function rs(){if(--wn>0)return;if(Lt){let t=Lt;for(Lt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Ft;){let t=Ft;for(Ft=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 Cn(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Sn(e){let t,s=e.depsTail,n=s;for(;n;){const i=n.prevDep;n.version===-1?(n===s&&(s=i),cs(n),Fi(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=i}e.deps=t,e.depsTail=s}function Bl(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Tn(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Tn(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Bt)||(e.globalVersion=Bt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Bl(e))))return;e.flags|=2;const t=e.dep,s=ne,n=Oe;ne=e,Oe=!0;try{Cn(e);const i=e.fn(e._value);(t.version===0||Ue(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{ne=s,Oe=n,Sn(e),e.flags&=-3}}function cs(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)cs(o,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Fi(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Oe=!0;const $n=[];function nt(){$n.push(Oe),Oe=!1}function it(){const e=$n.pop();Oe=e===void 0?!0:e}function Os(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=ne;ne=void 0;try{t()}finally{ne=s}}}let Bt=0;class Li{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 us{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(!ne||!Oe||ne===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==ne)s=this.activeLink=new Li(ne,this),ne.deps?(s.prevDep=ne.depsTail,ne.depsTail.nextDep=s,ne.depsTail=s):ne.deps=ne.depsTail=s,Mn(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=ne.depsTail,s.nextDep=void 0,ne.depsTail.nextDep=s,ne.depsTail=s,ne.deps===s&&(ne.deps=n)}return s}trigger(t){this.version++,Bt++,this.notify(t)}notify(t){as();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{rs()}}}function Mn(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)Mn(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const Wl=new WeakMap,yt=Symbol(""),zl=Symbol(""),Wt=Symbol("");function he(e,t,s){if(Oe&&ne){let n=Wl.get(e);n||Wl.set(e,n=new Map);let i=n.get(s);i||(n.set(s,i=new us),i.map=n,i.key=s),i.track()}}function Qe(e,t,s,n,i,o){const a=Wl.get(e);if(!a){Bt++;return}const r=c=>{c&&c.trigger()};if(as(),t==="clear")a.forEach(r);else{const c=E(e),h=c&&is(s);if(c&&s==="length"){const p=Number(n);a.forEach((b,$)=>{($==="length"||$===Wt||!Ze($)&&$>=p)&&r(b)})}else switch((s!==void 0||a.has(void 0))&&r(a.get(s)),h&&r(a.get(Wt)),t){case"add":c?h&&r(a.get("length")):(r(a.get(yt)),ct(e)&&r(a.get(zl)));break;case"delete":c||(r(a.get(yt)),ct(e)&&r(a.get(zl)));break;case"set":ct(e)&&r(a.get(yt));break}}rs()}function kt(e){const t=Y(e);return t===e||(he(t,"iterate",Wt),je(e))?t:Ye(e)?ut(e)?t.map(s=>dt(Ae(s))):t.map(dt):t.map(Ae)}function Sl(e){return he(e=Y(e),"iterate",Wt),e}function Ve(e,t){return Ye(e)?dt(ut(e)?Ae(t):t):Ae(t)}const Vi={__proto__:null,[Symbol.iterator](){return Hl(this,Symbol.iterator,e=>Ve(this,e))},concat(...e){return kt(this).concat(...e.map(t=>E(t)?kt(t):t))},entries(){return Hl(this,"entries",e=>(e[1]=Ve(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=>Ve(this,n)),arguments)},find(e,t){return Ge(this,"find",e,t,s=>Ve(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=>Ve(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 Nl(this,"includes",e)},indexOf(...e){return Nl(this,"indexOf",e)},join(e){return kt(this).join(e)},lastIndexOf(...e){return Nl(this,"lastIndexOf",e)},map(e,t){return Ge(this,"map",e,t,void 0,arguments)},pop(){return qt(this,"pop")},push(...e){return qt(this,"push",e)},reduce(e,...t){return Es(this,"reduce",e,t)},reduceRight(e,...t){return Es(this,"reduceRight",e,t)},shift(){return qt(this,"shift")},some(e,t){return Ge(this,"some",e,t,void 0,arguments)},splice(...e){return qt(this,"splice",e)},toReversed(){return kt(this).toReversed()},toSorted(e){return kt(this).toSorted(e)},toSpliced(...e){return kt(this).toSpliced(...e)},unshift(...e){return qt(this,"unshift",e)},values(){return Hl(this,"values",e=>Ve(this,e))}};function Hl(e,t,s){const n=Sl(e),i=n[t]();return n!==e&&!je(e)&&(i._next=i.next,i.next=()=>{const o=i._next();return o.done||(o.value=s(o.value)),o}),i}const Ki=Array.prototype;function Ge(e,t,s,n,i,o){const a=Sl(e),r=a!==e&&!je(e),c=a[t];if(c!==Ki[t]){const b=c.apply(e,o);return r?Ae(b):b}let h=s;a!==e&&(r?h=function(b,$){return s.call(this,Ve(e,b),$,e)}:s.length>2&&(h=function(b,$){return s.call(this,b,$,e)}));const p=c.call(a,h,n);return r&&i?i(p):p}function Es(e,t,s,n){const i=Sl(e),o=i!==e&&!je(e);let a=s,r=!1;i!==e&&(o?(r=n.length===0,a=function(h,p,b){return r&&(r=!1,h=Ve(e,h)),s.call(this,h,Ve(e,p),b,e)}):s.length>3&&(a=function(h,p,b){return s.call(this,h,p,b,e)}));const c=i[t](a,...n);return r?Ve(e,c):c}function Nl(e,t,s){const n=Y(e);he(n,"iterate",Wt);const i=n[t](...s);return(i===-1||i===!1)&&hs(s[0])?(s[0]=Y(s[0]),n[t](...s)):i}function qt(e,t,s=[]){nt(),as();const n=Y(e)[t].apply(e,s);return rs(),it(),n}const Ui=ss("__proto__,__v_isRef,__isVue"),jn=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ze));function Bi(e){Ze(e)||(e=String(e));const t=Y(this);return he(t,"has",e),t.hasOwnProperty(e)}class An{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?to:On:o?qn:Pn).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const a=E(t);if(!i){let c;if(a&&(c=Vi[s]))return c;if(s==="hasOwnProperty")return Bi}const r=Reflect.get(t,s,me(t)?t:n);if((Ze(s)?jn.has(s):Ui(s))||(i||he(t,"get",s),o))return r;if(me(r)){const c=a&&is(s)?r:r.value;return i&&ee(c)?Yl(c):c}return ee(r)?i?Yl(r):ps(r):r}}class In extends An{constructor(t=!1){super(!1,t)}set(t,s,n,i){let o=t[s];const a=E(t)&&is(s);if(!this._isShallow){const h=Ye(o);if(!je(n)&&!Ye(n)&&(o=Y(o),n=Y(n)),!a&&me(o)&&!me(n))return h||(o.value=n),!0}const r=a?Number(s)<t.length:G(t,s),c=Reflect.set(t,s,n,me(t)?t:i);return t===Y(i)&&c&&(r?Ue(n,o)&&Qe(t,"set",s,n):Qe(t,"add",s,n)),c}deleteProperty(t,s){const n=G(t,s);t[s];const i=Reflect.deleteProperty(t,s);return i&&n&&Qe(t,"delete",s,void 0),i}has(t,s){const n=Reflect.has(t,s);return(!Ze(s)||!jn.has(s))&&he(t,"has",s),n}ownKeys(t){return he(t,"iterate",E(t)?"length":yt),Reflect.ownKeys(t)}}class Wi extends An{constructor(t=!1){super(!0,t)}set(t,s){return!0}deleteProperty(t,s){return!0}}const zi=new In,Zi=new Wi,Yi=new In(!0);const Zl=e=>e,nl=e=>Reflect.getPrototypeOf(e);function Gi(e,t,s){return function(...n){const i=this.__v_raw,o=Y(i),a=ct(o),r=e==="entries"||e===Symbol.iterator&&a,c=e==="keys"&&a,h=i[e](...n),p=s?Zl:t?dt:Ae;return!t&&he(o,"iterate",c?zl:yt),be(Object.create(h),{next(){const{value:b,done:$}=h.next();return $?{value:b,done:$}:{value:r?[p(b[0]),p(b[1])]:p(b),done:$}}})}}function il(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ji(e,t){const s={get(i){const o=this.__v_raw,a=Y(o),r=Y(i);e||(Ue(i,r)&&he(a,"get",i),he(a,"get",r));const{has:c}=nl(a),h=t?Zl:e?dt:Ae;if(c.call(a,i))return h(o.get(i));if(c.call(a,r))return h(o.get(r));o!==a&&o.get(i)},get size(){const i=this.__v_raw;return!e&&he(Y(i),"iterate",yt),i.size},has(i){const o=this.__v_raw,a=Y(o),r=Y(i);return e||(Ue(i,r)&&he(a,"has",i),he(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=Y(r),h=t?Zl:e?dt:Ae;return!e&&he(c,"iterate",yt),r.forEach((p,b)=>i.call(o,h(p),h(b),a))}};return be(s,e?{add:il("add"),set:il("set"),delete:il("delete"),clear:il("clear")}:{add(i){const o=Y(this),a=nl(o),r=Y(i),c=!t&&!je(i)&&!Ye(i)?r:i;return a.has.call(o,c)||Ue(i,c)&&a.has.call(o,i)||Ue(r,c)&&a.has.call(o,r)||(o.add(c),Qe(o,"add",c,c)),this},set(i,o){!t&&!je(o)&&!Ye(o)&&(o=Y(o));const a=Y(this),{has:r,get:c}=nl(a);let h=r.call(a,i);h||(i=Y(i),h=r.call(a,i));const p=c.call(a,i);return a.set(i,o),h?Ue(o,p)&&Qe(a,"set",i,o):Qe(a,"add",i,o),this},delete(i){const o=Y(this),{has:a,get:r}=nl(o);let c=a.call(o,i);c||(i=Y(i),c=a.call(o,i)),r&&r.call(o,i);const h=o.delete(i);return c&&Qe(o,"delete",i,void 0),h},clear(){const i=Y(this),o=i.size!==0,a=i.clear();return o&&Qe(i,"clear",void 0,void 0),a}}),["keys","values","entries",Symbol.iterator].forEach(i=>{s[i]=Gi(i,e,t)}),s}function ds(e,t){const s=Ji(e,t);return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(G(s,i)&&i in n?s:n,i,o)}const Xi={get:ds(!1,!1)},Qi={get:ds(!1,!0)},eo={get:ds(!0,!1)};const Pn=new WeakMap,qn=new WeakMap,On=new WeakMap,to=new WeakMap;function lo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ps(e){return Ye(e)?e:fs(e,!1,zi,Xi,Pn)}function so(e){return fs(e,!1,Yi,Qi,qn)}function Yl(e){return fs(e,!0,Zi,eo,On)}function fs(e,t,s,n,i){if(!ee(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=lo($i(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 je(e){return!!(e&&e.__v_isShallow)}function hs(e){return e?!!e.__v_raw:!1}function Y(e){const t=e&&e.__v_raw;return t?Y(t):e}function no(e){return!G(e,"__v_skip")&&Object.isExtensible(e)&&bn(e,"__v_skip",!0),e}const Ae=e=>ee(e)?ps(e):e,dt=e=>ee(e)?Yl(e):e;function me(e){return e?e.__v_isRef===!0:!1}function ke(e){return Rn(e,!1)}function En(e){return Rn(e,!0)}function Rn(e,t){return me(e)?e:new io(e,t)}class io{constructor(t,s){this.dep=new us,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:Y(t),this._value=s?t:Ae(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||je(t)||Ye(t);t=n?t:Y(t),Ue(t,s)&&(this._rawValue=t,this._value=n?t:Ae(t),this.dep.trigger())}}function K(e){return me(e)?e.value:e}const oo={get:(e,t,s)=>t==="__v_raw"?e:K(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const i=e[t];return me(i)&&!me(s)?(i.value=s,!0):Reflect.set(e,t,s,n)}};function Dn(e){return ut(e)?e:new Proxy(e,oo)}class ao{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new us(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Bt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&ne!==this)return kn(this,!0),!0}get value(){const t=this.dep.track();return Tn(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ro(e,t,s=!1){let n,i;return N(e)?n=e:(n=e.get,i=e.set),new ao(n,i,s)}const ol={},pl=new WeakMap;let gt;function co(e,t=!1,s=gt){if(s){let n=pl.get(s);n||pl.set(s,n=[]),n.push(e)}}function uo(e,t,s=le){const{immediate:n,deep:i,once:o,scheduler:a,augmentJob:r,call:c}=s,h=q=>i?q:je(q)||i===!1||i===0?et(q,1):et(q);let p,b,$,j,z=!1,D=!1;if(me(e)?(b=()=>e.value,z=je(e)):ut(e)?(b=()=>h(e),z=!0):E(e)?(D=!0,z=e.some(q=>ut(q)||je(q)),b=()=>e.map(q=>{if(me(q))return q.value;if(ut(q))return h(q);if(N(q))return c?c(q,2):q()})):N(e)?t?b=c?()=>c(e,2):e:b=()=>{if($){nt();try{$()}finally{it()}}const q=gt;gt=p;try{return c?c(e,3,[j]):e(j)}finally{gt=q}}:b=ze,t&&i){const q=b,ae=i===!0?1/0:i;b=()=>et(q(),ae)}const ie=Ni(),X=()=>{p.stop(),ie&&ie.active&&ns(ie.effects,p)};if(o&&t){const q=t;t=(...ae)=>{const F=q(...ae);return X(),F}}let V=D?new Array(e.length).fill(ol):ol;const Z=q=>{if(!(!(p.flags&1)||!p.dirty&&!q))if(t){const ae=p.run();if(q||i||z||(D?ae.some((F,x)=>Ue(F,V[x])):Ue(ae,V))){$&&$();const F=gt;gt=p;try{const x=[ae,V===ol?void 0:D&&V[0]===ol?[]:V,j];V=ae,c?c(t,3,x):t(...x)}finally{gt=F}}}else p.run()};return r&&r(Z),p=new xn(b),p.scheduler=a?()=>a(Z,!1):Z,j=q=>co(q,!1,p),$=p.onStop=()=>{const q=pl.get(p);if(q){if(c)c(q,4);else for(const ae of q)ae();pl.delete(p)}},t?n?Z(!0):V=p.run():a?a(Z.bind(null,!0),!0):p.run(),X.pause=p.pause.bind(p),X.resume=p.resume.bind(p),X.stop=X,X}function et(e,t=1/0,s){if(t<=0||!ee(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,me(e))et(e.value,t,s);else if(E(e))for(let n=0;n<e.length;n++)et(e[n],t,s);else if(lt(e)||ct(e))e.forEach(n=>{et(n,t,s)});else if(hn(e)){for(const n in e)et(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&&et(e[n],t,s)}return e}function Qt(e,t,s,n){try{return n?e(...n):e()}catch(i){Tl(i,t,s)}}function Ee(e,t,s,n){if(N(e)){const i=Qt(e,t,s,n);return i&&pn(i)&&i.catch(o=>{Tl(o,t,s)}),i}if(E(e)){const i=[];for(let o=0;o<e.length;o++)i.push(Ee(e[o],t,s,n));return i}}function Tl(e,t,s,n=!0){const i=t?t.vnode:null,{errorHandler:o,throwUnhandledErrorInProduction:a}=t&&t.appContext.config||le;if(t){let r=t.parent;const c=t.proxy,h=`https://vuejs.org/error-reference/#runtime-${s}`;for(;r;){const p=r.ec;if(p){for(let b=0;b<p.length;b++)if(p[b](e,c,h)===!1)return}r=r.parent}if(o){nt(),Qt(o,null,10,[e,c,h]),it();return}}po(e,s,i,n,a)}function po(e,t,s,n=!0,i=!1){if(i)throw e;console.error(e)}const ye=[];let Le=-1;const St=[];let rt=null,Ct=0;const Hn=Promise.resolve();let fl=null;function Nn(e){const t=fl||Hn;return e?t.then(this?e.bind(this):e):t}function fo(e){let t=Le+1,s=ye.length;for(;t<s;){const n=t+s>>>1,i=ye[n],o=zt(i);o<e||o===e&&i.flags&2?t=n+1:s=n}return t}function ms(e){if(!(e.flags&1)){const t=zt(e),s=ye[ye.length-1];!s||!(e.flags&2)&&t>=zt(s)?ye.push(e):ye.splice(fo(t),0,e),e.flags|=1,Fn()}}function Fn(){fl||(fl=Hn.then(Vn))}function ho(e){if(!E(e))rt&&e.id===-1?rt.splice(Ct+1,0,e):e.flags&1||(St.push(e),e.flags|=1);else for(let t=0;t<e.length;t++)St.push(e[t]);Fn()}function Rs(e,t,s=Le+1){for(;s<ye.length;s++){const n=ye[s];if(n&&n.flags&2){if(e&&n.id!==e.uid)continue;ye.splice(s,1),s--,n.flags&4&&(n.flags&=-2),n(),n.flags&4||(n.flags&=-2)}}}function Ln(e){if(St.length){const t=[...new Set(St)].sort((s,n)=>zt(s)-zt(n));if(St.length=0,rt){for(let s=0;s<t.length;s++)rt.push(t[s]);return}for(rt=t,Ct=0;Ct<rt.length;Ct++){const s=rt[Ct];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}rt=null,Ct=0}}const zt=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Vn(e){try{for(Le=0;Le<ye.length;Le++){const t=ye[Le];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),Qt(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;Le<ye.length;Le++){const t=ye[Le];t&&(t.flags&=-2)}Le=-1,ye.length=0,Ln(),fl=null,(ye.length||St.length)&&Vn()}}let Me=null,Kn=null;function hl(e){const t=Me;return Me=e,Kn=e&&e.type.__scopeId||null,t}function mo(e,t=Me,s){if(!t||e._n)return e;const n=(...i)=>{n._d&&zs(-1);const o=hl(t),a=xt.length;let r;try{r=e(...i)}finally{for(let c=xt.length;c>a;c--)fi();hl(o),n._d&&zs(1)}return r};return n._n=!0,n._c=!0,n._d=!0,n}function Fe(e,t){if(Me===null)return e;const s=Il(Me),n=e.dirs||(e.dirs=[]);for(let i=0;i<t.length;i++){let[o,a,r,c=le]=t[i];o&&(N(o)&&(o={mounted:o,updated:o}),o.deep&&et(a),n.push({dir:o,instance:s,value:a,oldValue:void 0,arg:r,modifiers:c}))}return e}function mt(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(),Ee(c,s,8,[e.el,r,e,t]),it())}}function bo(e,t){if(xe){let s=xe.provides;const n=xe.parent&&xe.parent.provides;n===s&&(s=xe.provides=Object.create(n)),s[e]=t}}function cl(e,t,s=!1){const n=da();if(n||Tt){let i=Tt?Tt._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&&N(t)?t.call(n&&n.proxy):t}}const go=Symbol.for("v-scx"),vo=()=>cl(go);function _t(e,t,s){return Un(e,t,s)}function Un(e,t,s=le){const{immediate:n,deep:i,flush:o,once:a}=s,r=be({},s),c=t&&n||!t&&o!=="post";let h;if(Gt){if(o==="sync"){const j=vo();h=j.__watcherHandles||(j.__watcherHandles=[])}else if(!c){const j=()=>{};return j.stop=ze,j.resume=ze,j.pause=ze,j}}const p=xe;r.call=(j,z,D)=>Ee(j,p,z,D);let b=!1;o==="post"?r.scheduler=j=>{we(j,p&&p.suspense)}:o!=="sync"&&(b=!0,r.scheduler=(j,z)=>{z?j():ms(j)}),r.augmentJob=j=>{t&&(j.flags|=4),b&&(j.flags|=2,p&&(j.id=p.uid,j.i=p))};const $=uo(e,t,r);return Gt&&(h?h.push($):c&&$()),$}function yo(e,t,s){const n=this.proxy,i=re(e)?e.includes(".")?Bn(n,e):()=>n[e]:e.bind(n,n);let o;N(t)?o=t:(o=t.handler,s=t);const a=el(this),r=Un(i,o.bind(n),s);return a(),r}function Bn(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 _o=Symbol("_vte"),$l=e=>e.__isTeleport,Fl=Symbol("_leaveCb");function xo(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==ot){t=s;break}}return t}function Wn(e){if(!gs(e))return $l(e.type)&&e.children?xo(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&&N(s.default))return s.default()}}function bs(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;bs($l(s.type)&&Wn(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 zn(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ds(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const ml=new WeakMap;function Vt(e,t,s,n,i=!1){if(E(e)){e.forEach((D,ie)=>Vt(D,t&&(E(t)?t[ie]:t),s,n,i));return}if(Kt(n)&&!i){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Vt(e,t,s,n.component.subTree);return}const o=n.shapeFlag&4?Il(n.component):n.el,a=i?null:o,{i:r,r:c}=e,h=t&&t.r,p=r.refs===le?r.refs={}:r.refs,b=r.setupState,$=Y(b),j=b===le?dn:D=>Ds(p,D)?!1:G($,D),z=(D,ie)=>!(ie&&Ds(p,ie));if(h!=null&&h!==c){if(Hs(t),re(h))p[h]=null,j(h)&&(b[h]=null);else if(me(h)){const D=t;z(h,D.k)&&(h.value=null),D.k&&(p[D.k]=null)}}if(N(c))Qt(c,r,12,[a,p]);else{const D=re(c),ie=me(c);if(D||ie){const X=()=>{if(e.f){const V=D?j(c)?b[c]:p[c]:z()||!e.k?c.value:p[e.k];if(i)E(V)&&ns(V,o);else if(E(V))V.includes(o)||V.push(o);else if(D)p[c]=[o],j(c)&&(b[c]=p[c]);else{const Z=[o];z(c,e.k)&&(c.value=Z),e.k&&(p[e.k]=Z)}}else D?(p[c]=a,j(c)&&(b[c]=a)):ie&&(z(c,e.k)&&(c.value=a),e.k&&(p[e.k]=a))};if(a){const V=()=>{X(),ml.delete(e)};V.id=-1,ml.set(e,V),we(V,s)}else Hs(e),X()}}}function Hs(e){const t=ml.get(e);t&&(t.flags|=8,ml.delete(e))}Cl().requestIdleCallback;Cl().cancelIdleCallback;const Kt=e=>!!e.type.__asyncLoader,gs=e=>e.type.__isKeepAlive;function wo(e,t){Zn(e,"a",t)}function ko(e,t){Zn(e,"da",t)}function Zn(e,t,s=xe){const n=e.__wdc||(e.__wdc=()=>{let i=s;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Ml(t,n,s),s){let i=s.parent;for(;i&&i.parent;)gs(i.parent.vnode)&&Co(n,t,s,i),i=i.parent}}function Co(e,t,s,n){const i=Ml(t,e,n,!0);vs(()=>{ns(n[t],i)},s)}function Ml(e,t,s=xe,n=!1){if(s){const i=s[e]||(s[e]=[]),o=t.__weh||(t.__weh=(...a)=>{nt();const r=el(s),c=Ee(t,s,e,a);return r(),it(),c});return n?i.unshift(o):i.push(o),o}}const at=e=>(t,s=xe)=>{(!Gt||e==="sp")&&Ml(e,(...n)=>t(...n),s)},So=at("bm"),Yn=at("m"),To=at("bu"),$o=at("u"),Mo=at("bum"),vs=at("um"),jo=at("sp"),Ao=at("rtg"),Io=at("rtc");function Po(e,t=xe){Ml("ec",e,t)}const qo=Symbol.for("v-ndc");function _e(e,t,s,n){let i;const o=s,a=E(e);if(a||re(e)){const r=a&&ut(e);let c=!1,h=!1;r&&(c=!je(e),h=Ye(e),e=Sl(e)),i=new Array(e.length);for(let p=0,b=e.length;p<b;p++)i[p]=t(c?h?dt(Ae(e[p])):Ae(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(ee(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,h=r.length;c<h;c++){const p=r[c];i[c]=t(e[p],p,c,o)}}else i=[];return i}const Gl=e=>e?vi(e)?Il(e):Gl(e.parent):null,Ut=be(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=>Gl(e.parent),$root:e=>Gl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Jn(e),$forceUpdate:e=>e.f||(e.f=()=>{ms(e.update)}),$nextTick:e=>e.n||(e.n=Nn.bind(e.proxy)),$watch:e=>yo.bind(e)}),Ll=(e,t)=>e!==le&&!e.__isScriptSetup&&G(e,t),Oo={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 $=a[t];if($!==void 0)switch($){case 1:return n[t];case 2:return i[t];case 4:return s[t];case 3:return o[t]}else{if(Ll(n,t))return a[t]=1,n[t];if(i!==le&&G(i,t))return a[t]=2,i[t];if(G(o,t))return a[t]=3,o[t];if(s!==le&&G(s,t))return a[t]=4,s[t];Jl&&(a[t]=0)}}const h=Ut[t];let p,b;if(h)return t==="$attrs"&&he(e.attrs,"get",""),h(e);if((p=r.__cssModules)&&(p=p[t]))return p;if(s!==le&&G(s,t))return a[t]=4,s[t];if(b=c.config.globalProperties,G(b,t))return b[t]},set({_:e},t,s){const{data:n,setupState:i,ctx:o}=e;return Ll(i,t)?(i[t]=s,!0):n!==le&&G(n,t)?(n[t]=s,!0):G(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!==le&&r[0]!=="$"&&G(e,r)||Ll(t,r)||G(o,r)||G(n,r)||G(Ut,r)||G(i.config.globalProperties,r)||(c=a.__cssModules)&&c[r])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:G(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function Ns(e){return E(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let Jl=!0;function Eo(e){const t=Jn(e),s=e.proxy,n=e.ctx;Jl=!1,t.beforeCreate&&Fs(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:a,watch:r,provide:c,inject:h,created:p,beforeMount:b,mounted:$,beforeUpdate:j,updated:z,activated:D,deactivated:ie,beforeDestroy:X,beforeUnmount:V,destroyed:Z,unmounted:q,render:ae,renderTracked:F,renderTriggered:x,errorCaptured:I,serverPrefetch:R,expose:ce,inheritAttrs:Ie,components:wt,directives:tl,filters:ql}=t;if(h&&Ro(h,n,null),a)for(const oe in a){const se=a[oe];N(se)&&(n[oe]=se.bind(s))}if(i){const oe=i.call(s,s);ee(oe)&&(e.data=ps(oe))}if(Jl=!0,o)for(const oe in o){const se=o[oe],ft=N(se)?se.bind(s,s):N(se.get)?se.get.bind(s,s):ze,ll=!N(se)&&N(se.set)?se.set.bind(s):ze,ht=Be({get:ft,set:ll});Object.defineProperty(n,oe,{enumerable:!0,configurable:!0,get:()=>ht.value,set:Pe=>ht.value=Pe})}if(r)for(const oe in r)Gn(r[oe],n,s,oe);if(c){const oe=N(c)?c.call(s):c;Reflect.ownKeys(oe).forEach(se=>{bo(se,oe[se])})}p&&Fs(p,e,"c");function ge(oe,se){E(se)?se.forEach(ft=>oe(ft.bind(s))):se&&oe(se.bind(s))}if(ge(So,b),ge(Yn,$),ge(To,j),ge($o,z),ge(wo,D),ge(ko,ie),ge(Po,I),ge(Io,F),ge(Ao,x),ge(Mo,V),ge(vs,q),ge(jo,R),E(ce))if(ce.length){const oe=e.exposed||(e.exposed={});ce.forEach(se=>{Object.defineProperty(oe,se,{get:()=>s[se],set:ft=>s[se]=ft,enumerable:!0})})}else e.exposed||(e.exposed={});ae&&e.render===ze&&(e.render=ae),Ie!=null&&(e.inheritAttrs=Ie),wt&&(e.components=wt),tl&&(e.directives=tl),R&&zn(e)}function Ro(e,t,s=ze){E(e)&&(e=Xl(e));for(const n in e){const i=e[n];let o;ee(i)?"default"in i?o=cl(i.from||n,i.default,!0):o=cl(i.from||n):o=cl(i),me(o)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>o.value,set:a=>o.value=a}):t[n]=o}}function Fs(e,t,s){Ee(E(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function Gn(e,t,s,n){let i=n.includes(".")?Bn(s,n):()=>s[n];if(re(e)){const o=t[e];N(o)&&_t(i,o)}else if(N(e))_t(i,e.bind(s));else if(ee(e))if(E(e))e.forEach(o=>Gn(o,t,s,n));else{const o=N(e.handler)?e.handler.bind(s):t[e.handler];N(o)&&_t(i,o,e)}}function Jn(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(h=>bl(c,h,a,!0)),bl(c,t,a)),ee(t)&&o.set(t,c),c}function bl(e,t,s,n=!1){const{mixins:i,extends:o}=t;o&&bl(e,o,s,!0),i&&i.forEach(a=>bl(e,a,s,!0));for(const a in t)if(!(n&&a==="expose")){const r=Do[a]||s&&s[a];e[a]=r?r(e[a],t[a]):t[a]}return e}const Do={data:Ls,props:Vs,emits:Vs,methods:Dt,computed:Dt,beforeCreate:ve,created:ve,beforeMount:ve,mounted:ve,beforeUpdate:ve,updated:ve,beforeDestroy:ve,beforeUnmount:ve,destroyed:ve,unmounted:ve,activated:ve,deactivated:ve,errorCaptured:ve,serverPrefetch:ve,components:Dt,directives:Dt,watch:No,provide:Ls,inject:Ho};function Ls(e,t){return t?e?function(){return be(N(e)?e.call(this,this):e,N(t)?t.call(this,this):t)}:t:e}function Ho(e,t){return Dt(Xl(e),Xl(t))}function Xl(e){if(E(e)){const t={};for(let s=0;s<e.length;s++)t[e[s]]=e[s];return t}return e}function ve(e,t){return e?[...new Set([].concat(e,t))]:t}function Dt(e,t){return e?be(Object.create(null),e,t):t}function Vs(e,t){return e?E(e)&&E(t)?[...new Set([...e,...t])]:be(Object.create(null),Ns(e),Ns(t??{})):t}function No(e,t){if(!e)return t;if(!t)return e;const s=be(Object.create(null),e);for(const n in t)s[n]=ve(e[n],t[n]);return s}function Xn(){return{app:null,config:{isNativeTag:dn,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 Fo=0;function Lo(e,t){return function(n,i=null){N(n)||(n=be({},n)),i!=null&&!ee(i)&&(i=null);const o=Xn(),a=new WeakSet,r=[];let c=!1;const h=o.app={_uid:Fo++,_component:n,_props:i,_container:null,_context:o,_instance:null,version:ga,get config(){return o.config},set config(p){},use(p,...b){return a.has(p)||(p&&N(p.install)?(a.add(p),p.install(h,...b)):N(p)&&(a.add(p),p(h,...b))),h},mixin(p){return o.mixins.includes(p)||o.mixins.push(p),h},component(p,b){return b?(o.components[p]=b,h):o.components[p]},directive(p,b){return b?(o.directives[p]=b,h):o.directives[p]},mount(p,b,$){if(!c){const j=h._ceVNode||L(n,i);return j.appContext=o,$===!0?$="svg":$===!1&&($=void 0),e(j,p,$),c=!0,h._container=p,p.__vue_app__=h,Il(j.component)}},onUnmount(p){r.push(p)},unmount(){c&&(Ee(r,h._instance,16),e(null,h._container),delete h._container.__vue_app__)},provide(p,b){return o.provides[p]=b,h},runWithContext(p){const b=Tt;Tt=h;try{return p()}finally{Tt=b}}};return h}}let Tt=null;const Vo=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${qe(t)}Modifiers`]||e[`${pt(t)}Modifiers`];function Ko(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||le;let i=s;const o=t.startsWith("update:"),a=o&&Vo(n,t.slice(7));a&&(a.trim&&(i=s.map(p=>re(p)?p.trim():p)),a.number&&(i=i.map(gn)));let r,c=n[r=El(t)]||n[r=El(qe(t))];!c&&o&&(c=n[r=El(pt(t))]),c&&Ee(c,e,6,i);const h=n[r+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,Ee(h,e,6,i)}}const Uo=new WeakMap;function Qn(e,t,s=!1){const n=s?Uo:t.emitsCache,i=n.get(e);if(i!==void 0)return i;const o=e.emits;let a={},r=!1;if(!N(e)){const c=h=>{const p=Qn(h,t,!0);p&&(r=!0,be(a,p))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!r?(ee(e)&&n.set(e,null),null):(E(o)?o.forEach(c=>a[c]=null):be(a,o),ee(e)&&n.set(e,a),a)}function jl(e,t){return!e||!xl(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),G(e,t[0].toLowerCase()+t.slice(1))||G(e,pt(t))||G(e,t))}function Ks(e){const{type:t,vnode:s,proxy:n,withProxy:i,propsOptions:[o],slots:a,attrs:r,emit:c,render:h,renderCache:p,props:b,data:$,setupState:j,ctx:z,inheritAttrs:D}=e,ie=hl(e);let X,V;try{if(s.shapeFlag&4){const q=i||n,ae=q;X=Ke(h.call(ae,q,p,b,j,$,z)),V=r}else{const q=t;X=Ke(q.length>1?q(b,{attrs:r,slots:a,emit:c}):q(b,null)),V=t.props?r:Bo(r)}}catch(q){xt.length=0,Tl(q,e,1),X=L(ot)}let Z=X;if(V&&D!==!1){const q=Object.keys(V),{shapeFlag:ae}=Z;q.length&&ae&7&&(o&&q.some(wl)&&(V=Wo(V,o)),Z=Mt(Z,V,!1,!0))}if(s.dirs&&(Z=Mt(Z,null,!1,!0),Z.dirs=Z.dirs?Z.dirs.concat(s.dirs):s.dirs),s.transition){const q=$l(Z.type)&&Wn(Z)||Z;bs(q,s.transition)}return X=Z,hl(ie),X}const Bo=e=>{let t;for(const s in e)(s==="class"||s==="style"||xl(s))&&((t||(t={}))[s]=e[s]);return t},Wo=(e,t)=>{const s={};for(const n in e)(!wl(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function zo(e,t,s){const{props:n,children:i,component:o}=e,{props:a,children:r,patchFlag:c}=t,h=o.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return n?Us(n,a,h):!!a;if(c&8){const p=t.dynamicProps;for(let b=0;b<p.length;b++){const $=p[b];if(ei(a,n,$)&&!jl(h,$))return!0}}}else return(i||r)&&(!r||!r.$stable)?!0:n===a?!1:n?a?Us(n,a,h):!0:!!a;return!1}function Us(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(ei(t,e,o)&&!jl(s,o))return!0}return!1}function ei(e,t,s){const n=e[s],i=t[s];return s==="style"&&ee(n)&&ee(i)?!st(n,i):n!==i}function Zo({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 ti={},li=()=>Object.create(ti),si=e=>Object.getPrototypeOf(e)===ti;function Yo(e,t,s,n=!1){const i={},o=li();e.propsDefaults=Object.create(null),ni(e,t,i,o);for(const a in e.propsOptions[0])a in i||(i[a]=void 0);s?e.props=n?i:so(i):e.type.props?e.props=i:e.props=o,e.attrs=o}function Go(e,t,s,n){const{props:i,attrs:o,vnode:{patchFlag:a}}=e,r=Y(i),[c]=e.propsOptions;let h=!1;if((n||a>0)&&!(a&16)){if(a&8){const p=e.vnode.dynamicProps;for(let b=0;b<p.length;b++){let $=p[b];if(jl(e.emitsOptions,$))continue;const j=t[$];if(c)if(G(o,$))j!==o[$]&&(o[$]=j,h=!0);else{const z=qe($);i[z]=Ql(c,r,z,j,e,!1)}else j!==o[$]&&(o[$]=j,h=!0)}}}else{ni(e,t,i,o)&&(h=!0);let p;for(const b in r)(!t||!G(t,b)&&((p=pt(b))===b||!G(t,p)))&&(c?s&&(s[b]!==void 0||s[p]!==void 0)&&(i[b]=Ql(c,r,b,void 0,e,!0)):delete i[b]);if(o!==r)for(const b in o)(!t||!G(t,b))&&(delete o[b],h=!0)}h&&Qe(e.attrs,"set","")}function ni(e,t,s,n){const[i,o]=e.propsOptions;let a=!1,r;if(t)for(let c in t){if(Nt(c))continue;const h=t[c];let p;i&&G(i,p=qe(c))?!o||!o.includes(p)?s[p]=h:(r||(r={}))[p]=h:jl(e.emitsOptions,c)||(!(c in n)||h!==n[c])&&(n[c]=h,a=!0)}if(o){const c=Y(s),h=r||le;for(let p=0;p<o.length;p++){const b=o[p];s[b]=Ql(i,c,b,h[b],e,!G(h,b))}}return a}function Ql(e,t,s,n,i,o){const a=e[s];if(a!=null){const r=G(a,"default");if(r&&n===void 0){const c=a.default;if(a.type!==Function&&!a.skipFactory&&N(c)){const{propsDefaults:h}=i;if(s in h)n=h[s];else{const p=el(i);n=h[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===pt(s))&&(n=!0))}return n}const Jo=new WeakMap;function ii(e,t,s=!1){const n=s?Jo:t.propsCache,i=n.get(e);if(i)return i;const o=e.props,a={},r=[];let c=!1;if(!N(e)){const p=b=>{c=!0;const[$,j]=ii(b,t,!0);be(a,$),j&&r.push(...j)};!s&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!o&&!c)return ee(e)&&n.set(e,vt),vt;if(E(o))for(let p=0;p<o.length;p++){const b=qe(o[p]);Bs(b)&&(a[b]=le)}else if(o)for(const p in o){const b=qe(p);if(Bs(b)){const $=o[p],j=a[b]=E($)||N($)?{type:$}:be({},$),z=j.type;let D=!1,ie=!0;if(E(z))for(let X=0;X<z.length;++X){const V=z[X],Z=N(V)&&V.name;if(Z==="Boolean"){D=!0;break}else Z==="String"&&(ie=!1)}else D=N(z)&&z.name==="Boolean";j[0]=D,j[1]=ie,(D||G(j,"default"))&&r.push(b)}}const h=[a,r];return ee(e)&&n.set(e,h),h}function Bs(e){return e[0]!=="$"&&!Nt(e)}const ys=e=>e==="_"||e==="_ctx"||e==="$stable",_s=e=>E(e)?e.map(Ke):[Ke(e)],Xo=(e,t,s)=>{if(t._n)return t;const n=mo((...i)=>_s(t(...i)),s);return n._c=!1,n},oi=(e,t,s)=>{const n=e._ctx;for(const i in e){if(ys(i))continue;const o=e[i];if(N(o))t[i]=Xo(i,o,n);else if(o!=null){const a=_s(o);t[i]=()=>a}}},ai=(e,t)=>{const s=_s(t);e.slots.default=()=>s},ri=(e,t,s)=>{for(const n in t)(s||!ys(n))&&(e[n]=t[n])},Qo=(e,t,s)=>{const n=e.slots=li();if(e.vnode.shapeFlag&32){const i=t._;i?(ri(n,t,s),s&&bn(n,"_",i,!0)):oi(t,n)}else t&&ai(e,t)},ea=(e,t,s)=>{const{vnode:n,slots:i}=e;let o=!0,a=le;if(n.shapeFlag&32){const r=t._;r?s&&r===1?o=!1:ri(i,t,s):(o=!t.$stable,oi(t,i)),a=t}else t&&(ai(e,t),a={default:1});if(o)for(const r in i)!ys(r)&&a[r]==null&&delete i[r]},we=ia;function ta(e){return la(e)}function la(e,t){const s=Cl();s.__VUE__=!0;const{insert:n,remove:i,patchProp:o,createElement:a,createText:r,createComment:c,setText:h,setElementText:p,parentNode:b,nextSibling:$,setScopeId:j=ze,insertStaticContent:z}=e,D=(u,d,m,_=null,g=null,y=null,S=void 0,C=null,w=!!d.dynamicChildren)=>{if(u===d)return;u&&!Ot(u,d)&&(_=sl(u),Pe(u,g,y,!0),u=null),d.patchFlag===-2&&(w=!1,d.dynamicChildren=null),d.dynamicChildren&&u&&u.dynamicChildren&&u.dynamicChildren.hasOnce&&(d.dynamicChildren===vt&&(d.dynamicChildren=[]),d.dynamicChildren.hasOnce=!0);const{type:v,ref:O,shapeFlag:A}=d;switch(v){case Al:ie(u,d,m,_);break;case ot:X(u,d,m,_);break;case ul:u==null&&V(d,m,_,S);break;case W:wt(u,d,m,_,g,y,S,C,w);break;default:A&1?ae(u,d,m,_,g,y,S,C,w):A&6?tl(u,d,m,_,g,y,S,C,w):(A&64||A&128)&&v.process(u,d,m,_,g,y,S,C,w,It)}O!=null&&g?Vt(O,u&&u.ref,y,d||u,!d):O==null&&u&&u.ref!=null&&Vt(u.ref,null,y,u,!0)},ie=(u,d,m,_)=>{if(u==null)n(d.el=r(d.children),m,_);else{const g=d.el=u.el;d.children!==u.children&&h(g,d.children)}},X=(u,d,m,_)=>{u==null?n(d.el=c(d.children||""),m,_):d.el=u.el},V=(u,d,m,_)=>{[u.el,u.anchor]=z(u.children,d,m,_,u.el,u.anchor)},Z=({el:u,anchor:d},m,_)=>{let g;for(;u&&u!==d;)g=$(u),n(u,m,_),u=g;n(d,m,_)},q=({el:u,anchor:d})=>{let m;for(;u&&u!==d;)m=$(u),i(u),u=m;i(d)},ae=(u,d,m,_,g,y,S,C,w)=>{if(d.type==="svg"?S="svg":d.type==="math"&&(S="mathml"),u==null)F(d,m,_,g,y,S,C,w);else{const v=u.el&&u.el._isVueCE?u.el:null;try{v&&v._beginPatch(),R(u,d,g,y,S,C,w)}finally{v&&v._endPatch()}}},F=(u,d,m,_,g,y,S,C)=>{let w,v;const{props:O,shapeFlag:A,transition:P,dirs:H}=u;if(w=u.el=a(u.type,y,O&&O.is,O),A&8?p(w,u.children):A&16&&I(u.children,w,null,_,g,Vl(u,y),S,C),H&&mt(u,null,_,"created"),x(w,u,u.scopeId,S,_),O){for(const te in O)te!=="value"&&!Nt(te)&&o(w,te,null,O[te],y,_);"value"in O&&o(w,"value",null,O.value,y),(v=O.onVnodeBeforeMount)&&Ne(v,_,u)}H&&mt(u,null,_,"beforeMount");const B=sa(g,P);B&&P.beforeEnter(w),n(w,d,m),((v=O&&O.onVnodeMounted)||B||H)&&we(()=>{v&&Ne(v,_,u),B&&P.enter(w),H&&mt(u,null,_,"mounted")},g)},x=(u,d,m,_,g)=>{if(m&&j(u,m),_)for(let y=0;y<_.length;y++)j(u,_[y]);if(g){let y=g.subTree;if(d===y||pi(y.type)&&(y.ssContent===d||y.ssFallback===d)){const S=g.vnode;x(u,S,S.scopeId,S.slotScopeIds,g.parent)}}},I=(u,d,m,_,g,y,S,C,w=0)=>{for(let v=w;v<u.length;v++){const O=u[v]=C?Xe(u[v]):Ke(u[v]);D(null,O,d,m,_,g,y,S,C)}},R=(u,d,m,_,g,y,S)=>{const C=d.el=u.el;let{patchFlag:w,dynamicChildren:v,dirs:O}=d;w|=u.patchFlag&16;const A=u.props||le,P=d.props||le;let H;if(m&&bt(m,!1),(H=P.onVnodeBeforeUpdate)&&Ne(H,m,d,u),O&&mt(d,u,m,"beforeUpdate"),m&&bt(m,!0),v&&(!u.dynamicChildren||u.dynamicChildren.length!==v.length)&&(w=0,S=!1,v=null),(A.innerHTML&&P.innerHTML==null||A.textContent&&P.textContent==null)&&p(C,""),v?ce(u.dynamicChildren,v,C,m,_,Vl(d,g),y):S||se(u,d,C,null,m,_,Vl(d,g),y,!1),w>0){if(w&16)Ie(C,A,P,m,g);else if(w&2&&A.class!==P.class&&o(C,"class",null,P.class,g),w&4&&o(C,"style",A.style,P.style,g),w&8){const B=d.dynamicProps;for(let te=0;te<B.length;te++){const Q=B[te],ue=A[Q],pe=P[Q];(pe!==ue||Q==="value")&&o(C,Q,ue,pe,g,m)}}w&1&&u.children!==d.children&&p(C,d.children)}else!S&&v==null&&Ie(C,A,P,m,g);((H=P.onVnodeUpdated)||O)&&we(()=>{H&&Ne(H,m,d,u),O&&mt(d,u,m,"updated")},_)},ce=(u,d,m,_,g,y,S)=>{for(let C=0;C<d.length;C++){const w=u[C],v=d[C],O=w.el&&(w.type===W||!Ot(w,v)||w.shapeFlag&198)?b(w.el):m;D(w,v,O,null,_,g,y,S,!0)}},Ie=(u,d,m,_,g)=>{if(d!==m){if(d!==le)for(const y in d)!Nt(y)&&!(y in m)&&o(u,y,d[y],null,g,_);for(const y in m){if(Nt(y))continue;const S=m[y],C=d[y];S!==C&&y!=="value"&&o(u,y,C,S,g,_)}"value"in m&&o(u,"value",d.value,m.value,g)}},wt=(u,d,m,_,g,y,S,C,w)=>{const v=d.el=u?u.el:r(""),O=d.anchor=u?u.anchor:r("");let{patchFlag:A,dynamicChildren:P,slotScopeIds:H}=d;H&&(C=C?C.concat(H):H),u==null?(n(v,m,_),n(O,m,_),I(d.children||[],m,O,g,y,S,C,w)):A>0&&A&64&&P&&u.dynamicChildren&&u.dynamicChildren.length===P.length?(ce(u.dynamicChildren,P,m,g,y,S,C),(d.key!=null||g&&d===g.subTree)&&ci(u,d,!0)):se(u,d,m,O,g,y,S,C,w)},tl=(u,d,m,_,g,y,S,C,w)=>{d.slotScopeIds=C,u==null?d.shapeFlag&512?g.ctx.activate(d,m,_,S,w):ql(d,m,_,g,y,S,w):Cs(u,d,w)},ql=(u,d,m,_,g,y,S)=>{const C=u.component=ua(u,_,g);if(gs(u)&&(C.ctx.renderer=It),pa(C,!1,S),C.asyncDep){if(g&&g.registerDep(C,ge,S),!u.el){const w=C.subTree=L(ot);X(null,w,d,m),u.placeholder=w.el}}else ge(C,u,d,m,g,y,S)},Cs=(u,d,m)=>{const _=d.component=u.component;if(zo(u,d,m))if(_.asyncDep&&!_.asyncResolved){d.el=u.el,oe(_,d,m);return}else _.next=d,_.update();else d.el=u.el,_.vnode=d},ge=(u,d,m,_,g,y,S)=>{const C=()=>{if(u.isMounted){let{next:A,bu:P,u:H,parent:B,vnode:te}=u;{const De=ui(u);if(De){A&&(A.el=te.el,oe(u,A,S)),De.asyncDep.then(()=>{we(()=>{u.isUnmounted||v()},g)});return}}let Q=A,ue;bt(u,!1),A?(A.el=te.el,oe(u,A,S)):A=te,P&&rl(P),(ue=A.props&&A.props.onVnodeBeforeUpdate)&&Ne(ue,B,A,te),bt(u,!0);const pe=Ks(u),Re=u.subTree;u.subTree=pe,D(Re,pe,b(Re.el),sl(Re),u,g,y),A.el=pe.el,Q===null&&Zo(u,pe.el),H&&we(H,g),(ue=A.props&&A.props.onVnodeUpdated)&&we(()=>Ne(ue,B,A,te),g)}else{let A;const{el:P,props:H}=d,{bm:B,m:te,parent:Q,root:ue,type:pe}=u,Re=Kt(d);bt(u,!1),B&&rl(B),!Re&&(A=H&&H.onVnodeBeforeMount)&&Ne(A,Q,d),bt(u,!0);{ue.ce&&ue.ce._hasShadowRoot()&&ue.ce._injectChildStyle(pe,u.parent?u.parent.type:void 0);const De=u.subTree=Ks(u);D(null,De,m,_,u,g,y),d.el=De.el}if(te&&we(te,g),!Re&&(A=H&&H.onVnodeMounted)){const De=d;we(()=>Ne(A,Q,De),g)}(d.shapeFlag&256||Q&&Kt(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&we(u.a,g),u.isMounted=!0,d=m=_=null}};u.scope.on();const w=u.effect=new xn(C);u.scope.off();const v=u.update=w.run.bind(w),O=u.job=w.runIfDirty.bind(w);O.i=u,O.id=u.uid,w.scheduler=()=>ms(O),bt(u,!0),v()},oe=(u,d,m)=>{d.component=u;const _=u.vnode.props;u.vnode=d,u.next=null,Go(u,d.props,_,m),ea(u,d.children,m),nt(),Rs(u),it()},se=(u,d,m,_,g,y,S,C,w=!1)=>{const v=u&&u.children,O=u?u.shapeFlag:0,A=d.children,{patchFlag:P,shapeFlag:H}=d;if(P>0){if(P&128){ll(v,A,m,_,g,y,S,C,w);return}else if(P&256){ft(v,A,m,_,g,y,S,C,w);return}}H&8?(O&16&&At(v,g,y),A!==v&&p(m,A)):O&16?H&16?ll(v,A,m,_,g,y,S,C,w):At(v,g,y,!0):(O&8&&p(m,""),H&16&&I(A,m,_,g,y,S,C,w))},ft=(u,d,m,_,g,y,S,C,w)=>{u=u||vt,d=d||vt;const v=u.length,O=d.length,A=Math.min(v,O);let P;for(P=0;P<A;P++){const H=d[P]=w?Xe(d[P]):Ke(d[P]);D(u[P],H,m,null,g,y,S,C,w)}v>O?At(u,g,y,!0,!1,A):I(d,m,_,g,y,S,C,w,A)},ll=(u,d,m,_,g,y,S,C,w)=>{let v=0;const O=d.length;let A=u.length-1,P=O-1;for(;v<=A&&v<=P;){const H=u[v],B=d[v]=w?Xe(d[v]):Ke(d[v]);if(Ot(H,B))D(H,B,m,null,g,y,S,C,w);else break;v++}for(;v<=A&&v<=P;){const H=u[A],B=d[P]=w?Xe(d[P]):Ke(d[P]);if(Ot(H,B))D(H,B,m,null,g,y,S,C,w);else break;A--,P--}if(v>A){if(v<=P){const H=P+1,B=H<O?d[H].el:_;for(;v<=P;)D(null,d[v]=w?Xe(d[v]):Ke(d[v]),m,B,g,y,S,C,w),v++}}else if(v>P)for(;v<=A;)Pe(u[v],g,y,!0),v++;else{const H=v,B=v,te=new Map;for(v=B;v<=P;v++){const Ce=d[v]=w?Xe(d[v]):Ke(d[v]);Ce.key!=null&&te.set(Ce.key,v)}let Q,ue=0;const pe=P-B+1;let Re=!1,De=0;const Pt=new Array(pe);for(v=0;v<pe;v++)Pt[v]=0;for(v=H;v<=A;v++){const Ce=u[v];if(ue>=pe){Pe(Ce,g,y,!0);continue}let He;if(Ce.key!=null)He=te.get(Ce.key);else for(Q=B;Q<=P;Q++)if(Pt[Q-B]===0&&Ot(Ce,d[Q])){He=Q;break}He===void 0?Pe(Ce,g,y,!0):(Pt[He-B]=v+1,He>=De?De=He:Re=!0,D(Ce,d[He],m,null,g,y,S,C,w),ue++)}const $s=Re?na(Pt):vt;for(Q=$s.length-1,v=pe-1;v>=0;v--){const Ce=B+v,He=d[Ce],Ms=d[Ce+1],js=Ce+1<O?Ms.el||di(Ms):_;Pt[v]===0?D(null,He,m,js,g,y,S,C,w):Re&&(Q<0||v!==$s[Q]?ht(He,m,js,2):Q--)}}},ht=(u,d,m,_,g=null)=>{const{el:y,type:S,transition:C,children:w,shapeFlag:v}=u;if(v&6){ht(u.component.subTree,d,m,_);return}if(v&128){u.suspense.move(d,m,_);return}if(v&64){S.move(u,d,m,It);return}if(S===W){n(y,d,m);for(let A=0;A<w.length;A++)ht(w[A],d,m,_);n(u.anchor,d,m);return}if(S===ul){Z(u,d,m);return}if(_!==2&&v&1&&C)if(_===0)C.persisted&&!y[Fl]?n(y,d,m):(C.beforeEnter(y),n(y,d,m),we(()=>C.enter(y),g));else{const{leave:A,delayLeave:P,afterLeave:H}=C,B=()=>{u.ctx.isUnmounted?i(y):n(y,d,m)},te=()=>{const Q=y._isLeaving||!!y[Fl];y._isLeaving&&y[Fl](!0),C.persisted&&!Q?B():A(y,()=>{B(),H&&H()})};P?P(y,B,te):te()}else n(y,d,m)},Pe=(u,d,m,_=!1,g=!1)=>{const{type:y,props:S,ref:C,children:w,dynamicChildren:v,shapeFlag:O,patchFlag:A,dirs:P,cacheIndex:H,memo:B}=u;if((A===-2||v&&v.hasOnce)&&(g=!1),C!=null&&(nt(),Vt(C,null,m,u,!0),it()),H!=null&&(!u.ctx||u.ctx===d)&&(d.renderCache[H]=void 0),O&256){d.ctx.deactivate(u);return}const te=O&1&&P,Q=!Kt(u);let ue;if(Q&&(ue=S&&S.onVnodeBeforeUnmount)&&Ne(ue,d,u),O&6)Si(u.component,m,_);else{if(O&128){u.suspense.unmount(m,_);return}te&&mt(u,null,d,"beforeUnmount"),O&64?u.type.remove(u,d,m,It,_):v&&!v.hasOnce&&(y!==W||A>0&&A&64)?At(v,d,m,!1,!0):(y===W&&A&384||!g&&O&16)&&At(w,d,m),_&&Ss(u)}const pe=B!=null&&H==null;(Q&&(ue=S&&S.onVnodeUnmounted)||te||pe)&&we(()=>{ue&&Ne(ue,d,u),te&&mt(u,null,d,"unmounted"),pe&&(u.el=null)},m)},Ss=u=>{const{type:d,el:m,anchor:_,transition:g}=u;if(d===W){Ci(m,_);return}if(d===ul){q(u),g&&!g.persisted&&g.afterLeave&&g.afterLeave();return}const y=()=>{i(m),g&&!g.persisted&&g.afterLeave&&g.afterLeave()};if(u.shapeFlag&1&&g&&!g.persisted){const{leave:S,delayLeave:C}=g,w=()=>S(m,y);C?C(u.el,y,w):w()}else y()},Ci=(u,d)=>{let m;for(;u!==d;)m=$(u),i(u),u=m;i(d)},Si=(u,d,m)=>{const{bum:_,scope:g,job:y,subTree:S,um:C,m:w,a:v}=u;Ws(w),Ws(v),_&&rl(_),g.stop(),y?(y.flags|=8,Pe(S,u,d,m)):u.vnode.el&&S&&(S.transition=u.vnode.transition,Pe(S,u,d,m)),C&&we(C,d),we(()=>{u.isUnmounted=!0},d)},At=(u,d,m,_=!1,g=!1,y=0)=>{for(let S=y;S<u.length;S++)Pe(u[S],d,m,_,g)},sl=u=>{if(u.shapeFlag&6)return sl(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=$(u.anchor||u.el),m=d&&d[_o];return m?$(m):d};let Ol=!1;const Ts=(u,d,m)=>{let _;u==null?d._vnode&&(Pe(d._vnode,null,null,!0),_=d._vnode.component):D(d._vnode||null,u,d,null,null,null,m),d._vnode=u,Ol||(Ol=!0,Rs(_),Ln(),Ol=!1)},It={p:D,um:Pe,m:ht,r:Ss,mt:ql,mc:I,pc:se,pbc:ce,n:sl,o:e};return{render:Ts,hydrate:void 0,createApp:Lo(Ts)}}function Vl({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 bt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function sa(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ci(e,t,s=!1){const n=e.children,i=t.children;if(E(n)&&E(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]=Xe(i[o]),r.el=a.el),!s&&r.patchFlag!==-2&&ci(a,r)),r.type===Al&&(r.patchFlag===-1&&(r=i[o]=Xe(r)),r.el=a.el),r.type===ot&&!r.el&&(r.el=a.el)}}function na(e){const t=e.slice(),s=[0];let n,i,o,a,r;const c=e.length;for(n=0;n<c;n++){const h=e[n];if(h!==0){if(i=s[s.length-1],e[i]<h){t[n]=i,s.push(n);continue}for(o=0,a=s.length-1;o<a;)r=o+a>>1,e[s[r]]<h?o=r+1:a=r;h<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 ui(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ui(t)}function Ws(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function di(e){if(e.placeholder)return e.placeholder;const t=e.component;return t?di(t.subTree):null}const pi=e=>e.__isSuspense;function ia(e,t){t&&t.pendingBranch?E(e)?t.effects.push(...e):t.effects.push(e):ho(e)}const W=Symbol.for("v-fgt"),Al=Symbol.for("v-txt"),ot=Symbol.for("v-cmt"),ul=Symbol.for("v-stc"),xt=[];let $e=null;function T(e=!1){xt.push($e=e?null:[])}function fi(){xt.pop(),$e=xt[xt.length-1]||null}let Zt=1;function zs(e,t=!1){Zt+=e,e<0&&$e&&t&&($e.hasOnce=!0)}function hi(e){return e.dynamicChildren=Zt>0?$e||vt:null,fi(),Zt>0&&$e&&$e.push(e),e}function M(e,t,s,n,i,o){return hi(l(e,t,s,n,i,o,!0))}function xs(e,t,s,n,i){return hi(L(e,t,s,n,i,!0))}function mi(e){return e?e.__v_isVNode===!0:!1}function Ot(e,t){return e.type===t.type&&e.key===t.key}const bi=({key:e})=>e??null,dl=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||me(e)||N(e)?{i:Me,r:e,k:t,f:!!s}:e:null);function l(e,t=null,s=null,n=0,i=null,o=e===W?0:1,a=!1,r=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&bi(t),ref:t&&dl(t),scopeId:Kn,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:Me};return r?(gl(c,s),o&128&&e.normalize(c)):s&&(c.shapeFlag|=re(s)?8:16),Zt>0&&!a&&$e&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&$e.push(c),c}const L=oa;function oa(e,t=null,s=null,n=0,i=null,o=!1){if((!e||e===qo)&&(e=ot),mi(e)){const r=Mt(e,t,!0);return s&&gl(r,s),Zt>0&&!o&&$e&&(r.shapeFlag&6?$e[$e.indexOf(e)]=r:$e.push(r)),r.patchFlag=-2,r}if(ba(e)&&(e=e.__vccOpts),t){t=aa(t);let{class:r,style:c}=t;r&&!re(r)&&(t.class=tt(r)),ee(c)&&(hs(c)&&!E(c)&&(c=be({},c)),t.style=jt(c))}const a=re(e)?1:pi(e)?128:$l(e)?64:ee(e)?4:N(e)?2:0;return l(e,t,s,n,i,a,o,!0)}function aa(e){return e?hs(e)||si(e)?be({},e):e:null}function Mt(e,t,s=!1,n=!1){const{props:i,ref:o,patchFlag:a,children:r,transition:c}=e,h=t?gi(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&bi(h),ref:t&&t.ref?s&&o?E(o)?o.concat(dl(t)):[o,dl(t)]:dl(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!==W?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&&Mt(e.ssContent),ssFallback:e.ssFallback&&Mt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return c&&n&&bs(p,c.clone(p)),p}function f(e=" ",t=0){return L(Al,null,e,t)}function Se(e,t){const s=L(ul,null,e);return s.staticCount=t,s}function U(e="",t=!1){return t?(T(),xs(ot,null,e)):L(ot,null,e)}function Ke(e){return e==null||typeof e=="boolean"?L(ot):E(e)?L(W,null,e.slice()):mi(e)?Xe(e):L(Al,null,String(e))}function Xe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Mt(e)}function gl(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(E(t))s=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),gl(e,i()),i._c&&(i._d=!0));return}else{s=32;const i=t._;!i&&!si(t)?t._ctx=Me:i===3&&Me&&(Me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(N(t)){if(n&65){gl(e,{default:t});return}t={default:t,_ctx:Me},s=32}else t=String(t),n&64?(s=16,t=[f(t)]):s=8;e.children=t,e.shapeFlag|=s}function gi(...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=tt([t.class,n.class]));else if(i==="style")t.style=jt([t.style,n.style]);else if(xl(i)){const o=t[i],a=n[i];a&&o!==a&&!(E(o)&&o.includes(a))?t[i]=o?[].concat(o,a):a:a==null&&o==null&&!wl(i)&&(t[i]=a)}else i!==""&&(t[i]=n[i])}return t}function Ne(e,t,s,n=null){Ee(e,t,7,[s,n])}const ra=Xn();let ca=0;function ua(e,t,s){const n=e.type,i=(t?t.appContext:e.appContext)||ra,o={uid:ca++,vnode:e,type:n,parent:t,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Hi(!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:ii(n,i),emitsOptions:Qn(n,i),emit:null,emitted:null,propsDefaults:le,inheritAttrs:n.inheritAttrs,ctx:le,data:le,props:le,attrs:le,slots:le,refs:le,setupState:le,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=Ko.bind(null,o),e.ce&&e.ce(o),o}let xe=null;const da=()=>xe||Me;let vl,Yt;{const e=Cl(),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)}};vl=t("__VUE_INSTANCE_SETTERS__",s=>xe=s),Yt=t("__VUE_SSR_SETTERS__",s=>Gt=s)}const el=e=>{const t=xe;return vl(e),e.scope.on(),()=>{e.scope.off(),vl(t)}},Zs=()=>{xe&&xe.scope.off(),vl(null)};function vi(e){return e.vnode.shapeFlag&4}let Gt=!1;function pa(e,t=!1,s=!1){t&&Yt(t);const{props:n,children:i}=e.vnode,o=vi(e);Yo(e,n,o,t),Qo(e,i,s||t);const a=o?fa(e,t):void 0;return t&&Yt(!1),a}function fa(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Oo);const{setup:n}=s;if(n){nt();const i=e.setupContext=n.length>1?ma(e):null,o=el(e),a=Qt(n,e,0,[e.props,i]),r=pn(a);if(it(),o(),(r||e.sp)&&!Kt(e)&&zn(e),r){if(a.then(Zs,Zs),t)return a.then(c=>{Yt(!0);try{Ys(e,c,t)}finally{Yt(!1)}}).catch(c=>{Tl(c,e,0)});e.asyncDep=a}else Ys(e,a)}else yi(e)}function Ys(e,t,s){N(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Dn(t)),yi(e)}function yi(e,t,s){const n=e.type;e.render||(e.render=n.render||ze);{const i=el(e);nt();try{Eo(e)}finally{it(),i()}}}const ha={get(e,t){return he(e,"get",""),e[t]}};function ma(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,ha),slots:e.slots,emit:e.emit,expose:t}}function Il(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Dn(no(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Ut)return Ut[s](e)},has(t,s){return s in t||s in Ut}})):e.proxy}function ba(e){return N(e)&&"__vccOpts"in e}const Be=(e,t)=>ro(e,t,Gt),ga="3.5.43";let es;const Gs=typeof window<"u"&&window.trustedTypes;if(Gs)try{es=Gs.createPolicy("vue",{createHTML:e=>e})}catch{}const _i=es?e=>es.createHTML(e):e=>e,va="http://www.w3.org/2000/svg",ya="http://www.w3.org/1998/Math/MathML",Je=typeof document<"u"?document:null,Js=Je&&Je.createElement("template"),_a={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"?Je.createElementNS(va,e):t==="mathml"?Je.createElementNS(ya,e):s?Je.createElement(e,{is:s}):Je.createElement(e);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>Je.createTextNode(e),createComment:e=>Je.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Je.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{Js.innerHTML=_i(n==="svg"?`<svg>${e}</svg>`:n==="mathml"?`<math>${e}</math>`:e);const r=Js.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]}},xa=Symbol("_vtc");function wa(e,t,s){const n=e[xa];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const yl=Symbol("_vod"),xi=Symbol("_vsh"),Et={name:"show",beforeMount(e,{value:t},{transition:s}){e[yl]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Rt(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),Rt(e,!0),n.enter(e)):n.leave(e,()=>{Rt(e,!1)}):Rt(e,t))},beforeUnmount(e,{value:t}){Rt(e,t)}};function Rt(e,t){e.style.display=t?e[yl]:"none",e[xi]=!t}const ka=Symbol(""),Ca=/(?:^|;)\s*display\s*:/;function Sa(e,t,s){const n=e.style,i=re(s);let o=!1;if(s&&!i){if(t)if(re(t))for(const a of t.split(";")){const r=a.slice(0,a.indexOf(":")).trim();s[r]==null&&Ht(n,r,"")}else for(const a in t)s[a]==null&&Ht(n,a,"");for(const a in s){a==="display"&&(o=!0);const r=s[a];r!=null?$a(e,a,!re(t)&&t?t[a]:void 0,r)||Ht(n,a,r):Ht(n,a,"")}}else if(i){if(t!==s){const a=n[ka];a&&(s+=";"+a),n.cssText=s,o=Ca.test(s)}}else t&&e.removeAttribute("style");yl in e&&(e[yl]=o?n.display:"",e[xi]&&(n.display="none"))}const al=/\s*!important$/;function Ht(e,t,s){if(E(s))s.forEach(n=>Ht(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))al.test(s)?e.setProperty(t,s.replace(al,""),"important"):e.setProperty(t,s);else{const n=Ta(e,t);al.test(s)?e.setProperty(pt(n),s.replace(al,""),"important"):e[n]=s}}const Xs=["Webkit","Moz","ms"],Kl={};function Ta(e,t){const s=Kl[t];if(s)return s;let n=qe(t);if(n!=="filter"&&n in e)return Kl[t]=n;n=mn(n);for(let i=0;i<Xs.length;i++){const o=Xs[i]+n;if(o in e)return Kl[t]=o}return t}function $a(e,t,s,n){return e.tagName==="TEXTAREA"&&(t==="width"||t==="height")&&re(n)&&s===n}const Qs="http://www.w3.org/1999/xlink";function en(e,t,s,n,i,o=Ei(t)){n&&t.startsWith("xlink:")?s==null?e.removeAttributeNS(Qs,t.slice(6,t.length)):e.setAttributeNS(Qs,t,s):s==null||o&&!vn(s)?e.removeAttribute(t):e.setAttribute(t,o?"":Ze(s)?String(s):s)}function tn(e,t,s,n,i){if(t==="innerHTML"||t==="textContent"){s!=null&&(e[t]=t==="innerHTML"?_i(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=vn(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 ws(e,t,s,n){e.addEventListener(t,s,n)}function Ma(e,t,s,n){e.removeEventListener(t,s,n)}const ln=Symbol("_vei");function ja(e,t,s,n,i=null){const o=e[ln]||(e[ln]={}),a=o[t];if(n&&a)a.value=n;else{const[r,c]=Pa(t);if(n){const h=o[t]=Ea(n,i);ws(e,r,h,c)}else a&&(Ma(e,r,a,c),o[t]=void 0)}}const Aa=/(Once|Passive|Capture)$/,Ia=/^on:?(?:Once|Passive|Capture)$/;function Pa(e){let t,s;for(;(s=e.match(Aa))&&!Ia.test(e);)t||(t={}),e=e.slice(0,e.length-s[1].length),t[s[1].toLowerCase()]=!0;return[e[2]===":"?e.slice(3):pt(e.slice(2)),t]}let Ul=0;const qa=Promise.resolve(),Oa=()=>Ul||(qa.then(()=>Ul=0),Ul=Date.now());function Ea(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const i=s.value;if(E(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 h=a[c];h&&Ee(h,t,5,r)}}else Ee(i,t,5,[n])};return s.value=e,s.attached=Oa(),s}const sn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ra=(e,t,s,n,i,o)=>{const a=i==="svg";t==="class"?wa(e,n,a):t==="style"?Sa(e,s,n):xl(t)?wl(t)||ja(e,t,s,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Da(e,t,n,a))?(tn(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&en(e,t,n,a,o,t!=="value")):e._isVueCE&&(Ha(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!re(n)))?tn(e,qe(t),n,o,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),en(e,t,n,a))};function Da(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&sn(t)&&N(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 sn(t)&&re(s)?!1:t in e}function Ha(e,t){const s=e._def.props;if(!s)return!1;const n=qe(t);return Array.isArray(s)?s.some(i=>qe(i)===n):Object.keys(s).some(i=>qe(i)===n)}const _l=e=>{const t=e.props["onUpdate:modelValue"]||!1;return E(t)?s=>rl(t,s):t},$t=Symbol("_assign"),nn={deep:!0,created(e,t,s){e[$t]=_l(s),ws(e,"change",()=>{const n=e._modelValue,i=Jt(e),o=e.checked,a=e[$t];if(E(n)){const r=os(n,i),c=r!==-1;if(o&&!c)a(n.concat(i));else if(!o&&c){const h=[...n];h.splice(r,1),a(h)}}else if(lt(n)){const r=new Set(n);o?r.add(i):r.delete(i),a(r)}else a(wi(e,o))})},mounted:on,beforeUpdate(e,t,s){e[$t]=_l(s),on(e,t,s)}};function on(e,{value:t,oldValue:s},n){e._modelValue=t;let i;if(E(t))i=os(t,n.props.value)>-1;else if(lt(t))i=t.has(n.props.value);else{if(t===s)return;i=st(t,wi(e,!0))}e.checked!==i&&(e.checked=i)}const ts={deep:!0,created(e,{value:t,modifiers:{number:s}},n){e._modelValue=t,ws(e,"change",()=>{const i=Array.prototype.filter.call(e.options,c=>c.selected).map(c=>s?gn(Jt(c)):Jt(c)),o=e.multiple,a=o?lt(e._modelValue)?new Set(i):i:i[0],r=e._pendingValue=[o,o?E(a)?i.slice():i:a];try{e[$t](a)}finally{Nn(()=>{e._pendingValue===r&&(e._pendingValue=void 0)})}}),e[$t]=_l(n)},mounted(e,{value:t}){an(e,t)},beforeUpdate(e,{value:t},s){e._modelValue=t,e[$t]=_l(s)},updated(e,{value:t}){const s=e._pendingValue;e._pendingValue=void 0,(!s||s[0]!==e.multiple||!Na(t,s[1],s[0]))&&an(e,t)}};function Na(e,t,s){if(!s||E(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 an(e,t){const s=e.multiple,n=E(t);if(!(s&&!n&&!lt(t))){for(let i=0,o=e.options.length;i<o;i++){const a=e.options[i],r=Jt(a);if(s)if(n){const c=typeof r;c==="string"||c==="number"?a.selected=t.some(h=>String(h)===String(r)):a.selected=os(t,r)>-1}else a.selected=t.has(r);else if(st(Jt(a),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Jt(e){return"_value"in e?e._value:e.value}function wi(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Fa=["ctrl","shift","alt","meta"],La={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)=>Fa.some(s=>e[`${s}Key`]&&!t.includes(s))},ls=(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=La[t[a]];if(r&&r(i,t))return}return e(i,...o)}))},Va={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},rn=(e,t)=>{const s=e._withKeys||(e._withKeys={}),n=t.join(".");return s[n]||(s[n]=(i=>{if(!("key"in i))return;const o=pt(i.key);if(t.some(a=>a===o||Va[a]===o))return e(i)}))},Ka=be({patchProp:Ra},_a);let cn;function Ua(){return cn||(cn=ta(Ka))}const Ba=((...e)=>{const t=Ua().createApp(...e),{mount:s}=t;return t.mount=n=>{const i=za(n);if(!i)return;const o=t._component;!N(o)&&!o.render&&!o.template&&(o.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const a=s(i,!1,Wa(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),a},t});function Wa(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function za(e){return re(e)?document.querySelector(e):e}const Za={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"},Ya=["d"],de={__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)=>(T(),M("svg",Za,[l("path",{d:t[e.name]||t.grid},null,8,Ya)]))}},Ga={class:"sidebar"},Ja={class:"nav flex-column",id:"main-navigation","aria-label":"主导航"},Xa={"data-page":"households",class:"active"},Qa={id:"scope-navigation",hidden:""},er={"data-page":"journal"},tr={"data-page":"overview"},lr={"data-page":"objects"},sr={"data-page":"heritage"},nr={"data-page":"users","data-admin":""},ir={"data-page":"settings"},or={"data-page":"storage"},ar={__name:"AppSidebar",setup(e){return(t,s)=>(T(),M("aside",Ga,[s[17]||(s[17]=Se('<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",Ja,[l("button",Xa,[L(de,{name:"home"}),s[0]||(s[0]=f()),s[1]||(s[1]=l("span",null,"我的家庭与场所",-1))]),l("div",Qa,[s[12]||(s[12]=l("div",{id:"scope-nav-name",class:"nav-label"},null,-1)),l("button",er,[L(de,{name:"journal"}),s[2]||(s[2]=f()),s[3]||(s[3]=l("span",null,"记事与阅历",-1))]),l("button",tr,[L(de,{name:"grid"}),s[4]||(s[4]=f()),s[5]||(s[5]=l("span",null,"场所总览",-1))]),l("button",lr,[L(de,{name:"devices"}),s[6]||(s[6]=f()),s[7]||(s[7]=l("span",null,"区域与设备",-1))]),l("button",sr,[L(de,{name:"tree"}),s[8]||(s[8]=f()),s[9]||(s[9]=l("span",null,"家庭传承",-1))]),l("button",nr,[L(de,{name:"users"}),s[10]||(s[10]=f()),s[11]||(s[11]=l("span",null,"成员与权限",-1))])]),l("button",ir,[L(de,{name:"settings"}),s[13]||(s[13]=f()),s[14]||(s[14]=l("span",null,"设置中心",-1))]),l("button",or,[L(de,{name:"database"}),s[15]||(s[15]=f()),s[16]||(s[16]=l("span",null,"平台存储与审计",-1))])]),s[18]||(s[18]=Se('<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))]))}},ki=(e,t)=>{const s=e.__vccOpts||e;for(const[n,i]of t)s[n]=i;return s},rr={};function cr(e,t){return T(),M("header",null,[...t[0]||(t[0]=[Se('<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 ur=ki(rr,[["render",cr]]),J=En({state:{households:[],sites:[],cameras:[]},admin:!1,loggedIn:!1,page:"households",session:0,device:null}),We=En({devices:[],groups:[],rows:[]});window.ZhaoVue={enabled:!0,accept(e){J.value=e},setDevices(e){We.value=e},clear(){We.value={devices:[],groups:[],rows:[]}}};const Te=()=>window.ZhaoVue,Pl=e=>({lan:"局域网",tailscale:"Tailscale",public:"公网",unknown:"接入待确认"})[e]||"接入待确认";function dr(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})}}function pr(e=[]){const t=e.map((i,o)=>({...i,x:28+Math.max(0,i.depth)*300,y:26+o*112})),s=new Map(t.map(i=>[i.device.id,i])),n=t.flatMap(i=>{const o=s.get(i.device.uplinkId);if(!o||o.depth+1!==i.depth)return[];const a=o.x+244,r=o.y+40,c=i.y+40;return[{id:i.device.id,path:`M${a},${r} H${a+24} V${c} H${i.x}`}]});return{nodes:t,edges:n,width:Math.max(640,...t.map(i=>i.x+272)),height:Math.max(172,t.length*112+26)}}const fr={class:"home-insights","aria-label":"已授权场所概览"},hr={class:"insight-welcome"},mr={class:"insight-scope"},br={class:"insight-number"},gr={class:"insight-icon"},vr={class:"insight-foot"},yr={class:"insight-distribution"},_r={class:"insight-donut"},xr=["aria-label"],wr=["stroke","stroke-dasharray","stroke-dashoffset"],kr={"aria-hidden":"true"},Cr={class:"insight-legend"},Sr={key:0},Tr={__name:"HomeInsights",setup(e){const t=Be(()=>dr(J.value.state.households));return(s,n)=>(T(),M("section",fr,[l("article",hr,[n[1]||(n[1]=l("span",{class:"insight-kicker"},"一处相连 · 各有归属",-1)),n[2]||(n[2]=l("h2",null,"家与日常,尽在掌握",-1)),n[3]||(n[3]=l("p",null,"从一个空间出发,照看设备,也珍藏生活。",-1)),l("div",mr,[L(de,{name:"shield"}),n[0]||(n[0]=f(" 仅汇总你有权访问的家庭与场所",-1))])]),l("article",br,[l("span",gr,[L(de,{name:"devices"})]),n[5]||(n[5]=l("span",{class:"insight-label"},"已登记设备",-1)),l("strong",null,[f(k(t.value.devices),1),n[4]||(n[4]=l("small",null,"台",-1))]),l("span",vr,"分布在 "+k(t.value.areas)+" 处区域",1)]),l("article",yr,[l("div",_r,[(T(),M("svg",{viewBox:"0 0 120 120",role:"img","aria-label":"场所分布:"+(t.value.kinds.map(i=>i.label+i.count+"个").join(",")||"暂无场所")},[n[6]||(n[6]=l("circle",{class:"donut-track",cx:"60",cy:"60",r:"48",fill:"none","stroke-width":"10"},null,-1)),(T(!0),M(W,null,_e(t.value.kinds,i=>(T(),M("circle",{key:i.key,cx:"60",cy:"60",r:"48",fill:"none","stroke-width":"10",pathLength:"100",stroke:i.color,"stroke-dasharray":`${i.share} ${100-i.share}`,"stroke-dashoffset":-i.offset,transform:"rotate(-90 60 60)"},null,8,wr))),128))],8,xr)),l("div",kr,[l("strong",null,k(t.value.total),1),n[7]||(n[7]=l("small",null,"家庭与场所",-1))])]),l("div",Cr,[n[8]||(n[8]=l("h3",null,"空间分布",-1)),(T(!0),M(W,null,_e(t.value.kinds,i=>(T(),M("span",{key:i.key},[l("i",{style:jt({background:i.color})},null,4),f(k(i.label),1),l("b",null,k(i.count),1)]))),128)),t.value.total?U("",!0):(T(),M("span",Sr,"等待添加空间"))])])]))}},$r={id:"page-households",class:"page"},Mr={class:"section-head"},jr={class:"count-pill"},Ar=["hidden"],Ir={class:"btn-group",role:"group","aria-label":"场所显示方式"},Pr=["aria-pressed"],qr=["aria-pressed"],Or=["aria-expanded"],Er={id:"home-layout-options",class:"home-layout-controls"},Rr=["disabled"],Dr=["value"],Hr=["disabled"],Nr=["value"],Fr={class:"inline-check"},Lr=["disabled"],Vr={class:"inline-check"},Kr=["disabled"],Ur=["disabled"],Br=["disabled"],Wr={id:"home-layout-status",role:"status",class:"small text-secondary"},zr={key:0,class:"group-title"},Zr={class:"home-card-grid"},Yr=["draggable","onDragstart","onDrop"],Gr={class:"home-cover"},Jr=["src","alt"],Xr={class:"home-cover-content"},Qr={class:"site-heading"},ec={class:"badge"},tc=["data-edit-household"],lc={class:"home-location"},sc={class:"card-body"},nc={key:0,class:"home-order-actions"},ic=["disabled","aria-label","onClick"],oc=["disabled","aria-label","onClick"],ac={class:"home-summary"},rc={class:"home-numbers"},cc={class:"compact-details"},uc={class:"home-card-actions"},dc=["onClick"],pc=["data-leadership"],fc={key:0,class:"empty"},hc={id:"home-global-topology",class:"network-overview"},mc={class:"network-platform"},bc={class:"platform-place-grid"},gc=["onClick"],vc={class:"badge"},yc={class:"home-pagination"},_c={id:"home-page-info"},xc=["disabled"],wc=["disabled"],kc={__name:"HomeExplorer",setup(e){const t=ke({revision:0,columns:2,rows:2,groupCity:!1,order:[]}),s=ke(!1),n=ke(!1),i=ke(0),o=ke(!1),a=ke("cards"),r=ke(!1),c=ke(""),h=ke("");let p="";_t(J,F=>{const x=F.user?.id+":"+F.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="",h.value=""),!s.value&&!n.value&&(t.value={revision:0,columns:2,rows:2,groupCity:!1,order:[],...F.state.householdLayout})},{immediate:!0});const b=Be(()=>{const F=J.value.state.households||[],x=new Map(F.map(I=>[I.id,I]));return[...new Set([...t.value.order,...F.map(I=>I.id)])].filter(I=>x.has(I)).map(I=>x.get(I))}),$=Be(()=>t.value.columns*t.value.rows),j=Be(()=>Math.max(1,Math.ceil(b.value.length/$.value)));_t(j,F=>i.value=Math.min(i.value,F-1));const z=Be(()=>{const F=b.value.slice(i.value*$.value,(i.value+1)*$.value);if(!t.value.groupCity)return[{name:"",items:F}];const x=new Map;for(const I of F){const R=[I.geography?.country||I.country,I.province,I.city||"地区待填写"].filter(Boolean).join(" / ");x.has(R)||x.set(R,[]),x.get(R).push(I)}return[...x].map(([I,R])=>({name:I,items:R}))}),D=F=>({home:"家庭",office:"办公场所",factory:"工厂"})[F.kind||"home"]||"场所",ie=F=>Te().address?.(F)||[F.province,F.city,F.district].filter(Boolean).join(" · ")||"地区待填写";function X(){s.value=!0,i.value=0,t.value.groupCity&&(o.value=!1),h.value="布局已调整,保存后下次登录会沿用。"}function V(F,x,I){if(n.value)return;const R=b.value.map(wt=>wt.id),ce=R.indexOf(F),Ie=I?R.indexOf(I):ce+x;ce<0||Ie<0||Ie>=R.length||ce===Ie||(R.splice(ce,1),R.splice(Ie,0,F),t.value.order=R,s.value=!0,i.value=Math.floor(Ie/$.value))}function Z(){s.value=!1,t.value={...J.value.state.householdLayout},i.value=0,h.value=""}async function q(){const F=p;n.value=!0;try{const x=await Te().saveLayout({...t.value});if(F!==p)return;t.value=x,s.value=!1,h.value="布局与卡片顺序已保存"}catch(x){!x.stale&&F===p&&(h.value=x.message)}finally{F===p&&(n.value=!1)}}async function ae(F,x=!1){await Te().enterHome(F.id,x)}return(F,x)=>(T(),M("section",$r,[l("div",Mr,[l("div",null,[l("h2",null,[x[11]||(x[11]=f(" 我的空间 ",-1)),l("span",jr,k(b.value.length),1)]),x[12]||(x[12]=l("p",{class:"description mb-0"}," 家庭、办公与工厂,各自管理成员、区域和设备。 ",-1))]),l("button",{id:"new-household",class:"btn btn-primary",hidden:!K(J).platformAdmin}," + 新建家庭或场所 ",8,Ar)]),L(Tr),l("div",{class:tt(["home-toolbar",{"home-options-open":r.value}])},[l("div",Ir,[l("button",{id:"home-card-view",class:tt(["btn btn-outline-secondary",{active:a.value==="cards"}]),"aria-pressed":a.value==="cards",onClick:x[0]||(x[0]=I=>a.value="cards")},[L(de,{name:"grid"}),x[13]||(x[13]=f(" 卡片",-1))],10,Pr),l("button",{id:"home-topology-view",class:tt(["btn btn-outline-secondary",{active:a.value==="topology"}]),"aria-pressed":a.value==="topology",onClick:x[1]||(x[1]=I=>a.value="topology")},[L(de,{name:"network"}),x[14]||(x[14]=f(" 整体拓扑 ",-1))],10,qr)]),Fe(l("button",{class:"btn btn-outline-secondary home-layout-toggle","aria-expanded":r.value,"aria-controls":"home-layout-options",onClick:x[2]||(x[2]=I=>r.value=!r.value)},k(r.value?"收起设置":"布局设置"),9,Or),[[Et,a.value==="cards"]]),Fe(l("div",Er,[l("label",null,[x[15]||(x[15]=f("每页 ",-1)),Fe(l("select",{id:"home-columns","onUpdate:modelValue":x[3]||(x[3]=I=>t.value.columns=I),class:"form-select",disabled:n.value,onChange:X},[(T(),M(W,null,_e(4,I=>l("option",{key:I,value:I},k(I)+" 列",9,Dr)),64))],40,Rr),[[ts,t.value.columns,void 0,{number:!0}]])]),x[18]||(x[18]=l("span",null,"×",-1)),Fe(l("select",{id:"home-rows","onUpdate:modelValue":x[4]||(x[4]=I=>t.value.rows=I),"aria-label":"每页行数",class:"form-select",disabled:n.value,onChange:X},[(T(),M(W,null,_e(4,I=>l("option",{key:I,value:I},k(I)+" 行",9,Nr)),64))],40,Hr),[[ts,t.value.rows,void 0,{number:!0}]]),l("label",Fr,[Fe(l("input",{id:"home-group-city","onUpdate:modelValue":x[5]||(x[5]=I=>t.value.groupCity=I),type:"checkbox",class:"form-check-input",disabled:n.value,onChange:X},null,40,Lr),[[nn,t.value.groupCity]]),x[16]||(x[16]=f("按城市分组",-1))]),l("label",Vr,[Fe(l("input",{id:"home-arrange","onUpdate:modelValue":x[6]||(x[6]=I=>o.value=I),type:"checkbox",class:"form-check-input",disabled:t.value.groupCity||n.value},null,8,Kr),[[nn,o.value]]),x[17]||(x[17]=f("调整顺序",-1))]),l("button",{id:"home-layout-save",class:"btn btn-primary",disabled:!s.value||n.value,onClick:q},k(n.value?"保存中…":"保存布局"),9,Ur),l("button",{id:"home-layout-reset",class:"btn btn-outline-secondary",disabled:!s.value||n.value,onClick:Z}," 撤销 ",8,Br)],512),[[Et,a.value==="cards"]])],2),l("p",Wr,k(h.value||"布局仅影响你的账号;手机端自动适配为单列。"),1),Fe(l("div",{id:"household-list",style:jt({"--home-columns":t.value.columns})},[(T(!0),M(W,null,_e(z.value,I=>(T(),M("section",{key:I.name,class:"home-city-group"},[I.name?(T(),M("h3",zr,k(I.name),1)):U("",!0),l("div",Zr,[(T(!0),M(W,null,_e(I.items,R=>(T(),M("article",{key:R.id,class:"card home-card",draggable:o.value&&!n.value,onDragstart:ce=>{c.value=R.id,ce.dataTransfer.setData("text/plain",R.id)},onDragend:x[7]||(x[7]=ce=>c.value=""),onDragover:x[8]||(x[8]=ce=>o.value&&c.value&&ce.preventDefault()),onDrop:ls(ce=>{o.value&&c.value&&V(c.value,0,R.id),c.value=""},["prevent"])},[l("div",Gr,[R.coverUrl?(T(),M("img",{key:0,src:R.coverUrl,alt:R.name+"封面",loading:"lazy"},null,8,Jr)):U("",!0),x[19]||(x[19]=l("div",{class:"cover-shade"},null,-1)),l("div",Xr,[l("div",Qr,[l("span",ec,[f(k(D(R)),1),R.id===K(J).state.familyId?(T(),M(W,{key:0},[f(" · 当前")],64)):U("",!0)]),K(J).admin?(T(),M("button",{key:0,class:"btn btn-sm cover-edit","data-edit-household":R.id}," 编辑 ",8,tc)):U("",!0)]),l("div",null,[l("h3",null,k(R.name),1),l("p",lc,k(ie(R)),1)])])]),l("div",sc,[o.value?(T(),M("div",nc,[x[20]||(x[20]=l("span",null,"拖动排序",-1)),l("button",{class:"btn btn-sm btn-outline-secondary",disabled:b.value[0]?.id===R.id||n.value,"aria-label":R.name+"前移",onClick:ce=>V(R.id,-1)}," ←",8,ic),l("button",{class:"btn btn-sm btn-outline-secondary",disabled:b.value.at(-1)?.id===R.id||n.value,"aria-label":R.name+"后移",onClick:ce=>V(R.id,1)}," → ",8,oc)])):U("",!0),l("p",ac,k(R.note||"成员、空间与设备,独立管理。"),1),l("div",rc,[l("span",null,[l("b",null,k(R.deviceCount||0),1),x[21]||(x[21]=f("设备",-1))]),l("span",null,[l("b",null,k(R.sites||0),1),x[22]||(x[22]=f("区域",-1))]),l("span",null,[l("b",null,k(R.members||0),1),x[23]||(x[23]=f("成员",-1))])]),l("dl",cc,[l("div",null,[l("dt",null,k(R.kind==="office"||R.kind==="factory"?"主要负责人":"一家之主"),1),l("dd",null,k(R.ownerName||"待指定"),1)]),l("div",null,[x[24]||(x[24]=l("dt",null,"备用负责人",-1)),l("dd",null,k(R.successorName||"待指定"),1)])]),l("div",uc,[l("button",{class:"btn btn-primary",onClick:ce=>ae(R)},[x[25]||(x[25]=f(" 进入空间 ",-1)),L(de,{name:"arrow"})],8,dc),R.canAssignOwner?(T(),M("button",{key:0,class:"btn btn-link","data-leadership":R.id}," 负责人安排 ",8,pc)):U("",!0)])])],40,Yr))),128))])]))),128)),b.value.length?U("",!0):(T(),M("div",fc," 登录后查看已授权的家庭与场所。 "))],4),[[Et,a.value==="cards"]]),Fe(l("div",hc,[l("div",mc,[L(de,{name:"network"}),l("div",null,[l("h3",null,k(K(J).brandName||"赵府")+" · 数字管家",1),l("p",null,k(b.value.length)+" 个已授权空间",1)])]),x[27]||(x[27]=l("p",{class:"description"}," 平台与场所的管理关系;进入场所查看内部设备及网络。 ",-1)),l("div",bc,[(T(!0),M(W,null,_e(b.value,I=>(T(),M("button",{key:I.id,class:"card platform-place-node",onClick:R=>ae(I,!0)},[l("span",vc,k(D(I)),1),l("h3",null,k(I.name),1),l("p",null,k(ie(I)),1),l("span",null,k(I.deviceCount||0)+" 台设备",1),l("small",null,k((I.networkAccesses||[]).map(K(Pl)).join(" · ")||"网络待登记"),1),x[26]||(x[26]=l("span",{class:"network-open"},"查看网络拓扑 →",-1))],8,gc))),128))])],512),[[Et,a.value==="topology"]]),Fe(l("div",yc,[l("span",_c,"第 "+k(i.value+1)+" / "+k(j.value)+" 页 · 每页最多 "+k($.value)+" 张",1),l("button",{id:"home-prev",class:"btn btn-outline-secondary",disabled:!i.value,onClick:x[9]||(x[9]=I=>i.value--)}," 上一页",8,xc),l("button",{id:"home-next",class:"btn btn-outline-secondary",disabled:i.value>=j.value-1,onClick:x[10]||(x[10]=I=>i.value++)}," 下一页 ",8,wc)],512),[[Et,a.value==="cards"]])]))}},Cc={key:0,class:"network-status-block"},Sc={class:"network-status-title"},Tc=["disabled"],$c={key:0,class:"text-danger small",role:"status"},Mc={key:0,class:"small text-secondary"},jc={key:1,class:"small text-secondary"},Ac={key:2,class:"small text-secondary"},Ic={class:"management-links"},Pc=["href"],qc={key:0},Oc={class:"network-check-time"},ks={__name:"NetworkStatus",props:{device:{type:Object,required:!0},active:{type:Boolean,default:!0}},setup(e){const t=e,s=ke(null),n=ke(!1),i=ke("");let o=0,a;const r=Be(()=>[t.device.id,t.device.source,t.device.managementHost,t.device.tailscaleHost,t.device.networkCidr,J.value.state.familyId,J.value.session,J.value.admin,t.active].join("|"));async function c(){const b=o;if(!(n.value||!J.value.admin||!t.active)){n.value=!0,i.value="";try{const $=await Te().api("/api/devices/network?source="+encodeURIComponent(t.device.source)+"&id="+encodeURIComponent(t.device.id));b===o&&(s.value=$)}catch($){b===o&&!$.stale&&(i.value=$.message)}finally{b===o&&(n.value=!1,a=setTimeout(c,35e3))}}}_t(r,()=>{o++,clearTimeout(a),n.value=!1,s.value=null,i.value="",J.value.admin&&t.active&&c()},{immediate:!0}),vs(()=>{o++,clearTimeout(a)});const h=Be(()=>s.value?s.value.targets.some(b=>b.reachable)?"网络可达":"未连通":"等待检查");function p(){clearTimeout(a),c()}return(b,$)=>K(J).admin?(T(),M("div",Cc,[l("div",Sc,[l("span",null,[l("i",{class:tt(["status-dot",{online:s.value?.targets.some(j=>j.reachable)}])},null,2),f(k(n.value?"正在检查…":h.value),1)]),l("button",{class:"btn btn-sm btn-link",disabled:n.value,onClick:p},"检查网络",8,Tc)]),i.value?(T(),M("p",$c,k(i.value),1)):U("",!0),s.value?(T(),M(W,{key:1},[(T(!0),M(W,null,_e(s.value.targets,j=>(T(),M("div",{key:j.kind,class:"network-target"},[l("span",null,k(j.kind==="tailscale"?"Tailscale":"设备地址"),1),l("code",null,k(j.host),1),l("span",{class:tt(j.reachable?"text-success":"text-secondary")},k(j.reachable?"服务可达":"未响应"),3)]))),128)),s.value.targets.length?U("",!0):(T(),M("p",Mc,"请编辑设备档案,填写 IP 或域名。")),s.value.tailscale?.available?(T(),M("p",jc,[f("Tailscale 节点"+k(s.value.tailscale.online?"在线":"离线"),1),s.value.tailscale.subnet?(T(),M(W,{key:0},[f(" · "+k(s.value.tailscale.subnetAvailable?"已发布":"未检测到")+" "+k(s.value.tailscale.subnet)+" 路由",1)],64)):U("",!0)])):s.value.tailscale?(T(),M("p",Ac,k(s.value.tailscale.note),1)):U("",!0),l("div",Ic,[(T(!0),M(W,null,_e(s.value.links,j=>(T(),M("a",{key:j.kind,href:j.url,target:"_blank",rel:"noopener noreferrer",class:"btn btn-sm btn-outline-secondary"},[f("打开管理后台 · "+k(j.kind==="tailscale"?"Tailscale":"局域网")+" ↗",1),j.verified?U("",!0):(T(),M("span",qc,"(待连通)"))],8,Pc))),128))]),l("small",Oc,"检查于 "+k(new Date(s.value.checkedAt*1e3).toLocaleTimeString("zh-CN"))+" · 从服务器探测,打开后台需当前浏览器也能到达。",1)],64)):U("",!0)])):U("",!0)}},Ec={id:"asset-list"},Rc={class:"group-title"},Dc={class:"count-pill"},Hc={class:"device-card-grid"},Nc={class:"card-body"},Fc={class:"device-card-heading"},Lc={class:"device-symbol"},Vc={class:"flex-grow-1"},Kc={class:"small text-secondary"},Uc=["onClick"],Bc={class:"device-location"},Wc={class:"compact-details"},zc={class:"font-monospace"},Zc={key:0},Yc={key:0,class:"device-tags"},Gc={class:"card-footer device-card-actions"},Jc=["onClick"],Xc=["onClick"],Qc=["onClick"],eu={key:0,class:"empty"},tu={__name:"DeviceCollection",setup(e){const t=i=>(J.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)=>(T(),M("div",Ec,[(T(!0),M(W,null,_e(K(We).groups,a=>(T(),M("section",{key:a.key,class:"device-group"},[l("h3",Rc,[f(k(a.labels.join(" / ")||"全部设备")+" ",1),l("span",Dc,k(a.items.length),1)]),l("div",Hc,[(T(!0),M(W,null,_e(a.items,r=>(T(),M("article",{key:r.source+r.id,class:"card device-card"},[l("div",Nc,[l("div",Fc,[l("div",Lc,[L(de,{name:r.source==="camera"?"camera":n(r)?"router":"devices"},null,8,["name"])]),l("div",Vc,[l("span",Kc,k(r.deviceType),1),l("h3",null,[l("button",{class:"device-title",onClick:c=>K(Te)().enterDevice(r.source,r.id)},k(r.name),9,Uc)])]),K(J).admin?(T(),M("button",gi({key:0,class:"btn btn-sm btn-outline-secondary"},{ref_for:!0},s(r))," 编辑 ",16)):U("",!0)]),l("p",Bc,[f(k(K(Te)().location?.(r.siteId)||"区域待填写"),1),r.point?(T(),M(W,{key:0},[f(" · "+k(r.point),1)],64)):U("",!0)]),l("dl",Wc,[l("div",null,[o[0]||(o[0]=l("dt",null,"品牌型号",-1)),l("dd",null,k([r.brand,r.model].filter(Boolean).join(" / ")||"未填写"),1)]),l("div",null,[o[1]||(o[1]=l("dt",null,"设备地址",-1)),l("dd",zc,k(r.networkHosts.join(" / ")||"未填写"),1)]),l("div",null,[o[2]||(o[2]=l("dt",null,"网络",-1)),l("dd",null,k(K(Pl)(r.networkAccess)),1)]),l("div",null,[o[3]||(o[3]=l("dt",null,"所有人 / 负责人",-1)),l("dd",null,k(r.ownerName||"待指定")+" / "+k(r.managerName||"待指定"),1)]),r.source!=="device"?(T(),M("div",Zc,[o[4]||(o[4]=l("dt",null,"镜头通道",-1)),l("dd",null,k(t(r).length)+" 个已配置",1)])):U("",!0)]),r.tags?.length?(T(),M("div",Yc,[(T(!0),M(W,null,_e(r.tags,c=>(T(),M("span",{key:c},k(c),1))),128))])):U("",!0),n(r)?(T(),xs(ks,{key:1,device:r,active:K(J).page==="objects"&&K(We).mode==="cards"},null,8,["device","active"])):U("",!0)]),l("div",Gc,[l("button",{class:"btn btn-sm btn-outline-secondary",onClick:c=>K(Te)().enterDevice(r.source,r.id,"device")}," 设备详情",8,Jc),r.source!=="device"?(T(),M(W,{key:0},[K(J).admin?(T(),M("button",{key:0,class:"btn btn-sm btn-outline-secondary",onClick:c=>K(Te)().enterDevice(r.source,r.id,"cameras")}," 配置镜头",8,Xc)):U("",!0),t(r).length?(T(),M("button",{key:1,class:"btn btn-sm btn-primary",onClick:c=>K(Te)().enterDevice(r.source,r.id,"live")}," 实时画面 ",8,Qc)):U("",!0)],64)):U("",!0)])]))),128))])]))),128)),K(We).devices.length?U("",!0):(T(),M("div",eu,[L(de,{name:"devices"}),o[5]||(o[5]=l("h3",null,"当前范围没有设备",-1)),o[6]||(o[6]=l("p",null,"调整筛选条件,或添加摄像机、路由器、灯等设备。",-1))]))]))}},lu={key:0,class:"network-diagram"},su={class:"diagram-toolbar"},nu={class:"small text-secondary"},iu={class:"diagram-scroll",tabindex:"0",role:"region","aria-label":"设备连接图,可滚动查看;点击设备打开档案"},ou=["width","height","viewBox"],au=["d"],ru=["transform","aria-label","onClick","onKeydown"],cu=["fill"],uu={x:"28",y:"26",class:"diagram-node-type"},du={x:"28",y:"48",class:"diagram-node-title"},pu={x:"28",y:"70",class:"diagram-node-ip"},fu={__name:"NetworkDiagram",setup(e){const t=ke(1),s=Be(()=>pr(We.value.rows));_t(()=>J.value.session+":"+J.value.state.familyId,()=>{t.value=1});const n=i=>Te().enterDevice(i.device.source,i.device.id,"device");return(i,o)=>s.value.nodes.length?(T(),M("div",lu,[l("div",su,[l("div",null,[o[1]||(o[1]=l("span",{class:"diagram-dot"},null,-1)),o[2]||(o[2]=l("strong",null,"设备连接图",-1)),l("span",nu,k(s.value.nodes.length)+" 台设备 · "+k(s.value.edges.length)+" 条已登记连接",1)]),l("label",null,[o[4]||(o[4]=f("缩放",-1)),Fe(l("select",{"onUpdate:modelValue":o[0]||(o[0]=a=>t.value=a),class:"form-select form-select-sm","aria-label":"网络图缩放"},[...o[3]||(o[3]=[l("option",{value:.75},"75%",-1),l("option",{value:1},"100%",-1),l("option",{value:1.25},"125%",-1)])],512),[[ts,t.value,void 0,{number:!0}]])])]),l("div",iu,[(T(),M("svg",{width:s.value.width*t.value,height:s.value.height*t.value,viewBox:`0 0 ${s.value.width} ${s.value.height}`,class:"network-svg",role:"group","aria-label":"已登记的网络连接"},[(T(!0),M(W,null,_e(s.value.edges,a=>(T(),M("path",{key:a.id,d:a.path,class:"network-edge",fill:"none"},null,8,au))),128)),(T(!0),M(W,null,_e(s.value.nodes,a=>(T(),M("g",{key:a.device.id,transform:`translate(${a.x},${a.y})`,class:"diagram-node",role:"button",tabindex:"0","aria-label":a.device.name+",打开设备档案",onClick:r=>n(a),onKeydown:[rn(ls(r=>n(a),["prevent"]),["enter"]),rn(ls(r=>n(a),["prevent"]),["space"])]},[l("title",null,k(a.device.name)+" · "+k(a.device.deviceType)+" · "+k((a.device.networkHosts||[]).join(" / ")||"IP 待填写"),1),o[5]||(o[5]=l("rect",{width:"244",height:"88",rx:"12",class:"diagram-node-bg"},null,-1)),l("rect",{x:"12",y:"16",width:"4",height:"54",rx:"2",fill:a.device.source==="camera"?"#5c83cb":"#258b76"},null,8,cu),l("text",uu,k(a.device.deviceType)+" · "+k(K(Pl)(a.device.networkAccess)),1),l("text",du,k(a.device.name.length>14?a.device.name.slice(0,14)+"…":a.device.name),1),l("text",pu,k((a.device.networkHosts||[])[0]||"IP 待填写"),1)],40,ru))),128))],8,ou))]),o[6]||(o[6]=l("p",{class:"diagram-note"},"点击节点查看名称、位置与网络详情。未登记上级的设备独立显示。",-1))])):U("",!0)}},hu={id:"device-topology",hidden:""},mu={class:"panel network-map"},bu={class:"network-platform"},gu={class:"topology-nodes"},vu={class:"card-body"},yu={class:"device-card-heading"},_u={class:"flex-grow-1"},xu={class:"small text-secondary"},wu=["onClick"],ku=["onClick"],Cu={class:"device-location"},Su={class:"network-facts"},Tu={key:0},$u={key:1},Mu={key:2},ju={key:3},Au={key:0,class:"empty"},Iu={__name:"NetworkMap",setup(e){const t=Be(()=>(J.value.state.households||[]).find(s=>s.id===J.value.state.familyId));return(s,n)=>(T(),M("div",hu,[l("section",mu,[l("div",bu,[L(de,{name:"network"}),l("div",null,[l("h3",null,k(t.value?.name||"当前场所"),1),l("p",null,k(K(We).devices.length)+" 台设备 · 随设备档案自动更新",1)])]),n[7]||(n[7]=l("p",{class:"description"}," 连线来自已确认的上级设备关系。上级未填写时单独列出;不代表已自动发现所有交换机或布线。 ",-1)),L(fu),n[8]||(n[8]=l("h3",{class:"network-details-heading"},"设备与连接详情",-1)),l("div",gu,[(T(!0),M(W,null,_e(K(We).rows,i=>(T(),M("article",{key:i.device.id,class:tt(["network-node card",{nested:i.depth>0}]),style:jt({"--depth":Math.min(i.depth,5)})},[l("div",vu,[l("div",yu,[L(de,{name:i.device.source==="camera"?"camera":"router"},null,8,["name"]),l("div",_u,[l("span",xu,k(i.device.deviceType)+" · "+k(K(Pl)(i.device.networkAccess)),1),l("h3",null,[l("button",{class:"device-title",onClick:o=>K(Te)().enterDevice(i.device.source,i.device.id)},k(i.device.name),9,wu)])]),l("button",{class:"btn btn-sm btn-outline-secondary",onClick:o=>K(Te)().enterDevice(i.device.source,i.device.id,"device")}," 详情 → ",8,ku)]),l("p",Cu,[f(k(K(Te)().location?.(i.device.siteId)||"未指定区域")+" ",1),i.device.point?(T(),M(W,{key:0},[f(" · "+k(i.device.point),1)],64)):U("",!0)]),l("div",Su,[l("span",null,[n[0]||(n[0]=f("IP ",-1)),l("b",null,k(i.device.networkHosts.join(" / ")||"待填写"),1)]),i.device.tailscaleHost?(T(),M("span",Tu,[n[1]||(n[1]=f("Tailscale ",-1)),l("b",null,k(i.device.tailscaleHost),1)])):U("",!0),i.device.networkCidr?(T(),M("span",$u,[n[2]||(n[2]=f("网段 ",-1)),l("b",null,k(i.device.networkCidr),1)])):U("",!0),l("span",null,[n[3]||(n[3]=f("上级 ",-1)),l("b",null,k(i.parentName||"待确认 / 直接接入"),1)]),l("span",null,[n[4]||(n[4]=f("连接 ",-1)),l("b",null,k({wired:"网线",wifi:"Wi-Fi"}[i.device.connectionType]||"待确认"),1)]),i.via.length?(T(),M("span",Mu,[n[5]||(n[5]=f("取流经录像机 ",-1)),l("b",null,k(i.via.join("、")),1)])):U("",!0),i.archiveVia.length?(T(),M("span",ju,[n[6]||(n[6]=f("录像归档 ",-1)),l("b",null,k(i.archiveVia.join("、")),1)])):U("",!0)]),/路由|网关|服务器/.test(i.device.deviceType)?(T(),xs(ks,{key:0,device:i.device,active:K(J).page==="objects"&&K(We).mode==="topology"},null,8,["device","active"])):U("",!0)])],6))),128)),K(We).rows.length?U("",!0):(T(),M("p",Au," 当前范围尚未登记设备。 "))])])]))}},Pu={key:0,class:"panel"},qu={__name:"DeviceNetworkPanel",setup(e){return(t,s)=>K(J).admin&&K(J).device&&K(J).page==="device"?(T(),M("section",Pu,[s[0]||(s[0]=l("h3",null,"网络状态与管理入口",-1)),L(ks,{device:K(J).device},null,8,["device"]),s[1]||(s[1]=l("p",{class:"description mb-0"},"只检查已登记的设备地址。常用端口未响应不一定表示断电;Tailscale 节点在线也不代表下级网段可达。",-1))])):U("",!0)}},Ou={id:"page-device",class:"page",hidden:""},Eu={id:"page-objects",class:"page",hidden:""},Ru={__name:"Workspace",setup(e){return(t,s)=>(T(),M(W,null,[s[4]||(s[4]=l("div",{id:"household-context",class:"household-context",hidden:""},[l("label",null,[f("当前归属 "),l("select",{id:"household-filter","aria-label":"当前归属"})]),l("span",{id:"household-context-note"}),l("button",{id:"scope-back",class:"quiet"},"返回场所")],-1)),s[5]||(s[5]=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[6]||(s[6]=Se('<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[7]||(s[7]=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,[f("AppKey"),l("input",{name:"appKey",autocomplete:"off",maxlength:"150",required:""})]),l("label",null,[f("SecretKey"),l("input",{name:"secretKey",type:"password",autocomplete:"new-password",maxlength:"150"})]),l("label",null,[f("百度后台应用名称"),l("input",{name:"appFolder",value:"智家",required:"",maxlength:"40"})]),l("label",null,[f("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,[f("系统名称"),l("input",{name:"name",required:"",maxlength:"40"})]),l("label",null,[f("系统副标题"),l("input",{name:"subtitle",required:"",maxlength:"60"})]),l("label",{class:"full"},[f("页首题词"),l("input",{name:"motto",maxlength:"100"})]),l("label",null,[f("登录标题"),l("input",{name:"loginTitle",required:"",maxlength:"40"})]),l("label",null,[f("登录说明"),l("input",{name:"loginNote",maxlength:"160"})]),l("label",{class:"full"},[f("页脚说明"),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,[f("更换系统 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,[f("更换浏览器图标"),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"},[f("导入配置到表单"),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"}),f("启用每日定时备份")]),l("label",{class:"check full"},[l("input",{name:"baidu",type:"checkbox"}),f("同时上传到已连接的百度网盘")]),l("label",null,[f("每日时间(北京时间)"),l("input",{name:"time",type:"time",required:"",value:"03:00"})]),l("label",null,[f("本机/挂载目录保留份数"),l("input",{name:"keep",type:"number",min:"1",max:"90",required:"",value:"14"})]),l("label",{class:"full"},[f("网络备份目录(可留空)"),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[8]||(s[8]=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,[f("此刻想记下什么?"),l("textarea",{name:"text",rows:"4",maxlength:"5000",placeholder:"今天的心情、一段往事,或一个值得记住的时刻…"})]),l("div",{class:"form-grid"},[l("label",null,[f("记事日期"),l("input",{name:"occurredOn",type:"date",required:""})]),l("label",null,[f("阅历分类"),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,[f("谁可以看到"),l("select",{name:"visibility"},[l("option",{value:"private"},"仅自己可见"),l("option",{value:"household"},"当前家庭/场所成员")])])]),l("div",{class:"journal-add-media"},[l("label",{class:"quiet"},[f("+ 照片、视频或语音"),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,[f("我的附件库("),l("span",{id:"journal-library-count"},"0"),f(")")]),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,[f("已删除附件("),l("span",{id:"journal-trash-count"},"0"),f(")")]),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,[f("查看方式"),l("select",{id:"journal-mode"},[l("option",{value:"feed"},"家庭/场所动态"),l("option",{value:"mine"},"我的个人阅历"),l("option",{value:"person"},"某个人的阅历")])]),l("label",{id:"journal-person-label",hidden:""},[f("人物"),l("select",{id:"journal-person"})]),l("label",null,[f("分类"),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,[f("关键词"),l("input",{id:"journal-search",type:"search",maxlength:"120",placeholder:"在文字中查找"})]),l("label",null,[f("开始日期"),l("input",{id:"journal-from",type:"date"})]),l("label",null,[f("结束日期"),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)),s[9]||(s[9]=l("section",{id:"page-overview",class:"page",hidden:""},[l("div",{id:"scope-overview"})],-1)),l("section",Ou,[L(qu),s[0]||(s[0]=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,[f("清晰度 "),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,[f("分屏 "),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"}),f("调整顺序")]),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,[f("常用位置 "),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,[f("当前位置名称"),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,[f("回到那一刻 "),l("small",null,"光阴")])]),l("div",{class:"panel playback-controls"},[l("label",null,[f("镜头 / 通道"),l("select",{id:"play-camera"})]),l("label",null,[f("录像来源"),l("select",{id:"archive-source"},[l("option",{value:"recorder"},"录像机原有录像(待接入)"),l("option",{value:"local"},"小电脑本机录像")])]),l("label",null,[f("日期"),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"}),f(" 有录像的时段 · 点击定位")])]),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,[f("定位时间 "),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:""}),f("自动续播下一时段(跳过空档)")]),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,[f("开始时间"),l("input",{id:"clip-start",type:"datetime-local",step:"1",required:""})]),l("label",null,[f("结束时间"),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]=Se('<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",Eu,[s[1]||(s[1]=Se('<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[2]||(s[2]=l("div",{class:"panel device-view-controls"},[l("div",{class:"device-search-row"},[l("label",null,[f("设备类型"),l("select",{id:"device-type"},[l("option",{value:""},"所有类型")])]),l("label",null,[f("搜索设备或人员"),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[3]||(s[3]=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)),L(tu),L(Iu)]),s[14]||(s[14]=Se('<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,[f("查找档案"),l("input",{id:"heritage-search",type:"search",placeholder:"名称、内容、相关人员"})]),l("label",{class:"check"},[l("input",{id:"heritage-archived",type:"checkbox"}),f("包含归档资料")]),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,[f("家族的来处与延续 "),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("div",{class:"panel family-toolbar"},[l("label",null,[f("关系参照人物"),l("select",{id:"family-reference"})]),l("label",null,[f("查找人物"),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"}),f("显示归档人物")]),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,[f("关联人物"),l("select",{id:"family-event-person"},[l("option",{value:""},"全家")])]),l("label",null,[f("年份"),l("select",{id:"family-event-year"},[l("option",{value:""},"所有年份")])]),l("label",null,[f("排列"),l("select",{id:"family-event-order"},[l("option",{value:"desc"},"从近到远"),l("option",{value:"asc"},"从远到近")])]),l("label",null,[f("搜索记事"),l("input",{id:"family-event-search",type:"search",placeholder:"标题、摘要或正文"})]),l("label",{class:"check"},[l("input",{id:"family-event-relatives",type:"checkbox"}),f("包括此人的父母、配偶和子女")]),l("label",{id:"family-event-state-label"},[f("状态"),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"}),f("本人")]),l("span",null,[l("i",{class:"legend-selected"}),f("正在查看")]),l("span",null,[l("i",{class:"legend-parent"}),f("父母 → 子女")]),l("span",null,[l("i",{class:"legend-spouse"}),f("配偶")]),l("span",null,[l("i",{class:"legend-adoptive"}),f("收养 / 继亲")])]),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)),L(kc),s[17]||(s[17]=Se('<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))}},Du={};function Hu(e,t){return T(),M(W,null,[t[0]||(t[0]=Se('<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,[f("主要负责人 *"),l("select",{name:"ownerId",required:""})]),l("label",null,[f("备用负责人"),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"},[f("安排 / 交接说明 *"),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"},[f("归属名称 *"),l("input",{name:"name",maxlength:"80",required:"",placeholder:"例如:赵府、济南办公室、莱阳工厂"})]),l("label",{class:"full"},[f("归属类型"),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,[f("卡片封面照片"),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"},[f("备注"),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]=Se('<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></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("div",{class:"form-grid"},[l("label",null,[f("姓名 / 称呼 *"),l("input",{name:"name",required:"",maxlength:"80",placeholder:"姓名暂不知时可先填称呼"})]),l("label",null,[f("别名 / 字 / 号"),l("input",{name:"alias",maxlength:"120"})]),l("label",null,[f("性别"),l("select",{name:"gender"},[l("option",{value:"unknown"},"待确认"),l("option",{value:"male"},"男"),l("option",{value:"female"},"女")])]),l("label",null,[f("在世情况"),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,[f("历法"),l("select",{"data-calendar":"","aria-label":"出生日期历法"},[l("option",{value:"solar"},"公历"),l("option",{value:"lunar"},"农历")])]),l("label",null,[f("日期"),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"}),f("闰月")]),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,[f("历法"),l("select",{"data-calendar":"","aria-label":"去世日期历法"},[l("option",{value:"solar"},"公历"),l("option",{value:"lunar"},"农历")])]),l("label",null,[f("日期"),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"}),f("闰月")]),l("output",{"data-date-hint":"","aria-live":"polite"},"日期不详可留空")]),l("label",{class:"full",id:"person-legacy-place"},[f("原籍贯/出生地记录"),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,[f("乡镇/街道"),l("input",{name:"nativeTown",maxlength:"80",placeholder:"","aria-label":"籍贯(祖籍) · 乡镇/街道"})]),l("label",null,[f("村/社区"),l("input",{name:"nativeCommunity",maxlength:"80",placeholder:"","aria-label":"籍贯(祖籍) · 村/社区"})]),l("label",{class:"full"},[f("详细地址/历史地名"),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,[f("乡镇/街道"),l("input",{name:"birthTown",maxlength:"80",placeholder:"","aria-label":"出生地 · 乡镇/街道"})]),l("label",null,[f("村/社区"),l("input",{name:"birthCommunity",maxlength:"80",placeholder:"","aria-label":"出生地 · 村/社区"})]),l("label",{class:"full"},[f("详细地址/历史地名"),l("input",{name:"birthAddress",maxlength:"200",placeholder:"楼栋、门牌或旧称,可按已知信息填写","aria-label":"出生地 · 详细地址/历史地名"})])])]),l("p",{class:"description full"},"籍贯与出生地可不同;选择中国、世界或自定义地域,不详的层级可留空。"),l("label",{class:"full"},[f("生平简介"),l("textarea",{name:"biography",rows:"4",maxlength:"2000"})]),l("label",{class:"full"},[f("备注 / 信息来源"),l("textarea",{name:"note",rows:"3",maxlength:"500",placeholder:"例如:长辈口述、族谱记载、待考证信息"})]),l("label",{class:"check"},[l("input",{name:"archived",type:"checkbox"}),f("归档人物(保留关系,可恢复)")])]),l("p",{class:"form-error"}),l("div",{class:"dialog-footer"},[l("button",{type:"submit"},"保存人物")])])],-1)),t[5]||(t[5]=Se('<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"},[f("记事标题 *"),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,[f("历法"),l("select",{"data-calendar":"","aria-label":"记事日期历法"},[l("option",{value:"solar"},"公历"),l("option",{value:"lunar"},"农历")])]),l("label",null,[f("日期"),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"}),f("闰月")]),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"},[f("摘要"),l("textarea",{name:"summary",maxlength:"400",rows:"2",placeholder:"简要说明这件事"})]),l("label",{class:"full"},[f("详细记载"),l("textarea",{name:"body",maxlength:"12000",rows:"7",placeholder:"记录经过、意义、长辈口述或资料出处。可分段书写。"})]),l("label",null,[f("报道 / 资料来源"),l("input",{name:"sourceName",maxlength:"160",placeholder:"例如:报刊名称、个人博客"})]),l("label",null,[f("原始报道链接"),l("input",{name:"sourceUrl",type:"url",maxlength:"2000",placeholder:"https://…"})]),l("label",{class:"check full"},[l("input",{name:"archived",type:"checkbox"}),f("归档记事(保留内容,可恢复)")])]),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]=Se('<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,[f("当前密码"),l("input",{name:"currentPassword",type:"password",required:"",maxlength:"128",autocomplete:"current-password"})]),l("label",null,[f("新密码"),l("input",{name:"newPassword",type:"password",required:"",minlength:"8",maxlength:"128",autocomplete:"new-password"})]),l("label",null,[f("再次输入新密码"),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,[f("设置码流"),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]=Se('<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 Nu=ki(Du,[["render",Hu]]),Fu=["/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 un(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 Lu(){un(document.getElementById("app")),new MutationObserver(e=>{for(const t of e)for(const s of t.addedNodes)un(s)}).observe(document.getElementById("app"),{childList:!0,subtree:!0});for(const e of[...Fu,"/vue-bridge.js"])await new Promise((t,s)=>{const n=document.createElement("script");n.src=e+"?ui=0.1.42",n.onload=t,n.onerror=()=>s(new Error("Could not load "+e)),document.head.append(n)});await window.ZhaoVue.boot()}const Vu=["data-page"],Ku={key:0,class:"alert alert-danger",role:"alert"},Uu={__name:"App",setup(e){const t=ke(!1);return Yn(async()=>{try{await Lu()}catch(s){console.error("Application startup failed",s),t.value=!0}}),(s,n)=>(T(),M(W,null,[L(ar),l("main",{"data-page":K(J).page},[L(ur),t.value?(T(),M("div",Ku,"页面组件加载失败,请检查网络后重新打开页面。")):U("",!0),L(Ru)],8,Vu),L(Nu)],64))}};Ba(Uu).mount("#app");
|