diff --git a/admin-frontend/src/api/admin.js b/admin-frontend/src/api/admin.js index 97d7ff7..18405b7 100644 --- a/admin-frontend/src/api/admin.js +++ b/admin-frontend/src/api/admin.js @@ -20,31 +20,6 @@ export async function logout() { return data } -export async function fetchAdminPasskeys() { - const { data } = await api.get('/admin/passkeys') - return data -} - -export async function createAdminPasskeyOptions(payload = {}) { - const { data } = await api.post('/admin/passkeys/register/options', payload) - return data -} - -export async function createAdminPasskeyVerify(payload = {}) { - const { data } = await api.post('/admin/passkeys/register/verify', payload) - return data -} - -export async function deleteAdminPasskey(passkeyId) { - const { data } = await api.delete(`/admin/passkeys/${passkeyId}`) - return data -} - -export async function reportAdminPasskeyClientError(payload = {}) { - const { data } = await api.post('/admin/passkeys/client-error', payload) - return data -} - export async function fetchAdminSocialBindings() { const { data } = await api.get('/admin/social-bindings') return data diff --git a/admin-frontend/src/pages/SettingsPage.vue b/admin-frontend/src/pages/SettingsPage.vue index c2f4cec..ce1d105 100644 --- a/admin-frontend/src/pages/SettingsPage.vue +++ b/admin-frontend/src/pages/SettingsPage.vue @@ -5,32 +5,19 @@ import QrcodeVue from 'qrcode.vue' import { createAdminSocialLoginUrl, - createAdminPasskeyOptions, - createAdminPasskeyVerify, fetchAdminSocialBindings, - deleteAdminPasskey, - fetchAdminPasskeys, logout, pollAdminSocialLogin, - reportAdminPasskeyClientError, unbindAdminSocial, updateAdminPassword, updateAdminUsername, } from '../api/admin' -import { createPasskey, getPasskeyClientErrorMessage, isPasskeyAvailable } from '../utils/passkey' const username = ref('') const currentPassword = ref('') const password = ref('') const confirmPassword = ref('') const submitting = ref(false) -const passkeyLoading = ref(false) -const passkeyAddLoading = ref(false) -const passkeyDeviceName = ref('') -const passkeyItems = ref([]) -const passkeyRegisterOptions = ref(null) -const passkeyRegisterOptionsAt = ref(0) -const PASSKEY_OPTIONS_PREFETCH_MAX_AGE_MS = 240000 const socialBindingsLoading = ref(false) const socialBindLoadingProvider = ref('') const socialBindings = ref([]) @@ -148,113 +135,6 @@ async function savePassword() { } } -async function loadPasskeys() { - passkeyLoading.value = true - try { - const data = await fetchAdminPasskeys() - passkeyItems.value = Array.isArray(data?.items) ? data.items : [] - if (passkeyItems.value.length < 3) { - await prefetchPasskeyRegisterOptions() - } else { - passkeyRegisterOptions.value = null - passkeyRegisterOptionsAt.value = 0 - } - } catch { - passkeyItems.value = [] - passkeyRegisterOptions.value = null - passkeyRegisterOptionsAt.value = 0 - } finally { - passkeyLoading.value = false - } -} - -function getCachedPasskeyRegisterOptions() { - if (!passkeyRegisterOptions.value) return null - if (Date.now() - Number(passkeyRegisterOptionsAt.value || 0) > PASSKEY_OPTIONS_PREFETCH_MAX_AGE_MS) return null - return passkeyRegisterOptions.value -} - -async function prefetchPasskeyRegisterOptions() { - try { - const res = await createAdminPasskeyOptions({}) - passkeyRegisterOptions.value = res - passkeyRegisterOptionsAt.value = Date.now() - } catch { - passkeyRegisterOptions.value = null - passkeyRegisterOptionsAt.value = 0 - } -} - -async function addPasskey() { - if (!isPasskeyAvailable()) { - ElMessage.error('当前浏览器或环境不支持Passkey(需 HTTPS)') - return - } - if (passkeyItems.value.length >= 3) { - ElMessage.error('最多可绑定3台设备') - return - } - - passkeyAddLoading.value = true - try { - let optionsRes = getCachedPasskeyRegisterOptions() - if (!optionsRes) { - optionsRes = await createAdminPasskeyOptions({}) - } - const credential = await createPasskey(optionsRes?.publicKey || {}) - await createAdminPasskeyVerify({ credential, device_name: passkeyDeviceName.value.trim() }) - passkeyRegisterOptions.value = null - passkeyRegisterOptionsAt.value = 0 - passkeyDeviceName.value = '' - ElMessage.success('Passkey设备添加成功') - await loadPasskeys() - } catch (e) { - try { - await reportAdminPasskeyClientError({ - stage: 'register', - source: 'admin-settings', - name: e?.name || '', - message: e?.message || '', - code: e?.code || '', - user_agent: navigator.userAgent || '', - }) - } catch { - // ignore report failure - } - passkeyRegisterOptions.value = null - passkeyRegisterOptionsAt.value = 0 - await prefetchPasskeyRegisterOptions() - const data = e?.response?.data - const message = - data?.error || - getPasskeyClientErrorMessage(e, 'Passkey注册') - ElMessage.error(message) - } finally { - passkeyAddLoading.value = false - } -} - -async function removePasskey(item) { - try { - await ElMessageBox.confirm(`确定删除设备「${item?.device_name || '未命名设备'}」吗?`, '删除Passkey设备', { - confirmButtonText: '删除', - cancelButtonText: '取消', - type: 'warning', - }) - } catch { - return - } - - try { - await deleteAdminPasskey(item.id) - ElMessage.success('设备已删除') - await loadPasskeys() - } catch (e) { - const data = e?.response?.data - ElMessage.error(data?.error || '删除失败') - } -} - function socialBindRedirectUri() { const url = new URL(window.location.href) url.pathname = '/yuyx/admin-social-bind-callback' @@ -380,7 +260,6 @@ async function unbindSocial(item) { } onMounted(() => { - loadPasskeys() loadSocialBindings() }) @@ -443,46 +322,6 @@ onBeforeUnmount(() => {
0&&(u.value=0))},ye=k=>{const P=et(k);let v=0;switch(P){case se.left:case se.up:v=-1;break;case se.right:case se.down:v=1;break;default:return}const T=Array.from(k.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));let q=T.indexOf(k.target)+v;q<0?q=T.length-1:q>=T.length&&(q=0),T[q].focus({preventScroll:!0}),T[q].click(),le()},le=()=>{y.value&&(I.value=!0)},x=()=>I.value=!1,N=(k,P)=>{S.value[P]=k},A=async()=>{await Ne();const k=S.value[e.currentName];k?.focus({preventScroll:!0})};return be(i,k=>{k==="hidden"?y.value=!1:k==="visible"&&setTimeout(()=>y.value=!0,50)}),be(f,k=>{k?setTimeout(()=>y.value=!0,50):y.value=!1}),dt(g,oe),Ke(()=>setTimeout(()=>de(),0)),$n(()=>oe()),a({scrollToActiveTab:de,removeFocus:x,focusActiveTab:A,tabListRef:r,tabBarRef:_,scheduleRender:()=>ut(K)}),()=>{const k=d.value?[c("span",{class:[t.e("nav-prev"),t.is("disabled",!d.value.prev)],onClick:J},[c(Ee,null,{default:()=>[c(Za,null,null)]})]),c("span",{class:[t.e("nav-next"),t.is("disabled",!d.value.next)],onClick:F},[c(Ee,null,{default:()=>[c($t,null,null)]})])]:null,P=e.panes.map((v,T)=>{var V,q,ue,pe,je;const nt=v.uid,Re=v.props.disabled,Fe=(q=(V=v.props.name)!=null?V:v.index)!=null?q:`${T}`,qe=!Re&&(v.isClosable||v.props.closable!==!1&&e.editable);v.index=`${T}`;const gt=qe?c(Ee,{class:"is-icon-close",onClick:he=>n("tabRemove",v,he)},{default:()=>[c(sa,null,null)]}):null,st=((pe=(ue=v.slots).label)==null?void 0:pe.call(ue))||v.props.label,yt=!Re&&v.active?(je=e.tabindex)!=null?je:s.props.tabindex:-1;return c("div",{ref:he=>N(he,Fe),class:[t.e("item"),t.is(s.props.tabPosition),t.is("active",v.active),t.is("disabled",Re),t.is("closable",qe),t.is("focus",I.value)],id:`tab-${Fe}`,key:`tab-${nt}`,"aria-controls":`pane-${Fe}`,role:"tab","aria-selected":v.active,tabindex:yt,onFocus:()=>le(),onBlur:()=>x(),onClick:he=>{x(),n("tabClick",v,Fe,he)},onKeydown:he=>{const Ye=et(he);qe&&(Ye===se.delete||Ye===se.backspace)&&n("tabRemove",v,he)}},[st,gt])});return K.value,c("div",{ref:g,class:[t.e("nav-wrap"),t.is("scrollable",!!d.value),t.is(s.props.tabPosition)]},[k,c("div",{class:t.e("nav-scroll"),ref:m},[e.panes.length>0?c("div",{class:[t.e("nav"),t.is(s.props.tabPosition),t.is("stretch",e.stretch&&["top","bottom"].includes(s.props.tabPosition))],ref:r,style:$.value,role:"tablist",onKeydown:ye,onWheel:ae},[e.type?null:c(No,{ref:_,tabs:[...e.panes],tabRefs:S.value},null),P]):null])])}}}),Oo=ge({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},defaultValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:fe(Function),default:()=>!0},stretch:Boolean,tabindex:{type:[String,Number],default:0}}),St=e=>we(e)||na(e),Vo={[mt]:e=>St(e),tabClick:(e,a)=>a instanceof Event,tabChange:e=>St(e),edit:(e,a)=>["remove","add"].includes(a),tabRemove:e=>St(e),tabAdd:()=>!0},zo=H({name:"ElTabs",props:Oo,emits:Vo,setup(e,{emit:a,slots:n,expose:s}){var t;const i=Z("tabs"),f=E(()=>["left","right"].includes(e.tabPosition)),{children:m,addChild:r,removeChild:g,ChildrenSorter:S}=ds(at(),"ElTabPane"),_=h(),d=h((t=ze(e.modelValue)?e.defaultValue:e.modelValue)!=null?t:"0"),u=async($,B=!1)=>{var D,z,X,te;if(!(d.value===$||ze($)))try{let re;if(e.beforeLeave){const ae=e.beforeLeave($,d.value);re=ae instanceof Promise?await ae:ae}else re=!0;if(re!==!1){const ae=(D=m.value.find(J=>J.paneName===d.value))==null?void 0:D.isFocusInsidePane();d.value=$,B&&(a(mt,$),a("tabChange",$)),(X=(z=_.value)==null?void 0:z.removeFocus)==null||X.call(z),ae&&((te=_.value)==null||te.focusActiveTab())}}catch{}},I=($,B,D)=>{$.props.disabled||(a("tabClick",$,D),u(B,!0))},y=($,B)=>{$.props.disabled||ze($.props.name)||(B.stopPropagation(),a("edit",$.props.name,"remove"),a("tabRemove",$.props.name))},K=()=>{a("edit",void 0,"add"),a("tabAdd")},O=$=>{const B=et($);[se.enter,se.numpadEnter].includes(B)&&K()},L=$=>{const B=$.el.firstChild,D=["bottom","right"].includes(e.tabPosition)?$.children[0].el:$.children[1].el;B!==D&&B.before(D)};return be(()=>e.modelValue,$=>u($)),be(d,async()=>{var $;await Ne(),($=_.value)==null||$.scrollToActiveTab()}),Ze(bt,{props:e,currentName:d,registerPane:r,unregisterPane:g,nav$:_}),s({currentName:d,get tabNavRef(){return sn(_.value,["scheduleRender"])}}),()=>{const $=n["add-icon"],B=e.editable||e.addable?c("div",{class:[i.e("new-tab"),f.value&&i.e("new-tab-vertical")],tabindex:e.tabindex,onClick:K,onKeydown:O},[$?G(n,"add-icon"):c(Ee,{class:i.is("icon-plus")},{default:()=>[c(Qa,null,null)]})]):null,D=()=>c(Ao,{ref:_,currentName:d.value,editable:e.editable,type:e.type,panes:m.value,stretch:e.stretch,onTabClick:I,onTabRemove:y},null),z=c("div",{class:[i.e("header"),f.value&&i.e("header-vertical"),i.is(e.tabPosition)]},[c(S,null,{default:D,$stable:!0}),B]),X=c("div",{class:i.e("content")},[G(n,"default")]);return c("div",{class:[i.b(),i.m(e.tabPosition),{[i.m("card")]:e.type==="card",[i.m("border-card")]:e.type==="border-card"}],onVnodeMounted:L,onVnodeUpdated:L},[X,z])}}});var Lo=zo;const Ro=ge({label:{type:String,default:""},name:{type:[String,Number]},closable:{type:Boolean,default:void 0},disabled:Boolean,lazy:Boolean}),Ca="ElTabPane",Fo=H({name:Ca}),Ho=H({...Fo,props:Ro,setup(e){const a=e,n=at(),s=Bt(),t=$e(bt);t||Pe(Ca,"usage: ((p=r.key)==null?void 0:p[m]))return 1}return 0};return e.map((o,r)=>({value:o,index:r,key:s?s(o,r):null})).sort((o,r)=>{let i=u(o,r);return i||(i=o.index-r.index),i*+l}).map(o=>o.value)},ma=function(e,t){let l=null;return e.columns.forEach(n=>{n.id===t&&(l=n)}),l},si=function(e,t){let l=null;for(let n=0;n_e(s)?s.map(i=>i.toDate()):s.toDate();var Ke={exports:{}},ia=Ke.exports,$t;function ua(){return $t||($t=1,(function(s,i){(function(a,d){s.exports=d()})(ia,(function(){var a={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},d=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,F=/\d/,$=/\d\d/,u=/\d\d?/,C=/\d*[^-_:/,()\s\d]+/,P={},T=function(r){return(r=+r)+(r>68?1900:2e3)},S=function(r){return function(M){this[r]=+M}},O=[/[+-]\d\d:?(\d\d)?|Z/,function(r){(this.zone||(this.zone={})).offset=(function(M){if(!M||M==="Z")return 0;var H=M.match(/([+-]|\d\d)/g),_=60*H[1]+(+H[2]||0);return _===0?0:H[0]==="+"?-_:_})(r)}],B=function(r){var M=P[r];return M&&(M.indexOf?M:M.s.concat(M.f))},U=function(r,M){var H,_=P.meridiem;if(_){for(var k=1;k<=24;k+=1)if(r.indexOf(_(k,0,M))>-1){H=k>12;break}}else H=r===(M?"pm":"PM");return H},V={A:[C,function(r){this.afternoon=U(r,!1)}],a:[C,function(r){this.afternoon=U(r,!0)}],Q:[F,function(r){this.month=3*(r-1)+1}],S:[F,function(r){this.milliseconds=100*+r}],SS:[$,function(r){this.milliseconds=10*+r}],SSS:[/\d{3}/,function(r){this.milliseconds=+r}],s:[u,S("seconds")],ss:[u,S("seconds")],m:[u,S("minutes")],mm:[u,S("minutes")],H:[u,S("hours")],h:[u,S("hours")],HH:[u,S("hours")],hh:[u,S("hours")],D:[u,S("day")],DD:[$,S("day")],Do:[C,function(r){var M=P.ordinal,H=r.match(/\d+/);if(this.day=H[0],M)for(var _=1;_<=31;_+=1)M(_).replace(/\[|\]/g,"")===r&&(this.day=_)}],w:[u,S("week")],ww:[$,S("week")],M:[u,S("month")],MM:[$,S("month")],MMM:[C,function(r){var M=B("months"),H=(B("monthsShort")||M.map((function(_){return _.slice(0,3)}))).indexOf(r)+1;if(H<1)throw new Error;this.month=H%12||H}],MMMM:[C,function(r){var M=B("months").indexOf(r)+1;if(M<1)throw new Error;this.month=M%12||M}],Y:[/[+-]?\d+/,S("year")],YY:[$,function(r){this.year=T(r)}],YYYY:[/\d{4}/,S("year")],Z:O,ZZ:O};function I(r){var M,H;M=r,H=P&&P.formats;for(var _=(r=M.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(q,A,te){var re=te&&te.toUpperCase();return A||H[te]||a[te]||H[re].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(b,m,f){return m||f.slice(1)}))}))).match(d),k=_.length,W=0;W_e(s)?s.map(r=>r.toDate()):s.toDate();var Ke={exports:{}},wa=Ke.exports,Mt;function ka(){return Mt||(Mt=1,(function(s,r){(function(a,d){s.exports=d()})(wa,(function(){var a={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},d=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,O=/\d/,M=/\d\d/,i=/\d\d?/,g=/\d*[^-_:/,()\s\d]+/,S={},P=function(l){return(l=+l)+(l>68?1900:2e3)},$=function(l){return function(D){this[l]=+D}},E=[/[+-]\d\d:?(\d\d)?|Z/,function(l){(this.zone||(this.zone={})).offset=(function(D){if(!D||D==="Z")return 0;var Y=D.match(/([+-]|\d\d)/g),C=60*Y[1]+(+Y[2]||0);return C===0?0:Y[0]==="+"?-C:C})(l)}],x=function(l){var D=S[l];return D&&(D.indexOf?D:D.s.concat(D.f))},U=function(l,D){var Y,C=S.meridiem;if(C){for(var y=1;y<=24;y+=1)if(l.indexOf(C(y,0,D))>-1){Y=y>12;break}}else Y=l===(D?"pm":"PM");return Y},T={A:[g,function(l){this.afternoon=U(l,!1)}],a:[g,function(l){this.afternoon=U(l,!0)}],Q:[O,function(l){this.month=3*(l-1)+1}],S:[O,function(l){this.milliseconds=100*+l}],SS:[M,function(l){this.milliseconds=10*+l}],SSS:[/\d{3}/,function(l){this.milliseconds=+l}],s:[i,$("seconds")],ss:[i,$("seconds")],m:[i,$("minutes")],mm:[i,$("minutes")],H:[i,$("hours")],h:[i,$("hours")],HH:[i,$("hours")],hh:[i,$("hours")],D:[i,$("day")],DD:[M,$("day")],Do:[g,function(l){var D=S.ordinal,Y=l.match(/\d+/);if(this.day=Y[0],D)for(var C=1;C<=31;C+=1)D(C).replace(/\[|\]/g,"")===l&&(this.day=C)}],w:[i,$("week")],ww:[M,$("week")],M:[i,$("month")],MM:[M,$("month")],MMM:[g,function(l){var D=x("months"),Y=(x("monthsShort")||D.map((function(C){return C.slice(0,3)}))).indexOf(l)+1;if(Y<1)throw new Error;this.month=Y%12||Y}],MMMM:[g,function(l){var D=x("months").indexOf(l)+1;if(D<1)throw new Error;this.month=D%12||D}],Y:[/[+-]?\d+/,$("year")],YY:[M,function(l){this.year=P(l)}],YYYY:[/\d{4}/,$("year")],Z:E,ZZ:E};function I(l){var D,Y;D=l,Y=S&&S.formats;for(var C=(l=D.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(Z,L,ne){var re=ne&&ne.toUpperCase();return L||Y[ne]||a[ne]||Y[re].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(w,m,p){return m||p.slice(1)}))}))).match(d),y=C.length,q=0;qa.MAX_VERSION)throw new RangeError("Version value out of range");if(n<-1||n>7)throw new RangeError("Mask value out of range");this.size=e*4+17;for(var i=[],u=0;ua.MAX_VERSION)throw new RangeError("Version value out of range");if(n<-1||n>7)throw new RangeError("Mask value out of range");this.size=e*4+17;for(var i=[],u=0;u{var s;const S=t.options.size;if(S===0)return;const w=It(l,0,S-1),$=k.value,W=n==="up"?-1:1,_=(s=dl($,w,W,S))!=null?s:dl($,w-W,-W,S);_!=null&&(t.hoveringIndex=_,U(()=>re(R.value)))},st=l=>{const n=gl(l);let s=!0;switch(n){case F.up:Oe("prev");break;case F.down:Oe("next");break;case F.enter:case F.numpadEnter:Me.value||ul();break;case F.esc:il();break;case F.backspace:s=!1,nl(l);return;case F.home:if(!o.value)return;Ce(0,"down");break;case F.end:if(!o.value)return;Ce(t.options.size-1,"up");break;case F.pageUp:if(!o.value)return;Ce(t.hoveringIndex-10,"up");break;case F.pageDown:if(!o.value)return;Ce(t.hoveringIndex+10,"down");break;default:s=!1;break}s&&(l.preventDefault(),l.stopPropagation())},it=()=>{if(!g.value)return 0;const l=window.getComputedStyle(g.value);return Number.parseFloat(l.gap||"6px")},rt=p(()=>{const l=it(),n=e.filterable?l+El:0;return{maxWidth:`${L.value&&e.maxCollapseTags===1?t.selectionWidth-t.collapseItemWidth-l-n:t.selectionWidth-n}px`}}),ut=p(()=>({maxWidth:`${t.selectionWidth}px`})),dt=l=>{a("popup-scroll",l)};le(g,Ql),le(qe,We),le(E,xe),le(L,ql);let we;return K(()=>Ze.value,l=>{l?we=le(C,We).stop:(we?.(),we=void 0),a("visible-change",l)}),je(()=>{ge()}),{inputId:j,contentId:v,nsSelect:c,nsInput:f,states:t,isFocused:Le,expanded:o,optionsArray:k,hoverOption:R,selectSize:Ye,filteredOptionsCount:se,updateTooltip:We,updateTagTooltip:xe,debouncedOnInputChange:tl,onInput:ll,deletePrevTag:nl,deleteTag:Xl,deleteSelected:al,handleOptionSelect:ol,scrollToOption:re,hasModelValue:$e,shouldShowPlaceholder:Al,currentPlaceholder:jl,mouseEnterEventName:Ul,needStatusIcon:Ll,showClearBtn:$l,iconComponent:Je,iconReverse:Bl,validateState:Be,validateIcon:Nl,showNewOption:Hl,updateOptions:Xe,collapseTagSize:Kl,setSelected:ge,selectDisabled:oe,emptyText:zl,handleCompositionStart:kl,handleCompositionUpdate:Dl,handleCompositionEnd:Rl,handleKeydown:st,onOptionCreate:Yl,onOptionDestroy:Zl,handleMenuEnter:xl,focus:ye,blur:et,handleClearClick:lt,handleClickOutside:tt,handleEsc:il,toggleMenu:rl,selectOption:ul,getValueKey:Se,navigateOptions:Oe,dropdownMenuVisible:Ze,showTagList:at,collapseTagList:ot,popupScroll:dt,getOption:Ne,tagStyle:rt,collapseTagStyle:ut,popperRef:_l,inputRef:b,tooltipRef:O,tagTooltipRef:y,prefixRef:d,suffixRef:u,selectRef:r,wrapperRef:qe,selectionRef:g,scrollbarRef:J,menuRef:C,tagMenuRef:E,collapseItemRef:L}};var mn=me({name:"ElOptions",setup(e,{slots:a}){const i=Te(Re);let v=[];return()=>{var c,f;const t=(c=a.default)==null?void 0:c.call(a),r=[];function g(O){q(O)&&O.forEach(y=>{var b,d,u,C;const E=(b=y?.type||{})==null?void 0:b.name;E==="ElOptionGroup"?g(!mt(y.children)&&!q(y.children)&&ce((d=y.children)==null?void 0:d.default)?(u=y.children)==null?void 0:u.default():y.children):E==="ElOption"?r.push((C=y.props)==null?void 0:C.value):q(y.children)&&g(y.children)})}return t.length&&g((f=t[0])==null?void 0:f.children),te(r,v)||(v=r,i&&(i.states.optionValues=r)),t}}});const hn=Cl({name:String,id:String,modelValue:{type:H([Array,String,Number,Boolean,Object]),default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:At,effect:{type:H(String),default:"light"},disabled:{type:Boolean,default:void 0},clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperStyle:{type:H([String,Object])},popperOptions:{type:H(Object),default:()=>({})},remote:Boolean,debounce:{type:Number,default:300},loadingText:String,noMatchText:String,noDataText:String,remoteMethod:{type:H(Function)},filterMethod:{type:H(Function)},multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},teleported:fl.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:ml,default:Kt},fitInputWidth:Boolean,suffixIcon:{type:ml,default:Ht},tagType:{...vl.type,default:"info"},tagEffect:{...vl.effect,default:"light"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,showArrow:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:H(String),values:Vt,default:"bottom-start"},fallbackPlacements:{type:H(Array),default:["bottom-start","top-start","right","left"]},tabindex:{type:[String,Number],default:0},appendTo:fl.appendTo,options:{type:H(Array)},props:{type:H(Object),default:()=>Fe},...Ft,...Jt(["ariaLabel"])});Et.scroll;const gn=me({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const a=ve("select"),i=V(),v=ke(),c=V([]);Ol(Tl,fe({...Ae(e)}));const f=p(()=>c.value.some(O=>O.visible===!0)),t=O=>{var y;return O.type.name==="ElOption"&&!!((y=O.component)!=null&&y.proxy)},r=O=>{const y=Y(O),b=[];return y.forEach(d=>{var u;ht(d)&&(t(d)?b.push(d.component.proxy):q(d.children)&&d.children.length?b.push(...r(d.children)):(u=d.component)!=null&&u.subTree&&b.push(...r(d.component.subTree)))}),b},g=()=>{c.value=r(v.subTree)};return je(()=>{g()}),Xt(i,g,{attributes:!0,subtree:!0,childList:!0}),{groupRef:i,visible:f,ns:a}}});function yn(e,a,i,v,c,f){return pe((m(),I("ul",{ref:"groupRef",class:h(e.ns.be("group","wrap"))},[D("li",{class:h(e.ns.be("group","title"))},G(e.label),3),D("li",null,[D("ul",{class:h(e.ns.b("group"))},[M(e.$slots,"default")],2)])],2)),[[Ke,e.visible]])}var Ge=De(gn,[["render",yn],["__file","option-group.vue"]]);const yl="ElSelect",be=new WeakMap,Sn=e=>(...a)=>{var i,v;const c=a[0];if(!c||c.includes('Slot "default" invoked outside of the render function')&&((i=a[2])!=null&&i.includes("ElTreeSelect")))return;const f=(v=be.get(e))==null?void 0:v.originalWarnHandler;if(f){f(...a);return}console.warn(...a)},On=e=>{let a=be.get(e);return a||(a={originalWarnHandler:e.config.warnHandler,handler:Sn(e),count:0},be.set(e,a)),a},Cn=me({name:yl,componentName:yl,components:{ElSelectMenu:vn,ElOption:Ue,ElOptions:mn,ElOptionGroup:Ge,ElTag:Rt,ElScrollbar:Dt,ElTooltip:kt,ElIcon:jt},directives:{ClickOutside:Tt},props:hn,emits:[ne,Il,"remove-tag","clear","visible-change","focus","blur","popup-scroll"],setup(e,{emit:a,slots:i}){const v=ke(),c=On(v.appContext);c.count+=1,v.appContext.config.warnHandler=c.handler;const f=p(()=>{const{modelValue:o,multiple:R}=e,T=R?[]:void 0;return q(o)?R?o:T:R?T:o}),t=fe({...Ae(e),modelValue:f}),r=bn(t,a),{calculatorRef:g,inputStyle:O}=on(),{getLabel:y,getValue:b,getOptions:d,getDisabled:u}=sn(e),C=o=>({label:y(o),value:b(o),disabled:u(o)}),E=o=>o.reduce((R,T)=>(R.push(T),T.children&&T.children.length>0&&R.push(...E(T.children)),R),[]),L=o=>{ln(o||[]).forEach(T=>{var ae;if(Q(T)&&(T.type.name==="ElOption"||T.type.name==="ElTree")){const P=T.type.name;if(P==="ElTree"){const j=((ae=T.props)==null?void 0:ae.data)||[];E(j).forEach(Z=>{Z.currentLabel=Z.label||(Q(Z.value)?"":Z.value),r.onOptionCreate(Z)})}else if(P==="ElOption"){const j={...T.props};j.currentLabel=j.label||(Q(j.value)?"":j.value),r.onOptionCreate(j)}}})};K(()=>{var o;return[(o=i.default)==null?void 0:o.call(i),f.value]},()=>{var o;e.persistent||r.expanded.value||(r.states.options.clear(),L((o=i.default)==null?void 0:o.call(i)))},{immediate:!0}),Ol(Re,fe({props:t,states:r.states,selectRef:r.selectRef,optionsArray:r.optionsArray,setSelected:r.setSelected,handleOptionSelect:r.handleOptionSelect,onOptionCreate:r.onOptionCreate,onOptionDestroy:r.onOptionDestroy}));const J=p(()=>e.multiple?r.states.selected.map(o=>o.currentLabel):r.states.selectedLabel);return Sl(()=>{const o=be.get(v.appContext);o&&(o.count-=1,o.count<=0&&(v.appContext.config.warnHandler=o.originalWarnHandler,be.delete(v.appContext)))}),{...r,modelValue:f,selectedLabel:J,calculatorRef:g,inputStyle:O,getLabel:y,getValue:b,getOptions:d,getDisabled:u,getOptionProps:C}}});function wn(e,a){const i=X("el-tag"),v=X("el-tooltip"),c=X("el-icon"),f=X("el-option"),t=X("el-option-group"),r=X("el-options"),g=X("el-scrollbar"),O=X("el-select-menu"),y=gt("click-outside");return pe((m(),I("div",{ref:"selectRef",class:h([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),[Ot(e.mouseEnterEventName)]:b=>e.states.inputHovering=!0,onMouseleave:b=>e.states.inputHovering=!1},[ee(v,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-style":e.popperStyle,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,"append-to":e.appendTo,"show-arrow":e.showArrow,offset:e.offset,onBeforeShow:e.handleMenuEnter,onHide:b=>e.states.isBeforeHide=!1},{default:B(()=>{var b;return[D("div",{ref:"wrapperRef",class:h([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:de(e.toggleMenu,["prevent"])},[e.$slots.prefix?(m(),I("div",{key:0,ref:"prefixRef",class:h(e.nsSelect.e("prefix"))},[M(e.$slots,"prefix")],2)):N("v-if",!0),D("div",{ref:"selectionRef",class:h([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?M(e.$slots,"tag",{key:0,data:e.states.selected,deleteTag:e.deleteTag,selectDisabled:e.selectDisabled},()=>[(m(!0),I(ue,null,Ie(e.showTagList,d=>(m(),I("div",{key:e.getValueKey(d),class:h(e.nsSelect.e("selected-item"))},[ee(i,{closable:!e.selectDisabled&&!d.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:Ee(e.tagStyle),onClose:u=>e.deleteTag(u,d)},{default:B(()=>[D("span",{class:h(e.nsSelect.e("tags-text"))},[M(e.$slots,"label",{index:d.index,label:d.currentLabel,value:d.value},()=>[pl(G(d.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(m(),z(v,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom","popper-class":e.popperClass,"popper-style":e.popperStyle,teleported:e.teleported},{default:B(()=>[D("div",{ref:"collapseItemRef",class:h(e.nsSelect.e("selected-item"))},[ee(i,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:Ee(e.collapseTagStyle)},{default:B(()=>[D("span",{class:h(e.nsSelect.e("tags-text"))}," + "+G(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:B(()=>[D("div",{ref:"tagMenuRef",class:h(e.nsSelect.e("selection"))},[(m(!0),I(ue,null,Ie(e.collapseTagList,d=>(m(),I("div",{key:e.getValueKey(d),class:h(e.nsSelect.e("selected-item"))},[ee(i,{class:"in-tooltip",closable:!e.selectDisabled&&!d.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:u=>e.deleteTag(u,d)},{default:B(()=>[D("span",{class:h(e.nsSelect.e("tags-text"))},[M(e.$slots,"label",{index:d.index,label:d.currentLabel,value:d.value},()=>[pl(G(d.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","effect","popper-class","popper-style","teleported"])):N("v-if",!0)]):N("v-if",!0),D("div",{class:h([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable||e.selectDisabled)])},[pe(D("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":d=>e.states.inputValue=d,type:"text",name:e.name,class:h([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:Ee(e.inputStyle),tabindex:e.tabindex,role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":((b=e.hoverOption)==null?void 0:b.id)||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onKeydown:e.handleKeydown,onCompositionstart:e.handleCompositionStart,onCompositionupdate:e.handleCompositionUpdate,onCompositionend:e.handleCompositionEnd,onInput:e.onInput,onClick:de(e.toggleMenu,["stop"])},null,46,["id","onUpdate:modelValue","name","disabled","autocomplete","tabindex","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label","onKeydown","onCompositionstart","onCompositionupdate","onCompositionend","onInput","onClick"]),[[St,e.states.inputValue]]),e.filterable?(m(),I("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:h(e.nsSelect.e("input-calculator")),textContent:G(e.states.inputValue)},null,10,["textContent"])):N("v-if",!0)],2),e.shouldShowPlaceholder?(m(),I("div",{key:1,class:h([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?M(e.$slots,"label",{key:0,index:e.getOption(e.modelValue).index,label:e.currentPlaceholder,value:e.modelValue},()=>[D("span",null,G(e.currentPlaceholder),1)]):(m(),I("span",{key:1},G(e.currentPlaceholder),1))],2)):N("v-if",!0)],2),D("div",{ref:"suffixRef",class:h(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClearBtn?(m(),z(c,{key:0,class:h([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:B(()=>[(m(),z(ze(e.iconComponent)))]),_:1},8,["class"])):N("v-if",!0),e.showClearBtn&&e.clearIcon?(m(),z(c,{key:1,class:h([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.nsSelect.e("clear")]),onClick:e.handleClearClick},{default:B(()=>[(m(),z(ze(e.clearIcon)))]),_:1},8,["class","onClick"])):N("v-if",!0),e.validateState&&e.validateIcon&&e.needStatusIcon?(m(),z(c,{key:2,class:h([e.nsInput.e("icon"),e.nsInput.e("validateIcon"),e.nsInput.is("loading",e.validateState==="validating")])},{default:B(()=>[(m(),z(ze(e.validateIcon)))]),_:1},8,["class"])):N("v-if",!0)],2)],10,["onClick"])]}),content:B(()=>[ee(O,{ref:"menuRef"},{default:B(()=>[e.$slots.header?(m(),I("div",{key:0,class:h(e.nsSelect.be("dropdown","header")),onClick:de(()=>{},["stop"])},[M(e.$slots,"header")],10,["onClick"])):N("v-if",!0),pe(ee(g,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:h([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical",onScroll:e.popupScroll},{default:B(()=>[e.showNewOption?(m(),z(f,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):N("v-if",!0),ee(r,null,{default:B(()=>[M(e.$slots,"default",{},()=>[(m(!0),I(ue,null,Ie(e.options,(b,d)=>{var u;return m(),I(ue,{key:d},[(u=e.getOptions(b))!=null&&u.length?(m(),z(t,{key:0,label:e.getLabel(b),disabled:e.getDisabled(b)},{default:B(()=>[(m(!0),I(ue,null,Ie(e.getOptions(b),C=>(m(),z(f,cl({key:e.getValue(C)},e.getOptionProps(C)),null,16))),128))]),_:2},1032,["label","disabled"])):(m(),z(f,yt(cl({key:1},e.getOptionProps(b))),null,16))],64)}),128))])]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label","onScroll"]),[[Ke,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(m(),I("div",{key:1,class:h(e.nsSelect.be("dropdown","loading"))},[M(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(m(),I("div",{key:2,class:h(e.nsSelect.be("dropdown","empty"))},[M(e.$slots,"empty",{},()=>[D("span",null,G(e.emptyText),1)])],2)):N("v-if",!0),e.$slots.footer?(m(),I("div",{key:3,class:h(e.nsSelect.be("dropdown","footer")),onClick:de(()=>{},["stop"])},[M(e.$slots,"footer")],10,["onClick"])):N("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-style","popper-options","fallback-placements","effect","transition","persistent","append-to","show-arrow","offset","onBeforeShow","onHide"])],16,["onMouseleave"])),[[y,e.handleClickOutside,e.popperRef]])}var In=De(Cn,[["render",wn],["__file","select.vue"]]);const Bn=Ut(In,{Option:Ue,OptionGroup:Ge}),Nn=wl(Ue);wl(Ge);export{Bn as E,Nn as a,tn as b};
diff --git a/static/app/assets/el-select-D_oyzAZN.css b/static/app/assets/el-select-D_oyzAZN.css
deleted file mode 100644
index f6e4eab..0000000
--- a/static/app/assets/el-select-D_oyzAZN.css
+++ /dev/null
@@ -1 +0,0 @@
-.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);font-size:12px;line-height:34px;overflow:hidden;padding:0 20px;text-overflow:ellipsis;white-space:nowrap}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transform:translateZ(0);transition:var(--el-transition-duration)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%;z-index:-1}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute;z-index:-1}.el-select__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;outline:none;padding:0;width:100%}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}
diff --git a/static/app/assets/el-skeleton-item-CD5Idavp.js b/static/app/assets/el-skeleton-item-CD5Idavp.js
deleted file mode 100644
index 458618f..0000000
--- a/static/app/assets/el-skeleton-item-CD5Idavp.js
+++ /dev/null
@@ -1 +0,0 @@
-import{b,t as S,_ as h,u as N,a_ as P,s as $,J as E,d as I,z as T}from"./base-xgxQQEpV.js";import{A as p,j as u,o as i,c as w,l as B,C as t,n as f,X as v,g as j,i as C,L as V,Z as z,B as _,F as m,a4 as g,p as L,O as y,aj as O}from"./vendor-vue-WbiK4TmU.js";const F=b({animated:Boolean,count:{type:Number,default:1},rows:{type:Number,default:3},loading:{type:Boolean,default:!0},throttle:{type:S([Number,Object])}}),R=b({variant:{type:String,values:["circle","rect","h1","h3","text","caption","p","image","button"],default:"text"}}),A=p({name:"ElSkeletonItem"}),H=p({...A,props:R,setup(l){const e=N("skeleton");return(r,s)=>(i(),u("div",{class:f([t(e).e("item"),t(e).e(r.variant)])},[r.variant==="image"?(i(),w(t(P),{key:0})):B("v-if",!0)],2))}});var c=h(H,[["__file","skeleton-item.vue"]]);const J=(l,e=0)=>{if(e===0)return l;const r=v(e)&&!!e.initVal,s=j(r);let o=null;const a=n=>{if(E(n)){s.value=l.value;return}o&&clearTimeout(o),o=setTimeout(()=>{s.value=l.value},n)},d=n=>{n==="leading"?$(e)?a(e):a(e.leading):v(e)?a(e.trailing):s.value=!1};return C(()=>d("leading")),V(()=>l.value,n=>{d(n?"leading":"trailing")}),s},M=p({name:"ElSkeleton"}),U=p({...M,props:F,setup(l,{expose:e}){const r=l,s=N("skeleton"),o=J(z(r,"loading"),r.throttle);return e({uiLoading:o}),(a,d)=>t(o)?(i(),u("div",y({key:0,class:[t(s).b(),t(s).is("animated",a.animated)]},a.$attrs),[(i(!0),u(m,null,g(a.count,n=>(i(),u(m,{key:n},[t(o)?_(a.$slots,"template",{key:n},()=>[L(c,{class:f(t(s).is("first")),variant:"p"},null,8,["class"]),(i(!0),u(m,null,g(a.rows,k=>(i(),w(c,{key:k,class:f([t(s).e("paragraph"),t(s).is("last",k===a.rows&&a.rows>1)]),variant:"p"},null,8,["class"]))),128))]):B("v-if",!0)],64))),128))],16)):_(a.$slots,"default",O(y({key:1},a.$attrs)))}});var X=h(U,[["__file","skeleton.vue"]]);const D=I(X,{SkeletonItem:c});T(c);export{D as E};
diff --git a/static/app/assets/el-skeleton-item-cWa5ANvD.js b/static/app/assets/el-skeleton-item-cWa5ANvD.js
new file mode 100644
index 0000000..cc529c1
--- /dev/null
+++ b/static/app/assets/el-skeleton-item-cWa5ANvD.js
@@ -0,0 +1 @@
+import{b,g as S,_ as h,u as N,aX as P,f as $,v as E,d as I,l as T}from"./base-C_0HtztH.js";import{A as p,j as u,o as i,c as w,l as B,C as t,n as m,X as k,g as C,i as V,L as j,Z as L,B as _,F as f,a3 as g,p as O,O as y,af as z}from"./vendor-vue-Da_zwKNU.js";const F=b({animated:Boolean,count:{type:Number,default:1},rows:{type:Number,default:3},loading:{type:Boolean,default:!0},throttle:{type:S([Number,Object])}}),R=b({variant:{type:String,values:["circle","rect","h1","h3","text","caption","p","image","button"],default:"text"}}),X=p({name:"ElSkeletonItem"}),A=p({...X,props:R,setup(l){const e=N("skeleton");return(r,s)=>(i(),u("div",{class:m([t(e).e("item"),t(e).e(r.variant)])},[r.variant==="image"?(i(),w(t(P),{key:0})):B("v-if",!0)],2))}});var c=h(A,[["__file","skeleton-item.vue"]]);const H=(l,e=0)=>{if(e===0)return l;const r=k(e)&&!!e.initVal,s=C(r);let o=null;const a=n=>{if(E(n)){s.value=l.value;return}o&&clearTimeout(o),o=setTimeout(()=>{s.value=l.value},n)},d=n=>{n==="leading"?$(e)?a(e):a(e.leading):k(e)?a(e.trailing):s.value=!1};return V(()=>d("leading")),j(()=>l.value,n=>{d(n?"leading":"trailing")}),s},M=p({name:"ElSkeleton"}),U=p({...M,props:F,setup(l,{expose:e}){const r=l,s=N("skeleton"),o=H(L(r,"loading"),r.throttle);return e({uiLoading:o}),(a,d)=>t(o)?(i(),u("div",y({key:0,class:[t(s).b(),t(s).is("animated",a.animated)]},a.$attrs),[(i(!0),u(f,null,g(a.count,n=>(i(),u(f,{key:n},[t(o)?_(a.$slots,"template",{key:n},()=>[O(c,{class:m(t(s).is("first")),variant:"p"},null,8,["class"]),(i(!0),u(f,null,g(a.rows,v=>(i(),w(c,{key:v,class:m([t(s).e("paragraph"),t(s).is("last",v===a.rows&&a.rows>1)]),variant:"p"},null,8,["class"]))),128))]):B("v-if",!0)],64))),128))],16)):_(a.$slots,"default",z(y({key:1},a.$attrs)))}});var Z=h(U,[["__file","skeleton.vue"]]);const G=I(Z,{SkeletonItem:c});T(c);export{G as E};
diff --git a/static/app/assets/http-BDcxFXLM.js b/static/app/assets/http-BDcxFXLM.js
new file mode 100644
index 0000000..8afaa7a
--- /dev/null
+++ b/static/app/assets/http-BDcxFXLM.js
@@ -0,0 +1,31 @@
+import{L as k,g as b,h,A as D,j as W,o as C,B as j,p as V,s as M,w as ve,k as H,U as ye,C as l,n as S,x as Fe,t as he,R as be,T as we,au as Ee,i as We,c as N,l as $,D as je,F as He,q as qe,W as Ge,J as Y,I as Oe,a4 as q,aq as Qe,ap as te}from"./vendor-vue-Da_zwKNU.js";import{aL as Z,aY as Ve,aZ as _e,e as x,a_ as Ce,aE as Ye,a$ as Se,b0 as Ze,b as Te,g as z,_ as Ie,u as Ke,f as P,n as ne,d as Xe,k as Je,F as et,ar as se,E as oe,as as tt,x as nt,aI as st,h as F,b1 as ot}from"./base-C_0HtztH.js";import{a as at}from"./vendor-axios-B9ygI19o.js";function O(e){var n;const t=Se(e);return(n=t?.$el)!=null?n:t}const I=x?window:void 0,rt=x?window.document:void 0;function _(...e){let n,t,s,a;if(Ve(e[0])||Array.isArray(e[0])?([t,s,a]=e,n=I):[n,t,s,a]=e,!n)return _e;Array.isArray(t)||(t=[t]),Array.isArray(s)||(s=[s]);const r=[],o=()=>{r.forEach(d=>d()),r.length=0},i=(d,f,c,m)=>(d.addEventListener(f,c,m),()=>d.removeEventListener(f,c,m)),u=k(()=>[O(n),Se(a)],([d,f])=>{o(),d&&r.push(...t.flatMap(c=>s.map(m=>i(d,c,m,f))))},{immediate:!0,flush:"post"}),g=()=>{u(),o()};return Z(g),g}let ae=!1;function sn(e,n,t={}){const{window:s=I,ignore:a=[],capture:r=!0,detectIframe:o=!1}=t;if(!s)return;Ye&&!ae&&(ae=!0,Array.from(s.document.body.children).forEach(c=>c.addEventListener("click",_e)));let i=!0;const u=c=>a.some(m=>{if(typeof m=="string")return Array.from(s.document.querySelectorAll(m)).some(w=>w===c.target||c.composedPath().includes(w));{const w=O(m);return w&&(c.target===w||c.composedPath().includes(w))}}),d=[_(s,"click",c=>{const m=O(e);if(!(!m||m===c.target||c.composedPath().includes(m))){if(c.detail===0&&(i=!u(c)),!i){i=!0;return}n(c)}},{passive:!0,capture:r}),_(s,"pointerdown",c=>{const m=O(e);m&&(i=!c.composedPath().includes(m)&&!u(c))},{passive:!0}),o&&_(s,"blur",c=>{var m;const w=O(e);((m=s.document.activeElement)==null?void 0:m.tagName)==="IFRAME"&&!w?.contains(s.document.activeElement)&&n(c)})].filter(Boolean);return()=>d.forEach(c=>c())}function xe(e,n=!1){const t=b(),s=()=>t.value=!!e();return s(),Ce(s,n),t}const re=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ie="__vueuse_ssr_handlers__";re[ie]=re[ie]||{};function on({document:e=rt}={}){if(!e)return b("visible");const n=b(e.visibilityState);return _(e,"visibilitychange",()=>{n.value=e.visibilityState}),n}var le=Object.getOwnPropertySymbols,it=Object.prototype.hasOwnProperty,lt=Object.prototype.propertyIsEnumerable,ut=(e,n)=>{var t={};for(var s in e)it.call(e,s)&&n.indexOf(s)<0&&(t[s]=e[s]);if(e!=null&&le)for(var s of le(e))n.indexOf(s)<0&<.call(e,s)&&(t[s]=e[s]);return t};function Ae(e,n,t={}){const s=t,{window:a=I}=s,r=ut(s,["window"]);let o;const i=xe(()=>a&&"ResizeObserver"in a),u=()=>{o&&(o.disconnect(),o=void 0)},g=k(()=>O(e),f=>{u(),i.value&&a&&f&&(o=new ResizeObserver(n),o.observe(f,r))},{immediate:!0,flush:"post"}),d=()=>{u(),g()};return Z(d),{isSupported:i,stop:d}}function an(e,n={width:0,height:0},t={}){const{window:s=I,box:a="content-box"}=t,r=h(()=>{var u,g;return(g=(u=O(e))==null?void 0:u.namespaceURI)==null?void 0:g.includes("svg")}),o=b(n.width),i=b(n.height);return Ae(e,([u])=>{const g=a==="border-box"?u.borderBoxSize:a==="content-box"?u.contentBoxSize:u.devicePixelContentBoxSize;if(s&&r.value){const d=O(e);if(d){const f=s.getComputedStyle(d);o.value=parseFloat(f.width),i.value=parseFloat(f.height)}}else if(g){const d=Array.isArray(g)?g:[g];o.value=d.reduce((f,{inlineSize:c})=>f+c,0),i.value=d.reduce((f,{blockSize:c})=>f+c,0)}else o.value=u.contentRect.width,i.value=u.contentRect.height},t),k(()=>O(e),u=>{o.value=u?n.width:0,i.value=u?n.height:0}),{width:o,height:i}}var ue=Object.getOwnPropertySymbols,ct=Object.prototype.hasOwnProperty,dt=Object.prototype.propertyIsEnumerable,pt=(e,n)=>{var t={};for(var s in e)ct.call(e,s)&&n.indexOf(s)<0&&(t[s]=e[s]);if(e!=null&&ue)for(var s of ue(e))n.indexOf(s)<0&&dt.call(e,s)&&(t[s]=e[s]);return t};function rn(e,n,t={}){const s=t,{window:a=I}=s,r=pt(s,["window"]);let o;const i=xe(()=>a&&"MutationObserver"in a),u=()=>{o&&(o.disconnect(),o=void 0)},g=k(()=>O(e),f=>{u(),i.value&&a&&f&&(o=new MutationObserver(n),o.observe(f,r))},{immediate:!0}),d=()=>{u(),g()};return Z(d),{isSupported:i,stop:d}}var ce;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ce||(ce={}));var ft=Object.defineProperty,de=Object.getOwnPropertySymbols,mt=Object.prototype.hasOwnProperty,gt=Object.prototype.propertyIsEnumerable,pe=(e,n,t)=>n in e?ft(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,vt=(e,n)=>{for(var t in n||(n={}))mt.call(n,t)&&pe(e,t,n[t]);if(de)for(var t of de(n))gt.call(n,t)&&pe(e,t,n[t]);return e};const yt={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};vt({linear:Ze},yt);function ln({window:e=I}={}){if(!e)return b(!1);const n=b(e.document.hasFocus());return _(e,"blur",()=>{n.value=!1}),_(e,"focus",()=>{n.value=!0}),n}function un(e={}){const{window:n=I,initialWidth:t=1/0,initialHeight:s=1/0,listenOrientation:a=!0,includeScrollbar:r=!0}=e,o=b(t),i=b(s),u=()=>{n&&(r?(o.value=n.innerWidth,i.value=n.innerHeight):(o.value=n.document.documentElement.clientWidth,i.value=n.document.documentElement.clientHeight))};return u(),Ce(u),_("resize",u,{passive:!0}),a&&_("orientationchange",u,{passive:!0}),{width:o,height:i}}const cn=()=>x&&/firefox/i.test(window.navigator.userAgent),ht=()=>x&&/android/i.test(window.navigator.userAgent),bt=e=>e,G={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},dn=(e,n,{checkForDefaultPrevented:t=!0}={})=>a=>{const r=e?.(a);if(t===!1||!r)return n?.(a)},wt=e=>{if(e.code&&e.code!=="Unidentified")return e.code;const n=Et(e);if(n){if(Object.values(G).includes(n))return n;switch(n){case" ":return G.space;default:return""}}return""},Et=e=>{let n=e.key&&e.key!=="Unidentified"?e.key:"";if(!n&&e.type==="keyup"&&ht()){const t=e.target;n=t.value.charAt(t.selectionStart-1)}return n},Ot=Te({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:z([String,Object,Array])},offset:{type:z(Array),default:[0,0]},badgeClass:{type:String}}),_t=D({name:"ElBadge"}),Ct=D({..._t,props:Ot,setup(e,{expose:n}){const t=e,s=Ke("badge"),a=h(()=>t.isDot?"":P(t.value)&&P(t.max)?t.max0)return;if(sn){let t=sn;for(sn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;nn;){let t=nn;for(nn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ki(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Gi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),nr(s),Fl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ps(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Wi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Wi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===hn)||(e.globalVersion=hn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ps(e))))return;e.flags|=2;const t=e.dep,n=ce,s=je;ce=e,je=!0;try{Ki(e);const r=e.fn(e._value);(t.version===0||vt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ce=n,je=s,Gi(e),e.flags&=-3}}function nr(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)nr(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Fl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let je=!0;const $i=[];function ot(){$i.push(je),je=!1}function lt(){const e=$i.pop();je=e===void 0?!0:e}function xr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ce;ce=void 0;try{t()}finally{ce=n}}}let hn=0;class Vl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class sr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ce||!je||ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ce)n=this.activeLink=new Vl(ce,this),ce.deps?(n.prevDep=ce.depsTail,ce.depsTail.nextDep=n,ce.depsTail=n):ce.deps=ce.depsTail=n,qi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ce.depsTail,n.nextDep=void 0,ce.depsTail.nextDep=n,ce.depsTail=n,ce.deps===n&&(ce.deps=s)}return n}trigger(t){this.version++,hn++,this.notify(t)}notify(t){er();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{tr()}}}function qi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)qi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Fn=new WeakMap,Pt=Symbol(""),Is=Symbol(""),dn=Symbol("");function _e(e,t,n){if(je&&ce){let s=Fn.get(e);s||Fn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new sr),r.map=s,r.key=n),r.track()}}function st(e,t,n,s,r,i){const o=Fn.get(e);if(!o){hn++;return}const l=c=>{c&&c.trigger()};if(er(),t==="clear")o.forEach(l);else{const c=V(e),a=c&&zn(n);if(c&&n==="length"){const f=Number(s);o.forEach((h,p)=>{(p==="length"||p===dn||!Be(p)&&p>=f)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(dn)),t){case"add":c?a&&l(o.get("length")):(l(o.get(Pt)),kt(e)&&l(o.get(Is)));break;case"delete":c||(l(o.get(Pt)),kt(e)&&l(o.get(Is)));break;case"set":kt(e)&&l(o.get(Pt));break}}tr()}function Hl(e,t){const n=Fn.get(e);return n&&n.get(t)}function Ft(e){const t=Z(e);return t===e?t:(_e(t,"iterate",dn),Ne(e)?t:t.map(ke))}function ns(e){return _e(e=Z(e),"iterate",dn),e}function gt(e,t){return ct(e)?it(e)?Wt(ke(t)):Wt(t):ke(t)}const jl={__proto__:null,[Symbol.iterator](){return ms(this,Symbol.iterator,e=>gt(this,e))},concat(...e){return Ft(this).concat(...e.map(t=>V(t)?Ft(t):t))},entries(){return ms(this,"entries",e=>(e[1]=gt(this,e[1]),e))},every(e,t){return Ze(this,"every",e,t,void 0,arguments)},filter(e,t){return Ze(this,"filter",e,t,n=>n.map(s=>gt(this,s)),arguments)},find(e,t){return Ze(this,"find",e,t,n=>gt(this,n),arguments)},findIndex(e,t){return Ze(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ze(this,"findLast",e,t,n=>gt(this,n),arguments)},findLastIndex(e,t){return Ze(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ze(this,"forEach",e,t,void 0,arguments)},includes(...e){return _s(this,"includes",e)},indexOf(...e){return _s(this,"indexOf",e)},join(e){return Ft(this).join(e)},lastIndexOf(...e){return _s(this,"lastIndexOf",e)},map(e,t){return Ze(this,"map",e,t,void 0,arguments)},pop(){return Qt(this,"pop")},push(...e){return Qt(this,"push",e)},reduce(e,...t){return wr(this,"reduce",e,t)},reduceRight(e,...t){return wr(this,"reduceRight",e,t)},shift(){return Qt(this,"shift")},some(e,t){return Ze(this,"some",e,t,void 0,arguments)},splice(...e){return Qt(this,"splice",e)},toReversed(){return Ft(this).toReversed()},toSorted(e){return Ft(this).toSorted(e)},toSpliced(...e){return Ft(this).toSpliced(...e)},unshift(...e){return Qt(this,"unshift",e)},values(){return ms(this,"values",e=>gt(this,e))}};function ms(e,t,n){const s=ns(e),r=s[t]();return s!==e&&!Ne(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Bl=Array.prototype;function Ze(e,t,n,s,r,i){const o=ns(e),l=o!==e&&!Ne(e),c=o[t];if(c!==Bl[t]){const h=c.apply(e,i);return l?ke(h):h}let a=n;o!==e&&(l?a=function(h,p){return n.call(this,gt(e,h),p,e)}:n.length>2&&(a=function(h,p){return n.call(this,h,p,e)}));const f=c.call(o,a,s);return l&&r?r(f):f}function wr(e,t,n,s){const r=ns(e);let i=n;return r!==e&&(Ne(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,gt(e,l),c,e)}),r[t](i,...s)}function _s(e,t,n){const s=Z(e);_e(s,"iterate",dn);const r=s[t](...n);return(r===-1||r===!1)&&ss(n[0])?(n[0]=Z(n[0]),s[t](...n)):r}function Qt(e,t,n=[]){ot(),er();const s=Z(e)[t].apply(e,n);return tr(),lt(),s}const kl=Qs("__proto__,__v_isRef,__isVue"),Ji=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Be));function Ul(e){Be(e)||(e=String(e));const t=Z(this);return _e(t,"has",e),t.hasOwnProperty(e)}class zi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Xl:Zi:i?Xi:Yi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!r){let c;if(o&&(c=jl[n]))return c;if(n==="hasOwnProperty")return Ul}const l=Reflect.get(t,n,ae(t)?t:s);if((Be(n)?Ji.has(n):kl(n))||(r||_e(t,"get",n),i))return l;if(ae(l)){const c=o&&zn(n)?l:l.value;return r&&re(c)?Ms(c):c}return re(l)?r?Ms(l):En(l):l}}class Qi extends zi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=V(t)&&zn(n);if(!this._isShallow){const a=ct(i);if(!Ne(s)&&!ct(s)&&(i=Z(i),s=Z(s)),!o&&ae(i)&&!ae(s))return a||(i.value=s),!0}const l=o?Number(n)0)return;if(sn){let t=sn;for(sn=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;nn;){let t=nn;for(nn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ki(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Gi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),nr(s),Fl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ps(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Wi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Wi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===hn)||(e.globalVersion=hn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ps(e))))return;e.flags|=2;const t=e.dep,n=ce,s=je;ce=e,je=!0;try{Ki(e);const r=e.fn(e._value);(t.version===0||vt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ce=n,je=s,Gi(e),e.flags&=-3}}function nr(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)nr(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Fl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let je=!0;const $i=[];function ot(){$i.push(je),je=!1}function lt(){const e=$i.pop();je=e===void 0?!0:e}function xr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ce;ce=void 0;try{t()}finally{ce=n}}}let hn=0;class Vl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class sr{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ce||!je||ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ce)n=this.activeLink=new Vl(ce,this),ce.deps?(n.prevDep=ce.depsTail,ce.depsTail.nextDep=n,ce.depsTail=n):ce.deps=ce.depsTail=n,qi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ce.depsTail,n.nextDep=void 0,ce.depsTail.nextDep=n,ce.depsTail=n,ce.deps===n&&(ce.deps=s)}return n}trigger(t){this.version++,hn++,this.notify(t)}notify(t){er();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{tr()}}}function qi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)qi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Fn=new WeakMap,Pt=Symbol(""),Is=Symbol(""),dn=Symbol("");function _e(e,t,n){if(je&&ce){let s=Fn.get(e);s||Fn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new sr),r.map=s,r.key=n),r.track()}}function st(e,t,n,s,r,i){const o=Fn.get(e);if(!o){hn++;return}const l=c=>{c&&c.trigger()};if(er(),t==="clear")o.forEach(l);else{const c=V(e),a=c&&zn(n);if(c&&n==="length"){const f=Number(s);o.forEach((h,p)=>{(p==="length"||p===dn||!Be(p)&&p>=f)&&l(h)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(dn)),t){case"add":c?a&&l(o.get("length")):(l(o.get(Pt)),kt(e)&&l(o.get(Is)));break;case"delete":c||(l(o.get(Pt)),kt(e)&&l(o.get(Is)));break;case"set":kt(e)&&l(o.get(Pt));break}}tr()}function Hl(e,t){const n=Fn.get(e);return n&&n.get(t)}function Ft(e){const t=Z(e);return t===e?t:(_e(t,"iterate",dn),Ne(e)?t:t.map(ke))}function ns(e){return _e(e=Z(e),"iterate",dn),e}function gt(e,t){return ct(e)?it(e)?Wt(ke(t)):Wt(t):ke(t)}const jl={__proto__:null,[Symbol.iterator](){return ms(this,Symbol.iterator,e=>gt(this,e))},concat(...e){return Ft(this).concat(...e.map(t=>V(t)?Ft(t):t))},entries(){return ms(this,"entries",e=>(e[1]=gt(this,e[1]),e))},every(e,t){return Ze(this,"every",e,t,void 0,arguments)},filter(e,t){return Ze(this,"filter",e,t,n=>n.map(s=>gt(this,s)),arguments)},find(e,t){return Ze(this,"find",e,t,n=>gt(this,n),arguments)},findIndex(e,t){return Ze(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ze(this,"findLast",e,t,n=>gt(this,n),arguments)},findLastIndex(e,t){return Ze(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ze(this,"forEach",e,t,void 0,arguments)},includes(...e){return _s(this,"includes",e)},indexOf(...e){return _s(this,"indexOf",e)},join(e){return Ft(this).join(e)},lastIndexOf(...e){return _s(this,"lastIndexOf",e)},map(e,t){return Ze(this,"map",e,t,void 0,arguments)},pop(){return Qt(this,"pop")},push(...e){return Qt(this,"push",e)},reduce(e,...t){return wr(this,"reduce",e,t)},reduceRight(e,...t){return wr(this,"reduceRight",e,t)},shift(){return Qt(this,"shift")},some(e,t){return Ze(this,"some",e,t,void 0,arguments)},splice(...e){return Qt(this,"splice",e)},toReversed(){return Ft(this).toReversed()},toSorted(e){return Ft(this).toSorted(e)},toSpliced(...e){return Ft(this).toSpliced(...e)},unshift(...e){return Qt(this,"unshift",e)},values(){return ms(this,"values",e=>gt(this,e))}};function ms(e,t,n){const s=ns(e),r=s[t]();return s!==e&&!Ne(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Bl=Array.prototype;function Ze(e,t,n,s,r,i){const o=ns(e),l=o!==e&&!Ne(e),c=o[t];if(c!==Bl[t]){const h=c.apply(e,i);return l?ke(h):h}let a=n;o!==e&&(l?a=function(h,p){return n.call(this,gt(e,h),p,e)}:n.length>2&&(a=function(h,p){return n.call(this,h,p,e)}));const f=c.call(o,a,s);return l&&r?r(f):f}function wr(e,t,n,s){const r=ns(e);let i=n;return r!==e&&(Ne(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,gt(e,l),c,e)}),r[t](i,...s)}function _s(e,t,n){const s=Z(e);_e(s,"iterate",dn);const r=s[t](...n);return(r===-1||r===!1)&&ss(n[0])?(n[0]=Z(n[0]),s[t](...n)):r}function Qt(e,t,n=[]){ot(),er();const s=Z(e)[t].apply(e,n);return tr(),lt(),s}const kl=Qs("__proto__,__v_isRef,__isVue"),Ji=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Be));function Ul(e){Be(e)||(e=String(e));const t=Z(this);return _e(t,"has",e),t.hasOwnProperty(e)}class zi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Xl:Zi:i?Xi:Yi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!r){let c;if(o&&(c=jl[n]))return c;if(n==="hasOwnProperty")return Ul}const l=Reflect.get(t,n,ae(t)?t:s);if((Be(n)?Ji.has(n):kl(n))||(r||_e(t,"get",n),i))return l;if(ae(l)){const c=o&&zn(n)?l:l.value;return r&&re(c)?Ms(c):c}return re(l)?r?Ms(l):En(l):l}}class Qi extends zi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=V(t)&&zn(n);if(!this._isShallow){const a=ct(i);if(!Ne(s)&&!ct(s)&&(i=Z(i),s=Z(s)),!o&&ae(i)&&!ae(s))return a||(i.value=s),!0}const l=o?Number(n)