PageSourceSearch

https://ns.org.nz/assets/KeysView-CjuhSkKa.js

js ns.org.nz collected 2026-10-02 13:30:37 UTC 107,040 bytes, 232 lines download raw bytes

1import{d as _t,r as C,q as pt,c as D,w as tt,D as Q,u as l,K as U,B as e,z as p,E as w,G as n,L as J,H as le,$ as et,W as fe,F as ye,M as ge,V as st,C as d,A as S,k as O,h as Ue,J as Tt,Q as da,Y as Kt,o as ua,a as ca,U as Be,R as pa}from"./vendor-vue-BVJWaRIf.js";import{a as Nt,g as mt,_ as Y,h as ut,a9 as ma}from"./index-DajaXR7V.js";import{u as _a,_ as ga}from"./AppLayout.vue_vue_type_script_setup_true_lang-JfP_0peg.js";import{u as wt}from"./useClipboard-CMfQ2Hei.js";import{g as ya}from"./usePersistedPageSize-x0WpaIWh.js";import{k as Oe}from"./AppHeader.vue_vue_type_style_index_0_scoped_59fb3e77_lang-Byu4umtj.js";import{u as ka}from"./usage-i6-K-vdL.js";import{u as Lt}from"./groups-CltzQ3Vj.js";import{T as va}from"./TablePageLayout-DfX8Pj2Z.js";import{S as at}from"./Select-CoBc91Of.js";import{u as gt}from"./vendor-i18n-pgwztqC8.js";import{D as ha}from"./DataTable-Bc9gam4x.js";import{P as xa}from"./Pagination-_CpJhwyV.js";import{_ as bt}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-c2rPAYU5.js";import{_ as ba}from"./EmptyState.vue_vue_type_script_setup_true_lang-YIbkRpkA.js";import{_ as fa}from"./SearchInput.vue_vue_type_script_setup_true_lang-BVDS3b7A.js";import{F as wa}from"./vendor-misc-WKm5Kdig.js";import{_ as Pt}from"./GroupBadge.vue_vue_type_script_setup_true_lang-DXQ_fckf.js";import{G as Ot}from"./GroupOptionItem-CpyUcA7n.js";import{m as $a}from"./maskApiKey-ClKV8GuA.js";import{_ as Ca}from"./PlatformIcon.vue_vue_type_script_setup_true_lang-Dsanj3Um.js";import{e as Ma}from"./platformColors-h1bYIP5J.js";import"./LocaleSwitcher-2gZiNgay.js";/* empty css                                                                       */import"./vendor-ui-xAOatANW.js";import"./peak-rate-qZGUWdry.js";const Ea={class:"space-y-1 text-sm"},Sa={class:"font-medium text-gray-900 dark:text-white"},Ia={class:"text-gray-500 dark:text-gray-400"},Aa=["disabled"],Ta={class:"space-y-2"},Ka={class:"flex items-center gap-2 text-sm font-medium"},La={class:"space-y-2"},Pa={class:"flex items-center gap-2 text-sm font-medium"},Oa={class:"flex items-center gap-2 text-sm font-medium"},Ga=["onUpdate:modelValue","data-test"],Da={key:0},Ra=["onUpdate:modelValue","aria-label","data-test"],Na={class:"input-hint"},Ua={class:"space-y-2"},Ba={class:"flex items-center gap-2 text-sm font-medium"},Fa={key:0,class:"space-y-2"},qa={class:"flex items-center gap-2 text-sm"},Va=["aria-label"],ja={class:"flex items-center gap-2 text-sm font-medium"},Ha=["onUpdate:modelValue","data-test"],za={key:0},Wa=["onUpdate:modelValue","aria-label","data-test"],Ya={class:"input-hint"},Xa={key:0,role:"alert",class:"text-sm text-red-600 dark:text-red-400"},Qa={key:1,role:"alert",class:"space-y-2 text-sm text-red-600 dark:text-red-400"},Ja={class:"max-h-40 space-y-1 overflow-y-auto"},Za=["disabled"],es=["disabled"],ts=_t({__name:"BulkEditKeysModal",props:{show:{type:Boolean},selectedKeys:{},groups:{}},emits:["close","updated"],setup($,{emit:t}){const g=$,M=t,{t:i}=gt(),pe=Nt(),V=C(!1),A=C([]),x=C([]),I=pt({group_id:!1,status:!1,quota:!1,rate_limit_5h:!1,rate_limit_1d:!1,rate_limit_7d:!1,expires_at:!1,ip_whitelist:!1,ip_blacklist:!1}),G=C(null),T=C("active"),B=pt({quota:"",rate_limit_5h:"",rate_limit_1d:"",rate_limit_7d:""}),Z=pt({ip_whitelist:"",ip_blacklist:""}),ee=C(!1),we=C(""),ke=[{key:"quota",label:"keys.quotaAmount"},{key:"rate_limit_5h",label:"keys.rateLimit5h"},{key:"rate_limit_1d",label:"keys.rateLimit1d"},{key:"rate_limit_7d",label:"keys.rateLimit7d"}],ve=[{key:"ip_whitelist",label:"keys.ipWhitelist"},{key:"ip_blacklist",label:"keys.ipBlacklist"}],ae=D(()=>g.groups.map(R=>({value:R.id,label:R.name}))),Ge=D(()=>[{value:"active",label:i("keys.enable")},{value:"inactive",label:i("keys.disable")}]),Le=D(()=>{if(I.group_id&&!g.groups.some(R=>R.id===G.value))return i("keys.groupRequired");for(const{key:R}of ke){if(!I[R])continue;const h=String(B[R]).trim();if(!h||!Number.isFinite(Number(h))||Number(h)<0)return i("keys.bulkEdit.invalidLimit")}return I.expires_at&&!ee.value&&!Number.isFinite(Date.parse(we.value))?i("keys.bulkEdit.invalidExpiration"):""}),q=D(()=>A.value.length>0&&Object.values(I).some(Boolean)&&!Le.value&&!V.value);tt(()=>g.show,R=>{if(R){A.value=g.selectedKeys.map(({id:h,name:b})=>({id:h,name:b})),x.value=[];for(const h of Object.keys(I))I[h]=!1;for(const{key:h}of ke)B[h]="";for(const{key:h}of ve)Z[h]="";G.value=null,T.value="active",ee.value=!1,we.value=""}},{immediate:!0});const Fe=()=>{V.value||M("close")},he=R=>{const h=R==null?void 0:R.message;return typeof h=="string"&&h?h:i("keys.failedToSave")},Ae=async()=>
1{if(!q.value)return;const R={};I.group_id&&(R.group_id=G.value),I.status&&(R.status=T.value);for(const{key:h}of ke)I[h]&&(R[h]=Number(B[h]));for(const{key:h}of ve)I[h]&&(R[h]=Z[h].split(`
2`).map(b=>b.trim()).filter(Boolean));I.expires_at&&(R.expires_at=ee.value?"":new Date(we.value).toISOString()),V.value=!0;try{const h=await Oe.bulkUpdate(A.value.map(z=>z.id),R);x.value=h.failures.map(({id:z,error:qe})=>{var te;return{id:z,name:((te=A.value.find(De=>De.id===z))==null?void 0:te.name)??"",message:he(qe)}});const b=new Set(h.failures.map(({id:z})=>z));A.value=A.value.filter(z=>b.has(z.id)),h.succeededIds.length&&M("updated",h.succeededIds),h.failures.length?pe.showError(i("keys.bulkEdit.partialFailure",{success:h.succeededIds.length,failed:h.failures.length})):(pe.showSuccess(i("keys.bulkEdit.success",{count:h.succeededIds.length})),M("close"))}catch(h){pe.showError(he(h))}finally{V.value=!1}};return(R,h)=>(d(),Q(mt,{show:$.show,title:l(i)("keys.bulkEdit.title"),width:"normal","close-on-escape":!V.value,"show-close-button":!V.value,onClose:Fe},{footer:U(()=>[e("button",{type:"button",class:"btn btn-secondary",disabled:V.value,onClick:Fe},n(l(i)("common.cancel")),9,Za),e("button",{type:"submit",form:"bulk-edit-keys-form",class:"btn btn-primary",disabled:!q.value,"data-test":"submit"},n(V.value?l(i)("keys.saving"):l(i)("keys.bulkEdit.apply",{count:A.value.length})),9,es)]),default:U(()=>[e("form",{id:"bulk-edit-keys-form",class:"space-y-5",onSubmit:st(Ae,["prevent"])},[e("div",Ea,[e("p",Sa,n(l(i)("keys.bulkEdit.selectedCount",{count:A.value.length})),1),e("p",Ia,n(l(i)("keys.bulkEdit.hint")),1)]),e("fieldset",{disabled:V.value,class:"space-y-5"},[e("div",Ta,[e("label",Ka,[J(e("input",{"onUpdate:modelValue":h[0]||(h[0]=b=>I.group_id=b),type:"checkbox",class:"checkbox","data-test":"enable-group"},null,512),[[et,I.group_id]]),le(" "+n(l(i)("keys.groupLabel")),1)]),I.group_id?(d(),Q(at,{key:0,modelValue:G.value,"onUpdate:modelValue":h[1]||(h[1]=b=>G.value=b),options:ae.value,placeholder:l(i)("keys.selectGroup"),disabled:V.value,"aria-label":l(i)("keys.groupLabel"),searchable:"","data-test":"group-input"},null,8,["modelValue","options","placeholder","disabled","aria-label"])):w("",!0)]),e("div",La,[e("label",Pa,[J(e("input",{"onUpdate:modelValue":h[2]||(h[2]=b=>I.status=b),type:"checkbox",class:"checkbox","data-test":"enable-status"},null,512),[[et,I.status]]),le(" "+n(l(i)("keys.statusLabel")),1)]),I.status?(d(),Q(at,{key:0,modelValue:T.value,"onUpdate:modelValue":h[3]||(h[3]=b=>T.value=b),options:Ge.value,disabled:V.value,"aria-label":l(i)("keys.statusLabel"),"data-test":"status-input"},null,8,["modelValue","options","disabled","aria-label"])):w("",!0)]),(d(),p(ye,null,fe(ke,b=>e("div",{key:b.key,class:"space-y-2"},[e("label",Oa,[J(e("input",{"onUpdate:modelValue":z=>I[b.key]=z,type:"checkbox",class:"checkbox","data-test":`enable-${b.key}`},null,8,Ga),[[et,I[b.key]]]),le(" "+n(l(i)(b.label)),1)]),I[b.key]?(d(),p("div",Da,[J(e("input",{"onUpdate:modelValue":z=>B[b.key]=z,type:"number",min:"0",step:"any",required:"",class:"input","aria-label":l(i)(b.label),"data-test":`${b.key}-input`},null,8,Ra),[[ge,B[b.key]]]),e("p",Na,n(l(i)("keys.bulkEdit.limitHint")),1)])):w("",!0)])),64)),e("div",Ua,[e("label",Ba,[J(e("input",{"onUpdate:modelValue":h[4]||(h[4]=b=>I.expires_at=b),type:"checkbox",class:"checkbox","data-test":"enable-expiration"},null,512),[[et,I.expires_at]]),le(" "+n(l(i)("keys.expiration")),1)]),I.expires_at?(d(),p("div",Fa,[e("label",qa,[J(e("input",{"onUpdate:modelValue":h[5]||(h[5]=b=>ee.value=b),type:"checkbox",class:"checkbox","data-test":"never-expires"},null,512),[[et,ee.value]]),le(" "+n(l(i)("keys.noExpiration")),1)]),ee.value?w("",!0):J((d(),p("input",{key:0,"onUpdate:modelValue":h[6]||(h[6]=b=>we.value=b),type:"datetime-local",required:"",class:"input","aria-label":l(i)("keys.expirationDate"),"data-test":"expiration-input"},null,8,Va)),[[ge,we.value]])])):w("",!0)]),(d(),p(ye,null,fe(ve,b=>e("div",{key:b.key,class:"space-y-2"},[e("label",ja,[J(e("input",{"onUpdate:modelValue":z=>I[b.key]=z,type:"checkbox",class:"checkbox","data-test":`enable-${b.key}`}
2,null,8,Ha),[[et,I[b.key]]]),le(" "+n(l(i)(b.label)),1)]),I[b.key]?(d(),p("div",za,[J(e("textarea",{"onUpdate:modelValue":z=>Z[b.key]=z,rows:"3",class:"input font-mono text-sm","aria-label":l(i)(b.label),"data-test":`${b.key}-input`},null,8,Wa),[[ge,Z[b.key]]]),e("p",Ya,n(l(i)("keys.bulkEdit.ipHint")),1)])):w("",!0)])),64))],8,Aa),Le.value?(d(),p("p",Xa,n(Le.value),1)):w("",!0),x.value.length?(d(),p("div",Qa,[e("p",null,n(l(i)("keys.bulkEdit.failureHint")),1),e("ul",Ja,[(d(!0),p(ye,null,fe(x.value,b=>(d(),p("li",{key:b.id,class:"break-words"}," #"+n(b.id)+" "+n(b.name)+": "+n(b.message),1))),128))])])):w("",!0)],32)]),_:1},8,["show","title","close-on-escape","show-close-button"]))}}),as="0.147.0";function ss($){const t=typeof window<"u"?window.location.origin:"",g=($||t).trim().replace(/\/+$/,"");return g?/\/v1$/i.test(g)?g:`${g}/v1`:"/v1"}function os($,t=as){const g=ss($),M=new URLSearchParams({client_version:t});return`${g}/models?${M.toString()}`}function ls($){return typeof $=="object"&&$!==null&&Array.isArray($.models)}async function is($,t,g){const M=await fetch(os($),{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t}`},cache:"no-store",signal:g});if(!M.ok)throw new Error(`Codex models request failed with status ${M.status}`);const i=await M.json();if(!ls(i))throw new Error("Codex models response is not a valid manifest");return{content:JSON.stringify(i,null,2),modelCount:i.models.length}}function ft($){return typeof $!="string"?"":$.trim()}function Ut($){if(!$)return[];try{const t=JSON.parse($);if(typeof t!="object"||t===null||!("models"in t))return[];const g=t.models;return Array.isArray(g)?g.flatMap(M=>
2{if(typeof M!="object"||M===null||!("slug"in M))return[];const i=ft(M.slug);return i?[{...M,slug:i}]:[]}):[]}catch{return[]}}function ns($,t){const g=t.trim();if(g)return Ut($).find(M=>M.slug===g)}function rs($){if(!$)return null;const t=($.supported_reasoning_levels??[]).flatMap(M=>{const i=ft(M==null?void 0:M.effort);return i?[i]:[]});if(t.length===0)return null;const g=ft($.default_reasoning_level);return g&&t.includes(g)?g==="none"?null:g:t.find(M=>M!=="none")??null}function ds($){return $?`model_reasoning_effort = "${$}"
3`:""}const us={class:"space-y-4"},cs={key:0,class:"flex items-start gap-3 p-4 rounded-lg bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800"},ps={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},ms={class:"text-sm text-yellow-700 dark:text-yellow-300 mt-1"},_s={class:"text-sm text-gray-600 dark:text-gray-400"},gs={key:0,class:"overflow-x-auto border-b border-gray-200 dark:border-dark-700"},ys={class:"-mb-px flex min-w-max gap-4 sm:gap-6","aria-label":"Client"},ks=["onClick"],vs={class:"flex items-center gap-2"},hs={key:1,class:"rounded-lg border border-gray-200 p-3 dark:border-dark-700"},xs={class:"mb-2"},bs={class:"text-sm font-medium text-gray-900 dark:text-white"},fs={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},ws=["aria-label"],$s=["aria-checked"],Cs=["aria-checked"],Ms={key:0,"data-testid":"codex-api-key-restart-notice",class:"mt-3 flex items-start gap-2 border-l-2 border-amber-400 bg-amber-50 px-3 py-2 text-xs leading-5 text-amber-800 dark:border-amber-500 dark:bg-amber-950/30 dark:text-amber-200"},Es={key:2,class:"overflow-x-auto border-b border-gray-200 dark:border-dark-700"},Ss={class:"-mb-px flex min-w-max gap-4","aria-label":"Tabs"},Is=["onClick"],As={class:"flex items-center gap-2"},Ts={class:"space-y-4"},Ks={key:0,class:"text-xs text-amber-600 dark:text-amber-400 mb-1.5 flex items-center gap-1"},Ls={class:"bg-gray-900 dark:bg-dark-900 rounded-xl overflow-hidden"},Ps={class:"flex items-center justify-between px-4 py-2 bg-gray-800 dark:bg-dark-800 border-b border-gray-700 dark:border-dark-700"},Os={class:"min-w-0 truncate text-xs text-gray-400 font-mono"},Gs=["onClick"],Ds={key:0,class:"w-3.5 h-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},Rs={key:1,class:"w-3.5 h-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5"},Ns={class:"p-4 text-sm font-mono text-gray-100 overflow-x-auto"},Us=["innerHTML"],Bs=["textContent"],Fs={key:3,"data-testid":"codex-model-catalog",class:"overflow-hidden rounded-lg border border-gray-200 bg-gray-50 dark:border-dark-700 dark:bg-dark-800/50"},qs={class:"flex flex-col gap-3 px-4 py-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"min-w-0"},js={class:"text-sm font-medium text-gray-900 dark:text-white"},Hs={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},zs={class:"mt-1 truncate font-mono text-xs text-gray-700 dark:text-gray-300"},Ws=["disabled"],Ys={key:0,class:"border-t border-gray-200 px-4 py-2 text-xs text-emerald-700 dark:border-dark-700 dark:text-emerald-300"},Xs={key:1,class:"border-t border-red-200 px-4 py-2 text-xs text-red-700 dark:border-red-900 dark:text-red-300"},Qs={key:4,class:"flex items-start gap-3 p-3 rounded-lg bg-blue-50 dark:bg-blue-900/20 border border-blue-100 dark:border-blue-800"},Js={class:"text-sm text-blue-700 dark:text-blue-300"},Zs={class:"flex justify-end"},eo=_t({__name:"UseKeyModal",props:{show:{type:Boolean},apiKey:{},baseUrl:{},platform:{},allowMessagesDispatch:{type:Boolean}},emits:["close"],setup($,{emit:t}){const g=$,M=t,{t:i}=gt(),{copyToClipboard:pe}=wt(),V=C(null),A=C("unix"),x=C("claude"),I=C("legacy"),G=C("idle"),T=C(""),B=C(0);let Z=null,ee=0;const we=D(()=>g.show&&(x.value==="codex"||g.platform==="openai"&&x.value==="codex-ws")),ke=D(()=>{const r=A.value==="windows";return Te(r?"%userprofile%\\.codex":"~/.codex","codex-models.json",r)}),ve=D(()=>we.value?`${g.platform}|${g.baseUrl}|${g.apiKey}`:""),ae=D(()=>{switch(g.platform){case"openai":return"codex";case"grok":return"grok";case"gemini":return"gemini";case"antigravity":return"claude";default:return"claude"}});tt(()=>g.platform,()=>{A.value="unix",x.value=ae.value,I.value="legacy"},{immediate:!0}),tt(()=>g.show,r=>{r?I.value="legacy":Ve()}),tt(ve,(r,u)=>{r!==u&&Ve()}),tt(x,()=>{A.value="unix"});const Ge={render(){return Ue("svg",{fill:"currentColor",viewBox:"0 0 24 24",class:"w-4 h-4"}
3,[Ue("path",{d:"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"})])}},Le={render(){return Ue("svg",{fill:"currentColor",viewBox:"0 0 24 24",class:"w-4 h-4"},[Ue("path",{d:"M3 12V6.75l6-1.32v6.48L3 12zm17-9v8.75l-10 .15V5.21L20 3zM3 13l6 .09v6.81l-6-1.15V13zm7 .25l10 .15V21l-10-1.91v-5.84z"})])}},q={render(){return Ue("svg",{fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5",class:"w-4 h-4"},[Ue("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m6.75 7.5 3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 17.25V6.75A2.25 2.25 0 0 0 18.75 4.5H5.25A2.25 2.25 0 0 0 3 6.75v10.5A2.25 2.25 0 0 0 5.25 20.25Z"})])}},Fe={render(){return Ue("svg",{fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5",class:"w-4 h-4"},[Ue("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z"})])}}
3,he=D(()=>{if(!g.platform)return[];switch(g.platform){case"openai":{const r=[{id:"codex",label:i("keys.useKeyModal.cliTabs.codexCli"),icon:q},{id:"codex-ws",label:i("keys.useKeyModal.cliTabs.codexCliWs"),icon:q}];return g.allowMessagesDispatch&&r.push({id:"claude",label:i("keys.useKeyModal.cliTabs.claudeCode"),icon:q}),r.push({id:"opencode",label:i("keys.useKeyModal.cliTabs.opencode"),icon:q}),r}case"gemini":return[{id:"gemini",label:i("keys.useKeyModal.cliTabs.geminiCli"),icon:Fe},{id:"codex",label:i("keys.useKeyModal.cliTabs.codexCli"),icon:q},{id:"opencode",label:i("keys.useKeyModal.cliTabs.opencode"),icon:q}];case"antigravity":return[{id:"claude",label:i("keys.useKeyModal.cliTabs.claudeCode"),icon:q},{id:"gemini",label:i("keys.useKeyModal.cliTabs.geminiCli"),icon:Fe},{id:"codex",label:i("keys.useKeyModal.cliTabs.codexCli"),icon:q},{id:"opencode",label:i("keys.useKeyModal.cliTabs.opencode"),icon:q}];case"grok":return[{id:"grok",label:i("keys.useKeyModal.cliTabs.grokCli"),icon:q},{id:"claude",label:i("keys.useKeyModal.cliTabs.claudeCode"),icon:q},{id:"codex",label:i("keys.useKeyModal.cliTabs.codexCli"),icon:q},{id:"opencode",label:i("keys.useKeyModal.cliTabs.opencode"),icon:q}];case"deepseek":case"minimax":case"composite":return[{id:"claude",label:i("keys.useKeyModal.cliTabs.claudeCode"),icon:q},{id:"codex",label:i("keys.useKeyModal.cliTabs.codexCli"),icon:q},{id:"opencode",label:i("keys.useKeyModal.cliTabs.opencode"),icon:q}];default:return[{id:"claude",label:i("keys.useKeyModal.cliTabs.claudeCode"),icon:q},{id:"codex",label:i("keys.useKeyModal.cliTabs.codexCli"),icon:q},{id:"opencode",label:i("keys.useKeyModal.cliTabs.opencode"),icon:q}]}}),Ae=[{id:"unix",label:"macOS / Linux",icon:Ge},{id:"cmd",label:"Windows CMD",icon:Le},{id:"powershell",label:"PowerShell",icon:Le}],R=[{id:"unix",label:"macOS / Linux",icon:Ge},{id:"windows",label:"Windows",icon:Le}],h=D(()=>x.value!=="opencode"),b=D(()=>g.platform==="openai"&&(x.value==="codex"||x.value==="codex-ws")),z=D(()=>h.value?x.value==="codex"||x.value==="codex-ws"||x.value==="grok"?R:Ae:[]),qe=D(()=>{if(x.value==="codex"&&g.platform!=="openai"&&g.platform!=="grok"&&g.platform!=="deepseek"&&g.platform!=="minimax"&&g.platform!=="composite")return i("keys.useKeyModal.routedCodex.description");switch(g.platform){case"openai":return x.value==="claude"?i("keys.useKeyModal.description"):i("keys.useKeyModal.openai.description");case"gemini":return i("keys.useKeyModal.gemini.description");case"antigravity":return i("keys.useKeyModal.antigravity.description");case"grok":return x.value==="claude"?i("keys.useKeyModal.grok.claudeDescription"):x.value==="codex"?i("keys.useKeyModal.grok.codexDescription"):i("keys.useKeyModal.grok.description");case"deepseek":return x.value==="codex"?i("keys.useKeyModal.deepseek.codexDescription"):i("keys.useKeyModal.deepseek.description");case"minimax":return x.value==="codex"?i("keys.useKeyModal.minimax.codexDescription"):i("keys.useKeyModal.minimax.description");case"composite":return x.value==="codex"?i("keys.useKeyModal.composite.codexDescription"):i("keys.useKeyModal.composite.description");default:return i("keys.useKeyModal.description")}}),te=D(()=>{if(x.value==="codex"&&g.platform!=="openai"&&g.platform!=="grok"&&g.platform!=="deepseek"&&g.platform!=="minimax"&&g.platform!=="composite")return i("keys.useKeyModal.routedCodex.note");switch(g.platform){case"openai":return x.value==="claude"?i("keys.useKeyModal.note"):A.value==="windows"?i("keys.useKeyModal.openai.noteWindows"):i("keys.useKeyModal.openai.note");case"gemini":return i("keys.useKeyModal.gemini.note");case"antigravity":return x.value==="claude"?i("keys.useKeyModal.antigravity.claudeNote"):i("keys.useKeyModal.antigravity.geminiNote");case"grok":return x.value==="claude"?i("keys.useKeyModal.grok.claudeNote"):x.value==="codex"?A.value==="windows"?i("keys.useKeyModal.grok.codexNoteWindows"):i("keys.useKeyModal.grok.codexNote"):x.value==="grok"&&(A.value==="cmd"||A.value==="powershell")||x.value==="grok"&&A.value==="windows"?i("keys.useKeyModal.grok.noteWindows"):i("keys.useKeyModal.grok.note");case"deepseek":return x.value==="codex"?i("keys.useKeyModal.deepseek.codexNote"):i("keys.useKeyModal.note");case"minimax":return x.value==="codex"?i("keys.useKeyModal.minimax.codexNote"):i("keys.useKeyModal.note");case"composite":return x.value==="codex"?i("keys.useKeyModal.composite.codexNote"):i("keys.useKeyModal.note");default:return i("keys.useKeyModal.note")}}),De=D(()=>x.value!=="opencode");function Ve(){Z==null||Z.abort(),Z=null,ee+=1,G.value="idle",T.value="",B.value=0}async function Ye(){if(!we.value||!g.apiKey)return;Z==null||Z.abort();const r=new AbortController,u=++ee;Z=r,G.value="loading";try{const m=await is(g.baseUrl,g.apiKey,r.signal);if(u!==ee)return;T.value=m.content,B.value=m.modelCount,G.value="ready"}
3catch(m){const f=m&&typeof m=="object"&&"name"in m?String(m.name||""):"";if(u!==ee||f==="AbortError")return;G.value="error"}finally{u===ee&&(Z=null)}}function Xe(){T.value&&wa.saveAs(new Blob([T.value],{type:"application/json;charset=utf-8"}),"codex-models.json")}const Re=D(()=>Ut(T.value).map(r=>r.slug));function F(r){return Re.value.includes(r)?r:Re.value[0]||r}function je(r){return ds(rs(ns(T.value,r)))}const Qe=r=>r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),$e=(r,u)=>`<span class="${r}">${Qe(u)}</span>`,me=r=>$e("text-emerald-300",r),re=r=>$e("text-sky-200",r),de=r=>$e("text-slate-400",r),ie=r=>$e("text-amber-200",r),_=r=>$e("text-slate-500",r),He=D(()=>{const r=g.baseUrl||window.location.origin,u=g.apiKey,m=r.replace(/\/v1\/?$/,"").replace(/\/+$/,""),f=X=>{const _e=X.replace(/\/+$/,"");return _e.endsWith("/v1")?_e:`${_e}/v1`},k=f(m),L=f(`${m}/antigravity`),P=(()=>{const X=`${m}/antigravity`.replace(/\/+$/,"");return X.endsWith("/v1beta")?X:`${X}/v1beta`})(),W=(()=>{const X=m.replace(/\/+$/,"");return X.endsWith("/v1beta")?X:`${X}/v1beta`})();if(x.value==="opencode")switch(g.platform){case"anthropic":return[Pe("anthropic",k,u)];case"openai":return[Pe("openai",k,u)];case"gemini":return[Pe("gemini",W,u)];case"antigravity":return[Pe("antigravity-claude",L,u,"opencode.json (Claude)"),Pe("antigravity-gemini",P,u,"opencode.json (Gemini)")];case"grok":return[Pe("grok",k,u)];default:return[Pe("openai",k,u)]}switch(g.platform){case"openai":return x.value==="claude"?ne(m,u):x.value==="codex-ws"?kt(k,u):lt(k,u);case"gemini":return x.value==="codex"?xe(k,u,"gemini"):[ot(r,u)];case"antigravity":return x.value==="codex"?xe(k,u,"antigravity"):x.value==="gemini"?[ot(`${r}/antigravity`,u)]:ne(`${r}/antigravity`,u);case"grok":return x.value==="claude"?Ce(m,u):x.value==="codex"?c(k,u):yt(k,u);case"deepseek":return x.value==="codex"?xe(k,u,"deepseek"):ne(m,u);case"minimax":return x.value==="codex"?xe(k,u,"minimax"):ne(m,u);case"composite":return x.value==="codex"?xe(k,u,"composite"):ne(m,u);default:return x.value==="codex"&&g.platform?xe(k,u,g.platform):ne(r,u)}});function ne(r,u){let m,f;switch(A.value){case"unix":m="Terminal",f=`export ANTHROPIC_BASE_URL="${r}"
4export ANTHROPIC_AUTH_TOKEN="${u}"
5export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`;break;case"cmd":m="Command Prompt",f=`set ANTHROPIC_BASE_URL=${r}
6set ANTHROPIC_AUTH_TOKEN=${u}
7set CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`;break;case"powershell":m="PowerShell",f=`$env:ANTHROPIC_BASE_URL="${r}"
8$env:ANTHROPIC_AUTH_TOKEN="${u}"
9$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1`;break;default:m="Terminal",f=""}const k=A.value==="unix"?"~/.claude/settings.json":"%USERPROFILE%\\.claude\\settings.json",L=`{
10  "$schema": "https://json.schemastore.org/claude-code-settings.json",
11  "env": {
12    "ANTHROPIC_BASE_URL": "${r}",
13    "ANTHROPIC_AUTH_TOKEN": "${u}",
14    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
15  }
16}`;return[{path:m,content:f},{path:k,content:L,hint:i("keys.useKeyModal.claudeSettingsHint")}]}function Ce(r,u){const m={ANTHROPIC_BASE_URL:r,ANTHROPIC_AUTH_TOKEN:u,ANTHROPIC_MODEL:"grok-4.5",ANTHROPIC_DEFAULT_OPUS_MODEL:"grok-4.5",ANTHROPIC_DEFAULT_SONNET_MODEL:"grok-4.5",ANTHROPIC_DEFAULT_HAIKU_MODEL:"grok-4.5",ANTHROPIC_DEFAULT_FABLE_MODEL:"grok-4.5",CLAUDE_CODE_SUBAGENT_MODEL:"grok-4.5",CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:"1"};let f,k;switch(A.value){case"unix":f="Terminal",k=Object.entries(m).map(([P,W])=>`export ${P}="${W}"`).join(`
17`);break;case"cmd":f="Command Prompt",k=Object.entries(m).map(([P,W])=>`set ${P}=${W}`).join(`
18`);break;case"powershell":f="PowerShell",k=Object.entries(m).map(([P,W])=>`$env:${P}="${W}"`).join(`
19`);break;default:f="Terminal",k=""}const L=A.value==="unix"?"~/.claude/settings.json":"%USERPROFILE%\\.claude\\settings.json";return[{path:f,content:k},{path:L,content:JSON.stringify({$schema:"https://json.schemastore.org/claude-code-settings.json",env:m},null,2),hint:i("keys.useKeyModal.claudeSettingsHint")}]}function ot(r,u){const m="gemini-2.0-flash",f=i("keys.useKeyModal.gemini.modelComment");let k,L,P;switch(A.value){case"unix":k="Terminal",L=`export GOOGLE_GEMINI_BASE_URL="${r}"
20export GEMINI_API_KEY="${u}"
21export GEMINI_MODEL="${m}"  # ${f}`,P=`${me("export")} ${re("GOOGLE_GEMINI_BASE_URL")}${de("=")}${ie(`"${r}"`)}
22${me("export")} ${re("GEMINI_API_KEY")}${de("=")}${ie(`"${u}"`)}
23${me("export")} ${re("GEMINI_MODEL")}${de("=")}${ie(`"${m}"`)}  ${_(`# ${f}`)}`;break;case"cmd":k="Command Prompt",L=`set GOOGLE_GEMINI_BASE_URL=${r}
24set GEMINI_API_KEY=${u}
25set GEMINI_MODEL=${m}`,P=`${me("set")} ${re("GOOGLE_GEMINI_BASE_URL")}${de("=")}${ie(r)}
26${me("set")} ${re("GEMINI_API_KEY")}${de("=")}${ie(u)}
27${me("set")} ${re("GEMINI_MODEL")}${de("=")}${ie(m)}
28${_(`REM ${f}`)}`;break;case"powershell":k="PowerShell",L=`$env:GOOGLE_GEMINI_BASE_URL="${r}"
29$env:GEMINI_API_KEY="${u}"
30$env:GEMINI_MODEL="${m}"  # ${f}`,P=`${me("$env:")}${re("GOOGLE_GEMINI_BASE_URL")}${de("=")}${ie(`"${r}"`)}
31${me("$env:")}${re("GEMINI_API_KEY")}${de("=")}${ie(`"${u}"`)}
32${me("$env:")}${re("GEMINI_MODEL")}${de("=")}${ie(`"${m}"`)}  ${_(`# ${f}`)}`;break;default:k="Terminal",L="",P=""}return{path:k,content:L,highlighted:P}}function lt(r,u){const f=A.value==="windows"?"%userprofile%\\.codex":"~/.codex",k=F("gpt-5.5"),L=je(k),P=`model_provider = "OpenAI"
33model = "${k}"
34review_model = "${k}"
35${L}disable_response_storage = true
36model_catalog_json = "${Me(ke.value)}"
37network_access = "enabled"
38windows_wsl_setup_acknowledged = true
39
40[model_providers.OpenAI]
41name = "OpenAI"
42base_url = "${r}"
43wire_api = "responses"
44${ue(u)}
45
46[features]
47goals = true`;return Je(f,P,u)}function ue(r){return I.value==="api-key"?`requires_openai_auth = false
48experimental_bearer_token = "${Me(r)}"
49http_headers = { "x-openai-actor-authorization" = "local-image-extension" }`:"requires_openai_auth = true"}function Je(r,u,m){const f=[{path:`${r}/config.toml`,content:u,hint:i("keys.useKeyModal.openai.configTomlHint")}];
49return I.value==="legacy"&&f.push({path:`${r}/auth.json`,content:JSON.stringify({OPENAI_API_KEY:m},null,2)}),f}function Te(r,u,m){return m?`${r}\\${u}`:`${r}/${u}`}function Me(r){return r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function yt(r,u){const m=A.value,f=m==="windows"||m==="cmd"||m==="powershell",k=f?"%userprofile%\\.grok":"~/.grok";let L,P;switch(m){case"cmd":L="Command Prompt",P=`set GROK_MODELS_BASE_URL=${r}
50set XAI_API_KEY=${u}`;break;case"powershell":case"windows":L="PowerShell",P=`$env:GROK_MODELS_BASE_URL="${r}"
51$env:XAI_API_KEY="${u}"`;break;default:L="Terminal",P=`export GROK_MODELS_BASE_URL="${r}"
52export XAI_API_KEY="${u}"`}const W=`${r.replace(/\/+$/,"")}/models`,X=`# Grok Build CLI → Sub2API Grok group (API key auth).
53# Docs: ~/.grok/docs/user-guide/05-configuration.md + 11-custom-models.md
54# Verify after save: grok inspect
55#
56# IMPORTANT: api_backend must be "responses" for Sub2API Grok (POST /v1/responses).
57# If omitted, Grok Build defaults to chat_completions (/v1/chat/completions).
58# Keep api_backend = "responses" on every model entry.
59#
60# Prefer env_key over hardcoding api_key (never commit secrets).
61# Also export GROK_MODELS_BASE_URL + XAI_API_KEY in the shell block above.
62
63# Global inference / catalog endpoints (same role as env GROK_MODELS_BASE_URL).
64# When models_base_url is set, Grok uses API-key Bearer auth (no grok login required).
65[endpoints]
66models_base_url = "${r}"              # inference base; model list defaults to {base}/models
67models_list_url = "${W}"        # optional override (env: GROK_MODELS_LIST_URL)
68xai_api_base_url = "${r}"             # public xAI API base override for gateway routing
69cli_chat_proxy_base_url = "${r}"      # CLI chat-proxy base (env: GROK_CLI_CHAT_PROXY_BASE_URL)
70
71# Prefer API key when using a custom gateway (matches Sub2API).
72# Requires XAI_API_KEY env or per-model env_key / api_key.
73[auth]
74preferred_method = "api_key"
75
76[model."grok-4.5"]
77model = "grok-4.5"                          # id sent to the API
78name = "Grok 4.5"                           # shown in /model picker
79description = "Grok 4.5 via Sub2API (Responses)"
80# base_url inherits from [endpoints].models_base_url; override only if needed:
81# base_url = "${r}"
82env_key = "XAI_API_KEY"                     # or: api_key = "${u}"  (not recommended)
83api_backend = "responses"                   # chat_completions | responses | messages
84context_window = 500000                     # drives auto-compaction timing
85# Optional sampling (global defaults can live under [models] instead):
86# temperature = 0.7
87# top_p = 0.95
88# max_completion_tokens = 8192
89# Server-side (backend) web_search tools — only if your gateway exposes them:
90supports_backend_search = true
91
92[model."grok-build-0.1"]
93model = "grok-build-0.1"
94name = "Grok Build"
95description = "Coding / agent sessions (xAI recommends grok-build* for coding)"
96env_key = "XAI_API_KEY"
97api_backend = "responses"
98context_window = 256000
99supports_backend_search = true
100
101# Text multi-agent / client web_search sub-agent (NOT Imagine image/video).
102[model."grok-4.20-multi-agent-0309"]
103model = "grok-4.20-multi-agent-0309"
104name = "Grok 4.20 Multi Agent (text / web_search)"
105description = "Text multi-agent; use for web_search sub-agent, not image/video"
106env_key = "XAI_API_KEY"
107api_backend = "responses"
108context_window = 1000000
109supports_backend_search = true
110
111[model."grok-4.3"]
112model = "grok-4.3"
113name = "Grok 4.3"
114env_key = "XAI_API_KEY"
115api_backend = "responses"
116context_window = 1000000
117supports_backend_search = true
118
119# Optional short alias for /model grok:
120# [model."grok"]
121# model = "grok-4.5"
122# name = "Grok"
123# env_key = "XAI_API_KEY"
124# api_backend = "responses"
125# context_window = 1000000
126# supports_backend_search = true
127
128[models]
129# xAI recommends grok-build* for coding/agent sessions; use grok-4.5 for general chat.
130default = "grok-4.5"
131web_search = "grok-4.5"                     # client-side web_search tool model (must exist as [model.*])
132image_description = "grok-4.5"              # vision/describe-image helper model
133# Optional environment-wide sampling defaults (per-model values win):
134# temperature = 0.7
135# top_p = 0.95
136# max_completion_tokens = 8192
137# max_retries = 8
138
139[session]
140auto_compact_threshold_percent = 80         # auto-compact at this % of context_window (default 85)
141
142# Imagine tools: model IDs go to Sub2API media endpoints (not the text [model.*] catalog).
143# Enable only if the Grok group allows image/video generation.
144[features]
145image_gen = true
146video_gen = true
147image_gen_model_override = "grok-imagine-image-quality"   # or grok-imagine-image
148image_edit_model_override = "grok-imagine-edit"
149# Optional feature flags (defaults shown in docs):
150# telemetry = false
151# remote_fetch = true                         # set false for air-gapped / pure-gateway catalogs
152# lsp_tools = false`;return[{path:L,content:P},{path:Te(k,"config.toml",f),content:X,hint:i("keys.useKeyModal.grok.configTomlHint")}]}function c(r,u){const m=A.value,f=m==="windows"||m==="cmd"||m==="powershell",k=f?"%userprofile%\\.codex":"~/.codex",L=F("grok-4.5");let P,W;switch(m){case"cmd":P="Command Prompt",W=`set SUB2API_API_KEY=${u}`;break;case"powershell":case"windows":P="PowerShell",W=`$env:SUB2API_API_KEY="${u}"`;break;
152default:P="Terminal",W=`export SUB2API_API_KEY="${u}"`}const X=`# Codex CLI → Sub2API Grok group
153# Docs: Codex config reference (model_providers.*, wire_api = "responses")
154#
155# Text models only. Image/video: grok-imagine-image / grok-imagine-video on media endpoints.
156# Switch model: grok-4.5 | grok-4.3 | grok-build-0.1 | grok-4.20-multi-agent-0309 (text / web_search)
157
158model_provider = "sub2api"
159model = "${L}"
160model_catalog_json = "${Me(ke.value)}"
161# Optional:
162# review_model = "${L}"
163# model_reasoning_effort = "medium"
164# model_context_window = 500000
165# disable_response_storage = true
166# network_access = "enabled"
167# windows_wsl_setup_acknowledged = true
168
169[model_providers.sub2api]
170name = "Sub2API Grok"
171base_url = "${r}"
172# Prefer env_key (variable NAME). Do not combine with experimental_bearer_token.
173env_key = "SUB2API_API_KEY"
174# Fallback only if you cannot set env (discouraged — keeps secret on disk):
175# experimental_bearer_token = "${u}"
176wire_api = "responses"
177# API-key providers: do not require ChatGPT OAuth login
178requires_openai_auth = false
179# Grok/Sub2API path is HTTP/SSE; disable WS (Codex may otherwise try WebSocket first)
180supports_websockets = false
181
182# Optional:
183# [features]
184# goals = true`;return[{path:P,content:W},{path:Te(k,"config.toml",f),content:X,hint:i("keys.useKeyModal.grok.codexConfigTomlHint")}]}function xe(r,u,m){const f=A.value==="windows",k=f?"%userprofile%\\.codex":"~/.codex",P={openai:"gpt-5.5",anthropic:"claude-sonnet-4-6",gemini:"gemini-2.5-pro",antigravity:"claude-sonnet-4-6",grok:"grok-4.5",kimi:"kimi-k2.5",zhipu:"glm-4.7",deepseek:"deepseek-v4-pro",minimax:"MiniMax-M3",opencode_go:"glm-5.3",composite:"gpt-5.5"}[m]||"",W=F(P),_e={anthropic:"Anthropic",openai:"OpenAI",gemini:"Gemini",antigravity:"Antigravity",grok:"Grok",kimi:"Kimi",zhipu:"Zhipu",deepseek:"DeepSeek",minimax:"MiniMax",opencode_go:"OpenCode",composite:"Composite"}[m],ze=f?`$env:SUB2API_API_KEY="${u}"`:`export SUB2API_API_KEY="${u}"`,it=`# Codex CLI -> Sub2API ${_e} group
185model_provider = "sub2api"
186model = "${W}"
187review_model = "${W}"
188disable_response_storage = true
189model_catalog_json = "${Me(ke.value)}"
190
191[model_providers.sub2api]
192name = "Sub2API ${_e}"
193base_url = "${r}"
194env_key = "SUB2API_API_KEY"
195wire_api = "responses"
196requires_openai_auth = false
197supports_websockets = false`;return[{path:f?"PowerShell":"Terminal",content:ze},{path:Te(k,"config.toml",f),content:it,hint:i(m==="deepseek"||m==="minimax"||m==="composite"?`keys.useKeyModal.${m}.codexConfigTomlHint`:"keys.useKeyModal.routedCodex.configTomlHint")}]}function kt(r,u){const f=A.value==="windows"?"%userprofile%\\.codex":"~/.codex",k=F("gpt-5.5"),L=je(k),P=`model_provider = "OpenAI"
198model = "${k}"
199review_model = "${k}"
200${L}disable_response_storage = true
201model_catalog_json = "${Me(ke.value)}"
202network_access = "enabled"
203windows_wsl_setup_acknowledged = true
204
205[model_providers.OpenAI]
206name = "OpenAI"
207base_url = "${r}"
208wire_api = "responses"
209supports_websockets = true
210${ue(u)}
211
212[features]
213responses_websockets_v2 = true
214goals = true`;return Je(f,P,u)}function Pe(r,u,m,f){const k={[r]:{options:{baseURL:u,apiKey:m}}},L={"gpt-6":{name:"GPT-6 (Astra)",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-6-astra":{name:"GPT-6 Astra",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-5.2":{name:"GPT-5.2",limit:{context:4e5,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{}}},"gpt-5.6":{name:"GPT-5.6 (Sol)",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-6-sol":{name:"GPT-6 Sol",limit:{context:105e4,output:128e3},options:{store:!1},variants:{none:{},low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-5.6-sol":{name:"GPT-5.6 Sol",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-5.6-terra":{name:"GPT-5.6 Terra",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-6-luna":{name:"GPT-6 Luna",limit:{context:105e4,output:128e3},options:{store:!1},variants:{none:{},low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-5.6-luna":{name:"GPT-5.6 Luna",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{},max:{}}},"gpt-5.5":{name:"GPT-5.5",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{}}},"gpt-5.4":{name:"GPT-5.4",limit:{context:105e4,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{}}},"gpt-5.4-mini":{name:"GPT-5.4 Mini",limit:{context:4e5,output:128e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{}}},"gpt-5.3-codex-spark":{name:"GPT-5.3 Codex Spark",limit:{context:128e3,output:32e3},options:{store:!1},variants:{low:{},medium:{},high:{},xhigh:{}}},"codex-mini-latest":{name:"Codex Mini",limit:{context:2e5,output:1e5},options:{store:!1},variants:{low:{},medium:{},high:{}}}},P={"gemini-2.0-flash":{name:"Gemini 2.0 Flash",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]}},"gemini-2.5-flash":{name:"Gemini 2.5 Flash",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]}},"gemini-2.5-pro":{name:"Gemini 2.5 Pro",limit:{context:2097152,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-3.5-flash":{name:"Gemini 3.5 Flash",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]}},"gemini-3-flash-preview":{name:"Gemini 3 Flash Preview",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]}},"gemini-3-pro-preview":{name:"Gemini 3 Pro Preview",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-3.1-pro-preview":{name:"Gemini 3.1 Pro Preview",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}}},W={"gemini-2.5-flash":{name:"Gemini 2.5 Flash",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"disable"}}},"gemini-2.5-flash-lite":{name:"Gemini 2.5 Flash Lite",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-2.5-flash-thinking":{name:"Gemini 2.5 Flash (Thinking)",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-3-flash":{name:"Gemini 3 Flash",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-3.1-pro-low":{name:"Gemini 3.1 Pro Low",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-3.1-pro-high":{name:"Gemini 3.1 Pro High",limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-2.5-flash-image":{name:"Gemini 2.5 Flash Image",limit:{context:1048576,output:65536},modalities:{input:["text","image"],output:["image"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"gemini-3.1-flash-image":{name:"Gemini 3.1 Flash Image",limit:{context:1048576,output:65536},modalities:{input:["text","image"],output:["image"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}}},X={"claude-fable-5-1":{name:"Claude Fable 5.1",limit:{context:1048576,output:128e3},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{type:"adaptive"}}},"claude-fable-5":{name:"Claude Fable 5",limit:{context:1048576,output:128e3},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{type:"adaptive"}}},"claude-opus-4-6-thinking":{name:"Claude 4.6 Opus (Thinking)",limit:{context:2e5,output:128e3},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}},"claude-sonnet-4-6":{name:"Claude 4.6 Sonnet",limit:{context:2e5,output:64e3},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{budgetTokens:24576,type:"enabled"}}}},_e={"grok-4.5":{name:"Grok 4.5",limit:{context:5e5,output:64e3}},"grok-build-0.1":{name:"Grok Build 0.1",limit:{context:256e3,output:64e3}}
214,"grok-4.20-multi-agent-0309":{name:"Grok 4.20 Multi Agent (text / web_search)",limit:{context:1e6,output:64e3}},"grok-4.3":{name:"Grok 4.3",limit:{context:1e6,output:64e3}},"grok-composer-2.5-fast":{name:"Grok Composer 2.5 Fast",limit:{context:5e5,output:64e3}}};r==="gemini"?(k[r].npm="@ai-sdk/google",k[r].models=P):r==="anthropic"?(k[r].npm="@ai-sdk/anthropic",k[r].models={"claude-opus-5-5":{name:"Claude Opus 5.5",limit:{context:1e6,output:128e3},modalities:{input:["text","image","pdf"],output:["text"]},options:{thinking:{type:"adaptive"},effort:"medium"},variants:{low:{effort:"low"},medium:{effort:"medium"},high:{effort:"high"},xhigh:{effort:"xhigh"},max:{effort:"max"}}}}):r==="antigravity-claude"?(k[r].npm="@ai-sdk/anthropic",k[r].name="Antigravity (Claude)",k[r].models=X):r==="antigravity-gemini"?(k[r].npm="@ai-sdk/google",k[r].name="Antigravity (Gemini)",k[r].models=W):r==="openai"?k[r].models=L:r==="grok"&&(k[r].npm="@ai-sdk/openai-compatible",k[r].name="Grok via Sub2API",k[r].models=_e);const ze=r==="openai"?{build:{options:{store:!1}},plan:{options:{store:!1}}}:void 0,it=JSON.stringify({provider:k,...ze?{agent:ze}:{},$schema:"https://opencode.ai/config.json"},null,2);return{path:f??"opencode.json",content:it,hint:i("keys.useKeyModal.opencode.hint")}}const vt=async(r,u)=>{await pe(r,i("keys.copied"))&&(V.value=u,setTimeout(()=>{V.value=null},2e3))};return(r,u)=>(d(),Q(mt,{show:$.show,title:l(i)("keys.useKeyModal.title"),width:"wide",onClose:u[3]||(u[3]=m=>M("close"))},{footer:U(()=>[e("div",Zs,[e("button",{onClick:u[2]||(u[2]=m=>M("close")),class:"btn btn-secondary"},n(l(i)("common.close")),1)])]),default:U(()=>[e("div",us,[$.platform?(d(),p(ye,{key:1},[e("p",_s,n(qe.value),1),he.value.length?(d(),p("div",gs,[e("nav",ys,[(d(!0),p(ye,null,fe(he.value,m=>(d(),p("button",{key:m.id,type:"button",onClick:f=>x.value=m.id,class:S(["whitespace-nowrap py-2.5 px-1 border-b-2 font-medium text-sm transition-colors",x.value===m.id?"border-primary-500 text-primary-600 dark:text-primary-400":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300"])},[e("span",vs,[(d(),Q(Tt(m.icon),{class:"w-4 h-4"})),le(" "+n(m.label),1)])],10,ks))),128))])])):w("",!0),b.value?(d(),p("div",hs,[e("div",xs,[e("p",bs,n(l(i)("keys.useKeyModal.openai.authModeTitle")),1),e("p",fs,n(l(i)("keys.useKeyModal.openai.authModeDescription")),1)]),e("div",{class:"grid grid-cols-2 gap-1 rounded-lg bg-gray-100 p-1 dark:bg-dark-700",role:"radiogroup","aria-label":l(i)("keys.useKeyModal.openai.authModeTitle")},[e("button",{type:"button",role:"radio","data-testid":"codex-auth-mode-legacy","aria-checked":I.value==="legacy",class:S(["rounded-md px-3 py-2 text-sm font-medium transition-colors",I.value==="legacy"?"bg-white text-primary-700 shadow-sm dark:bg-dark-800 dark:text-primary-300":"text-gray-600 hover:text-gray-900 dark:text-dark-300 dark:hover:text-white"]),onClick:u[0]||(u[0]=m=>I.value="legacy")},n(l(i)("keys.useKeyModal.openai.authModeLegacy")),11,$s),e("button",{type:"button",role:"radio","data-testid":"codex-auth-mode-api-key","aria-checked":I.value==="api-key",class:S(["rounded-md px-3 py-2 text-sm font-medium transition-colors",I.value==="api-key"?"bg-white text-primary-700 shadow-sm dark:bg-dark-800 dark:text-primary-300":"text-gray-600 hover:text-gray-900 dark:text-dark-300 dark:hover:text-white"]),onClick:u[1]||(u[1]=m=>I.value="api-key")},n(l(i)("keys.useKeyModal.openai.authModeApiKey")),11,Cs)],8,ws),I.value==="api-key"?(d(),p("div",Ms,[O(Y,{name:"exclamationCircle",size:"sm",class:"mt-0.5 flex-shrink-0"}),e("p",null,n(l(i)("keys.useKeyModal.openai.authModeApiKeyRestartNotice")),1)])):w("",!0)])):w("",!0),h.value?(d(),p("div",Es,[e("nav",Ss,[(d(!0),p(ye,null,fe(z.value,m=>(d(),p("button",{key:m.id,type:"button",onClick:f=>A.value=m.id,class:S(["whitespace-nowrap py-2.5 px-1 border-b-2 font-medium text-sm transition-colors",A.value===m.id?"border-primary-500 text-primary-600 dark:text-primary-400":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300"])},[e("span",As,[(d(),Q(Tt(m.icon),{class:"w-4 h-4"})),le(" "+n(m.label),1)])],10,Is))),128))])])):w("",!0),e("div",Ts,[(d(!0),p(ye,null,fe(He.value,(m,f)=>(d(),p("div",{key:f,class:"relative"},[m.hint?(d(),p("p",Ks,[O(Y,{name:"exclamationCircle",size:"sm",class:"flex-shrink-0"}),le(" "+n(m.hint),1)])):w("",!0),e("div",Ls,[e("div",Ps,[e("span",Os,n(m.path),1),e("button",{type:"button",onClick:k=>vt(m.content,f),class:S(["flex flex-shrink-0 items-center gap-1.5 px-2.5 py-1 text-xs font-medium rounded-lg transition-colors",V.value===f?"bg-green-500/20 text-green-400":"bg-gray-700 hover:bg-gray-600 text-gray-300 hover:text-white"])}
214,[V.value===f?(d(),p("svg",Ds,[...u[5]||(u[5]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])])):(d(),p("svg",Rs,[...u[6]||(u[6]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.666 3.888A2.25 2.25 0 0013.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 01-.75.75H9a.75.75 0 01-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 01-2.25 2.25H6.75A2.25 2.25 0 014.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 011.927-.184"},null,-1)])])),le(" "+n(V.value===f?l(i)("keys.useKeyModal.copied"):l(i)("keys.useKeyModal.copy")),1)],10,Gs)]),e("pre",Ns,[m.highlighted?(d(),p("code",{key:0,innerHTML:m.highlighted},null,8,Us)):(d(),p("code",{key:1,textContent:n(m.content)},null,8,Bs))])])]))),128))]),we.value?(d(),p("section",Fs,[e("div",qs,[e("div",Vs,[e("h3",js,n(l(i)("keys.useKeyModal.codexModelCatalog.title")),1),e("p",Hs,n(l(i)("keys.useKeyModal.codexModelCatalog.description")),1),e("p",zs,n(ke.value),1)]),G.value==="ready"?(d(),p("button",{key:0,type:"button",class:"btn btn-primary min-h-9 flex-shrink-0 px-3 text-xs",onClick:Xe},[O(Y,{name:"download",size:"sm",class:"mr-1.5"}),le(" "+n(l(i)("keys.useKeyModal.codexModelCatalog.download")),1)])):(d(),p("button",{key:1,type:"button","data-testid":"codex-model-catalog-fetch",class:"btn btn-primary min-h-9 flex-shrink-0 px-3 text-xs",disabled:G.value==="loading"||!$.apiKey,onClick:Ye},[O(Y,{name:"refresh",size:"sm",class:S(["mr-1.5",G.value==="loading"?"animate-spin":""])},null,8,["class"]),le(" "+n(G.value==="error"?l(i)("keys.useKeyModal.codexModelCatalog.retry"):l(i)("keys.useKeyModal.codexModelCatalog.fetch")),1)],8,Ws))]),G.value==="ready"?(d(),p("p",Ys,n(l(i)("keys.useKeyModal.codexModelCatalog.modelsCount",{count:B.value})),1)):G.value==="error"?(d(),p("p",Xs,n(l(i)("keys.useKeyModal.codexModelCatalog.errorDescription")),1)):w("",!0)])):w("",!0),De.value?(d(),p("div",Qs,[O(Y,{name:"infoCircle",size:"md",class:"text-blue-500 flex-shrink-0 mt-0.5"}),e("p",Js,n(te.value),1)])):w("",!0)],64)):(d(),p("div",cs,[u[4]||(u[4]=e("svg",{class:"w-5 h-5 text-yellow-500 flex-shrink-0 mt-0.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"})],-1)),e("div",null,[e("p",ps,n(l(i)("keys.useKeyModal.noGroupTitle")),1),e("p",ms,n(l(i)("keys.useKeyModal.noGroupDescription")),1)])]))])]),_:1},8,["show","title"]))}}),to={key:0,class:"flex flex-wrap gap-2"},ao={class:"font-medium text-gray-600 dark:text-gray-300"},so={key:0,class:"rounded bg-primary-50 px-1 py-px text-[10px] font-medium leading-tight text-primary-600 dark:bg-primary-900/30 dark:text-primary-400"},oo={class:"group/endpoint relative flex items-center gap-1.5"},lo={class:"pointer-events-none absolute bottom-full left-1/2 z-20 mb-2 w-max max-w-[24rem] -translate-x-1/2 translate-y-1 rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-left opacity-0 shadow-[0_14px_36px_-20px_rgba(15,23,42,0.35)] ring-1 ring-slate-200/80 transition-all duration-150 group-hover/endpoint:translate-y-0 group-hover/endpoint:opacity-100 group-focus-within/endpoint:translate-y-0 group-focus-within/endpoint:opacity-100 dark:border-slate-700 dark:bg-slate-900 dark:ring-slate-700/70"},io={key:0,class:"max-w-[24rem] break-words text-xs leading-5 text-slate-600 dark:text-slate-200"},no=["onClick","onKeydown"],ro=["aria-label","onClick"],uo={key:0,class:"h-3 w-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2.2"},co={key:1,class:"h-3 w-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},po=["href","title"],mo=_t({__name:"EndpointPopover",props:{apiBaseUrl:{},customEndpoints:{}},setup($){const t=$,{t:g}=gt(),{copyToClipboard:M}=wt(),i=C(null);let pe;const V=D(()=>{const G=[];t.apiBaseUrl&&G.push({name:g("keys.endpoints.title"),endpoint:t.apiBaseUrl,de
214scription:"",isDefault:!0});for(const T of t.customEndpoints)G.push({...T,isDefault:!1});return G});async function A(G){await M(G,g("keys.endpoints.copied"))&&(i.value=G,pe!==void 0&&window.clearTimeout(pe),pe=window.setTimeout(()=>{i.value===G&&(i.value=null)},1800))}function x(G){return i.value===G?g("keys.endpoints.copiedHint"):g("keys.endpoints.clickToCopy")}function I(G){return`https://www.tcptest.cn/http/${encodeURIComponent(G)}`}return da(()=>{pe!==void 0&&window.clearTimeout(pe)}),(G,T)=>V.value.length>0?(d(),p("div",to,[(d(!0),p(ye,null,fe(V.value,(B,Z)=>(d(),p("div",{key:Z,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 text-xs transition-colors hover:border-primary-200 dark:border-dark-600 dark:bg-dark-800 dark:hover:border-primary-700"},[e("span",ao,n(B.name),1),B.isDefault?(d(),p("span",so,n(l(g)("keys.endpoints.default")),1)):w("",!0),T[5]||(T[5]=e("span",{class:"text-gray-300 dark:text-dark-500"},"|",-1)),e("div",oo,[e("div",lo,[B.description?(d(),p("p",io,n(B.description),1)):w("",!0),e("p",{class:S(["flex items-center gap-1.5 text-[11px] leading-4 text-primary-600 dark:text-primary-300",B.description?"mt-1.5":""])},[T[0]||(T[0]=e("span",{class:"h-1.5 w-1.5 rounded-full bg-primary-500 dark:bg-primary-300"},null,-1)),le(" "+n(x(B.endpoint)),1)],2),T[1]||(T[1]=e("div",{class:"absolute left-1/2 top-full h-3 w-3 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-slate-200 bg-white dark:border-slate-700 dark:bg-slate-900"},null,-1))]),e("code",{class:"cursor-pointer font-mono text-gray-500 decoration-gray-400 decoration-dashed underline-offset-2 hover:text-primary-600 hover:underline focus:text-primary-600 focus:underline focus:outline-none dark:text-gray-400 dark:decoration-gray-500 dark:hover:text-primary-400 dark:focus:text-primary-400",role:"button",tabindex:"0",onClick:ee=>A(B.endpoint),onKeydown:[Kt(st(ee=>A(B.endpoint),["prevent"]),["enter"]),Kt(st(ee=>A(B.endpoint),["prevent"]),["space"])]},n(B.endpoint),41,no),e("button",{type:"button",class:S(["rounded p-0.5 transition-colors",i.value===B.endpoint?"text-emerald-500 dark:text-emerald-400":"text-gray-400 hover:text-primary-500 dark:text-gray-500 dark:hover:text-primary-400"]),"aria-label":x(B.endpoint),onClick:ee=>A(B.endpoint)},[i.value===B.endpoint?(d(),p("svg",uo,[...T[2]||(T[2]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 13l4 4L19 7"},null,-1)])])):(d(),p("svg",co,[...T[3]||(T[3]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"},null,-1)])]))],10,ro),e("a",{href:I(B.endpoint),target:"_blank",rel:"noopener noreferrer",class:"rounded p-0.5 text-gray-400 transition-colors hover:text-amber-500 dark:text-gray-500 dark:hover:text-amber-400",title:l(g)("keys.endpoints.speedTest")},[...T[4]||(T[4]=[e("svg",{class:"h-3 w-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])],8,po)])]))),128))])):w("",!0)}}),_o=["anthropic","openai","domestic","other"],go={anthropic:"anthropic",openai:"openai",kimi:"domestic",zhipu:"domestic",deepseek:"domestic",minimax:"domestic",gemini:"other",grok:"other",antigravity:"other",composite:"other",opencode_go:"other"};function Gt($){return go[$]??"other"}const yo={anthropic:["anthropic"],openai:["openai"],domestic:["deepseek","kimi"],other:["gemini","grok"]},ko="gpt-5.5",vo="grok-4.5";function Dt($){const t=$.replace(/\/+$/,"");return t.endsWith("/v1")?t:`${t}/v1`}function ho($,t,g){switch($||"anthropic"){case"antigravity":return{app:t==="gemini"?"gemini":"claude",endpoint:`${g.replace(/\/+$/,"")}/antigravity`};case"openai":return{app:"codex",endpoint:Dt(g),model:ko};case"gemini":return{app:"gemini",endpoint:g};case"grok":return{app:"grokbuild",endpoint:Dt(g),model:vo};default:return{app:"claude",endpoint:g}}}function xo($){const t=ho($.platform,$.clientType,$.baseUrl),g=[["resource","provider"],["app",t.app],["name",$.providerName],["homepage",$.baseUrl],["endpoint",t.endpoint],["apiKey",$.apiKey],["configFormat","json"],["usageEnabled","true"],["usageScript",btoa($.usageScript)],["usageAutoInterval","30"]];return t.model&&g.splice(2,0,["model",t.model]),`ccswitch://v1/import?${new URLSearchParams(g).toString()}`}const bo={class:"flex flex-col gap-3"},fo={class:"flex flex-wrap items-center gap-3"},wo={key:1,class:"flex flex-wrap items-center gap-3 text-sm"},$o={class:"text-gray-600 dark:text-gray-300"},Co=["disabled"],Mo={class:"flex justify-end gap-3"},Eo=["disabled","title"],So=["title"],Io={class:"hidden md:inline"},Ao={key:0,class:"absolute right-0 top-full z-50 mt-1 max-h-80 w-48 overflow-y-auto rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-dark-600 dark:bg-dark-800"},To=["onClick"],Ko={class:"font-mono text-xs text-gray-500 dark:text-gray-400"},Lo={class:"flex items-center gap-2"},Po={class:"code text-xs"},Oo=["onClick","title"],Go={class:"flex items-center gap-1.5"},Do={class:"font-medium text-gray-900 dark:text-white"},Ro={class:"group/dropdown relative"},No=["onClick","title"],Uo={key:1,class:"text-sm text-gray-400 dark:text-dark-500"},Bo={class:"text-xs text-gray-500 dark:text-gray-400"},Fo={class:"text-sm"},qo={class:"flex items-center gap-1.5"},Vo={class:"text-gray-500 dark:text-gray-400"},jo={class:"font-medium text-gray-900 dark:text-white"},Ho={class:"mt-0.5 flex items-center gap-1.5"},zo={class:"text-gray-500 dark:text-gray-400"},Wo={class:"font-medium text-gray-900 dark:text-white"},Yo={key:0,class:"mt-1.5"},Xo={class:"flex items-center gap-1.5"},Qo={class:"text-gray-500 dark:text-gray-400"},Jo={class:"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},Zo={key:0,class:"space-y-1.5 min-w-[140px]"},el={key:0},tl={class:"flex items-center justify-between text-xs"},al={class:"h-1 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},sl={key:0,class:"text-[10px] text-gray-400 dark:text-gray-500 tabular-nums"},ol={key:1},ll={class:"flex items-center justify-between text-xs"},il={class:"h-1 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},nl={key:0,class:"text-[10px] text-gray-400 dark:text-gray-500 tabular-nums"},rl={key:2},dl={class:"flex items-center justify-between text-xs"},ul={class:"h-1 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},cl={key:0,class:"text-[10px] text-gray-400 dark:text-gray-500 tabular-nums"},pl=["onClick","title"],ml={key:1,class:"text-sm text-gray-400 dark:text-dark-500"},_l={key:1,class:"text-sm text-gray-400 dark:text-dark-500"},gl={key:0,class:"text-sm text-gray-500 dark:text-dark-400"},yl={key:1,class:"text-sm text-gray-400 dark:text-dark-500"},kl={key:0,class:"text-sm text-gray-500 dark:text-dark-400"},vl={key:1,class:"text-sm text-gray-400 dark:text-dark-500"},hl={class:"text-sm text-gray-500 dark:text-dark-400"},xl={class:"flex items-center gap-1"},bl=["onClick"],fl={class:"text-xs"},wl=["onClick"],$l={class:"text-xs"},Cl=["onClick"],Ml={class:"text-xs"},El=["onClick"],Sl={class:"text-xs"},Il=["onClick"],Al={class:"text-xs"},Tl={class:"input-label"},Kl=["placeholder"],Ll={key:0,"data-tour":"key-form-provider"},Pl={class:"input-label"},Ol={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},Gl=["value","checked","disabled","onChange"],Dl={class:"flex h-8 items-center justify-center gap-1.5","aria-hidden":"true"},Rl={class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},Nl={key:0,class:"absolute right-1.5 top-1.5 flex h-4 w-4 items-center justify-center rounded-full bg-primary-500 text-white","aria-hidden":"true"},Ul={class:"mt-2 text-xs leading-5 text-gray-500 dark:text-gray-400","aria-live":"polite"},Bl={class:"input-label",for:"key-form-group"},Fl={key:1,class:"text-gray-400"},ql={key:1,class:"space-y-3"},Vl={class:"flex items-center justify-between"},jl={class:"input-label mb-0"},Hl={key:0},zl=["placeholder"],Wl={key:0,class:"mt-1 text-sm text-red-500"},Yl={key:1,class:"input-hint"},Xl={key:2},Ql={class:"input-label"},Jl={class:"space-y-3"},Zl={class:"flex items-center justify-between"},ei={class:"input-label mb-0"},ti={key:0,class:"space-y-4 pt-2"},ai={class:"input-label"},si=["placeholder"],oi={class:"input-hint"},li={class:"input-label"},ii=["placeholder"],ni={class:"input-hint"},ri={class:"space-y-3"},di={class:"input-label"},ui={class:"space-y-4"},ci={class:"relative"},pi=["placeholder"],mi={class:"input-hint"},_i={key:0},gi={class:"input-label"},yi={class:"flex items-center gap-2"},ki={class:"flex-1 rounded-lg bg-gray-100 px-3 py-2 dark:bg-dark-700"},vi={class:"font-medium text-gray-900 dark:text-white"},hi={class:"text-gray-500 dark:text-gray-400"},xi=["title"],bi={class:"space-y-3"},fi={class:"flex items-center justify-between"},wi={class:"input-label mb-0"},$i={key:0,class:"space-y-4 pt-2"},Ci={class:"input-hint -mt-2"},Mi={class:"input-label"},Ei={class:"relative"},Si={key:0,class:"mt-2"},Ii={class:"flex items-center gap-2"},Ai={class:"flex-1 rounded-lg bg-gray-100 px-3 py-2 dark:bg-dark-700 text-sm"},Ti={class:"text-gray-500 dark:text-gray-400"},Ki={class:"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},Li={class:"input-label"},Pi={class:"relative"},Oi={key:0,class:"mt-2"},Gi={class:"flex items-center gap-2"},Di={class:"flex-1 rounded-lg bg-gray-100 px-3 py-2 dark:bg-dark-700 text-sm"},Ri={class:"text-gray-500 dark:text-gray-400"},Ni={class:"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},Ui={class:"input-label"},Bi={class:"relative"}
214,Fi={key:0,class:"mt-2"},qi={class:"flex items-center gap-2"},Vi={class:"flex-1 rounded-lg bg-gray-100 px-3 py-2 dark:bg-dark-700 text-sm"},ji={class:"text-gray-500 dark:text-gray-400"},Hi={class:"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-dark-600"},zi={key:0},Wi={class:"space-y-3"},Yi={class:"flex items-center justify-between"},Xi={class:"input-label mb-0"},Qi={key:0,class:"space-y-4 pt-2"},Ji={class:"flex flex-wrap gap-2"},Zi=["onClick"],en={class:"input-label"},tn={class:"input-hint"},an={key:0,class:"text-sm"},sn={class:"text-gray-500 dark:text-gray-400"},on={class:"font-medium text-gray-900 dark:text-white"},ln={class:"flex justify-end gap-3"},nn=["disabled"],rn={key:0,class:"-ml-1 mr-2 h-4 w-4 animate-spin",fill:"none",viewBox:"0 0 24 24"},dn={class:"space-y-4"},un={class:"text-sm text-gray-600 dark:text-gray-400"},cn={class:"grid grid-cols-2 gap-3"},pn={class:"font-medium text-gray-900 dark:text-white"},mn={class:"text-xs text-gray-500 dark:text-gray-400"},_n={class:"font-medium text-gray-900 dark:text-white"},gn={class:"text-xs text-gray-500 dark:text-gray-400"},yn={class:"flex justify-end"},kn={class:"border-b border-gray-100 p-2 dark:border-dark-700"},vn={class:"relative"},hn=["placeholder"],xn={class:"max-h-80 overflow-y-auto p-1.5"},bn=["onClick","title"],fn={key:0,class:"py-4 text-center text-sm text-gray-400 dark:text-gray-500"},Rt="api-key-hidden-columns",ct="api-key-column-settings-version",dt=3,Yn=_t({__name:"KeysView",setup($){const{t}=gt(),g=s=>{const a=new Date(s),v=K=>K.toString().padStart(2,"0");return`${a.getFullYear()}-${v(a.getMonth()+1)}-${v(a.getDate())}T${v(a.getHours())}:${v(a.getMinutes())}`},M=Nt(),i=_a(),{copyToClipboard:pe}=wt(),V=D(()=>[{key:"name",label:t("common.name"),sortable:!0},{key:"id",label:t("keys.id"),sortable:!0},{key:"key",label:t("keys.apiKey"),sortable:!1},{key:"group",label:t("keys.group"),sortable:!1},{key:"current_concurrency",label:t("keys.currentConcurrency"),sortable:!0},{key:"usage",label:t("keys.usage"),sortable:!1},{key:"rate_limit",label:t("keys.rateLimitColumn"),sortable:!1},{key:"expires_at",label:t("keys.expiresAt"),sortable:!0},{key:"status",label:t("common.status"),sortable:!0},{key:"last_used_at",label:t("keys.lastUsedAt"),sortable:!0},{key:"last_used_ip",label:t("keys.lastUsedIP"),sortable:!1},{key:"created_at",label:t("keys.created"),sortable:!0},{key:"actions",label:t("common.actions"),sortable:!1}]),A=new Set(["name","actions"]),x=["id","rate_limit","last_used_at","last_used_ip"],I={2:["last_used_ip"],3:["id"]},G=D(()=>V.value.filter(s=>!A.has(s.key))),T=pt(new Set),B=()=>{try{localStorage.setItem(Rt,JSON.stringify([...T])),localStorage.setItem(ct,String(dt))}catch(s){console.error("Failed to save API key table columns:",s)}},Z=()=>{T.clear();try{const s=localStorage.getItem(Rt);if(s){const a=JSON.parse(s),v=new Set(V.value.map(E=>E.key));a.filter(E=>typeof E=="string"&&v.has(E)&&!A.has(E)).forEach(E=>T.add(E));const K=Number(localStorage.getItem(ct)??"1");if(K<dt){for(let E=K+1;E<=dt;E++)for(const j of I[E]??[])v.has(j)&&!A.has(j)&&T.add(j);B()}else localStorage.setItem(ct,String(dt))}else x.forEach(a=>T.add(a)),localStorage.setItem(ct,String(dt))}catch(s){console.error("Failed to load API key table columns:",s),x.forEach(a=>T.add(a))}},ee=s=>{A.has(s)||(T.has(s)?T.delete(s):T.add(s),B())},we=s=>!T.has(s),ke=D(()=>V.value.filter(s=>A.has(s.key)||!T.has(s.key))),ve=C([]),ae=C([]),Ge=C(!1),Le=D(()=>ve.value.filter(s=>ae.value.includes(s.id))),q=s=>{const a=new Set(ve.value.map(v=>v.id));ae.value=[...new Set(s.map(Number))].filter(v=>a.has(v))},Fe=s=>{const a=new Set(s);ae.value=ae.value.filter(v=>!a.has(v)),be()},he=C([]),Ae=C(!1),R=C(!1),h=C(new Date);let b=null;const z=C({}),qe=C({}),te=C({page:1,page_size:ya(),total:0,pages:0}),De=C({sort_by:"created_at",sort_order:"desc"}),Ve=C(""),Ye=C(""),Xe=C(""),Re=C(!1),F=C(!1),je=C(!1),Qe=C(!1),$e=C(!1),me=C(!1),re=C(!1),de=C(!1),ie=C(null),_=C(null),He=C(null),ne=C(null),Ce=C(null),ot=C(null),lt=C(null),ue=C(null),Je=C(new Map);let Te=null;const Me=D(()=>ne.value===null?null:ve.value.find(s=>
214s.id===ne.value)||null),yt=(s,a)=>{a instanceof HTMLElement?Je.value.set(s,a):Je.value.delete(s)},c=C({name:"",group_id:null,status:"active",use_custom_key:!1,custom_key:"",enable_ip_restriction:!1,ip_whitelist:"",ip_blacklist:"",enable_quota:!1,quota:null,enable_rate_limit:!1,rate_limit_5h:null,rate_limit_1d:null,rate_limit_7d:null,enable_expiration:!1,expiration_preset:"30",expiration_date:""}),xe=D(()=>{if(!c.value.use_custom_key||!c.value.custom_key)return"";const s=c.value.custom_key;return s.length<16?t("keys.customKeyTooShort"):/^[a-zA-Z0-9_-]+$/.test(s)?"":t("keys.customKeyInvalidChars")}),kt=D(()=>[{value:"active",label:t("common.active")},{value:"inactive",label:t("common.inactive")}]),Pe=(s,a)=>s.status==="quota_exhausted"||s.status==="expired"?a==="active":!0,vt=D(()=>[{value:"",label:t("keys.allGroups")},{value:0,label:t("keys.noGroup")},...he.value.map(s=>({value:s.id,label:s.name}))]),r=D(()=>[{value:"",label:t("keys.allStatus")},{value:"active",label:t("keys.status.active")},{value:"inactive",label:t("keys.status.inactive")},{value:"quota_exhausted",label:t("keys.status.quota_exhausted")},{value:"expired",label:t("keys.status.expired")}]),u=()=>{ae.value=[],te.value.page=1,be()},m=s=>{Xe.value=s,u()},f=s=>{Ye.value=s,u()},k=D(()=>he.value.map(s=>({value:s.id,label:s.name,description:s.description,rate:s.rate_multiplier,userRate:qe.value[s.id]??null,peakRateEnabled:s.peak_rate_enabled,peakStart:s.peak_start,peakEnd:s.peak_end,peakRateMultiplier:s.peak_rate_multiplier,subscriptionType:s.subscription_type,platform:s.platform}))),L=C("anthropic"),P=D(()=>_o.map(s=>({value:s,label:t(`keys.providers.${s}`),count:he.value.filter(a=>Gt(a.platform)===s).length}))),W=D(()=>F.value?k.value:k.value.filter(s=>Gt(s.platform)===L.value)),X=s=>{L.value!==s&&(L.value=s,c.value.group_id=null)};tt([Re,P],([s,a],[v])=>{var K;s&&((!v||!a.some(E=>E.value===L.value&&E.count>0))&&X(((K=a.find(E=>E.count>0))==null?void 0:K.value)??"anthropic"),W.value.some(E=>E.value===c.value.group_id)||(c.value.group_id=null))});const _e=C(""),ze=D(()=>{const s=_e.value.trim().toLowerCase();return s?k.value.filter(a=>a.label.toLowerCase().includes(s)||a.description&&a.description.toLowerCase().includes(s)):k.value}),it=async(s,a)=>{await pe(s,t("keys.copied"))&&(He.value=a,setTimeout(()=>{He.value=null},800))},$t=s=>{if(!s||typeof s!="object")return!1;const{name:a,code:v}=s;return a==="AbortError"||v==="ERR_CANCELED"},be=async()=>{Te==null||Te.abort();const s=new AbortController;Te=s;const{signal:a}=s;Ae.value=!0;try{const v={};Ve.value&&(v.search=Ve.value),Ye.value&&(v.status=Ye.value),Xe.value!==""&&(v.group_id=Xe.value),v.sort_by=De.value.sort_by,v.sort_order=De.value.sort_order;const K=await Oe.list(te.value.page,te.value.page_size,v,{signal:a});if(a.aborted)return;if(ve.value=K.items,q(ae.value),te.value.total=K.total,te.value.pages=K.pages,K.items.length>0){const E=K.items.map(j=>j.id);try{const j=await ka.getDashboardApiKeysUsage(E,{signal:a});if(a.aborted)return;z.value=j.stats}catch(j){$t(j)||console.error("Failed to load usage stats:",j)}}}catch(v){if($t(v))return;M.showError(t("keys.failedToLoad"))}finally{Te===s&&(Ae.value=!1)}},Bt=async()=>{try{he.value=await Lt.getAvailable()}catch(s){console.error("Failed to load groups:",s)}},Ft=async()=>{try{qe.value=await Lt.getUserGroupRates()}catch(s){console.error("Failed to load user group rates:",s)}},qt=async()=>{try{Ce.value=await ma.getPublicSettings()}catch(s){console.error("Failed to load public settings:",s)}},Vt=s=>{_.value=s,me.value=!0},jt=()=>{me.value=!1,_.value=null},Ht=s=>{ae.value=[],te.value.page=s,be()},zt=s=>{ae.value=[],te.value.page_size=s,te.value.page=1,be()},Wt=(s,a)=>{ae.value=[],De.value.sort_by=s,De.value.sort_order=a,te.value.page=1,be()},Yt=s=>{var K,E;_.value=s;const a=((K=s.ip_whitelist)==null?void 0:K.length)>0||((E=s.ip_blacklist)==null?void 0:E.length)>0,v=!!s.expires_at;c.value={name:s.name,group_id:s.group_id,status:s.status==="quota_exhausted"||s.status==="expired"?"inactive":s.status,use_custom_key:!1,custom_key:"",enable_ip_restriction:a,ip_whitelist:(s.ip_whitelist||[]).join(`
215`),ip_blacklist:(s.ip_blacklist||[]).join(`
216`),enable_quota:s.quota>0,quota:s.quota>0?s.quota:null,enable_rate_limit:s.rate_limit_5h>0||s.rate_limit_1d>0||s.rate_limit_7d>0,rate_limit_5h:s.rate_limit_5h||null,rate_limit_1d:s.rate_limit_1d||null,rate_limit_7d:s.rate_limit_7d||null,enable_expiration:v,expiration_preset:"custom",expiration_date:s.expires_at?g(s.expires_at):""},F.value=!0},Xt=async s=>{const a=s.status==="active"?"inactive":"active";try{await Oe.toggleStatus(s.id,a),M.showSuccess(t(a==="active"?"keys.keyEnabledSuccess":"keys.keyDisabledSuccess")),be()}catch{M.showError(t("keys.failedToUpdateStatus"))}},Qt=s=>{if(ne.value===s.id)ne.value=null,ue.value=null;else{const a=Je.value.get(s.id);if(a){const v=a.getBoundingClientRect(),K=400,E=Math.min(380,window.innerWidth-16),j=window.innerHeight-v.bottom,Ee=v.top,Se=Math.max(8,Math.min(v.left,window.innerWidth-E-8));j<K&&Ee>j?ue.value={bottom:window.innerHeight-v.top+4,left:Se}:ue.value={top:v.bottom+4,left:Se}}ne.value=s.id,_e.value=""}}
216,Jt=async(s,a)=>{if(ne.value=null,ue.value=null,s.group_id!==a)try{await Oe.update(s.id,{group_id:a}),M.showSuccess(t("keys.groupChangedSuccess")),be()}catch{M.showError(t("keys.failedToChangeGroup"))}},Ct=s=>{var v;const a=s.target;!a.closest(".group\\/dropdown")&&!((v=ot.value)!=null&&v.contains(a))&&(ne.value=null,ue.value=null),lt.value&&!lt.value.contains(a)&&(de.value=!1)},Zt=s=>{_.value=s,je.value=!0},ea=async()=>{var Se,Ne;if(c.value.group_id===null){M.showError(t("keys.groupRequired"));return}if(!F.value&&c.value.use_custom_key){if(!c.value.custom_key){M.showError(t("keys.customKeyRequired"));return}if(xe.value){M.showError(xe.value);return}}const s=oe=>oe.split(`
217`).map(Ie=>Ie.trim()).filter(Ie=>Ie.length>0),a=c.value.enable_ip_restriction?s(c.value.ip_whitelist):[],v=c.value.enable_ip_restriction?s(c.value.ip_blacklist):[],K=c.value.quota&&c.value.quota>0?c.value.quota:0;let E,j;if(c.value.enable_expiration&&c.value.expiration_date)if(F.value)j=new Date(c.value.expiration_date).toISOString();else{const oe=new Date(c.value.expiration_date),Ie=new Date,nt=Math.ceil((oe.getTime()-Ie.getTime())/(1e3*60*60*24));E=nt>0?nt:1}else F.value&&(j="");const Ee=c.value.enable_rate_limit?{rate_limit_5h:c.value.rate_limit_5h&&c.value.rate_limit_5h>0?c.value.rate_limit_5h:0,rate_limit_1d:c.value.rate_limit_1d&&c.value.rate_limit_1d>0?c.value.rate_limit_1d:0,rate_limit_7d:c.value.rate_limit_7d&&c.value.rate_limit_7d>0?c.value.rate_limit_7d:0}:{rate_limit_5h:0,rate_limit_1d:0,rate_limit_7d:0};R.value=!0;try{if(F.value&&_.value){const oe={name:c.value.name,group_id:c.value.group_id,ip_whitelist:a,ip_blacklist:v,quota:K,expires_at:j,rate_limit_5h:Ee.rate_limit_5h,rate_limit_1d:Ee.rate_limit_1d,rate_limit_7d:Ee.rate_limit_7d};Pe(_.value,c.value.status)&&(oe.status=c.value.status),await Oe.update(_.value.id,oe),M.showSuccess(t("keys.keyUpdatedSuccess"))}else{const oe=c.value.use_custom_key?c.value.custom_key:void 0;await Oe.create(c.value.name,c.value.group_id,oe,a,v,K,E,Ee),M.showSuccess(t("keys.keyCreatedSuccess")),i.isCurrentStep('[data-tour="key-form-submit"]')&&i.nextStep(500)}ht(),be()}catch(oe){const Ie=((Ne=(Se=oe.response)==null?void 0:Se.data)==null?void 0:Ne.detail)||t("keys.failedToSave");M.showError(Ie)}finally{R.value=!1}},ta=async()=>{if(_.value)try{await Oe.delete(_.value.id),M.showSuccess(t("keys.keyDeletedSuccess")),je.value=!1,be()}catch(s){const a=(s==null?void 0:s.message)||t("keys.failedToDelete");M.showError(a)}},ht=()=>{Re.value=!1,F.value=!1,_.value=null,c.value={name:"",group_id:null,status:"active",use_custom_key:!1,custom_key:"",enable_ip_restriction:!1,ip_whitelist:"",ip_blacklist:"",enable_quota:!1,quota:null,enable_rate_limit:!1,rate_limit_5h:null,rate_limit_1d:null,rate_limit_7d:null,enable_expiration:!1,expiration_preset:"30",expiration_date:""}},aa=()=>{Qe.value=!0},sa=s=>{c.value.expiration_preset=s.toString();const a=new Date;a.setDate(a.getDate()+s),c.value.expiration_date=g(a.toISOString())},oa=async()=>{var a,v,K;const s=_.value;if(s){Qe.value=!1;try{const E=await Oe.update(s.id,{reset_quota:!0});M.showSuccess(t("keys.quotaResetSuccess")),s.quota_used=E.quota_used,s.status!==E.status&&(s.status=E.status,((a=_.value)==null?void 0:a.id)===s.id&&(c.value.status=E.status==="active"?"active":"inactive"))}catch(E){const j=((K=(v=E.response)==null?void 0:v.data)==null?void 0:K.detail)||t("keys.failedToResetQuota");M.showError(j)}}},la=()=>{$e.value=!0},ia=s=>{_.value=s,$e.value=!0},na=async()=>{var s,a;if(_.value){$e.value=!1;try{await Oe.update(_.value.id,{reset_rate_limit_usage:!0}),M.showSuccess(t("keys.rateLimitResetSuccess")),await be();const v=ve.value.find(K=>K.id===_.value.id);v&&(_.value=v)}catch(v){const K=((a=(s=v.response)==null?void 0:s.data)==null?void 0:a.detail)||t("keys.failedToResetRateLimit");M.showError(K)}}},ra=s=>{var v;const a=((v=s.group)==null?void 0:v.platform)||"anthropic";if(a==="antigravity"){ie.value=s,re.value=!0;return}Mt(s,a==="gemini"?"gemini":"claude")},Mt=(s,a)=>{var Se,Ne,oe;const v=((Se=Ce.value)==null?void 0:Se.api_base_url)||window.location.origin,K=((Ne=s.group)==null?void 0:Ne.platform)||"anthropic",E=`({
218    request: {
219      url: "{{baseUrl}}/v1/usage",
220      method: "GET",
221      headers: { "Authorization": "Bearer {{apiKey}}" }
222    },
223    extractor: function(response) {
224      const remaining = response?.remaining ?? response?.quota?.remaining ?? response?.balance;
225      const unit = response?.unit ?? response?.quota?.unit ?? "USD";
226      return {
227        isValid: response?.is_active ?? response?.isValid ?? true,
228        remaining,
229        unit
230      };
231    }
232  })`,j=(((oe=Ce.value)==null?void 0:oe.site_name)||"sub2api").trim()||"sub2api",Ee=xo({baseUrl:v,platform:K,clientType:a,providerName:j,apiKey:s.key,usageScript:E});try{window.open(Ee,"_self"),setTimeout(()=>{document.hasFocus()&&M.showError(t("keys.ccSwitchNotInstalled"))},100)}catch{M.showError(t("keys.ccSwitchNotInstalled"))}},Et=s=>{ie.value&&Mt(ie.value,s),re.value=!1,ie.value=null},St=()=>{re.value=!1,ie.value=null};function Ze(s){if(!s)return"";const a=new Date(s).getTime()-h.value.getTime();if(a<=0)return t("keys.resetNow");const v=Math.floor(a/864e5),K=Math.floor(a%864e5/36e5),E=Math.floor(a%36e5/6e4);return v>0?`${v}d ${K}h`:K>0?`${K}h ${E}m`:`${E}m`}return ua(()=>{Z(),be(),Bt(),Ft(),qt(),document.addEventListener("click",Ct),b=setInterval(()=>{h.value=new Date},6e4)}
232),ca(()=>{document.removeEventListener("click",Ct),b&&clearInterval(b)}),(s,a)=>(d(),Q(ga,null,{default:U(()=>{var v,K,E,j,Ee,Se,Ne,oe,Ie,nt,It;return[O(va,null,{filters:U(()=>{var o,N,H,se,ce;return[e("div",bo,[e("div",fo,[O(fa,{modelValue:Ve.value,"onUpdate:modelValue":a[0]||(a[0]=Ke=>Ve.value=Ke),placeholder:l(t)("keys.searchPlaceholder"),class:"w-full sm:w-64",onSearch:u},null,8,["modelValue","placeholder"]),O(at,{"model-value":Xe.value,class:"w-40",options:vt.value,"onUpdate:modelValue":m},null,8,["model-value","options"]),O(at,{"model-value":Ye.value,class:"w-40",options:r.value,"onUpdate:modelValue":f},null,8,["model-value","options"])]),(o=Ce.value)!=null&&o.api_base_url||(((H=(N=Ce.value)==null?void 0:N.custom_endpoints)==null?void 0:H.length)??0)>0?(d(),Q(mo,{key:0,"api-base-url":((se=Ce.value)==null?void 0:se.api_base_url)||"","custom-endpoints":((ce=Ce.value)==null?void 0:ce.custom_endpoints)||[]},null,8,["api-base-url","custom-endpoints"])):w("",!0),ae.value.length?(d(),p("div",wo,[e("span",$o,n(l(t)("keys.bulkEdit.selectedCount",{count:ae.value.length})),1),e("button",{class:"btn btn-primary btn-sm",disabled:Ae.value,"data-test":"bulk-edit-keys",onClick:a[1]||(a[1]=Ke=>Ge.value=!0)},n(l(t)("keys.bulkEdit.title")),9,Co),e("button",{class:"btn btn-secondary btn-sm",onClick:a[2]||(a[2]=Ke=>ae.value=[])},n(l(t)("keys.bulkEdit.clearSelection")),1)])):w("",!0)])]}),actions:U(()=>[e("div",Mo,[e("button",{onClick:be,disabled:Ae.value,class:"btn btn-secondary",title:l(t)("common.refresh")},[O(Y,{name:"refresh",size:"md",class:S(Ae.value?"animate-spin":"")},null,8,["class"])],8,Eo),e("div",{class:"relative",ref_key:"columnDropdownRef",ref:lt},[e("button",{onClick:a[3]||(a[3]=o=>de.value=!de.value),class:"btn btn-secondary px-2 md:px-3",title:l(t)("keys.columnSettings")},[a[30]||(a[30]=e("svg",{class:"h-4 w-4 md:mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"1.5"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 4.5v15m6-15v15m-10.875 0h15.75c.621 0 1.125-.504 1.125-1.125V5.625c0-.621-.504-1.125-1.125-1.125H4.125C3.504 4.5 3 5.004 3 5.625v12.75c0 .621.504 1.125 1.125 1.125z"})],-1)),e("span",Io,n(l(t)("keys.columnSettings")),1)],8,So),de.value?(d(),p("div",Ao,[(d(!0),p(ye,null,fe(G.value,o=>(d(),p("button",{key:o.key,onClick:N=>ee(o.key),class:"flex w-full items-center justify-between px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"},[e("span",null,n(o.label),1),we(o.key)?(d(),Q(Y,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):w("",!0)],8,To))),128))])):w("",!0)],512),e("button",{onClick:a[4]||(a[4]=o=>Re.value=!0),class:"btn btn-primary","data-tour":"keys-create-btn"},[O(Y,{name:"plus",size:"md",class:"mr-2"}),le(" "+n(l(t)("keys.createKey")),1)])])]),table:U(()=>[O(ha,{columns:ke.value,data:ve.value,loading:Ae.value,selectable:"","row-key":"id","selected-keys":ae.value,"selection-label":o=>l(t)("keys.bulkEdit.selectKey",{name:o.name}),"onUpdate:selectedKeys":q,"server-side-sort":!0,"default-sort-key":"created_at","default-sort-order":"desc",onSort:Wt},{"cell-id":U(({value:o})=>[e("span",Ko,"#"+n(o),1)]),"cell-key":U(({value:o,row:N})=>[e("div",Lo,[e("code",Po,n(l($a)(o)),1),e("button",{onClick:H=>it(o,N.id),class:S(["rounded-lg p-1 transition-colors hover:bg-gray-100 dark:hover:bg-dark-700",He.value===N.id?"text-green-500":"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"]),title:He.value===N.id?l(t)("keys.copied"):l(t)("keys.copyToClipboard")},[He.value===N.id?(d(),Q(Y,{key:0,name:"check",size:"sm","stroke-width":2})):(d(),Q(Y,{key:1,name:"clipboard",size:"sm"}))],10,Oo)])]),"cell-name":U(({value:o,row:N})=>{var H,se;return[e("div",Go,[e("span",Do,n(o),1),((H=N.ip_whitelist)==null?void 0:H.length)>0||((se=N.ip_blacklist)==null?void 0:se.length)>0?(d(),Q(Y,{key:0,name:"shield",size:"sm",class:"text-blue-500",title:l(t)("keys.ipRestrictionEnabled")},null,8,["title"])):w("",!0)])]}),"cell-group":U(({row:o})=>[e("div",Ro,[e("button",{ref:N=>yt(o.id,N),onClick:N=>Qt(o),class:"-mx-2 -my-1 flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 transition-all duration-200 hover:bg-gray-100 dark:hover:bg-dark-700",title:l(t)("keys.clickToChangeGroup")},[o.group?(d(),Q(Pt,{key:0,name:o.group.name,platform:o.group.platform,"subscription-type":o.group.subscription_type,"rate-multiplier":o.group.rate_multiplier,"user-rate-multiplier":qe.value[o.group.id],"peak-rate-enabled":o.group.peak_rate_enabled,"peak-start":o.group.peak_start,"peak-end":o.group.peak_end,"peak-rate-multiplier":o.group.peak_rate_multiplier},null,8,["name","platform","subscription-type","rate-multiplier","user-rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier"])):(d(),p("span",Uo,n(l(t)("keys.noGroup")),1)),e("span",Bo,n(l(t)("keys.selectGroup")),1),a[31]||(a[31]=e("svg",{class:"h-3.5 w-3.5 text-gray-400 opacity-60 transition-opacity group-hover/dropdown:opacity-100",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"})],-1))],8,No)])]),"cell-current_concurrency":U(({value:o})=>[e("span",{class:S(["inline-flex min-w-8 items-center justify-center rounded px-2 py-1 text-sm font-semibold tabular-nums",(o??0)>0?"bg-emerald-50 text-emerald-700 ring-1 ring-emerald-200 dark:bg-emerald-900/25 dark:text-emerald-300 dark:ring-emerald-800":"bg-gray-100 text-gray-500 dark:bg-dark-700 dark:text-dark-400"])},n(o??0),3)]),"cell-usage":U(({row:o})=>{var N,H,se,ce;return[e("div",Fo,[e("div",qo,[e("span",Vo,n(l(t)("keys.today"))+":",1),e("span",jo," $"+n((((N=z.value[o.id])==null?void 0:N.today_actual_cost)??0).toFixed(4)),1)]),e("div",Ho,[e("span",zo,n(l(t)("keys.total"))+":",1),e("span",Wo," $"+n((((H=z.value[o.id])==null?void 0:H.total_actual_cost)??0).toFixed(4)),1)]),o.quota>0?(d(),p("div",Yo,[e("div",Xo,[e("span",Qo,n(l(t)("keys.quota"))+":",1),e("span",{class:S(["font-medium",o.quota_used>=o.quota?"text-red-500":o.quota_used>=o.quota*.8?"text-yellow-500":"text-gray-900 dark:text-white"])}," $"+n(((se=o.quota_used)==null?void 0:se.toFixed(2))||"0.00")+" / $"+n((ce=o.quota)==null?void 0:ce.toFixed(2)),3)]),e("div",Jo,[e("div",{class:S(["h-full rounded-full transition-all",o.quota_used>=o.quota?"bg-red-500":o.quota_used>=o.quota*.8?"bg-yellow-500":"bg-primary-500"]),style:Be({width:Math.min(o.quota_used/o.quota*100,100)+"%"})},null,6)])])):w("",!0)])]}),"cell-rate_limit":U(({row:o})=>{var N,H,se,ce,Ke,rt;return[o.rate_limit_5h>0||o.rate_limit_1d>0||o.rate_limit_7d>0?(d(),p("div",Zo,[o.rate_limit_5h>0?(d(),p("div",el,[e("div",tl,[a[32]||(a[32]=e("span",{class:"text-gray-500 dark:text-gray-400"},"5h",-1)),e("span",{class:S(["font-medium tabular-nums",o.usage_5h>=o.rate_limit_5h?"text-red-500":o.usage_5h>=o.rate_limit_5h*.8?"text-yellow-500":"text-gray-700 dark:text-gray-300"])}," $"+n(((N=o.usage_5h)==null?void 0:N.toFixed(2))||"0.00")+"/$"+n((H=o.rate_limit_5h)==null?void 0:H.toFixed(2)),3)]),e("div",al,[e("div",{class:S(["h-full rounded-full transition-all",o.usage_5h>=o.rate_limit_5h?"bg-red-500":o.usage_5h>=o.rate_limit_5h*.8?"bg-yellow-500":"bg-emerald-500"]),style:Be({width:Math.min(o.usage_5h/o.rate_limit_5h*100,100)+"%"})},null,6)]),o.reset_5h_at&&Ze(o.reset_5h_at)?(d(),p("div",sl," ⟳ "+n(Ze(o.reset_5h_at)),1)):w("",!0)])):w("",!0),o.rate_limit_1d>0?(d(),p("div",ol,[e("div",ll,[a[33]||(a[33]=e("span",{class:"text-gray-500 dark:text-gray-400"},"1d",-1)),e("span",{class:S(["font-medium tabular-nums",o.usage_1d>=o.rate_limit_1d?"text-red-500":o.usage_1d>=o.rate_limit_1d*.8?"text-yellow-500":"text-gray-700 dark:text-gray-300"])}," $"+n(((se=o.usage_1d)==null?void 0:se.toFixed(2))||"0.00")+"/$"+n((ce=o.rate_limit_1d)==null?void 0:ce.toFixed(2)),3)]),e("div",il,[e("div",{class:S(["h-full rounded-full transition-all",o.usage_1d>=o.rate_limit_1d?"bg-red-500":o.usage_1d>=o.rate_limit_1d*.8?"bg-yellow-500":"bg-emerald-500"]),style:Be({width:Math.min(o.usage_1d/o.rate_limit_1d*100,100)+"%"})},null,6)]),o.reset_1d_at&&Ze(o.reset_1d_at)?(d(),p("div",nl," ⟳ "+n(Ze(o.reset_1d_at)),1)):w("",!0)])):w("",!0),o.rate_limit_7d>0?(d(),p("div",rl,[e("div",dl,[a[34]||(a[34]=e("span",{class:"text-gray-500 dark:text-gray-400"},"7d",-1)),e("span",{class:S(["font-medium tabular-nums",o.usage_7d>=o.rate_limit_7d?"text-red-500":o.usage_7d>=o.rate_limit_7d*.8?"text-yellow-500":"text-gray-700 dark:text-gray-300"])}," $"+n(((Ke=o.usage_7d)==null?void 0:Ke.toFixed(2))||"0.00")+"/$"+n((rt=o.rate_limit_7d)==null?void 0:rt.toFixed(2)),3)]),e("div",ul,[e("div",{class:S(["h-full rounded-full transition-all",o.usage_7d>=o.rate_limit_7d?"bg-red-500":o.usage_7d>=o.rate_limit_7d*.8?"bg-yellow-500":"bg-emerald-500"]),style:Be({width:Math.min(o.usage_7d/o.rate_limit_7d*100,100)+"%"})},null,6)]),o.reset_7d_at&&Ze(o.reset_7d_at)?(d(),p("div",cl," ⟳ "+n(Ze(o.reset_7d_at)),1)):w("",!0)])):w("",!0),o.usage_5h>0||o.usage_1d>0||o.usage_7d>0?(d(),p("button",{key:3,onClick:st(xt=>ia(o),["stop"]),class:"mt-0.5 inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-primary-600 dark:hover:bg-dark-700 dark:hover:text-primary-400",title:l(t)("keys.resetRateLimitUsage")},[O(Y,{name:"refresh",size:"xs"}),le(" "+n(l(t)("keys.resetUsage")),1)],8,pl)):w("",!0)])):(d(),p("span",ml,"-"))]}),"cell-expires_at":U(({value:o})=>[o?(d(),p("span",{key:0,class:S(["text-sm",new Date(o)<new Date?"text-red-500 dark:text-red-400":"text-gray-500 dark:text-dark-400"])},n(l(ut)(o)),3)):(d(),p("span",_l,n(l(t)("keys.noExpiration")),1))]),"cell-status":U(({value:o})=>[e("span",{class:S(["badge",o==="active"?"badge-success":o==="quota_exhausted"?"badge-warning":
232o==="expired"?"badge-danger":"badge-gray"])},n(l(t)("keys.status."+o)),3)]),"cell-last_used_at":U(({value:o})=>[o?(d(),p("span",gl,n(l(ut)(o)),1)):(d(),p("span",yl,"-"))]),"cell-last_used_ip":U(({value:o})=>[o?(d(),p("span",kl,n(o),1)):(d(),p("span",vl,"-"))]),"cell-created_at":U(({value:o})=>[e("span",hl,n(l(ut)(o)),1)]),"cell-actions":U(({row:o})=>{var N;return[e("div",xl,[e("button",{onClick:H=>Vt(o),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-green-50 hover:text-green-600 dark:hover:bg-green-900/20 dark:hover:text-green-400"},[O(Y,{name:"terminal",size:"sm"}),e("span",fl,n(l(t)("keys.useKey")),1)],8,bl),(N=Ce.value)!=null&&N.hide_ccs_import_button?w("",!0):(d(),p("button",{key:0,onClick:H=>ra(o),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-blue-50 hover:text-blue-600 dark:hover:bg-blue-900/20 dark:hover:text-blue-400"},[O(Y,{name:"upload",size:"sm"}),e("span",$l,n(l(t)("keys.importToCcSwitch")),1)],8,wl)),e("button",{onClick:H=>Xt(o),class:S(["flex flex-col items-center gap-0.5 rounded-lg p-1.5 transition-colors",o.status==="active"?"text-gray-500 hover:bg-yellow-50 hover:text-yellow-600 dark:hover:bg-yellow-900/20 dark:hover:text-yellow-400":"text-gray-500 hover:bg-green-50 hover:text-green-600 dark:hover:bg-green-900/20 dark:hover:text-green-400"])},[o.status==="active"?(d(),Q(Y,{key:0,name:"ban",size:"sm"})):(d(),Q(Y,{key:1,name:"checkCircle",size:"sm"})),e("span",Ml,n(o.status==="active"?l(t)("keys.disable"):l(t)("keys.enable")),1)],10,Cl),e("button",{onClick:H=>Yt(o),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-gray-100 hover:text-primary-600 dark:hover:bg-dark-700 dark:hover:text-primary-400"},[O(Y,{name:"edit",size:"sm"}),e("span",Sl,n(l(t)("common.edit")),1)],8,El),e("button",{onClick:H=>Zt(o),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-red-50 hover:text-red-600 dark:hover:bg-red-900/20 dark:hover:text-red-400"},[O(Y,{name:"trash",size:"sm"}),e("span",Al,n(l(t)("common.delete")),1)],8,Il)])]}),empty:U(()=>[O(ba,{title:l(t)("keys.noKeysYet"),description:l(t)("keys.createFirstKey"),"action-text":l(t)("keys.createKey"),onAction:a[5]||(a[5]=o=>Re.value=!0)},null,8,["title","description","action-text"])]),_:1},8,["columns","data","loading","selected-keys","selection-label"])]),pagination:U(()=>[te.value.total>0?(d(),Q(xa,{key:0,page:te.value.page,total:te.value.total,"page-size":te.value.page_size,"onUpdate:page":Ht,"onUpdate:pageSize":zt},null,8,["page","total","page-size"])):w("",!0)]),_:1}),O(mt,{show:Re.value||F.value,title:F.value?l(t)("keys.editKey"):l(t)("keys.createKey"),width:"normal",onClose:ht},{footer:U(()=>[e("div",ln,[e("button",{onClick:ht,type:"button",class:"btn btn-secondary"},n(l(t)("common.cancel")),1),e("button",{form:"key-form",type:"submit",disabled:R.value,class:"btn btn-primary","data-tour":"key-form-submit"},[R.value?(d(),p("svg",rn,[...a[43]||(a[43]=[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])])):w("",!0),le(" "+n(R.value?l(t)("keys.saving"):F.value?l(t)("common.update"):l(t)("common.create")),1)],8,nn)])]),default:U(()=>{var o,N,H,se,ce,Ke,rt,xt,At;return[e("form",{id:"key-form",onSubmit:st(ea,["prevent"]),class:"space-y-5"},[e("div",null,[e("label",Tl,n(l(t)("keys.nameLabel")),1),J(e("input",{"onUpdate:modelValue":a[6]||(a[6]=y=>c.value.name=y),type:"text",required:"",class:"input",placeholder:l(t)("keys.namePlaceholder"),"data-tour":"key-form-name"},null,8,Kl),[[ge,c.value.name]])]),F.value?w("",!0):(d(),p("fieldset",Ll,[e("legend",Pl,n(l(t)("keys.providerLabel")),1),e("div",Ol,[(d(!0),p(ye,null,fe(P.value,y=>(d(),p("label",{key:y.value,class:S(["relative min-w-0",y.count===0?"cursor-not-allowed":"cursor-pointer"])},[e("input",{type:"radio",name:"key-provider",value:y.value,checked:L.value===y.value,disabled:y.count===0,class:"peer sr-only",onChange:We=>X(y.value)},null,40,Gl),e("span",{class:S(["flex h-full flex-col items-center gap-2 rounded-xl border border-gray-200 bg-white px-2 py-3 text-center transition-colors peer-checked:border-primary-500 peer-checked:bg-primary-50/60 peer-checked:ring-1 peer-checked:ring-primary-500 peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-primary-500 peer-disabled:opacity-40 dark:border-dark-600 dark:bg-dark-800 dark:peer-checked:border-primary-500 dark:peer-checked:bg-primary-500/10",y.count>0&&"hover:border-primary-300 dark:hover:border-primary-700"])},[e("span",Dl,[(d(!0),p(ye,null,fe(l(yo)[y.value],We=>(d(),p("span",{key:We,class:S(["flex h-8 w-8 items-center justify-center rounded-lg",l(Ma)(We)]
232)},[O(Ca,{platform:We,size:"lg"},null,8,["platform"])],2))),128))]),e("span",Rl,n(y.label),1)],2),L.value===y.value?(d(),p("span",Nl,[O(Y,{name:"check",size:"xs","stroke-width":3})])):w("",!0)],2))),128))]),e("p",Ul,n(he.value.length===0?l(t)("common.noGroupsAvailable"):l(t)(`keys.providerHints.${L.value}`)),1)])),e("div",null,[e("label",Bl,n(l(t)("keys.groupLabel")),1),(d(),Q(at,{key:F.value?"edit":L.value,id:"key-form-group","aria-label":l(t)("keys.groupLabel"),modelValue:c.value.group_id,"onUpdate:modelValue":a[7]||(a[7]=y=>c.value.group_id=y),options:W.value,placeholder:l(t)("keys.selectGroup"),"empty-text":l(t)("common.noGroupsAvailable"),searchable:!0,"search-placeholder":l(t)("keys.searchGroup"),"data-tour":"key-form-group"},{selected:U(({option:y})=>[y?(d(),Q(Pt,{key:0,name:y.label,platform:y.platform,"subscription-type":y.subscriptionType,"rate-multiplier":y.rate,"user-rate-multiplier":y.userRate,"peak-rate-enabled":y.peakRateEnabled,"peak-start":y.peakStart,"peak-end":y.peakEnd,"peak-rate-multiplier":y.peakRateMultiplier},null,8,["name","platform","subscription-type","rate-multiplier","user-rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier"])):(d(),p("span",Fl,n(l(t)("keys.selectGroup")),1))]),option:U(({option:y,selected:We})=>[O(Ot,{name:y.label,platform:y.platform,"subscription-type":y.subscriptionType,"rate-multiplier":y.rate,"user-rate-multiplier":y.userRate,"peak-rate-enabled":y.peakRateEnabled,"peak-start":y.peakStart,"peak-end":y.peakEnd,"peak-rate-multiplier":y.peakRateMultiplier,description:y.description,selected:We},null,8,["name","platform","subscription-type","rate-multiplier","user-rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier","description","selected"])]),_:1},8,["aria-label","modelValue","options","placeholder","empty-text","search-placeholder"]))]),F.value?w("",!0):(d(),p("div",ql,[e("div",Vl,[e("label",jl,n(l(t)("keys.customKeyLabel")),1),e("button",{type:"button",onClick:a[8]||(a[8]=y=>c.value.use_custom_key=!c.value.use_custom_key),class:S(["relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none",c.value.use_custom_key?"bg-primary-600":"bg-gray-200 dark:bg-dark-600"])},[e("span",{class:S(["pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",c.value.use_custom_key?"translate-x-4":"translate-x-0"])},null,2)],2)]),c.value.use_custom_key?(d(),p("div",Hl,[J(e("input",{"onUpdate:modelValue":a[9]||(a[9]=y=>c.value.custom_key=y),type:"text",class:S(["input font-mono",{"border-red-500 dark:border-red-500":xe.value}]),placeholder:l(t)("keys.customKeyPlaceholder")},null,10,zl),[[ge,c.value.custom_key]]),xe.value?(d(),p("p",Wl,n(xe.value),1)):(d(),p("p",Yl,n(l(t)("keys.customKeyHint")),1))])):w("",!0)])),F.value?(d(),p("div",Xl,[e("label",Ql,n(l(t)("keys.statusLabel")),1),O(at,{modelValue:c.value.status,"onUpdate:modelValue":a[10]||(a[10]=y=>c.value.status=y),options:kt.value,placeholder:l(t)("keys.selectStatus")},null,8,["modelValue","options","placeholder"])])):w("",!0),e("div",Jl,[e("div",Zl,[e("label",ei,n(l(t)("keys.ipRestriction")),1),e("button",{type:"button",onClick:a[11]||(a[11]=y=>c.value.enable_ip_restriction=!c.value.enable_ip_restriction),class:S(["relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none",c.value.enable_ip_restriction?"bg-primary-600":"bg-gray-200 dark:bg-dark-600"])},[e("span",{class:S(["pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",c.value.enable_ip_restriction?"translate-x-4":"translate-x-0"])},null,2)],2)]),c.value.enable_ip_restriction?(d(),p("div",ti,[e("div",null,[e("label",ai,n(l(t)("keys.ipWhitelist")),1),J(e("textarea",{"onUpdate:modelValue":a[12]||(a[12]=y=>c.value.ip_whitelist=y),rows:"3",class:"input font-mono text-sm",placeholder:l(t)("keys.ipWhitelistPlaceholder")},null,8,si),[[ge,c.value.ip_whitelist]]),e("p",oi,n(l(t)("keys.ipWhitelistHint")),1)]),e("div",null,[e("label",li,n(l(t)("keys.ipBlacklist")),1),J(e("textarea",{"onUpdate:modelValue":a[13]||(a[13]=y=>c.value.ip_blacklist=y),rows:"3",class:"input font-mono text-sm",placeholder:l(t)("keys.ipBlacklistPlaceholder")},null,8,ii),[[ge,c.value.ip_blacklist]]),e("p",ni,n(l(t)("keys.ipBlacklistHint")),1)])])):w("",!0)]),e("div",ri,[e("label",di,n(l(t)("keys.quotaLimit")),1),e("div",ui,[e("div",null,[e("div",ci,[a[35]||(a[35]=e("span",{class:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500"},"$",-1)),J(e("input",{"onUpdate:modelValue":a[14]||(a[14]=y=>c.value.quota=y),type:"number",step:"0.01",min:"0",class:"input pl-7",placeholder:l(t)("keys.quotaAmountPlaceholder")},null,8,pi),[[ge,c.value.quota,void 0,{number:!0}]])]),e("p",mi,n(l(t)("keys.quotaAmountHint")),1)]),F.value&&_.value&&_.value.quota>
2320?(d(),p("div",_i,[e("label",gi,n(l(t)("keys.quotaUsed")),1),e("div",yi,[e("div",ki,[e("span",vi," $"+n(((o=_.value.quota_used)==null?void 0:o.toFixed(4))||"0.0000"),1),a[36]||(a[36]=e("span",{class:"mx-2 text-gray-400"},"/",-1)),e("span",hi," $"+n(((N=_.value.quota)==null?void 0:N.toFixed(2))||"0.00"),1)]),e("button",{type:"button",onClick:aa,class:"btn btn-secondary text-sm",title:l(t)("keys.resetQuotaUsed")},n(l(t)("keys.reset")),9,xi)])])):w("",!0)])]),e("div",bi,[e("div",fi,[e("label",wi,n(l(t)("keys.rateLimitSection")),1),e("button",{type:"button",onClick:a[15]||(a[15]=y=>c.value.enable_rate_limit=!c.value.enable_rate_limit),class:S(["relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none",c.value.enable_rate_limit?"bg-primary-600":"bg-gray-200 dark:bg-dark-600"])},[e("span",{class:S(["pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",c.value.enable_rate_limit?"translate-x-4":"translate-x-0"])},null,2)],2)]),c.value.enable_rate_limit?(d(),p("div",$i,[e("p",Ci,n(l(t)("keys.rateLimitHint")),1),e("div",null,[e("label",Mi,n(l(t)("keys.rateLimit5h")),1),e("div",Ei,[a[37]||(a[37]=e("span",{class:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500"},"$",-1)),J(e("input",{"onUpdate:modelValue":a[16]||(a[16]=y=>c.value.rate_limit_5h=y),type:"number",step:"0.01",min:"0",class:"input pl-7",placeholder:"0"},null,512),[[ge,c.value.rate_limit_5h,void 0,{number:!0}]])]),F.value&&_.value&&_.value.rate_limit_5h>0?(d(),p("div",Si,[e("div",Ii,[e("div",Ai,[e("span",{class:S(["font-medium",_.value.usage_5h>=_.value.rate_limit_5h?"text-red-500":_.value.usage_5h>=_.value.rate_limit_5h*.8?"text-yellow-500":"text-gray-900 dark:text-white"])}," $"+n(((H=_.value.usage_5h)==null?void 0:H.toFixed(4))||"0.0000"),3),a[38]||(a[38]=e("span",{class:"mx-2 text-gray-400"},"/",-1)),e("span",Ti," $"+n(((se=_.value.rate_limit_5h)==null?void 0:se.toFixed(2))||"0.00"),1)])]),e("div",Ki,[e("div",{class:S(["h-full rounded-full transition-all",_.value.usage_5h>=_.value.rate_limit_5h?"bg-red-500":_.value.usage_5h>=_.value.rate_limit_5h*.8?"bg-yellow-500":"bg-green-500"]),style:Be({width:Math.min(_.value.usage_5h/_.value.rate_limit_5h*100,100)+"%"})},null,6)])])):w("",!0)]),e("div",null,[e("label",Li,n(l(t)("keys.rateLimit1d")),1),e("div",Pi,[a[39]||(a[39]=e("span",{class:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500"},"$",-1)),J(e("input",{"onUpdate:modelValue":a[17]||(a[17]=y=>c.value.rate_limit_1d=y),type:"number",step:"0.01",min:"0",class:"input pl-7",placeholder:"0"},null,512),[[ge,c.value.rate_limit_1d,void 0,{number:!0}]])]),F.value&&_.value&&_.value.rate_limit_1d>0?(d(),p("div",Oi,[e("div",Gi,[e("div",Di,[e("span",{class:S(["font-medium",_.value.usage_1d>=_.value.rate_limit_1d?"text-red-500":_.value.usage_1d>=_.value.rate_limit_1d*.8?"text-yellow-500":"text-gray-900 dark:text-white"])}," $"+n(((ce=_.value.usage_1d)==null?void 0:ce.toFixed(4))||"0.0000"),3),a[40]||(a[40]=e("span",{class:"mx-2 text-gray-400"},"/",-1)),e("span",Ri," $"+n(((Ke=_.value.rate_limit_1d)==null?void 0:Ke.toFixed(2))||"0.00"),1)])]),e("div",Ni,[e("div",{class:S(["h-full rounded-full transition-all",_.value.usage_1d>=_.value.rate_limit_1d?"bg-red-500":_.value.usage_1d>=_.value.rate_limit_1d*.8?"bg-yellow-500":"bg-green-500"]),style:Be({width:Math.min(_.value.usage_1d/_.value.rate_limit_1d*100,100)+"%"})},null,6)])])):w("",!0)]),e("div",null,[e("label",Ui,n(l(t)("keys.rateLimit7d")),1),e("div",Bi,[a[41]||(a[41]=e("span",{class:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500"},"$",-1)),J(e("input",{"onUpdate:modelValue":a[18]||(a[18]=y=>c.value.rate_limit_7d=y),type:"number",step:"0.01",min:"0",class:"input pl-7",placeholder:"0"},null,512),[[ge,c.value.rate_limit_7d,void 0,{number:!0}]])]),F.value&&_.value&&_.value.rate_limit_7d>0?(d(),p("div",Fi,[e("div",qi,[e("div",Vi,[e("span",{class:S(["font-medium",_.value.usage_7d>=_.value.rate_limit_7d?"text-red-500":_.value.usage_7d>=_.value.rate_limit_7d*.8?"text-yellow-500":"text-gray-900 dark:text-white"])}," $"+n(((rt=_.value.usage_7d)==null?void 0:rt.toFixed(4))||"0.0000"),3),a[42]||(a[42]=e("span",{class:"mx-2 text-gray-400"},"/",-1)),e("span",ji," $"+n(((xt=_.value.rate_limit_7d)==null?void 0:xt.toFixed(2))||"0.00"),1)])]),e("div",Hi,[e("div",{class:S(["h-full rounded-full transition-all",_.value.usage_7d>=_.value.rate_limit_7d?"bg-red-500":_.value.usage_7d>=_.value.rate_limit_7d*.8?"bg-yellow-500":"bg-green-500"]),style:Be({width:Math.min(_.value.usage_7d/_.value.rate_limit_7d*100,100)+"%"})},null,6)])])):w("",!0)]),F.value&&_.value&&(_.value.rate_limit_5h>0||_.value.rate_limit_1d>0||_.value.rate_limit_7d>0)?(d(),p("div",zi,[e("button",{type:"button",onClick:la,class:"btn btn-secondary text-sm"},n(l(t)("keys.resetRateLimitUsage")),1)])):w("",!0)])):w("",!0)]),e("div",Wi,[e("div",Yi,[e("label",Xi,n(l(t)("keys.expiration")),1),e("button",{type:"button",onClick:a[19]||(a[19]=y=>c.value.enable_expiration=!c.value.enable_expiration),class:S(["relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none",c.value.enable_expiration?"bg-primary-600":"bg-gray-200 dark:bg-dark-600"])},[e("span",{class:S(["pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",c.value.enable_expiration?"translate-x-4":"translate-x-0"])},null,2)],2)]),c.value.enable_expiration?(d(),p("div",Qi,[e("div",Ji,[(d(),p(ye,null,fe(["7","30","90"],y=>e("button",{key:y,type:"button",onClick:We=>sa(parseInt(y)),class:S(["rounded-lg px-3 py-1.5 text-sm transition-colors",c.value.expiration_preset===y?"bg-primary-100 text-primary-700 dark:bg-primary-900/30 dark:text-primary-400":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-dark-700 dark:text-gray-400 dark:hover:bg-dark-600"])},n(F.value?l(t)("keys.extendDays",{days:y}):l(t)("keys.expiresInDays",{days:y})),11,Zi)),64)),e("button",{type:"button",onClick:a[20]||(a[20]=y=>c.value.expiration_preset="custom"),class:S(["rounded-lg px-3 py-1.5 text-sm transition-colors",c.value.expiration_preset==="custom"?"bg-primary-100 text-primary-700 dark:bg-primary-900/30 dark:text-primary-400":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-dark-700 dark:text-gray-400 dark:hover:bg-dark-600"])},n(l(t)("keys.customDate")),3)]),e("div",null,[e("label",en,n(l(t)("keys.expirationDate")),1),J(e("input",{"onUpdate:modelValue":a[21]||(a[21]=y=>c.value.expiration_date=y),type:"datetime-local",class:"input"},null,512),[[ge,c.value.expiration_date]]),e("p",tn,n(l(t)("keys.expirationDateHint")),1)]),F.value&&((At=_.value)!=null&&At.expires_at)?(d(),p("div",an,[e("span",sn,n(l(t)("keys.currentExpiration"))+": ",1),e("span",on,n(l(ut)(_.value.expires_at)),1)])):w("",!0)])):w("",!0)])],32)]}),_:1},8,["show","title"]),O(ts,{show:Ge.value,"selected-keys":Le.value,groups:he.value,onClose:a[22]||(a[22]=o=>Ge.value=!1),onUpdated:Fe},null,8,["show","selected-keys","groups"]),O(bt,{show:je.value,title:l(t)("keys.deleteKey"),message:l(t)("keys.deleteConfirmMessage",{name:(v=_.value)==null?void 0:v.name}
232),"confirm-text":l(t)("common.delete"),"cancel-text":l(t)("common.cancel"),danger:!0,onConfirm:ta,onCancel:a[23]||(a[23]=o=>je.value=!1)},null,8,["show","title","message","confirm-text","cancel-text"]),O(bt,{show:Qe.value,title:l(t)("keys.resetQuotaTitle"),message:l(t)("keys.resetQuotaConfirmMessage",{name:(K=_.value)==null?void 0:K.name,used:(j=(E=_.value)==null?void 0:E.quota_used)==null?void 0:j.toFixed(4)}),"confirm-text":l(t)("keys.reset"),"cancel-text":l(t)("common.cancel"),danger:!0,onConfirm:oa,onCancel:a[24]||(a[24]=o=>Qe.value=!1)},null,8,["show","title","message","confirm-text","cancel-text"]),O(bt,{show:$e.value,title:l(t)("keys.resetRateLimitTitle"),message:l(t)("keys.resetRateLimitConfirmMessage",{name:(Ee=_.value)==null?void 0:Ee.name}),"confirm-text":l(t)("keys.reset"),"cancel-text":l(t)("common.cancel"),danger:!0,onConfirm:na,onCancel:a[25]||(a[25]=o=>$e.value=!1)},null,8,["show","title","message","confirm-text","cancel-text"]),O(eo,{show:me.value,"api-key":((Se=_.value)==null?void 0:Se.key)||"","base-url":((Ne=Ce.value)==null?void 0:Ne.api_base_url)||"",platform:((Ie=(oe=_.value)==null?void 0:oe.group)==null?void 0:Ie.platform)||null,"allow-messages-dispatch":((It=(nt=_.value)==null?void 0:nt.group)==null?void 0:It.allow_messages_dispatch)||!1,onClose:jt},null,8,["show","api-key","base-url","platform","allow-messages-dispatch"]),O(mt,{show:re.value,title:l(t)("keys.ccsClientSelect.title"),width:"narrow",onClose:St},{footer:U(()=>[e("div",yn,[e("button",{onClick:St,class:"btn btn-secondary"},n(l(t)("common.cancel")),1)])]),default:U(()=>[e("div",dn,[e("p",un,n(l(t)("keys.ccsClientSelect.description")),1),e("div",cn,[e("button",{onClick:a[26]||(a[26]=o=>Et("claude")),class:"flex flex-col items-center gap-2 p-4 rounded-xl border-2 border-gray-200 dark:border-dark-600 hover:border-primary-500 dark:hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-primary-900/20 transition-all"},[O(Y,{name:"terminal",size:"xl",class:"text-gray-600 dark:text-gray-400"}),e("span",pn,n(l(t)("keys.ccsClientSelect.claudeCode")),1),e("span",mn,n(l(t)("keys.ccsClientSelect.claudeCodeDesc")),1)]),e("button",{onClick:a[27]||(a[27]=o=>Et("gemini")),class:"flex flex-col items-center gap-2 p-4 rounded-xl border-2 border-gray-200 dark:border-dark-600 hover:border-primary-500 dark:hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-primary-900/20 transition-all"},[O(Y,{name:"sparkles",size:"xl",class:"text-gray-600 dark:text-gray-400"}),e("span",_n,n(l(t)("keys.ccsClientSelect.geminiCli")),1),e("span",gn,n(l(t)("keys.ccsClientSelect.geminiCliDesc")),1)])])])]),_:1},8,["show","title"]),(d(),Q(pa,{to:"body"},[ne.value!==null&&ue.value?(d(),p("div",{key:0,ref_key:"dropdownRef",ref:ot,class:"animate-in fade-in slide-in-from-top-2 fixed z-[100000020] w-max max-w-[calc(100vw-16px)] overflow-hidden rounded-xl bg-white shadow-lg ring-1 ring-black/5 duration-200 sm:min-w-[380px] dark:bg-dark-800 dark:ring-white/10",style:Be([{"pointer-events":"auto !important"},{top:ue.value.top!==void 0?ue.value.top+"px":void 0,bottom:ue.value.bottom!==void 0?ue.value.bottom+"px":void 0,left:ue.value.left+"px"}])},[e("div",kn,[e("div",vn,[a[44]||(a[44]=e("svg",{class:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24","stroke-width":"2"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})],-1)),J(e("input",{"onUpdate:modelValue":a[28]||(a[28]=o=>_e.value=o),type:"text",class:"w-full rounded-lg border border-gray-200 bg-gray-50 py-1.5 pl-8 pr-3 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-primary-300 focus:ring-1 focus:ring-primary-300 dark:border-dark-600 dark:bg-dark-700 dark:text-white dark:placeholder-gray-500 dark:focus:border-primary-600 dark:focus:ring-primary-600",placeholder:l(t)("keys.searchGroup"),onClick:a[29]||(a[29]=st(()=>{},["stop"]))},null,8,hn),[[ge,_e.value]])])]),e("div",xn,[(d(!0),p(ye,null,fe(ze.value,o=>{var N,H,se,ce;return d(),p("button",{key:o.value??"null",onClick:Ke=>
232Jt(Me.value,o.value),class:S(["flex w-full items-center justify-between rounded-lg px-3 py-2.5 text-sm transition-colors","border-b border-gray-100 last:border-0 dark:border-dark-700",((N=Me.value)==null?void 0:N.group_id)===o.value||!((H=Me.value)!=null&&H.group_id)&&o.value===null?"bg-primary-50 dark:bg-primary-900/20":"hover:bg-gray-100 dark:hover:bg-dark-700"]),title:o.description||void 0},[O(Ot,{name:o.label,platform:o.platform,"subscription-type":o.subscriptionType,"rate-multiplier":o.rate,"user-rate-multiplier":o.userRate,"peak-rate-enabled":o.peakRateEnabled,"peak-start":o.peakStart,"peak-end":o.peakEnd,"peak-rate-multiplier":o.peakRateMultiplier,description:o.description,selected:((se=Me.value)==null?void 0:se.group_id)===o.value||!((ce=Me.value)!=null&&ce.group_id)&&o.value===null},null,8,["name","platform","subscription-type","rate-multiplier","user-rate-multiplier","peak-rate-enabled","peak-start","peak-end","peak-rate-multiplier","description","selected"])],10,bn)}),128)),ze.value.length===0?(d(),p("div",fn,n(l(t)("keys.noGroupFound")),1)):w("",!0)])],4)):w("",!0)]))]}),_:1}))}});export{Yn as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.