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