dsh-all-usage 1.1.3 → 1.1.4
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.
- package/CHANGELOG.md +46 -1
- package/README.md +10 -37
- package/assets/model-icons/LICENSE.upstream-lobe-icons.txt +51 -0
- package/assets/model-icons/claude-color.svg +1 -0
- package/assets/model-icons/deepseek-color.svg +1 -0
- package/assets/model-icons/doubao-color.svg +1 -0
- package/assets/model-icons/gemini-color.svg +1 -0
- package/assets/model-icons/grok.svg +1 -0
- package/assets/model-icons/kimi-color.svg +1 -0
- package/assets/model-icons/manifest.json +213 -0
- package/assets/model-icons/meta-color.svg +1 -0
- package/assets/model-icons/minimax-color.svg +1 -0
- package/assets/model-icons/openai-color.svg +1 -0
- package/assets/model-icons/qwen-color.svg +1 -0
- package/assets/model-icons/zhipu-color.svg +1 -0
- package/assets/screenshot-1.png +0 -0
- package/assets/screenshot-2.png +0 -0
- package/assets/screenshot-3.png +0 -0
- package/lib/aggregation.js +58 -10
- package/lib/client.js +1 -1
- package/lib/http.js +1 -1
- package/lib/ledger.js +32 -5
- package/lib/plugin.js +1 -0
- package/lib/pricing-runtime.js +135 -11
- package/lib/pricing.js +335 -6
- package/lib/session-sync.js +63 -10
- package/lib/usage-core.js +44 -0
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.__ModuleLoader__.load({id:"dsh-all-usage",factory:e=>{var t={},a=t;Object.defineProperty(a,Symbol.toStringTag,{value:"Module"});const r=e("react");function n(e){return String(e).padStart(2,"0")}function i(e,t){const a=t?e.getUTCFullYear():e.getFullYear(),r=t?e.getUTCMonth():e.getMonth(),i=t?e.getUTCDate():e.getDate();return a+"-"+n(r+1)+"-"+n(i)}function s(e,t,a){return a?new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t)):new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)}function l(e,t){if("string"!=typeof e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const a=Number(e.slice(0,4)),r=Number(e.slice(5,7)),n=Number(e.slice(8,10)),s=t?new Date(Date.UTC(a,r-1,n)):new Date(a,r-1,n);return Number.isFinite(s.getTime())&&i(s,t)===e}function o(e,t){if(null===e||"object"!=typeof e)return null;const a=e.start,r=e.end;return!l(a,t)||!l(r,t)||a>r?null:{start:a,end:r}}function c(e,t){let a=t;if(Array.isArray(e))for(const r of e)r&&l(r.date,!0)&&r.date<=t&&r.date<a&&(a=r.date);return{min:a,max:t}}function u(){let e=0;return{next:()=>(e+=1,e),isCurrent:t=>t===e}}function d(e){if(null===e||"object"!=typeof e)return null;const t="string"==typeof e.instanceId?e.instanceId:"",a="number"==typeof e.revision&&Number.isFinite(e.revision)?e.revision:null;return""===t||null===a?null:t+":"+a}function p(e,t,a){const r=e&&"object"==typeof e?e[t]:void 0;return"number"==typeof r&&Number.isFinite(r)?r:a}function m(e){return null!==e&&"object"==typeof e&&["dataRevision","metadataRevision","scanRevision","pricingRevision"].every(t=>null!==p(e,t,null))}function h(e){if(null===e||"object"!=typeof e||"string"!=typeof e.instanceId||""===e.instanceId)return null;if("string"==typeof e.queryRevision&&""!==e.queryRevision)return e.instanceId+":"+e.queryRevision;const t=p(e,"dataRevision",p(e,"revision",null)),a=p(e,"pricingRevision",0);return null===t?null:e.instanceId+":"+t+":"+a}function g(e){return String(Math.round(10*e)/10)}function b(e){return"number"==typeof e&&Number.isFinite(e)?e<1e3?String(e):e<1e6?g(e/1e3)+"k":e<1e9?g(e/1e6)+"M":g(e/1e9)+"B":"0"}function f(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.round(e).toLocaleString("en"===t?"en-US":"zh-CN"):"0"}function x(e,t){const a=e+t;return a<=0?0:t/a*100}function y(e){const t=e.size||16,a={fill:"none",stroke:"currentColor",strokeWidth:1.8,strokeLinecap:"round",strokeLinejoin:"round"},n={edit:[r.createElement("path",{key:"a",d:"M12.2 3.4l2.4 2.4M4 16l2.8-.6L15 7.2a1.7 1.7 0 0 0-2.4-2.4L4.4 13z",...a})],export:[r.createElement("path",{key:"a",d:"M12 3v11M8 7l4-4 4 4M5 13v5h14v-5",...a})],refresh:[r.createElement("path",{key:"a",d:"M19 9a7 7 0 1 0 1.1 5.2M19 4v5h-5",...a})],close:[r.createElement("path",{key:"a",d:"M6 6l12 12M18 6L6 18",...a})],chart:[r.createElement("path",{key:"a",d:"M4 19V5M4 19h16M7 15l3-4 3 2 5-7",...a})],list:[r.createElement("path",{key:"a",d:"M6 6h12M6 12h12M6 18h12",...a}),r.createElement("circle",{key:"b",cx:3.5,cy:6,r:.7,fill:"currentColor"}),r.createElement("circle",{key:"c",cx:3.5,cy:12,r:.7,fill:"currentColor"}),r.createElement("circle",{key:"d",cx:3.5,cy:18,r:.7,fill:"currentColor"})],cache:[r.createElement("path",{key:"a",d:"M12 4l7 4-7 4-7-4 7-4zM5 12l7 4 7-4M5 16l7 4 7-4",...a})],wallet:[r.createElement("path",{key:"a",d:"M4 7.5A2.5 2.5 0 0 1 6.5 5H18v14H6.5A2.5 2.5 0 0 1 4 16.5zM4 8h14M14 13h.01",...a})],clock:[r.createElement("path",{key:"a",d:"M12 6v6l4 2M20 12a8 8 0 1 1-16 0 8 8 0 0 1 16 0z",...a})],folder:[r.createElement("path",{key:"a",d:"M3.5 7.5h6l2 2h9v8.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z",...a})],language:[r.createElement("circle",{key:"a",cx:12,cy:12,r:8,...a}),r.createElement("path",{key:"b",d:"M4 12h16M12 4c2.1 2.2 3.2 4.9 3.2 8S14.1 17.8 12 20M12 4C9.9 6.2 8.8 8.9 8.8 12s1.1 5.8 3.2 8",...a})],chevron:[r.createElement("path",{key:"a",d:"M7 10l5 5 5-5",...a})],check:[r.createElement("path",{key:"a",d:"M5 12.5l4.2 4.1L19 7.3",...a})],plus:[r.createElement("path",{key:"a",d:"M12 5v14M5 12h14",...a})],calendar:[r.createElement("path",{key:"a",d:"M6 4v3M18 4v3M4 9h16M5 6h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z",...a})]};return r.createElement("svg",{className:"uh-line-icon "+(e.className||""),width:t,height:t,viewBox:"0 0 24 24","aria-hidden":!0},n[e.name]||n.chart)}function v(e,t){if("en"===t||"number"!=typeof e||!Number.isFinite(e)||e<1e4)return"";const a=e>=1e8?e/1e8:e/1e4,r=Math.round(1e3*a)/1e3;return String(r)+(e>=1e8?"亿":"万")}function w(e,t,a){const n=v(t,a);return r.createElement(r.Fragment,null,e,n?r.createElement("span",{className:"uh-unit"},n):null)}function k(e,t,a){return null==t?"—":("CNY"===e?"¥":"USD"===e?"$":e+" ")+t.toLocaleString("en"===a?"en-US":"zh-CN",{minimumFractionDigits:4,maximumFractionDigits:4})}function E(e){const t=("number"==typeof e?String(e):"string"==typeof e?e.trim().toLowerCase():"").match(/^(\d+)(?:\.(\d+))?(?:e([+-]?\d+))?$/);if(!t)return{digits:0n,scale:0};let a=(t[1]||"")+(t[2]||""),r=(t[2]||"").length-(t[3]?Number(t[3]):0);for(r<0&&(a+="0".repeat(-r),r=0),r>a.length&&(a="0".repeat(r-a.length+1)+a);r>0&&a.length>1&&a.endsWith("0");)a=a.slice(0,-1),r-=1;return{digits:BigInt(a.replace(/^0+(?=\d)/,"")||"0"),scale:r}}function N(e){const t=E(e);if(0n===t.digits)return"0";const a=t.digits.toString();if(0===t.scale)return a;const r=a.padStart(t.scale+1,"0"),n=r.length-t.scale;return r.slice(0,n)+"."+r.slice(n)}function M(e,t){const a=E(e),r=E(t),n=Math.max(a.scale,r.scale);return N((a.digits*10n**BigInt(n-a.scale)+r.digits*10n**BigInt(n-r.scale)).toString()+(n>0?"e-"+n:""))}function C(){return{currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0}}function S(e){const t=e&&e.cost&&"object"==typeof e.cost?e.cost:e&&"object"==typeof e?e:{},a={currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0};if(a.currency="string"==typeof t.currency&&""!==t.currency?t.currency:"USD",t.breakdown&&"object"==typeof t.breakdown)return"priced"===t.status?(a.input=N(t.breakdown.input),a.output=N(t.breakdown.output),a.cacheRead=N(t.breakdown.cacheRead),a.cacheWrite=N(t.breakdown.cacheWrite),a.baseTotal=N(t.baseTotal),a.total=N(t.total),a.pricedCalls=1):"ambiguous"===t.status?a.ambiguousCalls=1:"unsupported"===t.status?a.unsupportedCalls=1:a.unpricedCalls=1,a;for(const e of["input","output","cacheRead","cacheWrite","baseTotal","total"])a[e]=N(t[e]);for(const e of["pricedCalls","unpricedCalls","ambiguousCalls","unsupportedCalls"])a[e]=Number.isFinite(t[e])?t[e]:0;return a}function z(e,t){const a=S(t);for(const t of["input","output","cacheRead","cacheWrite","baseTotal","total"])e[t]=M(e[t],a[t]);return e.pricedCalls+=a.pricedCalls,e.unpricedCalls+=a.unpricedCalls,e.ambiguousCalls+=a.ambiguousCalls,e.unsupportedCalls+=a.unsupportedCalls,e}function A(e,t){const a=S(e);if(a.pricedCalls<=0)return"—";const r=Number(a.total);return Number.isFinite(r)?k(a.currency,r,t):a.currency+" "+a.total}function T(e){const t=e&&e.config&&"object"==typeof e.config?e.config:{},a=t.sync&&"object"==typeof t.sync?t.sync:{};return{sync:{autoEnabled:!0===a.autoEnabled,intervalMs:Number.isFinite(a.intervalMs)?a.intervalMs:216e5},providerAliases:t.providerAliases&&"object"==typeof t.providerAliases?Object.assign({},t.providerAliases):{},mappings:Array.isArray(t.mappings)?t.mappings.map(e=>Object.assign({},e)):[],overrides:Array.isArray(t.overrides)?t.overrides.map(e=>Object.assign({},e,{tiers:Array.isArray(e.tiers)?e.tiers.map(e=>Object.assign({},e)):[]})):[]}}function R(e,t){const a=T(t);if(null===e||"object"!=typeof e)return a;const r=T({config:e});return Object.assign({},a,{providerAliases:r.providerAliases,mappings:r.mappings,overrides:r.overrides})}function j(e,t){const a={priced:["已计价","priced"],unpriced:["未计价","unpriced"],ambiguous:["待确认","ambiguous"],unsupported:["不支持","unsupported"]},r=a[e]||a.unpriced;return"en"===t?r[1]:r[0]}function D(e){const t=String(e??"").trim().toLowerCase();if(""===t||t.length>128)return!1;const a=t.match(/^(\d+)(?:\.(\d+))?(?:e([+-]?\d+))?$/);if(!a)return!1;const r=a[3]?Number(a[3]):0;if(!Number.isSafeInteger(r)||Math.abs(r)>24)return!1;let n=(a[1]||"")+(a[2]||""),i=(a[2]||"").length-r;return n=n.replace(/^0+(?=\d)/,""),i<0&&(n+="0".repeat(-i),i=0),i>n.length&&(n="0".repeat(i-n.length+1)+n),n.length<=40}function I(e,t){const a=Number(e&&e.size);return!(!e||"context"!==e.type||!Number.isSafeInteger(a)||a<=t||a>1e9)&&["input","output","cacheRead","cacheWrite"].every(t=>D(e[t]))}function U(e){return String(e||"").trim().toLowerCase().replace(/^.*\//,"").split(":")[0]}function F(e,t){const a=e.split("-"),r="en"===t,n=r?new Date(Date.UTC(Number(a[0]),Number(a[1])-1,Number(a[2]))):new Date(Number(a[0]),Number(a[1])-1,Number(a[2])),i=r?n.getUTCMonth():n.getMonth(),s=r?n.getUTCDay():n.getDay();if("en"===t){const e=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][s];return["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][i]+" "+Number(a[2])+", "+a[0]+" ("+e+", UTC)"}const l=["周日","周一","周二","周三","周四","周五","周六"][s];return a[0]+"年"+Number(a[1])+"月"+Number(a[2])+"日 "+l}function O(e,t,a){if("en"===a){const a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][t];return 0===t?e+" "+a:a}return 0===t?e+"年1月":t+1+"月"}function W(e){return e>=10?4:e>=6?3:e>=3?2:e>=1?1:0}const L=[20,45,70,96];function q(e){return e<=0?"var(--dsw-alias-bg-layer-2)":"color-mix(in srgb, #2ea043 "+L[e-1]+"%, var(--dsw-alias-bg-layer-2))"}function P(e){return"hsl("+137*e%360+", 70%, 55%)"}function K(e,t,a,r){const n=a&&Array.isArray(e&&e.byDayUtc)?e.byDayUtc:Array.isArray(e&&e.byDay)?e.byDay:[],l=i(new Date,a);if("custom"===t){const e=o(r,a);return null===e?null:{start:e.start,end:e.end}}if("today"===t)return{start:l,end:l};if("30d"===t)return{start:i(s(new Date,-29,a),a),end:l};if("90d"===t)return{start:i(s(new Date,-89,a),a),end:l};const u=c(n,l);return{start:u.min,end:u.max}}function B(e){return null===e?"":JSON.stringify({start:e.start,end:e.end,utc:!0===e.utc,workspaceId:e.workspaceId||null,provider:e.provider||null,modelKey:e.modelKey||null})}function H(e){const t=e&&e.tokens&&"object"==typeof e.tokens?e.tokens:e||{};return{input:Number.isFinite(t.input)?t.input:0,output:Number.isFinite(t.output)?t.output:0,cacheRead:Number.isFinite(t.cacheRead)?t.cacheRead:0,cacheWrite:Number.isFinite(t.cacheWrite)?t.cacheWrite:0,reasoning:Number.isFinite(t.reasoning)?t.reasoning:0}}function V(e,t,a){return e&&Number.isFinite(e.time)?function(e,t,a){const r=a?{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}:{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1};return"en"===t&&(r.timeZone="UTC"),new Date(e).toLocaleString("en"===t?"en-US":"zh-CN",r)}(e.time,t,a):e&&"string"==typeof e.date?a?F(e.date,t):e.date.slice(5):""}function Y(e,t){return e&&Number.isFinite(e.time)?String(e.time):e&&"string"==typeof e.date?e.date:String(t)}function J(e){return e&&"string"==typeof e.date?e.date:""}function X(e,t,a){const r="string"==typeof e.actualModel&&""!==e.actualModel?e.actualModel:"string"==typeof e.requestedModel&&""!==e.requestedModel?e.requestedModel:"",n="string"==typeof e.model&&""!==e.model?e.model:a,i=n.indexOf(" / "),s=("string"==typeof e.provider&&""!==e.provider?e.provider:"")||(i>0?n.slice(0,i):t),l=s!==t?s+" / ":"",o=""!==r?n:""!==l&&n.startsWith(l)?n.slice(l.length):i>0?n.slice(i+3):n;return{provider:s,model:function(e){const t=String(e||"").trim();return t.includes(" / ")?t:U(t)}(r||o)||a}}function Z(e,t){const[a,n]=r.useState({value:0,done:!1});return r.useEffect(()=>{if("number"!=typeof e||!Number.isFinite(e)||e<=0)return void n({value:0,done:!1});if(a.done)return void n({value:e,done:!0});const r=Date.now(),i=t.interval(()=>{const t=Math.min(1,(Date.now()-r)/700),a=1-Math.pow(1-t,3);t>=1?(i(),n({value:e,done:!0})):n({value:Math.round(e*a),done:!1})},32);return i},[e]),a.value}function G(e){if(!Array.isArray(e)||0===e.length)return"";if(1===e.length)return"M"+e[0].x.toFixed(2)+" "+e[0].y.toFixed(2);const t=[];for(let a=0;a<e.length-1;a+=1){const r=e[a+1].x-e[a].x;t.push(0===r?0:(e[a+1].y-e[a].y)/r)}const a=new Array(e.length).fill(0);a[0]=t[0],a[e.length-1]=t[t.length-1];for(let r=1;r<e.length-1;r+=1){const e=t[r-1],n=t[r];a[r]=e*n<=0?0:(e+n)/2}for(let e=0;e<t.length;e+=1){if(0===t[e]){a[e]=0,a[e+1]=0;continue}const r=a[e]/t[e],n=a[e+1]/t[e],i=r*r+n*n;if(i>9){const s=3/Math.sqrt(i);a[e]=s*r*t[e],a[e+1]=s*n*t[e]}}let r="M"+e[0].x.toFixed(2)+" "+e[0].y.toFixed(2);for(let t=0;t<e.length-1;t+=1){const n=e[t+1].x-e[t].x,i=e[t].x+n/3,s=e[t].y+a[t]*n/3,l=e[t+1].x-n/3,o=e[t+1].y-a[t+1]*n/3;r+=" C"+i.toFixed(2)+" "+s.toFixed(2)+" "+l.toFixed(2)+" "+o.toFixed(2)+" "+e[t+1].x.toFixed(2)+" "+e[t+1].y.toFixed(2)}return r}function $(e){if(!Array.isArray(e)||e.length<2)return 1;let t=0;for(let a=1;a<e.length;a+=1){const r=e[a].x-e[a-1].x,n=e[a].y-e[a-1].y;t+=Math.sqrt(r*r+n*n)}return Math.max(1,Math.ceil(1.35*t+2))}const _=["#0a84ff","#30d158","#bf5af2","#ff9f0a","#ff375f","#64d2ff"],Q={total:"#f4c542",input:"#5aa9ff",cacheRead:"#44d483",cacheWrite:"#d98bff",output:"#ff8c66",reasoning:"#aab4c4"},ee={total:.2,input:.16,cacheRead:.18,cacheWrite:.14,output:.16,reasoning:.1};function te(e,t){const a=v(e,t);return""!==a?a:b(e)}function ae(e,t){return te(e,t)+("en"===t?" tokens":" Token")}function re(e,t,a,r,n){const i=Math.max(0,n-r),s=r=>({x:e+a*Math.cos(r),y:t+a*Math.sin(r)}),l=s(r);if(i>=2*Math.PI-1e-4){const e=s(r+Math.PI);return"M"+l.x.toFixed(2)+" "+l.y.toFixed(2)+" A"+a+" "+a+" 0 1 1 "+e.x.toFixed(2)+" "+e.y.toFixed(2)+" A"+a+" "+a+" 0 1 1 "+l.x.toFixed(2)+" "+l.y.toFixed(2)}const o=s(n);return"M"+l.x.toFixed(2)+" "+l.y.toFixed(2)+" A"+a+" "+a+" 0 "+(i>Math.PI?1:0)+" 1 "+o.x.toFixed(2)+" "+o.y.toFixed(2)}const ne=r.memo(function(e){const t="en"===e.language?"en":"zh",[a,n]=r.useState(null),i=r.useRef(null),s=r.useRef(null),l=r.useRef(null),o=r.useRef(null),c=r.useMemo(()=>function(e,t,a=5){const r=Math.max(1,Number.isInteger(a)?a:5),n=(Array.isArray(e)?e:[]).map((e,t)=>({label:e&&void 0!==e.label?String(e.label):"",value:Number(e&&e.value),color:e&&"string"==typeof e.color&&""!==e.color?e.color:_[t%_.length],cost:S(e)})).filter(e=>""!==e.label&&Number.isFinite(e.value)&&e.value>0).sort((e,t)=>t.value-e.value),i=n.reduce((e,t)=>e+t.value,0);if(i<=0)return{total:0,segments:[]};const s=n.slice(0,r),l=n.slice(r),o=l.reduce((e,t)=>e+t.value,0);if(o>0){const e={currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0};for(const t of l)z(e,t.cost);s.push({label:t+" ("+(n.length-r)+")",value:o,color:"#b8c2cf",cost:e,other:!0})}let c=-Math.PI/2;return{total:i,segments:s.map((e,t)=>{const a=e.value/i*Math.PI*2,r=s.length>1?Math.min(.018,a/3):0,n=c+r,l=c+a-r;return c+=a,{...e,index:t,percentage:e.value/i*100,startAngle:l<=n?c-a:n,endAngle:l<=n?c:l}})}}(e.items,"en"===t?"Other":"其他"),[e.items,t]),u=null===a?null:c.segments[a]||null,d=e=>(e>=10?Math.round(e):Math.round(10*e)/10)+"%",p=r.useCallback(()=>{l.current=null,null!==o.current&&(window.clearTimeout(o.current),o.current=null);const e=i.current,t=s.current;if(null!==e&&null!==t){if(t.fixed)e.style.left=t.left+"px",e.style.top=t.top+"px";else{const a=t.visual?.getBoundingClientRect();if(!a)return;const r=198,n=82;e.style.left=Math.max(8,Math.min(Math.max(8,a.width-r),t.x-a.left+14))+"px",e.style.top=Math.max(8,Math.min(Math.max(8,a.height-n),t.y-a.top+14))+"px"}e.style.visibility="visible"}},[]),m=r.useCallback(e=>{s.current=e,null===l.current&&(l.current=window.requestAnimationFrame(p),o.current=window.setTimeout(()=>{null!==l.current&&(window.cancelAnimationFrame(l.current),p())},80))},[p]),h=r.useCallback(e=>{m({x:e.clientX,y:e.clientY,visual:e.currentTarget.ownerSVGElement?.parentElement})},[m]),g=r.useCallback(()=>{n(null),s.current=null},[]);return r.useEffect(()=>()=>{null!==l.current&&window.cancelAnimationFrame(l.current),null!==o.current&&window.clearTimeout(o.current)},[]),r.useEffect(()=>{null!==a&&null!==s.current&&null===l.current&&(l.current=window.requestAnimationFrame(p))},[a,p]),c.total<=0?null:r.createElement("div",{className:"uh-donut-chart","aria-label":e.title},r.createElement("div",{className:"uh-donut-title"},r.createElement(y,{name:e.icon||"chart",size:16}),e.title),r.createElement("div",{className:"uh-donut-layout"},r.createElement("div",{className:"uh-donut-visual"},r.createElement("svg",{className:"uh-donut-svg",viewBox:"0 0 260 260",role:"img","aria-label":e.title+" "+ae(c.total,t)},r.createElement("circle",{cx:130,cy:130,r:77.5,className:"uh-donut-track",fill:"none",stroke:"var(--dsw-alias-bg-layer-2)",strokeWidth:33}),c.segments.map(e=>r.createElement("path",{key:"donut-"+e.index,d:re(130,130,77.5,e.startAngle,e.endAngle),className:"uh-donut-segment"+(a===e.index?" uh-active":""),fill:"none",stroke:e.color,strokeWidth:33,strokeLinecap:"butt",strokeLinejoin:"round",pathLength:1,style:{animationDelay:90*e.index+"ms"},tabIndex:0,"aria-label":e.label+" "+ae(e.value,t)+" "+d(e.percentage)+" "+A(e.cost,t),onMouseEnter:t=>{n(e.index),h(t)},onMouseMove:h,onMouseLeave:g,onFocus:()=>{n(e.index),m({fixed:!0,left:12,top:12})},onBlur:g}))),u?r.createElement("div",{ref:i,className:"uh-donut-tooltip",style:{visibility:"hidden"}},r.createElement("span",{className:"uh-donut-dot",style:{background:u.color}}),r.createElement("div",{},r.createElement("strong",{},u.label),r.createElement("span",{},ae(u.value,t)+" · "+d(u.percentage)),r.createElement("span",{className:"uh-donut-tooltip-cost"},A(u.cost,t)))):null,r.createElement("div",{className:"uh-donut-center"},r.createElement("strong",{},te(c.total,t)),r.createElement("span",{},"en"===t?"tokens":"Token"))),r.createElement("div",{className:"uh-donut-legend",role:"list"},c.segments.map(e=>r.createElement("div",{key:"legend-"+e.index,className:"uh-donut-legend-row",role:"listitem"},r.createElement("span",{className:"uh-donut-dot",style:{background:e.color}}),r.createElement("div",{className:"uh-donut-legend-copy"},r.createElement("strong",{title:e.label},e.label)),r.createElement("div",{className:"uh-donut-legend-metrics"},r.createElement("span",{},ae(e.value,t)),r.createElement("span",{className:"uh-donut-cost"},A(e.cost,t))),r.createElement("strong",{className:"uh-donut-percent"},d(e.percentage)))))))});function ie(e,t){return{total:"en"===t?"Total":"总处理",input:"en"===t?"Input":"输入",cacheRead:"en"===t?"Cache hits":"缓存命中",cacheWrite:"en"===t?"Cache writes":"缓存写入",output:"en"===t?"Output":"输出",reasoning:"en"===t?"Reasoning":"推理"}[e]||e}const se=r.memo(function(e){const t="en"===e.language?"en":"zh",a=(e,a)=>"en"===t?a:e,n=Array.isArray(e.rows)?e.rows:[],i=Array.isArray(e.visible)&&e.visible.length>0?e.visible:["total"],[s,l]=r.useState(null),[o,c]=r.useState(null),u=280,d=r.useMemo(()=>function(e,t,a=900,r=250){const n=Array.isArray(t)&&t.length>0?t:["total"],i={left:46,right:14,top:14,bottom:30},s=Math.max(1,a-i.left-i.right),l=Math.max(1,r-i.top-i.bottom),o=(Array.isArray(e)?e:[]).flatMap(e=>n.map(t=>"total"===t?e.total:e.tokens[t]||0)),c=Math.max(1,...o),u={};for(const t of n)u[t]=(Array.isArray(e)?e:[]).map((a,r)=>({x:i.left+(e.length>1?r*s/(e.length-1):s/2),y:i.top+l-("total"===t?a.total:a.tokens[t]||0)/c*l,value:"total"===t?a.total:a.tokens[t]||0}));return{width:a,height:r,padding:i,max:c,points:u}}(n,i,900,u),[n,i]),p=Q,m=ee,h=u-d.padding.bottom,g=r.useMemo(()=>{const e={};for(const t of i){const a=d.points[t]||[],r=G(a);e[t]={line:r,area:0===a.length?"":r+" L"+a[a.length-1].x.toFixed(2)+" "+h+" L"+a[0].x.toFixed(2)+" "+h+" Z",length:$(a)}}return e},[d,i,h]),f=r.useMemo(()=>n.length<=1?[0]:Array.from(new Set([0,Math.floor((n.length-1)/4),Math.floor((n.length-1)/2),Math.floor(3*(n.length-1)/4),n.length-1])),[n]),x=!e.loading&&!e.error&&n.length>0,v=n.length>0&&Number.isFinite(n[0].time)?a("每小时 Token 使用趋势,选择小时查看当天请求日志","Hourly Token usage trend; select an hour to view request logs"):a("每日 Token 使用趋势,选择日期查看请求日志","Daily Token usage trend; select a date to view request logs"),w=(null===s||n[s],null===s?null:(d.points[i[0]]||[])[s]||null),k=null===o?null:n[o]||null,E=null===o?null:(d.points[i[0]]||[])[o]||null,N=null!==s&&null!==k&&null!==E,M=null!==E&&E.x>612?" uh-left":" uh-right",C=null===E?void 0:{left:(E.x/900*100).toFixed(2)+"%",top:Math.max(23,Math.min(77,E.y/u*100)).toFixed(2)+"%"},S=e=>{l(e),c(e)},z=e.loading?r.createElement("div",{className:"uh-trend-stage uh-trend-loading",role:"status","aria-label":a("正在加载趋势","Loading trend")},r.createElement("span",{className:"uh-trend-spinner","aria-hidden":!0})):e.error?r.createElement("div",{className:"uh-trend-stage uh-trend-message",role:"alert"},e.error):0===n.length?r.createElement("div",{className:"uh-trend-stage uh-trend-message"},a("该范围内暂无趋势数据","No trend data in this range")):r.createElement("div",{className:"uh-trend-chart-wrap"},r.createElement("svg",{className:"uh-trend-svg",viewBox:"0 0 900 "+u,role:"group","aria-label":v},[0,.5,1].map(e=>r.createElement(r.Fragment,{key:e},r.createElement("line",{x1:d.padding.left,x2:900-d.padding.right,y1:d.padding.top+(u-d.padding.top-d.padding.bottom)*e,y2:d.padding.top+(u-d.padding.top-d.padding.bottom)*e,className:"uh-trend-grid"}),r.createElement("text",{x:d.padding.left-7,y:d.padding.top+(u-d.padding.top-d.padding.bottom)*e+4,className:"uh-trend-axis-label",textAnchor:"end"},b(Math.round(d.max*(1-e)))))),r.createElement("defs",{},i.map(e=>r.createElement("linearGradient",{key:e,id:"uh-trend-gradient-"+e,x1:"0",y1:"0",x2:"0",y2:"1"},r.createElement("stop",{offset:"4%",stopColor:p[e]||"#9aa4b2",stopOpacity:m[e]||.12}),r.createElement("stop",{offset:"96%",stopColor:p[e]||"#9aa4b2",stopOpacity:0})))),i.map((e,t)=>{const a=g[e]?g[e].area:"";return""===a?null:r.createElement("path",{key:"area-"+e,d:a,className:"uh-trend-area","data-series":e,fill:"url(#uh-trend-gradient-"+e+")",style:{animationDelay:80+80*t+"ms"}})}),i.map(e=>r.createElement("path",{key:"line-base-"+e,d:g[e]?g[e].line:"",className:"uh-trend-line","data-series":e,stroke:p[e]||"#9aa4b2"})),i.map((e,t)=>{d.points[e];const a=g[e]?g[e].length:0;return r.createElement("path",{key:"line-draw-"+e,d:g[e]?g[e].line:"",className:"uh-trend-line-draw","data-series":e,stroke:p[e]||"#9aa4b2",style:{"--uh-draw-length":a+"px",animationDelay:90*t+"ms"}})}),i.map(e=>{const t=d.points[e]||[];if(1!==t.length)return null;const a=t[0];return r.createElement("circle",{key:"single-point-"+e,cx:a.x,cy:a.y,r:4,className:"uh-trend-point",fill:p[e]||"#9aa4b2"})}),null!==s&&w?r.createElement(r.Fragment,{key:"hover-"+s},r.createElement("line",{x1:w.x,x2:w.x,y1:d.padding.top,y2:h,className:"uh-trend-cursor"}),i.map(e=>{const t=(d.points[e]||[])[s];return t?r.createElement("circle",{key:e,cx:t.x,cy:t.y,r:4,className:"uh-trend-point",fill:p[e]||"#9aa4b2"}):null})):null,n.map((a,n)=>{const s=(d.points[i[0]]||[])[n];if(!s)return null;const o=(d.points[i[0]]||[])[n+1],c=o?Math.max(8,o.x-s.x):n>0?Math.max(8,s.x-(d.points[i[0]]||[])[n-1].x):24;return r.createElement("rect",{key:Y(a,n),x:Math.max(d.padding.left,s.x-c/2),y:d.padding.top,width:c,height:u-d.padding.top-d.padding.bottom,className:"uh-trend-hit",tabIndex:0,role:"button","aria-label":V(a,t,!0)+" "+ie("total",t)+" "+b(a.total),onMouseEnter:()=>S(n),onMouseLeave:()=>l(null),onFocus:()=>S(n),onBlur:()=>l(null),onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),"function"==typeof e.onPointClick&&e.onPointClick(J(a)))},onClick:()=>{"function"==typeof e.onPointClick&&e.onPointClick(J(a))}})}),f.map(e=>{const a=(d.points[i[0]]||[])[e],s=n[e];return a&&s?r.createElement("text",{key:Y(s,e),x:a.x,y:272,className:"uh-trend-axis-label",textAnchor:0===e?"start":e===n.length-1?"end":"middle"},V(s,t,!1)):null})),k&&E?r.createElement("div",{className:"uh-trend-tooltip"+M+(N?" uh-visible":""),style:C,"aria-hidden":!N},r.createElement("strong",{className:"uh-trend-tooltip-title"},V(k,t,!0)),i.map(e=>r.createElement("div",{key:e,className:"uh-trend-tooltip-row",style:{color:p[e]||"#9aa4b2"}},r.createElement("span",{className:"uh-trend-dot",style:{background:p[e]||"#9aa4b2"}}),r.createElement("span",{className:"uh-trend-tooltip-label"},ie(e,t)),r.createElement("strong",{className:"uh-trend-tooltip-value"},b(function(e,t){return"total"===t?e.total:e.tokens&&Number.isFinite(e.tokens[t])?e.tokens[t]:0}(k,e)))))):null);return r.createElement("div",{className:"uh-panel uh-trend-panel"},r.createElement("div",{className:"uh-trend-head"},r.createElement("div",{},r.createElement("h3",{className:"uh-tbl-title uh-title-with-icon"},r.createElement(y,{name:"chart",size:16}),a("Token 使用趋势","Token Usage Trend")),r.createElement("div",{className:"uh-note"},e.rangeLabel||"")),x?r.createElement("div",{className:"uh-note"},a("点击数据点查看当日明细","Click a point to inspect that day")):null),z,x?r.createElement("div",{className:"uh-trend-legend"},["total","input","cacheRead","cacheWrite","output","reasoning"].map(a=>r.createElement("button",{key:a,type:"button",className:"uh-trend-legend-item"+(i.includes(a)?" uh-on":""),onClick:()=>(t=>{"function"==typeof e.onToggle&&e.onToggle(t)})(a),"aria-pressed":i.includes(a)},r.createElement("span",{className:"uh-trend-dot",style:{background:p[a]||"#9aa4b2"}}),ie(a,t)))):null)}),le=r.memo(function(e){const t="en"===e.language?"en":"zh",a=e.day,n=r.useMemo(()=>(a&&Array.isArray(a.perWorkspace)?a.perWorkspace:[]).slice().sort((e,t)=>t.turns-e.turns),[a]),i=void 0===a?null:H(a),s=null!==i&&i.input+i.output+i.cacheRead>0?"en"===t?"Tokens: Input "+b(i.input)+" · Cache hits "+b(i.cacheRead)+" · Output "+b(i.output):"Token:输入 "+b(i.input)+" · 缓存命中 "+b(i.cacheRead)+" · 输出 "+b(i.output):"";return r.createElement("div",{ref:e.tooltipRef,className:"uh-tip",style:{left:0,top:0,visibility:"hidden"}},r.createElement("div",{className:"uh-tip-date"},F(e.date,t)),void 0!==a&&a.turns>0?n.map(a=>r.createElement("div",{key:a.workspaceId,className:"uh-tip-row",onClick:()=>e.onWorkspaceSelect(a.workspaceId)},r.createElement("span",{className:"uh-dot",style:{background:P(e.workspaceIndexes.get(a.workspaceId)||0)}}),r.createElement("span",{},e.workspaceTitles.get(a.workspaceId)||("en"===t?"Unknown workspace":"未知工作区")),r.createElement("span",{className:"uh-n"},"en"===t?a.turns+" uses":a.turns+" 次"))):r.createElement("div",{className:"uh-empty",style:{padding:"6px 0"}},"en"===t?"No usage records for this day":"这一天没有使用记录"),""!==s?r.createElement("div",{className:"uh-tip-tokens"},s):null)}),oe=r.memo(function(e){const t="en"===e.language?"en":"zh",a=(e,a)=>"en"===t?a:e,n=Array.isArray(e.workspaces)?e.workspaces:[],l=Array.isArray(e.rows)?e.rows:[],o=e.workspaceId||null,[c,u]=r.useState(null),d=r.useRef(null),p=r.useRef(null),m=r.useRef({x:0,y:0}),h=r.useRef(null),g=r.useRef(null),b=r.useRef(e.onDateClick),f=r.useRef(e.onWorkspaceSelect);b.current=e.onDateClick,f.current=e.onWorkspaceSelect;const x=r.useMemo(()=>function(e,t,a){const r=String(e||"").split("-").map(Number),n=t?new Date(Date.UTC(r[0],r[1]-1,r[2])):new Date(r[0],r[1]-1,r[2]),l=t?n.getUTCDay():n.getDay(),o=s(n,-l,t),c=s(o,-364,t),u=[];for(let e=0;e<371;e+=1){const a=s(c,e,t);u.push({date:i(a,t),month:t?a.getUTCMonth():a.getMonth(),year:t?a.getUTCFullYear():a.getFullYear()})}const d=[];for(let e=0;e<53;e+=1){const t=u[7*e],r=e>0?u[7*(e-1)]:null;null!==r&&t.month===r.month||d.push({left:100*e/53+"%",text:O(t.year,t.month,a)})}return{cells:u,months:d,weekdays:"en"===a?["","Mon","","Wed","","Fri",""]:["","周一","","周三","","周五",""]}}(e.todayKey,!0===e.utc,t),[e.todayKey,e.utc,t]),v=r.useMemo(()=>{const e=new Map;for(const t of l)t&&"string"==typeof t.date&&e.set(t.date,t);return e},[l]),w=r.useMemo(()=>{const t=new Map,r=new Map,i=e.aliases&&"object"==typeof e.aliases?e.aliases:{};return n.forEach((e,n)=>{const s=i[e.id];t.set(e.id,"string"==typeof s&&""!==s?s:e.title||a("未知工作区","Unknown workspace")),r.set(e.id,n)}),{titles:t,indexes:r}},[n,e.aliases,t]),k=r.useCallback(()=>{h.current=null,null!==g.current&&(window.clearTimeout(g.current),g.current=null);const e=p.current;if(null===e)return;const t=m.current,a="undefined"==typeof window?1280:window.innerWidth;e.style.left=t.x+14+"px",e.style.top=t.y+12+"px",e.style.transform=t.x>.65*a?"translateX(calc(-100% - 28px))":"none",e.style.visibility="visible"},[]),E=r.useCallback((e,t)=>{m.current={x:e,y:t},null===h.current&&(h.current=window.requestAnimationFrame(k),g.current=window.setTimeout(()=>{null!==h.current&&(window.cancelAnimationFrame(h.current),k())},80))},[k]);r.useEffect(()=>()=>{null!==h.current&&window.cancelAnimationFrame(h.current),null!==g.current&&window.clearTimeout(g.current)},[]),r.useEffect(()=>{null!==c&&null===h.current&&(h.current=window.requestAnimationFrame(k))},[c,k]);const N=r.useCallback((e,t)=>{d.current!==e&&(d.current=e,u(e)),E(t.clientX,t.clientY)},[E]),M=r.useCallback(e=>{E(e.clientX,e.clientY)},[E]),C=r.useCallback(()=>{d.current=null,u(null)},[]),S=r.useCallback(e=>{"function"==typeof f.current&&f.current(e),C()},[C]),z=r.useMemo(()=>x.cells.map((t,a)=>{const n=v.get(t.date);let i=0;if(void 0!==n)if(!0===e.queryUsable||null===o)i=n.turns;else{const e=Array.isArray(n.perWorkspace)?n.perWorkspace.find(e=>e.workspaceId===o):void 0;void 0!==e&&(i=e.turns)}const s=null!==o&&void 0!==n&&n.turns>0&&0===i,l={background:q(W(i)),opacity:s?.22:1,animationDelay:1.2*a+"ms"};return t.date===e.todayKey&&(l.animation="uh-cell-in .45s ease both, uh-glow 3s ease-in-out .7s infinite"),r.createElement("div",{key:t.date,className:"uh-cell",style:l,onMouseEnter:e=>N(t.date,e),onMouseMove:M,onMouseLeave:C,onClick:()=>{"function"==typeof b.current&&b.current(t.date)}})}),[x.cells,v,e.queryUsable,e.todayKey,o,N,M,C]),A=null===c?void 0:v.get(c);return r.createElement("div",{className:"uh-panel"},r.createElement("div",{className:"uh-section-title"},r.createElement(y,{name:"calendar",size:16}),a("使用热力图","Usage Heatmap")),r.createElement("div",{className:"uh-hm-head"},r.createElement("div",{className:"uh-chips"},n.map((e,t)=>r.createElement("button",{key:e.id,className:"uh-chip"+(o===e.id?" uh-on":""),onClick:()=>S(e.id),title:e.path},r.createElement("span",{className:"uh-dot",style:{background:P(t)}}),r.createElement("span",{className:"uh-chip-title"},w.titles.get(e.id))))),r.createElement("div",{className:"uh-legend"},r.createElement("span",{},a("少","Less")),[0,1,2,3,4].map(e=>r.createElement("span",{key:e,className:"uh-cell",style:{background:q(e)}})),r.createElement("span",{},a("多","More")))),r.createElement("div",{className:"uh-hm-scroll"},r.createElement("div",{className:"uh-months"},x.months.map((e,t)=>r.createElement("span",{key:t,style:{left:e.left}},e.text))),r.createElement("div",{className:"uh-hm-body"},r.createElement("div",{className:"uh-wdays"},x.weekdays.map((e,t)=>r.createElement("span",{key:t},e))),r.createElement("div",{className:"uh-grid"},z))),r.createElement("div",{className:"uh-note",style:{marginTop:10}},a("口径:每完成一个回合点亮一次(含子代理会话);悬停查看按工作区明细,点击工作区可筛选热力图与明细表。日期按本地时区。","Methodology: one cell lights up for each completed turn, including subagent sessions. Hover to view workspace details; click a workspace to filter the heatmap and detail tables. English dates and day boundaries use UTC.")),null!==c?r.createElement(le,{date:c,day:A,language:t,tooltipRef:p,workspaceTitles:w.titles,workspaceIndexes:w.indexes,onWorkspaceSelect:S}):null)});function ce(e,t){return Number(e&&e.values&&e.values[t])||0}const ue=r.memo(function(e){return e.render()},(e,t)=>e.revision===t.revision),de=r.memo(function(e){const t="en"===e.language?"en":"zh",a=(e,a)=>"en"===t?a:e,n=Array.isArray(e.rows)?e.rows:[],i=r.useMemo(()=>n.find(t=>t.id===e.selectedId)||n[0]||null,[n,e.selectedId]),s=e=>e&&"ledger-recovery"===e.materialization?a("账本恢复","Ledger recovery"):e&&"ledger-reuse"===e.materialization?a("账本复用","Ledger reuse"):e&&"scan"===e.materialization?a("扫描","Scan"):e&&"live"===e.materialization?a("实时","Live"):a("未知","Unknown"),l=(e,a)=>e&&Number.isFinite(e.time)?new Date(e.time).toLocaleString("en"===t?"en-US":"zh-CN","en"===t?a?{timeZone:"UTC"}:{timeZone:"UTC",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}:a?void 0:{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"—",o=t=>{"function"==typeof e.onSelect&&e.onSelect(t)};return r.createElement("div",{className:"uh-panel uh-records-panel",ref:e.panelRef,style:{display:e.visible?"block":"none"}},r.createElement("div",{className:"uh-records-head"},r.createElement("div",{},r.createElement("h3",{className:"uh-tbl-title uh-title-with-icon"},r.createElement(y,{name:"list",size:16}),a("请求日志","Request Logs")),r.createElement("div",{className:"uh-note"},e.scopeLabel+(e.scopeUtc?" · UTC":""))),r.createElement("div",{className:"uh-actions"},e.loading?r.createElement("span",{className:"uh-query-note"},a("同步中…","Refreshing…")):null,r.createElement("button",{type:"button",className:"uh-refresh",title:a("导出当前日志","Export current logs"),onClick:e.onExport,disabled:e.exporting||!e.scopeAvailable},r.createElement(y,{name:"export",size:13}),e.exporting?a("导出中…","Exporting…"):a("导出日志","Export logs")))),""!==e.error?r.createElement("div",{className:"uh-records-error",role:"alert"},"stale"===e.error?a("数据已更新,正在重新加载日志…","Data changed; reloading logs…"):"audit-export"===e.error?a("日志导出失败","Unable to export logs"):a("日志加载失败,请重试","Unable to load logs")):null,r.createElement("div",{className:"uh-records-note"},a("按时间倒序显示可审计的 Token 调用;选择一行查看 turn / step 和完整 Token 分桶。","Token calls are newest first; select a row to inspect its turn / step and token buckets.")),0!==n.length||e.loading?r.createElement("div",{className:"uh-records-scroll"},r.createElement("div",{className:"uh-record-grid uh-record-header"},r.createElement("div",{},a("时间","Time")),r.createElement("div",{},a("Provider / 模型","Provider / Model")),r.createElement("div",{className:"uh-record-num"},"turn / step"),r.createElement("div",{className:"uh-record-num"},a("输入","Input")),r.createElement("div",{className:"uh-record-num"},a("缓存命中","Cache read")),r.createElement("div",{className:"uh-record-num"},a("缓存写入","Cache write")),r.createElement("div",{className:"uh-record-num"},a("输出","Output")),r.createElement("div",{className:"uh-record-num"},a("成本","Cost")),r.createElement("div",{},a("来源","Source"))),n.map(e=>r.createElement("div",{key:e.id,className:"uh-record-grid uh-record-row"+(i&&i.id===e.id?" uh-on":""),role:"button",tabIndex:0,"aria-pressed":i&&i.id===e.id,onClick:()=>o(e.id),onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),o(e.id))}},r.createElement("div",{className:"uh-record-time"},l(e,!1)),r.createElement("div",{className:"uh-record-model",title:e.model||""},e.model||a("未知模型","Unknown model"),e.requestedModel&&e.actualModel&&e.requestedModel!==e.actualModel?r.createElement("small",{},e.requestedModel+" → "+e.actualModel):null),r.createElement("div",{className:"uh-record-num"},(null===e.turn||void 0===e.turn?"—":e.turn)+" / "+(null===e.step||void 0===e.step?"—":e.step)),r.createElement("div",{className:"uh-record-num"},b(ce(e,"input"))),r.createElement("div",{className:"uh-record-num"},b(ce(e,"cacheRead"))),r.createElement("div",{className:"uh-record-num"},b(ce(e,"cacheWrite"))),r.createElement("div",{className:"uh-record-num"},b(ce(e,"output"))),r.createElement("div",{className:"uh-record-num uh-cost-num"},A(e,t)),r.createElement("div",{className:"uh-record-source"},s(e))))):r.createElement("div",{className:"uh-empty"},a("当前范围没有可审计的 Token 调用","No auditable Token calls in this scope")),r.createElement("div",{className:"uh-records-footer"},r.createElement("span",{className:"uh-note"},n.length>0?e.hasMore?a("已显示 "+n.length+" 条,继续加载可查看更多",n.length+" shown; load more for additional records"):a("共显示 "+n.length+" 条",n.length+" records shown"):""),e.hasMore?r.createElement("button",{type:"button",className:"uh-refresh",onClick:e.onLoadMore,disabled:e.loading},e.loading?a("加载中…","Loading…"):a("加载更多","Load more")):null),i?r.createElement("div",{className:"uh-record-detail"},r.createElement("div",{className:"uh-record-detail-head"},r.createElement("strong",{},a("选中调用","Selected call")),r.createElement("span",{className:"uh-note"},l(i,!0))),r.createElement("div",{className:"uh-record-detail-meta"},r.createElement("span",{},(i.provider||a("未知供应商","Unknown provider"))+" / "+(i.actualModel||i.requestedModel||i.model||a("未知模型","Unknown model"))),r.createElement("span",{},"turn "+(null===i.turn||void 0===i.turn?"—":i.turn)+" · step "+(null===i.step||void 0===i.step?"—":i.step)),r.createElement("span",{},a("来源:","Source: ")+s(i)),r.createElement("span",{},a("计价模型:","Pricing model: ")+(i.cost&&i.cost.pricingModel?i.cost.pricingModel:a("未计价","unpriced")))),r.createElement("div",{className:"uh-record-token-strip"},["input","cacheRead","cacheWrite","output","reasoning"].map(e=>r.createElement("div",{key:e},r.createElement("span",{},"cacheRead"===e?a("缓存命中","Cache read"):"cacheWrite"===e?a("缓存写入","Cache write"):"reasoning"===e?a("推理","Reasoning"):"input"===e?a("输入","Input"):a("输出","Output")),r.createElement("strong",{},b(ce(i,e))))),r.createElement("div",{className:"uh-record-token-total"},r.createElement("span",{},a("总处理","Total")),r.createElement("strong",{},b(ce(c=i,"input")+ce(c,"cacheRead")+ce(c,"cacheWrite")+ce(c,"output")+ce(c,"reasoning")))),r.createElement("div",{className:"uh-record-token-total"},r.createElement("span",{},a("成本","Cost")),r.createElement("strong",{},A(i,t))))):null);var c},function(e,t){return e.visible===t.visible&&e.scopeLabel===t.scopeLabel&&e.scopeUtc===t.scopeUtc&&e.scopeAvailable===t.scopeAvailable&&e.loading===t.loading&&e.exporting===t.exporting&&e.error===t.error&&e.rows===t.rows&&e.selectedId===t.selectedId&&e.hasMore===t.hasMore&&e.language===t.language&&e.actionKey===t.actionKey});function pe(e){const t=Array.isArray(e.options)?e.options:[],a=void 0===e.value||null===e.value?"":String(e.value),n=t.find(e=>String(e.value)===a),[i,s]=r.useState(!1),l=r.useRef(null);return r.useEffect(()=>{if(!i||"undefined"==typeof document)return;const e=e=>{l.current&&!l.current.contains(e.target)&&s(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[i]),r.createElement("div",{className:"uh-language-menu uh-filter-menu"+(e.className?" "+e.className:"")+(i?" uh-open":""),ref:l,onKeyDown:e=>{"Escape"===e.key&&i&&(e.preventDefault(),e.stopPropagation(),s(!1))}},r.createElement("button",{type:"button",className:"uh-language-trigger uh-filter-trigger"+(i?" uh-open":""),title:n?n.label:e.label,"aria-label":e.ariaLabel||e.label,"aria-haspopup":"listbox","aria-expanded":i,onClick:()=>s(e=>!e)},r.createElement(y,{name:e.icon||"chart",size:14}),r.createElement("span",{className:"uh-filter-label"},n?n.label:e.label),r.createElement(y,{name:"chevron",size:13,className:"uh-language-caret"})),i?r.createElement("div",{className:"uh-language-options uh-filter-options",role:"listbox","aria-label":e.ariaLabel||e.label},t.map(t=>{const n=String(t.value),i=n===a;return r.createElement("button",{key:n,type:"button",role:"option","aria-selected":i,className:"uh-language-option"+(i?" uh-on":""),onClick:()=>{return t=n,"function"==typeof e.onChange&&e.onChange(t),void s(!1);var t}},r.createElement(y,{name:e.icon||"chart",size:14}),r.createElement("span",{className:"uh-filter-option-label"},t.label),i?r.createElement(y,{name:"check",size:14,className:"uh-language-option-check"}):null)})):null)}const me="dsh-all-usage/styles.css";if("undefined"!=typeof document){let e=document.querySelector("style[data-plugin-css="+JSON.stringify(me)+"]");null===e&&(e=document.createElement("style"),e.dataset.plugin="dsh-all-usage",e.dataset.pluginCss=me,document.head.appendChild(e)),e.textContent='\n.uh-page { display:flex; flex-direction:column; gap:14px; padding:2px 2px 28px; font-family:inherit; }\n.uh-head { position:relative; z-index:20; display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }\n.uh-title { margin:0; font-size:15px; font-weight:600; color:var(--dsw-alias-label-primary); }\n.uh-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }\n.uh-language-menu, .uh-filter-menu { position:relative; z-index:12; }\n.uh-filter-menu { flex:0 1 auto; min-width:0; }\n.uh-filter-workspace { width:180px; }\n.uh-filter-provider { width:180px; }\n.uh-filter-model { width:260px; }\n.uh-filter-menu.uh-open { z-index:14; }\n.uh-language-trigger { display:inline-flex; align-items:center; gap:6px; min-height:30px; padding:4px 9px 4px 10px; border:1px solid transparent; border-radius:15px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 7%, var(--dsw-alias-bg-layer-1)); color:var(--dsw-alias-label-primary); font:inherit; font-size:12px; font-weight:600; line-height:1; cursor:pointer; transition:border-color .15s ease, background-color .15s ease, transform .1s ease; }\n.uh-filter-trigger { width:100%; min-width:0; justify-content:flex-start; }\n.uh-language-trigger:hover, .uh-language-trigger.uh-open { border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 58%, var(--dsw-alias-border-l2)); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 13%, var(--dsw-alias-bg-layer-1)); }\n.uh-language-trigger:active { transform:scale(.96); }\n.uh-language-label { min-width:26px; text-align:left; }\n.uh-filter-label { min-width:0; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:left; }\n.uh-language-caret { color:var(--dsw-alias-label-secondary); transition:transform .18s ease; }\n.uh-language-trigger.uh-open .uh-language-caret { transform:rotate(180deg); }\n.uh-language-menu.uh-open { z-index:30; }\n.uh-language-options { position:absolute; top:calc(100% + 7px); right:0; min-width:142px; padding:5px; border:1px solid var(--dsw-alias-border-l2); border-radius:12px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 14px 28px color-mix(in srgb, #000 24%, transparent); animation:uh-menu-in .16s ease both; }\n.uh-filter-options { left:0; right:auto; min-width:100%; max-width:300px; }\n.uh-language-option { display:flex; align-items:center; gap:8px; width:100%; min-height:32px; padding:6px 8px; border:0; border-radius:8px; background:transparent; color:var(--dsw-alias-label-primary); font:inherit; font-size:12px; text-align:left; cursor:pointer; transition:background-color .14s ease, color .14s ease; }\n.uh-filter-option-label { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-language-option:hover, .uh-language-option:focus-visible { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-2)); outline:0; }\n.uh-language-option.uh-on { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 19%, var(--dsw-alias-bg-layer-2)); color:var(--dsw-alias-label-primary); font-weight:600; }\n.uh-language-option-check { margin-left:auto; color:var(--dsw-alias-brand-primary); }\n.uh-range { display:inline-flex; border:1px solid var(--dsw-alias-border-l2); border-radius:8px; overflow:hidden; }\n.uh-range button { border:0; background:transparent; color:var(--dsw-alias-label-secondary); padding:4px 12px; font-size:12px; cursor:pointer; font-family:inherit; transition:background-color .15s ease, color .15s ease; }\n.uh-range button + button { border-left:1px solid var(--dsw-alias-border-l2); }\n.uh-range button.uh-on { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, var(--dsw-alias-bg-layer-2)); color:var(--dsw-alias-label-primary); font-weight:600; }\n.uh-custom-range { display:grid; grid-template-columns:minmax(180px, 1fr) auto auto; gap:10px 14px; align-items:end; padding:12px; border:1px solid var(--dsw-alias-border-l1); border-radius:10px; background:var(--dsw-alias-bg-layer-1); }\n.uh-custom-range-meta { min-width:0; }\n.uh-custom-range-title { display:flex; align-items:center; gap:7px; color:var(--dsw-alias-label-primary); font-size:13px; font-weight:600; }\n.uh-custom-range-note { margin-top:3px; color:var(--dsw-alias-label-secondary); font-size:11px; line-height:1.45; }\n.uh-custom-range-fields { display:grid; grid-template-columns:repeat(2, minmax(136px, 1fr)); gap:8px; }\n.uh-custom-range-field { display:flex; flex-direction:column; gap:4px; color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-custom-range-field input { min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:3px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:12px; outline:none; }\n.uh-custom-range-field input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-custom-range-actions { display:flex; gap:6px; }\n.uh-custom-range-cancel, .uh-custom-range-apply { min-height:30px; border-radius:6px; padding:4px 10px; font:inherit; font-size:12px; cursor:pointer; }\n.uh-custom-range-cancel { border:1px solid var(--dsw-alias-border-l2); background:transparent; color:var(--dsw-alias-label-primary); }\n.uh-custom-range-apply { border:1px solid var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 16%, transparent); color:var(--dsw-alias-label-primary); }\n.uh-custom-range-apply:disabled { opacity:.48; cursor:not-allowed; }\n.uh-custom-range-error { grid-column:1 / -1; color:#d92d20; font-size:12px; }\n.uh-refresh { border:1px solid var(--dsw-alias-border-l2); background:var(--dsw-alias-bg-layer-1); color:var(--dsw-alias-label-primary); border-radius:8px; padding:4px 12px; font-size:12px; cursor:pointer; font-family:inherit; transition:border-color .15s ease, color .15s ease, transform .1s ease; }\n.uh-refresh:hover { border-color:var(--dsw-alias-brand-primary); }\n.uh-refresh:active, .uh-chip:active, .uh-range button:active { transform:scale(.96); }\n.uh-alias-panel-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; font-size:13px; font-weight:600; color:var(--dsw-alias-label-primary); }\n.uh-alias-close { border:0; background:transparent; color:var(--dsw-alias-label-secondary); font-size:12px; cursor:pointer; font-family:inherit; padding:0; transition:color .15s ease; }\n.uh-alias-close:hover { color:var(--dsw-alias-brand-primary); }\n.uh-alias-list { display:grid; grid-template-columns:repeat(auto-fill, minmax(250px, 1fr)); gap:8px 16px; max-height:240px; overflow-y:auto; }\n.uh-alias-item { display:flex; align-items:center; gap:8px; min-width:0; }\n.uh-alias-folder { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:11px; color:var(--dsw-alias-label-secondary); }\n.uh-alias-input { flex:none; width:150px; border:1px solid var(--dsw-alias-border-l2); background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); border-radius:6px; padding:3px 8px; font-size:12px; font-family:inherit; outline:none; transition:border-color .15s ease; }\n.uh-alias-input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-alias-panel-foot { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:10px; padding-top:10px; border-top:1px solid var(--dsw-alias-border-l1); }\n.uh-alias-ok { border:1px solid var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 16%, transparent); color:var(--dsw-alias-label-primary); border-radius:6px; font-size:12px; padding:3px 12px; cursor:pointer; font-family:inherit; flex:none; transition:transform .1s ease; }\n.uh-alias-ok:active { transform:scale(.96); }\n.uh-anim-panel { animation:uh-panel-in .28s ease both; }\n.uh-pricing-panel { display:flex; flex-direction:column; gap:12px; }\n.uh-pricing-head, .uh-pricing-toolbar, .uh-pricing-section-head, .uh-pricing-foot { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; }\n.uh-pricing-note { color:var(--dsw-alias-label-secondary); font-size:12px; line-height:1.55; }\n.uh-pricing-toolbar { padding:10px 0; border-top:1px solid var(--dsw-alias-border-l1); border-bottom:1px solid var(--dsw-alias-border-l1); }\n.uh-pricing-switch { display:inline-flex; align-items:center; gap:7px; color:var(--dsw-alias-label-primary); font-size:12px; }\n.uh-pricing-section { display:flex; flex-direction:column; gap:8px; }\n.uh-pricing-table-wrap { max-height:392px; overflow-x:auto; overflow-y:scroll; scrollbar-gutter:stable; scrollbar-width:auto; scrollbar-color:#707780 #1d1f22; border:1px solid var(--dsw-alias-border-l1); border-radius:8px; background:var(--dsw-alias-bg-layer-2); }\n.uh-pricing-model-table { width:100%; min-width:1080px; border-collapse:collapse; table-layout:fixed; font-size:11px; }\n.uh-pricing-model-table th, .uh-pricing-model-table td { min-width:0; padding:8px 9px; border-bottom:1px solid var(--dsw-alias-border-l1); text-align:left; vertical-align:middle; }\n.uh-pricing-model-table th { position:sticky; top:0; z-index:1; color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-2); font-weight:650; white-space:nowrap; }\n.uh-pricing-model-table th:nth-child(1) { width:24%; }\n.uh-pricing-model-table th:nth-child(2) { width:84px; }\n.uh-pricing-model-table th:nth-child(3) { width:20%; }\n.uh-pricing-model-table th:nth-child(4) { width:96px; }\n.uh-pricing-model-table th:nth-child(n+5) { width:100px; text-align:right; }\n.uh-pricing-model-table td:nth-child(n+5) { text-align:right; }\n.uh-pricing-model-table tbody tr:last-child td { border-bottom:0; }\n.uh-pricing-model-table tbody tr:not(.uh-pricing-tier-row):hover { background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 65%, transparent); }\n.uh-pricing-model-name, .uh-pricing-model-target { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-primary); }\n.uh-pricing-model-rate { color:var(--dsw-alias-label-secondary); font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-pricing-status, .uh-pricing-tier-badge { display:inline-flex; justify-content:center; padding:3px 6px; border-radius:6px; font-size:10px; font-weight:650; white-space:nowrap; }\n.uh-pricing-status-priced { color:#157347; background:color-mix(in srgb, #30d158 22%, transparent); }\n.uh-pricing-status-unpriced, .uh-pricing-status-ambiguous, .uh-pricing-status-unsupported { color:#9a5b00; background:color-mix(in srgb, #ff9f0a 20%, transparent); }\n.uh-pricing-tier-badge { color:var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent); }\n.uh-pricing-tier-badge.uh-flat { color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-1); }\n.uh-pricing-tier-row > td { padding:0 9px 8px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 36%, transparent); }\n.uh-pricing-tier-details > summary { display:inline-flex; align-items:center; gap:6px; min-height:28px; color:var(--dsw-alias-label-secondary); cursor:pointer; list-style:none; font-size:11px; }\n.uh-pricing-tier-details > summary::-webkit-details-marker { display:none; }\n.uh-pricing-tier-caret { transition:transform .15s ease; }\n.uh-pricing-tier-details[open] .uh-pricing-tier-caret { transform:rotate(180deg); }\n.uh-pricing-tier-context { margin-left:6px; color:var(--dsw-alias-label-tertiary, var(--dsw-alias-label-secondary)); }\n.uh-pricing-tier-table { width:100%; margin:2px 0 5px; border:1px solid var(--dsw-alias-border-l1); border-radius:6px; border-collapse:separate; border-spacing:0; overflow:hidden; table-layout:fixed; background:var(--dsw-alias-bg-base); }\n.uh-pricing-tier-table th, .uh-pricing-tier-table td { position:static; width:auto !important; padding:6px 8px; border-bottom:1px solid var(--dsw-alias-border-l1); text-align:right !important; background:transparent; font-size:10px; }\n.uh-pricing-tier-table th:first-child, .uh-pricing-tier-table td:first-child { width:30% !important; text-align:left !important; }\n.uh-pricing-tier-table tbody tr:last-child td { border-bottom:0; }\n.uh-pricing-tier-table tbody tr:hover { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, transparent); }\n.uh-pricing-used-model-picker { position:relative; z-index:2; min-width:0; }\n.uh-pricing-used-model-picker:focus-within { z-index:30; }\n.uh-pricing-used-model-input { box-sizing:border-box; width:100%; min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:4px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:11px; outline:none; }\n.uh-pricing-used-model-input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-pricing-used-model-options { top:calc(100% + 7px); left:0; right:auto; width:100%; min-width:280px; max-height:240px; overflow-y:auto; z-index:40; }\n.uh-pricing-model-search { position:relative; z-index:2; min-width:0; }\n.uh-pricing-model-search:focus-within { z-index:30; }\n.uh-pricing-model-search-input { box-sizing:border-box; width:100%; min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:4px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:11px; outline:none; }\n.uh-pricing-model-search-input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-pricing-model-options { top:calc(100% + 7px); left:0; right:auto; width:100%; min-width:280px; max-height:240px; overflow-y:auto; z-index:40; }\n.uh-pricing-model-option { align-items:flex-start; }\n.uh-pricing-model-option-name { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-pricing-model-option-id { margin-left:auto; padding-left:10px; color:var(--dsw-alias-label-secondary); font-size:10px; white-space:nowrap; }\n.uh-pricing-edit-row { display:grid; grid-template-columns:minmax(240px,1.2fr) minmax(260px,1.3fr) minmax(78px,.45fr) 32px; gap:10px; align-items:center; min-width:650px; }\n.uh-pricing-price-row { grid-template-columns:repeat(5,minmax(108px,1fr)) 32px; min-width:650px; }\n.uh-pricing-price-head { display:grid; grid-template-columns:repeat(5,minmax(108px,1fr)) 32px; gap:10px; align-items:center; min-width:650px; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-price-head span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-pricing-edit-row input, .uh-pricing-tier-edit-row input { box-sizing:border-box; min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:4px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:11px; outline:none; }\n.uh-pricing-edit-row input:focus, .uh-pricing-tier-edit-row input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-pricing-edit-row .uh-refresh, .uh-pricing-tier-edit-row .uh-refresh { min-height:30px; padding:0; }\n.uh-pricing-overrides { display:flex; flex-direction:column; min-width:760px; }\n.uh-pricing-override { display:flex; flex-direction:column; gap:8px; padding:10px 0; border-bottom:1px solid var(--dsw-alias-border-l1); }\n.uh-pricing-override:last-child { border-bottom:0; }\n.uh-pricing-tier-editor { margin-left:10px; padding-left:12px; border-left:2px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 34%, var(--dsw-alias-border-l1)); }\n.uh-pricing-tier-editor-head { display:flex; align-items:center; justify-content:space-between; gap:10px; min-height:30px; }\n.uh-pricing-tier-editor-title { display:flex; align-items:baseline; gap:8px; min-width:0; }\n.uh-pricing-tier-editor-title strong { font-size:11px; }\n.uh-pricing-tier-editor-title span { color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-tier-edit-head, .uh-pricing-tier-edit-row { display:grid; grid-template-columns:minmax(132px,.85fr) repeat(4,minmax(108px,1fr)) 32px; gap:10px; align-items:center; min-width:690px; }\n.uh-pricing-tier-edit-head { margin:5px 0; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-tier-edit-row { margin-top:7px; }\n.uh-pricing-tier-edit-row.uh-invalid input { border-color:var(--dsw-alias-warning, #a55b00); }\n.uh-pricing-tier-empty { padding:5px 0; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-error { color:var(--dsw-alias-warning, #a55b00); font-size:12px; line-height:1.45; }\n.uh-pricing-foot { padding-top:4px; }\n.uh-cost-num { color:var(--dsw-alias-label-primary); }\n.uh-progress { font-size:12px; color:var(--dsw-alias-label-secondary); display:flex; align-items:center; gap:10px; }\n.uh-sync-health { margin-top:8px; padding:8px 12px; display:flex; align-items:center; flex-wrap:wrap; gap:6px; border:1px solid var(--dsw-alias-border-l1); border-radius:10px; color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-1); font-size:11px; line-height:1.45; }\n.uh-sync-health.uh-stale { color:var(--dsw-alias-warning, #a55b00); border-color:color-mix(in srgb, var(--dsw-alias-warning, #d9822b) 45%, var(--dsw-alias-border-l1)); }\n.uh-sync-retry { border:0; background:transparent; color:inherit; font:inherit; text-decoration:underline; cursor:pointer; padding:0 2px; }\n.uh-trend-panel { min-height:300px; animation:uh-panel-in .38s ease both; }\n.uh-trend-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:10px; }\n.uh-trend-chart-wrap { position:relative; min-height:250px; width:100%; overflow:hidden; }\n.uh-trend-stage { display:grid; place-items:center; min-height:250px; width:100%; }\n.uh-trend-message { color:var(--dsw-alias-label-secondary); font-size:12px; }\n.uh-trend-spinner { width:24px; height:24px; border:2px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, var(--dsw-alias-border-l2)); border-top-color:var(--dsw-alias-brand-primary); border-radius:50%; animation:uh-spinner-turn .78s linear infinite; }\n.uh-trend-svg { display:block; width:100%; height:auto; min-height:220px; }\n.uh-trend-grid { stroke:var(--dsw-alias-border-l1); stroke-width:1; stroke-dasharray:3 4; opacity:.8; }\n.uh-trend-cursor { stroke:var(--dsw-alias-label-secondary); stroke-width:1; stroke-dasharray:3 4; opacity:.65; pointer-events:none; }\n.uh-trend-point { stroke:var(--dsw-alias-bg-layer-1); stroke-width:2; vector-effect:non-scaling-stroke; pointer-events:none; }\n.uh-trend-axis-label { fill:var(--dsw-alias-label-secondary); font-size:11px; font-family:inherit; }\n.uh-trend-line { fill:none; stroke-width:2.2; vector-effect:non-scaling-stroke; stroke-linecap:round; stroke-linejoin:round; opacity:.22; }\n.uh-trend-line-draw { fill:none; stroke-width:2.2; vector-effect:non-scaling-stroke; stroke-linecap:round; stroke-linejoin:round; stroke-dasharray:var(--uh-draw-length); stroke-dashoffset:var(--uh-draw-length); opacity:.96; pointer-events:none; animation:uh-trend-draw .95s cubic-bezier(.22,.61,.36,1) both; }\n.uh-trend-area { opacity:1; animation:uh-trend-fill .8s ease; }\n.uh-trend-hit { fill:transparent; cursor:crosshair; outline:none; }\n.uh-trend-hit:focus { fill:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent); outline:1px solid var(--dsw-alias-brand-primary); outline-offset:2px; }\n.uh-trend-tooltip { position:absolute; z-index:4; min-width:166px; padding:10px 11px; border:1px solid color-mix(in srgb, var(--dsw-alias-border-l2) 88%, transparent); border-radius:8px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 94%, transparent); box-shadow:0 10px 24px rgba(0,0,0,.22); backdrop-filter:blur(10px); color:var(--dsw-alias-label-primary); font-size:12px; line-height:1.45; pointer-events:none; opacity:0; visibility:hidden; transform:translate(14px,-50%) scale(.985); transform-origin:left center; transition:left .16s cubic-bezier(.22,.61,.36,1), top .16s cubic-bezier(.22,.61,.36,1), opacity .12s ease, transform .16s cubic-bezier(.22,.61,.36,1), visibility 0s linear .16s; }\n.uh-trend-tooltip.uh-left { transform:translate(calc(-100% - 14px),-50%) scale(.985); transform-origin:right center; }\n.uh-trend-tooltip.uh-visible { opacity:1; visibility:visible; transform:translate(14px,-50%) scale(1); transition-delay:0s; }\n.uh-trend-tooltip.uh-left.uh-visible { transform:translate(calc(-100% - 14px),-50%) scale(1); }\n.uh-trend-tooltip-title { display:block; margin-bottom:6px; color:var(--dsw-alias-label-primary); font-size:12px; font-weight:650; }\n.uh-trend-tooltip-row { display:grid; grid-template-columns:8px minmax(0,1fr) auto; align-items:center; gap:7px; min-width:0; margin-top:3px; font-size:11px; }\n.uh-trend-tooltip-row .uh-trend-dot { width:8px; height:8px; margin:0; }\n.uh-trend-tooltip-label { overflow:hidden; font-weight:600; text-overflow:ellipsis; white-space:nowrap; }\n.uh-trend-tooltip-value { color:inherit; font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-trend-dot { display:inline-block; width:7px; height:7px; margin-right:5px; border-radius:50%; vertical-align:1px; }\n.uh-trend-legend { display:flex; flex-wrap:wrap; gap:5px 8px; margin-top:5px; }\n.uh-trend-legend-item { display:inline-flex; align-items:center; gap:3px; border:0; border-radius:7px; padding:3px 6px; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:11px; cursor:pointer; transition:color .15s ease; }\n.uh-trend-legend-item:hover { background:var(--dsw-alias-bg-layer-2); color:var(--dsw-alias-label-primary); }\n.uh-trend-legend-item.uh-on { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-primary); }\n.uh-filter-bar { position:relative; z-index:10; display:flex; align-items:center; flex-wrap:wrap; gap:7px; }\n.uh-filter-clear { border:0; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:11px; cursor:pointer; text-decoration:underline; }\n.uh-query-note { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-detail-tabs { display:flex; align-items:center; flex-wrap:wrap; gap:4px; padding:4px; border:1px solid var(--dsw-alias-border-l1); border-radius:9px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 58%, transparent); }\n.uh-detail-tab { display:inline-flex; align-items:center; gap:6px; min-height:32px; padding:5px 11px; border:0; border-radius:7px; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:12px; cursor:pointer; transition:background-color .15s ease, color .15s ease, transform .12s ease; }\n.uh-detail-tab:hover { color:var(--dsw-alias-label-primary); background:var(--dsw-alias-bg-layer-2); }\n.uh-detail-tab.uh-on { color:var(--dsw-alias-label-primary); background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 3px rgba(0,0,0,.14); }\n.uh-records-panel { animation:uh-panel-in .28s ease both; }\n.uh-records-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:7px; }\n.uh-records-note { margin:8px 0 10px; color:var(--dsw-alias-label-secondary); font-size:11px; line-height:1.45; }\n.uh-records-error { margin:7px 0; color:var(--dsw-alias-warning, #a55b00); font-size:11px; }\n.uh-records-scroll { overflow:auto; border:1px solid var(--dsw-alias-border-l1); border-radius:8px; }\n.uh-record-grid { display:grid; grid-template-columns:112px minmax(190px,1.45fr) 78px repeat(4,minmax(76px,.72fr)) 96px 82px; gap:0; min-width:900px; align-items:center; }\n.uh-record-grid > div { min-width:0; padding:8px 7px; border-bottom:1px solid var(--dsw-alias-border-l1); font-size:11px; }\n.uh-record-header { color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-2); font-weight:600; }\n.uh-record-header > div { white-space:nowrap; }\n.uh-record-row { color:var(--dsw-alias-label-primary); cursor:pointer; outline:none; transition:background-color .14s ease, box-shadow .14s ease; }\n.uh-record-row:hover { background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 68%, transparent); }\n.uh-record-row.uh-on { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, var(--dsw-alias-bg-layer-1)); box-shadow:inset 3px 0 var(--dsw-alias-brand-primary); }\n.uh-record-row:focus-visible { box-shadow:inset 0 0 0 1px var(--dsw-alias-brand-primary); }\n.uh-record-row:last-child > div { border-bottom:0; }\n.uh-record-time, .uh-record-num { color:var(--dsw-alias-label-secondary); font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-record-num { text-align:right; }\n.uh-record-model { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:550; }\n.uh-record-model small { display:block; overflow:hidden; color:var(--dsw-alias-label-secondary); font-size:10px; font-weight:400; text-overflow:ellipsis; white-space:nowrap; }\n.uh-record-source { color:var(--dsw-alias-label-secondary); white-space:nowrap; }\n.uh-records-footer { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:9px; }\n.uh-record-detail { margin-top:12px; padding:10px 11px; border-top:1px solid var(--dsw-alias-border-l2); background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 42%, transparent); animation:uh-detail-in .24s ease both; }\n.uh-record-detail-head, .uh-record-detail-meta { display:flex; align-items:center; flex-wrap:wrap; gap:7px 14px; }\n.uh-record-detail-head { justify-content:space-between; margin-bottom:5px; color:var(--dsw-alias-label-primary); font-size:12px; }\n.uh-record-detail-meta { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-record-token-strip { display:grid; grid-template-columns:repeat(5,minmax(72px,1fr)) repeat(2,minmax(82px,1.1fr)); gap:6px; margin-top:9px; }\n.uh-record-token-strip > div { display:flex; flex-direction:column; gap:2px; min-width:0; padding:6px 7px; border-radius:6px; background:var(--dsw-alias-bg-layer-2); }\n.uh-record-token-strip span { color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-record-token-strip strong { color:var(--dsw-alias-label-primary); font-size:12px; font-variant-numeric:tabular-nums; }\n.uh-record-token-total { border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l1)) !important; }\n@keyframes uh-detail-in { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }\n@media (max-width:640px) {\n .uh-trend-head { flex-direction:column; }\n .uh-filter-menu { flex:1 1 130px; width:auto; }\n .uh-filter-trigger { max-width:100%; }\n .uh-trend-tooltip { min-width:116px; }\n .uh-records-head { flex-direction:column; }\n .uh-record-token-strip { grid-template-columns:repeat(2,minmax(0,1fr)); }\n .uh-record-token-total { grid-column:1 / -1; }\n .uh-pricing-head { align-items:flex-start; }\n .uh-pricing-toolbar { align-items:flex-start; }\n .uh-pricing-section-head { align-items:center; }\n .uh-pricing-edit-row { grid-template-columns:minmax(0,1fr) 36px; min-width:0; width:100%; }\n .uh-pricing-edit-row > .uh-pricing-used-model-picker,\n .uh-pricing-edit-row > .uh-pricing-model-search,\n .uh-pricing-price-row > input { grid-column:1 / -1; }\n .uh-pricing-edit-row > input[type=\'number\'] { grid-column:1; }\n .uh-pricing-edit-row > .uh-icon-button { grid-column:2; }\n .uh-pricing-price-head { display:none; }\n .uh-pricing-overrides { min-width:0; width:100%; }\n .uh-pricing-override { min-width:0; }\n .uh-pricing-price-row { grid-template-columns:minmax(0,1fr) 36px; min-width:0; }\n .uh-pricing-price-row > input[type=\'number\'] { grid-column:1 / -1; }\n .uh-pricing-tier-editor { margin-left:0; padding-left:0; border-left:0; }\n .uh-pricing-tier-editor-head { align-items:flex-start; flex-wrap:wrap; }\n .uh-pricing-tier-editor-title { flex-direction:column; gap:2px; }\n .uh-pricing-tier-edit-head { display:none; }\n .uh-pricing-tier-edit-row { grid-template-columns:minmax(0,1fr) 36px; min-width:0; padding:8px; border:1px solid var(--dsw-alias-border-l1); border-radius:6px; }\n .uh-pricing-tier-edit-row > input { grid-column:1 / -1; }\n .uh-pricing-tier-edit-row > .uh-icon-button { grid-column:2; }\n .uh-pricing-tier-context { display:block; margin:2px 0 0; }\n}\n.uh-bar { flex:1; height:6px; border-radius:3px; background:var(--dsw-alias-bg-layer-2); overflow:hidden; max-width:340px; }\n.uh-fill { height:100%; background:var(--dsw-alias-brand-primary); border-radius:3px; transition:width .3s ease; }\n.uh-cards { display:grid; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr)); gap:10px; }\n.uh-card { background:var(--dsw-alias-bg-layer-1); border:1px solid var(--dsw-alias-border-l1); border-radius:12px; padding:12px 14px; display:flex; flex-direction:column; gap:6px; min-height:86px; animation:uh-card-in .45s ease both; transition:transform .18s ease, border-color .18s ease, box-shadow .18s ease; }\n.uh-card:hover { transform:translateY(-2px); border-color:var(--dsw-alias-border-l2); box-shadow:0 6px 18px rgba(0,0,0,.10); }\n.uh-card-label { font-size:12px; color:var(--dsw-alias-label-secondary); }\n.uh-card-value { font-size:20px; font-weight:650; color:var(--dsw-alias-label-primary); line-height:1.2; }\n.uh-card-sub { font-size:11px; color:var(--dsw-alias-label-secondary); line-height:1.55; }\n.uh-wsbars { display:flex; flex-direction:column; gap:6px; margin-top:2px; }\n.uh-wsbar { display:flex; flex-direction:column; gap:3px; cursor:pointer; padding:2px 6px; margin:0 -6px; border-radius:8px; transition:background-color .15s ease; }\n.uh-wsbar:hover { background:var(--dsw-alias-bg-layer-2); }\n.uh-wsbar.uh-sel { outline:1px solid var(--dsw-alias-brand-primary); }\n.uh-wsbar-top { display:flex; align-items:center; gap:6px; min-width:0; }\n.uh-wsbar-title { font-size:12px; color:var(--dsw-alias-label-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0; }\n.uh-wsbar-num { font-size:11px; font-variant-numeric:tabular-nums; color:var(--dsw-alias-label-secondary); flex:none; }\n.uh-panel { background:var(--dsw-alias-bg-layer-1); border:1px solid var(--dsw-alias-border-l1); border-radius:12px; padding:14px; }\n.uh-hm-head { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:10px; }\n.uh-chips { display:flex; flex-wrap:wrap; gap:6px; }\n.uh-chip { display:inline-flex; align-items:center; gap:6px; border:1px solid var(--dsw-alias-border-l2); background:transparent; color:var(--dsw-alias-label-primary); border-radius:999px; padding:2px 10px; font-size:11px; cursor:pointer; font-family:inherit; max-width:190px; transition:border-color .15s ease, background-color .15s ease, color .15s ease, transform .1s ease; }\n.uh-chip .uh-chip-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-chip.uh-on { border-color:var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent); }\n.uh-dot { width:8px; height:8px; border-radius:50%; flex:none; }\n.uh-legend { display:flex; align-items:center; gap:4px; font-size:11px; color:var(--dsw-alias-label-secondary); }\n.uh-legend .uh-cell { width:10px; height:10px; border-radius:2px; animation:none; }\n.uh-hm-scroll { overflow-x:auto; padding-bottom:2px; }\n.uh-months { position:relative; height:16px; margin-left:30px; width:calc(100% - 30px); min-width:686px; font-size:10px; color:var(--dsw-alias-label-secondary); }\n.uh-months span { position:absolute; top:0; }\n.uh-hm-body { display:flex; gap:6px; min-width:0; }\n.uh-wdays { display:grid; grid-template-rows:repeat(7,10px); gap:3px; font-size:10px; color:var(--dsw-alias-label-secondary); text-align:right; width:24px; }\n.uh-wdays span { line-height:10px; }\n.uh-grid { flex:1 1 auto; min-width:686px; display:grid; grid-auto-flow:column; grid-template-columns:repeat(53,minmax(10px,1fr)); grid-template-rows:repeat(7,minmax(10px,auto)); gap:3px; }\n.uh-cell { width:100%; height:auto; min-width:10px; aspect-ratio:1; border-radius:2px; background:var(--dsw-alias-bg-layer-2); animation:uh-cell-in .45s ease both; transition:transform .12s ease, box-shadow .12s ease; }\n.uh-cell:hover { transform:scale(1.35); box-shadow:0 1px 6px rgba(0,0,0,.28); position:relative; z-index:2; }\n.uh-tip { position:fixed; z-index:1200; background:var(--dsw-alias-bg-overlay); border:1px solid var(--dsw-alias-border-l2); border-radius:10px; padding:10px 12px; box-shadow:0 8px 24px rgba(0,0,0,.18); pointer-events:auto; min-width:200px; max-width:290px; animation:uh-tip-in .16s ease both; }\n.uh-tip-date { font-size:12px; font-weight:600; color:var(--dsw-alias-label-primary); margin-bottom:6px; }\n.uh-tip-row { display:flex; align-items:center; gap:6px; font-size:12px; color:var(--dsw-alias-label-primary); padding:3px 6px; margin:0 -6px; border-radius:6px; cursor:pointer; transition:background-color .12s ease; }\n.uh-tip-row:hover { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent); }\n.uh-tip-row .uh-n { margin-left:auto; font-variant-numeric:tabular-nums; color:var(--dsw-alias-label-secondary); }\n.uh-tip-tokens { font-size:11px; color:var(--dsw-alias-label-secondary); margin-top:6px; border-top:1px solid var(--dsw-alias-border-l1); padding-top:6px; }\n.uh-tbl-title { font-size:13px; font-weight:600; color:var(--dsw-alias-label-primary); margin:0 0 10px; }\n.uh-tbl-scroll { overflow-x:auto; }\n.uh-hrow, .uh-row { display:grid; grid-template-columns:minmax(160px,2.2fr) .7fr .9fr .9fr .9fr .9fr 1.1fr .9fr .8fr 1fr; gap:8px; align-items:center; min-width:900px; padding:7px 10px; border-radius:8px; font-size:12px; }\n.uh-model-hrow, .uh-model-row { display:grid; grid-template-columns:minmax(190px,2.2fr) .7fr .9fr .9fr .9fr .9fr 1.1fr .9fr .8fr; gap:8px; align-items:center; min-width:860px; padding:7px 10px; border-radius:8px; font-size:12px; }\n.uh-hrow { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-row { cursor:pointer; border:1px solid transparent; transition:background-color .15s ease, border-color .15s ease; }\n.uh-row:hover { background:var(--dsw-alias-bg-layer-2); }\n.uh-row.uh-sel { border-color:var(--dsw-alias-brand-primary); }\n.uh-num { text-align:right; font-variant-numeric:tabular-nums; color:var(--dsw-alias-label-primary); }\n.uh-hrow .uh-num { color:var(--dsw-alias-label-secondary); }\n.uh-ws-title { color:var(--dsw-alias-label-primary); font-weight:550; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-row-title-wrap { min-width:0; }\n.uh-ws-path { color:var(--dsw-alias-label-secondary); font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-barwrap { height:5px; border-radius:3px; background:var(--dsw-alias-bg-layer-2); overflow:hidden; margin-top:3px; }\n.uh-barwrap.uh-bar-thin { height:3px; margin-top:1px; }\n.uh-barfill { height:100%; border-radius:3px; transform-origin:left center; animation:uh-bar-grow .7s cubic-bezier(.22,.61,.36,1) both; transition:width .5s cubic-bezier(.22,.61,.36,1); }\n.uh-empty { color:var(--dsw-alias-label-secondary); font-size:12px; text-align:center; padding:26px 0; }\n.uh-note { font-size:11px; color:var(--dsw-alias-label-secondary); line-height:1.6; }\n.uh-side-entry { width:100%; border:0; background:transparent; color:var(--dsw-alias-label-secondary); border-radius:8px; min-height:36px; padding:7px 10px; display:flex; align-items:center; gap:9px; font:inherit; font-size:13px; cursor:pointer; text-align:left; }\n.uh-side-entry:hover { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-primary); }\n.uh-side-entry-icon { width:18px; text-align:center; flex:none; font-size:15px; }\n.uh-side-entry-label { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-boundary-fallback { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; min-height:360px; padding:24px; border:1px solid var(--dsw-alias-border-l1); border-radius:12px; background:var(--dsw-alias-bg-layer-1); text-align:center; }\n.uh-boundary-title { color:var(--dsw-alias-label-primary); font-size:15px; font-weight:650; }\n.uh-boundary-note { max-width:420px; color:var(--dsw-alias-label-secondary); font-size:12px; line-height:1.6; }\n.uh-side-modal { position:fixed; inset:0; z-index:1100; background:color-mix(in srgb, #000 44%, transparent); display:flex; align-items:stretch; justify-content:center; padding:26px; }\n.uh-side-dialog { width:min(1120px, 100%); overflow-x:hidden; overflow-y:scroll; scrollbar-gutter:stable; scrollbar-width:auto; scrollbar-color:#707780 #1d1f22; background:var(--dsw-alias-bg-base); border:1px solid var(--dsw-alias-border-l2); border-radius:14px; box-shadow:0 18px 52px rgba(0,0,0,.35); padding:18px; }\n.uh-side-dialog::-webkit-scrollbar, .uh-pricing-table-wrap::-webkit-scrollbar { width:12px; height:12px; }\n.uh-side-dialog::-webkit-scrollbar-track, .uh-pricing-table-wrap::-webkit-scrollbar-track { background:#1d1f22; border-left:1px solid #363a40; }\n.uh-side-dialog::-webkit-scrollbar-thumb, .uh-pricing-table-wrap::-webkit-scrollbar-thumb { background:#707780; border:3px solid #1d1f22; border-radius:6px; }\n.uh-side-dialog::-webkit-scrollbar-thumb:hover, .uh-pricing-table-wrap::-webkit-scrollbar-thumb:hover { background:#9aa1aa; }\n.uh-side-dialog-head { display:flex; justify-content:flex-end; margin-bottom:8px; }\n@media (max-width: 640px) { .uh-side-modal { padding:0; } .uh-side-dialog { border-radius:0; border:0; padding:14px; } }\n/* iOS-style dashboard: grouped surfaces, tactile controls, and an elevated sheet. */\n.uh-page { gap:18px; max-width:1160px; margin:0 auto; padding:4px 2px 34px; font-family:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", sans-serif; }\n.uh-head { position:sticky; top:-18px; z-index:20; margin:0 -2px; padding:18px 2px 14px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 88%, transparent); backdrop-filter:blur(18px) saturate(150%); border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 76%, transparent); }\n.uh-title { font-size:22px; line-height:1.2; font-weight:700; letter-spacing:0; }\n.uh-actions { gap:8px; }\n.uh-range { padding:2px; gap:2px; border:0; border-radius:9px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent); overflow:visible; }\n.uh-range button, .uh-range button + button { min-height:28px; border:0; border-radius:7px; padding:4px 10px; }\n.uh-range button.uh-on { background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 3px rgba(0,0,0,.16); }\n.uh-refresh { min-height:30px; border:0; border-radius:15px; padding:5px 12px; display:inline-flex; align-items:center; justify-content:center; gap:6px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-1)); color:var(--dsw-alias-brand-primary); font-weight:600; }\n.uh-line-icon { flex:none; }\n.uh-icon-button { width:30px; padding:0; }\n.uh-refresh:hover { border:0; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, var(--dsw-alias-bg-layer-1)); }\n.uh-progress { padding:10px 12px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, var(--dsw-alias-bg-layer-1)); border:0; border-radius:12px; }\n.uh-cards { grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px; border:0; border-radius:0; overflow:visible; background:transparent; }\n.uh-card { min-height:84px; padding:12px 14px; gap:4px; border:0; border-radius:18px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.07), 0 8px 22px rgba(0,0,0,.05); animation:none; }\n.uh-card:first-child { border:0; background:color-mix(in srgb, #0a84ff 15%, var(--dsw-alias-bg-layer-1)); }\n.uh-card:nth-child(2) { background:color-mix(in srgb, #30d158 13%, var(--dsw-alias-bg-layer-1)); }\n.uh-card:nth-child(3) { background:color-mix(in srgb, #ff9f0a 14%, var(--dsw-alias-bg-layer-1)); }\n.uh-card:hover { transform:translateY(-2px); box-shadow:0 12px 28px rgba(0,0,0,.12); }\n.uh-card-label { display:flex; align-items:center; gap:6px; font-size:12px; font-weight:600; letter-spacing:0; }\n.uh-ios-summary-label, .uh-section-title, .uh-title-with-icon { display:flex; align-items:center; gap:7px; }\n.uh-section-title { margin-bottom:12px; color:var(--dsw-alias-label-primary); font-size:14px; font-weight:650; }\n/* Raise the complete reading scale without changing the data grid geometry. */\n.uh-page { font-size:14px; }\n.uh-range button, .uh-refresh { font-size:13px; }\n.uh-card-label, .uh-ios-summary-label { font-size:13px; }\n.uh-card-sub, .uh-ios-summary-caption, .uh-note { font-size:12px; }\n.uh-hrow, .uh-row, .uh-model-hrow, .uh-model-row { font-size:13px; }\n.uh-tbl-title { font-size:15px; }\n.uh-num { font-variant-numeric:tabular-nums; }\n.uh-card-value { font-size:23px; font-weight:700; letter-spacing:0; }\n.uh-card-sub { font-size:11px; line-height:1.45; }\n.uh-panel { padding:16px; border:0; border-radius:18px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.06), 0 6px 18px rgba(0,0,0,.04); }\n.uh-hm-head { margin-bottom:12px; }\n.uh-chip { border:0; border-radius:14px; padding:5px 10px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent); }\n.uh-chip.uh-on { border:0; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent); color:var(--dsw-alias-brand-primary); }\n.uh-hrow, .uh-row, .uh-model-hrow, .uh-model-row { border-radius:10px; }\n.uh-hrow, .uh-model-hrow { position:sticky; top:66px; z-index:2; background:var(--dsw-alias-bg-layer-1); border-bottom:1px solid var(--dsw-alias-border-l1); }\n.uh-row, .uh-model-row { padding-top:9px; padding-bottom:9px; }\n.uh-row:nth-child(even) { background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 52%, transparent); }\n.uh-side-entry { min-height:40px; border:0; border-radius:12px; padding:8px 10px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, transparent); color:var(--dsw-alias-brand-primary); font-weight:600; }\n.uh-side-entry:hover { border:0; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 17%, transparent); }\n.uh-side-entry-icon { color:var(--dsw-alias-brand-primary); font-weight:700; }\n.uh-side-modal { align-items:flex-end; padding:0; background:rgba(0,0,0,.34); backdrop-filter:blur(8px); }\n.uh-side-dialog { width:min(1260px, 100%); max-height:calc(100vh - 44px); border:0; border-radius:24px 24px 0 0; padding:22px 24px 28px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent); box-shadow:0 -10px 44px rgba(0,0,0,.25); }\n.uh-side-dialog-head { position:sticky; top:-22px; z-index:8; justify-content:center; height:22px; margin:-22px -24px 8px; padding:8px 24px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent); border:0; }\n.uh-side-dialog-head::before { content:""; width:36px; height:5px; border-radius:3px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent); }\n.uh-side-dialog-head .uh-refresh { position:absolute; right:20px; top:7px; min-height:28px; background:transparent; }\n.uh-close-button { width:30px; padding:0; font-size:22px; line-height:1; color:var(--dsw-alias-label-secondary); }\n.uh-close-button:hover { color:var(--dsw-alias-label-primary); background:color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent); }\n@media (max-width:640px) { .uh-page { gap:14px; padding-bottom:20px; } .uh-head { position:static; padding:4px 0 10px; } .uh-title { font-size:20px; } .uh-custom-range { grid-template-columns:1fr; align-items:stretch; } .uh-custom-range-fields { grid-template-columns:repeat(2, minmax(0, 1fr)); } .uh-custom-range-actions { justify-content:flex-end; } .uh-side-dialog { max-height:calc(100vh - 8px); border-radius:20px 20px 0 0; padding:18px 14px 24px; } .uh-side-dialog-head { top:-18px; margin:-18px -14px 8px; padding:7px 14px; } .uh-card-value { font-size:22px; } }\n/* Navigation separates the dashboard into three focused iOS-style surfaces. */\n.uh-ios-tabs { display:grid; grid-template-columns:repeat(3, 1fr); gap:4px; padding:4px; border-radius:14px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 9%, transparent); }\n.uh-ios-tab { min-height:32px; border:0; border-radius:10px; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:13px; font-weight:600; cursor:pointer; }\n.uh-ios-tab.uh-on { color:var(--dsw-alias-label-primary); background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 4px rgba(0,0,0,.16); }\n.uh-ios-summary { display:flex; flex-direction:column; gap:12px; background:transparent; box-shadow:none; }\n.uh-ios-summary-hero { display:grid; grid-template-columns:minmax(0,1fr) minmax(320px,.48fr); min-height:142px; padding:20px 22px; border:1px solid var(--dsw-alias-border-l1); border-radius:18px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.06), 0 8px 22px rgba(0,0,0,.06); }\n.uh-ios-summary-total { min-width:0; min-height:0; padding:0; border-radius:0; display:flex; align-items:center; justify-content:flex-start; gap:16px; background:transparent; box-shadow:none; }\n.uh-ios-summary-total-icon { display:grid; place-items:center; flex:none; width:54px; height:54px; border-radius:16px; background:color-mix(in srgb,#0a84ff 18%,var(--dsw-alias-bg-layer-2)); color:#0a84ff; }\n.uh-ios-summary-total-copy { min-width:0; }\n.uh-ios-summary-label { font-size:13px; font-weight:600; color:var(--dsw-alias-label-secondary); }\n.uh-ios-summary-total .uh-ios-summary-label { font-size:14px; }\n.uh-ios-summary-value { margin-top:7px; font-size:40px; line-height:1; font-weight:750; letter-spacing:0; color:var(--dsw-alias-label-primary); }\n.uh-unit { margin-left:6px; color:var(--dsw-alias-label-secondary); font-size:.4em; font-weight:650; white-space:nowrap; vertical-align:baseline; }\n.uh-wsbar-num .uh-unit { font-size:.78em; margin-left:3px; }\n.uh-ios-summary-caption { margin-top:8px; font-size:12px; color:var(--dsw-alias-label-secondary); }\n.uh-ios-summary-meta { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); align-items:center; min-width:0; gap:0; padding:0 0 0 22px; border-left:1px solid var(--dsw-alias-border-l1); background:transparent; font-size:12px; color:var(--dsw-alias-label-secondary); }\n.uh-ios-summary-meta-stat { min-width:0; padding:4px 22px; }\n.uh-ios-summary-meta-stat + .uh-ios-summary-meta-stat { border-left:1px solid var(--dsw-alias-border-l1); }\n.uh-ios-summary-meta-label { display:flex; align-items:center; gap:7px; color:var(--dsw-alias-label-secondary); font-size:12px; font-weight:600; white-space:nowrap; }\n.uh-ios-summary-meta-value { margin-top:7px; color:var(--dsw-alias-label-primary); font-size:24px; line-height:1; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-ios-summary-meta-cost .uh-ios-summary-meta-value { color:#30d158; }\n.uh-ios-summary-meta-caption { margin-top:7px; color:var(--dsw-alias-label-secondary); font-size:11px; white-space:nowrap; }\n.uh-ios-metrics { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:10px; }\n.uh-ios-metric { min-width:0; min-height:108px; padding:16px 18px; border:1px solid var(--dsw-alias-border-l1); border-radius:18px; display:flex; flex-direction:column; justify-content:center; gap:10px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.06), 0 8px 20px rgba(0,0,0,.05); animation:uh-card-in .35s ease both; }\n.uh-ios-metrics > .uh-card { min-width:0; min-height:141px; padding:16px 18px; gap:4px; border:0; border-radius:18px; }\n.uh-ios-metrics > .uh-card .uh-card-value { min-width:0; font-size:23px; line-height:1.2; font-weight:700; white-space:nowrap; }\n.uh-ios-metrics > .uh-card .uh-card-sub { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-ios-metrics > .uh-card:nth-child(-n+3) { justify-content:center; }\n.uh-ios-metric-label { display:flex; align-items:center; gap:8px; min-width:0; color:var(--dsw-alias-label-secondary); font-size:13px; font-weight:600; white-space:nowrap; }\n.uh-ios-metric-label .uh-line-icon { flex:none; }\n.uh-ios-metric-value { min-width:0; color:var(--dsw-alias-label-primary); font-size:26px; line-height:1.05; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-ios-metric-input { background:color-mix(in srgb,#0a84ff 11%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-input .uh-line-icon { color:#0a84ff; }\n.uh-ios-metric-output { background:color-mix(in srgb,#bf5af2 10%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-output .uh-line-icon { color:#bf5af2; }\n.uh-ios-metric-write { background:color-mix(in srgb,#ff9f0a 11%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-write .uh-line-icon { color:#ff9f0a; }\n.uh-ios-metric-read { background:color-mix(in srgb,#30d158 11%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-read .uh-line-icon { color:#30d158; }\n.uh-ios-metric-rate { background:var(--dsw-alias-bg-layer-1); }\n.uh-ios-metric-rate .uh-line-icon { color:#30d158; }\n.uh-ios-metric-rate-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; min-width:0; }\n.uh-ios-metric-rate-value { flex:none; color:#30d158; font-size:24px; line-height:1; font-weight:700; font-variant-numeric:tabular-nums; }\n.uh-ios-metric-rate-detail { min-width:0; overflow:hidden; color:var(--dsw-alias-label-secondary); font-size:14px; line-height:1.2; font-weight:600; font-variant-numeric:tabular-nums; text-overflow:ellipsis; white-space:nowrap; }\n.uh-ios-metric-bar { height:7px; border-radius:4px; background:var(--dsw-alias-bg-layer-2); overflow:hidden; }\n.uh-ios-metric-fill { height:100%; border-radius:inherit; background:#30d158; transition:width .35s ease; }\n.uh-token-semantics { display:flex; align-items:flex-start; gap:8px; padding:10px 12px; border-radius:12px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, var(--dsw-alias-bg-layer-1)); color:var(--dsw-alias-label-secondary); font-size:12px; line-height:1.55; }\n.uh-token-semantics .uh-line-icon { margin-top:1px; color:var(--dsw-alias-brand-primary); }\n.uh-ios-list-panel { min-height:360px; }\n.uh-donut-chart { margin:0 0 18px; }\n.uh-donut-title { display:flex; align-items:center; gap:7px; margin-bottom:12px; color:var(--dsw-alias-label-primary); font-size:14px; font-weight:650; }\n.uh-donut-layout { display:grid; grid-template-columns:minmax(220px,300px) minmax(0,1fr); gap:24px; align-items:center; }\n.uh-donut-visual { position:relative; width:min(100%,280px); aspect-ratio:1; margin:0 auto; }\n.uh-donut-svg { display:block; width:100%; height:100%; overflow:visible; }\n.uh-donut-track { opacity:.78; }\n.uh-donut-segment { fill:none; stroke-dasharray:1; stroke-dashoffset:1; animation:uh-donut-draw .95s cubic-bezier(.22,.61,.36,1) both; cursor:pointer; outline:none; transition:filter .15s ease, opacity .15s ease; }\n.uh-donut-segment:hover, .uh-donut-segment:focus-visible, .uh-donut-segment.uh-active { filter:brightness(1.12); }\n.uh-donut-tooltip { position:absolute; top:0; left:0; z-index:3; display:flex; align-items:flex-start; gap:8px; max-width:190px; padding:9px 10px; border:1px solid var(--dsw-alias-border-l2); border-radius:8px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent); box-shadow:0 10px 24px rgba(0,0,0,.22); backdrop-filter:blur(10px); color:var(--dsw-alias-label-primary); pointer-events:none; font-size:12px; line-height:1.4; transition:left .12s cubic-bezier(.22,.61,.36,1), top .12s cubic-bezier(.22,.61,.36,1); }\n.uh-donut-tooltip > div { min-width:0; display:flex; flex-direction:column; gap:4px; }\n.uh-donut-tooltip strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; }\n.uh-donut-tooltip span:not(.uh-donut-dot) { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-donut-tooltip-cost { color:var(--dsw-alias-label-primary) !important; font-variant-numeric:tabular-nums; }\n.uh-donut-center { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; pointer-events:none; }\n.uh-donut-center strong { color:var(--dsw-alias-label-primary); font-size:28px; line-height:1; font-weight:750; font-variant-numeric:tabular-nums; }\n.uh-donut-center span { margin-top:5px; color:var(--dsw-alias-label-secondary); font-size:13px; }\n.uh-donut-legend { min-width:0; }\n.uh-donut-legend-row { display:grid; grid-template-columns:12px minmax(180px,1fr) minmax(250px,.8fr) 54px; gap:10px; align-items:center; min-height:58px; padding:8px 0; border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent); }\n.uh-donut-legend-row:last-child { border-bottom:0; }\n.uh-donut-dot { width:12px; height:12px; border-radius:50%; }\n.uh-donut-legend-copy { min-width:0; display:flex; flex-direction:column; gap:5px; }\n.uh-donut-legend-copy strong { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-primary); font-size:13px; font-weight:650; }\n.uh-donut-legend-metrics { display:grid; grid-template-columns:minmax(120px,1fr) minmax(92px,auto); align-items:center; gap:14px; min-width:0; }\n.uh-donut-legend-metrics span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-secondary); font-size:12px; font-variant-numeric:tabular-nums; text-align:right; }\n.uh-donut-legend-metrics .uh-donut-cost { color:var(--dsw-alias-label-secondary); font-size:12px; }\n.uh-donut-percent { min-width:48px; color:var(--dsw-alias-label-secondary); font-size:12px; font-variant-numeric:tabular-nums; text-align:right; }\n/* Each detail table owns its scrolling and sticky header; sections must not overlap in the page scroll. */\n.uh-tbl-scroll { max-height:360px; overflow:auto; border-radius:12px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 55%, transparent); }\n.uh-hrow, .uh-model-hrow { position:sticky; top:0; z-index:3; border-bottom:1px solid var(--dsw-alias-border-l1); box-shadow:0 1px 0 color-mix(in srgb, var(--dsw-alias-bg-base) 70%, transparent); }\n.uh-row, .uh-model-row { min-height:48px; border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 72%, transparent); }\n.uh-row:last-child, .uh-model-row:last-child { border-bottom:0; }\n@media (max-width:640px) { .uh-tbl-scroll { max-height:300px; border-radius:10px; } }\n@media (max-width:640px) { .uh-hm-body { min-width:720px; } .uh-donut-legend-row { grid-template-columns:12px minmax(0,1fr) 48px; gap:8px; } .uh-donut-legend-copy { grid-column:2; grid-row:1; } .uh-donut-legend-metrics { grid-column:2 / -1; grid-row:2; grid-template-columns:minmax(0,1fr) minmax(0,auto); gap:8px; } .uh-donut-percent { grid-column:3; grid-row:1; } .uh-ios-summary-hero { grid-template-columns:1fr; min-height:0; gap:18px; padding:18px; } .uh-ios-summary-total { align-items:flex-start; } .uh-ios-summary-meta { grid-template-columns:repeat(2,minmax(0,1fr)); padding:16px 0 0; border-left:0; border-top:1px solid var(--dsw-alias-border-l1); } .uh-ios-summary-meta-stat { padding:0 12px; } .uh-ios-summary-meta-stat:first-child { padding-left:0; } .uh-ios-summary-meta-stat:last-child { padding-right:0; } .uh-ios-summary-value { font-size:31px; } .uh-ios-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); } .uh-ios-metric:last-child { grid-column:1 / -1; } .uh-ios-metric-value { font-size:24px; } .uh-donut-layout { grid-template-columns:1fr; gap:12px; } .uh-donut-visual { width:min(100%,250px); } }\n@keyframes uh-cell-in { from { opacity:0; transform:scale(.4); } to { opacity:1; transform:scale(1); } }\n@keyframes uh-glow { 0% { box-shadow:0 0 0 0 rgba(46,160,67,.5); } 70% { box-shadow:0 0 0 5px rgba(46,160,67,0); } 100% { box-shadow:0 0 0 0 rgba(46,160,67,0); } }\n@keyframes uh-card-in { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }\n@keyframes uh-bar-grow { from { transform:scaleX(0); } to { transform:scaleX(1); } }\n@keyframes uh-panel-in { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }\n@keyframes uh-trend-draw { from { stroke-dashoffset:var(--uh-draw-length); opacity:.2; } to { stroke-dashoffset:0; opacity:1; } }\n@keyframes uh-trend-fill { from { opacity:0; } to { opacity:1; } }\n@keyframes uh-donut-draw { from { stroke-dashoffset:1; opacity:.25; } to { stroke-dashoffset:0; opacity:1; } }\n@keyframes uh-spinner-turn { to { transform:rotate(360deg); } }\n@keyframes uh-menu-in { from { opacity:0; transform:translateY(-4px) scale(.97); } to { opacity:1; transform:translateY(0) scale(1); } }\n@keyframes uh-tip-in { from { opacity:0; } to { opacity:1; } }\n@media (prefers-reduced-motion: reduce) {\n .uh-cell, .uh-card, .uh-ios-metric, .uh-barfill, .uh-anim-panel, .uh-trend-panel, .uh-trend-line-draw, .uh-trend-area, .uh-trend-point, .uh-trend-spinner, .uh-donut-segment, .uh-records-panel, .uh-record-detail, .uh-tip, .uh-language-options { animation:none !important; stroke-dashoffset:0 !important; opacity:1 !important; }\n .uh-card, .uh-cell, .uh-ios-metric-fill, .uh-barfill, .uh-fill, .uh-refresh, .uh-chip, .uh-row, .uh-tip-row, .uh-trend-tooltip, .uh-language-trigger, .uh-language-caret, .uh-language-option { transition:none !important; }\n}\n'}const he=(e,t,a)=>{const r=new URLSearchParams({start:e.start,end:e.end,utc:e.utc?"1":"0",limit:String(a||100)});return e.workspaceId&&r.set("workspaceId",e.workspaceId),e.provider&&r.set("provider",e.provider),e.modelKey&&r.set("modelKey",e.modelKey),t&&r.set("cursor",t),fetch("/api/all-usage/records?"+r.toString(),{headers:{accept:"application/json"}}).then(e=>{if(!e.ok){const t=new Error("HTTP "+e.status);throw t.status=e.status,t}return e.json()})},ge=()=>fetch("/api/all-usage/pricing",{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}),be=(e,t,a)=>fetch("/api/all-usage/pricing",{method:"POST",headers:{"content-type":"application/json","x-all-usage-request-token":a},body:JSON.stringify({pricing:e,backfill:!0===t})}).then(e=>{if(!e.ok){const t=new Error("HTTP "+e.status);throw t.status=e.status,t}return e.json()}),fe="dsh-all-usage.language";function xe(){try{return"en"===window.localStorage.getItem(fe)?"en":"zh"}catch(e){return"zh"}}const ye="dsh-all-usage.ui-state";function ve(){try{const e=window.localStorage.getItem(ye),t=e?JSON.parse(e):{};if(null===t||"object"!=typeof t||Array.isArray(t))return{};const a={};return["logs","model","workspace"].includes(t.detailView)&&(a.detailView=t.detailView),["route","model","provider"].includes(t.modelView)&&(a.modelView=t.modelView),["today","30d","90d","all"].includes(t.range)&&(a.range=t.range),"boolean"==typeof t.pricingAutoSync&&(a.pricingAutoSync=t.pricingAutoSync),a}catch(e){return{}}}function we(e){try{const t=ve();window.localStorage.setItem(ye,JSON.stringify(Object.assign({},t,e)))}catch(e){}}function ke(e){const t=e.timerCtx,a="en"===e.language?"en":"zh",n=(e,t)=>"en"===a?t:e,p="en"===a,g=r.useRef(null);null===g.current&&(g.current=ve());const v=g.current,E=new Date,N=i(E,p),[M,F]=r.useState(null),[O,W]=r.useState(null),[L,q]=r.useState(""),[V,Y]=r.useState(0),[J,G]=r.useState(null),[$,Q]=r.useState(()=>v.range||"today"),[ee,te]=r.useState({start:"",end:""}),[ae,re]=r.useState({start:"",end:""}),[ie,le]=r.useState(!1),[me,fe]=r.useState(()=>v.modelView||"route"),[xe,ye]=r.useState(null),[ke,Ee]=r.useState(null),[Ne,Me]=r.useState(null),[Ce,Se]=r.useState(null),[ze,Ae]=r.useState(""),[Te,Re]=r.useState(!1),[je,De]=r.useState(""),[Ie,Ue]=r.useState(["total","input","cacheRead","output"]),[Fe,Oe]=r.useState(()=>v.detailView||"logs"),[We,Le]=r.useState(null),[qe,Pe]=r.useState(null),[Ke,Be]=r.useState([]),[He,Ve]=r.useState(null),[Ye,Je]=r.useState(!1),[Xe,Ze]=r.useState(0),[Ge,$e]=r.useState(!1),[_e,Qe]=r.useState(!1),[et,tt]=r.useState(""),[at,rt]=r.useState(!1),[nt,it]=r.useState({}),[st,lt]=r.useState(!1),[ot,ct]=r.useState(null),[ut,dt]=r.useState(null),[pt,mt]=r.useState(!1),[ht,gt]=r.useState(!1),[bt,ft]=r.useState(!1),[xt,yt]=r.useState(!1),[vt,wt]=r.useState(""),[kt,Et]=r.useState({}),[Nt,Mt]=r.useState(null),[Ct,St]=r.useState({}),[zt,At]=r.useState(null),[Tt,Rt]=r.useState({}),[jt,Dt]=r.useState(null),It=r.useRef({}),Ut=r.useRef(0),Ft=r.useRef({}),Ot=r.useRef(!1),Wt=r.useRef(()=>{}),Lt=()=>{Ut.current+=1;const e=Ft.current;for(const t of Object.keys(e))clearTimeout(e[t]);Ft.current={},It.current={},Et({})},[qt,Pt]=r.useState(!1),Kt=r.useRef(null),Bt=r.useRef(null),Ht=r.useRef(null);null===Ht.current&&(Ht.current=u());const Vt=r.useRef(null);null===Vt.current&&(Vt.current=u());const Yt=r.useRef(null);null===Yt.current&&(Yt.current=u());const Jt=r.useRef(null);null===Jt.current&&(Jt.current=u());const Xt=r.useRef(null);null===Xt.current&&(Xt.current=u());const Zt=r.useRef(null);null===Zt.current&&(Zt.current=u());const Gt=Ht.current,$t=Vt.current,_t=Yt.current,Qt=Jt.current,ea=Xt.current,ta=Zt.current,aa=r.useRef(()=>{}),ra=r.useCallback(()=>{if(!Ot.current||ht||bt||xt)return;const e=ta.next();mt(!0),ge().then(t=>{if(ta.isCurrent(e)){if(!t||"object"!=typeof t||!t.config)return wt("load"),void mt(!1);Lt(),ct(t),dt(e=>R(e,t)),wt(""),mt(!1)}},()=>{ta.isCurrent(e)&&(wt("load"),mt(!1))})},[ht,bt,xt]);r.useEffect(()=>{Wt.current=ra});r.useEffect(()=>{we({detailView:Fe})},[Fe]),r.useEffect(()=>{we({modelView:me})},[me]),r.useEffect(()=>{"custom"!==$&&we({range:$})},[$]);const na=r.useMemo(()=>null===M?null:function(e,t,a,r,n,i,s){const l=K(e,t,a,r);return null===l?null:{start:l.start,end:l.end,utc:!0===a,workspaceId:n||null,provider:i||null,modelKey:s||null}}(M,$,p,ee,xe,ke,Ne),[M,$,p,ee.start,ee.end,xe,ke,Ne]),ia=B(na),sa=h(null!==O&&"object"==typeof O?O:M),la=null!==We&&We.baseKey===ia?We.scope:na,oa=B(la),ca=r.useRef(ia);r.useEffect(()=>{ca.current!==ia&&(ca.current=ia,Le(null),Pe(null))},[ia]),r.useEffect(()=>{let e=!0,a=!1,r="",n=null,i=0,s=0,l=null;const o=()=>{null!==l&&(clearTimeout(l),l=null)},c=t=>{if(""===r)return;const a=_t.next();((e,t)=>fetch("/api/all-usage/balance"+(e?"?force=1":""),{headers:{accept:"application/json","x-all-usage-request-token":t}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}))(!0===t,r).then(t=>{e&&_t.isCurrent(a)&&t&&G(t)},()=>{})},u=t=>{if(!e||null!==l)return;const a="full"===t?i+=1:s+=1;l=setTimeout(()=>{l=null,e&&("full"===t?p():h())},function(e){const t=Math.max(1,Math.min(4,"number"==typeof e&&Number.isFinite(e)?e:1));return 5e3*Math.pow(2,t-1)}(a))},p=()=>{$t.next();const t=Gt.next();fetch("/api/all-usage",{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}).then(s=>{if(!e||!Gt.isCurrent(t))return;if(null===s||"object"!=typeof s)return q("full"),void u("full");n=s,s.scan&&(a=!!s.scan.done);const l="string"==typeof s.requestToken?s.requestToken:"",d=""!==l&&l!==r;r=l,i=0,o(),q(""),Y(Date.now()),W(s),F(s),d&&c(!1)},()=>{e&&Gt.isCurrent(t)&&(q("full"),u("full"))})},h=()=>{if(null===n)return void p();const t=$t.next();fetch("/api/all-usage/status",{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}).then(r=>{if(!e||!$t.isCurrent(t))return;if(null===r||"object"!=typeof r)return q("status"),void u("status");s=0;const i=function(e,t){if(null===e||"object"!=typeof e||null===t||"object"!=typeof t)return"full";if("string"!=typeof e.instanceId||"string"!=typeof t.instanceId||""===e.instanceId||e.instanceId!==t.instanceId)return"full";if(m(e)&&m(t)){if(e.metadataRevision!==t.metadataRevision)return"full";if(e.pricingRevision!==t.pricingRevision)return"full";if(e.dataRevision!==t.dataRevision)return"query";const a=e.scan,r=t.scan;return e.scanRevision!==t.scanRevision||a&&r&&!!a.done!=!!r.done?"status":"none"}const a=d(e),r=d(t);if(null===a||null===r||a!==r)return"full";const n=e.scan,i=t.scan;return n&&i&&!!n.done!=!!i.done?"full":"none"}(r,n);if(r.scan&&(a=!!r.scan.done),"full"===i)return"number"==typeof r.pricingRevision&&"number"==typeof n.pricingRevision&&r.pricingRevision!==n.pricingRevision&&Wt.current(),void p();n=Object.assign({},n,r),W(r),o(),q("")},()=>{e&&$t.isCurrent(t)&&(q("status"),u("status"))})};p();const g=t.interval(()=>{a||null!==l||h()},2e3),b=t.interval(()=>{a&&null===l&&h()},15e3),f=t.interval(()=>{c(!1)},6e4);return aa.current=()=>{o(),i=0,s=0,p(),c(!0)},()=>{e=!1,o(),g(),b(),f();for(const e of Object.values(Ft.current))clearTimeout(e);Ft.current={}}},[]),r.useEffect(()=>{if(!qt||"undefined"==typeof document)return;const e=e=>{Kt.current&&!Kt.current.contains(e.target)&&Pt(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[qt]),r.useEffect(()=>{if(null===na||""===ia)return;const e=Qt.next(),t=sa;Re(!0),De(""),(e=>{const t=new URLSearchParams({start:e.start,end:e.end,utc:e.utc?"1":"0"});return e.workspaceId&&t.set("workspaceId",e.workspaceId),e.provider&&t.set("provider",e.provider),e.modelKey&&t.set("modelKey",e.modelKey),fetch("/api/all-usage/query?"+t.toString(),{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})})(na).then(a=>{if(Qt.isCurrent(e)){if(null===a||"object"!=typeof a||null===t||h(a)!==t)return De("stale"),void Re(!1);Se(a),Ae(ia),Re(!1),De("")}},()=>{Qt.isCurrent(e)&&(Re(!1),De("query"))})},[ia,sa]);const ua=r.useCallback(e=>{null!==e&&""!==ia&&(Le({baseKey:ia,scope:{...e}}),Oe("logs"),Pe(null),tt(""))},[ia]),da=r.useCallback(e=>{null!==na&&"string"==typeof e&&ua({...na,start:e,end:e})},[na,ua]),pa="logs"===Fe&&null!==la&&""!==oa;r.useEffect(()=>{if(!pa)return ea.next(),void $e(!1);const e=ea.next(),t=sa;return $e(!0),tt(""),Ve(null),Je(!1),he(la,null,20).then(a=>{if(ea.isCurrent(e)){if(null===a||"object"!=typeof a||!Array.isArray(a.items))return tt("audit"),void $e(!1);if(null===t||h(a)!==t)return tt("stale"),void $e(!1);Be(a.items),Pe(e=>a.items.some(t=>t&&t.id===e)?e:a.items[0]?a.items[0].id:null),Ve(a.nextCursor||null),Je(!0===a.hasMore),$e(!1),tt("")}},t=>{if(ea.isCurrent(e)){if(t&&409===t.status)return $e(!1),tt("stale"),void Ze(e=>e+1);$e(!1),tt("audit")}}),()=>{ea.next()}},[oa,Fe,sa,Xe]),r.useEffect(()=>{null!==We&&"logs"===Fe&&null!==Bt.current&&Bt.current.scrollIntoView({behavior:"smooth",block:"start"})},[We&&B(We.scope),Fe]);const ma=r.useCallback(()=>{aa.current()},[]),ha=r.useCallback(e=>{ye(t=>t===e?null:e)},[]),ga=r.useCallback(()=>{ye(null),Ee(null),Me(null)},[]),ba=r.useCallback(e=>{Ee(e||null)},[]),fa=r.useCallback(e=>{Me(e||null)},[]),xa=p&&Array.isArray(M&&M.byDayUtc)?M.byDayUtc:Array.isArray(M&&M.byDay)?M.byDay:[],ya=c(xa,N).min,va=o(ee,p),wa=function(e,t,a,r){return null!==e&&"object"==typeof e&&l(e.start,r)&&l(e.end,r)?e.start>e.end?"order":e.start<t||e.end>a?"bounds":"":"invalid"}(ae,ya,N,p),ka=null!==Ce&&ze===ia,Ea=ka&&null!==sa&&h(Ce)===sa,Na=ka&&(Ea||""===je),Ma=Na&&Array.isArray(Ce.daily)?Ce.daily:xa,Ca=Na&&Array.isArray(Ce.heatmap)?Ce.heatmap:xa,Sa=null===va?"":va.start+":"+va.end,za=r.useMemo(()=>function(e,t,a,r){const n={totals:{turns:0,calls:0,sessions:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:{currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0}},perWs:[],perModel:[]};if(null===e)return n;if("all"===t)return{totals:e.totals,perWs:e.perWorkspace,perModel:e.perModel||[]};const l=a&&Array.isArray(e.byDayUtc)?e.byDayUtc:Array.isArray(e.byDay)?e.byDay:[];let c,u=null;if("custom"===t){const e=o(r,a);if(null===e)return n;c=e.start,u=e.end}else c=i("today"===t?new Date:s(new Date,"30d"===t?-29:-89,a),a);const d={turns:0,calls:0,sessions:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:{currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0}},p=new Map,m=new Map,h=new Set;for(const e of l){if(e.date<c||null!==u&&e.date>u)continue;const t=Array.isArray(e.sessionIds)?e.sessionIds:[];for(const e of t)h.add(e);d.turns+=e.turns,d.input+=e.tokens.input,d.output+=e.tokens.output,d.cacheRead+=e.tokens.cacheRead,d.cacheWrite+=e.tokens.cacheWrite,d.reasoning+=e.tokens.reasoning,z(d.cost,e.cost);for(const t of e.byWorkspace){let e=p.get(t.workspaceId);void 0===e&&(e={workspaceId:t.workspaceId,turns:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:C()},p.set(t.workspaceId,e)),e.input+=t.input,e.output+=t.output,e.cacheRead+=t.cacheRead,e.cacheWrite+=t.cacheWrite,e.reasoning+=t.reasoning,z(e.cost,t.cost)}for(const t of e.perWorkspace){let e=p.get(t.workspaceId);void 0===e&&(e={workspaceId:t.workspaceId,turns:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:C()},p.set(t.workspaceId,e)),e.turns+=t.turns}for(const t of e.byModel||[]){const e=t.identityKey||t.model;let a=m.get(e);void 0===a&&(a={...t,calls:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:C()},m.set(e,a)),a.calls+=t.calls,a.input+=t.input,a.output+=t.output,a.cacheRead+=t.cacheRead,a.cacheWrite+=t.cacheWrite,a.reasoning+=t.reasoning,d.calls+=Number.isFinite(t.calls)?t.calls:0,z(a.cost,t.cost)}}return d.sessions=h.size,{totals:d,perWs:Array.from(p.values()),perModel:Array.from(m.values())}}(M,$,p,va),[M,$,p,Sa]),Aa=r.useMemo(()=>Na?{totals:Ce.totals,perWs:Ce.perWorkspace||[],perModel:Ce.perModel||[]}:za,[Na,Ce,za]),Ta=Z(Aa.totals.input+Aa.totals.output+Aa.totals.cacheRead+Aa.totals.cacheWrite+Aa.totals.reasoning,t),Ra=(Z(Math.round(10*x(Aa.totals.input,Aa.totals.cacheRead)),t),null!==ke||null!==Ne),ja=Number.isFinite(Aa.totals.calls)&&Aa.totals.calls>0?Aa.totals.calls:Aa.totals.turns,Da=Z(Ra?ja:Aa.totals.turns,t),Ia=Z(ja,t),Ua=e=>e.input+e.output+e.cacheRead+e.cacheWrite+e.reasoning,Fa=r.useMemo(()=>(Array.isArray(Aa.perWs)?Aa.perWs:[]).slice().sort((e,t)=>Ua(t)-Ua(e)),[Aa.perWs]),Oa=r.useMemo(()=>function(e,t,a,r){if("route"===t)return e.slice();const n=new Map;for(const i of e){const e=X(i,a,r),s="model"===t?e.model:e.provider;let l=n.get(s);void 0===l&&(l={model:s,provider:"provider"===t?s:e.provider,calls:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:C()},n.set(s,l)),l.calls+=i.calls,l.input+=i.input,l.output+=i.output,l.cacheRead+=i.cacheRead,l.cacheWrite+=i.cacheWrite,l.reasoning+=i.reasoning,z(l.cost,i.cost)}return Array.from(n.values())}(Aa.perModel||[],me,n("未知供应商","Unknown provider"),n("未知模型","Unknown model")).sort((e,t)=>Ua(t)-Ua(e)),[Aa.perModel,me,a]),Wa=M&&Array.isArray(M.workspaces)?M.workspaces:[],La=M&&M.aliases&&"object"==typeof M.aliases?M.aliases:{},qa=r.useMemo(()=>{const e=Array.isArray(za.perModel)?za.perModel.filter(e=>e&&"object"==typeof e):[],t=Array.from(new Set(e.map(e=>"string"==typeof e.provider&&""!==e.provider?e.provider:null).filter(e=>null!==e))).sort(),r=Array.from(new Set(e.map(e=>{const r="string"==typeof e.actualModel&&""!==e.actualModel?e.actualModel:"string"==typeof e.requestedModel&&""!==e.requestedModel?e.requestedModel:null;if(null!==r)return r;const n="string"==typeof e.model&&""!==e.model?e.model:"en"===a?"Unknown model":"未知模型",i=n.indexOf(" / "),s=i>0?n.slice(0,i):"";return i>0&&t.includes(s)?n.slice(i+3):n}))).sort((e,t)=>e.localeCompare(t)),n=new Map((Array.isArray(za.perWs)?za.perWs:[]).map(e=>[e.workspaceId,e])),i=Wa.filter(e=>{return void 0!==(t=n.get(e.id))&&(Number(t.turns)>0||Number(t.calls)>0||Number(t.input)>0||Number(t.output)>0||Number(t.cacheRead)>0||Number(t.cacheWrite)>0||Number(t.reasoning)>0);var t});return{providerOptions:t,modelOptions:r,rangeWorkspaceOptions:i,rangeWorkspaceIds:new Set(i.map(e=>e.id))}},[za.perModel,za.perWs,Wa,a]),{providerOptions:Pa,modelOptions:Ka,rangeWorkspaceOptions:Ba,rangeWorkspaceIds:Ha}=qa,Va=r.useMemo(()=>{const e=new Map,t=new Map;return Wa.forEach((a,r)=>{e.set(a.id,a),t.set(a.id,r)}),{byId:e,indexes:t}},[Wa]),Ya=Va.byId,Ja=Va.indexes,Xa=r.useCallback(e=>{const t=La[e];if("string"==typeof t&&""!==t)return t;const r=Ya.get(e);return r?r.title:"en"===a?"Unknown workspace":"未知工作区"},[La,Ya,a]),Za=r.useMemo(()=>{const e=new Map;for(const t of xa)e.set(t.date,t);return e},[xa]),Ga=r.useMemo(()=>function(e,t){const a=new Date;let r=0;for(let n=0;n<371;n++){const l=s(a,-n,t),o=e.get(i(l,t));if(void 0!==o&&o.turns>0)r+=1;else if(n>0)break}let n=0,l=0;for(let r=0;r<371;r++){const o=s(a,-r,t),c=e.get(i(o,t));void 0!==c&&c.turns>0?(l+=1,l>n&&(n=l)):l=0}return{streak:r,best:n}}(Za,p),[Za,p,N]),$a=M&&M.pricing&&"object"==typeof M.pricing?M.pricing:{},_a=ot&&"object"==typeof ot?ot:$a,Qa=r.useMemo(()=>st?function(e){const t=new Map,a=e&&Array.isArray(e.tierSchedules)?e.tierSchedules:[];for(const e of a)e&&"string"==typeof e.id&&Array.isArray(e.tiers)&&t.set(e.id,e.tiers);return e&&Array.isArray(e.usedModels)?e.usedModels.map(e=>{const a=e&&"string"==typeof e.tierScheduleId?t.get(e.tierScheduleId):null,r=Array.isArray(a)?a:e&&Array.isArray(e.tiers)?e.tiers:[];return Object.assign({},e,{tiers:r.map(e=>Object.assign({},e))})}):[]}(_a):[],[st,_a]),er=r.useMemo(()=>Qa.slice().sort((e,t)=>{const a={unpriced:0,ambiguous:1,unsupported:2,priced:3};return(void 0===a[e.status]?9:a[e.status])-(void 0===a[t.status]?9:a[t.status])||String(e.model||"").localeCompare(String(t.model||""))}).map(e=>({value:String(e.identityKey||e.model||""),label:(e.model||("en"===a?"Unknown model":"未知模型"))+" · "+j(e.status,a),model:U(e.actualModel||e.requestedModel||e.pricingModel),officialModel:U(e.pricingModel)})).filter(e=>""!==e.value),[Qa,a]),tr=r.useMemo(()=>{const e=null!==na?{start:na.start,end:na.end}:K(M,$,p,va),t=Na&&null!==na&&na.start===na.end&&Ce&&Array.isArray(Ce.hourly)?function(e,t){const a=[];for(const r of Array.isArray(e)?e:[]){if(null===r||"object"!=typeof r)continue;const e=Number.isFinite(r.time)?r.time:"string"==typeof r.date?Date.parse(r.date):NaN;if(!Number.isFinite(e))continue;const n=H(r);a.push({date:i(new Date(e),t),time:e,turns:Number.isFinite(r.turns)?r.turns:0,calls:Number.isFinite(r.calls)?r.calls:0,sessions:Number.isFinite(r.sessions)?r.sessions:0,tokens:n,cost:S(r),total:n.input+n.output+n.cacheRead+n.cacheWrite+n.reasoning})}return a.sort((e,t)=>e.time-t.time)}(Ce.hourly,p):[];return t.length>0?t:function(e,t,a){if(null===t||"object"!=typeof t)return[];const r=new Map((Array.isArray(e)?e:[]).filter(e=>e&&"string"==typeof e.date).map(e=>[e.date,e])),n=t.start.split("-").map(Number),s=t.end.split("-").map(Number),l=a?new Date(Date.UTC(n[0],n[1]-1,n[2])):new Date(n[0],n[1]-1,n[2]),o=a?new Date(Date.UTC(s[0],s[1]-1,s[2])):new Date(s[0],s[1]-1,s[2]),c=[];for(;l.getTime()<=o.getTime();){const e=i(l,a),t=r.get(e),n=H(t);c.push({date:e,turns:t&&Number.isFinite(t.turns)?t.turns:0,calls:t&&Number.isFinite(t.calls)?t.calls:0,sessions:t&&Number.isFinite(t.sessions)?t.sessions:0,tokens:n,cost:S(t),total:n.input+n.output+n.cacheRead+n.cacheWrite+n.reasoning}),a?l.setUTCDate(l.getUTCDate()+1):l.setDate(l.getDate()+1)}return c}(Na&&Ce&&Array.isArray(Ce.daily)?Ce.daily:xa,e,p)},[na,Na,Ce,xa,M,$,p,Sa]),ar=Na&&Ce?ia+":"+(h(Ce)||"query"):ia,rr=r.useMemo(()=>({}),[st,ut,pt,ht,bt,xt,vt,_a,$a,Qa,er,zt,jt,Ct,Tt,Nt,kt,M,a]),nr=r.useMemo(()=>Oa.map((e,t)=>({label:e.model,value:Ua(e),cost:e.cost,color:_[t%_.length]})),[Oa]),ir=r.useMemo(()=>Fa.map((e,t)=>({label:Xa(e.workspaceId),value:Ua(e),cost:e.cost,color:_[t%_.length]})),[Fa,Xa]),sr=r.useCallback(e=>{Ue(t=>t.includes(e)?t.length<=1?t:t.filter(t=>t!==e):t.concat(e))},[]);if(r.useEffect(()=>{null===xe||Ha.has(xe)||ye(null),null===ke||Pa.includes(ke)||Ee(null),null===Ne||Ka.includes(Ne)||Me(null)},[xe,ke,Ne,Ha,Pa,Ka]),null===M){const e=""!==L;return r.createElement("div",{className:"uh-page"},r.createElement("div",{className:"uh-panel"},r.createElement("div",{className:"uh-empty"},e?n("无法加载用量统计。请重试。","Unable to load usage statistics. Please retry."):n("正在加载用量统计…","Loading usage statistics…")),e?r.createElement("div",{style:{textAlign:"center"}},r.createElement("button",{className:"uh-refresh",onClick:ma},r.createElement(y,{name:"refresh",size:14}),n("重试","Retry"))):null))}const lr=null!==O&&"object"==typeof O?O:M,or=lr&&lr.scan?lr.scan:M.scan||{done:!0,started:!0,scanned:0,total:0,failed:0},cr=lr&&lr.sync?lr.sync:M.sync||{},ur=Ma,dr=(e,t)=>{const a="string"==typeof M.requestToken?M.requestToken:"";var r,n,i;""!==a&&(r=e,n=String(void 0===t?"":t).trim(),i=a,fetch("/api/all-usage/alias",{method:"POST",headers:{"content-type":"application/json","x-all-usage-request-token":i},body:JSON.stringify({workspaceId:r,alias:n})}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})).then(e=>{e&&e.ok&&e.aliases&&F(t=>null===t?t:Object.assign({},t,{aliases:e.aliases}))},()=>{})},pr=()=>{ht||bt||xt||(Lt(),ta.next(),mt(!1),lt(!1),Ot.current=!1)},mr=()=>{const e=ta.next();ct(null),dt(null),mt(!0),St({}),Rt({}),At(null),Dt(null),Mt(null),Lt(),wt(""),lt(!0),Ot.current=!0,rt(!1),ge().then(t=>{if(!ta.isCurrent(e))return;if(!t||"object"!=typeof t||!t.config)return void wt("load");const a=T(t);ct(t),dt(a)},()=>{ta.isCurrent(e)&&wt("load")}).finally(()=>{ta.isCurrent(e)&&mt(!1)})},hr=e=>{if(null===ut||ht||bt||xt)return;const t=function(e){const t=e&&Array.isArray(e.mappings)?e.mappings:[];for(const e of t){if(!e||""===String(e.identityKey||e.usageIdentityKey||e.model||"").trim()||""===String(e.catalogModelId||"").trim())return"mapping";if(!["fresh","total","legacy"].includes(e.inputTokenSemantics||"fresh")||!D(void 0===e.multiplier?"1":e.multiplier))return"mapping"}const a=e&&Array.isArray(e.overrides)?e.overrides:[];for(const e of a){if(!e||""===String(e.modelId||"").trim())return"override";if(!["input","output","cacheRead","cacheWrite"].every(t=>D(e[t])))return"override";let t=0;const a=Array.isArray(e.tiers)?e.tiers:[];if(a.length>32)return"tier";for(const e of a){if(!I(e,t))return"tier";t=Number(e.size)}if(!0===e.tiered&&0===a.length)return"tier"}return""}(ut);if(""!==t)return void wt(t);const a="string"==typeof M.requestToken?M.requestToken:"";if(""===a)return void wt("token");const r=ta.next();gt(!0),wt(""),be(ut,e,a).then(e=>{ta.isCurrent(r)&&(e&&!0===e.ok&&e.pricing?(F(t=>null===t?t:Object.assign({},t,{pricing:e.pricing})),ct(e.pricing),dt(T(e.pricing)),St({}),Rt({}),At(null),Dt(null),pr(),aa.current()):wt("save"))},e=>{ta.isCurrent(r)&&wt(e&&403===e.status?"forbidden":"save")}).finally(()=>gt(!1))},gr=()=>{if(ht||bt||xt)return;const e="string"==typeof M.requestToken?M.requestToken:"";var t;""!==e?(ft(!0),wt(""),(t=e,fetch("/api/all-usage/pricing/sync",{method:"POST",headers:{"content-type":"application/json","x-all-usage-request-token":t},body:"{}"}).then(e=>{if(!e.ok){const t=new Error("HTTP "+e.status);throw t.status=e.status,t}return e.json()})).then(e=>{e&&!0===e.ok&&e.pricing?(Lt(),F(t=>null===t?t:Object.assign({},t,{pricing:e.pricing})),ct(e.pricing),dt(t=>R(t,e.pricing)),St({}),Rt({}),At(null),Dt(null),aa.current()):wt("sync")},e=>{wt(e&&403===e.status?"forbidden":"sync")}).finally(()=>ft(!1))):wt("token")},br=(e,t,a)=>{dt(r=>{if(null===r||!Array.isArray(r.mappings)||!r.mappings[e])return r;const n=r.mappings.slice();return n[e]=Object.assign({},n[e],{[t]:a}),Object.assign({},r,{mappings:n})})},fr=(e,t)=>{const a={};for(const r of Object.keys(e)){const n=Number(r);!Number.isInteger(n)||n<0||n===t||(a[String(n>t?n-1:n)]=e[r])}return a},xr=()=>{dt(e=>null===e?e:Object.assign({},e,{mappings:e.mappings.concat([{identityKey:"",model:"",catalogProviderId:"",catalogModelId:"",inputTokenSemantics:"fresh",multiplier:"1"}])}))},yr=(e,t,a)=>{dt(r=>{if(null===r||!Array.isArray(r.overrides)||!r.overrides[e])return r;const n=r.overrides.slice();return n[e]=Object.assign({},n[e],{[t]:a}),Object.assign({},r,{overrides:n})})},vr=(e,t,a,r)=>{dt(n=>{if(null===n||!Array.isArray(n.overrides)||!n.overrides[e])return n;const i=n.overrides.slice(),s=Object.assign({},i[e]),l=Array.isArray(s.tiers)?s.tiers.map(e=>Object.assign({},e)):[];return l[t]?(l[t]=Object.assign({},l[t],{[a]:r}),i[e]=Object.assign({},s,{tiered:l.length>0,tiers:l}),Object.assign({},n,{overrides:i})):n}),wt("")},wr=()=>{dt(e=>null===e?e:Object.assign({},e,{overrides:e.overrides.concat([{providerId:"",modelId:"",displayName:"",input:"",output:"",cacheRead:"",cacheWrite:"",tiered:!1,tiers:[]}])})),wt("")},kr=Aa.totals.input+Aa.totals.output+Aa.totals.cacheRead+Aa.totals.cacheWrite+Aa.totals.reasoning,Er=x(Aa.totals.input,Aa.totals.cacheRead),Nr=(S(Aa.totals),A(Aa.totals,a)),Mr=function(e,t){const a=S(e);if(a.pricedCalls>0&&0===a.unpricedCalls&&0===a.ambiguousCalls&&0===a.unsupportedCalls)return"en"===t?a.pricedCalls+" priced":a.pricedCalls+" 次已计价";const r=a.unpricedCalls+a.ambiguousCalls+a.unsupportedCalls;return r>0?"en"===t?r+" unpriced":r+" 次未计价":"en"===t?"No pricing":"暂无价格"}(Aa.totals,a);let Cr="—",Sr=n("查询中…","Checking…");if(null!=J)if("missing-key"===J.status)Cr=n("未配置","Not configured"),Sr=n("在 设置 → 模型 中填写 DeepSeek API Key 后可见","Available after you enter a DeepSeek API key in Settings → Models");else if("unavailable"===J.status)Cr=n("不可用","Unavailable"),Sr=J.message||n("DeepSeek 接口返回余额不可用","The DeepSeek API reported that balance information is unavailable");else if("error"===J.status){Cr=n("查询失败","Lookup failed");const e=J.detail?"en"===a?" ("+String(J.detail).slice(0,90)+")":"("+String(J.detail).slice(0,90)+")":"";Sr=(J.message||"")+e+n(" 点“刷新”重试"," Click Refresh to try again")}else if("ok"===J.status&&Array.isArray(J.currencies)&&J.currencies.length>0){const e=J.currencies,t=e.find(e=>"CNY"===e.currency)||e[0],r=e.filter(e=>e!==t);Cr=k(t.currency,t.total,a);let i=null!==t.total?n("赠送 ","Granted ")+k(t.currency,t.granted,a)+" · "+n("充值 ","Top-up ")+k(t.currency,t.toppedUp,a):"";r.length>0&&(i+=(i?" | ":"")+r.map(e=>k(e.currency,e.total,a)).join(" ")),Sr=i}else Cr=n("无数据","No data"),Sr="";const zr=(e,t,a,n,i)=>r.createElement("div",{className:"uh-card",style:{animationDelay:70*n+"ms"}},r.createElement("div",{className:"uh-card-label"},i?r.createElement(y,{name:i,size:14}):null,e),r.createElement("div",{className:"uh-card-value"},t),r.createElement("div",{className:"uh-card-sub"},a)),Ar=r.createElement("div",{className:"uh-ios-metric uh-ios-metric-rate",style:{animationDelay:"280ms"}},r.createElement("div",{className:"uh-ios-metric-rate-head"},r.createElement("div",{className:"uh-ios-metric-label"},r.createElement(y,{name:"cache",size:18}),n("缓存命中率","Cache Hit Rate")),r.createElement("div",{className:"uh-ios-metric-rate-value"},Er.toFixed(1)+"%")),r.createElement("div",{className:"uh-ios-metric-bar"},r.createElement("div",{className:"uh-ios-metric-fill",style:{width:Math.max(0,Math.min(100,Er))+"%"}})),r.createElement("div",{className:"uh-ios-metric-rate-detail"},"en"===a?"Context reused "+b(Aa.totals.cacheRead)+" tokens":"复用上下文 "+b(Aa.totals.cacheRead)+" Token")),Tr=Fa.length>0?Ua(Fa[0]):0,Rr=Fa.slice(0,3).map(e=>{const t=Ua(e),n=Ja.get(e.workspaceId),i=P(void 0===n?0:n),s=xe===e.workspaceId;return r.createElement("div",{key:e.workspaceId,className:"uh-wsbar"+(s?" uh-sel":""),onClick:()=>ha(e.workspaceId)},r.createElement("div",{className:"uh-wsbar-top"},r.createElement("span",{className:"uh-dot",style:{background:i}}),r.createElement("span",{className:"uh-wsbar-title"},Xa(e.workspaceId)),r.createElement("span",{className:"uh-wsbar-num"},w(b(t),t,a))),r.createElement("div",{className:"uh-barwrap uh-bar-thin"},r.createElement("div",{className:"uh-barfill",style:{width:Tr>0?Math.max(2,t/Tr*100)+"%":"0%",background:i}})))}),jr=r.createElement("div",{className:"uh-card",style:{animationDelay:"210ms"}},r.createElement("div",{className:"uh-card-label"},r.createElement(y,{name:"folder",size:14}),n("各工作区总处理量","Total Tokens Processed by Workspace")),0===Fa.length?r.createElement("div",{className:"uh-empty",style:{padding:"8px 0"}},n("暂无数据","No data yet")):r.createElement("div",{className:"uh-wsbars"},Rr,Fa.length>3?r.createElement("div",{className:"uh-card-sub"},"en"===a?"See the details table for the other "+(Fa.length-3)+" workspaces":"其余 "+(Fa.length-3)+" 个工作区见明细表"):null)),Dr=Fa.map(e=>{const t=Ya.get(e.workspaceId),i="string"==typeof La[e.workspaceId]?La[e.workspaceId]:"",s=t?t.title:n("未知工作区","Unknown workspace"),l=t?t.path:"",o=""!==i?i:s,c=""!==i?s+" · "+l:l,u=Ua(e),d=x(e.input,e.cacheRead),p=Ja.get(e.workspaceId),m=P(void 0===p?0:p),h=xe===e.workspaceId;return r.createElement("div",{key:e.workspaceId,className:"uh-row"+(h?" uh-sel":""),onClick:()=>ha(e.workspaceId)},r.createElement("div",{className:"uh-row-title-wrap"},r.createElement("div",{className:"uh-ws-title"},o),r.createElement("div",{className:"uh-ws-path"},c)),r.createElement("div",{className:"uh-num"},b(e.turns)),r.createElement("div",{className:"uh-num"},b(e.input)),r.createElement("div",{className:"uh-num"},b(e.cacheRead)),r.createElement("div",{className:"uh-num"},b(e.output)),r.createElement("div",{className:"uh-num"},b(e.reasoning)),r.createElement("div",{},r.createElement("div",{className:"uh-num"},b(u)),r.createElement("div",{className:"uh-barwrap"},r.createElement("div",{className:"uh-barfill",style:{width:Tr>0?Math.max(2,u/Tr*100)+"%":"0%",background:m}}))),r.createElement("div",{className:"uh-num uh-cost-num"},A(e,a)),r.createElement("div",{className:"uh-num"},d.toFixed(1)+"%"),r.createElement("div",{className:"uh-num"},Tr>0?(u/Tr*100).toFixed(0)+"%":"0%"))}),Ir="route"===me?n("混合查看","Combined View"):"model"===me?n("按模型合并","Grouped by Model"):n("按供应商汇总","Grouped by Provider"),Ur="route"===me?n("供应商 / 模型","Provider / Model"):"model"===me?n("模型","Model"):n("供应商","Provider"),Fr="model"!==Fe||0===Oa.length?null:r.createElement(ne,{key:"model-donut-"+Fe+":"+ia+":"+(sa||"query")+":"+me,title:"provider"===me?n("供应商用量","Provider Usage"):n("模型用量","Model Usage"),icon:"chart",language:a,items:nr}),Or="workspace"!==Fe||0===Fa.length?null:r.createElement(ne,{key:"workspace-donut-"+Fe+":"+ia+":"+(sa||"query"),title:n("工作区用量","Workspace Usage"),icon:"folder",language:a,items:ir}),Wr="model"===Fe?Oa.map(e=>{const t=Ua(e),n=x(e.input,e.cacheRead);return r.createElement("div",{key:e.identityKey||e.model,className:"uh-model-row uh-row"},r.createElement("div",{className:"uh-row-title-wrap"},r.createElement("div",{className:"uh-ws-title",title:e.model},e.model)),r.createElement("div",{className:"uh-num"},b(e.calls)),r.createElement("div",{className:"uh-num"},b(e.input)),r.createElement("div",{className:"uh-num"},b(e.cacheRead)),r.createElement("div",{className:"uh-num"},b(e.output)),r.createElement("div",{className:"uh-num"},b(e.reasoning)),r.createElement("div",{className:"uh-num"},b(t)),r.createElement("div",{className:"uh-num uh-cost-num"},A(e,a)),r.createElement("div",{className:"uh-num"},n.toFixed(1)+"%"))}):[],Lr=at?r.createElement("div",{className:"uh-panel uh-anim-panel"},r.createElement("div",{className:"uh-alias-panel-head"},r.createElement("span",{},n("工作区别名","Workspace Aliases")),r.createElement("button",{className:"uh-alias-close",onClick:()=>rt(!1)},n("关闭","Close"))),0===Wa.length?r.createElement("div",{className:"uh-empty",style:{padding:"10px 0"}},n("暂无工作区","No workspaces yet")):r.createElement("div",{className:"uh-alias-list"},Wa.map((e,t)=>r.createElement("div",{key:e.id,className:"uh-alias-item"},r.createElement("span",{className:"uh-dot",style:{background:P(t)}}),r.createElement("span",{className:"uh-alias-folder",title:e.path},e.title||e.path),r.createElement("input",{className:"uh-alias-input",value:void 0!==nt[e.id]?nt[e.id]:"",placeholder:n("项目别名","Project alias"),onChange:t=>it(a=>Object.assign({},a,{[e.id]:t.target.value})),onKeyDown:t=>{"Enter"===t.key&&dr(e.id,t.target.value)}})))),r.createElement("div",{className:"uh-alias-panel-foot"},r.createElement("span",{className:"uh-note"},n("回车保存单个;清空别名还原文件夹名","Press Enter to save one; clear an alias to restore the folder name")),r.createElement("button",{className:"uh-alias-ok",onClick:()=>{for(const e of Object.keys(nt)){const t="string"==typeof La[e]?La[e]:"";nt[e]!==t&&dr(e,nt[e])}rt(!1)}},n("全部保存","Save All")))):null,qr=_a.sync&&"object"==typeof _a.sync?_a.sync:{},Pr=st?r.createElement(ue,{revision:rr,render:()=>null!==ut?r.createElement("div",{className:"uh-panel uh-pricing-panel uh-anim-panel"},r.createElement("div",{className:"uh-pricing-head"},r.createElement("div",{className:"uh-title-with-icon"},r.createElement(y,{name:"wallet",size:16}),r.createElement("strong",{},n("成本统计设置","Cost Statistics"))),r.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:n("关闭成本设置","Close cost settings"),"aria-label":n("关闭成本设置","Close cost settings"),disabled:ht||bt||xt,onClick:pr},r.createElement(y,{name:"close",size:16}))),r.createElement("div",{className:"uh-pricing-note"},n("价格单位为 USD / 1M Token。输入上下文严格超过档位阈值时,整次请求的输入、输出和缓存均使用该档费率;可展开查看 models.dev 档位,也可在价格覆盖中自定义。","Prices are USD per 1M tokens. When input context strictly exceeds a band threshold, that band’s input, output, and cache rates apply to the whole request. Expand models.dev schedules or define custom override bands below.")),r.createElement("div",{className:"uh-pricing-toolbar"},r.createElement("label",{className:"uh-pricing-switch"},r.createElement("input",{type:"checkbox",checked:!0===ut.sync.autoEnabled,disabled:ht||bt||xt,onChange:e=>(e=>{if(null===ut||xt||ht||bt)return;const t=!0===e,a=ut.sync&&!0===ut.sync.autoEnabled;dt(e=>null===e?e:Object.assign({},e,{sync:Object.assign({},e.sync,{autoEnabled:t})})),we({pricingAutoSync:t});const r="string"==typeof M.requestToken?M.requestToken:"";if(""===r)return dt(e=>null===e?e:Object.assign({},e,{sync:Object.assign({},e.sync,{autoEnabled:a})})),we({pricingAutoSync:a}),void wt("token");const n=e=>{dt(e=>null===e?e:Object.assign({},e,{sync:Object.assign({},e.sync,{autoEnabled:a})})),we({pricingAutoSync:a}),wt(e)};yt(!0),wt(""),be({sync:{autoEnabled:t}},!1,r).then(e=>{if(!e||!0!==e.ok||!e.pricing)return void n("save");const t=e.pricing.sync&&!0===e.pricing.sync.autoEnabled;F(t=>null===t?t:Object.assign({},t,{pricing:e.pricing})),ct(e.pricing),dt(a=>null===a?a:Object.assign({},a,{sync:Object.assign({},a.sync,{autoEnabled:t,intervalMs:e.pricing.sync&&e.pricing.sync.intervalMs})})),we({pricingAutoSync:t})},e=>n(e&&403===e.status?"forbidden":"save")).finally(()=>yt(!1))})(e.target.checked)}),r.createElement("span",{},n("启用 6 小时自动同步","Enable 6-hour automatic sync"))),r.createElement("span",{className:"uh-note"},xt?n("保存中…","Saving…"):qr.lastSuccessAt>0?n("上次成功:","Last success: ")+new Date(qr.lastSuccessAt).toLocaleString():n("尚未同步","Not synced yet")),r.createElement("button",{type:"button",className:"uh-refresh",onClick:gr,disabled:bt||ht||xt},r.createElement(y,{name:"refresh",size:14}),bt?n("同步中…","Syncing…"):n("立即同步","Sync now"))),qr.lastError?r.createElement("div",{className:"uh-pricing-error",role:"alert"},n("上次同步失败:","Last sync failed: ")+qr.lastError):null,r.createElement("div",{className:"uh-pricing-section"},r.createElement("div",{className:"uh-pricing-section-head"},r.createElement("strong",{},n("当前用量匹配","Usage matches")),r.createElement("span",{className:"uh-note"},Qa.length+" "+n("个模型","models"))),0===Qa.length?r.createElement("div",{className:"uh-empty",style:{padding:"12px 0"}},n("暂无模型用量","No model usage yet")):r.createElement("div",{className:"uh-pricing-table-wrap"},r.createElement("table",{className:"uh-pricing-model-table"},r.createElement("thead",{},r.createElement("tr",{},r.createElement("th",{scope:"col"},n("当前模型","Usage model")),r.createElement("th",{scope:"col"},n("状态","Status")),r.createElement("th",{scope:"col"},n("官方模型","Official model")),r.createElement("th",{scope:"col"},n("费率档位","Rate bands")),r.createElement("th",{scope:"col",title:n("基础输入价格(USD / 1M)","Base input price (USD / 1M)")},n("输入","Input")),r.createElement("th",{scope:"col",title:n("基础输出价格(USD / 1M)","Base output price (USD / 1M)")},n("输出","Output")),r.createElement("th",{scope:"col",title:n("基础缓存读取价格(USD / 1M)","Base cache read price (USD / 1M)")},n("缓存读","Cache read")),r.createElement("th",{scope:"col",title:n("基础缓存写入价格(USD / 1M)","Base cache write price (USD / 1M)")},n("缓存写","Cache write")))),r.createElement("tbody",{},Qa.map(e=>{const t=Array.isArray(e.tiers)?e.tiers:[],i=!0===e.tiered&&!0!==e.tieredInvalid&&t.length>0&&e.rates,s=!0===e.tieredInvalid?n("档位异常","Invalid tiers"):!0===e.tiered?n("分层 · ","Tiered · ")+t.length:n("固定","Flat"),l=i?[Object.assign({type:"context",size:0},e.rates)].concat(t):[];return r.createElement(r.Fragment,{key:e.identityKey},r.createElement("tr",{},r.createElement("td",{className:"uh-pricing-model-name",title:e.model},e.model||n("未知模型","Unknown model")),r.createElement("td",{title:e.reason||""},r.createElement("span",{className:"uh-pricing-status uh-pricing-status-"+(e.status||"unpriced")},j(e.status||"unpriced",a))),r.createElement("td",{className:"uh-pricing-model-target",title:e.pricingModel||""},e.pricingModel||n("未匹配","No match")),r.createElement("td",{},r.createElement("span",{className:"uh-pricing-tier-badge"+(!0===e.tiered?"":" uh-flat")},s)),r.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.input:"—"),r.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.output:"—"),r.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.cacheRead:"—"),r.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.cacheWrite:"—")),i?r.createElement("tr",{className:"uh-pricing-tier-row"},r.createElement("td",{colSpan:8},r.createElement("details",{className:"uh-pricing-tier-details"},r.createElement("summary",{},r.createElement(y,{name:"chevron",size:13,className:"uh-pricing-tier-caret"}),n("查看完整费率表","View full rate table"),r.createElement("span",{className:"uh-pricing-tier-context"},function(e,t){const a={fresh:["Fresh:输入 + 缓存读写","Fresh: input + cache read/write"],total:["Total:输入已含缓存","Total: input already includes cache"],legacy:["Legacy:输入 + 缓存写","Legacy: input + cache write"]},r=a[e]||a.fresh;return"en"===t?r[1]:r[0]}(e.inputTokenSemantics,a)+(e.multiplier&&"1"!==e.multiplier?" · ×"+e.multiplier:""))),r.createElement("table",{className:"uh-pricing-tier-table"},r.createElement("thead",{},r.createElement("tr",{},r.createElement("th",{scope:"col"},n("输入上下文范围","Input context range")),r.createElement("th",{scope:"col"},n("输入","Input")),r.createElement("th",{scope:"col"},n("输出","Output")),r.createElement("th",{scope:"col"},n("缓存读","Cache read")),r.createElement("th",{scope:"col"},n("缓存写","Cache write")))),r.createElement("tbody",{},l.map((e,n)=>r.createElement("tr",{key:n},r.createElement("td",{},function(e,t,a){const r=Array.isArray(e)?e:[];if(t<0)return r.length>0?"≤ "+f(r[0].size,a):"en"===a?"All contexts":"全部上下文";const n=r[t];if(!n)return"";const i="> "+f(n.size,a),s=r[t+1];return s?i+("en"===a?" and ≤ ":" 且 ≤ ")+f(s.size,a):i}(t,n-1,a)),r.createElement("td",{},e.input),r.createElement("td",{},e.output),r.createElement("td",{},e.cacheRead),r.createElement("td",{},e.cacheWrite)))))))):null)}))))),r.createElement("div",{className:"uh-pricing-section"},r.createElement("div",{className:"uh-pricing-section-head"},r.createElement("strong",{},n("模型映射","Model mappings")),r.createElement("button",{type:"button",className:"uh-refresh",onClick:xr},r.createElement(y,{name:"plus",size:13}),n("添加映射","Add mapping"))),0===ut.mappings.length?r.createElement("div",{className:"uh-empty",style:{padding:"12px 0"}},n("选择当前模型后,再指定对应的官方模型。DSH Provider 不参与计价。","Select a used model, then choose its official model. The DSH provider is ignored.")):ut.mappings.map((e,t)=>{const a=String(Ct[t]||"").trim().toLowerCase(),i=U(e.model),s=U(e.catalogModelId),l=er.find(t=>t.value===String(e.identityKey||e.usageIdentityKey||""))||er.find(e=>""!==i&&e.model===i)||er.find(e=>""!==s&&e.officialModel===s),o=er.filter(e=>""===a||e.label.toLowerCase().includes(a));return r.createElement("div",{key:t,className:"uh-pricing-edit-row"},r.createElement("div",{className:"uh-pricing-used-model-picker"},r.createElement("input",{type:"text",className:"uh-pricing-used-model-input",placeholder:n("选择当前用过的模型","Select a used model"),value:void 0!==Ct[t]?Ct[t]:l?l.label:"","aria-label":n("当前用过的模型","Used model"),"aria-haspopup":"listbox","aria-expanded":zt===t,onFocus:()=>{At(t),St(e=>Object.assign({},e,{[t]:""}))},onClick:()=>At(t),onBlur:()=>setTimeout(()=>{At(e=>e===t?null:e),l&&St(e=>Object.assign({},e,{[t]:l.label}))},120),onKeyDown:e=>{"Escape"===e.key&&At(null)},onChange:e=>((e,t)=>{St(a=>Object.assign({},a,{[e]:t})),At(e),dt(t=>{if(null===t||!Array.isArray(t.mappings)||!t.mappings[e])return t;const a=t.mappings.slice();return a[e]=Object.assign({},a[e],{identityKey:"",model:"",catalogModelId:"",catalogProviderId:""}),Object.assign({},t,{mappings:a})})})(t,e.target.value)}),zt===t&&o.length>0?r.createElement("div",{className:"uh-language-options uh-pricing-used-model-options",role:"listbox","aria-label":n("当前用过的模型","Used models")},o.map(e=>r.createElement("button",{key:e.value,type:"button",role:"option",className:"uh-language-option uh-pricing-model-option",onMouseDown:e=>e.preventDefault(),onClick:()=>((e,t)=>{const a=Qa.find(e=>String(e.identityKey||e.model||"")===String(t));if(!a)return;const r=a.actualModel||a.requestedModel||a.pricingModel||"",n="priced"===a.status&&a.pricingModel||"";dt(i=>{if(null===i||!Array.isArray(i.mappings)||!i.mappings[e])return i;const s=i.mappings.slice();return s[e]=Object.assign({},s[e],{identityKey:t,model:r,catalogModelId:n,catalogProviderId:a.providerId||""}),Object.assign({},i,{mappings:s})}),St(t=>Object.assign({},t,{[e]:a.model||r})),At(null),Mt(null)})(t,e.value)},r.createElement(y,{name:"list",size:14}),r.createElement("span",{className:"uh-pricing-model-option-name"},e.label)))):null),r.createElement("div",{className:"uh-pricing-model-search"},r.createElement("input",{type:"text",className:"uh-pricing-model-search-input",placeholder:n("输入官方模型 ID 检索","Type official model ID to search"),value:e.catalogModelId||"","aria-label":n("官方模型 ID","Official model ID"),"aria-autocomplete":"list",onFocus:()=>Mt(t),onBlur:()=>setTimeout(()=>Mt(e=>e===t?null:e),120),onKeyDown:e=>{"Escape"===e.key&&Mt(null)},onChange:e=>((e,t)=>{const a=Ut.current;br(e,"catalogModelId",t),Mt(e);const r=Ft.current[e];void 0!==r&&(clearTimeout(r),delete Ft.current[e]);const n=(It.current[e]||0)+1;if(It.current[e]=n,""===String(t||"").trim())return void Et(t=>Object.assign({},t,{[e]:[]}));const i=setTimeout(()=>{delete Ft.current[e],(e=>{const t=new URLSearchParams({q:String(e||"").slice(0,120),limit:"30"});return fetch("/api/all-usage/pricing/models?"+t.toString(),{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})})(t).then(t=>{Ut.current===a&&It.current[e]===n&&Et(a=>Object.assign({},a,{[e]:Array.isArray(t&&t.items)?t.items:[]}))},()=>{Ut.current===a&&It.current[e]===n&&Et(t=>Object.assign({},t,{[e]:[]}))})},180);Ft.current[e]=i})(t,e.target.value)}),Nt===t&&Array.isArray(kt[t])&&kt[t].length>0?r.createElement("div",{className:"uh-language-options uh-pricing-model-options",role:"listbox","aria-label":n("官方模型匹配结果","Official model matches")},kt[t].map(e=>r.createElement("button",{key:e.value,type:"button",role:"option",className:"uh-language-option uh-pricing-model-option",onMouseDown:e=>e.preventDefault(),onClick:()=>((e,t)=>{if(!t||"string"!=typeof t.value)return;const a=Ft.current[e];void 0!==a&&(clearTimeout(a),delete Ft.current[e]),It.current[e]=(It.current[e]||0)+1,dt(a=>{if(null===a||!Array.isArray(a.mappings)||!a.mappings[e])return a;const r=a.mappings.slice();return r[e]=Object.assign({},r[e],{catalogModelId:t.value,catalogProviderId:t.providerId||""}),Object.assign({},a,{mappings:r})}),Mt(null)})(t,e)},r.createElement(y,{name:"list",size:14}),r.createElement("span",{className:"uh-pricing-model-option-name"},e.label||e.value),r.createElement("span",{className:"uh-pricing-model-option-id"},e.value+(!0===e.tiered?" · "+n("分层 ","tiered ")+e.tierCount:""))))):null),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("倍率","Multiplier"),title:n("成本倍率","Cost multiplier"),"aria-label":n("成本倍率","Cost multiplier"),value:e.multiplier||"1",onChange:e=>br(t,"multiplier",e.target.value)}),r.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:n("删除映射","Remove mapping"),"aria-label":n("删除映射","Remove mapping"),onClick:()=>(e=>{Ut.current+=1;const t=Ft.current;for(const e of Object.keys(t))clearTimeout(t[e]);Ft.current=fr(t,e),It.current=fr(It.current,e),Et(t=>fr(t,e)),St(t=>fr(t,e)),Rt(t=>fr(t,e));const a=t=>null==t?t:t===e?null:Number.isInteger(t)&&t>e?t-1:t;Mt(e=>a(e)),At(e=>a(e)),Dt(e=>a(e)),dt(t=>null===t?t:Object.assign({},t,{mappings:t.mappings.filter((t,a)=>a!==e)}))})(t)},r.createElement(y,{name:"close",size:14})))})),r.createElement("div",{className:"uh-pricing-section"},r.createElement("div",{className:"uh-pricing-section-head"},r.createElement("strong",{},n("显式价格覆盖","Explicit price overrides")),r.createElement("button",{type:"button",className:"uh-refresh",onClick:wr},r.createElement(y,{name:"plus",size:13}),n("添加价格","Add price"))),0===ut.overrides.length?r.createElement("div",{className:"uh-empty",style:{padding:"12px 0"}},n("仅在官方目录未覆盖或有明确官方账单时添加;可配置基础价格和上下文费率档位。","Add an override only when the official catalog lacks the model or you have an authoritative official price. Base rates and context tiers are supported.")):r.createElement(r.Fragment,null,r.createElement("div",{className:"uh-pricing-price-head"},r.createElement("span",{},n("官方模型 ID","Official model ID")),r.createElement("span",{},n("基础输入 / 1M","Base input / 1M")),r.createElement("span",{},n("基础输出 / 1M","Base output / 1M")),r.createElement("span",{},n("基础缓存读 / 1M","Base cache read / 1M")),r.createElement("span",{},n("基础缓存写 / 1M","Base cache write / 1M")),r.createElement("span",{},"")),r.createElement("div",{className:"uh-pricing-overrides"},ut.overrides.map((e,t)=>{const a=String(Tt[t]||"").trim().toLowerCase(),i=er.filter(e=>""===a||e.label.toLowerCase().includes(a)),s=Array.isArray(e.tiers)?e.tiers:[];let l=0;const o=s.map((e,a)=>{const i=I(e,l),s=Number(e&&e.size);return Number.isSafeInteger(s)&&(l=s),r.createElement("div",{key:a,className:"uh-pricing-tier-edit-row"+(i?"":" uh-invalid")},r.createElement("input",{type:"number",min:"1",max:"1000000000",step:"1",placeholder:n("阈值 Token","Token threshold"),title:n("上下文超过此 Token 数时启用本档","Use this band when context exceeds this token count"),"aria-label":n("上下文阈值 Token","Context threshold tokens"),value:void 0===e.size?"":e.size,onChange:e=>vr(t,a,"size",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("输入价 / 1M","Input / 1M"),"aria-label":n("档位输入价格 / 1M","Tier input price / 1M"),value:void 0===e.input?"":e.input,onChange:e=>vr(t,a,"input",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("输出价 / 1M","Output / 1M"),"aria-label":n("档位输出价格 / 1M","Tier output price / 1M"),value:void 0===e.output?"":e.output,onChange:e=>vr(t,a,"output",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("缓存读 / 1M","Cache read / 1M"),"aria-label":n("档位缓存读取价格 / 1M","Tier cache read price / 1M"),value:void 0===e.cacheRead?"":e.cacheRead,onChange:e=>vr(t,a,"cacheRead",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("缓存写 / 1M","Cache write / 1M"),"aria-label":n("档位缓存写入价格 / 1M","Tier cache write price / 1M"),value:void 0===e.cacheWrite?"":e.cacheWrite,onChange:e=>vr(t,a,"cacheWrite",e.target.value)}),r.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:n("删除费率档位","Remove rate band"),"aria-label":n("删除费率档位","Remove rate band"),onClick:()=>((e,t)=>{dt(a=>{if(null===a||!Array.isArray(a.overrides)||!a.overrides[e])return a;const r=a.overrides.slice(),n=Object.assign({},r[e]),i=(Array.isArray(n.tiers)?n.tiers:[]).filter((e,a)=>a!==t).map(e=>Object.assign({},e));return r[e]=Object.assign({},n,{tiered:i.length>0,tiers:i}),Object.assign({},a,{overrides:r})}),wt("")})(t,a)},r.createElement(y,{name:"close",size:14})))});return r.createElement("div",{key:t,className:"uh-pricing-override"},r.createElement("div",{className:"uh-pricing-edit-row uh-pricing-price-row"},r.createElement("div",{className:"uh-pricing-used-model-picker"},r.createElement("input",{type:"text",className:"uh-pricing-used-model-input",placeholder:n("选择当前用过的模型","Select a used model"),value:void 0!==Tt[t]?Tt[t]:e.modelId||"","aria-label":n("覆盖模型 ID","Override model ID"),"aria-haspopup":"listbox","aria-expanded":jt===t,onFocus:()=>{Dt(t),Rt(e=>Object.assign({},e,{[t]:""}))},onClick:()=>Dt(t),onBlur:()=>setTimeout(()=>{Dt(e=>e===t?null:e),e.modelId&&Rt(a=>Object.assign({},a,{[t]:e.modelId}))},120),onKeyDown:e=>{"Escape"===e.key&&Dt(null)},onChange:e=>((e,t)=>{Rt(a=>Object.assign({},a,{[e]:t})),Dt(e),yr(e,"modelId",t)})(t,e.target.value)}),jt===t&&i.length>0?r.createElement("div",{className:"uh-language-options uh-pricing-used-model-options",role:"listbox","aria-label":n("当前用过的模型","Used models")},i.map(e=>r.createElement("button",{key:e.value,type:"button",role:"option",className:"uh-language-option uh-pricing-model-option",onMouseDown:e=>e.preventDefault(),onClick:()=>((e,t)=>{const a=Qa.find(e=>String(e.identityKey||e.model||"")===String(t));if(!a)return;const r=a.pricingModel||a.actualModel||a.requestedModel||"";dt(t=>{if(null===t||!Array.isArray(t.overrides)||!t.overrides[e])return t;const n=t.overrides.slice(),i={modelId:r};return"priced"===a.status&&a.rates&&(Object.assign(i,a.rates),i.tiers=Array.isArray(a.tiers)?a.tiers.map(e=>Object.assign({},e)):[],i.tiered=i.tiers.length>0),n[e]=Object.assign({},n[e],i),Object.assign({},t,{overrides:n})}),Rt(t=>Object.assign({},t,{[e]:r})),Dt(null)})(t,e.value)},r.createElement(y,{name:"list",size:14}),r.createElement("span",{className:"uh-pricing-model-option-name"},e.label)))):null),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("输入价 / 1M","Input / 1M"),title:n("基础输入价格,美元 / 100 万 Token","Base input price, USD / 1M tokens"),"aria-label":n("基础输入价格 / 1M","Base input price / 1M"),value:void 0===e.input?"":e.input,onChange:e=>yr(t,"input",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("输出价 / 1M","Output / 1M"),title:n("基础输出价格,美元 / 100 万 Token","Base output price, USD / 1M tokens"),"aria-label":n("基础输出价格 / 1M","Base output price / 1M"),value:void 0===e.output?"":e.output,onChange:e=>yr(t,"output",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("缓存读 / 1M","Cache read / 1M"),title:n("基础缓存读取价格,美元 / 100 万 Token","Base cache read price, USD / 1M tokens"),"aria-label":n("基础缓存读取价格 / 1M","Base cache read price / 1M"),value:void 0===e.cacheRead?"":e.cacheRead,onChange:e=>yr(t,"cacheRead",e.target.value)}),r.createElement("input",{type:"number",min:"0",step:"any",placeholder:n("缓存写 / 1M","Cache write / 1M"),title:n("基础缓存写入价格,美元 / 100 万 Token","Base cache write price, USD / 1M tokens"),"aria-label":n("基础缓存写入价格 / 1M","Base cache write price / 1M"),value:void 0===e.cacheWrite?"":e.cacheWrite,onChange:e=>yr(t,"cacheWrite",e.target.value)}),r.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:n("删除价格覆盖","Remove price override"),"aria-label":n("删除价格覆盖","Remove price override"),onClick:()=>(e=>{dt(t=>null===t?t:Object.assign({},t,{overrides:t.overrides.filter((t,a)=>a!==e)}))})(t)},r.createElement(y,{name:"close",size:14}))),r.createElement("div",{className:"uh-pricing-tier-editor"},r.createElement("div",{className:"uh-pricing-tier-editor-head"},r.createElement("div",{className:"uh-pricing-tier-editor-title"},r.createElement("strong",{},n("上下文费率档位","Context rate bands")),r.createElement("span",{},n("超过阈值后,整次请求使用该档四项费率","Above a threshold, all four rates apply to the whole request"))),r.createElement("button",{type:"button",className:"uh-refresh",disabled:s.length>=32,title:s.length>=32?n("每个模型最多 32 个档位","Maximum 32 bands per model"):n("添加上下文费率档位","Add context rate band"),onClick:()=>(e=>{dt(t=>{if(null===t||!Array.isArray(t.overrides)||!t.overrides[e])return t;const a=t.overrides.slice(),r=Object.assign({},a[e]),n=Array.isArray(r.tiers)?r.tiers.map(e=>Object.assign({},e)):[];if(n.length>=32)return t;const i=n.length>0?n[n.length-1]:null,s=i&&Number.isFinite(Number(i.size))?Number(i.size):1e5,l=i||r;return n.push({type:"context",size:Math.min(1e9,s+1e5),input:void 0===l.input?"":l.input,output:void 0===l.output?"":l.output,cacheRead:void 0===l.cacheRead?"":l.cacheRead,cacheWrite:void 0===l.cacheWrite?"":l.cacheWrite}),a[e]=Object.assign({},r,{tiered:!0,tiers:n}),Object.assign({},t,{overrides:a})}),wt("")})(t)},r.createElement(y,{name:"plus",size:13}),n("添加档位","Add band"))),0===s.length?r.createElement("div",{className:"uh-pricing-tier-empty"},n("未配置档位,所有上下文使用基础费率。","No bands configured; base rates apply to every context.")):r.createElement(r.Fragment,null,r.createElement("div",{className:"uh-pricing-tier-edit-head"},r.createElement("span",{},n("超过 Token","Above tokens")),r.createElement("span",{},n("输入 / 1M","Input / 1M")),r.createElement("span",{},n("输出 / 1M","Output / 1M")),r.createElement("span",{},n("缓存读 / 1M","Cache read / 1M")),r.createElement("span",{},n("缓存写 / 1M","Cache write / 1M")),r.createElement("span",{},"")),o)))})))),""!==vt?r.createElement("div",{className:"uh-pricing-error",role:"alert"},"forbidden"===vt?n("没有权限保存成本设置","Not allowed to save cost settings"):"token"===vt?n("当前进程令牌不可用,请刷新看板","The process capability is unavailable; refresh the dashboard"):"sync"===vt?n("models.dev 同步失败,已保留上次成功目录和未保存编辑","models.dev sync failed; the last good catalog and unsaved edits were kept"):"mapping"===vt?n("模型映射无效:请选择当前模型、官方模型并填写有效倍率","Invalid model mapping: select a used model, an official model, and a valid multiplier"):"tier"===vt?n("费率档位无效:最多 32 档;阈值必须为递增的正整数,四项费率必须完整且非负","Invalid rate bands: maximum 32; thresholds must be increasing positive integers and all four rates must be complete and non-negative"):"override"===vt?n("价格覆盖无效:请选择模型并填写完整的非负基础费率","Invalid price override: select a model and enter all non-negative base rates"):n("成本设置保存失败,请检查输入","Cost settings could not be saved; check the inputs")):null,r.createElement("div",{className:"uh-pricing-foot"},r.createElement("span",{className:"uh-note"},n("保存不会重算已有正成本;回填只处理未计价调用。","Saving does not recalculate existing positive costs; backfill only handles unpriced calls.")),r.createElement("div",{className:"uh-actions"},r.createElement("button",{type:"button",className:"uh-refresh",disabled:ht||bt||xt,onClick:pr},n("取消","Cancel")),r.createElement("button",{type:"button",className:"uh-refresh",disabled:ht||bt||xt,onClick:()=>hr(!1)},ht?n("保存中…","Saving…"):n("保存","Save")),r.createElement("button",{type:"button",className:"uh-refresh uh-pricing-backfill",disabled:ht||bt||xt,onClick:()=>hr(!0)},n("保存并回填","Save and backfill"))))):r.createElement("div",{className:"uh-panel uh-pricing-panel uh-anim-panel"},r.createElement("div",{className:"uh-pricing-head"},r.createElement("div",{className:"uh-title-with-icon"},r.createElement(y,{name:"wallet",size:16}),r.createElement("strong",{},n("成本统计设置","Cost Statistics"))),r.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:n("关闭成本设置","Close cost settings"),"aria-label":n("关闭成本设置","Close cost settings"),disabled:ht||bt||xt,onClick:pr},r.createElement(y,{name:"close",size:16}))),pt?r.createElement("div",{className:"uh-empty",role:"status",style:{display:"flex",alignItems:"center",justifyContent:"center",gap:10}},r.createElement("span",{className:"uh-trend-spinner","aria-hidden":!0}),r.createElement("span",{},n("正在加载完整费率设置…","Loading full pricing settings…"))):r.createElement("div",{className:"uh-empty",role:"alert"},r.createElement("div",{},n("完整费率设置加载失败","Full pricing settings could not be loaded")),r.createElement("button",{type:"button",className:"uh-refresh",style:{marginTop:10},onClick:mr},r.createElement(y,{name:"refresh",size:14}),n("重试","Retry"))))}):null,Kr="custom"===$&&null!==va?"en"===a?va.start+" to "+va.end+" (UTC)":va.start+" 至 "+va.end:"today"===$?n("今日","Today"):"30d"===$?n("近 30 天","Last 30 Days"):"90d"===$?n("近 90 天","Last 90 Days"):n("全部","All Time"),Br=function(e,t,a){if("custom"!==e)return e;const r=o(t,a);return null===r?"custom":"custom-"+r.start+"-to-"+r.end}($,va,p),Hr="invalid"===wa?n("请选择有效的开始日期和结束日期","Choose valid start and end dates"):"order"===wa?n("结束日期不能早于开始日期","End date must be on or after the start date"):"bounds"===wa?n("可选范围为 "+ya+" 至 "+N,"Choose a date from "+ya+" to "+N):"",Vr=ie?r.createElement("div",{className:"uh-custom-range",role:"group","aria-label":n("自定义时间范围","Custom date range")},r.createElement("div",{className:"uh-custom-range-meta"},r.createElement("div",{className:"uh-custom-range-title"},r.createElement(y,{name:"calendar",size:15}),n("自定义时间范围","Custom date range")),r.createElement("div",{className:"uh-custom-range-note"},n("可查看全部可扫描历史日数据;中文按本地日期,English 按 UTC。热力图始终展示最近 53 周。","All available historical daily data can be selected. Chinese uses local dates; English uses UTC. The heatmap always shows the latest 53 weeks."))),r.createElement("div",{className:"uh-custom-range-fields"},r.createElement("label",{className:"uh-custom-range-field"},r.createElement("span",{},n("开始日期","Start date")),r.createElement("input",{type:"date",value:ae.start,min:ya,max:N,onChange:e=>re(t=>Object.assign({},t,{start:e.target.value}))})),r.createElement("label",{className:"uh-custom-range-field"},r.createElement("span",{},n("结束日期","End date")),r.createElement("input",{type:"date",value:ae.end,min:ya,max:N,onChange:e=>re(t=>Object.assign({},t,{end:e.target.value}))}))),r.createElement("div",{className:"uh-custom-range-actions"},r.createElement("button",{type:"button",className:"uh-custom-range-cancel",onClick:()=>le(!1)},n("取消","Cancel")),r.createElement("button",{type:"button",className:"uh-custom-range-apply",disabled:""!==wa,onClick:()=>{if(""!==wa)return;const e=o(ae,p);null!==e&&(te(e),Q("custom"),le(!1))}},n("应用","Apply"))),""!==Hr?r.createElement("div",{className:"uh-custom-range-error",role:"alert"},Hr):null):null,Yr=r.createElement(se,{key:ar,rows:tr,visible:Ie,language:a,rangeLabel:Kr,loading:Te&&!Ea,error:""===je||"stale"===je||Na?"":n("趋势数据加载失败","Trend data unavailable"),onToggle:sr,onPointClick:da}),Jr=null===la?Kr:la.start===la.end?la.start:la.start+" → "+la.end,Xr=r.createElement(de,{visible:"logs"===Fe,panelRef:Bt,scopeLabel:Jr,scopeUtc:!(!la||!la.utc),scopeAvailable:null!==la,loading:Ge,exporting:_e,error:et,rows:Ke,selectedId:qe,hasMore:Ye,language:a,actionKey:oa+":"+(sa||"")+":"+(He||""),onExport:async()=>{if("logs"!==Fe||null===la||_e)return;const e=sa;Qe(!0),tt("");try{let t=null;const a=[];for(let r=0;r<50;r+=1){const r=await he(la,t,200);if(null===r||"object"!=typeof r||!Array.isArray(r.items)||null===e||h(r)!==e)throw new Error("audit export stale");if(a.push(...r.items),!r.hasMore||!r.nextCursor)break;t=r.nextCursor}const r=e=>'"'+String(e??"").replace(/"/g,'""')+'"',i=e=>e.map(r).join(","),s=[n("时间","Time"),n("日期","Date"),n("Provider","Provider"),n("请求模型","Requested model"),n("实际模型","Actual model"),n("显示模型","Display model"),"turn","step","seq",n("输入","Input"),n("缓存命中","Cache read"),n("缓存写入","Cache write"),n("输出","Output"),n("推理","Reasoning"),n("成本","Cost"),n("计价状态","Cost status"),n("计价模型","Pricing model"),n("来源","Source")],l=[i([n("DSH 用量明细导出","DSH Usage Audit Export")]),i([n("范围","Scope"),la.start+" → "+la.end]),i([n("时区","Timezone"),la.utc?"UTC":n("本地","Local")]),i(s)];for(const e of a)l.push(i([e.time,e.date,e.provider,e.requestedModel,e.actualModel,e.model,e.turn,e.step,e.seq,ce(e,"input"),ce(e,"cacheRead"),ce(e,"cacheWrite"),ce(e,"output"),ce(e,"reasoning"),e.cost&&"priced"===e.cost.status?e.cost.total:"",e.cost&&e.cost.status?e.cost.status:"unpriced",e.cost&&e.cost.pricingModel?e.cost.pricingModel:"",e.materialization||"unknown"]));const o=new Blob(["\ufeff"+l.join("\r\n")],{type:"text/csv;charset=utf-8"}),c=URL.createObjectURL(o),u=document.createElement("a");u.href=c,u.download="dsh-all-usage-audit-"+la.start+"-to-"+la.end+".csv",document.body.appendChild(u),u.click(),u.remove(),URL.revokeObjectURL(c)}catch(e){tt("audit-export")}finally{Qe(!1)}},onLoadMore:()=>{if("logs"!==Fe||null===la||null===He||Ge)return;const e=ea.next(),t=sa;$e(!0),he(la,He,20).then(a=>{if(ea.isCurrent(e)){if(null===a||"object"!=typeof a||!Array.isArray(a.items)||null===t||h(a)!==t)return tt("stale"),$e(!1),void Ze(e=>e+1);Be(e=>e.concat(a.items)),Ve(a.nextCursor||null),Je(!0===a.hasMore),$e(!1),tt("")}},t=>{if(ea.isCurrent(e)){if(t&&409===t.status)return $e(!1),Ve(null),Je(!1),tt("stale"),void Ze(e=>e+1);$e(!1),tt("audit")}})},onSelect:Pe}),Zr=!or.done,Gr=or.total>0?Math.min(100,Math.round(or.scanned/or.total*100)):40,$r=or.done&&0===ur.length&&0===Aa.totals.turns&&0===Aa.totals.calls,_r="number"==typeof cr.lastCompletedAt&&cr.lastCompletedAt>0?new Date(cr.lastCompletedAt).toLocaleString("en"===a?"en-US":"zh-CN"):"",Qr=V>0?new Date(V).toLocaleString("en"===a?"en-US":"zh-CN"):"",en=""===_r?void 0:"en"===a?"Historical scan completed "+_r:"历史扫描完成于 "+_r,tn="en"===a?(""!==Qr?"Updated "+Qr:Zr?"Refreshing data":"Update state pending")+" · "+(cr.sessionsSkippedByRevision||0)+" revision reused · "+(cr.sessionsRead||0)+" read"+((cr.sessionsRestoredFromLedger||0)>0?" · "+cr.sessionsRestoredFromLedger+" ledger restored":"")+((cr.sessionsFailed||0)>0?" · "+cr.sessionsFailed+" failed":"")+" · "+(!0===cr.persistenceSnapshotsAvailable?"revision optimization on":"full-read fallback"):(""!==Qr?"已更新 "+Qr:Zr?"正在更新数据":"数据更新准备中")+" · revision 复用 "+(cr.sessionsSkippedByRevision||0)+" · 实际读取 "+(cr.sessionsRead||0)+((cr.sessionsRestoredFromLedger||0)>0?" · 账本恢复 "+cr.sessionsRestoredFromLedger:"")+((cr.sessionsFailed||0)>0?" · 失败 "+cr.sessionsFailed:"")+" · "+(!0===cr.persistenceSnapshotsAvailable?"免读优化已启用":"全量读取回退"),an=""===L?"":"en"===a?"Usage data may be stale"+(""!==Qr?"; last full update "+Qr:""):"用量数据可能已过期"+(""!==Qr?";上次完整更新 "+Qr:"");return r.createElement("div",{className:"uh-page"},r.createElement("div",{className:"uh-head"},r.createElement("div",{className:"uh-title-wrap"},r.createElement("h2",{className:"uh-title"},n("用量统计","Usage Statistics"))),r.createElement("div",{className:"uh-actions"},r.createElement("button",{className:"uh-refresh",title:n("管理工作区别名","Manage workspace aliases"),onClick:()=>{at?rt(!1):(()=>{const e={};Wa.forEach(t=>{e[t.id]="string"==typeof La[t.id]?La[t.id]:""}),it(e),rt(!0)})()}},r.createElement(y,{name:"edit",size:14}),n("工作区别名","Workspace Aliases")),r.createElement("button",{className:"uh-refresh",title:n("配置模型价格与同步","Configure model prices and sync"),disabled:ht||bt||xt,onClick:()=>{st?pr():mr()}},r.createElement(y,{name:"wallet",size:14}),n("成本设置","Cost Settings")),r.createElement("div",{className:"uh-language-menu"+(qt?" uh-open":""),ref:Kt,onKeyDown:e=>{"Escape"===e.key&&(e.preventDefault(),Pt(!1))}},r.createElement("button",{type:"button",className:"uh-language-trigger"+(qt?" uh-open":""),title:n("切换界面语言","Change interface language"),"aria-label":n("界面语言","Interface language"),"aria-haspopup":"menu","aria-expanded":qt,onClick:()=>Pt(e=>!e)},r.createElement(y,{name:"language",size:14}),r.createElement("span",{className:"uh-language-label"},"en"===a?"English":"中文"),r.createElement(y,{name:"chevron",size:13,className:"uh-language-caret"})),qt?r.createElement("div",{className:"uh-language-options",role:"menu","aria-label":n("界面语言","Interface language")},[["zh","中文"],["en","English"]].map(t=>r.createElement("button",{key:t[0],type:"button",role:"menuitemradio","aria-checked":a===t[0],className:"uh-language-option"+(a===t[0]?" uh-on":""),onClick:()=>((t=>{"function"==typeof e.onLanguageChange&&e.onLanguageChange("en"===t?"en":"zh")})(t[0]),void Pt(!1))},r.createElement(y,{name:"language",size:14}),r.createElement("span",{},t[1]),a===t[0]?r.createElement(y,{name:"check",size:14,className:"uh-language-option-check"}):null))):null),r.createElement("div",{className:"uh-range"},["today","30d","90d","all","custom"].map(e=>r.createElement("button",{key:e,type:"button",className:$===e?"uh-on":"",title:"custom"===e&&"custom"===$?Kr:void 0,onClick:()=>{"custom"===e?(()=>{const e=o(ee,p),t=i(s(E,-89,p),p);re(e||{start:t<ya?ya:t,end:N}),le(!0)})():(Q(e),le(!1))}},"today"===e?n("今日","Today"):"30d"===e?n("近 30 天","Last 30 Days"):"90d"===e?n("近 90 天","Last 90 Days"):"all"===e?n("全部","All Time"):n("自定义","Custom")))),r.createElement("button",{className:"uh-refresh",title:n("导出当前时间范围与模型查看模式的 CSV 数据","Export CSV data for the current time range and model view"),onClick:()=>{const e=e=>'"'+String(e??"").replace(/"/g,'""')+'"',t=t=>t.map(e).join(","),r=e=>e.input+e.output+e.cacheRead+e.cacheWrite+e.reasoning,s=[n("输入 Token","Input Tokens"),n("缓存命中 Token","Cache-Hit Tokens"),n("缓存写入 Token","Cache-Write Tokens"),n("输出 Token","Output Tokens"),n("推理 Token","Reasoning Tokens"),n("总处理 Token","Total Tokens Processed"),n("成本","Cost"),n("缓存命中率","Cache Hit Rate")],l=[t([n("DSH 用量统计导出","DSH Usage Statistics Export")]),t([n("导出时间","Exported At"),p?(new Date).toLocaleString("en-US",{timeZone:"UTC",timeZoneName:"short"}):(new Date).toLocaleString("zh-CN")]),t([n("时间范围","Time Range"),Kr]),t([n("时区","Timezone"),p?"UTC":n("本地","Local")]),t([n("工作区筛选","Workspace Filter"),xe||n("全部","All")]),t([n("供应商筛选","Provider Filter"),ke||n("全部","All")]),t([n("模型筛选","Model Filter"),Ne||n("全部","All")]),t([n("统计 revision","Stats Revision"),M.revision||""]),t([n("模型查看模式","Model View Mode"),Ir]),"",t([n("汇总","Summary")]),t([n("回合","Turns"),n("会话","Sessions"),...s]),t([Aa.totals.turns,Aa.totals.sessions,Aa.totals.input,Aa.totals.cacheRead,Aa.totals.cacheWrite,Aa.totals.output,Aa.totals.reasoning,r(Aa.totals),A(Aa.totals,a),x(Aa.totals.input,Aa.totals.cacheRead).toFixed(2)+"%"]),"",t([n("模型用量明细","Model Usage Details")]),t([Ur,n("调用","Calls"),...s]),...Oa.map(e=>t([e.model,e.calls,e.input,e.cacheRead,e.cacheWrite,e.output,e.reasoning,r(e),A(e,a),x(e.input,e.cacheRead).toFixed(2)+"%"])),"",t([n("工作区明细","Workspace Details")]),t([n("工作区","Workspace"),n("路径","Path"),n("回合","Turns"),...s]),...Fa.map(e=>{const n=Ya.get(e.workspaceId);return t([Xa(e.workspaceId),n?n.path:"",e.turns,e.input,e.cacheRead,e.cacheWrite,e.output,e.reasoning,r(e),A(e,a),x(e.input,e.cacheRead).toFixed(2)+"%"])})],o=new Blob(["\ufeff"+l.join("\r\n")],{type:"text/csv;charset=utf-8"}),c=URL.createObjectURL(o),u=document.createElement("a");u.href=c,u.download="dsh-all-usage-"+Br+"-"+me+"-"+i(new Date,p)+".csv",document.body.appendChild(u),u.click(),u.remove(),URL.revokeObjectURL(c)}},r.createElement(y,{name:"export",size:14}),n("导出数据","Export Data")),r.createElement("button",{className:"uh-refresh uh-icon-button",title:n("刷新统计数据","Refresh usage statistics"),"aria-label":n("刷新统计数据","Refresh usage statistics"),onClick:ma},r.createElement(y,{name:"refresh",size:16})))),r.createElement("div",{className:"uh-filter-bar",role:"group","aria-label":n("统一筛选","Unified filters")},r.createElement(pe,{label:n("全部工作区","All workspaces"),ariaLabel:n("工作区筛选","Workspace filter"),className:"uh-filter-workspace",icon:"folder",value:xe||"",options:[{value:"",label:n("全部工作区","All workspaces")}].concat(Ba.map(e=>({value:e.id,label:Xa(e.id)}))),onChange:e=>ye(e||null)}),r.createElement(pe,{label:n("全部供应商","All providers"),ariaLabel:n("供应商筛选","Provider filter"),className:"uh-filter-provider",icon:"chart",value:ke||"",options:[{value:"",label:n("全部供应商","All providers")}].concat(Pa.map(e=>({value:e,label:e}))),onChange:e=>ba(e)}),r.createElement(pe,{label:n("全部模型","All models"),ariaLabel:n("模型筛选","Model filter"),className:"uh-filter-model",icon:"cache",value:Ne||"",options:[{value:"",label:n("全部模型","All models")}].concat(Ka.map(e=>({value:e,label:e}))),onChange:e=>fa(e)}),null!==xe||null!==ke||null!==Ne?r.createElement("button",{type:"button",className:"uh-filter-clear",onClick:ga},n("清除筛选","Clear filters")):null,Te?r.createElement("span",{className:"uh-query-note"},n("正在更新筛选结果…","Updating filtered data…")):null,""!==je&&"stale"!==je?r.createElement("span",{className:"uh-query-note",role:"alert"},n("筛选结果加载失败","Filtered data unavailable")):null),at?Lr:null,Pr,Vr,Zr?r.createElement("div",{className:"uh-progress"},r.createElement("span",{},"en"===a?"Scanning historical sessions: "+or.scanned+" / "+or.total+(or.failed>0?" ("+or.failed+" failed to read)":""):"正在统计历史会话 "+or.scanned+" / "+or.total+(or.failed>0?"("+or.failed+" 个读取失败)":"")),r.createElement("div",{className:"uh-bar"},r.createElement("div",{className:"uh-fill",style:{width:Gr+"%"}}))):null,r.createElement("div",{className:"uh-sync-health"+(""!==an?" uh-stale":""),title:""!==an?void 0:en},r.createElement(y,{name:""!==an?"refresh":"clock",size:14}),r.createElement("span",{},""!==an?an:tn),""!==an?r.createElement("button",{className:"uh-sync-retry",onClick:ma},n("重试","Retry")):null),$r?r.createElement("div",{className:"uh-panel"},r.createElement("div",{className:"uh-empty"},n("还没有使用记录。开始对话后,这里会点亮。","No usage recorded yet. This area will light up after you start a conversation."))):r.createElement(r.Fragment,null,r.createElement(r.Fragment,null,r.createElement("div",{className:"uh-ios-summary"},r.createElement("div",{className:"uh-ios-summary-hero"},r.createElement("div",{className:"uh-ios-summary-total"},r.createElement("div",{className:"uh-ios-summary-total-icon"},r.createElement(y,{name:"chart",size:24})),r.createElement("div",{className:"uh-ios-summary-total-copy"},r.createElement("div",{className:"uh-ios-summary-label"},n("总处理 Token","Total Tokens Processed")),r.createElement("div",{className:"uh-ios-summary-value"},w(b(Ta),kr,a)),r.createElement("div",{className:"uh-ios-summary-caption"},"en"===a?Kr+" · "+b(Da)+(Ra?" calls":" uses")+" · includes cache reads/writes and reasoning":Kr+" · "+b(Da)+(Ra?" 次调用":" 次使用")+" · 含缓存读写与推理"))),r.createElement("div",{className:"uh-ios-summary-meta"},r.createElement("div",{className:"uh-ios-summary-meta-stat"},r.createElement("div",{className:"uh-ios-summary-meta-label"},r.createElement(y,{name:"chart",size:16}),n("总请求数","Total Requests")),r.createElement("div",{className:"uh-ios-summary-meta-value"},f(Ia,a))),r.createElement("div",{className:"uh-ios-summary-meta-stat uh-ios-summary-meta-cost"},r.createElement("div",{className:"uh-ios-summary-meta-label"},r.createElement(y,{name:"wallet",size:16}),n("估算成本","Estimated Cost")),r.createElement("div",{className:"uh-ios-summary-meta-value"},Nr),r.createElement("div",{className:"uh-ios-summary-meta-caption"},Mr)))),r.createElement("div",{className:"uh-ios-metrics"},zr(n("DeepSeek 账户余额","DeepSeek Account Balance"),Cr,Sr,0,"wallet"),zr(Ra?n("匹配调用次数","Matching Calls"):n("总使用次数","Total Uses"),b(Da),"all"!==$||Ra?"en"===a?(Ra?"Calls in ":"Turns in ")+Kr:Kr+(Ra?"内的调用数":"内的回合数"):"en"===a?Aa.totals.sessions+" sessions":Aa.totals.sessions+" 个会话",1,"chart"),zr(n("连续使用","Current Streak"),"en"===a?Ga.streak+" days":Ga.streak+" 天","en"===a?"Longest streak: "+Ga.best+" days":"最长连续 "+Ga.best+" 天",2,"clock"),jr,Ar)),r.createElement("div",{className:"uh-token-semantics"},r.createElement(y,{name:"cache",size:16}),n("总处理 Token = 输入 + 输出 + 缓存读写 + 推理。缓存命中代表复用上下文,不等于新生成 Token 或实际费用。","Total tokens processed = input + output + cache reads/writes + reasoning. Cache hits represent reused context; they are not newly generated tokens or actual cost.")),Yr,r.createElement(oe,{rows:Ca,workspaces:Wa,aliases:La,workspaceId:xe,queryUsable:Na,todayKey:N,utc:p,language:a,onWorkspaceSelect:ha,onDateClick:da}),r.createElement("div",{className:"uh-detail-tabs",role:"tablist","aria-label":n("用量明细视图","Usage detail views")},[["logs",n("请求日志","Request Logs"),"list"],["model",n("模型统计","Model Stats"),"chart"],["workspace",n("工作区统计","Workspace Stats"),"folder"]].map(e=>r.createElement("button",{key:e[0],type:"button",role:"tab","aria-selected":Fe===e[0],className:"uh-detail-tab"+(Fe===e[0]?" uh-on":""),onClick:()=>Oe(e[0])},r.createElement(y,{name:e[2],size:14}),e[1]))),Xr),"model"===Fe?r.createElement("div",{className:"uh-panel uh-ios-list-panel"},r.createElement("div",{className:"uh-hm-head"},r.createElement("h3",{className:"uh-tbl-title uh-title-with-icon",style:{margin:0}},r.createElement(y,{name:"chart",size:16}),"en"===a?"Model Usage Details ("+Kr+")":"模型用量明细("+Kr+")"),r.createElement("div",{className:"uh-range"},[["route",n("混合查看","Combined View")],["model",n("按模型","By Model")],["provider",n("按供应商","By Provider")]].map(e=>r.createElement("button",{key:e[0],className:me===e[0]?"uh-on":"",onClick:()=>fe(e[0])},e[1])))),0===Oa.length?r.createElement("div",{className:"uh-empty"},n("尚无带模型路由信息的用量记录","No usage records with model-routing information yet")):r.createElement(r.Fragment,null,Fr,r.createElement("div",{className:"uh-tbl-scroll"},r.createElement("div",{className:"uh-model-hrow uh-hrow"},r.createElement("div",{},Ur),r.createElement("div",{className:"uh-num"},n("调用","Calls")),r.createElement("div",{className:"uh-num"},n("输入","Input")),r.createElement("div",{className:"uh-num"},n("缓存命中","Cache Hits")),r.createElement("div",{className:"uh-num"},n("输出","Output")),r.createElement("div",{className:"uh-num"},n("推理","Reasoning")),r.createElement("div",{className:"uh-num"},n("总处理","Total Processed")),r.createElement("div",{className:"uh-num"},n("成本","Cost")),r.createElement("div",{className:"uh-num"},n("命中率","Hit Rate"))),Wr)),r.createElement("div",{className:"uh-note",style:{marginTop:10}},"en"===a?Ir+": Combined View distinguishes “Provider / Model”; By Model merges identically named models across providers; By Provider aggregates all of a provider’s models. Historical records without routing information are grouped as “Unknown.”":Ir+":混合查看按“供应商 / 模型”区分;按模型会跨供应商合并同名模型;按供应商则汇总其全部模型。缺少路由信息的历史记录会归为“未知”。")):null,"workspace"===Fe?r.createElement("div",{className:"uh-panel uh-ios-list-panel"},r.createElement("h3",{className:"uh-tbl-title uh-title-with-icon"},r.createElement(y,{name:"folder",size:16}),"en"===a?"Workspace Details ("+Kr+")":"工作区明细("+Kr+")"),0===Fa.length?r.createElement("div",{className:"uh-empty"},n("该时间范围内没有使用记录","No usage records in this time range")):r.createElement(r.Fragment,null,Or,r.createElement("div",{className:"uh-tbl-scroll"},r.createElement("div",{className:"uh-hrow"},r.createElement("div",{},n("工作区","Workspace")),r.createElement("div",{className:"uh-num"},n("回合","Turns")),r.createElement("div",{className:"uh-num"},n("输入","Input")),r.createElement("div",{className:"uh-num"},n("缓存命中","Cache Hits")),r.createElement("div",{className:"uh-num"},n("输出","Output")),r.createElement("div",{className:"uh-num"},n("推理","Reasoning")),r.createElement("div",{className:"uh-num"},n("总处理","Total Processed")),r.createElement("div",{className:"uh-num"},n("成本","Cost")),r.createElement("div",{className:"uh-num"},n("命中率","Hit Rate")),r.createElement("div",{className:"uh-num"},n("占比","Share"))),Dr))):null))}class Ee extends r.Component{constructor(e){super(e),this.state={error:null,resetKey:e.resetKey}}static getDerivedStateFromError(e){return{error:e}}componentDidUpdate(e){e.resetKey!==this.props.resetKey&&null!==this.state.error&&this.setState({error:null,resetKey:this.props.resetKey})}render(){return null!==this.state.error?this.props.fallback(this.state.error):this.props.children}}function Ne(e){const[t,a]=r.useState(!1),[n,i]=r.useState(0),[s,l]=r.useState(xe),o=(e,t)=>"en"===s?t:e;return r.useEffect(()=>{if(!t)return;const e=e=>{"Escape"===e.key&&a(!1)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t]),r.createElement(r.Fragment,null,r.createElement("button",{type:"button",className:"uh-side-entry",title:o("用量统计","Usage Statistics"),"aria-label":o("用量统计","Usage Statistics"),onClick:()=>a(!0)},r.createElement("span",{className:"uh-side-entry-icon"},r.createElement(y,{name:"chart",size:17})),e.wide?r.createElement("span",{className:"uh-side-entry-label"},o("用量统计","Usage Statistics")):null),t?r.createElement("div",{className:"uh-side-modal",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&a(!1)}},r.createElement("div",{className:"uh-side-dialog",role:"dialog","aria-modal":!0,"aria-label":o("用量统计","Usage Statistics")},r.createElement("div",{className:"uh-side-dialog-head"},r.createElement("button",{className:"uh-refresh uh-close-button",type:"button",title:o("关闭用量统计","Close Usage Statistics"),"aria-label":o("关闭用量统计","Close Usage Statistics"),onClick:()=>a(!1)},r.createElement(y,{name:"close",size:18}))),r.createElement(Ee,{resetKey:n,fallback:()=>r.createElement("div",{className:"uh-boundary-fallback",role:"alert"},r.createElement("div",{className:"uh-boundary-title"},o("用量统计暂时无法显示","Usage statistics is temporarily unavailable")),r.createElement("div",{className:"uh-boundary-note"},o("当前范围加载失败,入口仍然可用。","The selected range failed to render; the sidebar entry is still available.")),r.createElement("div",{className:"uh-actions"},r.createElement("button",{type:"button",className:"uh-refresh",onClick:()=>i(e=>e+1)},r.createElement(y,{name:"refresh",size:14}),o("重试","Retry")),r.createElement("button",{type:"button",className:"uh-refresh",onClick:()=>a(!1)},r.createElement(y,{name:"close",size:14}),o("关闭","Close"))))},r.createElement(ke,{timerCtx:e.timerCtx,language:s,onLanguageChange:e=>{const t="en"===e?"en":"zh";l(t),function(e){try{window.localStorage.setItem(fe,e)}catch(e){}}(t)}})))):null)}return a.inject=["timer","slots"],a.apply=e=>{const t=e.get("slots"),a=e.get("timer");void 0!==t&&void 0!==a&&t.inject("sidebar.footer.action",()=>t.register({name:"sidebar.footer.action",id:"all-usage",order:10},e=>r.createElement(Ne,{wide:e.wide,timerCtx:a})))},t}});
|
|
1
|
+
window.__ModuleLoader__.load({id:"dsh-all-usage",factory:e=>{var t={},a=t;Object.defineProperty(a,Symbol.toStringTag,{value:"Module"});const n=e("react");function r(e){return String(e).padStart(2,"0")}function i(e,t){const a=t?e.getUTCFullYear():e.getFullYear(),n=t?e.getUTCMonth():e.getMonth(),i=t?e.getUTCDate():e.getDate();return a+"-"+r(n+1)+"-"+r(i)}function l(e,t,a){return a?new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t)):new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)}function s(e,t){if("string"!=typeof e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const a=Number(e.slice(0,4)),n=Number(e.slice(5,7)),r=Number(e.slice(8,10)),l=t?new Date(Date.UTC(a,n-1,r)):new Date(a,n-1,r);return Number.isFinite(l.getTime())&&i(l,t)===e}function o(e,t){if(null===e||"object"!=typeof e)return null;const a=e.start,n=e.end;return!s(a,t)||!s(n,t)||a>n?null:{start:a,end:n}}function u(e,t){let a=t;if(Array.isArray(e))for(const n of e)n&&s(n.date,!0)&&n.date<=t&&n.date<a&&(a=n.date);return{min:a,max:t}}function c(){let e=0;return{next:()=>(e+=1,e),isCurrent:t=>t===e}}function d(e){if(null===e||"object"!=typeof e)return null;const t="string"==typeof e.instanceId?e.instanceId:"",a="number"==typeof e.revision&&Number.isFinite(e.revision)?e.revision:null;return""===t||null===a?null:t+":"+a}function p(e,t,a){const n=e&&"object"==typeof e?e[t]:void 0;return"number"==typeof n&&Number.isFinite(n)?n:a}function m(e){return null!==e&&"object"==typeof e&&["dataRevision","metadataRevision","scanRevision","pricingRevision"].every(t=>null!==p(e,t,null))}function g(e){if(null===e||"object"!=typeof e||"string"!=typeof e.instanceId||""===e.instanceId)return null;if("string"==typeof e.queryRevision&&""!==e.queryRevision)return e.instanceId+":"+e.queryRevision;const t=p(e,"dataRevision",p(e,"revision",null)),a=p(e,"pricingRevision",0);return null===t?null:e.instanceId+":"+t+":"+a}function M(e){return String(Math.round(10*e)/10)}function h(e){return"number"==typeof e&&Number.isFinite(e)?e<1e3?String(e):e<1e6?M(e/1e3)+"k":e<1e9?M(e/1e6)+"M":M(e/1e9)+"B":"0"}function y(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.round(e).toLocaleString("en"===t?"en-US":"zh-CN"):"0"}function x(e,t){const a=e+t;return a<=0?0:t/a*100}function b(e){const t=e.size||16,a={fill:"none",stroke:"currentColor",strokeWidth:1.8,strokeLinecap:"round",strokeLinejoin:"round"},r={edit:[n.createElement("path",{key:"a",d:"M12.2 3.4l2.4 2.4M4 16l2.8-.6L15 7.2a1.7 1.7 0 0 0-2.4-2.4L4.4 13z",...a})],export:[n.createElement("path",{key:"a",d:"M12 3v11M8 7l4-4 4 4M5 13v5h14v-5",...a})],refresh:[n.createElement("path",{key:"a",d:"M19 9a7 7 0 1 0 1.1 5.2M19 4v5h-5",...a})],close:[n.createElement("path",{key:"a",d:"M6 6l12 12M18 6L6 18",...a})],chart:[n.createElement("path",{key:"a",d:"M4 19V5M4 19h16M7 15l3-4 3 2 5-7",...a})],list:[n.createElement("path",{key:"a",d:"M6 6h12M6 12h12M6 18h12",...a}),n.createElement("circle",{key:"b",cx:3.5,cy:6,r:.7,fill:"currentColor"}),n.createElement("circle",{key:"c",cx:3.5,cy:12,r:.7,fill:"currentColor"}),n.createElement("circle",{key:"d",cx:3.5,cy:18,r:.7,fill:"currentColor"})],cache:[n.createElement("path",{key:"a",d:"M12 4l7 4-7 4-7-4 7-4zM5 12l7 4 7-4M5 16l7 4 7-4",...a})],wallet:[n.createElement("path",{key:"a",d:"M4 7.5A2.5 2.5 0 0 1 6.5 5H18v14H6.5A2.5 2.5 0 0 1 4 16.5zM4 8h14M14 13h.01",...a})],clock:[n.createElement("path",{key:"a",d:"M12 6v6l4 2M20 12a8 8 0 1 1-16 0 8 8 0 0 1 16 0z",...a})],folder:[n.createElement("path",{key:"a",d:"M3.5 7.5h6l2 2h9v8.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z",...a})],language:[n.createElement("circle",{key:"a",cx:12,cy:12,r:8,...a}),n.createElement("path",{key:"b",d:"M4 12h16M12 4c2.1 2.2 3.2 4.9 3.2 8S14.1 17.8 12 20M12 4C9.9 6.2 8.8 8.9 8.8 12s1.1 5.8 3.2 8",...a})],chevron:[n.createElement("path",{key:"a",d:"M7 10l5 5 5-5",...a})],check:[n.createElement("path",{key:"a",d:"M5 12.5l4.2 4.1L19 7.3",...a})],plus:[n.createElement("path",{key:"a",d:"M12 5v14M5 12h14",...a})],calendar:[n.createElement("path",{key:"a",d:"M6 4v3M18 4v3M4 9h16M5 6h14a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z",...a})]};return n.createElement("svg",{className:"uh-line-icon "+(e.className||""),width:t,height:t,viewBox:"0 0 24 24","aria-hidden":!0},r[e.name]||r.chart)}const N=[{key:"deepseek",label:"DeepSeek",providers:["deepseek","deepseek-official"],prefixes:["deepseek-"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkRlZXBTZWVrPC90aXRsZT48cGF0aCBkPSJNMjMuNzQ4IDQuNDgyYy0uMjU0LS4xMjQtLjM2NC4xMTMtLjUxMi4yMzQtLjA1MS4wMzktLjA5NC4wOS0uMTM3LjEzNi0uMzcyLjM5Ny0uODA2LjY1Ny0xLjM3My42MjYtLjgyOS0uMDQ2LTEuNTM3LjIxNC0yLjE2My44NDgtLjEzMy0uNzgyLS41NzUtMS4yNDgtMS4yNDctMS41NDgtLjM1Mi0uMTU2LS43MDgtLjMxMS0uOTU1LS42NS0uMTcyLS4yNDEtLjIxOS0uNTEtLjMwNS0uNzc0LS4wNTUtLjE2LS4xMS0uMzIzLS4yOTMtLjM1LS4yLS4wMzEtLjI3OC4xMzYtLjM1Ni4yNzYtLjMxMy41NzItLjQzNCAxLjIwMi0uNDIyIDEuODQuMDI3IDEuNDM2LjYzMyAyLjU4IDEuODM4IDMuMzkzLjEzNy4wOTMuMTcyLjE4Ny4xMjkuMzIzLS4wODIuMjgtLjE4LjU1Mi0uMjY2LjgzMy0uMDU1LjE3OS0uMTM3LjIxNy0uMzI5LjE0YTUuNTI2IDUuNTI2IDAgMDEtMS43MzYtMS4xOGMtLjg1Ny0uODI4LTEuNjMxLTEuNzQyLTIuNTk3LTIuNDU4YTExLjM2NSAxMS4zNjUgMCAwMC0uNjg5LS40NzFjLS45ODUtLjk1Ny4xMy0xLjc0My4zODgtMS44MzYuMjctLjA5OC4wOTMtLjQzMi0uNzc5LS40MjgtLjg3Mi4wMDQtMS42Ny4yOTUtMi42ODcuNjg0YTMuMDU1IDMuMDU1IDAgMDEtLjQ2NS4xMzcgOS41OTcgOS41OTcgMCAwMC0yLjg4My0uMTAyYy0xLjg4NS4yMS0zLjM5IDEuMTAyLTQuNDk3IDIuNjIzQy4wODIgOC42MDYtLjIzMSAxMC42ODQuMTUyIDEyLjg1Yy40MDMgMi4yODQgMS41NjkgNC4xNzUgMy4zNiA1LjY1MyAxLjg1OCAxLjUzMyAzLjk5NyAyLjI4NCA2LjQzOCAyLjE0IDEuNDgyLS4wODUgMy4xMzMtLjI4NCA0Ljk5NC0xLjg2LjQ3LjIzNC45NjIuMzI3IDEuNzguMzk3LjYzLjA1OSAxLjIzNi0uMDMgMS43MDUtLjEyOC43MzUtLjE1Ni42ODQtLjgzNy40MTktLjk2MS0yLjE1NS0xLjAwNC0xLjY4Mi0uNTk1LTIuMTEzLS45MjYgMS4wOTYtMS4yOTYgMi43NDYtMi42NDIgMy4zOTItNy4wMDMuMDUtLjM0Ny4wMDctLjU2NSAwLS44NDUtLjAwNC0uMTcuMDM1LS4yMzcuMjMtLjI1NmE0LjE3MyA0LjE3MyAwIDAwMS41NDUtLjQ3NWMxLjM5Ni0uNzYzIDEuOTYtMi4wMTUgMi4wOTMtMy41MTcuMDItLjIzLS4wMDQtLjQ2Ny0uMjQ3LS41ODh6TTExLjU4MSAxOGMtMi4wODktMS42NDItMy4xMDItMi4xODMtMy41Mi0yLjE2LS4zOTIuMDI0LS4zMjEuNDcxLS4yMzUuNzYzLjA5LjI4OC4yMDcuNDg2LjM3MS43MzkuMTE0LjE2Ny4xOTIuNDE2LS4xMTMuNjAzLS42NzMuNDE2LTEuODQyLS4xNC0xLjg5Ny0uMTY3LTEuMzYxLS44MDItMi41LTEuODYtMy4zMDEtMy4zMDctLjc3NC0xLjM5My0xLjIyNC0yLjg4Ny0xLjI5OC00LjQ4Mi0uMDItLjM4Ni4wOTMtLjUyMi40NzctLjU5MmE0LjY5NiA0LjY5NiAwIDAxMS41MjktLjAzOWMyLjEzMi4zMTIgMy45NDYgMS4yNjUgNS40NjggMi43NzQuODY4Ljg2IDEuNTI1IDEuODg3IDIuMjAyIDIuODkxLjcyIDEuMDY2IDEuNDk0IDIuMDgyIDIuNDggMi45MTQuMzQ4LjI5Mi42MjUuNTE0Ljg5MS42NzctLjgwMi4wOS0yLjE0LjExLTMuMDU0LS42MTR6bTEtNi40NGEuMzA2LjMwNiAwIDAxLjQxNS0uMjg3LjMwMi4zMDIgMCAwMS4yLjI4OC4zMDYuMzA2IDAgMDEtLjMxLjMwNy4zMDMuMzAzIDAgMDEtLjMwNC0uMzA4em0zLjExIDEuNTk2Yy0uMi4wODEtLjM5OS4xNTEtLjU5LjE2YTEuMjQ1IDEuMjQ1IDAgMDEtLjc5OC0uMjU0Yy0uMjc0LS4yMy0uNDctLjM1OC0uNTUyLS43NThhMS43MyAxLjczIDAgMDEuMDE2LS41ODhjLjA3LS4zMjctLjAwOC0uNTM3LS4yMzktLjcyNy0uMTg3LS4xNTYtLjQyNi0uMTk5LS42ODgtLjE5OWEuNTU5LjU1OSAwIDAxLS4yNTQtLjA3OGMtLjExLS4wNTQtLjItLjE5LS4xMTQtLjM1OC4wMjgtLjA1NC4xNi0uMTg2LjE5Mi0uMjEuMzU2LS4yMDIuNzY3LS4xMzYgMS4xNDYuMDE2LjM1Mi4xNDQuNjE4LjQwOCAxLjAwMS43ODIuMzkxLjQ1MS40NjIuNTc2LjY4NS45MTQuMTc2LjI2NS4zMzYuNTM3LjQ0NS44NDguMDY3LjE5NS0uMDE5LjM1NC0uMjUuNDUyeiIgZmlsbD0iIzRENkJGRSI+PC9wYXRoPjwvc3ZnPg=="},{key:"openai",label:"OpenAI",providers:["openai","azure-openai"],prefixes:["gpt-","o1-","o3-","o4-","o5-","codex-"],exact:["o1","o3","o4","o5"],href:"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOGE4Zjk4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+T3BlbkFJPC90aXRsZT48cGF0aCBkPSJNMjEuNTUgMTAuMDA0YTUuNDE2IDUuNDE2IDAgMDAtLjQ3OC00LjUwMWMtMS4yMTctMi4wOS0zLjY2Mi0zLjE2Ni02LjA1LTIuNjZBNS41OSA1LjU5IDAgMDAxMC44MzEgMUM4LjM5Ljk5NSA2LjIyNCAyLjU0NiA1LjQ3MyA0LjgzOEE1LjU1MyA1LjU1MyAwIDAwMS43NiA3LjQ5NmE1LjQ4NyA1LjQ4NyAwIDAwLjY5MSA2LjUgNS40MTYgNS40MTYgMCAwMC40NzcgNC41MDJjMS4yMTcgMi4wOSAzLjY2MiAzLjE2NSA2LjA1IDIuNjZBNS41ODYgNS41ODYgMCAwMDEzLjE2OCAyM2MyLjQ0My4wMDYgNC42MS0xLjU0NiA1LjM2MS0zLjg0YTUuNTUzIDUuNTUzIDAgMDAzLjcxNS0yLjY2IDUuNDg4IDUuNDg4IDAgMDAtLjY5My02LjQ5N3YuMDAxem0tOC4zODEgMTEuNTU4YTQuMTk5IDQuMTk5IDAgMDEtMi42NzUtLjk1NGMuMDM0LS4wMTguMDkzLS4wNS4xMzItLjA3NGw0LjQ0LTIuNTNhLjcxLjcxIDAgMDAuMzY0LS42MjN2LTYuMTc2bDEuODc3IDEuMDY5Yy4wMi4wMS4wMzMuMDI5LjAzNi4wNXY1LjExNWMtLjAwMyAyLjI3NC0xLjg3IDQuMTE4LTQuMTc0IDQuMTIzek00LjE5MiAxNy43OGE0LjA1OSA0LjA1OSAwIDAxLS40OTgtMi43NjNjLjAzMi4wMi4wOS4wNTUuMTMxLjA3OGw0LjQ0IDIuNTNjLjIyNS4xMy41MDQuMTMuNzMgMGw1LjQyLTMuMDg4djIuMTM4YS4wNjguMDY4IDAgMDEtLjAyNy4wNTdMOS45IDE5LjI4OGMtMS45OTkgMS4xMzYtNC41NTIuNDYtNS43MDctMS41MWgtLjAwMXpNMy4wMjMgOC4yMTZBNC4xNSA0LjE1IDAgMDE1LjE5OCA2LjQxbC0uMDAyLjE1MXY1LjA2YS43MTEuNzExIDAgMDAuMzY0LjYyNGw1LjQyIDMuMDg3LTEuODc2IDEuMDdhLjA2Ny4wNjcgMCAwMS0uMDYzLjAwNWwtNC40ODktMi41NTljLTEuOTk1LTEuMTQtMi42NzktMy42NTgtMS41My01LjYzaC4wMDF6bTE1LjQxNyAzLjU0bC01LjQyLTMuMDg4TDE0Ljg5NiA3LjZhLjA2Ny4wNjcgMCAwMS4wNjMtLjAwNmw0LjQ4OSAyLjU1N2MxLjk5OCAxLjE0IDIuNjgzIDMuNjYyIDEuNTI5IDUuNjMzYTQuMTYzIDQuMTYzIDAgMDEtMi4xNzQgMS44MDdWMTIuMzhhLjcxLjcxIDAgMDAtLjM2My0uNjIzem0xLjg2Ny0yLjc3M2E2LjA0IDYuMDQgMCAwMC0uMTMyLS4wNzhsLTQuNDQtMi41M2EuNzMxLjczMSAwIDAwLS43MjkgMGwtNS40MiAzLjA4OFY3LjMyNWEuMDY4LjA2OCAwIDAxLjAyNy0uMDU3TDE0LjEgNC43MTNjMi0xLjEzNyA0LjU1NS0uNDYgNS43MDcgMS41MTMuNDg3LjgzMy42NjQgMS44MDkuNDk5IDIuNzU3aC4wMDF6bS0xMS43NDEgMy44MWwtMS44NzctMS4wNjhhLjA2NS4wNjUgMCAwMS0uMDM2LS4wNTFWNi41NTljLjAwMS0yLjI3NyAxLjg3My00LjEyMiA0LjE4MS00LjEyLjk3NiAwIDEuOTIuMzM4IDIuNjcxLjk1NC0uMDM0LjAxOC0uMDkyLjA1LS4xMzEuMDczbC00LjQ0IDIuNTNhLjcxLjcxIDAgMDAtLjM2NS42MjNsLS4wMDMgNi4xNzN2LjAwMnptMS4wMi0yLjE2OEwxMiA5LjI1bDIuNDE0IDEuMzc1djIuNzVMMTIgMTQuNzVsLTIuNDE1LTEuMzc1di0yLjc1eiI+PC9wYXRoPjwvc3ZnPg=="},{key:"claude",label:"Anthropic Claude",providers:["anthropic"],prefixes:["claude-"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkNsYXVkZTwvdGl0bGU+PHBhdGggZD0iTTQuNzA5IDE1Ljk1NWw0LjcyLTIuNjQ3LjA4LS4yMy0uMDgtLjEyOEg5LjJsLS43OS0uMDQ4LTIuNjk4LS4wNzMtMi4zMzktLjA5Ny0yLjI2Ni0uMTIyLS41NzEtLjEyMUwwIDExLjc4NGwuMDU1LS4zNTIuNDgtLjMyMS42ODYuMDYgMS41Mi4xMDMgMi4yNzguMTU4IDEuNjUyLjA5NyAyLjQ0OS4yNTVoLjM4OWwuMDU1LS4xNTctLjEzNC0uMDk4LS4xMDMtLjA5Ny0yLjM1OC0xLjU5Ni0yLjU1Mi0xLjY4OC0xLjMzNi0uOTcyLS43MjQtLjQ5MS0uMzY0LS40NjItLjE1OC0xLjAwOC42NTYtLjcyMi44ODEuMDYuMjI1LjA2MS44OTMuNjg2IDEuOTA4IDEuNDc2IDIuNDkxIDEuODMzLjM2NS4zMDQuMTQ1LS4xMDMuMDE5LS4wNzMtLjE2NC0uMjc0LTEuMzU1LTIuNDQ2LTEuNDQ2LTIuNDktLjY0NC0xLjAzMi0uMTctLjYxOWEyLjk3IDIuOTcgMCAwMS0uMTA0LS43MjlMNi4yODMuMTM0IDYuNjk2IDBsLjk5Ni4xMzQuNDIuMzY0LjYyIDEuNDE0IDEuMDAyIDIuMjI5IDEuNTU1IDMuMDMuNDU2Ljg5OC4yNDMuODMyLjA5MS4yNTVoLjE1OFY5LjAxbC4xMjgtMS43MDYuMjM3LTIuMDk1LjIzLTIuNjk1LjA4LS43Ni4zNzYtLjkxLjc0Ny0uNDkyLjU4NC4yOC40OC42ODUtLjA2Ny40NDQtLjI4NiAxLjg1MS0uNTU5IDIuOTAzLS4zNjQgMS45NDJoLjIxMmwuMjQzLS4yNDIuOTg1LTEuMzA2IDEuNjUyLTIuMDY0LjczLS44Mi44NS0uOTA0LjU0Ny0uNDMxaDEuMDMzbC43NiAxLjEyOS0uMzQgMS4xNjYtMS4wNjQgMS4zNDctLjg4MSAxLjE0Mi0xLjI2NCAxLjctLjc5IDEuMzYuMDczLjExLjE4OC0uMDIgMi44NTYtLjYwNiAxLjU0My0uMjggMS44NDEtLjMxNS44MzMuMzg4LjA5MS4zOTUtLjMyOC44MDctMS45NjkuNDg2LTIuMzA5LjQ2Mi0zLjQzOS44MTMtLjA0Mi4wMy4wNDkuMDYxIDEuNTQ5LjE0Ni42NjIuMDM2aDEuNjIybDMuMDIuMjI1Ljc5LjUyMi40NzQuNjM4LS4wNzkuNDg1LTEuMjE1LjYyLTEuNjQtLjM4OS0zLjgyOS0uOTEtMS4zMTItLjMyOWgtLjE4MnYuMTFsMS4wOTMgMS4wNjggMi4wMDYgMS44MSAyLjUwOSAyLjMzLjEyNy41NzgtLjMyMi40NTUtLjM0LS4wNDktMi4yMDUtMS42NTctLjg1MS0uNzQ3LTEuOTI2LTEuNjJoLS4xMjh2LjE3bC40NDQuNjQ5IDIuMzQ1IDMuNTIxLjEyMiAxLjA4LS4xNy4zNTMtLjYwOC4yMTMtLjY2OC0uMTIyLTEuMzc0LTEuOTI1LTEuNDE1LTIuMTY3LTEuMTQzLTEuOTQzLS4xNC4wOC0uNjc0IDcuMjU0LS4zMTYuMzctLjcyOS4yOC0uNjA3LS40NjEtLjMyMi0uNzQ3LjMyMi0xLjQ3Ni4zODktMS45MjQuMzE1LTEuNTMuMjg2LTEuOS4xNy0uNjMyLS4wMTItLjA0Mi0uMTQuMDE4LTEuNDM0IDEuOTY3LTIuMTggMi45NDUtMS43MjYgMS44NDUtLjQxNC4xNjQtLjcxNy0uMzcuMDY3LS42NjIuNDAxLS41ODkgMi4zODgtMy4wMzYgMS40NC0xLjg4Mi45My0xLjA4Ni0uMDA2LS4xNThoLS4wNTVMNC4xMzIgMTguNTZsLTEuMTMuMTQ2LS40ODctLjQ1Ni4wNjEtLjc0Ni4yMzEtLjI0MyAxLjkwOC0xLjMxMi0uMDA2LjAwNnoiIGZpbGw9IiNEOTc3NTciIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjwvc3ZnPg=="},{key:"gemini",label:"Google Gemini",providers:["google","google-vertex","vertex"],prefixes:["gemini-","gemma-"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkdlbWluaTwvdGl0bGU+PHBhdGggZD0iTTIwLjYxNiAxMC44MzVhMTQuMTQ3IDE0LjE0NyAwIDAxLTQuNDUtMy4wMDEgMTQuMTExIDE0LjExMSAwIDAxLTMuNjc4LTYuNDUyLjUwMy41MDMgMCAwMC0uOTc1IDAgMTQuMTM0IDE0LjEzNCAwIDAxLTMuNjc5IDYuNDUyIDE0LjE1NSAxNC4xNTUgMCAwMS00LjQ1IDMuMDAxYy0uNjUuMjgtMS4zMTguNTA1LTIuMDAyLjY3OGEuNTAyLjUwMiAwIDAwMCAuOTc1Yy42ODQuMTcyIDEuMzUuMzk3IDIuMDAyLjY3N2ExNC4xNDcgMTQuMTQ3IDAgMDE0LjQ1IDMuMDAxIDE0LjExMiAxNC4xMTIgMCAwMTMuNjc5IDYuNDUzLjUwMi41MDIgMCAwMC45NzUgMGMuMTcyLS42ODUuMzk3LTEuMzUxLjY3Ny0yLjAwM2ExNC4xNDUgMTQuMTQ1IDAgMDEzLjAwMS00LjQ1IDE0LjExMyAxNC4xMTMgMCAwMTYuNDUzLTMuNjc4LjUwMy41MDMgMCAwMDAtLjk3NSAxMy4yNDUgMTMuMjQ1IDAgMDEtMi4wMDMtLjY3OHoiIGZpbGw9IiMzMTg2RkYiPjwvcGF0aD48cGF0aCBkPSJNMjAuNjE2IDEwLjgzNWExNC4xNDcgMTQuMTQ3IDAgMDEtNC40NS0zLjAwMSAxNC4xMTEgMTQuMTExIDAgMDEtMy42NzgtNi40NTIuNTAzLjUwMyAwIDAwLS45NzUgMCAxNC4xMzQgMTQuMTM0IDAgMDEtMy42NzkgNi40NTIgMTQuMTU1IDE0LjE1NSAwIDAxLTQuNDUgMy4wMDFjLS42NS4yOC0xLjMxOC41MDUtMi4wMDIuNjc4YS41MDIuNTAyIDAgMDAwIC45NzVjLjY4NC4xNzIgMS4zNS4zOTcgMi4wMDIuNjc3YTE0LjE0NyAxNC4xNDcgMCAwMTQuNDUgMy4wMDEgMTQuMTEyIDE0LjExMiAwIDAxMy42NzkgNi40NTMuNTAyLjUwMiAwIDAwLjk3NSAwYy4xNzItLjY4NS4zOTctMS4zNTEuNjc3LTIuMDAzYTE0LjE0NSAxNC4xNDUgMCAwMTMuMDAxLTQuNDUgMTQuMTEzIDE0LjExMyAwIDAxNi40NTMtMy42NzguNTAzLjUwMyAwIDAwMC0uOTc1IDEzLjI0NSAxMy4yNDUgMCAwMS0yLjAwMy0uNjc4eiIgZmlsbD0idXJsKCNsb2JlLWljb25zLWdlbWluaS0wLV9SXzBfKSI+PC9wYXRoPjxwYXRoIGQ9Ik0yMC42MTYgMTAuODM1YTE0LjE0NyAxNC4xNDcgMCAwMS00LjQ1LTMuMDAxIDE0LjExMSAxNC4xMTEgMCAwMS0zLjY3OC02LjQ1Mi41MDMuNTAzIDAgMDAtLjk3NSAwIDE0LjEzNCAxNC4xMzQgMCAwMS0zLjY3OSA2LjQ1MiAxNC4xNTUgMTQuMTU1IDAgMDEtNC40NSAzLjAwMWMtLjY1LjI4LTEuMzE4LjUwNS0yLjAwMi42NzhhLjUwMi41MDIgMCAwMDAgLjk3NWMuNjg0LjE3MiAxLjM1LjM5NyAyLjAwMi42NzdhMTQuMTQ3IDE0LjE0NyAwIDAxNC40NSAzLjAwMSAxNC4xMTIgMTQuMTEyIDAgMDEzLjY3OSA2LjQ1My41MDIuNTAyIDAgMDAuOTc1IDBjLjE3Mi0uNjg1LjM5Ny0xLjM1MS42NzctMi4wMDNhMTQuMTQ1IDE0LjE0NSAwIDAxMy4wMDEtNC40NSAxNC4xMTMgMTQuMTEzIDAgMDE2LjQ1My0zLjY3OC41MDMuNTAzIDAgMDAwLS45NzUgMTMuMjQ1IDEzLjI0NSAwIDAxLTIuMDAzLS42Nzh6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtZ2VtaW5pLTEtX1JfMF8pIj48L3BhdGg+PHBhdGggZD0iTTIwLjYxNiAxMC44MzVhMTQuMTQ3IDE0LjE0NyAwIDAxLTQuNDUtMy4wMDEgMTQuMTExIDE0LjExMSAwIDAxLTMuNjc4LTYuNDUyLjUwMy41MDMgMCAwMC0uOTc1IDAgMTQuMTM0IDE0LjEzNCAwIDAxLTMuNjc5IDYuNDUyIDE0LjE1NSAxNC4xNTUgMCAwMS00LjQ1IDMuMDAxYy0uNjUuMjgtMS4zMTguNTA1LTIuMDAyLjY3OGEuNTAyLjUwMiAwIDAwMCAuOTc1Yy42ODQuMTcyIDEuMzUuMzk3IDIuMDAyLjY3N2ExNC4xNDcgMTQuMTQ3IDAgMDE0LjQ1IDMuMDAxIDE0LjExMiAxNC4xMTIgMCAwMTMuNjc5IDYuNDUzLjUwMi41MDIgMCAwMC45NzUgMGMuMTcyLS42ODUuMzk3LTEuMzUxLjY3Ny0yLjAwM2ExNC4xNDUgMTQuMTQ1IDAgMDEzLjAwMS00LjQ1IDE0LjExMyAxNC4xMTMgMCAwMTYuNDUzLTMuNjc4LjUwMy41MDMgMCAwMDAtLjk3NSAxMy4yNDUgMTMuMjQ1IDAgMDEtMi4wMDMtLjY3OHoiIGZpbGw9InVybCgjbG9iZS1pY29ucy1nZW1pbmktMi1fUl8wXykiPjwvcGF0aD48ZGVmcz48bGluZWFyR3JhZGllbnQgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsb2JlLWljb25zLWdlbWluaS0wLV9SXzBfIiB4MT0iNyIgeDI9IjExIiB5MT0iMTUuNSIgeTI9IjEyIj48c3RvcCBzdG9wLWNvbG9yPSIjMDhCOTYyIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDhCOTYyIiBzdG9wLW9wYWNpdHk9IjAiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImxvYmUtaWNvbnMtZ2VtaW5pLTEtX1JfMF8iIHgxPSI4IiB4Mj0iMTEuNSIgeTE9IjUuNSIgeTI9IjExIj48c3RvcCBzdG9wLWNvbG9yPSIjRjk0NTQzIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRjk0NTQzIiBzdG9wLW9wYWNpdHk9IjAiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImxvYmUtaWNvbnMtZ2VtaW5pLTItX1JfMF8iIHgxPSIzLjUiIHgyPSIxNy41IiB5MT0iMTMuNSIgeTI9IjEyIj48c3RvcCBzdG9wLWNvbG9yPSIjRkFCQzEyIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIuNDYiIHN0b3AtY29sb3I9IiNGQUJDMTIiIHN0b3Atb3BhY2l0eT0iMCI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=="},{key:"meta",label:"Meta Llama",providers:["meta","meta-llama"],prefixes:["llama-","meta-llama"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPk1ldGE8L3RpdGxlPjxwYXRoIGQ9Ik02Ljg5NyA0aC0uMDI0bC0uMDMxIDIuNjE1aC4wMjJjMS43MTUgMCAzLjA0NiAxLjM1NyA1Ljk0IDYuMjQ2bC4xNzUuMjk3LjAxMi4wMiAxLjYyLTIuNDM4LS4wMTItLjAxOWE0OC43NjMgNDguNzYzIDAgMDAtMS4wOTgtMS43MTYgMjguMDEgMjguMDEgMCAwMC0xLjE3NS0xLjYyOUMxMC40MTMgNC45MzIgOC44MTIgNCA2Ljg5NiA0eiIgZmlsbD0idXJsKCNsb2JlLWljb25zLW1ldGEtMC1fUl8wXykiPjwvcGF0aD48cGF0aCBkPSJNNi44NzMgNEM0Ljk1IDQuMDEgMy4yNDcgNS4yNTggMi4wMiA3LjE3YTQuMzUyIDQuMzUyIDAgMDAtLjAxLjAxN2wyLjI1NCAxLjIzMS4wMTEtLjAxN2MuNzE4LTEuMDgzIDEuNjEtMS43NzQgMi41NjgtMS43ODVoLjAyMUw2Ljg5NiA0aC0uMDIzeiIgZmlsbD0idXJsKCNsb2JlLWljb25zLW1ldGEtMS1fUl8wXykiPjwvcGF0aD48cGF0aCBkPSJNMi4wMTkgNy4xN2wtLjAxMS4wMTdDMS4yIDguNDQ3LjU5OCA5Ljk5NS4yNzQgMTEuNjY0bC0uMDA1LjAyMiAyLjUzNC42LjAwNC0uMDIyYy4yNy0xLjQ2Ny43ODYtMi44MjggMS40NTYtMy44NDVsLjAxMS0uMDE3TDIuMDIgNy4xN3oiIGZpbGw9InVybCgjbG9iZS1pY29ucy1tZXRhLTItX1JfMF8pIj48L3BhdGg+PHBhdGggZD0iTTIuODA3IDEyLjI2NGwtMi41MzMtLjYtLjAwNS4wMjJjLS4xNzcuOTE4LS4yNjcgMS44NTEtLjI2OSAyLjc4NnYuMDIzbDIuNTk4LjIzM3YtLjAyM2ExMi41OTEgMTIuNTkxIDAgMDEuMjEtMi40NHoiIGZpbGw9InVybCgjbG9iZS1pY29ucy1tZXRhLTMtX1JfMF8pIj48L3BhdGg+PHBhdGggZD0iTTIuNjc3IDE1LjUzN2E1LjQ2MiA1LjQ2MiAwIDAxLS4wNzktLjgxM3YtLjAyMkwwIDE0LjQ2OHYuMDI0YTguODkgOC44OSAwIDAwLjE0NiAxLjY1MmwyLjUzNS0uNTg1YTQuMTA2IDQuMTA2IDAgMDEtLjAwNC0uMDIyeiIgZmlsbD0idXJsKCNsb2JlLWljb25zLW1ldGEtNC1fUl8wXykiPjwvcGF0aD48cGF0aCBkPSJNMy4yNyAxNi44OWMtLjI4NC0uMzEtLjQ4NC0uNzU2LS41ODktMS4zMjhsLS4wMDQtLjAyMS0yLjUzNS41ODUuMDA0LjAyMWMuMTkyIDEuMDEuNTY4IDEuODUgMS4xMDYgMi40ODdsLjAxNC4wMTcgMi4wMTgtMS43NDVhMi4xMDYgMi4xMDYgMCAwMS0uMDE1LS4wMTZ6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtbWV0YS01LV9SXzBfKSI+PC9wYXRoPjxwYXRoIGQ9Ik0xMC43OCA5LjY1NGMtMS41MjggMi4zNS0yLjQ1NCAzLjgyNS0yLjQ1NCAzLjgyNS0yLjAzNSAzLjItMi43MzkgMy45MTctMy44NzEgMy45MTdhMS41NDUgMS41NDUgMCAwMS0xLjE4Ni0uNTA4bC0yLjAxNyAxLjc0NC4wMTQuMDE3QzIuMDEgMTkuNTE4IDMuMDU4IDIwIDQuMzU2IDIwYzEuOTYzIDAgMy4zNzQtLjkyOCA1Ljg4NC01LjMzbDEuNzY2LTMuMTNhNDEuMjgzIDQxLjI4MyAwIDAwLTEuMjI3LTEuODg2eiIgZmlsbD0iIzAwODJGQiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMy41MDIgNS45NDZsLS4wMTYuMDE2Yy0uNC40My0uNzg2LjkwOC0xLjE2IDEuNDE2LjM3OC40ODMuNzY4IDEuMDI0IDEuMTc1IDEuNjMuNDgtLjc0My45MjgtMS4zNDUgMS4zNjctMS44MDdsLjAxNi0uMDE2LTEuMzgyLTEuMjR6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtbWV0YS02LV9SXzBfKSI+PC9wYXRoPjxwYXRoIGQ9Ik0yMC45MTggNS43MTNDMTkuODUzIDQuNjMzIDE4LjU4MyA0IDE3LjIyNSA0Yy0xLjQzMiAwLTIuNjM3Ljc4Ny0zLjcyMyAxLjk0NGwtLjAxNi4wMTYgMS4zODIgMS4yNC4wMTYtLjAxN2MuNzE1LS43NDcgMS40MDgtMS4xMiAyLjE3Ni0xLjEyLjgyNiAwIDEuNi4zOSAyLjI3IDEuMDc1bC4wMTUuMDE2IDEuNTg5LTEuNDI1LS4wMTYtLjAxNnoiIGZpbGw9IiMwMDgyRkIiPjwvcGF0aD48cGF0aCBkPSJNMjMuOTk4IDE0LjEyNWMtLjA2LTMuNDY3LTEuMjctNi41NjYtMy4wNjQtOC4zOTZsLS4wMTYtLjAxNi0xLjU4OCAxLjQyNC4wMTUuMDE2YzEuMzUgMS4zOTIgMi4yNzcgMy45OCAyLjM2MSA2Ljk3MXYuMDIzaDIuMjkydi0uMDIyeiIgZmlsbD0idXJsKCNsb2JlLWljb25zLW1ldGEtNy1fUl8wXykiPjwvcGF0aD48cGF0aCBkPSJNMjMuOTk4IDE0LjE1di0uMDIzaC0yLjI5MnYuMDIyYy4wMDQuMTQuMDA2LjI4Mi4wMDYuNDI0IDAgLjgxNS0uMTIxIDEuNDc0LS4zNjggMS45NWwtLjAxMS4wMjIgMS43MDggMS43ODIuMDEzLS4wMmMuNjItLjk2Ljk0Ni0yLjI5My45NDYtMy45MSAwLS4wODMgMC0uMTY1LS4wMDItLjI0N3oiIGZpbGw9InVybCgjbG9iZS1pY29ucy1tZXRhLTgtX1JfMF8pIj48L3BhdGg+PHBhdGggZD0iTTIxLjM0NCAxNi41MmwtLjAxMS4wMmMtLjIxNC40MDItLjUxOS42Ny0uOTE3Ljc4N2wuNzc4IDIuNDYyYTMuNDkzIDMuNDkzIDAgMDAuNDM4LS4xODIgMy41NTggMy41NTggMCAwMDEuMzY2LTEuMjE4bC4wNDQtLjA2NS4wMTItLjAyLTEuNzEtMS43ODR6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtbWV0YS05LV9SXzBfKSI+PC9wYXRoPjxwYXRoIGQ9Ik0xOS45MiAxNy4zOTNjLS4yNjIgMC0uNDkyLS4wMzktLjcxOC0uMTRsLS43OTggMi41MjJjLjQ0OS4xNTMuOTI3LjIyMiAxLjQ2LjIyMi40OTIgMCAuOTQzLS4wNzMgMS4zNTItLjIxNWwtLjc4LTIuNDYyYy0uMTY3LjA1LS4zNDEuMDc1LS41MTcuMDczeiIgZmlsbD0idXJsKCNsb2JlLWljb25zLW1ldGEtMTAtX1JfMF8pIj48L3BhdGg+PHBhdGggZD0iTTE4LjMyMyAxNi41MzRsLS4wMTQtLjAxNy0xLjgzNiAxLjkxNC4wMTYuMDE3Yy42MzcuNjgyIDEuMjQ2IDEuMTA1IDEuOTM3IDEuMzM3bC43OTctMi41MmMtLjI5MS0uMTI1LS41NzMtLjM1My0uOS0uNzMxeiIgZmlsbD0idXJsKCNsb2JlLWljb25zLW1ldGEtMTEtX1JfMF8pIj48L3BhdGg+PHBhdGggZD0iTTE4LjMwOSAxNi41MTVjLS41NS0uNjQyLTEuMjMyLTEuNzEyLTIuMzAzLTMuNDRsLTEuMzk2LTIuMzM2LS4wMTEtLjAyLTEuNjIgMi40MzguMDEyLjAyLjk4OSAxLjY2OGMuOTU5IDEuNjEgMS43NCAyLjc3NCAyLjQ5MyAzLjU4NWwuMDE2LjAxNiAxLjgzNC0xLjkxNGEyLjM1MyAyLjM1MyAwIDAxLS4wMTQtLjAxN3oiIGZpbGw9InVybCgjbG9iZS1pY29ucy1tZXRhLTEyLV9SXzBfKSI+PC9wYXRoPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ibG9iZS1pY29ucy1tZXRhLTAtX1JfMF8iIHgxPSI3NS44OTclIiB4Mj0iMjYuMzEyJSIgeTE9Ijg5LjE5OSUiIHkyPSIxMi4xOTQlIj48c3RvcCBvZmZzZXQ9Ii4wNiUiIHN0b3AtY29sb3I9IiMwODY3REYiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjQ1LjM5JSIgc3RvcC1jb2xvcj0iIzA2NjhFMSI+PC9zdG9wPjxzdG9wIG9mZnNldD0iODUuOTElIiBzdG9wLWNvbG9yPSIjMDA2NEUwIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtbWV0YS0xLV9SXzBfIiB4MT0iMjEuNjclIiB4Mj0iOTcuMDY4JSIgeTE9Ijc1Ljg3NCUiIHkyPSIyMy45ODUlIj48c3RvcCBvZmZzZXQ9IjEzLjIzJSIgc3RvcC1jb2xvcj0iIzAwNjRERiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iOTkuODglIiBzdG9wLWNvbG9yPSIjMDA2NEUwIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtbWV0YS0yLV9SXzBfIiB4MT0iMzguMjYzJSIgeDI9IjYwLjg5NSUiIHkxPSI4OS4xMjclIiB5Mj0iMTYuMTMxJSI+PHN0b3Agb2Zmc2V0PSIxLjQ3JSIgc3RvcC1jb2xvcj0iIzAwNzJFQyI+PC9zdG9wPjxzdG9wIG9mZnNldD0iNjguODElIiBzdG9wLWNvbG9yPSIjMDA2NERGIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtbWV0YS0zLV9SXzBfIiB4MT0iNDcuMDMyJSIgeDI9IjUyLjE1JSIgeTE9IjkwLjE5JSIgeTI9IjE1Ljc0NSUiPjxzdG9wIG9mZnNldD0iNy4zMSUiIHN0b3AtY29sb3I9IiMwMDdDRjYiPjwvc3RvcD48c3RvcCBvZmZzZXQ9Ijk5LjQzJSIgc3RvcC1jb2xvcj0iIzAwNzJFQyI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsb2JlLWljb25zLW1ldGEtNC1fUl8wXyIgeDE9IjUyLjE1NSUiIHgyPSI0Ny41OTElIiB5MT0iNTguMzAxJSIgeTI9IjM3LjAwNCUiPjxzdG9wIG9mZnNldD0iNy4zMSUiIHN0b3AtY29sb3I9IiMwMDdGRjkiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDdDRjYiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibG9iZS1pY29ucy1tZXRhLTUtX1JfMF8iIHgxPSIzNy42ODklIiB4Mj0iNjEuOTYxJSIgeTE9IjEyLjUwMiUiIHkyPSI2My42MjQlIj48c3RvcCBvZmZzZXQ9IjcuMzElIiBzdG9wLWNvbG9yPSIjMDA3RkY5Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDA4MkZCIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtbWV0YS02LV9SXzBfIiB4MT0iMzQuODA4JSIgeDI9IjYyLjMxMyUiIHkxPSI2OC44NTklIiB5Mj0iMjMuMTc0JSI+PHN0b3Agb2Zmc2V0PSIyNy45OSUiIHN0b3AtY29sb3I9IiMwMDdGRjgiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjkxLjQxJSIgc3RvcC1jb2xvcj0iIzAwODJGQiI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsb2JlLWljb25zLW1ldGEtNy1fUl8wXyIgeDE9IjQzLjc2MiUiIHgyPSI1Ny42MDIlIiB5MT0iNi4yMzUlIiB5Mj0iOTguNTE0JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwODJGQiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iOTkuOTUlIiBzdG9wLWNvbG9yPSIjMDA4MUZBIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtbWV0YS04LV9SXzBfIiB4MT0iNjAuMDU1JSIgeDI9IjM5Ljg4JSIgeTE9IjQuNjYxJSIgeTI9IjY5LjA3NyUiPjxzdG9wIG9mZnNldD0iNi4xOSUiIHN0b3AtY29sb3I9IiMwMDgxRkEiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDgwRjkiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibG9iZS1pY29ucy1tZXRhLTktX1JfMF8iIHgxPSIzMC4yODIlIiB4Mj0iNjEuMDgxJSIgeTE9IjU5LjMyJSIgeTI9IjMzLjI0NCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMwMjdBRjMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDgwRjkiPjwvc3RvcD48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibG9iZS1pY29ucy1tZXRhLTEwLV9SXzBfIiB4MT0iMjAuNDMzJSIgeDI9IjgyLjExMiUiIHkxPSI1MC4wMDElIiB5Mj0iNTAuMDAxJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAzNzdFRiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iOTkuOTQlIiBzdG9wLWNvbG9yPSIjMDI3OUYxIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtbWV0YS0xMS1fUl8wXyIgeDE9IjQwLjMwMyUiIHgyPSI3Mi4zOTQlIiB5MT0iMzUuMjk4JSIgeTI9IjU3LjgxMSUiPjxzdG9wIG9mZnNldD0iLjE5JSIgc3RvcC1jb2xvcj0iIzA0NzFFOSI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAzNzdFRiI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsb2JlLWljb25zLW1ldGEtMTItX1JfMF8iIHgxPSIzMi4yNTQlIiB4Mj0iNjguMDAzJSIgeTE9IjE5LjcxOSUiIHkyPSI4NC45MDglIj48c3RvcCBvZmZzZXQ9IjI3LjY1JSIgc3RvcC1jb2xvcj0iIzA4NjdERiI+PC9zdG9wPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA0NzFFOSI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=="},{key:"zhipu",label:"Zhipu GLM",providers:["zhipu","zhipuai","zai","bigmodel"],prefixes:["glm-","chatglm-"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPlpoaXB1PC90aXRsZT48cGF0aCBkPSJNMTEuOTkxIDIzLjUwM2EuMjQuMjQgMCAwMC0uMjQ0LjI0OC4yNC4yNCAwIDAwLjI0NC4yNDkuMjQuMjQgMCAwMC4yNDUtLjI0OS4yNC4yNCAwIDAwLS4yMi0uMjQ3bC0uMDI1LS4wMDF6TTkuNjcxIDUuMzY1YTEuNjk3IDEuNjk3IDAgMDExLjA5OSAyLjEzMmwtLjA3MS4xNzItLjAxNi4wNC0uMDE4LjA1NGMtLjA3LjE2LS4xMDQuMzItLjEwNC40OTgtLjAzNS43MS40NyAxLjI3OSAxLjE4NiAxLjMxNGguMzY2YzEuMzA5LjA1MyAyLjMzOCAxLjE3MyAyLjI4NiAyLjUyMy0uMDUyIDEuMzMyLTEuMTUyIDIuMzgtMi40NzggMi4zMjdoLS4xNzRjLS43MTUuMDE4LTEuMjc0LjY0LTEuMjM5IDEuMzY4IDAgLjEyNC4wMTguMjMuMDUzLjMzNy4yMDkuMzczLjU0LjY1OC45Ni44Ljc1LjIzIDEuNTE3LS4xMjUgMS45LS43ODJsLjAxOC0uMDM1Yy40MDItLjY0IDEuMTctLjk2IDEuOTItLjcxMS44NTQuMjg0IDEuMzc4IDEuMjI2IDEuMDk5IDIuMTY3YTEuNjYxIDEuNjYxIDAgMDEtMi4wNzcgMS4xMDIgMS43MTEgMS43MTEgMCAwMS0uOTA3LS43MTFsLS4wMTctLjAzNWMtLjItLjMyMy0uNDYzLS41OC0uODUxLS43MTFsLS4wNTYtLjAxOGExLjY0NiAxLjY0NiAwIDAwLTEuOTU0Ljc0NiAxLjY2IDEuNjYgMCAwMS0xLjA2NS43NjQgMS42NzcgMS42NzcgMCAwMS0xLjk4OS0xLjI3OWMtLjIwOS0uOTA2LjMzMi0xLjgzIDEuMjU3LTIuMDQzYTEuNTEgMS41MSAwIDAxLjI5Ni0uMDM1aC4wMThjLjY4LS4wNzEgMS4xNTEtLjYyMiAxLjExNi0xLjMzM2ExLjMwNyAxLjMwNyAwIDAwLS4yMjctLjY5MyAyLjUxNSAyLjUxNSAwIDAxLS4zNjYtMS40MDMgMi4zOSAyLjM5IDAgMDEuMzY2LTEuMjA4Yy4xNC0uMTk1LjIxLS40NDQuMjI3LS42OTMuMDE4LS43MS0uNTA2LTEuMjYxLTEuMTg2LTEuMzMybC0uMDctLjAxOGExLjQzIDEuNDMgMCAwMS0uMjk5LS4wN2wtLjA1LS4wMTlhMS43IDEuNyAwIDAxLTEuMDQ3LTIuMTE0IDEuNjggMS42OCAwIDAxMi4wOTQtMS4xMDF6bS01LjU3NSAxMC4xMWMuMjYtLjI2NC42MzktLjM2Ny45OTQtLjI3LjM1NS4wOTYuNjMzLjM3OS43MjguNzQuMDk1LjM2Mi0uMDA3Ljc0OC0uMjY3IDEuMDEzLS40MDIuNDEtMS4wNTMuNDEtMS40NTUgMGExLjA2MiAxLjA2MiAwIDAxMC0xLjQ4MnptMTQuODQ1LS4yOTRjLjM1OS0uMDkuNzM4LjAyNC45OTIuMjk3LjI1NC4yNzQuMzQ0LjY2NS4yMzcgMS4wMjUtLjEwNy4zNi0uMzk2LjYzNC0uNzU2LjcxOC0uNTUxLjEyOC0xLjEtLjIyLTEuMjMtLjc4MWExLjA1IDEuMDUgMCAwMS43NTctMS4yNnptLS4wNjQtNC4zOWMuMzE0LjMyLjQ5Ljc1My40OSAxLjIwNiAwIC40NTItLjE3Ni44ODYtLjQ5IDEuMjA2LS4zMTUuMzItLjc0LjUtMS4xODUuNS0uNDQ0IDAtLjg3LS4xOC0xLjE4NC0uNWExLjcyNyAxLjcyNyAwIDAxMC0yLjQxMiAxLjY1NCAxLjY1NCAwIDAxMi4zNjkgMHptLTExLjI0My4xNjNjLjM2NC40ODQuNDQ3IDEuMTI4LjIxOCAxLjY5MWExLjY2NSAxLjY2NSAwIDAxLTIuMTg4LjkyM2MtLjg1NS0uMzYtMS4yNi0xLjM1OC0uOTA3LTIuMjI4YTEuNjggMS42OCAwIDAxMS4zMy0xLjAzOGMuNTkzLS4wOCAxLjE4My4xNjkgMS41NDcuNjUyem0xMS41NDUtNC4yMjFjLjM2OCAwIC43MDguMi44OTIuNTI0LjE4NC4zMjQuMTg0LjcyNCAwIDEuMDQ4YTEuMDI2IDEuMDI2IDAgMDEtLjg5Mi41MjRjLS41NjggMC0xLjAzLS40Ny0xLjAzLTEuMDQ4IDAtLjU3OS40NjItMS4wNDggMS4wMy0xLjA0OHptLTE0LjM1OCAwYy4zNjggMCAuNzA3LjIuODkxLjUyNC4xODQuMzI0LjE4NC43MjQgMCAxLjA0OGExLjAyNiAxLjAyNiAwIDAxLS44OTEuNTI0Yy0uNTY5IDAtMS4wMy0uNDctMS4wMy0xLjA0OCAwLS41NzkuNDYxLTEuMDQ4IDEuMDMtMS4wNDh6bTEwLjAzMS0xLjQ3NWMuOTI1IDAgMS42NzUuNzY0IDEuNjc1IDEuNzA2cy0uNzUgMS43MDUtMS42NzUgMS43MDUtMS42NzQtLjc2My0xLjY3NC0xLjcwNWMwLS45NDIuNzUtMS43MDYgMS42NzQtMS43MDZ6bS0yLjYyNi0uNjg0Yy4zNjItLjA4Mi42NTMtLjM1Ni43NjEtLjcxOGExLjA2MiAxLjA2MiAwIDAwLS4yMzgtMS4wMjggMS4wMTcgMS4wMTcgMCAwMC0uOTk2LS4yOTRjLS41NDcuMTQtLjg4MS43LS43NTIgMS4yNTcuMTMuNTU4LjY3NS45MDcgMS4yMjUuNzgzem0wIDE2Ljg3NmMuMzU5LS4wODcuNjQ0LS4zNi43NS0uNzJhMS4wNjIgMS4wNjIgMCAwMC0uMjM3LTEuMDE5IDEuMDE4IDEuMDE4IDAgMDAtLjk4NS0uMzAxIDEuMDM3IDEuMDM3IDAgMDAtLjc2Mi43MTdjLS4xMDguMzYxLS4wMTcuNzU0LjIzOSAxLjAyOC4yNDUuMjYzLjYwNi4zNzcuOTUzLjMwNWwuMDQzLS4wMXpNMTcuMTkgMy41YS42MzEuNjMxIDAgMDAuNjI4LS42NGMwLS4zNTUtLjI3OS0uNjQtLjYyOC0uNjRhLjYzMS42MzEgMCAwMC0uNjI4LjY0YzAgLjM1NS4yOC42NC42MjguNjR6bS0xMC4zOCAwYS42MzEuNjMxIDAgMDAuNjI4LS42NGMwLS4zNTUtLjI4LS42NC0uNjI4LS42NGEuNjMxLjYzMSAwIDAwLS42MjguNjRjMCAuMzU1LjI3OS42NC42MjguNjR6bS01LjE4MiA3Ljg1MmEuNjMxLjYzMSAwIDAwLS42MjguNjRjMCAuMzU0LjI4LjYzOS42MjguNjM5YS42My42MyAwIDAwLjYyNy0uNjA2bC4wMDEtLjAzNGEuNjIuNjIgMCAwMC0uNjI4LS42NHptNS4xODIgOS4xM2EuNjMxLjYzMSAwIDAwLS42MjguNjRjMCAuMzU1LjI3OS42NC42MjguNjRhLjYzMS42MzEgMCAwMC42MjgtLjY0YzAtLjM1NS0uMjgtLjY0LS42MjgtLjY0em0xMC4zOC4wMThhLjYzMS42MzEgMCAwMC0uNjI4LjY0YzAgLjM1NS4yOC42NC42MjguNjRhLjYzMS42MzEgMCAwMC42MjgtLjY0YzAtLjM1NS0uMjc5LS42NC0uNjI4LS42NHptNS4xODItOS4xNDhhLjYzMS42MzEgMCAwMC0uNjI4LjY0YzAgLjM1NC4yNzkuNjM5LjYyOC42MzlhLjYzMS42MzEgMCAwMC42MjgtLjY0YzAtLjM1NS0uMjgtLjY0LS42MjgtLjY0em0tLjM4NC00Ljk5MmEuMjQuMjQgMCAwMC4yNDQtLjI0OS4yNC4yNCAwIDAwLS4yNDQtLjI0OS4yNC4yNCAwIDAwLS4yNDQuMjQ5YzAgLjE0Mi4xMjIuMjQ5LjI0NC4yNDl6TTExLjk5MS40OTdhLjI0LjI0IDAgMDAuMjQ1LS4yNDhBLjI0LjI0IDAgMDAxMS45OSAwYS4yNC4yNCAwIDAwLS4yNDQuMjQ5YzAgLjEzMy4xMDguMjM2LjIyMy4yNDdsLjAyMS4wMDF6TTIuMDExIDYuMzZhLjI0LjI0IDAgMDAuMjQ1LS4yNDkuMjQuMjQgMCAwMC0uMjQ0LS4yNDkuMjQuMjQgMCAwMC0uMjQ0LjI0OS4yNC4yNCAwIDAwLjI0NC4yNDl6bTAgMTEuMjYzYS4yNC4yNCAwIDAwLS4yNDMuMjQ4LjI0LjI0IDAgMDAuMjQ0LjI0OS4yNC4yNCAwIDAwLjI0NC0uMjQ5LjI1Mi4yNTIgMCAwMC0uMjQ0LS4yNDh6bTE5Ljk5NS0uMDE4YS4yNC4yNCAwIDAwLS4yNDUuMjQ4LjI0LjI0IDAgMDAuMjQ1LjI1LjI0LjI0IDAgMDAuMjQ0LS4yNS4yNTIuMjUyIDAgMDAtLjI0NC0uMjQ4eiIgZmlsbD0iIzM4NTlGRiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PC9zdmc+"},{key:"grok",label:"xAI Grok",providers:["xai"],prefixes:["grok-"],exact:["grok"],href:"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOGE4Zjk4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMWVtIiBzdHlsZT0iZmxleDpub25lO2xpbmUtaGVpZ2h0OjEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+R3JvazwvdGl0bGU+PHBhdGggZD0iTTkuMjcgMTUuMjlsNy45NzgtNS44OTdjLjM5MS0uMjkuOTUtLjE3NyAxLjEzNy4yNzIuOTggMi4zNjkuNTQyIDUuMjE1LTEuNDEgNy4xNjktMS45NTEgMS45NTQtNC42NjcgMi4zODItNy4xNDkgMS40MDZsLTIuNzExIDEuMjU3YzMuODg5IDIuNjYxIDguNjExIDIuMDAzIDExLjU2Mi0uOTUzIDIuMzQxLTIuMzQ0IDMuMDY2LTUuNTM5IDIuMzg4LTguNDJsLjAwNi4wMDdjLS45ODMtNC4yMzIuMjQyLTUuOTI0IDIuNzUtOS4zODMuMDYtLjA4Mi4xMi0uMTY0LjE3OS0uMjQ4bC0zLjMwMSAzLjMwNXYtLjAxTDkuMjY3IDE1LjI5Mk03LjYyMyAxNi43MjNjLTIuNzkyLTIuNjctMi4zMS02LjgwMS4wNzEtOS4xODQgMS43NjEtMS43NjMgNC42NDctMi40ODMgNy4xNjYtMS40MjVsMi43MDUtMS4yNWE3LjgwOCA3LjgwOCAwIDAwLTEuODI5LTFBOC45NzUgOC45NzUgMCAwMDUuOTg0IDUuODNjLTIuNTMzIDIuNTM2LTMuMzMgNi40MzYtMS45NjIgOS43NjQgMS4wMjIgMi40ODctLjY1MyA0LjI0Ni0yLjM0IDYuMDIyLS41OTkuNjMtMS4xOTkgMS4yNTktMS42ODIgMS45MjVsNy42Mi02LjgxNSI+PC9wYXRoPjwvc3ZnPg=="},{key:"qwen",label:"Qwen",providers:["qwen","alibaba","dashscope","bailian"],prefixes:["qwen","qwq-","qvq-"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPlF3ZW48L3RpdGxlPjxwYXRoIGQ9Ik0xMi42MDQgMS4zNGMuMzkzLjY5Ljc4NCAxLjM4MiAxLjE3NCAyLjA3NWEuMTguMTggMCAwMC4xNTcuMDkxaDUuNTUyYy4xNzQgMCAuMzIyLjExLjQ0Ni4zMjdsMS40NTQgMi41N2MuMTkuMzM3LjI0LjQ3OC4wMjQuODM3LS4yNi40My0uNTEzLjg2NC0uNzYgMS4zbC0uMzY3LjY1OGMtLjEwNi4xOTYtLjIyMy4yOC0uMDQuNTEybDIuNjUyIDQuNjM3Yy4xNzIuMzAxLjExMS40OTQtLjA0My43Ny0uNDM3Ljc4NS0uODgyIDEuNTY0LTEuMzM1IDIuMzQtLjE1OS4yNzItLjM1Mi4zNzUtLjY4LjM3LS43NzctLjAxNi0xLjU1Mi0uMDEtMi4zMjcuMDE2YS4wOTkuMDk5IDAgMDAtLjA4MS4wNSA1NzUuMDk3IDU3NS4wOTcgMCAwMS0yLjcwNSA0Ljc0Yy0uMTY5LjI5My0uMzguMzYzLS43MjUuMzY0LS45OTcuMDAzLTIuMDAyLjAwNC0zLjAxNy4wMDJhLjUzNy41MzcgMCAwMS0uNDY1LS4yNzFsLTEuMzM1LTIuMzIzYS4wOS4wOSAwIDAwLS4wODMtLjA0OUg0Ljk4MmMtLjI4NS4wMy0uNTUzLS4wMDEtLjgwNS0uMDkybC0xLjYwMy0yLjc3YS41NDMuNTQzIDAgMDEtLjAwMi0uNTRsMS4yMDctMi4xMmEuMTk4LjE5OCAwIDAwMC0uMTk3IDU1MC45NTEgNTUwLjk1MSAwIDAxLTEuODc1LTMuMjcybC0uNzktMS4zOTVjLS4xNi0uMzEtLjE3My0uNDk2LjA5NS0uOTY1LjQ2NS0uODEzLjkyNy0xLjYyNSAxLjM4Ny0yLjQzNi4xMzItLjIzNC4zMDQtLjMzNC41ODQtLjMzNWEzMzguMyAzMzguMyAwIDAxMi41ODktLjAwMS4xMjQuMTI0IDAgMDAuMTA3LS4wNjNsMi44MDYtNC44OTVhLjQ4OC40ODggMCAwMS40MjItLjI0NmMuNTI0LS4wMDEgMS4wNTMgMCAxLjU4My0uMDA2TDExLjcwNCAxYy4zNDEtLjAwMy43MjQuMDMyLjkuMzR6bS0zLjQzMi40MDNhLjA2LjA2IDAgMDAtLjA1Mi4wM0w2LjI1NCA2Ljc4OGEuMTU3LjE1NyAwIDAxLS4xMzUuMDc4SDMuMjUzYy0uMDU2IDAtLjA3LjAyNS0uMDQxLjA3NGw1LjgxIDEwLjE1NmMuMDI1LjA0Mi4wMTMuMDYyLS4wMzQuMDYzbC0yLjc5NS4wMTVhLjIxOC4yMTggMCAwMC0uMi4xMTZsLTEuMzIgMi4zMWMtLjA0NC4wNzgtLjAyMS4xMTguMDY4LjExOGw1LjcxNi4wMDhjLjA0NiAwIC4wOC4wMi4xMDQuMDYxbDEuNDAzIDIuNDU0Yy4wNDYuMDgxLjA5Mi4wODIuMTM5IDBsNS4wMDYtOC43Ni43ODMtMS4zODJhLjA1NS4wNTUgMCAwMS4wOTYgMGwxLjQyNCAyLjUzYS4xMjIuMTIyIDAgMDAuMTA3LjA2MmwyLjc2My0uMDJhLjA0LjA0IDAgMDAuMDM1LS4wMi4wNDEuMDQxIDAgMDAwLS4wNGwtMi45LTUuMDg2YS4xMDguMTA4IDAgMDEwLS4xMTNsLjI5My0uNTA3IDEuMTItMS45NzdjLjAyNC0uMDQxLjAxMi0uMDYyLS4wMzUtLjA2Mkg5LjJjLS4wNTkgMC0uMDczLS4wMjYtLjA0My0uMDc3bDEuNDM0LTIuNTA1YS4xMDcuMTA3IDAgMDAwLS4xMTRMOS4yMjUgMS43NzRhLjA2LjA2IDAgMDAtLjA1My0uMDMxem02LjI5IDguMDJjLjA0NiAwIC4wNTguMDIuMDM0LjA2bC0uODMyIDEuNDY1LTIuNjEzIDQuNTg1YS4wNTYuMDU2IDAgMDEtLjA1LjAyOS4wNTguMDU4IDAgMDEtLjA1LS4wMjlMOC40OTggOS44NDFjLS4wMi0uMDM0LS4wMS0uMDUyLjAyOC0uMDU0bC4yMTYtLjAxMiA2LjcyMi0uMDEyeiIgZmlsbD0idXJsKCNsb2JlLWljb25zLXF3ZW4tX1JfMF8pIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImxvYmUtaWNvbnMtcXdlbi1fUl8wXyIgeDE9IjAlIiB4Mj0iMTAwJSIgeTE9IjAlIiB5Mj0iMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM2MzM2RTciIHN0b3Atb3BhY2l0eT0iLjg0Ij48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNkY2OUY3IiBzdG9wLW9wYWNpdHk9Ii44NCI+PC9zdG9wPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg=="},{key:"doubao",label:"Doubao",providers:["doubao","bytedance","volcengine","ark"],prefixes:["doubao-"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkRvdWJhbzwvdGl0bGU+PHBhdGggZD0iTTUuMzEgMTUuNzU2Yy4xNzItMy43NSAxLjg4My01Ljk5OSAyLjU0OS02LjczOS0zLjI2IDIuMDU4LTUuNDI1IDUuNjU4LTYuMzU4IDguMzA4djEuMTJDMS41MDEgMjEuNTEzIDQuMjI2IDI0IDcuNTkgMjRhNi41OSA2LjU5IDAgMDAyLjItLjM3NWMuMzUzLS4xMi43LS4yNDggMS4wMzktLjM3OC45MTMtLjg5OSAxLjY1LTEuOTEgMi4yNDMtMi45OTItNC44NzcgMi40MzEtNy45NzQuMDcyLTcuNzYzLTQuNWwuMDAyLjAwMXoiIGZpbGw9IiMxRTM3RkMiPjwvcGF0aD48cGF0aCBkPSJNMjIuNTcgMTAuMjgzYy0xLjIxMi0uOTAxLTQuMTA5LTIuNDA0LTcuMzk3LTIuOC4yOTUgMy43OTIuMDkzIDguNzY2LTIuMSAxMi43NzNhMTIuNzgyIDEyLjc4MiAwIDAxLTIuMjQ0IDIuOTkyYzMuNzY0LTEuNDQ4IDYuNzQ2LTMuNDU3IDguNTk2LTUuMjE5IDIuODItMi42ODMgMy4zNTMtNS4xNzggMy4zNjEtNi42NmEyLjczNyAyLjczNyAwIDAwLS4yMTYtMS4wODR2LS4wMDJ6IiBmaWxsPSIjMzdFMUJFIj48L3BhdGg+PHBhdGggZD0iTTE0LjMwMyAxLjg2N0MxMi45NTUuNyAxMS4yNDggMCA5LjM5IDAgNy41MzIgMCA1Ljg4My42NzcgNC41NDUgMS44MDcgMi43OTEgMy4yOSAxLjYyNyA1LjU1NyAxLjUgOC4xMjV2OS4yMDFjLjkzMi0yLjY1IDMuMDk3LTYuMjUgNi4zNTctOC4zMDcuNS0uMzE4IDEuMDI1LS41OTUgMS41NjktLjgyOSAxLjg4My0uODAxIDMuODc4LS45MzIgNS43NDYtLjcwNi0uMjIyLTIuODMtLjcxOC01LjAwMi0uODctNS42MTdoLjAwMXoiIGZpbGw9IiNBNTY5RkYiPjwvcGF0aD48cGF0aCBkPSJNMTcuMzA1IDQuOTYxYTE5OS40NyAxOTkuNDcgMCAwMS0xLjA4LTEuMDk0Yy0uMjAyLS4yMTMtLjM5OC0uNDE5LS41ODYtLjYyMmwtMS4zMzMtMS4zNzhjLjE1MS42MTUuNjQ4IDIuNzg2Ljg2OSA1LjYxNyAzLjI4OC4zOTUgNi4xODUgMS44OTggNy4zOTYgMi44LTEuMzA2LTEuMjc1LTMuNDc1LTMuNDg3LTUuMjY2LTUuMzIzeiIgZmlsbD0iIzFFMzdGQyI+PC9wYXRoPjwvc3ZnPg=="},{key:"kimi",label:"Moonshot Kimi",providers:["moonshot","moonshotai"],prefixes:["kimi-","moonshot-"],exact:["kimi"],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPktpbWk8L3RpdGxlPjxwYXRoIGQ9Ik0yMS44NDYgMGExLjkyMyAxLjkyMyAwIDExMCAzLjg0NkgyMC4xNWEuMjI2LjIyNiAwIDAxLS4yMjctLjIyNlYxLjkyM0MxOS45MjMuODYxIDIwLjc4NCAwIDIxLjg0NiAweiIgZmlsbD0iIzE3ODNGRiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMS4wNjUgMTEuMTk5bDcuMjU3LTcuMmMuMTM3LS4xMzYuMDYtLjQxLS4xMTYtLjQxSDE0LjNhLjE2NC4xNjQgMCAwMC0uMTE3LjA1MWwtNy44MiA3Ljc1NmMtLjEyMi4xMi0uMzAyLjAxMy0uMzAyLS4xNzlWMy44MmMwLS4xMjctLjA4My0uMjMtLjE4NS0uMjNIMy4xODZjLS4xMDMgMC0uMTg2LjEwMy0uMTg2LjIzVjE5Ljc3YzAgLjEyOC4wODMuMjMuMTg2LjIzaDIuNjljLjEwMyAwIC4xODYtLjEwMi4xODYtLjIzdi0zLjI1YzAtLjA2OS4wMjUtLjEzNS4wNjktLjE3OGwyLjQyNC0yLjQwNmEuMTU4LjE1OCAwIDAxLjIwNS0uMDIzbDYuNDg0IDQuNzcyYTcuNjc3IDcuNjc3IDAgMDAzLjQ1MyAxLjI4M2MuMTA4LjAxMi4yLS4wOTUuMi0uMjN2LTMuMDZjMC0uMTE3LS4wNy0uMjEyLS4xNjQtLjIyN2E1LjAyOCA1LjAyOCAwIDAxLTIuMDI3LS44MDdsLTUuNjEzLTQuMDY0Yy0uMTE3LS4wNzgtLjEzMi0uMjc5LS4wMjgtLjM4MXoiIGZpbGw9IiNmZmYiPjwvcGF0aD48L3N2Zz4="},{key:"minimax",label:"MiniMax",providers:["minimax"],prefixes:["minimax-","abab"],exact:[],href:"data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPk1pbmltYXg8L3RpdGxlPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ibG9iZS1pY29ucy1taW5pbWF4LV9SXzBfIiB4MT0iMCUiIHgyPSIxMDAuMTgyJSIgeTE9IjUwLjA1NyUiIHkyPSI1MC4wNTclIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjRTIxNjdFIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjRkU2MDNDIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZD0iTTE2LjI3OCAyYzEuMTU2IDAgMi4wOTMuOTI3IDIuMDkzIDIuMDd2MTIuNTAxYS43NC43NCAwIDAwLjc0NC43MDkuNzQuNzQgMCAwMC43NDMtLjcwOVY5LjA5OWEyLjA2IDIuMDYgMCAwMTIuMDcxLTIuMDQ5QTIuMDYgMi4wNiAwIDAxMjQgOS4xdjYuNTYxYS42NDkuNjQ5IDAgMDEtLjY1Mi42NDUuNjQ5LjY0OSAwIDAxLS42NTMtLjY0NVY5LjFhLjc2Mi43NjIgMCAwMC0uNzY2LS43NTguNzYyLjc2MiAwIDAwLS43NjYuNzU4djcuNDcyYTIuMDM3IDIuMDM3IDAgMDEtMi4wNDggMi4wMjYgMi4wMzcgMi4wMzcgMCAwMS0yLjA0OC0yLjAyNnYtMTIuNWEuNzg1Ljc4NSAwIDAwLS43ODgtLjc1My43ODUuNzg1IDAgMDAtLjc4OS43NTJsLS4wMDEgMTUuOTA0QTIuMDM3IDIuMDM3IDAgMDExMy40NDEgMjJhMi4wMzcgMi4wMzcgMCAwMS0yLjA0OC0yLjAyNlYxOC4wNGMwLS4zNTYuMjkyLS42NDUuNjUyLS42NDUuMzYgMCAuNjUyLjI4OS42NTIuNjQ1djEuOTM0YzAgLjI2My4xNDIuNTA2LjM3Mi42MzguMjMuMTMxLjUxNC4xMzEuNzQ0IDBhLjczNC43MzQgMCAwMC4zNzItLjYzOFY0LjA3YzAtMS4xNDMuOTM3LTIuMDcgMi4wOTMtMi4wN3ptLTUuNjc0IDBjMS4xNTYgMCAyLjA5My45MjcgMi4wOTMgMi4wN3YxMS41MjNhLjY0OC42NDggMCAwMS0uNjUyLjY0NS42NDguNjQ4IDAgMDEtLjY1Mi0uNjQ1VjQuMDdhLjc4NS43ODUgMCAwMC0uNzg5LS43OC43ODUuNzg1IDAgMDAtLjc4OS43OHYxNC4wMTNhMi4wNiAyLjA2IDAgMDEtMi4wNyAyLjA0OCAyLjA2IDIuMDYgMCAwMS0yLjA3MS0yLjA0OFY5LjFhLjc2Mi43NjIgMCAwMC0uNzY2LS43NTguNzYyLjc2MiAwIDAwLS43NjYuNzU4djMuOGEyLjA2IDIuMDYgMCAwMS0yLjA3MSAyLjA0OUEyLjA2IDIuMDYgMCAwMTAgMTIuOXYtMS4zNzhjMC0uMzU3LjI5Mi0uNjQ2LjY1Mi0uNjQ2LjM2IDAgLjY1My4yOS42NTMuNjQ2VjEyLjljMCAuNDE4LjM0My43NTcuNzY2Ljc1N3MuNzY2LS4zMzkuNzY2LS43NTdWOS4wOTlhMi4wNiAyLjA2IDAgMDEyLjA3LTIuMDQ4IDIuMDYgMi4wNiAwIDAxMi4wNzEgMi4wNDh2OC45ODRjMCAuNDE5LjM0My43NTguNzY3Ljc1OC40MjMgMCAuNzY2LS4zMzkuNzY2LS43NThWNC4wN2MwLTEuMTQzLjkzNy0yLjA3IDIuMDkzLTIuMDd6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtbWluaW1heC1fUl8wXykiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjwvc3ZnPg=="}],w=Array.isArray(N)?N:[],j=new Map(w.map(e=>[e.key,e])),L=new Map;function f(e){const t="string"==typeof e?e.trim().toLowerCase():"";if(""===t)return null;for(const e of w)if(e.providers.includes(t))return e;return null}function I(e,t){if(""===t||!e.startsWith(t))return!1;if(e.length===t.length)return!0;if(/[-_.:\/]$/.test(t))return!0;const a=e.charAt(t.length);return"-"===a||"_"===a||"."===a||":"===a||"/"===a||/[a-z]$/.test(t)&&/[0-9]/.test(a)}function D(e){const t=function(e){if("string"!=typeof e)return"";let t=e.trim().toLowerCase();const a=t.lastIndexOf("/");return a>=0&&(t=t.slice(a+1)),t.split(":")[0].replace(/@/g,"-").trim()}(e);if(""===t)return null;for(const e of w)if(e.exact.includes(t))return e;let a=null,n=0;for(const e of w)for(const r of e.prefixes)I(t,r)&&r.length>n&&(a=e,n=r.length);return a}function v(e){if(0===w.length||null===e||"object"!=typeof e)return null;const t="string"==typeof e.actualModel?e.actualModel:"",a="string"==typeof e.requestedModel?e.requestedModel:"",n="string"==typeof e.model?e.model:"",r="string"==typeof e.provider?e.provider:"",i=t+"\0"+a+"\0"+n+"\0"+r;if(L.has(i))return L.get(i);const l=n.includes(" / ")?n.slice(n.indexOf(" / ")+3):n;let s=D(""!==t?t:a);if(null===s&&""===t&&""===a){const e=f(r),t=D(l);s=null===e||null!==t&&t!==e?t:e}return L.size>=2e3&&L.clear(),L.set(i,s),s}function E(e){if(!Array.isArray(e)||0===e.length)return null;let t=null;for(const a of e){const e=v(a);if(null===e)return null;if(null===t)t=e;else if(t!==e)return null}return t}function A(e,t){if("en"===t||"number"!=typeof e||!Number.isFinite(e)||e<1e4)return"";const a=e>=1e8?e/1e8:e/1e4,n=Math.round(1e3*a)/1e3;return String(n)+(e>=1e8?"亿":"万")}function S(e,t,a){const r=A(t,a);return n.createElement(n.Fragment,null,e,r?n.createElement("span",{className:"uh-unit"},r):null)}function z(e,t,a){return null==t?"—":("CNY"===e?"¥":"USD"===e?"$":e+" ")+t.toLocaleString("en"===a?"en-US":"zh-CN",{minimumFractionDigits:4,maximumFractionDigits:4})}function T(e){const t=("number"==typeof e?String(e):"string"==typeof e?e.trim().toLowerCase():"").match(/^(\d+)(?:\.(\d+))?(?:e([+-]?\d+))?$/);if(!t)return{digits:0n,scale:0};let a=(t[1]||"")+(t[2]||""),n=(t[2]||"").length-(t[3]?Number(t[3]):0);for(n<0&&(a+="0".repeat(-n),n=0),n>a.length&&(a="0".repeat(n-a.length+1)+a);n>0&&a.length>1&&a.endsWith("0");)a=a.slice(0,-1),n-=1;return{digits:BigInt(a.replace(/^0+(?=\d)/,"")||"0"),scale:n}}function k(e){const t=T(e);if(0n===t.digits)return"0";const a=t.digits.toString();if(0===t.scale)return a;const n=a.padStart(t.scale+1,"0"),r=n.length-t.scale;return n.slice(0,r)+"."+n.slice(r)}function C(e,t){const a=T(e),n=T(t),r=Math.max(a.scale,n.scale);return k((a.digits*10n**BigInt(r-a.scale)+n.digits*10n**BigInt(r-n.scale)).toString()+(r>0?"e-"+r:""))}function O(){return{currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0}}function Y(e){const t=e&&e.cost&&"object"==typeof e.cost?e.cost:e&&"object"==typeof e?e:{},a={currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0};if(a.currency="string"==typeof t.currency&&""!==t.currency?t.currency:"USD",t.breakdown&&"object"==typeof t.breakdown)return"priced"===t.status?(a.input=k(t.breakdown.input),a.output=k(t.breakdown.output),a.cacheRead=k(t.breakdown.cacheRead),a.cacheWrite=k(t.breakdown.cacheWrite),a.baseTotal=k(t.baseTotal),a.total=k(t.total),a.pricedCalls=1):"ambiguous"===t.status?a.ambiguousCalls=1:"unsupported"===t.status?a.unsupportedCalls=1:a.unpricedCalls=1,a;for(const e of["input","output","cacheRead","cacheWrite","baseTotal","total"])a[e]=k(t[e]);for(const e of["pricedCalls","unpricedCalls","ambiguousCalls","unsupportedCalls"])a[e]=Number.isFinite(t[e])?t[e]:0;return a}function U(e,t){const a=Y(t);for(const t of["input","output","cacheRead","cacheWrite","baseTotal","total"])e[t]=C(e[t],a[t]);return e.pricedCalls+=a.pricedCalls,e.unpricedCalls+=a.unpricedCalls,e.ambiguousCalls+=a.ambiguousCalls,e.unsupportedCalls+=a.unsupportedCalls,e}function Q(e,t){const a=Y(e);if(a.pricedCalls<=0)return"—";const n=Number(a.total);return Number.isFinite(n)?z(a.currency,n,t):a.currency+" "+a.total}function W(e,t){const a=e&&e.cost&&"object"==typeof e.cost?e.cost:{},n=[];return a.pricingPolicyId&&n.push(a.pricingPolicyId),"UTC"===a.pricingTimezone&&Number.isFinite(a.pricingAt)&&n.push(("en"===t?"at ":"计费时刻 ")+new Date(a.pricingAt).toISOString().slice(0,16).replace("T"," ")+" UTC"),n.length>0?n.join(" · "):null}function R(e){const t=e&&e.config&&"object"==typeof e.config?e.config:{},a=t.sync&&"object"==typeof t.sync?t.sync:{};return{sync:{autoEnabled:!0===a.autoEnabled,intervalMs:Number.isFinite(a.intervalMs)?a.intervalMs:216e5},providerAliases:t.providerAliases&&"object"==typeof t.providerAliases?Object.assign({},t.providerAliases):{},mappings:Array.isArray(t.mappings)?t.mappings.map(e=>Object.assign({},e)):[],overrides:Array.isArray(t.overrides)?t.overrides.map(e=>Object.assign({},e,{tiers:Array.isArray(e.tiers)?e.tiers.map(e=>Object.assign({},e)):[]})):[]}}function P(e,t){const a=R(t);if(null===e||"object"!=typeof e)return a;const n=R({config:e});return Object.assign({},a,{providerAliases:n.providerAliases,mappings:n.mappings,overrides:n.overrides})}function G(e,t){const a={priced:["已计价","priced"],unpriced:["未计价","unpriced"],ambiguous:["待确认","ambiguous"],unsupported:["不支持","unsupported"]},n=a[e]||a.unpriced;return"en"===t?n[1]:n[0]}function Z(e){const t=String(e??"").trim().toLowerCase();if(""===t||t.length>128)return!1;const a=t.match(/^(\d+)(?:\.(\d+))?(?:e([+-]?\d+))?$/);if(!a)return!1;const n=a[3]?Number(a[3]):0;if(!Number.isSafeInteger(n)||Math.abs(n)>24)return!1;let r=(a[1]||"")+(a[2]||""),i=(a[2]||"").length-n;return r=r.replace(/^0+(?=\d)/,""),i<0&&(r+="0".repeat(-i),i=0),i>r.length&&(r="0".repeat(i-r.length+1)+r),r.length<=40}function F(e,t){const a=Number(e&&e.size);return!(!e||"context"!==e.type||!Number.isSafeInteger(a)||a<=t||a>1e9)&&["input","output","cacheRead","cacheWrite"].every(t=>Z(e[t]))}function B(e){return String(e||"").trim().toLowerCase().replace(/^.*\//,"").split(":")[0]}function H(e,t){const a=e.split("-"),n="en"===t,r=n?new Date(Date.UTC(Number(a[0]),Number(a[1])-1,Number(a[2]))):new Date(Number(a[0]),Number(a[1])-1,Number(a[2])),i=n?r.getUTCMonth():r.getMonth(),l=n?r.getUTCDay():r.getDay();if("en"===t){const e=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][l];return["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][i]+" "+Number(a[2])+", "+a[0]+" ("+e+", UTC)"}const s=["周日","周一","周二","周三","周四","周五","周六"][l];return a[0]+"年"+Number(a[1])+"月"+Number(a[2])+"日 "+s}function J(e,t,a){if("en"===a){const a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][t];return 0===t?e+" "+a:a}return 0===t?e+"年1月":t+1+"月"}function X(e){return e>=10?4:e>=6?3:e>=3?2:e>=1?1:0}const V=[20,45,70,96];function K(e){return e<=0?"var(--dsw-alias-bg-layer-2)":"color-mix(in srgb, #2ea043 "+V[e-1]+"%, var(--dsw-alias-bg-layer-2))"}function q(e){return"hsl("+137*e%360+", 70%, 55%)"}function $(e,t,a,n){const r=a&&Array.isArray(e&&e.byDayUtc)?e.byDayUtc:Array.isArray(e&&e.byDay)?e.byDay:[],s=i(new Date,a);if("custom"===t){const e=o(n,a);return null===e?null:{start:e.start,end:e.end}}if("today"===t)return{start:s,end:s};if("30d"===t)return{start:i(l(new Date,-29,a),a),end:s};if("90d"===t)return{start:i(l(new Date,-89,a),a),end:s};const c=u(r,s);return{start:c.min,end:c.max}}function _(e){return null===e?"":JSON.stringify({start:e.start,end:e.end,utc:!0===e.utc,workspaceId:e.workspaceId||null,provider:e.provider||null,modelKey:e.modelKey||null})}function ee(e){const t=e&&e.tokens&&"object"==typeof e.tokens?e.tokens:e||{};return{input:Number.isFinite(t.input)?t.input:0,output:Number.isFinite(t.output)?t.output:0,cacheRead:Number.isFinite(t.cacheRead)?t.cacheRead:0,cacheWrite:Number.isFinite(t.cacheWrite)?t.cacheWrite:0,reasoning:Number.isFinite(t.reasoning)?t.reasoning:0}}function te(e,t,a){return e&&Number.isFinite(e.time)?function(e,t,a){const n=a?{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}:{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1};return"en"===t&&(n.timeZone="UTC"),new Date(e).toLocaleString("en"===t?"en-US":"zh-CN",n)}(e.time,t,a):e&&"string"==typeof e.date?a?H(e.date,t):e.date.slice(5):""}function ae(e,t){return e&&Number.isFinite(e.time)?String(e.time):e&&"string"==typeof e.date?e.date:String(t)}function ne(e){return e&&"string"==typeof e.date?e.date:""}function re(e,t,a){const n="string"==typeof e.actualModel&&""!==e.actualModel?e.actualModel:"string"==typeof e.requestedModel&&""!==e.requestedModel?e.requestedModel:"",r="string"==typeof e.model&&""!==e.model?e.model:a,i=r.indexOf(" / "),l=("string"==typeof e.provider&&""!==e.provider?e.provider:"")||(i>0?r.slice(0,i):t),s=l!==t?l+" / ":"",o=""!==n?r:""!==s&&r.startsWith(s)?r.slice(s.length):i>0?r.slice(i+3):r;return{provider:l,model:function(e){const t=String(e||"").trim();return t.includes(" / ")?t:B(t)}(n||o)||a}}function ie(e,t){const[a,r]=n.useState({value:0,done:!1});return n.useEffect(()=>{if("number"!=typeof e||!Number.isFinite(e)||e<=0)return void r({value:0,done:!1});if(a.done)return void r({value:e,done:!0});const n=Date.now(),i=t.interval(()=>{const t=Math.min(1,(Date.now()-n)/700),a=1-Math.pow(1-t,3);t>=1?(i(),r({value:e,done:!0})):r({value:Math.round(e*a),done:!1})},32);return i},[e]),a.value}function le(e){if(!Array.isArray(e)||0===e.length)return"";if(1===e.length)return"M"+e[0].x.toFixed(2)+" "+e[0].y.toFixed(2);const t=[];for(let a=0;a<e.length-1;a+=1){const n=e[a+1].x-e[a].x;t.push(0===n?0:(e[a+1].y-e[a].y)/n)}const a=new Array(e.length).fill(0);a[0]=t[0],a[e.length-1]=t[t.length-1];for(let n=1;n<e.length-1;n+=1){const e=t[n-1],r=t[n];a[n]=e*r<=0?0:(e+r)/2}for(let e=0;e<t.length;e+=1){if(0===t[e]){a[e]=0,a[e+1]=0;continue}const n=a[e]/t[e],r=a[e+1]/t[e],i=n*n+r*r;if(i>9){const l=3/Math.sqrt(i);a[e]=l*n*t[e],a[e+1]=l*r*t[e]}}let n="M"+e[0].x.toFixed(2)+" "+e[0].y.toFixed(2);for(let t=0;t<e.length-1;t+=1){const r=e[t+1].x-e[t].x,i=e[t].x+r/3,l=e[t].y+a[t]*r/3,s=e[t+1].x-r/3,o=e[t+1].y-a[t+1]*r/3;n+=" C"+i.toFixed(2)+" "+l.toFixed(2)+" "+s.toFixed(2)+" "+o.toFixed(2)+" "+e[t+1].x.toFixed(2)+" "+e[t+1].y.toFixed(2)}return n}function se(e){if(!Array.isArray(e)||e.length<2)return 1;let t=0;for(let a=1;a<e.length;a+=1){const n=e[a].x-e[a-1].x,r=e[a].y-e[a-1].y;t+=Math.sqrt(n*n+r*r)}return Math.max(1,Math.ceil(1.35*t+2))}const oe=["#0a84ff","#30d158","#bf5af2","#ff9f0a","#ff375f","#64d2ff"],ue={total:"#f4c542",input:"#5aa9ff",cacheRead:"#44d483",cacheWrite:"#d98bff",output:"#ff8c66",reasoning:"#aab4c4"},ce={total:.2,input:.16,cacheRead:.18,cacheWrite:.14,output:.16,reasoning:.1};function de(e,t){const a=A(e,t);return""!==a?a:h(e)}function pe(e,t){return de(e,t)+("en"===t?" tokens":" Token")}function me(e,t,a,n,r){const i=Math.max(0,r-n),l=n=>({x:e+a*Math.cos(n),y:t+a*Math.sin(n)}),s=l(n);if(i>=2*Math.PI-1e-4){const e=l(n+Math.PI);return"M"+s.x.toFixed(2)+" "+s.y.toFixed(2)+" A"+a+" "+a+" 0 1 1 "+e.x.toFixed(2)+" "+e.y.toFixed(2)+" A"+a+" "+a+" 0 1 1 "+s.x.toFixed(2)+" "+s.y.toFixed(2)}const o=l(r);return"M"+s.x.toFixed(2)+" "+s.y.toFixed(2)+" A"+a+" "+a+" 0 "+(i>Math.PI?1:0)+" 1 "+o.x.toFixed(2)+" "+o.y.toFixed(2)}const ge=n.memo(function(e){const t="en"===e.language?"en":"zh",[a,r]=n.useState(null),i=n.useRef(null),l=n.useRef(null),s=n.useRef(null),o=n.useRef(null),u=n.useMemo(()=>function(e,t,a=5){const n=Math.max(1,Number.isInteger(a)?a:5),r=(Array.isArray(e)?e:[]).map((e,t)=>({label:e&&void 0!==e.label?String(e.label):"",value:Number(e&&e.value),color:e&&"string"==typeof e.color&&""!==e.color?e.color:oe[t%oe.length],iconKey:e&&void 0!==e.iconKey?e.iconKey:void 0,cost:Y(e)})).filter(e=>""!==e.label&&Number.isFinite(e.value)&&e.value>0).sort((e,t)=>t.value-e.value),i=r.reduce((e,t)=>e+t.value,0);if(i<=0)return{total:0,segments:[]};const l=r.slice(0,n),s=r.slice(n),o=s.reduce((e,t)=>e+t.value,0);if(o>0){const e={currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0};for(const t of s)U(e,t.cost);l.push({label:t+" ("+(r.length-n)+")",value:o,color:"#b8c2cf",iconKey:null,cost:e,other:!0})}let u=-Math.PI/2;return{total:i,segments:l.map((e,t)=>{const a=e.value/i*Math.PI*2,n=l.length>1?Math.min(.018,a/3):0,r=u+n,s=u+a-n;return u+=a,{...e,index:t,percentage:e.value/i*100,startAngle:s<=r?u-a:r,endAngle:s<=r?u:s}})}}(e.items,"en"===t?"Other":"其他"),[e.items,t]),c=null===a?null:u.segments[a]||null,d=e=>(e>=10?Math.round(e):Math.round(10*e)/10)+"%",p=n.useCallback(()=>{s.current=null,null!==o.current&&(window.clearTimeout(o.current),o.current=null);const e=i.current,t=l.current;if(null!==e&&null!==t){if(t.fixed)e.style.left=t.left+"px",e.style.top=t.top+"px";else{const a=t.visual?.getBoundingClientRect();if(!a)return;const n=198,r=82;e.style.left=Math.max(8,Math.min(Math.max(8,a.width-n),t.x-a.left+14))+"px",e.style.top=Math.max(8,Math.min(Math.max(8,a.height-r),t.y-a.top+14))+"px"}e.style.visibility="visible"}},[]),m=n.useCallback(e=>{l.current=e,null===s.current&&(s.current=window.requestAnimationFrame(p),o.current=window.setTimeout(()=>{null!==s.current&&(window.cancelAnimationFrame(s.current),p())},80))},[p]),g=n.useCallback(e=>{m({x:e.clientX,y:e.clientY,visual:e.currentTarget.ownerSVGElement?.parentElement})},[m]),M=n.useCallback(()=>{r(null),l.current=null},[]);return n.useEffect(()=>()=>{null!==s.current&&window.cancelAnimationFrame(s.current),null!==o.current&&window.clearTimeout(o.current)},[]),n.useEffect(()=>{null!==a&&null!==l.current&&null===s.current&&(s.current=window.requestAnimationFrame(p))},[a,p]),u.total<=0?null:n.createElement("div",{className:"uh-donut-chart","aria-label":e.title},n.createElement("div",{className:"uh-donut-title"},n.createElement(b,{name:e.icon||"chart",size:16}),e.title),n.createElement("div",{className:"uh-donut-layout"},n.createElement("div",{className:"uh-donut-visual"},n.createElement("svg",{className:"uh-donut-svg",viewBox:"0 0 260 260",role:"img","aria-label":e.title+" "+pe(u.total,t)},n.createElement("circle",{cx:130,cy:130,r:77.5,className:"uh-donut-track",fill:"none",stroke:"var(--dsw-alias-bg-layer-2)",strokeWidth:33}),u.segments.map(e=>n.createElement("path",{key:"donut-"+e.index,d:me(130,130,77.5,e.startAngle,e.endAngle),className:"uh-donut-segment"+(a===e.index?" uh-active":""),fill:"none",stroke:e.color,strokeWidth:33,strokeLinecap:"butt",strokeLinejoin:"round",pathLength:1,style:{animationDelay:90*e.index+"ms"},tabIndex:0,"aria-label":e.label+" "+pe(e.value,t)+" "+d(e.percentage)+" "+Q(e.cost,t),onMouseEnter:t=>{r(e.index),g(t)},onMouseMove:g,onMouseLeave:M,onFocus:()=>{r(e.index),m({fixed:!0,left:12,top:12})},onBlur:M}))),c?n.createElement("div",{ref:i,className:"uh-donut-tooltip",style:{visibility:"hidden"}},n.createElement("span",{className:"uh-donut-dot",style:{background:c.color}}),void 0===c.iconKey||null===c.iconKey?null:n.createElement(we,{iconKey:c.iconKey,size:15}),n.createElement("div",{},n.createElement("strong",{},c.label),n.createElement("span",{},pe(c.value,t)+" · "+d(c.percentage)),n.createElement("span",{className:"uh-donut-tooltip-cost"},Q(c.cost,t)))):null,n.createElement("div",{className:"uh-donut-center"},n.createElement("strong",{},de(u.total,t)),n.createElement("span",{},"en"===t?"tokens":"Token"))),n.createElement("div",{className:"uh-donut-legend",role:"list"},u.segments.map(e=>n.createElement("div",{key:"legend-"+e.index,className:"uh-donut-legend-row",role:"listitem"},n.createElement("span",{className:"uh-donut-legend-mark"},n.createElement("span",{className:"uh-donut-dot",style:{background:e.color}}),void 0===e.iconKey||null===e.iconKey?null:n.createElement(we,{iconKey:e.iconKey,size:16,showTitle:!0})),n.createElement("div",{className:"uh-donut-legend-copy"},n.createElement("strong",{title:e.label},e.label)),n.createElement("div",{className:"uh-donut-legend-metrics"},n.createElement("span",{},pe(e.value,t)),n.createElement("span",{className:"uh-donut-cost"},Q(e.cost,t))),n.createElement("strong",{className:"uh-donut-percent"},d(e.percentage)))))))});function Me(e,t){return{total:"en"===t?"Total":"总处理",input:"en"===t?"Input":"输入",cacheRead:"en"===t?"Cache hits":"缓存命中",cacheWrite:"en"===t?"Cache writes":"缓存写入",output:"en"===t?"Output":"输出",reasoning:"en"===t?"Reasoning":"推理"}[e]||e}const he=n.memo(function(e){const t="en"===e.language?"en":"zh",a=(e,a)=>"en"===t?a:e,r=Array.isArray(e.rows)?e.rows:[],i=Array.isArray(e.visible)&&e.visible.length>0?e.visible:["total"],[l,s]=n.useState(null),[o,u]=n.useState(null),c=280,d=n.useMemo(()=>function(e,t,a=900,n=250){const r=Array.isArray(t)&&t.length>0?t:["total"],i={left:46,right:14,top:14,bottom:30},l=Math.max(1,a-i.left-i.right),s=Math.max(1,n-i.top-i.bottom),o=(Array.isArray(e)?e:[]).flatMap(e=>r.map(t=>"total"===t?e.total:e.tokens[t]||0)),u=Math.max(1,...o),c={};for(const t of r)c[t]=(Array.isArray(e)?e:[]).map((a,n)=>({x:i.left+(e.length>1?n*l/(e.length-1):l/2),y:i.top+s-("total"===t?a.total:a.tokens[t]||0)/u*s,value:"total"===t?a.total:a.tokens[t]||0}));return{width:a,height:n,padding:i,max:u,points:c}}(r,i,900,c),[r,i]),p=ue,m=ce,g=c-d.padding.bottom,M=n.useMemo(()=>{const e={};for(const t of i){const a=d.points[t]||[],n=le(a);e[t]={line:n,area:0===a.length?"":n+" L"+a[a.length-1].x.toFixed(2)+" "+g+" L"+a[0].x.toFixed(2)+" "+g+" Z",length:se(a)}}return e},[d,i,g]),y=n.useMemo(()=>r.length<=1?[0]:Array.from(new Set([0,Math.floor((r.length-1)/4),Math.floor((r.length-1)/2),Math.floor(3*(r.length-1)/4),r.length-1])),[r]),x=!e.loading&&!e.error&&r.length>0,N=r.length>0&&Number.isFinite(r[0].time)?a("每小时 Token 使用趋势,选择小时查看当天请求日志","Hourly Token usage trend; select an hour to view request logs"):a("每日 Token 使用趋势,选择日期查看请求日志","Daily Token usage trend; select a date to view request logs"),w=(null===l||r[l],null===l?null:(d.points[i[0]]||[])[l]||null),j=null===o?null:r[o]||null,L=null===o?null:(d.points[i[0]]||[])[o]||null,f=null!==l&&null!==j&&null!==L,I=null!==L&&L.x>612?" uh-left":" uh-right",D=null===L?void 0:{left:(L.x/900*100).toFixed(2)+"%",top:Math.max(23,Math.min(77,L.y/c*100)).toFixed(2)+"%"},v=e=>{s(e),u(e)},E=e.loading?n.createElement("div",{className:"uh-trend-stage uh-trend-loading",role:"status","aria-label":a("正在加载趋势","Loading trend")},n.createElement("span",{className:"uh-trend-spinner","aria-hidden":!0})):e.error?n.createElement("div",{className:"uh-trend-stage uh-trend-message",role:"alert"},e.error):0===r.length?n.createElement("div",{className:"uh-trend-stage uh-trend-message"},a("该范围内暂无趋势数据","No trend data in this range")):n.createElement("div",{className:"uh-trend-chart-wrap"},n.createElement("svg",{className:"uh-trend-svg",viewBox:"0 0 900 "+c,role:"group","aria-label":N},[0,.5,1].map(e=>n.createElement(n.Fragment,{key:e},n.createElement("line",{x1:d.padding.left,x2:900-d.padding.right,y1:d.padding.top+(c-d.padding.top-d.padding.bottom)*e,y2:d.padding.top+(c-d.padding.top-d.padding.bottom)*e,className:"uh-trend-grid"}),n.createElement("text",{x:d.padding.left-7,y:d.padding.top+(c-d.padding.top-d.padding.bottom)*e+4,className:"uh-trend-axis-label",textAnchor:"end"},h(Math.round(d.max*(1-e)))))),n.createElement("defs",{},i.map(e=>n.createElement("linearGradient",{key:e,id:"uh-trend-gradient-"+e,x1:"0",y1:"0",x2:"0",y2:"1"},n.createElement("stop",{offset:"4%",stopColor:p[e]||"#9aa4b2",stopOpacity:m[e]||.12}),n.createElement("stop",{offset:"96%",stopColor:p[e]||"#9aa4b2",stopOpacity:0})))),i.map((e,t)=>{const a=M[e]?M[e].area:"";return""===a?null:n.createElement("path",{key:"area-"+e,d:a,className:"uh-trend-area","data-series":e,fill:"url(#uh-trend-gradient-"+e+")",style:{animationDelay:80+80*t+"ms"}})}),i.map(e=>n.createElement("path",{key:"line-base-"+e,d:M[e]?M[e].line:"",className:"uh-trend-line","data-series":e,stroke:p[e]||"#9aa4b2"})),i.map((e,t)=>{d.points[e];const a=M[e]?M[e].length:0;return n.createElement("path",{key:"line-draw-"+e,d:M[e]?M[e].line:"",className:"uh-trend-line-draw","data-series":e,stroke:p[e]||"#9aa4b2",style:{"--uh-draw-length":a+"px",animationDelay:90*t+"ms"}})}),i.map(e=>{const t=d.points[e]||[];if(1!==t.length)return null;const a=t[0];return n.createElement("circle",{key:"single-point-"+e,cx:a.x,cy:a.y,r:4,className:"uh-trend-point",fill:p[e]||"#9aa4b2"})}),null!==l&&w?n.createElement(n.Fragment,{key:"hover-"+l},n.createElement("line",{x1:w.x,x2:w.x,y1:d.padding.top,y2:g,className:"uh-trend-cursor"}),i.map(e=>{const t=(d.points[e]||[])[l];return t?n.createElement("circle",{key:e,cx:t.x,cy:t.y,r:4,className:"uh-trend-point",fill:p[e]||"#9aa4b2"}):null})):null,r.map((a,r)=>{const l=(d.points[i[0]]||[])[r];if(!l)return null;const o=(d.points[i[0]]||[])[r+1],u=o?Math.max(8,o.x-l.x):r>0?Math.max(8,l.x-(d.points[i[0]]||[])[r-1].x):24;return n.createElement("rect",{key:ae(a,r),x:Math.max(d.padding.left,l.x-u/2),y:d.padding.top,width:u,height:c-d.padding.top-d.padding.bottom,className:"uh-trend-hit",tabIndex:0,role:"button","aria-label":te(a,t,!0)+" "+Me("total",t)+" "+h(a.total),onMouseEnter:()=>v(r),onMouseLeave:()=>s(null),onFocus:()=>v(r),onBlur:()=>s(null),onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),"function"==typeof e.onPointClick&&e.onPointClick(ne(a)))},onClick:()=>{"function"==typeof e.onPointClick&&e.onPointClick(ne(a))}})}),y.map(e=>{const a=(d.points[i[0]]||[])[e],l=r[e];return a&&l?n.createElement("text",{key:ae(l,e),x:a.x,y:272,className:"uh-trend-axis-label",textAnchor:0===e?"start":e===r.length-1?"end":"middle"},te(l,t,!1)):null})),j&&L?n.createElement("div",{className:"uh-trend-tooltip"+I+(f?" uh-visible":""),style:D,"aria-hidden":!f},n.createElement("strong",{className:"uh-trend-tooltip-title"},te(j,t,!0)),i.map(e=>n.createElement("div",{key:e,className:"uh-trend-tooltip-row",style:{color:p[e]||"#9aa4b2"}},n.createElement("span",{className:"uh-trend-dot",style:{background:p[e]||"#9aa4b2"}}),n.createElement("span",{className:"uh-trend-tooltip-label"},Me(e,t)),n.createElement("strong",{className:"uh-trend-tooltip-value"},h(function(e,t){return"total"===t?e.total:e.tokens&&Number.isFinite(e.tokens[t])?e.tokens[t]:0}(j,e)))))):null);return n.createElement("div",{className:"uh-panel uh-trend-panel"},n.createElement("div",{className:"uh-trend-head"},n.createElement("div",{},n.createElement("h3",{className:"uh-tbl-title uh-title-with-icon"},n.createElement(b,{name:"chart",size:16}),a("Token 使用趋势","Token Usage Trend")),n.createElement("div",{className:"uh-note"},e.rangeLabel||"")),x?n.createElement("div",{className:"uh-note"},a("点击数据点查看当日明细","Click a point to inspect that day")):null),E,x?n.createElement("div",{className:"uh-trend-legend"},["total","input","cacheRead","cacheWrite","output","reasoning"].map(a=>n.createElement("button",{key:a,type:"button",className:"uh-trend-legend-item"+(i.includes(a)?" uh-on":""),onClick:()=>(t=>{"function"==typeof e.onToggle&&e.onToggle(t)})(a),"aria-pressed":i.includes(a)},n.createElement("span",{className:"uh-trend-dot",style:{background:p[a]||"#9aa4b2"}}),Me(a,t)))):null)}),ye=n.memo(function(e){const t="en"===e.language?"en":"zh",a=e.day,r=n.useMemo(()=>(a&&Array.isArray(a.perWorkspace)?a.perWorkspace:[]).slice().sort((e,t)=>t.turns-e.turns),[a]),i=void 0===a?null:ee(a),l=null!==i&&i.input+i.output+i.cacheRead>0?"en"===t?"Tokens: Input "+h(i.input)+" · Cache hits "+h(i.cacheRead)+" · Output "+h(i.output):"Token:输入 "+h(i.input)+" · 缓存命中 "+h(i.cacheRead)+" · 输出 "+h(i.output):"";return n.createElement("div",{ref:e.tooltipRef,className:"uh-tip",style:{left:0,top:0,visibility:"hidden"}},n.createElement("div",{className:"uh-tip-date"},H(e.date,t)),void 0!==a&&a.turns>0?r.map(a=>n.createElement("div",{key:a.workspaceId,className:"uh-tip-row",onClick:()=>e.onWorkspaceSelect(a.workspaceId)},n.createElement("span",{className:"uh-dot",style:{background:q(e.workspaceIndexes.get(a.workspaceId)||0)}}),n.createElement("span",{},e.workspaceTitles.get(a.workspaceId)||("en"===t?"Unknown workspace":"未知工作区")),n.createElement("span",{className:"uh-n"},"en"===t?a.turns+" uses":a.turns+" 次"))):n.createElement("div",{className:"uh-empty",style:{padding:"6px 0"}},"en"===t?"No usage records for this day":"这一天没有使用记录"),""!==l?n.createElement("div",{className:"uh-tip-tokens"},l):null)}),xe=n.memo(function(e){const t="en"===e.language?"en":"zh",a=(e,a)=>"en"===t?a:e,r=Array.isArray(e.workspaces)?e.workspaces:[],s=Array.isArray(e.rows)?e.rows:[],o=e.workspaceId||null,[u,c]=n.useState(null),d=n.useRef(null),p=n.useRef(null),m=n.useRef({x:0,y:0}),g=n.useRef(null),M=n.useRef(null),h=n.useRef(e.onDateClick),y=n.useRef(e.onWorkspaceSelect);h.current=e.onDateClick,y.current=e.onWorkspaceSelect;const x=n.useMemo(()=>function(e,t,a){const n=String(e||"").split("-").map(Number),r=t?new Date(Date.UTC(n[0],n[1]-1,n[2])):new Date(n[0],n[1]-1,n[2]),s=t?r.getUTCDay():r.getDay(),o=l(r,-s,t),u=l(o,-364,t),c=[];for(let e=0;e<371;e+=1){const a=l(u,e,t);c.push({date:i(a,t),month:t?a.getUTCMonth():a.getMonth(),year:t?a.getUTCFullYear():a.getFullYear()})}const d=[];for(let e=0;e<53;e+=1){const t=c[7*e],n=e>0?c[7*(e-1)]:null;null!==n&&t.month===n.month||d.push({left:100*e/53+"%",text:J(t.year,t.month,a)})}return{cells:c,months:d,weekdays:"en"===a?["","Mon","","Wed","","Fri",""]:["","周一","","周三","","周五",""]}}(e.todayKey,!0===e.utc,t),[e.todayKey,e.utc,t]),N=n.useMemo(()=>{const e=new Map;for(const t of s)t&&"string"==typeof t.date&&e.set(t.date,t);return e},[s]),w=n.useMemo(()=>{const t=new Map,n=new Map,i=e.aliases&&"object"==typeof e.aliases?e.aliases:{};return r.forEach((e,r)=>{const l=i[e.id];t.set(e.id,"string"==typeof l&&""!==l?l:e.title||a("未知工作区","Unknown workspace")),n.set(e.id,r)}),{titles:t,indexes:n}},[r,e.aliases,t]),j=n.useCallback(()=>{g.current=null,null!==M.current&&(window.clearTimeout(M.current),M.current=null);const e=p.current;if(null===e)return;const t=m.current,a="undefined"==typeof window?1280:window.innerWidth;e.style.left=t.x+14+"px",e.style.top=t.y+12+"px",e.style.transform=t.x>.65*a?"translateX(calc(-100% - 28px))":"none",e.style.visibility="visible"},[]),L=n.useCallback((e,t)=>{m.current={x:e,y:t},null===g.current&&(g.current=window.requestAnimationFrame(j),M.current=window.setTimeout(()=>{null!==g.current&&(window.cancelAnimationFrame(g.current),j())},80))},[j]);n.useEffect(()=>()=>{null!==g.current&&window.cancelAnimationFrame(g.current),null!==M.current&&window.clearTimeout(M.current)},[]),n.useEffect(()=>{null!==u&&null===g.current&&(g.current=window.requestAnimationFrame(j))},[u,j]);const f=n.useCallback((e,t)=>{d.current!==e&&(d.current=e,c(e)),L(t.clientX,t.clientY)},[L]),I=n.useCallback(e=>{L(e.clientX,e.clientY)},[L]),D=n.useCallback(()=>{d.current=null,c(null)},[]),v=n.useCallback(e=>{"function"==typeof y.current&&y.current(e),D()},[D]),E=n.useMemo(()=>x.cells.map((t,a)=>{const r=N.get(t.date);let i=0;if(void 0!==r)if(!0===e.queryUsable||null===o)i=r.turns;else{const e=Array.isArray(r.perWorkspace)?r.perWorkspace.find(e=>e.workspaceId===o):void 0;void 0!==e&&(i=e.turns)}const l=null!==o&&void 0!==r&&r.turns>0&&0===i,s={background:K(X(i)),opacity:l?.22:1,animationDelay:1.2*a+"ms"};return t.date===e.todayKey&&(s.animation="uh-cell-in .45s ease both, uh-glow 3s ease-in-out .7s infinite"),n.createElement("div",{key:t.date,className:"uh-cell",style:s,onMouseEnter:e=>f(t.date,e),onMouseMove:I,onMouseLeave:D,onClick:()=>{"function"==typeof h.current&&h.current(t.date)}})}),[x.cells,N,e.queryUsable,e.todayKey,o,f,I,D]),A=null===u?void 0:N.get(u);return n.createElement("div",{className:"uh-panel"},n.createElement("div",{className:"uh-section-title"},n.createElement(b,{name:"calendar",size:16}),a("使用热力图","Usage Heatmap")),n.createElement("div",{className:"uh-hm-head"},n.createElement("div",{className:"uh-chips"},r.map((e,t)=>n.createElement("button",{key:e.id,className:"uh-chip"+(o===e.id?" uh-on":""),onClick:()=>v(e.id),title:e.path},n.createElement("span",{className:"uh-dot",style:{background:q(t)}}),n.createElement("span",{className:"uh-chip-title"},w.titles.get(e.id))))),n.createElement("div",{className:"uh-legend"},n.createElement("span",{},a("少","Less")),[0,1,2,3,4].map(e=>n.createElement("span",{key:e,className:"uh-cell",style:{background:K(e)}})),n.createElement("span",{},a("多","More")))),n.createElement("div",{className:"uh-hm-scroll"},n.createElement("div",{className:"uh-months"},x.months.map((e,t)=>n.createElement("span",{key:t,style:{left:e.left}},e.text))),n.createElement("div",{className:"uh-hm-body"},n.createElement("div",{className:"uh-wdays"},x.weekdays.map((e,t)=>n.createElement("span",{key:t},e))),n.createElement("div",{className:"uh-grid"},E))),n.createElement("div",{className:"uh-note",style:{marginTop:10}},a("口径:每完成一个回合点亮一次(含子代理会话);悬停查看按工作区明细,点击工作区可筛选热力图与明细表。日期按本地时区。","Methodology: one cell lights up for each completed turn, including subagent sessions. Hover to view workspace details; click a workspace to filter the heatmap and detail tables. English dates and day boundaries use UTC.")),null!==u?n.createElement(ye,{date:u,day:A,language:t,tooltipRef:p,workspaceTitles:w.titles,workspaceIndexes:w.indexes,onWorkspaceSelect:v}):null)});function be(e,t){return Number(e&&e.values&&e.values[t])||0}const Ne=n.memo(function(e){return e.render()},(e,t)=>e.revision===t.revision),we=n.memo(function(e){const t=Number.isFinite(e.size)?e.size:18,a=null===e.iconKey?null:void 0!==e.iconKey?j.get(e.iconKey)||null:v(e.row),r=null===a?"":a.key+"\0"+a.href,[i,l]=n.useState(null),s={width:t,height:t,minWidth:t};if(null===a||null!==i&&i===r)return n.createElement("span",{className:"uh-model-icon uh-model-icon-fallback"+(e.className?" "+e.className:""),style:s,"aria-hidden":!0});const o=!0===e.showTitle;return n.createElement("span",{className:"uh-model-icon"+(e.className?" "+e.className:""),style:s,...o?{}:{"aria-hidden":!0}},n.createElement("img",{key:r,src:a.href,alt:o?a.label:"",title:o?a.label:void 0,width:t,height:t,loading:"lazy",decoding:"async",draggable:!1,onError:()=>l(r)}))}),je=n.memo(function(e){const t="en"===e.language?"en":"zh",a=(e,a)=>"en"===t?a:e,r=Array.isArray(e.rows)?e.rows:[],i=n.useMemo(()=>r.find(t=>t.id===e.selectedId)||r[0]||null,[r,e.selectedId]),l=e=>e&&"ledger-recovery"===e.materialization?a("账本恢复","Ledger recovery"):e&&"ledger-reuse"===e.materialization?a("账本复用","Ledger reuse"):e&&"scan"===e.materialization?a("扫描","Scan"):e&&"live"===e.materialization?a("实时","Live"):a("未知","Unknown"),s=(e,a)=>e&&Number.isFinite(e.time)?new Date(e.time).toLocaleString("en"===t?"en-US":"zh-CN","en"===t?a?{timeZone:"UTC"}:{timeZone:"UTC",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}:a?void 0:{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"—",o=t=>{"function"==typeof e.onSelect&&e.onSelect(t)};return n.createElement("div",{className:"uh-panel uh-records-panel",ref:e.panelRef,style:{display:e.visible?"block":"none"}},n.createElement("div",{className:"uh-records-head"},n.createElement("div",{},n.createElement("h3",{className:"uh-tbl-title uh-title-with-icon"},n.createElement(b,{name:"list",size:16}),a("请求日志","Request Logs")),n.createElement("div",{className:"uh-note"},e.scopeLabel+(e.scopeUtc?" · UTC":""))),n.createElement("div",{className:"uh-actions"},e.loading?n.createElement("span",{className:"uh-query-note"},a("同步中…","Refreshing…")):null,n.createElement("button",{type:"button",className:"uh-refresh",title:a("导出当前日志","Export current logs"),onClick:e.onExport,disabled:e.exporting||!e.scopeAvailable},n.createElement(b,{name:"export",size:13}),e.exporting?a("导出中…","Exporting…"):a("导出日志","Export logs")))),""!==e.error?n.createElement("div",{className:"uh-records-error",role:"alert"},"stale"===e.error?a("数据已更新,正在重新加载日志…","Data changed; reloading logs…"):"audit-export"===e.error?a("日志导出失败","Unable to export logs"):a("日志加载失败,请重试","Unable to load logs")):null,n.createElement("div",{className:"uh-records-note"},a("按时间倒序显示可审计的 Token 调用;选择一行查看 turn / step 和完整 Token 分桶。","Token calls are newest first; select a row to inspect its turn / step and token buckets.")),0!==r.length||e.loading?n.createElement("div",{className:"uh-records-scroll"},n.createElement("div",{className:"uh-record-grid uh-record-header"},n.createElement("div",{},a("时间","Time")),n.createElement("div",{},a("Provider / 模型","Provider / Model")),n.createElement("div",{className:"uh-record-num"},"turn / step"),n.createElement("div",{className:"uh-record-num"},a("输入","Input")),n.createElement("div",{className:"uh-record-num"},a("缓存命中","Cache read")),n.createElement("div",{className:"uh-record-num"},a("缓存写入","Cache write")),n.createElement("div",{className:"uh-record-num"},a("输出","Output")),n.createElement("div",{className:"uh-record-num"},a("成本","Cost")),n.createElement("div",{},a("来源","Source"))),r.map(e=>n.createElement("div",{key:e.id,className:"uh-record-grid uh-record-row"+(i&&i.id===e.id?" uh-on":""),role:"button",tabIndex:0,"aria-pressed":i&&i.id===e.id,onClick:()=>o(e.id),onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),o(e.id))}},n.createElement("div",{className:"uh-record-time"},s(e,!1)),n.createElement("div",{className:"uh-record-model",title:e.model||""},n.createElement("span",{className:"uh-model-label"},n.createElement(we,{row:e,size:16}),n.createElement("span",{className:"uh-model-text"},e.model||a("未知模型","Unknown model"))),e.requestedModel&&e.actualModel&&e.requestedModel!==e.actualModel?n.createElement("small",{},e.requestedModel+" → "+e.actualModel):null),n.createElement("div",{className:"uh-record-num"},(null===e.turn||void 0===e.turn?"—":e.turn)+" / "+(null===e.step||void 0===e.step?"—":e.step)),n.createElement("div",{className:"uh-record-num"},h(be(e,"input"))),n.createElement("div",{className:"uh-record-num"},h(be(e,"cacheRead"))),n.createElement("div",{className:"uh-record-num"},h(be(e,"cacheWrite"))),n.createElement("div",{className:"uh-record-num"},h(be(e,"output"))),n.createElement("div",{className:"uh-record-num uh-cost-num"},Q(e,t),!e.cost||"peak"!==e.cost.pricingBand&&"off-peak"!==e.cost.pricingBand?null:n.createElement("small",{className:"uh-record-band-badge"},"peak"===e.cost.pricingBand?"en"===t?"Peak":"峰":"en"===t?"OFF":"谷")),n.createElement("div",{className:"uh-record-source"},l(e))))):n.createElement("div",{className:"uh-empty"},a("当前范围没有可审计的 Token 调用","No auditable Token calls in this scope")),n.createElement("div",{className:"uh-records-footer"},n.createElement("span",{className:"uh-note"},r.length>0?e.hasMore?a("已显示 "+r.length+" 条,继续加载可查看更多",r.length+" shown; load more for additional records"):a("共显示 "+r.length+" 条",r.length+" records shown"):""),e.hasMore?n.createElement("button",{type:"button",className:"uh-refresh",onClick:e.onLoadMore,disabled:e.loading},e.loading?a("加载中…","Loading…"):a("加载更多","Load more")):null),i?n.createElement("div",{className:"uh-record-detail"},n.createElement("div",{className:"uh-record-detail-head"},n.createElement("strong",{},a("选中调用","Selected call")),n.createElement("span",{className:"uh-note"},s(i,!0))),n.createElement("div",{className:"uh-record-detail-meta"},n.createElement("span",{className:"uh-model-label"},n.createElement(we,{row:i,size:16,showTitle:!0}),n.createElement("span",{},(i.provider||a("未知供应商","Unknown provider"))+" / "+(i.actualModel||i.requestedModel||i.model||a("未知模型","Unknown model")))),n.createElement("span",{},"turn "+(null===i.turn||void 0===i.turn?"—":i.turn)+" · step "+(null===i.step||void 0===i.step?"—":i.step)),n.createElement("span",{},a("来源:","Source: ")+l(i)),n.createElement("span",{},a("计价模型:","Pricing model: ")+(i.cost&&i.cost.pricingModel?i.cost.pricingModel:a("未计价","unpriced"))),n.createElement("span",{className:"uh-record-band "+(i.cost&&i.cost.pricingBand?"uh-record-band-"+i.cost.pricingBand:"")},a("计费档位:","Billing band: ")+function(e,t){const a=e&&e.cost&&"object"==typeof e.cost?e.cost:{};return"peak"===a.pricingBand?"en"===t?"Peak":"峰时":"off-peak"===a.pricingBand?"en"===t?"Off-peak":"谷时":"route-not-official"===a.temporalExemptReason?"en"===t?"static (non-first-party)":"静态价(非官方直连)":"no-temporal-profile"===a.temporalExemptReason?"en"===t?"static (no band plan)":"静态价(无峰谷计划)":"—"}(i,t)),null!==W(i,t)?n.createElement("span",{className:"uh-record-band",title:i.cost&&i.cost.pricingPolicyHash||""},a("计费计划:","Plan: ")+W(i,t)):null),n.createElement("div",{className:"uh-record-token-strip"},["input","cacheRead","cacheWrite","output","reasoning"].map(e=>n.createElement("div",{key:e},n.createElement("span",{},"cacheRead"===e?a("缓存命中","Cache read"):"cacheWrite"===e?a("缓存写入","Cache write"):"reasoning"===e?a("推理","Reasoning"):"input"===e?a("输入","Input"):a("输出","Output")),n.createElement("strong",{},h(be(i,e))))),n.createElement("div",{className:"uh-record-token-total"},n.createElement("span",{},a("总处理","Total")),n.createElement("strong",{},h(be(u=i,"input")+be(u,"cacheRead")+be(u,"cacheWrite")+be(u,"output")+be(u,"reasoning")))),n.createElement("div",{className:"uh-record-token-total"},n.createElement("span",{},a("成本","Cost")),n.createElement("strong",{},Q(i,t))))):null);var u},function(e,t){return e.visible===t.visible&&e.scopeLabel===t.scopeLabel&&e.scopeUtc===t.scopeUtc&&e.scopeAvailable===t.scopeAvailable&&e.loading===t.loading&&e.exporting===t.exporting&&e.error===t.error&&e.rows===t.rows&&e.selectedId===t.selectedId&&e.hasMore===t.hasMore&&e.language===t.language&&e.actionKey===t.actionKey});function Le(e){const t=Array.isArray(e.options)?e.options:[],a=void 0===e.value||null===e.value?"":String(e.value),r=t.find(e=>String(e.value)===a),[i,l]=n.useState(!1),s=n.useRef(null);n.useEffect(()=>{if(!i||"undefined"==typeof document)return;const e=e=>{s.current&&!s.current.contains(e.target)&&l(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[i]);const o=t=>{const a=null==t||void 0===t.iconKey||null===t.iconKey?null:t.iconKey;return null===a?n.createElement(b,{name:e.icon||"chart",size:14}):n.createElement(we,{iconKey:a,size:14})};return n.createElement("div",{className:"uh-language-menu uh-filter-menu"+(e.className?" "+e.className:"")+(i?" uh-open":""),ref:s,onKeyDown:e=>{"Escape"===e.key&&i&&(e.preventDefault(),e.stopPropagation(),l(!1))}},n.createElement("button",{type:"button",className:"uh-language-trigger uh-filter-trigger"+(i?" uh-open":""),title:r?r.label:e.label,"aria-label":e.ariaLabel||e.label,"aria-haspopup":"listbox","aria-expanded":i,onClick:()=>l(e=>!e)},o(r),n.createElement("span",{className:"uh-filter-label"},r?r.label:e.label),n.createElement(b,{name:"chevron",size:13,className:"uh-language-caret"})),i?n.createElement("div",{className:"uh-language-options uh-filter-options",role:"listbox","aria-label":e.ariaLabel||e.label},t.map(t=>{const r=String(t.value),i=r===a;return n.createElement("button",{key:r,type:"button",role:"option","aria-selected":i,className:"uh-language-option"+(i?" uh-on":""),onClick:()=>{return t=r,"function"==typeof e.onChange&&e.onChange(t),void l(!1);var t}},o(t),n.createElement("span",{className:"uh-filter-option-label"},t.label),i?n.createElement(b,{name:"check",size:14,className:"uh-language-option-check"}):null)})):null)}const fe="dsh-all-usage/styles.css";if("undefined"!=typeof document){let e=document.querySelector("style[data-plugin-css="+JSON.stringify(fe)+"]");null===e&&(e=document.createElement("style"),e.dataset.plugin="dsh-all-usage",e.dataset.pluginCss=fe,document.head.appendChild(e)),e.textContent='\n.uh-page { display:flex; flex-direction:column; gap:14px; padding:2px 2px 28px; font-family:inherit; }\n.uh-head { position:relative; z-index:20; display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }\n.uh-title { margin:0; font-size:15px; font-weight:600; color:var(--dsw-alias-label-primary); }\n.uh-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }\n.uh-language-menu, .uh-filter-menu { position:relative; z-index:12; }\n.uh-filter-menu { flex:0 1 auto; min-width:0; }\n.uh-filter-workspace { width:180px; }\n.uh-filter-provider { width:180px; }\n.uh-filter-model { width:260px; }\n.uh-filter-menu.uh-open { z-index:14; }\n.uh-language-trigger { display:inline-flex; align-items:center; gap:6px; min-height:30px; padding:4px 9px 4px 10px; border:1px solid transparent; border-radius:15px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 7%, var(--dsw-alias-bg-layer-1)); color:var(--dsw-alias-label-primary); font:inherit; font-size:12px; font-weight:600; line-height:1; cursor:pointer; transition:border-color .15s ease, background-color .15s ease, transform .1s ease; }\n.uh-filter-trigger { width:100%; min-width:0; justify-content:flex-start; }\n.uh-language-trigger:hover, .uh-language-trigger.uh-open { border-color:color-mix(in srgb, var(--dsw-alias-brand-primary) 58%, var(--dsw-alias-border-l2)); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 13%, var(--dsw-alias-bg-layer-1)); }\n.uh-language-trigger:active { transform:scale(.96); }\n.uh-language-label { min-width:26px; text-align:left; }\n.uh-filter-label { min-width:0; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:left; }\n.uh-language-caret { color:var(--dsw-alias-label-secondary); transition:transform .18s ease; }\n.uh-language-trigger.uh-open .uh-language-caret { transform:rotate(180deg); }\n.uh-language-menu.uh-open { z-index:30; }\n.uh-language-options { position:absolute; top:calc(100% + 7px); right:0; min-width:142px; padding:5px; border:1px solid var(--dsw-alias-border-l2); border-radius:12px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 14px 28px color-mix(in srgb, #000 24%, transparent); animation:uh-menu-in .16s ease both; }\n.uh-filter-options { left:0; right:auto; min-width:100%; max-width:300px; }\n.uh-language-option { display:flex; align-items:center; gap:8px; width:100%; min-height:32px; padding:6px 8px; border:0; border-radius:8px; background:transparent; color:var(--dsw-alias-label-primary); font:inherit; font-size:12px; text-align:left; cursor:pointer; transition:background-color .14s ease, color .14s ease; }\n.uh-filter-option-label { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-language-option:hover, .uh-language-option:focus-visible { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-2)); outline:0; }\n.uh-language-option.uh-on { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 19%, var(--dsw-alias-bg-layer-2)); color:var(--dsw-alias-label-primary); font-weight:600; }\n.uh-language-option-check { margin-left:auto; color:var(--dsw-alias-brand-primary); }\n.uh-range { display:inline-flex; border:1px solid var(--dsw-alias-border-l2); border-radius:8px; overflow:hidden; }\n.uh-range button { border:0; background:transparent; color:var(--dsw-alias-label-secondary); padding:4px 12px; font-size:12px; cursor:pointer; font-family:inherit; transition:background-color .15s ease, color .15s ease; }\n.uh-range button + button { border-left:1px solid var(--dsw-alias-border-l2); }\n.uh-range button.uh-on { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, var(--dsw-alias-bg-layer-2)); color:var(--dsw-alias-label-primary); font-weight:600; }\n.uh-custom-range { display:grid; grid-template-columns:minmax(180px, 1fr) auto auto; gap:10px 14px; align-items:end; padding:12px; border:1px solid var(--dsw-alias-border-l1); border-radius:10px; background:var(--dsw-alias-bg-layer-1); }\n.uh-custom-range-meta { min-width:0; }\n.uh-custom-range-title { display:flex; align-items:center; gap:7px; color:var(--dsw-alias-label-primary); font-size:13px; font-weight:600; }\n.uh-custom-range-note { margin-top:3px; color:var(--dsw-alias-label-secondary); font-size:11px; line-height:1.45; }\n.uh-custom-range-fields { display:grid; grid-template-columns:repeat(2, minmax(136px, 1fr)); gap:8px; }\n.uh-custom-range-field { display:flex; flex-direction:column; gap:4px; color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-custom-range-field input { min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:3px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:12px; outline:none; }\n.uh-custom-range-field input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-custom-range-actions { display:flex; gap:6px; }\n.uh-custom-range-cancel, .uh-custom-range-apply { min-height:30px; border-radius:6px; padding:4px 10px; font:inherit; font-size:12px; cursor:pointer; }\n.uh-custom-range-cancel { border:1px solid var(--dsw-alias-border-l2); background:transparent; color:var(--dsw-alias-label-primary); }\n.uh-custom-range-apply { border:1px solid var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 16%, transparent); color:var(--dsw-alias-label-primary); }\n.uh-custom-range-apply:disabled { opacity:.48; cursor:not-allowed; }\n.uh-custom-range-error { grid-column:1 / -1; color:#d92d20; font-size:12px; }\n.uh-refresh { border:1px solid var(--dsw-alias-border-l2); background:var(--dsw-alias-bg-layer-1); color:var(--dsw-alias-label-primary); border-radius:8px; padding:4px 12px; font-size:12px; cursor:pointer; font-family:inherit; transition:border-color .15s ease, color .15s ease, transform .1s ease; }\n.uh-refresh:hover { border-color:var(--dsw-alias-brand-primary); }\n.uh-refresh:active, .uh-chip:active, .uh-range button:active { transform:scale(.96); }\n.uh-alias-panel-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; font-size:13px; font-weight:600; color:var(--dsw-alias-label-primary); }\n.uh-alias-close { border:0; background:transparent; color:var(--dsw-alias-label-secondary); font-size:12px; cursor:pointer; font-family:inherit; padding:0; transition:color .15s ease; }\n.uh-alias-close:hover { color:var(--dsw-alias-brand-primary); }\n.uh-alias-list { display:grid; grid-template-columns:repeat(auto-fill, minmax(250px, 1fr)); gap:8px 16px; max-height:240px; overflow-y:auto; }\n.uh-alias-item { display:flex; align-items:center; gap:8px; min-width:0; }\n.uh-alias-folder { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:11px; color:var(--dsw-alias-label-secondary); }\n.uh-alias-input { flex:none; width:150px; border:1px solid var(--dsw-alias-border-l2); background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); border-radius:6px; padding:3px 8px; font-size:12px; font-family:inherit; outline:none; transition:border-color .15s ease; }\n.uh-alias-input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-alias-panel-foot { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:10px; padding-top:10px; border-top:1px solid var(--dsw-alias-border-l1); }\n.uh-alias-ok { border:1px solid var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 16%, transparent); color:var(--dsw-alias-label-primary); border-radius:6px; font-size:12px; padding:3px 12px; cursor:pointer; font-family:inherit; flex:none; transition:transform .1s ease; }\n.uh-alias-ok:active { transform:scale(.96); }\n.uh-anim-panel { animation:uh-panel-in .28s ease both; }\n.uh-pricing-panel { display:flex; flex-direction:column; gap:12px; }\n.uh-pricing-head, .uh-pricing-toolbar, .uh-pricing-section-head, .uh-pricing-foot { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; }\n.uh-pricing-note { color:var(--dsw-alias-label-secondary); font-size:12px; line-height:1.55; }\n.uh-pricing-toolbar { padding:10px 0; border-top:1px solid var(--dsw-alias-border-l1); border-bottom:1px solid var(--dsw-alias-border-l1); }\n.uh-pricing-switch { display:inline-flex; align-items:center; gap:7px; color:var(--dsw-alias-label-primary); font-size:12px; }\n.uh-pricing-section { display:flex; flex-direction:column; gap:8px; }\n.uh-pricing-table-wrap { max-height:392px; overflow-x:auto; overflow-y:scroll; scrollbar-gutter:stable; scrollbar-width:auto; scrollbar-color:#707780 #1d1f22; border:1px solid var(--dsw-alias-border-l1); border-radius:8px; background:var(--dsw-alias-bg-layer-2); }\n.uh-pricing-model-table { width:100%; min-width:1080px; border-collapse:collapse; table-layout:fixed; font-size:11px; }\n.uh-pricing-model-table th, .uh-pricing-model-table td { min-width:0; padding:8px 9px; border-bottom:1px solid var(--dsw-alias-border-l1); text-align:left; vertical-align:middle; }\n.uh-pricing-model-table th { position:sticky; top:0; z-index:1; color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-2); font-weight:650; white-space:nowrap; }\n.uh-pricing-model-table th:nth-child(1) { width:24%; }\n.uh-pricing-model-table th:nth-child(2) { width:84px; }\n.uh-pricing-model-table th:nth-child(3) { width:20%; }\n.uh-pricing-model-table th:nth-child(4) { width:96px; }\n.uh-pricing-model-table th:nth-child(n+5) { width:100px; text-align:right; }\n.uh-pricing-model-table td:nth-child(n+5) { text-align:right; }\n.uh-pricing-model-table tbody tr:last-child td { border-bottom:0; }\n.uh-pricing-model-table tbody tr:not(.uh-pricing-tier-row):hover { background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 65%, transparent); }\n.uh-pricing-model-name, .uh-pricing-model-target { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-primary); }\n.uh-pricing-model-rate { color:var(--dsw-alias-label-secondary); font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-pricing-status, .uh-pricing-tier-badge { display:inline-flex; justify-content:center; padding:3px 6px; border-radius:6px; font-size:10px; font-weight:650; white-space:nowrap; }\n.uh-pricing-status-priced { color:#157347; background:color-mix(in srgb, #30d158 22%, transparent); }\n.uh-pricing-status-unpriced, .uh-pricing-status-ambiguous, .uh-pricing-status-unsupported { color:#9a5b00; background:color-mix(in srgb, #ff9f0a 20%, transparent); }\n.uh-pricing-tier-badge { color:var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 15%, transparent); }\n.uh-pricing-tier-badge.uh-flat { color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-1); }\n.uh-pricing-tier-row > td { padding:0 9px 8px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 36%, transparent); }\n.uh-pricing-tier-details > summary { display:inline-flex; align-items:center; gap:6px; min-height:28px; color:var(--dsw-alias-label-secondary); cursor:pointer; list-style:none; font-size:11px; }\n.uh-pricing-tier-details > summary::-webkit-details-marker { display:none; }\n.uh-pricing-tier-caret { transition:transform .15s ease; }\n.uh-pricing-tier-details[open] .uh-pricing-tier-caret { transform:rotate(180deg); }\n.uh-pricing-tier-context { margin-left:6px; color:var(--dsw-alias-label-tertiary, var(--dsw-alias-label-secondary)); }\n.uh-pricing-tier-table { width:100%; margin:2px 0 5px; border:1px solid var(--dsw-alias-border-l1); border-radius:6px; border-collapse:separate; border-spacing:0; overflow:hidden; table-layout:fixed; background:var(--dsw-alias-bg-base); }\n.uh-pricing-tier-table th, .uh-pricing-tier-table td { position:static; width:auto !important; padding:6px 8px; border-bottom:1px solid var(--dsw-alias-border-l1); text-align:right !important; background:transparent; font-size:10px; }\n.uh-pricing-tier-table th:first-child, .uh-pricing-tier-table td:first-child { width:30% !important; text-align:left !important; }\n.uh-pricing-tier-table tbody tr:last-child td { border-bottom:0; }\n.uh-pricing-tier-table tbody tr:hover { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 6%, transparent); }\n.uh-pricing-used-model-picker { position:relative; z-index:2; min-width:0; }\n.uh-pricing-used-model-picker:focus-within { z-index:30; }\n.uh-pricing-used-model-input { box-sizing:border-box; width:100%; min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:4px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:11px; outline:none; }\n.uh-pricing-used-model-input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-pricing-used-model-options { top:calc(100% + 7px); left:0; right:auto; width:100%; min-width:280px; max-height:240px; overflow-y:auto; z-index:40; }\n.uh-pricing-model-search { position:relative; z-index:2; min-width:0; }\n.uh-pricing-model-search:focus-within { z-index:30; }\n.uh-pricing-model-search-input { box-sizing:border-box; width:100%; min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:4px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:11px; outline:none; }\n.uh-pricing-model-search-input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-pricing-model-options { top:calc(100% + 7px); left:0; right:auto; width:100%; min-width:280px; max-height:240px; overflow-y:auto; z-index:40; }\n.uh-pricing-model-option { align-items:flex-start; }\n.uh-pricing-model-option-name { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-pricing-model-option-id { margin-left:auto; padding-left:10px; color:var(--dsw-alias-label-secondary); font-size:10px; white-space:nowrap; }\n.uh-pricing-edit-row { display:grid; grid-template-columns:minmax(240px,1.2fr) minmax(260px,1.3fr) minmax(78px,.45fr) 32px; gap:10px; align-items:center; min-width:650px; }\n.uh-pricing-price-row { grid-template-columns:repeat(5,minmax(108px,1fr)) 32px; min-width:650px; }\n.uh-pricing-price-head { display:grid; grid-template-columns:repeat(5,minmax(108px,1fr)) 32px; gap:10px; align-items:center; min-width:650px; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-price-head span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-pricing-edit-row input, .uh-pricing-tier-edit-row input { box-sizing:border-box; min-width:0; min-height:30px; border:1px solid var(--dsw-alias-border-l2); border-radius:6px; padding:4px 7px; background:var(--dsw-alias-bg-base); color:var(--dsw-alias-label-primary); font:inherit; font-size:11px; outline:none; }\n.uh-pricing-edit-row input:focus, .uh-pricing-tier-edit-row input:focus { border-color:var(--dsw-alias-brand-primary); }\n.uh-pricing-edit-row .uh-refresh, .uh-pricing-tier-edit-row .uh-refresh { min-height:30px; padding:0; }\n.uh-pricing-overrides { display:flex; flex-direction:column; min-width:760px; }\n.uh-pricing-override { display:flex; flex-direction:column; gap:8px; padding:10px 0; border-bottom:1px solid var(--dsw-alias-border-l1); }\n.uh-pricing-override:last-child { border-bottom:0; }\n.uh-pricing-tier-editor { margin-left:10px; padding-left:12px; border-left:2px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 34%, var(--dsw-alias-border-l1)); }\n.uh-pricing-tier-editor-head { display:flex; align-items:center; justify-content:space-between; gap:10px; min-height:30px; }\n.uh-pricing-tier-editor-title { display:flex; align-items:baseline; gap:8px; min-width:0; }\n.uh-pricing-tier-editor-title strong { font-size:11px; }\n.uh-pricing-tier-editor-title span { color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-tier-edit-head, .uh-pricing-tier-edit-row { display:grid; grid-template-columns:minmax(132px,.85fr) repeat(4,minmax(108px,1fr)) 32px; gap:10px; align-items:center; min-width:690px; }\n.uh-pricing-tier-edit-head { margin:5px 0; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-tier-edit-row { margin-top:7px; }\n.uh-pricing-tier-edit-row.uh-invalid input { border-color:var(--dsw-alias-warning, #a55b00); }\n.uh-pricing-tier-empty { padding:5px 0; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-pricing-error { color:var(--dsw-alias-warning, #a55b00); font-size:12px; line-height:1.45; }\n.uh-pricing-foot { padding-top:4px; }\n.uh-cost-num { color:var(--dsw-alias-label-primary); }\n.uh-progress { font-size:12px; color:var(--dsw-alias-label-secondary); display:flex; align-items:center; gap:10px; }\n.uh-sync-health { margin-top:8px; padding:8px 12px; display:flex; align-items:center; flex-wrap:wrap; gap:6px; border:1px solid var(--dsw-alias-border-l1); border-radius:10px; color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-1); font-size:11px; line-height:1.45; }\n.uh-sync-health.uh-stale { color:var(--dsw-alias-warning, #a55b00); border-color:color-mix(in srgb, var(--dsw-alias-warning, #d9822b) 45%, var(--dsw-alias-border-l1)); }\n.uh-sync-retry { border:0; background:transparent; color:inherit; font:inherit; text-decoration:underline; cursor:pointer; padding:0 2px; }\n.uh-trend-panel { min-height:300px; animation:uh-panel-in .38s ease both; }\n.uh-trend-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:10px; }\n.uh-trend-chart-wrap { position:relative; min-height:250px; width:100%; overflow:hidden; }\n.uh-trend-stage { display:grid; place-items:center; min-height:250px; width:100%; }\n.uh-trend-message { color:var(--dsw-alias-label-secondary); font-size:12px; }\n.uh-trend-spinner { width:24px; height:24px; border:2px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, var(--dsw-alias-border-l2)); border-top-color:var(--dsw-alias-brand-primary); border-radius:50%; animation:uh-spinner-turn .78s linear infinite; }\n.uh-trend-svg { display:block; width:100%; height:auto; min-height:220px; }\n.uh-trend-grid { stroke:var(--dsw-alias-border-l1); stroke-width:1; stroke-dasharray:3 4; opacity:.8; }\n.uh-trend-cursor { stroke:var(--dsw-alias-label-secondary); stroke-width:1; stroke-dasharray:3 4; opacity:.65; pointer-events:none; }\n.uh-trend-point { stroke:var(--dsw-alias-bg-layer-1); stroke-width:2; vector-effect:non-scaling-stroke; pointer-events:none; }\n.uh-trend-axis-label { fill:var(--dsw-alias-label-secondary); font-size:11px; font-family:inherit; }\n.uh-trend-line { fill:none; stroke-width:2.2; vector-effect:non-scaling-stroke; stroke-linecap:round; stroke-linejoin:round; opacity:.22; }\n.uh-trend-line-draw { fill:none; stroke-width:2.2; vector-effect:non-scaling-stroke; stroke-linecap:round; stroke-linejoin:round; stroke-dasharray:var(--uh-draw-length); stroke-dashoffset:var(--uh-draw-length); opacity:.96; pointer-events:none; animation:uh-trend-draw .95s cubic-bezier(.22,.61,.36,1) both; }\n.uh-trend-area { opacity:1; animation:uh-trend-fill .8s ease; }\n.uh-trend-hit { fill:transparent; cursor:crosshair; outline:none; }\n.uh-trend-hit:focus { fill:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent); outline:1px solid var(--dsw-alias-brand-primary); outline-offset:2px; }\n.uh-trend-tooltip { position:absolute; z-index:4; min-width:166px; padding:10px 11px; border:1px solid color-mix(in srgb, var(--dsw-alias-border-l2) 88%, transparent); border-radius:8px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 94%, transparent); box-shadow:0 10px 24px rgba(0,0,0,.22); backdrop-filter:blur(10px); color:var(--dsw-alias-label-primary); font-size:12px; line-height:1.45; pointer-events:none; opacity:0; visibility:hidden; transform:translate(14px,-50%) scale(.985); transform-origin:left center; transition:left .16s cubic-bezier(.22,.61,.36,1), top .16s cubic-bezier(.22,.61,.36,1), opacity .12s ease, transform .16s cubic-bezier(.22,.61,.36,1), visibility 0s linear .16s; }\n.uh-trend-tooltip.uh-left { transform:translate(calc(-100% - 14px),-50%) scale(.985); transform-origin:right center; }\n.uh-trend-tooltip.uh-visible { opacity:1; visibility:visible; transform:translate(14px,-50%) scale(1); transition-delay:0s; }\n.uh-trend-tooltip.uh-left.uh-visible { transform:translate(calc(-100% - 14px),-50%) scale(1); }\n.uh-trend-tooltip-title { display:block; margin-bottom:6px; color:var(--dsw-alias-label-primary); font-size:12px; font-weight:650; }\n.uh-trend-tooltip-row { display:grid; grid-template-columns:8px minmax(0,1fr) auto; align-items:center; gap:7px; min-width:0; margin-top:3px; font-size:11px; }\n.uh-trend-tooltip-row .uh-trend-dot { width:8px; height:8px; margin:0; }\n.uh-trend-tooltip-label { overflow:hidden; font-weight:600; text-overflow:ellipsis; white-space:nowrap; }\n.uh-trend-tooltip-value { color:inherit; font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-trend-dot { display:inline-block; width:7px; height:7px; margin-right:5px; border-radius:50%; vertical-align:1px; }\n.uh-trend-legend { display:flex; flex-wrap:wrap; gap:5px 8px; margin-top:5px; }\n.uh-trend-legend-item { display:inline-flex; align-items:center; gap:3px; border:0; border-radius:7px; padding:3px 6px; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:11px; cursor:pointer; transition:color .15s ease; }\n.uh-trend-legend-item:hover { background:var(--dsw-alias-bg-layer-2); color:var(--dsw-alias-label-primary); }\n.uh-trend-legend-item.uh-on { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-primary); }\n.uh-filter-bar { position:relative; z-index:10; display:flex; align-items:center; flex-wrap:wrap; gap:7px; }\n.uh-filter-clear { border:0; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:11px; cursor:pointer; text-decoration:underline; }\n.uh-query-note { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-detail-tabs { display:flex; align-items:center; flex-wrap:wrap; gap:4px; padding:4px; border:1px solid var(--dsw-alias-border-l1); border-radius:9px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 58%, transparent); }\n.uh-detail-tab { display:inline-flex; align-items:center; gap:6px; min-height:32px; padding:5px 11px; border:0; border-radius:7px; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:12px; cursor:pointer; transition:background-color .15s ease, color .15s ease, transform .12s ease; }\n.uh-detail-tab:hover { color:var(--dsw-alias-label-primary); background:var(--dsw-alias-bg-layer-2); }\n.uh-detail-tab.uh-on { color:var(--dsw-alias-label-primary); background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 3px rgba(0,0,0,.14); }\n.uh-records-panel { animation:uh-panel-in .28s ease both; }\n.uh-records-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:7px; }\n.uh-records-note { margin:8px 0 10px; color:var(--dsw-alias-label-secondary); font-size:11px; line-height:1.45; }\n.uh-records-error { margin:7px 0; color:var(--dsw-alias-warning, #a55b00); font-size:11px; }\n.uh-records-scroll { overflow:auto; border:1px solid var(--dsw-alias-border-l1); border-radius:8px; }\n.uh-record-grid { display:grid; grid-template-columns:112px minmax(190px,1.45fr) 78px repeat(4,minmax(76px,.72fr)) 96px 82px; gap:0; min-width:900px; align-items:center; }\n.uh-record-grid > div { min-width:0; padding:8px 7px; border-bottom:1px solid var(--dsw-alias-border-l1); font-size:11px; }\n.uh-record-header { color:var(--dsw-alias-label-secondary); background:var(--dsw-alias-bg-layer-2); font-weight:600; }\n.uh-record-header > div { white-space:nowrap; }\n.uh-record-row { color:var(--dsw-alias-label-primary); cursor:pointer; outline:none; transition:background-color .14s ease, box-shadow .14s ease; }\n.uh-record-row:hover { background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 68%, transparent); }\n.uh-record-row.uh-on { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, var(--dsw-alias-bg-layer-1)); box-shadow:inset 3px 0 var(--dsw-alias-brand-primary); }\n.uh-record-row:focus-visible { box-shadow:inset 0 0 0 1px var(--dsw-alias-brand-primary); }\n.uh-record-row:last-child > div { border-bottom:0; }\n.uh-record-time, .uh-record-num { color:var(--dsw-alias-label-secondary); font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-record-num { text-align:right; }\n.uh-model-icon { display:inline-flex; align-items:center; justify-content:center; flex:none; vertical-align:middle; }\n.uh-model-icon img { display:block; width:100%; height:100%; object-fit:contain; }\n.uh-model-icon-fallback { border-radius:50%; background:var(--dsw-alias-fill-tertiary, rgba(128,128,128,.22)); box-shadow:inset 0 0 0 1px var(--dsw-alias-border-l1, rgba(128,128,128,.3)); }\n.uh-model-label { display:flex; align-items:center; gap:7px; min-width:0; }\n.uh-model-label .uh-model-text { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }\n.uh-record-model { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:550; }\n.uh-record-model small { display:block; overflow:hidden; color:var(--dsw-alias-label-secondary); font-size:10px; font-weight:400; text-overflow:ellipsis; white-space:nowrap; }\n.uh-record-source { color:var(--dsw-alias-label-secondary); white-space:nowrap; }\n.uh-record-band { white-space:nowrap; }\n.uh-record-band-badge { margin-left:6px; color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-record-band-peak { color:var(--dsw-alias-warning, #a55b00); font-weight:600; }\n.uh-record-band-off-peak { color:#2e7d32; }\n.uh-records-footer { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:9px; }\n.uh-record-detail { margin-top:12px; padding:10px 11px; border-top:1px solid var(--dsw-alias-border-l2); background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 42%, transparent); animation:uh-detail-in .24s ease both; }\n.uh-record-detail-head, .uh-record-detail-meta { display:flex; align-items:center; flex-wrap:wrap; gap:7px 14px; }\n.uh-record-detail-head { justify-content:space-between; margin-bottom:5px; color:var(--dsw-alias-label-primary); font-size:12px; }\n.uh-record-detail-meta { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-record-token-strip { display:grid; grid-template-columns:repeat(5,minmax(72px,1fr)) repeat(2,minmax(82px,1.1fr)); gap:6px; margin-top:9px; }\n.uh-record-token-strip > div { display:flex; flex-direction:column; gap:2px; min-width:0; padding:6px 7px; border-radius:6px; background:var(--dsw-alias-bg-layer-2); }\n.uh-record-token-strip span { color:var(--dsw-alias-label-secondary); font-size:10px; }\n.uh-record-token-strip strong { color:var(--dsw-alias-label-primary); font-size:12px; font-variant-numeric:tabular-nums; }\n.uh-record-token-total { border:1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 38%, var(--dsw-alias-border-l1)) !important; }\n@keyframes uh-detail-in { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }\n@media (max-width:640px) {\n .uh-trend-head { flex-direction:column; }\n .uh-filter-menu { flex:1 1 130px; width:auto; }\n .uh-filter-trigger { max-width:100%; }\n .uh-trend-tooltip { min-width:116px; }\n .uh-records-head { flex-direction:column; }\n .uh-record-token-strip { grid-template-columns:repeat(2,minmax(0,1fr)); }\n .uh-record-token-total { grid-column:1 / -1; }\n .uh-pricing-head { align-items:flex-start; }\n .uh-pricing-toolbar { align-items:flex-start; }\n .uh-pricing-section-head { align-items:center; }\n .uh-pricing-edit-row { grid-template-columns:minmax(0,1fr) 36px; min-width:0; width:100%; }\n .uh-pricing-edit-row > .uh-pricing-used-model-picker,\n .uh-pricing-edit-row > .uh-pricing-model-search,\n .uh-pricing-price-row > input { grid-column:1 / -1; }\n .uh-pricing-edit-row > input[type=\'number\'] { grid-column:1; }\n .uh-pricing-edit-row > .uh-icon-button { grid-column:2; }\n .uh-pricing-price-head { display:none; }\n .uh-pricing-overrides { min-width:0; width:100%; }\n .uh-pricing-override { min-width:0; }\n .uh-pricing-price-row { grid-template-columns:minmax(0,1fr) 36px; min-width:0; }\n .uh-pricing-price-row > input[type=\'number\'] { grid-column:1 / -1; }\n .uh-pricing-tier-editor { margin-left:0; padding-left:0; border-left:0; }\n .uh-pricing-tier-editor-head { align-items:flex-start; flex-wrap:wrap; }\n .uh-pricing-tier-editor-title { flex-direction:column; gap:2px; }\n .uh-pricing-tier-edit-head { display:none; }\n .uh-pricing-tier-edit-row { grid-template-columns:minmax(0,1fr) 36px; min-width:0; padding:8px; border:1px solid var(--dsw-alias-border-l1); border-radius:6px; }\n .uh-pricing-tier-edit-row > input { grid-column:1 / -1; }\n .uh-pricing-tier-edit-row > .uh-icon-button { grid-column:2; }\n .uh-pricing-tier-context { display:block; margin:2px 0 0; }\n}\n.uh-bar { flex:1; height:6px; border-radius:3px; background:var(--dsw-alias-bg-layer-2); overflow:hidden; max-width:340px; }\n.uh-fill { height:100%; background:var(--dsw-alias-brand-primary); border-radius:3px; transition:width .3s ease; }\n.uh-cards { display:grid; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr)); gap:10px; }\n.uh-card { background:var(--dsw-alias-bg-layer-1); border:1px solid var(--dsw-alias-border-l1); border-radius:12px; padding:12px 14px; display:flex; flex-direction:column; gap:6px; min-height:86px; animation:uh-card-in .45s ease both; transition:transform .18s ease, border-color .18s ease, box-shadow .18s ease; }\n.uh-card:hover { transform:translateY(-2px); border-color:var(--dsw-alias-border-l2); box-shadow:0 6px 18px rgba(0,0,0,.10); }\n.uh-card-label { font-size:12px; color:var(--dsw-alias-label-secondary); }\n.uh-card-value { font-size:20px; font-weight:650; color:var(--dsw-alias-label-primary); line-height:1.2; }\n.uh-card-sub { font-size:11px; color:var(--dsw-alias-label-secondary); line-height:1.55; }\n.uh-wsbars { display:flex; flex-direction:column; gap:6px; margin-top:2px; }\n.uh-wsbar { display:flex; flex-direction:column; gap:3px; cursor:pointer; padding:2px 6px; margin:0 -6px; border-radius:8px; transition:background-color .15s ease; }\n.uh-wsbar:hover { background:var(--dsw-alias-bg-layer-2); }\n.uh-wsbar.uh-sel { outline:1px solid var(--dsw-alias-brand-primary); }\n.uh-wsbar-top { display:flex; align-items:center; gap:6px; min-width:0; }\n.uh-wsbar-title { font-size:12px; color:var(--dsw-alias-label-primary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0; }\n.uh-wsbar-num { font-size:11px; font-variant-numeric:tabular-nums; color:var(--dsw-alias-label-secondary); flex:none; }\n.uh-panel { background:var(--dsw-alias-bg-layer-1); border:1px solid var(--dsw-alias-border-l1); border-radius:12px; padding:14px; }\n.uh-hm-head { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:10px; }\n.uh-chips { display:flex; flex-wrap:wrap; gap:6px; }\n.uh-chip { display:inline-flex; align-items:center; gap:6px; border:1px solid var(--dsw-alias-border-l2); background:transparent; color:var(--dsw-alias-label-primary); border-radius:999px; padding:2px 10px; font-size:11px; cursor:pointer; font-family:inherit; max-width:190px; transition:border-color .15s ease, background-color .15s ease, color .15s ease, transform .1s ease; }\n.uh-chip .uh-chip-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-chip.uh-on { border-color:var(--dsw-alias-brand-primary); background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, transparent); }\n.uh-dot { width:8px; height:8px; border-radius:50%; flex:none; }\n.uh-legend { display:flex; align-items:center; gap:4px; font-size:11px; color:var(--dsw-alias-label-secondary); }\n.uh-legend .uh-cell { width:10px; height:10px; border-radius:2px; animation:none; }\n.uh-hm-scroll { overflow-x:auto; padding-bottom:2px; }\n.uh-months { position:relative; height:16px; margin-left:30px; width:calc(100% - 30px); min-width:686px; font-size:10px; color:var(--dsw-alias-label-secondary); }\n.uh-months span { position:absolute; top:0; }\n.uh-hm-body { display:flex; gap:6px; min-width:0; }\n.uh-wdays { display:grid; grid-template-rows:repeat(7,10px); gap:3px; font-size:10px; color:var(--dsw-alias-label-secondary); text-align:right; width:24px; }\n.uh-wdays span { line-height:10px; }\n.uh-grid { flex:1 1 auto; min-width:686px; display:grid; grid-auto-flow:column; grid-template-columns:repeat(53,minmax(10px,1fr)); grid-template-rows:repeat(7,minmax(10px,auto)); gap:3px; }\n.uh-cell { width:100%; height:auto; min-width:10px; aspect-ratio:1; border-radius:2px; background:var(--dsw-alias-bg-layer-2); animation:uh-cell-in .45s ease both; transition:transform .12s ease, box-shadow .12s ease; }\n.uh-cell:hover { transform:scale(1.35); box-shadow:0 1px 6px rgba(0,0,0,.28); position:relative; z-index:2; }\n.uh-tip { position:fixed; z-index:1200; background:var(--dsw-alias-bg-overlay); border:1px solid var(--dsw-alias-border-l2); border-radius:10px; padding:10px 12px; box-shadow:0 8px 24px rgba(0,0,0,.18); pointer-events:auto; min-width:200px; max-width:290px; animation:uh-tip-in .16s ease both; }\n.uh-tip-date { font-size:12px; font-weight:600; color:var(--dsw-alias-label-primary); margin-bottom:6px; }\n.uh-tip-row { display:flex; align-items:center; gap:6px; font-size:12px; color:var(--dsw-alias-label-primary); padding:3px 6px; margin:0 -6px; border-radius:6px; cursor:pointer; transition:background-color .12s ease; }\n.uh-tip-row:hover { background:color-mix(in srgb, var(--dsw-alias-brand-primary) 12%, transparent); }\n.uh-tip-row .uh-n { margin-left:auto; font-variant-numeric:tabular-nums; color:var(--dsw-alias-label-secondary); }\n.uh-tip-tokens { font-size:11px; color:var(--dsw-alias-label-secondary); margin-top:6px; border-top:1px solid var(--dsw-alias-border-l1); padding-top:6px; }\n.uh-tbl-title { font-size:13px; font-weight:600; color:var(--dsw-alias-label-primary); margin:0 0 10px; }\n.uh-tbl-scroll { overflow-x:auto; }\n.uh-hrow, .uh-row { display:grid; grid-template-columns:minmax(160px,2.2fr) .7fr .9fr .9fr .9fr .9fr 1.1fr .9fr .8fr 1fr; gap:8px; align-items:center; min-width:900px; padding:7px 10px; border-radius:8px; font-size:12px; }\n.uh-model-hrow, .uh-model-row { display:grid; grid-template-columns:minmax(190px,2.2fr) .7fr .9fr .9fr .9fr .9fr 1.1fr .9fr .8fr; gap:8px; align-items:center; min-width:860px; padding:7px 10px; border-radius:8px; font-size:12px; }\n.uh-hrow { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-row { cursor:pointer; border:1px solid transparent; transition:background-color .15s ease, border-color .15s ease; }\n.uh-row:hover { background:var(--dsw-alias-bg-layer-2); }\n.uh-row.uh-sel { border-color:var(--dsw-alias-brand-primary); }\n.uh-num { text-align:right; font-variant-numeric:tabular-nums; color:var(--dsw-alias-label-primary); }\n.uh-hrow .uh-num { color:var(--dsw-alias-label-secondary); }\n.uh-ws-title { color:var(--dsw-alias-label-primary); font-weight:550; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-row-title-wrap { min-width:0; }\n.uh-ws-path { color:var(--dsw-alias-label-secondary); font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-barwrap { height:5px; border-radius:3px; background:var(--dsw-alias-bg-layer-2); overflow:hidden; margin-top:3px; }\n.uh-barwrap.uh-bar-thin { height:3px; margin-top:1px; }\n.uh-barfill { height:100%; border-radius:3px; transform-origin:left center; animation:uh-bar-grow .7s cubic-bezier(.22,.61,.36,1) both; transition:width .5s cubic-bezier(.22,.61,.36,1); }\n.uh-empty { color:var(--dsw-alias-label-secondary); font-size:12px; text-align:center; padding:26px 0; }\n.uh-note { font-size:11px; color:var(--dsw-alias-label-secondary); line-height:1.6; }\n.uh-side-entry { width:100%; border:0; background:transparent; color:var(--dsw-alias-label-secondary); border-radius:8px; min-height:36px; padding:7px 10px; display:flex; align-items:center; gap:9px; font:inherit; font-size:13px; cursor:pointer; text-align:left; }\n.uh-side-entry:hover { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-primary); }\n.uh-side-entry-icon { width:18px; text-align:center; flex:none; font-size:15px; }\n.uh-side-entry-label { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-boundary-fallback { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:12px; min-height:360px; padding:24px; border:1px solid var(--dsw-alias-border-l1); border-radius:12px; background:var(--dsw-alias-bg-layer-1); text-align:center; }\n.uh-boundary-title { color:var(--dsw-alias-label-primary); font-size:15px; font-weight:650; }\n.uh-boundary-note { max-width:420px; color:var(--dsw-alias-label-secondary); font-size:12px; line-height:1.6; }\n.uh-side-modal { position:fixed; inset:0; z-index:1100; background:color-mix(in srgb, #000 44%, transparent); display:flex; align-items:stretch; justify-content:center; padding:26px; }\n.uh-side-dialog { width:min(1120px, 100%); overflow-x:hidden; overflow-y:scroll; scrollbar-gutter:stable; scrollbar-width:auto; scrollbar-color:#707780 #1d1f22; background:var(--dsw-alias-bg-base); border:1px solid var(--dsw-alias-border-l2); border-radius:14px; box-shadow:0 18px 52px rgba(0,0,0,.35); padding:18px; }\n.uh-side-dialog::-webkit-scrollbar, .uh-pricing-table-wrap::-webkit-scrollbar { width:12px; height:12px; }\n.uh-side-dialog::-webkit-scrollbar-track, .uh-pricing-table-wrap::-webkit-scrollbar-track { background:#1d1f22; border-left:1px solid #363a40; }\n.uh-side-dialog::-webkit-scrollbar-thumb, .uh-pricing-table-wrap::-webkit-scrollbar-thumb { background:#707780; border:3px solid #1d1f22; border-radius:6px; }\n.uh-side-dialog::-webkit-scrollbar-thumb:hover, .uh-pricing-table-wrap::-webkit-scrollbar-thumb:hover { background:#9aa1aa; }\n.uh-side-dialog-head { display:flex; justify-content:flex-end; margin-bottom:8px; }\n@media (max-width: 640px) { .uh-side-modal { padding:0; } .uh-side-dialog { border-radius:0; border:0; padding:14px; } }\n/* iOS-style dashboard: grouped surfaces, tactile controls, and an elevated sheet. */\n.uh-page { gap:18px; max-width:1160px; margin:0 auto; padding:4px 2px 34px; font-family:-apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", sans-serif; }\n.uh-head { position:sticky; top:-18px; z-index:20; margin:0 -2px; padding:18px 2px 14px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 88%, transparent); backdrop-filter:blur(18px) saturate(150%); border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 76%, transparent); }\n.uh-title { font-size:22px; line-height:1.2; font-weight:700; letter-spacing:0; }\n.uh-actions { gap:8px; }\n.uh-range { padding:2px; gap:2px; border:0; border-radius:9px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent); overflow:visible; }\n.uh-range button, .uh-range button + button { min-height:28px; border:0; border-radius:7px; padding:4px 10px; }\n.uh-range button.uh-on { background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 3px rgba(0,0,0,.16); }\n.uh-refresh { min-height:30px; border:0; border-radius:15px; padding:5px 12px; display:inline-flex; align-items:center; justify-content:center; gap:6px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 14%, var(--dsw-alias-bg-layer-1)); color:var(--dsw-alias-brand-primary); font-weight:600; }\n.uh-line-icon { flex:none; }\n.uh-icon-button { width:30px; padding:0; }\n.uh-refresh:hover { border:0; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 22%, var(--dsw-alias-bg-layer-1)); }\n.uh-progress { padding:10px 12px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, var(--dsw-alias-bg-layer-1)); border:0; border-radius:12px; }\n.uh-cards { grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px; border:0; border-radius:0; overflow:visible; background:transparent; }\n.uh-card { min-height:84px; padding:12px 14px; gap:4px; border:0; border-radius:18px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.07), 0 8px 22px rgba(0,0,0,.05); animation:none; }\n.uh-card:first-child { border:0; background:color-mix(in srgb, #0a84ff 15%, var(--dsw-alias-bg-layer-1)); }\n.uh-card:nth-child(2) { background:color-mix(in srgb, #30d158 13%, var(--dsw-alias-bg-layer-1)); }\n.uh-card:nth-child(3) { background:color-mix(in srgb, #ff9f0a 14%, var(--dsw-alias-bg-layer-1)); }\n.uh-card:hover { transform:translateY(-2px); box-shadow:0 12px 28px rgba(0,0,0,.12); }\n.uh-card-label { display:flex; align-items:center; gap:6px; font-size:12px; font-weight:600; letter-spacing:0; }\n.uh-ios-summary-label, .uh-section-title, .uh-title-with-icon { display:flex; align-items:center; gap:7px; }\n.uh-section-title { margin-bottom:12px; color:var(--dsw-alias-label-primary); font-size:14px; font-weight:650; }\n/* Raise the complete reading scale without changing the data grid geometry. */\n.uh-page { font-size:14px; }\n.uh-range button, .uh-refresh { font-size:13px; }\n.uh-card-label, .uh-ios-summary-label { font-size:13px; }\n.uh-card-sub, .uh-ios-summary-caption, .uh-note { font-size:12px; }\n.uh-hrow, .uh-row, .uh-model-hrow, .uh-model-row { font-size:13px; }\n.uh-tbl-title { font-size:15px; }\n.uh-num { font-variant-numeric:tabular-nums; }\n.uh-card-value { font-size:23px; font-weight:700; letter-spacing:0; }\n.uh-card-sub { font-size:11px; line-height:1.45; }\n.uh-panel { padding:16px; border:0; border-radius:18px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.06), 0 6px 18px rgba(0,0,0,.04); }\n.uh-hm-head { margin-bottom:12px; }\n.uh-chip { border:0; border-radius:14px; padding:5px 10px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 7%, transparent); }\n.uh-chip.uh-on { border:0; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 18%, transparent); color:var(--dsw-alias-brand-primary); }\n.uh-hrow, .uh-row, .uh-model-hrow, .uh-model-row { border-radius:10px; }\n.uh-hrow, .uh-model-hrow { position:sticky; top:66px; z-index:2; background:var(--dsw-alias-bg-layer-1); border-bottom:1px solid var(--dsw-alias-border-l1); }\n.uh-row, .uh-model-row { padding-top:9px; padding-bottom:9px; }\n.uh-row:nth-child(even) { background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 52%, transparent); }\n.uh-side-entry { min-height:40px; border:0; border-radius:12px; padding:8px 10px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 9%, transparent); color:var(--dsw-alias-brand-primary); font-weight:600; }\n.uh-side-entry:hover { border:0; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 17%, transparent); }\n.uh-side-entry-icon { color:var(--dsw-alias-brand-primary); font-weight:700; }\n.uh-side-modal { align-items:flex-end; padding:0; background:rgba(0,0,0,.34); backdrop-filter:blur(8px); }\n.uh-side-dialog { width:min(1260px, 100%); max-height:calc(100vh - 44px); border:0; border-radius:24px 24px 0 0; padding:22px 24px 28px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent); box-shadow:0 -10px 44px rgba(0,0,0,.25); }\n.uh-side-dialog-head { position:sticky; top:-22px; z-index:8; justify-content:center; height:22px; margin:-22px -24px 8px; padding:8px 24px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent); border:0; }\n.uh-side-dialog-head::before { content:""; width:36px; height:5px; border-radius:3px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 24%, transparent); }\n.uh-side-dialog-head .uh-refresh { position:absolute; right:20px; top:7px; min-height:28px; background:transparent; }\n.uh-close-button { width:30px; padding:0; font-size:22px; line-height:1; color:var(--dsw-alias-label-secondary); }\n.uh-close-button:hover { color:var(--dsw-alias-label-primary); background:color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent); }\n@media (max-width:640px) { .uh-page { gap:14px; padding-bottom:20px; } .uh-head { position:static; padding:4px 0 10px; } .uh-title { font-size:20px; } .uh-custom-range { grid-template-columns:1fr; align-items:stretch; } .uh-custom-range-fields { grid-template-columns:repeat(2, minmax(0, 1fr)); } .uh-custom-range-actions { justify-content:flex-end; } .uh-side-dialog { max-height:calc(100vh - 8px); border-radius:20px 20px 0 0; padding:18px 14px 24px; } .uh-side-dialog-head { top:-18px; margin:-18px -14px 8px; padding:7px 14px; } .uh-card-value { font-size:22px; } }\n/* Navigation separates the dashboard into three focused iOS-style surfaces. */\n.uh-ios-tabs { display:grid; grid-template-columns:repeat(3, 1fr); gap:4px; padding:4px; border-radius:14px; background:color-mix(in srgb, var(--dsw-alias-label-primary) 9%, transparent); }\n.uh-ios-tab { min-height:32px; border:0; border-radius:10px; background:transparent; color:var(--dsw-alias-label-secondary); font:inherit; font-size:13px; font-weight:600; cursor:pointer; }\n.uh-ios-tab.uh-on { color:var(--dsw-alias-label-primary); background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 4px rgba(0,0,0,.16); }\n.uh-ios-summary { display:flex; flex-direction:column; gap:12px; background:transparent; box-shadow:none; }\n.uh-ios-summary-hero { display:grid; grid-template-columns:minmax(0,1fr) minmax(320px,.48fr); min-height:142px; padding:20px 22px; border:1px solid var(--dsw-alias-border-l1); border-radius:18px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.06), 0 8px 22px rgba(0,0,0,.06); }\n.uh-ios-summary-total { min-width:0; min-height:0; padding:0; border-radius:0; display:flex; align-items:center; justify-content:flex-start; gap:16px; background:transparent; box-shadow:none; }\n.uh-ios-summary-total-icon { display:grid; place-items:center; flex:none; width:54px; height:54px; border-radius:16px; background:color-mix(in srgb,#0a84ff 18%,var(--dsw-alias-bg-layer-2)); color:#0a84ff; }\n.uh-ios-summary-total-copy { min-width:0; }\n.uh-ios-summary-label { font-size:13px; font-weight:600; color:var(--dsw-alias-label-secondary); }\n.uh-ios-summary-total .uh-ios-summary-label { font-size:14px; }\n.uh-ios-summary-value { margin-top:7px; font-size:40px; line-height:1; font-weight:750; letter-spacing:0; color:var(--dsw-alias-label-primary); }\n.uh-unit { margin-left:6px; color:var(--dsw-alias-label-secondary); font-size:.4em; font-weight:650; white-space:nowrap; vertical-align:baseline; }\n.uh-wsbar-num .uh-unit { font-size:.78em; margin-left:3px; }\n.uh-ios-summary-caption { margin-top:8px; font-size:12px; color:var(--dsw-alias-label-secondary); }\n.uh-ios-summary-meta { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); align-items:center; min-width:0; gap:0; padding:0 0 0 22px; border-left:1px solid var(--dsw-alias-border-l1); background:transparent; font-size:12px; color:var(--dsw-alias-label-secondary); }\n.uh-ios-summary-meta-stat { min-width:0; padding:4px 22px; }\n.uh-ios-summary-meta-stat + .uh-ios-summary-meta-stat { border-left:1px solid var(--dsw-alias-border-l1); }\n.uh-ios-summary-meta-label { display:flex; align-items:center; gap:7px; color:var(--dsw-alias-label-secondary); font-size:12px; font-weight:600; white-space:nowrap; }\n.uh-ios-summary-meta-value { margin-top:7px; color:var(--dsw-alias-label-primary); font-size:24px; line-height:1; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-ios-summary-meta-cost .uh-ios-summary-meta-value { color:#30d158; }\n.uh-ios-summary-meta-caption { margin-top:7px; color:var(--dsw-alias-label-secondary); font-size:11px; white-space:nowrap; }\n.uh-ios-metrics { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:10px; }\n.uh-ios-metric { min-width:0; min-height:108px; padding:16px 18px; border:1px solid var(--dsw-alias-border-l1); border-radius:18px; display:flex; flex-direction:column; justify-content:center; gap:10px; background:var(--dsw-alias-bg-layer-1); box-shadow:0 1px 2px rgba(0,0,0,.06), 0 8px 20px rgba(0,0,0,.05); animation:uh-card-in .35s ease both; }\n.uh-ios-metrics > .uh-card { min-width:0; min-height:141px; padding:16px 18px; gap:4px; border:0; border-radius:18px; }\n.uh-ios-metrics > .uh-card .uh-card-value { min-width:0; font-size:23px; line-height:1.2; font-weight:700; white-space:nowrap; }\n.uh-ios-metrics > .uh-card .uh-card-sub { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.uh-ios-metrics > .uh-card:nth-child(-n+3) { justify-content:center; }\n.uh-ios-metric-label { display:flex; align-items:center; gap:8px; min-width:0; color:var(--dsw-alias-label-secondary); font-size:13px; font-weight:600; white-space:nowrap; }\n.uh-ios-metric-label .uh-line-icon { flex:none; }\n.uh-ios-metric-value { min-width:0; color:var(--dsw-alias-label-primary); font-size:26px; line-height:1.05; font-weight:700; font-variant-numeric:tabular-nums; white-space:nowrap; }\n.uh-ios-metric-input { background:color-mix(in srgb,#0a84ff 11%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-input .uh-line-icon { color:#0a84ff; }\n.uh-ios-metric-output { background:color-mix(in srgb,#bf5af2 10%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-output .uh-line-icon { color:#bf5af2; }\n.uh-ios-metric-write { background:color-mix(in srgb,#ff9f0a 11%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-write .uh-line-icon { color:#ff9f0a; }\n.uh-ios-metric-read { background:color-mix(in srgb,#30d158 11%,var(--dsw-alias-bg-layer-1)); }\n.uh-ios-metric-read .uh-line-icon { color:#30d158; }\n.uh-ios-metric-rate { background:var(--dsw-alias-bg-layer-1); }\n.uh-ios-metric-rate .uh-line-icon { color:#30d158; }\n.uh-ios-metric-rate-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; min-width:0; }\n.uh-ios-metric-rate-value { flex:none; color:#30d158; font-size:24px; line-height:1; font-weight:700; font-variant-numeric:tabular-nums; }\n.uh-ios-metric-rate-detail { min-width:0; overflow:hidden; color:var(--dsw-alias-label-secondary); font-size:14px; line-height:1.2; font-weight:600; font-variant-numeric:tabular-nums; text-overflow:ellipsis; white-space:nowrap; }\n.uh-ios-metric-bar { height:7px; border-radius:4px; background:var(--dsw-alias-bg-layer-2); overflow:hidden; }\n.uh-ios-metric-fill { height:100%; border-radius:inherit; background:#30d158; transition:width .35s ease; }\n.uh-token-semantics { display:flex; align-items:flex-start; gap:8px; padding:10px 12px; border-radius:12px; background:color-mix(in srgb, var(--dsw-alias-brand-primary) 8%, var(--dsw-alias-bg-layer-1)); color:var(--dsw-alias-label-secondary); font-size:12px; line-height:1.55; }\n.uh-token-semantics .uh-line-icon { margin-top:1px; color:var(--dsw-alias-brand-primary); }\n.uh-ios-list-panel { min-height:360px; }\n.uh-donut-chart { margin:0 0 18px; }\n.uh-donut-title { display:flex; align-items:center; gap:7px; margin-bottom:12px; color:var(--dsw-alias-label-primary); font-size:14px; font-weight:650; }\n.uh-donut-layout { display:grid; grid-template-columns:minmax(220px,300px) minmax(0,1fr); gap:24px; align-items:center; }\n.uh-donut-visual { position:relative; width:min(100%,280px); aspect-ratio:1; margin:0 auto; }\n.uh-donut-svg { display:block; width:100%; height:100%; overflow:visible; }\n.uh-donut-track { opacity:.78; }\n.uh-donut-segment { fill:none; stroke-dasharray:1; stroke-dashoffset:1; animation:uh-donut-draw .95s cubic-bezier(.22,.61,.36,1) both; cursor:pointer; outline:none; transition:filter .15s ease, opacity .15s ease; }\n.uh-donut-segment:hover, .uh-donut-segment:focus-visible, .uh-donut-segment.uh-active { filter:brightness(1.12); }\n.uh-donut-tooltip { position:absolute; top:0; left:0; z-index:3; display:flex; align-items:flex-start; gap:8px; max-width:190px; padding:9px 10px; border:1px solid var(--dsw-alias-border-l2); border-radius:8px; background:color-mix(in srgb, var(--dsw-alias-bg-base) 94%, transparent); box-shadow:0 10px 24px rgba(0,0,0,.22); backdrop-filter:blur(10px); color:var(--dsw-alias-label-primary); pointer-events:none; font-size:12px; line-height:1.4; transition:left .12s cubic-bezier(.22,.61,.36,1), top .12s cubic-bezier(.22,.61,.36,1); }\n.uh-donut-tooltip > div { min-width:0; display:flex; flex-direction:column; gap:4px; }\n.uh-donut-tooltip strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; }\n.uh-donut-tooltip span:not(.uh-donut-dot):not(.uh-model-icon) { color:var(--dsw-alias-label-secondary); font-size:11px; }\n.uh-donut-tooltip-cost { color:var(--dsw-alias-label-primary) !important; font-variant-numeric:tabular-nums; }\n.uh-donut-center { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; pointer-events:none; }\n.uh-donut-center strong { color:var(--dsw-alias-label-primary); font-size:28px; line-height:1; font-weight:750; font-variant-numeric:tabular-nums; }\n.uh-donut-center span { margin-top:5px; color:var(--dsw-alias-label-secondary); font-size:13px; }\n.uh-donut-legend { min-width:0; }\n.uh-donut-legend-row { display:grid; grid-template-columns:36px minmax(180px,1fr) minmax(250px,.8fr) 54px; gap:10px; align-items:center; min-height:58px; padding:8px 0; border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 78%, transparent); }\n.uh-donut-legend-row:last-child { border-bottom:0; }\n.uh-donut-dot { width:12px; height:12px; border-radius:50%; }\n.uh-donut-legend-mark { display:flex; align-items:center; gap:8px; min-width:0; }\n.uh-donut-legend-copy { min-width:0; display:flex; flex-direction:column; gap:5px; }\n.uh-donut-legend-copy strong { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-primary); font-size:13px; font-weight:650; }\n.uh-donut-legend-metrics { display:grid; grid-template-columns:minmax(120px,1fr) minmax(92px,auto); align-items:center; gap:14px; min-width:0; }\n.uh-donut-legend-metrics span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-secondary); font-size:12px; font-variant-numeric:tabular-nums; text-align:right; }\n.uh-donut-legend-metrics .uh-donut-cost { color:var(--dsw-alias-label-secondary); font-size:12px; }\n.uh-donut-percent { min-width:48px; color:var(--dsw-alias-label-secondary); font-size:12px; font-variant-numeric:tabular-nums; text-align:right; }\n/* Each detail table owns its scrolling and sticky header; sections must not overlap in the page scroll. */\n.uh-tbl-scroll { max-height:360px; overflow:auto; border-radius:12px; background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 55%, transparent); }\n.uh-hrow, .uh-model-hrow { position:sticky; top:0; z-index:3; border-bottom:1px solid var(--dsw-alias-border-l1); box-shadow:0 1px 0 color-mix(in srgb, var(--dsw-alias-bg-base) 70%, transparent); }\n.uh-row, .uh-model-row { min-height:48px; border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 72%, transparent); }\n.uh-row:last-child, .uh-model-row:last-child { border-bottom:0; }\n@media (max-width:640px) { .uh-tbl-scroll { max-height:300px; border-radius:10px; } }\n@media (max-width:640px) { .uh-hm-body { min-width:720px; } .uh-donut-legend-row { grid-template-columns:36px minmax(0,1fr) 48px; gap:8px; } .uh-donut-legend-copy { grid-column:2; grid-row:1; } .uh-donut-legend-metrics { grid-column:2 / -1; grid-row:2; grid-template-columns:minmax(0,1fr) minmax(0,auto); gap:8px; } .uh-donut-percent { grid-column:3; grid-row:1; } .uh-ios-summary-hero { grid-template-columns:1fr; min-height:0; gap:18px; padding:18px; } .uh-ios-summary-total { align-items:flex-start; } .uh-ios-summary-meta { grid-template-columns:repeat(2,minmax(0,1fr)); padding:16px 0 0; border-left:0; border-top:1px solid var(--dsw-alias-border-l1); } .uh-ios-summary-meta-stat { padding:0 12px; } .uh-ios-summary-meta-stat:first-child { padding-left:0; } .uh-ios-summary-meta-stat:last-child { padding-right:0; } .uh-ios-summary-value { font-size:31px; } .uh-ios-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); } .uh-ios-metric:last-child { grid-column:1 / -1; } .uh-ios-metric-value { font-size:24px; } .uh-donut-layout { grid-template-columns:1fr; gap:12px; } .uh-donut-visual { width:min(100%,250px); } }\n@keyframes uh-cell-in { from { opacity:0; transform:scale(.4); } to { opacity:1; transform:scale(1); } }\n@keyframes uh-glow { 0% { box-shadow:0 0 0 0 rgba(46,160,67,.5); } 70% { box-shadow:0 0 0 5px rgba(46,160,67,0); } 100% { box-shadow:0 0 0 0 rgba(46,160,67,0); } }\n@keyframes uh-card-in { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }\n@keyframes uh-bar-grow { from { transform:scaleX(0); } to { transform:scaleX(1); } }\n@keyframes uh-panel-in { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }\n@keyframes uh-trend-draw { from { stroke-dashoffset:var(--uh-draw-length); opacity:.2; } to { stroke-dashoffset:0; opacity:1; } }\n@keyframes uh-trend-fill { from { opacity:0; } to { opacity:1; } }\n@keyframes uh-donut-draw { from { stroke-dashoffset:1; opacity:.25; } to { stroke-dashoffset:0; opacity:1; } }\n@keyframes uh-spinner-turn { to { transform:rotate(360deg); } }\n@keyframes uh-menu-in { from { opacity:0; transform:translateY(-4px) scale(.97); } to { opacity:1; transform:translateY(0) scale(1); } }\n@keyframes uh-tip-in { from { opacity:0; } to { opacity:1; } }\n@media (prefers-reduced-motion: reduce) {\n .uh-cell, .uh-card, .uh-ios-metric, .uh-barfill, .uh-anim-panel, .uh-trend-panel, .uh-trend-line-draw, .uh-trend-area, .uh-trend-point, .uh-trend-spinner, .uh-donut-segment, .uh-records-panel, .uh-record-detail, .uh-tip, .uh-language-options { animation:none !important; stroke-dashoffset:0 !important; opacity:1 !important; }\n .uh-card, .uh-cell, .uh-ios-metric-fill, .uh-barfill, .uh-fill, .uh-refresh, .uh-chip, .uh-row, .uh-tip-row, .uh-trend-tooltip, .uh-language-trigger, .uh-language-caret, .uh-language-option { transition:none !important; }\n}\n'}const Ie=(e,t,a)=>{const n=new URLSearchParams({start:e.start,end:e.end,utc:e.utc?"1":"0",limit:String(a||100)});return e.workspaceId&&n.set("workspaceId",e.workspaceId),e.provider&&n.set("provider",e.provider),e.modelKey&&n.set("modelKey",e.modelKey),t&&n.set("cursor",t),fetch("/api/all-usage/records?"+n.toString(),{headers:{accept:"application/json"}}).then(e=>{if(!e.ok){const t=new Error("HTTP "+e.status);throw t.status=e.status,t}return e.json()})},De=()=>fetch("/api/all-usage/pricing",{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}),ve=(e,t,a)=>fetch("/api/all-usage/pricing",{method:"POST",headers:{"content-type":"application/json","x-all-usage-request-token":a},body:JSON.stringify({pricing:e,backfill:!0===t})}).then(e=>{if(!e.ok){const t=new Error("HTTP "+e.status);throw t.status=e.status,t}return e.json()}),Ee="dsh-all-usage.language";function Ae(){try{return"en"===window.localStorage.getItem(Ee)?"en":"zh"}catch(e){return"zh"}}const Se="dsh-all-usage.ui-state";function ze(){try{const e=window.localStorage.getItem(Se),t=e?JSON.parse(e):{};if(null===t||"object"!=typeof t||Array.isArray(t))return{};const a={};return["logs","model","workspace"].includes(t.detailView)&&(a.detailView=t.detailView),["route","model","provider"].includes(t.modelView)&&(a.modelView=t.modelView),["today","30d","90d","all"].includes(t.range)&&(a.range=t.range),"boolean"==typeof t.pricingAutoSync&&(a.pricingAutoSync=t.pricingAutoSync),a}catch(e){return{}}}function Te(e){try{const t=ze();window.localStorage.setItem(Se,JSON.stringify(Object.assign({},t,e)))}catch(e){}}function ke(e){const t=e.timerCtx,a="en"===e.language?"en":"zh",r=(e,t)=>"en"===a?t:e,p="en"===a,M=n.useRef(null);null===M.current&&(M.current=ze());const N=M.current,w=new Date,j=i(w,p),[L,I]=n.useState(null),[D,A]=n.useState(null),[T,k]=n.useState(""),[C,W]=n.useState(0),[H,J]=n.useState(null),[X,V]=n.useState(()=>N.range||"today"),[K,te]=n.useState({start:"",end:""}),[ae,ne]=n.useState({start:"",end:""}),[le,se]=n.useState(!1),[ue,ce]=n.useState(()=>N.modelView||"route"),[de,pe]=n.useState(null),[me,Me]=n.useState(null),[ye,fe]=n.useState(null),[Ee,Ae]=n.useState(null),[Se,ke]=n.useState(""),[Ce,Oe]=n.useState(!1),[Ye,Ue]=n.useState(""),[Qe,We]=n.useState(["total","input","cacheRead","output"]),[Re,Pe]=n.useState(()=>N.detailView||"logs"),[Ge,Ze]=n.useState(null),[Fe,Be]=n.useState(null),[He,Je]=n.useState([]),[Xe,Ve]=n.useState(null),[Ke,qe]=n.useState(!1),[$e,_e]=n.useState(0),[et,tt]=n.useState(!1),[at,nt]=n.useState(!1),[rt,it]=n.useState(""),[lt,st]=n.useState(!1),[ot,ut]=n.useState({}),[ct,dt]=n.useState(!1),[pt,mt]=n.useState(null),[gt,Mt]=n.useState(null),[ht,yt]=n.useState(!1),[xt,bt]=n.useState(!1),[Nt,wt]=n.useState(!1),[jt,Lt]=n.useState(!1),[ft,It]=n.useState(""),[Dt,vt]=n.useState({}),[Et,At]=n.useState(null),[St,zt]=n.useState({}),[Tt,kt]=n.useState(null),[Ct,Ot]=n.useState({}),[Yt,Ut]=n.useState(null),Qt=n.useRef({}),Wt=n.useRef(0),Rt=n.useRef({}),Pt=n.useRef(!1),Gt=n.useRef(()=>{}),Zt=()=>{Wt.current+=1;const e=Rt.current;for(const t of Object.keys(e))clearTimeout(e[t]);Rt.current={},Qt.current={},vt({})},[Ft,Bt]=n.useState(!1),Ht=n.useRef(null),Jt=n.useRef(null),Xt=n.useRef(null);null===Xt.current&&(Xt.current=c());const Vt=n.useRef(null);null===Vt.current&&(Vt.current=c());const Kt=n.useRef(null);null===Kt.current&&(Kt.current=c());const qt=n.useRef(null);null===qt.current&&(qt.current=c());const $t=n.useRef(null);null===$t.current&&($t.current=c());const _t=n.useRef(null);null===_t.current&&(_t.current=c());const ea=Xt.current,ta=Vt.current,aa=Kt.current,na=qt.current,ra=$t.current,ia=_t.current,la=n.useRef(()=>{}),sa=n.useCallback(()=>{if(!Pt.current||xt||Nt||jt)return;const e=ia.next();yt(!0),De().then(t=>{if(ia.isCurrent(e)){if(!t||"object"!=typeof t||!t.config)return It("load"),void yt(!1);Zt(),mt(t),Mt(e=>P(e,t)),It(""),yt(!1)}},()=>{ia.isCurrent(e)&&(It("load"),yt(!1))})},[xt,Nt,jt]);n.useEffect(()=>{Gt.current=sa});n.useEffect(()=>{Te({detailView:Re})},[Re]),n.useEffect(()=>{Te({modelView:ue})},[ue]),n.useEffect(()=>{"custom"!==X&&Te({range:X})},[X]);const oa=n.useMemo(()=>null===L?null:function(e,t,a,n,r,i,l){const s=$(e,t,a,n);return null===s?null:{start:s.start,end:s.end,utc:!0===a,workspaceId:r||null,provider:i||null,modelKey:l||null}}(L,X,p,K,de,me,ye),[L,X,p,K.start,K.end,de,me,ye]),ua=_(oa),ca=g(null!==D&&"object"==typeof D?D:L),da=null!==Ge&&Ge.baseKey===ua?Ge.scope:oa,pa=_(da),ma=n.useRef(ua);n.useEffect(()=>{ma.current!==ua&&(ma.current=ua,Ze(null),Be(null))},[ua]),n.useEffect(()=>{let e=!0,a=!1,n="",r=null,i=0,l=0,s=null;const o=()=>{null!==s&&(clearTimeout(s),s=null)},u=t=>{if(""===n)return;const a=aa.next();((e,t)=>fetch("/api/all-usage/balance"+(e?"?force=1":""),{headers:{accept:"application/json","x-all-usage-request-token":t}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}))(!0===t,n).then(t=>{e&&aa.isCurrent(a)&&t&&J(t)},()=>{})},c=t=>{if(!e||null!==s)return;const a="full"===t?i+=1:l+=1;s=setTimeout(()=>{s=null,e&&("full"===t?p():g())},function(e){const t=Math.max(1,Math.min(4,"number"==typeof e&&Number.isFinite(e)?e:1));return 5e3*Math.pow(2,t-1)}(a))},p=()=>{ta.next();const t=ea.next();fetch("/api/all-usage",{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}).then(l=>{if(!e||!ea.isCurrent(t))return;if(null===l||"object"!=typeof l)return k("full"),void c("full");r=l,l.scan&&(a=!!l.scan.done);const s="string"==typeof l.requestToken?l.requestToken:"",d=""!==s&&s!==n;n=s,i=0,o(),k(""),W(Date.now()),A(l),I(l),d&&u(!1)},()=>{e&&ea.isCurrent(t)&&(k("full"),c("full"))})},g=()=>{if(null===r)return void p();const t=ta.next();fetch("/api/all-usage/status",{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}).then(n=>{if(!e||!ta.isCurrent(t))return;if(null===n||"object"!=typeof n)return k("status"),void c("status");l=0;const i=function(e,t){if(null===e||"object"!=typeof e||null===t||"object"!=typeof t)return"full";if("string"!=typeof e.instanceId||"string"!=typeof t.instanceId||""===e.instanceId||e.instanceId!==t.instanceId)return"full";if(m(e)&&m(t)){if(e.metadataRevision!==t.metadataRevision)return"full";if(e.pricingRevision!==t.pricingRevision)return"full";if(e.dataRevision!==t.dataRevision)return"query";const a=e.scan,n=t.scan;return e.scanRevision!==t.scanRevision||a&&n&&!!a.done!=!!n.done?"status":"none"}const a=d(e),n=d(t);if(null===a||null===n||a!==n)return"full";const r=e.scan,i=t.scan;return r&&i&&!!r.done!=!!i.done?"full":"none"}(n,r);if(n.scan&&(a=!!n.scan.done),"full"===i)return"number"==typeof n.pricingRevision&&"number"==typeof r.pricingRevision&&n.pricingRevision!==r.pricingRevision&&Gt.current(),void p();r=Object.assign({},r,n),A(n),o(),k("")},()=>{e&&ta.isCurrent(t)&&(k("status"),c("status"))})};p();const M=t.interval(()=>{a||null!==s||g()},2e3),h=t.interval(()=>{a&&null===s&&g()},15e3),y=t.interval(()=>{u(!1)},6e4);return la.current=()=>{o(),i=0,l=0,p(),u(!0)},()=>{e=!1,o(),M(),h(),y();for(const e of Object.values(Rt.current))clearTimeout(e);Rt.current={}}},[]),n.useEffect(()=>{if(!Ft||"undefined"==typeof document)return;const e=e=>{Ht.current&&!Ht.current.contains(e.target)&&Bt(!1)};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[Ft]),n.useEffect(()=>{if(null===oa||""===ua)return;const e=na.next(),t=ca;Oe(!0),Ue(""),(e=>{const t=new URLSearchParams({start:e.start,end:e.end,utc:e.utc?"1":"0"});return e.workspaceId&&t.set("workspaceId",e.workspaceId),e.provider&&t.set("provider",e.provider),e.modelKey&&t.set("modelKey",e.modelKey),fetch("/api/all-usage/query?"+t.toString(),{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})})(oa).then(a=>{if(na.isCurrent(e)){if(null===a||"object"!=typeof a||null===t||g(a)!==t)return Ue("stale"),void Oe(!1);Ae(a),ke(ua),Oe(!1),Ue("")}},()=>{na.isCurrent(e)&&(Oe(!1),Ue("query"))})},[ua,ca]);const ga=n.useCallback(e=>{null!==e&&""!==ua&&(Ze({baseKey:ua,scope:{...e}}),Pe("logs"),Be(null),it(""))},[ua]),Ma=n.useCallback(e=>{null!==oa&&"string"==typeof e&&ga({...oa,start:e,end:e})},[oa,ga]),ha="logs"===Re&&null!==da&&""!==pa;n.useEffect(()=>{if(!ha)return ra.next(),void tt(!1);const e=ra.next(),t=ca;return tt(!0),it(""),Ve(null),qe(!1),Ie(da,null,20).then(a=>{if(ra.isCurrent(e)){if(null===a||"object"!=typeof a||!Array.isArray(a.items))return it("audit"),void tt(!1);if(null===t||g(a)!==t)return it("stale"),void tt(!1);Je(a.items),Be(e=>a.items.some(t=>t&&t.id===e)?e:a.items[0]?a.items[0].id:null),Ve(a.nextCursor||null),qe(!0===a.hasMore),tt(!1),it("")}},t=>{if(ra.isCurrent(e)){if(t&&409===t.status)return tt(!1),it("stale"),void _e(e=>e+1);tt(!1),it("audit")}}),()=>{ra.next()}},[pa,Re,ca,$e]),n.useEffect(()=>{null!==Ge&&"logs"===Re&&null!==Jt.current&&Jt.current.scrollIntoView({behavior:"smooth",block:"start"})},[Ge&&_(Ge.scope),Re]);const ya=n.useCallback(()=>{la.current()},[]),xa=n.useCallback(e=>{pe(t=>t===e?null:e)},[]),ba=n.useCallback(()=>{pe(null),Me(null),fe(null)},[]),Na=n.useCallback(e=>{Me(e||null)},[]),wa=n.useCallback(e=>{fe(e||null)},[]),ja=p&&Array.isArray(L&&L.byDayUtc)?L.byDayUtc:Array.isArray(L&&L.byDay)?L.byDay:[],La=u(ja,j).min,fa=o(K,p),Ia=function(e,t,a,n){return null!==e&&"object"==typeof e&&s(e.start,n)&&s(e.end,n)?e.start>e.end?"order":e.start<t||e.end>a?"bounds":"":"invalid"}(ae,La,j,p),Da=null!==Ee&&Se===ua,va=Da&&null!==ca&&g(Ee)===ca,Ea=Da&&(va||""===Ye),Aa=Ea&&Array.isArray(Ee.daily)?Ee.daily:ja,Sa=Ea&&Array.isArray(Ee.heatmap)?Ee.heatmap:ja,za=null===fa?"":fa.start+":"+fa.end,Ta=n.useMemo(()=>function(e,t,a,n){const r={totals:{turns:0,calls:0,sessions:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:{currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0}},perWs:[],perModel:[]};if(null===e)return r;if("all"===t)return{totals:e.totals,perWs:e.perWorkspace,perModel:e.perModel||[]};const s=a&&Array.isArray(e.byDayUtc)?e.byDayUtc:Array.isArray(e.byDay)?e.byDay:[];let u,c=null;if("custom"===t){const e=o(n,a);if(null===e)return r;u=e.start,c=e.end}else u=i("today"===t?new Date:l(new Date,"30d"===t?-29:-89,a),a);const d={turns:0,calls:0,sessions:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:{currency:"USD",input:"0",output:"0",cacheRead:"0",cacheWrite:"0",baseTotal:"0",total:"0",pricedCalls:0,unpricedCalls:0,ambiguousCalls:0,unsupportedCalls:0}},p=new Map,m=new Map,g=new Set;for(const e of s){if(e.date<u||null!==c&&e.date>c)continue;const t=Array.isArray(e.sessionIds)?e.sessionIds:[];for(const e of t)g.add(e);d.turns+=e.turns,d.input+=e.tokens.input,d.output+=e.tokens.output,d.cacheRead+=e.tokens.cacheRead,d.cacheWrite+=e.tokens.cacheWrite,d.reasoning+=e.tokens.reasoning,U(d.cost,e.cost);for(const t of e.byWorkspace){let e=p.get(t.workspaceId);void 0===e&&(e={workspaceId:t.workspaceId,turns:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:O()},p.set(t.workspaceId,e)),e.input+=t.input,e.output+=t.output,e.cacheRead+=t.cacheRead,e.cacheWrite+=t.cacheWrite,e.reasoning+=t.reasoning,U(e.cost,t.cost)}for(const t of e.perWorkspace){let e=p.get(t.workspaceId);void 0===e&&(e={workspaceId:t.workspaceId,turns:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:O()},p.set(t.workspaceId,e)),e.turns+=t.turns}for(const t of e.byModel||[]){const e=t.identityKey||t.model;let a=m.get(e);void 0===a&&(a={...t,calls:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:O()},m.set(e,a)),a.calls+=t.calls,a.input+=t.input,a.output+=t.output,a.cacheRead+=t.cacheRead,a.cacheWrite+=t.cacheWrite,a.reasoning+=t.reasoning,d.calls+=Number.isFinite(t.calls)?t.calls:0,U(a.cost,t.cost)}}return d.sessions=g.size,{totals:d,perWs:Array.from(p.values()),perModel:Array.from(m.values())}}(L,X,p,fa),[L,X,p,za]),ka=n.useMemo(()=>Ea?{totals:Ee.totals,perWs:Ee.perWorkspace||[],perModel:Ee.perModel||[]}:Ta,[Ea,Ee,Ta]),Ca=ie(ka.totals.input+ka.totals.output+ka.totals.cacheRead+ka.totals.cacheWrite+ka.totals.reasoning,t),Oa=(ie(Math.round(10*x(ka.totals.input,ka.totals.cacheRead)),t),null!==me||null!==ye),Ya=Number.isFinite(ka.totals.calls)&&ka.totals.calls>0?ka.totals.calls:ka.totals.turns,Ua=ie(Oa?Ya:ka.totals.turns,t),Qa=ie(Ya,t),Wa=e=>e.input+e.output+e.cacheRead+e.cacheWrite+e.reasoning,Ra=n.useMemo(()=>(Array.isArray(ka.perWs)?ka.perWs:[]).slice().sort((e,t)=>Wa(t)-Wa(e)),[ka.perWs]),Pa=n.useMemo(()=>function(e,t,a,n){if("route"===t)return e.slice();const r=new Map,i=new Map;for(const l of e){const e=re(l,a,n),s="model"===t?e.model:e.provider;let o=r.get(s);void 0===o&&(o={model:s,provider:"provider"===t?s:e.provider,calls:0,input:0,output:0,cacheRead:0,cacheWrite:0,reasoning:0,cost:O()},r.set(s,o),i.set(s,[])),i.get(s).push(l),o.calls+=l.calls,o.input+=l.input,o.output+=l.output,o.cacheRead+=l.cacheRead,o.cacheWrite+=l.cacheWrite,o.reasoning+=l.reasoning,U(o.cost,l.cost)}for(const[e,a]of r){const n="provider"===t?f(e):E(i.get(e));a.iconKey=null===n?null:n.key}return Array.from(r.values())}(ka.perModel||[],ue,r("未知供应商","Unknown provider"),r("未知模型","Unknown model")).sort((e,t)=>Wa(t)-Wa(e)),[ka.perModel,ue,a]),Ga=L&&Array.isArray(L.workspaces)?L.workspaces:[],Za=L&&L.aliases&&"object"==typeof L.aliases?L.aliases:{},Fa=n.useMemo(()=>{const e=Array.isArray(Ta.perModel)?Ta.perModel.filter(e=>e&&"object"==typeof e):[],t=Array.from(new Set(e.map(e=>"string"==typeof e.provider&&""!==e.provider?e.provider:null).filter(e=>null!==e))).sort(),n=Array.from(new Set(e.map(e=>{const n="string"==typeof e.actualModel&&""!==e.actualModel?e.actualModel:"string"==typeof e.requestedModel&&""!==e.requestedModel?e.requestedModel:null;if(null!==n)return n;const r="string"==typeof e.model&&""!==e.model?e.model:"en"===a?"Unknown model":"未知模型",i=r.indexOf(" / "),l=i>0?r.slice(0,i):"";return i>0&&t.includes(l)?r.slice(i+3):r}))).sort((e,t)=>e.localeCompare(t)),r=new Map((Array.isArray(Ta.perWs)?Ta.perWs:[]).map(e=>[e.workspaceId,e])),i=Ga.filter(e=>{return void 0!==(t=r.get(e.id))&&(Number(t.turns)>0||Number(t.calls)>0||Number(t.input)>0||Number(t.output)>0||Number(t.cacheRead)>0||Number(t.cacheWrite)>0||Number(t.reasoning)>0);var t});return{providerOptions:t,modelOptions:n,rangeWorkspaceOptions:i,rangeWorkspaceIds:new Set(i.map(e=>e.id))}},[Ta.perModel,Ta.perWs,Ga,a]),{providerOptions:Ba,modelOptions:Ha,rangeWorkspaceOptions:Ja,rangeWorkspaceIds:Xa}=Fa,Va=n.useMemo(()=>{const e=new Map,t=new Map;return Ga.forEach((a,n)=>{e.set(a.id,a),t.set(a.id,n)}),{byId:e,indexes:t}},[Ga]),Ka=Va.byId,qa=Va.indexes,$a=n.useCallback(e=>{const t=Za[e];if("string"==typeof t&&""!==t)return t;const n=Ka.get(e);return n?n.title:"en"===a?"Unknown workspace":"未知工作区"},[Za,Ka,a]),_a=n.useMemo(()=>{const e=new Map;for(const t of ja)e.set(t.date,t);return e},[ja]),en=n.useMemo(()=>function(e,t){const a=new Date;let n=0;for(let r=0;r<371;r++){const s=l(a,-r,t),o=e.get(i(s,t));if(void 0!==o&&o.turns>0)n+=1;else if(r>0)break}let r=0,s=0;for(let n=0;n<371;n++){const o=l(a,-n,t),u=e.get(i(o,t));void 0!==u&&u.turns>0?(s+=1,s>r&&(r=s)):s=0}return{streak:n,best:r}}(_a,p),[_a,p,j]),tn=L&&L.pricing&&"object"==typeof L.pricing?L.pricing:{},an=pt&&"object"==typeof pt?pt:tn,nn=n.useMemo(()=>ct?function(e){const t=new Map,a=e&&Array.isArray(e.tierSchedules)?e.tierSchedules:[];for(const e of a)e&&"string"==typeof e.id&&Array.isArray(e.tiers)&&t.set(e.id,e.tiers);return e&&Array.isArray(e.usedModels)?e.usedModels.map(e=>{const a=e&&"string"==typeof e.tierScheduleId?t.get(e.tierScheduleId):null,n=Array.isArray(a)?a:e&&Array.isArray(e.tiers)?e.tiers:[];return Object.assign({},e,{tiers:n.map(e=>Object.assign({},e))})}):[]}(an):[],[ct,an]),rn=n.useMemo(()=>nn.slice().sort((e,t)=>{const a={unpriced:0,ambiguous:1,unsupported:2,priced:3};return(void 0===a[e.status]?9:a[e.status])-(void 0===a[t.status]?9:a[t.status])||String(e.model||"").localeCompare(String(t.model||""))}).map(e=>({value:String(e.identityKey||e.model||""),label:(e.model||("en"===a?"Unknown model":"未知模型"))+" · "+G(e.status,a),model:B(e.actualModel||e.requestedModel||e.pricingModel),officialModel:B(e.pricingModel)})).filter(e=>""!==e.value),[nn,a]),ln=n.useMemo(()=>{const e=null!==oa?{start:oa.start,end:oa.end}:$(L,X,p,fa),t=Ea&&null!==oa&&oa.start===oa.end&&Ee&&Array.isArray(Ee.hourly)?function(e,t){const a=[];for(const n of Array.isArray(e)?e:[]){if(null===n||"object"!=typeof n)continue;const e=Number.isFinite(n.time)?n.time:"string"==typeof n.date?Date.parse(n.date):NaN;if(!Number.isFinite(e))continue;const r=ee(n);a.push({date:i(new Date(e),t),time:e,turns:Number.isFinite(n.turns)?n.turns:0,calls:Number.isFinite(n.calls)?n.calls:0,sessions:Number.isFinite(n.sessions)?n.sessions:0,tokens:r,cost:Y(n),total:r.input+r.output+r.cacheRead+r.cacheWrite+r.reasoning})}return a.sort((e,t)=>e.time-t.time)}(Ee.hourly,p):[];return t.length>0?t:function(e,t,a){if(null===t||"object"!=typeof t)return[];const n=new Map((Array.isArray(e)?e:[]).filter(e=>e&&"string"==typeof e.date).map(e=>[e.date,e])),r=t.start.split("-").map(Number),l=t.end.split("-").map(Number),s=a?new Date(Date.UTC(r[0],r[1]-1,r[2])):new Date(r[0],r[1]-1,r[2]),o=a?new Date(Date.UTC(l[0],l[1]-1,l[2])):new Date(l[0],l[1]-1,l[2]),u=[];for(;s.getTime()<=o.getTime();){const e=i(s,a),t=n.get(e),r=ee(t);u.push({date:e,turns:t&&Number.isFinite(t.turns)?t.turns:0,calls:t&&Number.isFinite(t.calls)?t.calls:0,sessions:t&&Number.isFinite(t.sessions)?t.sessions:0,tokens:r,cost:Y(t),total:r.input+r.output+r.cacheRead+r.cacheWrite+r.reasoning}),a?s.setUTCDate(s.getUTCDate()+1):s.setDate(s.getDate()+1)}return u}(Ea&&Ee&&Array.isArray(Ee.daily)?Ee.daily:ja,e,p)},[oa,Ea,Ee,ja,L,X,p,za]),sn=Ea&&Ee?ua+":"+(g(Ee)||"query"):ua,on=n.useMemo(()=>({}),[ct,gt,ht,xt,Nt,jt,ft,an,tn,nn,rn,Tt,Yt,St,Ct,Et,Dt,L,a]),un=n.useMemo(()=>Pa.map((e,t)=>({label:e.model,value:Wa(e),cost:e.cost,color:oe[t%oe.length],iconKey:"route"===ue?(()=>{const t=v(e);return null===t?null:t.key})():void 0===e.iconKey?null:e.iconKey})),[Pa,ue]),cn=n.useMemo(()=>Ra.map((e,t)=>({label:$a(e.workspaceId),value:Wa(e),cost:e.cost,color:oe[t%oe.length]})),[Ra,$a]),dn=n.useCallback(e=>{We(t=>t.includes(e)?t.length<=1?t:t.filter(t=>t!==e):t.concat(e))},[]);if(n.useEffect(()=>{null===de||Xa.has(de)||pe(null),null===me||Ba.includes(me)||Me(null),null===ye||Ha.includes(ye)||fe(null)},[de,me,ye,Xa,Ba,Ha]),null===L){const e=""!==T;return n.createElement("div",{className:"uh-page"},n.createElement("div",{className:"uh-panel"},n.createElement("div",{className:"uh-empty"},e?r("无法加载用量统计。请重试。","Unable to load usage statistics. Please retry."):r("正在加载用量统计…","Loading usage statistics…")),e?n.createElement("div",{style:{textAlign:"center"}},n.createElement("button",{className:"uh-refresh",onClick:ya},n.createElement(b,{name:"refresh",size:14}),r("重试","Retry"))):null))}const pn=null!==D&&"object"==typeof D?D:L,mn=pn&&pn.scan?pn.scan:L.scan||{done:!0,started:!0,scanned:0,total:0,failed:0},gn=pn&&pn.sync?pn.sync:L.sync||{},Mn=Aa,hn=(e,t)=>{const a="string"==typeof L.requestToken?L.requestToken:"";var n,r,i;""!==a&&(n=e,r=String(void 0===t?"":t).trim(),i=a,fetch("/api/all-usage/alias",{method:"POST",headers:{"content-type":"application/json","x-all-usage-request-token":i},body:JSON.stringify({workspaceId:n,alias:r})}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})).then(e=>{e&&e.ok&&e.aliases&&I(t=>null===t?t:Object.assign({},t,{aliases:e.aliases}))},()=>{})},yn=()=>{xt||Nt||jt||(Zt(),ia.next(),yt(!1),dt(!1),Pt.current=!1)},xn=()=>{const e=ia.next();mt(null),Mt(null),yt(!0),zt({}),Ot({}),kt(null),Ut(null),At(null),Zt(),It(""),dt(!0),Pt.current=!0,st(!1),De().then(t=>{if(!ia.isCurrent(e))return;if(!t||"object"!=typeof t||!t.config)return void It("load");const a=R(t);mt(t),Mt(a)},()=>{ia.isCurrent(e)&&It("load")}).finally(()=>{ia.isCurrent(e)&&yt(!1)})},bn=e=>{if(null===gt||xt||Nt||jt)return;const t=function(e){const t=e&&Array.isArray(e.mappings)?e.mappings:[];for(const e of t){if(!e||""===String(e.identityKey||e.usageIdentityKey||e.model||"").trim()||""===String(e.catalogModelId||"").trim())return"mapping";if(!["fresh","total","legacy"].includes(e.inputTokenSemantics||"fresh")||!Z(void 0===e.multiplier?"1":e.multiplier))return"mapping"}const a=e&&Array.isArray(e.overrides)?e.overrides:[];for(const e of a){if(!e||""===String(e.modelId||"").trim())return"override";if(!["input","output","cacheRead","cacheWrite"].every(t=>Z(e[t])))return"override";let t=0;const a=Array.isArray(e.tiers)?e.tiers:[];if(a.length>32)return"tier";for(const e of a){if(!F(e,t))return"tier";t=Number(e.size)}if(!0===e.tiered&&0===a.length)return"tier"}return""}(gt);if(""!==t)return void It(t);const a="string"==typeof L.requestToken?L.requestToken:"";if(""===a)return void It("token");const n=ia.next();bt(!0),It(""),ve(gt,e,a).then(e=>{ia.isCurrent(n)&&(e&&!0===e.ok&&e.pricing?(I(t=>null===t?t:Object.assign({},t,{pricing:e.pricing})),mt(e.pricing),Mt(R(e.pricing)),zt({}),Ot({}),kt(null),Ut(null),yn(),la.current()):It("save"))},e=>{ia.isCurrent(n)&&It(e&&403===e.status?"forbidden":"save")}).finally(()=>bt(!1))},Nn=()=>{if(xt||Nt||jt)return;const e="string"==typeof L.requestToken?L.requestToken:"";var t;""!==e?(wt(!0),It(""),(t=e,fetch("/api/all-usage/pricing/sync",{method:"POST",headers:{"content-type":"application/json","x-all-usage-request-token":t},body:"{}"}).then(e=>{if(!e.ok){const t=new Error("HTTP "+e.status);throw t.status=e.status,t}return e.json()})).then(e=>{e&&!0===e.ok&&e.pricing?(Zt(),I(t=>null===t?t:Object.assign({},t,{pricing:e.pricing})),mt(e.pricing),Mt(t=>P(t,e.pricing)),zt({}),Ot({}),kt(null),Ut(null),la.current()):It("sync")},e=>{It(e&&403===e.status?"forbidden":"sync")}).finally(()=>wt(!1))):It("token")},wn=(e,t,a)=>{Mt(n=>{if(null===n||!Array.isArray(n.mappings)||!n.mappings[e])return n;const r=n.mappings.slice();return r[e]=Object.assign({},r[e],{[t]:a}),Object.assign({},n,{mappings:r})})},jn=(e,t)=>{const a={};for(const n of Object.keys(e)){const r=Number(n);!Number.isInteger(r)||r<0||r===t||(a[String(r>t?r-1:r)]=e[n])}return a},Ln=()=>{Mt(e=>null===e?e:Object.assign({},e,{mappings:e.mappings.concat([{identityKey:"",model:"",catalogProviderId:"",catalogModelId:"",inputTokenSemantics:"fresh",multiplier:"1"}])}))},fn=(e,t,a)=>{Mt(n=>{if(null===n||!Array.isArray(n.overrides)||!n.overrides[e])return n;const r=n.overrides.slice();return r[e]=Object.assign({},r[e],{[t]:a}),Object.assign({},n,{overrides:r})})},In=(e,t,a,n)=>{Mt(r=>{if(null===r||!Array.isArray(r.overrides)||!r.overrides[e])return r;const i=r.overrides.slice(),l=Object.assign({},i[e]),s=Array.isArray(l.tiers)?l.tiers.map(e=>Object.assign({},e)):[];return s[t]?(s[t]=Object.assign({},s[t],{[a]:n}),i[e]=Object.assign({},l,{tiered:s.length>0,tiers:s}),Object.assign({},r,{overrides:i})):r}),It("")},Dn=()=>{Mt(e=>null===e?e:Object.assign({},e,{overrides:e.overrides.concat([{providerId:"",modelId:"",displayName:"",input:"",output:"",cacheRead:"",cacheWrite:"",tiered:!1,tiers:[]}])})),It("")},vn=ka.totals.input+ka.totals.output+ka.totals.cacheRead+ka.totals.cacheWrite+ka.totals.reasoning,En=x(ka.totals.input,ka.totals.cacheRead),An=(Y(ka.totals),Q(ka.totals,a)),Sn=function(e,t){const a=Y(e);if(a.pricedCalls>0&&0===a.unpricedCalls&&0===a.ambiguousCalls&&0===a.unsupportedCalls)return"en"===t?a.pricedCalls+" priced":a.pricedCalls+" 次已计价";const n=a.unpricedCalls+a.ambiguousCalls+a.unsupportedCalls;return n>0?"en"===t?n+" unpriced":n+" 次未计价":"en"===t?"No pricing":"暂无价格"}(ka.totals,a);let zn="—",Tn=r("查询中…","Checking…");if(null!=H)if("missing-key"===H.status)zn=r("未配置","Not configured"),Tn=r("在 设置 → 模型 中填写 DeepSeek API Key 后可见","Available after you enter a DeepSeek API key in Settings → Models");else if("unavailable"===H.status)zn=r("不可用","Unavailable"),Tn=H.message||r("DeepSeek 接口返回余额不可用","The DeepSeek API reported that balance information is unavailable");else if("error"===H.status){zn=r("查询失败","Lookup failed");const e=H.detail?"en"===a?" ("+String(H.detail).slice(0,90)+")":"("+String(H.detail).slice(0,90)+")":"";Tn=(H.message||"")+e+r(" 点“刷新”重试"," Click Refresh to try again")}else if("ok"===H.status&&Array.isArray(H.currencies)&&H.currencies.length>0){const e=H.currencies,t=e.find(e=>"CNY"===e.currency)||e[0],n=e.filter(e=>e!==t);zn=z(t.currency,t.total,a);let i=null!==t.total?r("赠送 ","Granted ")+z(t.currency,t.granted,a)+" · "+r("充值 ","Top-up ")+z(t.currency,t.toppedUp,a):"";n.length>0&&(i+=(i?" | ":"")+n.map(e=>z(e.currency,e.total,a)).join(" ")),Tn=i}else zn=r("无数据","No data"),Tn="";const kn=(e,t,a,r,i,l)=>n.createElement("div",{className:"uh-card",style:{animationDelay:70*r+"ms"}},n.createElement("div",{className:"uh-card-label"},l?n.createElement(we,{iconKey:l,size:15,showTitle:!0}):i?n.createElement(b,{name:i,size:14}):null,e),n.createElement("div",{className:"uh-card-value"},t),n.createElement("div",{className:"uh-card-sub"},a)),Cn=n.createElement("div",{className:"uh-ios-metric uh-ios-metric-rate",style:{animationDelay:"280ms"}},n.createElement("div",{className:"uh-ios-metric-rate-head"},n.createElement("div",{className:"uh-ios-metric-label"},n.createElement(b,{name:"cache",size:18}),r("缓存命中率","Cache Hit Rate")),n.createElement("div",{className:"uh-ios-metric-rate-value"},En.toFixed(1)+"%")),n.createElement("div",{className:"uh-ios-metric-bar"},n.createElement("div",{className:"uh-ios-metric-fill",style:{width:Math.max(0,Math.min(100,En))+"%"}})),n.createElement("div",{className:"uh-ios-metric-rate-detail"},"en"===a?"Context reused "+h(ka.totals.cacheRead)+" tokens":"复用上下文 "+h(ka.totals.cacheRead)+" Token")),On=Ra.length>0?Wa(Ra[0]):0,Yn=Ra.slice(0,3).map(e=>{const t=Wa(e),r=qa.get(e.workspaceId),i=q(void 0===r?0:r),l=de===e.workspaceId;return n.createElement("div",{key:e.workspaceId,className:"uh-wsbar"+(l?" uh-sel":""),onClick:()=>xa(e.workspaceId)},n.createElement("div",{className:"uh-wsbar-top"},n.createElement("span",{className:"uh-dot",style:{background:i}}),n.createElement("span",{className:"uh-wsbar-title"},$a(e.workspaceId)),n.createElement("span",{className:"uh-wsbar-num"},S(h(t),t,a))),n.createElement("div",{className:"uh-barwrap uh-bar-thin"},n.createElement("div",{className:"uh-barfill",style:{width:On>0?Math.max(2,t/On*100)+"%":"0%",background:i}})))}),Un=n.createElement("div",{className:"uh-card",style:{animationDelay:"210ms"}},n.createElement("div",{className:"uh-card-label"},n.createElement(b,{name:"folder",size:14}),r("各工作区总处理量","Total Tokens Processed by Workspace")),0===Ra.length?n.createElement("div",{className:"uh-empty",style:{padding:"8px 0"}},r("暂无数据","No data yet")):n.createElement("div",{className:"uh-wsbars"},Yn,Ra.length>3?n.createElement("div",{className:"uh-card-sub"},"en"===a?"See the details table for the other "+(Ra.length-3)+" workspaces":"其余 "+(Ra.length-3)+" 个工作区见明细表"):null)),Qn=Ra.map(e=>{const t=Ka.get(e.workspaceId),i="string"==typeof Za[e.workspaceId]?Za[e.workspaceId]:"",l=t?t.title:r("未知工作区","Unknown workspace"),s=t?t.path:"",o=""!==i?i:l,u=""!==i?l+" · "+s:s,c=Wa(e),d=x(e.input,e.cacheRead),p=qa.get(e.workspaceId),m=q(void 0===p?0:p),g=de===e.workspaceId;return n.createElement("div",{key:e.workspaceId,className:"uh-row"+(g?" uh-sel":""),onClick:()=>xa(e.workspaceId)},n.createElement("div",{className:"uh-row-title-wrap"},n.createElement("div",{className:"uh-ws-title"},o),n.createElement("div",{className:"uh-ws-path"},u)),n.createElement("div",{className:"uh-num"},h(e.turns)),n.createElement("div",{className:"uh-num"},h(e.input)),n.createElement("div",{className:"uh-num"},h(e.cacheRead)),n.createElement("div",{className:"uh-num"},h(e.output)),n.createElement("div",{className:"uh-num"},h(e.reasoning)),n.createElement("div",{},n.createElement("div",{className:"uh-num"},h(c)),n.createElement("div",{className:"uh-barwrap"},n.createElement("div",{className:"uh-barfill",style:{width:On>0?Math.max(2,c/On*100)+"%":"0%",background:m}}))),n.createElement("div",{className:"uh-num uh-cost-num"},Q(e,a)),n.createElement("div",{className:"uh-num"},d.toFixed(1)+"%"),n.createElement("div",{className:"uh-num"},On>0?(c/On*100).toFixed(0)+"%":"0%"))}),Wn="route"===ue?r("混合查看","Combined View"):"model"===ue?r("按模型合并","Grouped by Model"):r("按供应商汇总","Grouped by Provider"),Rn="route"===ue?r("供应商 / 模型","Provider / Model"):"model"===ue?r("模型","Model"):r("供应商","Provider"),Pn="model"!==Re||0===Pa.length?null:n.createElement(ge,{key:"model-donut-"+Re+":"+ua+":"+(ca||"query")+":"+ue,title:"provider"===ue?r("供应商用量","Provider Usage"):r("模型用量","Model Usage"),icon:"chart",language:a,items:un}),Gn="workspace"!==Re||0===Ra.length?null:n.createElement(ge,{key:"workspace-donut-"+Re+":"+ua+":"+(ca||"query"),title:r("工作区用量","Workspace Usage"),icon:"folder",language:a,items:cn}),Zn="model"===Re?Pa.map(e=>{const t=Wa(e),r=x(e.input,e.cacheRead);return n.createElement("div",{key:e.identityKey||e.model,className:"uh-model-row uh-row"},n.createElement("div",{className:"uh-row-title-wrap"},n.createElement("div",{className:"uh-ws-title uh-model-label",title:e.model},n.createElement(we,{iconKey:e.iconKey,row:e,size:18,showTitle:!0}),n.createElement("span",{className:"uh-model-text"},e.model))),n.createElement("div",{className:"uh-num"},h(e.calls)),n.createElement("div",{className:"uh-num"},h(e.input)),n.createElement("div",{className:"uh-num"},h(e.cacheRead)),n.createElement("div",{className:"uh-num"},h(e.output)),n.createElement("div",{className:"uh-num"},h(e.reasoning)),n.createElement("div",{className:"uh-num"},h(t)),n.createElement("div",{className:"uh-num uh-cost-num"},Q(e,a)),n.createElement("div",{className:"uh-num"},r.toFixed(1)+"%"))}):[],Fn=lt?n.createElement("div",{className:"uh-panel uh-anim-panel"},n.createElement("div",{className:"uh-alias-panel-head"},n.createElement("span",{},r("工作区别名","Workspace Aliases")),n.createElement("button",{className:"uh-alias-close",onClick:()=>st(!1)},r("关闭","Close"))),0===Ga.length?n.createElement("div",{className:"uh-empty",style:{padding:"10px 0"}},r("暂无工作区","No workspaces yet")):n.createElement("div",{className:"uh-alias-list"},Ga.map((e,t)=>n.createElement("div",{key:e.id,className:"uh-alias-item"},n.createElement("span",{className:"uh-dot",style:{background:q(t)}}),n.createElement("span",{className:"uh-alias-folder",title:e.path},e.title||e.path),n.createElement("input",{className:"uh-alias-input",value:void 0!==ot[e.id]?ot[e.id]:"",placeholder:r("项目别名","Project alias"),onChange:t=>ut(a=>Object.assign({},a,{[e.id]:t.target.value})),onKeyDown:t=>{"Enter"===t.key&&hn(e.id,t.target.value)}})))),n.createElement("div",{className:"uh-alias-panel-foot"},n.createElement("span",{className:"uh-note"},r("回车保存单个;清空别名还原文件夹名","Press Enter to save one; clear an alias to restore the folder name")),n.createElement("button",{className:"uh-alias-ok",onClick:()=>{for(const e of Object.keys(ot)){const t="string"==typeof Za[e]?Za[e]:"";ot[e]!==t&&hn(e,ot[e])}st(!1)}},r("全部保存","Save All")))):null,Bn=an.sync&&"object"==typeof an.sync?an.sync:{},Hn=ct?n.createElement(Ne,{revision:on,render:()=>null!==gt?n.createElement("div",{className:"uh-panel uh-pricing-panel uh-anim-panel"},n.createElement("div",{className:"uh-pricing-head"},n.createElement("div",{className:"uh-title-with-icon"},n.createElement(b,{name:"wallet",size:16}),n.createElement("strong",{},r("成本统计设置","Cost Statistics"))),n.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:r("关闭成本设置","Close cost settings"),"aria-label":r("关闭成本设置","Close cost settings"),disabled:xt||Nt||jt,onClick:yn},n.createElement(b,{name:"close",size:16}))),n.createElement("div",{className:"uh-pricing-note"},r("价格单位为 USD / 1M Token。输入上下文严格超过档位阈值时,整次请求的输入、输出和缓存均使用该档费率;可展开查看 models.dev 档位,也可在价格覆盖中自定义。","Prices are USD per 1M tokens. When input context strictly exceeds a band threshold, that band’s input, output, and cache rates apply to the whole request. Expand models.dev schedules or define custom override bands below.")),n.createElement("div",{className:"uh-pricing-toolbar"},n.createElement("label",{className:"uh-pricing-switch"},n.createElement("input",{type:"checkbox",checked:!0===gt.sync.autoEnabled,disabled:xt||Nt||jt,onChange:e=>(e=>{if(null===gt||jt||xt||Nt)return;const t=!0===e,a=gt.sync&&!0===gt.sync.autoEnabled;Mt(e=>null===e?e:Object.assign({},e,{sync:Object.assign({},e.sync,{autoEnabled:t})})),Te({pricingAutoSync:t});const n="string"==typeof L.requestToken?L.requestToken:"";if(""===n)return Mt(e=>null===e?e:Object.assign({},e,{sync:Object.assign({},e.sync,{autoEnabled:a})})),Te({pricingAutoSync:a}),void It("token");const r=e=>{Mt(e=>null===e?e:Object.assign({},e,{sync:Object.assign({},e.sync,{autoEnabled:a})})),Te({pricingAutoSync:a}),It(e)};Lt(!0),It(""),ve({sync:{autoEnabled:t}},!1,n).then(e=>{if(!e||!0!==e.ok||!e.pricing)return void r("save");const t=e.pricing.sync&&!0===e.pricing.sync.autoEnabled;I(t=>null===t?t:Object.assign({},t,{pricing:e.pricing})),mt(e.pricing),Mt(a=>null===a?a:Object.assign({},a,{sync:Object.assign({},a.sync,{autoEnabled:t,intervalMs:e.pricing.sync&&e.pricing.sync.intervalMs})})),Te({pricingAutoSync:t})},e=>r(e&&403===e.status?"forbidden":"save")).finally(()=>Lt(!1))})(e.target.checked)}),n.createElement("span",{},r("启用 6 小时自动同步","Enable 6-hour automatic sync"))),n.createElement("span",{className:"uh-note"},jt?r("保存中…","Saving…"):Bn.lastSuccessAt>0?r("上次成功:","Last success: ")+new Date(Bn.lastSuccessAt).toLocaleString():r("尚未同步","Not synced yet")),n.createElement("button",{type:"button",className:"uh-refresh",onClick:Nn,disabled:Nt||xt||jt},n.createElement(b,{name:"refresh",size:14}),Nt?r("同步中…","Syncing…"):r("立即同步","Sync now"))),Bn.lastError?n.createElement("div",{className:"uh-pricing-error",role:"alert"},r("上次同步失败:","Last sync failed: ")+Bn.lastError):null,n.createElement("div",{className:"uh-pricing-section"},n.createElement("div",{className:"uh-pricing-section-head"},n.createElement("strong",{},r("当前用量匹配","Usage matches")),n.createElement("span",{className:"uh-note"},nn.length+" "+r("个模型","models"))),0===nn.length?n.createElement("div",{className:"uh-empty",style:{padding:"12px 0"}},r("暂无模型用量","No model usage yet")):n.createElement("div",{className:"uh-pricing-table-wrap"},n.createElement("table",{className:"uh-pricing-model-table"},n.createElement("thead",{},n.createElement("tr",{},n.createElement("th",{scope:"col"},r("当前模型","Usage model")),n.createElement("th",{scope:"col"},r("状态","Status")),n.createElement("th",{scope:"col"},r("官方模型","Official model")),n.createElement("th",{scope:"col"},r("费率档位","Rate bands")),n.createElement("th",{scope:"col",title:r("基础输入价格(USD / 1M)","Base input price (USD / 1M)")},r("输入","Input")),n.createElement("th",{scope:"col",title:r("基础输出价格(USD / 1M)","Base output price (USD / 1M)")},r("输出","Output")),n.createElement("th",{scope:"col",title:r("基础缓存读取价格(USD / 1M)","Base cache read price (USD / 1M)")},r("缓存读","Cache read")),n.createElement("th",{scope:"col",title:r("基础缓存写入价格(USD / 1M)","Base cache write price (USD / 1M)")},r("缓存写","Cache write")))),n.createElement("tbody",{},nn.map(e=>{const t=Array.isArray(e.tiers)?e.tiers:[],i=!0===e.tiered&&!0!==e.tieredInvalid&&t.length>0&&e.rates,l=!0===e.tieredInvalid?r("档位异常","Invalid tiers"):!0===e.tiered?r("分层 · ","Tiered · ")+t.length:r("固定","Flat"),s="official"===e.temporalRoute||"mapped"===e.temporalRoute?("en"===a?"峰谷 · ":"Peak/off-peak · ")+"UTC":"other"===e.temporalRoute?"en"===a?"静态价 · 非官方直连":"static · reseller":"",o=i?[Object.assign({type:"context",size:0},e.rates)].concat(t):[];return n.createElement(n.Fragment,{key:e.identityKey},n.createElement("tr",{},n.createElement("td",{className:"uh-pricing-model-name",title:e.model},n.createElement("span",{className:"uh-model-label"},n.createElement(we,{row:e,size:16}),n.createElement("span",{className:"uh-model-text"},e.model||r("未知模型","Unknown model")))),n.createElement("td",{title:e.reason||""},n.createElement("span",{className:"uh-pricing-status uh-pricing-status-"+(e.status||"unpriced")},G(e.status||"unpriced",a))),n.createElement("td",{className:"uh-pricing-model-target",title:e.pricingModel||""},e.pricingModel||r("未匹配","No match")),n.createElement("td",{},n.createElement("span",{className:"uh-pricing-tier-badge"+(!0===e.tiered?"":" uh-flat"),title:e.temporalPolicyId||""},l+(""!==s?" · "+s:""))),n.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.input:"—"),n.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.output:"—"),n.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.cacheRead:"—"),n.createElement("td",{className:"uh-pricing-model-rate"},"priced"===e.status&&e.rates?e.rates.cacheWrite:"—")),i?n.createElement("tr",{className:"uh-pricing-tier-row"},n.createElement("td",{colSpan:8},n.createElement("details",{className:"uh-pricing-tier-details"},n.createElement("summary",{},n.createElement(b,{name:"chevron",size:13,className:"uh-pricing-tier-caret"}),r("查看完整费率表","View full rate table"),n.createElement("span",{className:"uh-pricing-tier-context"},function(e,t){const a={fresh:["Fresh:输入 + 缓存读写","Fresh: input + cache read/write"],total:["Total:输入已含缓存","Total: input already includes cache"],legacy:["Legacy:输入 + 缓存写","Legacy: input + cache write"]},n=a[e]||a.fresh;return"en"===t?n[1]:n[0]}(e.inputTokenSemantics,a)+(e.multiplier&&"1"!==e.multiplier?" · ×"+e.multiplier:""))),n.createElement("table",{className:"uh-pricing-tier-table"},n.createElement("thead",{},n.createElement("tr",{},n.createElement("th",{scope:"col"},r("输入上下文范围","Input context range")),n.createElement("th",{scope:"col"},r("输入","Input")),n.createElement("th",{scope:"col"},r("输出","Output")),n.createElement("th",{scope:"col"},r("缓存读","Cache read")),n.createElement("th",{scope:"col"},r("缓存写","Cache write")))),n.createElement("tbody",{},o.map((e,r)=>n.createElement("tr",{key:r},n.createElement("td",{},function(e,t,a){const n=Array.isArray(e)?e:[];if(t<0)return n.length>0?"≤ "+y(n[0].size,a):"en"===a?"All contexts":"全部上下文";const r=n[t];if(!r)return"";const i="> "+y(r.size,a),l=n[t+1];return l?i+("en"===a?" and ≤ ":" 且 ≤ ")+y(l.size,a):i}(t,r-1,a)),n.createElement("td",{},e.input),n.createElement("td",{},e.output),n.createElement("td",{},e.cacheRead),n.createElement("td",{},e.cacheWrite)))))))):null)}))))),n.createElement("div",{className:"uh-pricing-section"},n.createElement("div",{className:"uh-pricing-section-head"},n.createElement("strong",{},r("模型映射","Model mappings")),n.createElement("button",{type:"button",className:"uh-refresh",onClick:Ln},n.createElement(b,{name:"plus",size:13}),r("添加映射","Add mapping"))),0===gt.mappings.length?n.createElement("div",{className:"uh-empty",style:{padding:"12px 0"}},r("选择当前模型后,再指定对应的官方模型。DSH Provider 不参与计价。","Select a used model, then choose its official model. The DSH provider is ignored.")):gt.mappings.map((e,t)=>{const a=String(St[t]||"").trim().toLowerCase(),i=B(e.model),l=B(e.catalogModelId),s=rn.find(t=>t.value===String(e.identityKey||e.usageIdentityKey||""))||rn.find(e=>""!==i&&e.model===i)||rn.find(e=>""!==l&&e.officialModel===l),o=rn.filter(e=>""===a||e.label.toLowerCase().includes(a));return n.createElement("div",{key:t,className:"uh-pricing-edit-row"},n.createElement("div",{className:"uh-pricing-used-model-picker"},n.createElement("input",{type:"text",className:"uh-pricing-used-model-input",placeholder:r("选择当前用过的模型","Select a used model"),value:void 0!==St[t]?St[t]:s?s.label:"","aria-label":r("当前用过的模型","Used model"),"aria-haspopup":"listbox","aria-expanded":Tt===t,onFocus:()=>{kt(t),zt(e=>Object.assign({},e,{[t]:""}))},onClick:()=>kt(t),onBlur:()=>setTimeout(()=>{kt(e=>e===t?null:e),s&&zt(e=>Object.assign({},e,{[t]:s.label}))},120),onKeyDown:e=>{"Escape"===e.key&&kt(null)},onChange:e=>((e,t)=>{zt(a=>Object.assign({},a,{[e]:t})),kt(e),Mt(t=>{if(null===t||!Array.isArray(t.mappings)||!t.mappings[e])return t;const a=t.mappings.slice();return a[e]=Object.assign({},a[e],{identityKey:"",model:"",catalogModelId:"",catalogProviderId:""}),Object.assign({},t,{mappings:a})})})(t,e.target.value)}),Tt===t&&o.length>0?n.createElement("div",{className:"uh-language-options uh-pricing-used-model-options",role:"listbox","aria-label":r("当前用过的模型","Used models")},o.map(e=>n.createElement("button",{key:e.value,type:"button",role:"option",className:"uh-language-option uh-pricing-model-option",onMouseDown:e=>e.preventDefault(),onClick:()=>((e,t)=>{const a=nn.find(e=>String(e.identityKey||e.model||"")===String(t));if(!a)return;const n=a.actualModel||a.requestedModel||a.pricingModel||"",r="priced"===a.status&&a.pricingModel||"";Mt(i=>{if(null===i||!Array.isArray(i.mappings)||!i.mappings[e])return i;const l=i.mappings.slice();return l[e]=Object.assign({},l[e],{identityKey:t,model:n,catalogModelId:r,catalogProviderId:a.providerId||""}),Object.assign({},i,{mappings:l})}),zt(t=>Object.assign({},t,{[e]:a.model||n})),kt(null),At(null)})(t,e.value)},n.createElement(b,{name:"list",size:14}),n.createElement("span",{className:"uh-pricing-model-option-name"},e.label)))):null),n.createElement("div",{className:"uh-pricing-model-search"},n.createElement("input",{type:"text",className:"uh-pricing-model-search-input",placeholder:r("输入官方模型 ID 检索","Type official model ID to search"),value:e.catalogModelId||"","aria-label":r("官方模型 ID","Official model ID"),"aria-autocomplete":"list",onFocus:()=>At(t),onBlur:()=>setTimeout(()=>At(e=>e===t?null:e),120),onKeyDown:e=>{"Escape"===e.key&&At(null)},onChange:e=>((e,t)=>{const a=Wt.current;wn(e,"catalogModelId",t),At(e);const n=Rt.current[e];void 0!==n&&(clearTimeout(n),delete Rt.current[e]);const r=(Qt.current[e]||0)+1;if(Qt.current[e]=r,""===String(t||"").trim())return void vt(t=>Object.assign({},t,{[e]:[]}));const i=setTimeout(()=>{delete Rt.current[e],(e=>{const t=new URLSearchParams({q:String(e||"").slice(0,120),limit:"30"});return fetch("/api/all-usage/pricing/models?"+t.toString(),{headers:{accept:"application/json"}}).then(e=>{if(!e.ok)throw new Error("HTTP "+e.status);return e.json()})})(t).then(t=>{Wt.current===a&&Qt.current[e]===r&&vt(a=>Object.assign({},a,{[e]:Array.isArray(t&&t.items)?t.items:[]}))},()=>{Wt.current===a&&Qt.current[e]===r&&vt(t=>Object.assign({},t,{[e]:[]}))})},180);Rt.current[e]=i})(t,e.target.value)}),Et===t&&Array.isArray(Dt[t])&&Dt[t].length>0?n.createElement("div",{className:"uh-language-options uh-pricing-model-options",role:"listbox","aria-label":r("官方模型匹配结果","Official model matches")},Dt[t].map(e=>n.createElement("button",{key:e.value,type:"button",role:"option",className:"uh-language-option uh-pricing-model-option",onMouseDown:e=>e.preventDefault(),onClick:()=>((e,t)=>{if(!t||"string"!=typeof t.value)return;const a=Rt.current[e];void 0!==a&&(clearTimeout(a),delete Rt.current[e]),Qt.current[e]=(Qt.current[e]||0)+1,Mt(a=>{if(null===a||!Array.isArray(a.mappings)||!a.mappings[e])return a;const n=a.mappings.slice();return n[e]=Object.assign({},n[e],{catalogModelId:t.value,catalogProviderId:t.providerId||""}),Object.assign({},a,{mappings:n})}),At(null)})(t,e)},n.createElement(b,{name:"list",size:14}),n.createElement("span",{className:"uh-pricing-model-option-name"},e.label||e.value),n.createElement("span",{className:"uh-pricing-model-option-id"},e.value+(!0===e.tiered?" · "+r("分层 ","tiered ")+e.tierCount:""))))):null),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("倍率","Multiplier"),title:r("成本倍率","Cost multiplier"),"aria-label":r("成本倍率","Cost multiplier"),value:e.multiplier||"1",onChange:e=>wn(t,"multiplier",e.target.value)}),n.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:r("删除映射","Remove mapping"),"aria-label":r("删除映射","Remove mapping"),onClick:()=>(e=>{Wt.current+=1;const t=Rt.current;for(const e of Object.keys(t))clearTimeout(t[e]);Rt.current=jn(t,e),Qt.current=jn(Qt.current,e),vt(t=>jn(t,e)),zt(t=>jn(t,e)),Ot(t=>jn(t,e));const a=t=>null==t?t:t===e?null:Number.isInteger(t)&&t>e?t-1:t;At(e=>a(e)),kt(e=>a(e)),Ut(e=>a(e)),Mt(t=>null===t?t:Object.assign({},t,{mappings:t.mappings.filter((t,a)=>a!==e)}))})(t)},n.createElement(b,{name:"close",size:14})))})),n.createElement("div",{className:"uh-pricing-section"},n.createElement("div",{className:"uh-pricing-section-head"},n.createElement("strong",{},r("显式价格覆盖","Explicit price overrides")),n.createElement("button",{type:"button",className:"uh-refresh",onClick:Dn},n.createElement(b,{name:"plus",size:13}),r("添加价格","Add price"))),0===gt.overrides.length?n.createElement("div",{className:"uh-empty",style:{padding:"12px 0"}},r("仅在官方目录未覆盖或有明确官方账单时添加;可配置基础价格和上下文费率档位。","Add an override only when the official catalog lacks the model or you have an authoritative official price. Base rates and context tiers are supported.")):n.createElement(n.Fragment,null,n.createElement("div",{className:"uh-pricing-price-head"},n.createElement("span",{},r("官方模型 ID","Official model ID")),n.createElement("span",{},r("基础输入 / 1M","Base input / 1M")),n.createElement("span",{},r("基础输出 / 1M","Base output / 1M")),n.createElement("span",{},r("基础缓存读 / 1M","Base cache read / 1M")),n.createElement("span",{},r("基础缓存写 / 1M","Base cache write / 1M")),n.createElement("span",{},"")),n.createElement("div",{className:"uh-pricing-overrides"},gt.overrides.map((e,t)=>{const a=String(Ct[t]||"").trim().toLowerCase(),i=rn.filter(e=>""===a||e.label.toLowerCase().includes(a)),l=Array.isArray(e.tiers)?e.tiers:[];let s=0;const o=l.map((e,a)=>{const i=F(e,s),l=Number(e&&e.size);return Number.isSafeInteger(l)&&(s=l),n.createElement("div",{key:a,className:"uh-pricing-tier-edit-row"+(i?"":" uh-invalid")},n.createElement("input",{type:"number",min:"1",max:"1000000000",step:"1",placeholder:r("阈值 Token","Token threshold"),title:r("上下文超过此 Token 数时启用本档","Use this band when context exceeds this token count"),"aria-label":r("上下文阈值 Token","Context threshold tokens"),value:void 0===e.size?"":e.size,onChange:e=>In(t,a,"size",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("输入价 / 1M","Input / 1M"),"aria-label":r("档位输入价格 / 1M","Tier input price / 1M"),value:void 0===e.input?"":e.input,onChange:e=>In(t,a,"input",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("输出价 / 1M","Output / 1M"),"aria-label":r("档位输出价格 / 1M","Tier output price / 1M"),value:void 0===e.output?"":e.output,onChange:e=>In(t,a,"output",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("缓存读 / 1M","Cache read / 1M"),"aria-label":r("档位缓存读取价格 / 1M","Tier cache read price / 1M"),value:void 0===e.cacheRead?"":e.cacheRead,onChange:e=>In(t,a,"cacheRead",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("缓存写 / 1M","Cache write / 1M"),"aria-label":r("档位缓存写入价格 / 1M","Tier cache write price / 1M"),value:void 0===e.cacheWrite?"":e.cacheWrite,onChange:e=>In(t,a,"cacheWrite",e.target.value)}),n.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:r("删除费率档位","Remove rate band"),"aria-label":r("删除费率档位","Remove rate band"),onClick:()=>((e,t)=>{Mt(a=>{if(null===a||!Array.isArray(a.overrides)||!a.overrides[e])return a;const n=a.overrides.slice(),r=Object.assign({},n[e]),i=(Array.isArray(r.tiers)?r.tiers:[]).filter((e,a)=>a!==t).map(e=>Object.assign({},e));return n[e]=Object.assign({},r,{tiered:i.length>0,tiers:i}),Object.assign({},a,{overrides:n})}),It("")})(t,a)},n.createElement(b,{name:"close",size:14})))});return n.createElement("div",{key:t,className:"uh-pricing-override"},n.createElement("div",{className:"uh-pricing-edit-row uh-pricing-price-row"},n.createElement("div",{className:"uh-pricing-used-model-picker"},n.createElement("input",{type:"text",className:"uh-pricing-used-model-input",placeholder:r("选择当前用过的模型","Select a used model"),value:void 0!==Ct[t]?Ct[t]:e.modelId||"","aria-label":r("覆盖模型 ID","Override model ID"),"aria-haspopup":"listbox","aria-expanded":Yt===t,onFocus:()=>{Ut(t),Ot(e=>Object.assign({},e,{[t]:""}))},onClick:()=>Ut(t),onBlur:()=>setTimeout(()=>{Ut(e=>e===t?null:e),e.modelId&&Ot(a=>Object.assign({},a,{[t]:e.modelId}))},120),onKeyDown:e=>{"Escape"===e.key&&Ut(null)},onChange:e=>((e,t)=>{Ot(a=>Object.assign({},a,{[e]:t})),Ut(e),fn(e,"modelId",t)})(t,e.target.value)}),Yt===t&&i.length>0?n.createElement("div",{className:"uh-language-options uh-pricing-used-model-options",role:"listbox","aria-label":r("当前用过的模型","Used models")},i.map(e=>n.createElement("button",{key:e.value,type:"button",role:"option",className:"uh-language-option uh-pricing-model-option",onMouseDown:e=>e.preventDefault(),onClick:()=>((e,t)=>{const a=nn.find(e=>String(e.identityKey||e.model||"")===String(t));if(!a)return;const n=a.pricingModel||a.actualModel||a.requestedModel||"";Mt(t=>{if(null===t||!Array.isArray(t.overrides)||!t.overrides[e])return t;const r=t.overrides.slice(),i={modelId:n};return"priced"===a.status&&a.rates&&(Object.assign(i,a.rates),i.tiers=Array.isArray(a.tiers)?a.tiers.map(e=>Object.assign({},e)):[],i.tiered=i.tiers.length>0),r[e]=Object.assign({},r[e],i),Object.assign({},t,{overrides:r})}),Ot(t=>Object.assign({},t,{[e]:n})),Ut(null)})(t,e.value)},n.createElement(b,{name:"list",size:14}),n.createElement("span",{className:"uh-pricing-model-option-name"},e.label)))):null),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("输入价 / 1M","Input / 1M"),title:r("基础输入价格,美元 / 100 万 Token","Base input price, USD / 1M tokens"),"aria-label":r("基础输入价格 / 1M","Base input price / 1M"),value:void 0===e.input?"":e.input,onChange:e=>fn(t,"input",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("输出价 / 1M","Output / 1M"),title:r("基础输出价格,美元 / 100 万 Token","Base output price, USD / 1M tokens"),"aria-label":r("基础输出价格 / 1M","Base output price / 1M"),value:void 0===e.output?"":e.output,onChange:e=>fn(t,"output",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("缓存读 / 1M","Cache read / 1M"),title:r("基础缓存读取价格,美元 / 100 万 Token","Base cache read price, USD / 1M tokens"),"aria-label":r("基础缓存读取价格 / 1M","Base cache read price / 1M"),value:void 0===e.cacheRead?"":e.cacheRead,onChange:e=>fn(t,"cacheRead",e.target.value)}),n.createElement("input",{type:"number",min:"0",step:"any",placeholder:r("缓存写 / 1M","Cache write / 1M"),title:r("基础缓存写入价格,美元 / 100 万 Token","Base cache write price, USD / 1M tokens"),"aria-label":r("基础缓存写入价格 / 1M","Base cache write price / 1M"),value:void 0===e.cacheWrite?"":e.cacheWrite,onChange:e=>fn(t,"cacheWrite",e.target.value)}),n.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:r("删除价格覆盖","Remove price override"),"aria-label":r("删除价格覆盖","Remove price override"),onClick:()=>(e=>{Mt(t=>null===t?t:Object.assign({},t,{overrides:t.overrides.filter((t,a)=>a!==e)}))})(t)},n.createElement(b,{name:"close",size:14}))),n.createElement("div",{className:"uh-pricing-tier-editor"},n.createElement("div",{className:"uh-pricing-tier-editor-head"},n.createElement("div",{className:"uh-pricing-tier-editor-title"},n.createElement("strong",{},r("上下文费率档位","Context rate bands")),n.createElement("span",{},r("超过阈值后,整次请求使用该档四项费率","Above a threshold, all four rates apply to the whole request"))),n.createElement("button",{type:"button",className:"uh-refresh",disabled:l.length>=32,title:l.length>=32?r("每个模型最多 32 个档位","Maximum 32 bands per model"):r("添加上下文费率档位","Add context rate band"),onClick:()=>(e=>{Mt(t=>{if(null===t||!Array.isArray(t.overrides)||!t.overrides[e])return t;const a=t.overrides.slice(),n=Object.assign({},a[e]),r=Array.isArray(n.tiers)?n.tiers.map(e=>Object.assign({},e)):[];if(r.length>=32)return t;const i=r.length>0?r[r.length-1]:null,l=i&&Number.isFinite(Number(i.size))?Number(i.size):1e5,s=i||n;return r.push({type:"context",size:Math.min(1e9,l+1e5),input:void 0===s.input?"":s.input,output:void 0===s.output?"":s.output,cacheRead:void 0===s.cacheRead?"":s.cacheRead,cacheWrite:void 0===s.cacheWrite?"":s.cacheWrite}),a[e]=Object.assign({},n,{tiered:!0,tiers:r}),Object.assign({},t,{overrides:a})}),It("")})(t)},n.createElement(b,{name:"plus",size:13}),r("添加档位","Add band"))),0===l.length?n.createElement("div",{className:"uh-pricing-tier-empty"},r("未配置档位,所有上下文使用基础费率。","No bands configured; base rates apply to every context.")):n.createElement(n.Fragment,null,n.createElement("div",{className:"uh-pricing-tier-edit-head"},n.createElement("span",{},r("超过 Token","Above tokens")),n.createElement("span",{},r("输入 / 1M","Input / 1M")),n.createElement("span",{},r("输出 / 1M","Output / 1M")),n.createElement("span",{},r("缓存读 / 1M","Cache read / 1M")),n.createElement("span",{},r("缓存写 / 1M","Cache write / 1M")),n.createElement("span",{},"")),o)))})))),""!==ft?n.createElement("div",{className:"uh-pricing-error",role:"alert"},"forbidden"===ft?r("没有权限保存成本设置","Not allowed to save cost settings"):"token"===ft?r("当前进程令牌不可用,请刷新看板","The process capability is unavailable; refresh the dashboard"):"sync"===ft?r("models.dev 同步失败,已保留上次成功目录和未保存编辑","models.dev sync failed; the last good catalog and unsaved edits were kept"):"mapping"===ft?r("模型映射无效:请选择当前模型、官方模型并填写有效倍率","Invalid model mapping: select a used model, an official model, and a valid multiplier"):"tier"===ft?r("费率档位无效:最多 32 档;阈值必须为递增的正整数,四项费率必须完整且非负","Invalid rate bands: maximum 32; thresholds must be increasing positive integers and all four rates must be complete and non-negative"):"override"===ft?r("价格覆盖无效:请选择模型并填写完整的非负基础费率","Invalid price override: select a model and enter all non-negative base rates"):r("成本设置保存失败,请检查输入","Cost settings could not be saved; check the inputs")):null,n.createElement("div",{className:"uh-pricing-foot"},n.createElement("span",{className:"uh-note"},r("保存不会重算已有正成本;回填只处理未计价调用。","Saving does not recalculate existing positive costs; backfill only handles unpriced calls.")),n.createElement("div",{className:"uh-actions"},n.createElement("button",{type:"button",className:"uh-refresh",disabled:xt||Nt||jt,onClick:yn},r("取消","Cancel")),n.createElement("button",{type:"button",className:"uh-refresh",disabled:xt||Nt||jt,onClick:()=>bn(!1)},xt?r("保存中…","Saving…"):r("保存","Save")),n.createElement("button",{type:"button",className:"uh-refresh uh-pricing-backfill",disabled:xt||Nt||jt,onClick:()=>bn(!0)},r("保存并回填","Save and backfill"))))):n.createElement("div",{className:"uh-panel uh-pricing-panel uh-anim-panel"},n.createElement("div",{className:"uh-pricing-head"},n.createElement("div",{className:"uh-title-with-icon"},n.createElement(b,{name:"wallet",size:16}),n.createElement("strong",{},r("成本统计设置","Cost Statistics"))),n.createElement("button",{type:"button",className:"uh-refresh uh-icon-button",title:r("关闭成本设置","Close cost settings"),"aria-label":r("关闭成本设置","Close cost settings"),disabled:xt||Nt||jt,onClick:yn},n.createElement(b,{name:"close",size:16}))),ht?n.createElement("div",{className:"uh-empty",role:"status",style:{display:"flex",alignItems:"center",justifyContent:"center",gap:10}},n.createElement("span",{className:"uh-trend-spinner","aria-hidden":!0}),n.createElement("span",{},r("正在加载完整费率设置…","Loading full pricing settings…"))):n.createElement("div",{className:"uh-empty",role:"alert"},n.createElement("div",{},r("完整费率设置加载失败","Full pricing settings could not be loaded")),n.createElement("button",{type:"button",className:"uh-refresh",style:{marginTop:10},onClick:xn},n.createElement(b,{name:"refresh",size:14}),r("重试","Retry"))))}):null,Jn="custom"===X&&null!==fa?"en"===a?fa.start+" to "+fa.end+" (UTC)":fa.start+" 至 "+fa.end:"today"===X?r("今日","Today"):"30d"===X?r("近 30 天","Last 30 Days"):"90d"===X?r("近 90 天","Last 90 Days"):r("全部","All Time"),Xn=function(e,t,a){if("custom"!==e)return e;const n=o(t,a);return null===n?"custom":"custom-"+n.start+"-to-"+n.end}(X,fa,p),Vn="invalid"===Ia?r("请选择有效的开始日期和结束日期","Choose valid start and end dates"):"order"===Ia?r("结束日期不能早于开始日期","End date must be on or after the start date"):"bounds"===Ia?r("可选范围为 "+La+" 至 "+j,"Choose a date from "+La+" to "+j):"",Kn=le?n.createElement("div",{className:"uh-custom-range",role:"group","aria-label":r("自定义时间范围","Custom date range")},n.createElement("div",{className:"uh-custom-range-meta"},n.createElement("div",{className:"uh-custom-range-title"},n.createElement(b,{name:"calendar",size:15}),r("自定义时间范围","Custom date range")),n.createElement("div",{className:"uh-custom-range-note"},r("可查看全部可扫描历史日数据;中文按本地日期,English 按 UTC。热力图始终展示最近 53 周。","All available historical daily data can be selected. Chinese uses local dates; English uses UTC. The heatmap always shows the latest 53 weeks."))),n.createElement("div",{className:"uh-custom-range-fields"},n.createElement("label",{className:"uh-custom-range-field"},n.createElement("span",{},r("开始日期","Start date")),n.createElement("input",{type:"date",value:ae.start,min:La,max:j,onChange:e=>ne(t=>Object.assign({},t,{start:e.target.value}))})),n.createElement("label",{className:"uh-custom-range-field"},n.createElement("span",{},r("结束日期","End date")),n.createElement("input",{type:"date",value:ae.end,min:La,max:j,onChange:e=>ne(t=>Object.assign({},t,{end:e.target.value}))}))),n.createElement("div",{className:"uh-custom-range-actions"},n.createElement("button",{type:"button",className:"uh-custom-range-cancel",onClick:()=>se(!1)},r("取消","Cancel")),n.createElement("button",{type:"button",className:"uh-custom-range-apply",disabled:""!==Ia,onClick:()=>{if(""!==Ia)return;const e=o(ae,p);null!==e&&(te(e),V("custom"),se(!1))}},r("应用","Apply"))),""!==Vn?n.createElement("div",{className:"uh-custom-range-error",role:"alert"},Vn):null):null,qn=n.createElement(he,{key:sn,rows:ln,visible:Qe,language:a,rangeLabel:Jn,loading:Ce&&!va,error:""===Ye||"stale"===Ye||Ea?"":r("趋势数据加载失败","Trend data unavailable"),onToggle:dn,onPointClick:Ma}),$n=null===da?Jn:da.start===da.end?da.start:da.start+" → "+da.end,_n=n.createElement(je,{visible:"logs"===Re,panelRef:Jt,scopeLabel:$n,scopeUtc:!(!da||!da.utc),scopeAvailable:null!==da,loading:et,exporting:at,error:rt,rows:He,selectedId:Fe,hasMore:Ke,language:a,actionKey:pa+":"+(ca||"")+":"+(Xe||""),onExport:async()=>{if("logs"!==Re||null===da||at)return;const e=ca;nt(!0),it("");try{let t=null;const a=[];for(let n=0;n<50;n+=1){const n=await Ie(da,t,200);if(null===n||"object"!=typeof n||!Array.isArray(n.items)||null===e||g(n)!==e)throw new Error("audit export stale");if(a.push(...n.items),!n.hasMore||!n.nextCursor)break;t=n.nextCursor}const n=e=>'"'+String(e??"").replace(/"/g,'""')+'"',i=e=>e.map(n).join(","),l=[r("时间","Time"),r("日期","Date"),r("Provider","Provider"),r("请求模型","Requested model"),r("实际模型","Actual model"),r("显示模型","Display model"),"turn","step","seq",r("输入","Input"),r("缓存命中","Cache read"),r("缓存写入","Cache write"),r("输出","Output"),r("推理","Reasoning"),r("成本","Cost"),r("计价状态","Cost status"),r("计价模型","Pricing model"),r("计费档位","Billing band"),r("计费时刻(UTC)","Billing time (UTC)"),r("计费时间来源","Billing time source"),r("计费策略","Billing policy"),r("策略哈希","Policy hash"),r("来源","Source")],s=[i([r("DSH 用量明细导出","DSH Usage Audit Export")]),i([r("范围","Scope"),da.start+" → "+da.end]),i([r("时区","Timezone"),da.utc?"UTC":r("本地","Local")]),i(l)];for(const e of a)s.push(i([e.time,e.date,e.provider,e.requestedModel,e.actualModel,e.model,e.turn,e.step,e.seq,be(e,"input"),be(e,"cacheRead"),be(e,"cacheWrite"),be(e,"output"),be(e,"reasoning"),e.cost&&"priced"===e.cost.status?e.cost.total:"",e.cost&&e.cost.status?e.cost.status:"unpriced",e.cost&&e.cost.pricingModel?e.cost.pricingModel:"",e.cost&&e.cost.pricingBand?e.cost.pricingBand:"",e.cost&&Number.isFinite(e.cost.pricingAt)?new Date(e.cost.pricingAt).toISOString():"",e.cost&&e.cost.pricingTimeSource?e.cost.pricingTimeSource:"",e.cost&&e.cost.pricingPolicyId?e.cost.pricingPolicyId:"",e.cost&&e.cost.pricingPolicyHash?e.cost.pricingPolicyHash:"",e.materialization||"unknown"]));const o=new Blob(["\ufeff"+s.join("\r\n")],{type:"text/csv;charset=utf-8"}),u=URL.createObjectURL(o),c=document.createElement("a");c.href=u,c.download="dsh-all-usage-audit-"+da.start+"-to-"+da.end+".csv",document.body.appendChild(c),c.click(),c.remove(),URL.revokeObjectURL(u)}catch(e){it("audit-export")}finally{nt(!1)}},onLoadMore:()=>{if("logs"!==Re||null===da||null===Xe||et)return;const e=ra.next(),t=ca;tt(!0),Ie(da,Xe,20).then(a=>{if(ra.isCurrent(e)){if(null===a||"object"!=typeof a||!Array.isArray(a.items)||null===t||g(a)!==t)return it("stale"),tt(!1),void _e(e=>e+1);Je(e=>e.concat(a.items)),Ve(a.nextCursor||null),qe(!0===a.hasMore),tt(!1),it("")}},t=>{if(ra.isCurrent(e)){if(t&&409===t.status)return tt(!1),Ve(null),qe(!1),it("stale"),void _e(e=>e+1);tt(!1),it("audit")}})},onSelect:Be}),er=!mn.done,tr=mn.total>0?Math.min(100,Math.round(mn.scanned/mn.total*100)):40,ar=mn.done&&0===Mn.length&&0===ka.totals.turns&&0===ka.totals.calls,nr="number"==typeof gn.lastCompletedAt&&gn.lastCompletedAt>0?new Date(gn.lastCompletedAt).toLocaleString("en"===a?"en-US":"zh-CN"):"",rr=C>0?new Date(C).toLocaleString("en"===a?"en-US":"zh-CN"):"",ir=""===nr?void 0:"en"===a?"Historical scan completed "+nr:"历史扫描完成于 "+nr,lr="en"===a?(""!==rr?"Updated "+rr:er?"Refreshing data":"Update state pending")+" · "+(gn.sessionsSkippedByRevision||0)+" revision reused · "+(gn.sessionsRead||0)+" read"+((gn.sessionsRestoredFromLedger||0)>0?" · "+gn.sessionsRestoredFromLedger+" ledger restored":"")+((gn.sessionsFailed||0)>0?" · "+gn.sessionsFailed+" failed":"")+" · "+(!0===gn.persistenceSnapshotsAvailable?"revision optimization on":"full-read fallback"):(""!==rr?"已更新 "+rr:er?"正在更新数据":"数据更新准备中")+" · revision 复用 "+(gn.sessionsSkippedByRevision||0)+" · 实际读取 "+(gn.sessionsRead||0)+((gn.sessionsRestoredFromLedger||0)>0?" · 账本恢复 "+gn.sessionsRestoredFromLedger:"")+((gn.sessionsFailed||0)>0?" · 失败 "+gn.sessionsFailed:"")+" · "+(!0===gn.persistenceSnapshotsAvailable?"免读优化已启用":"全量读取回退"),sr=""===T?"":"en"===a?"Usage data may be stale"+(""!==rr?"; last full update "+rr:""):"用量数据可能已过期"+(""!==rr?";上次完整更新 "+rr:"");return n.createElement("div",{className:"uh-page"},n.createElement("div",{className:"uh-head"},n.createElement("div",{className:"uh-title-wrap"},n.createElement("h2",{className:"uh-title"},r("用量统计","Usage Statistics"))),n.createElement("div",{className:"uh-actions"},n.createElement("button",{className:"uh-refresh",title:r("管理工作区别名","Manage workspace aliases"),onClick:()=>{lt?st(!1):(()=>{const e={};Ga.forEach(t=>{e[t.id]="string"==typeof Za[t.id]?Za[t.id]:""}),ut(e),st(!0)})()}},n.createElement(b,{name:"edit",size:14}),r("工作区别名","Workspace Aliases")),n.createElement("button",{className:"uh-refresh",title:r("配置模型价格与同步","Configure model prices and sync"),disabled:xt||Nt||jt,onClick:()=>{ct?yn():xn()}},n.createElement(b,{name:"wallet",size:14}),r("成本设置","Cost Settings")),n.createElement("div",{className:"uh-language-menu"+(Ft?" uh-open":""),ref:Ht,onKeyDown:e=>{"Escape"===e.key&&(e.preventDefault(),Bt(!1))}},n.createElement("button",{type:"button",className:"uh-language-trigger"+(Ft?" uh-open":""),title:r("切换界面语言","Change interface language"),"aria-label":r("界面语言","Interface language"),"aria-haspopup":"menu","aria-expanded":Ft,onClick:()=>Bt(e=>!e)},n.createElement(b,{name:"language",size:14}),n.createElement("span",{className:"uh-language-label"},"en"===a?"English":"中文"),n.createElement(b,{name:"chevron",size:13,className:"uh-language-caret"})),Ft?n.createElement("div",{className:"uh-language-options",role:"menu","aria-label":r("界面语言","Interface language")},[["zh","中文"],["en","English"]].map(t=>n.createElement("button",{key:t[0],type:"button",role:"menuitemradio","aria-checked":a===t[0],className:"uh-language-option"+(a===t[0]?" uh-on":""),onClick:()=>((t=>{"function"==typeof e.onLanguageChange&&e.onLanguageChange("en"===t?"en":"zh")})(t[0]),void Bt(!1))},n.createElement(b,{name:"language",size:14}),n.createElement("span",{},t[1]),a===t[0]?n.createElement(b,{name:"check",size:14,className:"uh-language-option-check"}):null))):null),n.createElement("div",{className:"uh-range"},["today","30d","90d","all","custom"].map(e=>n.createElement("button",{key:e,type:"button",className:X===e?"uh-on":"",title:"custom"===e&&"custom"===X?Jn:void 0,onClick:()=>{"custom"===e?(()=>{const e=o(K,p),t=i(l(w,-89,p),p);ne(e||{start:t<La?La:t,end:j}),se(!0)})():(V(e),se(!1))}},"today"===e?r("今日","Today"):"30d"===e?r("近 30 天","Last 30 Days"):"90d"===e?r("近 90 天","Last 90 Days"):"all"===e?r("全部","All Time"):r("自定义","Custom")))),n.createElement("button",{className:"uh-refresh",title:r("导出当前时间范围与模型查看模式的 CSV 数据","Export CSV data for the current time range and model view"),onClick:()=>{const e=e=>'"'+String(e??"").replace(/"/g,'""')+'"',t=t=>t.map(e).join(","),n=e=>e.input+e.output+e.cacheRead+e.cacheWrite+e.reasoning,l=[r("输入 Token","Input Tokens"),r("缓存命中 Token","Cache-Hit Tokens"),r("缓存写入 Token","Cache-Write Tokens"),r("输出 Token","Output Tokens"),r("推理 Token","Reasoning Tokens"),r("总处理 Token","Total Tokens Processed"),r("成本","Cost"),r("缓存命中率","Cache Hit Rate")],s=[t([r("DSH 用量统计导出","DSH Usage Statistics Export")]),t([r("导出时间","Exported At"),p?(new Date).toLocaleString("en-US",{timeZone:"UTC",timeZoneName:"short"}):(new Date).toLocaleString("zh-CN")]),t([r("时间范围","Time Range"),Jn]),t([r("时区","Timezone"),p?"UTC":r("本地","Local")]),t([r("工作区筛选","Workspace Filter"),de||r("全部","All")]),t([r("供应商筛选","Provider Filter"),me||r("全部","All")]),t([r("模型筛选","Model Filter"),ye||r("全部","All")]),t([r("统计 revision","Stats Revision"),L.revision||""]),t([r("模型查看模式","Model View Mode"),Wn]),"",t([r("汇总","Summary")]),t([r("回合","Turns"),r("会话","Sessions"),...l]),t([ka.totals.turns,ka.totals.sessions,ka.totals.input,ka.totals.cacheRead,ka.totals.cacheWrite,ka.totals.output,ka.totals.reasoning,n(ka.totals),Q(ka.totals,a),x(ka.totals.input,ka.totals.cacheRead).toFixed(2)+"%"]),"",t([r("模型用量明细","Model Usage Details")]),t([Rn,r("调用","Calls"),...l]),...Pa.map(e=>t([e.model,e.calls,e.input,e.cacheRead,e.cacheWrite,e.output,e.reasoning,n(e),Q(e,a),x(e.input,e.cacheRead).toFixed(2)+"%"])),"",t([r("工作区明细","Workspace Details")]),t([r("工作区","Workspace"),r("路径","Path"),r("回合","Turns"),...l]),...Ra.map(e=>{const r=Ka.get(e.workspaceId);return t([$a(e.workspaceId),r?r.path:"",e.turns,e.input,e.cacheRead,e.cacheWrite,e.output,e.reasoning,n(e),Q(e,a),x(e.input,e.cacheRead).toFixed(2)+"%"])})],o=new Blob(["\ufeff"+s.join("\r\n")],{type:"text/csv;charset=utf-8"}),u=URL.createObjectURL(o),c=document.createElement("a");c.href=u,c.download="dsh-all-usage-"+Xn+"-"+ue+"-"+i(new Date,p)+".csv",document.body.appendChild(c),c.click(),c.remove(),URL.revokeObjectURL(u)}},n.createElement(b,{name:"export",size:14}),r("导出数据","Export Data")),n.createElement("button",{className:"uh-refresh uh-icon-button",title:r("刷新统计数据","Refresh usage statistics"),"aria-label":r("刷新统计数据","Refresh usage statistics"),onClick:ya},n.createElement(b,{name:"refresh",size:16})))),n.createElement("div",{className:"uh-filter-bar",role:"group","aria-label":r("统一筛选","Unified filters")},n.createElement(Le,{label:r("全部工作区","All workspaces"),ariaLabel:r("工作区筛选","Workspace filter"),className:"uh-filter-workspace",icon:"folder",value:de||"",options:[{value:"",label:r("全部工作区","All workspaces")}].concat(Ja.map(e=>({value:e.id,label:$a(e.id)}))),onChange:e=>pe(e||null)}),n.createElement(Le,{label:r("全部供应商","All providers"),ariaLabel:r("供应商筛选","Provider filter"),className:"uh-filter-provider",icon:"chart",value:me||"",options:[{value:"",label:r("全部供应商","All providers")}].concat(Ba.map(e=>({value:e,label:e}))),onChange:e=>Na(e)}),n.createElement(Le,{label:r("全部模型","All models"),ariaLabel:r("模型筛选","Model filter"),className:"uh-filter-model",icon:"cache",value:ye||"",options:[{value:"",label:r("全部模型","All models")}].concat(Ha.map(e=>{const t=v({actualModel:e,requestedModel:e});return{value:e,label:e,iconKey:null===t?null:t.key}})),onChange:e=>wa(e)}),null!==de||null!==me||null!==ye?n.createElement("button",{type:"button",className:"uh-filter-clear",onClick:ba},r("清除筛选","Clear filters")):null,Ce?n.createElement("span",{className:"uh-query-note"},r("正在更新筛选结果…","Updating filtered data…")):null,""!==Ye&&"stale"!==Ye?n.createElement("span",{className:"uh-query-note",role:"alert"},r("筛选结果加载失败","Filtered data unavailable")):null),lt?Fn:null,Hn,Kn,er?n.createElement("div",{className:"uh-progress"},n.createElement("span",{},"en"===a?"Scanning historical sessions: "+mn.scanned+" / "+mn.total+(mn.failed>0?" ("+mn.failed+" failed to read)":""):"正在统计历史会话 "+mn.scanned+" / "+mn.total+(mn.failed>0?"("+mn.failed+" 个读取失败)":"")),n.createElement("div",{className:"uh-bar"},n.createElement("div",{className:"uh-fill",style:{width:tr+"%"}}))):null,n.createElement("div",{className:"uh-sync-health"+(""!==sr?" uh-stale":""),title:""!==sr?void 0:ir},n.createElement(b,{name:""!==sr?"refresh":"clock",size:14}),n.createElement("span",{},""!==sr?sr:lr),""!==sr?n.createElement("button",{className:"uh-sync-retry",onClick:ya},r("重试","Retry")):null),ar?n.createElement("div",{className:"uh-panel"},n.createElement("div",{className:"uh-empty"},r("还没有使用记录。开始对话后,这里会点亮。","No usage recorded yet. This area will light up after you start a conversation."))):n.createElement(n.Fragment,null,n.createElement(n.Fragment,null,n.createElement("div",{className:"uh-ios-summary"},n.createElement("div",{className:"uh-ios-summary-hero"},n.createElement("div",{className:"uh-ios-summary-total"},n.createElement("div",{className:"uh-ios-summary-total-icon"},n.createElement(b,{name:"chart",size:24})),n.createElement("div",{className:"uh-ios-summary-total-copy"},n.createElement("div",{className:"uh-ios-summary-label"},r("总处理 Token","Total Tokens Processed")),n.createElement("div",{className:"uh-ios-summary-value"},S(h(Ca),vn,a)),n.createElement("div",{className:"uh-ios-summary-caption"},"en"===a?Jn+" · "+h(Ua)+(Oa?" calls":" uses")+" · includes cache reads/writes and reasoning":Jn+" · "+h(Ua)+(Oa?" 次调用":" 次使用")+" · 含缓存读写与推理"))),n.createElement("div",{className:"uh-ios-summary-meta"},n.createElement("div",{className:"uh-ios-summary-meta-stat"},n.createElement("div",{className:"uh-ios-summary-meta-label"},n.createElement(b,{name:"chart",size:16}),r("总请求数","Total Requests")),n.createElement("div",{className:"uh-ios-summary-meta-value"},y(Qa,a))),n.createElement("div",{className:"uh-ios-summary-meta-stat uh-ios-summary-meta-cost"},n.createElement("div",{className:"uh-ios-summary-meta-label"},n.createElement(b,{name:"wallet",size:16}),r("估算成本","Estimated Cost")),n.createElement("div",{className:"uh-ios-summary-meta-value"},An),n.createElement("div",{className:"uh-ios-summary-meta-caption"},Sn)))),n.createElement("div",{className:"uh-ios-metrics"},kn(r("DeepSeek 账户余额","DeepSeek Account Balance"),zn,Tn,0,"wallet","deepseek"),kn(Oa?r("匹配调用次数","Matching Calls"):r("总使用次数","Total Uses"),h(Ua),"all"!==X||Oa?"en"===a?(Oa?"Calls in ":"Turns in ")+Jn:Jn+(Oa?"内的调用数":"内的回合数"):"en"===a?ka.totals.sessions+" sessions":ka.totals.sessions+" 个会话",1,"chart"),kn(r("连续使用","Current Streak"),"en"===a?en.streak+" days":en.streak+" 天","en"===a?"Longest streak: "+en.best+" days":"最长连续 "+en.best+" 天",2,"clock"),Un,Cn)),n.createElement("div",{className:"uh-token-semantics"},n.createElement(b,{name:"cache",size:16}),r("总处理 Token = 输入 + 输出 + 缓存读写 + 推理。缓存命中代表复用上下文,不等于新生成 Token 或实际费用。成本按事件发生时刻与官方价目估算,不等同于供应商账单。","Total tokens processed = input + output + cache reads/writes + reasoning. Cache hits represent reused context; they are not newly generated tokens or actual cost. Costs are estimated at event time from official price lists and do not equal the provider invoice.")),qn,n.createElement(xe,{rows:Sa,workspaces:Ga,aliases:Za,workspaceId:de,queryUsable:Ea,todayKey:j,utc:p,language:a,onWorkspaceSelect:xa,onDateClick:Ma}),n.createElement("div",{className:"uh-detail-tabs",role:"tablist","aria-label":r("用量明细视图","Usage detail views")},[["logs",r("请求日志","Request Logs"),"list"],["model",r("模型统计","Model Stats"),"chart"],["workspace",r("工作区统计","Workspace Stats"),"folder"]].map(e=>n.createElement("button",{key:e[0],type:"button",role:"tab","aria-selected":Re===e[0],className:"uh-detail-tab"+(Re===e[0]?" uh-on":""),onClick:()=>Pe(e[0])},n.createElement(b,{name:e[2],size:14}),e[1]))),_n),"model"===Re?n.createElement("div",{className:"uh-panel uh-ios-list-panel"},n.createElement("div",{className:"uh-hm-head"},n.createElement("h3",{className:"uh-tbl-title uh-title-with-icon",style:{margin:0}},n.createElement(b,{name:"chart",size:16}),"en"===a?"Model Usage Details ("+Jn+")":"模型用量明细("+Jn+")"),n.createElement("div",{className:"uh-range"},[["route",r("混合查看","Combined View")],["model",r("按模型","By Model")],["provider",r("按供应商","By Provider")]].map(e=>n.createElement("button",{key:e[0],className:ue===e[0]?"uh-on":"",onClick:()=>ce(e[0])},e[1])))),0===Pa.length?n.createElement("div",{className:"uh-empty"},r("尚无带模型路由信息的用量记录","No usage records with model-routing information yet")):n.createElement(n.Fragment,null,Pn,n.createElement("div",{className:"uh-tbl-scroll"},n.createElement("div",{className:"uh-model-hrow uh-hrow"},n.createElement("div",{},Rn),n.createElement("div",{className:"uh-num"},r("调用","Calls")),n.createElement("div",{className:"uh-num"},r("输入","Input")),n.createElement("div",{className:"uh-num"},r("缓存命中","Cache Hits")),n.createElement("div",{className:"uh-num"},r("输出","Output")),n.createElement("div",{className:"uh-num"},r("推理","Reasoning")),n.createElement("div",{className:"uh-num"},r("总处理","Total Processed")),n.createElement("div",{className:"uh-num"},r("成本","Cost")),n.createElement("div",{className:"uh-num"},r("命中率","Hit Rate"))),Zn)),n.createElement("div",{className:"uh-note",style:{marginTop:10}},"en"===a?Wn+": Combined View distinguishes “Provider / Model”; By Model merges identically named models across providers; By Provider aggregates all of a provider’s models. Historical records without routing information are grouped as “Unknown.”":Wn+":混合查看按“供应商 / 模型”区分;按模型会跨供应商合并同名模型;按供应商则汇总其全部模型。缺少路由信息的历史记录会归为“未知”。")):null,"workspace"===Re?n.createElement("div",{className:"uh-panel uh-ios-list-panel"},n.createElement("h3",{className:"uh-tbl-title uh-title-with-icon"},n.createElement(b,{name:"folder",size:16}),"en"===a?"Workspace Details ("+Jn+")":"工作区明细("+Jn+")"),0===Ra.length?n.createElement("div",{className:"uh-empty"},r("该时间范围内没有使用记录","No usage records in this time range")):n.createElement(n.Fragment,null,Gn,n.createElement("div",{className:"uh-tbl-scroll"},n.createElement("div",{className:"uh-hrow"},n.createElement("div",{},r("工作区","Workspace")),n.createElement("div",{className:"uh-num"},r("回合","Turns")),n.createElement("div",{className:"uh-num"},r("输入","Input")),n.createElement("div",{className:"uh-num"},r("缓存命中","Cache Hits")),n.createElement("div",{className:"uh-num"},r("输出","Output")),n.createElement("div",{className:"uh-num"},r("推理","Reasoning")),n.createElement("div",{className:"uh-num"},r("总处理","Total Processed")),n.createElement("div",{className:"uh-num"},r("成本","Cost")),n.createElement("div",{className:"uh-num"},r("命中率","Hit Rate")),n.createElement("div",{className:"uh-num"},r("占比","Share"))),Qn))):null))}class Ce extends n.Component{constructor(e){super(e),this.state={error:null,resetKey:e.resetKey}}static getDerivedStateFromError(e){return{error:e}}componentDidUpdate(e){e.resetKey!==this.props.resetKey&&null!==this.state.error&&this.setState({error:null,resetKey:this.props.resetKey})}render(){return null!==this.state.error?this.props.fallback(this.state.error):this.props.children}}function Oe(e){const[t,a]=n.useState(!1),[r,i]=n.useState(0),[l,s]=n.useState(Ae),o=(e,t)=>"en"===l?t:e;return n.useEffect(()=>{if(!t)return;const e=e=>{"Escape"===e.key&&a(!1)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t]),n.createElement(n.Fragment,null,n.createElement("button",{type:"button",className:"uh-side-entry",title:o("用量统计","Usage Statistics"),"aria-label":o("用量统计","Usage Statistics"),onClick:()=>a(!0)},n.createElement("span",{className:"uh-side-entry-icon"},n.createElement(b,{name:"chart",size:17})),e.wide?n.createElement("span",{className:"uh-side-entry-label"},o("用量统计","Usage Statistics")):null),t?n.createElement("div",{className:"uh-side-modal",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&a(!1)}},n.createElement("div",{className:"uh-side-dialog",role:"dialog","aria-modal":!0,"aria-label":o("用量统计","Usage Statistics")},n.createElement("div",{className:"uh-side-dialog-head"},n.createElement("button",{className:"uh-refresh uh-close-button",type:"button",title:o("关闭用量统计","Close Usage Statistics"),"aria-label":o("关闭用量统计","Close Usage Statistics"),onClick:()=>a(!1)},n.createElement(b,{name:"close",size:18}))),n.createElement(Ce,{resetKey:r,fallback:()=>n.createElement("div",{className:"uh-boundary-fallback",role:"alert"},n.createElement("div",{className:"uh-boundary-title"},o("用量统计暂时无法显示","Usage statistics is temporarily unavailable")),n.createElement("div",{className:"uh-boundary-note"},o("当前范围加载失败,入口仍然可用。","The selected range failed to render; the sidebar entry is still available.")),n.createElement("div",{className:"uh-actions"},n.createElement("button",{type:"button",className:"uh-refresh",onClick:()=>i(e=>e+1)},n.createElement(b,{name:"refresh",size:14}),o("重试","Retry")),n.createElement("button",{type:"button",className:"uh-refresh",onClick:()=>a(!1)},n.createElement(b,{name:"close",size:14}),o("关闭","Close"))))},n.createElement(ke,{timerCtx:e.timerCtx,language:l,onLanguageChange:e=>{const t="en"===e?"en":"zh";s(t),function(e){try{window.localStorage.setItem(Ee,e)}catch(e){}}(t)}})))):null)}return a.inject=["timer","slots"],a.apply=e=>{const t=e.get("slots"),a=e.get("timer");void 0!==t&&void 0!==a&&t.inject("sidebar.footer.action",()=>t.register({name:"sidebar.footer.action",id:"all-usage",order:10},e=>n.createElement(Oe,{wide:e.wide,timerCtx:a})))},t}});
|