llm-simple-router 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/admin/dashboard.d.ts +2 -0
  2. package/dist/admin/dashboard.js +112 -70
  3. package/dist/admin/groups.js +10 -1
  4. package/dist/admin/logs.js +30 -1
  5. package/dist/admin/monitor.js +16 -0
  6. package/dist/admin/providers.d.ts +35 -0
  7. package/dist/admin/providers.js +53 -32
  8. package/dist/admin/proxy-enhancement.js +37 -0
  9. package/dist/admin/quick-setup.js +33 -0
  10. package/dist/admin/retry-rules.js +13 -1
  11. package/dist/admin/router-keys.js +6 -0
  12. package/dist/admin/routes.js +1 -1
  13. package/dist/admin/schedules.js +11 -1
  14. package/dist/admin/settings.js +33 -0
  15. package/dist/db/index.d.ts +1 -1
  16. package/dist/db/index.js +1 -1
  17. package/dist/db/stats.d.ts +6 -0
  18. package/dist/db/stats.js +1 -1
  19. package/frontend-dist/assets/{AuthLayout-BNvGjJv3.js → AuthLayout-C7E43a6p.js} +1 -1
  20. package/frontend-dist/assets/{Card-BNz2IkLE.js → Card-L1MI4nan.js} +1 -1
  21. package/frontend-dist/assets/{CardContent-DszVPJgx.js → CardContent-DUzyQmbU.js} +1 -1
  22. package/frontend-dist/assets/{CardTitle-BeBkx0ns.js → CardTitle-oL3GJ7xA.js} +1 -1
  23. package/frontend-dist/assets/{CascadingModelSelect-Z7-ur9_p.js → CascadingModelSelect-C_Ydm0fg.js} +1 -1
  24. package/frontend-dist/assets/{Checkbox-CAQnc0qV.js → Checkbox-OkYUPlFe.js} +1 -1
  25. package/frontend-dist/assets/{CollapsibleContent-CHlSINCS.js → CollapsibleContent-4ZwwyZPz.js} +1 -1
  26. package/frontend-dist/assets/{CollapsibleTrigger-CJMUoPRa.js → CollapsibleTrigger-Cg651F6-.js} +1 -1
  27. package/frontend-dist/assets/{ConcurrencyControl-BcUA816m.js → ConcurrencyControl-LFw4H_oP.js} +1 -1
  28. package/frontend-dist/assets/{Dashboard-DXvcAfAx.js → Dashboard-Bqups5aa.js} +2 -2
  29. package/frontend-dist/assets/{Input-Dr2XqfSh.js → Input-CLu4bS6g.js} +1 -1
  30. package/frontend-dist/assets/{Label-Ct_DR7Ui.js → Label-DVu1uVI7.js} +1 -1
  31. package/frontend-dist/assets/{Login-C8_p8684.js → Login--CFSqs7j.js} +1 -1
  32. package/frontend-dist/assets/Logs-CJPid8DO.js +1 -0
  33. package/frontend-dist/assets/ModelMappings-BTM9yiL6.js +1 -0
  34. package/frontend-dist/assets/Monitor-CBLKclHj.js +1 -0
  35. package/frontend-dist/assets/Providers-5RjiOHfn.js +1 -0
  36. package/frontend-dist/assets/ProxyEnhancement-XKgw6IoB.js +1 -0
  37. package/frontend-dist/assets/QuickSetup-CISVMd51.js +1 -0
  38. package/frontend-dist/assets/RetryRules-DVSEfmo2.js +1 -0
  39. package/frontend-dist/assets/RouterKeys-Cx2n1D0b.js +1 -0
  40. package/frontend-dist/assets/{RouterKeys-B0enpkQK.css → RouterKeys-D8tI3eHr.css} +1 -1
  41. package/frontend-dist/assets/{RovingFocusItem-DlOsi-lb.js → RovingFocusItem-CB_XB24W.js} +1 -1
  42. package/frontend-dist/assets/Schedules-BMD8vrVd.js +1 -0
  43. package/frontend-dist/assets/{Separator-BO94Jk9p.js → Separator-DHTeoMaB.js} +1 -1
  44. package/frontend-dist/assets/Settings-C3yzrB1_.js +6 -0
  45. package/frontend-dist/assets/{Setup-mAyd7FhD.js → Setup-Cgf37mQl.js} +1 -1
  46. package/frontend-dist/assets/{Skeleton-Di0WMQf-.js → Skeleton-DcA4Afm_.js} +1 -1
  47. package/frontend-dist/assets/{Switch-BS1G55M2.js → Switch-BDu-VJJd.js} +1 -1
  48. package/frontend-dist/assets/{TableHeader-jCTjghgy.js → TableHeader-ncK52pod.js} +1 -1
  49. package/frontend-dist/assets/{TabsTrigger-B5HyH2xO.js → TabsTrigger-DeTfRTma.js} +1 -1
  50. package/frontend-dist/assets/{UnifiedRequestDialog-CQ5Rzs11.js → UnifiedRequestDialog-CLHb7t0f.js} +3 -3
  51. package/frontend-dist/assets/{VisuallyHiddenInput-DiW4Si0N.js → VisuallyHiddenInput-DcH9Mxb9.js} +1 -1
  52. package/frontend-dist/assets/arrow-down-CuC5m7VK.js +1 -0
  53. package/frontend-dist/assets/{badge-FksLt30f.js → badge-DhXKxnV5.js} +1 -1
  54. package/frontend-dist/assets/{button-BCxYWEaM.js → button-BuzJlj9X.js} +2 -2
  55. package/frontend-dist/assets/chevron-right-LdKvgE7W.js +1 -0
  56. package/frontend-dist/assets/{dialog-B0wgNzud.js → dialog-CtPySx34.js} +1 -1
  57. package/frontend-dist/assets/{image-DlPnda0z.js → image-BkW18kNK.js} +1 -1
  58. package/frontend-dist/assets/{index-CwjudU09.js → index-BjnFvPid.js} +2 -2
  59. package/frontend-dist/assets/{model-patches-Dv2jfKSp.js → model-patches-DQFF0Cuh.js} +1 -1
  60. package/frontend-dist/assets/{pencil-Y6MJERvc.js → pencil-i0P0IRz5.js} +1 -1
  61. package/frontend-dist/assets/plus-fHe1ysx9.js +1 -0
  62. package/frontend-dist/assets/search-Dast7lfE.js +1 -0
  63. package/frontend-dist/assets/{sparkles-C44_iMrx.js → sparkles-BGb3coPL.js} +1 -1
  64. package/frontend-dist/assets/{transform-domain-FnCfUKrh.js → transform-domain-pYyIPtkg.js} +1 -1
  65. package/frontend-dist/assets/{trash-2-BEOdZk69.js → trash-2-DhD7GboJ.js} +1 -1
  66. package/frontend-dist/assets/{useClipboard-Bw6GLR6I.js → useClipboard-tJg52v7m.js} +1 -1
  67. package/frontend-dist/assets/{useLogRetention-CQHD99Fy.js → useLogRetention-D7ZaYfCW.js} +1 -1
  68. package/frontend-dist/assets/{useProviderGroups-Bz7Yz1b7.js → useProviderGroups-DMuF_-28.js} +1 -1
  69. package/frontend-dist/index.html +2 -2
  70. package/package.json +1 -1
  71. package/frontend-dist/assets/Logs-BDrXnYb1.js +0 -1
  72. package/frontend-dist/assets/ModelMappings-CeLps4LM.js +0 -1
  73. package/frontend-dist/assets/Monitor-By1ywNWD.js +0 -1
  74. package/frontend-dist/assets/Providers-Cp-gomQY.js +0 -1
  75. package/frontend-dist/assets/ProxyEnhancement-D5jsMnL3.js +0 -1
  76. package/frontend-dist/assets/QuickSetup-1ADLBexY.js +0 -1
  77. package/frontend-dist/assets/RetryRules-Dk0OxVLs.js +0 -1
  78. package/frontend-dist/assets/RouterKeys-BvD4POUA.js +0 -1
  79. package/frontend-dist/assets/Schedules-CVJcpHlE.js +0 -1
  80. package/frontend-dist/assets/Settings-MYcQoEZw.js +0 -6
  81. package/frontend-dist/assets/arrow-down-BsHwq97B.js +0 -1
  82. package/frontend-dist/assets/chevron-right-C3U2yjrf.js +0 -1
  83. package/frontend-dist/assets/plus-FNO9X5JG.js +0 -1
  84. package/frontend-dist/assets/search-DpWQ2wvO.js +0 -1
