2026-01-19 11:30:28 +08:00
( function (){ const e = document . createElement ( "link" ). relList ; if ( e && e . supports && e . supports ( "modulepreload" )) return ; for ( const n of document . querySelectorAll ( 'link[rel="modulepreload"]' )) i ( n ); new MutationObserver ( n =>{ for ( const o of n ) if ( o . type === "childList" ) for ( const r of o . addedNodes ) r . tagName === "LINK" && r . rel === "modulepreload" && i ( r )}). observe ( document ,{ childList :! 0 , subtree :! 0 }); function t ( n ){ const o = {}; return n . integrity && ( o . integrity = n . integrity ), n . referrerPolicy && ( o . referrerPolicy = n . referrerPolicy ), n . crossOrigin === "use-credentials" ? o . credentials = "include" : n . crossOrigin === "anonymous" ? o . credentials = "omit" : o . credentials = "same-origin" , o } function i ( n ){ if ( n . ep ) return ; n . ep =! 0 ; const o = t ( n ); fetch ( n . href , o )}})(); /**
2026-01-16 14:52:40 +08:00
* @vue/shared v3.5.26
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
2026-01-19 11:30:28 +08:00
**/ function Pr ( A ){ const e = Object . create ( null ); for ( const t of A . split ( "," )) e [ t ] = 1 ; return t => t in e } const KA = {}, hi = [], ot = ()=>{}, eI = ()=> ! 1 , lo = A => A . charCodeAt ( 0 ) === 111 && A . charCodeAt ( 1 ) === 110 && ( A . charCodeAt ( 2 ) > 122 || A . charCodeAt ( 2 ) < 97 ), Or = A => A . startsWith ( "onUpdate:" ), ue = Object . assign , Vr = ( A , e )=>{ const t = A . indexOf ( e ); t >- 1 && A . splice ( t , 1 )}, tB = Object . prototype . hasOwnProperty , JA = ( A , e )=> tB . call ( A , e ), yA = Array . isArray , fi = A => cn ( A ) === "[object Map]" , Bo = A => cn ( A ) === "[object Set]" , Ng = A => cn ( A ) === "[object Date]" , SA = A => typeof A == "function" , te = A => typeof A == "string" , It = A => typeof A == "symbol" , PA = A => A !== null && typeof A == "object" , tI = A =>( PA ( A ) || SA ( A )) && SA ( A . then ) && SA ( A . catch ), iI = Object . prototype . toString , cn = A => iI . call ( A ), iB = A => cn ( A ). slice ( 8 , - 1 ), nI = A => cn ( A ) === "[object Object]" , Wr = A => te ( A ) && A !== "NaN" && A [ 0 ] !== "-" && "" + parseInt ( A , 10 ) === A , Oi = Pr ( ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" ), Qo = A =>{ const e = Object . create ( null ); return t => e [ t ] || ( e [ t ] = A ( t ))}, nB = /-\w/g , Je = Qo ( A => A . replace ( nB , e => e . slice ( 1 ). toUpperCase ())), oB = /\B([A-Z])/g , Ii = Qo ( A => A . replace ( oB , "-$1" ). toLowerCase ()), co = Qo ( A => A . charAt ( 0 ). toUpperCase () + A . slice ( 1 )), xo = Qo ( A => A ? `on ${ co ( A ) } ` : "" ), Yt = ( A , e )=> ! Object . is ( A , e ), Jn = ( A ,... e )=>{ for ( let t = 0 ; t < A . length ; t ++ ) A [ t ](... e )}, oI = ( A , e , t , i =! 1 )=>{ Object . defineProperty ( A , e ,{ configurable :! 0 , enumerable :! 1 , writable : i , value : t })}, Eo = A =>{ const e = parseFloat ( A ); return isNaN ( e ) ? A : e }; let Gg ; const uo = ()=> Gg || ( Gg = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : {}); function WA ( A ){ if ( yA ( A )){ const e = {}; for ( let t = 0 ; t < A . length ; t ++ ){ const i = A [ t ], n = te ( i ) ? aB ( i ) : WA ( i ); if ( n ) for ( const o in n ) e [ o ] = n [ o ]} return e } else if ( te ( A ) || PA ( A )) return A } const rB = /;(?![^(]*\))/g , gB = /:([^]+)/ , sB = /\/\*[^]*?\*\//g ; function aB ( A ){ const e = {}; return A . replace ( sB , "" ). split ( rB ). forEach ( t =>{ if ( t ){ const i = t . split ( gB ); i . length > 1 && ( e [ i [ 0 ]. trim ()] = i [ 1 ]. trim ())}}), e } function kA ( A ){ let e = "" ; if ( te ( A )) e = A ; else if ( yA ( A )) for ( let t = 0 ; t < A . length ; t ++ ){ const i = kA ( A [ t ]); i && ( e += i + " " )} else if ( PA ( A )) for ( const t in A ) A [ t ] && ( e += t + " " ); return e . trim ()} const IB = "itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly" , CB = Pr ( IB ); function rI ( A ){ return !! A || A === "" } function lB ( A , e ){ if ( A . length !== e . length ) return ! 1 ; let t =! 0 ; for ( let i = 0 ; t && i < A . length ; i ++ ) t = ho ( A [ i ], e [ i ]); return t } function ho ( A , e ){ if ( A === e ) return ! 0 ; let t = Ng ( A ), i = Ng ( e ); if ( t || i ) return t && i ? A . getTime () === e . getTime () :! 1 ; if ( t = It ( A ), i = It ( e ), t || i ) return A === e ; if ( t = yA ( A ), i = yA ( e ), t || i ) return t && i ? lB ( A , e ) :! 1 ; if ( t = PA ( A ), i = PA ( e ), t || i ){ if ( ! t ||! i ) return ! 1 ; const n = Object . keys ( A ). length , o = Object . keys ( e ). length ; if ( n !== o ) return ! 1 ; for ( const r in A ){ const g = A . hasOwnProperty ( r ), s = e . hasOwnProperty ( r ); if ( g &&! s ||! g && s ||! ho ( A [ r ], e [ r ])) return ! 1 }} return String ( A ) === String ( e )} function BB ( A , e ){ return A . findIndex ( t => ho ( t , e ))} const gI = A => !! ( A && A . __v_isRef ===! 0 ), v = A => te ( A ) ? A : A == null ? "" : yA ( A ) || PA ( A ) && ( A . toString === iI ||! SA ( A . toString )) ? gI ( A ) ? v ( A . value ) : JSON . stringify ( A , sI , 2 ) : String ( A ), sI = ( A , e )=> gI ( e ) ? sI ( A , e . value ) : fi ( e ) ? {[ `Map( ${ e . size } )` ] : [... e . entries ()]. reduce (( t ,[ i , n ], o )=>( t [ Jo ( i , o ) + " =>" ] = n , t ),{})} : Bo ( e ) ? {[ `Set( ${ e . size } )` ] : [... e . values ()]. map ( t => Jo ( t ))} : It ( e ) ? Jo ( e ) : PA ( e ) &&! yA ( e ) &&! nI ( e ) ? String ( e ) : e , Jo = ( A , e = "" )=>{ var t ; return It ( A ) ? `Symbol( ${ ( t = A . description ) != null ? t : e } )` : A }; /**
2026-01-16 14:52:40 +08:00
* @vue/reactivity v3.5.26
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
2026-01-19 11:30:28 +08:00
**/ let ke ; class aI { constructor ( e =! 1 ){ this . detached = e , this . _active =! 0 , this . _on = 0 , this . effects = [], this . cleanups = [], this . _isPaused =! 1 , this . parent = ke , ! e && ke && ( this . index = ( ke . scopes || ( ke . scopes = [])). push ( this ) - 1 )} get active (){ return this . _active } pause (){ if ( this . _active ){ this . _isPaused =! 0 ; let e , t ; if ( this . scopes ) for ( e = 0 , t = this . scopes . length ; e < t ; e ++ ) this . scopes [ e ]. pause (); for ( e = 0 , t = this . effects . length ; e < t ; e ++ ) this . effects [ e ]. pause ()}} resume (){ if ( this . _active && this . _isPaused ){ this . _isPaused =! 1 ; let e , t ; if ( this . scopes ) for ( e = 0 , t = this . scopes . length ; e < t ; e ++ ) this . scopes [ e ]. resume (); for ( e = 0 , t = this . effects . length ; e < t ; e ++ ) this . effects [ e ]. resume ()}} run ( e ){ if ( this . _active ){ const t = ke ; try { return ke = this , e ()} finally { ke = t }}} on (){ ++ this . _on === 1 && ( this . prevScope = ke , ke = this )} off (){ this . _on > 0 &&-- this . _on === 0 && ( ke = this . prevScope , this . prevScope = void 0 )} stop ( e ){ if ( this . _active ){ this . _active =! 1 ; let t , i ; for ( t = 0 , i = this . effects . length ; t < i ; t ++ ) this . effects [ t ]. stop (); for ( this . effects . length = 0 , t = 0 , i = this . cleanups . length ; t < i ; t ++ ) this . cleanups [ t ](); if ( this . cleanups . length = 0 , this . scopes ){ for ( t = 0 , i = this . scopes . length ; t < i ; t ++ ) this . scopes [ t ]. stop ( ! 0 ); this . scopes . length = 0 } if ( ! this . detached && this . parent &&! e ){ const n = this . parent . scopes . pop (); n && n !== this && ( this . parent . scopes [ this . index ] = n , n . index = this . index )} this . parent = void 0 }}} function QB ( A ){ return new aI ( A )} function cB (){ return ke } let OA ; const To = new WeakSet ; class II { constructor ( e ){ this . fn = e , this . deps = void 0 , this . depsTail = void 0 , this . flags = 5 , this . next = void 0 , this . cleanup = void 0 , this . scheduler = void 0 , ke && ke . active && ke . effects . push ( this )} pause (){ this . flags |= 64 } resume (){ this . flags & 64 && ( this . flags &=- 65 , To . has ( this ) && ( To . delete ( this ), this . trigger ()))} notify (){ this . flags & 2 &&! ( this . flags & 32 ) || this . flags & 8 || lI ( this )} run (){ if ( ! ( this . flags & 1 )) return this . fn (); this . flags |= 2 , Lg ( this ), BI ( this ); const e = OA , t = _e ; OA = this , _e =! 0 ; try { return this . fn ()} finally { QI ( this ), OA = e , _e = t , this . flags &=- 3 }} stop (){ if ( this . flags & 1 ){ for ( let e = this . deps ; e ; e = e . nextDep ) Zr ( e ); this . deps = this . depsTail = void 0 , Lg ( this ), this . onStop && this . onStop (), this . flags &=- 2 }} trigger (){ this . flags & 64 ? To . add ( this ) : this . scheduler ? this . scheduler () : this . runIfDirty ()} runIfDirty (){ ar ( this ) && this . run ()} get dirty (){ return ar ( this )}} let CI = 0 , Vi , Wi ; function lI ( A , e =! 1 ){ if ( A . flags |= 8 , e ){ A . next = Wi , Wi = A ; return } A . next = Vi , Vi = A } function qr (){ CI ++ } function jr (){ if ( -- CI > 0 ) return ; if ( Wi ){ let e = Wi ; for ( Wi = void 0 ; e ;){ const t = e . next ; e . next = void 0 , e . flags &=- 9 , e = t }} let A ; for (; Vi ;){ let e = Vi ; for ( Vi = void 0 ; e ;){ const t = e . next ; if ( e . next = void 0 , e . flags &=- 9 , e . flags & 1 ) try { e . trigger ()} catch ( i ){ A || ( A = i )} e = t }} if ( A ) throw A } function BI ( A ){ for ( let e = A . deps ; e ; e = e . nextDep ) e . version =- 1 , e . prevActiveLink = e . dep . activeLink , e . dep . activeLink = e } function QI ( A ){ let e , t = A . depsTail , i = t ; for (; i ;){ const n = i . prevDep ; i . version ===- 1 ? ( i === t && ( t = n ), Zr ( i ), EB ( i )) : e = i , i . dep . activeLink = i . prevActiveLink , i . prevActiveLink = void 0 , i = n } A . deps = e , A . depsTail = t } function ar ( A ){ for ( let e = A . deps ; e ; e = e . nextDep ) if ( e . dep . version !== e . version || e . dep . computed && ( cI ( e . dep . computed ) || e . dep . version !== e . version )) return ! 0 ; return !! A . _dirty } function cI ( A ){ if ( A . flags & 4 &&! ( A . flags & 16 ) || ( A . flags &=- 17 , A . globalVersion === An ) || ( A . globalVersion = An , ! A . isSSR && A . flags & 128 && ( ! A . deps &&! A . _dirty ||! ar ( A )))) return ; A . flags |= 2 ; const e = A . dep , t = OA , i = _e ; OA = A , _e =! 0 ; try { BI ( A ); const n = A . fn ( A . _value );( e . version === 0 || Yt ( n , A . _value )) && ( A . flags |= 128 , A . _value = n , e . version ++ )} catch ( n ){ throw e . version ++ , n } finally { OA = t , _e = i , QI ( A ), A . flags &=- 3 }} function Zr ( A , e =! 1 ){ const { dep : t , prevSub : i , nextSub : n } = A ; if ( i && ( i . nextSub = n , A . prevSub = void 0 ), n && ( n . prevSub = i , A . nextSub = void 0 ), t . subs === A && ( t . subs = i , ! i && t . computed )){ t . computed . flags &=- 5 ; for ( let o = t . computed . deps ; o ; o = o . nextDep ) Zr ( o , ! 0 )} ! e &&!-- t . sc && t . map && t . map . delete ( t . key )} function EB ( A ){ const { prevDep : e , nextDep : t } = A ; e && ( e . nextDep = t , A . prevDep = void 0 ), t && ( t . prevDep = e , A . nextDep = void 0 )} let _e =! 0 ; const EI = []; function wt (){ EI . push ( _e ), _e =! 1 } function Dt (){ const A = EI . pop (); _e = A === void 0 ?! 0 : A } function Lg ( A ){ const { cleanup : e } = A ; if ( A . cleanup = void 0 , e ){ const t = OA ; OA = void 0 ; try { e ()} finally { OA = t }}} let An = 0 ; class uB { constructor ( e , t ){ this . sub = e , this . dep = t , this . version = t . ver
2026-01-16 14:52:40 +08:00
* @ vue / runtime - core v3 . 5.26
* ( c ) 2018 - present Yuxi ( Evan ) You and Vue contributors
* @ license MIT
2026-01-19 11:30:28 +08:00
** /function En(A,e,t,i){try{return i?A(...i):A()}catch(n){mo(n,e,t)}}function Ct(A,e,t,i){if(SA(A)){const n=En(A,e,t,i);return n&&tI(n)&&n.catch(o=>{mo(o,e,t)}),n}if(yA(A)){const n=[];for(let o=0;o<A.length;o++)n.push(Ct(A[o],e,t,i));return n}}function mo(A,e,t,i=!0){const n=e?e.vnode:null,{errorHandler:o,throwUnhandledErrorInProduction:r}=e&&e.appContext.config||KA;if(e){let g=e.parent;const s=e.proxy,a=`https:/ / vuejs . org / error - reference / # runtime - $ { t } `;for(;g;){const I=g.ec;if(I){for(let l=0;l<I.length;l++)if(I[l](A,s,a)===!1)return}g=g.parent}if(o){wt(),En(o,null,10,[A,s,a]),Dt();return}}HB(A,t,n,i,r)}function HB(A,e,t,i=!0,n=!1){if(n)throw A;console.error(A)}const me=[];let At=-1;const di=[];let Mt=null,Qi=0;const vI=Promise.resolve();let jn=null;function un(A){const e=jn||vI;return A?e.then(this?A.bind(this):A):e}function YB(A){let e=At+1,t=me.length;for(;e<t;){const i=e+t>>>1,n=me[i],o=tn(n);o<A||o===A&&n.flags&2?e=i+1:t=i}return e}function tg(A){if(!(A.flags&1)){const e=tn(A),t=me[me.length-1];!t||!(A.flags&2)&&e>=tn(t)?me.push(A):me.splice(YB(e),0,A),A.flags|=1,FI()}}function FI(){jn||(jn=vI.then(bI))}function _B(A){yA(A)?di.push(...A):Mt&&A.id===-1?Mt.splice(Qi+1,0,A):A.flags&1||(di.push(A),A.flags|=1),FI()}function Mg(A,e,t=At+1){for(;t<me.length;t++){const i=me[t];if(i&&i.flags&2){if(A&&i.id!==A.uid)continue;me.splice(t,1),t--,i.flags&4&&(i.flags&=-2),i(),i.flags&4||(i.flags&=-2)}}}function SI(A){if(di.length){const e=[...new Set(di)].sort((t,i)=>tn(t)-tn(i));if(di.length=0,Mt){Mt.push(...e);return}for(Mt=e,Qi=0;Qi<Mt.length;Qi++){const t=Mt[Qi];t.flags&4&&(t.flags&=-2),t.flags&8||t(),t.flags&=-2}Mt=null,Qi=0}}const tn=A=>A.id==null?A.flags&2?-1:1/0:A.id;function bI(A){try{for(At=0;At<me.length;At++){const e=me[At];e&&!(e.flags&8)&&(e.flags&4&&(e.flags&=-2),En(e,e.i,e.i?15:14),e.flags&4||(e.flags&=-2))}}finally{for(;At<me.length;At++){const e=me[At];e&&(e.flags&=-2)}At=-1,me.length=0,SI(),jn=null,(me.length||di.length)&&bI()}}let be=null,RI=null;function Zn(A){const e=be;return be=A,RI=A&&A.type.__scopeId||null,e}function KB(A,e=be,t){if(!e||A._n)return A;const i=(...n)=>{i._d&&$n(-1);const o=Zn(e);let r;try{r=A(...n)}finally{Zn(o),i._d&&$n(1)}return r};return i._n=!0,i._c=!0,i._d=!0,i}function XA(A,e){if(be===null)return A;const t=ko(be),i=A.dirs||(A.dirs=[]);for(let n=0;n<e.length;n++){let[o,r,g,s=KA]=e[n];o&&(SA(o)&&(o={mounted:o,updated:o}),o.deep&&ht(r),i.push({dir:o,instance:t,value:r,oldValue:void 0,arg:g,modifiers:s}))}return A}function Zt(A,e,t,i){const n=A.dirs,o=e&&e.dirs;for(let r=0;r<n.length;r++){const g=n[r];o&&(g.oldValue=o[r].value);let s=g.dir[i];s&&(wt(),Ct(s,t,8,[A.el,g,A,e]),Dt())}}function Tn(A,e){if(Ee){let t=Ee.provides;const i=Ee.parent&&Ee.parent.provides;i===t&&(t=Ee.provides=Object.create(i)),t[A]=e}}function rt(A,e,t=!1){const i=vi();if(i||pi){let n=pi?pi._context.provides:i?i.parent==null||i.ce?i.vnode.appContext&&i.vnode.appContext.provides:i.parent.provides:void 0;if(n&&A in n)return n[A];if(arguments.length>1)return t&&SA(e)?e.call(i&&i.proxy):e}}const PB=Symbol.for("v-scx"),OB=()=>rt(PB);function ae(A,e,t){return NI(A,e,t)}function NI(A,e,t=KA){const{immediate:i,deep:n,flush:o,once:r}=t,g=ue({},t),s=e&&i||!e&&o!=="post";let a;if(on){if(o==="sync"){const Q=OB();a=Q.__watcherHandles||(Q.__watcherHandles=[])}else if(!s){const Q=()=>{};return Q.stop=ot,Q.resume=ot,Q.pause=ot,Q}}const I=Ee;g.call=(Q,E,f)=>Ct(Q,I,E,f);let l=!1;o==="post"?g.scheduler=Q=>{Se(Q,I&&I.suspense)}:o!=="sync"&&(l=!0,g.scheduler=(Q,E)=>{E?Q():tg(Q)}),g.augmentJob=Q=>{e&&(Q.flags|=4),l&&(Q.flags|=2,I&&(Q.id=I.uid,Q.i=I))};const C=TB(A,e,g);return on&&(a?a.push(C):s&&C()),C}function VB(A,e,t){const i=this.proxy,n=te(A)?A.includes(".")?GI(i,A):()=>i[A]:A.bind(i,i);let o;SA(e)?o=e:(o=e.handler,t=e);const r=dn(this),g=NI(n,o.bind(i),t);return r(),g}function GI(A,e){const t=e.split(".");return()=>{let i=A;for(let n=0;n<t.length&&i;n++)i=i[t[n]];return i}}const WB=Symbol("_vte"),qB=A=>A.__isTeleport,jB=Symbol("_leaveCb");function ig(A,e){A.shapeFlag&6&&A.component?(A.transition=e,ig(A.component.subTree,e)):A.shapeF
2026-01-16 14:52:40 +08:00
* @vue/runtime-dom v3.5.26
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
2026-01-19 11:30:28 +08:00
**/let fr;const jg=typeof window<"u"&&window.trustedTypes;if(jg)try{fr=jg.createPolicy("vue",{createHTML:A=>A})}catch{}const rC=fr?A=>fr.createHTML(A):A=>A,qQ="http://www.w3.org/2000/svg",jQ="http://www.w3.org/1998/Math/MathML",Et=typeof document<"u"?document:null,Zg=Et&&Et.createElement("template"),ZQ={insert:(A,e,t)=>{e.insertBefore(A,t||null)},remove:A=>{const e=A.parentNode;e&&e.removeChild(A)},createElement:(A,e,t,i)=>{const n=e==="svg"?Et.createElementNS(qQ,A):e==="mathml"?Et.createElementNS(jQ,A):t?Et.createElement(A,{is:t}):Et.createElement(A);return A==="select"&&i&&i.multiple!=null&&n.setAttribute("multiple",i.multiple),n},createText:A=>Et.createTextNode(A),createComment:A=>Et.createComment(A),setText:(A,e)=>{A.nodeValue=e},setElementText:(A,e)=>{A.textContent=e},parentNode:A=>A.parentNode,nextSibling:A=>A.nextSibling,querySelector:A=>Et.querySelector(A),setScopeId(A,e){A.setAttribute(e,"")},insertStaticContent(A,e,t,i,n,o){const r=t?t.previousSibling:e.lastChild;if(n&&(n===o||n.nextSibling))for(;e.insertBefore(n.cloneNode(!0),t),!(n===o||!(n=n.nextSibling)););else{Zg.innerHTML=rC(i==="svg"?` < svg > $ { A } < /svg>`:i==="mathml"?`<math>${A}</math>`:A);const g=Zg.content;if(i==="svg"||i==="mathml"){const s=g.firstChild;for(;s.firstChild;)g.appendChild(s.firstChild);g.removeChild(s)}e.insertBefore(g,t)}return[r?r.nextSibling:e.firstChild,t?t.previousSibling:e.lastChild]}},XQ=Symbol("_vtc");function zQ(A,e,t){const i=A[XQ];i&&(e=(e?[e,...i]:[...i]).join(" ")),e==null?A.removeAttribute("class"):t?A.setAttribute("class",e):A.className=e}const Xg=Symbol("_vod"),$Q=Symbol("_vsh"),Ac=Symbol(""),ec=/(?:^|;)\s*display\s*:/;function tc(A,e,t){const i=A.style,n=te(t);let o=!1;if(t&&!n){if(e)if(te(e))for(const r of e.split(";")){const g=r.slice(0,r.indexOf(":")).trim();t[g]==null&&_n(i,g,"")}else for(const r in e)t[r]==null&&_n(i,r,"");for(const r in t)r==="display"&&(o=!0),_n(i,r,t[r])}else if(n){if(e!==t){const r=i[Ac];r&&(t+=";"+r),i.cssText=t,o=ec.test(t)}}else e&&A.removeAttribute("style");Xg in A&&(A[Xg]=o?i.display:"",A[$Q]&&(i.display="none"))}const zg=/\s*!important$/;function _n(A,e,t){if(yA(t))t.forEach(i=>_n(A,e,i));else if(t==null&&(t=""),e.startsWith("--"))A.setProperty(e,t);else{const i=ic(A,e);zg.test(t)?A.setProperty(Ii(i),t.replace(zg,""),"important"):A[i]=t}}const $g=["Webkit","Moz","ms"],Po={};function ic(A,e){const t=Po[e];if(t)return t;let i=Je(e);if(i!=="filter"&&i in A)return Po[e]=i;i=co(i);for(let n=0;n<$g.length;n++){const o=$g[n]+i;if(o in A)return Po[e]=o}return e}const As="http://www.w3.org/1999/xlink";function es(A,e,t,i,n,o=CB(e)){i&&e.startsWith("xlink:")?t==null?A.removeAttributeNS(As,e.slice(6,e.length)):A.setAttributeNS(As,e,t):t==null||o&&!rI(t)?A.removeAttribute(e):A.setAttribute(e,o?"":It(t)?String(t):t)}function ts(A,e,t,i,n){if(e==="innerHTML"||e==="textContent"){t!=null&&(A[e]=e==="innerHTML"?rC(t):t);return}const o=A.tagName;if(e==="value"&&o!=="PROGRESS"&&!o.includes("-")){const g=o==="OPTION"?A.getAttribute("value")||"":A.value,s=t==null?A.type==="checkbox"?"on":"":String(t);(g!==s||!("_value"in A))&&(A.value=s),t==null&&A.removeAttribute(e),A._value=t;return}let r=!1;if(t===""||t==null){const g=typeof A[e];g==="boolean"?t=rI(t):t==null&&g==="string"?(t="",r=!0):g==="number"&&(t=0,r=!0)}try{A[e]=t}catch{}r&&A.removeAttribute(n||e)}function ti(A,e,t,i){A.addEventListener(e,t,i)}function nc(A,e,t,i){A.removeEventListener(e,t,i)}const is=Symbol("_vei");function oc(A,e,t,i,n=null){const o=A[is]||(A[is]={}),r=o[e];if(i&&r)r.value=i;else{const[g,s]=rc(e);if(i){const a=o[e]=ac(i,n);ti(A,g,a,s)}else r&&(nc(A,g,r,s),o[e]=void 0)}}const ns=/(?:Once|Passive|Capture)$/;function rc(A){let e;if(ns.test(A)){e={};let i;for(;i=A.match(ns);)A=A.slice(0,A.length-i[0].length),e[i[0].toLowerCase()]=!0}return[A[2]===":"?A.slice(3):Ii(A.slice(2)),e]}let Oo=0;const gc=Promise.resolve(),sc=()=>Oo||(gc.then(()=>Oo=0),Oo=Date.now());function ac(A,e){const t=i=>{if(!i._vts)i._vts=Date.now();else if(i._vts<=t.attached)return;Ct(Ic(i,t.value),e,5,[i])};return t.value=A,t.attached=sc(),t}function Ic(A,e){if(yA(e)){co
2026-01-16 14:52:40 +08:00
* shared v9 . 14.5
* ( c ) 2025 kazuya kawaguchi
* Released under the MIT License .
2026-01-19 11:30:28 +08:00
* /function pc(A,e){typeof console<"u"&&(console.warn("[intlify] "+A),e&&console.warn(e.stack))}const no=typeof window<"u",Vt=(A,e=!1)=>e?Symbol.for(A):Symbol(A),mc=(A,e,t)=>yc({l:A,k:e,s:t}),yc=A=>JSON.stringify(A).replace(/ \u2028 / g , "\\u2028" ). replace ( /\u2029/g , "\\u2029" ). replace ( /\u0027/g , "\\u0027" ), ee = A => typeof A == "number" && isFinite ( A ), wc = A => sC ( A ) === "[object Date]" , Pt = A => sC ( A ) === "[object RegExp]" , vo = A => vA ( A ) && Object . keys ( A ). length === 0 , Be = Object . assign , Dc = Object . create , YA = ( A = null )=> Dc ( A ); let Is ; const ft = ()=> Is || ( Is = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : YA ()); function Cs ( A ){ return A . replace ( /&/g , "&" ). replace ( /</g , "<" ). replace ( />/g , ">" ). replace ( /"/g , """ ). replace ( /'/g , "'" ). replace ( /\//g , "/" ). replace ( /=/g , "=" )} function ls ( A ){ return A . replace ( /&(?![a-zA-Z0-9#]{2,6};)/g , "&" ). replace ( /"/g , """ ). replace ( /'/g , "'" ). replace ( /</g , "<" ). replace ( />/g , ">" )} function kc ( A ){ return A = A . replace ( /(\w+)\s*=\s*"([^"]*)"/g ,( i , n , o )=> ` ${ n } =" ${ ls ( o ) } "` ), A = A . replace ( /(\w+)\s*=\s*'([^']*)'/g ,( i , n , o )=> ` ${ n } =' ${ ls ( o ) } '` ), /\s*on\w+\s*=\s*["']?[^"'>]+["']?/gi . test ( A ) && ( A = A . replace ( /(\s+)(on)(\w+\s*=)/gi , "$1on$3" )),[ /(\s+(?:href|src|action|formaction)\s*=\s*["']?)\s*javascript:/gi , /(style\s*=\s*["'][^"']*url\s*\(\s*)javascript:/gi ]. forEach ( i =>{ A = A . replace ( i , "$1javascript:" )}), A } const vc = Object . prototype . hasOwnProperty ; function He ( A , e ){ return vc . call ( A , e )} const qA = Array . isArray , VA = A => typeof A == "function" , rA = A => typeof A == "string" , RA = A => typeof A == "boolean" , UA = A => A !== null && typeof A == "object" , Fc = A => UA ( A ) && VA ( A . then ) && VA ( A . catch ), gC = Object . prototype . toString , sC = A => gC . call ( A ), vA = A =>{ if ( ! UA ( A )) return ! 1 ; const e = Object . getPrototypeOf ( A ); return e === null || e . constructor === Object }, Sc = A => A == null ? "" : qA ( A ) || vA ( A ) && A . toString === gC ? JSON . stringify ( A , null , 2 ) : String ( A ); function bc ( A , e = "" ){ return A . reduce (( t , i , n )=> n === 0 ? t + i : t + e + i , "" )} function Fo ( A ){ let e = A ; return ()=> ++ e } const Sn = A => ! UA ( A ) || qA ( A ); function Kn ( A , e ){ if ( Sn ( A ) || Sn ( e )) throw new Error ( "Invalid value" ); const t = [{ src : A , des : e }]; for (; t . length ;){ const { src : i , des : n } = t . pop (); Object . keys ( i ). forEach ( o =>{ o !== "__proto__" && ( UA ( i [ o ]) &&! UA ( n [ o ]) && ( n [ o ] = Array . isArray ( i [ o ]) ? [] : YA ()), Sn ( n [ o ]) || Sn ( i [ o ]) ? n [ o ] = i [ o ] : t . push ({ src : i [ o ], des : n [ o ]}))})}} /*!
2026-01-16 14:52:40 +08:00
* message-compiler v9.14.5
* (c) 2025 kazuya kawaguchi
* Released under the MIT License.
2026-01-19 11:30:28 +08:00
*/ function Rc ( A , e , t ){ return { line : A , column : e , offset : t }} function oo ( A , e , t ){ return { start : A , end : e }} const Nc = /\{([0-9a-zA-Z]+)\}/g ; function aC ( A ,... e ){ return e . length === 1 && Gc ( e [ 0 ]) && ( e = e [ 0 ]),( ! e ||! e . hasOwnProperty ) && ( e = {}), A . replace ( Nc ,( t , i )=> e . hasOwnProperty ( i ) ? e [ i ] : "" )} const IC = Object . assign , Bs = A => typeof A == "string" , Gc = A => A !== null && typeof A == "object" ; function CC ( A , e = "" ){ return A . reduce (( t , i , n )=> n === 0 ? t + i : t + e + i , "" )} const gg = { USE_MODULO_SYNTAX : 1 , __EXTEND_POINT__ : 2 }, Lc = {[ gg . USE_MODULO_SYNTAX ] : "Use modulo before '{{0}}'." }; function Uc ( A , e ,... t ){ const i = aC ( Lc [ A ],... t || []), n = { message : String ( i ), code : A }; return e && ( n . location = e ), n } const pA = { EXPECTED_TOKEN : 1 , INVALID_TOKEN_IN_PLACEHOLDER : 2 , UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER : 3 , UNKNOWN_ESCAPE_SEQUENCE : 4 , INVALID_UNICODE_ESCAPE_SEQUENCE : 5 , UNBALANCED_CLOSING_BRACE : 6 , UNTERMINATED_CLOSING_BRACE : 7 , EMPTY_PLACEHOLDER : 8 , NOT_ALLOW_NEST_PLACEHOLDER : 9 , INVALID_LINKED_FORMAT : 10 , MUST_HAVE_MESSAGES_IN_PLURAL : 11 , UNEXPECTED_EMPTY_LINKED_MODIFIER : 12 , UNEXPECTED_EMPTY_LINKED_KEY : 13 , UNEXPECTED_LEXICAL_ANALYSIS : 14 , UNHANDLED_CODEGEN_NODE_TYPE : 15 , UNHANDLED_MINIFIER_NODE_TYPE : 16 , __EXTEND_POINT__ : 17 }, Mc = {[ pA . EXPECTED_TOKEN ] : "Expected token: '{0}'" ,[ pA . INVALID_TOKEN_IN_PLACEHOLDER ] : "Invalid token in placeholder: '{0}'" ,[ pA . UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER ] : "Unterminated single quote in placeholder" ,[ pA . UNKNOWN_ESCAPE_SEQUENCE ] : "Unknown escape sequence: \\{0}" ,[ pA . INVALID_UNICODE_ESCAPE_SEQUENCE ] : "Invalid unicode escape sequence: {0}" ,[ pA . UNBALANCED_CLOSING_BRACE ] : "Unbalanced closing brace" ,[ pA . UNTERMINATED_CLOSING_BRACE ] : "Unterminated closing brace" ,[ pA . EMPTY_PLACEHOLDER ] : "Empty placeholder" ,[ pA . NOT_ALLOW_NEST_PLACEHOLDER ] : "Not allowed nest placeholder" ,[ pA . INVALID_LINKED_FORMAT ] : "Invalid linked format" ,[ pA . MUST_HAVE_MESSAGES_IN_PLURAL ] : "Plural must have messages" ,[ pA . UNEXPECTED_EMPTY_LINKED_MODIFIER ] : "Unexpected empty linked modifier" ,[ pA . UNEXPECTED_EMPTY_LINKED_KEY ] : "Unexpected empty linked key" ,[ pA . UNEXPECTED_LEXICAL_ANALYSIS ] : "Unexpected lexical analysis in token: '{0}'" ,[ pA . UNHANDLED_CODEGEN_NODE_TYPE ] : "unhandled codegen node type: '{0}'" ,[ pA . UNHANDLED_MINIFIER_NODE_TYPE ] : "unhandled mimifier node type: '{0}'" }; function Li ( A , e , t = {}){ const { domain : i , messages : n , args : o } = t , r = aC (( n || Mc )[ A ] || "" ,... o || []), g = new SyntaxError ( String ( r )); return g . code = A , e && ( g . location = e ), g . domain = i , g } function xc ( A ){ throw A } const Bt = " " , Jc = "\r" , de = `
` , Tc = "\u2028" , Hc = "\u2029" ; function Yc ( A ){ const e = A ; let t = 0 , i = 1 , n = 1 , o = 0 ; const r = N => e [ N ] === Jc && e [ N + 1 ] === de , g = N => e [ N ] === de , s = N => e [ N ] === Hc , a = N => e [ N ] === Tc , I = N => r ( N ) || g ( N ) || s ( N ) || a ( N ), l = ()=> t , C = ()=> i , Q = ()=> n , E = ()=> o , f = N => r ( N ) || s ( N ) || a ( N ) ? de : e [ N ], h = ()=> f ( t ), u = ()=> f ( t + o ); function p (){ return o = 0 , I ( t ) && ( i ++ , n = 0 ), r ( t ) && t ++ , t ++ , n ++ , e [ t ]} function c (){ return r ( t + o ) && o ++ , o ++ , e [ t + o ]} function d (){ t = 0 , i = 1 , n = 1 , o = 0 } function w ( N = 0 ){ o = N } function F (){ const N = t + o ; for (; N !== t ;) p (); o = 0 } return { index : l , line : C , column : Q , peekOffset : E , charAt : f , currentChar : h , currentPeek : u , next : p , peek : c , reset : d , resetPeek : w , skipToPeek : F }} const bt = void 0 , _c = "." , Qs = "'" , Kc = "tokenizer" ; function Pc ( A , e = {}){ const t = e . location !==! 1 , i = Yc ( A ), n = ()=> i . index (), o = ()=> Rc ( i . line (), i . column (), i . index ()), r = o (), g = n (), s = { currentType : 14 , offset : g , startLoc : r , endLoc : r , lastType : 14 , lastOffset : g , lastStartLoc : r , lastEndLoc : r , braceNest : 0 , inLinked :! 1 , text : "" }, a = ()=> s ,{ onError : I } = e ; function l ( m , y , x ,... K ){ const nA = a (); if ( y . column += x , y . offset += x , I ){ const z = t ? oo ( nA . startLoc , y ) : null , U = Li ( m , z ,{ domain : Kc , args : K }); I ( U )}} function C ( m , y , x ){ m . endLoc = o (), m . currentType = y ; const K = { type : y }; return t && ( K . loc = oo ( m . startLoc , m . endLoc )), x != null && ( K . value = x ), K } const Q = m => C ( m , 14 ); function E ( m , y ){ return m . currentChar () === y ? ( m . next (), y ) : ( l ( pA . EXPECTED_TOKEN , o (), 0 , y ), "" )} function f ( m ){ let y = "" ; for (; m . currentPeek () === Bt || m . currentPeek () === de ;) y += m . currentPeek (), m . peek (); return y } function h ( m ){ const y = f ( m ); return m . skipToPeek (), y } function u ( m ){ if ( m === bt ) return ! 1 ; const y = m . charCodeAt ( 0 ); return y >= 97 && y <= 122 || y >= 65 && y <= 90 || y === 95 } function p ( m ){ if ( m === bt ) return ! 1 ; const y = m . charCodeAt ( 0 ); return y >= 48 && y <= 57 } function c ( m , y ){ const { currentType : x } = y ; if ( x !== 2 ) return ! 1 ; f ( m ); const K = u ( m . currentPeek ()); return m . resetPeek (), K } function d ( m , y ){ const { currentType : x } = y ; if ( x !== 2 ) return ! 1 ; f ( m ); const K = m . currentPeek () === "-" ? m . peek () : m . currentPeek (), nA = p ( K ); return m . resetPeek (), nA } function w ( m , y ){ const { currentType : x } = y ; if ( x !== 2 ) return ! 1 ; f ( m ); const K = m . currentPeek () === Qs ; return m . resetPeek (), K } function F ( m , y ){ const { currentType : x } = y ; if ( x !== 8 ) return ! 1 ; f ( m ); const K = m . currentPeek () === "." ; return m . resetPeek (), K } function N ( m , y ){ const { currentType : x } = y ; if ( x !== 9 ) return ! 1 ; f ( m ); const K = u ( m . currentPeek ()); return m . resetPeek (), K } function G ( m , y ){ const { currentType : x } = y ; if ( ! ( x === 8 || x === 12 )) return ! 1 ; f ( m ); const K = m . currentPeek () === ":" ; return m . resetPeek (), K } function P ( m , y ){ const { currentType : x } = y ; if ( x !== 10 ) return ! 1 ; const K = ()=>{ const z = m . currentPeek (); return z === "{" ? u ( m . peek ()) : z === "@" || z === "%" || z === "|" || z === ":" || z === "." || z === Bt ||! z ?! 1 : z === de ? ( m . peek (), K ()) : L ( m , ! 1 )}, nA = K (); return m . resetPeek (), nA } function b ( m ){ f ( m ); const y = m . currentPeek () === "|" ; return m . resetPeek (), y } function R ( m ){ const y = f ( m ), x = m . currentPeek () === "%" && m . peek () === "{" ; return m . resetPeek (),{ isModulo : x , hasSpace : y . length > 0 }} function L ( m , y =! 0 ){ const x = ( nA =! 1 , z = "" , U =! 1 )=>{ const O = m . currentPeek (); return O === "{" ? z === "%" ?! 1 : nA : O === "@" ||! O ? z === "%" ?! 0 : nA : O === "%" ? ( m . peek (), x ( nA , "%" , ! 0 )) : O === "|" ? z === "%" || U ?! 0 :! ( z === Bt || z === de ) : O === Bt ? ( m . peek (), x ( ! 0 , Bt , U )) : O === de ? ( m . peek (), x ( ! 0 , de , U )) :! 0 }, K = x (); return y && m . resetPeek (), K } function cA ( m , y ){ const x = m . currentChar (); return x === bt ? bt : y ( x ) ? ( m . next (), x ) : null } function dA ( m ){ const y = m . charCodeAt ( 0 ); return y >= 97 && y <= 122 || y >= 65 && y <= 90 || y >= 48 && y <= 57 || y === 95 || y === 36 } function CA ( m ){ return cA ( m , dA )} function iA ( m ){ const y = m . charCodeAt ( 0 ); return y >= 97 && y <= 122 || y >= 65 && y <= 90 || y >= 48 && y <= 57 || y === 95 || y === 36 || y === 45 } function X ( m ){ return cA ( m , iA )} function eA ( m ){ const y = m . charCodeAt ( 0 ); return y >= 48 && y <= 57 } function fA ( m ){ return cA ( m , eA )} function DA ( m ){ const y = m . charCodeAt ( 0 ); return y >= 48 && y <= 57 || y >= 65 && y <= 70 || y >= 97 && y <= 102 } function Y ( m ){ return cA ( m , DA )} function q ( m ){ let y = "" , x = "" ; for (; y = fA ( m );) x += y ; return x } function gA ( m ){ h ( m ); const y = m . currentChar (); return y !== "%" && l ( pA . EXPECTED_TOKEN , o (), 0 , y ), m . next (), "%" } function FA ( m ){ let y = "" ; for (;;){ const x = m . currentChar (); if ( x === "{" || x === "}" || x === "@" || x === "|" ||! x ) break ; if ( x === "%" ) if ( L ( m )) y += x , m . next (); else break ; else if ( x === Bt || x === de ) if ( L ( m )) y += x , m . next (); else { if ( b ( m )) break ; y += x , m . next ()} else y += x , m . next ()} return y } function LA ( m ){ h ( m ); let y = "" , x = "" ; for (;
`,o=e.needIndent?e.needIndent:t!=="arrow",r=A.helpers||[],g=AE(A,{filename:i,breakLineCode:n,needIndent:o});g.push(t==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),g.indent(o),r.length>0&&(g.push(` const { $ { CC ( r . map ( I => ` ${ I } : _ ${ I } ` ), ", " )} } = ctx `),g.newline()),g.push("return "),Fi(g,A),g.deindent(o),g.push("}"),delete A.helpers;const{code:s,map:a}=g.context();return{ast:A,code:s,map:a?a.toJSON():void 0}};function rE(A,e={}){const t=IC({},e),i=!!t.jit,n=!!t.minify,o=t.optimize==null?!0:t.optimize,g=qc(t).parse(A);return i?(o&&Xc(g),n&&ci(g),{ast:g,code:""}):(Zc(g,t),oE(g,t))}/*!
2026-01-16 14:52:40 +08:00
* core-base v9.14.5
* (c) 2025 kazuya kawaguchi
* Released under the MIT License.
2026-01-19 11:30:28 +08:00
*/function gE(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(ft().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(ft().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(ft().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function st(A){return UA(A)&&ag(A)===0&&(He(A,"b")||He(A,"body"))}const lC=["b","body"];function sE(A){return Wt(A,lC)}const BC=["c","cases"];function aE(A){return Wt(A,BC,[])}const QC=["s","static"];function IE(A){return Wt(A,QC)}const cC=["i","items"];function CE(A){return Wt(A,cC,[])}const EC=["t","type"];function ag(A){return Wt(A,EC)}const uC=["v","value"];function bn(A,e){const t=Wt(A,uC);if(t!=null)return t;throw rn(e)}const hC=["m","modifier"];function lE(A){return Wt(A,hC)}const fC=["k","key"];function BE(A){const e=Wt(A,fC);if(e)return e;throw rn(6)}function Wt(A,e,t){for(let i=0;i<e.length;i++){const n=e[i];if(He(A,n)&&A[n]!=null)return A[n]}return t}const dC=[...lC,...BC,...QC,...cC,...fC,...hC,...uC,...EC];function rn(A){return new Error(` unhandled node type : $ { A } `)}const qt=[];qt[0]={w:[0],i:[3,0],"[":[4],o:[7]};qt[1]={w:[1],".":[2],"[":[4],o:[7]};qt[2]={w:[2],i:[3,0],0:[3,0]};qt[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]};qt[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]};qt[5]={"'":[4,0],o:8,l:[5,0]};qt[6]={'"':[4,0],o:8,l:[6,0]};const QE=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function cE(A){return QE.test(A)}function EE(A){const e=A.charCodeAt(0),t=A.charCodeAt(A.length-1);return e===t&&(e===34||e===39)?A.slice(1,-1):A}function uE(A){if(A==null)return"o";switch(A.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return A;case 95:case 36:case 45:return"i";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"w"}return"i"}function hE(A){const e=A.trim();return A.charAt(0)==="0"&&isNaN(parseInt(A))?!1:cE(e)?EE(e):"*"+e}function fE(A){const e=[];let t=-1,i=0,n=0,o,r,g,s,a,I,l;const C=[];C[0]=()=>{r===void 0?r=g:r+=g},C[1]=()=>{r!==void 0&&(e.push(r),r=void 0)},C[2]=()=>{C[0](),n++},C[3]=()=>{if(n>0)n--,i=4,C[0]();else{if(n=0,r===void 0||(r=hE(r),r===!1))return!1;C[1]()}};function Q(){const E=A[t+1];if(i===5&&E==="'"||i===6&&E==='"')return t++,g="\\"+E,C[0](),!0}for(;i!==null;)if(t++,o=A[t],!(o==="\\"&&Q())){if(s=uE(o),l=qt[i],a=l[s]||l.l||8,a===8||(i=a[0],a[1]!==void 0&&(I=C[a[1]],I&&(g=o,I()===!1))))return;if(i===7)return e}}const us=new Map;function dE(A,e){return UA(A)?A[e]:null}function pE(A,e){if(!UA(A))return null;let t=us.get(e);if(t||(t=fE(e),t&&us.set(e,t)),!t)return null;const i=t.length;let n=A,o=0;for(;o<i;){const r=t[o];if(dC.includes(r)&&st(n))return null;const g=n[r];if(g===void 0||VA(n))return null;n=g,o++}return n}const mE=A=>A,yE=A=>"",wE="text",DE=A=>A.length===0?"":bc(A),kE=Sc;function hs(A,e){return A=Math.abs(A),e===2?A?A>1?1:0:1:A?Math.min(A,2):0}function vE(A){const e=ee(A.pluralIndex)?A.pluralIndex:-1;return A.named&&(ee(A.named.count)||ee(A.named.n))?ee(A.named.count)?A.named.count:ee(A.named.n)?A.named.n:e:e}function FE(A,e){e.count||(e.count=A),e.n||(e.n=A)}function SE(A={}){const e=A.locale,t=vE(A),i=UA(A.pluralRules)&&rA(e)&&VA(A.pluralRules[e])?A.pluralRules[e]:hs,n=UA(A.pluralRules)&&rA(e)&&VA(A.pluralRules[e])?hs:void 0,o=u=>u[i(t,u.length,n)],r=A.list||[],g=u=>r[u],s=A.named||YA();ee(A.pluralIndex)&&FE(t,s);const a=u=>s[u];function I(u){const p=VA(A.messages)?A.messages(u):UA(A.messages)?A.messages[u]:!1;return p||(A.parent?A.parent.message(u):yE)}const l=u=>A.modifiers?A.modifiers[u]:mE,C=vA(A.processor)&&VA(A.processor.normalize)?A.processor.normalize:DE,Q=vA(A.processor)&&VA(A.processor.interpolate)?A.processor.interpolate:kE,E=vA(A.processor)&&rA(A.processor.type)?A.processor.type:wE,h={list:g,named:a,plural:o,linked:(u,...p)=>{const[c,d]=p;let w="text",F="";p.length===1?UA(c)?(F=c.modifier||F,w=c.type||w):rA(c)&&(F=c||F):p.length===2&&(rA(c)&&(F=c||F),rA(d)&&(w=d||w));const N=I(u)(h),G=w==="vnode"&&qA(N)&&F?N[0]:N;return F?l(F)(G,w):G},message:I,type:E,interpolate:Q,normalize:C,values:Be(YA(),r,s)};return h}let gn=null;function bE(A){gn=A}f
2026-01-16 14:52:40 +08:00
* vue-i18n v9.14.5
* (c) 2025 kazuya kawaguchi
* Released under the MIT License.
2026-01-19 11:30:28 +08:00
*/const tu="9.14.5";function iu(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(ft().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(ft().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_JIT_COMPILATION__!="boolean"&&(ft().__INTLIFY_JIT_COMPILATION__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(ft().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(ft().__INTLIFY_PROD_DEVTOOLS__=!1)}const nu=UE.__EXTEND_POINT__,Qt=Fo(nu);Qt(),Qt(),Qt(),Qt(),Qt(),Qt(),Qt(),Qt(),Qt();const LC=Ye.__EXTEND_POINT__,we=Fo(LC),re={UNEXPECTED_RETURN_TYPE:LC,INVALID_ARGUMENT:we(),MUST_BE_CALL_SETUP_TOP:we(),NOT_INSTALLED:we(),NOT_AVAILABLE_IN_LEGACY_MODE:we(),REQUIRED_VALUE:we(),INVALID_VALUE:we(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:we(),NOT_INSTALLED_WITH_PROVIDE:we(),UNEXPECTED_ERROR:we(),NOT_COMPATIBLE_LEGACY_VUE_I18N:we(),BRIDGE_SUPPORT_VUE_2_ONLY:we(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:we(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:we(),__EXTEND_POINT__:we()};function Ie(A,...e){return Li(A,null,void 0)}const Dr=Vt("__translateVNode"),kr=Vt("__datetimeParts"),vr=Vt("__numberParts"),UC=Vt("__setPluralRules"),MC=Vt("__injectWithOption"),Fr=Vt("__dispose");function sn(A){if(!UA(A)||st(A))return A;for(const e in A)if(He(A,e))if(!e.includes("."))UA(A[e])&&sn(A[e]);else{const t=e.split("."),i=t.length-1;let n=A,o=!1;for(let r=0;r<i;r++){if(t[r]==="__proto__")throw new Error(` unsafe key : $ { t [ r ]} `);if(t[r]in n||(n[t[r]]=YA()),!UA(n[t[r]])){o=!0;break}n=n[t[r]]}if(o||(st(n)?dC.includes(t[i])||delete A[e]:(n[t[i]]=A[e],delete A[e])),!st(n)){const r=n[t[i]];UA(r)&&sn(r)}}return A}function bo(A,e){const{messages:t,__i18n:i,messageResolver:n,flatJson:o}=e,r=vA(t)?t:qA(i)?YA():{[A]:YA()};if(qA(i)&&i.forEach(g=>{if("locale"in g&&"resource"in g){const{locale:s,resource:a}=g;s?(r[s]=r[s]||YA(),Kn(a,r[s])):Kn(a,r)}else rA(g)&&Kn(JSON.parse(g),r)}),n==null&&o)for(const g in r)He(r,g)&&sn(r[g]);return r}function xC(A){return A.type}function JC(A,e,t){let i=UA(e.messages)?e.messages:YA();"__i18nGlobal"in t&&(i=bo(A.locale.value,{messages:i,__i18n:t.__i18nGlobal}));const n=Object.keys(i);n.length&&n.forEach(o=>{A.mergeLocaleMessage(o,i[o])});{if(UA(e.datetimeFormats)){const o=Object.keys(e.datetimeFormats);o.length&&o.forEach(r=>{A.mergeDateTimeFormat(r,e.datetimeFormats[r])})}if(UA(e.numberFormats)){const o=Object.keys(e.numberFormats);o.length&&o.forEach(r=>{A.mergeNumberFormat(r,e.numberFormats[r])})}}}function Gs(A){return HA(fn,null,A,0)}const Ls="__INTLIFY_META__",Us=()=>[],ou=()=>!1;let Ms=0;function xs(A){return(e,t,i,n)=>A(t,i,vi()||void 0,n)}const ru=()=>{const A=vi();let e=null;return A&&(e=xC(A)[Ls])?{[Ls]:e}:null};function lg(A={},e){const{__root:t,__injectWithOption:i}=A,n=t===void 0,o=A.flatJson,r=no?EA:eg,g=!!A.translateExistCompatible;let s=RA(A.inheritLocale)?A.inheritLocale:!0;const a=r(t&&s?t.locale.value:rA(A.locale)?A.locale:Si),I=r(t&&s?t.fallbackLocale.value:rA(A.fallbackLocale)||qA(A.fallbackLocale)||vA(A.fallbackLocale)||A.fallbackLocale===!1?A.fallbackLocale:a.value),l=r(bo(a.value,A)),C=r(vA(A.datetimeFormats)?A.datetimeFormats:{[a.value]:{}}),Q=r(vA(A.numberFormats)?A.numberFormats:{[a.value]:{}});let E=t?t.missingWarn:RA(A.missingWarn)||Pt(A.missingWarn)?A.missingWarn:!0,f=t?t.fallbackWarn:RA(A.fallbackWarn)||Pt(A.fallbackWarn)?A.fallbackWarn:!0,h=t?t.fallbackRoot:RA(A.fallbackRoot)?A.fallbackRoot:!0,u=!!A.fallbackFormat,p=VA(A.missing)?A.missing:null,c=VA(A.missing)?xs(A.missing):null,d=VA(A.postTranslation)?A.postTranslation:null,w=t?t.warnHtmlMessage:RA(A.warnHtmlMessage)?A.warnHtmlMessage:!0,F=!!A.escapeParameter;const N=t?t.modifiers:vA(A.modifiers)?A.modifiers:{};let G=A.pluralRules||t&&t.pluralRules,P;P=(()=>{n&&ws(null);const U={version:tu,locale:a.value,fallbackLocale:I.value,messages:l.value,modifiers:N,pluralRules:G,missing:c===null?void 0:c,missingWarn:E,fallbackWarn:f,fallbackFormat:u,unresolving:!0,postTranslation:d===null?void 0:d,warnHtmlMessage:w,escapeParameter:F,messageResolver:A.messageResolver,messageCompiler:A.messageCompiler,__meta:{framew
2026-01-16 14:52:40 +08:00
The new version uses file deduplication technology to save storage space.
2026-01-19 11:30:28 +08:00
Please re-upload custom emoji images.` , incompatibleEmojiData : "Incompatible emoji data detected, please reconfigure" }, Dh = { authTokenMissing : "Authentication token not found" , checkingDeviceStatus : "Checking device status..." , deviceOfflineOrUnresponsive : "Device offline or unresponsive: {error}" , unableToGetDeviceStatus : "Unable to get device status" , initializingTransferService : "Initializing transfer service..." , initializeTransferFailed : "Failed to initialize transfer service: {error}" , settingDeviceDownloadUrl : "Setting device download URL..." , setDownloadUrlFailed : "Failed to set download URL: {error}" , rebootingDevice : "Rebooting device..." , waitingForDeviceReboot : "Waiting for device to reboot..." , deviceRebootTimeout : "Device reboot timeout (60 seconds)" , startingFileTransfer : "Starting file transfer..." , flashCompleted : "Flashing completed!" , onlineFlashFailed : "Online flashing failed: {error}" }, kh = { online : "Online" , offline : "Offline" , checking : "Checking..." , flashing : "Flashing..." , ready : "Ready" , chip : "Chip" , board : "Board" , flash : "Flash" , screen : "Screen" , signal : { unknown : "Unknown" , strong : "Strong" , medium : "Medium" , weak : "Weak" , none : "No Signal" }}, vh = { title : "Step 1: Chip Model and Screen Configuration" , loadingFromDevice : "Loading hardware configuration from device..." , loadedFromDevice : "Hardware configuration automatically loaded from device" , manualConfig : "Please configure hardware parameters manually" , loadingTitle : "Loading Device Configuration..." , loadingDesc : "Reading chip model and screen resolution from device" , autoLoadedTitle : "Device Configuration Auto-loaded" , chipModel : "Chip Model" , screenWidth : "Screen Width" , screenHeight : "Screen Height" , colorFormat : "Color Format:" , manualEdit : "Manual Configuration" , collapseManual : "Collapse Manual Configuration" , manualConfigTitle : "Manual Hardware Configuration" , next : "Next" , selectChip : "Select Chip" , chipRequired : "Chip Model" , widthRequired : "Screen Width" , heightRequired : "Screen Height" , loadingError : "Loading configuration error" , deviceOffline : "Device not connected or offline" , chipModelError : "Unable to get chip model, please enter manually" , resolutionError : "Unable to get screen resolution, please enter manually" , timeoutError : "Configuration loading timeout, please enter manually" , manualConfigDesc : "Unable to auto-read device configuration" , manualConfigHint : "Device not connected or offline, please manually input hardware configuration" , manualConfigRequired : "Please manually input hardware configuration" , resolutionFormatError : "Screen resolution format error" }, Fh = { title : "Step 2: Theme Design" , description : "Configure wake word, font, emoji and background to customize your Xiaozhi AI theme." , previous : "Previous" , next : "Next" , tabs : { wakeword : "Wake Word Config" , font : "Font Config" , emoji : "Emoji Collection" , background : "Chat Background" }}, Sh = { title : "Step 3: Preview" , description : "Preview the effect of your custom configuration on the actual device." , devicePreview : "Device Preview (1:1 Pixel Ratio)" , previewSettings : "Preview Settings" , previewText : "Preview Text" , defaultPreviewText : "Hi, I'm your friend Xiaozhi!" , currentEmotion : "Current Emotion" , themeMode : "Theme Mode" , lightMode : "Light" , darkMode : "Dark" , configSummary : "Configuration Summary" , wakeword : "Wake Word:" , font : "Font:" , loading : "Loading..." , emotion : "Emotion:" , skin : "Skin:" , previous : "Previous" , generate : "Generate assets.bin" , emotions : { neutral : "Neutral" , happy : "Happy" , laughing : "Laughing" , funny : "Funny" , sad : "Sad" , angry : "Angry" , crying : "Crying" , loving : "Loving" , embarrassed : "Embarrassed" , surprised : "Surprised" , shocked : "Shocked" , thinking : "Thinking" , winking : "Winking" , cool : "Cool" , relaxed : "Relaxed" , delicious : "Delicious" , kissy : "Kiss" , confident : "Confident" , sleepy : "Sleepy" , silly : "Silly" , confused : "Confused" }, noEmotionConfigured : "No emotion configured" , fontLoading : "Font loading..." , configureEmojiFirst : "Please configure emoji package in theme design first" , customFont : "Custom Font {size}px" , customEmoji : "Custom Emoji {count} images" , notConfigured : "Not configured" , skinLight : "Light {type}" , skinDark : "Dark {type}" , hideSubtitle : "Hide Subtitle:" , image : "Image" , color : "Color" }, bh = { title : "Chat Background Configuration" , descriptio
2026-01-16 14:52:40 +08:00
新版本使用文件去重技术 , 可以节省存储空间 。
2026-01-19 11:30:28 +08:00
请重新上传自定义表情图片 。 `,incompatibleEmojiData:"检测到不兼容的表情数据,请重新配置"},_h={authTokenMissing:"未找到认证令牌",checkingDeviceStatus:"检查设备状态...",deviceOfflineOrUnresponsive:"设备离线或无响应: {error}",unableToGetDeviceStatus:"无法获取设备状态",initializingTransferService:"初始化传输服务...",initializeTransferFailed:"初始化传输服务失败: {error}",settingDeviceDownloadUrl:"设置设备下载URL...",setDownloadUrlFailed:"设置下载URL失败: {error}",rebootingDevice:"重启设备...",waitingForDeviceReboot:"等待设备重启...",deviceRebootTimeout:"等待设备重启超时(60秒)",startingFileTransfer:"开始传输文件...",flashCompleted:"烧录完成!",onlineFlashFailed:"在线烧录失败: {error}"},Kh={online:"在线",offline:"离线",checking:"检查中...",flashing:"烧录中...",ready:"就绪",chip:"芯片",board:"开发板",flash:"Flash",screen:"屏幕",signal:{unknown:"未知",strong:"强",medium:"中等",weak:"弱",none:"无信号"}},Ph={title:"步骤 1: 芯片型号和屏幕配置",loadingFromDevice:"正在从设备读取硬件配置...",loadedFromDevice:"已从设备自动读取硬件配置",manualConfig:"请手动配置硬件参数",loadingTitle:"正在加载设备配置...",loadingDesc:"从设备读取芯片型号和屏幕分辨率",autoLoadedTitle:"设备配置已自动加载",chipModel:"芯片型号",screenWidth:"屏幕宽度",screenHeight:"屏幕高度",colorFormat:"颜色格式:",manualEdit:"手动修改配置",collapseManual:"收起手动配置",manualConfigTitle:"手动配置硬件参数",next:"下一步",selectChip:"请选择芯片",chipRequired:"芯片型号",widthRequired:"屏幕宽度",heightRequired:"屏幕高度",loadingError:"加载配置时发生错误",deviceOffline:"设备未连接或离线",chipModelError:"无法获取芯片型号,请手动输入",resolutionError:"无法获取屏幕分辨率,请手动输入",timeoutError:"加载设备配置超时,请手动输入",manualConfigDesc:"无法自动读取设备配置",manualConfigHint:"设备未连接或离线,请手动输入硬件配置",manualConfigRequired:"请手动输入硬件配置",resolutionFormatError:"屏幕分辨率格式错误"},Oh={title:"步骤 2: 主题设计",description:"配置唤醒词、字体、表情和背景来自定义您的小智AI主题。",previous:"上一步",next:"下一步",tabs:{wakeword:"唤醒词配置",font:"字体配置",emoji:"表情集合",background:"聊天背景"}},Vh={title:"步骤 3: 效果预览",description:"预览您的自定义配置在实际设备上的效果。",devicePreview:"设备预览 (1:1 像素比例)",previewSettings:"预览设置",previewText:"预览文字",defaultPreviewText:"你好,我是你的朋友小智!",currentEmotion:"当前表情",themeMode:"主题模式",lightMode:"浅色",darkMode:"深色",configSummary:"配置摘要",wakeword:"唤醒词:",font:"字体:",loading:"加载中...",emotion:"表情:",skin:"皮肤:",previous:"上一步",generate:"生成 assets.bin",emotions:{neutral:"默认",happy:"开心",laughing:"大笑",funny:"搞笑",sad:"伤心",angry:"生气",crying:"哭泣",loving:"喜爱",embarrassed:"尴尬",surprised:"惊讶",shocked:"震惊",thinking:"思考",winking:"眨眼",cool:"酷炫",relaxed:"放松",delicious:"美味",kissy:"飞吻",confident:"自信",sleepy:"困倦",silly:"调皮",confused:"困惑"},noEmotionConfigured:"未配置表情",fontLoading:"字体加载中...",configureEmojiFirst:"请先在主题设计中配置表情包",customFont:"自定义字体 {size}px",customEmoji:"自定义表情 {count}张",notConfigured:"未配置",skinLight:"浅色{type}",skinDark:"深色{type}",hideSubtitle:"隐藏字幕:",image:"图片",color:"颜色"},Wh={title:"聊天背景配置",description:"配置浅色模式和深色模式的聊天背景,支持纯色或自定义图片。",lightMode:"浅色模式背景",darkMode:"深色模式背景",solidBackground:"纯色背景",imageBackground:"图片背景",backgroundColor:"背景颜色:",textColor:"文字颜色:",backgroundI
2026-01-16 14:52:40 +08:00
新版本使用檔案去重技術,可以節省儲存空間。
2026-01-19 11:30:28 +08:00
請重新上傳自訂表情圖片。` , incompatibleEmojiData : "檢測到不相容的表情資料,請重新配置" }, sf = { authTokenMissing : "未找到認證令牌" , checkingDeviceStatus : "檢查設備狀態..." , deviceOfflineOrUnresponsive : "設備離線或無響應: {error}" , unableToGetDeviceStatus : "無法獲取設備狀態" , initializingTransferService : "初始化傳輸服務..." , initializeTransferFailed : "初始化傳輸服務失敗: {error}" , settingDeviceDownloadUrl : "設置設備下載URL..." , setDownloadUrlFailed : "設置下載URL失敗: {error}" , rebootingDevice : "重啟設備..." , waitingForDeviceReboot : "等待設備重啟..." , deviceRebootTimeout : "等待設備重啟超時(60秒)" , startingFileTransfer : "開始檔案傳輸..." , flashCompleted : "燒錄完成!" , onlineFlashFailed : "線上燒錄失敗: {error}" }, af = { online : "線上" , offline : "離線" , checking : "檢查中..." , flashing : "燒錄中..." , ready : "就緒" , chip : "晶片" , board : "開發板" , flash : "Flash" , screen : "螢幕" , signal : { unknown : "未知" , strong : "強" , medium : "中等" , weak : "弱" , none : "無訊號" }}, If = { title : "步驟 1: 晶片型號和螢幕配置" , loadingFromDevice : "正在從設備讀取硬體配置..." , loadedFromDevice : "已從設備自動讀取硬體配置" , manualConfig : "請手動配置硬體參數" , loadingTitle : "正在載入設備配置..." , loadingDesc : "從設備讀取晶片型號和螢幕解析度" , autoLoadedTitle : "設備配置已自動載入" , chipModel : "晶片型號" , screenWidth : "螢幕寬度" , screenHeight : "螢幕高度" , colorFormat : "顏色格式:" , manualEdit : "手動修改配置" , collapseManual : "收起手動配置" , manualConfigTitle : "手動配置硬體參數" , next : "下一步" , selectChip : "請選擇晶片" , chipRequired : "晶片型號" , widthRequired : "螢幕寬度" , heightRequired : "螢幕高度" , loadingError : "載入配置時發生錯誤" , deviceOffline : "設備未連接或離線" , chipModelError : "無法獲取晶片型號,請手動輸入" , resolutionError : "無法獲取螢幕解析度,請手動輸入" , timeoutError : "載入設備配置超時,請手動輸入" , manualConfigDesc : "無法自動讀取設備配置" , manualConfigHint : "設備未連接或離線,請手動輸入硬體配置" , manualConfigRequired : "請手動輸入硬體配置" , resolutionFormatError : "螢幕解析度格式錯誤" }, Cf = { title : "步驟 2: 主題設計" , description : "配置喚醒詞、字體、表情和背景來自訂您的小智AI主題。" , previous : "上一步" , next : "下一步" , tabs : { wakeword : "喚醒詞配置" , font : "字體配置" , emoji : "表情集合" , background : "聊天背景" }}, lf = { title : "步驟 3: 效果預覽" , description : "預覽您的自訂配置在實際設備上的效果。" , devicePreview : "設備預覽 (1:1 像素比例)" , previewSettings : "預覽設定" , previewText : "預覽文字" , defaultPreviewText : "你好,我是你的朋友小智!" , currentEmotion : "當前表情" , themeMode : "主題模式" , lightMode : "淺色" , darkMode : "深色" , configSummary : "配置摘要" , wakeword : "喚醒詞:" , font : "字體:" , loading : "載入中..." , emotion : "表情:" , skin : "皮膚:" , previous : "上一步" , generate : "生成 assets.bin" , emotions : { neutral : "預設" , happy : "開心" , laughing : "大笑" , funny : "搞笑" , sad : "傷心" , angry : "生氣" , crying : "哭泣" , loving : "喜愛" , embarrassed : "尷尬" , surprised : "驚訝" , shocked : "震驚" , thinking : "思考" , winking : "眨眼" , cool : "酷炫" , relaxed : "放鬆" , delicious : "美味" , kissy : "飛吻" , confident : "自信" , sleepy : "睏倦" , silly : "調皮" , confused : "困惑" }, noEmotionConfigured : "未配置表情" , fontLoading : "字體載入中..." , configureEmojiFirst : "請先在主題設計中配置表情包" , customFont : "自訂字體 {size}px" , customEmoji : "自訂表情 {count}張" , notConfigured : "未配置" , skinLight : "淺色{type}" , skinDark : "深色{type}" , hideSubtitle : "隱藏字幕:" , image : "圖片" , color : "顏色" }, Bf = { title : "聊天背景配置" , description : "配置淺色模式和深色模式的聊天背景,支援純色或自訂圖片。" , lightMode : "淺色模式背景" , darkMode : "深色模式背景" , solidBackground : "純色背景" , imageBackground : "圖片背景" , backgroundColor : "背景顏色:" , textColor : "文字顏色:" , backgroundImage : "背景圖片
2026-01-16 14:52:40 +08:00
新しいバージョンはファイル重複除去技術を使用してストレージスペースを節約します。
2026-01-19 11:30:28 +08:00
カスタム絵文字画像を再アップロードしてください。`,incompatibleEmojiData:" 互換性のない絵文字データを検出しました 、 再設定してください "},kf={authTokenMissing:" 認証トークンが見つかりません ",checkingDeviceStatus:" デバイスの状態を確認中 ... ",deviceOfflineOrUnresponsive:" デバイスがオフラインまたは応答なし : { error } ",unableToGetDeviceStatus:" デバイスの状態を取得できません ",initializingTransferService:" 転送サービスを初期化中 ... ",initializeTransferFailed:" 転送サービスの初期化に失敗しました : { error } ",settingDeviceDownloadUrl:" デバイスダウンロードURLを設定中 ... ",setDownloadUrlFailed:" ダウンロードURLの設定に失敗しました : { error } ",rebootingDevice:" デバイスを再起動中 ... ",waitingForDeviceReboot:" デバイスの再起動を待機中 ... ",deviceRebootTimeout:" デバイスの再起動タイムアウト ( 60 秒 ) ",startingFileTransfer:" ファイル転送を開始中 ... ",flashCompleted:" 書き込み完了 ! ",onlineFlashFailed:" オンライン書き込みに失敗しました : { error } "},vf={online:" オンライン ",offline:" オフライン ",checking:" 確認中 ... ",flashing:" 書き込み中 ... ",ready:" 準備完了 ",chip:" チップ ",board:" ボード ",flash:" Flash ",screen:" 画面 ",signal:{unknown:" 不明 ",strong:" 強 ",medium:" 中 ",weak:" 弱 ",none:" 信号なし "}},Ff={title:" ステップ1 : チップモデルと画面設定 ",loadingFromDevice:" デバイスからハードウェア設定を読み込み中 ... ",loadedFromDevice:" デバイスからハードウェア設定が自動読み込みされました ",manualConfig:" ハードウェアパラメータを手動で設定してください ",loadingTitle:" デバイス設定を読み込み中 ... ",loadingDesc:" デバイスからチップモデルと画面解像度を読み取り中 ",autoLoadedTitle:" デバイス設定が自動読み込みされました ",chipModel:" チップモデル ",screenWidth:" 画面幅 ",screenHeight:" 画面高 ",colorFormat:" 色形式 : ",manualEdit:" 手動設定 ",collapseManual:" 手動設定を折りたたむ ",manualConfigTitle:" 手動ハードウェア設定 ",next:" 次へ ",selectChip:" チップを選択 ",chipRequired:" チップモデル ",widthRequired:" 画面幅 ",heightRequired:" 画面高 ",loadingError:" 設定読み込みエラー ",deviceOffline:" デバイスが接続されていないかオフラインです ",chipModelError:" チップモデルを取得できません 、 手動で入力してください ",resolutionError:" 画面解像度を取得できません 、 手動で入力してください ",timeoutError:" 設定読み込みタイムアウト 、 手動で入力してください ",manualConfigDesc:" デバイスの設定を自動読み取りできません ",manualConfigHint:" デバイスが接続されていないかオフラインです 、 ハードウェア設定を手動で入力してください ",manualConfigRequired:" ハードウェア設定を手動で入力してください ",resolutionFormatError:" 画面解像度形式エラー "},Sf={title:" ステップ2 : テーマデザイン ",description:" ウェイクワード 、 フォント 、 絵文字 、 背景を設定して 、 小智AIテーマをカスタマイズします 。 ",previous:" 前へ ",next:" 次へ ",tabs:{wakeword:" ウェイクワード設定 ",font:" フォント設定 ",emoji:" 絵文字コレクション ",background:" チャット背景 "}},bf={title:" ステップ3 : プレビュー ",description:" 実際のデバイスでのカスタム設定の効果をプレビューします 。 ",devicePreview:" デバイスプレビュー ( 1 : 1 ピクセル比 ) ",previewSettings:" プレビュー設定 ",previewText:" プレビューテキスト ",defaultPreviewText:" こんにちは 、 私はあなたの友人 、 シャオズーです ! ",currentEmotion:" 現在の感情 ",themeMode:" テーマモード ",lightMode:" ライト ",darkMode:" ダーク ",configSummary:" 設定概要 ",wakeword:" ウェイクワード : ",font:" フォント : ",loading:" 読み込み中 ... ",emotion:" 感情 : ",skin:" ス
2026-01-16 14:52:40 +08:00
Phiên bản mới sử dụng công nghệ loại bỏ trùng lặp tệp để tiết kiệm không gian lưu trữ .
2026-01-19 11:30:28 +08:00
Vui lòng tải lại hình ảnh biểu tượng cảm xúc tùy chỉnh . `,incompatibleEmojiData:"Phát hiện dữ liệu biểu tượng cảm xúc không tương thích, vui lòng cấu hình lại"},Pf={authTokenMissing:"Không tìm thấy mã thông báo xác thực",checkingDeviceStatus:"Đang kiểm tra trạng thái thiết bị...",deviceOfflineOrUnresponsive:"Thiết bị ngoại tuyến hoặc không phản hồi: {error}",unableToGetDeviceStatus:"Không thể lấy trạng thái thiết bị",initializingTransferService:"Đang khởi tạo dịch vụ truyền tải...",initializeTransferFailed:"Khởi tạo dịch vụ truyền tải thất bại: {error}",settingDeviceDownloadUrl:"Đang thiết lập URL tải xuống thiết bị...",setDownloadUrlFailed:"Thiết lập URL tải xuống thất bại: {error}",rebootingDevice:"Đang khởi động lại thiết bị...",waitingForDeviceReboot:"Đang chờ thiết bị khởi động lại...",deviceRebootTimeout:"Hết thời gian chờ thiết bị khởi động lại (60 giây)",startingFileTransfer:"Đang bắt đầu truyền tải tệp...",flashCompleted:"Flash hoàn thành!",onlineFlashFailed:"Flash trực tuyến thất bại: {error}"},Of={online:"Trực tuyến",offline:"Ngoại tuyến",checking:"Đang kiểm tra...",flashing:"Đang flash...",ready:"Sẵn sàng",chip:"Chip",board:"Bo mạch",flash:"Flash",screen:"Màn hình",signal:{unknown:"Không xác định",strong:"Mạnh",medium:"Trung bình",weak:"Yếu",none:"Không có tín hiệu"}},Vf={title:"Bước 1: Cấu hình mô hình chip và màn hình",loadingFromDevice:"Đang tải cấu hình phần cứng từ thiết bị...",loadedFromDevice:"Cấu hình phần cứng được tải tự động từ thiết bị",manualConfig:"Vui lòng cấu hình các thông số phần cứng theo cách thủ công",loadingTitle:"Đang tải cấu hình thiết bị...",loadingDesc:"Đang đọc mô hình chip và độ phân giải màn hình từ thiết bị",autoLoadedTitle:"Cấu hình thiết bị được tải tự động",chipModel:"Mô hình chip",screenWidth:"Chiều rộng màn hình",screenHeight:"Chiều cao màn hình",colorFormat:"Định dạng màu:",manualEdit:"Cấu hình thủ công",collapseManual:"Thu gọn cấu hình thủ công",manualConfigTitle:"Cấu hình phần cứng thủ công",next:"Tiếp theo",selectChip:"Chọn chip",chipRequired:"Mô hình chip",widthRequired:"Chiều rộng màn hình",heightRequired:"Chiều cao màn hình",loadingError:"Lỗi tải cấu hình",deviceOffline:"Thiết bị chưa kết nối hoặc ngoại tuyến",chipModelError:"Không thể lấy mô hình chip, vui lòng nhập thủ công",resolutionError:"Không thể lấy độ phân giải màn hình, vui lòng nhập thủ công",timeoutError:"Hết thời gian tải cấu hình, vui lòng nhập thủ công",manualConfigDesc:"Không thể tự động đọc cấu hình thiết bị",manualConfigHint:"Thiết bị chưa kết nối hoặc ngoại tuyến, vui lòng nhập cấu hình phần cứng thủ công",manualConfigRequired:"Vui lòng nhập cấu hình phần cứng thủ công",resolutionFormatError:"Lỗi định dạng độ phân giải màn hình"},Wf={title:"Bước 2: Thiết kế chủ đề",description:"Cấu hình từ đánh thức, phông chữ, biểu tượng cảm xúc và nền để tùy chỉnh chủ đề Xiaozhi AI của bạn.",previous:"Trước đó",next:"Tiếp theo",tabs:{wakeword:"Cấu hình từ đánh thức",font:"Cấu hình phông chữ",emoji:"Bộ sưu tập biểu tượng cảm xúc",background:"Nền trò chuyện"}},qf={title:"Bước 3: Xem trước",description:"Xem trước hiệu ứng của cấu hình tùy chỉnh trên thiết bị thực tế.",devicePreview:"Xem trước thiết bị (tỷ lệ pixel 1:1)",previewSettings:"Cài đặt xem trước",previewText:"Văn bản xem trước",defaultPreviewText:"Xin chào, tôi là bạn của bạn Xiaozhi!",currentEmotion:"Cảm xúc hiện tại",themeMode:"Chế độ chủ đ
2026-01-16 14:52:40 +08:00
@font-face {
font-family: ' ${ L } ';
2026-01-19 11:30:28 +08:00
src: url(' ${ cA } ') format('truetype');
2026-01-16 14:52:40 +08:00
font-display: swap;
}
2026-01-19 11:30:28 +08:00
` , document . head . appendChild ( dA ), await document . fonts . load ( `16px " ${ L } "` ), g . value = L , r . value =! 0 } else if ( t . config . theme . font . custom . file ) try { const R = t . config . theme . font . custom . file ; if ( ! R || typeof R != "object" ||! R . size ) throw new Error ( "字体文件对象无效" ); const L = "CustomFontPreview" , cA = URL . createObjectURL ( R ), dA = document . createElement ( "style" ); dA . setAttribute ( "data-font-preview" , "true" ), dA . textContent = `
2026-01-16 14:52:40 +08:00
@font-face {
font-family: ' ${ L } ';
2026-01-19 11:30:28 +08:00
src: url(' ${ cA } ');
2026-01-16 14:52:40 +08:00
font-display: swap;
}
2026-01-19 11:30:28 +08:00
` , document . head . appendChild ( dA ), await document . fonts . load ( `16px " ${ L } "` ), g . value = L , r . value =! 0 } catch ( R ){ console . warn ( "自定义字体预览加载失败:" , R ), g . value = "Arial, sans-serif" , r . value =! 0 } else g . value = "system-ui" , r . value =! 0 } catch ( R ){ console . warn ( "Font loading failed:" , R ), g . value = "system-ui" , r . value =! 0 }}, h = ()=> r . value && g . value ? `" ${ g . value } ", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif` : '"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif' , u = b =>{ if ( t . config . theme . emoji . type === "preset" ) return `./static/twemoji ${ t . config . theme . emoji . preset === "twemoji64" ? "64" : "32" } / ${ b } .png` ; if ( t . config . theme . emoji . type === "custom" && t . config . theme . emoji . custom . images [ b ]) try { const R = t . config . theme . emoji . custom . images [ b ]; if ( R && typeof R == "object" && R . size ) return URL . createObjectURL ( R )} catch ( R ){ console . warn ( `表情图片预览加载失败 ( ${ b } ):` , R )} return null }, p = b =>{ const R = s . value . find ( L => L . key === b ); return R ? R . emoji : "😶" }, c = ()=>{ if ( t . config . theme . emoji . type === "preset" ) return ( t . config . theme . emoji . preset === "twemoji64" ? 64 : 32 ) + 16 ; if ( t . config . theme . emoji . custom . size ){ const b = Math . min ( t . config . theme . emoji . custom . size . width , t . config . theme . emoji . custom . size . height ); return Math . min ( b + 16 , 64 )} return 48 }, d = ()=> t . config . theme . emoji . type === "preset" ? t . config . theme . emoji . preset === "twemoji64" ? 64 : 32 : t . config . theme . emoji . custom . size ? Math . min ( t . config . theme . emoji . custom . size . width , t . config . theme . emoji . custom . size . height , 48 ) : 32 , w = b =>{ n . value = b }, F = ()=>{ const b = t . config . theme . wakeword ; return ! b || b . type === "none" ? e ( "wakewordConfig.noWakeword" ) : b . type === "preset" ? { wn9s_hilexin : "Hi,乐鑫" , wn9s_hiesp : "Hi,ESP" , wn9s_nihaoxiaozhi : "你好小智" , wn9_nihaoxiaozhi_tts : "你好小智" , wn9_alexa : "Alexa" , wn9_jarvis_tts : "Jarvis" }[ b . preset ] || b . preset : b . type === "custom" ? b . custom . name || e ( "wakewordConfig.customWakeword" ) : e ( "wakewordConfig.noWakeword" )}, N = ()=>{ if ( t . config . theme . font . type === "preset" ) return e ( "fontConfig.presetFontNames." + t . config . theme . font . preset ) || t . config . theme . font . preset ;{ const b = t . config . theme . font . custom ; return e ( "generateSummary.customFont" ,{ size : b . size })}}, G = ()=>{ if ( t . config . theme . emoji . type === "preset" && t . config . theme . emoji . preset ) return t . config . theme . emoji . preset === "twemoji64" ? "Twemoji 64× 64" : "Twemoji 32× 32" ; if ( t . config . theme . emoji . type === "custom" ){ const b = Object . keys ( t . config . theme . emoji . custom . images ). length ; return e ( "generateSummary.customEmoji" ,{ count : b })} else return t . config . theme . emoji . type === "none" ? e ( "emojiConfig.noEmojiPack" ) : e ( "generateSummary.notConfigured" )}, P = ()=>{ const b = t . config . theme . skin . light . backgroundType === "image" ? e ( "generateSummary.image" ) : e ( "generateSummary.color" ), R = t . config . theme . skin . dark . backgroundType === "image" ? e ( "generateSummary.image" ) : e ( "generateSummary.color" ); return e ( "generateSummary.skinLight" ,{ type : b }) + "/" + e ( "generateSummary.skinDark" ,{ type : R })}; return ae (()=> t . config . theme . font ,()=>{ f ()},{ deep :! 0 }), Ft ( async ()=>{ a . value . length > 0 ? n . value = a . value [ 0 ]. key : n . value = "" , await f ()}), Ci (()=>{ document . querySelectorAll ( "style[data-font-preview]" ). forEach ( R => R . remove ())}),( b , R )=>( H (), _ ( "div" , wy ,[ B ( "div" , null ,[ B ( "h2" , Dy , v ( b . $t ( "generateSummary.title" )), 1 ), B ( "p" , ky , v ( b . $t ( "generateSummary.description" )), 1 )]), B ( "div" , vy ,[ B ( "div" , Fy ,[ B ( "h3" , Sy , v ( b . $t ( "generateSummary.devicePreview" )), 1 ), B ( "div" , by ,[ B ( "div" , Ry ,[ B ( "div" , Ny ,[ B ( "div" , Gy ,[ B ( "div" ,{ style : WA ( l ()), class : "relative rounded-lg overflow-hidden border-2 border-gray-700 flex flex-col items-center justify-center" },[ B ( "div" ,{ style : WA ( C ()), class : "absolute inset-0" }, null , 4 ), B ( "div" , Ly ,[ B ( "div" , Uy ,[ n . value && a . value . length > 0 ? ( H (), _ ( "div" , My ,[ I . value ? ( H (), _ ( "img" ,{ key : 0 , src : I . value , alt : n . value , style : WA ( Q ()), class : "emoji-image" }, null , 12 , xy )) : ( H (), _ ( "div" ,{ key : 1 , style : WA ( Q ()), class : "emoji-fallback bg-gray-200 rounded-full flex items-center justify-center text-2xl" }, v ( p ( n . value )), 5 ))])) : ( H (), _ ( "div" , Jy ,[ B ( "div" ,{ style : WA ( Q ()), class : "emoji-placeholder flex items-center justify-center text-gray-400 border-2 border-dashed border-gray-300 rounded bg-gray-50" },[ B ( "div" , Ty ,[ B ( "div" , Hy , v ( A . config . theme . emoji . type === "none" ? "📦" : "😕" ), 1 ), B ( "div" , Yy , v ( A . co
`).join("");return this.charsetCache.set(e,r),r}catch(n){return console.error(` Failed to load charset $ { e } : `,n),null}}getCharsetContent(e){const t={};return(e==="latin"||e==="deepseek"||e==="gb2312")&&this.charsetCache.has(e)?this.charsetCache.get(e):e==="basic"?this.getCharsetContent("latin"):t[e]||""}async getCharsetContentAsync(e){if(e==="basic"&&(e="latin"),this.charsetCache.has(e))return this.charsetCache.get(e);if(e==="latin"||e==="deepseek"||e==="gb2312"||e==="qwen"){const t=await this.loadCharsetFromFile(e);if(t)return t}return this.getCharsetContent(e)}parseUnicodeRange(e){const t=[],i=e.split(",");for(const n of i){const o=n.trim();if(o)if(o.includes("-")){const[r,g]=o.split("-"),s=this.parseHexOrDec(r),a=this.parseHexOrDec(g);s!==null&&a!==null&&t.push(s,a,s)}else{const r=this.parseHexOrDec(o);r!==null&&t.push(r,r,r)}}return t}parseHexOrDec(e){const t=e.trim();if(t.startsWith("0x")||t.startsWith("0X")){const n=parseInt(t,16);return isNaN(n)?null:n}const i=parseInt(t,10);return isNaN(i)?null:i}async estimateSizeAsync(e){const{fontSize:t=20,bpp:i=4,charset:n="latin",symbols:o="",range:r=""}=e;let g=o.length;if(n==="full")g=65536;else if(n&&n!=="custom"){const I=await this.getCharsetContentAsync(n);g+=I.length}if(r){const I=this.parseUnicodeRange(r);for(let l=0;l<I.length;l+=3)g+=I[l+1]-I[l]+1}n!=="full"&&(g=Math.min(g,g*.8));const s=Math.ceil(t*t*i/8)+40,a=g*s+2048;return{characterCount:Math.floor(g),avgBytesPerChar:s,estimatedSize:a,formattedSize:this.formatBytes(a)}}estimateSize(e){const{fontSize:t=20,bpp:i=4,charset:n="latin",symbols:o="",range:r=""}=e;let g=o.length;if(n==="full")g=65536;else if(n&&n!=="custom"){const I=this.getCharsetContent(n);g+=I.length}if(r){const I=this.parseUnicodeRange(r);for(let l=0;l<I.length;l+=3)g+=I[l+1]-I[l]+1}n!=="full"&&(g=Math.min(g,g*.8));const s=Math.ceil(t*t*i/8)+40,a=g*s+2048;return{characterCount:Math.floor(g),avgBytesPerChar:s,estimatedSize:a,formattedSize:this.formatBytes(a)}}formatBytes(e){if(e===0)return"0 Bytes";const t=1024,i=["Bytes","KB","MB","GB"],n=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/Math.pow(t,n)).toFixed(2))+" "+i[n]}cleanup(){this.initialized=!1}}const oS=new nS;class rS{constructor(){this.models=new Map}addModelFile(e,t,i){this.models.has(e)||this.models.set(e,new Map),this.models.get(e).set(t,i)}async loadModelFromShare(e){try{let t=[],i="";if(e.startsWith("wn9"))t=["_MODEL_INFO_","wn9_data","wn9_index"],i=` . / static / wakenet_model / $ { e } / `;else if(e.startsWith("mn6")||e.startsWith("mn7"))t=["_MODEL_INFO_",` $ { e . substring ( 0 , 3 )} _data `,` $ { e . substring ( 0 , 3 )} _index `,"vocab"],i=` . / static / multinet_model / $ { e } / `,await this.loadFSTModel();else throw new Error(` Unknown model type : $ { e } `);let n=0;for(const o of t)try{const r=await fetch(` $ { i } $ { o } `);if(r.ok){const g=await r.arrayBuffer();this.addModelFile(e,o,g),n++}else console.warn(` 无法加载文件 : $ { o }, status : $ { r . status } `)}catch(r){console.warn(` 加载文件失败 : $ { o } `,r)}return n===t.length}catch(t){return console.error(` 加载模型失败 : $ { e } `,t),!1}}async loadFSTModel(){try{const e="fst";if(this.models.has(e))return!0;const t=["commands_cn.txt","commands_en.txt"],i="./static/multinet_model/fst/";let n=0;for(const o of t)try{const r=await fetch(` $ { i } $ { o } `);if(r.ok){const g=await r.arrayBuffer();this.addModelFile(e,o,g),n++}else console.warn(` 无法加载 FST 文件 : $ { o }, status : $ { r . status } `)}catch(r){console.warn(` 加载 FST 文件失败 : $ { o } `,r)}return n>0}catch(e){return console.error("加载 FST 模型失败",e),!1}}packString(e,t){const i=new Uint8Array(t),n=Math.min(e.length,t);for(let o=0;o<n;o++)i[o]=e.charCodeAt(o)&255;return i}packUint32(e){const t=new Uint8Array(4);return t[0]=e&255,t[1]=e>>8&255,t[2]=e>>16&255,t[3]=e>>24&255,t}packModels(){if(this.models.size===0)throw new Error("没有模型数据可打包");let e=0;const t=[];for(const[a,I]of Array.from(this.models.entries()).sort((l,C)=>l[0].localeCompare(C[0]))){e+=I.size;const l=Array.from(I.entries()).sort((C,Q)=>C[0].localeCompare(Q[0]));t.push({name:a,files:l})}const i=this.models.size;let n=4;for(const a of t)n+=3
Check: https://github.com/renzhezhilu/gifsicle-wasm-browser` }, testType ( A ){ return A instanceof Element ? "element" : Object . prototype . toString . call ( A ). replace ( /\[object\s(.+)\]/ , "$1" ). toLowerCase ()}, async textToUrl ( A ){ return this . worker ()}, loadCommand ( A ){ var e = this . testType ( A ); if ( A . length === 0 ) throw "<command> the content can not be blank" + this . errorLink (); if ( e === "array" ) return A . map ( t => t . replace ( /\n/gi , " " )); throw "<command> types:" + e + ", must be an array" + this . errorLink ()}, loadOne ( A ){ return new Promise ( async ( e , t )=>{ var i = this . testType ( A ); if ([ "string" ]. includes ( i )) fetch ( A ). then ( n =>{ if ( n . status !== 200 ) throw "<" + A + "> Url error!!!" + this . errorLink (); return n . arrayBuffer ()}). then ( n => e ( n )); else if ([ "blob" , "file" ]. includes ( i )) new Response ( A ). arrayBuffer (). then ( n => e ( n )); else { if ( ! [ "arraybuffer" ]. includes ( i )) throw "<input.file> types:" + i + ", only supports Url, blob, file, arraybuffer" + this . errorLink (); e ( A )}})}, loadFile ( A ){ return new Promise ( async ( e , t )=>{ var i = this . testType ( A ); if ( i !== "array" ) throw "<input> types:" + i + ", only supports Array" + this . errorLink (); if ( A . length === 0 ) throw "<input> the content can not be blank" + this . errorLink (); i = A . map ( n => this . loadOne ( n . file )), Promise . all ( i ). then ( function ( n ){ var o = A . map (( r , g )=>( r . file = n [ g ], r )); e ( o )}). catch ( function ( n ){})})}, loadFolder ( A ){ return new Promise ( async ( e , t )=>{ var i = this . testType ( A ); if ( ! [ "array" ]. includes ( i )) throw "<folder> types:" + i + ", only supports Array" + this . errorLink (); e ( A )})}}, run ( A = {}){ return new Promise ( async ( e , t )=>{ let { input : i = [], command : n = "" , folder : o = [], isStrict : r =! 1 , start : g = Q =>{}} = A ; var s = await this . tool . textToUrl (); let a = new Worker ( s ); var I = this . tool . loadCommand ( n ), l = await this . tool . loadFile ( i ), C = ( g ( l ), await this . tool . loadFolder ( o )); a . postMessage ({ data : l , command : I , folder : C , isStrict : r }), a . onmessage = async function ( Q ){ if ( ! Q . data || typeof Q . data == "string" ) return a . terminate (), void t ( Q . data ); let E = []; for ( let h = 0 ; h < Q . data . length ; h ++ ){ const u = Q . data [ h ]; var f ; u . name . includes ( ".txt" ) ? ( f = new File ([ u . file ], u . name ,{ type : "text/plain" }), E . push ( f )) : ( f = new File ([ u . file ], u . name ,{ type : "image/gif" }), E . push ( f ))} a . terminate (), e ( E )}, a . onerror = function ( Q ){ console . error ( Q ), a . terminate (), e ( null )}})}}; class sS { constructor ( e = {}){ this . quality = e . quality || 10 , this . debug = e . debug ||! 1 , this . scalingMode = e . scalingMode || "auto" , this . optimize = e . optimize !==! 1 , this . optimizationLevel = e . optimizationLevel || 2 } async scaleGif ( e , t = {}){ const { maxWidth : i , maxHeight : n , keepAspectRatio : o =! 0 , optimize : r = this . optimize , lossy : g = this . quality , loopCount : s = 0 } = t ; if ( ! i &&! n ) throw new Error ( "必须指定 maxWidth 或 maxHeight" ); try { let a ; o ? a = `--resize-fit ${ i || "_" } x ${ n || "_" } ` : a = `--resize ${ i || "_" } x ${ n || "_" } !` ; const I = []; I . push ( "-U" ), I . push ( a ), s >= 0 && I . push ( `--loopcount= ${ s } ` ), g && g > 0 && I . push ( `--lossy= ${ g } ` ), r && I . push ( `-O ${ this . optimizationLevel } ` ), I . push ( "1.gif" ), I . push ( "-o /out/output.gif" ); const l = I . join ( " " ); this . debug && ( console . log ( "GIF 缩放命令:" , l ), console . log ( "输入文件大小:" , e . size || "未知" )); const C = await xn . run ({ input : [{ file : e , name : "1.gif" }], command : [ l ]}); if ( ! C || C . length === 0 ) throw new Error ( "gifsicle 处理失败,未返回结果" ); const Q = C [ 0 ]; if ( this . debug && ( console . log ( "GIF 缩放完成" ), console . log ( "输出文件大小:" , Q . size ), e . size )){ const E = (( 1 - Q . size / e . size ) * 100 ). toFixed ( 2 ); console . log ( `压缩率: ${ E } %` )} return new Blob ([ Q ],{ type : "image/gif" })} catch ( a ){ throw console . error ( "GIF 缩放失败:" , a ), new Error ( `GIF 缩放失败: ${ a . message } ` )}} async scaleGifBatch ( e ){ const t = []; for ( let i = 0 ; i < e . length ; i ++ ){ const { file : n , options : o } = e [ i ]; try { const r = await this . scaleGif ( n , o ); t . push ( r )} catch ( r ){ console . error ( `批量缩放第 ${ i + 1 } 个文件失败:` , r ), t . push ( null )}} return t } async optimizeGif ( e , t = {}){ const { lossy : i = this . quality , level : n = this . optimizationLevel , loopCount : o = 0 } = t ; try { const r = [ "-U" ]; o >= 0 && r . push ( `--loopcount= ${ o } ` ), i && i > 0 && r . push ( `--lossy= ${ i } ` ), r . push ( `-O ${ n } ` ), r . push ( "1.gif" ), r . push ( "-o /out/output.gif" ); const g = r . join ( " " ); this . debug && console . log ( "GIF 优化命令:" , g ); const s = await xn . run ({ input : [{ file : e , name : "1.gif" }], command : [ g ]}); if ( ! s || s . length === 0 ) throw new Error ( "gifsicle 优化失败" ); return new Blob ([ s [ 0 ]],{ type :
2026-01-16 14:52:40 +08:00
新版本使用文件去重技术 , 可以节省存储空间 。
2026-01-19 11:30:28 +08:00
请重新上传自定义表情图片 。 `)},500)}}catch(eA){console.error("清理旧表情数据时出错:",eA)}},R=async()=>{try{await Qe.saveConfig(E.value)}catch(CA){console.error("保存配置失败:",CA)}},L=async()=>{try{s.value=!0,await I.clearAllStoredData();const CA={model:E.value.chip.model,display:{...E.value.chip.display}};E.value={chip:CA,theme:{wakeword:{type:"none",preset:"",custom:{name:"",command:"",threshold:20,model:"mn6_cn"}},font:{type:"none",preset:"",hide_subtitle:!1,custom:{file:null,size:20,bpp:4,charset:"deepseek"}},emoji:{type:"none",preset:"",custom:{size:{width:64,height:64},images:{}}},skin:{light:{backgroundType:"color",backgroundColor:"#ffffff",textColor:"#000000",backgroundImage:null},dark:{backgroundType:"color",backgroundColor:"#121212",textColor:"#ffffff",backgroundImage:null}}}},i.value=0,o.value="wakeword",r.value=!1,g.value=!1}catch(CA){console.error("重置配置失败:",CA),alert(t("errors.resetFailed"))}finally{s.value=!1}};ae(E,async CA=>{!a.value&&g.value&&await R()},{deep:!0}),Ft(async()=>{await Qe.initialize(),await P()}),Ci(()=>{l.value&&clearTimeout(l.value)});const cA=()=>{r.value=!1,l.value&&clearTimeout(l.value)},dA=()=>{l.value&&clearTimeout(l.value),l.value=setTimeout(()=>{r.value=!1},5e3)};return(CA,iA)=>(H(),_("div",null,[r.value?(H(),_("div",{key:0,class:"fixed bottom-4 right-4 z-50 bg-blue-50 border border-blue-200 rounded-lg p-4 shadow-lg transition-opacity duration-300 min-w-[300px]",onMouseenter:dA},[B("div",cb,[B("div",Eb,[iA[3]||(iA[3]=B("svg",{class:"w-5 h-5 text-blue-500 mr-2",fill:"currentColor",viewBox:"0 0 20 20"},[B("path",{"fill-rule":"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z","clip-rule":"evenodd"})],-1)),B("span",ub,v(CA.$t("configNotice.title")),1)]),B("button",{onClick:cA,class:"text-gray-500 hover:text-gray-700"},[...iA[4]||(iA[4]=[B("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[B("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])])]),B("p",hb,v(CA.$t("configNotice.message")),1),B("div",fb,[B("button",{onClick:L,class:"px-3 py-1 text-sm text-red-600 hover:text-red-800 font-medium"},v(CA.$t("configNotice.restart")),1)])],32)):sA("",!0),B("div",db,[(H(),_(jA,null,Ke(Q,(X,eA)=>B("div",{key:eA,class:"flex items-center"},[B("div",pb,[B("div",{class:kA(f(eA))},v(eA+1),3),B("span",mb,v(CA.$t(X.titleKey)),1)]),eA<Q.length-1?(H(),_("div",yb)):sA("",!0)])),64))]),B("div",wb,[i.value===0?(H(),ye(Od,{key:0,modelValue:E.value.chip,"onUpdate:modelValue":iA[0]||(iA[0]=X=>E.value.chip=X),onNext:h},null,8,["modelValue"])):sA("",!0),i.value===1?(H(),ye(my,{key:1,modelValue:E.value.theme,"onUpdate:modelValue":iA[1]||(iA[1]=X=>E.value.theme=X),chipModel:E.value.chip.model,activeTab:o.value,onNext:h,onPrev:u,onTabChange:G},null,8,["modelValue","chipModel","activeTab"])):sA("",!0),i.value===2?(H(),ye(cw,{key:2,config:E.value,onGenerate:p,onPrev:u},null,8,["config"])):sA("",!0)]),n.value?(H(),ye(Bb,{key:1,config:E.value,onClose:iA[2]||(iA[2]=X=>n.value=!1),onGenerate:c,onStartFlash:F,onCancelFlash:N},null,8,["config"])):sA("",!0)]))}},Db=Object.freeze(Object.defineProperty({__proto__:null,default:_l},Symbol.toStringTag,{value:"Module"})),kb={class:"min-h-screen bg-gray-50"},vb={class:"bg-white shadow-sm border-b"},Fb={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4"},Sb={class:"flex flex-col relative sm:flex-row items-start sm:items-center justify-between gap-3 sm:gap-0"},bb={class:"text-2xl font-bold text-gray-900"},Rb={class:"flex items-center space-x-4"},Nb={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"},Gb={__name:"App",setup(A){const e=EA(""),t=()=>{e.value&&(window.location.href=e.value)};return Ft(()=>{e.value=sessionStorage.getItem("devicePath")}),(i,n)=>(H(),_("div",kb,[B("header",vb,[B("div",Fb,[B("div",Sb,[e.value?(H(),_("div",{key:0,class:"bg-primary-500 hover:bg-primary-600 text-white px-6 py-1 rounded-md cursor-pointer",onClick:t},"返回")):sA("",!0),B("h1"
2026-01-16 14:52:40 +08:00
* vue-router v4.6.4
* (c) 2025 Eduardo San Martin Morote
* @license MIT
2026-01-19 11:30:28 +08:00
*/const Ei=typeof document<"u";function Kl(A){return typeof A=="object"||"displayName"in A||"props"in A||"__vccOpts"in A}function Lb(A){return A.__esModule||A[Symbol.toStringTag]==="Module"||A.default&&Kl(A.default)}const MA=Object.assign;function or(A,e){const t={};for(const i in e){const n=e[i];t[i]=qe(n)?n.map(A):A(n)}return t}const $i=()=>{},qe=Array.isArray;function Ta(A,e){const t={};for(const i in A)t[i]=i in e?e[i]:A[i];return t}const Pl=/#/g,Ub=/&/g,Mb=/\//g,xb=/=/g,Jb=/\?/g,Ol=/\+/g,Tb=/%5B/g,Hb=/%5D/g,Vl=/%5E/g,Yb=/%60/g,Wl=/%7B/g,_b=/%7C/g,ql=/%7D/g,Kb=/%20/g;function vg(A){return A==null?"":encodeURI(""+A).replace(_b,"|").replace(Tb,"[").replace(Hb,"]")}function Pb(A){return vg(A).replace(Wl,"{").replace(ql,"}").replace(Vl,"^")}function Hr(A){return vg(A).replace(Ol,"%2B").replace(Kb,"+").replace(Pl,"%23").replace(Ub,"%26").replace(Yb,"` ").replace(Wl," { ").replace(ql," } ").replace(Vl," ^ ")}function Ob(A){return Hr(A).replace(xb," % 3 D ")}function Vb(A){return vg(A).replace(Pl," % 23 ").replace(Jb," % 3 F ")}function Wb(A){return Vb(A).replace(Mb," % 2 F ")}function Qn(A){if(A==null)return null;try{return decodeURIComponent(""+A)}catch{}return""+A}const qb=/\/$/,jb=A=>A.replace(qb,"");function rr(A,e,t=" / "){let i,n={},o="",r="";const g=e.indexOf(" # ");let s=e.indexOf(" ? ");return s=g>=0&&s>g?-1:s,s>=0&&(i=e.slice(0,s),o=e.slice(s,g>0?g:e.length),n=A(o.slice(1))),g>=0&&(i=i||e.slice(0,g),r=e.slice(g,e.length)),i=$b(i??e,t),{fullPath:i+o+r,path:i,query:n,hash:Qn(r)}}function Zb(A,e){const t=e.query?A(e.query):"";return e.path+(t&&" ? ")+t+(e.hash||"")}function Ha(A,e){return!e||!A.toLowerCase().startsWith(e.toLowerCase())?A:A.slice(e.length)||" / "}function Xb(A,e,t){const i=e.matched.length-1,n=t.matched.length-1;return i>-1&&i===n&&Ni(e.matched[i],t.matched[n])&&jl(e.params,t.params)&&A(e.query)===A(t.query)&&e.hash===t.hash}function Ni(A,e){return(A.aliasOf||A)===(e.aliasOf||e)}function jl(A,e){if(Object.keys(A).length!==Object.keys(e).length)return!1;for(var t in A)if(!zb(A[t],e[t]))return!1;return!0}function zb(A,e){return qe(A)?Ya(A,e):qe(e)?Ya(e,A):(A==null?void 0:A.valueOf())===(e==null?void 0:e.valueOf())}function Ya(A,e){return qe(e)?A.length===e.length&&A.every((t,i)=>t===e[i]):A.length===1&&A[0]===e}function $b(A,e){if(A.startsWith(" / "))return A;if(!A)return e;const t=e.split(" / "),i=A.split(" / "),n=i[i.length-1];(n===" .. "||n===" . ")&&i.push("");let o=t.length-1,r,g;for(r=0;r<i.length;r++)if(g=i[r],g!==" . ")if(g===" .. ")o>1&&o--;else break;return t.slice(0,o).join(" / ")+" / "+i.slice(r).join(" / ")}const Gt={path:" / ",name:void 0,params:{},query:{},hash:"",fullPath:" / ",matched:[],meta:{},redirectedFrom:void 0};let Yr=function(A){return A.pop=" pop ",A.push=" push ",A}({}),gr=function(A){return A.back=" back ",A.forward=" forward ",A.unknown="",A}({});function AR(A){if(!A)if(Ei){const e=document.querySelector(" base ");A=e&&e.getAttribute(" href ")||" / ",A=A.replace(/^\w+:\/\/[^\/]+/,"")}else A=" / ";return A[0]!==" / "&&A[0]!==" # "&&(A=" / "+A),jb(A)}const eR=/^[^#]+#/;function tR(A,e){return A.replace(eR," # ")+e}function iR(A,e){const t=document.documentElement.getBoundingClientRect(),i=A.getBoundingClientRect();return{behavior:e.behavior,left:i.left-t.left-(e.left||0),top:i.top-t.top-(e.top||0)}}const Uo=()=>({left:window.scrollX,top:window.scrollY});function nR(A){let e;if(" el "in A){const t=A.el,i=typeof t==" string "&&t.startsWith(" # "),n=typeof t==" string "?i?document.getElementById(t.slice(1)):document.querySelector(t):t;if(!n)return;e=iR(n,A)}else e=A;" scrollBehavior "in document.documentElement.style?window.scrollTo(e):window.scrollTo(e.left!=null?e.left:window.scrollX,e.top!=null?e.top:window.scrollY)}function _a(A,e){return(history.state?history.state.position-e:-1)+A}const _r=new Map;function oR(A,e){_r.set(A,e)}function rR(A){const e=_r.get(A);return _r.delete(A),e}function gR(A){return typeof A==" string "||A&&typeof A==" object "}function Zl(A){return typeof A==" string "||typeof A==" symbol "}let zA=function(A){return A[A.MATCHER_NOT_FOUND=1]=" MATCHER_NOT_FOUND ",A[A.NAVIGATION_GUARD_REDIRECT=2]=" NAVIGATION_GUARD_REDIRECT ",A[A.NAVIGATION_ABORTED=4]="
2026-01-16 14:52:40 +08:00
* vue - router v4 . 6.4
* ( c ) 2025 Eduardo San Martin Morote
* @ license MIT
2026-01-19 11:30:28 +08:00
* /let QR=()=>location.protocol+"/ / "+location.host;function $l(A,e){const{pathname:t,search:i,hash:n}=e,o=A.indexOf(" # ");if(o>-1){let r=n.includes(A.slice(o))?A.slice(o).length:1,g=n.slice(r);return g[0]!==" / "&&(g=" / "+g),Ha(g,"")}return Ha(t,A)+i+n}function cR(A,e,t,i){let n=[],o=[],r=null;const g=({state:C})=>{const Q=$l(A,location),E=t.value,f=e.value;let h=0;if(C){if(t.value=Q,e.value=C,r&&r===E){r=null;return}h=f?C.position-f.position:0}else i(Q);n.forEach(u=>{u(t.value,E,{delta:h,type:Yr.pop,direction:h?h>0?gr.forward:gr.back:gr.unknown})})};function s(){r=t.value}function a(C){n.push(C);const Q=()=>{const E=n.indexOf(C);E>-1&&n.splice(E,1)};return o.push(Q),Q}function I(){if(document.visibilityState===" hidden "){const{history:C}=window;if(!C.state)return;C.replaceState(MA({},C.state,{scroll:Uo()}),"")}}function l(){for(const C of o)C();o=[],window.removeEventListener(" popstate ",g),window.removeEventListener(" pagehide ",I),document.removeEventListener(" visibilitychange ",I)}return window.addEventListener(" popstate ",g),window.addEventListener(" pagehide ",I),document.addEventListener(" visibilitychange ",I),{pauseListeners:s,listen:a,destroy:l}}function Oa(A,e,t,i=!1,n=!1){return{back:A,current:e,forward:t,replaced:i,position:window.history.length,scroll:n?Uo():null}}function ER(A){const{history:e,location:t}=window,i={value:$l(A,t)},n={value:e.state};n.value||o(i.value,{back:null,current:i.value,forward:null,position:e.length-1,replaced:!0,scroll:null},!0);function o(s,a,I){const l=A.indexOf(" # "),C=l>-1?(t.host&&document.querySelector(" base ")?A:A.slice(l))+s:QR()+A+s;try{e[I?" replaceState ":" pushState "](a,"",C),n.value=a}catch(Q){console.error(Q),t[I?" replace ":" assign "](C)}}function r(s,a){o(s,MA({},e.state,Oa(n.value.back,s,n.value.forward,!0),a,{position:n.value.position}),!0),i.value=s}function g(s,a){const I=MA({},n.value,e.state,{forward:s,scroll:Uo()});o(I.current,I,!0),o(s,MA({},Oa(i.value,s,null),{position:I.position+1},a),!1),i.value=s}return{location:i,state:n,push:g,replace:r}}function uR(A){A=AR(A);const e=ER(A),t=cR(A,e.state,e.location,e.replace);function i(o,r=!0){r||t.pauseListeners(),history.go(o)}const n=MA({location:"",base:A,go:i,createHref:tR.bind(null,A)},e,t);return Object.defineProperty(n," location ",{enumerable:!0,get:()=>e.location.value}),Object.defineProperty(n," state ",{enumerable:!0,get:()=>e.state.value}),n}let oi=function(A){return A[A.Static=0]=" Static ",A[A.Param=1]=" Param ",A[A.Group=2]=" Group ",A}({});var oe=function(A){return A[A.Static=0]=" Static ",A[A.Param=1]=" Param ",A[A.ParamRegExp=2]=" ParamRegExp ",A[A.ParamRegExpEnd=3]=" ParamRegExpEnd ",A[A.EscapeNext=4]=" EscapeNext ",A}(oe||{});const hR={type:oi.Static,value:""},fR=/[a-zA-Z0-9_]/;function dR(A){if(!A)return[[]];if(A===" / ")return[[hR]];if(!A.startsWith(" / "))throw new Error(`Invalid path " $ { A } "`);function e(Q){throw new Error(`ERR (${t})/" $ { a } ": ${Q}`)}let t=oe.Static,i=t;const n=[];let o;function r(){o&&n.push(o),o=[]}let g=0,s,a="",I="";function l(){a&&(t===oe.Static?o.push({type:oi.Static,value:a}):t===oe.Param||t===oe.ParamRegExp||t===oe.ParamRegExpEnd?(o.length>1&&(s===" * "||s===" + ")&&e(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),o.push({type:oi.Param,value:a,regexp:I,repeatable:s===" * "||s===" + ",optional:s===" * "||s===" ? "})):e(" Invalid state to consume buffer "),a="")}function C(){a+=s}for(;g<A.length;){if(s=A[g++],s===" \\ "&&t!==oe.ParamRegExp){i=t,t=oe.EscapeNext;continue}switch(t){case oe.Static:s===" / "?(a&&l(),r()):s===" : "?(l(),t=oe.Param):C();break;case oe.EscapeNext:C(),t=i;break;case oe.Param:s===" ( "?t=oe.ParamRegExp:fR.test(s)?C():(l(),t=oe.Static,s!==" * "&&s!==" ? "&&s!==" + "&&g--);break;case oe.ParamRegExp:s===" ) "?I[I.length-1]==" \\ "?I=I.slice(0,-1)+s:t=oe.ParamRegExpEnd:I+=s;break;case oe.ParamRegExpEnd:l(),t=oe.Static,s!==" * "&&s!==" ? "&&s!==" + "&&g--,I="";break;default:e(" Unknown state ");break}}return t===oe.ParamRegExp&&e(`Unfinished custom RegExp for param " $ { a } "`),l(),r(),n}const Va=" [ ^ /]+?",pR={sensitive:!1,strict:!1,start:!0,end:!0};var pe=function(A){return A[A._multiplier=10]="_multiplier",A[A.Root=