ellm-proxy 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{N as Kn,x as Mt,y as He,z as cr,B as Lt,C as jo,D as Ts,G as ia,H as Os,I as aa,J as Is,K as Kt,L as sa,M as xi,O as Ns,P as Cs,Q as As,R as xs,S as Ps,T as Xr,U as Ds,V as Kr,W as Rs,X as Ms,Y as Ls,Z as ws,$ as gn,A as Yt,d as Jt,a as J,o as te,c as Me,w as M,f as K,t as Te,e as Be,F as Bo,v as ko,a0 as fo,a1 as Vs,a2 as q,h as ae,i as tt,g as P,a3 as Fs,m as Ht,r as Pe,_ as cn,a4 as Xo,a5 as Rt,k as la,a6 as $s,E as Ao,a7 as Us,a8 as js,a9 as Bs,aa as ks}from"./index-BmtcBnoW.js";import{u as un}from"./useToast-C9BTyaBD.js";import{u as Ko}from"./providers-Aw7T7j0r.js";import"./config-CHaFDQC7.js";var yr={exports:{}},po={exports:{}},ho={};/**
1
+ import{N as Kn,x as Mt,y as He,z as cr,B as Lt,C as jo,D as Ts,G as ia,H as Os,I as aa,J as Is,K as Kt,L as sa,M as xi,O as Ns,P as Cs,Q as As,R as xs,S as Ps,T as Xr,U as Ds,V as Kr,W as Rs,X as Ms,Y as Ls,Z as ws,$ as gn,A as Yt,d as Jt,a as J,o as te,c as Me,w as M,f as K,t as Te,e as Be,F as Bo,v as ko,a0 as fo,a1 as Vs,a2 as q,h as ae,i as tt,g as P,a3 as Fs,m as Ht,r as Pe,_ as cn,a4 as Xo,a5 as Rt,k as la,a6 as $s,E as Ao,a7 as Us,a8 as js,a9 as Bs,aa as ks}from"./index-DzBTME5Z.js";import{u as un}from"./useToast-BIVFyGJl.js";import{u as Ko}from"./providers-DN-6AbdJ.js";import"./config-CFGI6BQU.js";var yr={exports:{}},po={exports:{}},ho={};/**
2
2
  * @vue/compiler-core v3.5.42
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
@@ -27,5 +27,5 @@ Use a v-bind binding combined with a v-on listener that emits update:x event ins
27
27
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Yc="1.14.0";function Ft(e){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(e)}var $t=Ft(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),ar=Ft(/Edge/i),zi=Ft(/firefox/i),Gn=Ft(/safari/i)&&!Ft(/chrome/i)&&!Ft(/android/i),us=Ft(/iP(ad|od|hone)/i),zc=Ft(/chrome/i)&&Ft(/android/i),fs={capture:!1,passive:!1};function pe(e,t,n){e.addEventListener(t,n,!$t&&fs)}function fe(e,t,n){e.removeEventListener(t,n,!$t&&fs)}function $r(e,t){if(t){if(t[0]===">"&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch{return!1}return!1}}function Jc(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function It(e,t,n,o){if(e){n=n||document;do{if(t!=null&&(t[0]===">"?e.parentNode===n&&$r(e,t):$r(e,t))||o&&e===n)return e;if(e===n)break}while(e=Jc(e))}return null}var Ji=/\s+/g;function Ve(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var o=(" "+e.className+" ").replace(Ji," ").replace(" "+t+" "," ");e.className=(o+(n?" "+t:"")).replace(Ji," ")}}function H(e,t,n){var o=e&&e.style;if(o){if(n===void 0)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),t===void 0?n:n[t];!(t in o)&&t.indexOf("webkit")===-1&&(t="-webkit-"+t),o[t]=n+(typeof n=="string"?"":"px")}}function rn(e,t){var n="";if(typeof e=="string")n=e;else do{var o=H(e,"transform");o&&o!=="none"&&(n=o+" "+n)}while(!t&&(e=e.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function ds(e,t,n){if(e){var o=e.getElementsByTagName(t),i=0,a=o.length;if(n)for(;i<a;i++)n(o[i],i);return o}return[]}function Ct(){var e=document.scrollingElement;return e||document.documentElement}function Re(e,t,n,o,i){if(!(!e.getBoundingClientRect&&e!==window)){var a,r,s,l,c,f,u;if(e!==window&&e.parentNode&&e!==Ct()?(a=e.getBoundingClientRect(),r=a.top,s=a.left,l=a.bottom,c=a.right,f=a.height,u=a.width):(r=0,s=0,l=window.innerHeight,c=window.innerWidth,f=window.innerHeight,u=window.innerWidth),(t||n)&&e!==window&&(i=i||e.parentNode,!$t))do if(i&&i.getBoundingClientRect&&(H(i,"transform")!=="none"||n&&H(i,"position")!=="static")){var p=i.getBoundingClientRect();r-=p.top+parseInt(H(i,"border-top-width")),s-=p.left+parseInt(H(i,"border-left-width")),l=r+a.height,c=s+a.width;break}while(i=i.parentNode);if(o&&e!==window){var d=rn(i||e),m=d&&d.a,h=d&&d.d;d&&(r/=h,s/=m,u/=m,f/=h,l=r+f,c=s+u)}return{top:r,left:s,bottom:l,right:c,width:u,height:f}}}function Qi(e,t,n){for(var o=Gt(e,!0),i=Re(e)[t];o;){var a=Re(o)[n],r=void 0;if(r=i>=a,!r)return o;if(o===Ct())break;o=Gt(o,!1)}return!1}function Cn(e,t,n,o){for(var i=0,a=0,r=e.children;a<r.length;){if(r[a].style.display!=="none"&&r[a]!==Z.ghost&&(o||r[a]!==Z.dragged)&&It(r[a],n.draggable,e,!1)){if(i===t)return r[a];i++}a++}return null}function Oi(e,t){for(var n=e.lastElementChild;n&&(n===Z.ghost||H(n,"display")==="none"||t&&!$r(n,t));)n=n.previousElementSibling;return n||null}function je(e,t){var n=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)e.nodeName.toUpperCase()!=="TEMPLATE"&&e!==Z.clone&&(!t||$r(e,t))&&n++;return n}function Zi(e){var t=0,n=0,o=Ct();if(e)do{var i=rn(e),a=i.a,r=i.d;t+=e.scrollLeft*a,n+=e.scrollTop*r}while(e!==o&&(e=e.parentNode));return[t,n]}function Qc(e,t){for(var n in e)if(e.hasOwnProperty(n)){for(var o in t)if(t.hasOwnProperty(o)&&t[o]===e[n][o])return Number(n)}return-1}function Gt(e,t){if(!e||!e.getBoundingClientRect)return Ct();var n=e,o=!1;do if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var i=H(n);if(n.clientWidth<n.scrollWidth&&(i.overflowX=="auto"||i.overflowX=="scroll")||n.clientHeight<n.scrollHeight&&(i.overflowY=="auto"||i.overflowY=="scroll")){if(!n.getBoundingClientRect||n===document.body)return Ct();if(o||t)return n;o=!0}}while(n=n.parentNode);return Ct()}function Zc(e,t){if(e&&t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function vo(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}var Hn;function ps(e,t){return function(){if(!Hn){var n=arguments,o=this;n.length===1?e.call(o,n[0]):e.apply(o,n),Hn=setTimeout(function(){Hn=void 0},t)}}}function _c(){clearTimeout(Hn),Hn=void 0}function hs(e,t,n){e.scrollLeft+=t,e.scrollTop+=n}function Ii(e){var t=window.Polymer,n=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):n?n(e).clone(!0)[0]:e.cloneNode(!0)}function _i(e,t){H(e,"position","absolute"),H(e,"top",t.top),H(e,"left",t.left),H(e,"width",t.width),H(e,"height",t.height)}function go(e){H(e,"position",""),H(e,"top",""),H(e,"left",""),H(e,"width",""),H(e,"height","")}var rt="Sortable"+new Date().getTime();function qc(){var e=[],t;return{captureAnimationState:function(){if(e=[],!!this.options.animation){var o=[].slice.call(this.el.children);o.forEach(function(i){if(!(H(i,"display")==="none"||i===Z.ghost)){e.push({target:i,rect:Re(i)});var a=At({},e[e.length-1].rect);if(i.thisAnimationDuration){var r=rn(i,!0);r&&(a.top-=r.f,a.left-=r.e)}i.fromRect=a}})}},addAnimationState:function(o){e.push(o)},removeAnimationState:function(o){e.splice(Qc(e,{target:o}),1)},animateAll:function(o){var i=this;if(!this.options.animation){clearTimeout(t),typeof o=="function"&&o();return}var a=!1,r=0;e.forEach(function(s){var l=0,c=s.target,f=c.fromRect,u=Re(c),p=c.prevFromRect,d=c.prevToRect,m=s.rect,h=rn(c,!0);h&&(u.top-=h.f,u.left-=h.e),c.toRect=u,c.thisAnimationDuration&&vo(p,u)&&!vo(f,u)&&(m.top-u.top)/(m.left-u.left)===(f.top-u.top)/(f.left-u.left)&&(l=tu(m,p,d,i.options)),vo(u,f)||(c.prevFromRect=f,c.prevToRect=u,l||(l=i.options.animation),i.animate(c,m,u,l)),l&&(a=!0,r=Math.max(r,l),clearTimeout(c.animationResetTimer),c.animationResetTimer=setTimeout(function(){c.animationTime=0,c.prevFromRect=null,c.fromRect=null,c.prevToRect=null,c.thisAnimationDuration=null},l),c.thisAnimationDuration=l)}),clearTimeout(t),a?t=setTimeout(function(){typeof o=="function"&&o()},r):typeof o=="function"&&o(),e=[]},animate:function(o,i,a,r){if(r){H(o,"transition",""),H(o,"transform","");var s=rn(this.el),l=s&&s.a,c=s&&s.d,f=(i.left-a.left)/(l||1),u=(i.top-a.top)/(c||1);o.animatingX=!!f,o.animatingY=!!u,H(o,"transform","translate3d("+f+"px,"+u+"px,0)"),this.forRepaintDummy=eu(o),H(o,"transition","transform "+r+"ms"+(this.options.easing?" "+this.options.easing:"")),H(o,"transform","translate3d(0,0,0)"),typeof o.animated=="number"&&clearTimeout(o.animated),o.animated=setTimeout(function(){H(o,"transition",""),H(o,"transform",""),o.animated=!1,o.animatingX=!1,o.animatingY=!1},r)}}}}function eu(e){return e.offsetWidth}function tu(e,t,n,o){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))/Math.sqrt(Math.pow(t.top-n.top,2)+Math.pow(t.left-n.left,2))*o.animation}var pn=[],yo={initializeByDefault:!0},sr={mount:function(t){for(var n in yo)yo.hasOwnProperty(n)&&!(n in t)&&(t[n]=yo[n]);pn.forEach(function(o){if(o.pluginName===t.pluginName)throw"Sortable: Cannot mount plugin ".concat(t.pluginName," more than once")}),pn.push(t)},pluginEvent:function(t,n,o){var i=this;this.eventCanceled=!1,o.cancel=function(){i.eventCanceled=!0};var a=t+"Global";pn.forEach(function(r){n[r.pluginName]&&(n[r.pluginName][a]&&n[r.pluginName][a](At({sortable:n},o)),n.options[r.pluginName]&&n[r.pluginName][t]&&n[r.pluginName][t](At({sortable:n},o)))})},initializePlugins:function(t,n,o,i){pn.forEach(function(s){var l=s.pluginName;if(!(!t.options[l]&&!s.initializeByDefault)){var c=new s(t,n,t.options);c.sortable=t,c.options=t.options,t[l]=c,Et(o,c.defaults)}});for(var a in t.options)if(t.options.hasOwnProperty(a)){var r=this.modifyOption(t,a,t.options[a]);typeof r<"u"&&(t.options[a]=r)}},getEventProperties:function(t,n){var o={};return pn.forEach(function(i){typeof i.eventProperties=="function"&&Et(o,i.eventProperties.call(n[i.pluginName],t))}),o},modifyOption:function(t,n,o){var i;return pn.forEach(function(a){t[a.pluginName]&&a.optionListeners&&typeof a.optionListeners[n]=="function"&&(i=a.optionListeners[n].call(t[a.pluginName],o))}),i}};function jn(e){var t=e.sortable,n=e.rootEl,o=e.name,i=e.targetEl,a=e.cloneEl,r=e.toEl,s=e.fromEl,l=e.oldIndex,c=e.newIndex,f=e.oldDraggableIndex,u=e.newDraggableIndex,p=e.originalEvent,d=e.putSortable,m=e.extraEventProperties;if(t=t||n&&n[rt],!!t){var h,v=t.options,g="on"+o.charAt(0).toUpperCase()+o.substr(1);window.CustomEvent&&!$t&&!ar?h=new CustomEvent(o,{bubbles:!0,cancelable:!0}):(h=document.createEvent("Event"),h.initEvent(o,!0,!0)),h.to=r||n,h.from=s||n,h.item=i||n,h.clone=a,h.oldIndex=l,h.newIndex=c,h.oldDraggableIndex=f,h.newDraggableIndex=u,h.originalEvent=p,h.pullMode=d?d.lastPutMode:void 0;var y=At(At({},m),sr.getEventProperties(o,t));for(var I in y)h[I]=y[I];n&&n.dispatchEvent(h),v[g]&&v[g].call(t,h)}}var nu=["evt"],lt=function(t,n){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.evt,a=kc(o,nu);sr.pluginEvent.bind(Z)(t,n,At({dragEl:k,parentEl:$e,ghostEl:se,rootEl:De,nextEl:qt,lastDownEl:Cr,cloneEl:Ue,cloneHidden:Xt,dragStarted:Bn,putSortable:Qe,activeSortable:Z.active,originalEvent:i,oldIndex:yn,oldDraggableIndex:Wn,newIndex:pt,newDraggableIndex:kt,hideGhostForTarget:ys,unhideGhostForTarget:Es,cloneNowHidden:function(){Xt=!0},cloneNowShown:function(){Xt=!1},dispatchSortableEvent:function(s){it({sortable:n,name:s,originalEvent:i})}},a))};function it(e){jn(At({putSortable:Qe,cloneEl:Ue,targetEl:k,rootEl:De,oldIndex:yn,oldDraggableIndex:Wn,newIndex:pt,newDraggableIndex:kt},e))}var k,$e,se,De,qt,Cr,Ue,Xt,yn,pt,Wn,kt,dr,Qe,vn=!1,Ur=!1,jr=[],Qt,bt,Eo,So,qi,ea,Bn,hn,Yn,zn=!1,pr=!1,Ar,qe,bo=[],Vo=!1,Br=[],lo=typeof document<"u",hr=us,ta=ar||$t?"cssFloat":"float",ru=lo&&!zc&&!us&&"draggable"in document.createElement("div"),ms=(function(){if(lo){if($t)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto",e.style.pointerEvents==="auto"}})(),vs=function(t,n){var o=H(t),i=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),a=Cn(t,0,n),r=Cn(t,1,n),s=a&&H(a),l=r&&H(r),c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+Re(a).width,f=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+Re(r).width;if(o.display==="flex")return o.flexDirection==="column"||o.flexDirection==="column-reverse"?"vertical":"horizontal";if(o.display==="grid")return o.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(a&&s.float&&s.float!=="none"){var u=s.float==="left"?"left":"right";return r&&(l.clear==="both"||l.clear===u)?"vertical":"horizontal"}return a&&(s.display==="block"||s.display==="flex"||s.display==="table"||s.display==="grid"||c>=i&&o[ta]==="none"||r&&o[ta]==="none"&&c+f>i)?"vertical":"horizontal"},ou=function(t,n,o){var i=o?t.left:t.top,a=o?t.right:t.bottom,r=o?t.width:t.height,s=o?n.left:n.top,l=o?n.right:n.bottom,c=o?n.width:n.height;return i===s||a===l||i+r/2===s+c/2},iu=function(t,n){var o;return jr.some(function(i){var a=i[rt].options.emptyInsertThreshold;if(!(!a||Oi(i))){var r=Re(i),s=t>=r.left-a&&t<=r.right+a,l=n>=r.top-a&&n<=r.bottom+a;if(s&&l)return o=i}}),o},gs=function(t){function n(a,r){return function(s,l,c,f){var u=s.options.group.name&&l.options.group.name&&s.options.group.name===l.options.group.name;if(a==null&&(r||u))return!0;if(a==null||a===!1)return!1;if(r&&a==="clone")return a;if(typeof a=="function")return n(a(s,l,c,f),r)(s,l,c,f);var p=(r?s:l).options.group.name;return a===!0||typeof a=="string"&&a===p||a.join&&a.indexOf(p)>-1}}var o={},i=t.group;(!i||Nr(i)!="object")&&(i={name:i}),o.name=i.name,o.checkPull=n(i.pull,!0),o.checkPut=n(i.put),o.revertClone=i.revertClone,t.group=o},ys=function(){!ms&&se&&H(se,"display","none")},Es=function(){!ms&&se&&H(se,"display","")};lo&&document.addEventListener("click",function(e){if(Ur)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),Ur=!1,!1},!0);var Zt=function(t){if(k){t=t.touches?t.touches[0]:t;var n=iu(t.clientX,t.clientY);if(n){var o={};for(var i in t)t.hasOwnProperty(i)&&(o[i]=t[i]);o.target=o.rootEl=n,o.preventDefault=void 0,o.stopPropagation=void 0,n[rt]._onDragOver(o)}}},au=function(t){k&&k.parentNode[rt]._isOutsideThisEl(t.target)};function Z(e,t){if(!(e&&e.nodeType&&e.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=Et({},t),e[rt]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return vs(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(r,s){r.setData("Text",s.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:Z.supportPointer!==!1&&"PointerEvent"in window&&!Gn,emptyInsertThreshold:5};sr.initializePlugins(this,e,n);for(var o in n)!(o in t)&&(t[o]=n[o]);gs(t);for(var i in this)i.charAt(0)==="_"&&typeof this[i]=="function"&&(this[i]=this[i].bind(this));this.nativeDraggable=t.forceFallback?!1:ru,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?pe(e,"pointerdown",this._onTapStart):(pe(e,"mousedown",this._onTapStart),pe(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(pe(e,"dragover",this),pe(e,"dragenter",this)),jr.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),Et(this,qc())}Z.prototype={constructor:Z,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(hn=null)},_getDirection:function(t,n){return typeof this.options.direction=="function"?this.options.direction.call(this,t,n,k):this.options.direction},_onTapStart:function(t){if(t.cancelable){var n=this,o=this.el,i=this.options,a=i.preventOnFilter,r=t.type,s=t.touches&&t.touches[0]||t.pointerType&&t.pointerType==="touch"&&t,l=(s||t).target,c=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||l,f=i.filter;if(hu(o),!k&&!(/mousedown|pointerdown/.test(r)&&t.button!==0||i.disabled)&&!c.isContentEditable&&!(!this.nativeDraggable&&Gn&&l&&l.tagName.toUpperCase()==="SELECT")&&(l=It(l,i.draggable,o,!1),!(l&&l.animated)&&Cr!==l)){if(yn=je(l),Wn=je(l,i.draggable),typeof f=="function"){if(f.call(this,t,l,this)){it({sortable:n,rootEl:c,name:"filter",targetEl:l,toEl:o,fromEl:o}),lt("filter",n,{evt:t}),a&&t.cancelable&&t.preventDefault();return}}else if(f&&(f=f.split(",").some(function(u){if(u=It(c,u.trim(),o,!1),u)return it({sortable:n,rootEl:u,name:"filter",targetEl:l,fromEl:o,toEl:o}),lt("filter",n,{evt:t}),!0}),f)){a&&t.cancelable&&t.preventDefault();return}i.handle&&!It(c,i.handle,o,!1)||this._prepareDragStart(t,s,l)}}},_prepareDragStart:function(t,n,o){var i=this,a=i.el,r=i.options,s=a.ownerDocument,l;if(o&&!k&&o.parentNode===a){var c=Re(o);if(De=a,k=o,$e=k.parentNode,qt=k.nextSibling,Cr=o,dr=r.group,Z.dragged=k,Qt={target:k,clientX:(n||t).clientX,clientY:(n||t).clientY},qi=Qt.clientX-c.left,ea=Qt.clientY-c.top,this._lastX=(n||t).clientX,this._lastY=(n||t).clientY,k.style["will-change"]="all",l=function(){if(lt("delayEnded",i,{evt:t}),Z.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!zi&&i.nativeDraggable&&(k.draggable=!0),i._triggerDragStart(t,n),it({sortable:i,name:"choose",originalEvent:t}),Ve(k,r.chosenClass,!0)},r.ignore.split(",").forEach(function(f){ds(k,f.trim(),To)}),pe(s,"dragover",Zt),pe(s,"mousemove",Zt),pe(s,"touchmove",Zt),pe(s,"mouseup",i._onDrop),pe(s,"touchend",i._onDrop),pe(s,"touchcancel",i._onDrop),zi&&this.nativeDraggable&&(this.options.touchStartThreshold=4,k.draggable=!0),lt("delayStart",this,{evt:t}),r.delay&&(!r.delayOnTouchOnly||n)&&(!this.nativeDraggable||!(ar||$t))){if(Z.eventCanceled){this._onDrop();return}pe(s,"mouseup",i._disableDelayedDrag),pe(s,"touchend",i._disableDelayedDrag),pe(s,"touchcancel",i._disableDelayedDrag),pe(s,"mousemove",i._delayedDragTouchMoveHandler),pe(s,"touchmove",i._delayedDragTouchMoveHandler),r.supportPointer&&pe(s,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(l,r.delay)}else l()}},_delayedDragTouchMoveHandler:function(t){var n=t.touches?t.touches[0]:t;Math.max(Math.abs(n.clientX-this._lastX),Math.abs(n.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){k&&To(k),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;fe(t,"mouseup",this._disableDelayedDrag),fe(t,"touchend",this._disableDelayedDrag),fe(t,"touchcancel",this._disableDelayedDrag),fe(t,"mousemove",this._delayedDragTouchMoveHandler),fe(t,"touchmove",this._delayedDragTouchMoveHandler),fe(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,n){n=n||t.pointerType=="touch"&&t,!this.nativeDraggable||n?this.options.supportPointer?pe(document,"pointermove",this._onTouchMove):n?pe(document,"touchmove",this._onTouchMove):pe(document,"mousemove",this._onTouchMove):(pe(k,"dragend",this),pe(De,"dragstart",this._onDragStart));try{document.selection?xr(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,n){if(vn=!1,De&&k){lt("dragStarted",this,{evt:n}),this.nativeDraggable&&pe(document,"dragover",au);var o=this.options;!t&&Ve(k,o.dragClass,!1),Ve(k,o.ghostClass,!0),Z.active=this,t&&this._appendGhost(),it({sortable:this,name:"start",originalEvent:n})}else this._nulling()},_emulateDragOver:function(){if(bt){this._lastX=bt.clientX,this._lastY=bt.clientY,ys();for(var t=document.elementFromPoint(bt.clientX,bt.clientY),n=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(bt.clientX,bt.clientY),t!==n);)n=t;if(k.parentNode[rt]._isOutsideThisEl(t),n)do{if(n[rt]){var o=void 0;if(o=n[rt]._onDragOver({clientX:bt.clientX,clientY:bt.clientY,target:t,rootEl:n}),o&&!this.options.dragoverBubble)break}t=n}while(n=n.parentNode);Es()}},_onTouchMove:function(t){if(Qt){var n=this.options,o=n.fallbackTolerance,i=n.fallbackOffset,a=t.touches?t.touches[0]:t,r=se&&rn(se,!0),s=se&&r&&r.a,l=se&&r&&r.d,c=hr&&qe&&Zi(qe),f=(a.clientX-Qt.clientX+i.x)/(s||1)+(c?c[0]-bo[0]:0)/(s||1),u=(a.clientY-Qt.clientY+i.y)/(l||1)+(c?c[1]-bo[1]:0)/(l||1);if(!Z.active&&!vn){if(o&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.clientY-this._lastY))<o)return;this._onDragStart(t,!0)}if(se){r?(r.e+=f-(Eo||0),r.f+=u-(So||0)):r={a:1,b:0,c:0,d:1,e:f,f:u};var p="matrix(".concat(r.a,",").concat(r.b,",").concat(r.c,",").concat(r.d,",").concat(r.e,",").concat(r.f,")");H(se,"webkitTransform",p),H(se,"mozTransform",p),H(se,"msTransform",p),H(se,"transform",p),Eo=f,So=u,bt=a}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!se){var t=this.options.fallbackOnBody?document.body:De,n=Re(k,!0,hr,!0,t),o=this.options;if(hr){for(qe=t;H(qe,"position")==="static"&&H(qe,"transform")==="none"&&qe!==document;)qe=qe.parentNode;qe!==document.body&&qe!==document.documentElement?(qe===document&&(qe=Ct()),n.top+=qe.scrollTop,n.left+=qe.scrollLeft):qe=Ct(),bo=Zi(qe)}se=k.cloneNode(!0),Ve(se,o.ghostClass,!1),Ve(se,o.fallbackClass,!0),Ve(se,o.dragClass,!0),H(se,"transition",""),H(se,"transform",""),H(se,"box-sizing","border-box"),H(se,"margin",0),H(se,"top",n.top),H(se,"left",n.left),H(se,"width",n.width),H(se,"height",n.height),H(se,"opacity","0.8"),H(se,"position",hr?"absolute":"fixed"),H(se,"zIndex","100000"),H(se,"pointerEvents","none"),Z.ghost=se,t.appendChild(se),H(se,"transform-origin",qi/parseInt(se.style.width)*100+"% "+ea/parseInt(se.style.height)*100+"%")}},_onDragStart:function(t,n){var o=this,i=t.dataTransfer,a=o.options;if(lt("dragStart",this,{evt:t}),Z.eventCanceled){this._onDrop();return}lt("setupClone",this),Z.eventCanceled||(Ue=Ii(k),Ue.draggable=!1,Ue.style["will-change"]="",this._hideClone(),Ve(Ue,this.options.chosenClass,!1),Z.clone=Ue),o.cloneId=xr(function(){lt("clone",o),!Z.eventCanceled&&(o.options.removeCloneOnHide||De.insertBefore(Ue,k),o._hideClone(),it({sortable:o,name:"clone"}))}),!n&&Ve(k,a.dragClass,!0),n?(Ur=!0,o._loopId=setInterval(o._emulateDragOver,50)):(fe(document,"mouseup",o._onDrop),fe(document,"touchend",o._onDrop),fe(document,"touchcancel",o._onDrop),i&&(i.effectAllowed="move",a.setData&&a.setData.call(o,i,k)),pe(document,"drop",o),H(k,"transform","translateZ(0)")),vn=!0,o._dragStartId=xr(o._dragStarted.bind(o,n,t)),pe(document,"selectstart",o),Bn=!0,Gn&&H(document.body,"user-select","none")},_onDragOver:function(t){var n=this.el,o=t.target,i,a,r,s=this.options,l=s.group,c=Z.active,f=dr===l,u=s.sort,p=Qe||c,d,m=this,h=!1;if(Vo)return;function v(z,ce){lt(z,m,At({evt:t,isOwner:f,axis:d?"vertical":"horizontal",revert:r,dragRect:i,targetRect:a,canSort:u,fromSortable:p,target:o,completed:y,onMove:function(ge,Ee){return mr(De,n,k,i,ge,Re(ge),t,Ee)},changed:I},ce))}function g(){v("dragOverAnimationCapture"),m.captureAnimationState(),m!==p&&p.captureAnimationState()}function y(z){return v("dragOverCompleted",{insertion:z}),z&&(f?c._hideClone():c._showClone(m),m!==p&&(Ve(k,Qe?Qe.options.ghostClass:c.options.ghostClass,!1),Ve(k,s.ghostClass,!0)),Qe!==m&&m!==Z.active?Qe=m:m===Z.active&&Qe&&(Qe=null),p===m&&(m._ignoreWhileAnimating=o),m.animateAll(function(){v("dragOverAnimationComplete"),m._ignoreWhileAnimating=null}),m!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(o===k&&!k.animated||o===n&&!o.animated)&&(hn=null),!s.dragoverBubble&&!t.rootEl&&o!==document&&(k.parentNode[rt]._isOutsideThisEl(t.target),!z&&Zt(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),h=!0}function I(){pt=je(k),kt=je(k,s.draggable),it({sortable:m,name:"change",toEl:n,newIndex:pt,newDraggableIndex:kt,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),o=It(o,s.draggable,n,!0),v("dragOver"),Z.eventCanceled)return h;if(k.contains(t.target)||o.animated&&o.animatingX&&o.animatingY||m._ignoreWhileAnimating===o)return y(!1);if(Ur=!1,c&&!s.disabled&&(f?u||(r=$e!==De):Qe===this||(this.lastPutMode=dr.checkPull(this,c,k,t))&&l.checkPut(this,c,k,t))){if(d=this._getDirection(t,o)==="vertical",i=Re(k),v("dragOverValid"),Z.eventCanceled)return h;if(r)return $e=De,g(),this._hideClone(),v("revert"),Z.eventCanceled||(qt?De.insertBefore(k,qt):De.appendChild(k)),y(!0);var S=Oi(n,s.draggable);if(!S||uu(t,d,this)&&!S.animated){if(S===k)return y(!1);if(S&&n===t.target&&(o=S),o&&(a=Re(o)),mr(De,n,k,i,o,a,t,!!o)!==!1)return g(),n.appendChild(k),$e=n,I(),y(!0)}else if(S&&cu(t,d,this)){var C=Cn(n,0,s,!0);if(C===k)return y(!1);if(o=C,a=Re(o),mr(De,n,k,i,o,a,t,!1)!==!1)return g(),n.insertBefore(k,C),$e=n,I(),y(!0)}else if(o.parentNode===n){a=Re(o);var A=0,B,w=k.parentNode!==n,O=!ou(k.animated&&k.toRect||i,o.animated&&o.toRect||a,d),L=d?"top":"left",j=Qi(o,"top","top")||Qi(k,"top","top"),R=j?j.scrollTop:void 0;hn!==o&&(B=a[L],zn=!1,pr=!O&&s.invertSwap||w),A=fu(t,o,a,d,O?1:s.swapThreshold,s.invertedSwapThreshold==null?s.swapThreshold:s.invertedSwapThreshold,pr,hn===o);var E;if(A!==0){var N=je(k);do N-=A,E=$e.children[N];while(E&&(H(E,"display")==="none"||E===se))}if(A===0||E===o)return y(!1);hn=o,Yn=A;var V=o.nextElementSibling,F=!1;F=A===1;var U=mr(De,n,k,i,o,a,t,F);if(U!==!1)return(U===1||U===-1)&&(F=U===1),Vo=!0,setTimeout(lu,30),g(),F&&!V?n.appendChild(k):o.parentNode.insertBefore(k,F?V:o),j&&hs(j,0,R-j.scrollTop),$e=k.parentNode,B!==void 0&&!pr&&(Ar=Math.abs(B-Re(o)[L])),I(),y(!0)}if(n.contains(k))return y(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){fe(document,"mousemove",this._onTouchMove),fe(document,"touchmove",this._onTouchMove),fe(document,"pointermove",this._onTouchMove),fe(document,"dragover",Zt),fe(document,"mousemove",Zt),fe(document,"touchmove",Zt)},_offUpEvents:function(){var t=this.el.ownerDocument;fe(t,"mouseup",this._onDrop),fe(t,"touchend",this._onDrop),fe(t,"pointerup",this._onDrop),fe(t,"touchcancel",this._onDrop),fe(document,"selectstart",this)},_onDrop:function(t){var n=this.el,o=this.options;if(pt=je(k),kt=je(k,o.draggable),lt("drop",this,{evt:t}),$e=k&&k.parentNode,pt=je(k),kt=je(k,o.draggable),Z.eventCanceled){this._nulling();return}vn=!1,pr=!1,zn=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Fo(this.cloneId),Fo(this._dragStartId),this.nativeDraggable&&(fe(document,"drop",this),fe(n,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Gn&&H(document.body,"user-select",""),H(k,"transform",""),t&&(Bn&&(t.cancelable&&t.preventDefault(),!o.dropBubble&&t.stopPropagation()),se&&se.parentNode&&se.parentNode.removeChild(se),(De===$e||Qe&&Qe.lastPutMode!=="clone")&&Ue&&Ue.parentNode&&Ue.parentNode.removeChild(Ue),k&&(this.nativeDraggable&&fe(k,"dragend",this),To(k),k.style["will-change"]="",Bn&&!vn&&Ve(k,Qe?Qe.options.ghostClass:this.options.ghostClass,!1),Ve(k,this.options.chosenClass,!1),it({sortable:this,name:"unchoose",toEl:$e,newIndex:null,newDraggableIndex:null,originalEvent:t}),De!==$e?(pt>=0&&(it({rootEl:$e,name:"add",toEl:$e,fromEl:De,originalEvent:t}),it({sortable:this,name:"remove",toEl:$e,originalEvent:t}),it({rootEl:$e,name:"sort",toEl:$e,fromEl:De,originalEvent:t}),it({sortable:this,name:"sort",toEl:$e,originalEvent:t})),Qe&&Qe.save()):pt!==yn&&pt>=0&&(it({sortable:this,name:"update",toEl:$e,originalEvent:t}),it({sortable:this,name:"sort",toEl:$e,originalEvent:t})),Z.active&&((pt==null||pt===-1)&&(pt=yn,kt=Wn),it({sortable:this,name:"end",toEl:$e,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){lt("nulling",this),De=k=$e=se=qt=Ue=Cr=Xt=Qt=bt=Bn=pt=kt=yn=Wn=hn=Yn=Qe=dr=Z.dragged=Z.ghost=Z.clone=Z.active=null,Br.forEach(function(t){t.checked=!0}),Br.length=Eo=So=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":k&&(this._onDragOver(t),su(t));break;case"selectstart":t.preventDefault();break}},toArray:function(){for(var t=[],n,o=this.el.children,i=0,a=o.length,r=this.options;i<a;i++)n=o[i],It(n,r.draggable,this.el,!1)&&t.push(n.getAttribute(r.dataIdAttr)||pu(n));return t},sort:function(t,n){var o={},i=this.el;this.toArray().forEach(function(a,r){var s=i.children[r];It(s,this.options.draggable,i,!1)&&(o[a]=s)},this),n&&this.captureAnimationState(),t.forEach(function(a){o[a]&&(i.removeChild(o[a]),i.appendChild(o[a]))}),n&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,n){return It(t,n||this.options.draggable,this.el,!1)},option:function(t,n){var o=this.options;if(n===void 0)return o[t];var i=sr.modifyOption(this,t,n);typeof i<"u"?o[t]=i:o[t]=n,t==="group"&&gs(o)},destroy:function(){lt("destroy",this);var t=this.el;t[rt]=null,fe(t,"mousedown",this._onTapStart),fe(t,"touchstart",this._onTapStart),fe(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(fe(t,"dragover",this),fe(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(n){n.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),jr.splice(jr.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!Xt){if(lt("hideClone",this),Z.eventCanceled)return;H(Ue,"display","none"),this.options.removeCloneOnHide&&Ue.parentNode&&Ue.parentNode.removeChild(Ue),Xt=!0}},_showClone:function(t){if(t.lastPutMode!=="clone"){this._hideClone();return}if(Xt){if(lt("showClone",this),Z.eventCanceled)return;k.parentNode==De&&!this.options.group.revertClone?De.insertBefore(Ue,k):qt?De.insertBefore(Ue,qt):De.appendChild(Ue),this.options.group.revertClone&&this.animate(k,Ue),H(Ue,"display",""),Xt=!1}}};function su(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move"),e.cancelable&&e.preventDefault()}function mr(e,t,n,o,i,a,r,s){var l,c=e[rt],f=c.options.onMove,u;return window.CustomEvent&&!$t&&!ar?l=new CustomEvent("move",{bubbles:!0,cancelable:!0}):(l=document.createEvent("Event"),l.initEvent("move",!0,!0)),l.to=t,l.from=e,l.dragged=n,l.draggedRect=o,l.related=i||t,l.relatedRect=a||Re(t),l.willInsertAfter=s,l.originalEvent=r,e.dispatchEvent(l),f&&(u=f.call(c,l,r)),u}function To(e){e.draggable=!1}function lu(){Vo=!1}function cu(e,t,n){var o=Re(Cn(n.el,0,n.options,!0)),i=10;return t?e.clientX<o.left-i||e.clientY<o.top&&e.clientX<o.right:e.clientY<o.top-i||e.clientY<o.bottom&&e.clientX<o.left}function uu(e,t,n){var o=Re(Oi(n.el,n.options.draggable)),i=10;return t?e.clientX>o.right+i||e.clientX<=o.right&&e.clientY>o.bottom&&e.clientX>=o.left:e.clientX>o.right&&e.clientY>o.top||e.clientX<=o.right&&e.clientY>o.bottom+i}function fu(e,t,n,o,i,a,r,s){var l=o?e.clientY:e.clientX,c=o?n.height:n.width,f=o?n.top:n.left,u=o?n.bottom:n.right,p=!1;if(!r){if(s&&Ar<c*i){if(!zn&&(Yn===1?l>f+c*a/2:l<u-c*a/2)&&(zn=!0),zn)p=!0;else if(Yn===1?l<f+Ar:l>u-Ar)return-Yn}else if(l>f+c*(1-i)/2&&l<u-c*(1-i)/2)return du(t)}return p=p||r,p&&(l<f+c*a/2||l>u-c*a/2)?l>f+c/2?1:-1:0}function du(e){return je(k)<je(e)?1:-1}function pu(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,o=0;n--;)o+=t.charCodeAt(n);return o.toString(36)}function hu(e){Br.length=0;for(var t=e.getElementsByTagName("input"),n=t.length;n--;){var o=t[n];o.checked&&Br.push(o)}}function xr(e){return setTimeout(e,0)}function Fo(e){return clearTimeout(e)}lo&&pe(document,"touchmove",function(e){(Z.active||vn)&&e.cancelable&&e.preventDefault()});Z.utils={on:pe,off:fe,css:H,find:ds,is:function(t,n){return!!It(t,n,t,!1)},extend:Zc,throttle:ps,closest:It,toggleClass:Ve,clone:Ii,index:je,nextTick:xr,cancelNextTick:Fo,detectDirection:vs,getChild:Cn};Z.get=function(e){return e[rt]};Z.mount=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t[0].constructor===Array&&(t=t[0]),t.forEach(function(o){if(!o.prototype||!o.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(o));o.utils&&(Z.utils=At(At({},Z.utils),o.utils)),sr.mount(o)})};Z.create=function(e,t){return new Z(e,t)};Z.version=Yc;var We=[],kn,$o,Uo=!1,Oo,Io,kr,Xn;function mu(){function e(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)==="_"&&typeof this[t]=="function"&&(this[t]=this[t].bind(this))}return e.prototype={dragStarted:function(n){var o=n.originalEvent;this.sortable.nativeDraggable?pe(document,"dragover",this._handleAutoScroll):this.options.supportPointer?pe(document,"pointermove",this._handleFallbackAutoScroll):o.touches?pe(document,"touchmove",this._handleFallbackAutoScroll):pe(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(n){var o=n.originalEvent;!this.options.dragOverBubble&&!o.rootEl&&this._handleAutoScroll(o)},drop:function(){this.sortable.nativeDraggable?fe(document,"dragover",this._handleAutoScroll):(fe(document,"pointermove",this._handleFallbackAutoScroll),fe(document,"touchmove",this._handleFallbackAutoScroll),fe(document,"mousemove",this._handleFallbackAutoScroll)),na(),Pr(),_c()},nulling:function(){kr=$o=kn=Uo=Xn=Oo=Io=null,We.length=0},_handleFallbackAutoScroll:function(n){this._handleAutoScroll(n,!0)},_handleAutoScroll:function(n,o){var i=this,a=(n.touches?n.touches[0]:n).clientX,r=(n.touches?n.touches[0]:n).clientY,s=document.elementFromPoint(a,r);if(kr=n,o||this.options.forceAutoScrollFallback||ar||$t||Gn){No(n,this.options,s,o);var l=Gt(s,!0);Uo&&(!Xn||a!==Oo||r!==Io)&&(Xn&&na(),Xn=setInterval(function(){var c=Gt(document.elementFromPoint(a,r),!0);c!==l&&(l=c,Pr()),No(n,i.options,c,o)},10),Oo=a,Io=r)}else{if(!this.options.bubbleScroll||Gt(s,!0)===Ct()){Pr();return}No(n,this.options,Gt(s,!1),!1)}}},Et(e,{pluginName:"scroll",initializeByDefault:!0})}function Pr(){We.forEach(function(e){clearInterval(e.pid)}),We=[]}function na(){clearInterval(Xn)}var No=ps(function(e,t,n,o){if(t.scroll){var i=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,s=t.scrollSpeed,l=Ct(),c=!1,f;$o!==n&&($o=n,Pr(),kn=t.scroll,f=t.scrollFn,kn===!0&&(kn=Gt(n,!0)));var u=0,p=kn;do{var d=p,m=Re(d),h=m.top,v=m.bottom,g=m.left,y=m.right,I=m.width,S=m.height,C=void 0,A=void 0,B=d.scrollWidth,w=d.scrollHeight,O=H(d),L=d.scrollLeft,j=d.scrollTop;d===l?(C=I<B&&(O.overflowX==="auto"||O.overflowX==="scroll"||O.overflowX==="visible"),A=S<w&&(O.overflowY==="auto"||O.overflowY==="scroll"||O.overflowY==="visible")):(C=I<B&&(O.overflowX==="auto"||O.overflowX==="scroll"),A=S<w&&(O.overflowY==="auto"||O.overflowY==="scroll"));var R=C&&(Math.abs(y-i)<=r&&L+I<B)-(Math.abs(g-i)<=r&&!!L),E=A&&(Math.abs(v-a)<=r&&j+S<w)-(Math.abs(h-a)<=r&&!!j);if(!We[u])for(var N=0;N<=u;N++)We[N]||(We[N]={});(We[u].vx!=R||We[u].vy!=E||We[u].el!==d)&&(We[u].el=d,We[u].vx=R,We[u].vy=E,clearInterval(We[u].pid),(R!=0||E!=0)&&(c=!0,We[u].pid=setInterval((function(){o&&this.layer===0&&Z.active._onTouchMove(kr);var V=We[this.layer].vy?We[this.layer].vy*s:0,F=We[this.layer].vx?We[this.layer].vx*s:0;typeof f=="function"&&f.call(Z.dragged.parentNode[rt],F,V,e,kr,We[this.layer].el)!=="continue"||hs(We[this.layer].el,F,V)}).bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==l&&(p=Gt(p,!1)));Uo=c}},30),Ss=function(t){var n=t.originalEvent,o=t.putSortable,i=t.dragEl,a=t.activeSortable,r=t.dispatchSortableEvent,s=t.hideGhostForTarget,l=t.unhideGhostForTarget;if(n){var c=o||a;s();var f=n.changedTouches&&n.changedTouches.length?n.changedTouches[0]:n,u=document.elementFromPoint(f.clientX,f.clientY);l(),c&&!c.el.contains(u)&&(r("spill"),this.onSpill({dragEl:i,putSortable:o}))}};function Ni(){}Ni.prototype={startIndex:null,dragStart:function(t){var n=t.oldDraggableIndex;this.startIndex=n},onSpill:function(t){var n=t.dragEl,o=t.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var i=Cn(this.sortable.el,this.startIndex,this.options);i?this.sortable.el.insertBefore(n,i):this.sortable.el.appendChild(n),this.sortable.animateAll(),o&&o.animateAll()},drop:Ss};Et(Ni,{pluginName:"revertOnSpill"});function Ci(){}Ci.prototype={onSpill:function(t){var n=t.dragEl,o=t.putSortable,i=o||this.sortable;i.captureAnimationState(),n.parentNode&&n.parentNode.removeChild(n),i.animateAll()},drop:Ss};Et(Ci,{pluginName:"removeOnSpill"});var gt;function vu(){function e(){this.defaults={swapClass:"sortable-swap-highlight"}}return e.prototype={dragStart:function(n){var o=n.dragEl;gt=o},dragOverValid:function(n){var o=n.completed,i=n.target,a=n.onMove,r=n.activeSortable,s=n.changed,l=n.cancel;if(r.options.swap){var c=this.sortable.el,f=this.options;if(i&&i!==c){var u=gt;a(i)!==!1?(Ve(i,f.swapClass,!0),gt=i):gt=null,u&&u!==gt&&Ve(u,f.swapClass,!1)}s(),o(!0),l()}},drop:function(n){var o=n.activeSortable,i=n.putSortable,a=n.dragEl,r=i||this.sortable,s=this.options;gt&&Ve(gt,s.swapClass,!1),gt&&(s.swap||i&&i.options.swap)&&a!==gt&&(r.captureAnimationState(),r!==o&&o.captureAnimationState(),gu(a,gt),r.animateAll(),r!==o&&o.animateAll())},nulling:function(){gt=null}},Et(e,{pluginName:"swap",eventProperties:function(){return{swapItem:gt}}})}function gu(e,t){var n=e.parentNode,o=t.parentNode,i,a;!n||!o||n.isEqualNode(t)||o.isEqualNode(e)||(i=je(e),a=je(t),n.isEqualNode(o)&&i<a&&a++,n.insertBefore(t,n.children[i]),o.insertBefore(e,o.children[a]))}var oe=[],dt=[],Fn,Tt,$n=!1,ct=!1,mn=!1,Ne,Un,vr;function yu(){function e(t){for(var n in this)n.charAt(0)==="_"&&typeof this[n]=="function"&&(this[n]=this[n].bind(this));t.options.supportPointer?pe(document,"pointerup",this._deselectMultiDrag):(pe(document,"mouseup",this._deselectMultiDrag),pe(document,"touchend",this._deselectMultiDrag)),pe(document,"keydown",this._checkKeyDown),pe(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,setData:function(i,a){var r="";oe.length&&Tt===t?oe.forEach(function(s,l){r+=(l?", ":"")+s.textContent}):r=a.textContent,i.setData("Text",r)}}}return e.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(n){var o=n.dragEl;Ne=o},delayEnded:function(){this.isMultiDrag=~oe.indexOf(Ne)},setupClone:function(n){var o=n.sortable,i=n.cancel;if(this.isMultiDrag){for(var a=0;a<oe.length;a++)dt.push(Ii(oe[a])),dt[a].sortableIndex=oe[a].sortableIndex,dt[a].draggable=!1,dt[a].style["will-change"]="",Ve(dt[a],this.options.selectedClass,!1),oe[a]===Ne&&Ve(dt[a],this.options.chosenClass,!1);o._hideClone(),i()}},clone:function(n){var o=n.sortable,i=n.rootEl,a=n.dispatchSortableEvent,r=n.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||oe.length&&Tt===o&&(ra(!0,i),a("clone"),r()))},showClone:function(n){var o=n.cloneNowShown,i=n.rootEl,a=n.cancel;this.isMultiDrag&&(ra(!1,i),dt.forEach(function(r){H(r,"display","")}),o(),vr=!1,a())},hideClone:function(n){var o=this;n.sortable;var i=n.cloneNowHidden,a=n.cancel;this.isMultiDrag&&(dt.forEach(function(r){H(r,"display","none"),o.options.removeCloneOnHide&&r.parentNode&&r.parentNode.removeChild(r)}),i(),vr=!0,a())},dragStartGlobal:function(n){n.sortable,!this.isMultiDrag&&Tt&&Tt.multiDrag._deselectMultiDrag(),oe.forEach(function(o){o.sortableIndex=je(o)}),oe=oe.sort(function(o,i){return o.sortableIndex-i.sortableIndex}),mn=!0},dragStarted:function(n){var o=this,i=n.sortable;if(this.isMultiDrag){if(this.options.sort&&(i.captureAnimationState(),this.options.animation)){oe.forEach(function(r){r!==Ne&&H(r,"position","absolute")});var a=Re(Ne,!1,!0,!0);oe.forEach(function(r){r!==Ne&&_i(r,a)}),ct=!0,$n=!0}i.animateAll(function(){ct=!1,$n=!1,o.options.animation&&oe.forEach(function(r){go(r)}),o.options.sort&&gr()})}},dragOver:function(n){var o=n.target,i=n.completed,a=n.cancel;ct&&~oe.indexOf(o)&&(i(!1),a())},revert:function(n){var o=n.fromSortable,i=n.rootEl,a=n.sortable,r=n.dragRect;oe.length>1&&(oe.forEach(function(s){a.addAnimationState({target:s,rect:ct?Re(s):r}),go(s),s.fromRect=r,o.removeAnimationState(s)}),ct=!1,Eu(!this.options.removeCloneOnHide,i))},dragOverCompleted:function(n){var o=n.sortable,i=n.isOwner,a=n.insertion,r=n.activeSortable,s=n.parentEl,l=n.putSortable,c=this.options;if(a){if(i&&r._hideClone(),$n=!1,c.animation&&oe.length>1&&(ct||!i&&!r.options.sort&&!l)){var f=Re(Ne,!1,!0,!0);oe.forEach(function(p){p!==Ne&&(_i(p,f),s.appendChild(p))}),ct=!0}if(!i)if(ct||gr(),oe.length>1){var u=vr;r._showClone(o),r.options.animation&&!vr&&u&&dt.forEach(function(p){r.addAnimationState({target:p,rect:Un}),p.fromRect=Un,p.thisAnimationDuration=null})}else r._showClone(o)}},dragOverAnimationCapture:function(n){var o=n.dragRect,i=n.isOwner,a=n.activeSortable;if(oe.forEach(function(s){s.thisAnimationDuration=null}),a.options.animation&&!i&&a.multiDrag.isMultiDrag){Un=Et({},o);var r=rn(Ne,!0);Un.top-=r.f,Un.left-=r.e}},dragOverAnimationComplete:function(){ct&&(ct=!1,gr())},drop:function(n){var o=n.originalEvent,i=n.rootEl,a=n.parentEl,r=n.sortable,s=n.dispatchSortableEvent,l=n.oldIndex,c=n.putSortable,f=c||this.sortable;if(o){var u=this.options,p=a.children;if(!mn)if(u.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),Ve(Ne,u.selectedClass,!~oe.indexOf(Ne)),~oe.indexOf(Ne))oe.splice(oe.indexOf(Ne),1),Fn=null,jn({sortable:r,rootEl:i,name:"deselect",targetEl:Ne});else{if(oe.push(Ne),jn({sortable:r,rootEl:i,name:"select",targetEl:Ne}),o.shiftKey&&Fn&&r.el.contains(Fn)){var d=je(Fn),m=je(Ne);if(~d&&~m&&d!==m){var h,v;for(m>d?(v=d,h=m):(v=m,h=d+1);v<h;v++)~oe.indexOf(p[v])||(Ve(p[v],u.selectedClass,!0),oe.push(p[v]),jn({sortable:r,rootEl:i,name:"select",targetEl:p[v]}))}}else Fn=Ne;Tt=f}if(mn&&this.isMultiDrag){if(ct=!1,(a[rt].options.sort||a!==i)&&oe.length>1){var g=Re(Ne),y=je(Ne,":not(."+this.options.selectedClass+")");if(!$n&&u.animation&&(Ne.thisAnimationDuration=null),f.captureAnimationState(),!$n&&(u.animation&&(Ne.fromRect=g,oe.forEach(function(S){if(S.thisAnimationDuration=null,S!==Ne){var C=ct?Re(S):g;S.fromRect=C,f.addAnimationState({target:S,rect:C})}})),gr(),oe.forEach(function(S){p[y]?a.insertBefore(S,p[y]):a.appendChild(S),y++}),l===je(Ne))){var I=!1;oe.forEach(function(S){if(S.sortableIndex!==je(S)){I=!0;return}}),I&&s("update")}oe.forEach(function(S){go(S)}),f.animateAll()}Tt=f}(i===a||c&&c.lastPutMode!=="clone")&&dt.forEach(function(S){S.parentNode&&S.parentNode.removeChild(S)})}},nullingGlobal:function(){this.isMultiDrag=mn=!1,dt.length=0},destroyGlobal:function(){this._deselectMultiDrag(),fe(document,"pointerup",this._deselectMultiDrag),fe(document,"mouseup",this._deselectMultiDrag),fe(document,"touchend",this._deselectMultiDrag),fe(document,"keydown",this._checkKeyDown),fe(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(n){if(!(typeof mn<"u"&&mn)&&Tt===this.sortable&&!(n&&It(n.target,this.options.draggable,this.sortable.el,!1))&&!(n&&n.button!==0))for(;oe.length;){var o=oe[0];Ve(o,this.options.selectedClass,!1),oe.shift(),jn({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:o})}},_checkKeyDown:function(n){n.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(n){n.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},Et(e,{pluginName:"multiDrag",utils:{select:function(n){var o=n.parentNode[rt];!o||!o.options.multiDrag||~oe.indexOf(n)||(Tt&&Tt!==o&&(Tt.multiDrag._deselectMultiDrag(),Tt=o),Ve(n,o.options.selectedClass,!0),oe.push(n))},deselect:function(n){var o=n.parentNode[rt],i=oe.indexOf(n);!o||!o.options.multiDrag||!~i||(Ve(n,o.options.selectedClass,!1),oe.splice(i,1))}},eventProperties:function(){var n=this,o=[],i=[];return oe.forEach(function(a){o.push({multiDragElement:a,index:a.sortableIndex});var r;ct&&a!==Ne?r=-1:ct?r=je(a,":not(."+n.options.selectedClass+")"):r=je(a),i.push({multiDragElement:a,index:r})}),{items:Xc(oe),clones:[].concat(dt),oldIndicies:o,newIndicies:i}},optionListeners:{multiDragKey:function(n){return n=n.toLowerCase(),n==="ctrl"?n="Control":n.length>1&&(n=n.charAt(0).toUpperCase()+n.substr(1)),n}}})}function Eu(e,t){oe.forEach(function(n,o){var i=t.children[n.sortableIndex+(e?Number(o):0)];i?t.insertBefore(n,i):t.appendChild(n)})}function ra(e,t){dt.forEach(function(n,o){var i=t.children[n.sortableIndex+(e?Number(o):0)];i?t.insertBefore(n,i):t.appendChild(n)})}function gr(){oe.forEach(function(e){e!==Ne&&e.parentNode&&e.parentNode.removeChild(e)})}Z.mount(new mu);Z.mount(Ci,Ni);const Su=Object.freeze(Object.defineProperty({__proto__:null,MultiDrag:yu,Sortable:Z,Swap:vu,default:Z},Symbol.toStringTag,{value:"Module"})),bu=Kr(Su);var Tu=yr.exports,oa;function Ou(){return oa||(oa=1,(function(e,t){(function(o,i){e.exports=i(Uc(),bu)})(typeof self<"u"?self:Tu,function(n,o){return(function(i){var a={};function r(s){if(a[s])return a[s].exports;var l=a[s]={i:s,l:!1,exports:{}};return i[s].call(l.exports,l,l.exports,r),l.l=!0,l.exports}return r.m=i,r.c=a,r.d=function(s,l,c){r.o(s,l)||Object.defineProperty(s,l,{enumerable:!0,get:c})},r.r=function(s){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(s,"__esModule",{value:!0})},r.t=function(s,l){if(l&1&&(s=r(s)),l&8||l&4&&typeof s=="object"&&s&&s.__esModule)return s;var c=Object.create(null);if(r.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:s}),l&2&&typeof s!="string")for(var f in s)r.d(c,f,(function(u){return s[u]}).bind(null,f));return c},r.n=function(s){var l=s&&s.__esModule?function(){return s.default}:function(){return s};return r.d(l,"a",l),l},r.o=function(s,l){return Object.prototype.hasOwnProperty.call(s,l)},r.p="",r(r.s="fb15")})({"00ee":(function(i,a,r){var s=r("b622"),l=s("toStringTag"),c={};c[l]="z",i.exports=String(c)==="[object z]"}),"0366":(function(i,a,r){var s=r("1c0b");i.exports=function(l,c,f){if(s(l),c===void 0)return l;switch(f){case 0:return function(){return l.call(c)};case 1:return function(u){return l.call(c,u)};case 2:return function(u,p){return l.call(c,u,p)};case 3:return function(u,p,d){return l.call(c,u,p,d)}}return function(){return l.apply(c,arguments)}}}),"057f":(function(i,a,r){var s=r("fc6a"),l=r("241c").f,c={}.toString,f=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(p){try{return l(p)}catch{return f.slice()}};i.exports.f=function(d){return f&&c.call(d)=="[object Window]"?u(d):l(s(d))}}),"06cf":(function(i,a,r){var s=r("83ab"),l=r("d1e7"),c=r("5c6c"),f=r("fc6a"),u=r("c04e"),p=r("5135"),d=r("0cfb"),m=Object.getOwnPropertyDescriptor;a.f=s?m:function(v,g){if(v=f(v),g=u(g,!0),d)try{return m(v,g)}catch{}if(p(v,g))return c(!l.f.call(v,g),v[g])}}),"0cfb":(function(i,a,r){var s=r("83ab"),l=r("d039"),c=r("cc12");i.exports=!s&&!l(function(){return Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a!=7})}),"13d5":(function(i,a,r){var s=r("23e7"),l=r("d58f").left,c=r("a640"),f=r("ae40"),u=c("reduce"),p=f("reduce",{1:0});s({target:"Array",proto:!0,forced:!u||!p},{reduce:function(m){return l(this,m,arguments.length,arguments.length>1?arguments[1]:void 0)}})}),"14c3":(function(i,a,r){var s=r("c6b6"),l=r("9263");i.exports=function(c,f){var u=c.exec;if(typeof u=="function"){var p=u.call(c,f);if(typeof p!="object")throw TypeError("RegExp exec method returned something other than an Object or null");return p}if(s(c)!=="RegExp")throw TypeError("RegExp#exec called on incompatible receiver");return l.call(c,f)}}),"159b":(function(i,a,r){var s=r("da84"),l=r("fdbc"),c=r("17c2"),f=r("9112");for(var u in l){var p=s[u],d=p&&p.prototype;if(d&&d.forEach!==c)try{f(d,"forEach",c)}catch{d.forEach=c}}}),"17c2":(function(i,a,r){var s=r("b727").forEach,l=r("a640"),c=r("ae40"),f=l("forEach"),u=c("forEach");i.exports=!f||!u?function(d){return s(this,d,arguments.length>1?arguments[1]:void 0)}:[].forEach}),"1be4":(function(i,a,r){var s=r("d066");i.exports=s("document","documentElement")}),"1c0b":(function(i,a){i.exports=function(r){if(typeof r!="function")throw TypeError(String(r)+" is not a function");return r}}),"1c7e":(function(i,a,r){var s=r("b622"),l=s("iterator"),c=!1;try{var f=0,u={next:function(){return{done:!!f++}},return:function(){c=!0}};u[l]=function(){return this},Array.from(u,function(){throw 2})}catch{}i.exports=function(p,d){if(!d&&!c)return!1;var m=!1;try{var h={};h[l]=function(){return{next:function(){return{done:m=!0}}}},p(h)}catch{}return m}}),"1d80":(function(i,a){i.exports=function(r){if(r==null)throw TypeError("Can't call method on "+r);return r}}),"1dde":(function(i,a,r){var s=r("d039"),l=r("b622"),c=r("2d00"),f=l("species");i.exports=function(u){return c>=51||!s(function(){var p=[],d=p.constructor={};return d[f]=function(){return{foo:1}},p[u](Boolean).foo!==1})}}),"23cb":(function(i,a,r){var s=r("a691"),l=Math.max,c=Math.min;i.exports=function(f,u){var p=s(f);return p<0?l(p+u,0):c(p,u)}}),"23e7":(function(i,a,r){var s=r("da84"),l=r("06cf").f,c=r("9112"),f=r("6eeb"),u=r("ce4e"),p=r("e893"),d=r("94ca");i.exports=function(m,h){var v=m.target,g=m.global,y=m.stat,I,S,C,A,B,w;if(g?S=s:y?S=s[v]||u(v,{}):S=(s[v]||{}).prototype,S)for(C in h){if(B=h[C],m.noTargetGet?(w=l(S,C),A=w&&w.value):A=S[C],I=d(g?C:v+(y?".":"#")+C,m.forced),!I&&A!==void 0){if(typeof B==typeof A)continue;p(B,A)}(m.sham||A&&A.sham)&&c(B,"sham",!0),f(S,C,B,m)}}}),"241c":(function(i,a,r){var s=r("ca84"),l=r("7839"),c=l.concat("length","prototype");a.f=Object.getOwnPropertyNames||function(u){return s(u,c)}}),"25f0":(function(i,a,r){var s=r("6eeb"),l=r("825a"),c=r("d039"),f=r("ad6d"),u="toString",p=RegExp.prototype,d=p[u],m=c(function(){return d.call({source:"a",flags:"b"})!="/a/b"}),h=d.name!=u;(m||h)&&s(RegExp.prototype,u,function(){var g=l(this),y=String(g.source),I=g.flags,S=String(I===void 0&&g instanceof RegExp&&!("flags"in p)?f.call(g):I);return"/"+y+"/"+S},{unsafe:!0})}),"2ca0":(function(i,a,r){var s=r("23e7"),l=r("06cf").f,c=r("50c4"),f=r("5a34"),u=r("1d80"),p=r("ab13"),d=r("c430"),m="".startsWith,h=Math.min,v=p("startsWith"),g=!d&&!v&&!!(function(){var y=l(String.prototype,"startsWith");return y&&!y.writable})();s({target:"String",proto:!0,forced:!g&&!v},{startsWith:function(I){var S=String(u(this));f(I);var C=c(h(arguments.length>1?arguments[1]:void 0,S.length)),A=String(I);return m?m.call(S,A,C):S.slice(C,C+A.length)===A}})}),"2d00":(function(i,a,r){var s=r("da84"),l=r("342f"),c=s.process,f=c&&c.versions,u=f&&f.v8,p,d;u?(p=u.split("."),d=p[0]+p[1]):l&&(p=l.match(/Edge\/(\d+)/),(!p||p[1]>=74)&&(p=l.match(/Chrome\/(\d+)/),p&&(d=p[1]))),i.exports=d&&+d}),"342f":(function(i,a,r){var s=r("d066");i.exports=s("navigator","userAgent")||""}),"35a1":(function(i,a,r){var s=r("f5df"),l=r("3f8c"),c=r("b622"),f=c("iterator");i.exports=function(u){if(u!=null)return u[f]||u["@@iterator"]||l[s(u)]}}),"37e8":(function(i,a,r){var s=r("83ab"),l=r("9bf2"),c=r("825a"),f=r("df75");i.exports=s?Object.defineProperties:function(p,d){c(p);for(var m=f(d),h=m.length,v=0,g;h>v;)l.f(p,g=m[v++],d[g]);return p}}),"3bbe":(function(i,a,r){var s=r("861d");i.exports=function(l){if(!s(l)&&l!==null)throw TypeError("Can't set "+String(l)+" as a prototype");return l}}),"3ca3":(function(i,a,r){var s=r("6547").charAt,l=r("69f3"),c=r("7dd0"),f="String Iterator",u=l.set,p=l.getterFor(f);c(String,"String",function(d){u(this,{type:f,string:String(d),index:0})},function(){var m=p(this),h=m.string,v=m.index,g;return v>=h.length?{value:void 0,done:!0}:(g=s(h,v),m.index+=g.length,{value:g,done:!1})})}),"3f8c":(function(i,a){i.exports={}}),4160:(function(i,a,r){var s=r("23e7"),l=r("17c2");s({target:"Array",proto:!0,forced:[].forEach!=l},{forEach:l})}),"428f":(function(i,a,r){var s=r("da84");i.exports=s}),"44ad":(function(i,a,r){var s=r("d039"),l=r("c6b6"),c="".split;i.exports=s(function(){return!Object("z").propertyIsEnumerable(0)})?function(f){return l(f)=="String"?c.call(f,""):Object(f)}:Object}),"44d2":(function(i,a,r){var s=r("b622"),l=r("7c73"),c=r("9bf2"),f=s("unscopables"),u=Array.prototype;u[f]==null&&c.f(u,f,{configurable:!0,value:l(null)}),i.exports=function(p){u[f][p]=!0}}),"44e7":(function(i,a,r){var s=r("861d"),l=r("c6b6"),c=r("b622"),f=c("match");i.exports=function(u){var p;return s(u)&&((p=u[f])!==void 0?!!p:l(u)=="RegExp")}}),4930:(function(i,a,r){var s=r("d039");i.exports=!!Object.getOwnPropertySymbols&&!s(function(){return!String(Symbol())})}),"4d64":(function(i,a,r){var s=r("fc6a"),l=r("50c4"),c=r("23cb"),f=function(u){return function(p,d,m){var h=s(p),v=l(h.length),g=c(m,v),y;if(u&&d!=d){for(;v>g;)if(y=h[g++],y!=y)return!0}else for(;v>g;g++)if((u||g in h)&&h[g]===d)return u||g||0;return!u&&-1}};i.exports={includes:f(!0),indexOf:f(!1)}}),"4de4":(function(i,a,r){var s=r("23e7"),l=r("b727").filter,c=r("1dde"),f=r("ae40"),u=c("filter"),p=f("filter");s({target:"Array",proto:!0,forced:!u||!p},{filter:function(m){return l(this,m,arguments.length>1?arguments[1]:void 0)}})}),"4df4":(function(i,a,r){var s=r("0366"),l=r("7b0b"),c=r("9bdd"),f=r("e95a"),u=r("50c4"),p=r("8418"),d=r("35a1");i.exports=function(h){var v=l(h),g=typeof this=="function"?this:Array,y=arguments.length,I=y>1?arguments[1]:void 0,S=I!==void 0,C=d(v),A=0,B,w,O,L,j,R;if(S&&(I=s(I,y>2?arguments[2]:void 0,2)),C!=null&&!(g==Array&&f(C)))for(L=C.call(v),j=L.next,w=new g;!(O=j.call(L)).done;A++)R=S?c(L,I,[O.value,A],!0):O.value,p(w,A,R);else for(B=u(v.length),w=new g(B);B>A;A++)R=S?I(v[A],A):v[A],p(w,A,R);return w.length=A,w}}),"4fad":(function(i,a,r){var s=r("23e7"),l=r("6f53").entries;s({target:"Object",stat:!0},{entries:function(f){return l(f)}})}),"50c4":(function(i,a,r){var s=r("a691"),l=Math.min;i.exports=function(c){return c>0?l(s(c),9007199254740991):0}}),5135:(function(i,a){var r={}.hasOwnProperty;i.exports=function(s,l){return r.call(s,l)}}),5319:(function(i,a,r){var s=r("d784"),l=r("825a"),c=r("7b0b"),f=r("50c4"),u=r("a691"),p=r("1d80"),d=r("8aa5"),m=r("14c3"),h=Math.max,v=Math.min,g=Math.floor,y=/\$([$&'`]|\d\d?|<[^>]*>)/g,I=/\$([$&'`]|\d\d?)/g,S=function(C){return C===void 0?C:String(C)};s("replace",2,function(C,A,B,w){var O=w.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,L=w.REPLACE_KEEPS_$0,j=O?"$":"$0";return[function(N,V){var F=p(this),U=N==null?void 0:N[C];return U!==void 0?U.call(N,F,V):A.call(String(F),N,V)},function(E,N){if(!O&&L||typeof N=="string"&&N.indexOf(j)===-1){var V=B(A,E,this,N);if(V.done)return V.value}var F=l(E),U=String(this),z=typeof N=="function";z||(N=String(N));var ce=F.global;if(ce){var Se=F.unicode;F.lastIndex=0}for(var ge=[];;){var Ee=m(F,U);if(Ee===null||(ge.push(Ee),!ce))break;var Ae=String(Ee[0]);Ae===""&&(F.lastIndex=d(U,f(F.lastIndex),Se))}for(var X="",D=0,ue=0;ue<ge.length;ue++){Ee=ge[ue];for(var Y=String(Ee[0]),Oe=h(v(u(Ee.index),U.length),0),be=[],Je=1;Je<Ee.length;Je++)be.push(S(Ee[Je]));var Le=Ee.groups;if(z){var we=[Y].concat(be,Oe,U);Le!==void 0&&we.push(Le);var Ie=String(N.apply(void 0,we))}else Ie=R(Y,U,Oe,be,Le,N);Oe>=D&&(X+=U.slice(D,Oe)+Ie,D=Oe+Y.length)}return X+U.slice(D)}];function R(E,N,V,F,U,z){var ce=V+E.length,Se=F.length,ge=I;return U!==void 0&&(U=c(U),ge=y),A.call(z,ge,function(Ee,Ae){var X;switch(Ae.charAt(0)){case"$":return"$";case"&":return E;case"`":return N.slice(0,V);case"'":return N.slice(ce);case"<":X=U[Ae.slice(1,-1)];break;default:var D=+Ae;if(D===0)return Ee;if(D>Se){var ue=g(D/10);return ue===0?Ee:ue<=Se?F[ue-1]===void 0?Ae.charAt(1):F[ue-1]+Ae.charAt(1):Ee}X=F[D-1]}return X===void 0?"":X})}})}),5692:(function(i,a,r){var s=r("c430"),l=r("c6cd");(i.exports=function(c,f){return l[c]||(l[c]=f!==void 0?f:{})})("versions",[]).push({version:"3.6.5",mode:s?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})}),"56ef":(function(i,a,r){var s=r("d066"),l=r("241c"),c=r("7418"),f=r("825a");i.exports=s("Reflect","ownKeys")||function(p){var d=l.f(f(p)),m=c.f;return m?d.concat(m(p)):d}}),"5a34":(function(i,a,r){var s=r("44e7");i.exports=function(l){if(s(l))throw TypeError("The method doesn't accept regular expressions");return l}}),"5c6c":(function(i,a){i.exports=function(r,s){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:s}}}),"5db7":(function(i,a,r){var s=r("23e7"),l=r("a2bf"),c=r("7b0b"),f=r("50c4"),u=r("1c0b"),p=r("65f0");s({target:"Array",proto:!0},{flatMap:function(m){var h=c(this),v=f(h.length),g;return u(m),g=p(h,0),g.length=l(g,h,h,v,0,1,m,arguments.length>1?arguments[1]:void 0),g}})}),6547:(function(i,a,r){var s=r("a691"),l=r("1d80"),c=function(f){return function(u,p){var d=String(l(u)),m=s(p),h=d.length,v,g;return m<0||m>=h?f?"":void 0:(v=d.charCodeAt(m),v<55296||v>56319||m+1===h||(g=d.charCodeAt(m+1))<56320||g>57343?f?d.charAt(m):v:f?d.slice(m,m+2):(v-55296<<10)+(g-56320)+65536)}};i.exports={codeAt:c(!1),charAt:c(!0)}}),"65f0":(function(i,a,r){var s=r("861d"),l=r("e8b5"),c=r("b622"),f=c("species");i.exports=function(u,p){var d;return l(u)&&(d=u.constructor,typeof d=="function"&&(d===Array||l(d.prototype))?d=void 0:s(d)&&(d=d[f],d===null&&(d=void 0))),new(d===void 0?Array:d)(p===0?0:p)}}),"69f3":(function(i,a,r){var s=r("7f9a"),l=r("da84"),c=r("861d"),f=r("9112"),u=r("5135"),p=r("f772"),d=r("d012"),m=l.WeakMap,h,v,g,y=function(O){return g(O)?v(O):h(O,{})},I=function(O){return function(L){var j;if(!c(L)||(j=v(L)).type!==O)throw TypeError("Incompatible receiver, "+O+" required");return j}};if(s){var S=new m,C=S.get,A=S.has,B=S.set;h=function(O,L){return B.call(S,O,L),L},v=function(O){return C.call(S,O)||{}},g=function(O){return A.call(S,O)}}else{var w=p("state");d[w]=!0,h=function(O,L){return f(O,w,L),L},v=function(O){return u(O,w)?O[w]:{}},g=function(O){return u(O,w)}}i.exports={set:h,get:v,has:g,enforce:y,getterFor:I}}),"6eeb":(function(i,a,r){var s=r("da84"),l=r("9112"),c=r("5135"),f=r("ce4e"),u=r("8925"),p=r("69f3"),d=p.get,m=p.enforce,h=String(String).split("String");(i.exports=function(v,g,y,I){var S=I?!!I.unsafe:!1,C=I?!!I.enumerable:!1,A=I?!!I.noTargetGet:!1;if(typeof y=="function"&&(typeof g=="string"&&!c(y,"name")&&l(y,"name",g),m(y).source=h.join(typeof g=="string"?g:"")),v===s){C?v[g]=y:f(g,y);return}else S?!A&&v[g]&&(C=!0):delete v[g];C?v[g]=y:l(v,g,y)})(Function.prototype,"toString",function(){return typeof this=="function"&&d(this).source||u(this)})}),"6f53":(function(i,a,r){var s=r("83ab"),l=r("df75"),c=r("fc6a"),f=r("d1e7").f,u=function(p){return function(d){for(var m=c(d),h=l(m),v=h.length,g=0,y=[],I;v>g;)I=h[g++],(!s||f.call(m,I))&&y.push(p?[I,m[I]]:m[I]);return y}};i.exports={entries:u(!0),values:u(!1)}}),"73d9":(function(i,a,r){var s=r("44d2");s("flatMap")}),7418:(function(i,a){a.f=Object.getOwnPropertySymbols}),"746f":(function(i,a,r){var s=r("428f"),l=r("5135"),c=r("e538"),f=r("9bf2").f;i.exports=function(u){var p=s.Symbol||(s.Symbol={});l(p,u)||f(p,u,{value:c.f(u)})}}),7839:(function(i,a){i.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]}),"7b0b":(function(i,a,r){var s=r("1d80");i.exports=function(l){return Object(s(l))}}),"7c73":(function(i,a,r){var s=r("825a"),l=r("37e8"),c=r("7839"),f=r("d012"),u=r("1be4"),p=r("cc12"),d=r("f772"),m=">",h="<",v="prototype",g="script",y=d("IE_PROTO"),I=function(){},S=function(O){return h+g+m+O+h+"/"+g+m},C=function(O){O.write(S("")),O.close();var L=O.parentWindow.Object;return O=null,L},A=function(){var O=p("iframe"),L="java"+g+":",j;return O.style.display="none",u.appendChild(O),O.src=String(L),j=O.contentWindow.document,j.open(),j.write(S("document.F=Object")),j.close(),j.F},B,w=function(){try{B=document.domain&&new ActiveXObject("htmlfile")}catch{}w=B?C(B):A();for(var O=c.length;O--;)delete w[v][c[O]];return w()};f[y]=!0,i.exports=Object.create||function(L,j){var R;return L!==null?(I[v]=s(L),R=new I,I[v]=null,R[y]=L):R=w(),j===void 0?R:l(R,j)}}),"7dd0":(function(i,a,r){var s=r("23e7"),l=r("9ed3"),c=r("e163"),f=r("d2bb"),u=r("d44e"),p=r("9112"),d=r("6eeb"),m=r("b622"),h=r("c430"),v=r("3f8c"),g=r("ae93"),y=g.IteratorPrototype,I=g.BUGGY_SAFARI_ITERATORS,S=m("iterator"),C="keys",A="values",B="entries",w=function(){return this};i.exports=function(O,L,j,R,E,N,V){l(j,L,R);var F=function(ue){if(ue===E&&ge)return ge;if(!I&&ue in ce)return ce[ue];switch(ue){case C:return function(){return new j(this,ue)};case A:return function(){return new j(this,ue)};case B:return function(){return new j(this,ue)}}return function(){return new j(this)}},U=L+" Iterator",z=!1,ce=O.prototype,Se=ce[S]||ce["@@iterator"]||E&&ce[E],ge=!I&&Se||F(E),Ee=L=="Array"&&ce.entries||Se,Ae,X,D;if(Ee&&(Ae=c(Ee.call(new O)),y!==Object.prototype&&Ae.next&&(!h&&c(Ae)!==y&&(f?f(Ae,y):typeof Ae[S]!="function"&&p(Ae,S,w)),u(Ae,U,!0,!0),h&&(v[U]=w))),E==A&&Se&&Se.name!==A&&(z=!0,ge=function(){return Se.call(this)}),(!h||V)&&ce[S]!==ge&&p(ce,S,ge),v[L]=ge,E)if(X={values:F(A),keys:N?ge:F(C),entries:F(B)},V)for(D in X)(I||z||!(D in ce))&&d(ce,D,X[D]);else s({target:L,proto:!0,forced:I||z},X);return X}}),"7f9a":(function(i,a,r){var s=r("da84"),l=r("8925"),c=s.WeakMap;i.exports=typeof c=="function"&&/native code/.test(l(c))}),"825a":(function(i,a,r){var s=r("861d");i.exports=function(l){if(!s(l))throw TypeError(String(l)+" is not an object");return l}}),"83ab":(function(i,a,r){var s=r("d039");i.exports=!s(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})}),8418:(function(i,a,r){var s=r("c04e"),l=r("9bf2"),c=r("5c6c");i.exports=function(f,u,p){var d=s(u);d in f?l.f(f,d,c(0,p)):f[d]=p}}),"861d":(function(i,a){i.exports=function(r){return typeof r=="object"?r!==null:typeof r=="function"}}),8875:(function(i,a,r){var s,l,c;(function(f,u){l=[],s=u,c=typeof s=="function"?s.apply(a,l):s,c!==void 0&&(i.exports=c)})(typeof self<"u"?self:this,function(){function f(){var u=Object.getOwnPropertyDescriptor(document,"currentScript");if(!u&&"currentScript"in document&&document.currentScript||u&&u.get!==f&&document.currentScript)return document.currentScript;try{throw new Error}catch(B){var p=/.*at [^(]*\((.*):(.+):(.+)\)$/ig,d=/@([^@]*):(\d+):(\d+)\s*$/ig,m=p.exec(B.stack)||d.exec(B.stack),h=m&&m[1]||!1,v=m&&m[2]||!1,g=document.location.href.replace(document.location.hash,""),y,I,S,C=document.getElementsByTagName("script");h===g&&(y=document.documentElement.outerHTML,I=new RegExp("(?:[^\\n]+?\\n){0,"+(v-2)+"}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*","i"),S=y.replace(I,"$1").trim());for(var A=0;A<C.length;A++)if(C[A].readyState==="interactive"||C[A].src===h||h===g&&C[A].innerHTML&&C[A].innerHTML.trim()===S)return C[A];return null}}return f})}),8925:(function(i,a,r){var s=r("c6cd"),l=Function.toString;typeof s.inspectSource!="function"&&(s.inspectSource=function(c){return l.call(c)}),i.exports=s.inspectSource}),"8aa5":(function(i,a,r){var s=r("6547").charAt;i.exports=function(l,c,f){return c+(f?s(l,c).length:1)}}),"8bbf":(function(i,a){i.exports=n}),"90e3":(function(i,a){var r=0,s=Math.random();i.exports=function(l){return"Symbol("+String(l===void 0?"":l)+")_"+(++r+s).toString(36)}}),9112:(function(i,a,r){var s=r("83ab"),l=r("9bf2"),c=r("5c6c");i.exports=s?function(f,u,p){return l.f(f,u,c(1,p))}:function(f,u,p){return f[u]=p,f}}),9263:(function(i,a,r){var s=r("ad6d"),l=r("9f7f"),c=RegExp.prototype.exec,f=String.prototype.replace,u=c,p=(function(){var v=/a/,g=/b*/g;return c.call(v,"a"),c.call(g,"a"),v.lastIndex!==0||g.lastIndex!==0})(),d=l.UNSUPPORTED_Y||l.BROKEN_CARET,m=/()??/.exec("")[1]!==void 0,h=p||m||d;h&&(u=function(g){var y=this,I,S,C,A,B=d&&y.sticky,w=s.call(y),O=y.source,L=0,j=g;return B&&(w=w.replace("y",""),w.indexOf("g")===-1&&(w+="g"),j=String(g).slice(y.lastIndex),y.lastIndex>0&&(!y.multiline||y.multiline&&g[y.lastIndex-1]!==`
28
28
  `)&&(O="(?: "+O+")",j=" "+j,L++),S=new RegExp("^(?:"+O+")",w)),m&&(S=new RegExp("^"+O+"$(?!\\s)",w)),p&&(I=y.lastIndex),C=c.call(B?S:y,j),B?C?(C.input=C.input.slice(L),C[0]=C[0].slice(L),C.index=y.lastIndex,y.lastIndex+=C[0].length):y.lastIndex=0:p&&C&&(y.lastIndex=y.global?C.index+C[0].length:I),m&&C&&C.length>1&&f.call(C[0],S,function(){for(A=1;A<arguments.length-2;A++)arguments[A]===void 0&&(C[A]=void 0)}),C}),i.exports=u}),"94ca":(function(i,a,r){var s=r("d039"),l=/#|\.prototype\./,c=function(m,h){var v=u[f(m)];return v==d?!0:v==p?!1:typeof h=="function"?s(h):!!h},f=c.normalize=function(m){return String(m).replace(l,".").toLowerCase()},u=c.data={},p=c.NATIVE="N",d=c.POLYFILL="P";i.exports=c}),"99af":(function(i,a,r){var s=r("23e7"),l=r("d039"),c=r("e8b5"),f=r("861d"),u=r("7b0b"),p=r("50c4"),d=r("8418"),m=r("65f0"),h=r("1dde"),v=r("b622"),g=r("2d00"),y=v("isConcatSpreadable"),I=9007199254740991,S="Maximum allowed index exceeded",C=g>=51||!l(function(){var O=[];return O[y]=!1,O.concat()[0]!==O}),A=h("concat"),B=function(O){if(!f(O))return!1;var L=O[y];return L!==void 0?!!L:c(O)},w=!C||!A;s({target:"Array",proto:!0,forced:w},{concat:function(L){var j=u(this),R=m(j,0),E=0,N,V,F,U,z;for(N=-1,F=arguments.length;N<F;N++)if(z=N===-1?j:arguments[N],B(z)){if(U=p(z.length),E+U>I)throw TypeError(S);for(V=0;V<U;V++,E++)V in z&&d(R,E,z[V])}else{if(E>=I)throw TypeError(S);d(R,E++,z)}return R.length=E,R}})}),"9bdd":(function(i,a,r){var s=r("825a");i.exports=function(l,c,f,u){try{return u?c(s(f)[0],f[1]):c(f)}catch(d){var p=l.return;throw p!==void 0&&s(p.call(l)),d}}}),"9bf2":(function(i,a,r){var s=r("83ab"),l=r("0cfb"),c=r("825a"),f=r("c04e"),u=Object.defineProperty;a.f=s?u:function(d,m,h){if(c(d),m=f(m,!0),c(h),l)try{return u(d,m,h)}catch{}if("get"in h||"set"in h)throw TypeError("Accessors not supported");return"value"in h&&(d[m]=h.value),d}}),"9ed3":(function(i,a,r){var s=r("ae93").IteratorPrototype,l=r("7c73"),c=r("5c6c"),f=r("d44e"),u=r("3f8c"),p=function(){return this};i.exports=function(d,m,h){var v=m+" Iterator";return d.prototype=l(s,{next:c(1,h)}),f(d,v,!1,!0),u[v]=p,d}}),"9f7f":(function(i,a,r){var s=r("d039");function l(c,f){return RegExp(c,f)}a.UNSUPPORTED_Y=s(function(){var c=l("a","y");return c.lastIndex=2,c.exec("abcd")!=null}),a.BROKEN_CARET=s(function(){var c=l("^r","gy");return c.lastIndex=2,c.exec("str")!=null})}),a2bf:(function(i,a,r){var s=r("e8b5"),l=r("50c4"),c=r("0366"),f=function(u,p,d,m,h,v,g,y){for(var I=h,S=0,C=g?c(g,y,3):!1,A;S<m;){if(S in d){if(A=C?C(d[S],S,p):d[S],v>0&&s(A))I=f(u,p,A,l(A.length),I,v-1)-1;else{if(I>=9007199254740991)throw TypeError("Exceed the acceptable array length");u[I]=A}I++}S++}return I};i.exports=f}),a352:(function(i,a){i.exports=o}),a434:(function(i,a,r){var s=r("23e7"),l=r("23cb"),c=r("a691"),f=r("50c4"),u=r("7b0b"),p=r("65f0"),d=r("8418"),m=r("1dde"),h=r("ae40"),v=m("splice"),g=h("splice",{ACCESSORS:!0,0:0,1:2}),y=Math.max,I=Math.min,S=9007199254740991,C="Maximum allowed length exceeded";s({target:"Array",proto:!0,forced:!v||!g},{splice:function(B,w){var O=u(this),L=f(O.length),j=l(B,L),R=arguments.length,E,N,V,F,U,z;if(R===0?E=N=0:R===1?(E=0,N=L-j):(E=R-2,N=I(y(c(w),0),L-j)),L+E-N>S)throw TypeError(C);for(V=p(O,N),F=0;F<N;F++)U=j+F,U in O&&d(V,F,O[U]);if(V.length=N,E<N){for(F=j;F<L-N;F++)U=F+N,z=F+E,U in O?O[z]=O[U]:delete O[z];for(F=L;F>L-N+E;F--)delete O[F-1]}else if(E>N)for(F=L-N;F>j;F--)U=F+N-1,z=F+E-1,U in O?O[z]=O[U]:delete O[z];for(F=0;F<E;F++)O[F+j]=arguments[F+2];return O.length=L-N+E,V}})}),a4d3:(function(i,a,r){var s=r("23e7"),l=r("da84"),c=r("d066"),f=r("c430"),u=r("83ab"),p=r("4930"),d=r("fdbf"),m=r("d039"),h=r("5135"),v=r("e8b5"),g=r("861d"),y=r("825a"),I=r("7b0b"),S=r("fc6a"),C=r("c04e"),A=r("5c6c"),B=r("7c73"),w=r("df75"),O=r("241c"),L=r("057f"),j=r("7418"),R=r("06cf"),E=r("9bf2"),N=r("d1e7"),V=r("9112"),F=r("6eeb"),U=r("5692"),z=r("f772"),ce=r("d012"),Se=r("90e3"),ge=r("b622"),Ee=r("e538"),Ae=r("746f"),X=r("d44e"),D=r("69f3"),ue=r("b727").forEach,Y=z("hidden"),Oe="Symbol",be="prototype",Je=ge("toPrimitive"),Le=D.set,we=D.getterFor(Oe),Ie=Object[be],Fe=l.Symbol,vt=c("JSON","stringify"),ne=R.f,re=E.f,xt=L.f,co=N.f,St=U("symbols"),Ut=U("op-symbols"),fn=U("string-to-symbol-registry"),Pn=U("symbol-to-string-registry"),Dn=U("wks"),Rn=l.QObject,Mn=!Rn||!Rn[be]||!Rn[be].findChild,Ln=u&&m(function(){return B(re({},"a",{get:function(){return re(this,"a",{value:7}).a}})).a!=7})?function(ee,W,Q){var he=ne(Ie,W);he&&delete Ie[W],re(ee,W,Q),he&&ee!==Ie&&re(Ie,W,he)}:re,wn=function(ee,W){var Q=St[ee]=B(Fe[be]);return Le(Q,{type:Oe,tag:ee,description:W}),u||(Q.description=W),Q},T=d?function(ee){return typeof ee=="symbol"}:function(ee){return Object(ee)instanceof Fe},b=function(W,Q,he){W===Ie&&b(Ut,Q,he),y(W);var me=C(Q,!0);return y(he),h(St,me)?(he.enumerable?(h(W,Y)&&W[Y][me]&&(W[Y][me]=!1),he=B(he,{enumerable:A(0,!1)})):(h(W,Y)||re(W,Y,A(1,{})),W[Y][me]=!0),Ln(W,me,he)):re(W,me,he)},x=function(W,Q){y(W);var he=S(Q),me=w(he).concat(ye(he));return ue(me,function(st){(!u||G.call(he,st))&&b(W,st,he[st])}),W},$=function(W,Q){return Q===void 0?B(W):x(B(W),Q)},G=function(W){var Q=C(W,!0),he=co.call(this,Q);return this===Ie&&h(St,Q)&&!h(Ut,Q)?!1:he||!h(this,Q)||!h(St,Q)||h(this,Y)&&this[Y][Q]?he:!0},_=function(W,Q){var he=S(W),me=C(Q,!0);if(!(he===Ie&&h(St,me)&&!h(Ut,me))){var st=ne(he,me);return st&&h(St,me)&&!(h(he,Y)&&he[Y][me])&&(st.enumerable=!0),st}},le=function(W){var Q=xt(S(W)),he=[];return ue(Q,function(me){!h(St,me)&&!h(ce,me)&&he.push(me)}),he},ye=function(W){var Q=W===Ie,he=xt(Q?Ut:S(W)),me=[];return ue(he,function(st){h(St,st)&&(!Q||h(Ie,st))&&me.push(St[st])}),me};if(p||(Fe=function(){if(this instanceof Fe)throw TypeError("Symbol is not a constructor");var W=!arguments.length||arguments[0]===void 0?void 0:String(arguments[0]),Q=Se(W),he=function(me){this===Ie&&he.call(Ut,me),h(this,Y)&&h(this[Y],Q)&&(this[Y][Q]=!1),Ln(this,Q,A(1,me))};return u&&Mn&&Ln(Ie,Q,{configurable:!0,set:he}),wn(Q,W)},F(Fe[be],"toString",function(){return we(this).tag}),F(Fe,"withoutSetter",function(ee){return wn(Se(ee),ee)}),N.f=G,E.f=b,R.f=_,O.f=L.f=le,j.f=ye,Ee.f=function(ee){return wn(ge(ee),ee)},u&&(re(Fe[be],"description",{configurable:!0,get:function(){return we(this).description}}),f||F(Ie,"propertyIsEnumerable",G,{unsafe:!0}))),s({global:!0,wrap:!0,forced:!p,sham:!p},{Symbol:Fe}),ue(w(Dn),function(ee){Ae(ee)}),s({target:Oe,stat:!0,forced:!p},{for:function(ee){var W=String(ee);if(h(fn,W))return fn[W];var Q=Fe(W);return fn[W]=Q,Pn[Q]=W,Q},keyFor:function(W){if(!T(W))throw TypeError(W+" is not a symbol");if(h(Pn,W))return Pn[W]},useSetter:function(){Mn=!0},useSimple:function(){Mn=!1}}),s({target:"Object",stat:!0,forced:!p,sham:!u},{create:$,defineProperty:b,defineProperties:x,getOwnPropertyDescriptor:_}),s({target:"Object",stat:!0,forced:!p},{getOwnPropertyNames:le,getOwnPropertySymbols:ye}),s({target:"Object",stat:!0,forced:m(function(){j.f(1)})},{getOwnPropertySymbols:function(W){return j.f(I(W))}}),vt){var Xe=!p||m(function(){var ee=Fe();return vt([ee])!="[null]"||vt({a:ee})!="{}"||vt(Object(ee))!="{}"});s({target:"JSON",stat:!0,forced:Xe},{stringify:function(W,Q,he){for(var me=[W],st=1,uo;arguments.length>st;)me.push(arguments[st++]);if(uo=Q,!(!g(Q)&&W===void 0||T(W)))return v(Q)||(Q=function(bs,lr){if(typeof uo=="function"&&(lr=uo.call(this,bs,lr)),!T(lr))return lr}),me[1]=Q,vt.apply(null,me)}})}Fe[be][Je]||V(Fe[be],Je,Fe[be].valueOf),X(Fe,Oe),ce[Y]=!0}),a630:(function(i,a,r){var s=r("23e7"),l=r("4df4"),c=r("1c7e"),f=!c(function(u){Array.from(u)});s({target:"Array",stat:!0,forced:f},{from:l})}),a640:(function(i,a,r){var s=r("d039");i.exports=function(l,c){var f=[][l];return!!f&&s(function(){f.call(null,c||function(){throw 1},1)})}}),a691:(function(i,a){var r=Math.ceil,s=Math.floor;i.exports=function(l){return isNaN(l=+l)?0:(l>0?s:r)(l)}}),ab13:(function(i,a,r){var s=r("b622"),l=s("match");i.exports=function(c){var f=/./;try{"/./"[c](f)}catch{try{return f[l]=!1,"/./"[c](f)}catch{}}return!1}}),ac1f:(function(i,a,r){var s=r("23e7"),l=r("9263");s({target:"RegExp",proto:!0,forced:/./.exec!==l},{exec:l})}),ad6d:(function(i,a,r){var s=r("825a");i.exports=function(){var l=s(this),c="";return l.global&&(c+="g"),l.ignoreCase&&(c+="i"),l.multiline&&(c+="m"),l.dotAll&&(c+="s"),l.unicode&&(c+="u"),l.sticky&&(c+="y"),c}}),ae40:(function(i,a,r){var s=r("83ab"),l=r("d039"),c=r("5135"),f=Object.defineProperty,u={},p=function(d){throw d};i.exports=function(d,m){if(c(u,d))return u[d];m||(m={});var h=[][d],v=c(m,"ACCESSORS")?m.ACCESSORS:!1,g=c(m,0)?m[0]:p,y=c(m,1)?m[1]:void 0;return u[d]=!!h&&!l(function(){if(v&&!s)return!0;var I={length:-1};v?f(I,1,{enumerable:!0,get:p}):I[1]=1,h.call(I,g,y)})}}),ae93:(function(i,a,r){var s=r("e163"),l=r("9112"),c=r("5135"),f=r("b622"),u=r("c430"),p=f("iterator"),d=!1,m=function(){return this},h,v,g;[].keys&&(g=[].keys(),"next"in g?(v=s(s(g)),v!==Object.prototype&&(h=v)):d=!0),h==null&&(h={}),!u&&!c(h,p)&&l(h,p,m),i.exports={IteratorPrototype:h,BUGGY_SAFARI_ITERATORS:d}}),b041:(function(i,a,r){var s=r("00ee"),l=r("f5df");i.exports=s?{}.toString:function(){return"[object "+l(this)+"]"}}),b0c0:(function(i,a,r){var s=r("83ab"),l=r("9bf2").f,c=Function.prototype,f=c.toString,u=/^\s*function ([^ (]*)/,p="name";s&&!(p in c)&&l(c,p,{configurable:!0,get:function(){try{return f.call(this).match(u)[1]}catch{return""}}})}),b622:(function(i,a,r){var s=r("da84"),l=r("5692"),c=r("5135"),f=r("90e3"),u=r("4930"),p=r("fdbf"),d=l("wks"),m=s.Symbol,h=p?m:m&&m.withoutSetter||f;i.exports=function(v){return c(d,v)||(u&&c(m,v)?d[v]=m[v]:d[v]=h("Symbol."+v)),d[v]}}),b64b:(function(i,a,r){var s=r("23e7"),l=r("7b0b"),c=r("df75"),f=r("d039"),u=f(function(){c(1)});s({target:"Object",stat:!0,forced:u},{keys:function(d){return c(l(d))}})}),b727:(function(i,a,r){var s=r("0366"),l=r("44ad"),c=r("7b0b"),f=r("50c4"),u=r("65f0"),p=[].push,d=function(m){var h=m==1,v=m==2,g=m==3,y=m==4,I=m==6,S=m==5||I;return function(C,A,B,w){for(var O=c(C),L=l(O),j=s(A,B,3),R=f(L.length),E=0,N=w||u,V=h?N(C,R):v?N(C,0):void 0,F,U;R>E;E++)if((S||E in L)&&(F=L[E],U=j(F,E,O),m)){if(h)V[E]=U;else if(U)switch(m){case 3:return!0;case 5:return F;case 6:return E;case 2:p.call(V,F)}else if(y)return!1}return I?-1:g||y?y:V}};i.exports={forEach:d(0),map:d(1),filter:d(2),some:d(3),every:d(4),find:d(5),findIndex:d(6)}}),c04e:(function(i,a,r){var s=r("861d");i.exports=function(l,c){if(!s(l))return l;var f,u;if(c&&typeof(f=l.toString)=="function"&&!s(u=f.call(l))||typeof(f=l.valueOf)=="function"&&!s(u=f.call(l))||!c&&typeof(f=l.toString)=="function"&&!s(u=f.call(l)))return u;throw TypeError("Can't convert object to primitive value")}}),c430:(function(i,a){i.exports=!1}),c6b6:(function(i,a){var r={}.toString;i.exports=function(s){return r.call(s).slice(8,-1)}}),c6cd:(function(i,a,r){var s=r("da84"),l=r("ce4e"),c="__core-js_shared__",f=s[c]||l(c,{});i.exports=f}),c740:(function(i,a,r){var s=r("23e7"),l=r("b727").findIndex,c=r("44d2"),f=r("ae40"),u="findIndex",p=!0,d=f(u);u in[]&&Array(1)[u](function(){p=!1}),s({target:"Array",proto:!0,forced:p||!d},{findIndex:function(h){return l(this,h,arguments.length>1?arguments[1]:void 0)}}),c(u)}),c8ba:(function(i,a){var r;r=(function(){return this})();try{r=r||new Function("return this")()}catch{typeof window=="object"&&(r=window)}i.exports=r}),c975:(function(i,a,r){var s=r("23e7"),l=r("4d64").indexOf,c=r("a640"),f=r("ae40"),u=[].indexOf,p=!!u&&1/[1].indexOf(1,-0)<0,d=c("indexOf"),m=f("indexOf",{ACCESSORS:!0,1:0});s({target:"Array",proto:!0,forced:p||!d||!m},{indexOf:function(v){return p?u.apply(this,arguments)||0:l(this,v,arguments.length>1?arguments[1]:void 0)}})}),ca84:(function(i,a,r){var s=r("5135"),l=r("fc6a"),c=r("4d64").indexOf,f=r("d012");i.exports=function(u,p){var d=l(u),m=0,h=[],v;for(v in d)!s(f,v)&&s(d,v)&&h.push(v);for(;p.length>m;)s(d,v=p[m++])&&(~c(h,v)||h.push(v));return h}}),caad:(function(i,a,r){var s=r("23e7"),l=r("4d64").includes,c=r("44d2"),f=r("ae40"),u=f("indexOf",{ACCESSORS:!0,1:0});s({target:"Array",proto:!0,forced:!u},{includes:function(d){return l(this,d,arguments.length>1?arguments[1]:void 0)}}),c("includes")}),cc12:(function(i,a,r){var s=r("da84"),l=r("861d"),c=s.document,f=l(c)&&l(c.createElement);i.exports=function(u){return f?c.createElement(u):{}}}),ce4e:(function(i,a,r){var s=r("da84"),l=r("9112");i.exports=function(c,f){try{l(s,c,f)}catch{s[c]=f}return f}}),d012:(function(i,a){i.exports={}}),d039:(function(i,a){i.exports=function(r){try{return!!r()}catch{return!0}}}),d066:(function(i,a,r){var s=r("428f"),l=r("da84"),c=function(f){return typeof f=="function"?f:void 0};i.exports=function(f,u){return arguments.length<2?c(s[f])||c(l[f]):s[f]&&s[f][u]||l[f]&&l[f][u]}}),d1e7:(function(i,a,r){var s={}.propertyIsEnumerable,l=Object.getOwnPropertyDescriptor,c=l&&!s.call({1:2},1);a.f=c?function(u){var p=l(this,u);return!!p&&p.enumerable}:s}),d28b:(function(i,a,r){var s=r("746f");s("iterator")}),d2bb:(function(i,a,r){var s=r("825a"),l=r("3bbe");i.exports=Object.setPrototypeOf||("__proto__"in{}?(function(){var c=!1,f={},u;try{u=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,u.call(f,[]),c=f instanceof Array}catch{}return function(d,m){return s(d),l(m),c?u.call(d,m):d.__proto__=m,d}})():void 0)}),d3b7:(function(i,a,r){var s=r("00ee"),l=r("6eeb"),c=r("b041");s||l(Object.prototype,"toString",c,{unsafe:!0})}),d44e:(function(i,a,r){var s=r("9bf2").f,l=r("5135"),c=r("b622"),f=c("toStringTag");i.exports=function(u,p,d){u&&!l(u=d?u:u.prototype,f)&&s(u,f,{configurable:!0,value:p})}}),d58f:(function(i,a,r){var s=r("1c0b"),l=r("7b0b"),c=r("44ad"),f=r("50c4"),u=function(p){return function(d,m,h,v){s(m);var g=l(d),y=c(g),I=f(g.length),S=p?I-1:0,C=p?-1:1;if(h<2)for(;;){if(S in y){v=y[S],S+=C;break}if(S+=C,p?S<0:I<=S)throw TypeError("Reduce of empty array with no initial value")}for(;p?S>=0:I>S;S+=C)S in y&&(v=m(v,y[S],S,g));return v}};i.exports={left:u(!1),right:u(!0)}}),d784:(function(i,a,r){r("ac1f");var s=r("6eeb"),l=r("d039"),c=r("b622"),f=r("9263"),u=r("9112"),p=c("species"),d=!l(function(){var y=/./;return y.exec=function(){var I=[];return I.groups={a:"7"},I},"".replace(y,"$<a>")!=="7"}),m=(function(){return"a".replace(/./,"$0")==="$0"})(),h=c("replace"),v=(function(){return/./[h]?/./[h]("a","$0")==="":!1})(),g=!l(function(){var y=/(?:)/,I=y.exec;y.exec=function(){return I.apply(this,arguments)};var S="ab".split(y);return S.length!==2||S[0]!=="a"||S[1]!=="b"});i.exports=function(y,I,S,C){var A=c(y),B=!l(function(){var E={};return E[A]=function(){return 7},""[y](E)!=7}),w=B&&!l(function(){var E=!1,N=/a/;return y==="split"&&(N={},N.constructor={},N.constructor[p]=function(){return N},N.flags="",N[A]=/./[A]),N.exec=function(){return E=!0,null},N[A](""),!E});if(!B||!w||y==="replace"&&!(d&&m&&!v)||y==="split"&&!g){var O=/./[A],L=S(A,""[y],function(E,N,V,F,U){return N.exec===f?B&&!U?{done:!0,value:O.call(N,V,F)}:{done:!0,value:E.call(V,N,F)}:{done:!1}},{REPLACE_KEEPS_$0:m,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:v}),j=L[0],R=L[1];s(String.prototype,y,j),s(RegExp.prototype,A,I==2?function(E,N){return R.call(E,this,N)}:function(E){return R.call(E,this)})}C&&u(RegExp.prototype[A],"sham",!0)}}),d81d:(function(i,a,r){var s=r("23e7"),l=r("b727").map,c=r("1dde"),f=r("ae40"),u=c("map"),p=f("map");s({target:"Array",proto:!0,forced:!u||!p},{map:function(m){return l(this,m,arguments.length>1?arguments[1]:void 0)}})}),da84:(function(i,a,r){(function(s){var l=function(c){return c&&c.Math==Math&&c};i.exports=l(typeof globalThis=="object"&&globalThis)||l(typeof window=="object"&&window)||l(typeof self=="object"&&self)||l(typeof s=="object"&&s)||Function("return this")()}).call(this,r("c8ba"))}),dbb4:(function(i,a,r){var s=r("23e7"),l=r("83ab"),c=r("56ef"),f=r("fc6a"),u=r("06cf"),p=r("8418");s({target:"Object",stat:!0,sham:!l},{getOwnPropertyDescriptors:function(m){for(var h=f(m),v=u.f,g=c(h),y={},I=0,S,C;g.length>I;)C=v(h,S=g[I++]),C!==void 0&&p(y,S,C);return y}})}),dbf1:(function(i,a,r){(function(s){r.d(a,"a",function(){return c});function l(){return typeof window<"u"?window.console:s.console}var c=l()}).call(this,r("c8ba"))}),ddb0:(function(i,a,r){var s=r("da84"),l=r("fdbc"),c=r("e260"),f=r("9112"),u=r("b622"),p=u("iterator"),d=u("toStringTag"),m=c.values;for(var h in l){var v=s[h],g=v&&v.prototype;if(g){if(g[p]!==m)try{f(g,p,m)}catch{g[p]=m}if(g[d]||f(g,d,h),l[h]){for(var y in c)if(g[y]!==c[y])try{f(g,y,c[y])}catch{g[y]=c[y]}}}}}),df75:(function(i,a,r){var s=r("ca84"),l=r("7839");i.exports=Object.keys||function(f){return s(f,l)}}),e01a:(function(i,a,r){var s=r("23e7"),l=r("83ab"),c=r("da84"),f=r("5135"),u=r("861d"),p=r("9bf2").f,d=r("e893"),m=c.Symbol;if(l&&typeof m=="function"&&(!("description"in m.prototype)||m().description!==void 0)){var h={},v=function(){var A=arguments.length<1||arguments[0]===void 0?void 0:String(arguments[0]),B=this instanceof v?new m(A):A===void 0?m():m(A);return A===""&&(h[B]=!0),B};d(v,m);var g=v.prototype=m.prototype;g.constructor=v;var y=g.toString,I=String(m("test"))=="Symbol(test)",S=/^Symbol\((.*)\)[^)]+$/;p(g,"description",{configurable:!0,get:function(){var A=u(this)?this.valueOf():this,B=y.call(A);if(f(h,A))return"";var w=I?B.slice(7,-1):B.replace(S,"$1");return w===""?void 0:w}}),s({global:!0,forced:!0},{Symbol:v})}}),e163:(function(i,a,r){var s=r("5135"),l=r("7b0b"),c=r("f772"),f=r("e177"),u=c("IE_PROTO"),p=Object.prototype;i.exports=f?Object.getPrototypeOf:function(d){return d=l(d),s(d,u)?d[u]:typeof d.constructor=="function"&&d instanceof d.constructor?d.constructor.prototype:d instanceof Object?p:null}}),e177:(function(i,a,r){var s=r("d039");i.exports=!s(function(){function l(){}return l.prototype.constructor=null,Object.getPrototypeOf(new l)!==l.prototype})}),e260:(function(i,a,r){var s=r("fc6a"),l=r("44d2"),c=r("3f8c"),f=r("69f3"),u=r("7dd0"),p="Array Iterator",d=f.set,m=f.getterFor(p);i.exports=u(Array,"Array",function(h,v){d(this,{type:p,target:s(h),index:0,kind:v})},function(){var h=m(this),v=h.target,g=h.kind,y=h.index++;return!v||y>=v.length?(h.target=void 0,{value:void 0,done:!0}):g=="keys"?{value:y,done:!1}:g=="values"?{value:v[y],done:!1}:{value:[y,v[y]],done:!1}},"values"),c.Arguments=c.Array,l("keys"),l("values"),l("entries")}),e439:(function(i,a,r){var s=r("23e7"),l=r("d039"),c=r("fc6a"),f=r("06cf").f,u=r("83ab"),p=l(function(){f(1)}),d=!u||p;s({target:"Object",stat:!0,forced:d,sham:!u},{getOwnPropertyDescriptor:function(h,v){return f(c(h),v)}})}),e538:(function(i,a,r){var s=r("b622");a.f=s}),e893:(function(i,a,r){var s=r("5135"),l=r("56ef"),c=r("06cf"),f=r("9bf2");i.exports=function(u,p){for(var d=l(p),m=f.f,h=c.f,v=0;v<d.length;v++){var g=d[v];s(u,g)||m(u,g,h(p,g))}}}),e8b5:(function(i,a,r){var s=r("c6b6");i.exports=Array.isArray||function(c){return s(c)=="Array"}}),e95a:(function(i,a,r){var s=r("b622"),l=r("3f8c"),c=s("iterator"),f=Array.prototype;i.exports=function(u){return u!==void 0&&(l.Array===u||f[c]===u)}}),f5df:(function(i,a,r){var s=r("00ee"),l=r("c6b6"),c=r("b622"),f=c("toStringTag"),u=l((function(){return arguments})())=="Arguments",p=function(d,m){try{return d[m]}catch{}};i.exports=s?l:function(d){var m,h,v;return d===void 0?"Undefined":d===null?"Null":typeof(h=p(m=Object(d),f))=="string"?h:u?l(m):(v=l(m))=="Object"&&typeof m.callee=="function"?"Arguments":v}}),f772:(function(i,a,r){var s=r("5692"),l=r("90e3"),c=s("keys");i.exports=function(f){return c[f]||(c[f]=l(f))}}),fb15:(function(i,a,r){if(r.r(a),typeof window<"u"){var s=window.document.currentScript;{var l=r("8875");s=l(),"currentScript"in document||Object.defineProperty(document,"currentScript",{get:l})}var c=s&&s.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);c&&(r.p=c[1])}r("99af"),r("4de4"),r("4160"),r("c975"),r("d81d"),r("a434"),r("159b"),r("a4d3"),r("e439"),r("dbb4"),r("b64b");function f(T,b,x){return b in T?Object.defineProperty(T,b,{value:x,enumerable:!0,configurable:!0,writable:!0}):T[b]=x,T}function u(T,b){var x=Object.keys(T);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(T);b&&($=$.filter(function(G){return Object.getOwnPropertyDescriptor(T,G).enumerable})),x.push.apply(x,$)}return x}function p(T){for(var b=1;b<arguments.length;b++){var x=arguments[b]!=null?arguments[b]:{};b%2?u(Object(x),!0).forEach(function($){f(T,$,x[$])}):Object.getOwnPropertyDescriptors?Object.defineProperties(T,Object.getOwnPropertyDescriptors(x)):u(Object(x)).forEach(function($){Object.defineProperty(T,$,Object.getOwnPropertyDescriptor(x,$))})}return T}function d(T){if(Array.isArray(T))return T}r("e01a"),r("d28b"),r("e260"),r("d3b7"),r("3ca3"),r("ddb0");function m(T,b){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(T)))){var x=[],$=!0,G=!1,_=void 0;try{for(var le=T[Symbol.iterator](),ye;!($=(ye=le.next()).done)&&(x.push(ye.value),!(b&&x.length===b));$=!0);}catch(Xe){G=!0,_=Xe}finally{try{!$&&le.return!=null&&le.return()}finally{if(G)throw _}}return x}}r("a630"),r("fb6a"),r("b0c0"),r("25f0");function h(T,b){(b==null||b>T.length)&&(b=T.length);for(var x=0,$=new Array(b);x<b;x++)$[x]=T[x];return $}function v(T,b){if(T){if(typeof T=="string")return h(T,b);var x=Object.prototype.toString.call(T).slice(8,-1);if(x==="Object"&&T.constructor&&(x=T.constructor.name),x==="Map"||x==="Set")return Array.from(T);if(x==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x))return h(T,b)}}function g(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
29
29
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function y(T,b){return d(T)||m(T,b)||v(T,b)||g()}function I(T){if(Array.isArray(T))return h(T)}function S(T){if(typeof Symbol<"u"&&Symbol.iterator in Object(T))return Array.from(T)}function C(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
30
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function A(T){return I(T)||S(T)||v(T)||C()}var B=r("a352"),w=r.n(B);function O(T){T.parentElement!==null&&T.parentElement.removeChild(T)}function L(T,b,x){var $=x===0?T.children[0]:T.children[x-1].nextSibling;T.insertBefore(b,$)}var j=r("dbf1");r("13d5"),r("4fad"),r("ac1f"),r("5319");function R(T){var b=Object.create(null);return function($){var G=b[$];return G||(b[$]=T($))}}var E=/-(\w)/g,N=R(function(T){return T.replace(E,function(b,x){return x.toUpperCase()})});r("5db7"),r("73d9");var V=["Start","Add","Remove","Update","End"],F=["Choose","Unchoose","Sort","Filter","Clone"],U=["Move"],z=[U,V,F].flatMap(function(T){return T}).map(function(T){return"on".concat(T)}),ce={manage:U,manageAndEmit:V,emit:F};function Se(T){return z.indexOf(T)!==-1}r("caad"),r("2ca0");var ge=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];function Ee(T){return ge.includes(T)}function Ae(T){return["transition-group","TransitionGroup"].includes(T)}function X(T){return["id","class","role","style"].includes(T)||T.startsWith("data-")||T.startsWith("aria-")||T.startsWith("on")}function D(T){return T.reduce(function(b,x){var $=y(x,2),G=$[0],_=$[1];return b[G]=_,b},{})}function ue(T){var b=T.$attrs,x=T.componentData,$=x===void 0?{}:x,G=D(Object.entries(b).filter(function(_){var le=y(_,2),ye=le[0];return le[1],X(ye)}));return p(p({},G),$)}function Y(T){var b=T.$attrs,x=T.callBackBuilder,$=D(Oe(b));Object.entries(x).forEach(function(_){var le=y(_,2),ye=le[0],Xe=le[1];ce[ye].forEach(function(ee){$["on".concat(ee)]=Xe(ee)})});var G="[data-draggable]".concat($.draggable||"");return p(p({},$),{},{draggable:G})}function Oe(T){return Object.entries(T).filter(function(b){var x=y(b,2),$=x[0];return x[1],!X($)}).map(function(b){var x=y(b,2),$=x[0],G=x[1];return[N($),G]}).filter(function(b){var x=y(b,2),$=x[0];return x[1],!Se($)})}r("c740");function be(T,b){if(!(T instanceof b))throw new TypeError("Cannot call a class as a function")}function Je(T,b){for(var x=0;x<b.length;x++){var $=b[x];$.enumerable=$.enumerable||!1,$.configurable=!0,"value"in $&&($.writable=!0),Object.defineProperty(T,$.key,$)}}function Le(T,b,x){return b&&Je(T.prototype,b),T}var we=function(b){var x=b.el;return x},Ie=function(b,x){return b.__draggable_context=x},Fe=function(b){return b.__draggable_context},vt=(function(){function T(b){var x=b.nodes,$=x.header,G=x.default,_=x.footer,le=b.root,ye=b.realList;be(this,T),this.defaultNodes=G,this.children=[].concat(A($),A(G),A(_)),this.externalComponent=le.externalComponent,this.rootTransition=le.transition,this.tag=le.tag,this.realList=ye}return Le(T,[{key:"render",value:function(x,$){var G=this.tag,_=this.children,le=this._isRootComponent,ye=le?{default:function(){return _}}:_;return x(G,$,ye)}},{key:"updated",value:function(){var x=this.defaultNodes,$=this.realList;x.forEach(function(G,_){Ie(we(G),{element:$[_],index:_})})}},{key:"getUnderlyingVm",value:function(x){return Fe(x)}},{key:"getVmIndexFromDomIndex",value:function(x,$){var G=this.defaultNodes,_=G.length,le=$.children,ye=le.item(x);if(ye===null)return _;var Xe=Fe(ye);if(Xe)return Xe.index;if(_===0)return 0;var ee=we(G[0]),W=A(le).findIndex(function(Q){return Q===ee});return x<W?0:_}},{key:"_isRootComponent",get:function(){return this.externalComponent||this.rootTransition}}]),T})(),ne=r("8bbf");function re(T,b){var x=T[b];return x?x():[]}function xt(T){var b=T.$slots,x=T.realList,$=T.getKey,G=x||[],_=["header","footer"].map(function(Q){return re(b,Q)}),le=y(_,2),ye=le[0],Xe=le[1],ee=b.item;if(!ee)throw new Error("draggable element must have an item slot");var W=G.flatMap(function(Q,he){return ee({element:Q,index:he}).map(function(me){return me.key=$(Q),me.props=p(p({},me.props||{}),{},{"data-draggable":!0}),me})});if(W.length!==G.length)throw new Error("Item slot must have only one child");return{header:ye,footer:Xe,default:W}}function co(T){var b=Ae(T),x=!Ee(T)&&!b;return{transition:b,externalComponent:x,tag:x?Object(ne.resolveComponent)(T):b?ne.TransitionGroup:T}}function St(T){var b=T.$slots,x=T.tag,$=T.realList,G=T.getKey,_=xt({$slots:b,realList:$,getKey:G}),le=co(x);return new vt({nodes:_,root:le,realList:$})}function Ut(T,b){var x=this;Object(ne.nextTick)(function(){return x.$emit(T.toLowerCase(),b)})}function fn(T){var b=this;return function(x,$){if(b.realList!==null)return b["onDrag".concat(T)](x,$)}}function Pn(T){var b=this,x=fn.call(this,T);return function($,G){x.call(b,$,G),Ut.call(b,T,$)}}var Dn=null,Rn={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:function(b){return b}},tag:{type:String,default:"div"},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},Mn=["update:modelValue","change"].concat(A([].concat(A(ce.manageAndEmit),A(ce.emit)).map(function(T){return T.toLowerCase()}))),Ln=Object(ne.defineComponent)({name:"draggable",inheritAttrs:!1,props:Rn,emits:Mn,data:function(){return{error:!1}},render:function(){try{this.error=!1;var b=this.$slots,x=this.$attrs,$=this.tag,G=this.componentData,_=this.realList,le=this.getKey,ye=St({$slots:b,tag:$,realList:_,getKey:le});this.componentStructure=ye;var Xe=ue({$attrs:x,componentData:G});return ye.render(ne.h,Xe)}catch(ee){return this.error=!0,Object(ne.h)("pre",{style:{color:"red"}},ee.stack)}},created:function(){this.list!==null&&this.modelValue!==null&&j.a.error("modelValue and list props are mutually exclusive! Please set one or another.")},mounted:function(){var b=this;if(!this.error){var x=this.$attrs,$=this.$el,G=this.componentStructure;G.updated();var _=Y({$attrs:x,callBackBuilder:{manageAndEmit:function(Xe){return Pn.call(b,Xe)},emit:function(Xe){return Ut.bind(b,Xe)},manage:function(Xe){return fn.call(b,Xe)}}}),le=$.nodeType===1?$:$.parentElement;this._sortable=new w.a(le,_),this.targetDomElement=le,le.__draggable_component__=this}},updated:function(){this.componentStructure.updated()},beforeUnmount:function(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList:function(){var b=this.list;return b||this.modelValue},getKey:function(){var b=this.itemKey;return typeof b=="function"?b:function(x){return x[b]}}},watch:{$attrs:{handler:function(b){var x=this._sortable;x&&Oe(b).forEach(function($){var G=y($,2),_=G[0],le=G[1];x.option(_,le)})},deep:!0}},methods:{getUnderlyingVm:function(b){return this.componentStructure.getUnderlyingVm(b)||null},getUnderlyingPotencialDraggableComponent:function(b){return b.__draggable_component__},emitChanges:function(b){var x=this;Object(ne.nextTick)(function(){return x.$emit("change",b)})},alterList:function(b){if(this.list){b(this.list);return}var x=A(this.modelValue);b(x),this.$emit("update:modelValue",x)},spliceList:function(){var b=arguments,x=function(G){return G.splice.apply(G,A(b))};this.alterList(x)},updatePosition:function(b,x){var $=function(_){return _.splice(x,0,_.splice(b,1)[0])};this.alterList($)},getRelatedContextFromMoveEvent:function(b){var x=b.to,$=b.related,G=this.getUnderlyingPotencialDraggableComponent(x);if(!G)return{component:G};var _=G.realList,le={list:_,component:G};if(x!==$&&_){var ye=G.getUnderlyingVm($)||{};return p(p({},ye),le)}return le},getVmIndexFromDomIndex:function(b){return this.componentStructure.getVmIndexFromDomIndex(b,this.targetDomElement)},onDragStart:function(b){this.context=this.getUnderlyingVm(b.item),b.item._underlying_vm_=this.clone(this.context.element),Dn=b.item},onDragAdd:function(b){var x=b.item._underlying_vm_;if(x!==void 0){O(b.item);var $=this.getVmIndexFromDomIndex(b.newIndex);this.spliceList($,0,x);var G={element:x,newIndex:$};this.emitChanges({added:G})}},onDragRemove:function(b){if(L(this.$el,b.item,b.oldIndex),b.pullMode==="clone"){O(b.clone);return}var x=this.context,$=x.index,G=x.element;this.spliceList($,1);var _={element:G,oldIndex:$};this.emitChanges({removed:_})},onDragUpdate:function(b){O(b.item),L(b.from,b.item,b.oldIndex);var x=this.context.index,$=this.getVmIndexFromDomIndex(b.newIndex);this.updatePosition(x,$);var G={element:this.context.element,oldIndex:x,newIndex:$};this.emitChanges({moved:G})},computeFutureIndex:function(b,x){if(!b.element)return 0;var $=A(x.to.children).filter(function(ye){return ye.style.display!=="none"}),G=$.indexOf(x.related),_=b.component.getVmIndexFromDomIndex(G),le=$.indexOf(Dn)!==-1;return le||!x.willInsertAfter?_:_+1},onDragMove:function(b,x){var $=this.move,G=this.realList;if(!$||!G)return!0;var _=this.getRelatedContextFromMoveEvent(b),le=this.computeFutureIndex(_,b),ye=p(p({},this.context),{},{futureIndex:le}),Xe=p(p({},b),{},{relatedContext:_,draggedContext:ye});return $(Xe,x)},onDragEnd:function(){Dn=null}}}),wn=Ln;a.default=wn}),fb6a:(function(i,a,r){var s=r("23e7"),l=r("861d"),c=r("e8b5"),f=r("23cb"),u=r("50c4"),p=r("fc6a"),d=r("8418"),m=r("b622"),h=r("1dde"),v=r("ae40"),g=h("slice"),y=v("slice",{ACCESSORS:!0,0:0,1:2}),I=m("species"),S=[].slice,C=Math.max;s({target:"Array",proto:!0,forced:!g||!y},{slice:function(B,w){var O=p(this),L=u(O.length),j=f(B,L),R=f(w===void 0?L:w,L),E,N,V;if(c(O)&&(E=O.constructor,typeof E=="function"&&(E===Array||c(E.prototype))?E=void 0:l(E)&&(E=E[I],E===null&&(E=void 0)),E===Array||E===void 0))return S.call(O,j,R);for(N=new(E===void 0?Array:E)(C(R-j,0)),V=0;j<R;j++,V++)j in O&&d(N,V,O[j]);return N.length=V,N}})}),fc6a:(function(i,a,r){var s=r("44ad"),l=r("1d80");i.exports=function(c){return s(l(c))}}),fdbc:(function(i,a){i.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}}),fdbf:(function(i,a,r){var s=r("4930");i.exports=s&&!Symbol.sham&&typeof Symbol.iterator=="symbol"})}).default})})(yr)),yr.exports}var Iu=Ou();const Nu=Ls(Iu),Ai=ws("testResults",()=>{const e=gn({}),t=gn({}),n=gn({}),o=gn({});function i(s){for(const[l,c]of Object.entries(s))e[l]=c.status,t[l]=c.message||"",n[l]=c.time?new Date(c.time).toLocaleString():"",o[l]=c.latency||0}async function a(){try{const s=await Yt.get("/api/test/results");i(s)}catch{}}async function r(s){e[s]="testing",t[s]="";try{const l=await Yt.post("/api/test/proxy",{model:s});e[s]=l.status,t[s]=l.message||"",n[s]=new Date().toLocaleString(),o[s]=l.latency||0}catch(l){e[s]="error",t[s]=l.message,n[s]=new Date().toLocaleString(),o[s]=0}}return{modelStatus:e,modelMessage:t,modelTime:n,modelLatency:o,loadResults:a,testProxy:r}}),Cu={class:"card-header"},Au={class:"card-title"},xu={class:"provider-name"},Pu={class:"card-meta"},Du={class:"meta-row"},Ru=["title"],Mu={class:"meta-row"},Lu={class:"meta-value"},wu={key:0,class:"model-tags"},Vu=["onClick"],Fu={key:0,class:"badge-mark"},$u={key:1,class:"badge-mark"},Uu={key:1,class:"text-empty"},ju={class:"card-footer"},Bu=Jt({__name:"ProviderCard",props:{provider:{}},emits:["clone","delete","edit","open-models","copy-model"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Ai(),r=f=>f?f.length<=8?f:`${f.substring(0,6)}...${f.substring(f.length-4)}`:"-",s=Ht(()=>{const f=n.provider;return f.name||f.alias||r(f.apiKey||"")}),l=Pe(!1),c=async()=>{const f=n.provider.models;l.value=!0;try{await Promise.all(f.map(p=>a.testProxy(p.modelName)));const u=f.filter(p=>a.modelStatus[p.modelName]==="ok").length;i(`${s.value}: ${u}/${f.length} 个模型通过`,u===f.length?"success":"error")}catch{i("测试出错","error")}finally{l.value=!1}};return(f,u)=>{const p=J("el-tag"),d=J("el-icon"),m=J("el-button"),h=J("el-card");return te(),Me(h,{shadow:"never",class:"provider-card"},{header:M(()=>[K("div",Cu,[K("div",Au,[K("span",xu,Te(s.value),1),e.provider.alias&&e.provider.name!==e.provider.alias?(te(),Me(p,{key:0,type:"info",size:"small"},{default:M(()=>[ae(Te(e.provider.alias),1)]),_:1})):tt("",!0)]),P(d,{class:"drag-hint-icon"},{default:M(()=>[P(q(Fs))]),_:1})])]),default:M(()=>[K("div",Pu,[K("div",Du,[u[6]||(u[6]=K("span",{class:"meta-label"},"接口地址",-1)),K("span",{class:"meta-value",title:e.provider.apiBase},Te(e.provider.apiBase||"-"),9,Ru)]),K("div",Mu,[u[7]||(u[7]=K("span",{class:"meta-label"},"密钥",-1)),K("span",Lu,Te(r(e.provider.apiKey||"")),1)])]),e.provider.models.length?(te(),Be("div",wu,[(te(!0),Be(Bo,null,ko(e.provider.models,v=>(te(),Be("span",{key:v.modelName,class:Vs(["model-tag",{ok:q(a).modelStatus[v.modelName]==="ok",error:q(a).modelStatus[v.modelName]==="error"}]),onClick:fo(g=>o("copy-model",v.modelName),["stop"])},[ae(Te(v.modelName)+" ",1),q(a).modelStatus[v.modelName]==="ok"?(te(),Be("span",Fu,"✓")):tt("",!0),q(a).modelStatus[v.modelName]==="error"?(te(),Be("span",$u,"✗")):tt("",!0)],10,Vu))),128))])):(te(),Be("div",Uu,"暂无模型")),K("div",ju,[K("span",{class:"model-count",onClick:u[0]||(u[0]=fo(v=>o("open-models"),["stop"]))},Te(e.provider.models.length)+" 个模型",1),K("div",{class:"card-actions",onClick:u[5]||(u[5]=fo(()=>{},["stop"]))},[P(m,{size:"small",loading:l.value,disabled:l.value||!e.provider.models.length,onClick:c},{default:M(()=>[ae(Te(l.value?"测试中...":"一键测试"),1)]),_:1},8,["loading","disabled"]),P(m,{size:"small",onClick:u[1]||(u[1]=v=>o("clone"))},{default:M(()=>[...u[8]||(u[8]=[ae("复制",-1)])]),_:1}),P(m,{size:"small",onClick:u[2]||(u[2]=v=>o("delete"))},{default:M(()=>[...u[9]||(u[9]=[ae("删除",-1)])]),_:1}),P(m,{size:"small",onClick:u[3]||(u[3]=v=>o("open-models"))},{default:M(()=>[...u[10]||(u[10]=[ae("模型",-1)])]),_:1}),P(m,{size:"small",onClick:u[4]||(u[4]=v=>o("edit"))},{default:M(()=>[...u[11]||(u[11]=[ae("编辑",-1)])]),_:1})])])]),_:1})}}}),ku=cn(Bu,[["__scopeId","data-v-e96d8595"]]),Co=[{id:"deepseek",name:"DeepSeek(按量 API)",alias:"ds",website:"https://platform.deepseek.com",keyUrl:"https://platform.deepseek.com/api_keys",keyNote:"登录 DeepSeek 开放平台 →「API keys」→ 创建。官方原生支持 Anthropic 协议:本模板已指向 Anthropic 兼容地址(api.deepseek.com/anthropic),配合 Claude Code 等客户端可原生保留缓存控制。同一把 Key 也可改用 OpenAI 协议地址 https://api.deepseek.com。",apiBase:"https://api.deepseek.com/anthropic",autoV1:!1,protocol:"anthropic",presetModels:["deepseek-v4-pro","deepseek-v4-flash"]},{id:"kimi",name:"月之暗面 Kimi(按量 API)",alias:"kimi",website:"https://platform.kimi.com",keyUrl:"https://platform.kimi.com/console/api-keys",keyNote:"登录 Kimi 开放平台 →「API Key 管理」→ 新建。本模板指向 Anthropic 兼容地址(api.moonshot.cn/anthropic),配合 Claude Code 使用;1M 上下文模型名需加 [1m] 后缀(如 kimi-k3[1m])。同一把 Key 也可改用 OpenAI 协议地址 https://api.moonshot.cn/v1。",apiBase:"https://api.moonshot.cn/anthropic",autoV1:!1,protocol:"anthropic",presetModels:["kimi-k3","kimi-k2.7-code"]},{id:"zhipu",name:"智谱 GLM(按量 API)",alias:"zhipu",website:"https://open.bigmodel.cn",keyUrl:"https://bigmodel.cn/usercenter/proj-mgmt/apikeys",keyNote:"登录智谱开放平台 →「API Keys」→ 创建。按量付费用此 Key + 本模板地址(OpenAI 兼容 /api/paas/v4)。若购买的是 Coding Plan 套餐,请改用下方「智谱 GLM(Coding Plan)」模板——套餐 Key 与按量 Key 不通用。",apiBase:"https://open.bigmodel.cn/api/paas/v4",autoV1:!1,protocol:"openai",presetModels:["glm-5.3","glm-5.3-flash"]},{id:"zhipu-coding",name:"智谱 GLM(Coding Plan)",alias:"zhipu-code",website:"https://bigmodel.cn/coding-plan/personal/overview",keyUrl:"https://bigmodel.cn/coding-plan/personal/overview",keyNote:"Coding Plan 套餐专用:Key 在套餐页面单独获取,与按量付费 Key 不通用。本模板指向套餐 Anthropic 端点(/api/anthropic),供 Claude Code 等客户端使用;注意地址填错会把套餐额度按按量计费扣费。",apiBase:"https://open.bigmodel.cn/api/anthropic",autoV1:!1,protocol:"anthropic",presetModels:["glm-5.3","glm-5.3-flash"]},{id:"ark",name:"火山方舟(按量 API)",alias:"ark",website:"https://console.volcengine.com/ark",keyUrl:"https://console.volcengine.com/ark/region:cn-beijing/apikey",keyNote:"火山方舟控制台 →「API Key 管理」→ 创建。API Key 鉴权可直接填模型名(如 doubao-seed-2.1-turbo);若使用 Access Key 鉴权则需填推理接入点 ID(ep-xxx)。购买 Coding Plan 套餐请改用下方「火山方舟(Coding Plan)」模板。",apiBase:"https://ark.cn-beijing.volces.com/api/v3",autoV1:!1,protocol:"openai"},{id:"ark-coding",name:"火山方舟(Coding Plan)",alias:"ark-code",website:"https://console.volcengine.com/ark",keyUrl:"https://console.volcengine.com/ark/region:cn-beijing/apikey",keyNote:"Coding Plan 套餐专用端点(/api/coding/v3),模型直接填模型名(如 ark-code-latest 自动切换、doubao-seed-evolving、glm-5.3、deepseek-v4-flash 等),无需接入点。注意:误用按量地址(/api/v3)会把套餐额度按按量计费扣费。",apiBase:"https://ark.cn-beijing.volces.com/api/coding/v3",autoV1:!1,protocol:"openai",presetModels:["ark-code-latest","doubao-seed-evolving"]},{id:"dashscope",name:"阿里云百炼(按量 API)",alias:"ali",website:"https://bailian.console.aliyun.com",keyUrl:"https://bailian.console.aliyun.com/?apiKey=1",keyNote:"登录阿里云百炼控制台 →右上角「API-KEY」→ 创建。本模板为 OpenAI 兼容地址(旧域名,仍可用);开通 Token Plan / Coding Plan 套餐的用户请到对应套餐控制台获取专属 Key 和地址。",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1",autoV1:!1,protocol:"openai",presetModels:["qwen3.8-max","qwen3.7-plus"]},{id:"openai",name:"OpenAI(按量 API)",alias:"openai",website:"https://platform.openai.com",keyUrl:"https://platform.openai.com/api-keys",keyNote:"登录 OpenAI 平台 →「API keys」→ 创建新密钥。官方支持 /v1/chat/completions 与 /v1/responses 两种协议(不支持 Anthropic 协议)。",apiBase:"https://api.openai.com/v1",autoV1:!1,protocol:"openai",presetModels:["gpt-5.6-sol","gpt-5.5"]},{id:"custom",name:"自定义 / OpenAI 兼容中转",alias:"",keyNote:"不使用模板预填,按中转站文档填写即可;协议拿不准先用「测试」验证。",apiBase:"",autoV1:!0,protocol:"openai"}];function Xu(e){const{toast:t}=un(),n=Pe(!1),o=Pe(null),i=gn({}),a=()=>{for(const f of Object.keys(i))delete i[f]},r=()=>{o.value=null},s=async()=>{const f=e.api_key.trim(),u=e.api_base.trim();if(!(!f||!u)){o.value={loading:!0};try{const p=await Yt.post("/api/test",{api_base:u,api_key:f,protocol:e.protocol,autoV1:e.autoV1});p.status==="ok"?(o.value={loading:!1,status:"ok",msg:`连接成功 (${p.models??0} 个模型)`},t("连接成功","success")):(o.value={loading:!1,status:"fail",msg:p.message},t(`连接失败: ${p.message}`,"error"))}catch(p){o.value={loading:!1,status:"fail",msg:p.message},t(p.message,"error")}}},l=async f=>{i[f.full_name]={loading:!0};try{const u=await Yt.post("/api/test/model",{model:f.upstream,api_base:e.api_base.trim(),api_key:e.api_key.trim(),protocol:f.protocol||e.protocol,autoV1:e.autoV1});i[f.full_name]={loading:!1,status:u.status==="ok"?"ok":"fail",msg:u.status==="ok"&&u.latency!=null?`${u.message} · ${u.latency}ms`:u.message,request:u.request,response:u.response},t(u.status==="ok"?"模型可用":`模型不可用: ${u.message}`,u.status==="ok"?"success":"error")}catch(u){i[f.full_name]={loading:!1,status:"fail",msg:u.message},t(u.message,"error")}};return{testingAll:n,keyStatus:o,modelTest:i,testKey:s,testModel:l,testAll:async()=>{const f=[...e.models];if(f.length){n.value=!0;try{await Promise.all(f.map(u=>l(u)))}finally{n.value=!1}}},clearModelTest:a,resetKeyStatus:r}}const Ku={key:0,class:"detail-body"},Gu={class:"detail-head"},Hu={class:"detail-name"},Wu={class:"muted-sm"},Yu={class:"detail-pre"},zu={class:"detail-pre"},Ju=Jt({__name:"TestDetailDialog",props:{modelValue:{type:Boolean},detail:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t,i=Pe("request");Xo(()=>n.modelValue,r=>{r&&(i.value="request")});const a=r=>{if(r==null)return"(无)";try{const s=new WeakSet;return JSON.stringify(r,(l,c)=>{if(c&&typeof c=="object"){if(s.has(c))return"[circular]";s.add(c)}return c},2)}catch{return String(r)}};return(r,s)=>{const l=J("el-tag"),c=J("el-tab-pane"),f=J("el-tabs"),u=J("el-button"),p=J("el-dialog");return te(),Me(p,{"model-value":e.modelValue,title:"测试详情",width:"900px",top:"5vh","align-center":"","append-to-body":"","onUpdate:modelValue":s[2]||(s[2]=d=>o("update:modelValue",d))},{footer:M(()=>[P(u,{type:"primary",onClick:s[1]||(s[1]=d=>o("update:modelValue",!1))},{default:M(()=>[...s[3]||(s[3]=[ae("关闭",-1)])]),_:1})]),default:M(()=>[e.detail?(te(),Be("div",Ku,[K("div",Gu,[K("span",Hu,Te(e.detail.name),1),P(l,{type:e.detail.status==="ok"?"success":"danger",size:"small"},{default:M(()=>[ae(Te(e.detail.status==="ok"?"成功":"失败"),1)]),_:1},8,["type"]),K("span",Wu,Te(e.detail.msg),1)]),P(f,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=d=>i.value=d)},{default:M(()=>[P(c,{label:"请求参数 (Request)",name:"request"},{default:M(()=>[K("pre",Yu,Te(a(e.detail.request)),1)]),_:1}),P(c,{label:"响应数据 (Response)",name:"response"},{default:M(()=>[K("pre",zu,Te(a(e.detail.response)),1)]),_:1})]),_:1},8,["modelValue"])])):tt("",!0)]),_:1},8,["model-value"])}}}),Qu=cn(Ju,[["__scopeId","data-v-08dfa117"]]),Zu={class:"protocol-help"},_u={class:"help-item"},qu={class:"help-title"},ef={class:"help-item"},tf={class:"help-title"},nf={class:"help-item"},rf={class:"help-title"},of={class:"help-item"},af=Jt({__name:"ProtocolHelpDialog",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(e,{emit:t}){const n=t,o=[{client:"Claude Code",endpoint:"/v1/messages",note:"Anthropic 协议入口;上游优先选 Anthropic Messages(官方支持时),缓存/思维链原生保留"},{client:"Codex CLI",endpoint:"/v1/chat/completions",note:"OpenAI Chat 协议入口;上游协议随意,网关自动转换"},{client:"其他 OpenAI SDK / 工具",endpoint:"/v1/chat/completions",note:"OpenAI Chat 协议入口(chat/completions 是事实标准)"}];return(i,a)=>{const r=J("el-tag"),s=J("el-divider"),l=J("el-table-column"),c=J("el-table"),f=J("el-button"),u=J("el-dialog");return te(),Me(u,{"model-value":e.modelValue,title:"上游协议怎么选?",width:"760px","align-center":"","append-to-body":"","onUpdate:modelValue":a[1]||(a[1]=p=>n("update:modelValue",p))},{footer:M(()=>[P(f,{type:"primary",onClick:a[0]||(a[0]=p=>n("update:modelValue",!1))},{default:M(()=>[...a[15]||(a[15]=[ae("我知道了",-1)])]),_:1})]),default:M(()=>[K("div",Zu,[a[13]||(a[13]=K("p",{class:"help-intro"}," 协议就是上游 API「说话的格式」——同样的模型,接口路径、请求和响应的字段都不一样。选错格式,请求会直接失败。 ",-1)),K("div",_u,[K("div",qu,[a[3]||(a[3]=ae("OpenAI Chat Completions ",-1)),P(r,{size:"small",type:"primary"},{default:M(()=>[...a[2]||(a[2]=[ae("最常用",-1)])]),_:1})]),a[4]||(a[4]=K("p",null,"业界事实标准。DeepSeek、通义、Kimi、智谱、火山方舟等绝大多数国内外厂商,以及各类 OpenAI 兼容中转站,都用这套格式。",-1))]),K("div",ef,[K("div",tf,[a[6]||(a[6]=ae("Anthropic Messages ",-1)),P(r,{size:"small",type:"success"},{default:M(()=>[...a[5]||(a[5]=[ae("推荐优先",-1)])]),_:1})]),a[7]||(a[7]=K("p",null,[ae(" Claude 官方格式,以 /v1/messages 为标志。DeepSeek 官方 API 等少数厂商原生支持。 "),K("strong",null,"如果上游官方支持,优先选它"),ae("——尤其在 Claude Code 这类客户端场景下,能原生保留缓存控制(省 token 费用)、思维链等能力,避免协议来回转换造成损耗。 ")],-1))]),K("div",nf,[K("div",rf,[a[9]||(a[9]=ae("OpenAI Responses ",-1)),P(r,{size:"small",type:"info"},{default:M(()=>[...a[8]||(a[8]=[ae("小众",-1)])]),_:1})]),a[10]||(a[10]=K("p",null,"OpenAI 官方推出的新一代接口(/v1/responses),目前基本只有 OpenAI 自家在用。",-1))]),P(s),K("div",of,[a[11]||(a[11]=K("div",{class:"help-title"},"常用客户端对照表",-1)),a[12]||(a[12]=K("p",{class:"help-table-note"},"客户端接入本网关后用哪个入口,是客户端自己的属性,与上游协议选择无关;网关负责两边互转。",-1)),P(c,{data:o,size:"small",border:"",class:"help-table"},{default:M(()=>[P(l,{prop:"client",label:"客户端",width:"150"}),P(l,{prop:"endpoint",label:"网关入口",width:"190"}),P(l,{prop:"note",label:"说明","min-width":"220"})]),_:1})]),a[14]||(a[14]=K("div",{class:"help-item"},[K("div",{class:"help-title"},"还是拿不准?"),K("p",null,"先选 OpenAI Chat Completions,添加模型后用「测试」按钮验证:成功即选对;报 404 / format 类错误时,换 Anthropic Messages 再试。")],-1))])]),_:1},8,["model-value"])}}}),sf=cn(af,[["__scopeId","data-v-2248b61a"]]),lf={class:"full-width mb-8"},cf={class:"flex-gap-8 mb-8"},uf={class:"model-select-wrap"},ff={class:"muted-13"},df={key:0,class:"muted-12"},pf=Jt({__name:"ProviderModelEditor",props:{form:{},modelTest:{},testingAll:{type:Boolean},editingName:{}},emits:["test-model","test-all","show-test-detail"],setup(e,{expose:t,emit:n}){const o=e,i=n,{toast:a}=un(),r=Pe([]),s=Pe([]),l=Ht(()=>r.value.filter(v=>!o.form.models.some(g=>g.full_name===(o.form.alias.trim()?`${o.form.alias.trim()}/${v}`:v)))),c=()=>{const v=o.form.alias.trim();for(const g of s.value){const y=g.trim();if(!y)continue;r.value.includes(y)||r.value.push(y);let I=v?`${v}/${y}`:y,S=2;for(;o.form.models.some(C=>C.full_name===I);)I=`${v?`${v}/`:""}${y}-${S}`,S+=1;o.form.models.push({full_name:I,upstream:y,protocol:o.form.protocol})}s.value=[]},f=v=>{o.form.models.splice(v,1)};t({loadCachedModels:async v=>{const g=await Yt.get(`/api/test/models-cache/${encodeURIComponent(v)}`).catch(()=>({models:[]}));r.value=g.models||[]},addPresetModels:v=>{r.value=[...v],s.value=[...v],c()},resetState:()=>{r.value=[],s.value=[]}});const m=Pe(!1),h=async()=>{var v;m.value=!0;try{const g=o.editingName!=null?o.editingName:`new::${o.form.api_base.trim()}`,y=await Yt.post("/api/test/fetch-models",{api_base:o.form.api_base.trim(),api_key:o.form.api_key.trim(),keyId:g,protocol:o.form.protocol,autoV1:o.form.autoV1});y.status==="ok"&&((v=y.models)==null?void 0:v.length)>0?(r.value=[...new Set([...r.value,...y.models])],a(`已获取 ${y.models.length} 个模型`,"success")):/404/.test(y.message||"")?a("该上游不支持获取模型列表(404),请手动输入模型名,或到官网文档查看支持的模型","error"):a(y.message||"未获取到模型","error")}catch(g){a(g.message,"error")}finally{m.value=!1}};return(v,g)=>{const y=J("el-icon"),I=J("el-tooltip"),S=J("el-alert"),C=J("el-option"),A=J("el-select"),B=J("el-button"),w=J("el-table-column"),O=J("el-input"),L=J("el-link"),j=J("el-table"),R=J("el-form-item");return te(),Me(R,{prop:"models"},{label:M(()=>[g[2]||(g[2]=K("span",null,"模型列表",-1)),P(I,{placement:"top",content:"这家供应商下你要用哪些模型。至少添加一个才能保存;客户端请求时填「模型全名」即可路由到这里。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(()=>[K("div",lf,[P(S,{type:"info",closable:!1,"show-icon":"",title:"此处测试为直连上游(不经过网关),仅验证连通性;保存后可在列表卡片中测试完整代理链路。"})]),K("div",cf,[K("div",uf,[P(A,{modelValue:s.value,"onUpdate:modelValue":g[0]||(g[0]=E=>s.value=E),multiple:"","collapse-tags":"",filterable:"","allow-create":"","default-first-option":"",placeholder:"搜索或输入模型名"},{default:M(()=>[(te(!0),Be(Bo,null,ko(l.value,E=>(te(),Me(C,{key:E,label:E,value:E},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),P(B,{onClick:c,disabled:!s.value.length},{default:M(()=>[...g[3]||(g[3]=[ae("添加",-1)])]),_:1},8,["disabled"]),P(B,{loading:m.value,disabled:!e.form.api_base||!e.form.api_key,onClick:h},{default:M(()=>[ae(Te(m.value?"":"获取模型列表"),1)]),_:1},8,["loading","disabled"]),P(B,{loading:e.testingAll,disabled:!e.form.models.length||!e.form.api_base||!e.form.api_key,onClick:g[1]||(g[1]=E=>i("test-all"))},{default:M(()=>[ae(Te(e.testingAll?"":"测试全部"),1)]),_:1},8,["loading","disabled"])]),P(j,{border:"",data:e.form.models,class:"full-width","empty-text":"暂无模型"},{default:M(()=>[P(w,{type:"index",label:"#",width:"50",align:"center"}),P(w,{"min-width":"260"},{header:M(()=>[g[4]||(g[4]=K("span",{class:"col-help"},"模型全名(可编辑)",-1)),P(I,{placement:"top",content:"发请求时实际使用的模型名称(客户端填的 model 参数),默认 = 别名/上游模型名,可自由修改;全局唯一,点击可复制。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(({row:E})=>[P(O,{modelValue:E.full_name,"onUpdate:modelValue":N=>E.full_name=N},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),P(w,{prop:"upstream","min-width":"180"},{header:M(()=>[g[5]||(g[5]=K("span",{class:"col-help"},"上游模型",-1)),P(I,{placement:"top",content:"供应商 API 真实的模型标识(如 deepseek-chat、gpt-4o),请求会被转发给这个模型;同一上游模型可添加多次(如配不同协议),但模型全名不能重复。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(({row:E})=>[K("span",ff,Te(E.upstream),1)]),_:1}),P(w,{width:"230"},{header:M(()=>[g[6]||(g[6]=K("span",{class:"col-help"},"上游协议",-1)),P(I,{placement:"top",content:"请求该模型时使用的 API 格式,默认继承上方供应商协议;个别模型可单独改(如同一供应商既有 OpenAI 风格又有 Anthropic 风格的模型)。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(({row:E})=>[P(A,{modelValue:E.protocol,"onUpdate:modelValue":N=>E.protocol=N,class:"full-width",size:"small"},{default:M(()=>[P(C,{label:"Anthropic Messages",value:"anthropic"}),P(C,{label:"OpenAI Chat Completions",value:"openai"}),P(C,{label:"OpenAI Responses",value:"openai-responses"})]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:1}),P(w,{label:"测试结果(直连)",width:"200",align:"center"},{default:M(({row:E})=>{var N,V;return[(N=e.modelTest[E.full_name])!=null&&N.loading?(te(),Be("span",df,"测试中...")):(V=e.modelTest[E.full_name])!=null&&V.status?(te(),Me(L,{key:1,type:e.modelTest[E.full_name].status==="ok"?"success":"danger",class:"test-result-link",onClick:F=>i("show-test-detail",E.full_name)},{default:M(()=>[ae(Te(e.modelTest[E.full_name].msg),1)]),_:2},1032,["type","onClick"])):tt("",!0)]}),_:1}),P(w,{width:"140",align:"center",label:"操作"},{default:M(({row:E})=>{var N;return[P(B,{link:"",loading:(N=e.modelTest[E.full_name])==null?void 0:N.loading,disabled:!e.form.api_base||!e.form.api_key,onClick:V=>i("test-model",E)},{default:M(()=>[...g[7]||(g[7]=[ae("测试",-1)])]),_:1},8,["loading","disabled","onClick"]),P(B,{link:"",type:"danger",onClick:V=>f(e.form.models.indexOf(E))},{default:M(()=>[...g[8]||(g[8]=[ae("删除",-1)])]),_:1},8,["onClick"])]}),_:1})]),_:1},8,["data"])]),_:1})}}}),hf=cn(pf,[["__scopeId","data-v-e64a6809"]]),mf={class:"dialog-body"},vf={class:"flex-gap-8 full-width"},gf={class:"full-url-toggle label-inline-toggle"},yf={key:0,class:"muted-sm"},Ef={key:0,class:"mt-4"},Sf={key:0,class:"test-ok-text"},bf={key:1,class:"test-fail-text"},Tf={key:1,class:"muted-sm"},Of={class:"flex-gap-8 flex-center"},If=Jt({__name:"ProviderModal",props:{editName:{},provider:{},cloneOf:{}},emits:["close","saved"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Ko(),r=Pe(n.editName),s=Ht(()=>n.editName!=null),l=Pe(""),c=Ht(()=>Co.find(X=>X.id===l.value)),f=X=>{var ue;const D=Co.find(Y=>Y.id===X);D&&(d.name=D.name,d.alias=D.alias,d.website=D.website||"",d.api_base=D.apiBase,d.autoV1=D.autoV1,d.protocol=D.protocol,(ue=D.presetModels)!=null&&ue.length&&!d.models.length&&w(D.presetModels))},u=()=>{var D;const X=(D=c.value)==null?void 0:D.keyUrl;X&&window.open(X,"_blank","noopener")},p=()=>{const X=d.website.trim();X&&R(X)&&window.open(X,"_blank","noopener")},d=gn({name:"",alias:"",website:"",api_base:"",protocol:"anthropic",api_key:"",autoV1:!0,models:[]}),{testingAll:m,keyStatus:h,modelTest:v,testKey:g,testModel:y,testAll:I,clearModelTest:S,resetKeyStatus:C}=Xu(d),A=Pe(null),B=X=>{var D;return(D=A.value)==null?void 0:D.loadCachedModels(X)},w=X=>{var D;return(D=A.value)==null?void 0:D.addPresetModels(X)},O=()=>{var X;return(X=A.value)==null?void 0:X.resetState()},L=Pe(),j=Pe(!1),R=X=>{try{const D=new URL(X);return D.protocol==="http:"||D.protocol==="https:"}catch{return!1}},E=(X,D,ue)=>{!D||R(D)?ue():ue(new Error("请输入有效的 URL(以 http:// 或 https:// 开头)"))},N={name:[{required:!0,message:"请输入供应商名称",trigger:"blur"}],alias:[{required:!0,message:"请输入供应商英文名称(别名)",trigger:"blur"}],website:[{validator:E,trigger:"blur"}],api_base:[{required:!0,message:"请输入请求地址 (API Base)",trigger:"blur"},{validator:E,trigger:"blur"}],api_key:[{required:!0,message:"请输入 API Key",trigger:"blur"}]},V={anthropic:"/messages",openai:"/chat/completions","openai-responses":"/responses"},F=Ht(()=>{const X=d.api_base.trim().replace(/\/+$/,"");if(!X)return"";const D=V[d.protocol]||"";return d.autoV1&&!/\/v\d+$/i.test(X)?`${X}/v1${D}`:`${X}${D}`}),U=()=>{var X;Object.assign(d,{name:"",alias:"",website:"",api_base:"",protocol:"anthropic",api_key:"",autoV1:!0,models:[]}),(X=L.value)==null||X.clearValidate(),l.value="",O(),C(),S(),ce.value=!1,ge.value=null},z=async()=>{var D,ue;U();const X=n.provider;if(n.editName!=null&&X)await B(X.name),Object.assign(d,{name:X.name||"",alias:X.alias||"",website:X.website||"",api_base:X.apiBase||"",protocol:X.customLlmProvider||"anthropic",api_key:X.apiKey||"",autoV1:X.autoV1!==!1,models:X.models.map(Y=>({full_name:Y.modelName,upstream:Y.model,protocol:Y.customLlmProvider||X.customLlmProvider||"anthropic"}))});else if(n.cloneOf){const Y=n.cloneOf;Y.name&&await B(Y.name);const Oe=(D=Y.alias)==null?void 0:D.trim(),be=Oe?`${Oe}-copy`:"copy",Je=`${((ue=Y.name)==null?void 0:ue.trim())||Oe||"供应商"}副本`;Object.assign(d,{name:Je,alias:be,website:Y.website||"",api_base:Y.apiBase||"",protocol:Y.customLlmProvider||"anthropic",api_key:Y.apiKey||"",autoV1:Y.autoV1!==!1,models:(Y.models||[]).map(Le=>{let we=Le.modelName;return Oe&&we.startsWith(`${Oe}/`)&&(we=`${be}/${we.slice(Oe.length+1)}`),{full_name:we,upstream:Le.model,protocol:Le.customLlmProvider||Y.customLlmProvider||"anthropic"}})})}};la(()=>{r.value=n.editName,z()}),Xo(()=>n.editName,async X=>{r.value=X,await z()});const ce=Pe(!1),Se=Pe(!1),ge=Pe(null),Ee=X=>{const D=v[X];!D||D.loading||(ge.value={name:X,status:D.status||"",msg:D.msg||"",request:D.request,response:D.response},ce.value=!0)},Ae=async()=>{var vt;if(!await((vt=L.value)==null?void 0:vt.validate().catch(()=>!1))||!d.models.length)return;const D=d.models.map(ne=>({full_name:ne.full_name.trim(),upstream:ne.upstream.trim(),protocol:ne.protocol||d.protocol})).filter(ne=>ne.full_name);if(!D.length){i("请至少填写一个有效的模型名称","error");return}const ue=d.name.trim(),Y=d.alias.trim(),Oe=d.website.trim(),be=d.api_base.trim(),Je=d.api_key.trim(),Le=a.suppliers.filter(ne=>ne.name!==r.value);if(Le.some(ne=>ne.name===ue)){i(`供应商名称已存在: ${ue}`,"error");return}if(Y&&Le.some(ne=>(ne.alias??"").trim()===Y)){i(`供应商别名已存在: ${Y}`,"error");return}const we={name:ue,...Y?{alias:Y}:{},...Oe?{website:Oe}:{},customLlmProvider:d.protocol,apiKey:Je,apiBase:be,...d.autoV1?{}:{autoV1:!1},models:D.map(ne=>({modelName:ne.full_name,model:ne.upstream,...ne.protocol&&ne.protocol!==d.protocol?{customLlmProvider:ne.protocol}:{}}))};if(we.models.some(ne=>ne.model.includes("/"))){i("上游模型名不得包含 /","error");return}const Ie=[...Le.flatMap(ne=>ne.models.map(re=>re.modelName)),...D.map(ne=>ne.full_name)],Fe=new Set;for(const ne of Ie){if(Fe.has(ne)){i(`模型名称重复: ${ne}`,"error");return}Fe.add(ne)}j.value=!0;try{const ne=r.value==null,re=await a.saveProviders(ne?[we,...Le]:[...Le,we]);ne&&a.moveProviderToTop(ue),i(re.message||"供应商已保存","success"),o("saved")}catch(ne){i(ne.message,"error")}finally{j.value=!1}};return(X,D)=>{const ue=J("el-alert"),Y=J("el-option"),Oe=J("el-select"),be=J("el-form-item"),Je=J("el-icon"),Le=J("el-tooltip"),we=J("el-input"),Ie=J("el-button"),Fe=J("el-switch"),vt=J("el-form"),ne=J("el-dialog");return te(),Me(ne,{"model-value":!0,title:r.value?"编辑供应商":"添加供应商",width:"1200px",top:"3vh","align-center":"","close-on-click-modal":!1,onClose:D[12]||(D[12]=re=>o("close"))},{footer:M(()=>[K("div",Of,[P(Ie,{onClick:D[11]||(D[11]=re=>o("close")),disabled:j.value},{default:M(()=>[...D[27]||(D[27]=[ae(" 取消 ",-1)])]),_:1},8,["disabled"]),P(Ie,{type:"primary",loading:j.value,onClick:Ae,disabled:!d.models.length||!d.api_base||!d.api_key||j.value},{default:M(()=>[ae(Te(j.value?"保存中...":r.value?"保存":"添加供应商"),1)]),_:1},8,["loading","disabled"])])]),default:M(()=>[K("div",mf,[!s.value&&!n.cloneOf?(te(),Me(ue,{key:0,class:"mb-16",type:"info",closable:!1,"show-icon":"",title:"添加流程:选模板 → 去平台创建 API Key → 粘贴 Key → 测试 → 保存。全新手建议从「供应商模板」开始。"})):tt("",!0),P(vt,{ref_key:"formRef",ref:L,model:d,rules:N,"label-position":"top"},{default:M(()=>[!s.value&&!n.cloneOf?(te(),Me(be,{key:0,label:"供应商模板"},{default:M(()=>[K("div",vf,[P(Oe,{modelValue:l.value,"onUpdate:modelValue":D[0]||(D[0]=re=>l.value=re),class:"full-width",placeholder:"选择模板快速填充,或选「自定义」手动填写",onChange:f},{default:M(()=>[(te(!0),Be(Bo,null,ko(q(Co),re=>(te(),Me(Y,{key:re.id,label:re.name,value:re.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),D[13]||(D[13]=K("div",{class:"muted-sm"},"内置常用厂商的地址和配置,选中后自动填充下方所有字段,仍可自由修改",-1))]),_:1})):tt("",!0),P(be,{prop:"name"},{label:M(()=>[D[14]||(D[14]=K("span",null,"供应商名称",-1)),P(Le,{placement:"top",content:"给你接入的 AI 服务起个名字,只在管理界面显示,随便起(如:DeepSeek、公司中转、朋友的号)。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(()=>[P(we,{modelValue:d.name,"onUpdate:modelValue":D[1]||(D[1]=re=>d.name=re),modelModifiers:{trim:!0},placeholder:"如:DeepSeek(仅用于界面展示)"},null,8,["modelValue"])]),_:1}),P(be,{prop:"alias"},{label:M(()=>[D[15]||(D[15]=K("span",null,"供应商英文名称(别名)",-1)),P(Le,{placement:"top",content:"模型名的统一前缀。添加模型后名字会变成 前缀/模型名(如 ds/deepseek-chat),客户端选择模型时一眼能看出属于哪家。仅限英文小写。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(()=>[P(we,{modelValue:d.alias,"onUpdate:modelValue":D[2]||(D[2]=re=>d.alias=re),modelModifiers:{trim:!0},placeholder:"如:ds"},null,8,["modelValue"]),D[16]||(D[16]=K("div",{class:"muted-sm"},"添加模型时的默认名称前缀,如 ds/deepseek-chat",-1))]),_:1}),P(be,{prop:"website"},{label:M(()=>[D[18]||(D[18]=K("span",null,"官网链接",-1)),P(Le,{placement:"top",content:"选填。方便以后回来查文档、看模型列表;填了之后这里会出现「打开链接」按钮。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1}),d.website?(te(),Me(Ie,{key:0,class:"label-action-btn",link:"",type:"primary",onClick:p},{default:M(()=>[...D[17]||(D[17]=[ae("打开链接",-1)])]),_:1})):tt("",!0)]),default:M(()=>[P(we,{modelValue:d.website,"onUpdate:modelValue":D[3]||(D[3]=re=>d.website=re),modelModifiers:{trim:!0},placeholder:"https://platform.deepseek.com(可选)"},null,8,["modelValue"])]),_:1}),P(be,{prop:"api_base"},{label:M(()=>[D[20]||(D[20]=K("span",null,"请求地址 (API Base)",-1)),P(Le,{placement:"top",content:"网关往哪发请求。官方厂商在「API 文档」里找,通常长得像 https://api.xxx.com;中转站会直接给你这个地址。模板会自动填好。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1}),K("div",gf,[D[19]||(D[19]=K("span",{class:"muted-13"},"自动补全 /v1",-1)),P(Fe,{modelValue:d.autoV1,"onUpdate:modelValue":D[4]||(D[4]=re=>d.autoV1=re)},null,8,["modelValue"])])]),default:M(()=>[P(we,{modelValue:d.api_base,"onUpdate:modelValue":D[5]||(D[5]=re=>d.api_base=re),modelModifiers:{trim:!0},placeholder:"https://api.deepseek.com"},null,8,["modelValue"]),F.value?(te(),Be("div",yf," 实际请求地址:"+Te(F.value)+"(开启自动补全时,地址末尾无 /v1~v9 版本段会插入 /v1;上游无版本前缀请关闭) ",1)):tt("",!0)]),_:1}),P(be,null,{label:M(()=>[D[22]||(D[22]=K("span",null,"上游协议 (Protocol)",-1)),P(Ie,{class:"label-action-btn",link:"",type:"primary",onClick:D[6]||(D[6]=re=>Se.value=!0)},{default:M(()=>[...D[21]||(D[21]=[ae(" 如何选择 ",-1)])]),_:1})]),default:M(()=>[P(Oe,{modelValue:d.protocol,"onUpdate:modelValue":D[7]||(D[7]=re=>d.protocol=re)},{default:M(()=>[P(Y,{label:"Anthropic Messages",value:"anthropic"}),P(Y,{label:"OpenAI Chat Completions",value:"openai"}),P(Y,{label:"OpenAI Responses",value:"openai-responses"})]),_:1},8,["modelValue"]),D[23]||(D[23]=K("div",{class:"muted-sm protocol-hint"},"上游接口的 API 风格,选错会请求失败;拿不准时先用下方「测试」逐个验证。",-1))]),_:1}),P(be,{prop:"api_key"},{label:M(()=>{var re,xt;return[D[26]||(D[26]=K("span",null,"API Key",-1)),P(Le,{placement:"top",content:"你在上游平台的「钥匙」,证明请求是你发的、从你账户扣费。在平台控制台创建,形如 sk- 开头的一串字符,粘贴到这里即可。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1}),(re=c.value)!=null&&re.keyUrl?(te(),Me(Ie,{key:0,class:"label-action-btn",link:"",type:"primary",onClick:u},{default:M(()=>[...D[24]||(D[24]=[ae("获取 Key",-1)])]),_:1})):tt("",!0),P(Ie,{class:"label-action-btn",link:"",type:"primary",loading:(xt=q(h))==null?void 0:xt.loading,disabled:!d.api_base||!d.api_key,onClick:q(g)},{default:M(()=>[...D[25]||(D[25]=[ae("测试",-1)])]),_:1},8,["loading","disabled","onClick"])]}),default:M(()=>{var re;return[P(we,{modelValue:d.api_key,"onUpdate:modelValue":D[8]||(D[8]=xt=>d.api_key=xt),modelModifiers:{trim:!0},placeholder:"如:sk-xxxxxxxx(DeepSeek 开放平台密钥)",onKeyup:$s(q(g),["enter"])},null,8,["modelValue","onKeyup"]),q(h)&&!q(h).loading?(te(),Be("div",Ef,[q(h).status==="ok"?(te(),Be("span",Sf,Te(q(h).msg),1)):q(h).status==="fail"?(te(),Be("span",bf,Te(q(h).msg),1)):tt("",!0)])):tt("",!0),(re=c.value)!=null&&re.keyNote?(te(),Be("div",Tf,Te(c.value.keyNote),1)):tt("",!0)]}),_:1}),P(hf,{ref_key:"modelEditorRef",ref:A,form:d,"model-test":q(v),"testing-all":q(m),"editing-name":r.value,onTestModel:q(y),onTestAll:q(I),onShowTestDetail:Ee},null,8,["form","model-test","testing-all","editing-name","onTestModel","onTestAll"])]),_:1},8,["model"])]),P(Qu,{modelValue:ce.value,"onUpdate:modelValue":D[9]||(D[9]=re=>ce.value=re),detail:ge.value},null,8,["modelValue","detail"]),P(sf,{modelValue:Se.value,"onUpdate:modelValue":D[10]||(D[10]=re=>Se.value=re)},null,8,["modelValue"])]),_:1},8,["title"])}}}),Nf=cn(If,[["__scopeId","data-v-097689eb"]]),Cf={class:"models-dialog-body"},Af=["onClick"],xf={class:"muted-13"},Pf={key:3,class:"muted-disabled"},Df={key:0,class:"muted-12"},Rf={key:1,class:"muted-disabled"},Mf={key:0,class:"muted-12"},Lf={key:1,class:"muted-disabled"},wf=Jt({__name:"ProviderModelsDialog",props:{modelValue:{type:Boolean},providerName:{}},emits:["update:modelValue","copy-model","changed"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Ko(),r=Ai(),s=Ht(()=>n.providerName!=null?a.suppliers.find(f=>f.name===n.providerName):void 0),l=Ht(()=>{const f=s.value;return f?f.alias&&f.alias!==f.name?`${f.name}(${f.alias})`:f.name:""}),c=async f=>{try{await Ao.confirm(`确定删除模型 "${f}"?`,"确认删除",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await a.deleteModel(f),o("changed"),i("模型已删除","success")}catch(u){u!=="cancel"&&i(u.message,"error")}};return(f,u)=>{const p=J("el-alert"),d=J("el-table-column"),m=J("el-tag"),h=J("el-tooltip"),v=J("el-button"),g=J("el-table"),y=J("el-empty"),I=J("el-dialog");return te(),Me(I,{"model-value":e.modelValue,title:l.value,width:"1200px",top:"3vh","destroy-on-close":"","onUpdate:modelValue":u[0]||(u[0]=S=>o("update:modelValue",S))},{default:M(()=>[K("div",Cf,[s.value?(te(),Me(p,{key:0,class:"mb-8",type:"info",closable:!1,"show-icon":"",title:"测试走网关代理:请求经本网关转发至上游(含协议转换、计费记录),验证完整链路;编辑弹窗内测试为直连上游,仅验证连通性。"})):tt("",!0),s.value&&s.value.models.length?(te(),Me(g,{key:1,border:"",data:s.value.models,stripe:"",class:"models-table full-width"},{default:M(()=>[P(d,{prop:"modelName",label:"模型名称","min-width":"220"},{default:M(({row:S})=>[K("span",{class:"link-blue",onClick:C=>o("copy-model",S.modelName),title:"点击复制"},Te(S.modelName),9,Af)]),_:1}),P(d,{prop:"model",label:"上游模型","min-width":"180"},{default:M(({row:S})=>[K("span",xf,Te(S.model),1)]),_:1}),P(d,{prop:"customLlmProvider",label:"上游协议",width:"100",align:"center"},{default:M(({row:S})=>[P(m,{type:"info"},{default:M(()=>[ae(Te(S.customLlmProvider||s.value.customLlmProvider),1)]),_:2},1024)]),_:1}),P(d,{label:"状态",width:"150",align:"center"},{default:M(({row:S})=>[q(r).modelStatus[S.modelName]==="ok"?(te(),Me(m,{key:0,type:"success"},{default:M(()=>[...u[1]||(u[1]=[ae("通过",-1)])]),_:1})):q(r).modelStatus[S.modelName]==="error"?(te(),Me(h,{key:1,content:q(r).modelMessage[S.modelName],placement:"top","show-after":300},{default:M(()=>[P(m,{type:"danger",class:"error-tag"},{default:M(()=>[ae(Te(q(r).modelMessage[S.modelName]),1)]),_:2},1024)]),_:2},1032,["content"])):q(r).modelStatus[S.modelName]==="testing"?(te(),Me(m,{key:2,type:"warning"},{default:M(()=>[...u[2]||(u[2]=[ae("测试中",-1)])]),_:1})):(te(),Be("span",Pf,"-"))]),_:1}),P(d,{label:"耗时",width:"80",align:"center"},{default:M(({row:S})=>[q(r).modelLatency[S.modelName]?(te(),Be("span",Df,Te((q(r).modelLatency[S.modelName]/1e3).toFixed(1))+"s ",1)):(te(),Be("span",Rf,"-"))]),_:1}),P(d,{label:"上次测试","min-width":"160"},{default:M(({row:S})=>[q(r).modelTime[S.modelName]?(te(),Be("span",Mf,Te(q(r).modelTime[S.modelName]),1)):(te(),Be("span",Lf,"未测试"))]),_:1}),P(d,{label:"操作",width:"140",align:"center"},{default:M(({row:S})=>[P(v,{link:"",loading:q(r).modelStatus[S.modelName]==="testing",onClick:C=>q(r).testProxy(S.modelName)},{default:M(()=>[...u[3]||(u[3]=[ae(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),P(v,{link:"",type:"danger",onClick:C=>c(S.modelName)},{default:M(()=>[...u[4]||(u[4]=[ae(" 删除 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])):s.value?(te(),Me(y,{key:2,description:"暂无模型","image-size":64})):tt("",!0)])]),_:1},8,["model-value","title"])}}}),Vf=cn(wf,[["__scopeId","data-v-a79f8c7b"]]),Ff={class:"muted-sm mb-8"},$f={class:"flex-between"},Uf={class:"flex-gap-8"},jf=Jt({__name:"ConfigFileDialog",props:{modelValue:{type:Boolean}},emits:["update:modelValue","saved"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Pe(""),r=Pe(""),s=Pe(!1);Xo(()=>n.modelValue,async f=>{if(f){a.value="";try{const u=await Yt.get("/api/config");a.value=JSON.stringify(u,null,2)+`
30
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function A(T){return I(T)||S(T)||v(T)||C()}var B=r("a352"),w=r.n(B);function O(T){T.parentElement!==null&&T.parentElement.removeChild(T)}function L(T,b,x){var $=x===0?T.children[0]:T.children[x-1].nextSibling;T.insertBefore(b,$)}var j=r("dbf1");r("13d5"),r("4fad"),r("ac1f"),r("5319");function R(T){var b=Object.create(null);return function($){var G=b[$];return G||(b[$]=T($))}}var E=/-(\w)/g,N=R(function(T){return T.replace(E,function(b,x){return x.toUpperCase()})});r("5db7"),r("73d9");var V=["Start","Add","Remove","Update","End"],F=["Choose","Unchoose","Sort","Filter","Clone"],U=["Move"],z=[U,V,F].flatMap(function(T){return T}).map(function(T){return"on".concat(T)}),ce={manage:U,manageAndEmit:V,emit:F};function Se(T){return z.indexOf(T)!==-1}r("caad"),r("2ca0");var ge=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"];function Ee(T){return ge.includes(T)}function Ae(T){return["transition-group","TransitionGroup"].includes(T)}function X(T){return["id","class","role","style"].includes(T)||T.startsWith("data-")||T.startsWith("aria-")||T.startsWith("on")}function D(T){return T.reduce(function(b,x){var $=y(x,2),G=$[0],_=$[1];return b[G]=_,b},{})}function ue(T){var b=T.$attrs,x=T.componentData,$=x===void 0?{}:x,G=D(Object.entries(b).filter(function(_){var le=y(_,2),ye=le[0];return le[1],X(ye)}));return p(p({},G),$)}function Y(T){var b=T.$attrs,x=T.callBackBuilder,$=D(Oe(b));Object.entries(x).forEach(function(_){var le=y(_,2),ye=le[0],Xe=le[1];ce[ye].forEach(function(ee){$["on".concat(ee)]=Xe(ee)})});var G="[data-draggable]".concat($.draggable||"");return p(p({},$),{},{draggable:G})}function Oe(T){return Object.entries(T).filter(function(b){var x=y(b,2),$=x[0];return x[1],!X($)}).map(function(b){var x=y(b,2),$=x[0],G=x[1];return[N($),G]}).filter(function(b){var x=y(b,2),$=x[0];return x[1],!Se($)})}r("c740");function be(T,b){if(!(T instanceof b))throw new TypeError("Cannot call a class as a function")}function Je(T,b){for(var x=0;x<b.length;x++){var $=b[x];$.enumerable=$.enumerable||!1,$.configurable=!0,"value"in $&&($.writable=!0),Object.defineProperty(T,$.key,$)}}function Le(T,b,x){return b&&Je(T.prototype,b),T}var we=function(b){var x=b.el;return x},Ie=function(b,x){return b.__draggable_context=x},Fe=function(b){return b.__draggable_context},vt=(function(){function T(b){var x=b.nodes,$=x.header,G=x.default,_=x.footer,le=b.root,ye=b.realList;be(this,T),this.defaultNodes=G,this.children=[].concat(A($),A(G),A(_)),this.externalComponent=le.externalComponent,this.rootTransition=le.transition,this.tag=le.tag,this.realList=ye}return Le(T,[{key:"render",value:function(x,$){var G=this.tag,_=this.children,le=this._isRootComponent,ye=le?{default:function(){return _}}:_;return x(G,$,ye)}},{key:"updated",value:function(){var x=this.defaultNodes,$=this.realList;x.forEach(function(G,_){Ie(we(G),{element:$[_],index:_})})}},{key:"getUnderlyingVm",value:function(x){return Fe(x)}},{key:"getVmIndexFromDomIndex",value:function(x,$){var G=this.defaultNodes,_=G.length,le=$.children,ye=le.item(x);if(ye===null)return _;var Xe=Fe(ye);if(Xe)return Xe.index;if(_===0)return 0;var ee=we(G[0]),W=A(le).findIndex(function(Q){return Q===ee});return x<W?0:_}},{key:"_isRootComponent",get:function(){return this.externalComponent||this.rootTransition}}]),T})(),ne=r("8bbf");function re(T,b){var x=T[b];return x?x():[]}function xt(T){var b=T.$slots,x=T.realList,$=T.getKey,G=x||[],_=["header","footer"].map(function(Q){return re(b,Q)}),le=y(_,2),ye=le[0],Xe=le[1],ee=b.item;if(!ee)throw new Error("draggable element must have an item slot");var W=G.flatMap(function(Q,he){return ee({element:Q,index:he}).map(function(me){return me.key=$(Q),me.props=p(p({},me.props||{}),{},{"data-draggable":!0}),me})});if(W.length!==G.length)throw new Error("Item slot must have only one child");return{header:ye,footer:Xe,default:W}}function co(T){var b=Ae(T),x=!Ee(T)&&!b;return{transition:b,externalComponent:x,tag:x?Object(ne.resolveComponent)(T):b?ne.TransitionGroup:T}}function St(T){var b=T.$slots,x=T.tag,$=T.realList,G=T.getKey,_=xt({$slots:b,realList:$,getKey:G}),le=co(x);return new vt({nodes:_,root:le,realList:$})}function Ut(T,b){var x=this;Object(ne.nextTick)(function(){return x.$emit(T.toLowerCase(),b)})}function fn(T){var b=this;return function(x,$){if(b.realList!==null)return b["onDrag".concat(T)](x,$)}}function Pn(T){var b=this,x=fn.call(this,T);return function($,G){x.call(b,$,G),Ut.call(b,T,$)}}var Dn=null,Rn={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:function(b){return b}},tag:{type:String,default:"div"},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},Mn=["update:modelValue","change"].concat(A([].concat(A(ce.manageAndEmit),A(ce.emit)).map(function(T){return T.toLowerCase()}))),Ln=Object(ne.defineComponent)({name:"draggable",inheritAttrs:!1,props:Rn,emits:Mn,data:function(){return{error:!1}},render:function(){try{this.error=!1;var b=this.$slots,x=this.$attrs,$=this.tag,G=this.componentData,_=this.realList,le=this.getKey,ye=St({$slots:b,tag:$,realList:_,getKey:le});this.componentStructure=ye;var Xe=ue({$attrs:x,componentData:G});return ye.render(ne.h,Xe)}catch(ee){return this.error=!0,Object(ne.h)("pre",{style:{color:"red"}},ee.stack)}},created:function(){this.list!==null&&this.modelValue!==null&&j.a.error("modelValue and list props are mutually exclusive! Please set one or another.")},mounted:function(){var b=this;if(!this.error){var x=this.$attrs,$=this.$el,G=this.componentStructure;G.updated();var _=Y({$attrs:x,callBackBuilder:{manageAndEmit:function(Xe){return Pn.call(b,Xe)},emit:function(Xe){return Ut.bind(b,Xe)},manage:function(Xe){return fn.call(b,Xe)}}}),le=$.nodeType===1?$:$.parentElement;this._sortable=new w.a(le,_),this.targetDomElement=le,le.__draggable_component__=this}},updated:function(){this.componentStructure.updated()},beforeUnmount:function(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList:function(){var b=this.list;return b||this.modelValue},getKey:function(){var b=this.itemKey;return typeof b=="function"?b:function(x){return x[b]}}},watch:{$attrs:{handler:function(b){var x=this._sortable;x&&Oe(b).forEach(function($){var G=y($,2),_=G[0],le=G[1];x.option(_,le)})},deep:!0}},methods:{getUnderlyingVm:function(b){return this.componentStructure.getUnderlyingVm(b)||null},getUnderlyingPotencialDraggableComponent:function(b){return b.__draggable_component__},emitChanges:function(b){var x=this;Object(ne.nextTick)(function(){return x.$emit("change",b)})},alterList:function(b){if(this.list){b(this.list);return}var x=A(this.modelValue);b(x),this.$emit("update:modelValue",x)},spliceList:function(){var b=arguments,x=function(G){return G.splice.apply(G,A(b))};this.alterList(x)},updatePosition:function(b,x){var $=function(_){return _.splice(x,0,_.splice(b,1)[0])};this.alterList($)},getRelatedContextFromMoveEvent:function(b){var x=b.to,$=b.related,G=this.getUnderlyingPotencialDraggableComponent(x);if(!G)return{component:G};var _=G.realList,le={list:_,component:G};if(x!==$&&_){var ye=G.getUnderlyingVm($)||{};return p(p({},ye),le)}return le},getVmIndexFromDomIndex:function(b){return this.componentStructure.getVmIndexFromDomIndex(b,this.targetDomElement)},onDragStart:function(b){this.context=this.getUnderlyingVm(b.item),b.item._underlying_vm_=this.clone(this.context.element),Dn=b.item},onDragAdd:function(b){var x=b.item._underlying_vm_;if(x!==void 0){O(b.item);var $=this.getVmIndexFromDomIndex(b.newIndex);this.spliceList($,0,x);var G={element:x,newIndex:$};this.emitChanges({added:G})}},onDragRemove:function(b){if(L(this.$el,b.item,b.oldIndex),b.pullMode==="clone"){O(b.clone);return}var x=this.context,$=x.index,G=x.element;this.spliceList($,1);var _={element:G,oldIndex:$};this.emitChanges({removed:_})},onDragUpdate:function(b){O(b.item),L(b.from,b.item,b.oldIndex);var x=this.context.index,$=this.getVmIndexFromDomIndex(b.newIndex);this.updatePosition(x,$);var G={element:this.context.element,oldIndex:x,newIndex:$};this.emitChanges({moved:G})},computeFutureIndex:function(b,x){if(!b.element)return 0;var $=A(x.to.children).filter(function(ye){return ye.style.display!=="none"}),G=$.indexOf(x.related),_=b.component.getVmIndexFromDomIndex(G),le=$.indexOf(Dn)!==-1;return le||!x.willInsertAfter?_:_+1},onDragMove:function(b,x){var $=this.move,G=this.realList;if(!$||!G)return!0;var _=this.getRelatedContextFromMoveEvent(b),le=this.computeFutureIndex(_,b),ye=p(p({},this.context),{},{futureIndex:le}),Xe=p(p({},b),{},{relatedContext:_,draggedContext:ye});return $(Xe,x)},onDragEnd:function(){Dn=null}}}),wn=Ln;a.default=wn}),fb6a:(function(i,a,r){var s=r("23e7"),l=r("861d"),c=r("e8b5"),f=r("23cb"),u=r("50c4"),p=r("fc6a"),d=r("8418"),m=r("b622"),h=r("1dde"),v=r("ae40"),g=h("slice"),y=v("slice",{ACCESSORS:!0,0:0,1:2}),I=m("species"),S=[].slice,C=Math.max;s({target:"Array",proto:!0,forced:!g||!y},{slice:function(B,w){var O=p(this),L=u(O.length),j=f(B,L),R=f(w===void 0?L:w,L),E,N,V;if(c(O)&&(E=O.constructor,typeof E=="function"&&(E===Array||c(E.prototype))?E=void 0:l(E)&&(E=E[I],E===null&&(E=void 0)),E===Array||E===void 0))return S.call(O,j,R);for(N=new(E===void 0?Array:E)(C(R-j,0)),V=0;j<R;j++,V++)j in O&&d(N,V,O[j]);return N.length=V,N}})}),fc6a:(function(i,a,r){var s=r("44ad"),l=r("1d80");i.exports=function(c){return s(l(c))}}),fdbc:(function(i,a){i.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}}),fdbf:(function(i,a,r){var s=r("4930");i.exports=s&&!Symbol.sham&&typeof Symbol.iterator=="symbol"})}).default})})(yr)),yr.exports}var Iu=Ou();const Nu=Ls(Iu),Ai=ws("testResults",()=>{const e=gn({}),t=gn({}),n=gn({}),o=gn({});function i(s){for(const[l,c]of Object.entries(s))e[l]=c.status,t[l]=c.message||"",n[l]=c.time?new Date(c.time).toLocaleString():"",o[l]=c.latency||0}async function a(){try{const s=await Yt.get("/api/test/results");i(s)}catch{}}async function r(s){e[s]="testing",t[s]="";try{const l=await Yt.post("/api/test/proxy",{model:s});e[s]=l.status,t[s]=l.message||"",n[s]=new Date().toLocaleString(),o[s]=l.latency||0}catch(l){e[s]="error",t[s]=l.message,n[s]=new Date().toLocaleString(),o[s]=0}}return{modelStatus:e,modelMessage:t,modelTime:n,modelLatency:o,loadResults:a,testProxy:r}}),Cu={class:"card-header"},Au={class:"card-title"},xu={class:"provider-name"},Pu={class:"card-meta"},Du={class:"meta-row"},Ru=["title"],Mu={class:"meta-row"},Lu={class:"meta-value"},wu={key:0,class:"model-tags"},Vu=["onClick"],Fu={key:0,class:"badge-mark"},$u={key:1,class:"badge-mark"},Uu={key:1,class:"text-empty"},ju={class:"card-footer"},Bu=Jt({__name:"ProviderCard",props:{provider:{}},emits:["clone","delete","edit","open-models","copy-model"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Ai(),r=f=>f?f.length<=8?f:`${f.substring(0,6)}...${f.substring(f.length-4)}`:"-",s=Ht(()=>{const f=n.provider;return f.name||f.alias||r(f.apiKey||"")}),l=Pe(!1),c=async()=>{const f=n.provider.models;l.value=!0;try{await Promise.all(f.map(p=>a.testProxy(p.modelName)));const u=f.filter(p=>a.modelStatus[p.modelName]==="ok").length;i(`${s.value}: ${u}/${f.length} 个模型通过`,u===f.length?"success":"error")}catch{i("测试出错","error")}finally{l.value=!1}};return(f,u)=>{const p=J("el-tag"),d=J("el-icon"),m=J("el-button"),h=J("el-card");return te(),Me(h,{shadow:"never",class:"provider-card"},{header:M(()=>[K("div",Cu,[K("div",Au,[K("span",xu,Te(s.value),1),e.provider.alias&&e.provider.name!==e.provider.alias?(te(),Me(p,{key:0,type:"info",size:"small"},{default:M(()=>[ae(Te(e.provider.alias),1)]),_:1})):tt("",!0)]),P(d,{class:"drag-hint-icon"},{default:M(()=>[P(q(Fs))]),_:1})])]),default:M(()=>[K("div",Pu,[K("div",Du,[u[6]||(u[6]=K("span",{class:"meta-label"},"接口地址",-1)),K("span",{class:"meta-value",title:e.provider.apiBase},Te(e.provider.apiBase||"-"),9,Ru)]),K("div",Mu,[u[7]||(u[7]=K("span",{class:"meta-label"},"密钥",-1)),K("span",Lu,Te(r(e.provider.apiKey||"")),1)])]),e.provider.models.length?(te(),Be("div",wu,[(te(!0),Be(Bo,null,ko(e.provider.models,v=>(te(),Be("span",{key:v.modelName,class:Vs(["model-tag",{ok:q(a).modelStatus[v.modelName]==="ok",error:q(a).modelStatus[v.modelName]==="error"}]),onClick:fo(g=>o("copy-model",v.modelName),["stop"])},[ae(Te(v.modelName)+" ",1),q(a).modelStatus[v.modelName]==="ok"?(te(),Be("span",Fu,"✓")):tt("",!0),q(a).modelStatus[v.modelName]==="error"?(te(),Be("span",$u,"✗")):tt("",!0)],10,Vu))),128))])):(te(),Be("div",Uu,"暂无模型")),K("div",ju,[K("span",{class:"model-count",onClick:u[0]||(u[0]=fo(v=>o("open-models"),["stop"]))},Te(e.provider.models.length)+" 个模型",1),K("div",{class:"card-actions",onClick:u[5]||(u[5]=fo(()=>{},["stop"]))},[P(m,{size:"small",loading:l.value,disabled:l.value||!e.provider.models.length,onClick:c},{default:M(()=>[ae(Te(l.value?"测试中...":"一键测试"),1)]),_:1},8,["loading","disabled"]),P(m,{size:"small",onClick:u[1]||(u[1]=v=>o("clone"))},{default:M(()=>[...u[8]||(u[8]=[ae("复制",-1)])]),_:1}),P(m,{size:"small",onClick:u[2]||(u[2]=v=>o("delete"))},{default:M(()=>[...u[9]||(u[9]=[ae("删除",-1)])]),_:1}),P(m,{size:"small",onClick:u[3]||(u[3]=v=>o("open-models"))},{default:M(()=>[...u[10]||(u[10]=[ae("模型",-1)])]),_:1}),P(m,{size:"small",onClick:u[4]||(u[4]=v=>o("edit"))},{default:M(()=>[...u[11]||(u[11]=[ae("编辑",-1)])]),_:1})])])]),_:1})}}}),ku=cn(Bu,[["__scopeId","data-v-e96d8595"]]),Co=[{id:"deepseek",name:"DeepSeek(按量 API)",alias:"ds",website:"https://platform.deepseek.com",keyUrl:"https://platform.deepseek.com/api_keys",keyNote:"登录 DeepSeek 开放平台 →「API keys」→ 创建。官方原生支持 Anthropic 协议:本模板已指向 Anthropic 兼容地址(api.deepseek.com/anthropic),配合 Claude Code 等客户端可原生保留缓存控制。同一把 Key 也可改用 OpenAI 协议地址 https://api.deepseek.com。",apiBase:"https://api.deepseek.com/anthropic",autoV1:!1,protocol:"anthropic",presetModels:["deepseek-v4-pro","deepseek-v4-flash"]},{id:"kimi",name:"月之暗面 Kimi(按量 API)",alias:"kimi",website:"https://platform.kimi.com",keyUrl:"https://platform.kimi.com/console/api-keys",keyNote:"登录 Kimi 开放平台 →「API Key 管理」→ 新建。本模板指向 Anthropic 兼容地址(api.moonshot.cn/anthropic),配合 Claude Code 使用;1M 上下文模型名需加 [1m] 后缀(如 kimi-k3[1m])。同一把 Key 也可改用 OpenAI 协议地址 https://api.moonshot.cn/v1。",apiBase:"https://api.moonshot.cn/anthropic",autoV1:!1,protocol:"anthropic",presetModels:["kimi-k3","kimi-k2.7-code"]},{id:"zhipu",name:"智谱 GLM(按量 API)",alias:"zhipu",website:"https://open.bigmodel.cn",keyUrl:"https://bigmodel.cn/usercenter/proj-mgmt/apikeys",keyNote:"登录智谱开放平台 →「API Keys」→ 创建。按量付费用此 Key + 本模板地址(OpenAI 兼容 /api/paas/v4)。若购买的是 Coding Plan 套餐,请改用下方「智谱 GLM(Coding Plan)」模板——套餐 Key 与按量 Key 不通用。",apiBase:"https://open.bigmodel.cn/api/paas/v4",autoV1:!1,protocol:"openai",presetModels:["glm-5.3","glm-5.3-flash"]},{id:"zhipu-coding",name:"智谱 GLM(Coding Plan)",alias:"zhipu-code",website:"https://bigmodel.cn/coding-plan/personal/overview",keyUrl:"https://bigmodel.cn/coding-plan/personal/overview",keyNote:"Coding Plan 套餐专用:Key 在套餐页面单独获取,与按量付费 Key 不通用。本模板指向套餐 Anthropic 端点(/api/anthropic),供 Claude Code 等客户端使用;注意地址填错会把套餐额度按按量计费扣费。",apiBase:"https://open.bigmodel.cn/api/anthropic",autoV1:!1,protocol:"anthropic",presetModels:["glm-5.3","glm-5.3-flash"]},{id:"ark",name:"火山方舟(按量 API)",alias:"ark",website:"https://console.volcengine.com/ark",keyUrl:"https://console.volcengine.com/ark/region:cn-beijing/apikey",keyNote:"火山方舟控制台 →「API Key 管理」→ 创建。API Key 鉴权可直接填模型名(如 doubao-seed-2.1-turbo);若使用 Access Key 鉴权则需填推理接入点 ID(ep-xxx)。购买 Coding Plan 套餐请改用下方「火山方舟(Coding Plan)」模板。",apiBase:"https://ark.cn-beijing.volces.com/api/v3",autoV1:!1,protocol:"openai"},{id:"ark-coding",name:"火山方舟(Coding Plan)",alias:"ark-code",website:"https://console.volcengine.com/ark",keyUrl:"https://console.volcengine.com/ark/region:cn-beijing/apikey",keyNote:"Coding Plan 套餐专用端点(/api/coding/v3),模型直接填模型名(如 ark-code-latest 自动切换、doubao-seed-evolving、glm-5.3、deepseek-v4-flash 等),无需接入点。注意:误用按量地址(/api/v3)会把套餐额度按按量计费扣费。",apiBase:"https://ark.cn-beijing.volces.com/api/coding/v3",autoV1:!1,protocol:"openai",presetModels:["ark-code-latest","doubao-seed-evolving"]},{id:"dashscope",name:"阿里云百炼(按量 API)",alias:"ali",website:"https://bailian.console.aliyun.com",keyUrl:"https://bailian.console.aliyun.com/?apiKey=1",keyNote:"登录阿里云百炼控制台 →右上角「API-KEY」→ 创建。本模板为 OpenAI 兼容地址(旧域名,仍可用);开通 Token Plan / Coding Plan 套餐的用户请到对应套餐控制台获取专属 Key 和地址。",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1",autoV1:!1,protocol:"openai",presetModels:["qwen3.8-max","qwen3.7-plus"]},{id:"openai",name:"OpenAI(按量 API)",alias:"openai",website:"https://platform.openai.com",keyUrl:"https://platform.openai.com/api-keys",keyNote:"登录 OpenAI 平台 →「API keys」→ 创建新密钥。官方支持 /v1/chat/completions 与 /v1/responses 两种协议(不支持 Anthropic 协议)。",apiBase:"https://api.openai.com/v1",autoV1:!1,protocol:"openai",presetModels:["gpt-5.6-sol","gpt-5.5"]},{id:"st",name:"商汤",alias:"st",website:"https://senseaudio.cn/login?inviteCode=X5VH5PZY",apiBase:"https://api.senseaudio.cn",autoV1:!0,protocol:"openai",presetModels:["glm-5.3-flash","deepseek-v4-pro-0813","deepseek-v4-flash-0731"]},{id:"custom",name:"自定义 / OpenAI 兼容中转",alias:"",keyNote:"不使用模板预填,按中转站文档填写即可;协议拿不准先用「测试」验证。",apiBase:"",autoV1:!0,protocol:"openai"}];function Xu(e){const{toast:t}=un(),n=Pe(!1),o=Pe(null),i=gn({}),a=()=>{for(const f of Object.keys(i))delete i[f]},r=()=>{o.value=null},s=async()=>{const f=e.api_key.trim(),u=e.api_base.trim();if(!(!f||!u)){o.value={loading:!0};try{const p=await Yt.post("/api/test",{api_base:u,api_key:f,protocol:e.protocol,autoV1:e.autoV1});p.status==="ok"?(o.value={loading:!1,status:"ok",msg:`连接成功 (${p.models??0} 个模型)`},t("连接成功","success")):(o.value={loading:!1,status:"fail",msg:p.message},t(`连接失败: ${p.message}`,"error"))}catch(p){o.value={loading:!1,status:"fail",msg:p.message},t(p.message,"error")}}},l=async f=>{i[f.full_name]={loading:!0};try{const u=await Yt.post("/api/test/model",{model:f.upstream,api_base:e.api_base.trim(),api_key:e.api_key.trim(),protocol:f.protocol||e.protocol,autoV1:e.autoV1});i[f.full_name]={loading:!1,status:u.status==="ok"?"ok":"fail",msg:u.status==="ok"&&u.latency!=null?`${u.message} · ${u.latency}ms`:u.message,request:u.request,response:u.response},t(u.status==="ok"?"模型可用":`模型不可用: ${u.message}`,u.status==="ok"?"success":"error")}catch(u){i[f.full_name]={loading:!1,status:"fail",msg:u.message},t(u.message,"error")}};return{testingAll:n,keyStatus:o,modelTest:i,testKey:s,testModel:l,testAll:async()=>{const f=[...e.models];if(f.length){n.value=!0;try{await Promise.all(f.map(u=>l(u)))}finally{n.value=!1}}},clearModelTest:a,resetKeyStatus:r}}const Ku={key:0,class:"detail-body"},Gu={class:"detail-head"},Hu={class:"detail-name"},Wu={class:"muted-sm"},Yu={class:"detail-pre"},zu={class:"detail-pre"},Ju=Jt({__name:"TestDetailDialog",props:{modelValue:{type:Boolean},detail:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=e,o=t,i=Pe("request");Xo(()=>n.modelValue,r=>{r&&(i.value="request")});const a=r=>{if(r==null)return"(无)";try{const s=new WeakSet;return JSON.stringify(r,(l,c)=>{if(c&&typeof c=="object"){if(s.has(c))return"[circular]";s.add(c)}return c},2)}catch{return String(r)}};return(r,s)=>{const l=J("el-tag"),c=J("el-tab-pane"),f=J("el-tabs"),u=J("el-button"),p=J("el-dialog");return te(),Me(p,{"model-value":e.modelValue,title:"测试详情",width:"900px",top:"5vh","align-center":"","append-to-body":"","onUpdate:modelValue":s[2]||(s[2]=d=>o("update:modelValue",d))},{footer:M(()=>[P(u,{type:"primary",onClick:s[1]||(s[1]=d=>o("update:modelValue",!1))},{default:M(()=>[...s[3]||(s[3]=[ae("关闭",-1)])]),_:1})]),default:M(()=>[e.detail?(te(),Be("div",Ku,[K("div",Gu,[K("span",Hu,Te(e.detail.name),1),P(l,{type:e.detail.status==="ok"?"success":"danger",size:"small"},{default:M(()=>[ae(Te(e.detail.status==="ok"?"成功":"失败"),1)]),_:1},8,["type"]),K("span",Wu,Te(e.detail.msg),1)]),P(f,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=d=>i.value=d)},{default:M(()=>[P(c,{label:"请求参数 (Request)",name:"request"},{default:M(()=>[K("pre",Yu,Te(a(e.detail.request)),1)]),_:1}),P(c,{label:"响应数据 (Response)",name:"response"},{default:M(()=>[K("pre",zu,Te(a(e.detail.response)),1)]),_:1})]),_:1},8,["modelValue"])])):tt("",!0)]),_:1},8,["model-value"])}}}),Qu=cn(Ju,[["__scopeId","data-v-08dfa117"]]),Zu={class:"protocol-help"},_u={class:"help-item"},qu={class:"help-title"},ef={class:"help-item"},tf={class:"help-title"},nf={class:"help-item"},rf={class:"help-title"},of={class:"help-item"},af=Jt({__name:"ProtocolHelpDialog",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(e,{emit:t}){const n=t,o=[{client:"Claude Code",endpoint:"/v1/messages",note:"Anthropic 协议入口;上游优先选 Anthropic Messages(官方支持时),缓存/思维链原生保留"},{client:"Codex CLI",endpoint:"/v1/chat/completions",note:"OpenAI Chat 协议入口;上游协议随意,网关自动转换"},{client:"其他 OpenAI SDK / 工具",endpoint:"/v1/chat/completions",note:"OpenAI Chat 协议入口(chat/completions 是事实标准)"}];return(i,a)=>{const r=J("el-tag"),s=J("el-divider"),l=J("el-table-column"),c=J("el-table"),f=J("el-button"),u=J("el-dialog");return te(),Me(u,{"model-value":e.modelValue,title:"上游协议怎么选?",width:"760px","align-center":"","append-to-body":"","onUpdate:modelValue":a[1]||(a[1]=p=>n("update:modelValue",p))},{footer:M(()=>[P(f,{type:"primary",onClick:a[0]||(a[0]=p=>n("update:modelValue",!1))},{default:M(()=>[...a[15]||(a[15]=[ae("我知道了",-1)])]),_:1})]),default:M(()=>[K("div",Zu,[a[13]||(a[13]=K("p",{class:"help-intro"}," 协议就是上游 API「说话的格式」——同样的模型,接口路径、请求和响应的字段都不一样。选错格式,请求会直接失败。 ",-1)),K("div",_u,[K("div",qu,[a[3]||(a[3]=ae("OpenAI Chat Completions ",-1)),P(r,{size:"small",type:"primary"},{default:M(()=>[...a[2]||(a[2]=[ae("最常用",-1)])]),_:1})]),a[4]||(a[4]=K("p",null,"业界事实标准。DeepSeek、通义、Kimi、智谱、火山方舟等绝大多数国内外厂商,以及各类 OpenAI 兼容中转站,都用这套格式。",-1))]),K("div",ef,[K("div",tf,[a[6]||(a[6]=ae("Anthropic Messages ",-1)),P(r,{size:"small",type:"success"},{default:M(()=>[...a[5]||(a[5]=[ae("推荐优先",-1)])]),_:1})]),a[7]||(a[7]=K("p",null,[ae(" Claude 官方格式,以 /v1/messages 为标志。DeepSeek 官方 API 等少数厂商原生支持。 "),K("strong",null,"如果上游官方支持,优先选它"),ae("——尤其在 Claude Code 这类客户端场景下,能原生保留缓存控制(省 token 费用)、思维链等能力,避免协议来回转换造成损耗。 ")],-1))]),K("div",nf,[K("div",rf,[a[9]||(a[9]=ae("OpenAI Responses ",-1)),P(r,{size:"small",type:"info"},{default:M(()=>[...a[8]||(a[8]=[ae("小众",-1)])]),_:1})]),a[10]||(a[10]=K("p",null,"OpenAI 官方推出的新一代接口(/v1/responses),目前基本只有 OpenAI 自家在用。",-1))]),P(s),K("div",of,[a[11]||(a[11]=K("div",{class:"help-title"},"常用客户端对照表",-1)),a[12]||(a[12]=K("p",{class:"help-table-note"},"客户端接入本网关后用哪个入口,是客户端自己的属性,与上游协议选择无关;网关负责两边互转。",-1)),P(c,{data:o,size:"small",border:"",class:"help-table"},{default:M(()=>[P(l,{prop:"client",label:"客户端",width:"150"}),P(l,{prop:"endpoint",label:"网关入口",width:"190"}),P(l,{prop:"note",label:"说明","min-width":"220"})]),_:1})]),a[14]||(a[14]=K("div",{class:"help-item"},[K("div",{class:"help-title"},"还是拿不准?"),K("p",null,"先选 OpenAI Chat Completions,添加模型后用「测试」按钮验证:成功即选对;报 404 / format 类错误时,换 Anthropic Messages 再试。")],-1))])]),_:1},8,["model-value"])}}}),sf=cn(af,[["__scopeId","data-v-2248b61a"]]),lf={class:"full-width mb-8"},cf={class:"flex-gap-8 mb-8"},uf={class:"model-select-wrap"},ff={class:"muted-13"},df={key:0,class:"muted-12"},pf=Jt({__name:"ProviderModelEditor",props:{form:{},modelTest:{},testingAll:{type:Boolean},editingName:{}},emits:["test-model","test-all","show-test-detail"],setup(e,{expose:t,emit:n}){const o=e,i=n,{toast:a}=un(),r=Pe([]),s=Pe([]),l=Ht(()=>r.value.filter(v=>!o.form.models.some(g=>g.full_name===(o.form.alias.trim()?`${o.form.alias.trim()}/${v}`:v)))),c=()=>{const v=o.form.alias.trim();for(const g of s.value){const y=g.trim();if(!y)continue;r.value.includes(y)||r.value.push(y);let I=v?`${v}/${y}`:y,S=2;for(;o.form.models.some(C=>C.full_name===I);)I=`${v?`${v}/`:""}${y}-${S}`,S+=1;o.form.models.push({full_name:I,upstream:y,protocol:o.form.protocol})}s.value=[]},f=v=>{o.form.models.splice(v,1)};t({loadCachedModels:async v=>{const g=await Yt.get(`/api/test/models-cache/${encodeURIComponent(v)}`).catch(()=>({models:[]}));r.value=g.models||[]},addPresetModels:v=>{r.value=[...v],s.value=[...v],c()},resetState:()=>{r.value=[],s.value=[]}});const m=Pe(!1),h=async()=>{var v;m.value=!0;try{const g=o.editingName!=null?o.editingName:`new::${o.form.api_base.trim()}`,y=await Yt.post("/api/test/fetch-models",{api_base:o.form.api_base.trim(),api_key:o.form.api_key.trim(),keyId:g,protocol:o.form.protocol,autoV1:o.form.autoV1});y.status==="ok"&&((v=y.models)==null?void 0:v.length)>0?(r.value=[...new Set([...r.value,...y.models])],a(`已获取 ${y.models.length} 个模型`,"success")):/404/.test(y.message||"")?a("该上游不支持获取模型列表(404),请手动输入模型名,或到官网文档查看支持的模型","error"):a(y.message||"未获取到模型","error")}catch(g){a(g.message,"error")}finally{m.value=!1}};return(v,g)=>{const y=J("el-icon"),I=J("el-tooltip"),S=J("el-alert"),C=J("el-option"),A=J("el-select"),B=J("el-button"),w=J("el-table-column"),O=J("el-input"),L=J("el-link"),j=J("el-table"),R=J("el-form-item");return te(),Me(R,{prop:"models"},{label:M(()=>[g[2]||(g[2]=K("span",null,"模型列表",-1)),P(I,{placement:"top",content:"这家供应商下你要用哪些模型。至少添加一个才能保存;客户端请求时填「模型全名」即可路由到这里。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(()=>[K("div",lf,[P(S,{type:"info",closable:!1,"show-icon":"",title:"此处测试为直连上游(不经过网关),仅验证连通性;保存后可在列表卡片中测试完整代理链路。"})]),K("div",cf,[K("div",uf,[P(A,{modelValue:s.value,"onUpdate:modelValue":g[0]||(g[0]=E=>s.value=E),multiple:"","collapse-tags":"",filterable:"","allow-create":"","default-first-option":"",placeholder:"搜索或输入模型名"},{default:M(()=>[(te(!0),Be(Bo,null,ko(l.value,E=>(te(),Me(C,{key:E,label:E,value:E},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),P(B,{onClick:c,disabled:!s.value.length},{default:M(()=>[...g[3]||(g[3]=[ae("添加",-1)])]),_:1},8,["disabled"]),P(B,{loading:m.value,disabled:!e.form.api_base||!e.form.api_key,onClick:h},{default:M(()=>[ae(Te(m.value?"":"获取模型列表"),1)]),_:1},8,["loading","disabled"]),P(B,{loading:e.testingAll,disabled:!e.form.models.length||!e.form.api_base||!e.form.api_key,onClick:g[1]||(g[1]=E=>i("test-all"))},{default:M(()=>[ae(Te(e.testingAll?"":"测试全部"),1)]),_:1},8,["loading","disabled"])]),P(j,{border:"",data:e.form.models,class:"full-width","empty-text":"暂无模型"},{default:M(()=>[P(w,{type:"index",label:"#",width:"50",align:"center"}),P(w,{"min-width":"260"},{header:M(()=>[g[4]||(g[4]=K("span",{class:"col-help"},"模型全名(可编辑)",-1)),P(I,{placement:"top",content:"发请求时实际使用的模型名称(客户端填的 model 参数),默认 = 别名/上游模型名,可自由修改;全局唯一,点击可复制。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(({row:E})=>[P(O,{modelValue:E.full_name,"onUpdate:modelValue":N=>E.full_name=N},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),P(w,{prop:"upstream","min-width":"180"},{header:M(()=>[g[5]||(g[5]=K("span",{class:"col-help"},"上游模型",-1)),P(I,{placement:"top",content:"供应商 API 真实的模型标识(如 deepseek-chat、gpt-4o),请求会被转发给这个模型;同一上游模型可添加多次(如配不同协议),但模型全名不能重复。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(({row:E})=>[K("span",ff,Te(E.upstream),1)]),_:1}),P(w,{width:"230"},{header:M(()=>[g[6]||(g[6]=K("span",{class:"col-help"},"上游协议",-1)),P(I,{placement:"top",content:"请求该模型时使用的 API 格式,默认继承上方供应商协议;个别模型可单独改(如同一供应商既有 OpenAI 风格又有 Anthropic 风格的模型)。"},{default:M(()=>[P(y,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(({row:E})=>[P(A,{modelValue:E.protocol,"onUpdate:modelValue":N=>E.protocol=N,class:"full-width",size:"small"},{default:M(()=>[P(C,{label:"Anthropic Messages",value:"anthropic"}),P(C,{label:"OpenAI Chat Completions",value:"openai"}),P(C,{label:"OpenAI Responses",value:"openai-responses"})]),_:1},8,["modelValue","onUpdate:modelValue"])]),_:1}),P(w,{label:"测试结果(直连)",width:"200",align:"center"},{default:M(({row:E})=>{var N,V;return[(N=e.modelTest[E.full_name])!=null&&N.loading?(te(),Be("span",df,"测试中...")):(V=e.modelTest[E.full_name])!=null&&V.status?(te(),Me(L,{key:1,type:e.modelTest[E.full_name].status==="ok"?"success":"danger",class:"test-result-link",onClick:F=>i("show-test-detail",E.full_name)},{default:M(()=>[ae(Te(e.modelTest[E.full_name].msg),1)]),_:2},1032,["type","onClick"])):tt("",!0)]}),_:1}),P(w,{width:"140",align:"center",label:"操作"},{default:M(({row:E})=>{var N;return[P(B,{link:"",loading:(N=e.modelTest[E.full_name])==null?void 0:N.loading,disabled:!e.form.api_base||!e.form.api_key,onClick:V=>i("test-model",E)},{default:M(()=>[...g[7]||(g[7]=[ae("测试",-1)])]),_:1},8,["loading","disabled","onClick"]),P(B,{link:"",type:"danger",onClick:V=>f(e.form.models.indexOf(E))},{default:M(()=>[...g[8]||(g[8]=[ae("删除",-1)])]),_:1},8,["onClick"])]}),_:1})]),_:1},8,["data"])]),_:1})}}}),hf=cn(pf,[["__scopeId","data-v-e64a6809"]]),mf={class:"dialog-body"},vf={class:"flex-gap-8 full-width"},gf={class:"full-url-toggle label-inline-toggle"},yf={key:0,class:"muted-sm"},Ef={key:0,class:"mt-4"},Sf={key:0,class:"test-ok-text"},bf={key:1,class:"test-fail-text"},Tf={key:1,class:"muted-sm"},Of={class:"flex-gap-8 flex-center"},If=Jt({__name:"ProviderModal",props:{editName:{},provider:{},cloneOf:{}},emits:["close","saved"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Ko(),r=Pe(n.editName),s=Ht(()=>n.editName!=null),l=Pe(""),c=Ht(()=>Co.find(X=>X.id===l.value)),f=X=>{var ue;const D=Co.find(Y=>Y.id===X);D&&(d.name=D.name,d.alias=D.alias,d.website=D.website||"",d.api_base=D.apiBase,d.autoV1=D.autoV1,d.protocol=D.protocol,(ue=D.presetModels)!=null&&ue.length&&!d.models.length&&w(D.presetModels))},u=()=>{var D;const X=(D=c.value)==null?void 0:D.keyUrl;X&&window.open(X,"_blank","noopener")},p=()=>{const X=d.website.trim();X&&R(X)&&window.open(X,"_blank","noopener")},d=gn({name:"",alias:"",website:"",api_base:"",protocol:"anthropic",api_key:"",autoV1:!0,models:[]}),{testingAll:m,keyStatus:h,modelTest:v,testKey:g,testModel:y,testAll:I,clearModelTest:S,resetKeyStatus:C}=Xu(d),A=Pe(null),B=X=>{var D;return(D=A.value)==null?void 0:D.loadCachedModels(X)},w=X=>{var D;return(D=A.value)==null?void 0:D.addPresetModels(X)},O=()=>{var X;return(X=A.value)==null?void 0:X.resetState()},L=Pe(),j=Pe(!1),R=X=>{try{const D=new URL(X);return D.protocol==="http:"||D.protocol==="https:"}catch{return!1}},E=(X,D,ue)=>{!D||R(D)?ue():ue(new Error("请输入有效的 URL(以 http:// 或 https:// 开头)"))},N={name:[{required:!0,message:"请输入供应商名称",trigger:"blur"}],alias:[{required:!0,message:"请输入供应商英文名称(别名)",trigger:"blur"}],website:[{validator:E,trigger:"blur"}],api_base:[{required:!0,message:"请输入请求地址 (API Base)",trigger:"blur"},{validator:E,trigger:"blur"}],api_key:[{required:!0,message:"请输入 API Key",trigger:"blur"}]},V={anthropic:"/messages",openai:"/chat/completions","openai-responses":"/responses"},F=Ht(()=>{const X=d.api_base.trim().replace(/\/+$/,"");if(!X)return"";const D=V[d.protocol]||"";return d.autoV1&&!/\/v\d+$/i.test(X)?`${X}/v1${D}`:`${X}${D}`}),U=()=>{var X;Object.assign(d,{name:"",alias:"",website:"",api_base:"",protocol:"anthropic",api_key:"",autoV1:!0,models:[]}),(X=L.value)==null||X.clearValidate(),l.value="",O(),C(),S(),ce.value=!1,ge.value=null},z=async()=>{var D,ue;U();const X=n.provider;if(n.editName!=null&&X)await B(X.name),Object.assign(d,{name:X.name||"",alias:X.alias||"",website:X.website||"",api_base:X.apiBase||"",protocol:X.customLlmProvider||"anthropic",api_key:X.apiKey||"",autoV1:X.autoV1!==!1,models:X.models.map(Y=>({full_name:Y.modelName,upstream:Y.model,protocol:Y.customLlmProvider||X.customLlmProvider||"anthropic"}))});else if(n.cloneOf){const Y=n.cloneOf;Y.name&&await B(Y.name);const Oe=(D=Y.alias)==null?void 0:D.trim(),be=Oe?`${Oe}-copy`:"copy",Je=`${((ue=Y.name)==null?void 0:ue.trim())||Oe||"供应商"}副本`;Object.assign(d,{name:Je,alias:be,website:Y.website||"",api_base:Y.apiBase||"",protocol:Y.customLlmProvider||"anthropic",api_key:Y.apiKey||"",autoV1:Y.autoV1!==!1,models:(Y.models||[]).map(Le=>{let we=Le.modelName;return Oe&&we.startsWith(`${Oe}/`)&&(we=`${be}/${we.slice(Oe.length+1)}`),{full_name:we,upstream:Le.model,protocol:Le.customLlmProvider||Y.customLlmProvider||"anthropic"}})})}};la(()=>{r.value=n.editName,z()}),Xo(()=>n.editName,async X=>{r.value=X,await z()});const ce=Pe(!1),Se=Pe(!1),ge=Pe(null),Ee=X=>{const D=v[X];!D||D.loading||(ge.value={name:X,status:D.status||"",msg:D.msg||"",request:D.request,response:D.response},ce.value=!0)},Ae=async()=>{var vt;if(!await((vt=L.value)==null?void 0:vt.validate().catch(()=>!1))||!d.models.length)return;const D=d.models.map(ne=>({full_name:ne.full_name.trim(),upstream:ne.upstream.trim(),protocol:ne.protocol||d.protocol})).filter(ne=>ne.full_name);if(!D.length){i("请至少填写一个有效的模型名称","error");return}const ue=d.name.trim(),Y=d.alias.trim(),Oe=d.website.trim(),be=d.api_base.trim(),Je=d.api_key.trim(),Le=a.suppliers.filter(ne=>ne.name!==r.value);if(Le.some(ne=>ne.name===ue)){i(`供应商名称已存在: ${ue}`,"error");return}if(Y&&Le.some(ne=>(ne.alias??"").trim()===Y)){i(`供应商别名已存在: ${Y}`,"error");return}const we={name:ue,...Y?{alias:Y}:{},...Oe?{website:Oe}:{},customLlmProvider:d.protocol,apiKey:Je,apiBase:be,...d.autoV1?{}:{autoV1:!1},models:D.map(ne=>({modelName:ne.full_name,model:ne.upstream,...ne.protocol&&ne.protocol!==d.protocol?{customLlmProvider:ne.protocol}:{}}))};if(we.models.some(ne=>ne.model.includes("/"))){i("上游模型名不得包含 /","error");return}const Ie=[...Le.flatMap(ne=>ne.models.map(re=>re.modelName)),...D.map(ne=>ne.full_name)],Fe=new Set;for(const ne of Ie){if(Fe.has(ne)){i(`模型名称重复: ${ne}`,"error");return}Fe.add(ne)}j.value=!0;try{const ne=r.value==null,re=await a.saveProviders(ne?[we,...Le]:[...Le,we]);ne&&a.moveProviderToTop(ue),i(re.message||"供应商已保存","success"),o("saved")}catch(ne){i(ne.message,"error")}finally{j.value=!1}};return(X,D)=>{const ue=J("el-alert"),Y=J("el-option"),Oe=J("el-select"),be=J("el-form-item"),Je=J("el-icon"),Le=J("el-tooltip"),we=J("el-input"),Ie=J("el-button"),Fe=J("el-switch"),vt=J("el-form"),ne=J("el-dialog");return te(),Me(ne,{"model-value":!0,title:r.value?"编辑供应商":"添加供应商",width:"1200px",top:"3vh","align-center":"","close-on-click-modal":!1,onClose:D[12]||(D[12]=re=>o("close"))},{footer:M(()=>[K("div",Of,[P(Ie,{onClick:D[11]||(D[11]=re=>o("close")),disabled:j.value},{default:M(()=>[...D[27]||(D[27]=[ae(" 取消 ",-1)])]),_:1},8,["disabled"]),P(Ie,{type:"primary",loading:j.value,onClick:Ae,disabled:!d.models.length||!d.api_base||!d.api_key||j.value},{default:M(()=>[ae(Te(j.value?"保存中...":r.value?"保存":"添加供应商"),1)]),_:1},8,["loading","disabled"])])]),default:M(()=>[K("div",mf,[!s.value&&!n.cloneOf?(te(),Me(ue,{key:0,class:"mb-16",type:"info",closable:!1,"show-icon":"",title:"添加流程:选模板 → 去平台创建 API Key → 粘贴 Key → 测试 → 保存。全新手建议从「供应商模板」开始。"})):tt("",!0),P(vt,{ref_key:"formRef",ref:L,model:d,rules:N,"label-position":"top"},{default:M(()=>[!s.value&&!n.cloneOf?(te(),Me(be,{key:0,label:"供应商模板"},{default:M(()=>[K("div",vf,[P(Oe,{modelValue:l.value,"onUpdate:modelValue":D[0]||(D[0]=re=>l.value=re),class:"full-width",placeholder:"选择模板快速填充,或选「自定义」手动填写",onChange:f},{default:M(()=>[(te(!0),Be(Bo,null,ko(q(Co),re=>(te(),Me(Y,{key:re.id,label:re.name,value:re.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),D[13]||(D[13]=K("div",{class:"muted-sm"},"内置常用厂商的地址和配置,选中后自动填充下方所有字段,仍可自由修改",-1))]),_:1})):tt("",!0),P(be,{prop:"name"},{label:M(()=>[D[14]||(D[14]=K("span",null,"供应商名称",-1)),P(Le,{placement:"top",content:"给你接入的 AI 服务起个名字,只在管理界面显示,随便起(如:DeepSeek、公司中转、朋友的号)。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(()=>[P(we,{modelValue:d.name,"onUpdate:modelValue":D[1]||(D[1]=re=>d.name=re),modelModifiers:{trim:!0},placeholder:"如:DeepSeek(仅用于界面展示)"},null,8,["modelValue"])]),_:1}),P(be,{prop:"alias"},{label:M(()=>[D[15]||(D[15]=K("span",null,"供应商英文名称(别名)",-1)),P(Le,{placement:"top",content:"模型名的统一前缀。添加模型后名字会变成 前缀/模型名(如 ds/deepseek-chat),客户端选择模型时一眼能看出属于哪家。仅限英文小写。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1})]),default:M(()=>[P(we,{modelValue:d.alias,"onUpdate:modelValue":D[2]||(D[2]=re=>d.alias=re),modelModifiers:{trim:!0},placeholder:"如:ds"},null,8,["modelValue"]),D[16]||(D[16]=K("div",{class:"muted-sm"},"添加模型时的默认名称前缀,如 ds/deepseek-chat",-1))]),_:1}),P(be,{prop:"website"},{label:M(()=>[D[18]||(D[18]=K("span",null,"官网链接",-1)),P(Le,{placement:"top",content:"选填。方便以后回来查文档、看模型列表;填了之后这里会出现「打开链接」按钮。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1}),d.website?(te(),Me(Ie,{key:0,class:"label-action-btn",link:"",type:"primary",onClick:p},{default:M(()=>[...D[17]||(D[17]=[ae("打开链接",-1)])]),_:1})):tt("",!0)]),default:M(()=>[P(we,{modelValue:d.website,"onUpdate:modelValue":D[3]||(D[3]=re=>d.website=re),modelModifiers:{trim:!0},placeholder:"https://platform.deepseek.com(可选)"},null,8,["modelValue"])]),_:1}),P(be,{prop:"api_base"},{label:M(()=>[D[20]||(D[20]=K("span",null,"请求地址 (API Base)",-1)),P(Le,{placement:"top",content:"网关往哪发请求。官方厂商在「API 文档」里找,通常长得像 https://api.xxx.com;中转站会直接给你这个地址。模板会自动填好。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1}),K("div",gf,[D[19]||(D[19]=K("span",{class:"muted-13"},"自动补全 /v1",-1)),P(Fe,{modelValue:d.autoV1,"onUpdate:modelValue":D[4]||(D[4]=re=>d.autoV1=re)},null,8,["modelValue"])])]),default:M(()=>[P(we,{modelValue:d.api_base,"onUpdate:modelValue":D[5]||(D[5]=re=>d.api_base=re),modelModifiers:{trim:!0},placeholder:"https://api.deepseek.com"},null,8,["modelValue"]),F.value?(te(),Be("div",yf," 实际请求地址:"+Te(F.value)+"(开启自动补全时,地址末尾无 /v1~v9 版本段会插入 /v1;上游无版本前缀请关闭) ",1)):tt("",!0)]),_:1}),P(be,null,{label:M(()=>[D[22]||(D[22]=K("span",null,"上游协议 (Protocol)",-1)),P(Ie,{class:"label-action-btn",link:"",type:"primary",onClick:D[6]||(D[6]=re=>Se.value=!0)},{default:M(()=>[...D[21]||(D[21]=[ae(" 如何选择 ",-1)])]),_:1})]),default:M(()=>[P(Oe,{modelValue:d.protocol,"onUpdate:modelValue":D[7]||(D[7]=re=>d.protocol=re)},{default:M(()=>[P(Y,{label:"Anthropic Messages",value:"anthropic"}),P(Y,{label:"OpenAI Chat Completions",value:"openai"}),P(Y,{label:"OpenAI Responses",value:"openai-responses"})]),_:1},8,["modelValue"]),D[23]||(D[23]=K("div",{class:"muted-sm protocol-hint"},"上游接口的 API 风格,选错会请求失败;拿不准时先用下方「测试」逐个验证。",-1))]),_:1}),P(be,{prop:"api_key"},{label:M(()=>{var re,xt;return[D[26]||(D[26]=K("span",null,"API Key",-1)),P(Le,{placement:"top",content:"你在上游平台的「钥匙」,证明请求是你发的、从你账户扣费。在平台控制台创建,形如 sk- 开头的一串字符,粘贴到这里即可。"},{default:M(()=>[P(Je,{class:"col-help-icon"},{default:M(()=>[P(q(Rt))]),_:1})]),_:1}),(re=c.value)!=null&&re.keyUrl?(te(),Me(Ie,{key:0,class:"label-action-btn",link:"",type:"primary",onClick:u},{default:M(()=>[...D[24]||(D[24]=[ae("获取 Key",-1)])]),_:1})):tt("",!0),P(Ie,{class:"label-action-btn",link:"",type:"primary",loading:(xt=q(h))==null?void 0:xt.loading,disabled:!d.api_base||!d.api_key,onClick:q(g)},{default:M(()=>[...D[25]||(D[25]=[ae("测试",-1)])]),_:1},8,["loading","disabled","onClick"])]}),default:M(()=>{var re;return[P(we,{modelValue:d.api_key,"onUpdate:modelValue":D[8]||(D[8]=xt=>d.api_key=xt),modelModifiers:{trim:!0},placeholder:"如:sk-xxxxxxxx(DeepSeek 开放平台密钥)",onKeyup:$s(q(g),["enter"])},null,8,["modelValue","onKeyup"]),q(h)&&!q(h).loading?(te(),Be("div",Ef,[q(h).status==="ok"?(te(),Be("span",Sf,Te(q(h).msg),1)):q(h).status==="fail"?(te(),Be("span",bf,Te(q(h).msg),1)):tt("",!0)])):tt("",!0),(re=c.value)!=null&&re.keyNote?(te(),Be("div",Tf,Te(c.value.keyNote),1)):tt("",!0)]}),_:1}),P(hf,{ref_key:"modelEditorRef",ref:A,form:d,"model-test":q(v),"testing-all":q(m),"editing-name":r.value,onTestModel:q(y),onTestAll:q(I),onShowTestDetail:Ee},null,8,["form","model-test","testing-all","editing-name","onTestModel","onTestAll"])]),_:1},8,["model"])]),P(Qu,{modelValue:ce.value,"onUpdate:modelValue":D[9]||(D[9]=re=>ce.value=re),detail:ge.value},null,8,["modelValue","detail"]),P(sf,{modelValue:Se.value,"onUpdate:modelValue":D[10]||(D[10]=re=>Se.value=re)},null,8,["modelValue"])]),_:1},8,["title"])}}}),Nf=cn(If,[["__scopeId","data-v-097689eb"]]),Cf={class:"models-dialog-body"},Af=["onClick"],xf={class:"muted-13"},Pf={key:3,class:"muted-disabled"},Df={key:0,class:"muted-12"},Rf={key:1,class:"muted-disabled"},Mf={key:0,class:"muted-12"},Lf={key:1,class:"muted-disabled"},wf=Jt({__name:"ProviderModelsDialog",props:{modelValue:{type:Boolean},providerName:{}},emits:["update:modelValue","copy-model","changed"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Ko(),r=Ai(),s=Ht(()=>n.providerName!=null?a.suppliers.find(f=>f.name===n.providerName):void 0),l=Ht(()=>{const f=s.value;return f?f.alias&&f.alias!==f.name?`${f.name}(${f.alias})`:f.name:""}),c=async f=>{try{await Ao.confirm(`确定删除模型 "${f}"?`,"确认删除",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await a.deleteModel(f),o("changed"),i("模型已删除","success")}catch(u){u!=="cancel"&&i(u.message,"error")}};return(f,u)=>{const p=J("el-alert"),d=J("el-table-column"),m=J("el-tag"),h=J("el-tooltip"),v=J("el-button"),g=J("el-table"),y=J("el-empty"),I=J("el-dialog");return te(),Me(I,{"model-value":e.modelValue,title:l.value,width:"1200px",top:"3vh","destroy-on-close":"","onUpdate:modelValue":u[0]||(u[0]=S=>o("update:modelValue",S))},{default:M(()=>[K("div",Cf,[s.value?(te(),Me(p,{key:0,class:"mb-8",type:"info",closable:!1,"show-icon":"",title:"测试走网关代理:请求经本网关转发至上游(含协议转换、计费记录),验证完整链路;编辑弹窗内测试为直连上游,仅验证连通性。"})):tt("",!0),s.value&&s.value.models.length?(te(),Me(g,{key:1,border:"",data:s.value.models,stripe:"",class:"models-table full-width"},{default:M(()=>[P(d,{prop:"modelName",label:"模型名称","min-width":"220"},{default:M(({row:S})=>[K("span",{class:"link-blue",onClick:C=>o("copy-model",S.modelName),title:"点击复制"},Te(S.modelName),9,Af)]),_:1}),P(d,{prop:"model",label:"上游模型","min-width":"180"},{default:M(({row:S})=>[K("span",xf,Te(S.model),1)]),_:1}),P(d,{prop:"customLlmProvider",label:"上游协议",width:"100",align:"center"},{default:M(({row:S})=>[P(m,{type:"info"},{default:M(()=>[ae(Te(S.customLlmProvider||s.value.customLlmProvider),1)]),_:2},1024)]),_:1}),P(d,{label:"状态",width:"150",align:"center"},{default:M(({row:S})=>[q(r).modelStatus[S.modelName]==="ok"?(te(),Me(m,{key:0,type:"success"},{default:M(()=>[...u[1]||(u[1]=[ae("通过",-1)])]),_:1})):q(r).modelStatus[S.modelName]==="error"?(te(),Me(h,{key:1,content:q(r).modelMessage[S.modelName],placement:"top","show-after":300},{default:M(()=>[P(m,{type:"danger",class:"error-tag"},{default:M(()=>[ae(Te(q(r).modelMessage[S.modelName]),1)]),_:2},1024)]),_:2},1032,["content"])):q(r).modelStatus[S.modelName]==="testing"?(te(),Me(m,{key:2,type:"warning"},{default:M(()=>[...u[2]||(u[2]=[ae("测试中",-1)])]),_:1})):(te(),Be("span",Pf,"-"))]),_:1}),P(d,{label:"耗时",width:"80",align:"center"},{default:M(({row:S})=>[q(r).modelLatency[S.modelName]?(te(),Be("span",Df,Te((q(r).modelLatency[S.modelName]/1e3).toFixed(1))+"s ",1)):(te(),Be("span",Rf,"-"))]),_:1}),P(d,{label:"上次测试","min-width":"160"},{default:M(({row:S})=>[q(r).modelTime[S.modelName]?(te(),Be("span",Mf,Te(q(r).modelTime[S.modelName]),1)):(te(),Be("span",Lf,"未测试"))]),_:1}),P(d,{label:"操作",width:"140",align:"center"},{default:M(({row:S})=>[P(v,{link:"",loading:q(r).modelStatus[S.modelName]==="testing",onClick:C=>q(r).testProxy(S.modelName)},{default:M(()=>[...u[3]||(u[3]=[ae(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),P(v,{link:"",type:"danger",onClick:C=>c(S.modelName)},{default:M(()=>[...u[4]||(u[4]=[ae(" 删除 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])):s.value?(te(),Me(y,{key:2,description:"暂无模型","image-size":64})):tt("",!0)])]),_:1},8,["model-value","title"])}}}),Vf=cn(wf,[["__scopeId","data-v-a79f8c7b"]]),Ff={class:"muted-sm mb-8"},$f={class:"flex-between"},Uf={class:"flex-gap-8"},jf=Jt({__name:"ConfigFileDialog",props:{modelValue:{type:Boolean}},emits:["update:modelValue","saved"],setup(e,{emit:t}){const n=e,o=t,{toast:i}=un(),a=Pe(""),r=Pe(""),s=Pe(!1);Xo(()=>n.modelValue,async f=>{if(f){a.value="";try{const u=await Yt.get("/api/config");a.value=JSON.stringify(u,null,2)+`
31
31
  `,r.value="ellm.config.json"}catch(u){i(u.message,"error")}}});const l=async()=>{try{await navigator.clipboard.writeText(a.value),i("已复制","success")}catch{i("复制失败","error")}},c=async()=>{s.value=!0;try{const f=JSON.parse(a.value),u=await Yt.put("/api/config",f);o("update:modelValue",!1),i(u.message||"配置已保存","success"),o("saved")}catch(f){f instanceof SyntaxError?i(`JSON 解析失败: ${f.message}`,"error"):i(f.message,"error")}finally{s.value=!1}};return(f,u)=>{const p=J("el-input"),d=J("el-button"),m=J("el-dialog");return te(),Me(m,{"model-value":e.modelValue,title:"配置文件",width:"800px",top:"5vh","destroy-on-close":"","onUpdate:modelValue":u[2]||(u[2]=h=>o("update:modelValue",h))},{footer:M(()=>[K("div",$f,[P(d,{onClick:l},{default:M(()=>[...u[3]||(u[3]=[ae("复制",-1)])]),_:1}),K("div",Uf,[P(d,{onClick:u[1]||(u[1]=h=>o("update:modelValue",!1))},{default:M(()=>[...u[4]||(u[4]=[ae("取消",-1)])]),_:1}),P(d,{type:"primary",loading:s.value,onClick:c},{default:M(()=>[...u[5]||(u[5]=[ae("保存并生效",-1)])]),_:1},8,["loading"])])])]),default:M(()=>[K("div",Ff," 配置文件:"+Te(r.value)+"(原样保存,校验通过后热更新生效) ",1),P(p,{type:"textarea",rows:24,modelValue:a.value,"onUpdate:modelValue":u[0]||(u[0]=h=>a.value=h),placeholder:"loading...",spellcheck:"false",class:"full-width"},null,8,["modelValue"])]),_:1},8,["model-value"])}}}),Bf={class:"flex-end mb-16"},kf={key:0,class:"loading-block"},Xf=Jt({__name:"ProvidersView",setup(e){const{toast:t}=un(),n=Ko(),o=Ai(),i=Pe(!1),a=Pe(null),r=Pe(null),s=Pe(!1),l=Pe(null),c=Pe(!1),f=Pe(null),u=Ht({get:()=>n.orderedProviders,set:R=>n.reorderProviders(R)});function p(){}const d=async()=>{await Promise.all([n.loadProviders(),o.loadResults()])},m=()=>{const R={version:2,exported_at:new Date().toISOString(),providers:n.suppliers},E=new Blob([JSON.stringify(R,null,2)],{type:"application/json"}),N=URL.createObjectURL(E),V=document.createElement("a");V.href=N,V.download=`ellm-providers-${new Date().toISOString().slice(0,10)}.json`,document.body.appendChild(V),V.click(),document.body.removeChild(V),URL.revokeObjectURL(N),t("已导出供应商配置","success")},h=()=>{var R;(R=f.value)==null||R.click()},v=R=>{var E,N;return R.customLlmProvider!==void 0||((N=(E=R.models)==null?void 0:E[0])==null?void 0:N.modelName)!==void 0?R:{name:String(R.name??""),...R.alias?{alias:String(R.alias)}:{},customLlmProvider:String(R.protocol??"openai"),...R.api_key?{apiKey:String(R.api_key)}:{},...R.api_base?{apiBase:String(R.api_base)}:{},models:(R.models??[]).map(V=>({modelName:String(V.full_name??""),model:String(V.upstream_model??V.full_name??""),...V.protocol&&V.protocol!==R.protocol?{customLlmProvider:String(V.protocol)}:{},...V.info!==void 0?{info:V.info}:{}}))}},g=async R=>{var V;const E=R.target,N=(V=E.files)==null?void 0:V[0];if(E.value="",!!N)try{const F=await N.text(),U=JSON.parse(F),z=Array.isArray(U)?U:Array.isArray(U.providers)?U.providers:Array.isArray(U.suppliers)?U.suppliers:null;if(!z){t("文件格式错误:未找到 providers","error");return}const ce=z.map(ge=>v(ge));await Ao.confirm(`确定导入 ${ce.length} 个供应商?将覆盖当前配置。`,"导入确认",{confirmButtonText:"导入",cancelButtonText:"取消",type:"warning"});const Se=await n.saveProviders(ce);await d(),t(Se.message||"导入成功","success")}catch(F){F!=="cancel"&&t(F.message||"导入失败","error")}},y=()=>{a.value=null,r.value=null,i.value=!0},I=R=>{a.value=R,r.value=null,i.value=!0},S=R=>{const E=n.suppliers.find(N=>N.name===R);E&&(a.value=null,r.value=E,i.value=!0)},C=()=>{i.value=!1,r.value=null},A=async()=>{i.value=!1,r.value=null,await d()},B=R=>R?R.length<=8?R:`${R.substring(0,6)}...${R.substring(R.length-4)}`:"-",w=R=>R.name||R.alias||B(R.apiKey||""),O=async R=>{try{const E=n.suppliers.find(N=>N.name===R);if(!E)return;await Ao.confirm(`确定删除该供应商(${w(E)})及其所有模型?`,"确认删除",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await n.deleteProvider(E),await d(),t("供应商已删除","success")}catch(E){E!=="cancel"&&t(E.message,"error")}},L=R=>{l.value=R,s.value=!0},j=async R=>{try{if(navigator.clipboard&&window.isSecureContext)await navigator.clipboard.writeText(R);else{const E=document.createElement("textarea");E.value=R,E.style.position="fixed",E.style.left="-9999px",document.body.appendChild(E),E.select(),document.execCommand("copy"),document.body.removeChild(E)}t(`已复制: ${R}`,"success")}catch{t("复制失败","error")}};return la(d),(R,E)=>{const N=J("el-icon"),V=J("el-button"),F=J("el-empty");return te(),Be("div",null,[K("div",Bf,[P(V,{onClick:m},{default:M(()=>[P(N,null,{default:M(()=>[P(q(Us))]),_:1}),E[4]||(E[4]=ae(" 导出 ",-1))]),_:1}),P(V,{onClick:h},{default:M(()=>[P(N,null,{default:M(()=>[P(q(js))]),_:1}),E[5]||(E[5]=ae(" 导入 ",-1))]),_:1}),P(V,{onClick:E[0]||(E[0]=U=>c.value=!0)},{default:M(()=>[P(N,null,{default:M(()=>[P(q(Bs))]),_:1}),E[6]||(E[6]=ae(" 配置文件 ",-1))]),_:1}),P(V,{type:"primary",onClick:y},{default:M(()=>[P(N,null,{default:M(()=>[P(q(ks))]),_:1}),E[7]||(E[7]=ae(" 添加供应商 ",-1))]),_:1})]),q(n).loading?(te(),Be("div",kf,"加载中...")):q(n).orderedProviders.length===0?(te(),Me(F,{key:1,description:"暂无供应商,点击上方按钮添加"})):(te(),Me(q(Nu),{key:2,modelValue:u.value,"onUpdate:modelValue":E[1]||(E[1]=U=>u.value=U),"item-key":"name",filter:".card-actions","prevent-on-filter":!1,"ghost-class":"ghost","drag-class":"dragging",class:"provider-grid",onChange:p},{item:M(({element:U})=>[P(ku,{provider:U,onClone:z=>S(U.name),onDelete:z=>O(U.name),onEdit:z=>I(U.name),onOpenModels:z=>L(U.name),onCopyModel:j},null,8,["provider","onClone","onDelete","onEdit","onOpenModels"])]),_:1},8,["modelValue"])),i.value?(te(),Me(Nf,{key:3,"edit-name":a.value,provider:a.value!=null?q(n).suppliers.find(U=>U.name===a.value):void 0,"clone-of":r.value,onClose:C,onSaved:A},null,8,["edit-name","provider","clone-of"])):tt("",!0),P(Vf,{modelValue:s.value,"onUpdate:modelValue":E[2]||(E[2]=U=>s.value=U),"provider-name":l.value,onCopyModel:j,onChanged:d},null,8,["modelValue","provider-name"]),P(jf,{modelValue:c.value,"onUpdate:modelValue":E[3]||(E[3]=U=>c.value=U),onSaved:d},null,8,["modelValue"]),K("input",{ref_key:"fileInput",ref:f,type:"file",accept:".json,application/json",style:{display:"none"},onChange:g},null,544)])}}}),Yf=cn(Xf,[["__scopeId","data-v-e250879b"]]);export{Yf as default};