import{g as un,u as rn,e as Te,b as Ye,h as dn,m as cn,i as hn,j as ct,k as wn,V as _t,l as fn,n as pn,p as ht,d as Ct,o as mn,q as vn,r as gn,_ as Vt,a as bn,c as yn,f as wt}from"./VTextarea-AXfuu5_N.js";import{p as pe,m as xn,aE as Sn,x as Ne,aF as Le,a3 as Re,g as Se,Q as ye,S as Xe,f as j,aB as kn,t as we,j as Ce,k as n,az as _n,aG as Ze,av as Cn,s as be,r as ge,aH as Tt,T as oe,as as Vn,aw as Tn,H as he,V as Q,aq as Dn,aI as En,a8 as Fe,aJ as An,u as In,ae as et,aK as Je,X as Dt,e as Et,aa as Ve,z as At,w as ft,aL as Nn,aM as $e,aN as Pn,aO as Ue,aP as Mn,L as On,h as Bn,ad as It,aQ as Ln,l as Be,N as Fn,aj as Rn,aR as Un,a5 as Nt,J as w,W as Pt,aS as jn,aT as pt,aU as Hn,aV as zn,aW as Kn,_ as de,aX as Mt,Z as P,ao as tt,aY as Qn,F as Z,D as T,B as re,E as s,K as te,G as ae,A as H,$ as R,an as qn,aZ as $n,ap as Ot,a_ as Wn,I as nt,a$ as mt,b0 as Bt,b1 as Jn,b2 as Gn,b3 as Yn,b4 as vt,a1 as gt,b5 as Xn,b6 as Zn}from"./index-T6T6nszo.js";import{u as es,c as fe,d as K,a as st,m as ts,i as ns,g as X,h as ve,e as W,V as it,f as Lt}from"./VList-JHX8oo-z.js";import{h as at,a as Ee,b as xe,i as ot,V as _e,l as lt,g as Ie,e as ie,k as Ft,f as ss,d as is}from"./VRow-D3bUWqDA.js";import{V as as}from"./VAlert-D1F_vABm.js";import"./ssrBoot-Bl3dbI3H.js";const Rt=Symbol.for("vuetify:selection-control-group"),Ut=pe({color:String,disabled:{type:Boolean,default:null},defaultsTarget:String,error:Boolean,id:String,inline:Boolean,falseIcon:Re,trueIcon:Re,ripple:{type:[Boolean,Object],default:!0},multiple:{type:Boolean,default:null},name:String,readonly:{type:Boolean,default:null},modelValue:null,type:String,valueComparator:{type:Function,default:Le},...Ne(),...Sn(),...xn()},"SelectionControlGroup"),os=pe({...Ut({defaultsTarget:"VSelectionControl"})},"VSelectionControlGroup");Se()({name:"VSelectionControlGroup",props:os(),emits:{"update:modelValue":e=>!0},setup(e,t){let{slots:o}=t;const r=ye(e,"modelValue"),a=Xe(),u=j(()=>e.id||`v-selection-control-group-${a}`),l=j(()=>e.name||u.value),d=new Set;return _n(Rt,{modelValue:r,forceUpdate:()=>{d.forEach(c=>c())},onForceUpdate:c=>{d.add(c),Ze(()=>{d.delete(c)})}}),kn({[e.defaultsTarget]:{color:we(e,"color"),disabled:we(e,"disabled"),density:we(e,"density"),error:we(e,"error"),inline:we(e,"inline"),modelValue:r,multiple:j(()=>!!e.multiple||e.multiple==null&&Array.isArray(r.value)),name:l,falseIcon:we(e,"falseIcon"),trueIcon:we(e,"trueIcon"),readonly:we(e,"readonly"),ripple:we(e,"ripple"),type:we(e,"type"),valueComparator:we(e,"valueComparator")}}),Ce(()=>{var c;return n("div",{class:["v-selection-control-group",{"v-selection-control-group--inline":e.inline},e.class],style:e.style,role:e.type==="radio"?"radiogroup":void 0},[(c=o.default)==null?void 0:c.call(o)])}),{}}});const ut=pe({label:String,baseColor:String,trueValue:null,falseValue:null,value:null,...Ne(),...Ut()},"VSelectionControl");function ls(e){const t=Dn(Rt,void 0),{densityClasses:o}=En(e),r=ye(e,"modelValue"),a=j(()=>e.trueValue!==void 0?e.trueValue:e.value!==void 0?e.value:!0),u=j(()=>e.falseValue!==void 0?e.falseValue:!1),l=j(()=>!!e.multiple||e.multiple==null&&Array.isArray(r.value)),d=j({get(){const b=t?t.modelValue.value:r.value;return l.value?Fe(b).some(M=>e.valueComparator(M,a.value)):e.valueComparator(b,a.value)},set(b){if(e.readonly)return;const M=b?a.value:u.value;let B=M;l.value&&(B=b?[...Fe(r.value),M]:Fe(r.value).filter(D=>!e.valueComparator(D,a.value))),t?t.modelValue.value=B:r.value=B}}),{textColorClasses:c,textColorStyles:g}=An(j(()=>{if(!(e.error||e.disabled))return d.value?e.color:e.baseColor})),{backgroundColorClasses:v,backgroundColorStyles:x}=In(j(()=>d.value&&!e.error&&!e.disabled?e.color:e.baseColor)),m=j(()=>d.value?e.trueIcon:e.falseIcon);return{group:t,densityClasses:o,trueValue:a,falseValue:u,model:d,textColorClasses:c,textColorStyles:g,backgroundColorClasses:v,backgroundColorStyles:x,icon:m}}const je=Se()({name:"VSelectionControl",directives:{Ripple:Cn},inheritAttrs:!1,props:ut(),emits:{"update:modelValue":e=>!0},setup(e,t){let{attrs:o,slots:r}=t;const{group:a,densityClasses:u,icon:l,model:d,textColorClasses:c,textColorStyles:g,backgroundColorClasses:v,backgroundColorStyles:x,trueValue:m}=ls(e),b=Xe(),M=be(!1),B=be(!1),D=ge(),O=j(()=>e.id||`input-${b}`),C=j(()=>!e.disabled&&!e.readonly);a==null||a.onForceUpdate(()=>{D.value&&(D.value.checked=d.value)});function F(L){C.value&&(M.value=!0,Je(L.target,":focus-visible")!==!1&&(B.value=!0))}function U(){M.value=!1,B.value=!1}function ee(L){L.stopPropagation()}function G(L){if(!C.value){D.value&&(D.value.checked=d.value);return}e.readonly&&a&&et(()=>a.forceUpdate()),d.value=L.target.checked}return Ce(()=>{var ue,E;const L=r.label?r.label({label:e.label,props:{for:O.value}}):e.label,[ne,J]=Tt(o),Y=n("input",oe({ref:D,checked:d.value,disabled:!!e.disabled,id:O.value,onBlur:U,onFocus:F,onInput:G,"aria-disabled":!!e.disabled,"aria-label":e.label,type:e.type,value:m.value,name:e.name,"aria-checked":e.type==="checkbox"?d.value:void 0},J),null);return n("div",oe({class:["v-selection-control",{"v-selection-control--dirty":d.value,"v-selection-control--disabled":e.disabled,"v-selection-control--error":e.error,"v-selection-control--focused":M.value,"v-selection-control--focus-visible":B.value,"v-selection-control--inline":e.inline},u.value,e.class]},ne,{style:e.style}),[n("div",{class:["v-selection-control__wrapper",c.value],style:g.value},[(ue=r.default)==null?void 0:ue.call(r,{backgroundColorClasses:v,backgroundColorStyles:x}),Vn(n("div",{class:["v-selection-control__input"]},[((E=r.input)==null?void 0:E.call(r,{model:d,textColorClasses:c,textColorStyles:g,backgroundColorClasses:v,backgroundColorStyles:x,inputNode:Y,icon:l.value,props:{onFocus:F,onBlur:U,id:O.value}}))??n(he,null,[l.value&&n(Q,{key:"icon",icon:l.value},null),Y])]),[[Tn("ripple"),e.ripple&&[!e.disabled&&!e.readonly,null,["center","circle"]]]])]),L&&n(un,{for:O.value,onClick:ee},{default:()=>[L]})])}),{isFocused:M,input:D}}}),us=pe({indeterminate:Boolean,indeterminateIcon:{type:Re,default:"$checkboxIndeterminate"},...ut({falseIcon:"$checkboxOff",trueIcon:"$checkboxOn"})},"VCheckboxBtn"),rs=Se()({name:"VCheckboxBtn",props:us(),emits:{"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,t){let{slots:o}=t;const r=ye(e,"indeterminate"),a=ye(e,"modelValue");function u(c){r.value&&(r.value=!1)}const l=j(()=>r.value?e.indeterminateIcon:e.falseIcon),d=j(()=>r.value?e.indeterminateIcon:e.trueIcon);return Ce(()=>{const c=Dt(je.filterProps(e),["modelValue"]);return n(je,oe(c,{modelValue:a.value,"onUpdate:modelValue":[g=>a.value=g,u],class:["v-checkbox-btn",e.class],style:e.style,type:"checkbox",falseIcon:l.value,trueIcon:d.value,"aria-checked":r.value?"mixed":void 0}),o)}),{}}}),ds=pe({renderless:Boolean,...Ne()},"VVirtualScrollItem"),cs=Se()({name:"VVirtualScrollItem",inheritAttrs:!1,props:ds(),emits:{"update:height":e=>!0},setup(e,t){let{attrs:o,emit:r,slots:a}=t;const{resizeRef:u,contentRect:l}=Et(void 0,"border");Ve(()=>{var d;return(d=l.value)==null?void 0:d.height},d=>{d!=null&&r("update:height",d)}),Ce(()=>{var d,c;return e.renderless?n(he,null,[(d=a.default)==null?void 0:d.call(a,{itemRef:u})]):n("div",oe({ref:u,class:["v-virtual-scroll__item",e.class],style:e.style},o),[(c=a.default)==null?void 0:c.call(a)])})}}),hs=-1,ws=1,We=100,fs=pe({itemHeight:{type:[Number,String],default:null},itemKey:{type:[String,Array,Function],default:null},height:[Number,String]},"virtual");function ps(e,t){const o=At(),r=be(0);ft(()=>{r.value=parseFloat(e.itemHeight||0)});const a=be(0),u=be(Math.ceil((parseInt(e.height)||o.height.value)/(r.value||16))||1),l=be(0),d=be(0),c=ge(),g=ge();let v=0;const{resizeRef:x,contentRect:m}=Et();ft(()=>{x.value=c.value});const b=j(()=>{var i;return c.value===document.documentElement?o.height.value:((i=m.value)==null?void 0:i.height)||parseInt(e.height)||0}),M=j(()=>!!(c.value&&g.value&&b.value&&r.value));let B=Array.from({length:t.value.length}),D=Array.from({length:t.value.length});const O=be(0);let C=-1;function F(i){return B[i]||r.value}const U=Nn(()=>{const i=performance.now();D[0]=0;const I=t.value.length;for(let h=1;h<=I-1;h++)D[h]=(D[h-1]||0)+F(h-1);O.value=Math.max(O.value,performance.now()-i)},O),ee=Ve(M,i=>{i&&(ee(),v=g.value.offsetTop,U.immediate(),p(),~C&&et(()=>{Ue&&window.requestAnimationFrame(()=>{_(C),C=-1})}))});Ze(()=>{U.clear()});function G(i,I){const h=B[i],y=r.value;r.value=y?Math.min(r.value,I):I,(h!==I||y!==r.value)&&(B[i]=I,U())}function L(i){return i=$e(i,0,t.value.length-1),D[i]||0}function ne(i){return ms(D,i)}let J=0,Y=0,ue=0;Ve(b,(i,I)=>{I&&(p(),i{Y=0,p()}))});let E=-1;function ce(){if(!c.value||!g.value)return;const i=c.value.scrollTop,I=performance.now();I-ue>500?(Y=Math.sign(i-J),v=g.value.offsetTop):Y=i-J,J=i,ue=I,window.clearTimeout(E),E=window.setTimeout(se,500),p()}function se(){!c.value||!g.value||(Y=0,ue=0,window.clearTimeout(E),p())}let k=-1;function p(){cancelAnimationFrame(k),k=requestAnimationFrame(V)}function V(){if(!c.value||!b.value)return;const i=J-v,I=Math.sign(Y),h=Math.max(0,i-We),y=$e(ne(h),0,t.value.length),S=i+b.value+We,N=$e(ne(S)+1,y+1,t.value.length);if((I!==hs||yu.value)){const A=L(a.value)-L(y),z=L(N)-L(u.value);Math.max(A,z)>We?(a.value=y,u.value=N):(y<=0&&(a.value=y),N>=t.value.length&&(u.value=N))}l.value=L(a.value),d.value=L(t.value.length)-L(u.value)}function _(i){const I=L(i);!c.value||i&&!I?C=i:c.value.scrollTop=I}const f=j(()=>t.value.slice(a.value,u.value).map((i,I)=>{const h=I+a.value;return{raw:i,index:h,key:Pn(i,e.itemKey,h)}}));return Ve(t,()=>{B=Array.from({length:t.value.length}),D=Array.from({length:t.value.length}),U.immediate(),p()},{deep:1}),{calculateVisibleItems:p,containerRef:c,markerRef:g,computedItems:f,paddingTop:l,paddingBottom:d,scrollToIndex:_,handleScroll:ce,handleScrollend:se,handleItemResize:G}}function ms(e,t){let o=e.length-1,r=0,a=0,u=null,l=-1;if(e[o]>1,u=e[a],u>t)o=a-1;else if(u[]},renderless:Boolean,...fs(),...Ne(),...Fn()},"VVirtualScroll"),gs=Se()({name:"VVirtualScroll",props:vs(),setup(e,t){let{slots:o}=t;const r=Mn("VVirtualScroll"),{dimensionStyles:a}=On(e),{calculateVisibleItems:u,containerRef:l,markerRef:d,handleScroll:c,handleScrollend:g,handleItemResize:v,scrollToIndex:x,paddingTop:m,paddingBottom:b,computedItems:M}=ps(e,we(e,"items"));return Bn(()=>e.renderless,()=>{function B(){var C,F;const O=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1)?"addEventListener":"removeEventListener";l.value===document.documentElement?(document[O]("scroll",c,{passive:!0}),document[O]("scrollend",g)):((C=l.value)==null||C[O]("scroll",c,{passive:!0}),(F=l.value)==null||F[O]("scrollend",g))}It(()=>{l.value=Ln(r.vnode.el,!0),B(!0)}),Ze(B)}),Ce(()=>{const B=M.value.map(D=>n(cs,{key:D.key,renderless:e.renderless,"onUpdate:height":O=>v(D.index,O)},{default:O=>{var C;return(C=o.default)==null?void 0:C.call(o,{item:D.raw,index:D.index,...O})}}));return e.renderless?n(he,null,[n("div",{ref:d,class:"v-virtual-scroll__spacer",style:{paddingTop:Be(m.value)}},null),B,n("div",{class:"v-virtual-scroll__spacer",style:{paddingBottom:Be(b.value)}},null)]):n("div",{ref:l,class:["v-virtual-scroll",e.class],onScrollPassive:c,onScrollend:g,style:[a.value,e.style]},[n("div",{ref:d,class:"v-virtual-scroll__container",style:{paddingTop:Be(m.value),paddingBottom:Be(b.value)}},[B])])}),{calculateVisibleItems:u,scrollToIndex:x}}});function bs(e,t){const o=be(!1);let r;function a(d){cancelAnimationFrame(r),o.value=!0,r=requestAnimationFrame(()=>{r=requestAnimationFrame(()=>{o.value=!1})})}async function u(){await new Promise(d=>requestAnimationFrame(d)),await new Promise(d=>requestAnimationFrame(d)),await new Promise(d=>requestAnimationFrame(d)),await new Promise(d=>{if(o.value){const c=Ve(o,()=>{c(),d()})}else d()})}async function l(d){var v,x;if(d.key==="Tab"&&((v=t.value)==null||v.focus()),!["PageDown","PageUp","Home","End"].includes(d.key))return;const c=(x=e.value)==null?void 0:x.$el;if(!c)return;(d.key==="Home"||d.key==="End")&&c.scrollTo({top:d.key==="Home"?0:c.scrollHeight,behavior:"smooth"}),await u();const g=c.querySelectorAll(":scope > :not(.v-virtual-scroll__spacer)");if(d.key==="PageDown"||d.key==="Home"){const m=c.getBoundingClientRect().top;for(const b of g)if(b.getBoundingClientRect().top>=m){b.focus();break}}else{const m=c.getBoundingClientRect().bottom;for(const b of[...g].reverse())if(b.getBoundingClientRect().bottom<=m){b.focus();break}}}return{onScrollPassive:a,onKeydown:l}}const ys=pe({chips:Boolean,closableChips:Boolean,closeText:{type:String,default:"$vuetify.close"},openText:{type:String,default:"$vuetify.open"},eager:Boolean,hideNoData:Boolean,hideSelected:Boolean,listProps:{type:Object},menu:Boolean,menuIcon:{type:Re,default:"$dropdown"},menuProps:{type:Object},multiple:Boolean,noDataText:{type:String,default:"$vuetify.noDataText"},openOnClear:Boolean,itemColor:String,...ts({itemChildren:!1})},"Select"),xs=pe({...ys(),...Dt(cn({modelValue:null,role:"combobox"}),["validationValue","dirty","appendInnerIcon"]),...jn({transition:{component:dn}})},"VSelect"),Ss=Se()({name:"VSelect",props:xs(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0},setup(e,t){let{slots:o}=t;const{t:r}=Rn(),a=ge(),u=ge(),l=ge(),d=ye(e,"menu"),c=j({get:()=>d.value,set:f=>{var i;d.value&&!f&&((i=u.value)!=null&&i.ΨopenChildren.size)||(d.value=f)}}),{items:g,transformIn:v,transformOut:x}=es(e),m=ye(e,"modelValue",[],f=>v(f===null?[null]:Fe(f)),f=>{const i=x(f);return e.multiple?i:i[0]??null}),b=j(()=>typeof e.counterValue=="function"?e.counterValue(m.value):typeof e.counterValue=="number"?e.counterValue:m.value.length),M=rn(e),B=j(()=>m.value.map(f=>f.value)),D=be(!1),O=j(()=>c.value?e.closeText:e.openText);let C="",F;const U=j(()=>e.hideSelected?g.value.filter(f=>!m.value.some(i=>(e.valueComparator||Le)(i,f))):g.value),ee=j(()=>e.hideNoData&&!U.value.length||M.isReadonly.value||M.isDisabled.value),G=j(()=>{var f;return{...e.menuProps,activatorProps:{...((f=e.menuProps)==null?void 0:f.activatorProps)||{},"aria-haspopup":"listbox"}}}),L=ge(),ne=bs(L,a);function J(f){e.openOnClear&&(c.value=!0)}function Y(){ee.value||(c.value=!c.value)}function ue(f){pt(f)&&E(f)}function E(f){var y,S;if(!f.key||M.isReadonly.value)return;["Enter"," ","ArrowDown","ArrowUp","Home","End"].includes(f.key)&&f.preventDefault(),["Enter","ArrowDown"," "].includes(f.key)&&(c.value=!0),["Escape","Tab"].includes(f.key)&&(c.value=!1),f.key==="Home"?(y=L.value)==null||y.focus("first"):f.key==="End"&&((S=L.value)==null||S.focus("last"));const i=1e3;if(!pt(f))return;const I=performance.now();I-F>i&&(C=""),C+=f.key.toLowerCase(),F=I;const h=g.value.find(N=>N.title.toLowerCase().startsWith(C));if(h!==void 0){m.value=[h];const N=U.value.indexOf(h);Ue&&window.requestAnimationFrame(()=>{var A;N>=0&&((A=l.value)==null||A.scrollToIndex(N))})}}function ce(f){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!f.props.disabled)if(e.multiple){const I=m.value.findIndex(y=>(e.valueComparator||Le)(y.value,f.value)),h=i??!~I;if(~I){const y=h?[...m.value,f]:[...m.value];y.splice(I,1),m.value=y}else h&&(m.value=[...m.value,f])}else{const I=i!==!1;m.value=I?[f]:[],et(()=>{c.value=!1})}}function se(f){var i;(i=L.value)!=null&&i.$el.contains(f.relatedTarget)||(c.value=!1)}function k(){var f;e.eager&&((f=l.value)==null||f.calculateVisibleItems())}function p(){var f;D.value&&((f=a.value)==null||f.focus())}function V(f){D.value=!0}function _(f){if(f==null)m.value=[];else if(Je(a.value,":autofill")||Je(a.value,":-webkit-autofill")){const i=g.value.find(I=>I.title===f);i&&ce(i)}else a.value&&(a.value.value="")}return Ve(c,()=>{if(!e.hideSelected&&c.value&&m.value.length){const f=U.value.findIndex(i=>m.value.some(I=>(e.valueComparator||Le)(I.value,i.value)));Ue&&window.requestAnimationFrame(()=>{var i;f>=0&&((i=l.value)==null||i.scrollToIndex(f))})}}),Ve(()=>e.items,(f,i)=>{c.value||D.value&&!i.length&&f.length&&(c.value=!0)}),Ce(()=>{const f=!!(e.chips||o.chip),i=!!(!e.hideNoData||U.value.length||o["prepend-item"]||o["append-item"]||o["no-data"]),I=m.value.length>0,h=Te.filterProps(e),y=I||!D.value&&e.label&&!e.persistentPlaceholder?void 0:e.placeholder;return n(Te,oe({ref:a},h,{modelValue:m.value.map(S=>S.props.value).join(", "),"onUpdate:modelValue":_,focused:D.value,"onUpdate:focused":S=>D.value=S,validationValue:m.externalValue,counterValue:b.value,dirty:I,class:["v-select",{"v-select--active-menu":c.value,"v-select--chips":!!e.chips,[`v-select--${e.multiple?"multiple":"single"}`]:!0,"v-select--selected":m.value.length,"v-select--selection-slot":!!o.selection},e.class],style:e.style,inputmode:"none",placeholder:y,"onClick:clear":J,"onMousedown:control":Y,onBlur:se,onKeydown:E,"aria-label":r(O.value),title:r(O.value)}),{...o,default:()=>n(he,null,[n(Ye,oe({ref:u,modelValue:c.value,"onUpdate:modelValue":S=>c.value=S,activator:"parent",contentClass:"v-select__content",disabled:ee.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:k,onAfterLeave:p},G.value),{default:()=>[i&&n(fe,oe({ref:L,selected:B.value,selectStrategy:e.multiple?"independent":"single-independent",onMousedown:S=>S.preventDefault(),onKeydown:ue,onFocusin:V,tabindex:"-1","aria-live":"polite",color:e.itemColor??e.color},ne,e.listProps),{default:()=>{var S,N,A;return[(S=o["prepend-item"])==null?void 0:S.call(o),!U.value.length&&!e.hideNoData&&(((N=o["no-data"])==null?void 0:N.call(o))??n(K,{key:"no-data",title:r(e.noDataText)},null)),n(gs,{ref:l,renderless:!0,items:U.value,itemKey:"value"},{default:z=>{var ke;let{item:q,index:me,itemRef:$}=z;const Ae=oe(q.props,{ref:$,key:q.value,onClick:()=>ce(q,null)});return((ke=o.item)==null?void 0:ke.call(o,{item:q,index:me,props:Ae}))??n(K,oe(Ae,{role:"option"}),{prepend:He=>{let{isSelected:Pe}=He;return n(he,null,[e.multiple&&!e.hideSelected?n(rs,{key:q.value,modelValue:Pe,ripple:!1,tabindex:"-1"},null):void 0,q.props.prependAvatar&&n(at,{image:q.props.prependAvatar},null),q.props.prependIcon&&n(Q,{icon:q.props.prependIcon},null)])}})}}),(A=o["append-item"])==null?void 0:A.call(o)]}})]}),m.value.map((S,N)=>{function A($){$.stopPropagation(),$.preventDefault(),ce(S,!1)}const z={"onClick:close":A,onKeydown($){$.key!=="Enter"&&$.key!==" "||($.preventDefault(),$.stopPropagation(),A($))},onMousedown($){$.preventDefault(),$.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0},q=f?!!o.chip:!!o.selection,me=q?Un(f?o.chip({item:S,index:N,props:z}):o.selection({item:S,index:N})):void 0;if(!(q&&!me))return n("div",{key:S.value,class:"v-select__selection"},[f?o.chip?n(Nt,{key:"chip-defaults",defaults:{VChip:{closable:e.closableChips,size:"small",text:S.title}}},{default:()=>[me]}):n(st,oe({key:"chip",closable:e.closableChips,size:"small",text:S.title,disabled:S.props.disabled},z),null):me??n("span",{class:"v-select__selection-text"},[S.title,e.multiple&&N!0,"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,t){let{attrs:o,slots:r}=t;const a=ye(e,"indeterminate"),u=ye(e,"modelValue"),{loaderClasses:l}=Hn(e),{isFocused:d,focus:c,blur:g}=hn(e),v=ge(),x=Ue&&window.matchMedia("(forced-colors: active)").matches,m=j(()=>typeof e.loading=="string"&&e.loading!==""?e.loading:e.color),b=Xe(),M=j(()=>e.id||`switch-${b}`);function B(){a.value&&(a.value=!1)}function D(O){var C,F;O.stopPropagation(),O.preventDefault(),(F=(C=v.value)==null?void 0:C.input)==null||F.click()}return Ce(()=>{const[O,C]=Tt(o),F=ct.filterProps(e),U=je.filterProps(e);return n(ct,oe({class:["v-switch",{"v-switch--flat":e.flat},{"v-switch--inset":e.inset},{"v-switch--indeterminate":a.value},l.value,e.class]},O,F,{modelValue:u.value,"onUpdate:modelValue":ee=>u.value=ee,id:M.value,focused:d.value,style:e.style}),{...r,default:ee=>{let{id:G,messagesId:L,isDisabled:ne,isReadonly:J,isValid:Y}=ee;const ue={model:u,isValid:Y};return n(je,oe({ref:v},U,{modelValue:u.value,"onUpdate:modelValue":[E=>u.value=E,B],id:G.value,"aria-describedby":L.value,type:"checkbox","aria-checked":a.value?"mixed":void 0,disabled:ne.value,readonly:J.value,onFocus:c,onBlur:g},C),{...r,default:E=>{let{backgroundColorClasses:ce,backgroundColorStyles:se}=E;return n("div",{class:["v-switch__track",x?void 0:ce.value],style:se.value,onClick:D},[r["track-true"]&&n("div",{key:"prepend",class:"v-switch__track-true"},[r["track-true"](ue)]),r["track-false"]&&n("div",{key:"append",class:"v-switch__track-false"},[r["track-false"](ue)])])},input:E=>{let{inputNode:ce,icon:se,backgroundColorClasses:k,backgroundColorStyles:p}=E;return n(he,null,[ce,n("div",{class:["v-switch__thumb",{"v-switch__thumb--filled":se||e.loading},e.inset||x?void 0:k.value],style:e.inset?void 0:p.value},[r.thumb?n(Nt,{defaults:{VIcon:{icon:se,size:"x-small"}}},{default:()=>[r.thumb({...ue,icon:se})]}):n(ns,null,{default:()=>[e.loading?n(zn,{name:"v-switch",active:!0,color:Y.value===!1?void 0:m.value},{default:V=>r.loader?r.loader(V):n(Kn,{active:V.isActive,color:V.color,indeterminate:!0,size:"16",width:"2"},null)}):se&&n(Q,{key:String(se),icon:se,size:"x-small"},null)]})])])}})}})}),{}}}),_s={name:"SettingItem",props:{settingKey:{type:String,required:!0},icon:{type:String,default:null},disabled:{type:Boolean,default:!1},title:{type:String,default:null},description:{type:String,default:null}},data(){return{localValue:null,definition:null,type:null,selectOptions:[],hasOptions:!1,minValue:0,maxValue:100,stepValue:1,showSnackbar:!1,snackbarText:"",fontFamilies:[{title:"Arial",value:"Arial, sans-serif"},{title:"Calibri",value:"Calibri, sans-serif"},{title:"Cambria",value:"Cambria, serif"},{title:"Consolas",value:"Consolas, monospace"},{title:"Courier New",value:"Courier New, monospace"},{title:"Georgia",value:"Georgia, serif"},{title:"Helvetica",value:"Helvetica, sans-serif"},{title:"Segoe UI",value:"Segoe UI, sans-serif"},{title:"Times New Roman",value:"Times New Roman, serif"},{title:"Trebuchet MS",value:"Trebuchet MS, sans-serif"},{title:"Verdana",value:"Verdana, sans-serif"},{title:"Monospace",value:"monospace"},{title:"Sans-serif",value:"sans-serif"},{title:"Serif",value:"serif"}],displayValueMappings:{"display.emptySubjectDisplay":{card:"卡片",button:"按钮"},"theme.mode":{light:"浅色",dark:"深色"},"server.provider":{server:"远程服务器",indexedDB:"本地存储"}},defaultIcons:{boolean:"mdi-toggle-switch-outline",number:"mdi-numeric",string:"mdi-form-textbox"}}},computed:{displayTitle(){if(this.title)return this.title;if(this.definition&&this.definition.description)return this.definition.description;const e=this.settingKey.split(".");return e[e.length-1]},displayDescription(){return this.description?this.description:this.settingKey},isFontFamily(){return this.settingKey.toLowerCase().includes("fontfamily")||this.settingKey.toLowerCase().includes("font.family")},isDefaultValue(){return this.definition?typeof this.localValue=="object"&&this.localValue!==null?JSON.stringify(this.localValue)===JSON.stringify(this.definition.default):this.localValue===this.definition.default:!0},settingIcon(){return this.icon?this.icon:this.definition&&this.definition.icon?this.definition.icon:this.defaultIcons[this.type]||"mdi-cog-outline"}},created(){this.loadSetting()},methods:{loadSetting(){if(this.definition=Qn(this.settingKey),!this.definition){console.error(`未找到设置项定义: ${this.settingKey}`);return}if(this.type=this.definition.type,this.localValue=P(this.settingKey),this.type==="string"){if(this.isFontFamily)this.selectOptions=this.fontFamilies,this.hasOptions=!0;else if(this.settingKey in this.displayValueMappings){const e=this.displayValueMappings[this.settingKey];this.selectOptions=Object.entries(e).map(([t,o])=>({title:o,value:t})),this.hasOptions=!0}else if(this.definition.validate){const t=this.definition.validate.toString().match(/\[(.*?)\]/);if(t){const r=t[1].split(",").map(a=>{const u=a.trim().replace(/['"]/g,"");return{title:this.getDisplayValue(u)||u,value:u}});r.length>0&&(this.selectOptions=r,this.hasOptions=!0)}}}if(this.type==="number"&&this.definition.validate){const e=this.definition.validate.toString(),t=e.match(/value\s*>=\s*(\d+)/);t&&(this.minValue=Number(t[1]));const o=e.match(/value\s*<=\s*(\d+)/);o&&(this.maxValue=Number(o[1]));const r=this.maxValue-this.minValue;r>100?this.stepValue=10:r>20?this.stepValue=5:r>10?this.stepValue=2:this.stepValue=1}},getDisplayValue(e){return this.settingKey in this.displayValueMappings&&this.displayValueMappings[this.settingKey][e]||e},updateSetting(e){let t=e;this.type==="boolean"?t=!!e:this.type==="number"&&(t=Number(e),tthis.maxValue&&(t=this.maxValue)),tt(this.settingKey,t)?this.$emit("update",this.settingKey,t):(this.localValue=P(this.settingKey),this.$emit("error",this.settingKey))},adjustValue(e){if(this.type!=="number")return;const t=this.localValue+e;t>=this.minValue&&t<=this.maxValue&&(this.localValue=t,this.updateSetting(t))},copySettingId(){navigator.clipboard.writeText(this.settingKey).then(()=>{this.showSnackbarMessage("设置ID已复制到剪贴板")}).catch(e=>{console.error("复制失败:",e)})},copySettingValue(){let e="";typeof this.localValue=="object"&&this.localValue!==null?e=JSON.stringify(this.localValue):e=String(this.localValue),navigator.clipboard.writeText(e).then(()=>{this.showSnackbarMessage("设置值已复制到剪贴板")}).catch(t=>{console.error("复制失败:",t)})},resetToDefault(){this.definition&&(Mt(this.settingKey),this.localValue=P(this.settingKey),this.showSnackbarMessage("已重置为默认值"),this.$emit("update",this.settingKey,this.localValue))},showSnackbarMessage(e){this.snackbarText=e,this.showSnackbar=!0}}},Cs={class:"text-caption text-grey-darken-1"},Vs={class:"d-flex flex-column flex-sm-row align-center"},Ts={key:0,class:"me-2"},Ds={key:2,class:"d-flex align-center"},Es={key:0,class:"px-4 pb-2 pt-0"};function As(e,t,o,r,a,u){return T(),Z(he,null,[n(K,{class:"setting-item",disabled:o.disabled},{prepend:s(()=>[n(Q,{icon:u.settingIcon},null,8,["icon"])]),append:s(()=>[ae("div",Vs,[a.type!=="string"||a.hasOptions?(T(),Z("div",Ts,[a.type==="boolean"?(T(),H(Ge,{key:0,modelValue:a.localValue,"onUpdate:modelValue":[t[0]||(t[0]=l=>a.localValue=l),u.updateSetting],density:"comfortable","hide-details":"",disabled:o.disabled},null,8,["modelValue","disabled","onUpdate:modelValue"])):a.type==="string"&&a.hasOptions?(T(),H(Ss,{key:1,modelValue:a.localValue,"onUpdate:modelValue":[t[1]||(t[1]=l=>a.localValue=l),u.updateSetting],items:a.selectOptions,density:"compact","hide-details":"",disabled:o.disabled,class:"setting-select",variant:"outlined","bg-color":"surface","item-title":"title","item-value":"value"},null,8,["modelValue","items","disabled","onUpdate:modelValue"])):a.type==="number"?(T(),Z("div",Ds,[n(R,{icon:"mdi-minus",size:"small",variant:"text",disabled:o.disabled||a.localValue<=a.minValue,onClick:t[2]||(t[2]=l=>u.adjustValue(-a.stepValue))},null,8,["disabled"]),n(Te,{modelValue:a.localValue,"onUpdate:modelValue":[t[3]||(t[3]=l=>a.localValue=l),u.updateSetting],modelModifiers:{number:!0},type:"number",density:"compact","hide-details":"",min:a.minValue,max:a.maxValue,step:a.stepValue,disabled:o.disabled,class:"mx-2 setting-number-field",style:{width:"80px"},variant:"outlined","bg-color":"surface"},null,8,["modelValue","min","max","step","disabled","onUpdate:modelValue"]),n(R,{icon:"mdi-plus",size:"small",variant:"text",disabled:o.disabled||a.localValue>=a.maxValue,onClick:t[4]||(t[4]=l=>u.adjustValue(a.stepValue))},null,8,["disabled"])])):re("",!0)])):re("",!0),n(Ye,{location:"bottom"},{activator:s(({props:l})=>[n(R,oe({icon:"mdi-dots-vertical",size:"small",variant:"text"},l,{class:"ml-2",disabled:o.disabled}),null,16,["disabled"])]),default:s(()=>[n(fe,{density:"compact"},{default:s(()=>[n(K,{onClick:u.copySettingId},{prepend:s(()=>[n(Q,{icon:"mdi-key",size:"small"})]),default:s(()=>[n(X,null,{default:s(()=>t[7]||(t[7]=[w("复制设置ID")])),_:1})]),_:1},8,["onClick"]),n(K,{onClick:u.copySettingValue},{prepend:s(()=>[n(Q,{icon:"mdi-content-copy",size:"small"})]),default:s(()=>[n(X,null,{default:s(()=>t[8]||(t[8]=[w("复制设置值")])),_:1})]),_:1},8,["onClick"]),n(W),n(K,{onClick:u.resetToDefault,disabled:u.isDefaultValue},{prepend:s(()=>[n(Q,{icon:"mdi-restore",size:"small"})]),default:s(()=>[n(X,null,{default:s(()=>t[9]||(t[9]=[w("重置为默认值")])),_:1})]),_:1},8,["onClick","disabled"])]),_:1})]),_:1})])]),default:s(()=>[n(X,{class:"text-wrap"},{default:s(()=>[w(te(u.displayTitle),1)]),_:1}),n(ve,{class:"d-flex align-center text-wrap"},{default:s(()=>[ae("span",Cs,te(o.settingKey),1)]),_:1})]),_:1},8,["disabled"]),a.type==="string"&&!a.hasOptions?(T(),Z("div",Es,[n(Te,{modelValue:a.localValue,"onUpdate:modelValue":[t[5]||(t[5]=l=>a.localValue=l),u.updateSetting],density:"compact","hide-details":"",disabled:o.disabled,class:"setting-text-field mt-1",variant:"outlined","bg-color":"surface"},null,8,["modelValue","disabled","onUpdate:modelValue"])])):re("",!0),n(qn,{modelValue:a.showSnackbar,"onUpdate:modelValue":t[6]||(t[6]=l=>a.showSnackbar=l),timeout:2e3,color:"success",location:"top"},{default:s(()=>[w(te(a.snackbarText),1)]),_:1},8,["modelValue"])],64)}const De=de(_s,[["render",As],["__scopeId","data-v-d5f17fb4"]]),Is={name:"SettingsExplorer",components:{SettingItem:De},data(){return{searchQuery:"",currentSettings:{},unwatchFunction:null}},computed:{isDeveloperMode(){return P("developer.enabled")},allSettings(){var t;const e=[];for(const[o,r]of Object.entries(Wn))this.searchQuery&&!o.toLowerCase().includes(this.searchQuery.toLowerCase())&&!((t=r.description)!=null&&t.toLowerCase().includes(this.searchQuery.toLowerCase()))||e.push({key:o,...r});return e},formattedSettings(){return JSON.stringify(this.currentSettings,null,2)}},created(){this.updateCurrentSettings(),this.unwatchFunction=Ot(()=>{this.updateCurrentSettings()})},beforeUnmount(){this.unwatchFunction&&this.unwatchFunction()},methods:{updateCurrentSettings(){this.currentSettings=$n()},onSettingUpdate(e,t){this.$emit("update",e,t),this.updateCurrentSettings()},onSettingError(e){this.$emit("error",e)},copySettingsToClipboard(){navigator.clipboard.writeText(JSON.stringify(this.currentSettings)).then(()=>{this.$emit("message",{type:"success",text:"设置已复制到剪贴板"})}).catch(e=>{console.error("复制到剪贴板失败:",e),this.$emit("message",{type:"error",text:"复制到剪贴板失败"})})}}},Ns={class:"settings-explorer"},Ps={class:"settings-json"};function Ms(e,t,o,r,a,u){const l=De;return T(),Z("div",Ns,[ae("div",null,[n(Te,{modelValue:a.searchQuery,"onUpdate:modelValue":t[0]||(t[0]=d=>a.searchQuery=d),label:"搜索设置","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"comfortable",class:"mb-4"},null,8,["modelValue"]),n(fe,null,{default:s(()=>[(T(!0),Z(he,null,nt(u.allSettings,d=>(T(),Z("div",{key:d.key},[(T(),H(l,{key:d.key,"setting-key":d.key,disabled:d.requireDeveloper&&!u.isDeveloperMode,onUpdate:u.onSettingUpdate,onError:u.onSettingError},null,8,["setting-key","disabled","onUpdate","onError"])),n(W,{class:"my-2"})]))),128))]),_:1}),n(_e,{border:""},{default:s(()=>[n(Ee,{class:"text-subtitle-1"},{default:s(()=>t[1]||(t[1]=[w("当前配置")])),_:1}),n(xe,null,{default:s(()=>[ae("pre",Ps,te(u.formattedSettings),1)]),_:1}),n(ot,null,{default:s(()=>[n(it),n(R,{onClick:u.copySettingsToClipboard},{default:s(()=>[t[3]||(t[3]=w(" 复制到剪贴板 ")),n(Q,{right:""},{default:s(()=>t[2]||(t[2]=[w("mdi-content-copy")])),_:1})]),_:1},8,["onClick"])]),_:1})]),_:1})])])}const jt=de(Is,[["render",Ms],["__scopeId","data-v-da09fd0e"]]),Os="Classworks",Bs="module",Ls="0.0.0",Fs={dev:"vite --host",build:"vite build",preview:"vite preview",lint:"eslint . --fix"},Rs={"@mdi/font":"7.4.47",axios:"^1.8.4",idb:"^8.0.2","pinyin-pro":"^3.26.0","roboto-fontface":"*","typewriter-effect":"^2.21.0",vue:"^3.4.31",vuetify:"^3.8.0"},Us={"@eslint/js":"^9.14.0","@vite-pwa/assets-generator":"^1.0.0","@vitejs/plugin-vue":"^5.2.3",eslint:"^9.14.0","eslint-plugin-import":"^2.29.1","eslint-plugin-n":"^16.6.2","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^6.4.0","eslint-plugin-vue":"^9.30.0",pinia:"^3.0.1",sass:"1.86.3","sass-embedded":"^1.86.3","unplugin-auto-import":"^19.1.2","unplugin-fonts":"^1.3.1","unplugin-vue-components":"^28.4.1","unplugin-vue-router":"^0.12.0",vite:"^5.4.17","vite-plugin-pwa":"^1.0.0","vite-plugin-vue-layouts":"^0.11.0","vite-plugin-vuetify":"^2.1.1","vue-router":"^4.5.0"},bt={name:Os,private:!0,type:Bs,version:Ls,scripts:Fs,dependencies:Rs,devDependencies:Us},js={name:"AboutCard",setup(){const e=ge([]),t=ge(!1),o=()=>{try{const a={...bt.dependencies||{},...bt.devDependencies||{}},u=Object.entries(a).map(([l,d])=>({name:l,version:d.replace(/[\^~]/g,""),description:r(l)}));e.value=u}catch(a){console.error("加载依赖信息失败:",a),e.value=[]}},r=a=>({vue:"渐进式 JavaScript 框架",vuetify:"材料设计组件框架",axios:"Promise 基础的 HTTP 客户端",pinia:"Vue 状态管理库","vue-router":"Vue.js 官方路由管理器","@vitejs/plugin-vue":"Vite 的 Vue 插件"})[a]||"";return It(()=>{o()}),{Dependencies:e,showDeps:t}}},Hs={class:"d-flex flex-column align-start"},zs={class:"d-flex gap-2 flex-wrap mb-6"},Ks={class:"text-caption text-medium-emphasis"};function Qs(e,t,o,r,a,u){return T(),H(_e,{border:""},{default:s(()=>[n(lt,null,{prepend:s(()=>[n(Q,{icon:"mdi-information",size:"large",class:"mr-2"})]),default:s(()=>[n(Ee,{class:"text-h6"},{default:s(()=>t[3]||(t[3]=[w("关于")])),_:1})]),_:1}),n(xe,null,{default:s(()=>[n(Ie,null,{default:s(()=>[n(ie,{cols:"12",md:"8",class:"mx-auto"},{default:s(()=>[ae("div",Hs,[n(at,{size:"120",class:"mb-4"},{default:s(()=>[n(Ft,{src:"https://github.com/SunWuyuan.png",alt:"Sunwuyuan"})]),_:1}),t[20]||(t[20]=ae("h2",{class:"text-h5 mb-2"},"Classworks",-1)),t[21]||(t[21]=ae("p",{class:"text-body-1 mb-4"},"适用于班级大屏的作业板小工具",-1)),ae("div",zs,[n(R,{color:"red",variant:"tonal",href:"https://github.com/ClassworksDev/Classworks/issues",target:"_blank","prepend-icon":"mdi-bug"},{default:s(()=>t[4]||(t[4]=[w(" 报告问题 ")])),_:1}),n(R,{color:"primary",variant:"tonal",href:"https://qm.qq.com/q/qNBX4ZZVeg",target:"_blank","prepend-icon":"mdi-qqchat"},{default:s(()=>t[5]||(t[5]=[w(" QQ 群 ")])),_:1}),n(R,{variant:"text",href:"https://github.com/ClassworksDev/Classworks",target:"_blank","prepend-icon":"mdi-github"},{default:s(()=>t[6]||(t[6]=[w(" 前端 ")])),_:1}),n(R,{variant:"text",href:"https://github.com/ClassworksDev/ClassworksServer",target:"_blank","prepend-icon":"mdi-github"},{default:s(()=>t[7]||(t[7]=[w(" 后端 ")])),_:1})]),n(W,{class:"mb-4 w-100"}),t[22]||(t[22]=ae("h3",{class:"text-h6 mb-2"},"备注与致谢",-1)),n(fe,{class:"mb-4 bg-transparent"},{default:s(()=>[n(K,{href:"https://github.com/EnderWolf006/HomeworkBoard",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[n(X,null,{default:s(()=>t[8]||(t[8]=[w(" 本项目受到 HomeworkBoard 的启发而开发 ")])),_:1}),n(ve,null,{default:s(()=>t[9]||(t[9]=[w(" 感谢 EnderWolf006 (@EnderWolf) fhzit(@Hellofhz) KeyFac 等人的贡献 ")])),_:1})]),_:1}),n(K,{href:"https://houlangs.com",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[n(X,null,{default:s(()=>t[10]||(t[10]=[w(" Classworks 由"),ae("strong",null,"厚浪云",-1),w("提供 ")])),_:1}),n(ve,null,{default:s(()=>t[11]||(t[11]=[w(" 长江后浪推前浪 浮事新人换旧人 ")])),_:1})]),_:1}),n(K,{href:"https://zerocat.houlangs.com",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[n(X,null,{default:s(()=>t[12]||(t[12]=[w(" 感谢 ZeroCat 社区的开发者们 ")])),_:1}),n(ve,null,{default:s(()=>t[13]||(t[13]=[w(" 新一代,开源,编程社区 ")])),_:1})]),_:1}),n(W,{class:"ma-1"}),n(K,{href:"https://github.com/HUSX100/IslandCaller",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[n(X,null,{default:s(()=>t[14]||(t[14]=[w(" 本项目与 IslandCaller 没有从属关系 ")])),_:1}),n(ve,null,{default:s(()=>t[15]||(t[15]=[w(" IslandCaller 是由 HUSX100 开发的基于 ClassIsland 提醒服务的轻量级点名器 ")])),_:1})]),_:1}),n(K,{href:"https://classisland.tech",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[n(X,null,{default:s(()=>t[16]||(t[16]=[w(" 本项目与 ClassIsland 没有从属关系 ")])),_:1}),n(ve,null,{default:s(()=>t[17]||(t[17]=[w(" ClassIsland 是由 HelloWRC 开发的适用于班级大屏的课表信息显示工具 ")])),_:1})]),_:1})]),_:1}),n(R,{variant:"text",class:"mb-4","prepend-icon":"mdi-package-variant",onClick:t[0]||(t[0]=l=>r.showDeps=!0)},{default:s(()=>t[18]||(t[18]=[w(" 查看使用的第三方库 ")])),_:1}),n(_t,{modelValue:r.showDeps,"onUpdate:modelValue":t[2]||(t[2]=l=>r.showDeps=l),transition:"dialog-bottom-transition",fullscreen:""},{default:s(()=>[n(_e,null,{default:s(()=>[n(fn,null,{default:s(()=>[n(R,{icon:"mdi-close",onClick:t[1]||(t[1]=l=>r.showDeps=!1)}),n(pn,null,{default:s(()=>t[19]||(t[19]=[w("使用的第三方库")])),_:1}),n(it)]),_:1}),n(xe,null,{default:s(()=>[n(fe,null,{default:s(()=>[(T(!0),Z(he,null,nt(r.Dependencies,l=>(T(),H(K,{key:l.name,href:"https://www.npmjs.com/package/"+l.name,target:"_blank","append-icon":"mdi-link"},{default:s(()=>[n(X,null,{default:s(()=>[w(te(l.name),1)]),_:2},1024),n(ve,null,{default:s(()=>[w(" v"+te(l.version),1)]),_:2},1024)]),_:2},1032,["href"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),ae("p",Ks," Copyright © "+te(new Date().getFullYear())+" Sunwuyuan ",1)])]),_:1})]),_:1})]),_:1})]),_:1})}const Ht=de(js,[["render",Qs]]),qs={name:"SettingsCard",props:{title:{type:String,required:!0},icon:{type:String,required:!0},loading:{type:Boolean,default:!1}}};function $s(e,t,o,r,a,u){return T(),H(_e,{elevation:"2",class:"settings-card rounded-lg"},{default:s(()=>[n(lt,null,{prepend:s(()=>[n(Q,{icon:o.icon,size:"large",class:"mr-2"},null,8,["icon"])]),default:s(()=>[n(Ee,{class:"text-h6"},{default:s(()=>[w(te(o.title),1)]),_:1})]),_:1}),n(xe,null,{default:s(()=>[o.loading?(T(),H(Bt,{key:0,indeterminate:"",color:"primary",class:"mb-4"})):re("",!0),mt(e.$slots,"default",{},void 0,!0)]),_:3}),e.$slots.actions?(T(),H(ot,{key:0,class:"pa-4"},{default:s(()=>[mt(e.$slots,"actions",{},void 0,!0)]),_:3})):re("",!0)]),_:3})}const le=de(qs,[["render",$s],["__scopeId","data-v-3e8918ff"]]);var Ws=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Js(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var zt={exports:{}};(function(e,t){(function(o,r){e.exports=r()})(typeof self<"u"?self:Ws,()=>(()=>{var o={75:function(l){(function(){var d,c,g,v,x,m;typeof performance<"u"&&performance!==null&&performance.now?l.exports=function(){return performance.now()}:typeof process<"u"&&process!==null&&process.hrtime?(l.exports=function(){return(d()-x)/1e6},c=process.hrtime,v=(d=function(){var b;return 1e9*(b=c())[0]+b[1]})(),m=1e9*process.uptime(),x=v-m):Date.now?(l.exports=function(){return Date.now()-g},g=Date.now()):(l.exports=function(){return new Date().getTime()-g},g=new Date().getTime())}).call(this)},4087:(l,d,c)=>{for(var g=c(75),v=typeof window>"u"?c.g:window,x=["moz","webkit"],m="AnimationFrame",b=v["request"+m],M=v["cancel"+m]||v["cancelRequest"+m],B=0;!b&&B{var d=l&&l.__esModule?()=>l.default:()=>l;return a.d(d,{a:d}),d},a.d=(l,d)=>{for(var c in d)a.o(d,c)&&!a.o(l,c)&&Object.defineProperty(l,c,{enumerable:!0,get:d[c]})},a.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}(),a.o=(l,d)=>Object.prototype.hasOwnProperty.call(l,d);var u={};return(()=>{a.d(u,{default:()=>se});var l=a(4087),d=a.n(l);const c=function(k){return new RegExp(/<[a-z][\s\S]*>/i).test(k)},g=function(k,p){return Math.floor(Math.random()*(p-k+1))+k};var v="TYPE_CHARACTER",x="REMOVE_CHARACTER",m="REMOVE_ALL",b="REMOVE_LAST_VISIBLE_NODE",M="PAUSE_FOR",B="CALL_FUNCTION",D="ADD_HTML_TAG_ELEMENT",O="CHANGE_DELETE_SPEED",C="CHANGE_DELAY",F="CHANGE_CURSOR",U="PASTE_STRING",ee="HTML_TAG";function G(k){return G=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(p){return typeof p}:function(p){return p&&typeof Symbol=="function"&&p.constructor===Symbol&&p!==Symbol.prototype?"symbol":typeof p},G(k)}function L(k,p){var V=Object.keys(k);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(k);p&&(_=_.filter(function(f){return Object.getOwnPropertyDescriptor(k,f).enumerable})),V.push.apply(V,_)}return V}function ne(k){for(var p=1;pk.length)&&(p=k.length);for(var V=0,_=new Array(p);V1&&arguments[1]!==void 0?arguments[1]:null;if(c(h))return i.typeOutHTMLString(h,y);if(h){var S=(i.options||{}).stringSplitter,N=typeof S=="function"?S(h):h.split("");i.typeCharacters(N,y)}return i}),E(this,"pasteString",function(h){var y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return c(h)?i.typeOutHTMLString(h,y,!0):(h&&i.addEventToQueue(U,{character:h,node:y}),i)}),E(this,"typeOutHTMLString",function(h){var y=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,S=arguments.length>2?arguments[2]:void 0,N=function(me){var $=document.createElement("div");return $.innerHTML=me,$.childNodes}(h);if(N.length>0)for(var A=0;A0&&arguments[0]!==void 0?arguments[0]:"natural";return i.addEventToQueue(m,{speed:h}),i}),E(this,"changeDeleteSpeed",function(h){if(!h)throw new Error("Must provide new delete speed");return i.addEventToQueue(O,{speed:h}),i}),E(this,"changeDelay",function(h){if(!h)throw new Error("Must provide new delay");return i.addEventToQueue(C,{delay:h}),i}),E(this,"changeCursor",function(h){if(!h)throw new Error("Must provide new cursor");return i.addEventToQueue(F,{cursor:h}),i}),E(this,"deleteChars",function(h){if(!h)throw new Error("Must provide amount of characters to delete");for(var y=0;y1&&arguments[1]!==void 0?arguments[1]:null;if(!h||!Array.isArray(h))throw new Error("Characters must be an array");return h.forEach(function(S){i.addEventToQueue(v,{character:S,node:y})}),i}),E(this,"removeCharacters",function(h){if(!h||!Array.isArray(h))throw new Error("Characters must be an array");return h.forEach(function(){i.addEventToQueue(x)}),i}),E(this,"addEventToQueue",function(h,y){var S=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return i.addEventToStateProperty(h,y,S,"eventQueue")}),E(this,"addReverseCalledEvent",function(h,y){var S=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return i.options.loop?i.addEventToStateProperty(h,y,S,"reverseCalledEvents"):i}),E(this,"addEventToStateProperty",function(h,y){var S=arguments.length>2&&arguments[2]!==void 0&&arguments[2],N=arguments.length>3?arguments[3]:void 0,A={eventName:h,eventArgs:y||{}};return i.state[N]=S?[A].concat(J(i.state[N])):[].concat(J(i.state[N]),[A]),i}),E(this,"runEventLoop",function(){i.state.lastFrameTime||(i.state.lastFrameTime=Date.now());var h=Date.now(),y=h-i.state.lastFrameTime;if(!i.state.eventQueue.length){if(!i.options.loop)return;i.state.eventQueue=J(i.state.calledEvents),i.state.calledEvents=[],i.options=ne({},i.state.initialOptions)}if(i.state.eventLoop=d()(i.runEventLoop),!i.state.eventLoopPaused){if(i.state.pauseUntil){if(h({typewriter:null,sourceWriter:null,currentQuote:St,hasClicked:!1}),mounted(){this.initTypewriters()},methods:{initTypewriters(){this.typewriter=new yt(this.$refs.typewriter,kt.main),this.sourceWriter=new yt(this.$refs.sourceWriter,kt.source),this.typeQuote(St)},typeQuote(e){this.typewriter.deleteAll(30).typeString(e.text).start(),e.author&&this.sourceWriter.deleteAll(20).typeString(e.author).start()},async handleClick(){this.hasClicked||(this.hasClicked=!0),await this.copyToClipboard(),this.currentQuote=this.getRandomQuote(),this.typeQuote(this.currentQuote)},getRandomQuote(){return xt.quotes[Math.floor(Math.random()*xt.quotes.length)]},async copyToClipboard(){if(!this.currentQuote)return;const{text:e,author:t,contributor:o,link:r}=this.currentQuote,a=[e,t&&`作者:${t}`,o&&`贡献者:${o}`,(r||o)&&`来源:${r||`https://github.com/${o}`}`].filter(Boolean);try{await navigator.clipboard.writeText(a.join(` `))}catch(u){console.error("复制失败:",u)}}},beforeUnmount(){[this.typewriter,this.sourceWriter].forEach(e=>e==null?void 0:e.stop())}},Zs={ref:"typewriter",class:"typewriter-text"},ei={ref:"sourceWriter",class:"source-text"};function ti(e,t,o,r,a,u){const l=le;return T(),H(l,{border:"",title:"回声洞",icon:"mdi-thought-bubble",onClick:u.handleClick},{default:s(()=>[n(xe,null,{default:s(()=>[ae("div",Zs,null,512),ae("div",ei,null,512)]),_:1}),n(Jn,{name:"fade"},{default:s(()=>{var d;return[(d=e.currentQuote)!=null&&d.contributor?(T(),H(st,{key:0,class:"contributor"},{default:s(()=>[n(at,{start:""},{default:s(()=>[n(Ft,{src:`https://github.com/${e.currentQuote.contributor}.png`},null,8,["src"])]),_:1}),w(" "+te(e.currentQuote.contributor),1)]),_:1})):re("",!0)]}),_:1})]),_:1},8,["onClick"])}const Kt=de(Xs,[["render",ti],["__scopeId","data-v-5c15976c"]]),ni={name:"UnsavedWarning",props:{show:Boolean,message:{type:String,default:"未保存"}}},si={class:"warning-container"};function ii(e,t,o,r,a,u){return T(),Z("div",si,[o.show?(T(),H(st,{key:0,color:"warning",size:"small",class:"warning-chip"},{default:s(()=>[w(te(o.message),1)]),_:1})):re("",!0)])}const Qt=de(ni,[["render",ii],["__scopeId","data-v-0668f179"]]),ai=pe({disabled:Boolean,modelValue:{type:Boolean,default:null},...Yn()},"VHover"),oi=Se()({name:"VHover",props:ai(),emits:{"update:modelValue":e=>!0},setup(e,t){let{slots:o}=t;const r=ye(e,"modelValue"),{runOpenDelay:a,runCloseDelay:u}=Gn(e,l=>!e.disabled&&(r.value=l));return()=>{var l;return(l=o.default)==null?void 0:l.call(o,{isHovering:r.value,props:{onMouseenter:a,onMouseleave:u}})}}}),li={name:"StudentListCard",components:{UnsavedWarning:Qt},props:{modelValue:{type:Object,required:!0,default:()=>({list:[],text:"",advanced:!1})},loading:Boolean,error:String,isMobile:Boolean,unsavedChanges:Boolean},data(){return{newStudentName:"",editState:{index:-1,name:""}}},emits:["update:modelValue","save","reload"],computed:{text:{get(){return this.modelValue.text},set(e){this.handleTextInput(e)}}},methods:{toggleAdvanced(){const e=!this.modelValue.advanced;this.updateModelValue({advanced:e,text:e?this.modelValue.list.join(` `):this.modelValue.text,list:this.modelValue.list})},updateModelValue(e){this.$emit("update:modelValue",{...this.modelValue,...e})},addStudent(){const e=this.newStudentName.trim();if(!e||this.modelValue.list.includes(e))return;const t=[...this.modelValue.list,e];this.updateModelValue({list:t,text:t.join(` `)}),this.newStudentName=""},removeStudent(e){const t=this.modelValue.list.filter((o,r)=>r!==e);this.updateModelValue({list:t,text:t.join(` `)})},moveStudent(e,t){const o=[...this.modelValue.list];let r;if(t==="top"?r=0:t==="up"?r=e-1:r=e+1,r>=0&&ro.trim()).filter(o=>o);this.updateModelValue({text:e,list:t})},sortStudentsByPinyin(){const e=[...this.modelValue.list].sort((t,o)=>{const r=ht(t,{toneType:"none",mode:"surname"}),a=ht(o,{toneType:"none",mode:"surname"});return r.localeCompare(a)});this.updateModelValue({list:e,text:e.join(` `)})}}},ui={key:0},ri=["onClick"],di={key:1,class:"pt-2"};function ci(e,t,o,r,a,u){const l=Qt;return T(),H(_e,{border:"",color:o.unsavedChanges?"warning-subtle":void 0,class:gt({"unsaved-changes":o.unsavedChanges})},{default:s(()=>[n(lt,null,{prepend:s(()=>[n(Q,{icon:"mdi-account-group",size:"large",class:"mr-2"})]),append:s(()=>[n(l,{show:o.unsavedChanges,message:"有未保存的更改"},null,8,["show"]),n(R,{"prepend-icon":"mdi-sort-alphabetical-variant",variant:"text",class:"mr-2",onClick:u.sortStudentsByPinyin,disabled:o.modelValue.list.length===0},{default:s(()=>t[6]||(t[6]=[w(" 按姓名首字母排序 ")])),_:1},8,["onClick","disabled"]),n(R,{color:o.modelValue.advanced?"primary":void 0,variant:"text","prepend-icon":"mdi-code-braces",onClick:u.toggleAdvanced},{default:s(()=>[w(te(o.modelValue.advanced?"返回基础编辑":"高级编辑"),1)]),_:1},8,["color","onClick"])]),default:s(()=>[n(Ee,{class:"text-h6"},{default:s(()=>t[5]||(t[5]=[w("学生列表")])),_:1})]),_:1}),n(xe,null,{default:s(()=>[o.loading?(T(),H(Bt,{key:0,indeterminate:"",color:"primary",class:"mb-4"})):re("",!0),o.error?(T(),H(as,{key:1,type:"error",variant:"tonal",closable:"",class:"mb-4"},{default:s(()=>[w(te(o.error),1)]),_:1})):re("",!0),n(Lt,null,{default:s(()=>[o.modelValue.advanced?(T(),Z("div",di,[n(Ct,{modelValue:u.text,"onUpdate:modelValue":t[2]||(t[2]=d=>u.text=d),label:"批量编辑学生列表",placeholder:"每行输入一个学生姓名",hint:"使用文本编辑模式批量编辑学生名单,保存时会自动去除空行","persistent-hint":"",variant:"outlined",rows:"10",onInput:u.handleTextInput},null,8,["modelValue","onInput"])])):(T(),Z("div",ui,[n(Ie,{class:"mb-6"},{default:s(()=>[n(ie,{cols:"12",sm:"6",md:"4"},{default:s(()=>[n(Te,{modelValue:a.newStudentName,"onUpdate:modelValue":t[0]||(t[0]=d=>a.newStudentName=d),label:"添加学生",placeholder:"输入学生姓名后回车添加","prepend-inner-icon":"mdi-account-plus",variant:"outlined","hide-details":"",class:"mb-4",onKeyup:vt(u.addStudent,["enter"])},{append:s(()=>[n(R,{icon:"mdi-plus",variant:"text",color:"primary",disabled:!a.newStudentName.trim(),onClick:u.addStudent},null,8,["disabled","onClick"])]),_:1},8,["modelValue","onKeyup"])]),_:1})]),_:1}),n(Ie,null,{default:s(()=>[(T(!0),Z(he,null,nt(o.modelValue.list,(d,c)=>(T(),H(ie,{key:c,cols:"12",sm:"6",md:"4",lg:"3"},{default:s(()=>[n(oi,null,{default:s(({isHovering:g,props:v})=>[n(_e,oe({ref_for:!0},v,{elevation:o.isMobile?1:g?4:1,class:"student-card",border:""}),{default:s(()=>[n(xe,{class:"d-flex align-center pa-3"},{default:s(()=>[n(Ye,{location:"bottom","open-on-hover":!o.isMobile},{activator:s(({props:x})=>[n(R,oe({variant:"tonal",size:"small",class:"mr-3 font-weight-medium",ref_for:!0},x),{default:s(()=>[w(te(c+1),1)]),_:2},1040)]),default:s(()=>[n(fe,{density:"compact",nav:""},{default:s(()=>[n(K,{"prepend-icon":"mdi-arrow-up-bold",disabled:c===0,onClick:x=>u.moveStudent(c,"top")},{default:s(()=>t[7]||(t[7]=[w(" 置顶 ")])),_:2},1032,["disabled","onClick"]),n(W),n(K,{"prepend-icon":"mdi-arrow-up",disabled:c===0,onClick:x=>u.moveStudent(c,"up")},{default:s(()=>t[8]||(t[8]=[w(" 上移 ")])),_:2},1032,["disabled","onClick"]),n(K,{"prepend-icon":"mdi-arrow-down",disabled:c===o.modelValue.list.length-1,onClick:x=>u.moveStudent(c,"down")},{default:s(()=>t[9]||(t[9]=[w(" 下移 ")])),_:2},1032,["disabled","onClick"])]),_:2},1024)]),_:2},1032,["open-on-hover"]),a.editState.index===c?(T(),H(Te,{key:0,modelValue:a.editState.name,"onUpdate:modelValue":t[1]||(t[1]=x=>a.editState.name=x),density:"compact",variant:"underlined","hide-details":"",class:"flex-grow-1",autofocus:"",onKeyup:vt(u.saveEdit,["enter"]),onBlur:u.saveEdit},null,8,["modelValue","onKeyup","onBlur"])):(T(),Z("span",{key:1,class:"text-body-1 flex-grow-1",onClick:x=>u.handleClick(c,d)},te(d),9,ri)),ae("div",{class:gt(["d-flex gap-1 action-buttons",{"opacity-100":g||o.isMobile}])},[n(R,{icon:"mdi-pencil",variant:"text",color:"primary",size:"small",onClick:x=>u.startEdit(c,d)},null,8,["onClick"]),n(R,{icon:"mdi-delete",variant:"text",color:"error",size:"small",onClick:x=>u.removeStudent(c)},null,8,["onClick"])],2)]),_:2},1024)]),_:2},1040,["elevation"])]),_:2},1024)]),_:2},1024))),128))]),_:1})]))]),_:1}),n(Ie,{class:"mt-6"},{default:s(()=>[n(ie,{cols:"12",class:"d-flex gap-2"},{default:s(()=>[n(R,{color:"primary","prepend-icon":"mdi-content-save",size:"large",loading:o.loading,disabled:o.loading,onClick:t[3]||(t[3]=d=>e.$emit("save"))},{default:s(()=>t[10]||(t[10]=[w(" 保存名单 ")])),_:1},8,["loading","disabled"]),n(R,{color:"error",variant:"outlined","prepend-icon":"mdi-refresh",size:"large",loading:o.loading,disabled:o.loading,onClick:t[4]||(t[4]=d=>e.$emit("reload"))},{default:s(()=>t[11]||(t[11]=[w(" 重载名单 ")])),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["color","class"])}const qt=de(li,[["render",ci],["__scopeId","data-v-9de1f8ce"]]),hi={name:"ThemeSettingsCard",components:{SettingsCard:le},data(){return{localTheme:P("theme.mode")}},watch:{localTheme(e){tt("theme.mode",e),this.updateTheme(e)}},setup(){return{theme:Xn()}},methods:{updateTheme(e){this.theme.global.name.value=e}}};function wi(e,t,o,r,a,u){const l=le;return T(),H(l,{title:"主题设置",icon:"mdi-palette"},{default:s(()=>[n(fe,null,{default:s(()=>[n(K,null,{prepend:s(()=>[n(Q,{icon:"mdi-theme-light-dark",class:"mr-3"})]),append:s(()=>[n(Zn,{modelValue:a.localTheme,"onUpdate:modelValue":t[0]||(t[0]=d=>a.localTheme=d),density:"comfortable",color:"primary"},{default:s(()=>[n(R,{value:"light"},{default:s(()=>[n(Q,{icon:"mdi-white-balance-sunny",class:"mr-2"}),t[3]||(t[3]=w(" 明亮 "))]),_:1}),n(R,{value:"dark"},{default:s(()=>[n(Q,{icon:"mdi-moon-waning-crescent",class:"mr-2"}),t[4]||(t[4]=w(" 暗黑 "))]),_:1})]),_:1},8,["modelValue"])]),default:s(()=>[n(X,null,{default:s(()=>t[1]||(t[1]=[w("主题模式")])),_:1}),n(ve,null,{default:s(()=>t[2]||(t[2]=[w("选择明亮或暗黑主题")])),_:1})]),_:1})]),_:1})]),_:1})}const $t=de(hi,[["render",wi]]),fi={name:"DisplaySettingsCard",components:{SettingsCard:le,SettingItem:De},data(){return{}}};function pi(e,t,o,r,a,u){const l=De,d=le;return T(),H(d,{title:"显示设置",icon:"mdi-monitor",border:""},{default:s(()=>[n(fe,null,{default:s(()=>[n(l,{"setting-key":"display.emptySubjectDisplay"}),n(W,{class:"my-2"}),n(l,{"setting-key":"display.dynamicSort"}),n(W,{class:"my-2"}),n(l,{"setting-key":"display.showRandomButton"}),n(W,{class:"my-2"}),n(l,{"setting-key":"display.showFullscreenButton"}),n(W,{class:"my-2"}),n(l,{"setting-key":"display.cardHoverEffect"}),n(W,{class:"my-2"}),n(l,{"setting-key":"display.enhancedTouchMode"}),n(W,{class:"my-2"}),n(l,{"setting-key":"display.showAntiScreenBurnCard"})]),_:1})]),_:1})}const Wt=de(fi,[["render",pi]]),mi=pe({...Ne(),...vn()},"VForm"),Jt=Se()({name:"VForm",props:mi(),emits:{"update:modelValue":e=>!0,submit:e=>!0},setup(e,t){let{slots:o,emit:r}=t;const a=mn(e),u=ge();function l(c){c.preventDefault(),a.reset()}function d(c){const g=c,v=a.validate();g.then=v.then.bind(v),g.catch=v.catch.bind(v),g.finally=v.finally.bind(v),r("submit",g),g.defaultPrevented||v.then(x=>{var b;let{valid:m}=x;m&&((b=u.value)==null||b.submit())}),g.preventDefault()}return Ce(()=>{var c;return n("form",{ref:u,class:["v-form",e.class],style:e.style,novalidate:!0,onReset:l,onSubmit:d},[(c=o.default)==null?void 0:c.call(o,a)])}),Pt(a,u)}}),vi={name:"RefreshSettingsCard",components:{SettingsCard:le},data(){return{}}};function gi(e,t,o,r,a,u){const l=De,d=le;return T(),H(d,{title:"刷新设置",icon:"mdi-refresh-circle"},{default:s(()=>[n(Jt,null,{default:s(()=>[n(fe,null,{default:s(()=>[n(l,{"setting-key":"refresh.auto",title:"自动刷新"}),t[0]||(t[0]=w()),n(W,{class:"my-2"}),n(l,{"setting-key":"refresh.interval",title:"刷新间隔"})]),_:1})]),_:1})]),_:1})}const Gt=de(vi,[["render",gi]]),bi={};function yi(e,t,o,r,a,u){const l=De,d=le;return T(),H(d,{title:"编辑设置",icon:"mdi-cog"},{default:s(()=>[n(fe,null,{default:s(()=>[n(l,{"setting-key":"edit.autoSave"}),n(W,{class:"my-2"}),n(l,{"setting-key":"edit.blockNonTodayAutoSave"}),n(W,{class:"my-2"}),n(l,{"setting-key":"edit.confirmNonTodaySave"}),n(W,{class:"my-2"}),n(l,{"setting-key":"edit.refreshBeforeEdit"})]),_:1})]),_:1})}const Yt=de(bi,[["render",yi]]),xi={name:"DataProviderSettingsCard",components:{SettingsCard:le},data(){return{loading:!1,serverchecktime:{},confirmDialog:!1,confirmTitle:"",confirmMessage:"",confirmAction:null}},computed:{currentProvider(){return P("server.provider")}},methods:{async checkServerConnection(){this.loading=!0,this.serverchecktime=new Date;try{const e=P("server.domain");if((await gn.get(`${e}/api/test`,{method:"GET",headers:{Accept:"application/json"}})).data.status==="success")this.$message.success("连接成功","服务器连接正常 延迟"+(new Date-this.serverchecktime)+"ms");else throw new Error("服务器响应异常")}catch(e){this.$message.error("连接失败",e.message||"无法连接到服务器")}finally{this.loading=!1}},confirmClearLocalStorage(){this.confirmTitle="确认清除",this.confirmMessage="此操作将清除所有本地存储的数据,确定要继续吗?",this.confirmAction=this.clearLocalStorage,this.confirmDialog=!0},clearLocalStorage(){try{localStorage.clear(),this.$message.success("清除成功","本地存储数据已清除"),this.confirmDialog=!1}catch(e){this.$message.error("清除失败",e.message)}},confirmClearIndexedDB(){this.confirmTitle="确认清除",this.confirmMessage="此操作将清除所有IndexedDB中的数据,确定要继续吗?",this.confirmAction=this.clearIndexedDB,this.confirmDialog=!0},async clearIndexedDB(){try{await window.indexedDB.deleteDatabase("ClassworksDB"),this.$message.success("清除成功","数据库缓存已清除"),this.confirmDialog=!1}catch(e){this.$message.error("清除失败",e.message)}},async exportData(){try{const e="ClassworksDB",t={indexedDB:{}},o=await new Promise((c,g)=>{const v=window.indexedDB.open(e);v.onerror=()=>g(v.error),v.onsuccess=()=>c(v.result)}),r=Array.from(o.objectStoreNames);for(const c of r){const v=o.transaction(c,"readonly").objectStore(c),x=await new Promise((m,b)=>{const M=v.getAll();M.onerror=()=>b(M.error),M.onsuccess=()=>m(M.result)});t.indexedDB[c]=x}const a=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),u=URL.createObjectURL(a),l=document.createElement("a"),d=new Date().toISOString().split("T")[0];l.href=u,l.download=`homework-indexeddb-${d}.json`,l.click(),URL.revokeObjectURL(u),this.$message.success("导出成功","IndexedDB数据已导出")}catch(e){console.error("导出失败:",e),this.$message.error("导出失败",e.message||"无法导出数据库数据")}},handleConfirm(){this.confirmAction&&this.confirmAction()}}};function Si(e,t,o,r,a,u){const l=le;return T(),H(l,{title:"数据源设置",icon:"mdi-database-cog"},{default:s(()=>[n(fe,null,{default:s(()=>[u.currentProvider==="server"?(T(),H(K,{key:0},{prepend:s(()=>[n(Q,{icon:"mdi-lan-connect",class:"mr-3"})]),append:s(()=>[n(R,{loading:a.loading,variant:"tonal",onClick:u.checkServerConnection},{default:s(()=>t[3]||(t[3]=[w(" 测试连接 ")])),_:1},8,["loading","onClick"])]),default:s(()=>[n(X,null,{default:s(()=>t[2]||(t[2]=[w("检查服务器连接")])),_:1})]),_:1})):re("",!0),u.currentProvider==="indexedDB"?(T(),Z(he,{key:1},[n(K,null,{prepend:s(()=>[n(Q,{icon:"mdi-database",class:"mr-3"})]),append:s(()=>[n(R,{color:"error",variant:"tonal",onClick:u.confirmClearIndexedDB},{default:s(()=>t[6]||(t[6]=[w(" 清除 ")])),_:1},8,["onClick"])]),default:s(()=>[n(X,null,{default:s(()=>t[4]||(t[4]=[w("清除数据库缓存")])),_:1}),n(ve,null,{default:s(()=>t[5]||(t[5]=[w("这将清除所有IndexedDB中的数据")])),_:1})]),_:1}),n(K,null,{prepend:s(()=>[n(Q,{icon:"mdi-database-export",class:"mr-3"})]),append:s(()=>[n(R,{variant:"tonal",onClick:u.exportData},{default:s(()=>t[8]||(t[8]=[w(" 导出 ")])),_:1},8,["onClick"])]),default:s(()=>[n(X,null,{default:s(()=>t[7]||(t[7]=[w("导出数据库")])),_:1})]),_:1})],64)):re("",!0),n(K,null,{prepend:s(()=>[n(Q,{icon:"mdi-lan-connect",class:"mr-3"})]),append:s(()=>[n(R,{variant:"tonal",to:"/cachemanagement"},{default:s(()=>t[10]||(t[10]=[w(" 查看 ")])),_:1})]),default:s(()=>[n(X,null,{default:s(()=>t[9]||(t[9]=[w("查看本地缓存")])),_:1})]),_:1})]),_:1}),n(_t,{modelValue:a.confirmDialog,"onUpdate:modelValue":t[1]||(t[1]=d=>a.confirmDialog=d),"max-width":"400"},{default:s(()=>[n(_e,null,{default:s(()=>[n(Ee,null,{default:s(()=>[w(te(a.confirmTitle),1)]),_:1}),n(xe,null,{default:s(()=>[w(te(a.confirmMessage),1)]),_:1}),n(ot,null,{default:s(()=>[n(it),n(R,{color:"grey",variant:"text",onClick:t[0]||(t[0]=d=>a.confirmDialog=!1)},{default:s(()=>t[11]||(t[11]=[w("取消")])),_:1}),n(R,{color:"error",variant:"tonal",onClick:u.handleConfirm},{default:s(()=>t[12]||(t[12]=[w("确认")])),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})}const Xt=de(xi,[["render",Si]]),ki={name:"ServerSettingsCard",components:{SettingsCard:le},props:{loading:Boolean},data(){return{}}};function _i(e,t,o,r,a,u){const l=De,d=le;return T(),H(d,{title:"数据源设置",icon:"mdi-database",loading:o.loading},{default:s(()=>[n(Jt,null,{default:s(()=>[n(l,{"setting-key":"server.provider",title:"数据提供者"}),n(W,{class:"my-2"}),n(l,{"setting-key":"server.domain",title:"服务器域名"}),t[0]||(t[0]=w()),n(W,{class:"my-2"}),n(l,{"setting-key":"server.classNumber",title:"班号"})]),_:1})]),_:1},8,["loading"])}const Zt=de(ki,[["render",_i]]),Ci={name:"Settings",components:{ServerSettingsCard:Zt,EditSettingsCard:Yt,RefreshSettingsCard:Gt,DisplaySettingsCard:Wt,MessageLog:Vt,SettingsCard:le,StudentListCard:qt,AboutCard:Ht,DataProviderSettingsCard:Xt,ThemeSettingsCard:$t,EchoChamberCard:Kt,SettingsExplorer:jt},setup(){const{mobile:e}=At();return{isMobile:e}},data(){return{settings:{server:{domain:P("server.domain"),classNumber:P("server.classNumber"),provider:P("server.provider")},refresh:{auto:P("refresh.auto"),interval:P("refresh.interval")},font:{size:P("font.size")},edit:{autoSave:P("edit.autoSave"),blockNonTodayAutoSave:P("edit.blockNonTodayAutoSave"),confirmNonTodaySave:P("edit.confirmNonTodaySave"),refreshBeforeEdit:P("edit.refreshBeforeEdit")},display:{emptySubjectDisplay:P("display.emptySubjectDisplay"),dynamicSort:P("display.dynamicSort"),showRandomButton:P("display.showRandomButton"),showFullscreenButton:P("display.showFullscreenButton")},developer:{enabled:P("developer.enabled"),showDebugConfig:P("developer.showDebugConfig")},message:{showSidebar:P("message.showSidebar"),maxActiveMessages:P("message.maxActiveMessages"),timeout:P("message.timeout"),saveHistory:P("message.saveHistory")}},dataProviders:[{title:"服务器",value:"server"},{title:"本地数据库",value:"indexedDB"}],studentData:{list:[],text:"",advanced:!1},newStudent:"",editingIndex:-1,editingName:"",deleteDialog:!1,studentToDelete:null,numberDialog:!1,newPosition:"",studentToMove:null,touchStartTime:0,touchTimeout:null,studentsLoading:!1,studentsError:null,debugConfig:"",loading:{server:!1,students:!1},hasUnsavedChanges:!1,lastSavedData:null}},watch:{settings:{handler(e){this.handleSettingsChange(e)},deep:!0},studentData:{handler(e){this.lastSavedData&&(this.hasUnsavedChanges=JSON.stringify(e.list)!==JSON.stringify(this.lastSavedData)),this.studentData.text=e.list.join(` `)},deep:!0}},mounted(){this.loadAllSettings(),this.unwatchSettings=Ot(()=>{this.loadAllSettings()}),this.loadStudentList(),this.refreshDebugConfig(),this.settings.developer.enabled||(this.settings.developer.showDebugConfig=!1,this.handleSettingsChange(this.settings))},beforeUnmount(){this.unwatchSettings&&this.unwatchSettings()},methods:{loadAllSettings(){Object.keys(this.settings).forEach(e=>{Object.keys(this.settings[e]).forEach(t=>{this.settings[e][t]=P(`${e}.${t}`)})})},handleSettingsChange(e){this.settingsChangeTimeout&&clearTimeout(this.settingsChangeTimeout),this.settingsChangeTimeout=setTimeout(()=>{Object.entries(e).forEach(([t,o])=>{Object.entries(o).forEach(([r,a])=>{const u=`${t}.${r}`,l=P(u);a!==l&&(tt(u,a)?this.showMessage("设置已更新",`${u} 已保存`):(this.showError("保存失败",`${u} 设置失败`),this.settings[t][r]=l))})})},100)},showMessage(e,t="",o="success"){this.$message[o](e,t)},showError(e,t=""){this.$message.error(e,t)},async loadStudentList(){try{this.loading.students=!0,this.studentsError=null;const e=P("server.domain"),t=P("server.classNumber"),o=P("server.provider");if(!t)throw new Error("请先设置班号");const r=o==="server"?`${e}/${t}`:t,a=await wt.loadConfig(o,r);if(!a.success)throw new Error(a.error.message);a.data&&Array.isArray(a.data.studentList)&&(this.studentData.list=a.data.studentList,this.studentData.text=a.data.studentList.join(` `),this.lastSavedData=[...a.data.studentList],this.hasUnsavedChanges=!1)}catch(e){console.error("加载学生列表失败:",e),this.studentsError=e.message||"加载失败,请检查设置",this.showError("加载失败",this.studentsError)}finally{this.loading.students=!1}},async saveStudents(){try{const e=P("server.domain"),t=P("server.classNumber"),o=P("server.provider");if(!t)throw new Error("请先设置班号");const r=o==="server"?`${e}/${t}`:t,a=await wt.saveConfig(o,r,{studentList:this.studentData.list});if(!a.success)throw new Error(a.error.message);this.lastSavedData=[...this.studentData.list],this.hasUnsavedChanges=!1,this.showMessage("保存成功","学生列表已更新")}catch(e){console.error("保存学生列表失败:",e),this.showError("保存失败",e.message||"请重试")}},handleStudentDataChange(e){JSON.stringify(e.list)!==JSON.stringify(this.studentData.list)&&(this.studentData={...e},this.hasUnsavedChanges=!0)},saveEdit(){if(this.editingIndex!==-1){const e=this.editingName.trim();e&&e!==this.studentData.list[this.editingIndex]&&(this.studentData.list[this.editingIndex]=e),this.editingIndex=-1,this.editingName=""}},startEdit(e,t){this.editingIndex=e,this.editingName=t},confirmDelete(e){this.studentToDelete={index:e,name:this.studentData.list[e]},this.deleteDialog=!0},moveStudent(e,t){const o=t==="up"?e-1:e+1;o>=0&&o=0&&e0){const t=this.studentData.list[e];this.studentData.list.splice(e,1),this.studentData.list.unshift(t)}},addStudent(){const e=this.newStudent.trim();e&&!this.studentData.list.includes(e)&&(this.studentData.list.push(e),this.newStudent="")},removeStudent(e){e!==void 0&&(this.studentData.list.splice(e,1),this.deleteDialog=!1,this.studentToDelete=null)},resetFontSize(){Mt("font.size"),this.settings.font.size=P("font.size"),this.showMessage("字体已重置","字体大小已恢复默认值")},refreshDebugConfig(){const e={};Object.keys(this.settings).forEach(t=>{e[t]={},Object.keys(this.settings[t]).forEach(o=>{e[t][o]=P(`${t}.${o}`)})}),this.debugConfig=JSON.stringify(e,null,2)},async copyDebugConfig(){try{await navigator.clipboard.writeText(this.debugConfig),this.showMessage("复制成功","配置信息已复制到剪贴板")}catch(e){console.error("复制失败:",e),this.showError("复制失败","请手动复制")}},handleDeveloperChange(e){e||(this.settings.developer.showDebugConfig=!1,this.settings.message={showSidebar:!0,maxActiveMessages:5,timeout:5e3,saveHistory:!0})},resetDeveloperSettings(){this.settings.developer={enabled:!1,showDebugConfig:!1},this.settings.message={showSidebar:!0,maxActiveMessages:5,timeout:5e3,saveHistory:!0},this.handleSettingsChange(this.settings),this.showMessage("已重置","开发者设置已重置为默认值","warning")},adjustFontSize(e){const o=this.settings.font.size;e==="up"&&o<100?this.settings.font.size=o+2:e==="down"&&o>16&&(this.settings.font.size=o-2),this.handleSettingsChange(this.settings)},onSettingsSaved(){this.showMessage("设置已更新","您的设置已成功保存")},onSettingUpdate(e,t){this.showMessage("设置已更新",`${e} 已保存为 ${t}`)}}},Vi={class:"settings-page"},Ti={key:0},Di={class:"d-flex gap-2"};function Ei(e,t,o,r,a,u){const l=Zt,d=Xt,c=Yt,g=Gt,v=Wt,x=$t,m=le,b=qt,M=Kt,B=Ht,D=jt,O=Vt;return T(),Z("div",Vi,[n(yn,{elevation:"1"},{prepend:s(()=>[n(R,{icon:"mdi-arrow-left",variant:"text",onClick:t[0]||(t[0]=C=>e.$router.push("/"))})]),default:s(()=>[n(bn,{class:"text-h6"},{default:s(()=>t[5]||(t[5]=[w("设置")])),_:1})]),_:1}),n(is,{class:"py-4"},{default:s(()=>[n(Ie,null,{default:s(()=>[n(ie,{cols:"12",md:"6"},{default:s(()=>[n(l,{border:"",loading:a.loading.server,onSaved:u.onSettingsSaved},null,8,["loading","onSaved"])]),_:1}),n(ie,{cols:"12",md:"6"},{default:s(()=>[n(d,{border:""})]),_:1}),n(ie,{cols:"12",md:"6"},{default:s(()=>[n(c,{onSaved:u.onSettingsSaved,border:""},null,8,["onSaved"])]),_:1}),n(ie,{cols:"12",md:"6"},{default:s(()=>[n(g,{onSaved:u.onSettingsSaved,border:""},null,8,["onSaved"])]),_:1}),n(ie,{cols:"12",md:"6"},{default:s(()=>[n(v,{onSaved:u.onSettingsSaved,border:""},null,8,["onSaved"])]),_:1}),n(ie,{cols:"12",md:"6"},{default:s(()=>[n(x,{border:""})]),_:1}),n(ie,{cols:12,md:a.settings.developer.enabled?12:6},{default:s(()=>[n(m,{border:"",title:"开发者选项",icon:"mdi-developer-board"},{default:s(()=>[n(fe,null,{default:s(()=>[n(K,null,{prepend:s(()=>[n(Q,{icon:"mdi-code-tags",class:"mr-3"})]),append:s(()=>[n(Ge,{modelValue:a.settings.developer.enabled,"onUpdate:modelValue":t[1]||(t[1]=C=>a.settings.developer.enabled=C),density:"comfortable","hide-details":"",onChange:u.handleDeveloperChange},null,8,["modelValue","onChange"])]),default:s(()=>[n(X,null,{default:s(()=>t[6]||(t[6]=[w("启用开发者选项")])),_:1}),n(ve,null,{default:s(()=>t[7]||(t[7]=[w("启用后可以查看和修改开发者设置")])),_:1})]),_:1}),a.settings.developer.enabled?(T(),Z(he,{key:0},[n(W,{class:"my-2"}),n(K,null,{prepend:s(()=>[n(Q,{icon:"mdi-file-code",class:"mr-3"})]),append:s(()=>[n(Ge,{modelValue:a.settings.developer.showDebugConfig,"onUpdate:modelValue":t[2]||(t[2]=C=>a.settings.developer.showDebugConfig=C),density:"comfortable","hide-details":""},null,8,["modelValue"])]),default:s(()=>[n(X,null,{default:s(()=>t[8]||(t[8]=[w("显示调试配置")])),_:1}),n(ve,null,{default:s(()=>t[9]||(t[9]=[w("显示当前的调试配置信息")])),_:1})]),_:1}),n(Lt,null,{default:s(()=>[a.settings.developer.showDebugConfig?(T(),Z("div",Ti,[n(W,{class:"my-2"}),n(Ct,{modelValue:a.debugConfig,"onUpdate:modelValue":t[3]||(t[3]=C=>a.debugConfig=C),label:"调试配置",readonly:"",rows:"10",class:"font-monospace mt-2"},null,8,["modelValue"]),ae("div",Di,[n(R,{"prepend-icon":"mdi-refresh",variant:"text",onClick:u.refreshDebugConfig},{default:s(()=>t[10]||(t[10]=[w(" 刷新 ")])),_:1},8,["onClick"]),n(R,{"prepend-icon":"mdi-content-copy",variant:"text",onClick:u.copyDebugConfig},{default:s(()=>t[11]||(t[11]=[w(" 复制 ")])),_:1},8,["onClick"])])])):re("",!0)]),_:1})],64)):re("",!0)]),_:1})]),_:1})]),_:1},8,["md"]),n(ie,{cols:"12"},{default:s(()=>[n(b,{modelValue:a.studentData,"onUpdate:modelValue":[t[4]||(t[4]=C=>a.studentData=C),u.handleStudentDataChange],loading:a.loading.students,error:a.studentsError,"is-mobile":r.isMobile,"unsaved-changes":a.hasUnsavedChanges,onSave:u.saveStudents,onReload:u.loadStudentList},null,8,["modelValue","loading","error","is-mobile","unsaved-changes","onSave","onReload","onUpdate:modelValue"])]),_:1}),n(ie,{cols:"12"},{default:s(()=>[n(M,{border:""})]),_:1}),n(ie,{cols:"12"},{default:s(()=>[n(B)]),_:1}),a.settings.developer.enabled?(T(),H(ie,{key:0,cols:"12"},{default:s(()=>[n(_e,{border:""},{default:s(()=>[n(Ee,{class:"d-flex align-center"},{default:s(()=>[n(Q,{icon:"mdi-cog-outline",class:"mr-2"}),t[12]||(t[12]=w(" 所有设置 "))]),_:1}),n(ss,null,{default:s(()=>t[13]||(t[13]=[w(" 浏览和修改所有可用设置 ")])),_:1}),n(xe,null,{default:s(()=>[n(D,{onUpdate:u.onSettingUpdate},null,8,["onUpdate"])]),_:1})]),_:1})]),_:1})):re("",!0)]),_:1})]),_:1}),n(O,{ref:"messageLog"},null,512)])}const Bi=de(Ci,[["render",Ei]]);export{Bi as default};