@@ -1 +0,0 @@
1
- import{$ as e,A as t,Ft as n,J as r,L as i,N as a,Ot as o,P as s,Q as c,Qt as l,R as u,U as d,X as f,Y as p,Yt as m,at as h,bt as g,et as _,gt as v,it as y,j as b,jt as x,n as S,nt as C,ot as w,qt as T,tt as E,vt as D,zt as O}from"./button-BCxYWEaM.js";import{i as k,n as A,r as j,t as ee}from"./ConcurrencyControl-BcUA816m.js";import{t as M}from"./chevron-right-C3U2yjrf.js";import{t as N}from"./plus-FNO9X5JG.js";import{t as te}from"./sparkles-C44_iMrx.js";import{a as ne,i as re,n as P,o as F,r as ie,t as I}from"./model-patches-Dv2jfKSp.js";import{t as L}from"./Checkbox-CAQnc0qV.js";import{t as R}from"./Label-Ct_DR7Ui.js";import{_ as ae,_t as oe,a as z,g as B,h as se,ht as ce,m as le,v as ue,yt as de}from"./index-CwjudU09.js";import{t as V}from"./badge-FksLt30f.js";import{t as fe}from"./Input-Dr2XqfSh.js";import{t as H}from"./Card-BNz2IkLE.js";import{t as U}from"./CardContent-DszVPJgx.js";import{n as W,t as G}from"./CardTitle-BeBkx0ns.js";import{t as K}from"./CascadingModelSelect-Z7-ur9_p.js";import{i as pe,n as me,o as he,r as q,t as ge}from"./transform-domain-FnCfUKrh.js";var _e=u(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),ve={DeepSeek:`deepseek`,百度千帆:`qianfan`,科大讯飞:`iflytek`,硅基流动:`siliconflow`,智谱:`zhipu`,月之暗面:`moonshot`,Minimax:`minimax`,火山引擎:`volcengine`,阿里云:`aliyun`,腾讯云:`tencent`,OpenCode:`opencode`,阶跃星辰:`stepfun`};function J(e){return ve[e]??e.toLowerCase().replace(/[^a-z0-9]/gi,`-`).replace(/-+/g,`-`)}function ye(e,t){let{injectHeaders:n,dropFields:r,requestDefaults:i}=e;if(!n.trim()&&!r.trim()&&!i.trim())return;let{rule:a,errorKey:o}=ge({injectHeaders:n,dropFields:r,requestDefaults:i});if(o)return t(o),!1;if(a)return JSON.parse(a)}async function be(e,t){let n=[];for(let r of t)if(r.existing&&r.existingId&&r.originalActive!==void 0&&r.active!==r.originalActive)try{await e.toggleMappingGroup(r.existingId)}catch(e){console.error(`quick-setup-helpers.toggleChangedMappings:`,e),n.push(r.clientModel)}return n}function xe(e,t,n){return e.filter(e=>t.has(e.name)&&!e.exists).map(e=>{let t=n.get(e.name)??`general`;return{name:e.name,status_code:e.status_code,body_pattern:e.body_pattern,retry_strategy:e.retry_strategy,retry_delay_ms:e.retry_delay_ms,max_retries:e.max_retries,max_delay_ms:e.max_delay_ms,provider_shortname:t===`general`?null:t}})}function Se(e){return{name:e.isCustom?`custom-${Date.now()}`:`${J(e.selectedGroup)}-${J(e.selectedPlan)}`,api_type:e.apiType,base_url:e.baseUrl,upstream_path:e.upstreamPath||void 0,api_key:e.apiKey,models:e.models.map(e=>({name:e.name,context_window:e.contextWindow,patches:e.patches.length>0?e.patches:void 0,stream_timeout_ms:e.stream_timeout_ms??void 0,capabilities:e.capabilities&&e.capabilities.length>0?e.capabilities:void 0})),concurrency_mode:e.concurrency.mode,max_concurrency:e.concurrency.mode===`none`?void 0:e.concurrency.max_concurrency,queue_timeout_ms:e.concurrency.mode===`none`?void 0:e.concurrency.queue_timeout_ms,max_queue_size:e.concurrency.mode===`none`?void 0:e.concurrency.max_queue_size,...e.endpoints&&e.endpoints.length>0?{endpoints:e.endpoints}:{}}}function Ce(e,t,n){let r;return r=e===`pi`?t.map(e=>e.name):ne[e]??t.map(e=>e.name),r.map(i=>{let a=n.find(e=>e.client_model===i);if(a){let e={};try{e=JSON.parse(a.rule)}catch{e={}}let n=e.targets??[];return{clientModel:i,targets:n.length>0?n.map(e=>({backend_model:e.backend_model,provider_id:e.provider_id,overflow_provider_id:e.overflow_provider_id,overflow_model:e.overflow_model})):[{backend_model:t[0]?.name??``,provider_id:`__new__`}],existing:!0,existingId:a.id,tag:`existing`,active:!!a.is_active,originalActive:!!a.is_active}}return{clientModel:i,targets:[{backend_model:t[r.indexOf(i)]?.name??t[t.length-1]?.name??``,provider_id:`__new__`}],existing:!1,tag:e===`pi`?`auto`:`def`,active:!0}})}function Y(e,t){return e===`openai-responses`&&(t===`openai`||t===`openai-responses`)?`openai-responses`:t}function we(e){return{provider:Se({isCustom:e.isCustomProvider,selectedGroup:e.selectedGroup,selectedPlan:e.selectedPlan,apiType:e.apiType,baseUrl:e.baseUrl,upstreamPath:e.upstreamPath,apiKey:e.apiKey,models:e.models,concurrency:e.concurrency,endpoints:e.endpoints}),mappings:e.mappingEntries.filter(e=>e.targets[0]?.backend_model).map(e=>{if(e.targets.length>1||e.targets[0]?.overflow_model||e.multimodalFallback?.backend_model){let t={targets:e.targets.map(e=>{let t={backend_model:e.backend_model,provider_id:e.provider_id};return e.overflow_provider_id&&(t.overflow_provider_id=e.overflow_provider_id),e.overflow_model&&(t.overflow_model=e.overflow_model),t})};return e.multimodalFallback?.backend_model&&(t.multimodal_fallback={provider_id:e.multimodalFallback.provider_id,backend_model:e.multimodalFallback.backend_model}),{client_model:e.clientModel,backend_model:e.targets[0]?.backend_model??``,rule:JSON.stringify(t)}}return{client_model:e.clientModel,backend_model:e.targets[0]?.backend_model??``}}),retry_rules:xe(e.recommendedRules,e.selectedRetryRules,e.retryProviderMap),transform_rules:e.transformRules}}function Te(e,t){let n=new Map;for(let r of e){if(r.exists)continue;let e=r.providers??[];e.length>0&&t&&e.includes(t)?n.set(r.name,t):n.set(r.name,`general`)}return n}function Ee(e,t,n){t.value=e.models.map(t=>({name:t,contextWindow:F(t),enabled:!0,patches:I(t,e.apiType,n.value),stream_timeout_ms:s,capabilities:e.modelCapabilities?.[t]}))}function De(e,t){let n=t.find(t=>t.group===e.defaultProvider);if(!n||n.presets.length===0)return null;let r=e.format===`openai-responses`?[`openai-responses`,`openai`]:[e.format],i=n.presets.find(t=>r.includes(t.apiType)&&t.plan===e.defaultPlan)??n.presets.find(e=>r.includes(e.apiType))??n.presets[0];return{group:n.group,plan:i.plan,apiType:Y(e.format,i.apiType),preset:i}}function Oe(e,t){if(t.selectedGroup.value=e,t.selectedPlan.value=``,t.modelConfigs.value=[],t.endpoints.value=[],e===`__custom__`)t.apiType.value=`openai`,t.customBaseUrl.value=``,t.customUpstreamPath.value=``,t.endpoints.value=[{api_type:`openai`,base_url:``,upstream_path:null,api_key:null}];else{let n=t.providerGroups.value.find(t=>t.group===e);if(n&&n.presets.length>0){let e=t.currentClient.value,r=e?.format===`openai-responses`?[`openai-responses`,`openai`]:e?[e.format]:[],i=(e?n.presets.find(e=>r.includes(e.apiType)):null)??n.presets[0];t.selectedPlan.value=i.plan,t.apiType.value=Y(e?.format,i.apiType),Ee(i,t.modelConfigs,t.isNonOpenaiEndpoint),X(t.endpoints,i)}}t.updateMappings(),t.syncRetryRules()}function ke(e,t,n,r,i,a,o,s,c){let l=o.value.find(e=>e.group===t.value);if(!l)return;let u=l.presets.find(t=>t.plan===e);u&&(n.value=Y(r.value?.format,u.apiType),Ee(u,i,a),X(s,u),c())}function X(e,t){if(t.endpoints&&t.endpoints.length>0){e.value=t.endpoints.map(e=>({api_type:e.apiType,base_url:e.baseUrl,upstream_path:e.upstreamPath||null,api_key:null}));return}e.value=[{api_type:t.apiType,base_url:t.baseUrl,upstream_path:t.upstreamPath||null,api_key:null}]}var Ae=1500;function je(e){let n=()=>{e.data.mappingEntries.value=Ce(e.selection.clientType.value,e.data.modelConfigs.value.filter(e=>e.enabled),e.data.existingMappings.value)},r=t=>{let{selection:r,data:i}=e;r.clientType.value=t;let a=r.currentClient.value;if(a){let e=De({defaultProvider:a.defaultProvider,defaultPlan:a.defaultPlan,format:a.format},r.providerGroups.value);e&&(r.selectedGroup.value=e.group,r.selectedPlan.value=e.plan,r.apiType.value=e.apiType,Ee(e.preset,i.modelConfigs,i.isNonOpenaiEndpoint),X(i.endpoints,e.preset))}n(),Me(e)},o={selectedGroup:e.selection.selectedGroup,selectedPlan:e.selection.selectedPlan,apiType:e.selection.apiType,modelConfigs:e.data.modelConfigs,customBaseUrl:e.selection.customBaseUrl,customUpstreamPath:e.selection.customUpstreamPath,providerGroups:e.selection.providerGroups,currentClient:e.selection.currentClient,isNonOpenaiEndpoint:e.data.isNonOpenaiEndpoint,endpoints:e.data.endpoints,updateMappings:n,syncRetryRules:()=>Me(e)};return{updateMappings:n,selectClient:r,onProviderChange:e=>Oe(e,o),onPlanChange:t=>{let{selection:r,data:i}=e;r.selectedPlan.value=t,ke(t,r.selectedGroup,r.apiType,r.currentClient,i.modelConfigs,i.isNonOpenaiEndpoint,r.providerGroups,i.endpoints,n)},toggleRetryRule:(t,n)=>{let r=new Set(e.data.selectedRetryRules.value);n?r.add(t):r.delete(t),e.data.selectedRetryRules.value=r},setAllRetryRules:(t,n)=>{let r=new Set(e.data.selectedRetryRules.value);for(let e of t)n?r.add(e):r.delete(e);e.data.selectedRetryRules.value=r},updateMappingTargets:(t,n)=>{e.data.mappingEntries.value=e.data.mappingEntries.value.map((e,r)=>r===t?{...e,targets:n}:e)},updateMappingClientModel:(t,n)=>{e.data.mappingEntries.value=e.data.mappingEntries.value.map((e,r)=>r===t?{...e,clientModel:n}:e)},updateMappingMultimodalFallback:(t,n)=>{e.data.mappingEntries.value=e.data.mappingEntries.value.map((e,r)=>r===t?{...e,multimodalFallback:n}:e)},toggleMappingActive:t=>{e.data.mappingEntries.value=e.data.mappingEntries.value.map((e,n)=>n===t?{...e,active:!e.active}:e)},addMappingEntry:(t,n,r)=>{e.data.mappingEntries.value=[...e.data.mappingEntries.value.filter(e=>e.clientModel!==t),{clientModel:t,targets:[{backend_model:n,provider_id:`__new__`}],...r?{multimodalFallback:r}:{},existing:!1,tag:`cust`,active:!0}]},removeMappingEntry:t=>{if(e.data.mappingEntries.value.find(e=>e.clientModel===t)?.existing){z.error(e.t(`quickSetup.messages.existingMappingDelete`));return}e.data.mappingEntries.value=e.data.mappingEntries.value.filter(e=>e.clientModel!==t)},onConcurrencyModeChange:t=>{e.submit.concurrencyConfig.value={...e.submit.concurrencyConfig.value,mode:t},t===`auto`?e.submit.concurrencyConfig.value.max_concurrency=q.max_concurrency:t===`manual`&&(e.submit.concurrencyConfig.value.max_concurrency=pe.max_concurrency)},testConnection:async()=>{if(!e.data.apiKey.value.trim()){e.submit.connectionStatus.value=`error`,z.error(e.t(`quickSetup.messages.fillApiKeyFirst`));return}let n=e.data.endpoints.value[0],r=e.data.modelConfigs.value.find(e=>e.enabled)?.name;if(!n&&!e.selection.currentPreset.value){z.error(e.t(`quickSetup.messages.selectProviderAndPlan`));return}e.submit.connectionStatus.value=`testing`;try{await t.testConnection({api_type:n?.api_type??e.selection.apiType.value,base_url:n?.base_url??e.data.baseUrl.value,upstream_path:n?.upstream_path??e.data.upstreamPath.value??null,api_key:e.data.apiKey.value.trim(),model:r}),e.submit.connectionStatus.value=`ok`,z.success(e.t(`quickSetup.messages.connectionOk`))}catch(t){e.submit.connectionStatus.value=`error`,console.error(`quickSetup.testConnection:`,t),z.error(b(t,e.t(`quickSetup.messages.connectionFailed`)))}},addCustomModel:(t,n=a)=>{e.data.modelConfigs.value.push({name:t,contextWindow:n,enabled:!0,patches:I(t,e.selection.apiType.value,e.data.isNonOpenaiEndpoint.value),stream_timeout_ms:s,capabilities:[`text`]})},updateModel:(t,n)=>{let r=[...e.data.modelConfigs.value];r[t]=n,e.data.modelConfigs.value=r},removeModel:t=>{e.data.modelConfigs.value=e.data.modelConfigs.value.filter((e,n)=>n!==t)},updateModelTimeout:(t,n)=>{let r=[...e.data.modelConfigs.value];r[t]={...r[t],stream_timeout_ms:n||void 0},e.data.modelConfigs.value=r},toggleModelCapability:(t,n)=>{let r=[...e.data.modelConfigs.value],i={...r[t]},a=i.capabilities??[`text`];a.includes(n)?i.capabilities=a.filter(e=>e!==n):i.capabilities=[...a,n],r[t]=i,e.data.modelConfigs.value=r},submit:async()=>{let{selection:n,data:r,submit:a}=e;if(!n.currentPreset.value){z.error(e.t(`quickSetup.messages.selectProviderAndPlan`));return}if(!r.apiKey.value.trim()){z.error(e.t(`quickSetup.messages.fillApiKey`));return}a.saving.value=!0;try{let o=ye(a.transformConfig.value,t=>z.error(e.t(`quickSetup.messages.${t}`)));if(o===!1)return;await t.quickSetup(we({isCustomProvider:n.isCustomProvider.value,selectedGroup:n.selectedGroup.value,retryProviderMap:r.retryProviderMap.value,selectedPlan:n.selectedPlan.value,apiType:n.apiType.value,baseUrl:r.baseUrl.value,upstreamPath:r.upstreamPath.value,apiKey:r.apiKey.value.trim(),models:r.modelConfigs.value.filter(e=>e.enabled),concurrency:a.concurrencyConfig.value,mappingEntries:r.mappingEntries.value,recommendedRules:r.recommendedRules.value,selectedRetryRules:r.selectedRetryRules.value,transformRules:o,endpoints:r.endpoints.value.length>0?r.endpoints.value.map(e=>({...e,api_key:e.api_key||r.apiKey.value.trim()||null})):void 0}));let s=await be(t,r.mappingEntries.value);z.success(s.length>0?e.t(`quickSetup.messages.setupCompleteWithErrors`,{count:s.length}):e.t(`quickSetup.messages.setupComplete`)),await new Promise(e=>setTimeout(e,Ae)),i.push(`/`)}catch(t){console.error(`quickSetup.save:`,t),z.error(b(t,e.t(`quickSetup.messages.setupFailed`)))}finally{a.saving.value=!1}}}}function Me(e){let{selection:t,data:n}=e;n.selectedRetryRules.value=new Set(n.recommendedRules.value.filter(e=>!e.exists).map(e=>e.name));let r=t.providerGroups.value.find(e=>e.group===t.selectedGroup.value)?.shortname;n.retryProviderMap.value=Te(n.recommendedRules.value,r)}function Ne(e,t,n,r,i,a){let o=c(()=>t.value?{provider:{id:e.value?`__new_custom__`:`__new_${J(t.value)}_${J(n.value)}__`,name:e.value?a(`quickSetup.provider.customProvider`):`${t.value} - ${n.value}`},models:r.value.filter(e=>e.enabled).map(e=>({name:e.name,contextWindow:e.contextWindow})),isNew:!0}:null);return{allProviderGroups:c(()=>{let e=i.value.map(e=>({provider:{id:e.id,name:e.name},models:(e.models??[]).map(e=>({name:e.name,contextWindow:e.context_window??2e5}))}));return o.value&&o.value.models.length>0?[...e,o.value]:e})}}function Pe(){let{t:e}=d(),n=O(`claude-code`),r=O([]),i=O(``),a=O(``),s=O(`anthropic`),l=O(``),u=l,f=O([]),p=O([]),m=O([]),h=O([]),g=O(new Set),_=O(new Map),y=O(!1),x=O(`idle`),S=O({...q}),C=O({...he}),w=O([]),T=O([]),E=c(()=>i.value===`__custom__`),D=c(()=>re.find(e=>e.id===n.value)),k=c(()=>{if(!(!i.value||!a.value))return r.value.find(e=>e.group===i.value)?.presets.find(e=>e.plan===a.value)}),A=O(``),j=O(``),ee=O(``),M=O(``);o(k,e=>{if(e&&!E.value){ee.value=e.baseUrl;let t=e.apiType===`anthropic`?`/v1/messages`:e.apiType===`openai-responses`?`/v1/responses`:`/v1/chat/completions`;M.value=e.upstreamPath&&e.upstreamPath!==t?e.upstreamPath:``}});let N=c(()=>E.value?A.value:ee.value),te=c(()=>E.value?j.value:M.value),ne=c(()=>r.value.find(e=>e.group===i.value)?.presets??[]),P=c(()=>!N.value.includes(`openai.com`)),F=c(()=>{let e=r.value.find(e=>e.group===i.value)?.shortname??i.value;return h.value.filter(t=>!t.providers||t.providers.length===0||t.providers.includes(e))}),ie=Ne(E,i,a,p,T,e).allProviderGroups,L=je({t:e,selection:{clientType:n,selectedGroup:i,selectedPlan:a,apiType:s,providerGroups:r,currentClient:D,currentPreset:k,isCustomProvider:E,customBaseUrl:A,customUpstreamPath:j},data:{modelConfigs:p,mappingEntries:m,apiKey:l,baseUrl:N,upstreamPath:te,existingMappings:w,allProviders:T,allRecommendedRules:h,recommendedRules:F,selectedRetryRules:g,retryProviderMap:_,isNonOpenaiEndpoint:P,endpoints:f},submit:{saving:y,connectionStatus:x,concurrencyConfig:S,transformConfig:C}});return o(s,()=>{for(let e of p.value)e.patches=I(e.name,s.value,P.value)}),v(async()=>{try{let[e,n,i,a]=await Promise.allSettled([t.recommended.getProviders(),t.recommended.getRetryRules(),t.getMappingGroups(),t.getProviders()]);e.status===`fulfilled`&&(r.value=e.value),n.status===`fulfilled`&&(h.value=n.value),i.status===`fulfilled`&&(w.value=i.value),a.status===`fulfilled`&&(T.value=a.value),L.selectClient(`claude-code`)}catch(e){console.error(`quickSetup.load:`,e),z.error(b(e,``))}}),{clientType:n,providerGroups:r,selectedGroup:i,selectedPlan:a,apiType:s,apiKey:l,sharedKey:u,endpoints:f,modelConfigs:p,mappingEntries:m,allRecommendedRules:h,recommendedRules:F,selectedRetryRules:g,retryProviderMap:_,saving:y,connectionStatus:x,currentClient:D,currentPreset:k,baseUrl:N,customBaseUrl:A,presetBaseUrl:ee,upstreamPath:te,customUpstreamPath:j,presetUpstreamPath:M,isCustomProvider:E,availablePlans:ne,isNonOpenaiEndpoint:P,concurrencyConfig:S,transformConfig:C,existingMappings:w,allProviders:T,allProviderGroups:ie,...L,setRetryProvider:(e,t)=>void _.value.set(e,t)}}var Fe={class:`space-y-1.5`},Ie={class:`px-3 py-1.5`},Le={key:0,class:`py-3 text-center text-xs text-muted-foreground`},Re={class:`rounded-md border border-dashed border-border px-3 py-2 space-y-1.5`},ze={class:`flex items-center gap-2`},Z={class:`flex-[2] min-w-0`},Q={class:`flex items-center gap-2`},$={key:0,class:`flex items-center gap-2 flex-1 min-w-0`},Be={class:`text-[10px] text-blue-500/50 shrink-0`},Ve={class:`flex-1 min-w-0`},He=w({__name:`QuickSetupMappingList`,props:{entries:{},providerGroups:{}},emits:[`update:targets`,`update:multimodal-fallback`,`update:client-model`,`toggle-active`,`add`,`remove`],setup(t,{emit:n}){let{t:r}=d(),i=n,a=O(null);function o(e){a.value=a.value===e?null:e}let s=O(``),c=O(),u=O(),p=O(!1);function m(){return s.value.trim().length>0&&!!c.value?.model}function _(){if(!(!p.value||!u.value?.model))return{provider_id:u.value.provider_id,backend_model:u.value.model}}function v(){let e=s.value.trim(),t=c.value;e&&t&&(i(`add`,e,t.model,_()),s.value=``,c.value=void 0,u.value=void 0,p.value=!1)}function b(e){e.key===`Enter`&&m()&&(e.preventDefault(),v())}return(n,d)=>(D(),C(`div`,Fe,[(D(!0),C(f,null,g(t.entries,(n,r)=>(D(),C(`div`,{key:r,class:`rounded-md border border-border overflow-hidden`},[e(`div`,Ie,[h(A,{entry:n,"provider-groups":t.providerGroups,expanded:a.value===n.clientModel,"editable-client-model":a.value===n.clientModel,onExpand:e=>o(n.clientModel),"onUpdate:targets":e=>i(`update:targets`,r,e),"onUpdate:clientModel":e=>i(`update:client-model`,r,e),"onUpdate:multimodalFallback":e=>i(`update:multimodal-fallback`,r,e),onToggleActive:e=>i(`toggle-active`,r),onRemove:e=>i(`remove`,n.clientModel)},null,8,[`entry`,`provider-groups`,`expanded`,`editable-client-model`,`onExpand`,`onUpdate:targets`,`onUpdate:clientModel`,`onUpdate:multimodalFallback`,`onToggleActive`,`onRemove`])])]))),128)),t.entries.length===0?(D(),C(`p`,Le,l(T(r)(`providers.shared.noMappings`)),1)):E(``,!0),e(`div`,Re,[e(`div`,ze,[h(T(fe),{modelValue:s.value,"onUpdate:modelValue":d[0]||=e=>s.value=e,placeholder:T(r)(`providers.shared.clientModel`),class:`h-7 flex-1 min-w-0 text-xs font-mono border-border`,onKeydown:b},null,8,[`modelValue`,`placeholder`]),h(T(k),{class:`size-3.5 shrink-0 text-muted-foreground/30`}),e(`div`,Z,[h(K,{providers:t.providerGroups,"model-value":c.value,compact:``,placeholder:T(r)(`providers.shared.selectModel`),"onUpdate:modelValue":d[1]||=e=>c.value=e},null,8,[`providers`,`model-value`,`placeholder`])]),h(T(V),{variant:`outline`,class:`text-[10px] shrink-0 text-muted-foreground/50`},{default:x(()=>[y(l(T(r)(`providers.shared.tagCustom`)),1)]),_:1}),h(T(S),{variant:`outline`,size:`icon-xs`,class:`shrink-0`,disabled:!m(),onClick:v},{default:x(()=>[h(T(N),{class:`size-3`})]),_:1},8,[`disabled`])]),e(`div`,Q,[h(T(S),{type:`button`,variant:`ghost`,size:`xs`,class:`text-[10px] text-blue-500/60 hover:text-blue-500`,onClick:d[2]||=e=>p.value=!p.value},{default:x(()=>[h(T(j),{class:`size-3 mr-1`}),y(` `+l(p.value?T(r)(`mappings.multimodalFallback.collapse`):T(r)(`mappings.multimodalFallback.add`)),1)]),_:1}),p.value?(D(),C(`div`,$,[e(`span`,Be,[h(T(j),{class:`size-2.5`})]),e(`div`,Ve,[h(K,{providers:t.providerGroups,"model-value":u.value,compact:``,dashed:``,placeholder:T(r)(`mappings.multimodalFallback.selectProviderModel`),"onUpdate:modelValue":d[3]||=e=>u.value=e},null,8,[`providers`,`model-value`,`placeholder`])])])):E(``,!0)])])]))}}),Ue={class:`page space-y-4 pb-20`},We={class:`flex items-center justify-between`},Ge={class:`flex gap-2 flex-wrap`},Ke={class:`text-left`},qe={class:`font-medium text-sm leading-tight flex items-center gap-1.5`},Je={class:`text-[10px] opacity-60 leading-tight`},Ye={key:0,class:`mt-2.5 px-3 py-2 rounded-r-md bg-primary/8 border-l-[3px] border-l-primary text-[11px] text-muted-foreground flex items-start gap-1.5`},Xe={class:`flex items-center justify-between`},Ze={key:0,class:`text-[10px] text-muted-foreground/50 flex items-center gap-1`},Qe={class:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground/60 mb-1.5`},$e={class:`flex items-end gap-2`},et={class:`w-40 space-y-1`},tt={key:0,class:`w-28 space-y-1`},nt={class:`w-64 space-y-1`},rt={class:`shrink-0 space-y-1`},it={key:0,class:`border-t border-border pt-3`},at={class:`border-t border-border pt-3`},ot={class:`flex items-center justify-between mb-2`},st={class:`text-xs font-medium text-muted-foreground`},ct={class:`flex items-center justify-between`},lt={key:0,class:`py-4 text-center text-xs text-muted-foreground`},ut={key:1,class:`flex flex-col gap-px bg-border rounded-lg overflow-hidden`},dt={key:2,class:`flex gap-2 mt-2`},ft={class:`border-t border-border pt-3 mt-3`},pt={key:0,class:`mt-2`},mt={class:`grid grid-cols-5 gap-4`},ht={class:`flex items-center justify-between`},gt={class:`col-span-2 space-y-4`},_t={class:`flex items-center justify-between`},vt={key:0,class:`py-6 text-center text-xs text-muted-foreground`},yt={key:1,class:`space-y-1.5 max-h-[320px] overflow-y-auto`},bt={class:`flex items-center gap-2.5 pb-2 border-b border-border`},xt=[`onClick`],St={class:`flex-1 min-w-0`},Ct={class:`flex items-center gap-1.5`},wt={class:`text-xs font-medium`},Tt={class:`text-[10px] text-muted-foreground mt-0.5`},Et={class:`fixed bottom-0 right-0 left-56 border-t bg-card/95 backdrop-blur px-6 py-2.5 flex items-center justify-between z-10`},Dt={class:`text-xs text-muted-foreground flex items-center gap-1.5 font-mono`},Ot={key:0,class:`text-foreground/80`},kt={class:`text-[11px] px-2 py-0.5 rounded bg-primary/8 text-primary font-medium`},At={class:`text-foreground/80`},jt={class:`flex items-center gap-2`},Mt={key:0,class:`flex items-center gap-1 text-[11px] text-primary`},Nt={class:`font-medium`},Pt={key:1,class:`flex items-center gap-1 text-[11px] text-destructive/70`},Ft=w({__name:`QuickSetup`,setup(t){let{t:i}=d(),{clientType:a,currentClient:o,providerGroups:s,selectedGroup:u,selectedPlan:v,apiType:b,apiKey:w,sharedKey:k,endpoints:A,modelConfigs:j,mappingEntries:N,allRecommendedRules:F,recommendedRules:I,selectedRetryRules:K,retryProviderMap:pe,saving:he,connectionStatus:q,availablePlans:ge,isNonOpenaiEndpoint:ve,isCustomProvider:J,concurrencyConfig:ye,transformConfig:be,allProviderGroups:xe,selectClient:Se,onProviderChange:Ce,onPlanChange:Y,updateMappingTargets:we,updateMappingMultimodalFallback:Te,updateMappingClientModel:Ee,toggleMappingActive:De,addMappingEntry:Oe,removeMappingEntry:ke,toggleRetryRule:X,setAllRetryRules:Ae,setRetryProvider:je,testConnection:Me,submit:Ne,addCustomModel:Fe,updateModel:Ie,removeModel:Le,updateModelTimeout:Re,toggleModelCapability:ze}=Pe(),Z=O(``),Q=O(!1),$=O(`idle`);function Be(){Z.value.trim()&&(Fe(Z.value.trim()),Z.value=``)}let Ve=c(()=>j.value.filter(e=>e.enabled).length),Ft=c(()=>re.find(e=>e.id===a.value)?.name??a.value),It=c(()=>{let e=a.value?ne[a.value]:void 0;return e?e.join(`, `):``});function Lt(){if(!u.value){$.value=`invalid`,z.error(i(`quickSetup.messages.selectProvider`));return}if(!k.value.trim()&&!w.value.trim()){$.value=`invalid`,z.error(i(`quickSetup.messages.fillApiKey`));return}if(Ve.value===0){$.value=`invalid`,z.error(i(`quickSetup.messages.enableOneModel`));return}$.value=`valid`,z.success(i(`quickSetup.messages.validationPassed`))}return(t,c)=>(D(),C(f,null,[e(`div`,Ue,[h(T(H),{class:`ring-0`},{default:x(()=>[h(T(W),{class:`pb-3`},{default:x(()=>[e(`div`,We,[h(T(G),{class:`text-sm font-medium`},{default:x(()=>[y(l(T(i)(`quickSetup.client.selectClient`)),1)]),_:1}),T(a)?(D(),_(T(V),{key:0,variant:`outline`,class:`text-[10px] px-1.5 py-0 leading-none border-green-500/30 bg-green-500/10 text-green-500`},{default:x(()=>[h(T(de),{class:`size-2.5 mr-0.5 stroke-[3]`}),y(` `+l(T(i)(`common.selected`)),1)]),_:1})):E(``,!0)])]),_:1}),h(T(U),null,{default:x(()=>[e(`div`,Ge,[(D(!0),C(f,null,g(T(re),t=>(D(),_(T(S),{key:t.id,variant:`outline`,class:m([`flex h-auto items-center gap-2.5 px-4 py-2.5 text-sm transition-all cursor-pointer`,T(a)===t.id?`border-primary bg-primary/12 text-primary ring-1 ring-primary/30`:`border-border hover:border-muted-foreground/30 text-muted-foreground hover:text-foreground`]),onClick:e=>T(Se)(t.id)},{default:x(()=>[e(`div`,{class:m([`shrink-0 w-6 h-6 rounded-md flex items-center justify-center text-[11px] font-bold text-white`,t.brandBg])},l(t.icon),3),e(`div`,Ke,[e(`div`,qe,[y(l(t.name)+` `,1),t.popular?(D(),_(T(V),{key:0,class:`text-[9px] px-1 py-0 leading-none bg-primary/15 text-primary font-medium`},{default:x(()=>[y(l(T(i)(`quickSetup.client.popular`)),1)]),_:1})):E(``,!0)]),e(`div`,Je,l(t.format)+` · `+l(T(i)(t.descriptionKey)),1)])]),_:2},1032,[`class`,`onClick`]))),128))]),T(a)?(D(),C(`div`,Ye,[h(T(ce),{class:`size-3.5 shrink-0 text-primary mt-px`}),e(`span`,null,l(T(i)(`quickSetup.client.infoBar`,{client:T(o)?.name??T(a),format:T(o)?.format===`anthropic`?`Anthropic Messages API`:T(o)?.format===`openai-responses`?`OpenAI Responses API`:`OpenAI Chat API`,models:It.value})),1)])):E(``,!0)]),_:1})]),_:1}),h(T(H),{class:`ring-0`},{default:x(()=>[h(T(W),{class:`pb-3`},{default:x(()=>[e(`div`,Xe,[h(T(G),{class:`text-sm font-medium`},{default:x(()=>[y(l(T(i)(`quickSetup.provider.connection`)),1)]),_:1}),T(u)?(D(),C(`span`,Ze,[h(T(te),{class:`size-3 text-muted-foreground/50`}),y(` `+l(T(i)(`quickSetup.provider.autoConfigured`)),1)])):E(``,!0)])]),_:1}),h(T(U),{class:`space-y-3`},{default:x(()=>[e(`div`,Qe,l(T(i)(`quickSetup.provider.groupLabel`)),1),e(`div`,$e,[e(`div`,et,[h(T(R),{class:`text-xs text-muted-foreground`},{default:x(()=>[y(l(T(i)(`quickSetup.provider.label`)),1)]),_:1}),h(T(ue),{"model-value":T(u),"onUpdate:modelValue":c[0]||=e=>T(Ce)(e)},{default:x(()=>[h(T(se),{class:`w-full text-xs data-[size=default]:h-7`},{default:x(()=>[h(T(le),{placeholder:T(i)(`quickSetup.provider.select`)},null,8,[`placeholder`])]),_:1}),h(T(ae),null,{default:x(()=>[h(T(B),{value:`__custom__`},{default:x(()=>[y(l(T(i)(`quickSetup.provider.custom`)),1)]),_:1}),(D(!0),C(f,null,g(T(s),e=>(D(),_(T(B),{key:e.group,value:e.group},{default:x(()=>[y(l(e.group),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`])]),T(J)?E(``,!0):(D(),C(`div`,tt,[h(T(R),{class:`text-xs text-muted-foreground`},{default:x(()=>[y(l(T(i)(`quickSetup.provider.plan`)),1)]),_:1}),h(T(ue),{"model-value":T(v),"onUpdate:modelValue":c[1]||=e=>T(Y)(e)},{default:x(()=>[h(T(se),{class:`w-full text-xs data-[size=default]:h-7`},{default:x(()=>[h(T(le),{placeholder:T(i)(`quickSetup.provider.select`)},null,8,[`placeholder`])]),_:1}),h(T(ae),null,{default:x(()=>[(D(!0),C(f,null,g(T(ge),e=>(D(),_(T(B),{key:e.plan,value:e.plan},{default:x(()=>[y(l(e.plan),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`])])),e(`div`,nt,[h(T(R),{class:`text-xs text-muted-foreground`},{default:x(()=>[y(l(T(i)(`quickSetup.provider.apiKey`)),1)]),_:1}),h(T(fe),{modelValue:T(k),"onUpdate:modelValue":c[2]||=e=>n(k)?k.value=e:null,type:`password`,autocomplete:`new-password`,placeholder:T(i)(`quickSetup.provider.apiKeyPlaceholder`),class:`md:text-xs h-7`},null,8,[`modelValue`,`placeholder`])]),e(`div`,rt,[h(T(R),{class:`text-xs text-muted-foreground invisible`},{default:x(()=>[y(l(T(i)(`quickSetup.provider.connect`)),1)]),_:1}),h(T(S),{variant:`outline`,size:`sm`,disabled:T(q)===`testing`,class:m(T(q)===`ok`?`border-green-500/50 text-green-500`:``),onClick:T(Me)},{default:x(()=>[T(q)===`testing`?(D(),C(f,{key:0},[c[11]||=e(`svg`,{class:`w-3.5 h-3.5 mr-1 animate-spin`,fill:`none`,viewBox:`0 0 24 24`},[e(`circle`,{class:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,"stroke-width":`4`}),e(`path`,{class:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})],-1),y(` `+l(T(i)(`quickSetup.provider.testing`)),1)],64)):T(q)===`ok`?(D(),C(f,{key:1},[h(T(oe),{class:`size-3.5 mr-1`}),y(` `+l(T(i)(`quickSetup.provider.connected`)),1)],64)):(D(),C(f,{key:2},[y(l(T(i)(`quickSetup.provider.test`)),1)],64))]),_:1},8,[`disabled`,`class`,`onClick`])])]),T(A).length>0?(D(),C(`div`,it,[h(P,{"model-value":T(A),"shared-key":T(k),readonly:!1,"onUpdate:modelValue":c[3]||=e=>A.value=e},null,8,[`model-value`,`shared-key`])])):E(``,!0),e(`div`,at,[e(`div`,ot,[e(`span`,st,l(T(i)(`quickSetup.concurrency.control`)),1),h(T(V),{variant:`outline`,class:`text-[9px] px-1 py-0 leading-none text-muted-foreground/50`},{default:x(()=>[y(l(T(i)(`quickSetup.concurrency.optional`)),1)]),_:1})]),h(ee,{modelValue:T(ye),"onUpdate:modelValue":c[4]||=e=>n(ye)?ye.value=e:null},null,8,[`modelValue`])])]),_:1})]),_:1}),h(T(H),{class:`ring-0`},{default:x(()=>[h(T(W),{class:`pb-3`},{default:x(()=>[e(`div`,ct,[h(T(G),{class:`text-sm font-medium`},{default:x(()=>[y(l(T(i)(`quickSetup.model.config`)),1)]),_:1}),h(T(V),{variant:`secondary`,class:`text-[10px]`},{default:x(()=>[y(l(Ve.value)+`/`+l(T(j).length),1)]),_:1})])]),_:1}),h(T(U),null,{default:x(()=>[T(j).length===0?(D(),C(`p`,lt,l(T(i)(`quickSetup.model.selectProviderFirst`)),1)):(D(),C(`div`,ut,[(D(!0),C(f,null,g(T(j),(e,t)=>(D(),_(ie,{key:e.name,model:e,"api-type":T(b),"is-deep-seek":e.name.toLowerCase().includes(`deepseek`),"is-non-openai-endpoint":T(ve),capabilities:e.capabilities??[`text`],"stream-timeout-ms":e.stream_timeout_ms??void 0,"onUpdate:model":e=>T(Ie)(t,e),onRemove:e=>T(Le)(t),"onUpdate:streamTimeoutMs":e=>T(Re)(t,e),onToggleCapability:e=>T(ze)(t,e)},null,8,[`model`,`api-type`,`is-deep-seek`,`is-non-openai-endpoint`,`capabilities`,`stream-timeout-ms`,`onUpdate:model`,`onRemove`,`onUpdate:streamTimeoutMs`,`onToggleCapability`]))),128))])),T(J)?(D(),C(`div`,dt,[h(T(fe),{modelValue:Z.value,"onUpdate:modelValue":c[5]||=e=>Z.value=e,placeholder:T(i)(`quickSetup.model.namePlaceholder`),onKeydown:r(p(Be,[`prevent`]),[`enter`]),class:`flex-1 md:text-xs h-7`},null,8,[`modelValue`,`placeholder`,`onKeydown`]),h(T(S),{type:`button`,variant:`outline`,size:`sm`,onClick:Be,disabled:!Z.value.trim()},{default:x(()=>[y(l(T(i)(`common.add`)),1)]),_:1},8,[`disabled`])])):E(``,!0),e(`div`,ft,[h(T(S),{variant:`ghost`,class:`flex items-center gap-1.5 text-xs font-medium text-muted-foreground w-full justify-start h-auto px-0`,onClick:c[6]||=e=>Q.value=!Q.value},{default:x(()=>[h(T(M),{class:m([`size-3 transition-transform`,Q.value?`rotate-90`:``])},null,8,[`class`]),y(` `+l(T(i)(`quickSetup.transform.title`))+` `,1),h(T(V),{variant:`outline`,class:`text-[9px] px-1 py-0 leading-none text-muted-foreground/50`},{default:x(()=>[y(l(T(i)(`quickSetup.transform.optional`)),1)]),_:1})]),_:1}),Q.value?(D(),C(`div`,pt,[h(me,{modelValue:T(be),"onUpdate:modelValue":c[7]||=e=>n(be)?be.value=e:null},null,8,[`modelValue`])])):E(``,!0)])]),_:1})]),_:1}),e(`div`,mt,[h(T(H),{class:`col-span-3 ring-0`},{default:x(()=>[h(T(W),{class:`pb-3`},{default:x(()=>[e(`div`,ht,[h(T(G),{class:`text-sm font-medium`},{default:x(()=>[y(l(T(i)(`quickSetup.mapping.title`)),1)]),_:1}),h(T(V),{variant:`secondary`,class:`text-[10px]`},{default:x(()=>[y(l(T(i)(`quickSetup.mapping.count`,{count:T(N).length})),1)]),_:1})])]),_:1}),h(T(U),null,{default:x(()=>[h(He,{entries:T(N),"provider-groups":T(xe),"onUpdate:targets":T(we),"onUpdate:multimodalFallback":T(Te),"onUpdate:clientModel":T(Ee),onToggleActive:T(De),onAdd:T(Oe),onRemove:T(ke)},null,8,[`entries`,`provider-groups`,`onUpdate:targets`,`onUpdate:multimodalFallback`,`onUpdate:clientModel`,`onToggleActive`,`onAdd`,`onRemove`])]),_:1})]),_:1}),e(`div`,gt,[h(T(H),{class:`ring-0`},{default:x(()=>[h(T(W),{class:`pb-3`},{default:x(()=>[e(`div`,_t,[h(T(G),{class:`text-sm font-medium`},{default:x(()=>[y(l(T(i)(`quickSetup.retry.title`)),1)]),_:1}),h(T(V),{variant:`secondary`,class:`text-[10px]`},{default:x(()=>[y(l(T(i)(`quickSetup.retry.selectedCount`,{count:T(I).filter(e=>e.exists).length+T(K).size})),1)]),_:1})])]),_:1}),h(T(U),null,{default:x(()=>[T(I).length===0?(D(),C(`div`,vt,[T(F).length===0?(D(),C(f,{key:0},[y(l(T(i)(`quickSetup.retry.allCreated`)),1)],64)):(D(),C(f,{key:1},[y(l(T(i)(`quickSetup.retry.selectProviderFirst`)),1)],64))])):(D(),C(`div`,yt,[e(`div`,bt,[h(T(L),{disabled:T(I).every(e=>e.exists),"model-value":T(I).filter(e=>!e.exists).every(e=>T(K).has(e.name))?!0:T(I).some(e=>!e.exists&&T(K).has(e.name))?`indeterminate`:!1,class:`mt-0.5`,"onUpdate:modelValue":c[8]||=e=>{let t=e===!0;T(Ae)(T(I).filter(e=>!e.exists).map(e=>e.name),t)}},null,8,[`disabled`,`model-value`]),e(`span`,{class:m([`text-xs font-medium`,T(I).every(e=>e.exists)?`text-muted-foreground/40`:`text-muted-foreground`])},l(T(i)(`common.selectAll`)),3)]),(D(!0),C(f,null,g(T(I),t=>(D(),C(`div`,{key:t.name,class:m([`flex items-start gap-2.5 rounded-md transition-colors`,t.exists?`opacity-60 cursor-default p-2`:`hover:bg-muted/50 cursor-pointer p-2`]),onClick:e=>!t.exists&&T(X)(t.name,!T(K).has(t.name))},[h(T(L),{"model-value":t.exists?!0:T(K).has(t.name),disabled:t.exists,class:`mt-0.5`,"onUpdate:modelValue":e=>T(X)(t.name,e===!0),onClick:c[9]||=p(()=>{},[`stop`])},null,8,[`model-value`,`disabled`,`onUpdate:modelValue`]),e(`div`,St,[e(`div`,Ct,[e(`span`,wt,l(t.name),1),t.exists?(D(),_(T(V),{key:0,variant:`secondary`,class:`text-[9px] px-1.5 py-0 leading-none bg-muted text-muted-foreground`},{default:x(()=>[y(l(T(i)(`quickSetup.retry.configured`)),1)]),_:1})):E(``,!0)]),e(`div`,Tt,l(t.status_code)+` · `+l(t.retry_strategy===`fixed`?T(i)(`quickSetup.retry.fixed`):T(i)(`quickSetup.retry.exponential`))+` · `+l(t.retry_delay_ms/1e3)+`s · `+l(t.max_retries)+l(T(i)(`quickSetup.retry.times`)),1)]),!t.exists&&t.providers&&t.providers.length>0?(D(),C(`div`,{key:0,class:`shrink-0`,onClick:c[10]||=p(()=>{},[`stop`])},[h(T(ue),{"model-value":T(pe).get(t.name)??`general`,"onUpdate:modelValue":e=>T(je)(t.name,e)},{default:x(()=>[h(T(se),{class:`h-6 text-[10px] px-2 py-0 gap-1`},{default:x(()=>[h(T(le))]),_:1}),h(T(ae),null,{default:x(()=>[h(T(B),{value:`general`},{default:x(()=>[y(l(T(i)(`quickSetup.retry.general`)),1)]),_:1}),(D(!0),C(f,null,g(t.providers,e=>(D(),_(T(B),{key:e,value:e},{default:x(()=>[y(l(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`model-value`,`onUpdate:modelValue`])])):t.exists?E(``,!0):(D(),_(T(V),{key:1,variant:`secondary`,class:`text-[9px] px-1 py-0 leading-none shrink-0 mt-0.5`},{default:x(()=>[y(l(T(i)(`quickSetup.retry.general`)),1)]),_:1}))],10,xt))),128))]))]),_:1})]),_:1})])])]),e(`div`,Et,[e(`div`,Dt,[T(a)?(D(),C(`span`,Ot,l(Ft.value),1)):E(``,!0),T(u)?(D(),C(f,{key:1},[c[13]||=e(`span`,{class:`text-muted-foreground/40`},`→`,-1),e(`span`,kt,l(T(J)?T(i)(`quickSetup.provider.custom`):T(u)),1),T(v)?(D(),C(f,{key:0},[c[12]||=e(`span`,{class:`text-muted-foreground/40`},`/`,-1),e(`span`,At,l(T(v)),1)],64)):E(``,!0)],64)):E(``,!0),c[14]||=e(`span`,{class:`text-muted-foreground/40`},`·`,-1),e(`span`,null,l(T(i)(`quickSetup.footer.models`,{count:Ve.value})),1),c[15]||=e(`span`,{class:`text-muted-foreground/40`},`·`,-1),e(`span`,null,l(T(i)(`quickSetup.footer.mappings`,{count:T(N).length})),1),c[16]||=e(`span`,{class:`text-muted-foreground/40`},`·`,-1),e(`span`,null,l(T(i)(`quickSetup.footer.rules`,{count:T(K).size+T(I).filter(e=>e.exists).length})),1)]),e(`div`,jt,[$.value===`valid`?(D(),C(`div`,Mt,[h(T(oe),{class:`size-3.5`}),e(`span`,Nt,l(T(i)(`quickSetup.footer.validated`)),1)])):$.value===`invalid`?(D(),C(`div`,Pt,[h(T(_e),{class:`size-3.5`}),e(`span`,null,l(T(i)(`quickSetup.footer.invalid`)),1)])):E(``,!0),h(T(S),{size:`sm`,variant:`outline`,onClick:Lt},{default:x(()=>[y(l(T(i)(`quickSetup.footer.validate`)),1)]),_:1}),h(T(S),{size:`sm`,disabled:T(he),onClick:T(Ne)},{default:x(()=>[T(he)?(D(),C(f,{key:0},[c[17]||=e(`svg`,{class:`w-3.5 h-3.5 mr-1 animate-spin`,fill:`none`,viewBox:`0 0 24 24`},[e(`circle`,{class:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,"stroke-width":`4`}),e(`path`,{class:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})],-1),y(` `+l(T(i)(`quickSetup.footer.saving`)),1)],64)):(D(),C(f,{key:1},[y(l(T(i)(`quickSetup.footer.saveConfig`)),1)],64))]),_:1},8,[`disabled`,`onClick`])])])],64))}});export{Ft as default};
@@ -1 +0,0 @@
1
- import{$ as e,A as t,Q as n,Qt as r,S as i,U as a,X as o,Y as s,Yt as c,Zt as l,at as u,bt as d,et as f,gt as p,ht as m,i as h,it as g,j as _,jt as v,n as y,nt as b,o as x,ot as S,pt as C,qt as w,r as T,tt as E,vt as D,xt as O,zt as k}from"./button-BCxYWEaM.js";import{t as A}from"./plus-FNO9X5JG.js";import{t as j}from"./Checkbox-CAQnc0qV.js";import{a as ee,c as M,i as te,l as N,n as ne,o as re,r as ie,s as ae,t as oe}from"./TabsTrigger-B5HyH2xO.js";import{n as se,t as ce}from"./CollapsibleContent-CHlSINCS.js";import{t as le}from"./CollapsibleTrigger-CJMUoPRa.js";import{a as ue,n as de,o as fe,r as pe,t as me}from"./dialog-B0wgNzud.js";import{t as P}from"./Label-Ct_DR7Ui.js";import{_ as F,a as I,c as he,d as ge,g as L,h as R,l as _e,m as z,mt as ve,o as ye,p as be,s as xe,t as Se,u as Ce,ut as we,v as B,vt as V,z as H}from"./index-CwjudU09.js";import{t as U}from"./badge-FksLt30f.js";import{t as W}from"./Input-Dr2XqfSh.js";import{t as G}from"./Card-BNz2IkLE.js";import{t as K}from"./CardContent-DszVPJgx.js";import{n as q,t as J}from"./CardTitle-BeBkx0ns.js";import{a as Y,i as X,n as Z,o as Te,r as Q,t as Ee}from"./TableHeader-jCTjghgy.js";var De=S({__name:`TabsContent`,props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,{forwardRef:r}=x(),i=N(),a=n(()=>M(i.baseId,t.value)),o=n(()=>ae(i.baseId,t.value)),s=n(()=>t.value===i.modelValue.value),c=k(s.value);return p(()=>{i.registerContent(t.value),requestAnimationFrame(()=>{c.value=!1})}),m(()=>{i.unregisterContent(t.value)}),(e,t)=>(D(),f(w(H),{present:e.forceMount||s.value,"force-mount":``},{default:v(({present:t})=>[u(w(h),{id:o.value,ref:w(r),"as-child":e.asChild,as:e.as,role:`tabpanel`,"data-state":s.value?`active`:`inactive`,"data-orientation":w(i).orientation.value,"aria-labelledby":a.value,hidden:!t,tabindex:`0`,style:l({animationDuration:c.value?`0s`:void 0})},{default:v(()=>[!w(i).unmountOnHide.value||t?O(e.$slots,`default`,{key:0}):E(`v-if`,!0)]),_:2},1032,[`id`,`as-child`,`as`,`data-state`,`data-orientation`,`aria-labelledby`,`hidden`,`style`])]),_:3},8,[`present`]))}}),$=S({__name:`TabsContent`,props:{value:{},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=i(t,`class`);return(e,r)=>(D(),f(w(De),C({"data-slot":`tabs-content`,class:w(T)(`text-sm flex-1 outline-none`,t.class)},w(n)),{default:v(()=>[O(e.$slots,`default`)]),_:3},16,[`class`]))}}),Oe={name:``,status_code:429,body_pattern:``,provider_id:`__all__`,is_active:!0,retry_strategy:`exponential`,retry_delay_ms:5e3,max_retries:10,max_delay_ms:6e4,matchMode:`regex`,bodyMatchers:[]};function ke(e){if(!e)return[];try{return JSON.parse(e)}catch{return[]}}function Ae(e){let t=e.filter(e=>e.path.trim()&&(e.operator===`exists`||e.value.trim()));return t.length>0?JSON.stringify(t):null}function je(e){return e?`json`:`regex`}function Me(e,t){let n={};e.name.trim()||(n.name=t(`retryRules.validation.nameRequired`));let r=Number(e.status_code);if((!Number.isInteger(r)||r<100||r>599)&&(n.status_code=t(`retryRules.validation.statusCodeRange`,{min:100,max:599})),e.matchMode===`regex`)if(!e.body_pattern.trim())n.body_pattern=t(`retryRules.validation.bodyPatternRequired`);else try{new RegExp(e.body_pattern)}catch{n.body_pattern=t(`retryRules.validation.bodyPatternInvalid`)}else e.bodyMatchers.some(e=>e.path.trim()&&(e.operator===`exists`||e.value.trim()))||(n.body_matchers=t(`retryRules.validation.bodyPatternRequired`));let i=Number(e.retry_delay_ms);(!i||i<100)&&(n.retry_delay_ms=t(`retryRules.validation.delayMin`,{min:100}));let a=Number(e.max_retries);if((!Number.isInteger(a)||a<0||a>100)&&(n.max_retries=t(`retryRules.validation.retriesRange`,{max:100})),e.retry_strategy===`exponential`){let r=Number(e.max_delay_ms);(!r||r<100)&&(n.max_delay_ms=t(`retryRules.validation.delayMin`,{min:100}))}return n}function Ne(){return{...Oe,bodyMatchers:[]}}function Pe(e,t,n){if(e){let t=ke(e);return t.length>0?t.map(e=>{let t=n[e.operator]??e.operator;return e.operator===`exists`?`${e.path} ${t}`:`${e.path} ${t} "${e.value}"`}).join(`, `):e}return t??``}var Fe={class:`flex items-center justify-between`},Ie={class:`flex items-center justify-between mb-3`},Le={class:`flex items-center gap-2`},Re={class:`text-sm text-muted-foreground`},ze=S({__name:`RecommendedRules`,props:{rules:{}},emits:[`added`],setup(i,{emit:s}){let{t:l}=a(),p=i,m=s,h=k(!1),_=k(new Set),x=n(()=>p.rules.length>0&&_.value.size===p.rules.length);function S(e){let t=new Set(_.value);t.has(e)?t.delete(e):t.add(e),_.value=t}function C(e){_.value=e===!0?new Set(p.rules.map(e=>e.name)):new Set}async function T(){let e=p.rules.filter(e=>_.value.has(e.name));for(let n of e)await t.createRetryRule({name:n.name,status_code:n.status_code,body_pattern:n.body_pattern,is_active:1,retry_strategy:n.retry_strategy,retry_delay_ms:n.retry_delay_ms,max_retries:n.max_retries,max_delay_ms:n.max_delay_ms});I.success(l(`retryRules.messages.addedCount`,{count:e.length})),_.value=new Set,m(`added`)}return(t,n)=>i.rules.length>0?(D(),f(w(G),{key:0,class:`mt-6`},{default:v(()=>[u(w(se),{open:h.value,"onUpdate:open":n[0]||=e=>h.value=e},{default:v(()=>[u(w(le),{"as-child":``},{default:v(()=>[u(w(q),{class:`cursor-pointer hover:bg-muted/50 transition-colors`},{default:v(()=>[e(`div`,Fe,[u(w(J),{class:`text-sm font-medium`},{default:v(()=>[g(r(w(l)(`retryRules.recommended.title`,{count:i.rules.length})),1)]),_:1}),u(w(V),{class:c([`h-4 w-4 text-muted-foreground transition-transform`,{"rotate-180":h.value}])},null,8,[`class`])])]),_:1})]),_:1}),u(w(ce),null,{default:v(()=>[u(w(K),null,{default:v(()=>[e(`div`,Ie,[e(`div`,Le,[u(w(j),{"model-value":x.value,"onUpdate:modelValue":C},null,8,[`model-value`]),e(`span`,Re,r(w(l)(`retryRules.recommended.selectAll`)),1)]),u(w(y),{size:`sm`,disabled:_.value.size===0,onClick:T},{default:v(()=>[g(r(w(l)(`retryRules.recommended.addSelected`,{count:_.value.size})),1)]),_:1},8,[`disabled`])]),u(w(Te),null,{default:v(()=>[u(w(Ee),null,{default:v(()=>[u(w(Q),null,{default:v(()=>[u(w(Z),{class:`w-10`}),u(w(Z),null,{default:v(()=>[g(r(w(l)(`retryRules.recommended.headers.name`)),1)]),_:1}),u(w(Z),null,{default:v(()=>[g(r(w(l)(`retryRules.recommended.headers.statusCode`)),1)]),_:1}),u(w(Z),null,{default:v(()=>[g(r(w(l)(`retryRules.recommended.headers.pattern`)),1)]),_:1}),u(w(Z),null,{default:v(()=>[g(r(w(l)(`retryRules.recommended.headers.strategy`)),1)]),_:1})]),_:1})]),_:1}),u(w(Y),null,{default:v(()=>[(D(!0),b(o,null,d(i.rules,e=>(D(),f(w(Q),{key:e.name},{default:v(()=>[u(w(X),null,{default:v(()=>[u(w(j),{"model-value":_.value.has(e.name),"onUpdate:modelValue":()=>S(e.name)},null,8,[`model-value`,`onUpdate:modelValue`])]),_:2},1024),u(w(X),null,{default:v(()=>[g(r(e.name),1)]),_:2},1024),u(w(X),null,{default:v(()=>[g(r(e.status_code),1)]),_:2},1024),u(w(X),{class:`font-mono text-xs max-w-[200px] truncate`},{default:v(()=>[g(r(e.body_pattern),1)]),_:2},1024),u(w(X),null,{default:v(()=>[g(r(e.retry_strategy===`fixed`?w(l)(`retryRules.strategy.fixed`):w(l)(`retryRules.strategy.exponential`)),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]),_:1})):E(``,!0)}}),Be={class:`page`},Ve={key:0,class:`flex items-center justify-center py-12 text-muted-foreground`},He={class:`flex items-center justify-between mb-4`},Ue={class:`text-lg font-semibold text-foreground`},We={class:`truncate block`},Ge={key:1},Ke={class:`flex items-center gap-2`},qe={class:`text-xs text-muted-foreground`},Je={key:0,class:`text-sm text-destructive mt-1`},Ye={key:0,class:`text-sm text-destructive mt-1`},Xe={class:`font-medium mb-1`},Ze={key:0,class:`text-sm text-destructive mt-1`},Qe={class:`space-y-2`},$e={key:0,class:`text-sm text-destructive mt-1`},et={class:`grid grid-cols-2 gap-3`},tt={key:0,class:`text-sm text-destructive mt-1`},nt={key:0,class:`text-sm text-destructive mt-1`},rt={key:0},it={key:0,class:`text-sm text-destructive mt-1`},at={class:`flex items-center gap-2`},ot=S({__name:`RetryRules`,setup(n){let{t:i}=a(),c=k(!1),l=k([]),m=k([]),h=k(!1),x=k(null),S=k(null),C=k(Ne()),T=k({}),O=k([]),M={equals:i(`retryRules.operatorEquals`),contains:i(`retryRules.operatorContains`),exists:i(`retryRules.operatorExists`)};function N(e){let t=m.value.find(t=>t.id===e);return t?t.name:e}function ae(e){return Pe(e.body_matchers,e.body_pattern,M)}function se(){C.value.bodyMatchers.push({path:``,operator:`contains`,value:``})}function ce(e){C.value.bodyMatchers.splice(e,1)}function le(){let e=Me(C.value,i);return T.value=e,Object.keys(e).length===0}async function V(){try{l.value=await t.getRetryRules()}catch(e){console.error(`RetryRules.loadData:`,e),I.error(_(e,i(`retryRules.messages.loadFailed`)))}}async function H(){try{m.value=await t.getProviders()}catch(e){console.error(`RetryRules.loadProviders:`,e),I.error(_(e,i(`retryRules.messages.loadFailed`)))}}async function K(){try{O.value=await t.recommended.getRetryRules()}catch(e){console.error(`RetryRules.loadRecommended:`,e),O.value=[]}}function q(){x.value=null,C.value=Ne(),T.value={},h.value=!0}function J(e){x.value=e.id,C.value={name:e.name,status_code:e.status_code,body_pattern:e.body_pattern,provider_id:e.provider_id??`__all__`,is_active:!!e.is_active,retry_strategy:e.retry_strategy,retry_delay_ms:e.retry_delay_ms,max_retries:e.max_retries,max_delay_ms:e.max_delay_ms,matchMode:je(e.body_matchers),bodyMatchers:ke(e.body_matchers)},T.value={},h.value=!0}async function De(){if(le())try{let e=C.value.matchMode===`json`?Ae(C.value.bodyMatchers):null,n={name:C.value.name,status_code:Number(C.value.status_code),body_pattern:C.value.body_pattern,provider_id:C.value.provider_id===`__all__`?null:C.value.provider_id,body_matchers:e,is_active:+!!C.value.is_active,retry_strategy:C.value.retry_strategy,retry_delay_ms:Number(C.value.retry_delay_ms),max_retries:Number(C.value.max_retries),max_delay_ms:Number(C.value.max_delay_ms)};x.value?await t.updateRetryRule(x.value,n):await t.createRetryRule(n),h.value=!1,await V()}catch(e){console.error(`RetryRules.handleSave:`,e),I.error(_(e,i(`retryRules.messages.saveFailed`)))}}function Oe(e){S.value=e}async function Fe(){let e=S.value;if(e){S.value=null;try{await t.deleteRetryRule(e.id),await V()}catch(e){console.error(`RetryRules.handleDelete:`,e),I.error(_(e,i(`retryRules.messages.deleteFailed`)))}}}async function Ie(){await Promise.allSettled([K(),V()])}return p(async()=>{c.value=!0,await Promise.allSettled([V(),K(),H()]),c.value=!1}),(t,n)=>(D(),b(`div`,Be,[c.value?(D(),b(`div`,Ve,[u(w(ve),{class:`w-5 h-5 animate-spin mr-2`}),g(` `+r(w(i)(`common.loading`)),1)])):E(``,!0),c.value?E(``,!0):(D(),b(o,{key:1},[e(`div`,He,[e(`h2`,Ue,r(w(i)(`retryRules.title`)),1),u(w(y),{onClick:q,class:`flex items-center gap-1`},{default:v(()=>[u(w(A),{class:`w-4 h-4`}),g(` `+r(w(i)(`retryRules.addRule`)),1)]),_:1})]),u(w(G),{flush:``},{default:v(()=>[u(w(Te),{class:`[&_td]:px-4 [&_th]:px-4`},{default:v(()=>[u(w(Ee),null,{default:v(()=>[u(w(Q),{class:`bg-muted`},{default:v(()=>[u(w(Z),{class:`text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.name`)),1)]),_:1}),u(w(Z),{class:`text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.statusCode`)),1)]),_:1}),u(w(Z),{class:`text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.bodyPattern`)),1)]),_:1}),u(w(Z),{class:`text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.provider`)),1)]),_:1}),u(w(Z),{class:`text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.retryStrategy`)),1)]),_:1}),u(w(Z),{class:`text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.status`)),1)]),_:1}),u(w(Z),{class:`text-right text-muted-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.tableHeaders.actions`)),1)]),_:1})]),_:1})]),_:1}),u(w(Y),null,{default:v(()=>[(D(!0),b(o,null,d(l.value,t=>(D(),f(w(Q),{key:t.id},{default:v(()=>[u(w(X),{class:`font-mono text-sm`},{default:v(()=>[g(r(t.name),1)]),_:2},1024),u(w(X),null,{default:v(()=>[g(r(t.status_code),1)]),_:2},1024),u(w(X),{class:`font-mono text-xs text-muted-foreground max-w-[200px]`},{default:v(()=>[e(`span`,We,r(ae(t)),1)]),_:2},1024),u(w(X),null,{default:v(()=>[t.provider_id?(D(),b(`span`,Ge,r(N(t.provider_id)),1)):(D(),f(w(U),{key:0,variant:`secondary`},{default:v(()=>[g(r(w(i)(`retryRules.globalBadge`)),1)]),_:1}))]),_:2},1024),u(w(X),null,{default:v(()=>[e(`div`,Ke,[u(w(U),{variant:`outline`},{default:v(()=>[g(r(t.retry_strategy===`fixed`?w(i)(`retryRules.strategy.fixed`):w(i)(`retryRules.strategy.exponential`)),1)]),_:2},1024),e(`span`,qe,[g(r(t.retry_delay_ms/1e3)+`s · `+r(w(i)(`retryRules.times`,{count:t.max_retries}))+` `,1),t.retry_strategy===`exponential`?(D(),b(o,{key:0},[g(` · `+r(w(i)(`retryRules.upperLimit`,{value:t.max_delay_ms/1e3})),1)],64)):E(``,!0)])])]),_:2},1024),u(w(X),null,{default:v(()=>[u(w(U),{variant:t.is_active?`default`:`secondary`},{default:v(()=>[g(r(t.is_active?w(i)(`common.enabled`):w(i)(`common.disabled`)),1)]),_:2},1032,[`variant`])]),_:2},1024),u(w(X),{class:`text-right`},{default:v(()=>[u(w(y),{variant:`ghost`,size:`sm`,onClick:e=>J(t),class:`mr-2`},{default:v(()=>[g(r(w(i)(`common.edit`)),1)]),_:1},8,[`onClick`]),u(w(y),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>Oe(t)},{default:v(()=>[g(r(w(i)(`common.delete`)),1)]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024))),128)),l.value.length===0?(D(),f(w(Q),{key:0},{default:v(()=>[u(w(X),{colspan:`7`,class:`text-center text-muted-foreground py-8`},{default:v(()=>[g(r(w(i)(`retryRules.noRules`)),1)]),_:1})]),_:1})):E(``,!0)]),_:1})]),_:1})]),_:1}),u(w(fe),{open:h.value,"onUpdate:open":n[17]||=e=>h.value=e},{default:v(()=>[u(w(ue),{class:`max-w-lg`},{default:v(()=>[u(w(de),null,{default:v(()=>[u(w(me),null,{default:v(()=>[g(r(x.value?w(i)(`retryRules.dialog.editRule`):w(i)(`retryRules.dialog.addRule`)),1)]),_:1})]),_:1}),e(`form`,{onSubmit:s(De,[`prevent`]),class:`space-y-3`},[e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.name`)),1)]),_:1}),u(w(W),{modelValue:C.value.name,"onUpdate:modelValue":n[0]||=e=>C.value.name=e,type:`text`,required:``,onInput:n[1]||=e=>delete T.value.name},null,8,[`modelValue`]),T.value.name?(D(),b(`p`,Je,r(T.value.name),1)):E(``,!0)]),e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(w(i)(`retryRules.provider`)),1)]),_:1}),u(w(B),{modelValue:C.value.provider_id,"onUpdate:modelValue":n[2]||=e=>C.value.provider_id=e},{default:v(()=>[u(w(R),{class:`w-full`},{default:v(()=>[u(w(z),{placeholder:w(i)(`retryRules.providerPlaceholder`)},null,8,[`placeholder`])]),_:1}),u(w(F),null,{default:v(()=>[u(w(L),{value:`__all__`},{default:v(()=>[g(r(w(i)(`retryRules.providerAll`)),1)]),_:1}),(D(!0),b(o,null,d(m.value,e=>(D(),f(w(L),{key:e.id,value:e.id},{default:v(()=>[g(r(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.statusCode`)),1)]),_:1}),u(w(W),{modelValue:C.value.status_code,"onUpdate:modelValue":n[3]||=e=>C.value.status_code=e,modelModifiers:{number:!0},type:`number`,required:``,onInput:n[4]||=e=>delete T.value.status_code},null,8,[`modelValue`]),T.value.status_code?(D(),b(`p`,Ye,r(T.value.status_code),1)):E(``,!0)]),e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1 flex items-center gap-1`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.bodyPattern`))+` `,1),u(w(Se),null,{default:v(()=>[u(w(re),null,{default:v(()=>[u(w(te),{"as-child":``},{default:v(()=>[...n[19]||=[e(`span`,{class:`inline-flex items-center justify-center w-3.5 h-3.5 rounded-full bg-muted text-muted-foreground text-[10px] font-bold cursor-help`},`?`,-1)]]),_:1}),u(w(ee),{side:`right`,class:`max-w-xs text-xs leading-relaxed`},{default:v(()=>[e(`p`,Xe,r(w(i)(`retryRules.dialog.bodyPattern`)),1),e(`p`,null,r(w(i)(`retryRules.dialog.bodyPatternTooltip`)),1)]),_:1})]),_:1})]),_:1})]),_:1}),u(w(ie),{modelValue:C.value.matchMode,"onUpdate:modelValue":n[7]||=e=>C.value.matchMode=e},{default:v(()=>[u(w(ne),{class:`mb-2`},{default:v(()=>[u(w(oe),{value:`regex`},{default:v(()=>[g(r(w(i)(`retryRules.regexMatch`)),1)]),_:1}),u(w(oe),{value:`json`},{default:v(()=>[g(r(w(i)(`retryRules.jsonMatch`)),1)]),_:1})]),_:1}),u(w($),{value:`regex`},{default:v(()=>[u(w(W),{modelValue:C.value.body_pattern,"onUpdate:modelValue":n[5]||=e=>C.value.body_pattern=e,type:`text`,placeholder:w(i)(`retryRules.dialog.bodyPatternPlaceholder`),onInput:n[6]||=e=>delete T.value.body_pattern},null,8,[`modelValue`,`placeholder`]),T.value.body_pattern?(D(),b(`p`,Ze,r(T.value.body_pattern),1)):E(``,!0)]),_:1}),u(w($),{value:`json`},{default:v(()=>[e(`div`,Qe,[(D(!0),b(o,null,d(C.value.bodyMatchers,(e,t)=>(D(),b(`div`,{key:t,class:`flex items-start gap-2`},[u(w(W),{modelValue:e.path,"onUpdate:modelValue":t=>e.path=t,placeholder:w(i)(`retryRules.fieldPath`),class:`flex-1`},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]),u(w(B),{modelValue:e.operator,"onUpdate:modelValue":t=>e.operator=t},{default:v(()=>[u(w(R),{class:`w-28 shrink-0`},{default:v(()=>[u(w(z))]),_:1}),u(w(F),null,{default:v(()=>[u(w(L),{value:`equals`},{default:v(()=>[g(r(w(i)(`retryRules.operatorEquals`)),1)]),_:1}),u(w(L),{value:`contains`},{default:v(()=>[g(r(w(i)(`retryRules.operatorContains`)),1)]),_:1}),u(w(L),{value:`exists`},{default:v(()=>[g(r(w(i)(`retryRules.operatorExists`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`onUpdate:modelValue`]),e.operator===`exists`?E(``,!0):(D(),f(w(W),{key:0,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,placeholder:w(i)(`retryRules.matchValue`),class:`flex-1`},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])),u(w(y),{type:`button`,variant:`ghost`,size:`icon`,class:`shrink-0 text-muted-foreground`,onClick:e=>ce(t)},{default:v(()=>[u(w(we),{class:`w-4 h-4`})]),_:1},8,[`onClick`])]))),128)),u(w(y),{type:`button`,variant:`outline`,size:`sm`,onClick:se},{default:v(()=>[u(w(A),{class:`w-3 h-3 mr-1`}),g(` `+r(w(i)(`retryRules.addCondition`)),1)]),_:1}),T.value.body_matchers?(D(),b(`p`,$e,r(T.value.body_matchers),1)):E(``,!0)])]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.retryStrategy`)),1)]),_:1}),u(w(B),{modelValue:C.value.retry_strategy,"onUpdate:modelValue":n[8]||=e=>C.value.retry_strategy=e},{default:v(()=>[u(w(R),{class:`w-full`},{default:v(()=>[u(w(z),{placeholder:w(i)(`retryRules.dialog.selectStrategy`)},null,8,[`placeholder`])]),_:1}),u(w(F),null,{default:v(()=>[u(w(L),{value:`exponential`},{default:v(()=>[g(r(w(i)(`retryRules.strategy.exponential`)),1)]),_:1}),u(w(L),{value:`fixed`},{default:v(()=>[g(r(w(i)(`retryRules.strategy.fixed`)),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,et,[e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(C.value.retry_strategy===`fixed`?w(i)(`retryRules.dialog.intervalMs`):w(i)(`retryRules.dialog.initialDelayMs`)),1)]),_:1}),u(w(W),{modelValue:C.value.retry_delay_ms,"onUpdate:modelValue":n[9]||=e=>C.value.retry_delay_ms=e,modelModifiers:{number:!0},type:`number`,min:100,required:``,onInput:n[10]||=e=>delete T.value.retry_delay_ms},null,8,[`modelValue`]),T.value.retry_delay_ms?(D(),b(`p`,tt,r(T.value.retry_delay_ms),1)):E(``,!0)]),e(`div`,null,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.maxRetries`)),1)]),_:1}),u(w(W),{modelValue:C.value.max_retries,"onUpdate:modelValue":n[11]||=e=>C.value.max_retries=e,modelModifiers:{number:!0},type:`number`,min:0,max:100,required:``,onInput:n[12]||=e=>delete T.value.max_retries},null,8,[`modelValue`]),T.value.max_retries?(D(),b(`p`,nt,r(T.value.max_retries),1)):E(``,!0)])]),C.value.retry_strategy===`exponential`?(D(),b(`div`,rt,[u(w(P),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.maxDelayMs`)),1)]),_:1}),u(w(W),{modelValue:C.value.max_delay_ms,"onUpdate:modelValue":n[13]||=e=>C.value.max_delay_ms=e,modelModifiers:{number:!0},type:`number`,min:100,required:``,onInput:n[14]||=e=>delete T.value.max_delay_ms},null,8,[`modelValue`]),T.value.max_delay_ms?(D(),b(`p`,it,r(T.value.max_delay_ms),1)):E(``,!0)])):E(``,!0),e(`div`,at,[u(w(j),{modelValue:C.value.is_active,"onUpdate:modelValue":n[15]||=e=>C.value.is_active=e,id:`rule-active`},null,8,[`modelValue`]),u(w(P),{for:`rule-active`,class:`text-sm text-foreground`},{default:v(()=>[g(r(w(i)(`retryRules.dialog.enable`)),1)]),_:1})]),u(w(pe),null,{default:v(()=>[u(w(y),{type:`button`,variant:`outline`,onClick:n[16]||=e=>h.value=!1},{default:v(()=>[g(r(w(i)(`common.cancel`)),1)]),_:1}),u(w(y),{type:`submit`},{default:v(()=>[g(r(w(i)(`common.save`)),1)]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]),u(w(be),{open:!!S.value,"onUpdate:open":n[18]||=e=>{e||(S.value=null)}},{default:v(()=>[u(w(Ce),null,{default:v(()=>[u(w(xe),null,{default:v(()=>[u(w(ye),null,{default:v(()=>[g(r(w(i)(`retryRules.deleteConfirm.title`)),1)]),_:1}),u(w(_e),null,{default:v(()=>[g(r(w(i)(`retryRules.deleteConfirm.description`,{name:S.value?.name})),1)]),_:1})]),_:1}),u(w(he),null,{default:v(()=>[u(w(ge),null,{default:v(()=>[g(r(w(i)(`common.cancel`)),1)]),_:1}),u(w(y),{variant:`destructive`,onClick:Fe},{default:v(()=>[g(r(w(i)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]),u(ze,{rules:O.value,onAdded:Ie},null,8,[`rules`])],64))]))}});export{ot as default};
@@ -1 +0,0 @@
1
- import{$ as e,A as t,Q as n,Qt as r,R as i,U as ee,X as a,Y as te,Yt as o,at as s,bt as c,et as l,gt as ne,it as u,j as d,jt as f,n as p,nt as m,ot as h,qt as g,tt as _,vt as v,zt as y}from"./button-BCxYWEaM.js";import{n as b,t as re}from"./useClipboard-Bw6GLR6I.js";import{t as ie}from"./pencil-Y6MJERvc.js";import{t as ae}from"./plus-FNO9X5JG.js";import{t as oe}from"./search-DpWQ2wvO.js";import{t as se}from"./trash-2-BEOdZk69.js";import{t as ce}from"./Checkbox-CAQnc0qV.js";import{a as x,n as S,o as C,r as w,t as T}from"./dialog-B0wgNzud.js";import{t as E}from"./Label-Ct_DR7Ui.js";import{t as le}from"./Switch-BS1G55M2.js";import{Ct as ue,a as D,c as de,d as fe,dt as pe,l as me,o as he,p as ge,s as _e,u as ve,ut as ye,yt as O}from"./index-CwjudU09.js";import{t as k}from"./badge-FksLt30f.js";import{t as A}from"./Input-Dr2XqfSh.js";import{t as be}from"./Card-BNz2IkLE.js";import{a as xe,i as j,n as M,o as Se,r as N,t as Ce}from"./TableHeader-jCTjghgy.js";import{t as P}from"./_plugin-vue_export-helper-BH2M0_bF.js";var we=i(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Te=i(`shield-x`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m14.5 9.5-5 5`,key:`17q4r4`}],[`path`,{d:`m9.5 9.5 5 5`,key:`18nt4w`}]]),Ee={class:`page`},De={class:`flex items-center justify-between mb-4`},Oe={class:`text-base font-semibold text-foreground`},ke={class:`flex gap-6 px-4 py-3 mb-3 rounded-lg bg-card border border-input`},Ae={class:`flex flex-col gap-0.5`},je={class:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`},Me={class:`text-xl font-semibold leading-none font-mono`},Ne={class:`flex flex-col gap-0.5`},Pe={class:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`},Fe={class:`text-xl font-semibold leading-none font-mono text-primary`},Ie={class:`flex flex-col gap-0.5`},Le={class:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`},Re={class:`text-xl font-semibold leading-none font-mono`},ze={class:`mb-3`},Be={class:`relative max-w-[280px]`},Ve={class:`font-medium text-sm max-w-[200px] truncate block`},He={class:`flex items-center gap-1.5`},Ue={key:0,class:`font-mono text-xs font-medium break-all`},We={class:`font-mono text-xs font-medium`},Ge={class:`font-mono text-xs text-muted-foreground/40 tracking-wider`},Ke={class:`flex items-center gap-1 flex-wrap`},qe={class:`flex items-center gap-1.5`},Je={class:`text-xs text-muted-foreground`},Ye={class:`font-mono text-[11px] text-muted-foreground/50`},Xe={class:`flex items-center justify-end gap-0.5`},Ze={class:`text-muted-foreground text-sm`},Qe={key:0,class:`text-muted-foreground/50 text-xs mt-1`},$e={key:0,class:`text-xs text-destructive mt-1`},et={class:`text-[11px] text-muted-foreground/50 mb-2`},tt={class:`border rounded-md bg-muted/30 p-2`},nt={key:0,class:`flex flex-wrap gap-1 mb-2`},rt={class:`max-h-[200px] overflow-y-auto space-y-0.5`},it={class:`font-mono text-[11px]`},at={key:0,class:`text-muted-foreground text-xs text-center py-3`},ot={key:0,class:`flex items-center gap-2.5`},st={class:`space-y-3`},ct={class:`rounded-md border border-primary/25 bg-primary/10 p-3`},lt={class:`flex items-center gap-2`},ut={class:`font-mono text-xs font-medium break-all flex-1`},dt={class:`flex items-center gap-1.5 mt-2 text-warning text-[11px]`},F=2,ft=14,I=2e3,L=P(h({__name:`RouterKeys`,setup(i){let{t:h}=ee(),P=`•`.repeat(ft),L=y([]),R=y([]),z=y(``),B=y(new Set),V=y(null),H=y(!1),U=y(!1),W=y(null),G=y(null),K=y(``),q=y(!1),J=y(``),Y=y({name:``,allowed_models:[],is_active:!0}),X=y({}),pt=n(()=>L.value.filter(e=>e.is_active).length),mt=n(()=>L.value.filter(e=>e.allowed_models&&e.allowed_models.length>0).length),Z=n(()=>{let e=z.value.toLowerCase();return e?L.value.filter(t=>t.name.toLowerCase().includes(e)||t.key&&t.key.toLowerCase().includes(e)):L.value}),ht=n(()=>{let e=J.value.toLowerCase();return e?R.value.filter(t=>t.toLowerCase().includes(e)):R.value});function gt(e){let t=`w-1.5 h-1.5 rounded-full shrink-0`;return e?`${t} bg-success shadow-[0_0_6px_var(--color-success)/0.4]`:`${t} bg-muted-foreground/30`}async function _t(e){let t=e.key;t&&await Q(t)&&(V.value=e.id,setTimeout(()=>{V.value===e.id&&(V.value=null)},I))}async function vt(){await Q(K.value)&&(q.value=!0,setTimeout(()=>{q.value=!1},I))}let{copy:Q}=re();function yt(e){let t=B.value;t.has(e)?t.delete(e):t.add(e),B.value=new Set(t)}function bt(e,t){let n=Y.value.allowed_models;if(t===!0&&!n.includes(e))n.push(e);else if(!t){let t=n.indexOf(e);t>=0&&n.splice(t,1)}}function xt(e){let t=Y.value.allowed_models,n=t.indexOf(e);n>=0&&t.splice(n,1)}function St(){G.value=null,Y.value={name:``,allowed_models:[],is_active:!0},J.value=``,X.value={},H.value=!0}function Ct(e){G.value=e,Y.value={name:e.name,allowed_models:e.allowed_models?[...e.allowed_models]:[],is_active:!!e.is_active},J.value=``,X.value={},H.value=!0}function wt(e){W.value=e}async function Tt(){let e={};if(Y.value.name.trim()||(e.name=h(`routerKeys.nameRequired`)),X.value=e,!(Object.keys(e).length>0))try{if(G.value)await t.updateRouterKey(G.value.id,{name:Y.value.name,allowed_models:Y.value.allowed_models.length>0?Y.value.allowed_models:null,is_active:+!!Y.value.is_active}),H.value=!1,await $();else{let e=await t.createRouterKey({name:Y.value.name,allowed_models:Y.value.allowed_models.length>0?Y.value.allowed_models:null});H.value=!1,K.value=e.key,q.value=!1,U.value=!0,await $()}}catch(e){console.error(`routerKeys.save:`,e),D.error(d(e,h(`routerKeys.saveFailed`)))}}async function Et(e){try{await t.updateRouterKey(e.id,{is_active:+!e.is_active}),await $()}catch(e){console.error(`routerKeys.toggleActive:`,e),D.error(d(e,h(`routerKeys.toggleActiveFailed`)))}}async function Dt(){let e=W.value;if(e){W.value=null;try{await t.deleteRouterKey(e.id),await $()}catch(e){console.error(`routerKeys.delete:`,e),D.error(d(e,h(`routerKeys.deleteFailed`)))}}}async function $(){try{let[e,n]=await Promise.allSettled([t.getRouterKeys(),t.getAvailableModels()]);e.status===`fulfilled`&&(L.value=e.value),n.status===`fulfilled`&&(R.value=n.value)}catch(e){console.error(`routerKeys.load:`,e),D.error(d(e,h(`routerKeys.loadFailed`)))}}return ne($),(t,n)=>(v(),m(`div`,Ee,[e(`div`,De,[e(`h2`,Oe,r(g(h)(`routerKeys.title`)),1),s(g(p),{size:`sm`,onClick:St,class:`flex items-center gap-1.5`},{default:f(()=>[s(g(ae),{class:`w-3.5 h-3.5`}),u(` `+r(g(h)(`routerKeys.createKey`)),1)]),_:1})]),e(`div`,ke,[e(`div`,Ae,[e(`span`,je,r(g(h)(`routerKeys.statTotal`)),1),e(`span`,Me,r(L.value.length),1)]),n[10]||=e(`div`,{class:`w-px self-stretch bg-border`},null,-1),e(`div`,Ne,[e(`span`,Pe,r(g(h)(`routerKeys.statActive`)),1),e(`span`,Fe,r(pt.value),1)]),n[11]||=e(`div`,{class:`w-px self-stretch bg-border`},null,-1),e(`div`,Ie,[e(`span`,Le,r(g(h)(`routerKeys.statWhitelist`)),1),e(`span`,Re,r(mt.value),1)])]),e(`div`,ze,[e(`div`,Be,[s(g(oe),{class:`absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground/50 pointer-events-none`}),s(g(A),{modelValue:z.value,"onUpdate:modelValue":n[0]||=e=>z.value=e,placeholder:g(h)(`routerKeys.searchPlaceholder`),class:`h-[30px] pl-[30px] text-[13px]`},null,8,[`modelValue`,`placeholder`])])]),s(g(be),{flush:``},{default:f(()=>[s(g(Se),null,{default:f(()=>[s(g(Ce),null,{default:f(()=>[s(g(N),null,{default:f(()=>[s(g(M),{class:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.name`)),1)]),_:1}),s(g(M),{class:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.key`)),1)]),_:1}),s(g(M),{class:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.whitelist`)),1)]),_:1}),s(g(M),{class:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.status`)),1)]),_:1}),s(g(M),{class:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.createdAt`)),1)]),_:1}),s(g(M),{class:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60 text-right`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.actions`)),1)]),_:1})]),_:1})]),_:1}),s(g(xe),null,{default:f(()=>[(v(!0),m(a,null,c(Z.value,t=>(v(),l(g(N),{key:t.id,class:o({"opacity-40":!t.is_active})},{default:f(()=>[s(g(j),null,{default:f(()=>[e(`span`,Ve,r(t.name),1)]),_:2},1024),s(g(j),null,{default:f(()=>[e(`div`,He,[B.value.has(t.id)?(v(),m(`span`,Ue,r(t.key),1)):(v(),m(a,{key:1},[e(`span`,We,r(t.key_prefix),1),e(`span`,Ge,r(g(P)),1)],64)),s(g(p),{variant:`ghost`,size:`icon`,class:`h-6 w-6 shrink-0`,onClick:e=>_t(t)},{default:f(()=>[V.value===t.id?(v(),l(g(O),{key:0,class:`w-3.5 h-3.5 text-success`})):(v(),l(g(b),{key:1,class:`w-3.5 h-3.5`}))]),_:2},1032,[`onClick`]),s(g(p),{variant:`ghost`,size:`sm`,class:`h-6 px-1.5 text-[11px] text-muted-foreground shrink-0`,onClick:e=>yt(t.id)},{default:f(()=>[u(r(B.value.has(t.id)?g(h)(`routerKeys.hideKey`):g(h)(`routerKeys.showKey`)),1)]),_:2},1032,[`onClick`])])]),_:2},1024),s(g(j),null,{default:f(()=>[e(`div`,Ke,[t.allowed_models&&t.allowed_models.length>0?(v(),m(a,{key:0},[(v(!0),m(a,null,c(t.allowed_models.slice(0,F),e=>(v(),l(g(k),{key:e,variant:`outline`,class:`font-mono text-[10px] font-medium px-1.5 py-0 h-5`},{default:f(()=>[u(r(e),1)]),_:2},1024))),128)),t.allowed_models.length>F?(v(),l(g(k),{key:0,class:`text-[10px] font-medium px-1.5 py-0 h-5`},{default:f(()=>[u(r(g(h)(`routerKeys.moreModels`,{count:t.allowed_models.length-F})),1)]),_:2},1024)):_(``,!0)],64)):(v(),l(g(k),{key:1,variant:`secondary`,class:`text-[10px] font-semibold px-1.5 py-0 h-5`},{default:f(()=>[u(r(g(h)(`common.allModels`)),1)]),_:1}))])]),_:2},1024),s(g(j),null,{default:f(()=>[e(`div`,qe,[e(`span`,{class:o(gt(t.is_active))},null,2),e(`span`,Je,r(t.is_active?g(h)(`common.active`):g(h)(`common.inactive`)),1)])]),_:2},1024),s(g(j),null,{default:f(()=>[e(`span`,Ye,r(g(ue)(t.created_at)),1)]),_:2},1024),s(g(j),{class:`text-right`},{default:f(()=>[e(`div`,Xe,[s(g(p),{variant:`ghost`,size:`icon`,class:`h-7 w-7`,onClick:e=>Ct(t)},{default:f(()=>[s(g(ie),{class:`w-3.5 h-3.5`})]),_:1},8,[`onClick`]),s(g(p),{variant:`ghost`,size:`icon`,class:`h-7 w-7`,onClick:e=>Et(t)},{default:f(()=>[t.is_active?(v(),l(g(we),{key:0,class:`w-3.5 h-3.5 text-success`})):(v(),l(g(Te),{key:1,class:`w-3.5 h-3.5 text-muted-foreground`}))]),_:2},1032,[`onClick`]),s(g(p),{variant:`ghost`,size:`icon`,class:`h-7 w-7 text-muted-foreground hover:text-destructive`,onClick:e=>wt(t)},{default:f(()=>[s(g(se),{class:`w-3.5 h-3.5`})]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1032,[`class`]))),128)),Z.value.length===0?(v(),l(g(N),{key:0},{default:f(()=>[s(g(j),{colspan:`6`,class:`text-center py-12`},{default:f(()=>[e(`p`,Ze,r(L.value.length===0?g(h)(`routerKeys.noKeys`):g(h)(`routerKeys.noMatch`)),1),L.value.length===0?(v(),m(`p`,Qe,r(g(h)(`routerKeys.noKeysHint`)),1)):_(``,!0)]),_:1})]),_:1})):_(``,!0)]),_:1})]),_:1})]),_:1}),s(g(C),{open:H.value,"onUpdate:open":n[6]||=e=>H.value=e},{default:f(()=>[s(g(x),{class:`sm:max-w-lg`},{default:f(()=>[s(g(S),null,{default:f(()=>[s(g(T),null,{default:f(()=>[u(r(G.value?g(h)(`routerKeys.editKey`):g(h)(`routerKeys.createKey`)),1)]),_:1})]),_:1}),e(`form`,{onSubmit:te(Tt,[`prevent`]),class:`space-y-4`},[e(`div`,null,[s(g(E),{class:`text-xs font-medium text-muted-foreground mb-1 block`},{default:f(()=>[u(r(g(h)(`routerKeys.tableHeaders.name`)),1)]),_:1}),s(g(A),{modelValue:Y.value.name,"onUpdate:modelValue":n[1]||=e=>Y.value.name=e,placeholder:g(h)(`routerKeys.placeholder.name`),onInput:n[2]||=e=>delete X.value.name},null,8,[`modelValue`,`placeholder`]),X.value.name?(v(),m(`p`,$e,r(X.value.name),1)):_(``,!0)]),e(`div`,null,[s(g(E),{class:`text-xs font-medium text-muted-foreground mb-1 block`},{default:f(()=>[u(r(g(h)(`routerKeys.whitelistLabel`)),1)]),_:1}),e(`p`,et,r(g(h)(`routerKeys.whitelistHint`)),1),e(`div`,tt,[s(g(A),{modelValue:J.value,"onUpdate:modelValue":n[3]||=e=>J.value=e,placeholder:g(h)(`routerKeys.modelFilterPlaceholder`),class:`h-7 text-xs border-0 border-b rounded-none mb-2 bg-transparent focus-visible:ring-0`},null,8,[`modelValue`,`placeholder`]),Y.value.allowed_models.length>0?(v(),m(`div`,nt,[(v(!0),m(a,null,c(Y.value.allowed_models,e=>(v(),l(g(k),{key:e,variant:`secondary`,class:`font-mono text-[10px] font-medium px-1.5 py-0 h-5 gap-1`},{default:f(()=>[u(r(e)+` `,1),s(g(ye),{class:`w-3 h-3 cursor-pointer hover:text-destructive shrink-0`,onClick:t=>xt(e)},null,8,[`onClick`])]),_:2},1024))),128))])):_(``,!0),e(`div`,rt,[(v(!0),m(a,null,c(ht.value,t=>(v(),l(g(E),{key:t,class:`flex items-center gap-2 cursor-pointer px-1.5 py-1 rounded hover:bg-muted text-xs font-normal`},{default:f(()=>[s(g(ce),{"model-value":Y.value.allowed_models.includes(t),"onUpdate:modelValue":e=>bt(t,e)},null,8,[`model-value`,`onUpdate:modelValue`]),e(`span`,it,r(t),1)]),_:2},1024))),128)),R.value.length===0?(v(),m(`p`,at,r(g(h)(`routerKeys.noModels`)),1)):_(``,!0)])])]),G.value?(v(),m(`div`,ot,[s(g(le),{"model-value":Y.value.is_active,"onUpdate:modelValue":n[4]||=e=>Y.value.is_active=e},null,8,[`model-value`]),s(g(E),{class:`text-sm`},{default:f(()=>[u(r(Y.value.is_active?g(h)(`common.active`):g(h)(`common.inactive`)),1)]),_:1})])):_(``,!0),s(g(w),null,{default:f(()=>[s(g(p),{type:`button`,variant:`outline`,onClick:n[5]||=e=>H.value=!1},{default:f(()=>[u(r(g(h)(`common.cancel`)),1)]),_:1}),s(g(p),{type:`submit`},{default:f(()=>[u(r(g(h)(`common.save`)),1)]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]),s(g(C),{open:U.value,"onUpdate:open":n[8]||=e=>U.value=e},{default:f(()=>[s(g(x),{class:`sm:max-w-lg`},{default:f(()=>[s(g(S),null,{default:f(()=>[s(g(T),null,{default:f(()=>[u(r(g(h)(`routerKeys.keyCreated`)),1)]),_:1})]),_:1}),e(`div`,st,[e(`div`,ct,[e(`div`,lt,[e(`span`,ut,r(K.value),1),s(g(p),{variant:`ghost`,size:`icon`,class:`h-7 w-7 shrink-0`,onClick:vt},{default:f(()=>[q.value?(v(),l(g(O),{key:0,class:`w-3.5 h-3.5 text-success`})):(v(),l(g(b),{key:1,class:`w-3.5 h-3.5`}))]),_:1})]),e(`div`,dt,[s(g(pe),{class:`w-3 h-3 shrink-0`}),u(` `+r(g(h)(`routerKeys.keyShownOnce`)),1)])])]),s(g(w),null,{default:f(()=>[s(g(p),{onClick:n[7]||=e=>U.value=!1},{default:f(()=>[u(r(g(h)(`common.close`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]),s(g(ge),{open:!!W.value,"onUpdate:open":n[9]||=e=>{e||(W.value=null)}},{default:f(()=>[s(g(ve),null,{default:f(()=>[s(g(_e),null,{default:f(()=>[s(g(he),null,{default:f(()=>[u(r(g(h)(`routerKeys.confirmDeleteTitle`)),1)]),_:1}),s(g(me),null,{default:f(()=>[u(r(g(h)(`routerKeys.confirmDeleteDesc`,{name:W.value?.name})),1)]),_:1})]),_:1}),s(g(de),null,{default:f(()=>[s(g(fe),null,{default:f(()=>[u(r(g(h)(`common.cancel`)),1)]),_:1}),s(g(p),{variant:`destructive`,onClick:Dt},{default:f(()=>[u(r(g(h)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}}),[[`__scopeId`,`data-v-5f831282`]]);export{L as default};
@@ -1 +0,0 @@
1
- import{$ as e,A as t,Q as n,Qt as r,U as i,X as a,Y as o,Yt as s,Zt as c,at as l,bt as u,et as d,gt as ee,it as f,j as p,jt as m,n as h,nt as g,ot as _,qt as v,tt as y,vt as b,zt as x}from"./button-BCxYWEaM.js";import{n as S,t as te}from"./ConcurrencyControl-BcUA816m.js";import{t as C}from"./chevron-right-C3U2yjrf.js";import{t as w}from"./pencil-Y6MJERvc.js";import{t as ne}from"./plus-FNO9X5JG.js";import{t as T}from"./trash-2-BEOdZk69.js";import{a as E,n as re,o as ie,r as ae,t as oe}from"./dialog-B0wgNzud.js";import{t as D}from"./Label-Ct_DR7Ui.js";import{t as se}from"./Switch-BS1G55M2.js";import{_ as ce,a as O,c as le,d as ue,g as de,h as fe,l as pe,m as me,o as he,p as ge,s as _e,u as ve,v as k}from"./index-CwjudU09.js";import{t as ye}from"./Input-Dr2XqfSh.js";import{a as be,i as A,n as j,o as xe,r as M,t as Se}from"./TableHeader-jCTjghgy.js";import{t as Ce}from"./useProviderGroups-Bz7Yz1b7.js";import{n as we,r as N,t as P}from"./transform-domain-FnCfUKrh.js";var F=Array.from({length:5},(e,t)=>t+1);function Te(){return{name:``,week:[...F],start_hour:0,end_hour:24,targets:[{backend_model:``,provider_id:``}],concurrency_mode:`auto`,max_concurrency:N.max_concurrency,queue_timeout_ms:N.queue_timeout_ms,max_queue_size:N.max_queue_size}}function Ee(){return{injectHeaders:``,dropFields:``,requestDefaults:``}}function I(e){try{return JSON.parse(e)}catch{return[]}}function De(e,t){let n=I(e).sort((e,t)=>e-t);return n.length===7?t(`schedules.everyDay`):n.length===5&&n[0]===1&&n[4]===5?t(`schedules.weekdays`):n.length===2&&n[0]===0&&n[1]===6?t(`schedules.weekend`):null}function Oe(e,t){try{return(JSON.parse(e).targets??[]).map(e=>({provider:t.find(t=>t.id===e.provider_id)?.name??e.provider_id,model:e.backend_model??``}))}catch{return[]}}function ke(e){return`${e}`.padStart(2,`0`)+`:00`}function Ae(e,t){let n=[],r=[{backend_model:``,provider_id:``}];try{let t=JSON.parse(e.mapping_rule);t.targets?.length&&(r=t.targets)}catch{n.push(t(`schedules.parseRuleFailed`))}let i=[...F];try{i=JSON.parse(e.week)}catch{n.push(t(`schedules.parseWeekFailed`))}let a=`auto`,o=N.max_concurrency,s=N.queue_timeout_ms,c=N.max_queue_size;if(e.concurrency_rule)try{let t=JSON.parse(e.concurrency_rule);a=t.mode||`auto`,t.max_concurrency&&(o=t.max_concurrency),t.queue_timeout_ms&&(s=t.queue_timeout_ms),t.max_queue_size&&(c=t.max_queue_size)}catch{n.push(t(`schedules.parseConcurrencyFailed`))}let l=``,u=``,d=``;if(e.transform_rule)try{let t=JSON.parse(e.transform_rule);u=(t.drop_fields||[]).join(`, `),d=t.request_defaults?JSON.stringify(t.request_defaults):``,l=t.inject_headers?JSON.stringify(t.inject_headers):``}catch{n.push(t(`schedules.parseTransformFailed`))}return{data:{form:{name:e.name,week:i,start_hour:e.start_hour,end_hour:e.end_hour,targets:r,concurrency_mode:a,max_concurrency:o,queue_timeout_ms:s,max_queue_size:c},transform:{injectHeaders:l,dropFields:u,requestDefaults:d}},warnings:n}}function je(e,t,n){let{form:r}=e,i=JSON.stringify({targets:r.targets}),a=r.concurrency_mode===`none`?null:JSON.stringify({mode:r.concurrency_mode,max_concurrency:r.max_concurrency,queue_timeout_ms:r.queue_timeout_ms,max_queue_size:r.max_queue_size});return{mapping_group_id:t,name:r.name,week:JSON.stringify(r.week),start_hour:r.start_hour,end_hour:r.end_hour,mapping_rule:i,concurrency_rule:a,transform_rule:n}}function Me(e,t){let n={};e.name.trim()||(n.name=t(`schedules.form.nameRequired`)),e.week.length===0&&(n.week=t(`schedules.form.weekRequired`)),e.start_hour>=e.end_hour&&(n.time=t(`schedules.form.timeInvalid`));for(let r of e.targets)if(!r.provider_id||!r.backend_model){n.targets=t(`schedules.form.targetRequired`);break}return n}var L={injectHeadersJsonError:`providers.transform.injectHeadersJsonError`,requestDefaultsJsonError:`providers.transform.requestDefaultsJsonError`};function Ne(e){let{rule:t,errorKey:n}=P({injectHeaders:e.injectHeaders,dropFields:e.dropFields,requestDefaults:e.requestDefaults});return{rule:t,errorKey:n?L[n]??n:null}}var R={class:`flex flex-col`},z={class:`w-7 shrink-0 text-[11px] font-medium text-muted-foreground text-right select-none`},B={class:`absolute inset-0 grid`,style:{gridTemplateColumns:`repeat(24, 1fr)`}},V={key:0,class:`truncate`},H={key:1,class:`hidden group-hover:block absolute bottom-full left-1/2 -translate-x-1/2 mb-1.5 bg-popover text-popover-foreground border rounded-md shadow-lg px-2.5 py-1.5 z-30 whitespace-nowrap text-[11px]`},U={class:`font-semibold whitespace-nowrap`},W={class:`font-mono text-[11px] text-muted-foreground whitespace-nowrap`},G={class:`flex items-center gap-2 mt-0.5`},K={class:`flex-1 grid`,style:{gridTemplateColumns:`repeat(24, 1fr)`}},q=24,J=5,Y=3,X=100,Z=7,Pe=10,Fe=_({__name:`WeekTimeline`,props:{rules:{}},setup(t){let o=t,{t:l,te:d}=i(),ee=Z-1,f=[`mon`,`tue`,`wed`,`thu`,`fri`,`sat`,`sun`],p=[...F,6,0],m=[`oklch(0.68 0.13 175 / 70%)`,`oklch(0.68 0.13 175 / 50%)`,`oklch(0.68 0.13 175 / 35%)`,`oklch(0.68 0.13 175 / 25%)`],h=Array.from({length:Z},(e,t)=>t),_=Array.from({length:Math.ceil(q/Y)},(e,t)=>t*Y),x=Array.from({length:q},(e,t)=>t),S=n(()=>{let e=[[],[],[],[],[],[],[]];for(let t of o.rules)for(let n of t.days)n>=0&&n<=ee&&e[p.indexOf(n)].push(t);return e});function te(e){let t=`schedules.weekDays.${f[e]}`;return d(t)?l(t):{mon:`周一`,tue:`周二`,wed:`周三`,thu:`周四`,fri:`周五`,sat:`周六`,sun:`周日`}[f[e]]??``}function C(e){return S.value[e].length>0}function w(e){let t=e.startHour/q*X,n=(e.endHour-e.startHour)/q*X;return{left:`${t}%`,width:`${n}%`}}function ne(e){return m[o.rules.indexOf(e)%m.length]}function T(e){return e.endHour-e.startHour<J}function E(e){return e<Pe?`0${e}:00`:`${e}:00`}return(t,n)=>(b(),g(`div`,R,[(b(!0),g(a,null,u(v(h),t=>(b(),g(`div`,{key:t,class:s([`flex items-center gap-2 h-6`,{"opacity-35":!C(t)}])},[e(`div`,z,r(te(t)),1),e(`div`,{class:s([`flex-1 relative h-full rounded-sm overflow-visible`,C(t)?`bg-black/[0.06] dark:bg-white/[0.07]`:`bg-black/[0.03] dark:bg-white/[0.03]`])},[e(`div`,B,[(b(!0),g(a,null,u(v(x),e=>(b(),g(`div`,{key:e,class:`border-r border-border/30 dark:border-white/10 last:border-r-0`}))),128))]),(b(!0),g(a,null,u(S.value[t],n=>(b(),g(`div`,{key:n.name+t,class:s([`absolute top-0.5 bottom-0.5 rounded-sm flex items-center px-1 text-[10px] font-semibold overflow-hidden whitespace-nowrap cursor-default z-10 transition-[filter] duration-100 hover:z-20 hover:brightness-[1.15] group`,[n.enabled?``:`bg-transparent !border-dashed border-[1.5px] border-muted-foreground/50 text-muted-foreground/60`]]),style:c({...w(n),...n.enabled?{background:ne(n),color:`oklch(0.145 0 0)`}:{}})},[T(n)?y(``,!0):(b(),g(`span`,V,r(n.name),1)),T(n)?(b(),g(`div`,H,[e(`div`,U,r(n.name),1),e(`div`,W,r(E(n.startHour))+` - `+r(E(n.endHour)),1)])):y(``,!0)],6))),128))],2)],2))),128)),e(`div`,G,[n[0]||=e(`div`,{class:`w-7 shrink-0`},null,-1),e(`div`,K,[(b(!0),g(a,null,u(v(_),e=>(b(),g(`div`,{key:e,class:`font-mono text-[10px] text-muted-foreground text-left pl-0.5 leading-4`,style:c({gridColumn:`${e+1} / span 3`})},r(E(e)),5))),128))])])]))}}),Ie={class:`page space-y-3`},Le={class:`flex items-center justify-between`},Re={class:`flex flex-col gap-0.5`},ze={class:`text-base font-semibold text-foreground`},Be={class:`text-[11px] font-medium text-muted-foreground/60`},Ve={key:0,class:`flex items-center justify-center py-16 text-muted-foreground text-sm`},He={class:`flex bg-card border border-border rounded-lg overflow-hidden`},Ue={class:`flex-1 px-3.5 py-2 border-r border-border`},We={class:`text-[10px] font-semibold text-muted-foreground/70 uppercase tracking-wider`},Ge={class:`text-[13px] font-mono font-semibold text-foreground`},Ke={class:`flex-1 px-3.5 py-2 border-r border-border`},qe={class:`text-[10px] font-semibold text-muted-foreground/70 uppercase tracking-wider`},Je={class:`text-[13px] font-mono font-semibold text-success`},Ye={class:`flex-1 px-3.5 py-2 border-r border-border`},Xe={class:`text-[10px] font-semibold text-muted-foreground/70 uppercase tracking-wider`},Ze={class:`text-[13px] font-mono font-semibold text-warning`},Qe={class:`flex-1 px-3.5 py-2`},$e={class:`text-[10px] font-semibold text-muted-foreground/70 uppercase tracking-wider`},et={class:`text-[13px] font-mono font-semibold text-foreground`},tt={class:`bg-card border border-border rounded-lg overflow-hidden`},nt=[`onClick`],rt={class:`font-mono text-[13px] font-semibold text-foreground shrink-0`},it={key:0,class:`font-mono text-[10px] px-[7px] py-px rounded-full bg-primary/15 text-primary`},at={key:1,class:`font-mono text-[10px] px-[7px] py-px rounded-full bg-foreground/5 text-muted-foreground`},ot={class:`flex-1 flex flex-wrap gap-1 min-w-0`},st={key:0,class:`text-[10px] text-muted-foreground/50 self-center`},ct={class:`px-4 py-3 border-t border-border`},lt={class:`text-[11px] font-semibold text-muted-foreground mb-2`},ut={class:`pl-11`},dt={key:0,class:`text-[11px] font-medium text-muted-foreground`},ft={key:1,class:`flex flex-wrap gap-1`},pt={class:`flex flex-wrap gap-1`},mt={class:`text-muted-foreground/60 font-mono text-[10px]`},ht={class:`text-muted-foreground`},gt={class:`flex items-center justify-end gap-1`},_t={key:0,class:`py-12 text-center text-xs text-muted-foreground`},vt={key:0,class:`bg-destructive/10 border border-destructive/30 rounded-md px-3 py-2 text-sm text-destructive`},yt={class:`grid grid-cols-2 gap-3`},bt={key:0,class:`text-xs text-destructive mt-0.5`},xt={class:`flex flex-wrap gap-1.5`},St={key:0,class:`text-xs text-destructive mt-0.5`},Ct={class:`flex items-center gap-2 mb-2`},wt={class:`flex gap-1.5`},Tt={class:`grid grid-cols-2 gap-3`},Et={key:0,class:`text-xs text-destructive mt-0.5`},Dt={key:0,class:`text-xs text-destructive mt-0.5`},Ot={class:`grid grid-cols-2 gap-4`},kt={class:`border rounded-md p-3 space-y-3`},At={class:`text-xs font-medium text-muted-foreground`},jt={class:`border rounded-md p-3 space-y-3`},Mt={class:`text-xs font-medium text-muted-foreground`},Nt=_({__name:`Schedules`,setup(c){let{t:_}=i(),N=n(()=>[_(`schedules.weekDays.sun`),_(`schedules.weekDays.mon`),_(`schedules.weekDays.tue`),_(`schedules.weekDays.wed`),_(`schedules.weekDays.thu`),_(`schedules.weekDays.fri`),_(`schedules.weekDays.sat`)]),P=x(!1),F=x([]),L=x([]),R=x([]),z=x(null),B=x(!1),V=x(null),H=x(``),U=x(null),W=x(Te()),G=x({}),K=x(``),q=x(Ee()),J=n({get:()=>({mode:W.value.concurrency_mode,max_concurrency:W.value.max_concurrency,queue_timeout_ms:W.value.queue_timeout_ms,max_queue_size:W.value.max_queue_size}),set:e=>{W.value.concurrency_mode=e.mode,W.value.max_concurrency=e.max_concurrency,W.value.queue_timeout_ms=e.queue_timeout_ms,W.value.max_queue_size=e.max_queue_size}}),Y=n(()=>{let e={};for(let t of R.value)e[t.mapping_group_id]||(e[t.mapping_group_id]=[]),e[t.mapping_group_id].push(t);return e}),X=n(()=>R.value.filter(e=>e.enabled).length),Z=n(()=>R.value.filter(e=>!e.enabled).length),Pe=n(()=>{let e=new Set;for(let t of R.value)t.enabled&&I(t.week).forEach(t=>e.add(t));return e.size}),Nt=n(()=>({clientModel:F.value.find(e=>e.id===H.value)?.client_model??``,targets:W.value.targets,existing:!1,tag:`cust`,active:!0})),Pt=n(()=>Ce(L.value,{includeStreamTimeout:!1}));function Ft(e){return De(e,_)}function It(e){return Oe(e,L.value)}function Lt(e){return ke(e)}function Rt(e){let t=N.value;return I(e).map(e=>t[e]??`${e}`)}function zt(e){return(Y.value[e]??[]).map(e=>({name:e.name,days:I(e.week),startHour:e.start_hour,endHour:e.end_hour,enabled:!!e.enabled}))}function Bt(e){let t=Y.value[e]??[];return t.length>0&&t.every(e=>e.enabled)}function Vt(e){return(Y.value[e]?.length??0)>0}function Ht(e){W.value.targets=e}function Q(e,t){W.value.start_hour=e,W.value.end_hour=t,delete G.value.time}function Ut(e){z.value=z.value===e?null:e}function Wt(e){let t=W.value.week.indexOf(e);t>=0?W.value.week.splice(t,1):W.value.week.push(e),delete G.value.week}async function Gt(){try{F.value=await t.getMappingGroups()}catch(e){console.error(`schedules.loadGroups:`,e),O.error(p(e,_(`schedules.loadGroupsFailed`)))}}async function Kt(){try{L.value=await t.getProviders()}catch(e){console.error(`schedules.loadProviders:`,e),O.error(p(e,_(`schedules.loadProvidersFailed`)))}}async function $(){try{R.value=await t.getSchedules()}catch(e){console.error(`schedules.loadAll:`,e),O.error(p(e,_(`schedules.loadSchedulesFailed`)))}}function qt(e){V.value=null,H.value=e,W.value=Te(),q.value=Ee(),G.value={},K.value=``,B.value=!0}function Jt(e){V.value=e.id,H.value=e.mapping_group_id,G.value={},K.value=``;let{data:t,warnings:n}=Ae(e,_);for(let e of n)O.error(e);W.value=t.form,q.value=t.transform,B.value=!0}async function Yt(){K.value=``;let e=Me(W.value,_);if(G.value=e,Object.keys(e).length>0)return;let{rule:n,errorKey:r}=Ne(q.value);if(r){O.error(_(r));return}try{let e=je({form:W.value,transform:q.value},H.value,n);V.value?await t.updateSchedule(V.value,e):await t.createSchedule(e),B.value=!1,await $()}catch(e){K.value=p(e,_(`schedules.saveFailed`))}}async function Xt(e){try{await t.toggleSchedule(e.id),await $()}catch(e){console.error(`schedules.toggle:`,e),O.error(p(e,_(`schedules.toggleFailed`)))}}async function Zt(){let e=U.value;if(e){U.value=null;try{await t.deleteSchedule(e.id),await $()}catch(e){console.error(`schedules.delete:`,e),O.error(p(e,_(`schedules.deleteFailed`)))}}}return ee(async()=>{P.value=!0,await Promise.allSettled([Gt(),Kt(),$()]),P.value=!1}),(t,n)=>(b(),g(`div`,Ie,[e(`div`,Le,[e(`div`,Re,[e(`h2`,ze,r(v(_)(`schedules.title`)),1),e(`p`,Be,r(v(_)(`schedules.description`)),1)])]),P.value?(b(),g(`div`,Ve,r(v(_)(`common.loading`)),1)):y(``,!0),P.value?y(``,!0):(b(),g(a,{key:1},[e(`div`,He,[e(`div`,Ue,[e(`div`,We,r(v(_)(`schedules.stats.groupCount`)),1),e(`div`,Ge,r(F.value.length),1)]),e(`div`,Ke,[e(`div`,qe,r(v(_)(`schedules.stats.activeRules`)),1),e(`div`,Je,r(X.value),1)]),e(`div`,Ye,[e(`div`,Xe,r(v(_)(`schedules.stats.disabledRules`)),1),e(`div`,Ze,r(Z.value),1)]),e(`div`,Qe,[e(`div`,$e,r(v(_)(`schedules.stats.coveredDays`)),1),e(`div`,et,r(Pe.value)+`/7 `,1)])]),e(`div`,tt,[(b(!0),g(a,null,u(F.value,(t,n)=>(b(),g(`div`,{key:t.id,class:s({"border-t border-border":n>0})},[e(`div`,{class:s([`flex items-center gap-2.5 h-10 px-4 cursor-pointer transition-colors hover:bg-muted/40`,{"bg-muted/40":z.value===t.id}]),onClick:e=>Ut(t.id)},[l(v(C),{class:s([`size-3.5 text-muted-foreground/40 shrink-0 transition-transform`,{"rotate-90":z.value===t.id}])},null,8,[`class`]),e(`span`,rt,r(t.client_model),1),Y.value[t.id]?.length?(b(),g(`span`,it,r(v(_)(`schedules.ruleCount`,{count:Y.value[t.id].length})),1)):(b(),g(`span`,at,r(v(_)(`schedules.noRules`)),1)),e(`div`,ot,[(b(!0),g(a,null,u((Y.value[t.id]??[]).slice(0,3),e=>(b(),g(`span`,{key:e.id,class:`text-[11px] font-medium px-1.5 py-px rounded bg-foreground/5 text-muted-foreground`},r(e.name),1))),128)),(Y.value[t.id]?.length??0)>3?(b(),g(`span`,st,`+`+r(Y.value[t.id].length-3),1)):y(``,!0)]),e(`span`,{class:s([`size-1.5 rounded-full shrink-0`,Bt(t.id)?`bg-success`:Vt(t.id)?`bg-warning`:``])},null,2)],10,nt),z.value===t.id?(b(),g(a,{key:0},[e(`div`,ct,[e(`div`,lt,r(v(_)(`schedules.timeline.weekView`)),1),l(Fe,{rules:zt(t.id)},null,8,[`rules`])]),e(`div`,ut,[l(v(xe),null,{default:m(()=>[l(v(Se),null,{default:m(()=>[l(v(M),{class:`bg-muted/30 dark:bg-muted/50`},{default:m(()=>[l(v(j),{class:`text-muted-foreground/70 text-[11px] h-8 uppercase tracking-wider font-semibold`,style:{width:`16%`}},{default:m(()=>[f(r(v(_)(`schedules.tableHeaders.name`)),1)]),_:1}),l(v(j),{class:`text-muted-foreground/70 text-[11px] h-8 uppercase tracking-wider font-semibold`,style:{width:`14%`}},{default:m(()=>[f(r(v(_)(`schedules.tableHeaders.week`)),1)]),_:1}),l(v(j),{class:`text-muted-foreground/70 text-[11px] h-8 uppercase tracking-wider font-semibold`,style:{width:`14%`}},{default:m(()=>[f(r(v(_)(`schedules.tableHeaders.timeRange`)),1)]),_:1}),l(v(j),{class:`text-muted-foreground/70 text-[11px] h-8 uppercase tracking-wider font-semibold`,style:{width:`10%`}},{default:m(()=>[f(r(v(_)(`schedules.tableHeaders.status`)),1)]),_:1}),l(v(j),{class:`text-muted-foreground/70 text-[11px] h-8 uppercase tracking-wider font-semibold`,style:{width:`30%`}},{default:m(()=>[f(r(v(_)(`schedules.tableHeaders.targets`)),1)]),_:1}),l(v(j),{class:`text-right text-muted-foreground/70 text-[11px] h-8 uppercase tracking-wider font-semibold`,style:{width:`16%`}},{default:m(()=>[l(v(h),{size:`xs`,variant:`ghost`,class:`h-5 text-[11px]`,onClick:e=>qt(t.id)},{default:m(()=>[l(v(ne),{class:`w-3 h-3 mr-1`}),f(r(v(_)(`schedules.createSchedule`)),1)]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024),l(v(be),null,{default:m(()=>[(b(!0),g(a,null,u(Y.value[t.id]??[],t=>(b(),d(v(M),{key:t.id,class:`hover:bg-muted/40`},{default:m(()=>[l(v(A),{class:`font-medium text-[13px] h-9`},{default:m(()=>[f(r(t.name),1)]),_:2},1024),l(v(A),{class:`h-9`},{default:m(()=>[Ft(t.week)?(b(),g(`span`,dt,r(Ft(t.week)),1)):(b(),g(`div`,ft,[(b(!0),g(a,null,u(Rt(t.week),e=>(b(),g(`span`,{key:e,class:`text-[11px] font-medium px-1.5 py-px rounded bg-foreground/5 text-muted-foreground`},r(e),1))),128))]))]),_:2},1024),l(v(A),{class:`font-mono text-[12px] font-medium h-9`},{default:m(()=>[f(r(Lt(t.start_hour))+`-`+r(Lt(t.end_hour)),1)]),_:2},1024),l(v(A),{class:`h-9`},{default:m(()=>[e(`span`,{class:s([`inline-flex items-center gap-1.5 text-[11px] font-semibold`,t.enabled?`text-success`:`text-muted-foreground/60`])},[e(`span`,{class:s([`size-1.5 rounded-full`,t.enabled?`bg-success`:`bg-muted-foreground/50`])},null,2),f(` `+r(t.enabled?v(_)(`schedules.enabled`):v(_)(`schedules.disabled`)),1)],2)]),_:2},1024),l(v(A),{class:`h-9`},{default:m(()=>[e(`div`,pt,[(b(!0),g(a,null,u(It(t.mapping_rule),(t,n)=>(b(),g(`span`,{key:n,class:`inline-flex items-center gap-0.5 px-1.5 py-px rounded text-[11px] font-medium bg-foreground/5`},[e(`span`,mt,r(t.provider)+`/`,1),e(`span`,ht,r(t.model),1)]))),128))])]),_:2},1024),l(v(A),{class:`h-9 text-right`},{default:m(()=>[e(`div`,gt,[l(v(se),{"model-value":!!t.enabled,class:`scale-75`,onClick:o(e=>Xt(t),[`stop`])},null,8,[`model-value`,`onClick`]),l(v(h),{variant:`ghost`,size:`icon`,class:`size-6`,onClick:e=>Jt(t)},{default:m(()=>[l(v(w),{class:`size-3.5`})]),_:1},8,[`onClick`]),l(v(h),{variant:`ghost`,size:`icon`,class:`size-6 hover:bg-destructive/10 text-destructive`,onClick:e=>U.value=t},{default:m(()=>[l(v(T),{class:`size-3.5`})]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128)),Y.value[t.id]?.length?y(``,!0):(b(),d(v(M),{key:0},{default:m(()=>[l(v(A),{colspan:`6`,class:`text-center text-muted-foreground py-6 text-xs`},{default:m(()=>[f(r(v(_)(`schedules.emptyRules`)),1)]),_:1})]),_:1}))]),_:2},1024)]),_:2},1024)])],64)):y(``,!0)],2))),128)),F.value.length===0?(b(),g(`p`,_t,r(v(_)(`schedules.noGroups`)),1)):y(``,!0)])],64)),l(v(ie),{open:B.value,"onUpdate:open":n[12]||=e=>B.value=e},{default:m(()=>[l(v(E),{class:`sm:max-w-4xl max-h-[85vh] overflow-y-auto`},{default:m(()=>[l(v(re),null,{default:m(()=>[l(v(oe),null,{default:m(()=>[f(r(V.value?v(_)(`schedules.editSchedule`):v(_)(`schedules.createSchedule`)),1)]),_:1})]),_:1}),e(`form`,{onSubmit:o(Yt,[`prevent`]),class:`space-y-4`},[K.value?(b(),g(`div`,vt,r(K.value),1)):y(``,!0),e(`div`,yt,[e(`div`,null,[l(v(D),{class:`text-xs text-muted-foreground`},{default:m(()=>[f(r(v(_)(`schedules.form.name`)),1)]),_:1}),l(v(ye),{modelValue:W.value.name,"onUpdate:modelValue":n[0]||=e=>W.value.name=e,class:`mt-1`,placeholder:v(_)(`schedules.form.namePlaceholder`),onInput:n[1]||=e=>delete G.value.name},null,8,[`modelValue`,`placeholder`]),G.value.name?(b(),g(`p`,bt,r(G.value.name),1)):y(``,!0)]),e(`div`,null,[l(v(D),{class:`text-xs text-muted-foreground mb-1.5 block`},{default:m(()=>[f(r(v(_)(`schedules.form.week`)),1)]),_:1}),e(`div`,xt,[(b(!0),g(a,null,u(N.value,(e,t)=>(b(),d(v(h),{key:t,type:`button`,variant:(W.value.week??[]).includes(t)?`default`:`outline`,size:`sm`,class:`h-7 text-xs`,onClick:e=>Wt(t)},{default:m(()=>[f(r(e),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),G.value.week?(b(),g(`p`,St,r(G.value.week),1)):y(``,!0)])]),e(`div`,null,[e(`div`,Ct,[l(v(D),{class:`text-xs text-muted-foreground`},{default:m(()=>[f(r(v(_)(`schedules.timePresets.label`)),1)]),_:1}),e(`div`,wt,[l(v(h),{type:`button`,variant:`outline`,size:`sm`,class:`text-xs h-6`,onClick:n[2]||=e=>Q(9,12)},{default:m(()=>[f(r(v(_)(`schedules.timePresets.morning`)),1)]),_:1}),l(v(h),{type:`button`,variant:`outline`,size:`sm`,class:`text-xs h-6`,onClick:n[3]||=e=>Q(14,18)},{default:m(()=>[f(r(v(_)(`schedules.timePresets.afternoon`)),1)]),_:1}),l(v(h),{type:`button`,variant:`outline`,size:`sm`,class:`text-xs h-6`,onClick:n[4]||=e=>Q(19,21)},{default:m(()=>[f(r(v(_)(`schedules.timePresets.evening`)),1)]),_:1})])]),e(`div`,Tt,[e(`div`,null,[l(v(D),{class:`text-xs text-muted-foreground`},{default:m(()=>[f(r(v(_)(`schedules.form.startTime`)),1)]),_:1}),l(v(k),{modelValue:W.value.start_hour,"onUpdate:modelValue":[n[5]||=e=>W.value.start_hour=e,n[6]||=e=>{W.value.start_hour=Number(e),delete G.value.time}],class:`mt-1`},{default:m(()=>[l(v(fe),null,{default:m(()=>[l(v(me),{placeholder:v(_)(`schedules.form.selectHour`)},null,8,[`placeholder`])]),_:1}),l(v(ce),null,{default:m(()=>[(b(),g(a,null,u(24,e=>l(v(de),{key:e-1,value:e-1},{default:m(()=>[f(r(String(e-1).padStart(2,`0`))+`:00`,1)]),_:2},1032,[`value`])),64))]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,null,[l(v(D),{class:`text-xs text-muted-foreground`},{default:m(()=>[f(r(v(_)(`schedules.form.endTime`)),1)]),_:1}),l(v(k),{modelValue:W.value.end_hour,"onUpdate:modelValue":[n[7]||=e=>W.value.end_hour=e,n[8]||=e=>{W.value.end_hour=Number(e),delete G.value.time}],class:`mt-1`},{default:m(()=>[l(v(fe),null,{default:m(()=>[l(v(me),{placeholder:v(_)(`schedules.form.selectHour`)},null,8,[`placeholder`])]),_:1}),l(v(ce),null,{default:m(()=>[(b(),g(a,null,u(24,e=>l(v(de),{key:e,value:e},{default:m(()=>[f(r(String(e).padStart(2,`0`))+`:00`,1)]),_:2},1032,[`value`])),64))]),_:1})]),_:1},8,[`modelValue`])])]),G.value.time?(b(),g(`p`,Et,r(G.value.time),1)):y(``,!0)]),e(`div`,null,[l(v(D),{class:`text-xs text-muted-foreground mb-1 block`},{default:m(()=>[f(r(v(_)(`schedules.form.targets`)),1)]),_:1}),l(S,{entry:Nt.value,"provider-groups":Pt.value,expanded:!0,editable:!0,"onUpdate:targets":Ht},null,8,[`entry`,`provider-groups`]),G.value.targets?(b(),g(`p`,Dt,r(G.value.targets),1)):y(``,!0)]),e(`div`,Ot,[e(`div`,kt,[e(`div`,At,r(v(_)(`schedules.form.concurrencyTitle`)),1),l(te,{modelValue:J.value,"onUpdate:modelValue":n[9]||=e=>J.value=e,compact:``},null,8,[`modelValue`])]),e(`div`,jt,[e(`div`,Mt,r(v(_)(`providers.transform.title`)),1),l(we,{modelValue:q.value,"onUpdate:modelValue":n[10]||=e=>q.value=e,compact:``},null,8,[`modelValue`])])]),l(v(ae),null,{default:m(()=>[l(v(h),{type:`button`,variant:`outline`,onClick:n[11]||=e=>B.value=!1},{default:m(()=>[f(r(v(_)(`common.cancel`)),1)]),_:1}),l(v(h),{type:`submit`},{default:m(()=>[f(r(v(_)(`common.save`)),1)]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]),l(v(ge),{open:!!U.value,"onUpdate:open":n[13]||=e=>{e||(U.value=null)}},{default:m(()=>[l(v(ve),null,{default:m(()=>[l(v(_e),null,{default:m(()=>[l(v(he),null,{default:m(()=>[f(r(v(_)(`schedules.confirmDeleteTitle`)),1)]),_:1}),l(v(pe),null,{default:m(()=>[f(r(v(_)(`schedules.confirmDeleteMessage`,{name:U.value?.name??``})),1)]),_:1})]),_:1}),l(v(le),null,{default:m(()=>[l(v(ue),null,{default:m(()=>[f(r(v(_)(`common.cancel`)),1)]),_:1}),l(v(h),{variant:`destructive`,onClick:Zt},{default:m(()=>[f(r(v(_)(`common.delete`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{Nt as default};
@@ -1,6 +0,0 @@
1
- import{$ as e,Ft as t,Ot as n,Q as r,Qt as i,R as a,S as o,U as s,X as c,Yt as l,Zt as u,at as d,bt as ee,et as f,gt as te,h as p,i as m,it as h,j as g,jt as _,mt as v,n as y,nt as b,o as x,ot as S,pt as C,qt as w,r as T,tt as E,vt as D,xt as O,zt as k}from"./button-BCxYWEaM.js";import{t as A}from"./Label-Ct_DR7Ui.js";import{t as ne}from"./Separator-BO94Jk9p.js";import{$ as re,J as j,X as M,a as N,at as ie,c as ae,d as oe,f as se,it as ce,l as le,o as ue,p as de,s as fe,tt as pe,u as me}from"./index-CwjudU09.js";import{t as P}from"./Input-Dr2XqfSh.js";import{t as F}from"./Card-BNz2IkLE.js";import{t as I}from"./CardContent-DszVPJgx.js";import{n as L,t as R}from"./CardTitle-BeBkx0ns.js";import{t as he}from"./useLogRetention-CQHD99Fy.js";var ge=a(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),_e=a(`hard-drive`,[[`path`,{d:`M10 16h.01`,key:`1bzywj`}],[`path`,{d:`M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`18tbho`}],[`path`,{d:`M21.946 12.013H2.054`,key:`zqlbp7`}],[`path`,{d:`M6 16h.01`,key:`1pmjb7`}]]),ve=a(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),ye=a(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),z=100,[B,V]=M(`ProgressRoot`),H=e=>typeof e==`number`;function U(e,t){return j(e)||H(e)&&!Number.isNaN(e)&&e<=t&&e>=0?e:(console.error(`Invalid prop \`value\` of value \`${e}\` supplied to \`ProgressRoot\`. The \`value\` prop must be:
2
- - a positive number
3
- - less than the value passed to \`max\` (or ${z} if no \`max\` prop is set)
4
- - \`null\` or \`undefined\` if the progress is indeterminate.
5
-
6
- Defaulting to \`null\`.`),null)}function W(e){return H(e)&&!Number.isNaN(e)&&e>0?e:(console.error(`Invalid prop \`max\` of value \`${e}\` supplied to \`ProgressRoot\`. Only numbers greater than 0 are valid max values. Defaulting to \`${z}\`.`),z)}var G=S({__name:`ProgressRoot`,props:{modelValue:{type:[Number,null],required:!1},max:{type:Number,required:!1,default:z},getValueLabel:{type:Function,required:!1,default:(e,t)=>H(e)?`${Math.round(e/t*z)}%`:void 0},getValueText:{type:Function,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`,`update:max`],setup(e,{emit:t}){let i=e,a=t;x();let o=p(i,`modelValue`,a,{passive:i.modelValue===void 0}),s=p(i,`max`,a,{passive:i.max===void 0});n(()=>o.value,async e=>{let t=U(e,i.max);t!==e&&(await v(),o.value=t)},{immediate:!0}),n(()=>i.max,e=>{let t=W(i.max);t!==e&&(s.value=t)},{immediate:!0});let c=r(()=>j(o.value)?`indeterminate`:o.value===s.value?`complete`:`loading`);return V({modelValue:o,max:s,progressState:c}),(e,t)=>(D(),f(w(m),{"as-child":e.asChild,as:e.as,"aria-valuemax":w(s),"aria-valuemin":0,"aria-valuenow":H(w(o))?w(o):void 0,"aria-valuetext":e.getValueText?.(w(o),w(s)),"aria-label":e.getValueLabel(w(o),w(s)),role:`progressbar`,"data-state":c.value,"data-value":w(o)??void 0,"data-max":w(s)},{default:_(()=>[O(e.$slots,`default`,{modelValue:w(o)})]),_:3},8,[`as-child`,`as`,`aria-valuemax`,`aria-valuenow`,`aria-valuetext`,`aria-label`,`data-state`,`data-value`,`data-max`]))}}),K=S({__name:`ProgressIndicator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=B();return x(),(e,r)=>(D(),f(w(m),C(t,{"data-state":w(n).progressState.value,"data-value":w(n).modelValue?.value??void 0,"data-max":w(n).max.value}),{default:_(()=>[O(e.$slots,`default`)]),_:3},16,[`data-state`,`data-value`,`data-max`]))}}),q=S({__name:`CardDescription`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(D(),b(`div`,{"data-slot":`card-description`,class:l(w(T)(`text-muted-foreground text-sm`,t.class))},[O(e.$slots,`default`)],2))}}),be=S({__name:`Progress`,props:{modelValue:{default:0},max:{},getValueLabel:{},getValueText:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=o(t,`class`);return(e,r)=>(D(),f(w(G),C({"data-slot":`progress`},w(n),{class:w(T)(`bg-muted h-1 rounded-full relative flex w-full items-center overflow-x-hidden`,t.class)}),{default:_(()=>[d(w(K),{"data-slot":`progress-indicator`,class:`bg-primary size-full flex-1 transition-all`,style:u(`transform: translateX(-${100-(t.modelValue??0)}%);`)},null,8,[`style`])]),_:1},16,[`class`]))}}),xe={class:`page space-y-6`},Se={class:`text-lg font-semibold text-foreground`},Ce={class:`grid grid-cols-1 md:grid-cols-[1fr_auto_1fr] gap-4 items-start`},we={class:`space-y-2`},Te={class:`flex items-center gap-2`},Ee={class:`text-xs text-muted-foreground`},De={class:`text-xs text-muted-foreground leading-relaxed min-h-[30px]`},Oe={class:`space-y-2`},ke={class:`flex items-center gap-2`},Ae={class:`text-xs text-muted-foreground`},je={class:`text-xs text-muted-foreground leading-relaxed min-h-[30px]`},Me={class:`mt-4 space-y-1`},Ne={class:`flex h-1.5 w-full overflow-hidden rounded-full bg-muted`},Pe={class:`flex justify-between text-[10px] font-mono text-muted-foreground`},Fe={class:`text-primary font-medium`},Ie={key:0,class:`text-sm text-destructive mt-2`},Le={class:`flex justify-end gap-2 pt-3 mt-3 border-t`},Re={class:`space-y-1`},ze={class:`flex justify-between text-sm`},Be={class:`text-muted-foreground`},Ve={class:`space-y-1`},He={class:`flex justify-between text-sm`},Ue={class:`text-muted-foreground`},We={class:`space-y-1`},Ge={class:`flex justify-between text-sm`},Ke={class:`text-muted-foreground`},qe={key:0,class:`text-xs text-muted-foreground`},Je={class:`grid grid-cols-2 gap-4 pt-3 border-t`},Ye={class:`space-y-1`},Xe={key:0,class:`text-sm text-destructive mt-1`},Ze={class:`space-y-1`},Qe={key:0,class:`text-sm text-destructive mt-1`},$e={class:`flex gap-3`},et={key:0,class:`text-sm space-y-1 p-3 bg-muted rounded-md`},tt={class:`font-medium`},nt=1048576,rt=1024,J=100,it=2,at=10,ot=0,st=90,ct=1,Y=30,lt=3,ut=7,X=1,dt=1024,ft=800,Z=S({__name:`Settings`,setup(n){let{t:a}=s(),{retentionDays:o,metricsDetailDays:l,validationError:f,loadRetention:p,loadMetricsDetail:m,saveBoth:v}=he(),x=k(null),S=k(dt),C=k(ft),T=k(!1),O=k(!1),j=k(null),M=k(!1),z=k(null),B=k(),V=k(``),H=k(``),U=r(()=>f.value),W=r(()=>{let e=Math.max(o.value,1);return Math.max(0,Math.min(J,l.value/e*J))}),G=r(()=>J-W.value),K=r(()=>Math.max(ot,Math.min(st,o.value))),Z=r(()=>Math.max(ct,Math.min(Y,l.value)));function Q(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=Math.min(Math.floor(Math.log(e)/Math.log(rt)),t.length-1);return`${(e/rt**+n).toFixed(1)} ${t[n]}`}async function $(){T.value=!0;try{let[e,t,n]=await Promise.allSettled([pe(),p(),m()]);e.status===`fulfilled`&&(x.value=e.value,S.value=e.value.thresholds.dbMaxSizeMb,C.value=e.value.thresholds.logTableMaxSizeMb)}finally{T.value=!1}}function pt(){o.value=lt,l.value=ut}async function mt(){await v()}function ht(){V.value=``,H.value=``;let e=!0;return(!Number.isFinite(S.value)||S.value<X)&&(V.value=a(`settings.storage.minValueError`,{min:X}),e=!1),(!Number.isFinite(C.value)||C.value<X)&&(H.value=a(`settings.storage.minValueError`,{min:X}),e=!1),e&&C.value>S.value&&(H.value=a(`settings.storage.logExceedsDbError`),e=!1),e}async function gt(){if(ht())try{let e=await ie({dbMaxSizeMb:S.value,logTableMaxSizeMb:C.value});S.value=e.dbMaxSizeMb,C.value=e.logTableMaxSizeMb,N.success(a(`settings.storage.thresholdsUpdated`)),await $()}catch(e){console.error(`settings.updateThresholds:`,e),N.error(g(e,a(`settings.storage.updateFailed`)))}}async function _t(){try{let e=await re(),t=new Blob([JSON.stringify(e,null,it)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`router-config-${new Date().toISOString().slice(0,at)}.json`,r.click(),URL.revokeObjectURL(n),N.success(a(`settings.importExport.exportSuccess`))}catch(e){console.error(`settings.export:`,e),N.error(g(e,a(`settings.importExport.exportFailed`)))}}function vt(e){let t=e.target,n=t.files?.[0];if(!n)return;let r=new FileReader;r.onload=()=>{try{let e=JSON.parse(r.result);if(!e.version||e.version!==1){N.error(a(`settings.importExport.unsupportedVersion`));return}z.value=e,M.value=!0}catch(e){console.error(`Settings.importJson:`,e),N.error(a(`settings.importExport.invalidJson`))}},r.readAsText(n),t.value=``}async function yt(){if(z.value){O.value=!0;try{j.value=await ce(z.value),M.value=!1,N.success(a(`settings.importExport.importSuccess`)),await $()}catch(e){console.error(`settings.import:`,e),N.error(g(e,a(`settings.importExport.importFailed`)))}finally{O.value=!1,z.value=null}}}return te($),(n,r)=>(D(),b(`div`,xe,[e(`h2`,Se,i(w(a)(`settings.title`)),1),d(w(F),null,{default:_(()=>[d(w(L),null,{default:_(()=>[d(w(R),{class:`text-sm`},{default:_(()=>[h(i(w(a)(`settings.retention.title`)),1)]),_:1}),d(w(q),null,{default:_(()=>[h(i(w(a)(`settings.retention.desc`)),1)]),_:1})]),_:1}),d(w(I),null,{default:_(()=>[e(`div`,Ce,[e(`div`,we,[d(w(A),{for:`retention-days`,class:`text-xs font-semibold uppercase tracking-wider text-muted-foreground`},{default:_(()=>[h(i(w(a)(`settings.retention.requestLogsCol`)),1)]),_:1}),e(`div`,Te,[d(w(P),{id:`retention-days`,modelValue:w(o),"onUpdate:modelValue":r[0]||=e=>t(o)?o.value=e:null,modelModifiers:{number:!0},type:`number`,min:ot,max:st,class:`w-24 font-mono text-center`},null,8,[`modelValue`]),e(`span`,Ee,i(w(a)(`settings.retention.daysUnit`)),1)]),e(`p`,De,i(w(a)(`settings.retention.requestLogsHint`)),1)]),d(w(ne),{orientation:`vertical`,class:`hidden md:block h-full`}),e(`div`,Oe,[d(w(A),{for:`metrics-detail-days`,class:`text-xs font-semibold uppercase tracking-wider text-muted-foreground`},{default:_(()=>[h(i(w(a)(`settings.retention.metricsDetailCol`)),1)]),_:1}),e(`div`,ke,[d(w(P),{id:`metrics-detail-days`,modelValue:w(l),"onUpdate:modelValue":r[1]||=e=>t(l)?l.value=e:null,modelModifiers:{number:!0},type:`number`,min:ct,max:Y,class:`w-24 font-mono text-center`},null,8,[`modelValue`]),e(`span`,Ae,i(w(a)(`settings.retention.metricsDetailUnit`)),1)]),e(`p`,je,i(w(a)(`settings.retention.metricsDetailHint`)),1)])]),e(`div`,Me,[e(`div`,Ne,[e(`div`,{class:`bg-primary transition-all`,style:u({width:W.value+`%`})},null,4),e(`div`,{class:`bg-primary/35 transition-all`,style:u({width:G.value+`%`})},null,4)]),e(`div`,Pe,[e(`span`,Fe,i(w(a)(`settings.retention.lifecycle.now`)),1),e(`span`,null,i(w(a)(`settings.retention.lifecycle.detailEnd`,{days:Z.value})),1),e(`span`,null,i(w(a)(`settings.retention.lifecycle.totalEnd`,{days:K.value})),1),e(`span`,null,i(w(a)(`settings.retention.lifecycle.expired`)),1)])]),U.value?(D(),b(`p`,Ie,i(U.value),1)):E(``,!0),e(`div`,Le,[d(w(y),{variant:`ghost`,size:`sm`,disabled:T.value,onClick:pt},{default:_(()=>[d(w(ve),{class:`mr-1.5 h-3.5 w-3.5`}),h(` `+i(w(a)(`common.reset`)),1)]),_:1},8,[`disabled`]),d(w(y),{size:`sm`,disabled:T.value||!!U.value,onClick:mt},{default:_(()=>[h(i(w(a)(`common.save`)),1)]),_:1},8,[`disabled`])])]),_:1})]),_:1}),d(w(F),null,{default:_(()=>[d(w(L),null,{default:_(()=>[d(w(R),{class:`text-sm flex items-center gap-2`},{default:_(()=>[d(w(_e),{class:`h-4 w-4`}),h(` `+i(w(a)(`settings.storage.title`)),1)]),_:1}),d(w(q),null,{default:_(()=>[h(i(w(a)(`settings.storage.desc`)),1)]),_:1})]),_:1}),d(w(I),null,{default:_(()=>[x.value?(D(),b(c,{key:0},[e(`div`,Re,[e(`div`,ze,[e(`span`,null,i(w(a)(`settings.storage.dbTotalSize`)),1),e(`span`,Be,i(Q(x.value.totalBytes))+` / `+i(S.value)+` MB `,1)]),d(w(be),{"model-value":Math.min(J,x.value.totalBytes/(S.value*nt)*J)},null,8,[`model-value`])]),e(`div`,Ve,[e(`div`,He,[e(`span`,null,i(w(a)(`settings.storage.logSize`))+` (`+i(w(a)(`common.count`,{count:x.value.logCount}))+`)`,1),e(`span`,Ue,i(Q(x.value.logTableBytes))+` / `+i(C.value)+` MB `,1)]),d(w(be),{"model-value":Math.min(J,x.value.logTableBytes/(C.value*nt)*J)},null,8,[`model-value`])]),e(`div`,We,[e(`div`,Ge,[e(`span`,null,i(w(a)(`settings.storage.logFileSize`)),1),e(`span`,Ke,i(Q(x.value.logFileBytes??0)),1)])]),x.value.lastChecked?(D(),b(`p`,qe,i(w(a)(`common.lastChecked`))+`:`+i(x.value.lastChecked),1)):E(``,!0)],64)):E(``,!0),e(`div`,Je,[e(`div`,Ye,[d(w(A),{for:`db-max-size`},{default:_(()=>[h(i(w(a)(`settings.storage.dbMaxSizeLabel`)),1)]),_:1}),d(w(P),{id:`db-max-size`,modelValue:S.value,"onUpdate:modelValue":r[2]||=e=>S.value=e,modelModifiers:{number:!0},type:`number`,min:X,onInput:r[3]||=e=>V.value=``},null,8,[`modelValue`]),V.value?(D(),b(`p`,Xe,i(V.value),1)):E(``,!0)]),e(`div`,Ze,[d(w(A),{for:`log-max-size`},{default:_(()=>[h(i(w(a)(`settings.storage.logMaxSizeLabel`)),1)]),_:1}),d(w(P),{id:`log-max-size`,modelValue:C.value,"onUpdate:modelValue":r[4]||=e=>C.value=e,modelModifiers:{number:!0},type:`number`,min:X,onInput:r[5]||=e=>H.value=``},null,8,[`modelValue`]),H.value?(D(),b(`p`,Qe,i(H.value),1)):E(``,!0)])]),d(w(y),{size:`sm`,disabled:T.value,onClick:gt},{default:_(()=>[h(i(w(a)(`common.saveThresholds`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1}),d(w(F),null,{default:_(()=>[d(w(L),null,{default:_(()=>[d(w(R),{class:`text-sm`},{default:_(()=>[h(i(w(a)(`settings.importExport.title`)),1)]),_:1}),d(w(q),null,{default:_(()=>[h(i(w(a)(`settings.importExport.desc`)),1)]),_:1})]),_:1}),d(w(I),null,{default:_(()=>[e(`div`,$e,[d(w(y),{variant:`outline`,size:`sm`,disabled:T.value,onClick:_t},{default:_(()=>[d(w(ge),{class:`mr-2 h-4 w-4`}),h(` `+i(w(a)(`settings.importExport.export`)),1)]),_:1},8,[`disabled`]),d(w(y),{variant:`outline`,size:`sm`,disabled:T.value,onClick:r[6]||=e=>B.value?.click()},{default:_(()=>[d(w(ye),{class:`mr-2 h-4 w-4`}),h(` `+i(w(a)(`settings.importExport.import`)),1)]),_:1},8,[`disabled`]),e(`input`,{ref_key:`fileInput`,ref:B,type:`file`,accept:`.json`,class:`hidden`,onChange:vt},null,544)]),j.value?(D(),b(`div`,et,[e(`p`,tt,i(w(a)(`settings.importExport.importComplete`)),1),(D(!0),b(c,null,ee(j.value,(e,t)=>(D(),b(`p`,{key:t},i(t)+`: `+i(w(a)(`common.count`,{count:e})),1))),128))])):E(``,!0)]),_:1})]),_:1}),d(w(de),{open:M.value,"onUpdate:open":r[7]||=e=>M.value=e},{default:_(()=>[d(w(me),null,{default:_(()=>[d(w(fe),null,{default:_(()=>[d(w(ue),null,{default:_(()=>[h(i(w(a)(`settings.importExport.confirmImport`)),1)]),_:1}),d(w(le),null,{default:_(()=>[h(i(w(a)(`settings.importExport.importWarning`))+` `+i(w(a)(`common.irreversible`)),1)]),_:1})]),_:1}),d(w(ae),null,{default:_(()=>[d(w(oe),{disabled:O.value},{default:_(()=>[h(i(w(a)(`common.cancel`)),1)]),_:1},8,[`disabled`]),d(w(se),{disabled:O.value,onClick:yt},{default:_(()=>[h(i(O.value?w(a)(`settings.importExport.importing`):w(a)(`settings.importExport.confirmButton`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{Z as default};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-BCxYWEaM.js";var t=e(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]);export{t};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-BCxYWEaM.js";var t=e(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]);export{t};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-BCxYWEaM.js";var t=e(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]);export{t};
@@ -1 +0,0 @@
1
- import{R as e}from"./button-BCxYWEaM.js";var t=e(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]);export{t};