@ipv9/tokentracker-cli 0.39.42 → 0.39.43
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/README.md +2 -2
- package/dashboard/dist/assets/{Card-B8Y_I2mQ.js → Card-LPizs_gs.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-BDJHJCf-.js → DashboardPage-CkhqD3x3.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-ChNG3KP0.js → FadeIn-B8aDegoD.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Ca1uwFdQ.js → IpCheckPage-Vo2ZZXov.js} +1 -1
- package/dashboard/dist/assets/LimitsPage-C5-Q9Q30.js +2 -0
- package/dashboard/dist/assets/{LocalOnlyNotice-yBRg7mqR.js → LocalOnlyNotice-DXVmRcyV.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-BGzAyIYN.js → PopoverPopup-CJf61ahu.js} +1 -1
- package/dashboard/dist/assets/{Select-DEntlQun.js → Select-BLGoaqgw.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-Bn_0YJTr.js → SelectItemText-Bt02Fgwf.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-CGmzeeBt.js → SettingsPage-BnUJew-8.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-vY8xnrco.js → SkillsPage-ImHg3Puy.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-BM16UPSy.js → WidgetsPage-qscVE2nO.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-dK7Mh5mP.js → WrappedPage-qM_7aClE.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-UZisIdFP.js → arrow-up-right-CByq3BPT.js} +1 -1
- package/dashboard/dist/assets/{download-C-J68Mev.js → download-CTwO-YeA.js} +1 -1
- package/dashboard/dist/assets/{format-DIhJkiH4.js → format-4chvNBjF.js} +1 -1
- package/dashboard/dist/assets/limitDisplay-CXlkWhjp.js +1 -0
- package/dashboard/dist/assets/{main-B7TdYIfs.js → main-CCPcJ7ti.js} +6 -3
- package/dashboard/dist/assets/{mock-data-DjoQefEM.js → mock-data-DSiJ-9lr.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-g_zmpVGY.js → use-limits-display-prefs-Dgd-bQBC.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-DrNnC_U7.js → use-native-settings-CjZRLdFT.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-xmDhKr0q.js → useCurrency-BJRU0syn.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/package.json +5 -3
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/usage-limits.js +49 -9
- package/dashboard/dist/assets/LimitsPage-CyDE5D02.js +0 -2
- package/dashboard/dist/assets/limitDisplay-HQrH6Bc9.js +0 -1
package/README.md
CHANGED
|
@@ -80,7 +80,7 @@ Both bundle their own Node runtime, so there is nothing else to install. They sh
|
|
|
80
80
|
|
|
81
81
|
- 🔒 **Your usage data never leaves your machine.** Token counts and timestamps only — never prompts, responses, or file contents. No account, no telemetry, no analytics, no phone-home. TokenTracker does make a few outbound calls *on your behalf* (model prices, your own plan quotas); every one is named in [Privacy](#-privacy) below, and none of them carry your usage.
|
|
82
82
|
- 📊 **One calm web dashboard.** Your whole picture in the browser at a local URL, no login — light or dark, auto-refreshing while the tab is open. [What's on it ↓](#-the-dashboard)
|
|
83
|
-
- 📈 **Quota at a glance, on every card.** Live plan-quota usage (
|
|
83
|
+
- 📈 **Quota at a glance, on every card.** Live plan-quota usage (e.g. 5h + weekly) as color-coded chips right on each provider's card — see how close you are to your limits without leaving the overview. Where the provider reports countable units you get the actual number rather than a percentage to convert in your head: GitHub Copilot reads `158/300` premium requests. Full windows + reset countdowns on the Limits page. Covers Claude, Codex, Cursor, Gemini, Kimi, Z.AI, Kiro, Copilot, and Antigravity.
|
|
84
84
|
- 💰 **Cost you can trust — and a price tag when it can't.** 2,200+ models priced from [LiteLLM](https://github.com/BerriAI/litellm) (refreshed daily) with a bundled offline snapshot, so USD totals are right even without a network. A model too new to have a price is badged **pricing missing** rather than quietly counted as $0, and prices refresh in the background instead of waiting for a restart. Cross-provider records are de-duplicated to match each provider's own billing.
|
|
85
85
|
- 🔌 **20+ tools, zero config.** Claude Code, Codex, Cursor, Gemini, Copilot, Antigravity, OpenCode, Kiro, Zed, Goose, and more — auto-detected, hooks auto-install on first run. Zero to dashboard in ~30 seconds.
|
|
86
86
|
- 🧩 **Skills tab.** Syncs 250+ public skills across your tools.
|
|
@@ -96,7 +96,7 @@ Both bundle their own Node runtime, so there is nothing else to install. They sh
|
|
|
96
96
|
**On one screen:**
|
|
97
97
|
- **Total tokens + cost** for the selected window (24h / day / 7d / 30d / total / custom), with a browser-timezone "Updated" stamp.
|
|
98
98
|
- **Usage Trend** — token volume over time, right beside the total.
|
|
99
|
-
- **Provider breakdown** — every tool's share and top models, with each provider's live quota chips (
|
|
99
|
+
- **Provider breakdown** — every tool's share and top models, with each provider's live quota chips (e.g. 5h + weekly — a count like `158/300` where the provider reports one, otherwise a percentage) on its card and a click-to-expand per-model drill-down.
|
|
100
100
|
- **Context breakdown** — where Claude's and Codex's tokens actually go (input / output / cache / reasoning), shown side by side.
|
|
101
101
|
- **Activity heatmap** — daily usage at a glance.
|
|
102
102
|
- **Project & daily tables** — per-project totals and a day-by-day breakdown with cost and $/MTok.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as r}from"./main-
|
|
1
|
+
import{j as r}from"./main-CCPcJ7ti.js";function t({children:i,title:a,subtitle:o,className:s="",bodyClassName:d=""}){return r.jsxs("div",{className:`rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 transition-colors duration-200 ${s}`,children:[(a||o)&&r.jsxs("div",{className:"px-5 py-4 border-b border-oai-gray-200 dark:border-oai-gray-800 transition-colors duration-200",children:[a&&r.jsx("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide transition-colors duration-200",children:a}),o&&r.jsx("p",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-300 mt-1 transition-colors duration-200",children:o})]}),r.jsx("div",{className:`p-5 ${d}`,children:i})]})}export{t as C};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as an,i as qs,f as Ar,a as Fr,J as Xs,u as Rr,m as Gs,r as h,M as Ir,b as Ks,d as Qs,e as Wn,j as o,L as Js,g as Zs,h as ei,k as ti,l as ni,n as Lt,o as ht,p,q as Lr,X as sa,s as ai,R,t as ia,C as zr,P as la,B as Gn,v as Yr,w as Br,A as Hr,x as Xe,y as ri,z as oi,D as si,E as ii,F as li}from"./main-B7TdYIfs.js";import{g as ci,i as zt,b as Kn,c as gn,a as rn,d as en,f as mt,e as Ur,h as Vr,j as di,k as ui,l as fi,m as mi}from"./mock-data-DjoQefEM.js";import{g as hi,a as Mn,b as gi,c as yi,d as qr,e as En,f as pi,h as bi,L as xi,i as ki,u as wi,t as Fa}from"./limitDisplay-HQrH6Bc9.js";import{u as vi}from"./use-limits-display-prefs-g_zmpVGY.js";import{u as Nt,I as ca}from"./useCurrency-xmDhKr0q.js";import{t as Le,f as et,a as Ae,b as Qe}from"./format-DIhJkiH4.js";import{u as Ni,D as _i,a as Mi,b as ji,c as Si,d as Ci,e as Di,P as Qn,f as Jn,g as Zn,h as ea,i as ta,L as Ti}from"./PopoverPopup-BGzAyIYN.js";import{C as on}from"./Card-B8Y_I2mQ.js";import{S as Pi}from"./Select-DEntlQun.js";import{F as bt}from"./FadeIn-ChNG3KP0.js";import"./SelectItemText-Bn_0YJTr.js";const Oi=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],Xr=an("maximize-2",Oi);const $i=[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]],Wi=an("pause",$i);const Ei=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],Ai=an("play",Ei);const Fi=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],Ri=an("rotate-ccw",Fi);const Ii=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Gr=an("terminal",Ii);function Li(...e){const t=!Array.isArray(e[0]),n=t?0:-1,a=e[0+n],r=e[1+n],s=e[2+n],l=e[3+n],i=qs(r,s,l);return t?i(a):i}function zi(e,t,n={}){const a=e.get();let r=null,s=a,l;const i=typeof a=="string"?a.replace(/[\d.-]/g,""):void 0,c=()=>{r&&(r.stop(),r=null),e.animation=void 0},u=()=>{const d=Ra(e.get()),m=Ra(s);if(d===m){c();return}const g=r?r.getGeneratorVelocity():e.getVelocity();c(),r=new Xs({keyframes:[d,m],velocity:g,type:"spring",restDelta:.001,restSpeed:.01,...n,onUpdate:l})},f=()=>{u(),e.animation=r??void 0,e.events.animationStart?.notify(),r?.then(()=>{e.animation=void 0,e.events.animationComplete?.notify()})};if(e.attach((d,m)=>{s=d,l=g=>m(An(g,i)),Ar.postRender(f)},c),Fr(t)){let d=n.skipInitialAnimation===!0;const m=t.on("change",y=>{d?(d=!1,e.jump(An(y,i),!1)):e.set(An(y,i))}),g=e.on("destroy",m);return()=>{m(),g()}}return c}function An(e,t){return t?e+t:e}function Ra(e){return typeof e=="number"?e:parseFloat(e)}function da(e){const t=Rr(()=>Gs(e)),{isStatic:n}=h.useContext(Ir);if(n){const[,a]=h.useState(e);h.useEffect(()=>t.on("change",a),[])}return t}function Kr(e,t){const n=da(t()),a=()=>n.set(t());return a(),Ks(()=>{const r=()=>Ar.preRender(a,!1,!0),s=e.map(l=>l.on("change",r));return()=>{s.forEach(l=>l()),Qs(a)}}),n}function Yi(e){Wn.current=[],e();const t=Kr(Wn.current,e);return Wn.current=void 0,t}function Qr(e,t,n,a){if(typeof e=="function")return Yi(e);const s=typeof t=="function"?t:Li(t,n,a),l=Array.isArray(e)?Ia(e,s):Ia([e],([c])=>s(c)),i=Array.isArray(e)?void 0:e.accelerate;return i&&!i.isTransformed&&typeof t!="function"&&Array.isArray(n)&&a?.clamp!==!1&&(l.accelerate={...i,times:t,keyframes:n,isTransformed:!0}),l}function Ia(e,t){const n=Rr(()=>[]);return Kr(e,()=>{n.length=0;const a=e.length;for(let r=0;r<a;r++)n[r]=e[r].get();return t(n)})}function Bi(e,t={}){const{isStatic:n}=h.useContext(Ir),a=()=>Fr(e)?e.get():e;if(n)return Qr(a);const r=da(a());return h.useInsertionEffect(()=>zi(r,e,t),[r,JSON.stringify(t)]),r}function Hi(e,t={}){return Bi(e,{type:"spring",...t})}function Ui(){return o.jsxs(Js,{to:"/landing",className:"flex items-center gap-2.5 no-underline hover:opacity-80 transition-opacity",children:[o.jsx("img",{src:"/app-icon.png",alt:"Token Tracker",width:28,height:28,className:"rounded-md"}),o.jsx("span",{className:"text-base font-semibold text-oai-black dark:text-oai-white leading-tight",children:"Token Tracker"})]})}function Vi({children:e,header:t,footer:n,className:a="",hideHeader:r=!1,hideFooter:s=!1,bare:l=!1}){return l?o.jsxs("div",{className:`flex flex-col flex-1 min-h-0 ${a}`,children:[o.jsx("main",{className:"flex-1 px-6 py-6",children:e}),!s&&n&&o.jsx("footer",{className:"border-t border-oai-gray-200 dark:border-oai-gray-800 px-6 py-4 mt-auto transition-colors duration-200",children:n})]}):o.jsxs("div",{className:`min-h-screen bg-oai-white dark:bg-oai-gray-950 text-oai-black dark:text-oai-white font-sans flex flex-col transition-colors duration-200 ${a}`,children:[!r&&o.jsxs("header",{className:"border-b border-oai-gray-200 dark:border-oai-gray-800 px-6 py-4 flex items-center justify-between transition-colors duration-200",children:[o.jsx(Ui,{}),o.jsx("div",{className:"flex-1 flex justify-center",children:t})]}),o.jsx("main",{className:"flex-1 px-6 py-6",children:e}),!s&&n&&o.jsx("footer",{className:"border-t border-oai-gray-200 dark:border-oai-gray-800 px-6 py-4 mt-auto transition-colors duration-200",children:n})]})}function qi({children:e,variant:t="info",size:n="md",className:a=""}){const r="inline-flex items-center font-medium",s={success:"bg-oai-brand-100 dark:bg-oai-brand-900/30 text-oai-brand-700 dark:text-oai-brand-400 rounded-full",warning:"bg-oai-amber-50 dark:bg-oai-amber-900/30 text-oai-amber-dark dark:text-oai-amber-400 rounded-full",error:"bg-red-50 dark:bg-red-900/30 text-red-600 dark:text-red-400 rounded-full",info:"bg-oai-gray-100 dark:bg-oai-gray-800 text-oai-gray-600 dark:text-oai-gray-300 rounded-full",secondary:"bg-oai-gray-100 dark:bg-oai-gray-800 text-oai-gray-500 dark:text-oai-gray-300 rounded-md"},l={sm:"px-2 py-0.5 text-xs",md:"px-2.5 py-1 text-sm"},i=`${r} ${s[t]} ${l[n]} ${a}`.trim();return o.jsx("span",{className:i,children:e})}const Xi=h.forwardRef(function(t,n){const{render:a,className:r,disabled:s=!1,nativeButton:l=!0,...i}=t,{store:c}=Ni(),u=c.useState("open");function f(y){u&&c.setOpen(!1,ti(ni,y.nativeEvent))}const{getButtonProps:d,buttonRef:m}=Zs({disabled:s,native:l}),g=h.useMemo(()=>({disabled:s}),[s]);return ei("button",t,{state:g,ref:[n,m],props:[{onClick:f},i,d]})});var Gi={};function Ki(e,t){return e==="."?{width:"0.34ch",justifyContent:"center",marginInline:"-0.04ch"}:e===","?{width:"0.08ch",justifyContent:"center",marginInline:"-0.30ch"}:{width:"0.72ch",justifyContent:"flex-start",paddingLeft:"0.04ch",height:t}}function Qi({mv:e,digit:t,height:n}){const a=Qr(e,r=>{const s=(r%10+10)%10,l=(10+t-s)%10;let i=l*n;return l>5&&(i-=10*n),i});return o.jsx(ht.span,{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",y:a},children:t})}function Ji(e){const t=Math.round(e),n=1e-9*Math.max(1,Math.abs(e));return Math.abs(e-t)<n?t:e}function Zi(e,t){const n=e/t;return Math.floor(Ji(n))}function el(e){const t=String(e??""),n=Array.from(t),a=n.indexOf(".");let r=n.filter((i,c)=>/\d/.test(i)&&(a===-1||c<a)).length,s=0,l=!1;return n.map(i=>{if(!/\d/.test(i))return i==="."&&(l=!0),i;if(!l){const c=10**Math.max(r-1,0);return r-=1,c}return s+=1,10**-s})}function tl({place:e,value:t,height:n,digitStyle:a,shouldReduceMotion:r,isLed:s}){if(typeof e!="number"){const u=Ki(e,n);return o.jsx("span",{"data-counter-token":"static",className:`relative inline-flex items-center justify-center${s?" tt-lcd-sep":""}`,style:{height:n,...u,...a},children:e})}const l=Zi(t,e),i=da(0),c=Hi(i,{stiffness:220,damping:26,mass:.8});return h.useEffect(()=>{i.set(l)},[i,l]),r?o.jsx("span",{"data-counter-token":"digit",className:`relative inline-flex items-center justify-center overflow-hidden${s?" tt-lcd-cell":""}`,style:{height:n,position:"relative",width:"0.9ch",fontVariantNumeric:"tabular-nums",...a},children:Math.abs(l)%10}):o.jsx("span",{"data-counter-token":"digit",className:`relative inline-flex overflow-hidden${s?" tt-lcd-cell":""}`,style:{height:n,position:"relative",width:"0.9ch",fontVariantNumeric:"tabular-nums",...a},children:Array.from({length:10},(u,f)=>o.jsx(Qi,{mv:c,digit:f,height:n},f))})}function nl({value:e,displayValue:t,fontSize:n=72,padding:a=0,places:r,gap:s=6,borderRadius:l=4,horizontalPadding:i=0,textColor:c="inherit",fontWeight:u="inherit",containerStyle:f,counterStyle:d,digitStyle:m,gradientHeight:g=14,gradientFrom:y="rgba(255,255,255,0.95)",gradientTo:b="rgba(255,255,255,0)",topGradientStyle:v,bottomGradientStyle:w,variant:M="default"}){const k=M==="led",N=String(t??e??""),_=h.useMemo(()=>Array.isArray(r)&&r.length?r:el(N),[r,N]),j=typeof navigator<"u"&&/jsdom/i.test(navigator.userAgent||"")||typeof process<"u"&&Gi?.VITEST==="true",L=Lt()||j,P=Number.isFinite(Number(e))?Math.abs(Number(e)):0,D=n+a;return L?o.jsx("span",{"data-counter-root":"true",className:k?"tt-lcd":void 0,style:{display:"inline-flex",alignItems:"center",color:c,fontSize:n,fontWeight:u,lineHeight:1,...f,...d},children:k?o.jsx("span",{className:"tt-lcd-cell tt-lcd-cell--static",children:N}):N}):o.jsxs("span",{"data-counter-root":"true",style:{position:"relative",display:"inline-block",...f},children:[o.jsx("span",{className:k?"tt-lcd":void 0,style:{fontSize:n,...k?null:{display:"flex",gap:s,borderRadius:l,paddingLeft:i,paddingRight:i,color:c},overflow:"hidden",lineHeight:1,fontWeight:u,...d},children:_.map((I,G)=>o.jsx(tl,{place:I,value:P,height:D,digitStyle:m,shouldReduceMotion:L,isLed:k},`${String(I)}-${G}`))}),o.jsxs("span",{style:{pointerEvents:"none",position:"absolute",inset:0,display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[o.jsx("span",{style:v??{height:g,background:`linear-gradient(to bottom, ${y}, ${b})`}}),o.jsx("span",{style:w??{height:g,background:`linear-gradient(to top, ${y}, ${b})`}})]})]})}var al={};const rl=new Set([",","."," "]),ol=typeof navigator<"u"&&/jsdom/i.test(navigator.userAgent||"")||typeof process<"u"&&al?.VITEST==="true";function sl({char:e,reduceMotion:t,index:n}){const[a,r]=h.useState(t?e:""),[s,l]=h.useState(!1),i=h.useRef(e),c=h.useRef(!1);return h.useEffect(()=>{if(!c.current){if(c.current=!0,i.current=e,t){r(e);return}const d=Math.min(n*45,520),m=setTimeout(()=>l(!0),d),g=setTimeout(()=>r(e),d+130),y=setTimeout(()=>l(!1),d+300);return()=>{clearTimeout(m),clearTimeout(g),clearTimeout(y)}}if(e===i.current)return;if(i.current=e,t){r(e);return}l(!0);const u=setTimeout(()=>r(e),130),f=setTimeout(()=>l(!1),300);return()=>{clearTimeout(u),clearTimeout(f)}},[e,t,n]),o.jsx("span",{className:`tt-flap${s?" tt-flap--flip":""}`,"aria-hidden":"true",children:o.jsx("span",{className:"tt-flap__glyph",children:a})})}function il({value:e,fontSize:t=56,className:n=""}){const a=Lt()||ol,r=String(e??""),s=Array.from(r);return o.jsx("span",{className:`tt-flaprow ${n}`,style:{fontSize:`clamp(30px, 9cqi, ${t}px)`},role:"text","aria-label":r,children:s.map((l,i)=>rl.has(l)?o.jsx("span",{className:"tt-flap-sep","aria-hidden":"true",children:l},i):o.jsx(sl,{char:l,reduceMotion:a,index:i},i))})}function ll({baseUrl:e,accessToken:t,guestAllowed:n=!1,weeks:a=52,weekStartsOn:r="sun",cacheKey:s,timeZone:l,tzOffsetMinutes:i,now:c}={}){const u=h.useMemo(()=>ci({weeks:a,weekStartsOn:r,now:c}),[c,a,r]),[f,d]=h.useState([]),[m,g]=h.useState(null),[y,b]=h.useState("edge"),[v,w]=h.useState(!1),[M,k]=h.useState(null),N=zt(),_=!n,j=h.useMemo(()=>{if(!s)return null;const V=rn({timeZone:l,offsetMinutes:i});return`tokentracker.heatmap.${s}.${a}.${r}.${V}`},[s,l,i,a,r]),L=h.useCallback(()=>{if(!j||typeof window>"u")return null;try{const V=window.localStorage.getItem(j);if(!V)return null;const $=JSON.parse(V);return!$||!$.heatmap?null:$}catch{return null}},[j]),P=h.useCallback(V=>{if(!(!j||typeof window>"u"))try{window.localStorage.setItem(j,JSON.stringify(V))}catch{}},[j]),D=h.useCallback(()=>{if(!(!j||typeof window>"u"))try{window.localStorage.removeItem(j)}catch{}},[j]),I=h.useCallback(async()=>{w(!0),k(null);try{try{const T=await hi({baseUrl:e,accessToken:t,weeks:a,to:u.to,weekStartsOn:r,timeZone:l,tzOffsetMinutes:i}),x=Array.isArray(T?.weeks)?T.weeks:[];if(!x.length&&_){const H=L();if(H?.heatmap){g(H.heatmap),d(H.daily||[]),b("cache");return}}if(!x.some(H=>(Array.isArray(H)?H:[]).some(C=>C&&Number.isFinite(Number(C.level))))&&x.length){const H=[];for(const X of x)for(const F of Array.isArray(X)?X:[])F?.day&&H.push({day:F.day,conversation_count:F.conversation_count??0,total_tokens:F.total_tokens??F.value??0,billable_total_tokens:F.billable_total_tokens??F.value??F.total_tokens??0});const C=Kn({dailyRows:H,weeks:a,to:T?.to||u.to,weekStartsOn:r});d(H),g({...C,week_starts_on:r,active_days:H.filter(X=>Number(X?.billable_total_tokens??X?.total_tokens)>0).length,streak_days:gn({dailyRows:H,to:T?.to||u.to})}),b("client"),_?P({heatmap:{...C,week_starts_on:r,active_days:H.filter(X=>Number(X?.billable_total_tokens??X?.total_tokens)>0).length,streak_days:gn({dailyRows:H,to:T?.to||u.to})},daily:H,fetchedAt:new Date().toISOString()}):D();return}g(T||null),d([]),b("edge"),T&&_?P({heatmap:T,daily:[],fetchedAt:new Date().toISOString()}):_||D();return}catch(T){const x=T,S=x?.status??x?.statusCode;if(S===401||S===403)throw T}const V=await Mn({baseUrl:e,accessToken:t,from:u.from,to:u.to,timeZone:l,tzOffsetMinutes:i}),$=Array.isArray(V?.data)?V.data:[];d($);const E=Kn({dailyRows:$,weeks:a,to:u.to,weekStartsOn:r});g({...E,week_starts_on:r,active_days:$.filter(T=>Number(T?.billable_total_tokens??T?.total_tokens)>0).length,streak_days:gn({dailyRows:$,to:u.to})}),b("client"),_?P({heatmap:{...E,week_starts_on:r,active_days:$.filter(T=>Number(T?.billable_total_tokens??T?.total_tokens)>0).length,streak_days:gn({dailyRows:$,to:u.to})},daily:$,fetchedAt:new Date().toISOString()}):D()}catch(V){if(_){const $=L();if($?.heatmap)g($.heatmap),d($.daily||[]),b("cache"),k(null);else{const E=V;k(E?.message||String(E)),d([]),g(null),b("edge")}}else{const $=V;k($?.message||String($)),d([]),g(null),b("edge")}}finally{w(!1)}},[t,e,N,n,_,u.from,u.to,L,l,i,r,a,D,P]);return h.useEffect(()=>{if(!_)D(),d([]),k(null),g(null),b("edge");else{const V=L();V?.heatmap&&(g(V.heatmap),d(V.daily||[]),b("cache"))}I()},[t,N,L,I,n,_,D]),{range:u,daily:f,heatmap:m,source:N?"mock":y==="client"?"edge":y,loading:v,error:M,refresh:I}}function cl({baseUrl:e,accessToken:t,limit:n=3,from:a,to:r,source:s,timeZone:l,tzOffsetMinutes:i}={}){const[c,u]=h.useState([]),[f,d]=h.useState(!1),[m,g]=h.useState(null),y=h.useCallback(async()=>{d(!0),g(null);try{const b=await gi({baseUrl:e,accessToken:t,limit:n,from:a,to:r,source:s,timeZone:l,tzOffsetMinutes:i});u(Array.isArray(b?.entries)?b.entries:[])}catch(b){const v=b?.message||String(b);g(v),u([])}finally{d(!1)}},[t,e,a,n,s,l,r,i]);return h.useEffect(()=>{y()},[y]),{entries:c,loading:f,error:m,refresh:y}}const dl=24;function Jr({baseUrl:e,accessToken:t,guestAllowed:n=!1,period:a,from:r,to:s,months:l=dl,cacheKey:i,timeZone:c,tzOffsetMinutes:u,now:f,sharedRows:d,sharedRange:m}={}){const[g,y]=h.useState([]),[b,v]=h.useState(()=>({from:r,to:s})),[w,M]=h.useState("edge"),[k,N]=h.useState(null),[_,j]=h.useState(!1),[L,P]=h.useState(null),D=zt(),I=!n&&!D,G=Array.isArray(d),V=m?.from||r,$=m?.to||s,E=h.useMemo(()=>a==="day"||a==="24h"?"hourly":a==="total"?"monthly":"daily",[a]),T=(()=>{if(!i)return null;const F=ul(e)||"default",Y=rn({timeZone:c,offsetMinutes:u});if(E==="hourly"){const Z=a==="24h"?`${r||""}.${s||""}`:s||r||"day";return`tokentracker.trend.${i}.${F}.hourly.${Z}.${Y}`}if(E==="monthly")return`tokentracker.trend.${i}.${F}.monthly.${l}.${s||"today"}.${Y}`;const B=`${r||""}.${s||""}`;return`tokentracker.trend.${i}.${F}.daily.${B}.${Y}`})(),x=h.useCallback(()=>{if(!T||typeof window>"u")return null;try{const F=window.localStorage.getItem(T);if(!F)return null;const Y=JSON.parse(F);return!Y||!Array.isArray(Y.rows)?null:Y}catch{return null}},[T]),S=h.useCallback(F=>{if(!(!T||typeof window>"u"))try{window.localStorage.setItem(T,JSON.stringify(F))}catch{}},[T]),H=h.useCallback(()=>{if(!(!T||typeof window>"u"))try{window.localStorage.removeItem(T)}catch{}},[T]),C=h.useCallback(async()=>{if(G){y(Array.isArray(d)?d:[]),v({from:V,to:$}),M("shared"),N(null),j(!1),P(null);return}j(!0),P(null);try{let F;E==="hourly"?F=await fl({baseUrl:e,accessToken:t,from:r,to:s,period:a,timeZone:c,tzOffsetMinutes:u,now:f}):E==="monthly"?F=await yi({baseUrl:e,accessToken:t,months:l,to:s,timeZone:c,tzOffsetMinutes:u}):F=await Mn({baseUrl:e,accessToken:t,from:r,to:s,timeZone:c,tzOffsetMinutes:u});const Y=F?.from||r||F?.day||null,B=F?.to||s||F?.day||null;let Z=Array.isArray(F?.data)?F.data:[];E==="daily"?Z=Fn(Z,Y||r,B||s,{timeZone:c,offsetMinutes:u,now:f}):E==="hourly"?Z=bn(Z,Y||r||F?.day,B||s,{period:a,timeZone:c,offsetMinutes:u,now:f}):E==="monthly"&&(Z=Rn(Z,{timeZone:c,offsetMinutes:u,now:f}));const xe=new Date().toISOString();y(Z),v({from:Y,to:B}),M("edge"),N(xe),I?S({rows:Z,from:Y,to:B,mode:E,fetchedAt:xe}):H()}catch(F){if(I){const Y=x();if(Y?.rows){let B=E==="daily"?Fn(Y.rows||[],Y.from||r,Y.to||s,{timeZone:c,offsetMinutes:u,now:f}):E==="hourly"?bn(Y.rows||[],Y.from||r||Y.day||s,Y.to||s,{period:a,timeZone:c,offsetMinutes:u,now:f}):Array.isArray(Y.rows)?Y.rows:[];E==="monthly"&&(B=Rn(B,{timeZone:c,offsetMinutes:u,now:f})),y(B),v({from:Y.from||r,to:Y.to||s}),M("cache"),N(Y.fetchedAt||null),P(null)}else{y([]),v({from:r,to:s}),M("edge"),N(null);const B=F;P(B?.message||String(B))}}else{y([]),v({from:r,to:s}),M("edge"),N(null);const Y=F;P(Y?.message||String(Y))}}finally{j(!1)}},[t,e,r,D,n,I,E,l,a,x,G,V,d,$,c,s,u,f,H,S]);h.useEffect(()=>{if(G){y(Array.isArray(d)?d:[]),v({from:V,to:$}),M("shared"),N(null),j(!1),P(null);return}if(!I)H(),y([]),v({from:r,to:s}),P(null),M("edge"),N(null);else{const F=x();if(F?.rows){let Y=E==="daily"?Fn(F.rows||[],F.from||r,F.to||s,{timeZone:c,offsetMinutes:u,now:f}):E==="hourly"?bn(F.rows||[],F.from||r||F.day||s,F.to||s,{period:a,timeZone:c,offsetMinutes:u,now:f}):Array.isArray(F.rows)?F.rows:[];E==="monthly"&&(Y=Rn(Y,{timeZone:c,offsetMinutes:u,now:f})),y(Y),v({from:F.from||r,to:F.to||s}),M("cache"),N(F.fetchedAt||null)}}C()},[t,D,x,C,G,V,d,$,n,I,H,E,r,s,c,u,f,a]);const X=D?"mock":w;return{rows:g,from:b.from||r,to:b.to||s,source:X,fetchedAt:k,loading:_,error:L,refresh:C}}function ul(e){try{return new URL(e).host}catch{return null}}async function fl({baseUrl:e,accessToken:t,from:n,to:a,period:r,timeZone:s,tzOffsetMinutes:l,now:i}){const c=r==="24h"?Zr(n,a):[a||n].filter(Boolean),u=Array.from(new Set(c)),f=await Promise.all(u.map(y=>qr({accessToken:t,day:y,timeZone:s,tzOffsetMinutes:l}))),d=f.flatMap(y=>Array.isArray(y?.data)?y.data:[]),m=r==="24h"?u[0]||n||a:f[0]?.day||n||a,g=r==="24h"?u[u.length-1]||a||n:f[0]?.day||a||n;return{day:g,from:m,to:g,data:bn(d,m,g,{period:r,timeZone:s,offsetMinutes:l,now:i})}}function It(e){if(!e)return null;const t=String(e).trim(),n=t.split("-");if(n.length!==3)return null;const a=Number(n[0]),r=Number(n[1])-1,s=Number(n[2]);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s))return null;const l=new Date(Date.UTC(a,r,s));return Number.isFinite(l.getTime())&&mt(l)===t?l:null}function ua(e,t){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t))}function Zr(e,t){const n=It(e||t),a=It(t||e);if(!n||!a)return[e||t].filter(Boolean).map(String);if(a<n)return[mt(a),mt(n)];const r=[];for(let s=n;s<=a;s=ua(s,1))r.push(mt(s));return r}const eo=["total_tokens","billable_total_tokens","input_tokens","cached_input_tokens","cache_creation_input_tokens","output_tokens","reasoning_output_tokens","conversation_count"];function Fn(e,t,n,{timeZone:a,offsetMinutes:r,now:s}={}){const l=It(t),i=It(n);if(!l||!i||i<l)return Array.isArray(e)?e:[];const c=s instanceof Date&&Number.isFinite(s.getTime())?s:new Date,u=en({timeZone:a,offsetMinutes:r,date:c}),f=It(u),d=f?f.getTime():c.getTime(),m=new Map;for(const y of e||[])y?.day&&m.set(y.day,y);const g=[];for(let y=l;y<=i;y=ua(y,1)){const b=mt(y),v=m.get(b),w=y.getTime()>d;if(v){g.push({...v,missing:!1,future:w});continue}g.push({day:b,total_tokens:null,billable_total_tokens:null,input_tokens:null,cached_input_tokens:null,output_tokens:null,reasoning_output_tokens:null,missing:!w,future:w})}return g}function ml(e,t){const n=t?null:0;return{hour:e,total_tokens:n,billable_total_tokens:n,input_tokens:n,cached_input_tokens:n,cache_creation_input_tokens:n,output_tokens:n,reasoning_output_tokens:n,conversation_count:n,missing:!1,future:t}}function hl(e){if(!e||typeof e!="object")return!1;const t=e.models;return t&&typeof t=="object"&&Object.keys(t).length>0?!1:eo.every(n=>e[n]==null)}function gl(e,t,n){const a={...e,hour:t,missing:!1,future:n};if(!n&&hl(e))for(const r of eo)a[r]=0;return a}function yl(e,t){const n=t===30?48:24,a=[];for(let r=0;r<n;r++){const s=Math.floor(r*t/60),l=r*t%60;a.push(`${e}T${String(s).padStart(2,"0")}:${String(l).padStart(2,"0")}:00`)}return a}function pl(e,t,{timeZone:n,offsetMinutes:a}={}){const r=yl(e,t);if(!n||typeof Intl>"u"||!Intl.DateTimeFormat)return r;const s=It(e);if(!s)return r;const l=s.getUTCFullYear()*1e4+(s.getUTCMonth()+1)*100+s.getUTCDate(),i=s.getTime()-2160*60*1e3,c=ua(s,2).getTime()+2160*60*1e3,u=[],f=new Set;for(let d=i;d<=c;d+=1800*1e3){const m=sn({timeZone:n,offsetMinutes:a,now:new Date(d)});if(!m||m.dayNum!==l||t===60&&m.minute!==0||t===30&&m.minute!==0&&m.minute!==30)continue;const g=`${e}T${String(m.hour).padStart(2,"0")}:${String(m.minute).padStart(2,"0")}:00`;f.has(g)||(f.add(g),u.push(g))}return u.length>0?u:r}function bl(e,t,{timeZone:n,offsetMinutes:a,now:r}={}){if(!t)return Array.isArray(e)?e:[];const s=t.trim().slice(0,10),l=sn({timeZone:n,offsetMinutes:a,now:r}),i=l?l.dayNum:void 0;let c=!1;for(const g of e||[]){const y=g?.hour||g?.label||"",b=xn(y,i);if(b&&b.slot%2!==0){c=!0;break}}const u=c?30:60,f=new Map;for(const g of e||[]){const y=g?.hour||g?.label||"",b=xn(y,i);b&&f.set(b.slot,g)}const d=[],m=pl(s,u,{timeZone:n,offsetMinutes:a});for(let g=0;g<m.length;g++){const y=m[g],b=xn(y,i),v=b?b.slot:c?g:g*2,w=f.get(v);let M=!1;if(l){const k=l.year*1e4+l.month*100+l.day,N=b?.dayNum??Number(s.replace(/-/g,""));if(N>k)M=!0;else if(N===k){const _=l.hour*2+(l.minute>=30?1:0);M=v>_}}w?d.push(gl(w,y,M)):d.push(ml(y,M))}return d}function bn(e,t,n,{period:a,timeZone:r,offsetMinutes:s,now:l}={}){const i=a==="24h"?Zr(t,n):[n||t].filter(Boolean).map(String),u=Array.from(new Set(i)).flatMap(d=>bl(xl(e||[],d),d,{timeZone:r,offsetMinutes:s,now:l})),f=kl(u,{timeZone:r,offsetMinutes:s,now:l});return a!=="24h"?f:wl(f,{timeZone:r,offsetMinutes:s,now:l})}function xl(e,t){return e.filter(n=>{const a=n?.hour||n?.label||"",r=String(a).trim();return r.includes("T")?r.slice(0,10)===t:!0})}function kl(e,{timeZone:t,offsetMinutes:n,now:a}={}){if(!Array.isArray(e))return[];const r=sn({timeZone:t,offsetMinutes:n,now:a});return r?e.map(s=>{const l=s?.hour||s?.label||"",i=xn(l,r.dayNum);if(!i)return{...s,future:!1};const c=i.dayNum!==null&&i.dayNum>r.dayNum||(i.dayNum===null||i.dayNum===r.dayNum)&&i.slot>r.slot;return{...s,future:!!c}}):e}function wl(e,{timeZone:t,offsetMinutes:n,now:a}={}){if(!Array.isArray(e))return[];const r=sn({timeZone:t,offsetMinutes:n,now:a});if(!r)return e.filter(i=>!i?.future);const s=to({year:r.year,month:r.month,day:r.day,hour:r.hour,minute:r.minute}),l=s-1440*60*1e3;return e.filter(i=>{if(i?.future)return!1;const c=vl(i?.hour||i?.label);return c!=null&&c>=l&&c<=s})}function Rn(e,{timeZone:t,offsetMinutes:n,now:a}={}){if(!Array.isArray(e))return[];const r=sn({timeZone:t,offsetMinutes:n,now:a});return r?e.map(s=>{const l=s?.month||s?.label||"",i=Nl(l);if(!i)return{...s,future:!1};const c=i.year>r.year||i.year===r.year&&i.month>r.month;return{...s,future:c}}):e}function sn({timeZone:e,offsetMinutes:t,now:n}={}){const a=n instanceof Date&&Number.isFinite(n.getTime())?n:new Date;if(e&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const m=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hourCycle:"h23"}).formatToParts(a).reduce((M,k)=>(k.type&&k.value&&(M[k.type]=k.value),M),{}),g=Number(m.year),y=Number(m.month),b=Number(m.day),v=Number(m.hour),w=Number(m.minute);if(Number.isFinite(g)&&Number.isFinite(y)&&Number.isFinite(b)&&Number.isFinite(v)&&Number.isFinite(w)){const M=v*2+(w>=30?1:0);return{year:g,month:y,day:b,hour:v,minute:w,dayNum:g*1e4+y*100+b,slot:M}}}catch{}if(Number.isFinite(t)){const f=new Date(a.getTime()+t*60*1e3),d=f.getUTCFullYear(),m=f.getUTCMonth()+1,g=f.getUTCDate(),y=f.getUTCHours(),b=f.getUTCMinutes(),v=y*2+(b>=30?1:0);return{year:d,month:m,day:g,hour:y,minute:b,dayNum:d*1e4+m*100+g,slot:v}}const r=a.getFullYear(),s=a.getMonth()+1,l=a.getDate(),i=a.getHours(),c=a.getMinutes(),u=i*2+(c>=30?1:0);return{year:r,month:s,day:l,hour:i,minute:c,dayNum:r*1e4+s*100+l,slot:u}}function xn(e,t){if(!e)return null;const n=String(e).trim();if(n.includes("T")){const[a,r]=n.split("T");if(!a||!r)return null;const s=a.split("-");if(s.length!==3)return null;const l=Number(s[0]),i=Number(s[1]),c=Number(s[2]);if(!Number.isFinite(l)||!Number.isFinite(i)||!Number.isFinite(c))return null;const u=r.split(":"),f=Number(u[0]),d=Number(u[1]);if(!Number.isFinite(f)||f<0||f>23||!Number.isFinite(d)||d<0||d>59)return null;const m=f*2+(d>=30?1:0);return{dayNum:l*1e4+i*100+c,slot:m}}else{let a=NaN,r=0;if(/^\d{1,2}$/.test(n))a=Number(n);else if(/^\d{1,2}:\d{2}(:\d{2})?$/.test(n)){const l=n.split(":");a=Number(l[0]),r=Number(l[1])}if(!Number.isFinite(a)||a<0||a>23||!Number.isFinite(r)||r<0||r>59)return null;const s=a*2+(r>=30?1:0);return{dayNum:t||null,slot:s}}}function to({year:e,month:t,day:n,hour:a=0,minute:r=0}){return Date.UTC(Number(e),Number(t)-1,Number(n),Number(a),Number(r),0,0)}function vl(e){if(!e)return null;const t=String(e).trim();if(!t.includes("T"))return null;const[n,a]=t.split("T");if(!n||!a)return null;const r=n.split("-"),s=a.split(":");if(r.length!==3||s.length<2)return null;const[l,i,c]=r.map(Number),[u,f]=s.map(Number);return!Number.isFinite(l)||!Number.isFinite(i)||!Number.isFinite(c)||!Number.isFinite(u)||!Number.isFinite(f)?null:to({year:l,month:i,day:c,hour:u,minute:f})}function Nl(e){if(!e)return null;const n=String(e).trim().split("-");if(n.length!==2)return null;const a=Number(n[0]),r=Number(n[1]);return!Number.isFinite(a)||!Number.isFinite(r)||r<1||r>12?null:{year:a,month:r}}function La({baseUrl:e,accessToken:t,guestAllowed:n=!1,from:a,to:r,includeDaily:s=!0,cacheKey:l,timeZone:i,tzOffsetMinutes:c,now:u}={}){const[f,d]=h.useState([]),[m,g]=h.useState(null),[y,b]=h.useState(null),[v,w]=h.useState("edge"),[M,k]=h.useState(null),[N,_]=h.useState(!1),[j,L]=h.useState(null),P=zt(),D=!n&&!P,I=(()=>{if(!l)return null;const x=_l(e)||"default",S=s?"daily":"summary",H=rn({timeZone:i,offsetMinutes:c});return`tokentracker.usage.${l}.${x}.${a}.${r}.${S}.${H}`})(),G=h.useCallback(()=>{if(!I||typeof window>"u")return null;try{const x=window.localStorage.getItem(I);if(!x)return null;const S=JSON.parse(x);return!S||!S.summary?null:S}catch{return null}},[I]),V=h.useCallback(x=>{if(!(!I||typeof window>"u"))try{window.localStorage.setItem(I,JSON.stringify(x))}catch{}},[I]),$=h.useCallback(()=>{if(!(!I||typeof window>"u"))try{window.localStorage.removeItem(I)}catch{}},[I]),E=h.useCallback(async()=>{_(!0),L(null);try{let x=null,S=null;if(s){const[Y,B]=await Promise.allSettled([Mn({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c}),En({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c,rolling:!0})]);if(Y.status==="rejected")throw Y.reason;x=Y.value,S=B.status==="fulfilled"?B.value:null}else S=await En({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c,rolling:!0});let H=s&&Array.isArray(x?.data)?x.data:[];s&&(H=Ln(H,a,r,{timeZone:i,offsetMinutes:c,now:u}));let C=S?.totals||x?.summary?.totals||null,X=S?.rolling||x?.summary?.rolling||null;if(s&&!C&&!S)try{const Y=await En({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c,rolling:!0});C=Y?.totals||null,X=Y?.rolling||X}catch{}const F=new Date().toISOString();d(H),g(C),b(X),w("edge"),k(F),C&&D?V({summary:C,rolling:X,daily:H,from:a,to:r,includeDaily:s,fetchedAt:F}):D||$()}catch(x){if(D){const S=G();if(S?.summary){g(S.summary),b(S.rolling||null);const H=Array.isArray(S.daily)?S.daily:[],C=s?Ln(H,S.from||a,S.to||r,{timeZone:i,offsetMinutes:c,now:u}):H;d(C),w("cache"),k(S.fetchedAt||null),L(null)}else{const H=x;L(H?.message||String(H)),d([]),g(null),b(null),w("edge"),k(null)}}else{const S=x;L(S?.message||String(S)),d([]),g(null),b(null),w("edge"),k(null)}}finally{_(!1)}},[t,e,a,s,P,n,D,u,G,i,r,c,$,V]);return h.useEffect(()=>{if(!D)$(),d([]),g(null),b(null),L(null),w("edge"),k(null);else{const x=G();if(x?.summary){g(x.summary),b(x.rolling||null);const S=Array.isArray(x.daily)?x.daily:[],H=s?Ln(S,x.from||a,x.to||r,{timeZone:i,offsetMinutes:c,now:u}):S;d(H),w("cache"),k(x.fetchedAt||null)}}E()},[t,P,G,E,n,D,$]),{daily:f,summary:m,rolling:y,source:P?"mock":v,fetchedAt:M,loading:N,error:j,refresh:E}}function _l(e){try{return new URL(e).host}catch{return null}}function In(e){if(!e)return null;const t=String(e).trim(),n=t.split("-");if(n.length!==3)return null;const a=Number(n[0]),r=Number(n[1])-1,s=Number(n[2]);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s))return null;const l=new Date(Date.UTC(a,r,s));return Number.isFinite(l.getTime())&&mt(l)===t?l:null}function Ml(e,t){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t))}function Ln(e,t,n,{timeZone:a,offsetMinutes:r,now:s}={}){const l=In(t),i=In(n);if(!l||!i||i<l)return Array.isArray(e)?e:[];const c=s instanceof Date&&Number.isFinite(s.getTime())?s:new Date,u=en({timeZone:a,offsetMinutes:r,date:c}),f=In(u),d=f?f.getTime():c.getTime(),m=new Map;for(const y of e||[])y?.day&&m.set(y.day,y);const g=[];for(let y=l;y<=i;y=Ml(y,1)){const b=mt(y),v=m.get(b),w=y.getTime()>d;if(v){g.push({...v,missing:!1,future:w});continue}g.push({day:b,total_tokens:null,billable_total_tokens:null,input_tokens:null,cached_input_tokens:null,output_tokens:null,reasoning_output_tokens:null,missing:!w,future:w})}return g}function jl({baseUrl:e,accessToken:t,guestAllowed:n=!1,from:a,to:r,cacheKey:s,timeZone:l,tzOffsetMinutes:i}={}){const[c,u]=h.useState(null),[f,d]=h.useState("edge"),[m,g]=h.useState(!1),[y,b]=h.useState(null),v=zt(),w=!n,M=h.useMemo(()=>{if(!s)return null;const P=Sl(e)||"default",D=rn({timeZone:l,offsetMinutes:i});return`tokentracker.modelBreakdown.${s}.${P}.${a}.${r}.${D}`},[e,s,a,l,r,i]),k=h.useCallback(()=>{if(!M||typeof window>"u")return null;try{const P=window.localStorage.getItem(M);if(!P)return null;const D=JSON.parse(P);return!D||!D.breakdown?null:D}catch{return null}},[M]),N=h.useCallback(P=>{if(!(!M||typeof window>"u"))try{window.localStorage.setItem(M,JSON.stringify(P))}catch{}},[M]),_=h.useCallback(()=>{if(!(!M||typeof window>"u"))try{window.localStorage.removeItem(M)}catch{}},[M]),j=h.useCallback(async()=>{g(!0),b(null);try{const P=await pi({baseUrl:e,accessToken:t,from:a,to:r,timeZone:l,tzOffsetMinutes:i});u(P||null),d("edge"),P&&w?N({breakdown:P,fetchedAt:new Date().toISOString()}):w||_()}catch(P){if(w){const D=k();if(D?.breakdown)u(D.breakdown),d("cache"),b(null);else{u(null),d("edge");const I=P;b(I?.message||String(I))}}else{u(null),d("edge");const D=P;b(D?.message||String(D))}}finally{g(!1)}},[t,e,a,v,n,w,k,l,r,i,_,N]);return h.useEffect(()=>{if(!w)_(),u(null),d("edge"),b(null);else{const P=k();P?.breakdown&&(u(P.breakdown),d("cache"))}j()},[t,v,k,j,n,w,_]),{breakdown:c,source:v?"mock":f,loading:m,error:y,refresh:j}}function Sl(e){try{return new URL(e).host}catch{return null}}function Re(e){const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:0}function Cl(e){const t=String(e?.hour??""),n=t.indexOf("T");if(n<0)return null;const a=Number(t.slice(n+1,n+3));return Number.isFinite(a)?a:null}function Rt(e,t){let n=0,a=0;if(Array.isArray(e))for(const r of e){const s=Cl(r);s==null||s>t||(n+=Re(r.total_tokens),a+=Re(r.total_cost_usd))}return{tokens:n,cost:a}}function wn(...e){return e.reduce((t,n)=>({tokens:t.tokens+Re(n?.tokens),cost:t.cost+Re(n?.cost)}),{tokens:0,cost:0})}function za(e){if(!Array.isArray(e)||e.length===0)return null;const t=wn(...e);return{tokens:t.tokens/e.length,cost:t.cost/e.length}}function zn(e){if(!e)return null;const t=Re(e.tokens);return t<=0?null:Re(e.cost)/(t/1e6)}function Ya(e,t){return e==null||t==null||!Number.isFinite(e)||!Number.isFinite(t)||t===0?null:(e-t)/t}function Dl({current:e,prev:t=null,trailingAvg:n=null,trailingFull:a=null,period:r}){if(r==="total"||!e)return null;const s=(i,c)=>c==null||!(c>0)?null:i/c,l=(i,c,u,f)=>({value:i,deltaVsPrev:Ya(i,c),deltaVsAvg:n?Ya(i,u):null,progress:f});return{period:r,tokens:l(Re(e.tokens),t?Re(t.tokens):null,n?Re(n.tokens):null,a?s(Re(e.tokens),Re(a.tokens)):null),cost:l(Re(e.cost),t?Re(t.cost):null,n?Re(n.cost):null,a?s(Re(e.cost),Re(a.cost)):null),perMTok:l(zn(e),zn(t),zn(n),null)}}const no=864e5;function na(e){const t=String(e).split("-").map(Number);return t.length!==3||t.some(n=>!Number.isFinite(n))?null:Date.UTC(t[0],t[1]-1,t[2])}function vn(e){const t=new Date(e),n=t.getUTCFullYear(),a=String(t.getUTCMonth()+1).padStart(2,"0"),r=String(t.getUTCDate()).padStart(2,"0");return`${n}-${a}-${r}`}function kt(e,t){const n=na(e);return n==null?null:vn(n+t*no)}function Tl(e,{timeZone:t,offsetMinutes:n}){const a=e instanceof Date?e:new Date(e);if(t&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const r=new Intl.DateTimeFormat("en-GB",{timeZone:t,hour:"2-digit",hour12:!1});let s=Number(r.format(a).slice(0,2));if(s===24&&(s=0),Number.isFinite(s))return Math.min(23,Math.max(0,s))}catch{}return typeof n=="number"&&Number.isFinite(n)?new Date(a.getTime()+n*6e4).getUTCHours():a.getHours()}function Pl(e,{timeZone:t,offsetMinutes:n}){const a=e instanceof Date?e:new Date(e);if(t&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const s=new Intl.DateTimeFormat("en-CA",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit"}).format(a);if(/^\d{4}-\d{2}-\d{2}$/.test(s))return s}catch{}return typeof n=="number"&&Number.isFinite(n)?vn(a.getTime()+n*6e4):vn(a.getTime())}const Ol=e=>Number(e?.total_tokens??0)||0,$l=e=>Number(e?.total_cost_usd??0)||0;function Ba(e,t,n){let a={tokens:0,cost:0};const r=t?na(t):null,s=n?na(n):null;if(r==null||s==null||r>s)return a;for(let l=r;l<=s;l+=no){const i=e.get(vn(l));i&&(a=wn(a,i))}return a}function Wl(e,t){if(!t||e==="total")return null;if(e==="day"||e==="24h"){const s=[];for(let l=1;l<=7;l++){const i=kt(t,-l);i&&s.push(i)}return{kind:"day",hourlyDays:[t,...s],dailyFrom:null,dailyTo:null,todayKey:t,prevKey:kt(t,-1),trailingKeys:s}}const n=e==="week"?6:e==="month"?29:null;if(n==null)return null;const a=n+1,r=kt(t,-a);return{kind:"window",hourlyDays:[t,r].filter(Boolean),dailyFrom:kt(t,-(a*2-1)),dailyTo:t,todayKey:t,curStartKey:kt(t,-n),prevBoundaryKey:r,prevStartKey:kt(t,-(a*2-1))}}function El(e,t){const n=new Map;return e.forEach((a,r)=>{n.set(a,Array.isArray(t[r]?.data)?t[r].data:[])}),n}function Al(e){const t=new Map;for(const n of Array.isArray(e?.data)?e.data:[])n?.day&&t.set(String(n.day),{tokens:Ol(n),cost:$l(n)});return t}function Fl(e,t,n){return{current:Rt(t.get(e.todayKey),n),prev:e.prevKey?Rt(t.get(e.prevKey),n):null,trailingAvg:za(e.trailingKeys.map(a=>Rt(t.get(a),n))),trailingFull:za(e.trailingKeys.map(a=>Rt(t.get(a),23)))}}function Rl(e,t,n,a){const r=wn(Ba(n,e.curStartKey,kt(e.todayKey,-1)),Rt(t.get(e.todayKey),a)),s=wn(Ba(n,e.prevStartKey,e.prevBoundaryKey?kt(e.prevBoundaryKey,-1):null),e.prevBoundaryKey?Rt(t.get(e.prevBoundaryKey),a):{tokens:0,cost:0});return{current:r,prev:s,trailingAvg:null}}function Il(e){try{return new URL(e).host}catch{return null}}function Ll({baseUrl:e,accessToken:t,guestAllowed:n=!1,period:a,timeZone:r,tzOffsetMinutes:s,now:l,cacheKey:i}={}){const[c,u]=h.useState(null),[f,d]=h.useState(!1),[m,g]=h.useState(null),y=h.useRef(0),b=l instanceof Date?l:new Date(l||Date.now()),v=Pl(b,{timeZone:r,offsetMinutes:s}),w=Tl(b,{timeZone:r,offsetMinutes:s}),M=zt(),k=!n&&!M,N=(()=>{if(!i)return null;const D=Il(e)||"default",I=rn({timeZone:r,offsetMinutes:s});return`tokentracker.pulse.${i}.${D}.${a}.${v}.${I}`})(),_=h.useCallback(()=>{if(!N||typeof window>"u")return null;try{const D=window.localStorage.getItem(N);return D?JSON.parse(D):null}catch{return null}},[N]),j=h.useCallback(D=>{if(!(!N||typeof window>"u"))try{window.localStorage.setItem(N,JSON.stringify(D))}catch{}},[N]),L=h.useCallback(()=>{const D=_();return D&&D.cutoffHour===w?D:null},[_,w]),P=h.useCallback(async()=>{const D=Wl(a,v);if(!D){u(null),g(null);return}const I=++y.current;d(!0),g(null);try{const G=await Promise.all(D.hourlyDays.map(T=>qr({baseUrl:e,accessToken:t,day:T,timeZone:r,tzOffsetMinutes:s}))),V=El(D.hourlyDays,G);let $;if(D.kind==="day")$=Fl(D,V,w);else{const T=await Mn({baseUrl:e,accessToken:t,from:D.dailyFrom,to:D.dailyTo,timeZone:r,tzOffsetMinutes:s});$=Rl(D,V,Al(T),w)}const E=Dl({...$,period:a});if(I!==y.current)return;u(E),k&&E&&j({pulse:E,todayKey:v,cutoffHour:w,fetchedAt:new Date().toISOString()})}catch(G){if(I!==y.current)return;const V=L();V?.pulse&&u(V.pulse),g(G?.message?String(G.message):"Failed to load pulse")}finally{I===y.current&&d(!1)}},[e,t,n,a,r,s,v,w,k,M,L,j]);return h.useEffect(()=>{if(a==="total"||a==="custom"){u(null);return}const D=L();D?.pulse&&u(D.pulse)},[N,a,w]),h.useEffect(()=>{P()},[P]),{pulse:c,loading:f,error:m,refresh:P}}const ao=new Set(["day","hour","month"]);function zl(e){return ao.has(e)}function Ha(e){if(e==null)return null;const t=String(e).trim();if(!/^[0-9]+$/.test(t))return null;const n=t.replace(/^0+/,"");return n.length===0?"0":n}function Yl(e,t){const n=Ha(e),a=Ha(t);if(n&&a)return n.length!==a.length?n.length<a.length?-1:1:n===a?0:n<a?-1:1;const r=Le(e),s=Le(t);return r==null&&s==null?0:r==null?1:s==null?-1:r===s?0:r<s?-1:1}function ro(e,t){const n=typeof e=="string"?e:String(e||""),a=typeof t=="string"?t:String(t||"");return n===a?0:n<a?-1:1}function Bl(e){if(!e)return null;const n=String(e).trim().match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!n)return null;const a=Number(n[1]),r=Number(n[2]),s=Number(n[3]);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s))return null;const l=new Date(Date.UTC(a,r-1,s));return!Number.isFinite(l.getTime())||l.getUTCFullYear()!==a||l.getUTCMonth()+1!==r||l.getUTCDate()!==s?null:l.getTime()}function Hl(e){if(!e)return null;const n=String(e).trim().match(/^(\d{4})-(\d{2})$/);if(!n)return null;const a=Number(n[1]),r=Number(n[2]);if(!Number.isFinite(a)||!Number.isFinite(r)||r<1||r>12)return null;const s=new Date(Date.UTC(a,r-1,1));return Number.isFinite(s.getTime())?s.getTime():null}function Ul(e){if(!e)return null;const n=String(e).trim().match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?Z?$/);if(!n)return null;const a=Number(n[1]),r=Number(n[2]),s=Number(n[3]),l=Number(n[4]),i=Number(n[5]),c=Number(n[6]||0);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s)||!Number.isFinite(l)||!Number.isFinite(i)||!Number.isFinite(c)||r<1||r>12||s<1||s>31||l<0||l>23||i<0||i>59||c<0||c>59)return null;const u=new Date(Date.UTC(a,r-1,s,l,i,c));return Number.isFinite(u.getTime())?u.getTime():null}function Vl(e,t,n){const a=n==="hour"?Ul:n==="month"?Hl:Bl,r=a(e),s=a(t);return r!=null&&s!=null?r===s?0:r<s?-1:1:ro(e,t)}function oo(e,{key:t,dir:n}){const a=n==="asc"?1:-1,r=Array.isArray(e)?e:[],s=ao.has(t)?(i,c)=>Vl(i,c,t):t==="top_model"?ro:Yl,l=i=>t==="total_tokens"&&i?.billable_total_tokens!=null?i.billable_total_tokens:i?.[t];return r.map((i,c)=>({row:i,index:c})).sort((i,c)=>{const u=l(i.row),f=l(c.row),d=u==null,m=f==null;if(d&&m)return i.index-c.index;if(d)return 1;if(m)return-1;const g=s(u,f);return g!==0?g*a:i.index-c.index}).map(i=>i.row)}function ql(){return[{key:"day",label:p("daily.sort.date.label"),title:p("daily.sort.date.title")},{key:"total_tokens",label:p("daily.sort.total.label"),title:p("daily.sort.total.title")},{key:"input_tokens",label:p("daily.sort.input.label"),title:p("daily.sort.input.title")},{key:"output_tokens",label:p("daily.sort.output.label"),title:p("daily.sort.output.title")},{key:"cached_input_tokens",label:p("daily.sort.cached.label"),title:p("daily.sort.cached.title")},{key:"reasoning_output_tokens",label:p("daily.sort.reasoning.label"),title:p("daily.sort.reasoning.title")},{key:"conversation_count",label:p("daily.sort.conversations.label"),title:p("daily.sort.conversations.title")}]}function Ua(e){const t=zl(e)?e:"day";return ql().map((n,a)=>a===0?{...n,key:t}:n)}function Va(e,{key:t,dir:n}){return oo(e,{key:t,dir:n})}const Nn=12,Xl=["total_tokens","billable_total_tokens","input_tokens","cached_input_tokens","cache_creation_input_tokens","output_tokens","reasoning_output_tokens"];function Gl(e){if(typeof e=="bigint")return e!==0n;if(typeof e=="number")return Number.isFinite(e)&&e!==0;if(e==null)return!1;const t=String(e).trim();if(!t||!/^-?\d+$/.test(t))return!1;const n=t.startsWith("-")?t.slice(1):t;return/[1-9]/.test(n)}function Kl(e){return Xl.some(t=>Gl(e?.[t]))}function Ql(e){const t=Array.isArray(e)?e:[];if(!t.length)return[];const n=oo(t,{key:"month",dir:"asc"}),a=n.findIndex(r=>r?.month&&Kl(r));return a===-1?t:n.slice(a)}function Jl(e,t,n=Nn){const a=Array.isArray(e)?e:[],r=Number.isFinite(n)&&n>0?n:Nn,l=(Number.isFinite(t)&&t>=0?Math.floor(t):0)*r;return a.slice(l,l+r)}function Zl(e){if(typeof e!="string")return null;const t=e.trim();return t?t.toLowerCase():null}function ec(e){const t=Zl(e?.model_id);return t||null}function tc(e,t){return e?.model?String(e.model):t}const nc=new Set(["curated:fuzzy","litellm:fuzzy","litellm:prefix-strip"]),ac=new Set(["miss","unattributed","empty"]);function rc(e){const t=String(e||"").toLowerCase();return t.includes("free")||t.includes("hy3-preview")||/^glm-[\d.]+-flash(?![a-z])/.test(t)}function _n(e,t=0){const n=Le(e?.billable_total_tokens),a=Le(e?.total_tokens);return n!=null&&n>0?n:a!=null&&a>0?a:n??a??t}function so(e,{copyFn:t}={}){const n=typeof t=="function"?t:l=>l,r=(Array.isArray(e?.sources)?e.sources:[]).map(l=>{const i=_n(l?.totals),c=Le(l?.totals?.total_cost_usd)??0;return{source:l?.source,totalTokens:Number.isFinite(i)?i:0,totalCost:Number.isFinite(c)?c:0,models:Array.isArray(l?.models)?l.models:[]}}).filter(l=>l.totalTokens>0);if(!r.length)return[];const s=r.reduce((l,i)=>l+i.totalTokens,0);return typeof e?.pricing?.pricing_mode=="string"&&e.pricing.pricing_mode.toUpperCase(),r.slice().sort((l,i)=>i.totalTokens-l.totalTokens).map(l=>{const i=l.source?String(l.source).toUpperCase():n("shared.placeholder.short"),c=s>0?l.totalTokens/s*100:0,u=Number.isFinite(c)?c.toFixed(1):"0.0",f=l.models.map(y=>{const b=_n(y?.totals);if(!Number.isFinite(b)||b<=0)return null;const v=l.totalTokens>0?Math.round(b/l.totalTokens*1e3)/10:0,w=tc(y,n("shared.placeholder.short")),M=ec(y),k=Le(y?.totals?.total_cost_usd),N=k??(l.totalCost>0&&l.totalTokens>0?b/l.totalTokens*l.totalCost:null),_=typeof y?.pricing_tier=="string"?y.pricing_tier:null,j=_?ac.has(_)&&b>0:b>0&&(N==null||N<=0)&&!rc(w),L=!!(_&&nc.has(_));return{id:M,name:w,share:v,usage:b,cost:N,pricingTier:_,pricingMissing:j,pricingFuzzy:L}}).filter(Boolean),d=f.filter(y=>Number.isFinite(Number(y?.cost))&&Number(y.cost)>0).sort((y,b)=>Number(b.cost)-Number(y.cost))[0]||null,m=f.filter(y=>y?.pricingMissing),g=f.filter(y=>y?.pricingFuzzy);return{source:l.source,label:i,totalPercent:String(u),usd:l.totalCost,usage:l.totalTokens,topCostModel:d,missingPricingModels:m,fuzzyPricingModels:g,models:f}})}function oc(e,{copyFn:t}={}){const a=so(e,{copyFn:typeof t=="function"?t:d=>d}),r=a.reduce((d,m)=>d+(Number(m?.usage)||0),0),s=a.reduce((d,m)=>d+(Number(m?.usd)||0),0),l=a.flatMap(d=>(d.models||[]).map(m=>({...m,source:d.label}))),i=l.filter(d=>Number.isFinite(Number(d?.cost))&&Number(d.cost)>0).sort((d,m)=>Number(m.cost)-Number(d.cost))[0]||null,c=l.filter(d=>Number.isFinite(Number(d?.usage))&&Number(d.usage)>0).sort((d,m)=>Number(m.usage)-Number(d.usage))[0]||null,u=l.filter(d=>d?.pricingMissing);return{fuzzyPricingModels:l.filter(d=>d?.pricingFuzzy),totalTokens:r,totalCost:s,costPerMillionTokens:r>0?s/(r/1e6):null,topCostModel:i,topUsageModel:c,missingPricingModels:u}}function sc(e,t="—"){const n=Object.entries(e?.models||{});if(!n.length)return t;let a=null,r=-1;for(const[s,l]of n){const i=Number(l);!Number.isFinite(i)||i<=r||(a=s,r=i)}return a||t}function ic(e,{fallback:t="—"}={}){const n=(Array.isArray(e)?e:[]).map(s=>{const l=_n(s),i=Le(s?.total_cost_usd)??0,c=Number.isFinite(l)&&l>0?i/(l/1e6):null;return{...s,cost_per_million_tokens:c,top_model:sc(s,t)}}),a=n.reduce((s,l)=>{const i=Le(l?.cost_per_million_tokens);return i!=null&&i>0&&s.push(i),s},[]),r=a.length>0?a.reduce((s,l)=>s+l,0)/a.length:null;return n.map(s=>{const l=Le(s?.cost_per_million_tokens),i=l!=null&&r!=null&&r>0&&l>r*1.15;return{...s,cost_per_million_baseline:r,cost_per_million_status:i?"high":"normal"}})}const dt={emerald:{light:["#ebedf0","#a7f3d0","#6ee7b7","#34d399","#10b981"],dark:["#2d333b","#065f46","#059669","#10b981","#34d399"],gridColor:{light:"rgba(16, 185, 129, 0.12)",dark:"rgba(52, 211, 153, 0.08)"}},ocean:{light:["#f1f5f9","#93c5fd","#60a5fa","#3b82f6","#1d4ed8"],dark:["#1e293b","#1e3a8a","#2563eb","#3b82f6","#60a5fa"],gridColor:{light:"rgba(59, 130, 246, 0.12)",dark:"rgba(96, 165, 250, 0.08)"}},neon:{light:["#faf5ff","#ebd5ff","#c084fc","#a855f7","#7e22ce"],dark:["#2e1065","#581c87","#8b5cf6","#a855f7","#c084fc"],gridColor:{light:"rgba(168, 85, 247, 0.12)",dark:"rgba(192, 132, 252, 0.08)"}},amber:{light:["#fffbeb","#fde68a","#f59e0b","#d97706","#b45309"],dark:["#451a03","#78350f","#b45309","#d97706","#f59e0b"],gridColor:{light:"rgba(245, 158, 11, 0.12)",dark:"rgba(245, 158, 11, 0.08)"}}};function lc(e,t){const n=/^#([0-9a-f]{6})$/i.exec(e);if(!n)return e;const a=parseInt(n[1],16),r=a>>16&255,s=a>>8&255,l=a&255,i=c=>Math.max(0,Math.min(255,Math.round(c*t)));return`rgb(${i(r)}, ${i(s)}, ${i(l)})`}function tt(e,t,n,a,r){const s=Math.cos(a),l=Math.sin(a),i=e*s-t*l,c=e*l+t*s,u=n,f=Math.cos(r),d=Math.sin(r),m=i,g=c*f-u*d,y=c*d+u*f;return{x:m,y:g,z:y}}function cc(e,t,n,a,r){return tt(e,t,n,a,r)}function io(e,t){const n=Number(t).toLocaleString();if(e>=4){const a=Math.floor(Math.random()*3)+1;return p(`heatmap.3d.voxel.joke.${a}`,{value:n})}else return e===3?p("heatmap.3d.voxel.level3",{value:n}):e===2?p("heatmap.3d.voxel.level2",{value:n}):e===1?p("heatmap.3d.voxel.level1",{value:n}):p("heatmap.3d.voxel.level0")}function qa({weeks:e,palette:t="auto",isDark:n=!1,interactive:a=!1,autoRotateInit:r=!1,onResetViewRef:s=null}){const l=dt[t]||(t==="auto"?dt.emerald:null),i=l?n?l.dark:l.light:Array.isArray(t)?t:n?dt.emerald.dark:dt.emerald.light,c=l?n?l.gridColor.dark:l.gridColor.light:n?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",u=-.2,f=.88,[d,m]=h.useState({yaw:u,pitch:f}),[g,y]=h.useState(r),[b,v]=h.useState(1),w=a?13:10.5,M=h.useMemo(()=>{const A=[],z=e.length;if(z===0||!a)return[];for(let U=0;U<=7;U++){const q=(U-3.5)*w,ne=tt(-z/2*w,q,0,d.yaw,d.pitch),se=tt(z/2*w,q,0,d.yaw,d.pitch);A.push({d:`M${ne.x},${ne.y} L${se.x},${se.y}`,key:`horiz-${U}`})}for(let U=0;U<=z;U+=4){const q=(U-z/2)*w,ne=tt(q,-3.5*w,0,d.yaw,d.pitch),se=tt(q,3.5*w,0,d.yaw,d.pitch);A.push({d:`M${ne.x},${ne.y} L${se.x},${se.y}`,key:`vert-${U}`})}if(z%4!==0){const U=(z-z/2)*w,q=tt(U,-3.5*w,0,d.yaw,d.pitch),ne=tt(U,3.5*w,0,d.yaw,d.pitch);A.push({d:`M${q.x},${q.y} L${ne.x},${ne.y}`,key:"vert-last"})}return A},[e.length,d,w,a]);h.useEffect(()=>{s&&(s.current={reset:()=>{m({yaw:u,pitch:f}),y(!1),v(1),T()},toggleAutoRotate:A=>{y(A)}})},[s]);const k=h.useRef(null),N=h.useRef(null),_=h.useRef(!1),j=h.useRef({x:0,y:0}),L=h.useRef({yaw:u,pitch:f}),P=h.useRef({x:0,y:0}),D=h.useRef({x:0,y:0,time:0}),I=h.useRef(null),[G,V]=h.useState(0),$=h.useRef(null),E=h.useRef(!0);h.useEffect(()=>(E.current=!0,()=>{E.current=!1}),[]);const T=()=>{$.current&&cancelAnimationFrame($.current),V(0);const A=performance.now(),z=1200,U=q=>{if(!E.current)return;const ne=q-A,se=Math.min(1,ne/z),ye=1-Math.pow(1-se,3);V(ye),se<1?$.current=requestAnimationFrame(U):$.current=null};$.current=requestAnimationFrame(U)};h.useEffect(()=>(T(),()=>{$.current&&cancelAnimationFrame($.current)}),[a]),h.useEffect(()=>{if(!g||_.current||typeof window>"u"||typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let z;const U=()=>{if(typeof document<"u"&&document.visibilityState==="hidden"){z=requestAnimationFrame(U);return}m(q=>({yaw:q.yaw+.002,pitch:q.pitch})),z=requestAnimationFrame(U)};return z=requestAnimationFrame(U),()=>cancelAnimationFrame(z)},[g]);const x=(A,z)=>{a&&(_.current=!0,j.current={x:A,y:z},L.current={yaw:d.yaw,pitch:d.pitch},P.current={x:0,y:0},D.current={x:A,y:z,time:performance.now()},I.current&&cancelAnimationFrame(I.current))},S=(A,z)=>{if(!_.current)return;const U=A-j.current.x,q=z-j.current.y,ne=performance.now(),se=ne-D.current.time;se>0&&(P.current={x:(A-D.current.x)/se,y:(z-D.current.y)/se}),D.current={x:A,y:z,time:ne};const ye=.005,fe=L.current.yaw-U*ye,he=Math.PI/2.3,Pe=Math.max(-he,Math.min(he,L.current.pitch-q*ye));m({yaw:fe,pitch:Pe})},H=()=>{if(!_.current)return;_.current=!1;let A=-P.current.x*12,z=-P.current.y*12;const U=.95,q=()=>{_.current||(A*=U,z*=U,!(Math.abs(A)<.01&&Math.abs(z)<.01)&&(m(ne=>{const se=ne.yaw+A*.005,ye=Math.PI/2.3,fe=Math.max(-ye,Math.min(ye,ne.pitch+z*.005));return{yaw:se,pitch:fe}}),I.current=requestAnimationFrame(q)))};I.current=requestAnimationFrame(q)},[C,X]=h.useState(null),[F,Y]=h.useState({x:0,y:0,shiftX:0}),B=h.useRef(null);h.useEffect(()=>()=>{B.current&&clearTimeout(B.current)},[]),h.useEffect(()=>{if(!a||!N.current)return;const A=U=>{U.preventDefault();const q=-U.deltaY*.0025;v(ne=>{const se=ne+q;return Math.max(.5,Math.min(3,se))})},z=N.current;return z.addEventListener("wheel",A,{passive:!1}),()=>{z.removeEventListener("wheel",A)}},[a]);const Z=h.useMemo(()=>{const A=[];return e.forEach((z,U)=>{(Array.isArray(z)?z:[]).forEach((q,ne)=>{q&&A.push({key:q.day||`${U}-${ne}`,col:U,row:ne,level:q.level||0,value:q.value||0,total_tokens:q.total_tokens||0,day:q.day,models:q.models||null})})}),A},[e]),je=w-(a?1.8:1.5),Me=a?38:28,Se=A=>Math.max(1.8,Number(A)/4*Me),J=h.useMemo(()=>{if(Z.length===0)return[];const A=e.length;return Z.map(z=>{const U=Se(z.level),q=Math.sqrt(Math.pow(z.col-A/2,2)+Math.pow(z.row-3.5,2)),ne=Math.sqrt(Math.pow(A/2,2)+Math.pow(3.5,2)),se=q/ne*.4,ye=Math.min(1,Math.max(0,(G-se)*(1/.6))),fe=U*ye,he=(z.col-A/2)*w,Pe=(z.row-3.5)*w,pe=je/2,Ee=[{x:he-pe,y:Pe-pe,z:0},{x:he+pe,y:Pe-pe,z:0},{x:he+pe,y:Pe+pe,z:0},{x:he-pe,y:Pe+pe,z:0},{x:he-pe,y:Pe-pe,z:fe},{x:he+pe,y:Pe-pe,z:fe},{x:he+pe,y:Pe+pe,z:fe},{x:he-pe,y:Pe+pe,z:fe}].map(ae=>tt(ae.x,ae.y,ae.z,d.yaw,d.pitch)),Be=tt(he,Pe,fe/2,d.yaw,d.pitch),_t=[{name:"top",indices:[4,5,6,7],scale:1,normal:[0,0,1]},{name:"bottom",indices:[3,2,1,0],scale:.4,normal:[0,0,-1]},{name:"left",indices:[3,0,4,7],scale:.55,normal:[-1,0,0]},{name:"right",indices:[1,2,6,5],scale:.75,normal:[1,0,0]},{name:"front",indices:[0,1,5,4],scale:.85,normal:[0,-1,0]},{name:"back",indices:[2,3,7,6],scale:.65,normal:[0,1,0]}],gt=i[Math.min(4,Math.max(0,Number(z.level)||0))],yt=[],it=.35,Mt=-.4,oe=.83;return _t.forEach(ae=>{const ee=cc(ae.normal[0],ae.normal[1],ae.normal[2],d.yaw,d.pitch);if(ee.z>.001){const ce=Ee[ae.indices[0]],Ce=Ee[ae.indices[1]],ie=Ee[ae.indices[2]],Ye=Ee[ae.indices[3]],Yt=`M${ce.x},${ce.y} L${Ce.x},${Ce.y} L${ie.x},${ie.y} L${Ye.x},${Ye.y} Z`,Bt=ee.x*it+ee.y*Mt+ee.z*oe,jt=n?.18:0,pt=ae.scale*(.82+.28*Math.max(0,Bt))+jt;yt.push({name:ae.name,d:Yt,fill:lc(gt,pt)})}}),{...z,centerProj:Be,renderedFaces:yt}})},[Z,d,i,e.length,G,w,je,Me]),De=h.useMemo(()=>[...J].sort((A,z)=>A.centerProj.z-z.centerProj.z),[J]),le=h.useMemo(()=>{if(De.length===0)return{minX:-100,minY:-100,maxX:100,maxY:100};let A=1/0,z=1/0,U=-1/0,q=-1/0;return De.forEach(ne=>{const se=w*2,ye=ne.centerProj.x,fe=ne.centerProj.y;ye-se<A&&(A=ye-se),ye+se>U&&(U=ye+se),fe-se<z&&(z=fe-se),fe+se>q&&(q=fe+se)}),{minX:A,minY:z,maxX:U,maxY:q}},[De,w]),de=12,W=le.maxX-le.minX+de*2,te=le.maxY-le.minY+de*2,ge=W/b,me=te/b,Ne=le.minX-de+(W-ge)/2,Fe=le.minY-de+(te-me)/2,Te=`${Ne} ${Fe} ${ge} ${me}`;return Z.length===0?o.jsx("div",{className:"py-8 text-center text-sm text-oai-gray-500",children:p("heatmap.empty")}):o.jsxs("div",{ref:N,className:`relative select-none outline-none ${a?"cursor-grab active:cursor-grabbing w-full h-full flex items-center justify-center":"w-full overflow-hidden flex justify-center"}`,onMouseDown:A=>{if(!a)return;x(A.clientX,A.clientY);const z=q=>S(q.clientX,q.clientY),U=()=>{H(),window.removeEventListener("mousemove",z),window.removeEventListener("mouseup",U)};window.addEventListener("mousemove",z),window.addEventListener("mouseup",U)},onTouchStart:A=>{!a||A.touches.length===0||x(A.touches[0].clientX,A.touches[0].clientY)},onTouchMove:A=>{!a||A.touches.length===0||S(A.touches[0].clientX,A.touches[0].clientY)},onTouchEnd:()=>{a&&H()},children:[o.jsxs("svg",{ref:k,viewBox:Te,width:a?"95%":"100%",height:a?"95%":"auto",role:"img","aria-label":p("heatmap.iso.aria")||"3D interactive activity heatmap",style:{display:"block",width:"100%",height:"auto",maxWidth:a?"none":`${W}px`,maxHeight:a?"78vh":"none"},className:"transition-transform duration-300 ease-out",children:[a&&M.map(A=>o.jsx("path",{d:A.d,fill:"none",stroke:c,strokeWidth:.25,strokeDasharray:"1.5 2.5",strokeLinecap:"round"},A.key)),De.map(A=>{const z=C&&C.key===A.key;return o.jsxs("g",{onMouseEnter:U=>{if(B.current&&(clearTimeout(B.current),B.current=null),X(A),a&&k.current){const q=tt((A.col-e.length/2)*w,(A.row-3.5)*w,Se(A.level),d.yaw,d.pitch);let ne=0,se=0;const ye=k.current;if(N.current&&typeof ye.createSVGPoint=="function"&&typeof ye.getScreenCTM=="function")try{const pe=ye.createSVGPoint();pe.x=q.x,pe.y=q.y;const We=ye.getScreenCTM();if(We){const Ee=pe.matrixTransform(We),Be=N.current.getBoundingClientRect();ne=Ee.x-Be.left,se=Ee.y-Be.top}}catch{const We=ye.getBoundingClientRect(),Ee=le.maxX-le.minX+de*2,Be=le.maxY-le.minY+de*2;ne=(q.x-(le.minX-de))/Ee*We.width,se=(q.y-(le.minY-de))/Be*We.height}else{const pe=ye.getBoundingClientRect(),We=le.maxX-le.minX+de*2,Ee=le.maxY-le.minY+de*2;ne=(q.x-(le.minX-de))/We*pe.width,se=(q.y-(le.minY-de))/Ee*pe.height}const fe=140;let he=0;const Pe=N.current?N.current.getBoundingClientRect().width:ye.getBoundingClientRect().width;ne<fe?he=fe-ne:ne>Pe-fe&&(he=Pe-fe-ne),Y({x:ne,y:se,shiftX:he})}},onMouseLeave:()=>{B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{X(null)},150)},className:"transition-all duration-200",style:{filter:z?"brightness(1.15) drop-shadow(0 4px 6px rgba(0,0,0,0.15))":"none",cursor:a?"pointer":"default"},children:[!a&&A.day&&o.jsx("title",{children:`${A.day}: ${Number(A.value).toLocaleString()} conversations`}),A.renderedFaces.map((U,q)=>o.jsx("path",{d:U.d,fill:U.fill,stroke:U.fill,strokeWidth:.25,strokeLinejoin:"round"},q))]},A.key)})]}),a&&C&&o.jsxs("div",{onMouseEnter:()=>{B.current&&(clearTimeout(B.current),B.current=null)},onMouseLeave:()=>{B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{X(null)},150)},className:"absolute z-[9999] w-0 h-0 transition-all duration-100 ease-out",style:{left:`${F.x}px`,top:`${F.y}px`},children:[o.jsxs("div",{className:"absolute left-0 bottom-[10px] backdrop-blur-md bg-white/90 dark:bg-oai-gray-900/90 border border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-xl rounded-xl p-3.5 max-w-[280px] min-w-[200px] flex flex-col gap-2 animate-in fade-in zoom-in-95 duration-100",style:{transform:`translateX(calc(-50% + ${F.shiftX}px))`},children:[o.jsxs("div",{className:"flex items-center justify-between border-b border-oai-gray-100 dark:border-oai-gray-800/80 pb-1.5",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400",children:C.day}),(()=>{const A=C.level===0?n?"#9ca3af":"#6b7280":i[C.level];return o.jsxs("span",{className:"text-[10px] px-2 py-0.5 rounded-full font-medium",style:{backgroundColor:A+"22",color:A,border:`1px solid ${A}44`},children:["Level ",C.level]})})()]}),o.jsxs("div",{className:"flex flex-col gap-2",children:[o.jsxs("div",{className:"flex flex-col gap-0.5",children:[o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-lg font-bold text-oai-gray-900 dark:text-white leading-none tabular-nums",children:Number(C.value??0).toLocaleString()}),o.jsx("span",{className:"text-[10px] text-oai-gray-400 uppercase tracking-wider font-semibold",children:"Conversations"})]}),o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400 leading-none tabular-nums",children:Number(C.total_tokens??0).toLocaleString()}),o.jsx("span",{className:"text-[9px] text-oai-gray-400 uppercase tracking-wider",children:"tokens"})]})]}),C.models&&Object.keys(C.models).length>0?o.jsxs("div",{className:"mt-1.5 border-t border-oai-gray-100 dark:border-oai-gray-800/60 pt-2 flex flex-col gap-1.5",children:[o.jsx("div",{className:"text-[10px] font-semibold text-oai-gray-400 dark:text-oai-gray-500 uppercase tracking-wider",children:"Model Breakdown"}),o.jsx("div",{className:"flex flex-col gap-2 max-h-[150px] overflow-y-auto pr-1.5 scrollbar-thin",children:Object.entries(C.models).map(([A,z])=>({name:A,val:Number(z)})).sort((A,z)=>z.val-A.val).map(({name:A,val:z})=>{const U=Number(C.total_tokens)||Object.values(C.models).reduce((ne,se)=>ne+Number(se||0),0)||1,q=Math.round(z/U*100);return o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsxs("div",{className:"flex items-center justify-between text-[11px] gap-3",children:[o.jsx("span",{className:"font-medium text-oai-gray-750 dark:text-oai-gray-200 truncate max-w-[120px]",title:A,children:A}),o.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[o.jsx("span",{className:"font-mono text-oai-gray-900 dark:text-oai-gray-100 font-semibold",children:z.toLocaleString()}),o.jsxs("span",{className:"text-[9px] text-oai-gray-450 dark:text-oai-gray-500 min-w-[28px] text-right font-medium",children:[q,"%"]})]})]}),o.jsx("div",{className:"w-full h-1 bg-oai-gray-100 dark:bg-oai-gray-800/85 rounded-full overflow-hidden",children:o.jsx("div",{className:"h-full rounded-full transition-all duration-300",style:{width:`${q}%`,backgroundColor:i[4],boxShadow:`0 0 4px ${i[4]}55`}})})]},A)})})]}):o.jsx("p",{className:"text-[11px] text-oai-gray-600 dark:text-oai-gray-300 leading-relaxed font-normal mt-1 border-t border-dashed border-oai-gray-100 dark:border-oai-gray-800/60 pt-1.5",children:io(C.level,C.value)})]})]}),o.jsx("div",{className:"absolute bottom-[6px] left-0 -translate-x-1/2 w-2.5 h-2.5 rotate-45 bg-white dark:bg-oai-gray-900 border-r border-b border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-sm",style:{marginBottom:"1px"}})]})]})}const dc=12,uc=3,fc=26,mc=["#ebedf0","#f7d08a","#f2b757","#eca02f","#d9861a"],hc=["#30363d","#7a4711","#bf7015","#eca02f","#f7c877"];function Xa(e){const t=Number(e);return Number.isFinite(t)?t<1e3?t.toLocaleString():Ae(t,{decimals:2}):"0"}function gc(e){if(typeof e!="string")return null;const t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e.trim());if(!t)return null;const n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return Number.isFinite(n.getTime())?n:null}function lo(e,t){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t))}function yc(e,t){return Math.floor((Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())-Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()))/864e5)}function pc(e,t){const n=t==="mon"?1:0,a=e.getUTCDay();return lo(e,-((a-n+7)%7))}function bc(e,t,n,a){if(!e)return[];const r=gc(t)||new Date,s=[];for(let f=11;f>=0;f-=1)s.push(new Date(Date.UTC(r.getUTCFullYear(),r.getUTCMonth()-f,1)));const l=pc(r,n),i=lo(l,-(e-1)*7),c=[],u=new Set;for(const f of s){const d=Math.floor(yc(i,f)/7);d<0||d>=e||u.has(d)||(u.add(d),c.push({label:a[f.getUTCMonth()],index:d}))}return c}function xc({heatmap:e,timeZoneLabel:t,timeZoneShortLabel:n,hideLegend:a=!1,embedded:r=!1}){const{resolvedTheme:s}=Lr(),{currency:l,rate:i}=Nt(),c=s==="dark",u=c?hc:mc,f=h.useRef(null),d=h.useRef(null),[m,g]=h.useState(null),[y,b]=h.useState({x:0,y:0,shiftX:0}),v=h.useRef(null);h.useEffect(()=>()=>{v.current&&clearTimeout(v.current)},[]);const[w,M]=h.useState(!1),[k,N]=h.useState(!1),[_,j]=h.useState(!1),L=h.useRef(null),[P,D]=h.useState("amber"),I=[p("heatmap.month.jan"),p("heatmap.month.feb"),p("heatmap.month.mar"),p("heatmap.month.apr"),p("heatmap.month.may"),p("heatmap.month.jun"),p("heatmap.month.jul"),p("heatmap.month.aug"),p("heatmap.month.sep"),p("heatmap.month.oct"),p("heatmap.month.nov"),p("heatmap.month.dec")],G=(W,te)=>{if(!te||!te.day)return;v.current&&(clearTimeout(v.current),v.current=null),g(te);const ge=W.currentTarget.getBoundingClientRect(),me=typeof window<"u"?window.innerWidth:1024,Ne=ge.left+ge.width/2,Fe=ge.top,Te=140;let A=0;Ne<Te?A=Te-Ne:Ne>me-Te&&(A=me-Te-Ne),b({x:Ne,y:Fe,shiftX:A})},V=()=>{v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{g(null)},150)},$=()=>{N(!1),M(!0)},E=()=>{N(!0)},T=W=>{W.target===W.currentTarget&&k&&(M(!1),N(!1))};h.useEffect(()=>{if(!w||k)return;const W=te=>{te.key==="Escape"&&E()};return window.addEventListener("keydown",W),()=>{window.removeEventListener("keydown",W)}},[w,k]);const x=h.useMemo(()=>({emerald:{accentText:"text-emerald-500 dark:text-emerald-400",accentBg:"bg-emerald-500/10 dark:bg-emerald-400/10",accentBorder:"border-emerald-500/20 dark:border-emerald-400/15",hoverBorder:"hover:border-emerald-500/30 dark:hover:border-emerald-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(16,185,129,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(52,211,153,0.25)]",rawColor:"#10b981"},ocean:{accentText:"text-blue-500 dark:text-blue-400",accentBg:"bg-blue-500/10 dark:bg-blue-400/10",accentBorder:"border-blue-500/20 dark:border-blue-400/15",hoverBorder:"hover:border-blue-500/30 dark:hover:border-blue-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(59,130,246,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(96,165,250,0.25)]",rawColor:"#3b82f6"},neon:{accentText:"text-purple-500 dark:text-purple-400",accentBg:"bg-purple-500/10 dark:bg-purple-400/10",accentBorder:"border-purple-500/20 dark:border-purple-400/15",hoverBorder:"hover:border-purple-500/30 dark:hover:border-purple-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(168,85,247,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(192,132,252,0.25)]",rawColor:"#a855f7"},amber:{accentText:"text-amber-500 dark:text-amber-400",accentBg:"bg-amber-500/10 dark:bg-amber-400/10",accentBorder:"border-amber-500/20 dark:border-amber-400/15",hoverBorder:"hover:border-amber-500/30 dark:hover:border-amber-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(245,158,11,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(245,158,11,0.25)]",rawColor:"#f59e0b"}}),[]),S=x[P]||x.emerald,H=dt[P]?c?dt[P].dark:dt[P].light:c?dt.emerald.dark:dt.emerald.light,[C,X]=h.useState(()=>{if(r)return"2d";try{return window.localStorage?.getItem("tt:heatmap-view")==="3d"?"3d":"2d"}catch{return"2d"}});h.useEffect(()=>{if(!r)try{window.localStorage?.setItem("tt:heatmap-view",C)}catch{}},[C,r]),h.useEffect(()=>{if(C!=="2d")return;const W=f.current;W&&(W.scrollLeft=W.scrollWidth)},[e?.weeks,C]),h.useEffect(()=>{const W=f.current;if(!W)return;const te=()=>{v.current&&(clearTimeout(v.current),v.current=null),g(null)};return W.addEventListener("scroll",te),()=>W.removeEventListener("scroll",te)},[]);const F=e?.week_starts_on==="mon"?"mon":"sun",Y=h.useMemo(()=>{const W=Array.isArray(e?.weeks)?e.weeks:[];if(!W.length)return{weeks:[]};const te=[];for(const ge of W)for(const me of Array.isArray(ge)?ge:[])me?.day&&te.push({day:me.day,conversation_count:me.conversation_count??0,total_tokens:me.total_tokens??0,billable_total_tokens:me.billable_total_tokens??me.total_tokens??0,models:me.models??null});return Kn({dailyRows:te,weeks:Math.max(52,W.length),to:e?.to,weekStartsOn:F})},[e?.to,e?.weeks,F]),B=Y?.weeks||[],Z=h.useMemo(()=>{let W=0,te=0,ge={day:"无数据",value:0},me=0,Ne=0;const Fe=[];B.forEach(fe=>{(Array.isArray(fe)?fe:[]).forEach(he=>{he&&he.day&&Fe.push(he)})}),Fe.sort((fe,he)=>fe.day.localeCompare(he.day)),Fe.forEach(fe=>{const he=Number(fe.value)||0;W+=Number(fe.total_tokens)||0,he>0?(te++,me++,me>Ne&&(Ne=me)):me=0,he>ge.value&&(ge={day:fe.day,value:he})});const Te=Fe.length||365,A=(te/Te*100).toFixed(1);let z="heatmap.3d.modal.ai.eval.default",U="heatmap.3d.modal.ai.title.default";W>=15e6?(U="heatmap.3d.modal.ai.title.peak",z="heatmap.3d.modal.ai.eval.peak"):W>=5e6?(U="heatmap.3d.modal.ai.title.heavy",z="heatmap.3d.modal.ai.eval.heavy"):W>=1e6?(U="heatmap.3d.modal.ai.title.core",z="heatmap.3d.modal.ai.eval.core"):W>=2e4&&(U="heatmap.3d.modal.ai.title.steady",z="heatmap.3d.modal.ai.eval.steady");const q=e?.total_cost_usd,ne=Number(q),ye=q!=null&&(typeof q!="string"||q.trim()!=="")&&Number.isFinite(ne)?ne:W/15e5;return{totalTokens:W,activeDays:te,activeRate:A,maxSingleDay:ge,maxStreak:Ne,aiEvaluationTitleKey:U,aiEvaluationKey:z,totalCostUsd:ye}},[B,e?.total_cost_usd]),xe=h.useMemo(()=>et(Z.totalCostUsd,{currency:l,rate:i}),[Z.totalCostUsd,l,i]),je=F==="mon"?["Mon","Tue","Wed","Thu","Fri","Sat","Sun"].map(W=>p(`heatmap.day.${W.toLowerCase()}`)):["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].map(W=>p(`heatmap.day.${W.toLowerCase()}`)),Me=h.useMemo(()=>bc(B.length,Y?.to,F,I),[Y?.to,B.length,F,I]);if(!B.length)return o.jsx("div",{className:"py-8 text-center text-sm text-oai-gray-500",children:p("heatmap.empty")});const Se=r?10:dc,J=r?2:uc,De=r?22:fc,le=De+B.length*Se+Math.max(0,B.length-1)*J,de=`${De}px repeat(${B.length}, ${Se}px)`;return o.jsxs("div",{ref:d,className:r?"relative":"relative rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 p-5",children:[!r&&o.jsxs("div",{className:"flex items-baseline justify-between mb-3",children:[o.jsx("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:p("heatmap.title")}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("div",{role:"tablist","aria-label":"Heatmap view",className:"flex rounded-md border border-oai-gray-200 dark:border-oai-gray-800 p-0.5 text-[10px]",children:[o.jsx("button",{type:"button",role:"tab","aria-selected":C==="2d",onClick:()=>X("2d"),className:C==="2d"?"px-2 py-0.5 rounded bg-oai-gray-100 text-oai-black dark:bg-oai-gray-800 dark:text-oai-white font-medium":"px-2 py-0.5 rounded text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200",children:p("heatmap.view.2d")}),o.jsx("button",{type:"button",role:"tab","aria-selected":C==="3d",onClick:()=>X("3d"),className:C==="3d"?"px-2 py-0.5 rounded bg-oai-gray-100 text-oai-black dark:bg-oai-gray-800 dark:text-oai-white font-medium":"px-2 py-0.5 rounded text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200",children:p("heatmap.view.3d")})]}),o.jsx("span",{className:"text-xs text-oai-gray-400 dark:text-oai-gray-450",children:n||p("heatmap.legend.utc")})]})]}),C==="3d"&&o.jsxs("div",{onClick:$,className:"cursor-pointer group relative overflow-hidden rounded-lg hover:border-oai-gray-350 dark:hover:border-oai-gray-700 border border-transparent transition-all",title:p("heatmap.3d.hover_tip"),children:[o.jsx(qa,{weeks:B,isDark:c,palette:P}),o.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-oai-gray-900/5 to-transparent pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity flex items-end justify-center pb-2",children:o.jsxs("span",{className:"text-[10px] bg-white/95 dark:bg-oai-gray-900/95 shadow border border-oai-gray-200/60 dark:border-oai-gray-800/80 px-2.5 py-1 rounded-full font-medium text-oai-gray-500 dark:text-oai-gray-400 flex items-center gap-1 transform translate-y-2 group-hover:translate-y-0 transition-transform duration-200",children:[o.jsx(Xr,{size:9}),p("heatmap.3d.hover_tip")]})})]}),C==="2d"&&o.jsx("div",{ref:f,className:"overflow-x-auto overflow-y-hidden heatmap-scroll-thin",children:o.jsxs("div",{style:{minWidth:le},children:[o.jsxs("div",{className:"grid text-[10px] uppercase text-oai-gray-400 dark:text-oai-gray-400 mb-1",style:{gridTemplateColumns:de,columnGap:J},children:[o.jsx("span",{}),Me.map(W=>o.jsx("span",{style:{gridColumnStart:W.index+2},className:"whitespace-nowrap",children:W.label},`${W.label}-${W.index}`))]}),o.jsxs("div",{className:"grid",style:{gridTemplateColumns:de,columnGap:J},children:[o.jsx("div",{className:"grid text-[10px] text-oai-gray-400 dark:text-oai-gray-400 sticky left-0 bg-white dark:bg-oai-gray-900 pr-2",style:{gridTemplateRows:`repeat(7, ${Se}px)`,rowGap:J},children:je.map(W=>o.jsx("span",{className:"leading-none",children:W},W))}),o.jsx("div",{className:"grid",style:{gridAutoFlow:"column",gridTemplateRows:`repeat(7, ${Se}px)`,gap:J},children:B.map((W,te)=>(Array.isArray(W)?W:[]).map((ge,me)=>{if(!ge)return null;const Ne=ge.day||`e-${te}-${me}`,Fe=Number(ge.level)||0,Te=u[Fe]||u[0];return o.jsx("span",{onMouseEnter:A=>G(A,ge),onMouseLeave:V,className:"rounded-[2px] transition-transform hover:scale-125 hover:z-10 cursor-pointer",style:{width:Se,height:Se,background:Te}},Ne)}))})]})]})}),!a&&o.jsxs("div",{className:"flex items-center justify-center gap-2 mt-3",children:[o.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-400",children:p("heatmap.legend.less")}),o.jsx("div",{className:"flex gap-0.5",children:u.map((W,te)=>o.jsx("span",{className:"rounded-[1px]",style:{width:10,height:10,background:W}},te))}),o.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-400",children:p("heatmap.legend.more")})]}),w&&o.jsx("div",{onAnimationEnd:T,onClick:W=>{W.target===W.currentTarget&&E()},className:`fixed inset-0 z-50 flex items-center justify-center p-3 md:p-6 backdrop-blur-md bg-black/15 dark:bg-black/40 ${k?"animate-tt-fade-out":"animate-tt-fade-in"}`,children:o.jsxs("div",{className:`relative w-full max-w-6xl h-[88vh] backdrop-blur-2xl bg-white/90 dark:bg-oai-gray-900/90 border border-oai-gray-200/50 dark:border-white/10 shadow-2xl rounded-2xl flex flex-col md:flex-row overflow-hidden ${k?"animate-tt-modal-exit":"animate-tt-modal"}`,children:[o.jsx("button",{type:"button",onClick:E,className:"absolute top-4 right-4 z-50 p-2 rounded-full border border-oai-gray-200/60 dark:border-oai-gray-800/60 bg-white/50 dark:bg-oai-gray-900/50 text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-900 dark:hover:text-white hover:rotate-90 hover:scale-105 active:scale-95 transition-all duration-300",children:o.jsx(sa,{size:16})}),o.jsxs("div",{className:"w-full md:w-[340px] border-b md:border-b-0 md:border-r border-zinc-200/50 dark:border-zinc-800/40 p-5 md:p-6 flex flex-col gap-6 overflow-y-auto backdrop-blur-md bg-zinc-50/50 dark:bg-zinc-950/50",children:[o.jsxs("div",{children:[o.jsxs("div",{className:"flex items-center gap-1.5 select-none",children:[o.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[o.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:S.rawColor}}),o.jsx("span",{className:"relative inline-flex rounded-full h-1.5 w-1.5",style:{backgroundColor:S.rawColor}})]}),o.jsx("span",{className:"text-[9px] font-extrabold uppercase tracking-widest font-mono text-zinc-400 dark:text-zinc-500",children:"3D Insight"})]}),o.jsx("h4",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight leading-none mt-2 select-none",children:p("heatmap.3d.modal.title")}),o.jsx("p",{className:"text-[11px] leading-relaxed text-zinc-400 dark:text-zinc-500 mt-2 font-normal select-none",children:p("heatmap.3d.modal.desc")})]}),o.jsxs("div",{className:"grid grid-cols-2 gap-x-5 gap-y-5 border-y border-zinc-200/50 dark:border-zinc-800/50 py-5 select-none",children:[o.jsxs("div",{className:"flex flex-col gap-1 relative group cursor-help",children:[o.jsx("div",{className:"absolute left-0 bottom-full mb-2 pointer-events-none opacity-0 translate-y-1 group-hover:opacity-100 group-hover:translate-y-0 transition-all duration-200 z-50",children:o.jsxs("div",{className:"bg-white dark:bg-zinc-950 text-zinc-900 dark:text-zinc-50 text-[10px] font-semibold font-mono rounded-lg px-2.5 py-1.5 shadow-xl border border-zinc-200 dark:border-zinc-800/80 whitespace-nowrap flex flex-col",children:[o.jsx("span",{className:"text-[9px] text-zinc-400 dark:text-zinc-500",children:p("heatmap.3d.modal.stats.precision_total_tokens")}),o.jsxs("span",{className:"mt-0.5 font-bold text-zinc-900 dark:text-zinc-50",children:[Z.totalTokens.toLocaleString()," Tokens"]})]})}),o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.total_tokens")}),o.jsxs("div",{className:"flex items-baseline gap-1.5",children:[o.jsx("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:Xa(Z.totalTokens)}),o.jsx("div",{className:"opacity-30 group-hover:opacity-60 transition-opacity",children:o.jsx("svg",{width:"24",height:"10",viewBox:"0 0 24 10",fill:"none",children:o.jsx("path",{d:"M1 9C3 7 5 7 7 4C9 1 11 0 13 2C15 4 17 0 23 0",stroke:S.rawColor,strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]}),o.jsxs("div",{className:"flex flex-col gap-1 group cursor-default",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.estimated_cost")}),o.jsx("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:xe})]}),o.jsxs("div",{className:"flex flex-col gap-1 group cursor-default",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.active_rate_days")}),o.jsxs("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:[Z.activeRate,"% ",o.jsxs("span",{className:"text-[10px] font-bold text-zinc-400 dark:text-zinc-500 font-mono",children:["(",Z.activeDays,"D)"]})]})]}),o.jsxs("div",{className:"flex flex-col gap-1 group cursor-default",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.max_streak")}),o.jsxs("span",{className:"text-xl font-black text-amber-500 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:[Z.maxStreak," ",o.jsx("span",{className:"text-[10px] font-bold text-amber-500/80 font-mono",children:p("heatmap.3d.modal.stats.days_suffix")})]})]}),o.jsxs("div",{className:"flex flex-col gap-1 col-span-2 relative group cursor-help",children:[o.jsx("div",{className:"absolute left-0 bottom-full mb-2 pointer-events-none opacity-0 translate-y-1 group-hover:opacity-100 group-hover:translate-y-0 transition-all duration-200 z-50",children:o.jsxs("div",{className:"bg-white dark:bg-zinc-950 text-zinc-900 dark:text-zinc-50 text-[10px] font-semibold font-mono rounded-lg px-2.5 py-1.5 shadow-xl border border-zinc-200 dark:border-zinc-800/80 whitespace-nowrap flex flex-col",children:[o.jsx("span",{className:"text-[9px] text-zinc-400 dark:text-zinc-500",children:p("heatmap.3d.modal.stats.precision_peak_value")}),o.jsxs("span",{className:"mt-0.5 font-bold text-zinc-900 dark:text-zinc-50",children:[Z.maxSingleDay.value>0?Z.maxSingleDay.value.toLocaleString():p("heatmap.3d.modal.stats.no_data")," conversations"]}),o.jsx("span",{className:"text-[8px] text-zinc-400 dark:text-zinc-500 mt-0.5",children:Z.maxSingleDay.day!=="无数据"?Z.maxSingleDay.day:p("heatmap.3d.modal.stats.no_data")})]})}),o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.peak_day")}),o.jsxs("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:[Z.maxSingleDay.value>0?Xa(Z.maxSingleDay.value):p("heatmap.3d.modal.stats.no_data")," ",o.jsxs("span",{className:"text-[10px] font-bold text-zinc-400 dark:text-zinc-500 font-mono",children:["(",Z.maxSingleDay.day!=="无数据"?Z.maxSingleDay.day:p("heatmap.3d.modal.stats.no_data"),")"]})]})]})]}),o.jsxs("div",{className:"flex flex-col gap-2.5 py-1",children:[o.jsxs("div",{className:"flex items-center gap-1.5 select-none",children:[o.jsx(Gr,{size:11,style:{color:S.rawColor}}),o.jsx("span",{className:"text-[9px] font-extrabold uppercase tracking-widest font-mono",style:{color:S.rawColor},children:p(Z.aiEvaluationTitleKey)})]}),o.jsxs("div",{className:"pl-3.5 border-l-2 relative transition-all duration-300 group",style:{borderColor:S.rawColor},children:[o.jsx("div",{className:"absolute inset-y-0 left-0 w-[3px] blur-[2px] opacity-15 pointer-events-none rounded-full",style:{backgroundColor:S.rawColor}}),o.jsx("p",{className:"text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-400 font-normal",children:p(Z.aiEvaluationKey)})]})]}),o.jsx("div",{className:"mt-auto border-t border-zinc-200/50 dark:border-zinc-800/50 pt-4 select-none",children:o.jsxs("div",{className:"flex flex-col gap-2",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.legend.title")}),o.jsx("span",{className:"text-[10px] font-medium text-zinc-500 dark:text-zinc-400",children:p(`heatmap.3d.modal.palette.${P}`)})]}),o.jsx("div",{className:"flex gap-1",children:H.map((W,te)=>o.jsx("div",{className:"flex-1 h-1 rounded-[2px]",style:{backgroundColor:W},title:`Level ${te}`},te))})]})})]}),o.jsxs("div",{className:"flex-1 h-full relative flex items-center justify-center overflow-hidden p-4",children:[o.jsx("div",{className:"absolute top-1/4 left-1/3 w-96 h-96 rounded-full blur-[130px] pointer-events-none -translate-x-1/2 -translate-y-1/2 transition-all duration-500",style:{backgroundColor:S.rawColor+"15"}}),o.jsx("div",{className:"absolute bottom-1/4 right-1/3 w-80 h-80 rounded-full blur-[120px] pointer-events-none translate-x-1/2 translate-y-1/2 bg-purple-500/[0.04] dark:bg-purple-500/[0.08]"}),o.jsxs("div",{className:"absolute top-4 left-1/2 -translate-x-1/2 flex items-center gap-3 p-1.5 backdrop-blur-md bg-white/70 dark:bg-oai-gray-900/75 border border-oai-gray-200/60 dark:border-oai-gray-800/80 rounded-full shadow-lg z-30 select-none",children:[o.jsx("div",{className:"flex items-center gap-1.5 px-2",children:Object.keys(x).map(W=>{const te=P===W;return o.jsx("button",{type:"button",onClick:()=>D(W),title:p(`heatmap.3d.modal.palette.${W}`),className:`w-3.5 h-3.5 rounded-full transition-all duration-200 relative hover:scale-125 ${W==="emerald"?"bg-[#10b981]":W==="ocean"?"bg-[#3b82f6]":W==="neon"?"bg-[#a855f7]":"bg-[#f59e0b]"}`,children:te&&o.jsx("span",{className:"absolute inset-0 rounded-full ring-2 ring-offset-1 ring-offset-white dark:ring-offset-oai-gray-900 ring-oai-gray-900 dark:ring-white scale-110"})},W)})}),o.jsx("div",{className:"w-[1px] h-4 bg-oai-gray-200 dark:bg-oai-gray-800"}),o.jsxs("div",{className:"flex items-center gap-1 pr-1",children:[o.jsx("button",{type:"button",onClick:()=>{const W=!_;j(W),L.current&&L.current.toggleAutoRotate(W)},title:_?p("heatmap.3d.modal.control.pause"):p("heatmap.3d.modal.control.play"),className:`p-1.5 rounded-full transition-all duration-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 ${_?S.accentText:"text-oai-gray-400 hover:text-oai-gray-600 dark:hover:text-oai-gray-250"}`,children:_?o.jsx(Wi,{size:12}):o.jsx(Ai,{size:12})}),o.jsx("button",{type:"button",onClick:()=>{j(!1),L.current&&L.current.reset()},title:p("heatmap.3d.modal.control.reset"),className:"p-1.5 rounded-full text-oai-gray-400 hover:text-oai-gray-600 dark:hover:text-oai-gray-250 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-all duration-200",children:o.jsx(Ri,{size:12})})]})]}),o.jsx(qa,{weeks:B,isDark:c,interactive:!0,palette:P,autoRotateInit:_,onResetViewRef:L}),o.jsxs("div",{className:"absolute bottom-4 right-4 flex items-center gap-1.5 text-[9px] font-bold text-oai-gray-400 bg-white/80 dark:bg-oai-gray-900/80 border border-oai-gray-200/50 dark:border-oai-gray-800/80 rounded-md px-2.5 py-1.5 select-none pointer-events-none backdrop-blur-md shadow-sm",children:[o.jsx(ca,{size:10,className:S.accentText}),o.jsx("span",{children:p("heatmap.3d.modal.footer.tip")})]})]})]})}),m&&!w&&typeof document<"u"&&ai.createPortal(o.jsxs("div",{className:"fixed z-[9999] w-0 h-0 transition-all duration-100 ease-out pointer-events-none",style:{left:`${y.x}px`,top:`${y.y}px`},children:[o.jsxs("div",{className:"absolute left-0 bottom-[10px] backdrop-blur-md bg-white/95 dark:bg-oai-gray-900/95 border border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-xl rounded-xl p-3.5 max-w-[280px] min-w-[200px] flex flex-col gap-2 animate-in fade-in zoom-in-95 duration-100",style:{transform:`translateX(calc(-50% + ${y.shiftX}px))`},children:[o.jsxs("div",{className:"flex items-center justify-between border-b border-oai-gray-100 dark:border-oai-gray-800/80 pb-1.5",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400",children:m.day}),(()=>{const W=m.level===0?c?"#9ca3af":"#6b7280":u[m.level];return o.jsxs("span",{className:"text-[10px] px-2 py-0.5 rounded-full font-medium",style:{backgroundColor:W+"22",color:W,border:`1px solid ${W}44`},children:["Level ",m.level]})})()]}),o.jsxs("div",{className:"flex flex-col gap-2",children:[o.jsxs("div",{className:"flex flex-col gap-0.5",children:[o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-lg font-bold text-oai-gray-900 dark:text-white leading-none tabular-nums",children:Number(m.value??0).toLocaleString()}),o.jsx("span",{className:"text-[10px] text-oai-gray-400 uppercase tracking-wider font-semibold",children:"Conversations"})]}),o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400 leading-none tabular-nums",children:Number(m.total_tokens??0).toLocaleString()}),o.jsx("span",{className:"text-[9px] text-oai-gray-400 uppercase tracking-wider",children:"tokens"})]})]}),m.models&&Object.keys(m.models).length>0?o.jsxs("div",{className:"mt-1.5 border-t border-oai-gray-100 dark:border-oai-gray-800/60 pt-2 flex flex-col gap-1.5",children:[o.jsx("div",{className:"text-[10px] font-semibold text-oai-gray-400 dark:text-oai-gray-500 uppercase tracking-wider",children:"Model Breakdown"}),o.jsx("div",{className:"flex flex-col gap-2 max-h-[150px] overflow-y-auto pr-1.5 oai-scrollbar",children:Object.entries(m.models).map(([W,te])=>({name:W,val:Number(te)})).sort((W,te)=>te.val-W.val).map(({name:W,val:te})=>{const ge=Number(m.total_tokens??m.value)||1,me=Math.round(te/ge*100);return o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsxs("div",{className:"flex items-center justify-between text-[11px] gap-3",children:[o.jsx("span",{className:"font-medium text-oai-gray-750 dark:text-oai-gray-200 truncate max-w-[120px]",title:W,children:W}),o.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[o.jsx("span",{className:"font-mono text-oai-gray-900 dark:text-oai-gray-100 font-semibold",children:te.toLocaleString()}),o.jsxs("span",{className:"text-[9px] text-oai-gray-450 dark:text-oai-gray-500 min-w-[28px] text-right font-medium",children:[me,"%"]})]})]}),o.jsx("div",{className:"w-full h-1 bg-oai-gray-100 dark:bg-oai-gray-800/85 rounded-full overflow-hidden",children:o.jsx("div",{className:"h-full rounded-full transition-all duration-300",style:{width:`${me}%`,backgroundColor:u[4],boxShadow:`0 0 4px ${u[4]}55`}})})]},W)})})]}):o.jsx("p",{className:"text-[11px] text-oai-gray-600 dark:text-oai-gray-300 leading-relaxed font-normal mt-1 border-t border-dashed border-oai-gray-100 dark:border-oai-gray-800/60 pt-1.5",children:io(m.level,m.total_tokens??m.value)})]})]}),o.jsx("div",{className:"absolute bottom-[6px] left-0 -translate-x-1/2 w-2.5 h-2.5 rotate-45 bg-white dark:bg-oai-gray-900 border-r border-b border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-sm",style:{marginBottom:"1px"}})]}),document.body),o.jsx("style",{children:`
|
|
1
|
+
import{c as an,i as qs,f as Ar,a as Fr,J as Xs,u as Rr,m as Gs,r as h,M as Ir,b as Ks,d as Qs,e as Wn,j as o,L as Js,g as Zs,h as ei,k as ti,l as ni,n as Lt,o as ht,p,q as Lr,X as sa,s as ai,R,t as ia,C as zr,P as la,B as Gn,v as Yr,w as Br,A as Hr,x as Xe,y as ri,z as oi,D as si,E as ii,F as li}from"./main-CCPcJ7ti.js";import{g as ci,i as zt,b as Kn,c as gn,a as rn,d as en,f as mt,e as Ur,h as Vr,j as di,k as ui,l as fi,m as mi}from"./mock-data-DSiJ-9lr.js";import{g as hi,a as Mn,b as gi,c as yi,d as qr,e as En,f as pi,h as bi,L as xi,i as ki,u as wi,t as Fa}from"./limitDisplay-CXlkWhjp.js";import{u as vi}from"./use-limits-display-prefs-Dgd-bQBC.js";import{u as Nt,I as ca}from"./useCurrency-BJRU0syn.js";import{t as Le,f as et,a as Ae,b as Qe}from"./format-4chvNBjF.js";import{u as Ni,D as _i,a as Mi,b as ji,c as Si,d as Ci,e as Di,P as Qn,f as Jn,g as Zn,h as ea,i as ta,L as Ti}from"./PopoverPopup-CJf61ahu.js";import{C as on}from"./Card-LPizs_gs.js";import{S as Pi}from"./Select-BLGoaqgw.js";import{F as bt}from"./FadeIn-B8aDegoD.js";import"./SelectItemText-Bt02Fgwf.js";const Oi=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],Xr=an("maximize-2",Oi);const $i=[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]],Wi=an("pause",$i);const Ei=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],Ai=an("play",Ei);const Fi=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],Ri=an("rotate-ccw",Fi);const Ii=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Gr=an("terminal",Ii);function Li(...e){const t=!Array.isArray(e[0]),n=t?0:-1,a=e[0+n],r=e[1+n],s=e[2+n],l=e[3+n],i=qs(r,s,l);return t?i(a):i}function zi(e,t,n={}){const a=e.get();let r=null,s=a,l;const i=typeof a=="string"?a.replace(/[\d.-]/g,""):void 0,c=()=>{r&&(r.stop(),r=null),e.animation=void 0},u=()=>{const d=Ra(e.get()),m=Ra(s);if(d===m){c();return}const g=r?r.getGeneratorVelocity():e.getVelocity();c(),r=new Xs({keyframes:[d,m],velocity:g,type:"spring",restDelta:.001,restSpeed:.01,...n,onUpdate:l})},f=()=>{u(),e.animation=r??void 0,e.events.animationStart?.notify(),r?.then(()=>{e.animation=void 0,e.events.animationComplete?.notify()})};if(e.attach((d,m)=>{s=d,l=g=>m(An(g,i)),Ar.postRender(f)},c),Fr(t)){let d=n.skipInitialAnimation===!0;const m=t.on("change",y=>{d?(d=!1,e.jump(An(y,i),!1)):e.set(An(y,i))}),g=e.on("destroy",m);return()=>{m(),g()}}return c}function An(e,t){return t?e+t:e}function Ra(e){return typeof e=="number"?e:parseFloat(e)}function da(e){const t=Rr(()=>Gs(e)),{isStatic:n}=h.useContext(Ir);if(n){const[,a]=h.useState(e);h.useEffect(()=>t.on("change",a),[])}return t}function Kr(e,t){const n=da(t()),a=()=>n.set(t());return a(),Ks(()=>{const r=()=>Ar.preRender(a,!1,!0),s=e.map(l=>l.on("change",r));return()=>{s.forEach(l=>l()),Qs(a)}}),n}function Yi(e){Wn.current=[],e();const t=Kr(Wn.current,e);return Wn.current=void 0,t}function Qr(e,t,n,a){if(typeof e=="function")return Yi(e);const s=typeof t=="function"?t:Li(t,n,a),l=Array.isArray(e)?Ia(e,s):Ia([e],([c])=>s(c)),i=Array.isArray(e)?void 0:e.accelerate;return i&&!i.isTransformed&&typeof t!="function"&&Array.isArray(n)&&a?.clamp!==!1&&(l.accelerate={...i,times:t,keyframes:n,isTransformed:!0}),l}function Ia(e,t){const n=Rr(()=>[]);return Kr(e,()=>{n.length=0;const a=e.length;for(let r=0;r<a;r++)n[r]=e[r].get();return t(n)})}function Bi(e,t={}){const{isStatic:n}=h.useContext(Ir),a=()=>Fr(e)?e.get():e;if(n)return Qr(a);const r=da(a());return h.useInsertionEffect(()=>zi(r,e,t),[r,JSON.stringify(t)]),r}function Hi(e,t={}){return Bi(e,{type:"spring",...t})}function Ui(){return o.jsxs(Js,{to:"/landing",className:"flex items-center gap-2.5 no-underline hover:opacity-80 transition-opacity",children:[o.jsx("img",{src:"/app-icon.png",alt:"Token Tracker",width:28,height:28,className:"rounded-md"}),o.jsx("span",{className:"text-base font-semibold text-oai-black dark:text-oai-white leading-tight",children:"Token Tracker"})]})}function Vi({children:e,header:t,footer:n,className:a="",hideHeader:r=!1,hideFooter:s=!1,bare:l=!1}){return l?o.jsxs("div",{className:`flex flex-col flex-1 min-h-0 ${a}`,children:[o.jsx("main",{className:"flex-1 px-6 py-6",children:e}),!s&&n&&o.jsx("footer",{className:"border-t border-oai-gray-200 dark:border-oai-gray-800 px-6 py-4 mt-auto transition-colors duration-200",children:n})]}):o.jsxs("div",{className:`min-h-screen bg-oai-white dark:bg-oai-gray-950 text-oai-black dark:text-oai-white font-sans flex flex-col transition-colors duration-200 ${a}`,children:[!r&&o.jsxs("header",{className:"border-b border-oai-gray-200 dark:border-oai-gray-800 px-6 py-4 flex items-center justify-between transition-colors duration-200",children:[o.jsx(Ui,{}),o.jsx("div",{className:"flex-1 flex justify-center",children:t})]}),o.jsx("main",{className:"flex-1 px-6 py-6",children:e}),!s&&n&&o.jsx("footer",{className:"border-t border-oai-gray-200 dark:border-oai-gray-800 px-6 py-4 mt-auto transition-colors duration-200",children:n})]})}function qi({children:e,variant:t="info",size:n="md",className:a=""}){const r="inline-flex items-center font-medium",s={success:"bg-oai-brand-100 dark:bg-oai-brand-900/30 text-oai-brand-700 dark:text-oai-brand-400 rounded-full",warning:"bg-oai-amber-50 dark:bg-oai-amber-900/30 text-oai-amber-dark dark:text-oai-amber-400 rounded-full",error:"bg-red-50 dark:bg-red-900/30 text-red-600 dark:text-red-400 rounded-full",info:"bg-oai-gray-100 dark:bg-oai-gray-800 text-oai-gray-600 dark:text-oai-gray-300 rounded-full",secondary:"bg-oai-gray-100 dark:bg-oai-gray-800 text-oai-gray-500 dark:text-oai-gray-300 rounded-md"},l={sm:"px-2 py-0.5 text-xs",md:"px-2.5 py-1 text-sm"},i=`${r} ${s[t]} ${l[n]} ${a}`.trim();return o.jsx("span",{className:i,children:e})}const Xi=h.forwardRef(function(t,n){const{render:a,className:r,disabled:s=!1,nativeButton:l=!0,...i}=t,{store:c}=Ni(),u=c.useState("open");function f(y){u&&c.setOpen(!1,ti(ni,y.nativeEvent))}const{getButtonProps:d,buttonRef:m}=Zs({disabled:s,native:l}),g=h.useMemo(()=>({disabled:s}),[s]);return ei("button",t,{state:g,ref:[n,m],props:[{onClick:f},i,d]})});var Gi={};function Ki(e,t){return e==="."?{width:"0.34ch",justifyContent:"center",marginInline:"-0.04ch"}:e===","?{width:"0.08ch",justifyContent:"center",marginInline:"-0.30ch"}:{width:"0.72ch",justifyContent:"flex-start",paddingLeft:"0.04ch",height:t}}function Qi({mv:e,digit:t,height:n}){const a=Qr(e,r=>{const s=(r%10+10)%10,l=(10+t-s)%10;let i=l*n;return l>5&&(i-=10*n),i});return o.jsx(ht.span,{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",y:a},children:t})}function Ji(e){const t=Math.round(e),n=1e-9*Math.max(1,Math.abs(e));return Math.abs(e-t)<n?t:e}function Zi(e,t){const n=e/t;return Math.floor(Ji(n))}function el(e){const t=String(e??""),n=Array.from(t),a=n.indexOf(".");let r=n.filter((i,c)=>/\d/.test(i)&&(a===-1||c<a)).length,s=0,l=!1;return n.map(i=>{if(!/\d/.test(i))return i==="."&&(l=!0),i;if(!l){const c=10**Math.max(r-1,0);return r-=1,c}return s+=1,10**-s})}function tl({place:e,value:t,height:n,digitStyle:a,shouldReduceMotion:r,isLed:s}){if(typeof e!="number"){const u=Ki(e,n);return o.jsx("span",{"data-counter-token":"static",className:`relative inline-flex items-center justify-center${s?" tt-lcd-sep":""}`,style:{height:n,...u,...a},children:e})}const l=Zi(t,e),i=da(0),c=Hi(i,{stiffness:220,damping:26,mass:.8});return h.useEffect(()=>{i.set(l)},[i,l]),r?o.jsx("span",{"data-counter-token":"digit",className:`relative inline-flex items-center justify-center overflow-hidden${s?" tt-lcd-cell":""}`,style:{height:n,position:"relative",width:"0.9ch",fontVariantNumeric:"tabular-nums",...a},children:Math.abs(l)%10}):o.jsx("span",{"data-counter-token":"digit",className:`relative inline-flex overflow-hidden${s?" tt-lcd-cell":""}`,style:{height:n,position:"relative",width:"0.9ch",fontVariantNumeric:"tabular-nums",...a},children:Array.from({length:10},(u,f)=>o.jsx(Qi,{mv:c,digit:f,height:n},f))})}function nl({value:e,displayValue:t,fontSize:n=72,padding:a=0,places:r,gap:s=6,borderRadius:l=4,horizontalPadding:i=0,textColor:c="inherit",fontWeight:u="inherit",containerStyle:f,counterStyle:d,digitStyle:m,gradientHeight:g=14,gradientFrom:y="rgba(255,255,255,0.95)",gradientTo:b="rgba(255,255,255,0)",topGradientStyle:v,bottomGradientStyle:w,variant:M="default"}){const k=M==="led",N=String(t??e??""),_=h.useMemo(()=>Array.isArray(r)&&r.length?r:el(N),[r,N]),j=typeof navigator<"u"&&/jsdom/i.test(navigator.userAgent||"")||typeof process<"u"&&Gi?.VITEST==="true",L=Lt()||j,P=Number.isFinite(Number(e))?Math.abs(Number(e)):0,D=n+a;return L?o.jsx("span",{"data-counter-root":"true",className:k?"tt-lcd":void 0,style:{display:"inline-flex",alignItems:"center",color:c,fontSize:n,fontWeight:u,lineHeight:1,...f,...d},children:k?o.jsx("span",{className:"tt-lcd-cell tt-lcd-cell--static",children:N}):N}):o.jsxs("span",{"data-counter-root":"true",style:{position:"relative",display:"inline-block",...f},children:[o.jsx("span",{className:k?"tt-lcd":void 0,style:{fontSize:n,...k?null:{display:"flex",gap:s,borderRadius:l,paddingLeft:i,paddingRight:i,color:c},overflow:"hidden",lineHeight:1,fontWeight:u,...d},children:_.map((I,G)=>o.jsx(tl,{place:I,value:P,height:D,digitStyle:m,shouldReduceMotion:L,isLed:k},`${String(I)}-${G}`))}),o.jsxs("span",{style:{pointerEvents:"none",position:"absolute",inset:0,display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[o.jsx("span",{style:v??{height:g,background:`linear-gradient(to bottom, ${y}, ${b})`}}),o.jsx("span",{style:w??{height:g,background:`linear-gradient(to top, ${y}, ${b})`}})]})]})}var al={};const rl=new Set([",","."," "]),ol=typeof navigator<"u"&&/jsdom/i.test(navigator.userAgent||"")||typeof process<"u"&&al?.VITEST==="true";function sl({char:e,reduceMotion:t,index:n}){const[a,r]=h.useState(t?e:""),[s,l]=h.useState(!1),i=h.useRef(e),c=h.useRef(!1);return h.useEffect(()=>{if(!c.current){if(c.current=!0,i.current=e,t){r(e);return}const d=Math.min(n*45,520),m=setTimeout(()=>l(!0),d),g=setTimeout(()=>r(e),d+130),y=setTimeout(()=>l(!1),d+300);return()=>{clearTimeout(m),clearTimeout(g),clearTimeout(y)}}if(e===i.current)return;if(i.current=e,t){r(e);return}l(!0);const u=setTimeout(()=>r(e),130),f=setTimeout(()=>l(!1),300);return()=>{clearTimeout(u),clearTimeout(f)}},[e,t,n]),o.jsx("span",{className:`tt-flap${s?" tt-flap--flip":""}`,"aria-hidden":"true",children:o.jsx("span",{className:"tt-flap__glyph",children:a})})}function il({value:e,fontSize:t=56,className:n=""}){const a=Lt()||ol,r=String(e??""),s=Array.from(r);return o.jsx("span",{className:`tt-flaprow ${n}`,style:{fontSize:`clamp(30px, 9cqi, ${t}px)`},role:"text","aria-label":r,children:s.map((l,i)=>rl.has(l)?o.jsx("span",{className:"tt-flap-sep","aria-hidden":"true",children:l},i):o.jsx(sl,{char:l,reduceMotion:a,index:i},i))})}function ll({baseUrl:e,accessToken:t,guestAllowed:n=!1,weeks:a=52,weekStartsOn:r="sun",cacheKey:s,timeZone:l,tzOffsetMinutes:i,now:c}={}){const u=h.useMemo(()=>ci({weeks:a,weekStartsOn:r,now:c}),[c,a,r]),[f,d]=h.useState([]),[m,g]=h.useState(null),[y,b]=h.useState("edge"),[v,w]=h.useState(!1),[M,k]=h.useState(null),N=zt(),_=!n,j=h.useMemo(()=>{if(!s)return null;const V=rn({timeZone:l,offsetMinutes:i});return`tokentracker.heatmap.${s}.${a}.${r}.${V}`},[s,l,i,a,r]),L=h.useCallback(()=>{if(!j||typeof window>"u")return null;try{const V=window.localStorage.getItem(j);if(!V)return null;const $=JSON.parse(V);return!$||!$.heatmap?null:$}catch{return null}},[j]),P=h.useCallback(V=>{if(!(!j||typeof window>"u"))try{window.localStorage.setItem(j,JSON.stringify(V))}catch{}},[j]),D=h.useCallback(()=>{if(!(!j||typeof window>"u"))try{window.localStorage.removeItem(j)}catch{}},[j]),I=h.useCallback(async()=>{w(!0),k(null);try{try{const T=await hi({baseUrl:e,accessToken:t,weeks:a,to:u.to,weekStartsOn:r,timeZone:l,tzOffsetMinutes:i}),x=Array.isArray(T?.weeks)?T.weeks:[];if(!x.length&&_){const H=L();if(H?.heatmap){g(H.heatmap),d(H.daily||[]),b("cache");return}}if(!x.some(H=>(Array.isArray(H)?H:[]).some(C=>C&&Number.isFinite(Number(C.level))))&&x.length){const H=[];for(const X of x)for(const F of Array.isArray(X)?X:[])F?.day&&H.push({day:F.day,conversation_count:F.conversation_count??0,total_tokens:F.total_tokens??F.value??0,billable_total_tokens:F.billable_total_tokens??F.value??F.total_tokens??0});const C=Kn({dailyRows:H,weeks:a,to:T?.to||u.to,weekStartsOn:r});d(H),g({...C,week_starts_on:r,active_days:H.filter(X=>Number(X?.billable_total_tokens??X?.total_tokens)>0).length,streak_days:gn({dailyRows:H,to:T?.to||u.to})}),b("client"),_?P({heatmap:{...C,week_starts_on:r,active_days:H.filter(X=>Number(X?.billable_total_tokens??X?.total_tokens)>0).length,streak_days:gn({dailyRows:H,to:T?.to||u.to})},daily:H,fetchedAt:new Date().toISOString()}):D();return}g(T||null),d([]),b("edge"),T&&_?P({heatmap:T,daily:[],fetchedAt:new Date().toISOString()}):_||D();return}catch(T){const x=T,S=x?.status??x?.statusCode;if(S===401||S===403)throw T}const V=await Mn({baseUrl:e,accessToken:t,from:u.from,to:u.to,timeZone:l,tzOffsetMinutes:i}),$=Array.isArray(V?.data)?V.data:[];d($);const E=Kn({dailyRows:$,weeks:a,to:u.to,weekStartsOn:r});g({...E,week_starts_on:r,active_days:$.filter(T=>Number(T?.billable_total_tokens??T?.total_tokens)>0).length,streak_days:gn({dailyRows:$,to:u.to})}),b("client"),_?P({heatmap:{...E,week_starts_on:r,active_days:$.filter(T=>Number(T?.billable_total_tokens??T?.total_tokens)>0).length,streak_days:gn({dailyRows:$,to:u.to})},daily:$,fetchedAt:new Date().toISOString()}):D()}catch(V){if(_){const $=L();if($?.heatmap)g($.heatmap),d($.daily||[]),b("cache"),k(null);else{const E=V;k(E?.message||String(E)),d([]),g(null),b("edge")}}else{const $=V;k($?.message||String($)),d([]),g(null),b("edge")}}finally{w(!1)}},[t,e,N,n,_,u.from,u.to,L,l,i,r,a,D,P]);return h.useEffect(()=>{if(!_)D(),d([]),k(null),g(null),b("edge");else{const V=L();V?.heatmap&&(g(V.heatmap),d(V.daily||[]),b("cache"))}I()},[t,N,L,I,n,_,D]),{range:u,daily:f,heatmap:m,source:N?"mock":y==="client"?"edge":y,loading:v,error:M,refresh:I}}function cl({baseUrl:e,accessToken:t,limit:n=3,from:a,to:r,source:s,timeZone:l,tzOffsetMinutes:i}={}){const[c,u]=h.useState([]),[f,d]=h.useState(!1),[m,g]=h.useState(null),y=h.useCallback(async()=>{d(!0),g(null);try{const b=await gi({baseUrl:e,accessToken:t,limit:n,from:a,to:r,source:s,timeZone:l,tzOffsetMinutes:i});u(Array.isArray(b?.entries)?b.entries:[])}catch(b){const v=b?.message||String(b);g(v),u([])}finally{d(!1)}},[t,e,a,n,s,l,r,i]);return h.useEffect(()=>{y()},[y]),{entries:c,loading:f,error:m,refresh:y}}const dl=24;function Jr({baseUrl:e,accessToken:t,guestAllowed:n=!1,period:a,from:r,to:s,months:l=dl,cacheKey:i,timeZone:c,tzOffsetMinutes:u,now:f,sharedRows:d,sharedRange:m}={}){const[g,y]=h.useState([]),[b,v]=h.useState(()=>({from:r,to:s})),[w,M]=h.useState("edge"),[k,N]=h.useState(null),[_,j]=h.useState(!1),[L,P]=h.useState(null),D=zt(),I=!n&&!D,G=Array.isArray(d),V=m?.from||r,$=m?.to||s,E=h.useMemo(()=>a==="day"||a==="24h"?"hourly":a==="total"?"monthly":"daily",[a]),T=(()=>{if(!i)return null;const F=ul(e)||"default",Y=rn({timeZone:c,offsetMinutes:u});if(E==="hourly"){const Z=a==="24h"?`${r||""}.${s||""}`:s||r||"day";return`tokentracker.trend.${i}.${F}.hourly.${Z}.${Y}`}if(E==="monthly")return`tokentracker.trend.${i}.${F}.monthly.${l}.${s||"today"}.${Y}`;const B=`${r||""}.${s||""}`;return`tokentracker.trend.${i}.${F}.daily.${B}.${Y}`})(),x=h.useCallback(()=>{if(!T||typeof window>"u")return null;try{const F=window.localStorage.getItem(T);if(!F)return null;const Y=JSON.parse(F);return!Y||!Array.isArray(Y.rows)?null:Y}catch{return null}},[T]),S=h.useCallback(F=>{if(!(!T||typeof window>"u"))try{window.localStorage.setItem(T,JSON.stringify(F))}catch{}},[T]),H=h.useCallback(()=>{if(!(!T||typeof window>"u"))try{window.localStorage.removeItem(T)}catch{}},[T]),C=h.useCallback(async()=>{if(G){y(Array.isArray(d)?d:[]),v({from:V,to:$}),M("shared"),N(null),j(!1),P(null);return}j(!0),P(null);try{let F;E==="hourly"?F=await fl({baseUrl:e,accessToken:t,from:r,to:s,period:a,timeZone:c,tzOffsetMinutes:u,now:f}):E==="monthly"?F=await yi({baseUrl:e,accessToken:t,months:l,to:s,timeZone:c,tzOffsetMinutes:u}):F=await Mn({baseUrl:e,accessToken:t,from:r,to:s,timeZone:c,tzOffsetMinutes:u});const Y=F?.from||r||F?.day||null,B=F?.to||s||F?.day||null;let Z=Array.isArray(F?.data)?F.data:[];E==="daily"?Z=Fn(Z,Y||r,B||s,{timeZone:c,offsetMinutes:u,now:f}):E==="hourly"?Z=bn(Z,Y||r||F?.day,B||s,{period:a,timeZone:c,offsetMinutes:u,now:f}):E==="monthly"&&(Z=Rn(Z,{timeZone:c,offsetMinutes:u,now:f}));const xe=new Date().toISOString();y(Z),v({from:Y,to:B}),M("edge"),N(xe),I?S({rows:Z,from:Y,to:B,mode:E,fetchedAt:xe}):H()}catch(F){if(I){const Y=x();if(Y?.rows){let B=E==="daily"?Fn(Y.rows||[],Y.from||r,Y.to||s,{timeZone:c,offsetMinutes:u,now:f}):E==="hourly"?bn(Y.rows||[],Y.from||r||Y.day||s,Y.to||s,{period:a,timeZone:c,offsetMinutes:u,now:f}):Array.isArray(Y.rows)?Y.rows:[];E==="monthly"&&(B=Rn(B,{timeZone:c,offsetMinutes:u,now:f})),y(B),v({from:Y.from||r,to:Y.to||s}),M("cache"),N(Y.fetchedAt||null),P(null)}else{y([]),v({from:r,to:s}),M("edge"),N(null);const B=F;P(B?.message||String(B))}}else{y([]),v({from:r,to:s}),M("edge"),N(null);const Y=F;P(Y?.message||String(Y))}}finally{j(!1)}},[t,e,r,D,n,I,E,l,a,x,G,V,d,$,c,s,u,f,H,S]);h.useEffect(()=>{if(G){y(Array.isArray(d)?d:[]),v({from:V,to:$}),M("shared"),N(null),j(!1),P(null);return}if(!I)H(),y([]),v({from:r,to:s}),P(null),M("edge"),N(null);else{const F=x();if(F?.rows){let Y=E==="daily"?Fn(F.rows||[],F.from||r,F.to||s,{timeZone:c,offsetMinutes:u,now:f}):E==="hourly"?bn(F.rows||[],F.from||r||F.day||s,F.to||s,{period:a,timeZone:c,offsetMinutes:u,now:f}):Array.isArray(F.rows)?F.rows:[];E==="monthly"&&(Y=Rn(Y,{timeZone:c,offsetMinutes:u,now:f})),y(Y),v({from:F.from||r,to:F.to||s}),M("cache"),N(F.fetchedAt||null)}}C()},[t,D,x,C,G,V,d,$,n,I,H,E,r,s,c,u,f,a]);const X=D?"mock":w;return{rows:g,from:b.from||r,to:b.to||s,source:X,fetchedAt:k,loading:_,error:L,refresh:C}}function ul(e){try{return new URL(e).host}catch{return null}}async function fl({baseUrl:e,accessToken:t,from:n,to:a,period:r,timeZone:s,tzOffsetMinutes:l,now:i}){const c=r==="24h"?Zr(n,a):[a||n].filter(Boolean),u=Array.from(new Set(c)),f=await Promise.all(u.map(y=>qr({accessToken:t,day:y,timeZone:s,tzOffsetMinutes:l}))),d=f.flatMap(y=>Array.isArray(y?.data)?y.data:[]),m=r==="24h"?u[0]||n||a:f[0]?.day||n||a,g=r==="24h"?u[u.length-1]||a||n:f[0]?.day||a||n;return{day:g,from:m,to:g,data:bn(d,m,g,{period:r,timeZone:s,offsetMinutes:l,now:i})}}function It(e){if(!e)return null;const t=String(e).trim(),n=t.split("-");if(n.length!==3)return null;const a=Number(n[0]),r=Number(n[1])-1,s=Number(n[2]);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s))return null;const l=new Date(Date.UTC(a,r,s));return Number.isFinite(l.getTime())&&mt(l)===t?l:null}function ua(e,t){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t))}function Zr(e,t){const n=It(e||t),a=It(t||e);if(!n||!a)return[e||t].filter(Boolean).map(String);if(a<n)return[mt(a),mt(n)];const r=[];for(let s=n;s<=a;s=ua(s,1))r.push(mt(s));return r}const eo=["total_tokens","billable_total_tokens","input_tokens","cached_input_tokens","cache_creation_input_tokens","output_tokens","reasoning_output_tokens","conversation_count"];function Fn(e,t,n,{timeZone:a,offsetMinutes:r,now:s}={}){const l=It(t),i=It(n);if(!l||!i||i<l)return Array.isArray(e)?e:[];const c=s instanceof Date&&Number.isFinite(s.getTime())?s:new Date,u=en({timeZone:a,offsetMinutes:r,date:c}),f=It(u),d=f?f.getTime():c.getTime(),m=new Map;for(const y of e||[])y?.day&&m.set(y.day,y);const g=[];for(let y=l;y<=i;y=ua(y,1)){const b=mt(y),v=m.get(b),w=y.getTime()>d;if(v){g.push({...v,missing:!1,future:w});continue}g.push({day:b,total_tokens:null,billable_total_tokens:null,input_tokens:null,cached_input_tokens:null,output_tokens:null,reasoning_output_tokens:null,missing:!w,future:w})}return g}function ml(e,t){const n=t?null:0;return{hour:e,total_tokens:n,billable_total_tokens:n,input_tokens:n,cached_input_tokens:n,cache_creation_input_tokens:n,output_tokens:n,reasoning_output_tokens:n,conversation_count:n,missing:!1,future:t}}function hl(e){if(!e||typeof e!="object")return!1;const t=e.models;return t&&typeof t=="object"&&Object.keys(t).length>0?!1:eo.every(n=>e[n]==null)}function gl(e,t,n){const a={...e,hour:t,missing:!1,future:n};if(!n&&hl(e))for(const r of eo)a[r]=0;return a}function yl(e,t){const n=t===30?48:24,a=[];for(let r=0;r<n;r++){const s=Math.floor(r*t/60),l=r*t%60;a.push(`${e}T${String(s).padStart(2,"0")}:${String(l).padStart(2,"0")}:00`)}return a}function pl(e,t,{timeZone:n,offsetMinutes:a}={}){const r=yl(e,t);if(!n||typeof Intl>"u"||!Intl.DateTimeFormat)return r;const s=It(e);if(!s)return r;const l=s.getUTCFullYear()*1e4+(s.getUTCMonth()+1)*100+s.getUTCDate(),i=s.getTime()-2160*60*1e3,c=ua(s,2).getTime()+2160*60*1e3,u=[],f=new Set;for(let d=i;d<=c;d+=1800*1e3){const m=sn({timeZone:n,offsetMinutes:a,now:new Date(d)});if(!m||m.dayNum!==l||t===60&&m.minute!==0||t===30&&m.minute!==0&&m.minute!==30)continue;const g=`${e}T${String(m.hour).padStart(2,"0")}:${String(m.minute).padStart(2,"0")}:00`;f.has(g)||(f.add(g),u.push(g))}return u.length>0?u:r}function bl(e,t,{timeZone:n,offsetMinutes:a,now:r}={}){if(!t)return Array.isArray(e)?e:[];const s=t.trim().slice(0,10),l=sn({timeZone:n,offsetMinutes:a,now:r}),i=l?l.dayNum:void 0;let c=!1;for(const g of e||[]){const y=g?.hour||g?.label||"",b=xn(y,i);if(b&&b.slot%2!==0){c=!0;break}}const u=c?30:60,f=new Map;for(const g of e||[]){const y=g?.hour||g?.label||"",b=xn(y,i);b&&f.set(b.slot,g)}const d=[],m=pl(s,u,{timeZone:n,offsetMinutes:a});for(let g=0;g<m.length;g++){const y=m[g],b=xn(y,i),v=b?b.slot:c?g:g*2,w=f.get(v);let M=!1;if(l){const k=l.year*1e4+l.month*100+l.day,N=b?.dayNum??Number(s.replace(/-/g,""));if(N>k)M=!0;else if(N===k){const _=l.hour*2+(l.minute>=30?1:0);M=v>_}}w?d.push(gl(w,y,M)):d.push(ml(y,M))}return d}function bn(e,t,n,{period:a,timeZone:r,offsetMinutes:s,now:l}={}){const i=a==="24h"?Zr(t,n):[n||t].filter(Boolean).map(String),u=Array.from(new Set(i)).flatMap(d=>bl(xl(e||[],d),d,{timeZone:r,offsetMinutes:s,now:l})),f=kl(u,{timeZone:r,offsetMinutes:s,now:l});return a!=="24h"?f:wl(f,{timeZone:r,offsetMinutes:s,now:l})}function xl(e,t){return e.filter(n=>{const a=n?.hour||n?.label||"",r=String(a).trim();return r.includes("T")?r.slice(0,10)===t:!0})}function kl(e,{timeZone:t,offsetMinutes:n,now:a}={}){if(!Array.isArray(e))return[];const r=sn({timeZone:t,offsetMinutes:n,now:a});return r?e.map(s=>{const l=s?.hour||s?.label||"",i=xn(l,r.dayNum);if(!i)return{...s,future:!1};const c=i.dayNum!==null&&i.dayNum>r.dayNum||(i.dayNum===null||i.dayNum===r.dayNum)&&i.slot>r.slot;return{...s,future:!!c}}):e}function wl(e,{timeZone:t,offsetMinutes:n,now:a}={}){if(!Array.isArray(e))return[];const r=sn({timeZone:t,offsetMinutes:n,now:a});if(!r)return e.filter(i=>!i?.future);const s=to({year:r.year,month:r.month,day:r.day,hour:r.hour,minute:r.minute}),l=s-1440*60*1e3;return e.filter(i=>{if(i?.future)return!1;const c=vl(i?.hour||i?.label);return c!=null&&c>=l&&c<=s})}function Rn(e,{timeZone:t,offsetMinutes:n,now:a}={}){if(!Array.isArray(e))return[];const r=sn({timeZone:t,offsetMinutes:n,now:a});return r?e.map(s=>{const l=s?.month||s?.label||"",i=Nl(l);if(!i)return{...s,future:!1};const c=i.year>r.year||i.year===r.year&&i.month>r.month;return{...s,future:c}}):e}function sn({timeZone:e,offsetMinutes:t,now:n}={}){const a=n instanceof Date&&Number.isFinite(n.getTime())?n:new Date;if(e&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const m=new Intl.DateTimeFormat("en-CA",{timeZone:e,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hourCycle:"h23"}).formatToParts(a).reduce((M,k)=>(k.type&&k.value&&(M[k.type]=k.value),M),{}),g=Number(m.year),y=Number(m.month),b=Number(m.day),v=Number(m.hour),w=Number(m.minute);if(Number.isFinite(g)&&Number.isFinite(y)&&Number.isFinite(b)&&Number.isFinite(v)&&Number.isFinite(w)){const M=v*2+(w>=30?1:0);return{year:g,month:y,day:b,hour:v,minute:w,dayNum:g*1e4+y*100+b,slot:M}}}catch{}if(Number.isFinite(t)){const f=new Date(a.getTime()+t*60*1e3),d=f.getUTCFullYear(),m=f.getUTCMonth()+1,g=f.getUTCDate(),y=f.getUTCHours(),b=f.getUTCMinutes(),v=y*2+(b>=30?1:0);return{year:d,month:m,day:g,hour:y,minute:b,dayNum:d*1e4+m*100+g,slot:v}}const r=a.getFullYear(),s=a.getMonth()+1,l=a.getDate(),i=a.getHours(),c=a.getMinutes(),u=i*2+(c>=30?1:0);return{year:r,month:s,day:l,hour:i,minute:c,dayNum:r*1e4+s*100+l,slot:u}}function xn(e,t){if(!e)return null;const n=String(e).trim();if(n.includes("T")){const[a,r]=n.split("T");if(!a||!r)return null;const s=a.split("-");if(s.length!==3)return null;const l=Number(s[0]),i=Number(s[1]),c=Number(s[2]);if(!Number.isFinite(l)||!Number.isFinite(i)||!Number.isFinite(c))return null;const u=r.split(":"),f=Number(u[0]),d=Number(u[1]);if(!Number.isFinite(f)||f<0||f>23||!Number.isFinite(d)||d<0||d>59)return null;const m=f*2+(d>=30?1:0);return{dayNum:l*1e4+i*100+c,slot:m}}else{let a=NaN,r=0;if(/^\d{1,2}$/.test(n))a=Number(n);else if(/^\d{1,2}:\d{2}(:\d{2})?$/.test(n)){const l=n.split(":");a=Number(l[0]),r=Number(l[1])}if(!Number.isFinite(a)||a<0||a>23||!Number.isFinite(r)||r<0||r>59)return null;const s=a*2+(r>=30?1:0);return{dayNum:t||null,slot:s}}}function to({year:e,month:t,day:n,hour:a=0,minute:r=0}){return Date.UTC(Number(e),Number(t)-1,Number(n),Number(a),Number(r),0,0)}function vl(e){if(!e)return null;const t=String(e).trim();if(!t.includes("T"))return null;const[n,a]=t.split("T");if(!n||!a)return null;const r=n.split("-"),s=a.split(":");if(r.length!==3||s.length<2)return null;const[l,i,c]=r.map(Number),[u,f]=s.map(Number);return!Number.isFinite(l)||!Number.isFinite(i)||!Number.isFinite(c)||!Number.isFinite(u)||!Number.isFinite(f)?null:to({year:l,month:i,day:c,hour:u,minute:f})}function Nl(e){if(!e)return null;const n=String(e).trim().split("-");if(n.length!==2)return null;const a=Number(n[0]),r=Number(n[1]);return!Number.isFinite(a)||!Number.isFinite(r)||r<1||r>12?null:{year:a,month:r}}function La({baseUrl:e,accessToken:t,guestAllowed:n=!1,from:a,to:r,includeDaily:s=!0,cacheKey:l,timeZone:i,tzOffsetMinutes:c,now:u}={}){const[f,d]=h.useState([]),[m,g]=h.useState(null),[y,b]=h.useState(null),[v,w]=h.useState("edge"),[M,k]=h.useState(null),[N,_]=h.useState(!1),[j,L]=h.useState(null),P=zt(),D=!n&&!P,I=(()=>{if(!l)return null;const x=_l(e)||"default",S=s?"daily":"summary",H=rn({timeZone:i,offsetMinutes:c});return`tokentracker.usage.${l}.${x}.${a}.${r}.${S}.${H}`})(),G=h.useCallback(()=>{if(!I||typeof window>"u")return null;try{const x=window.localStorage.getItem(I);if(!x)return null;const S=JSON.parse(x);return!S||!S.summary?null:S}catch{return null}},[I]),V=h.useCallback(x=>{if(!(!I||typeof window>"u"))try{window.localStorage.setItem(I,JSON.stringify(x))}catch{}},[I]),$=h.useCallback(()=>{if(!(!I||typeof window>"u"))try{window.localStorage.removeItem(I)}catch{}},[I]),E=h.useCallback(async()=>{_(!0),L(null);try{let x=null,S=null;if(s){const[Y,B]=await Promise.allSettled([Mn({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c}),En({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c,rolling:!0})]);if(Y.status==="rejected")throw Y.reason;x=Y.value,S=B.status==="fulfilled"?B.value:null}else S=await En({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c,rolling:!0});let H=s&&Array.isArray(x?.data)?x.data:[];s&&(H=Ln(H,a,r,{timeZone:i,offsetMinutes:c,now:u}));let C=S?.totals||x?.summary?.totals||null,X=S?.rolling||x?.summary?.rolling||null;if(s&&!C&&!S)try{const Y=await En({baseUrl:e,accessToken:t,from:a,to:r,timeZone:i,tzOffsetMinutes:c,rolling:!0});C=Y?.totals||null,X=Y?.rolling||X}catch{}const F=new Date().toISOString();d(H),g(C),b(X),w("edge"),k(F),C&&D?V({summary:C,rolling:X,daily:H,from:a,to:r,includeDaily:s,fetchedAt:F}):D||$()}catch(x){if(D){const S=G();if(S?.summary){g(S.summary),b(S.rolling||null);const H=Array.isArray(S.daily)?S.daily:[],C=s?Ln(H,S.from||a,S.to||r,{timeZone:i,offsetMinutes:c,now:u}):H;d(C),w("cache"),k(S.fetchedAt||null),L(null)}else{const H=x;L(H?.message||String(H)),d([]),g(null),b(null),w("edge"),k(null)}}else{const S=x;L(S?.message||String(S)),d([]),g(null),b(null),w("edge"),k(null)}}finally{_(!1)}},[t,e,a,s,P,n,D,u,G,i,r,c,$,V]);return h.useEffect(()=>{if(!D)$(),d([]),g(null),b(null),L(null),w("edge"),k(null);else{const x=G();if(x?.summary){g(x.summary),b(x.rolling||null);const S=Array.isArray(x.daily)?x.daily:[],H=s?Ln(S,x.from||a,x.to||r,{timeZone:i,offsetMinutes:c,now:u}):S;d(H),w("cache"),k(x.fetchedAt||null)}}E()},[t,P,G,E,n,D,$]),{daily:f,summary:m,rolling:y,source:P?"mock":v,fetchedAt:M,loading:N,error:j,refresh:E}}function _l(e){try{return new URL(e).host}catch{return null}}function In(e){if(!e)return null;const t=String(e).trim(),n=t.split("-");if(n.length!==3)return null;const a=Number(n[0]),r=Number(n[1])-1,s=Number(n[2]);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s))return null;const l=new Date(Date.UTC(a,r,s));return Number.isFinite(l.getTime())&&mt(l)===t?l:null}function Ml(e,t){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t))}function Ln(e,t,n,{timeZone:a,offsetMinutes:r,now:s}={}){const l=In(t),i=In(n);if(!l||!i||i<l)return Array.isArray(e)?e:[];const c=s instanceof Date&&Number.isFinite(s.getTime())?s:new Date,u=en({timeZone:a,offsetMinutes:r,date:c}),f=In(u),d=f?f.getTime():c.getTime(),m=new Map;for(const y of e||[])y?.day&&m.set(y.day,y);const g=[];for(let y=l;y<=i;y=Ml(y,1)){const b=mt(y),v=m.get(b),w=y.getTime()>d;if(v){g.push({...v,missing:!1,future:w});continue}g.push({day:b,total_tokens:null,billable_total_tokens:null,input_tokens:null,cached_input_tokens:null,output_tokens:null,reasoning_output_tokens:null,missing:!w,future:w})}return g}function jl({baseUrl:e,accessToken:t,guestAllowed:n=!1,from:a,to:r,cacheKey:s,timeZone:l,tzOffsetMinutes:i}={}){const[c,u]=h.useState(null),[f,d]=h.useState("edge"),[m,g]=h.useState(!1),[y,b]=h.useState(null),v=zt(),w=!n,M=h.useMemo(()=>{if(!s)return null;const P=Sl(e)||"default",D=rn({timeZone:l,offsetMinutes:i});return`tokentracker.modelBreakdown.${s}.${P}.${a}.${r}.${D}`},[e,s,a,l,r,i]),k=h.useCallback(()=>{if(!M||typeof window>"u")return null;try{const P=window.localStorage.getItem(M);if(!P)return null;const D=JSON.parse(P);return!D||!D.breakdown?null:D}catch{return null}},[M]),N=h.useCallback(P=>{if(!(!M||typeof window>"u"))try{window.localStorage.setItem(M,JSON.stringify(P))}catch{}},[M]),_=h.useCallback(()=>{if(!(!M||typeof window>"u"))try{window.localStorage.removeItem(M)}catch{}},[M]),j=h.useCallback(async()=>{g(!0),b(null);try{const P=await pi({baseUrl:e,accessToken:t,from:a,to:r,timeZone:l,tzOffsetMinutes:i});u(P||null),d("edge"),P&&w?N({breakdown:P,fetchedAt:new Date().toISOString()}):w||_()}catch(P){if(w){const D=k();if(D?.breakdown)u(D.breakdown),d("cache"),b(null);else{u(null),d("edge");const I=P;b(I?.message||String(I))}}else{u(null),d("edge");const D=P;b(D?.message||String(D))}}finally{g(!1)}},[t,e,a,v,n,w,k,l,r,i,_,N]);return h.useEffect(()=>{if(!w)_(),u(null),d("edge"),b(null);else{const P=k();P?.breakdown&&(u(P.breakdown),d("cache"))}j()},[t,v,k,j,n,w,_]),{breakdown:c,source:v?"mock":f,loading:m,error:y,refresh:j}}function Sl(e){try{return new URL(e).host}catch{return null}}function Re(e){const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:0}function Cl(e){const t=String(e?.hour??""),n=t.indexOf("T");if(n<0)return null;const a=Number(t.slice(n+1,n+3));return Number.isFinite(a)?a:null}function Rt(e,t){let n=0,a=0;if(Array.isArray(e))for(const r of e){const s=Cl(r);s==null||s>t||(n+=Re(r.total_tokens),a+=Re(r.total_cost_usd))}return{tokens:n,cost:a}}function wn(...e){return e.reduce((t,n)=>({tokens:t.tokens+Re(n?.tokens),cost:t.cost+Re(n?.cost)}),{tokens:0,cost:0})}function za(e){if(!Array.isArray(e)||e.length===0)return null;const t=wn(...e);return{tokens:t.tokens/e.length,cost:t.cost/e.length}}function zn(e){if(!e)return null;const t=Re(e.tokens);return t<=0?null:Re(e.cost)/(t/1e6)}function Ya(e,t){return e==null||t==null||!Number.isFinite(e)||!Number.isFinite(t)||t===0?null:(e-t)/t}function Dl({current:e,prev:t=null,trailingAvg:n=null,trailingFull:a=null,period:r}){if(r==="total"||!e)return null;const s=(i,c)=>c==null||!(c>0)?null:i/c,l=(i,c,u,f)=>({value:i,deltaVsPrev:Ya(i,c),deltaVsAvg:n?Ya(i,u):null,progress:f});return{period:r,tokens:l(Re(e.tokens),t?Re(t.tokens):null,n?Re(n.tokens):null,a?s(Re(e.tokens),Re(a.tokens)):null),cost:l(Re(e.cost),t?Re(t.cost):null,n?Re(n.cost):null,a?s(Re(e.cost),Re(a.cost)):null),perMTok:l(zn(e),zn(t),zn(n),null)}}const no=864e5;function na(e){const t=String(e).split("-").map(Number);return t.length!==3||t.some(n=>!Number.isFinite(n))?null:Date.UTC(t[0],t[1]-1,t[2])}function vn(e){const t=new Date(e),n=t.getUTCFullYear(),a=String(t.getUTCMonth()+1).padStart(2,"0"),r=String(t.getUTCDate()).padStart(2,"0");return`${n}-${a}-${r}`}function kt(e,t){const n=na(e);return n==null?null:vn(n+t*no)}function Tl(e,{timeZone:t,offsetMinutes:n}){const a=e instanceof Date?e:new Date(e);if(t&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const r=new Intl.DateTimeFormat("en-GB",{timeZone:t,hour:"2-digit",hour12:!1});let s=Number(r.format(a).slice(0,2));if(s===24&&(s=0),Number.isFinite(s))return Math.min(23,Math.max(0,s))}catch{}return typeof n=="number"&&Number.isFinite(n)?new Date(a.getTime()+n*6e4).getUTCHours():a.getHours()}function Pl(e,{timeZone:t,offsetMinutes:n}){const a=e instanceof Date?e:new Date(e);if(t&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const s=new Intl.DateTimeFormat("en-CA",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit"}).format(a);if(/^\d{4}-\d{2}-\d{2}$/.test(s))return s}catch{}return typeof n=="number"&&Number.isFinite(n)?vn(a.getTime()+n*6e4):vn(a.getTime())}const Ol=e=>Number(e?.total_tokens??0)||0,$l=e=>Number(e?.total_cost_usd??0)||0;function Ba(e,t,n){let a={tokens:0,cost:0};const r=t?na(t):null,s=n?na(n):null;if(r==null||s==null||r>s)return a;for(let l=r;l<=s;l+=no){const i=e.get(vn(l));i&&(a=wn(a,i))}return a}function Wl(e,t){if(!t||e==="total")return null;if(e==="day"||e==="24h"){const s=[];for(let l=1;l<=7;l++){const i=kt(t,-l);i&&s.push(i)}return{kind:"day",hourlyDays:[t,...s],dailyFrom:null,dailyTo:null,todayKey:t,prevKey:kt(t,-1),trailingKeys:s}}const n=e==="week"?6:e==="month"?29:null;if(n==null)return null;const a=n+1,r=kt(t,-a);return{kind:"window",hourlyDays:[t,r].filter(Boolean),dailyFrom:kt(t,-(a*2-1)),dailyTo:t,todayKey:t,curStartKey:kt(t,-n),prevBoundaryKey:r,prevStartKey:kt(t,-(a*2-1))}}function El(e,t){const n=new Map;return e.forEach((a,r)=>{n.set(a,Array.isArray(t[r]?.data)?t[r].data:[])}),n}function Al(e){const t=new Map;for(const n of Array.isArray(e?.data)?e.data:[])n?.day&&t.set(String(n.day),{tokens:Ol(n),cost:$l(n)});return t}function Fl(e,t,n){return{current:Rt(t.get(e.todayKey),n),prev:e.prevKey?Rt(t.get(e.prevKey),n):null,trailingAvg:za(e.trailingKeys.map(a=>Rt(t.get(a),n))),trailingFull:za(e.trailingKeys.map(a=>Rt(t.get(a),23)))}}function Rl(e,t,n,a){const r=wn(Ba(n,e.curStartKey,kt(e.todayKey,-1)),Rt(t.get(e.todayKey),a)),s=wn(Ba(n,e.prevStartKey,e.prevBoundaryKey?kt(e.prevBoundaryKey,-1):null),e.prevBoundaryKey?Rt(t.get(e.prevBoundaryKey),a):{tokens:0,cost:0});return{current:r,prev:s,trailingAvg:null}}function Il(e){try{return new URL(e).host}catch{return null}}function Ll({baseUrl:e,accessToken:t,guestAllowed:n=!1,period:a,timeZone:r,tzOffsetMinutes:s,now:l,cacheKey:i}={}){const[c,u]=h.useState(null),[f,d]=h.useState(!1),[m,g]=h.useState(null),y=h.useRef(0),b=l instanceof Date?l:new Date(l||Date.now()),v=Pl(b,{timeZone:r,offsetMinutes:s}),w=Tl(b,{timeZone:r,offsetMinutes:s}),M=zt(),k=!n&&!M,N=(()=>{if(!i)return null;const D=Il(e)||"default",I=rn({timeZone:r,offsetMinutes:s});return`tokentracker.pulse.${i}.${D}.${a}.${v}.${I}`})(),_=h.useCallback(()=>{if(!N||typeof window>"u")return null;try{const D=window.localStorage.getItem(N);return D?JSON.parse(D):null}catch{return null}},[N]),j=h.useCallback(D=>{if(!(!N||typeof window>"u"))try{window.localStorage.setItem(N,JSON.stringify(D))}catch{}},[N]),L=h.useCallback(()=>{const D=_();return D&&D.cutoffHour===w?D:null},[_,w]),P=h.useCallback(async()=>{const D=Wl(a,v);if(!D){u(null),g(null);return}const I=++y.current;d(!0),g(null);try{const G=await Promise.all(D.hourlyDays.map(T=>qr({baseUrl:e,accessToken:t,day:T,timeZone:r,tzOffsetMinutes:s}))),V=El(D.hourlyDays,G);let $;if(D.kind==="day")$=Fl(D,V,w);else{const T=await Mn({baseUrl:e,accessToken:t,from:D.dailyFrom,to:D.dailyTo,timeZone:r,tzOffsetMinutes:s});$=Rl(D,V,Al(T),w)}const E=Dl({...$,period:a});if(I!==y.current)return;u(E),k&&E&&j({pulse:E,todayKey:v,cutoffHour:w,fetchedAt:new Date().toISOString()})}catch(G){if(I!==y.current)return;const V=L();V?.pulse&&u(V.pulse),g(G?.message?String(G.message):"Failed to load pulse")}finally{I===y.current&&d(!1)}},[e,t,n,a,r,s,v,w,k,M,L,j]);return h.useEffect(()=>{if(a==="total"||a==="custom"){u(null);return}const D=L();D?.pulse&&u(D.pulse)},[N,a,w]),h.useEffect(()=>{P()},[P]),{pulse:c,loading:f,error:m,refresh:P}}const ao=new Set(["day","hour","month"]);function zl(e){return ao.has(e)}function Ha(e){if(e==null)return null;const t=String(e).trim();if(!/^[0-9]+$/.test(t))return null;const n=t.replace(/^0+/,"");return n.length===0?"0":n}function Yl(e,t){const n=Ha(e),a=Ha(t);if(n&&a)return n.length!==a.length?n.length<a.length?-1:1:n===a?0:n<a?-1:1;const r=Le(e),s=Le(t);return r==null&&s==null?0:r==null?1:s==null?-1:r===s?0:r<s?-1:1}function ro(e,t){const n=typeof e=="string"?e:String(e||""),a=typeof t=="string"?t:String(t||"");return n===a?0:n<a?-1:1}function Bl(e){if(!e)return null;const n=String(e).trim().match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!n)return null;const a=Number(n[1]),r=Number(n[2]),s=Number(n[3]);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s))return null;const l=new Date(Date.UTC(a,r-1,s));return!Number.isFinite(l.getTime())||l.getUTCFullYear()!==a||l.getUTCMonth()+1!==r||l.getUTCDate()!==s?null:l.getTime()}function Hl(e){if(!e)return null;const n=String(e).trim().match(/^(\d{4})-(\d{2})$/);if(!n)return null;const a=Number(n[1]),r=Number(n[2]);if(!Number.isFinite(a)||!Number.isFinite(r)||r<1||r>12)return null;const s=new Date(Date.UTC(a,r-1,1));return Number.isFinite(s.getTime())?s.getTime():null}function Ul(e){if(!e)return null;const n=String(e).trim().match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?Z?$/);if(!n)return null;const a=Number(n[1]),r=Number(n[2]),s=Number(n[3]),l=Number(n[4]),i=Number(n[5]),c=Number(n[6]||0);if(!Number.isFinite(a)||!Number.isFinite(r)||!Number.isFinite(s)||!Number.isFinite(l)||!Number.isFinite(i)||!Number.isFinite(c)||r<1||r>12||s<1||s>31||l<0||l>23||i<0||i>59||c<0||c>59)return null;const u=new Date(Date.UTC(a,r-1,s,l,i,c));return Number.isFinite(u.getTime())?u.getTime():null}function Vl(e,t,n){const a=n==="hour"?Ul:n==="month"?Hl:Bl,r=a(e),s=a(t);return r!=null&&s!=null?r===s?0:r<s?-1:1:ro(e,t)}function oo(e,{key:t,dir:n}){const a=n==="asc"?1:-1,r=Array.isArray(e)?e:[],s=ao.has(t)?(i,c)=>Vl(i,c,t):t==="top_model"?ro:Yl,l=i=>t==="total_tokens"&&i?.billable_total_tokens!=null?i.billable_total_tokens:i?.[t];return r.map((i,c)=>({row:i,index:c})).sort((i,c)=>{const u=l(i.row),f=l(c.row),d=u==null,m=f==null;if(d&&m)return i.index-c.index;if(d)return 1;if(m)return-1;const g=s(u,f);return g!==0?g*a:i.index-c.index}).map(i=>i.row)}function ql(){return[{key:"day",label:p("daily.sort.date.label"),title:p("daily.sort.date.title")},{key:"total_tokens",label:p("daily.sort.total.label"),title:p("daily.sort.total.title")},{key:"input_tokens",label:p("daily.sort.input.label"),title:p("daily.sort.input.title")},{key:"output_tokens",label:p("daily.sort.output.label"),title:p("daily.sort.output.title")},{key:"cached_input_tokens",label:p("daily.sort.cached.label"),title:p("daily.sort.cached.title")},{key:"reasoning_output_tokens",label:p("daily.sort.reasoning.label"),title:p("daily.sort.reasoning.title")},{key:"conversation_count",label:p("daily.sort.conversations.label"),title:p("daily.sort.conversations.title")}]}function Ua(e){const t=zl(e)?e:"day";return ql().map((n,a)=>a===0?{...n,key:t}:n)}function Va(e,{key:t,dir:n}){return oo(e,{key:t,dir:n})}const Nn=12,Xl=["total_tokens","billable_total_tokens","input_tokens","cached_input_tokens","cache_creation_input_tokens","output_tokens","reasoning_output_tokens"];function Gl(e){if(typeof e=="bigint")return e!==0n;if(typeof e=="number")return Number.isFinite(e)&&e!==0;if(e==null)return!1;const t=String(e).trim();if(!t||!/^-?\d+$/.test(t))return!1;const n=t.startsWith("-")?t.slice(1):t;return/[1-9]/.test(n)}function Kl(e){return Xl.some(t=>Gl(e?.[t]))}function Ql(e){const t=Array.isArray(e)?e:[];if(!t.length)return[];const n=oo(t,{key:"month",dir:"asc"}),a=n.findIndex(r=>r?.month&&Kl(r));return a===-1?t:n.slice(a)}function Jl(e,t,n=Nn){const a=Array.isArray(e)?e:[],r=Number.isFinite(n)&&n>0?n:Nn,l=(Number.isFinite(t)&&t>=0?Math.floor(t):0)*r;return a.slice(l,l+r)}function Zl(e){if(typeof e!="string")return null;const t=e.trim();return t?t.toLowerCase():null}function ec(e){const t=Zl(e?.model_id);return t||null}function tc(e,t){return e?.model?String(e.model):t}const nc=new Set(["curated:fuzzy","litellm:fuzzy","litellm:prefix-strip"]),ac=new Set(["miss","unattributed","empty"]);function rc(e){const t=String(e||"").toLowerCase();return t.includes("free")||t.includes("hy3-preview")||/^glm-[\d.]+-flash(?![a-z])/.test(t)}function _n(e,t=0){const n=Le(e?.billable_total_tokens),a=Le(e?.total_tokens);return n!=null&&n>0?n:a!=null&&a>0?a:n??a??t}function so(e,{copyFn:t}={}){const n=typeof t=="function"?t:l=>l,r=(Array.isArray(e?.sources)?e.sources:[]).map(l=>{const i=_n(l?.totals),c=Le(l?.totals?.total_cost_usd)??0;return{source:l?.source,totalTokens:Number.isFinite(i)?i:0,totalCost:Number.isFinite(c)?c:0,models:Array.isArray(l?.models)?l.models:[]}}).filter(l=>l.totalTokens>0);if(!r.length)return[];const s=r.reduce((l,i)=>l+i.totalTokens,0);return typeof e?.pricing?.pricing_mode=="string"&&e.pricing.pricing_mode.toUpperCase(),r.slice().sort((l,i)=>i.totalTokens-l.totalTokens).map(l=>{const i=l.source?String(l.source).toUpperCase():n("shared.placeholder.short"),c=s>0?l.totalTokens/s*100:0,u=Number.isFinite(c)?c.toFixed(1):"0.0",f=l.models.map(y=>{const b=_n(y?.totals);if(!Number.isFinite(b)||b<=0)return null;const v=l.totalTokens>0?Math.round(b/l.totalTokens*1e3)/10:0,w=tc(y,n("shared.placeholder.short")),M=ec(y),k=Le(y?.totals?.total_cost_usd),N=k??(l.totalCost>0&&l.totalTokens>0?b/l.totalTokens*l.totalCost:null),_=typeof y?.pricing_tier=="string"?y.pricing_tier:null,j=_?ac.has(_)&&b>0:b>0&&(N==null||N<=0)&&!rc(w),L=!!(_&&nc.has(_));return{id:M,name:w,share:v,usage:b,cost:N,pricingTier:_,pricingMissing:j,pricingFuzzy:L}}).filter(Boolean),d=f.filter(y=>Number.isFinite(Number(y?.cost))&&Number(y.cost)>0).sort((y,b)=>Number(b.cost)-Number(y.cost))[0]||null,m=f.filter(y=>y?.pricingMissing),g=f.filter(y=>y?.pricingFuzzy);return{source:l.source,label:i,totalPercent:String(u),usd:l.totalCost,usage:l.totalTokens,topCostModel:d,missingPricingModels:m,fuzzyPricingModels:g,models:f}})}function oc(e,{copyFn:t}={}){const a=so(e,{copyFn:typeof t=="function"?t:d=>d}),r=a.reduce((d,m)=>d+(Number(m?.usage)||0),0),s=a.reduce((d,m)=>d+(Number(m?.usd)||0),0),l=a.flatMap(d=>(d.models||[]).map(m=>({...m,source:d.label}))),i=l.filter(d=>Number.isFinite(Number(d?.cost))&&Number(d.cost)>0).sort((d,m)=>Number(m.cost)-Number(d.cost))[0]||null,c=l.filter(d=>Number.isFinite(Number(d?.usage))&&Number(d.usage)>0).sort((d,m)=>Number(m.usage)-Number(d.usage))[0]||null,u=l.filter(d=>d?.pricingMissing);return{fuzzyPricingModels:l.filter(d=>d?.pricingFuzzy),totalTokens:r,totalCost:s,costPerMillionTokens:r>0?s/(r/1e6):null,topCostModel:i,topUsageModel:c,missingPricingModels:u}}function sc(e,t="—"){const n=Object.entries(e?.models||{});if(!n.length)return t;let a=null,r=-1;for(const[s,l]of n){const i=Number(l);!Number.isFinite(i)||i<=r||(a=s,r=i)}return a||t}function ic(e,{fallback:t="—"}={}){const n=(Array.isArray(e)?e:[]).map(s=>{const l=_n(s),i=Le(s?.total_cost_usd)??0,c=Number.isFinite(l)&&l>0?i/(l/1e6):null;return{...s,cost_per_million_tokens:c,top_model:sc(s,t)}}),a=n.reduce((s,l)=>{const i=Le(l?.cost_per_million_tokens);return i!=null&&i>0&&s.push(i),s},[]),r=a.length>0?a.reduce((s,l)=>s+l,0)/a.length:null;return n.map(s=>{const l=Le(s?.cost_per_million_tokens),i=l!=null&&r!=null&&r>0&&l>r*1.15;return{...s,cost_per_million_baseline:r,cost_per_million_status:i?"high":"normal"}})}const dt={emerald:{light:["#ebedf0","#a7f3d0","#6ee7b7","#34d399","#10b981"],dark:["#2d333b","#065f46","#059669","#10b981","#34d399"],gridColor:{light:"rgba(16, 185, 129, 0.12)",dark:"rgba(52, 211, 153, 0.08)"}},ocean:{light:["#f1f5f9","#93c5fd","#60a5fa","#3b82f6","#1d4ed8"],dark:["#1e293b","#1e3a8a","#2563eb","#3b82f6","#60a5fa"],gridColor:{light:"rgba(59, 130, 246, 0.12)",dark:"rgba(96, 165, 250, 0.08)"}},neon:{light:["#faf5ff","#ebd5ff","#c084fc","#a855f7","#7e22ce"],dark:["#2e1065","#581c87","#8b5cf6","#a855f7","#c084fc"],gridColor:{light:"rgba(168, 85, 247, 0.12)",dark:"rgba(192, 132, 252, 0.08)"}},amber:{light:["#fffbeb","#fde68a","#f59e0b","#d97706","#b45309"],dark:["#451a03","#78350f","#b45309","#d97706","#f59e0b"],gridColor:{light:"rgba(245, 158, 11, 0.12)",dark:"rgba(245, 158, 11, 0.08)"}}};function lc(e,t){const n=/^#([0-9a-f]{6})$/i.exec(e);if(!n)return e;const a=parseInt(n[1],16),r=a>>16&255,s=a>>8&255,l=a&255,i=c=>Math.max(0,Math.min(255,Math.round(c*t)));return`rgb(${i(r)}, ${i(s)}, ${i(l)})`}function tt(e,t,n,a,r){const s=Math.cos(a),l=Math.sin(a),i=e*s-t*l,c=e*l+t*s,u=n,f=Math.cos(r),d=Math.sin(r),m=i,g=c*f-u*d,y=c*d+u*f;return{x:m,y:g,z:y}}function cc(e,t,n,a,r){return tt(e,t,n,a,r)}function io(e,t){const n=Number(t).toLocaleString();if(e>=4){const a=Math.floor(Math.random()*3)+1;return p(`heatmap.3d.voxel.joke.${a}`,{value:n})}else return e===3?p("heatmap.3d.voxel.level3",{value:n}):e===2?p("heatmap.3d.voxel.level2",{value:n}):e===1?p("heatmap.3d.voxel.level1",{value:n}):p("heatmap.3d.voxel.level0")}function qa({weeks:e,palette:t="auto",isDark:n=!1,interactive:a=!1,autoRotateInit:r=!1,onResetViewRef:s=null}){const l=dt[t]||(t==="auto"?dt.emerald:null),i=l?n?l.dark:l.light:Array.isArray(t)?t:n?dt.emerald.dark:dt.emerald.light,c=l?n?l.gridColor.dark:l.gridColor.light:n?"rgba(255,255,255,0.06)":"rgba(0,0,0,0.06)",u=-.2,f=.88,[d,m]=h.useState({yaw:u,pitch:f}),[g,y]=h.useState(r),[b,v]=h.useState(1),w=a?13:10.5,M=h.useMemo(()=>{const A=[],z=e.length;if(z===0||!a)return[];for(let U=0;U<=7;U++){const q=(U-3.5)*w,ne=tt(-z/2*w,q,0,d.yaw,d.pitch),se=tt(z/2*w,q,0,d.yaw,d.pitch);A.push({d:`M${ne.x},${ne.y} L${se.x},${se.y}`,key:`horiz-${U}`})}for(let U=0;U<=z;U+=4){const q=(U-z/2)*w,ne=tt(q,-3.5*w,0,d.yaw,d.pitch),se=tt(q,3.5*w,0,d.yaw,d.pitch);A.push({d:`M${ne.x},${ne.y} L${se.x},${se.y}`,key:`vert-${U}`})}if(z%4!==0){const U=(z-z/2)*w,q=tt(U,-3.5*w,0,d.yaw,d.pitch),ne=tt(U,3.5*w,0,d.yaw,d.pitch);A.push({d:`M${q.x},${q.y} L${ne.x},${ne.y}`,key:"vert-last"})}return A},[e.length,d,w,a]);h.useEffect(()=>{s&&(s.current={reset:()=>{m({yaw:u,pitch:f}),y(!1),v(1),T()},toggleAutoRotate:A=>{y(A)}})},[s]);const k=h.useRef(null),N=h.useRef(null),_=h.useRef(!1),j=h.useRef({x:0,y:0}),L=h.useRef({yaw:u,pitch:f}),P=h.useRef({x:0,y:0}),D=h.useRef({x:0,y:0,time:0}),I=h.useRef(null),[G,V]=h.useState(0),$=h.useRef(null),E=h.useRef(!0);h.useEffect(()=>(E.current=!0,()=>{E.current=!1}),[]);const T=()=>{$.current&&cancelAnimationFrame($.current),V(0);const A=performance.now(),z=1200,U=q=>{if(!E.current)return;const ne=q-A,se=Math.min(1,ne/z),ye=1-Math.pow(1-se,3);V(ye),se<1?$.current=requestAnimationFrame(U):$.current=null};$.current=requestAnimationFrame(U)};h.useEffect(()=>(T(),()=>{$.current&&cancelAnimationFrame($.current)}),[a]),h.useEffect(()=>{if(!g||_.current||typeof window>"u"||typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let z;const U=()=>{if(typeof document<"u"&&document.visibilityState==="hidden"){z=requestAnimationFrame(U);return}m(q=>({yaw:q.yaw+.002,pitch:q.pitch})),z=requestAnimationFrame(U)};return z=requestAnimationFrame(U),()=>cancelAnimationFrame(z)},[g]);const x=(A,z)=>{a&&(_.current=!0,j.current={x:A,y:z},L.current={yaw:d.yaw,pitch:d.pitch},P.current={x:0,y:0},D.current={x:A,y:z,time:performance.now()},I.current&&cancelAnimationFrame(I.current))},S=(A,z)=>{if(!_.current)return;const U=A-j.current.x,q=z-j.current.y,ne=performance.now(),se=ne-D.current.time;se>0&&(P.current={x:(A-D.current.x)/se,y:(z-D.current.y)/se}),D.current={x:A,y:z,time:ne};const ye=.005,fe=L.current.yaw-U*ye,he=Math.PI/2.3,Pe=Math.max(-he,Math.min(he,L.current.pitch-q*ye));m({yaw:fe,pitch:Pe})},H=()=>{if(!_.current)return;_.current=!1;let A=-P.current.x*12,z=-P.current.y*12;const U=.95,q=()=>{_.current||(A*=U,z*=U,!(Math.abs(A)<.01&&Math.abs(z)<.01)&&(m(ne=>{const se=ne.yaw+A*.005,ye=Math.PI/2.3,fe=Math.max(-ye,Math.min(ye,ne.pitch+z*.005));return{yaw:se,pitch:fe}}),I.current=requestAnimationFrame(q)))};I.current=requestAnimationFrame(q)},[C,X]=h.useState(null),[F,Y]=h.useState({x:0,y:0,shiftX:0}),B=h.useRef(null);h.useEffect(()=>()=>{B.current&&clearTimeout(B.current)},[]),h.useEffect(()=>{if(!a||!N.current)return;const A=U=>{U.preventDefault();const q=-U.deltaY*.0025;v(ne=>{const se=ne+q;return Math.max(.5,Math.min(3,se))})},z=N.current;return z.addEventListener("wheel",A,{passive:!1}),()=>{z.removeEventListener("wheel",A)}},[a]);const Z=h.useMemo(()=>{const A=[];return e.forEach((z,U)=>{(Array.isArray(z)?z:[]).forEach((q,ne)=>{q&&A.push({key:q.day||`${U}-${ne}`,col:U,row:ne,level:q.level||0,value:q.value||0,total_tokens:q.total_tokens||0,day:q.day,models:q.models||null})})}),A},[e]),je=w-(a?1.8:1.5),Me=a?38:28,Se=A=>Math.max(1.8,Number(A)/4*Me),J=h.useMemo(()=>{if(Z.length===0)return[];const A=e.length;return Z.map(z=>{const U=Se(z.level),q=Math.sqrt(Math.pow(z.col-A/2,2)+Math.pow(z.row-3.5,2)),ne=Math.sqrt(Math.pow(A/2,2)+Math.pow(3.5,2)),se=q/ne*.4,ye=Math.min(1,Math.max(0,(G-se)*(1/.6))),fe=U*ye,he=(z.col-A/2)*w,Pe=(z.row-3.5)*w,pe=je/2,Ee=[{x:he-pe,y:Pe-pe,z:0},{x:he+pe,y:Pe-pe,z:0},{x:he+pe,y:Pe+pe,z:0},{x:he-pe,y:Pe+pe,z:0},{x:he-pe,y:Pe-pe,z:fe},{x:he+pe,y:Pe-pe,z:fe},{x:he+pe,y:Pe+pe,z:fe},{x:he-pe,y:Pe+pe,z:fe}].map(ae=>tt(ae.x,ae.y,ae.z,d.yaw,d.pitch)),Be=tt(he,Pe,fe/2,d.yaw,d.pitch),_t=[{name:"top",indices:[4,5,6,7],scale:1,normal:[0,0,1]},{name:"bottom",indices:[3,2,1,0],scale:.4,normal:[0,0,-1]},{name:"left",indices:[3,0,4,7],scale:.55,normal:[-1,0,0]},{name:"right",indices:[1,2,6,5],scale:.75,normal:[1,0,0]},{name:"front",indices:[0,1,5,4],scale:.85,normal:[0,-1,0]},{name:"back",indices:[2,3,7,6],scale:.65,normal:[0,1,0]}],gt=i[Math.min(4,Math.max(0,Number(z.level)||0))],yt=[],it=.35,Mt=-.4,oe=.83;return _t.forEach(ae=>{const ee=cc(ae.normal[0],ae.normal[1],ae.normal[2],d.yaw,d.pitch);if(ee.z>.001){const ce=Ee[ae.indices[0]],Ce=Ee[ae.indices[1]],ie=Ee[ae.indices[2]],Ye=Ee[ae.indices[3]],Yt=`M${ce.x},${ce.y} L${Ce.x},${Ce.y} L${ie.x},${ie.y} L${Ye.x},${Ye.y} Z`,Bt=ee.x*it+ee.y*Mt+ee.z*oe,jt=n?.18:0,pt=ae.scale*(.82+.28*Math.max(0,Bt))+jt;yt.push({name:ae.name,d:Yt,fill:lc(gt,pt)})}}),{...z,centerProj:Be,renderedFaces:yt}})},[Z,d,i,e.length,G,w,je,Me]),De=h.useMemo(()=>[...J].sort((A,z)=>A.centerProj.z-z.centerProj.z),[J]),le=h.useMemo(()=>{if(De.length===0)return{minX:-100,minY:-100,maxX:100,maxY:100};let A=1/0,z=1/0,U=-1/0,q=-1/0;return De.forEach(ne=>{const se=w*2,ye=ne.centerProj.x,fe=ne.centerProj.y;ye-se<A&&(A=ye-se),ye+se>U&&(U=ye+se),fe-se<z&&(z=fe-se),fe+se>q&&(q=fe+se)}),{minX:A,minY:z,maxX:U,maxY:q}},[De,w]),de=12,W=le.maxX-le.minX+de*2,te=le.maxY-le.minY+de*2,ge=W/b,me=te/b,Ne=le.minX-de+(W-ge)/2,Fe=le.minY-de+(te-me)/2,Te=`${Ne} ${Fe} ${ge} ${me}`;return Z.length===0?o.jsx("div",{className:"py-8 text-center text-sm text-oai-gray-500",children:p("heatmap.empty")}):o.jsxs("div",{ref:N,className:`relative select-none outline-none ${a?"cursor-grab active:cursor-grabbing w-full h-full flex items-center justify-center":"w-full overflow-hidden flex justify-center"}`,onMouseDown:A=>{if(!a)return;x(A.clientX,A.clientY);const z=q=>S(q.clientX,q.clientY),U=()=>{H(),window.removeEventListener("mousemove",z),window.removeEventListener("mouseup",U)};window.addEventListener("mousemove",z),window.addEventListener("mouseup",U)},onTouchStart:A=>{!a||A.touches.length===0||x(A.touches[0].clientX,A.touches[0].clientY)},onTouchMove:A=>{!a||A.touches.length===0||S(A.touches[0].clientX,A.touches[0].clientY)},onTouchEnd:()=>{a&&H()},children:[o.jsxs("svg",{ref:k,viewBox:Te,width:a?"95%":"100%",height:a?"95%":"auto",role:"img","aria-label":p("heatmap.iso.aria")||"3D interactive activity heatmap",style:{display:"block",width:"100%",height:"auto",maxWidth:a?"none":`${W}px`,maxHeight:a?"78vh":"none"},className:"transition-transform duration-300 ease-out",children:[a&&M.map(A=>o.jsx("path",{d:A.d,fill:"none",stroke:c,strokeWidth:.25,strokeDasharray:"1.5 2.5",strokeLinecap:"round"},A.key)),De.map(A=>{const z=C&&C.key===A.key;return o.jsxs("g",{onMouseEnter:U=>{if(B.current&&(clearTimeout(B.current),B.current=null),X(A),a&&k.current){const q=tt((A.col-e.length/2)*w,(A.row-3.5)*w,Se(A.level),d.yaw,d.pitch);let ne=0,se=0;const ye=k.current;if(N.current&&typeof ye.createSVGPoint=="function"&&typeof ye.getScreenCTM=="function")try{const pe=ye.createSVGPoint();pe.x=q.x,pe.y=q.y;const We=ye.getScreenCTM();if(We){const Ee=pe.matrixTransform(We),Be=N.current.getBoundingClientRect();ne=Ee.x-Be.left,se=Ee.y-Be.top}}catch{const We=ye.getBoundingClientRect(),Ee=le.maxX-le.minX+de*2,Be=le.maxY-le.minY+de*2;ne=(q.x-(le.minX-de))/Ee*We.width,se=(q.y-(le.minY-de))/Be*We.height}else{const pe=ye.getBoundingClientRect(),We=le.maxX-le.minX+de*2,Ee=le.maxY-le.minY+de*2;ne=(q.x-(le.minX-de))/We*pe.width,se=(q.y-(le.minY-de))/Ee*pe.height}const fe=140;let he=0;const Pe=N.current?N.current.getBoundingClientRect().width:ye.getBoundingClientRect().width;ne<fe?he=fe-ne:ne>Pe-fe&&(he=Pe-fe-ne),Y({x:ne,y:se,shiftX:he})}},onMouseLeave:()=>{B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{X(null)},150)},className:"transition-all duration-200",style:{filter:z?"brightness(1.15) drop-shadow(0 4px 6px rgba(0,0,0,0.15))":"none",cursor:a?"pointer":"default"},children:[!a&&A.day&&o.jsx("title",{children:`${A.day}: ${Number(A.value).toLocaleString()} conversations`}),A.renderedFaces.map((U,q)=>o.jsx("path",{d:U.d,fill:U.fill,stroke:U.fill,strokeWidth:.25,strokeLinejoin:"round"},q))]},A.key)})]}),a&&C&&o.jsxs("div",{onMouseEnter:()=>{B.current&&(clearTimeout(B.current),B.current=null)},onMouseLeave:()=>{B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{X(null)},150)},className:"absolute z-[9999] w-0 h-0 transition-all duration-100 ease-out",style:{left:`${F.x}px`,top:`${F.y}px`},children:[o.jsxs("div",{className:"absolute left-0 bottom-[10px] backdrop-blur-md bg-white/90 dark:bg-oai-gray-900/90 border border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-xl rounded-xl p-3.5 max-w-[280px] min-w-[200px] flex flex-col gap-2 animate-in fade-in zoom-in-95 duration-100",style:{transform:`translateX(calc(-50% + ${F.shiftX}px))`},children:[o.jsxs("div",{className:"flex items-center justify-between border-b border-oai-gray-100 dark:border-oai-gray-800/80 pb-1.5",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400",children:C.day}),(()=>{const A=C.level===0?n?"#9ca3af":"#6b7280":i[C.level];return o.jsxs("span",{className:"text-[10px] px-2 py-0.5 rounded-full font-medium",style:{backgroundColor:A+"22",color:A,border:`1px solid ${A}44`},children:["Level ",C.level]})})()]}),o.jsxs("div",{className:"flex flex-col gap-2",children:[o.jsxs("div",{className:"flex flex-col gap-0.5",children:[o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-lg font-bold text-oai-gray-900 dark:text-white leading-none tabular-nums",children:Number(C.value??0).toLocaleString()}),o.jsx("span",{className:"text-[10px] text-oai-gray-400 uppercase tracking-wider font-semibold",children:"Conversations"})]}),o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400 leading-none tabular-nums",children:Number(C.total_tokens??0).toLocaleString()}),o.jsx("span",{className:"text-[9px] text-oai-gray-400 uppercase tracking-wider",children:"tokens"})]})]}),C.models&&Object.keys(C.models).length>0?o.jsxs("div",{className:"mt-1.5 border-t border-oai-gray-100 dark:border-oai-gray-800/60 pt-2 flex flex-col gap-1.5",children:[o.jsx("div",{className:"text-[10px] font-semibold text-oai-gray-400 dark:text-oai-gray-500 uppercase tracking-wider",children:"Model Breakdown"}),o.jsx("div",{className:"flex flex-col gap-2 max-h-[150px] overflow-y-auto pr-1.5 scrollbar-thin",children:Object.entries(C.models).map(([A,z])=>({name:A,val:Number(z)})).sort((A,z)=>z.val-A.val).map(({name:A,val:z})=>{const U=Number(C.total_tokens)||Object.values(C.models).reduce((ne,se)=>ne+Number(se||0),0)||1,q=Math.round(z/U*100);return o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsxs("div",{className:"flex items-center justify-between text-[11px] gap-3",children:[o.jsx("span",{className:"font-medium text-oai-gray-750 dark:text-oai-gray-200 truncate max-w-[120px]",title:A,children:A}),o.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[o.jsx("span",{className:"font-mono text-oai-gray-900 dark:text-oai-gray-100 font-semibold",children:z.toLocaleString()}),o.jsxs("span",{className:"text-[9px] text-oai-gray-450 dark:text-oai-gray-500 min-w-[28px] text-right font-medium",children:[q,"%"]})]})]}),o.jsx("div",{className:"w-full h-1 bg-oai-gray-100 dark:bg-oai-gray-800/85 rounded-full overflow-hidden",children:o.jsx("div",{className:"h-full rounded-full transition-all duration-300",style:{width:`${q}%`,backgroundColor:i[4],boxShadow:`0 0 4px ${i[4]}55`}})})]},A)})})]}):o.jsx("p",{className:"text-[11px] text-oai-gray-600 dark:text-oai-gray-300 leading-relaxed font-normal mt-1 border-t border-dashed border-oai-gray-100 dark:border-oai-gray-800/60 pt-1.5",children:io(C.level,C.value)})]})]}),o.jsx("div",{className:"absolute bottom-[6px] left-0 -translate-x-1/2 w-2.5 h-2.5 rotate-45 bg-white dark:bg-oai-gray-900 border-r border-b border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-sm",style:{marginBottom:"1px"}})]})]})}const dc=12,uc=3,fc=26,mc=["#ebedf0","#f7d08a","#f2b757","#eca02f","#d9861a"],hc=["#30363d","#7a4711","#bf7015","#eca02f","#f7c877"];function Xa(e){const t=Number(e);return Number.isFinite(t)?t<1e3?t.toLocaleString():Ae(t,{decimals:2}):"0"}function gc(e){if(typeof e!="string")return null;const t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e.trim());if(!t)return null;const n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return Number.isFinite(n.getTime())?n:null}function lo(e,t){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+t))}function yc(e,t){return Math.floor((Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())-Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()))/864e5)}function pc(e,t){const n=t==="mon"?1:0,a=e.getUTCDay();return lo(e,-((a-n+7)%7))}function bc(e,t,n,a){if(!e)return[];const r=gc(t)||new Date,s=[];for(let f=11;f>=0;f-=1)s.push(new Date(Date.UTC(r.getUTCFullYear(),r.getUTCMonth()-f,1)));const l=pc(r,n),i=lo(l,-(e-1)*7),c=[],u=new Set;for(const f of s){const d=Math.floor(yc(i,f)/7);d<0||d>=e||u.has(d)||(u.add(d),c.push({label:a[f.getUTCMonth()],index:d}))}return c}function xc({heatmap:e,timeZoneLabel:t,timeZoneShortLabel:n,hideLegend:a=!1,embedded:r=!1}){const{resolvedTheme:s}=Lr(),{currency:l,rate:i}=Nt(),c=s==="dark",u=c?hc:mc,f=h.useRef(null),d=h.useRef(null),[m,g]=h.useState(null),[y,b]=h.useState({x:0,y:0,shiftX:0}),v=h.useRef(null);h.useEffect(()=>()=>{v.current&&clearTimeout(v.current)},[]);const[w,M]=h.useState(!1),[k,N]=h.useState(!1),[_,j]=h.useState(!1),L=h.useRef(null),[P,D]=h.useState("amber"),I=[p("heatmap.month.jan"),p("heatmap.month.feb"),p("heatmap.month.mar"),p("heatmap.month.apr"),p("heatmap.month.may"),p("heatmap.month.jun"),p("heatmap.month.jul"),p("heatmap.month.aug"),p("heatmap.month.sep"),p("heatmap.month.oct"),p("heatmap.month.nov"),p("heatmap.month.dec")],G=(W,te)=>{if(!te||!te.day)return;v.current&&(clearTimeout(v.current),v.current=null),g(te);const ge=W.currentTarget.getBoundingClientRect(),me=typeof window<"u"?window.innerWidth:1024,Ne=ge.left+ge.width/2,Fe=ge.top,Te=140;let A=0;Ne<Te?A=Te-Ne:Ne>me-Te&&(A=me-Te-Ne),b({x:Ne,y:Fe,shiftX:A})},V=()=>{v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{g(null)},150)},$=()=>{N(!1),M(!0)},E=()=>{N(!0)},T=W=>{W.target===W.currentTarget&&k&&(M(!1),N(!1))};h.useEffect(()=>{if(!w||k)return;const W=te=>{te.key==="Escape"&&E()};return window.addEventListener("keydown",W),()=>{window.removeEventListener("keydown",W)}},[w,k]);const x=h.useMemo(()=>({emerald:{accentText:"text-emerald-500 dark:text-emerald-400",accentBg:"bg-emerald-500/10 dark:bg-emerald-400/10",accentBorder:"border-emerald-500/20 dark:border-emerald-400/15",hoverBorder:"hover:border-emerald-500/30 dark:hover:border-emerald-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(16,185,129,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(52,211,153,0.25)]",rawColor:"#10b981"},ocean:{accentText:"text-blue-500 dark:text-blue-400",accentBg:"bg-blue-500/10 dark:bg-blue-400/10",accentBorder:"border-blue-500/20 dark:border-blue-400/15",hoverBorder:"hover:border-blue-500/30 dark:hover:border-blue-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(59,130,246,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(96,165,250,0.25)]",rawColor:"#3b82f6"},neon:{accentText:"text-purple-500 dark:text-purple-400",accentBg:"bg-purple-500/10 dark:bg-purple-400/10",accentBorder:"border-purple-500/20 dark:border-purple-400/15",hoverBorder:"hover:border-purple-500/30 dark:hover:border-purple-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(168,85,247,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(192,132,252,0.25)]",rawColor:"#a855f7"},amber:{accentText:"text-amber-500 dark:text-amber-400",accentBg:"bg-amber-500/10 dark:bg-amber-400/10",accentBorder:"border-amber-500/20 dark:border-amber-400/15",hoverBorder:"hover:border-amber-500/30 dark:hover:border-amber-400/30",hoverGlow:"hover:shadow-[0_0_20px_-3px_rgba(245,158,11,0.15)] hover:dark:shadow-[0_0_20px_-3px_rgba(245,158,11,0.25)]",rawColor:"#f59e0b"}}),[]),S=x[P]||x.emerald,H=dt[P]?c?dt[P].dark:dt[P].light:c?dt.emerald.dark:dt.emerald.light,[C,X]=h.useState(()=>{if(r)return"2d";try{return window.localStorage?.getItem("tt:heatmap-view")==="3d"?"3d":"2d"}catch{return"2d"}});h.useEffect(()=>{if(!r)try{window.localStorage?.setItem("tt:heatmap-view",C)}catch{}},[C,r]),h.useEffect(()=>{if(C!=="2d")return;const W=f.current;W&&(W.scrollLeft=W.scrollWidth)},[e?.weeks,C]),h.useEffect(()=>{const W=f.current;if(!W)return;const te=()=>{v.current&&(clearTimeout(v.current),v.current=null),g(null)};return W.addEventListener("scroll",te),()=>W.removeEventListener("scroll",te)},[]);const F=e?.week_starts_on==="mon"?"mon":"sun",Y=h.useMemo(()=>{const W=Array.isArray(e?.weeks)?e.weeks:[];if(!W.length)return{weeks:[]};const te=[];for(const ge of W)for(const me of Array.isArray(ge)?ge:[])me?.day&&te.push({day:me.day,conversation_count:me.conversation_count??0,total_tokens:me.total_tokens??0,billable_total_tokens:me.billable_total_tokens??me.total_tokens??0,models:me.models??null});return Kn({dailyRows:te,weeks:Math.max(52,W.length),to:e?.to,weekStartsOn:F})},[e?.to,e?.weeks,F]),B=Y?.weeks||[],Z=h.useMemo(()=>{let W=0,te=0,ge={day:"无数据",value:0},me=0,Ne=0;const Fe=[];B.forEach(fe=>{(Array.isArray(fe)?fe:[]).forEach(he=>{he&&he.day&&Fe.push(he)})}),Fe.sort((fe,he)=>fe.day.localeCompare(he.day)),Fe.forEach(fe=>{const he=Number(fe.value)||0;W+=Number(fe.total_tokens)||0,he>0?(te++,me++,me>Ne&&(Ne=me)):me=0,he>ge.value&&(ge={day:fe.day,value:he})});const Te=Fe.length||365,A=(te/Te*100).toFixed(1);let z="heatmap.3d.modal.ai.eval.default",U="heatmap.3d.modal.ai.title.default";W>=15e6?(U="heatmap.3d.modal.ai.title.peak",z="heatmap.3d.modal.ai.eval.peak"):W>=5e6?(U="heatmap.3d.modal.ai.title.heavy",z="heatmap.3d.modal.ai.eval.heavy"):W>=1e6?(U="heatmap.3d.modal.ai.title.core",z="heatmap.3d.modal.ai.eval.core"):W>=2e4&&(U="heatmap.3d.modal.ai.title.steady",z="heatmap.3d.modal.ai.eval.steady");const q=e?.total_cost_usd,ne=Number(q),ye=q!=null&&(typeof q!="string"||q.trim()!=="")&&Number.isFinite(ne)?ne:W/15e5;return{totalTokens:W,activeDays:te,activeRate:A,maxSingleDay:ge,maxStreak:Ne,aiEvaluationTitleKey:U,aiEvaluationKey:z,totalCostUsd:ye}},[B,e?.total_cost_usd]),xe=h.useMemo(()=>et(Z.totalCostUsd,{currency:l,rate:i}),[Z.totalCostUsd,l,i]),je=F==="mon"?["Mon","Tue","Wed","Thu","Fri","Sat","Sun"].map(W=>p(`heatmap.day.${W.toLowerCase()}`)):["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].map(W=>p(`heatmap.day.${W.toLowerCase()}`)),Me=h.useMemo(()=>bc(B.length,Y?.to,F,I),[Y?.to,B.length,F,I]);if(!B.length)return o.jsx("div",{className:"py-8 text-center text-sm text-oai-gray-500",children:p("heatmap.empty")});const Se=r?10:dc,J=r?2:uc,De=r?22:fc,le=De+B.length*Se+Math.max(0,B.length-1)*J,de=`${De}px repeat(${B.length}, ${Se}px)`;return o.jsxs("div",{ref:d,className:r?"relative":"relative rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 p-5",children:[!r&&o.jsxs("div",{className:"flex items-baseline justify-between mb-3",children:[o.jsx("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:p("heatmap.title")}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("div",{role:"tablist","aria-label":"Heatmap view",className:"flex rounded-md border border-oai-gray-200 dark:border-oai-gray-800 p-0.5 text-[10px]",children:[o.jsx("button",{type:"button",role:"tab","aria-selected":C==="2d",onClick:()=>X("2d"),className:C==="2d"?"px-2 py-0.5 rounded bg-oai-gray-100 text-oai-black dark:bg-oai-gray-800 dark:text-oai-white font-medium":"px-2 py-0.5 rounded text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200",children:p("heatmap.view.2d")}),o.jsx("button",{type:"button",role:"tab","aria-selected":C==="3d",onClick:()=>X("3d"),className:C==="3d"?"px-2 py-0.5 rounded bg-oai-gray-100 text-oai-black dark:bg-oai-gray-800 dark:text-oai-white font-medium":"px-2 py-0.5 rounded text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200",children:p("heatmap.view.3d")})]}),o.jsx("span",{className:"text-xs text-oai-gray-400 dark:text-oai-gray-450",children:n||p("heatmap.legend.utc")})]})]}),C==="3d"&&o.jsxs("div",{onClick:$,className:"cursor-pointer group relative overflow-hidden rounded-lg hover:border-oai-gray-350 dark:hover:border-oai-gray-700 border border-transparent transition-all",title:p("heatmap.3d.hover_tip"),children:[o.jsx(qa,{weeks:B,isDark:c,palette:P}),o.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-oai-gray-900/5 to-transparent pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity flex items-end justify-center pb-2",children:o.jsxs("span",{className:"text-[10px] bg-white/95 dark:bg-oai-gray-900/95 shadow border border-oai-gray-200/60 dark:border-oai-gray-800/80 px-2.5 py-1 rounded-full font-medium text-oai-gray-500 dark:text-oai-gray-400 flex items-center gap-1 transform translate-y-2 group-hover:translate-y-0 transition-transform duration-200",children:[o.jsx(Xr,{size:9}),p("heatmap.3d.hover_tip")]})})]}),C==="2d"&&o.jsx("div",{ref:f,className:"overflow-x-auto overflow-y-hidden heatmap-scroll-thin",children:o.jsxs("div",{style:{minWidth:le},children:[o.jsxs("div",{className:"grid text-[10px] uppercase text-oai-gray-400 dark:text-oai-gray-400 mb-1",style:{gridTemplateColumns:de,columnGap:J},children:[o.jsx("span",{}),Me.map(W=>o.jsx("span",{style:{gridColumnStart:W.index+2},className:"whitespace-nowrap",children:W.label},`${W.label}-${W.index}`))]}),o.jsxs("div",{className:"grid",style:{gridTemplateColumns:de,columnGap:J},children:[o.jsx("div",{className:"grid text-[10px] text-oai-gray-400 dark:text-oai-gray-400 sticky left-0 bg-white dark:bg-oai-gray-900 pr-2",style:{gridTemplateRows:`repeat(7, ${Se}px)`,rowGap:J},children:je.map(W=>o.jsx("span",{className:"leading-none",children:W},W))}),o.jsx("div",{className:"grid",style:{gridAutoFlow:"column",gridTemplateRows:`repeat(7, ${Se}px)`,gap:J},children:B.map((W,te)=>(Array.isArray(W)?W:[]).map((ge,me)=>{if(!ge)return null;const Ne=ge.day||`e-${te}-${me}`,Fe=Number(ge.level)||0,Te=u[Fe]||u[0];return o.jsx("span",{onMouseEnter:A=>G(A,ge),onMouseLeave:V,className:"rounded-[2px] transition-transform hover:scale-125 hover:z-10 cursor-pointer",style:{width:Se,height:Se,background:Te}},Ne)}))})]})]})}),!a&&o.jsxs("div",{className:"flex items-center justify-center gap-2 mt-3",children:[o.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-400",children:p("heatmap.legend.less")}),o.jsx("div",{className:"flex gap-0.5",children:u.map((W,te)=>o.jsx("span",{className:"rounded-[1px]",style:{width:10,height:10,background:W}},te))}),o.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-400",children:p("heatmap.legend.more")})]}),w&&o.jsx("div",{onAnimationEnd:T,onClick:W=>{W.target===W.currentTarget&&E()},className:`fixed inset-0 z-50 flex items-center justify-center p-3 md:p-6 backdrop-blur-md bg-black/15 dark:bg-black/40 ${k?"animate-tt-fade-out":"animate-tt-fade-in"}`,children:o.jsxs("div",{className:`relative w-full max-w-6xl h-[88vh] backdrop-blur-2xl bg-white/90 dark:bg-oai-gray-900/90 border border-oai-gray-200/50 dark:border-white/10 shadow-2xl rounded-2xl flex flex-col md:flex-row overflow-hidden ${k?"animate-tt-modal-exit":"animate-tt-modal"}`,children:[o.jsx("button",{type:"button",onClick:E,className:"absolute top-4 right-4 z-50 p-2 rounded-full border border-oai-gray-200/60 dark:border-oai-gray-800/60 bg-white/50 dark:bg-oai-gray-900/50 text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-900 dark:hover:text-white hover:rotate-90 hover:scale-105 active:scale-95 transition-all duration-300",children:o.jsx(sa,{size:16})}),o.jsxs("div",{className:"w-full md:w-[340px] border-b md:border-b-0 md:border-r border-zinc-200/50 dark:border-zinc-800/40 p-5 md:p-6 flex flex-col gap-6 overflow-y-auto backdrop-blur-md bg-zinc-50/50 dark:bg-zinc-950/50",children:[o.jsxs("div",{children:[o.jsxs("div",{className:"flex items-center gap-1.5 select-none",children:[o.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[o.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:S.rawColor}}),o.jsx("span",{className:"relative inline-flex rounded-full h-1.5 w-1.5",style:{backgroundColor:S.rawColor}})]}),o.jsx("span",{className:"text-[9px] font-extrabold uppercase tracking-widest font-mono text-zinc-400 dark:text-zinc-500",children:"3D Insight"})]}),o.jsx("h4",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight leading-none mt-2 select-none",children:p("heatmap.3d.modal.title")}),o.jsx("p",{className:"text-[11px] leading-relaxed text-zinc-400 dark:text-zinc-500 mt-2 font-normal select-none",children:p("heatmap.3d.modal.desc")})]}),o.jsxs("div",{className:"grid grid-cols-2 gap-x-5 gap-y-5 border-y border-zinc-200/50 dark:border-zinc-800/50 py-5 select-none",children:[o.jsxs("div",{className:"flex flex-col gap-1 relative group cursor-help",children:[o.jsx("div",{className:"absolute left-0 bottom-full mb-2 pointer-events-none opacity-0 translate-y-1 group-hover:opacity-100 group-hover:translate-y-0 transition-all duration-200 z-50",children:o.jsxs("div",{className:"bg-white dark:bg-zinc-950 text-zinc-900 dark:text-zinc-50 text-[10px] font-semibold font-mono rounded-lg px-2.5 py-1.5 shadow-xl border border-zinc-200 dark:border-zinc-800/80 whitespace-nowrap flex flex-col",children:[o.jsx("span",{className:"text-[9px] text-zinc-400 dark:text-zinc-500",children:p("heatmap.3d.modal.stats.precision_total_tokens")}),o.jsxs("span",{className:"mt-0.5 font-bold text-zinc-900 dark:text-zinc-50",children:[Z.totalTokens.toLocaleString()," Tokens"]})]})}),o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.total_tokens")}),o.jsxs("div",{className:"flex items-baseline gap-1.5",children:[o.jsx("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:Xa(Z.totalTokens)}),o.jsx("div",{className:"opacity-30 group-hover:opacity-60 transition-opacity",children:o.jsx("svg",{width:"24",height:"10",viewBox:"0 0 24 10",fill:"none",children:o.jsx("path",{d:"M1 9C3 7 5 7 7 4C9 1 11 0 13 2C15 4 17 0 23 0",stroke:S.rawColor,strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]}),o.jsxs("div",{className:"flex flex-col gap-1 group cursor-default",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.estimated_cost")}),o.jsx("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:xe})]}),o.jsxs("div",{className:"flex flex-col gap-1 group cursor-default",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.active_rate_days")}),o.jsxs("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:[Z.activeRate,"% ",o.jsxs("span",{className:"text-[10px] font-bold text-zinc-400 dark:text-zinc-500 font-mono",children:["(",Z.activeDays,"D)"]})]})]}),o.jsxs("div",{className:"flex flex-col gap-1 group cursor-default",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.max_streak")}),o.jsxs("span",{className:"text-xl font-black text-amber-500 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:[Z.maxStreak," ",o.jsx("span",{className:"text-[10px] font-bold text-amber-500/80 font-mono",children:p("heatmap.3d.modal.stats.days_suffix")})]})]}),o.jsxs("div",{className:"flex flex-col gap-1 col-span-2 relative group cursor-help",children:[o.jsx("div",{className:"absolute left-0 bottom-full mb-2 pointer-events-none opacity-0 translate-y-1 group-hover:opacity-100 group-hover:translate-y-0 transition-all duration-200 z-50",children:o.jsxs("div",{className:"bg-white dark:bg-zinc-950 text-zinc-900 dark:text-zinc-50 text-[10px] font-semibold font-mono rounded-lg px-2.5 py-1.5 shadow-xl border border-zinc-200 dark:border-zinc-800/80 whitespace-nowrap flex flex-col",children:[o.jsx("span",{className:"text-[9px] text-zinc-400 dark:text-zinc-500",children:p("heatmap.3d.modal.stats.precision_peak_value")}),o.jsxs("span",{className:"mt-0.5 font-bold text-zinc-900 dark:text-zinc-50",children:[Z.maxSingleDay.value>0?Z.maxSingleDay.value.toLocaleString():p("heatmap.3d.modal.stats.no_data")," conversations"]}),o.jsx("span",{className:"text-[8px] text-zinc-400 dark:text-zinc-500 mt-0.5",children:Z.maxSingleDay.day!=="无数据"?Z.maxSingleDay.day:p("heatmap.3d.modal.stats.no_data")})]})}),o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.stats.peak_day")}),o.jsxs("span",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight font-mono transition-transform duration-200 group-hover:-translate-y-[1px]",children:[Z.maxSingleDay.value>0?Xa(Z.maxSingleDay.value):p("heatmap.3d.modal.stats.no_data")," ",o.jsxs("span",{className:"text-[10px] font-bold text-zinc-400 dark:text-zinc-500 font-mono",children:["(",Z.maxSingleDay.day!=="无数据"?Z.maxSingleDay.day:p("heatmap.3d.modal.stats.no_data"),")"]})]})]})]}),o.jsxs("div",{className:"flex flex-col gap-2.5 py-1",children:[o.jsxs("div",{className:"flex items-center gap-1.5 select-none",children:[o.jsx(Gr,{size:11,style:{color:S.rawColor}}),o.jsx("span",{className:"text-[9px] font-extrabold uppercase tracking-widest font-mono",style:{color:S.rawColor},children:p(Z.aiEvaluationTitleKey)})]}),o.jsxs("div",{className:"pl-3.5 border-l-2 relative transition-all duration-300 group",style:{borderColor:S.rawColor},children:[o.jsx("div",{className:"absolute inset-y-0 left-0 w-[3px] blur-[2px] opacity-15 pointer-events-none rounded-full",style:{backgroundColor:S.rawColor}}),o.jsx("p",{className:"text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-400 font-normal",children:p(Z.aiEvaluationKey)})]})]}),o.jsx("div",{className:"mt-auto border-t border-zinc-200/50 dark:border-zinc-800/50 pt-4 select-none",children:o.jsxs("div",{className:"flex flex-col gap-2",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsx("span",{className:"text-[9px] font-bold text-zinc-400 dark:text-zinc-500 uppercase tracking-widest font-mono",children:p("heatmap.3d.modal.legend.title")}),o.jsx("span",{className:"text-[10px] font-medium text-zinc-500 dark:text-zinc-400",children:p(`heatmap.3d.modal.palette.${P}`)})]}),o.jsx("div",{className:"flex gap-1",children:H.map((W,te)=>o.jsx("div",{className:"flex-1 h-1 rounded-[2px]",style:{backgroundColor:W},title:`Level ${te}`},te))})]})})]}),o.jsxs("div",{className:"flex-1 h-full relative flex items-center justify-center overflow-hidden p-4",children:[o.jsx("div",{className:"absolute top-1/4 left-1/3 w-96 h-96 rounded-full blur-[130px] pointer-events-none -translate-x-1/2 -translate-y-1/2 transition-all duration-500",style:{backgroundColor:S.rawColor+"15"}}),o.jsx("div",{className:"absolute bottom-1/4 right-1/3 w-80 h-80 rounded-full blur-[120px] pointer-events-none translate-x-1/2 translate-y-1/2 bg-purple-500/[0.04] dark:bg-purple-500/[0.08]"}),o.jsxs("div",{className:"absolute top-4 left-1/2 -translate-x-1/2 flex items-center gap-3 p-1.5 backdrop-blur-md bg-white/70 dark:bg-oai-gray-900/75 border border-oai-gray-200/60 dark:border-oai-gray-800/80 rounded-full shadow-lg z-30 select-none",children:[o.jsx("div",{className:"flex items-center gap-1.5 px-2",children:Object.keys(x).map(W=>{const te=P===W;return o.jsx("button",{type:"button",onClick:()=>D(W),title:p(`heatmap.3d.modal.palette.${W}`),className:`w-3.5 h-3.5 rounded-full transition-all duration-200 relative hover:scale-125 ${W==="emerald"?"bg-[#10b981]":W==="ocean"?"bg-[#3b82f6]":W==="neon"?"bg-[#a855f7]":"bg-[#f59e0b]"}`,children:te&&o.jsx("span",{className:"absolute inset-0 rounded-full ring-2 ring-offset-1 ring-offset-white dark:ring-offset-oai-gray-900 ring-oai-gray-900 dark:ring-white scale-110"})},W)})}),o.jsx("div",{className:"w-[1px] h-4 bg-oai-gray-200 dark:bg-oai-gray-800"}),o.jsxs("div",{className:"flex items-center gap-1 pr-1",children:[o.jsx("button",{type:"button",onClick:()=>{const W=!_;j(W),L.current&&L.current.toggleAutoRotate(W)},title:_?p("heatmap.3d.modal.control.pause"):p("heatmap.3d.modal.control.play"),className:`p-1.5 rounded-full transition-all duration-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 ${_?S.accentText:"text-oai-gray-400 hover:text-oai-gray-600 dark:hover:text-oai-gray-250"}`,children:_?o.jsx(Wi,{size:12}):o.jsx(Ai,{size:12})}),o.jsx("button",{type:"button",onClick:()=>{j(!1),L.current&&L.current.reset()},title:p("heatmap.3d.modal.control.reset"),className:"p-1.5 rounded-full text-oai-gray-400 hover:text-oai-gray-600 dark:hover:text-oai-gray-250 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-all duration-200",children:o.jsx(Ri,{size:12})})]})]}),o.jsx(qa,{weeks:B,isDark:c,interactive:!0,palette:P,autoRotateInit:_,onResetViewRef:L}),o.jsxs("div",{className:"absolute bottom-4 right-4 flex items-center gap-1.5 text-[9px] font-bold text-oai-gray-400 bg-white/80 dark:bg-oai-gray-900/80 border border-oai-gray-200/50 dark:border-oai-gray-800/80 rounded-md px-2.5 py-1.5 select-none pointer-events-none backdrop-blur-md shadow-sm",children:[o.jsx(ca,{size:10,className:S.accentText}),o.jsx("span",{children:p("heatmap.3d.modal.footer.tip")})]})]})]})}),m&&!w&&typeof document<"u"&&ai.createPortal(o.jsxs("div",{className:"fixed z-[9999] w-0 h-0 transition-all duration-100 ease-out pointer-events-none",style:{left:`${y.x}px`,top:`${y.y}px`},children:[o.jsxs("div",{className:"absolute left-0 bottom-[10px] backdrop-blur-md bg-white/95 dark:bg-oai-gray-900/95 border border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-xl rounded-xl p-3.5 max-w-[280px] min-w-[200px] flex flex-col gap-2 animate-in fade-in zoom-in-95 duration-100",style:{transform:`translateX(calc(-50% + ${y.shiftX}px))`},children:[o.jsxs("div",{className:"flex items-center justify-between border-b border-oai-gray-100 dark:border-oai-gray-800/80 pb-1.5",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400",children:m.day}),(()=>{const W=m.level===0?c?"#9ca3af":"#6b7280":u[m.level];return o.jsxs("span",{className:"text-[10px] px-2 py-0.5 rounded-full font-medium",style:{backgroundColor:W+"22",color:W,border:`1px solid ${W}44`},children:["Level ",m.level]})})()]}),o.jsxs("div",{className:"flex flex-col gap-2",children:[o.jsxs("div",{className:"flex flex-col gap-0.5",children:[o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-lg font-bold text-oai-gray-900 dark:text-white leading-none tabular-nums",children:Number(m.value??0).toLocaleString()}),o.jsx("span",{className:"text-[10px] text-oai-gray-400 uppercase tracking-wider font-semibold",children:"Conversations"})]}),o.jsxs("div",{className:"flex items-baseline gap-1",children:[o.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400 leading-none tabular-nums",children:Number(m.total_tokens??0).toLocaleString()}),o.jsx("span",{className:"text-[9px] text-oai-gray-400 uppercase tracking-wider",children:"tokens"})]})]}),m.models&&Object.keys(m.models).length>0?o.jsxs("div",{className:"mt-1.5 border-t border-oai-gray-100 dark:border-oai-gray-800/60 pt-2 flex flex-col gap-1.5",children:[o.jsx("div",{className:"text-[10px] font-semibold text-oai-gray-400 dark:text-oai-gray-500 uppercase tracking-wider",children:"Model Breakdown"}),o.jsx("div",{className:"flex flex-col gap-2 max-h-[150px] overflow-y-auto pr-1.5 oai-scrollbar",children:Object.entries(m.models).map(([W,te])=>({name:W,val:Number(te)})).sort((W,te)=>te.val-W.val).map(({name:W,val:te})=>{const ge=Number(m.total_tokens??m.value)||1,me=Math.round(te/ge*100);return o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsxs("div",{className:"flex items-center justify-between text-[11px] gap-3",children:[o.jsx("span",{className:"font-medium text-oai-gray-750 dark:text-oai-gray-200 truncate max-w-[120px]",title:W,children:W}),o.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[o.jsx("span",{className:"font-mono text-oai-gray-900 dark:text-oai-gray-100 font-semibold",children:te.toLocaleString()}),o.jsxs("span",{className:"text-[9px] text-oai-gray-450 dark:text-oai-gray-500 min-w-[28px] text-right font-medium",children:[me,"%"]})]})]}),o.jsx("div",{className:"w-full h-1 bg-oai-gray-100 dark:bg-oai-gray-800/85 rounded-full overflow-hidden",children:o.jsx("div",{className:"h-full rounded-full transition-all duration-300",style:{width:`${me}%`,backgroundColor:u[4],boxShadow:`0 0 4px ${u[4]}55`}})})]},W)})})]}):o.jsx("p",{className:"text-[11px] text-oai-gray-600 dark:text-oai-gray-300 leading-relaxed font-normal mt-1 border-t border-dashed border-oai-gray-100 dark:border-oai-gray-800/60 pt-1.5",children:io(m.level,m.total_tokens??m.value)})]})]}),o.jsx("div",{className:"absolute bottom-[6px] left-0 -translate-x-1/2 w-2.5 h-2.5 rotate-45 bg-white dark:bg-oai-gray-900 border-r border-b border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-sm",style:{marginBottom:"1px"}})]}),document.body),o.jsx("style",{children:`
|
|
2
2
|
@keyframes tt-fade-in {
|
|
3
3
|
from { opacity: 0; }
|
|
4
4
|
to { opacity: 1; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as d,j as n,o as a}from"./main-
|
|
1
|
+
import{n as d,j as n,o as a}from"./main-CCPcJ7ti.js";function v({children:i,delay:t=0,duration:o=.35,y:e=12,className:s="",once:r=!0}){return d()?n.jsx("div",{className:s,children:i}):n.jsx(a.div,{initial:{opacity:0,y:e},animate:{opacity:1,y:0},transition:{duration:o,delay:t,ease:[.16,1,.3,1]},className:s,children:i})}function x({children:i,staggerDelay:t=.1,initialDelay:o=0,className:e=""}){return d()?n.jsx("div",{className:e,children:i}):n.jsx(a.div,{initial:"hidden",animate:"visible",variants:{hidden:{},visible:{transition:{staggerChildren:t,delayChildren:o}}},className:e,children:i})}function h({children:i,className:t="",y:o=12}){return d()?n.jsx("div",{className:t,children:i}):n.jsx(a.div,{variants:{hidden:{opacity:0,y:o},visible:{opacity:1,y:0,transition:{duration:.35,ease:[.16,1,.3,1]}}},className:t,children:i})}export{v as F,x as S,h as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as ce,p as t,j as n}from"./main-
|
|
1
|
+
import{r as ce,p as t,j as n}from"./main-CCPcJ7ti.js";const Ge=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),$=Ge?"/proxy/ipcheck":"https://ip.net.coffee",le="claude_ip_history",be=6,Ue=["CN","HK","MO","RU","KP","IR","SY","CU","BY","VE"],ze={CN:"Asia/Shanghai",TW:"Asia/Taipei",HK:"Asia/Hong_Kong",MO:"Asia/Macau",JP:"Asia/Tokyo",KR:"Asia/Seoul",SG:"Asia/Singapore",MY:"Asia/Kuala_Lumpur",TH:"Asia/Bangkok",VN:"Asia/Ho_Chi_Minh",ID:"Asia/Jakarta",PH:"Asia/Manila",IN:"Asia/Kolkata",PK:"Asia/Karachi",BD:"Asia/Dhaka",IR:"Asia/Tehran",IL:"Asia/Jerusalem",AE:"Asia/Dubai",SA:"Asia/Riyadh",TR:"Europe/Istanbul",RU:"Europe/Moscow",UA:"Europe/Kyiv",GB:"Europe/London",IE:"Europe/Dublin",FR:"Europe/Paris",DE:"Europe/Berlin",IT:"Europe/Rome",ES:"Europe/Madrid",PT:"Europe/Lisbon",NL:"Europe/Amsterdam",BE:"Europe/Brussels",CH:"Europe/Zurich",AT:"Europe/Vienna",SE:"Europe/Stockholm",NO:"Europe/Oslo",DK:"Europe/Copenhagen",FI:"Europe/Helsinki",PL:"Europe/Warsaw",CZ:"Europe/Prague",GR:"Europe/Athens",RO:"Europe/Bucharest",US:"America/Los_Angeles",CA:"America/Toronto",MX:"America/Mexico_City",BR:"America/Sao_Paulo",AR:"America/Argentina/Buenos_Aires",CL:"America/Santiago",AU:"Australia/Sydney",NZ:"Pacific/Auckland",ZA:"Africa/Johannesburg",EG:"Africa/Cairo",NG:"Africa/Lagos",KE:"Africa/Nairobi"},We={CN:["zh"],TW:["zh"],HK:["zh","en"],MO:["zh","en"],JP:["ja"],KR:["ko"],TH:["th"],VN:["vi"],SG:["en","zh","ms","ta"],MY:["ms","en","zh","ta"],ID:["id","en"],PH:["en","tl","fil"],IN:["en","hi"],PK:["ur","en"],BD:["bn","en"],LK:["si","ta","en"],NP:["ne","en"],US:["en"],GB:["en"],IE:["en","ga"],AU:["en"],NZ:["en","mi"],CA:["en","fr"],DE:["de"],AT:["de"],CH:["de","fr","it","rm"],BE:["nl","fr","de"],FR:["fr"],IT:["it"],ES:["es","ca","gl","eu"],PT:["pt"],NL:["nl","fy"],LU:["lb","fr","de"],SE:["sv"],NO:["no","nb","nn"],DK:["da"],FI:["fi","sv"],IS:["is","en"],PL:["pl"],CZ:["cs"],SK:["sk"],HU:["hu"],RO:["ro"],BG:["bg"],GR:["el"],RU:["ru"],UA:["uk","ru"],BY:["be","ru"],TR:["tr"],IL:["he","ar","en"],SA:["ar"],AE:["ar","en"],EG:["ar"],IR:["fa"],IQ:["ar","ku"],ZA:["en","af","zu","xh"],KE:["en","sw"],NG:["en"],ET:["am","en"],BR:["pt"],AR:["es"],MX:["es"],CL:["es"],CO:["es"],PE:["es"],VE:["es"]},Be={jp:"Japan",tw:"Taiwan",hk:"Hong Kong",sg:"Singapore",us:"United States",de:"Germany",kr:"South Korea",fr:"France",nl:"Netherlands",gb:"United Kingdom",au:"Australia",ca:"Canada",br:"Brazil",in:"India"};function Z(d){return!!d&&d.includes(":")}function Ke(d){return!Z(d)||d.length<=20?d:d.substring(0,18)+"..."}function v(d){return d==null?"":String(d).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function W(d){if(!d||!/^[a-zA-Z]{2}$/.test(d))return"";const k=d.toLowerCase();return`<img src="${k==="cn"?`${$}/favicons/cn.png`:k==="tw"?`${$}/favicons/flags/tw.png`:`${$}/favicons/flags/${k}.png`}" alt="${k}" class="inline-block h-4 w-auto rounded-sm align-[-2px]" onerror="this.onerror=null;this.style.display='none'">`}function Fe(d){if(!d)return"";const k=String(d).trim();if(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(k)){const _=k.split(".");return _[0]+"."+_[1]+".*.*"}if(k.includes("…")){const _=k.lastIndexOf("…");return k.substring(0,_+1)+"*"}if(k.includes(":")){const _=k.split(":");if(_.length>=2)return _[0]+":"+_[1]+":*"}return k}function Ve(d){if(!d)return null;try{const _=new Intl.DateTimeFormat("en-US",{timeZone:d,timeZoneName:"longOffset"}).formatToParts(new Date).find(J=>J.type==="timeZoneName");if(!_)return null;if(_.value==="GMT"||_.value==="UTC")return 0;const N=_.value.match(/GMT([+-])(\d{1,2}):?(\d{0,2})/);return N?(N[1]==="+"?1:-1)*(parseInt(N[2],10)*60+parseInt(N[3]||"0",10)):null}catch{return null}}function Ye(d){if(d==null)return"";const k=d>=0?"+":"-",_=Math.abs(d),N=Math.floor(_/60),O=_%60;return"UTC"+k+N+(O?":"+String(O).padStart(2,"0"):"")}const we={safe:"bg-emerald-50 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300",warn:"bg-amber-50 text-amber-800 dark:bg-amber-500/15 dark:text-amber-300",danger:"bg-red-50 text-red-700 dark:bg-red-500/15 dark:text-red-300",info:"bg-blue-50 text-blue-700 dark:bg-blue-500/15 dark:text-blue-300",neutral:"bg-oai-gray-100 text-oai-gray-600 dark:bg-oai-gray-800 dark:text-oai-gray-400"};function qe(){const d=ce.useRef(null),[k,_]=ce.useState(!1);ce.useEffect(()=>{const L=d.current;if(!L)return;const b=a=>L.querySelector(`#${a}`);let ae=!1;const e={unknown:t("ipcheck.common.unknown"),failed:t("ipcheck.ip.failed"),regionAccessible:t("ipcheck.trust.region.accessible"),regionWarnTitle:a=>t("ipcheck.trust.region_warn.title",{region:a}),regionWarnBody:t("ipcheck.trust.region_warn.body"),regionRestrictedText:t("ipcheck.trust.text.restricted"),noData:t("ipcheck.trust.no_data"),noIp:t("ipcheck.trust.no_ip"),noScore:t("ipcheck.trust.no_score"),score:{pristine:t("ipcheck.trust.label.pristine"),clean:t("ipcheck.trust.label.clean"),good:t("ipcheck.trust.label.good"),neutral:t("ipcheck.trust.label.neutral"),suspicious:t("ipcheck.trust.label.suspicious"),unreachable:t("ipcheck.trust.label.unreachable")},scoreText:{excellent:t("ipcheck.trust.text.excellent"),great:t("ipcheck.trust.text.great"),minor:t("ipcheck.trust.text.minor"),moderate:t("ipcheck.trust.text.moderate"),severe:t("ipcheck.trust.text.severe")},propsRegion:t("ipcheck.props.region"),propsCity:t("ipcheck.props.city"),propsType:t("ipcheck.props.type"),propsAsn:t("ipcheck.props.asn"),propsOrg:t("ipcheck.props.org"),propsResidential:t("ipcheck.props.residential"),propsDatacenter:t("ipcheck.props.datacenter"),secVpn:t("ipcheck.security.vpn"),secProxy:t("ipcheck.security.proxy"),secTor:t("ipcheck.security.tor"),secCrawler:t("ipcheck.security.crawler"),secAbuser:t("ipcheck.security.abuser"),secProxyFlag:t("ipcheck.security.proxy_flag"),secCrawlerYes:t("ipcheck.security.crawler_yes"),secCrawlerNo:t("ipcheck.security.crawler_no"),secAbuserYes:t("ipcheck.security.abuser_yes"),secAbuserNo:t("ipcheck.security.abuser_no"),secClean:t("ipcheck.security.clean"),availSvc:t("ipcheck.avail.svc_row"),availLat:{normal:t("ipcheck.avail.latency.normal"),good:t("ipcheck.avail.latency.good"),slow:t("ipcheck.avail.latency.slow"),unreachable:t("ipcheck.avail.latency.unreachable")},availSvcStatus:{none:t("ipcheck.avail.svc.none"),minor:t("ipcheck.avail.svc.minor"),major:t("ipcheck.avail.svc.major"),critical:t("ipcheck.avail.svc.critical"),maintenance:t("ipcheck.avail.svc.maintenance"),other:t("ipcheck.avail.svc.other")},dnsStatus:t("ipcheck.dns.status"),dnsOutlet:t("ipcheck.dns.outlet"),dnsOutletIp:t("ipcheck.dns.outlet_ip"),dnsIsp:t("ipcheck.dns.isp"),dnsLeaked:t("ipcheck.dns.leaked"),dnsNoLeak:t("ipcheck.dns.no_leak"),dnsEncrypted:t("ipcheck.dns.encrypted"),dnsCnTag:t("ipcheck.dns.cn_tag"),udpStatus:t("ipcheck.udp.status"),udpOutlet:t("ipcheck.udp.outlet"),udpOutletIp:t("ipcheck.udp.outlet_ip"),udpOrigin:t("ipcheck.udp.origin"),udpDisabled:t("ipcheck.udp.disabled"),udpNoLeak:t("ipcheck.udp.no_leak"),udpLeaked:t("ipcheck.udp.leaked"),udpAnomaly:t("ipcheck.udp.anomaly"),devTz:t("ipcheck.device.tz"),devLang:t("ipcheck.device.lang"),devOs:t("ipcheck.device.os"),devTouch:t("ipcheck.device.touch"),devNet:t("ipcheck.device.net"),devDnt:t("ipcheck.device.dnt"),devWebglRender:t("ipcheck.device.webgl_render"),devCanvasFp:t("ipcheck.device.canvas_fp"),devWebglFp:t("ipcheck.device.webgl_fp"),devMatch:t("ipcheck.device.match"),devMismatch:t("ipcheck.device.mismatch"),devLocal:t("ipcheck.device.local"),devEstSuffix:t("ipcheck.device.estimate_suffix"),devDiffEqual:t("ipcheck.device.diff_equal"),devDiffAhead:a=>t("ipcheck.device.diff_ahead",{h:a}),devDiffBehind:a=>t("ipcheck.device.diff_behind",{h:a}),devLangExpected:t("ipcheck.device.lang_expected"),devTouchYes:t("ipcheck.device.touch_yes"),devTouchNo:t("ipcheck.device.touch_no"),devDntOn:t("ipcheck.device.dnt_on"),devDntOff:t("ipcheck.device.dnt_off"),devDntUnset:t("ipcheck.device.dnt_unset"),devNetUnsupported:t("ipcheck.device.net_unsupported"),devUnsupported:t("ipcheck.device.unsupported"),histEmpty:t("ipcheck.history.empty"),histCurrent:t("ipcheck.history.current"),histLoading:t("ipcheck.ip.loading")};function g(a,i="neutral"){return`<span class="inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${we[i]||we.neutral}">${a}</span>`}function q(a,i,r){return a===!0?g(i,"danger"):a===!1?g(r,"safe"):g(e.unknown,"neutral")}function ue(a){if(!a)return`<span class="text-oai-gray-400 dark:text-oai-gray-500">${v(e.failed)}</span>`;const i=v(a);return Z(a)?`<span class="ip-mask-target truncate" title="${i}">${v(Ke(a))}</span>`:`<span class="ip-mask-target">${i}</span>`}function B(a){return a?`<span class="ip-link">${ue(a)}</span>`:`<span class="text-oai-gray-400 dark:text-oai-gray-500">${v(e.failed)}</span>`}function f(a,i){return`<div class="flex items-center justify-between py-3 gap-3">
|
|
2
2
|
<span class="text-sm text-oai-gray-500 dark:text-oai-gray-400 shrink-0">${a}</span>
|
|
3
3
|
<span class="text-sm font-medium text-oai-black dark:text-white text-right min-w-0">${i===void 0?'<span class="block h-3 w-20 rounded bg-oai-gray-200 dark:bg-oai-gray-800 animate-pulse"></span>':i}</span>
|
|
4
4
|
</div>`}function Y(a){return a.map(i=>f(i,void 0)).join("")}function ne(){return'<div class="h-7 w-44 rounded bg-oai-gray-200 dark:bg-oai-gray-800 animate-pulse"></div>'}function ie(){return'<div class="h-3 w-52 mt-2 rounded bg-oai-gray-200 dark:bg-oai-gray-800 animate-pulse"></div>'}function _e(a){return a>=95?{text:e.score.pristine,variant:"safe"}:a>=80?{text:e.score.clean,variant:"safe"}:a>=50?{text:e.score.good,variant:"info"}:a>=25?{text:e.score.neutral,variant:"warn"}:{text:e.score.suspicious,variant:"danger"}}const w={ip:null,ippure:null,ipapis:null,claudeGeo:null,claudeRisk:null,cfGeo:""};function pe(){const a=(w.claudeRisk?.countryCode||"").toUpperCase();return!a||!Ue.includes(a)?null:t(`ipcheck.region.${a}`)}function se(){const a=b("ipv6Warn");a&&a.classList.remove("hidden")}function Q(a,i){const r=b(a);r&&(r.textContent=i||"",r.classList.remove("animate-pulse","bg-oai-gray-200","dark:bg-oai-gray-800","w-52","h-3","mt-2","rounded"))}const Te={ipAddrCN:ne(),ipGeoCN:ie(),ipAddr:ne(),ipGeo:ie(),ipAddrClaude:ne(),ipGeoClaude:ie(),propsContent:Y([e.propsRegion,e.propsCity,e.propsType,e.propsAsn,e.propsOrg]),securityContent:Y([e.secVpn,e.secProxy,e.secTor,e.secCrawler,e.secAbuser]),claudeAvailContent:Y(["claude.ai","anthropic.com"]),dnsLeakContent:Y([e.dnsStatus,e.dnsOutletIp]),udpLeakContent:Y([e.udpStatus,e.udpOutletIp]),deviceContent:Y([e.devTz,e.devLang,e.devOs,e.devTouch,e.devNet,e.devDnt,e.devWebglRender,e.devCanvasFp]),ipHistoryContent:`<span class="text-sm text-oai-gray-400 dark:text-oai-gray-500">${e.histLoading}</span>`};Object.entries(Te).forEach(([a,i])=>{const r=b(a);r&&(r.innerHTML=i)});let ge=!1;function Se(a){if(!a)return;a.dataset.realText||(a.dataset.realText=(a.textContent||"").trim());const i=a.dataset.realText,r=ge?Fe(i):i;a.textContent!==r&&(a.textContent=r)}function fe(){L.querySelectorAll(".ip-link, .ip-mask-target").forEach(Se)}const he=new MutationObserver(()=>requestAnimationFrame(fe));["ipHeroCN","ipHero","ipHeroClaude","ipHistoryContent","dnsLeakContent","udpLeakContent"].forEach(a=>{const i=b(a);i&&he.observe(i,{childList:!0,subtree:!0})}),L.__setMaskOn=a=>{ge=!!a,fe()};async function Le(){try{const r=(await(await fetch("https://1.1.1.1/cdn-cgi/trace",{signal:AbortSignal.timeout(5e3)})).text()).match(/ip=([^\n]+)/);r&&(w.ip=r[1].trim())}catch{}}async function Ae(){try{const i=await(await fetch("https://claude.ai/cdn-cgi/trace",{cache:"no-store",signal:AbortSignal.timeout(8e3)})).text(),r=Object.fromEntries(i.trim().split(`
|