tokentracker-cli 1.4.7 → 1.4.9
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 +9 -1
- package/README.zh-CN.md +1 -1
- package/bin/tracker.js +6 -0
- package/dashboard/dist/assets/{AchievementBadge-DF8q1x6R.js → AchievementBadge-_dRLgxnp.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-B8Dg5myo.js → AchievementsPage-DtvlZLlv.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-oPPiyP3y.js → AchievementsSection-OgzKkbes.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-PneMW4B4.js → BadgeDetailModal-D4Rlm_um.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-GOlSvEiz.js → BotAnimated-errJ5IvB.js} +1 -1
- package/dashboard/dist/assets/{Card-BT5G0GE0.js → Card-esELVQcD.js} +1 -1
- package/dashboard/dist/assets/{CloudCheckoutPage-BNeL5Muo.js → CloudCheckoutPage-3sH4Dbx9.js} +1 -1
- package/dashboard/dist/assets/CloudPage-Bi_vgiqE.js +2 -0
- package/dashboard/dist/assets/{CommandPalette-CiMSYHNK.js → CommandPalette-I0aze2EJ.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-fK3BE9CW.js → CommunityStatsModal-CEn2g4J9.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-CrUlEHyZ.js → ConfirmModal-D7SfFCaf.js} +1 -1
- package/dashboard/dist/assets/{Controls-CbjSwq6k.js → Controls-Dyb5Vmk_.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-CMHX8zDq.js +1 -0
- package/dashboard/dist/assets/{DateRangePopover-E-2Z6imh.js → DateRangePopover-CgmxsHVR.js} +1 -1
- package/dashboard/dist/assets/DevicePage-9R2MfK2Z.js +1 -0
- package/dashboard/dist/assets/{DialogClose-xJKE22Y6.js → DialogClose-DzR109OA.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-CdNjUDLZ.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-f8vnnH7z.js → DialogTitle-BLH1MgOX.js} +1 -1
- package/dashboard/dist/assets/{ElectricLogo-Ci9WZfHK.js → ElectricLogo-DcpBcJIy.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-BXqtyAmn.js → FadeIn-CBAXe_zb.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-BV5SYJMi.js → HeaderGithubStar-BZjQ3uJo.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-D3gpW3Jh.js → HoverTooltip-Bq4HuWOZ.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-G7fIWXpL.js → IpCheckPage-Oiah1-YB.js} +1 -1
- package/dashboard/dist/assets/LandingPage-Cc1FfkWg.js +2 -0
- package/dashboard/dist/assets/{LeaderboardPage-D2_wXazL.js → LeaderboardPage-Bc2j_DQY.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProBadge-3xJ-mH2v.js → LeaderboardProBadge-w1olVHVp.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfileModal-23pH6Ud7.js → LeaderboardProfileModal-mgG7mdl8.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-DSezSR58.js → LeaderboardProfilePage-DqxyooT5.js} +1 -1
- package/dashboard/dist/assets/LimitsPage-BIvK0GFj.js +6 -0
- package/dashboard/dist/assets/{LocalOnlyNotice-Dsk-d0Hr.js → LocalOnlyNotice-DZLgI75v.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-C7dugIIn.js → LoginCard-DVNU_QtS.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-B7RuLsTF.js → LoginModal-yxi5pCwC.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-u32vJQN9.js → LoginPage-CW9pu4mf.js} +1 -1
- package/dashboard/dist/assets/{PetPage-Dbc975oU.js → PetPage-DwZsq4nC.js} +2 -2
- package/dashboard/dist/assets/{PopoverPopup-D-yECvH9.js → PopoverPopup-DYGmmoD8.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-CHtZiJUN.js → ProviderIcon-BKfj89GN.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-ctuIsNk0.js → ResetPasswordPage-gQdgCp9s.js} +1 -1
- package/dashboard/dist/assets/{Select-DN4Kq_R1.js → Select-DvSR56Lj.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-C-HmeD8L.js → SelectItemText-DXo30s3O.js} +1 -1
- package/dashboard/dist/assets/{SelfHostPage-BZOL3JMt.js → SelfHostPage-jA51Nckw.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-C0sDYa8c.js → ServiceStatusPage-DEkRRPx8.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-l0-FkcJB.js → SessionsPage-J7hvGPCj.js} +3 -3
- package/dashboard/dist/assets/SettingsPage-ewH1Mzsm.js +5 -0
- package/dashboard/dist/assets/{SkillsPage-Cz6G9d3o.js → SkillsPage-BaeBHhU7.js} +1 -1
- package/dashboard/dist/assets/TokenGalaxy-D52pHpzj.js +4426 -0
- package/dashboard/dist/assets/TooltipPopup-mLpESQcv.js +1 -0
- package/dashboard/dist/assets/TrendMonitor-ErowR5GE.js +19 -0
- package/dashboard/dist/assets/{WidgetsPage-BKo3DBxT.js → WidgetsPage-Bf1uuKE7.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-Blm3aPO5.js → WrappedPage-C8qacvpR.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-CIpYjfAT.js +45 -0
- package/dashboard/dist/assets/__vite-browser-external-CnVnsbqV.css +1 -0
- package/dashboard/dist/assets/{agent-logos-DMtDEx7_.js → agent-logos-tmdKvCcK.js} +1 -1
- package/dashboard/dist/assets/{arrow-left-Bo9y7VzF.js → arrow-left-CRKi420c.js} +1 -1
- package/dashboard/dist/assets/{arrow-right-BLMU8Y5U.js → arrow-right-C_o_iQbK.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-B4hXO4sc.js → arrow-up-right-N5YqKKnI.js} +1 -1
- package/dashboard/dist/assets/{calendar-days-D9HaEtgo.js → calendar-days-BJh4FDj9.js} +1 -1
- package/dashboard/dist/assets/{check-BJNGKpX8.js → check-BfHGb92g.js} +1 -1
- package/dashboard/dist/assets/{chevron-down-CoGC_RLK.js → chevron-down-D1pO8Xgc.js} +1 -1
- package/dashboard/dist/assets/{cloud-checkout-Du5FoHqV.js → cloud-checkout-Ds13TmYz.js} +1 -1
- package/dashboard/dist/assets/{composite-BfIUPpl8.js → composite-DDEsQKPD.js} +1 -1
- package/dashboard/dist/assets/copy-CJTosYLe.js +1 -0
- package/dashboard/dist/assets/{download-C1K_v0C0.js → download-Bkqx3c3y.js} +1 -1
- package/dashboard/dist/assets/{external-link-D-xHhfj5.js → external-link-IYUo5LcK.js} +1 -1
- package/dashboard/dist/assets/{flame-DXD6uvhM.js → flame-BD_hiMfM.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-B9riGvNj.js → format-tokens-DxwbhPag.js} +1 -1
- package/dashboard/dist/assets/{gift-LPR-nD0J.js → gift-DLzFdL-1.js} +1 -1
- package/dashboard/dist/assets/host-mode-Bc_iTzHk.js +1 -0
- package/dashboard/dist/assets/{icons-DLdtLqEt.js → icons-CbrWeFPS.js} +1 -1
- package/dashboard/dist/assets/{index-BL11MboX.js → index-3xGpnZnP.js} +1 -1
- package/dashboard/dist/assets/{index-CXdJ7zMN.js → index-AVEWo-aY.js} +1 -1
- package/dashboard/dist/assets/{index-CC3cXeBa.js → index-DfzCE-FL.js} +1 -1
- package/dashboard/dist/assets/index-Dj1QnoPF.js +502 -0
- package/dashboard/dist/assets/{info-tnXKCyuK.js → info-odlIlCnm.js} +1 -1
- package/dashboard/dist/assets/{link-2-DOk9Tcg1.js → link-2-Bt28Ey9r.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-DIl96Mw-.js → loader-circle-lGnIhIFS.js} +1 -1
- package/dashboard/dist/assets/local-usage-transfer-DSS0WaL-.js +1 -0
- package/dashboard/dist/assets/{modifiers.esm-2H_1taJ6.js → modifiers.esm-CitRa_Z1.js} +1 -1
- package/dashboard/dist/assets/module-C2SOSUuR.js +3 -0
- package/dashboard/dist/assets/{monitor-smartphone-tnp-03hs.js → monitor-smartphone-1T0GFcOz.js} +1 -1
- package/dashboard/dist/assets/{play-BGMuGTdN.js → play-d6YYOmED.js} +1 -1
- package/dashboard/dist/assets/{plus-XETAaErq.js → plus-GrGV9Fkm.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BYNT4zPc.js → provider-display-D1v3cgDm.js} +1 -1
- package/dashboard/dist/assets/{react-OW7HALVO.js → react-DYCAyQbo.js} +1 -1
- package/dashboard/dist/assets/{safePolygon-CAfS8-ct.js → safePolygon-iPu060Qe.js} +1 -1
- package/dashboard/dist/assets/{search-B7ZJhoau.js → search-AQhOTwzm.js} +1 -1
- package/dashboard/dist/assets/{server-CWrP7mtL.js → server-uYTbWPMd.js} +1 -1
- package/dashboard/dist/assets/{shield-check-ip5IQEK3.js → shield-check-DB1NVCDf.js} +1 -1
- package/dashboard/dist/assets/{skills-api-CpyoNTeB.js → skills-api-D7X10n0t.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-YvzWzPDu.js → sortable.esm-B13KhrCd.js} +1 -1
- package/dashboard/dist/assets/{store-DRK6-JBg.js → store-D6XHiq8o.js} +1 -1
- package/dashboard/dist/assets/{terminal-DQRoJSvh.js → terminal-t37F8qyF.js} +1 -1
- package/dashboard/dist/assets/{trash-8h_26atF.js → trash-CDHRwGsy.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-DYlhIXsp.js → use-community-stats--kaGg0EW.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-AxJF9SEJ.js → use-latest-request-guard-ChyODWU3.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-DOZzuTwo.js → use-limits-display-prefs-katFAxOA.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-BQgB6_PB.js → use-native-settings-i3O4GTY1.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-ogi7Okzf.js → use-ordered-list-BtewEEX_.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-DPacKl9n.js +1 -0
- package/dashboard/dist/assets/{use-transform-BQqoo1et.js → use-transform-NBAyuphu.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-DAf6O4aZ.js → use-usage-limits-hsv-93TF.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-Bv9g8mpq.js → useCurrency-BdsxkAID.js} +1 -1
- package/dashboard/dist/assets/{usePositioner-CQiZGknc.js → usePositioner-BAN79miB.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-BUVirY0k.js → useTokenFormat-CGEO_mX1.js} +1 -1
- package/dashboard/dist/assets/{zap-DR3VD0yY.js → zap-BDHWp-gL.js} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dashboard/dist/ip-check.html +2 -2
- package/dashboard/dist/leaderboard.html +2 -2
- package/dashboard/dist/privacy.html +8 -2
- package/dashboard/dist/share.html +2 -2
- package/package.json +3 -2
- package/src/cli.js +10 -0
- package/src/commands/sync.js +18 -3
- package/src/lib/codex-rollout-parser.js +29 -2
- package/src/lib/codex-service-tier.js +13 -0
- package/src/lib/commandcode-limits.js +27 -11
- package/src/lib/local-api.js +122 -11
- package/src/lib/local-usage-transfer.js +271 -0
- package/src/lib/opencode-go-limits.js +17 -6
- package/src/lib/pricing/curated-overrides.json +24 -0
- package/src/lib/pricing/index.js +50 -39
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/provider-api-key-store.js +110 -0
- package/src/lib/rollout.js +27 -3
- package/src/lib/sentry.js +231 -0
- package/src/lib/session-analytics.js +15 -2
- package/src/lib/static-server.js +15 -2
- package/src/lib/usage-limits.js +54 -16
- package/dashboard/dist/assets/CloudPage-26bhEYqI.js +0 -2
- package/dashboard/dist/assets/DashboardPage-CP_PMMga.js +0 -1
- package/dashboard/dist/assets/DevicePage-B0fLd80M.js +0 -1
- package/dashboard/dist/assets/DialogDescription-CXDxWzGi.js +0 -1
- package/dashboard/dist/assets/LandingPage-BQNOdAkR.js +0 -2
- package/dashboard/dist/assets/LimitsPage-BLJsmVVy.js +0 -9
- package/dashboard/dist/assets/SettingsPage-CrczfZiZ.js +0 -5
- package/dashboard/dist/assets/TokenGalaxy-B5IGaLQK.js +0 -4426
- package/dashboard/dist/assets/TooltipPopup-B6FqLWO7.js +0 -1
- package/dashboard/dist/assets/TrendMonitor-B4kJUwmF.js +0 -19
- package/dashboard/dist/assets/__vite-browser-external--HDUIUZr.js +0 -45
- package/dashboard/dist/assets/__vite-browser-external-B0m8a6Te.css +0 -1
- package/dashboard/dist/assets/host-mode-C2K0MMOs.js +0 -1
- package/dashboard/dist/assets/module-DOCYJaxl.js +0 -3
- package/dashboard/dist/assets/use-reduced-motion-D5PHT_kx.js +0 -1
- package/dashboard/dist/assets/use-session-efficiency-pref-DP3hu3Rp.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as i,a$ as ee,b1 as D,j as w,a_ as ke,N as I,bW as Te,b0 as J,bq as me,b6 as V,b8 as te,bb as _,b5 as we,bX as Ae,bY as He,b2 as X,bZ as Fe,b_ as ue,b3 as le,ba as pe,b$ as z,c0 as Le,c1 as Be,bo as Ne,bG as Re,bH as je,bE as $,bF as _e,bK as Ue,c2 as Ye,J as Ge,c3 as Ve,bL as Xe,bO as Ke,K as Pe,c4 as $e,b4 as We,b7 as Z,c5 as qe,bT as Je,bV as ze}from"./__vite-browser-external--HDUIUZr.js";import{i as be,A as Ze,P as Qe,m as et,j as tt,k as nt,l as ot,n as st,o as rt,u as it,q as at,c as ct,t as ut,y as lt,z as pt}from"./composite-BfIUPpl8.js";import{p as ft,c as dt}from"./store-DRK6-JBg.js";import{g as K,u as gt,c as Tt,a as mt,s as Rt,b as Pt}from"./safePolygon-CAfS8-ct.js";import{u as bt,a as ht,g as vt}from"./usePositioner-CQiZGknc.js";const he=i.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new ke,currentIdRef:{current:null},currentContextRef:{current:null}});function Ct(e,n){e.current=n.current}function Vt(e){const{children:n,delay:t,timeoutMs:u=0}=e,f=i.useRef(t),r=i.useRef(t),a=i.useRef(null),c=i.useRef(null),m=ee();return D(()=>{if(r.current=t,!a.current){f.current=t;return}f.current={open:K(f.current,"open"),close:K(t,"close")}},[t,a,f,r]),w.jsx(he.Provider,{value:i.useMemo(()=>({hasProvider:!0,delayRef:f,initialDelayRef:r,currentIdRef:a,timeoutMs:u,currentContextRef:c,timeout:m}),[u,m]),children:n})}function yt(e,n={open:!1}){const{open:t}=n,u=e.useState("floatingId"),f=i.useContext(he),{currentIdRef:r,delayRef:a,timeoutMs:c,initialDelayRef:m,currentContextRef:T,hasProvider:R,timeout:l}=f,[p,g]=i.useState(!1),s=i.useRef(t);return D(()=>{s.current=t},[t]),D(()=>{function P(){T.current?.setIsInstantPhase(!1),r.current=null,T.current=null,a.current=m.current,l.clear()}if(r.current&&!t&&r.current===u){if(g(!1),c){const o=u;return l.start(c,()=>{e.select("open")||r.current&&r.current!==o||P()}),()=>{(s.current||r.current!==o)&&l.clear()}}P()}},[t,u,r,a,c,m,T,l,e]),D(()=>{if(!t)return;const P=T.current,o=r.current;l.clear(),T.current={onOpenChange:e.setOpen,setIsInstantPhase:g},r.current=u,a.current={open:0,close:K(m.current,"close")},o!==null&&o!==u?(g(!0),P?.setIsInstantPhase(!0),P?.onOpenChange(!1,I(Te))):(g(!1),P?.setIsInstantPhase(!1))},[t,u,e,r,a,m,T,l]),D(()=>()=>{if(r.current===u){if(T.current=null,!s.current)return;r.current=null,Ct(a,m),l.clear()}},[T,r,a,u,m,l]),i.useMemo(()=>({activeIdRef:r,hasProvider:R,delayRef:a,isInstantPhase:p}),[r,R,a,p])}function xt(e,n){let t=null,u=null,f=!1;return{contextElement:e||void 0,getBoundingClientRect(){const r=e?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},a=n.axis==="x"||n.axis==="both",c=n.axis==="y"||n.axis==="both",m=["mouseenter","mousemove"].includes(n.dataRef.current.openEvent?.type||"")&&n.pointerType!=="touch",T=n.axis==="y"?r.width:0,R=n.axis==="x"?r.height:0;let l=r.x,p=r.y;return t==null&&n.x&&a&&(t=r.x-n.x),u==null&&n.y&&c&&(u=r.y-n.y),l-=t||0,p-=u||0,(!f||m)&&(l=a&&n.x!=null?n.x:l,p=c&&n.y!=null?n.y:p),f=!0,{width:T,height:R,x:l,y:p,top:p,right:l+T,bottom:p+R,left:l}}}}function fe(e){return e!=null&&e.clientX!=null}function St(e,n={}){const{enabled:t=!0,axis:u="both"}=n,f=e.useState("open"),r=e.useState("floatingElement"),a=e.useState("domReferenceElement"),c=e.context.dataRef,m=i.useRef(!1),T=i.useRef(null),[R,l]=i.useState(),[p,g]=i.useState([]),s=J(d=>{e.set("positionReference",d)}),P=J((d,C,v)=>{m.current||c.current.openEvent&&!fe(c.current.openEvent)||e.set("positionReference",xt(v??a,{x:d,y:C,axis:u,dataRef:c,pointerType:R}))}),o=J(d=>{f?T.current||(P(d.clientX,d.clientY,d.currentTarget),g([])):P(d.clientX,d.clientY,d.currentTarget)}),b=be(R)?r:f;i.useEffect(()=>{if(!t){s(a);return}if(!b)return;function d(){T.current?.(),T.current=null}const C=me(r);function v(y){const S=te(y);_(r,S)?d():P(y.clientX,y.clientY)}return!c.current.openEvent||fe(c.current.openEvent)?T.current=V(C,"mousemove",v):s(a),d},[b,t,r,c,a,e,P,s,p]),i.useEffect(()=>()=>{e.set("positionReference",null)},[e]),i.useEffect(()=>{t&&!r&&(m.current=!1)},[t,r]),i.useEffect(()=>{!t&&f&&(m.current=!0)},[t,f]);const x=i.useMemo(()=>{function d(C){l(C.pointerType)}return{onPointerDown:d,onPointerEnter:d,onMouseMove:o,onMouseEnter:o}},[o]);return i.useMemo(()=>t?{reference:x,trigger:x}:{},[t,x])}const Q=Ae&&He;function Et(e,n={}){const{enabled:t=!0,delay:u}=n,{events:f,dataRef:r}=e.context,a=i.useRef(!1),c=i.useRef(null),m=i.useRef(!0),T=ee();i.useEffect(()=>{const l=e.select("domReferenceElement");if(!t)return;const p=me(l);function g(){const o=e.select("domReferenceElement");!e.select("open")&&Ne(o)&&o===ue(le(o))&&(a.current=!0,c.current=o)}function s(){m.current=!0}function P(){m.current=!1}return we(V(p,"blur",g),Q&&V(p,"keydown",s,!0),Q&&V(p,"pointerdown",P,!0))},[e,t]),i.useEffect(()=>{if(!t)return;function l(p){if(p.reason===Re||p.reason===je){const g=e.select("domReferenceElement");X(g)&&(c.current=g,a.current=!0)}}return f.on("openchange",l),()=>{f.off("openchange",l)}},[f,t,e]);const R=i.useMemo(()=>{function l(){a.current=!1,c.current=null}return{onMouseLeave(){l()},onFocus(p){const g=p.currentTarget;if(a.current){if(c.current===g)return;l()}const s=te(p.nativeEvent);if(X(s)){if(Q&&!p.relatedTarget){if(!m.current&&!Le(s))return}else if(!Be(s))return}const P=pe(p.relatedTarget,e.context.triggerElements),{nativeEvent:o,currentTarget:b}=p;if(e.select("open")&&P||!u){e.setOpen(!0,I(z,o,b));return}T.start(u,()=>{a.current||e.setOpen(!0,I(z,o,b))})},onBlur(p){l();const g=p.relatedTarget,s=p.nativeEvent,P=X(g)&&g.hasAttribute(Fe("focus-guard"))&&g.getAttribute("data-type")==="outside";T.start(0,()=>{const o=e.select("domReferenceElement"),b=ue(le(o));!g&&b===o||_(r.current.floatingContext?.refs.floating.current,b)||_(o,b)||P||pe(g??b,e.context.triggerElements)||e.setOpen(!1,I(z,s))})}}},[r,u,e,T]);return i.useMemo(()=>t?{reference:R,trigger:R}:{},[t,R])}const ve=i.createContext(void 0);function W(e){const n=i.useContext(ve);if(n===void 0&&!e)throw new Error($(72));return n}const Ot={...ft,disabled:e=>e.disabled,instantType:e=>e.instantType,isInstantPhase:e=>e.isInstantPhase,trackCursorAxis:e=>e.trackCursorAxis,disableHoverablePopup:e=>e.disableHoverablePopup,lastOpenChangeReason:e=>e.openChangeReason,closeOnClick:e=>e.closeOnClick,appliedTriggerProps:(e,n)=>n?e.activeTriggerProps:void 0,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin};class It extends _e{constructor(n,t,u){const f=new Qe;super(Mt(n,f,t,u),Dt(f),Ot)}setOpen=(n,t)=>{Ze(this,n,t,{extraState:{openChangeReason:t.reason}})};cancelPendingOpen(n){this.state.floatingRootContext.dispatchOpenChange(!1,I(Re,n))}}function Mt(e,n,t,u=!1){return{...dt(n,t,u),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...e}}function Dt(e){return{popupRef:i.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e}}const Xt=Ue(function(n){const{disabled:t=!1,defaultOpen:u=!1,open:f,disableHoverablePopup:r=!1,trackCursorAxis:a="none",actionsRef:c,onOpenChange:m,onOpenChangeComplete:T,handle:R,triggerId:l,defaultTriggerId:p=null,children:g}=n,s=et((F,L)=>new It({open:u,openProp:f,activeTriggerId:p,triggerIdProp:l},F,L));s.useControlledProp("openProp",f),s.useControlledProp("triggerIdProp",l),s.useContextCallback("onOpenChange",m),s.useContextCallback("onOpenChangeComplete",T);const P=s.useState("open"),o=!t&&P,b=s.useState("activeTriggerId"),x=s.useState("mounted"),d=s.useState("payload");s.useSyncedValues({trackCursorAxis:a,disableHoverablePopup:r,disabled:t}),tt(s,{closeOnActiveTriggerUnmount:!0});const{forceUnmount:C,transitionStatus:v}=nt(o,s),y=s.useState("isInstantPhase"),S=s.useState("instantType"),A=s.useState("lastOpenChangeReason"),M=i.useRef(null);D(()=>{P&&t&&s.setOpen(!1,I(Ve))},[P,t,s]),D(()=>{v==="ending"&&A===Te||v!=="ending"&&y?(S!=="delay"&&(M.current=S),s.set("instantType","delay")):M.current!==null&&(s.set("instantType",M.current),M.current=null)},[v,y,A,S,s]),D(()=>{o&&b==null&&s.set("payload",void 0)},[s,b,o]),i.useImperativeHandle(c,()=>({unmount:C,close:()=>s.setOpen(!1,I(Xe))}),[C,s]);const H=o||x||!t&&a!=="none";return w.jsxs(ve.Provider,{value:s,children:[R&&w.jsx(ot,{handle:R,store:s}),H&&w.jsx(kt,{store:s,disabled:t,trackCursorAxis:a}),typeof g=="function"?g({payload:d}):g]})});function kt({store:e,disabled:n,trackCursorAxis:t}){const u=e.useState("floatingRootContext"),f=st(u,{enabled:!n,referencePress:()=>e.select("closeOnClick")}),r=St(u,{enabled:!n&&t!=="none",axis:t==="none"?void 0:t}),a=i.useMemo(()=>Ye(r.reference,f.reference),[r.reference,f.reference]);return rt(e,{activeTriggerProps:a,inactiveTriggerProps:a,popupProps:f.floating??Ge}),null}const wt=i.createContext(void 0);function At(){return i.useContext(wt)}const Ht=600,de="data-base-ui-tooltip-trigger";function ge(e){const n=te(e);return X(n)?n:null}const Kt=Ke(function(n,t){const{render:u,className:f,style:r,handle:a,payload:c,disabled:m,delay:T,closeOnClick:R=!0,closeDelay:l,id:p,...g}=n,s=W(!0),o=gt(a)??s;if(!o)throw new Error($(82));const b=it(p),x=o.useState("isTriggerActive",b),d=o.useState("isOpenedByTrigger",b),C=o.useState("floatingRootContext"),v=i.useRef(null),y=l??0,{registerTrigger:S,isMountedByThisTrigger:A}=at(b,v,o,{payload:c,closeOnClick:R,closeDelay:y}),M=At(),{activeIdRef:H,delayRef:F,isInstantPhase:L,hasProvider:E}=yt(C,{open:d}),B=Tt(C);o.useSyncedValue("isInstantPhase",L);const q=o.useState("disabled"),N=m??q,ne=ct(N),oe=o.useState("trackCursorAxis"),xe=o.useState("disableHoverablePopup"),j=i.useRef(!1),U=ee(),Y=i.useRef(void 0);function se(){return E&&H.current!=null?0:T??M??Ht}function re(h){const O=v.current;if(!O||!h)return!1;const k=We(h,`[${de}]`);return k!==null&&k!==O&&_(O,k)}function Se(h){const O=re(h);return j.current=O,O&&(B.openChangeTimeout.clear(),B.restTimeout.clear(),B.restTimeoutPending=!1,U.clear()),O}const Ee=mt(C,{enabled:!N,mouseOnly:!0,move:!1,handleClose:!xe&&oe!=="both"?Rt():null,restMs:se,delay(){return l==null&&E?{close:K(F.current,"close")}:{close:y}},triggerElementRef:v,isActiveTrigger:x,isClosing:()=>o.select("transitionStatus")==="ending",shouldOpen(){return!j.current}}),Oe=Et(C,{enabled:!N}).reference,Ie=h=>{const O=j.current,k=ge(h),ie=Se(k),G=v.current,De=G&&k&&_(G,k);if(ie&&o.select("open")&&o.select("lastOpenChangeReason")===Z){o.setOpen(!1,I(Z,h));return}if(O&&!ie&&De&&!ne.current&&!o.select("open")&&G&&be(Y.current)){const ae=()=>{!j.current&&!ne.current&&!o.select("open")&&o.setOpen(!0,I(Z,h,G))},ce=se();ce===0?(U.clear(),ae()):U.start(ce,ae)}},Me=o.useState("appliedTriggerProps",A||oe!=="none");return Pe("button",n,{state:{open:d},ref:[t,S,v],props:[Ee,Oe,Me,{onMouseOver(h){Ie(h.nativeEvent)},onFocus(h){re(ge(h.nativeEvent))&&h.preventBaseUIHandler()},onMouseLeave(){j.current=!1,U.clear(),Y.current=void 0},onPointerEnter(h){Y.current=h.pointerType},onPointerDown(h){Y.current=h.pointerType,o.set("closeOnClick",R),R&&!o.select("open")&&o.cancelPendingOpen(h.nativeEvent)},onClick(h){R&&!o.select("open")&&o.cancelPendingOpen(h.nativeEvent)},id:b,[$e]:N?"":void 0,[de]:N?void 0:""},g],stateAttributesMapping:ut})}),Ce=i.createContext(void 0);function Ft(){const e=i.useContext(Ce);if(e===void 0)throw new Error($(70));return e}const $t=i.forwardRef(function(n,t){const{keepMounted:u=!1,...f}=n;return W().useState("mounted")||u?w.jsx(Ce.Provider,{value:u,children:w.jsx(qe,{ref:t,...f})}):null}),ye=i.createContext(void 0);function Lt(){const e=i.useContext(ye);if(e===void 0)throw new Error($(71));return e}const Wt=i.forwardRef(function(n,t){const{render:u,className:f,anchor:r,positionMethod:a="absolute",side:c="top",align:m="center",sideOffset:T=0,alignOffset:R=0,collisionBoundary:l="clipping-ancestors",collisionPadding:p=5,arrowPadding:g=5,sticky:s=!1,disableAnchorTracking:P=!1,collisionAvoidance:o=Je,style:b,...x}=n,d=W(),C=Ft(),v=d.useState("open"),y=d.useState("mounted"),S=d.useState("trackCursorAxis"),A=d.useState("disableHoverablePopup"),M=d.useState("floatingRootContext"),H=d.useState("instantType"),F=d.useState("transitionStatus"),L=d.useState("adaptiveOrigin"),E=bt({anchor:r,positionMethod:a,floatingRootContext:M,mounted:y,side:c,sideOffset:T,align:m,alignOffset:R,collisionBoundary:l,collisionPadding:p,sticky:s,arrowPadding:g,disableAnchorTracking:P,keepMounted:C,collisionAvoidance:o,adaptiveOrigin:L}),B=i.useMemo(()=>({open:v,side:E.side,align:E.align,anchorHidden:E.anchorHidden,instant:S!=="none"?"tracking-cursor":H}),[v,E.side,E.align,E.anchorHidden,S,H]),q=ht(n,B,{styles:E.positionerStyles,transitionStatus:F,props:x,refs:[t,d.useStateSetter("positionerElement")],hidden:!y,inert:!v||S==="both"||A});return w.jsx(ye.Provider,{value:E,children:q})}),qt=i.forwardRef(function(n,t){const{render:u,className:f,style:r,...a}=n,c=W(),{side:m,align:T}=Lt(),R=c.useState("open"),l=c.useState("instantType"),p=c.useState("transitionStatus"),g=c.useState("popupProps"),s=c.useState("floatingRootContext"),P=c.useState("disabled"),o=c.useState("closeDelay");ze({open:R,ref:c.context.popupRef,onComplete(){R&&c.context.onOpenChangeComplete?.(!0)}}),Pt(s,{enabled:!P,closeDelay:o});const b=c.useStateSetter("popupElement");return Pe("div",n,{state:{open:R,side:m,align:T,instant:l,transitionStatus:p},ref:[t,c.context.popupRef,b],props:[lt,g,vt(p),a],stateAttributesMapping:pt})});export{Vt as F,wt as T,Xt as a,Kt as b,$t as c,Wt as d,qt as e};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import{r as K,W as lt,aA as ct,aB as Me,aC as ut,aD as dt,aE as ft,aF as mt,aG as gt,aH as yt,aI as ht,aJ as _e,aK as qe,V as v,az as Je,j as s,X as pt,c as T,y as V,aL as xt,aM as bt,n as kt,h as Nt}from"./__vite-browser-external--HDUIUZr.js";import{m as vt}from"./react-OW7HALVO.js";import{u as Qe}from"./useCurrency-Bv9g8mpq.js";import{u as Ve}from"./useTokenFormat-BUVirY0k.js";import{D as De}from"./DateRangePopover-E-2Z6imh.js";import{u as wt}from"./use-latest-request-guard-AxJF9SEJ.js";import{T as jt,M as Tt}from"./terminal-DQRoJSvh.js";import{P as $e,a as Ee,b as Fe,c as Ae,d as Re}from"./PopoverPopup-D-yECvH9.js";import{u as _t}from"./use-reduced-motion-D5PHT_kx.js";function ze(e,r,t){if(!(typeof window>"u"))try{const a=window.localStorage.getItem(e),n=a?JSON.parse(a):[],o=Array.isArray(n)?n.filter(c=>typeof c=="string"&&c!==e):[],i=[r,...o.filter(c=>c!==r)],l=i.splice(t);for(const c of l)window.localStorage.removeItem(c);window.localStorage.setItem(e,JSON.stringify(i))}catch{}}const Ct=24,Pe="tokentracker.trend-cache-index",Ue=24;function St({baseUrl:e,accessToken:r,guestAllowed:t=!1,period:a,from:n,to:o,months:i=Ct,cacheKey:l,timeZone:c,tzOffsetMinutes:f,now:d,sharedRows:y,sharedRange:u,accountView:x=!1,accountAccessToken:m=null,accountRevision:k=0,accountViewResolving:h=!1,deviceId:_=null}={}){const C=!!(x&&m),M=C?"cloud":"local",[D,j]=K.useState([]),[P,R]=K.useState(()=>({from:n,to:o})),[w,F]=K.useState("edge"),[W,U]=K.useState(null),[z,L]=K.useState(!1),[ae,H]=K.useState(null),$=lt(),q=ct(r),Y=!t&&!$,re=Array.isArray(y),Z=u?.from||n,Q=u?.to||o,te=K.useRef({sharedEnabled:re,sharedRows:y,sharedFrom:Z,sharedTo:Q});te.current={sharedEnabled:re,sharedRows:y,sharedFrom:Z,sharedTo:Q};const g=K.useMemo(()=>a==="day"?"hourly":a==="total"?"monthly":"daily",[a]),I=(()=>{if(!l)return null;const N=Mt(e)||"default",E=ht({timeZone:c,offsetMinutes:f}),B=_||"all";if(g==="hourly")return`tokentracker.trend.${l}.${M}.${N}.hourly.${o||n||"day"}.${E}.${B}`;if(g==="monthly")return`tokentracker.trend.${l}.${M}.${N}.monthly.${i}.${o||"today"}.${E}.${B}`;const oe=`${n||""}.${o||""}`;return`tokentracker.trend.${l}.${M}.${N}.daily.${oe}.${E}.${B}`})(),ie=K.useCallback(()=>{if(!I||typeof window>"u")return null;try{const N=window.localStorage.getItem(I);if(!N)return null;const E=JSON.parse(N);return!E||!Array.isArray(E.rows)?null:(ze(Pe,I,Ue),E)}catch{return null}},[I]),fe=K.useCallback(N=>{if(!(!I||typeof window>"u"))try{window.localStorage.setItem(I,JSON.stringify(N)),ze(Pe,I,Ue)}catch{}},[I]),p=K.useCallback(()=>{if(!(!I||typeof window>"u"))try{window.localStorage.removeItem(I)}catch{}},[I]),b=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),A=wt([e,g,n,o,i,M,r,m,k,_,c,f,re,y,Z,Q,t,$,Y,h,q,b]),G=K.useRef(M);K.useEffect(()=>{G.current!==M&&(G.current=M,j([]),R({from:n,to:o}),F("edge"),U(null),H(null),L(!0))},[M]);const O=K.useCallback(async()=>{const N=A(),{sharedEnabled:E,sharedRows:B,sharedFrom:oe,sharedTo:le}=te.current;if(E){j(Array.isArray(B)?B:[]),R({from:oe,to:le}),F("shared"),U(null),L(!1),H(null);return}const me=await Me(r),Ce=C?await Me(m):null;if(!N()||!me&&!$&&!b&&!C)return;if(C&&!Ce){H("Your session expired. Please sign in again to view account data."),L(!1);return}const be=C?Ce:me,ot=C?ut:dt,st=C?ft:mt,it=C?gt:yt;L(!0),H(null);try{let J;g==="hourly"?J=await ot({baseUrl:e,accessToken:be,day:o||n,device:_,timeZone:c,tzOffsetMinutes:f}):g==="monthly"?J=await st({baseUrl:e,accessToken:be,months:i,to:o,device:_,timeZone:c,tzOffsetMinutes:f}):J=await it({baseUrl:e,accessToken:be,from:n,to:o,device:_,timeZone:c,tzOffsetMinutes:f});let S=J?.from||n||J?.day||null;const X=J?.to||o||J?.day||null;g==="monthly"&&!S&&(S=de(X,i));let ne=Array.isArray(J?.data)?J.data:[];g==="daily"?ne=ke(ne,S||n,X||o,{timeZone:c,offsetMinutes:f,now:d}):g==="hourly"?(ne=Ne(ne,S||n||J?.day,{timeZone:c,offsetMinutes:f,now:d}),ne=ve(ne,{timeZone:c,offsetMinutes:f,now:d})):g==="monthly"&&(ne=we(ne,S||n,X||o,{timeZone:c,offsetMinutes:f,now:d}));const Se=new Date().toISOString();if(!N())return;j(ne),R({from:S,to:X}),F("edge"),U(Se),Y?fe({rows:ne,from:S,to:X,mode:g,fetchedAt:Se}):p()}catch(J){if(!N())return;if(Y){const S=ie();if(S?.rows){let X=g==="daily"?ke(S.rows||[],S.from||n,S.to||o,{timeZone:c,offsetMinutes:f,now:d}):g==="hourly"?Ne(S.rows||[],S.from||n||S.day||o,{timeZone:c,offsetMinutes:f,now:d}):Array.isArray(S.rows)?S.rows:[];g==="hourly"?X=ve(X,{timeZone:c,offsetMinutes:f,now:d}):g==="monthly"&&(X=we(X,S.from||n||de(S.to||o,i),S.to||o,{timeZone:c,offsetMinutes:f,now:d})),j(X),R({from:S.from||n||(g==="monthly"?de(S.to||o,i):n),to:S.to||o}),F("cache"),U(S.fetchedAt||null),H(null)}else{j([]),R({from:n,to:o}),F("edge"),U(null);const X=J;H(X?.message||String(X))}}else{j([]),R({from:n,to:o}),F("edge"),U(null);const S=J;H(S?.message||String(S))}}finally{N()&&L(!1)}},[r,e,n,$,t,Y,g,i,ie,q,c,o,f,d,p,fe,b,C,m,k,_,A]);K.useEffect(()=>{if(h){L(!0);return}if(re){j(Array.isArray(y)?y:[]),R({from:Z,to:Q}),F("shared"),U(null),L(!1),H(null);return}if(!q&&!t&&!$&&!b&&!C){j([]),R({from:n,to:o}),H(null),L(!1),F("edge"),U(null);return}if(!Y)p(),j([]),R({from:n,to:o}),H(null),F("edge"),U(null);else{const N=ie();if(N?.rows){let E=g==="daily"?ke(N.rows||[],N.from||n,N.to||o,{timeZone:c,offsetMinutes:f,now:d}):g==="hourly"?Ne(N.rows||[],N.from||n||N.day||o,{timeZone:c,offsetMinutes:f,now:d}):Array.isArray(N.rows)?N.rows:[];g==="hourly"?E=ve(E,{timeZone:c,offsetMinutes:f,now:d}):g==="monthly"&&(E=we(E,N.from||n||de(N.to||o,i),N.to||o,{timeZone:c,offsetMinutes:f,now:d})),j(E),R({from:N.from||n||(g==="monthly"?de(N.to||o,i):n),to:N.to||o}),F("cache"),U(N.fetchedAt||null),H(null)}else j([]),R({from:n,to:o}),F("edge"),U(null),H(null)}L(!0),O()},[r,$,ie,O,re,Z,y,Q,q,t,Y,p,b,h]);const ee=$?"mock":w;return{rows:D,from:P.from||n,to:P.to||o,source:ee,fetchedAt:W,loading:z,error:ae,refresh:O}}function Mt(e){try{return new URL(e).host}catch{return null}}function ye(e){if(!e)return null;const r=String(e).trim(),t=r.split("-");if(t.length!==3)return null;const a=Number(t[0]),n=Number(t[1])-1,o=Number(t[2]);if(!Number.isFinite(a)||!Number.isFinite(n)||!Number.isFinite(o))return null;const i=new Date(Date.UTC(a,n,o));return Number.isFinite(i.getTime())&&_e(i)===r?i:null}function Ze(e,r){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+r))}const et=["total_tokens","billable_total_tokens","input_tokens","cached_input_tokens","cache_creation_input_tokens","output_tokens","reasoning_output_tokens","conversation_count"];function ke(e,r,t,{timeZone:a,offsetMinutes:n,now:o}={}){const i=ye(r),l=ye(t);if(!i||!l||l<i)return Array.isArray(e)?e:[];const c=o instanceof Date&&Number.isFinite(o.getTime())?o:new Date,f=qe({timeZone:a,offsetMinutes:n,date:c}),d=ye(f),y=d?d.getTime():c.getTime(),u=new Map;for(const m of e||[])m?.day&&u.set(m.day,m);const x=[];for(let m=i;m<=l;m=Ze(m,1)){const k=_e(m),h=u.get(k),_=m.getTime()>y;if(h){x.push({...h,missing:!1,future:_});continue}x.push({day:k,total_tokens:null,billable_total_tokens:null,input_tokens:null,cached_input_tokens:null,output_tokens:null,reasoning_output_tokens:null,missing:!_,future:_})}return x}function Dt(e,r){const t=r?null:0;return{hour:e,total_tokens:t,billable_total_tokens:t,input_tokens:t,cached_input_tokens:t,cache_creation_input_tokens:t,output_tokens:t,reasoning_output_tokens:t,conversation_count:t,missing:!1,future:r}}function $t(e){if(!e||typeof e!="object")return!1;const r=e.models;return r&&typeof r=="object"&&Object.keys(r).length>0?!1:et.every(t=>e[t]==null)}function Et(e,r,t){const a={...e,hour:r,missing:!1,future:t};if(!t&&$t(e))for(const n of et)a[n]=0;return a}function Ft(e,r){const t=r===30?48:24,a=[];for(let n=0;n<t;n++){const o=Math.floor(n*r/60),i=n*r%60;a.push(`${e}T${String(o).padStart(2,"0")}:${String(i).padStart(2,"0")}:00`)}return a}function At(e,r,{timeZone:t,offsetMinutes:a}={}){const n=Ft(e,r);if(!t||typeof Intl>"u"||!Intl.DateTimeFormat)return n;const o=ye(e);if(!o)return n;const i=o.getUTCFullYear()*1e4+(o.getUTCMonth()+1)*100+o.getUTCDate(),l=o.getTime()-2160*60*1e3,c=Ze(o,2).getTime()+2160*60*1e3,f=[],d=new Set;for(let y=l;y<=c;y+=1800*1e3){const u=xe({timeZone:t,offsetMinutes:a,now:new Date(y)});if(!u||u.dayNum!==i||r===60&&u.minute!==0||r===30&&u.minute!==0&&u.minute!==30)continue;const x=`${e}T${String(u.hour).padStart(2,"0")}:${String(u.minute).padStart(2,"0")}:00`;d.has(x)||(d.add(x),f.push(x))}return f.length>0?f:n}function Ne(e,r,{timeZone:t,offsetMinutes:a,now:n}={}){if(!r)return Array.isArray(e)?e:[];const o=r.trim().slice(0,10),i=xe({timeZone:t,offsetMinutes:a,now:n}),l=i?i.dayNum:void 0;let c=!1;for(const x of e||[]){const m=x?.hour||x?.label||"",k=he(m,l);if(k&&k.slot%2!==0){c=!0;break}}const f=c?30:60,d=new Map;for(const x of e||[]){const m=x?.hour||x?.label||"",k=he(m,l);k&&d.set(k.slot,x)}const y=[],u=At(o,f,{timeZone:t,offsetMinutes:a});for(let x=0;x<u.length;x++){const m=u[x],k=he(m,l),h=k?k.slot:c?x:x*2,_=d.get(h);let C=!1;if(i){const M=i.year*1e4+i.month*100+i.day,D=k?.dayNum??Number(o.replace(/-/g,""));if(D>M)C=!0;else if(D===M){const j=i.hour*2+(i.minute>=30?1:0);C=h>j}}_?y.push(Et(_,m,C)):y.push(Dt(m,C))}return y}function ve(e,{timeZone:r,offsetMinutes:t,now:a}={}){if(!Array.isArray(e))return[];const n=xe({timeZone:r,offsetMinutes:t,now:a});return n?e.map(o=>{const i=o?.hour||o?.label||"",l=he(i,n.dayNum);if(!l)return{...o,future:!1};const c=l.dayNum!==null&&l.dayNum>n.dayNum||(l.dayNum===null||l.dayNum===n.dayNum)&&l.slot>n.slot;return{...o,future:!!c}}):e}function de(e,r){const t=je(String(e||"").slice(0,7));return t?_e(new Date(Date.UTC(t.year,t.month-r,1))):null}function we(e,r,t,a={}){const n=je(String(r||"").slice(0,7)),o=je(String(t||"").slice(0,7));if(!n||!o)return Array.isArray(e)?e:[];const i=n.year*12+n.month-1,l=o.year*12+o.month-1;if(l<i)return Array.isArray(e)?e:[];const c=xe(a),f=c.year*12+c.month-1,d=new Map((e||[]).map(u=>[u?.month,u])),y=[];for(let u=i;u<=l;u++){const x=`${Math.floor(u/12)}-${String(u%12+1).padStart(2,"0")}`,m=u>f,k=d.get(x);if(k&&!(k.future&&k.total_tokens==null))y.push({...k,missing:!1,future:m});else{const h=m?null:0;y.push({month:x,total_tokens:h,billable_total_tokens:h,input_tokens:h,cached_input_tokens:h,cache_creation_input_tokens:h,output_tokens:h,reasoning_output_tokens:h,conversation_count:h,missing:!1,future:m})}}return y}function xe({timeZone:e,offsetMinutes:r,now:t}={}){const a=t instanceof Date&&Number.isFinite(t.getTime())?t:new Date;if(e&&typeof Intl<"u"&&Intl.DateTimeFormat)try{const u=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((C,M)=>(M.type&&M.value&&(C[M.type]=M.value),C),{}),x=Number(u.year),m=Number(u.month),k=Number(u.day),h=Number(u.hour),_=Number(u.minute);if(Number.isFinite(x)&&Number.isFinite(m)&&Number.isFinite(k)&&Number.isFinite(h)&&Number.isFinite(_)){const C=h*2+(_>=30?1:0);return{year:x,month:m,day:k,hour:h,minute:_,dayNum:x*1e4+m*100+k,slot:C}}}catch{}if(Number.isFinite(r)){const d=new Date(a.getTime()+r*60*1e3),y=d.getUTCFullYear(),u=d.getUTCMonth()+1,x=d.getUTCDate(),m=d.getUTCHours(),k=d.getUTCMinutes(),h=m*2+(k>=30?1:0);return{year:y,month:u,day:x,hour:m,minute:k,dayNum:y*1e4+u*100+x,slot:h}}const n=a.getFullYear(),o=a.getMonth()+1,i=a.getDate(),l=a.getHours(),c=a.getMinutes(),f=l*2+(c>=30?1:0);return{year:n,month:o,day:i,hour:l,minute:c,dayNum:n*1e4+o*100+i,slot:f}}function he(e,r){if(!e)return null;const t=String(e).trim();if(t.includes("T")){const[a,n]=t.split("T");if(!a||!n)return null;const o=a.split("-");if(o.length!==3)return null;const i=Number(o[0]),l=Number(o[1]),c=Number(o[2]);if(!Number.isFinite(i)||!Number.isFinite(l)||!Number.isFinite(c))return null;const f=n.split(":"),d=Number(f[0]),y=Number(f[1]);if(!Number.isFinite(d)||d<0||d>23||!Number.isFinite(y)||y<0||y>59)return null;const u=d*2+(y>=30?1:0);return{dayNum:i*1e4+l*100+c,slot:u}}else{let a=NaN,n=0;if(/^\d{1,2}$/.test(t))a=Number(t);else if(/^\d{1,2}:\d{2}(:\d{2})?$/.test(t)){const i=t.split(":");a=Number(i[0]),n=Number(i[1])}if(!Number.isFinite(a)||a<0||a>23||!Number.isFinite(n)||n<0||n>59)return null;const o=a*2+(n>=30?1:0);return{dayNum:r||null,slot:o}}}function je(e){if(!e)return null;const t=String(e).trim().split("-");if(t.length!==2)return null;const a=Number(t[0]),n=Number(t[1]);return!Number.isFinite(a)||!Number.isFinite(n)||n<1||n>12?null:{year:a,month:n}}function Rt(e){return e==="day"?"hourly":e==="total"?"monthly":"daily"}function zt(e){return!!e&&!e.missing&&!e.future}function Pt(e){const r=e?.billable_total_tokens??e?.total_tokens??e?.value,t=Number(r);return Number.isFinite(t)&&t>=0?t:0}function Ut(e){const r=e?.total_tokens??e?.billable_total_tokens??e?.value,t=Number(r);return Number.isFinite(t)&&t>=0?t:0}function Lt(e){const r=Array.isArray(e)?e.filter(zt):[];let t=0,a=0,n=0,o=0,i=!1,l=0,c=-1,f=null;for(const d of r){const y=Ut(d),u=Pt(d);t+=y,a+=u;const x=Number(d?.conversation_count);Number.isFinite(x)&&x>0&&(n+=x);const m=Number(d?.total_cost_usd);Number.isFinite(m)&&(i=!0,o+=m),u>0&&(l+=1),u>c&&(c=u,f=d)}return{totalTokens:t,billableTokens:a,conversationCount:n,totalCostUsd:i?o:null,bucketCount:r.length,activeBuckets:l,peak:f&&c>0?{value:c,label:f.hour||f.day||f.month||""}:null}}function ue(e){return String(e).padStart(2,"0")}function tt(e){return typeof e=="string"&&e.trim()?e:"en-US"}function nt(e){const r=String(e||""),t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(r);if(!t)return null;const[,a,n,o]=t,i=new Date(Date.UTC(Number(a),Number(n)-1,Number(o)));return i.getUTCFullYear()!==Number(a)||i.getUTCMonth()+1!==Number(n)||i.getUTCDate()!==Number(o)?null:i}function se(e,r,t=!0){const a=nt(e);if(!a||typeof Intl>"u"||!Intl.DateTimeFormat)return String(e||"");try{return new Intl.DateTimeFormat(tt(r),{...t?{year:"numeric"}:{},month:"short",day:"numeric",timeZone:"UTC"}).format(a)}catch{return String(e||"")}}function pe(e,r){const t=String(e||""),a=/^(\d{4})-(\d{2})(?:-\d{2})?$/.exec(t);if(!a)return t;const n=new Date(Date.UTC(Number(a[1]),Number(a[2])-1,1));if(n.getUTCFullYear()!==Number(a[1])||n.getUTCMonth()+1!==Number(a[2]))return t;try{return new Intl.DateTimeFormat(tt(r),{year:"numeric",month:"short",timeZone:"UTC"}).format(n)}catch{return t}}function Ht(e,r){const t=nt(e);return t?(t.setUTCDate(t.getUTCDate()+r),`${t.getUTCFullYear()}-${ue(t.getUTCMonth()+1)}-${ue(t.getUTCDate())}`):e}function Le(e,r,t){if(!e)return"";if(r==="hourly"){const n=String(e.hour||e.label||""),o=/^(\d{4}-\d{2}-\d{2})T(\d{2}):(\d{2})/.exec(n);if(!o)return n;const[,i,l,c]=o,d=Number(l)*60+Number(c)+30,y=Math.floor(d/60)%24,u=d%60,x=se(i,t);if(d>=1440){const m=se(Ht(i,1),t);return`${x} ${l}:${c}–${m} ${ue(y)}:${ue(u)}`}return`${x} ${l}:${c}–${ue(y)}:${ue(u)}`}if(r==="monthly"){const n=String(e.month||e.label||"");return pe(n,t)}const a=String(e.day||e.label||"");return se(a,t)}function It(e,r,t,a){if(!e||!r)return null;const n=String(e),o=String(r);return t==="hourly"&&n===o?{start:`${se(n,a)} · 00:00`,end:"24:00"}:t==="monthly"?{start:pe(n,a),end:pe(o,a)}:{start:se(n,a),end:se(o,a)}}function Bt(e){if(!e||e.activeBuckets===0)return"trend.zoom.insight.empty";const r=e.totalTokens||0;return r<1e7?"trend.zoom.insight.calm":r<5e8?"trend.zoom.insight.steady":r<5e9?"trend.zoom.insight.heavy":"trend.zoom.insight.massive"}function Ot(e,r,t){if(!e)return"";if(r==="hourly"){const n=/T(\d{2}:\d{2})/.exec(String(e.hour||e.label||""));return n?n[1]:""}if(r==="monthly")return pe(String(e.month||e.label||""),t);const a=String(e.day||e.label||"");return se(a,t,!1)}const Yt=[{period:"day",labelKey:"trend.zoom.gran.30min"},{period:"month",labelKey:"trend.zoom.gran.day"},{period:"total",labelKey:"trend.zoom.gran.month"}],Kt=24,ce="#10b981";function He(e){return e==="day"?"day":e==="total"?"total":"month"}function Te(e,r){const t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e||""));if(!t)return e;const a=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));a.setUTCDate(a.getUTCDate()+r);const n=a.getUTCFullYear(),o=String(a.getUTCMonth()+1).padStart(2,"0"),i=String(a.getUTCDate()).padStart(2,"0");return`${n}-${o}-${i}`}function Gt(e,r){const t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e||""));if(!t)return e;const a=new Date(Date.UTC(Number(t[1]),Number(t[2])-1+r,Number(t[3]))),n=a.getUTCFullYear(),o=String(a.getUTCMonth()+1).padStart(2,"0"),i=String(a.getUTCDate()).padStart(2,"0");return`${n}-${o}-${i}`}function Xt(e,r){const t=/^(\d{4})-(\d{2})/.exec(String(e||"")),a=/^(\d{4})-(\d{2})/.exec(String(r||""));if(!t||!a)return Kt;const n=Number(a[1])*12+Number(a[2])-(Number(t[1])*12+Number(t[2]))+1;return Math.max(1,n)}function Ie(e,r){return r?e==="total"?{from:Gt(r,-23),to:r}:{from:Te(r,-29),to:r}:{from:null,to:null}}function Wt(e){const r=/^\d{4}-(\d{2}-\d{2})T(\d{2}:\d{2})/.exec(String(e||""));return r?`${r[1]} ${r[2]}`:e||""}function ge({label:e,value:r,sub:t,title:a}){return s.jsxs("div",{className:"flex flex-col gap-1.5 group",children:[s.jsx("span",{className:"text-[9px] font-bold uppercase tracking-widest font-mono text-zinc-400 dark:text-zinc-500",children:e}),s.jsx("span",{title:a,className:"text-xl font-black font-mono text-zinc-900 dark:text-zinc-50 tracking-tight leading-none tabular-nums transition-transform duration-200 group-hover:-translate-y-[1px]",children:r}),t?s.jsx("span",{className:"text-[10px] font-bold text-zinc-400 dark:text-zinc-500 font-mono tabular-nums",children:t}):null]})}function qt({zoomConfig:e,period:r,from:t,to:a,timeZoneLabel:n,onClose:o,renderChart:i}){const{currency:l,rate:c}=Qe(),{formatTokensTooltip:f}=Ve(),d=g=>kt(g),y=v.useMemo(()=>qe({timeZone:e?.timeZone,offsetMinutes:e?.tzOffsetMinutes,date:e?.now||new Date})||a||t||null,[e?.timeZone,e?.tzOffsetMinutes,e?.now,a,t]),[u,x]=v.useState(()=>He(r)),[m,k]=v.useState(y),[h,_]=v.useState(()=>Ie(He(r),y)),[C,M]=v.useState(!1),[D,j]=v.useState(!1),[P,R]=v.useState(!1),w=v.useRef(!1),F=y,W=g=>{x(g),g!=="day"&&_(Ie(g,y))},U=v.useMemo(()=>u==="day"?{from:m,to:m,months:void 0}:u==="total"?{from:void 0,to:h.to,months:Xt(h.from,h.to)}:{from:h.from,to:h.to,months:void 0},[u,m,h]),{rows:z,from:L,to:ae,loading:H}=St({...e,period:u,from:U.from,to:U.to,months:U.months}),$=v.useMemo(()=>Lt(z),[z]),q=v.useCallback(()=>{w.current||(w.current=!0,o())},[o]),Y=v.useCallback(()=>R(!0),[]),re=g=>{g.target===g.currentTarget&&P&&q()};if(v.useEffect(()=>{if(!P)return;const g=window.setTimeout(q,250);return()=>window.clearTimeout(g)},[q,P]),v.useEffect(()=>{const g=I=>{I.key==="Escape"&&Y()};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[Y]),typeof document>"u")return null;const Z=u==="day"&&!!m,Q=u==="day"&&!!m&&(!F||m<F),te=$.totalCostUsd!=null?Je($.totalCostUsd,{currency:l,rate:c}):null;return s.jsxs("div",{onAnimationEnd:re,onClick:g=>{g.target===g.currentTarget&&Y()},className:V("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",P?"animate-tt-fade-out":"animate-tt-fade-in"),children:[s.jsx("style",{children:`
|
|
2
|
-
@keyframes tt-fade-in { from { opacity: 0; } to { opacity: 1; } }
|
|
3
|
-
@keyframes tt-fade-out { from { opacity: 1; } to { opacity: 0; } }
|
|
4
|
-
@keyframes tt-modal-entrance {
|
|
5
|
-
from { opacity: 0; transform: scale(0.96) translateY(10px); }
|
|
6
|
-
to { opacity: 1; transform: scale(1) translateY(0); }
|
|
7
|
-
}
|
|
8
|
-
@keyframes tt-modal-exit {
|
|
9
|
-
from { opacity: 1; transform: scale(1) translateY(0); }
|
|
10
|
-
to { opacity: 0; transform: scale(0.96) translateY(10px); }
|
|
11
|
-
}
|
|
12
|
-
.animate-tt-fade-in { animation: tt-fade-in 0.2s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
13
|
-
.animate-tt-fade-out { animation: tt-fade-out 0.2s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
14
|
-
.animate-tt-modal { animation: tt-modal-entrance 0.3s cubic-bezier(0.34, 1.3, 0.64, 1) forwards; }
|
|
15
|
-
.animate-tt-modal-exit { animation: tt-modal-exit 0.2s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
|
16
|
-
@media (prefers-reduced-motion: reduce) {
|
|
17
|
-
.animate-tt-fade-in, .animate-tt-fade-out, .animate-tt-modal, .animate-tt-modal-exit { animation: none; }
|
|
18
|
-
}
|
|
19
|
-
`}),s.jsxs("div",{className:V("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",P?"animate-tt-modal-exit":"animate-tt-modal"),children:[s.jsx("button",{type:"button",onClick:Y,"aria-label":T("trend.zoom.close_aria"),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:s.jsx(pt,{size:16})}),s.jsxs("div",{className:"w-full md:w-[320px] shrink-0 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:[s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center gap-1.5 select-none",children:[s.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[s.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",style:{backgroundColor:ce}}),s.jsx("span",{className:"relative inline-flex rounded-full h-1.5 w-1.5",style:{backgroundColor:ce}})]}),s.jsx("span",{className:"text-[9px] font-extrabold uppercase tracking-widest font-mono text-zinc-400 dark:text-zinc-500",children:T("trend.zoom.badge")})]}),s.jsx("h4",{className:"text-xl font-black text-zinc-900 dark:text-zinc-50 tracking-tight leading-none mt-2 select-none",children:T("trend.monitor.label")}),n?s.jsx("p",{className:"text-[10px] text-zinc-400 dark:text-zinc-500 mt-1.5 font-mono select-none",children:n}):null,s.jsx("p",{className:"text-[11px] leading-relaxed text-zinc-400 dark:text-zinc-500 mt-2 font-normal select-none",children:T("trend.zoom.desc")})]}),s.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:[s.jsx(ge,{label:T("trend.zoom.stats.tokens"),value:d($.totalTokens),title:f($.totalTokens)}),te?s.jsx(ge,{label:T("trend.zoom.stats.cost"),value:te}):null,s.jsx(ge,{label:T("trend.zoom.stats.conversations"),value:$.conversationCount.toLocaleString()}),$.peak?s.jsx(ge,{label:T("trend.zoom.stats.peak"),value:d($.peak.value),title:f($.peak.value),sub:Wt($.peak.label)}):null]}),s.jsxs("div",{className:"flex flex-col gap-2 select-none",children:[s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx(jt,{size:11,style:{color:ce}}),s.jsx("span",{className:"text-[9px] font-extrabold uppercase tracking-widest font-mono",style:{color:ce},children:T("trend.zoom.insight_badge")})]}),s.jsxs("div",{className:"pl-3.5 border-l-2 relative",style:{borderColor:ce},children:[s.jsx("div",{className:"absolute inset-y-0 left-0 w-[3px] blur-[2px] opacity-15 pointer-events-none rounded-full",style:{backgroundColor:ce}}),s.jsx("p",{className:"text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-400 font-normal",children:T(Bt($),{active:$.activeBuckets,peak:d($.peak?.value||0)})})]})]})]}),s.jsxs("div",{className:"flex-1 min-w-0 flex flex-col p-5 md:p-6 overflow-y-auto",children:[s.jsxs("div",{className:"flex items-center justify-between gap-3 mb-6 pr-10",children:[s.jsx("div",{role:"tablist","aria-label":T("trend.zoom.gran.aria"),className:"flex rounded-md border border-oai-gray-200 dark:border-oai-gray-800 p-0.5 text-[11px]",children:Yt.map(g=>s.jsx("button",{type:"button",role:"tab","aria-selected":u===g.period,onClick:()=>W(g.period),className:V("px-2.5 py-1 rounded transition-colors",u===g.period?"bg-oai-gray-100 text-oai-black dark:bg-oai-gray-800 dark:text-oai-white font-medium":"text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200"),children:T(g.labelKey)},g.period))}),u==="day"?s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("button",{type:"button",onClick:()=>Z&&k(g=>Te(g,-1)),disabled:!Z,"aria-label":T("trend.zoom.prev_day"),className:"p-1 rounded-md text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 disabled:opacity-30 disabled:pointer-events-none transition-colors",children:s.jsx(xt,{size:16})}),s.jsxs($e,{open:C,onOpenChange:M,children:[s.jsx(Ee,{"aria-label":T("trend.zoom.pick_day"),className:"text-[12px] font-medium text-oai-gray-700 dark:text-oai-gray-200 tabular-nums min-w-[100px] text-center px-2 py-0.5 rounded-md border border-oai-gray-200 dark:border-oai-gray-800 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-colors",children:m||"—"}),s.jsx(Fe,{children:s.jsx(Ae,{sideOffset:8,side:"bottom",align:"center",className:"!z-[9999]",children:s.jsx(Re,{className:"bg-white dark:bg-oai-gray-900 border border-oai-gray-200 dark:border-oai-gray-700 rounded-xl shadow-lg",children:s.jsx(De,{from:m,to:m,onApply:g=>{g&&k(g),M(!1)},onCancel:()=>M(!1)})})})})]}),s.jsx("button",{type:"button",onClick:()=>Q&&k(g=>Te(g,1)),disabled:!Q,"aria-label":T("trend.zoom.next_day"),className:"p-1 rounded-md text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 disabled:opacity-30 disabled:pointer-events-none transition-colors",children:s.jsx(bt,{size:16})})]}):s.jsxs($e,{open:D,onOpenChange:j,children:[s.jsx(Ee,{"aria-label":T("trend.zoom.pick_range"),className:"text-xs font-medium text-oai-gray-600 dark:text-oai-gray-300 tabular-nums px-2.5 py-1 rounded-md border border-oai-gray-200 dark:border-oai-gray-800 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-colors select-none",children:h.from&&h.to?h.from===h.to?h.from:`${h.from} → ${h.to}`:"—"}),s.jsx(Fe,{children:s.jsx(Ae,{sideOffset:8,side:"bottom",align:"end",className:"!z-[9999]",children:s.jsx(Re,{className:"bg-white dark:bg-oai-gray-900 border border-oai-gray-200 dark:border-oai-gray-700 rounded-xl shadow-lg",children:s.jsx(De,{from:h.from,to:h.to,onApply:(g,I)=>{g&&_({from:g,to:I||g}),j(!1)},onCancel:()=>j(!1)})})})})]})]}),s.jsx("div",{className:"flex-1 min-h-0 flex flex-col",children:H&&(!z||z.length===0)?s.jsx("div",{className:"flex-1 flex items-center justify-center",children:s.jsx("p",{className:"text-sm text-oai-gray-400 dark:text-oai-gray-400",children:T("trend.zoom.loading")})}):i({rows:z,from:L,to:ae,period:u,timeZoneLabel:n})})]})]})]})}function Be(e,r){if(!Array.isArray(e)||e.length===0)return 0;if(e.length===1)return e[0];const t=(e.length-1)*r,a=Math.floor(t),n=Math.ceil(t);if(a===n)return e[a];const o=t-a;return e[a]+(e[n]-e[a])*o}function Jt(e,{clipOutliers:r=!0}={}){const t=Array.isArray(e)?e.filter(o=>Number.isFinite(o)&&o>0).sort((o,i)=>o-i):[];if(t.length===0)return{rawMax:0,effectiveMax:1,clippedValues:Array.isArray(e)?e.map(()=>0):[]};const a=t.at(-1)??0;let n=a;if(r&&t.length>=4){const o=Be(t,.25),i=Be(t,.75),l=Math.max(i-o,0),c=i+l*1.5;a>c&&(n=Math.max(c,i,1))}return{rawMax:a,effectiveMax:Math.max(n,1),clippedValues:Array.isArray(e)?e.map(o=>!Number.isFinite(o)||o<=0?0:Math.min(o,Math.max(n,1))):[]}}const Oe=["#f472b6","#38bdf8","#34d399","#fbbf24","#a78bfa","#fb7185","#2dd4bf","#f97316","#6366f1","#ec4899","#14b8a6","#f59e0b"],rt={Input:"#38bdf8","Cached Input":"#14b8a6",Output:"#a78bfa","Reasoning Output":"#fb7185"},Qt={codex:"#3b82f6",gpt:"#10b981",openai:"#10b981",claude:"#d97757",anthropic:"#d97757",gemini:"#2196f3",google:"#2196f3",kimi:"#a78bfa",moonshot:"#a78bfa",opencode:"#f59e0b",deepseek:"#f59e0b",droid:"#ef4444",kilo:"#facc15"};function at(e){const r=e.toLowerCase();for(const[n,o]of Object.entries(Qt))if(r.includes(n))return o;let t=0;for(let n=0;n<e.length;n++)t=e.charCodeAt(n)+((t<<5)-t);const a=Math.abs(t)%Oe.length;return Oe[a]}function Vt(e){if(!e||typeof e!="object")return[];const r=new Map;for(const[t,a]of Object.entries(e)){const n=Number(a);if(!Number.isFinite(n)||n<=0)continue;const o=String(t).trim()||"unknown",i=o.toLowerCase(),l=r.get(i);if(!l){r.set(i,{name:o,value:n,displayWeight:n});continue}l.value+=n,n>l.displayWeight&&(l.name=o,l.displayWeight=n)}return Array.from(r.values()).map(({name:t,value:a})=>({type:"model",name:t,value:a})).sort((t,a)=>a.value-t.value)}function Zt(e){if(!e)return[];const r=[];if(e.models&&typeof e.models=="object"&&r.push(...Vt(e.models)),r.length===0){const t=[{name:"Input",key:"input_tokens"},{name:"Cached Input",key:"cached_input_tokens"},{name:"Output",key:"output_tokens"},{name:"Reasoning Output",key:"reasoning_output_tokens"}];for(const a of t){const n=Number(e[a.key]);Number.isFinite(n)&&n>0&&r.push({type:"token_type",name:a.name,value:n})}}return r.sort((t,a)=>a.value-t.value)}function en(e,r){return e?.future?"predicted":e?.missing?"unsynced":r>0?"real":"real_zero"}const tn=.35,Ye=2,Ke=4,nn=v.memo(function({value:r,displayValue:t,scale:a,index:n,row:o,totalBars:i,onMouseEnter:l,onMouseLeave:c,onSelect:f,label:d}){const y=_t(),u=en(o,r),x=u==="predicted"||u==="unsynced",m=a.effectiveMax>0?t/a.effectiveMax*100:0;let k,h;u==="real"?(k=`${Math.max(m,2)}%`,h=`${Ke}px`):x&&m>0?(k=`${m}%`,h=`${Ke}px`):(k=`${Ye}px`,h=`${Ye}px`);const _=u==="real"?Zt(o):[],C=_.reduce((D,j)=>D+j.value,0),M=u!=="real"||C<=0;return s.jsxs(vt.div,{className:"group relative flex-1 self-stretch",initial:{opacity:0,scaleY:0},animate:{opacity:1,scaleY:1},transition:{duration:y?0:.3,delay:y?0:.4+n*.008,ease:[.16,1,.3,1]},style:{originY:1},onMouseEnter:D=>l(D,o,r,_,u,t),onMouseLeave:c,role:"button",tabIndex:0,"aria-label":d,onClick:D=>f(D,o,r,_,u,t),onKeyDown:D=>{(D.key==="Enter"||D.key===" ")&&(D.preventDefault(),f(D,o,r,_,u,t))},children:[s.jsx("div",{className:"absolute inset-x-0 top-0 bottom-0 bg-oai-gray-100/70 dark:bg-white/[0.08] opacity-0 group-hover:opacity-100 transition-opacity duration-150 pointer-events-none"}),s.jsx("div",{className:"absolute inset-x-0 bottom-0 flex flex-col-reverse justify-start overflow-hidden cursor-pointer transition-all duration-200",style:{height:k,minHeight:h},children:M?s.jsx("div",{"data-trend-bar":"true","data-trend-kind":u,className:V("h-full w-full group-hover:brightness-110 transition-all",u==="real"?"":"bg-oai-gray-100 dark:bg-oai-gray-800"),style:{opacity:x?tn:1,background:u==="real"?"#10b981":void 0}}):_.map((D,j)=>{const P=D.type==="token_type"?rt[D.name]:at(D.name),R=`${D.value/C*100}%`;return s.jsx("div",{"data-trend-bar":j===0?"true":void 0,className:"w-full group-hover:brightness-110 transition-all",style:{height:R,background:P}},j)})})]})});function rn(e){if(e?.missing||e?.future)return null;const r=e?.billable_total_tokens??e?.total_tokens??e?.value;if(r==null)return null;const t=Number(r);return Number.isFinite(t)&&t>=0?t:null}const Ge=.98;function an(e){if(!Array.isArray(e))return[];const r=new Array(e.length);for(let t=0;t<e.length;t++){if(e[t]!==null){r[t]=e[t];continue}let a=null,n=-1;for(let l=t-1;l>=0;l--)if(e[l]!==null){a=e[l],n=l;break}let o=null,i=-1;for(let l=t+1;l<e.length;l++)if(e[l]!==null){o=e[l],i=l;break}if(a!==null&&o!==null){const l=(t-n)/(i-n);r[t]=a+(o-a)*l}else if(a!==null){let l=0,c=0;for(let d=0;d<=n;d++)e[d]!==null&&(l+=e[d],c+=1);const f=c>0?l/c:a;r[t]=f*Math.pow(Ge,t-n)}else if(o!==null){let l=0,c=0;for(let d=i;d<e.length;d++)e[d]!==null&&(l+=e[d],c+=1);const f=c>0?l/c:o;r[t]=f*Math.pow(Ge,i-t)}else r[t]=0}return r}const Xe=10,We=8;function on(e){let r=0,t=document.documentElement.clientHeight||window.innerHeight;for(let a=e;a&&a!==document.body;a=a.parentElement){const n=window.getComputedStyle(a).overflowY;if(!n||n==="visible")continue;const o=a.getBoundingClientRect();r=Math.max(r,o.top),t=Math.min(t,o.bottom)}return{top:r+We,bottom:t-We}}function sn({columnTop:e,columnBottom:r,height:t,band:a,prefer:n=null}){const o=t+Xe,i=a.bottom-r,l=e-a.top;if(n==="above"&&l>=o)return{side:"above",maxHeight:null};if(i>=o)return{side:"below",maxHeight:null};if(l>=o)return{side:"above",maxHeight:null};const c=i>=l?"below":"above";return{side:c,maxHeight:Math.max(0,Math.floor((c==="below"?i:l)-Xe))}}function ln({rows:e,from:r,to:t,period:a,timeZoneLabel:n,showTimeZoneLabel:o=!0,className:i="",embedded:l=!1,chartHeightClass:c="h-40",isZoom:f=!1,zoomConfig:d=null}){const y=v.useMemo(()=>Array.isArray(e)&&e.length?e:[],[e]),u=v.useMemo(()=>y.some(p=>p?.future),[y]),{rawValues:x,seriesValues:m,scale:k,interpolatedValues:h}=v.useMemo(()=>{const p=y.map(rn),b=p.map(A=>A??0);return{rawValues:p,seriesValues:b,scale:Jt(b,{clipOutliers:a!=="total"}),interpolatedValues:an(p)}},[y,a]),{currency:_,rate:C}=Qe(),{formatTokens:M,formatTokensTooltip:D}=Ve(),j=Rt(a),P=Nt(),R=v.useMemo(()=>It(r,t,j,P),[r,j,P,t]),[w,F]=v.useState(null),[W,U]=v.useState({x:0,y:0,shiftX:0,flipDown:!1,maxHeight:null}),[z,L]=v.useState(!1),ae=v.useRef(null),H=v.useRef(null),$=v.useRef(null),q=v.useRef(null),Y=v.useRef(null),[re,Z]=v.useState(!1),Q=v.useRef(null),te=v.useCallback((p,b,A,G,O,ee)=>{F({row:b,value:A,segments:G,timeLabel:Le(b,j,P),kind:O,displayValue:ee});const N=p.currentTarget.getBoundingClientRect(),E=Q.current;if(!E)return;$.current=p.currentTarget;const B=E.getBoundingClientRect(),oe=N.left-B.left+N.width/2,le=Math.min(140,B.width/2),me=Math.max(le,Math.min(oe,B.width-le))-oe;U({x:oe,y:(f?N.top:N.bottom)-B.top,shiftX:me,flipDown:!0,maxHeight:null})},[j,P,f]);v.useLayoutEffect(()=>{if(!w||f)return;const p=$.current,b=Q.current,A=H.current;if(!p||!b||!A)return;const G=p.getBoundingClientRect(),{side:O,maxHeight:ee}=sn({columnTop:G.top,columnBottom:G.bottom,height:A.offsetHeight,band:on(b),prefer:q.current});q.current=O;const N=(O==="below"?G.bottom:G.top)-b.getBoundingClientRect().top,E=O==="below";U(B=>B.y===N&&B.flipDown===E&&B.maxHeight===ee?B:{...B,y:N,flipDown:E,maxHeight:ee})},[w,f]);const g=v.useCallback(()=>{q.current=null},[]),I=v.useCallback((...p)=>{z||te(...p)},[z,te]),ie=v.useCallback(()=>{z||F(null)},[z]),fe=v.useCallback((p,...b)=>{if(z&&Y.current===p.currentTarget){L(!1),F(null);return}Y.current=p.currentTarget,te(p,...b),L(!0)},[z,te]);return v.useEffect(()=>{if(!w||f)return;const p=b=>{b.type==="scroll"&&b.target instanceof Node&&ae.current?.contains(b.target)||(L(!1),F(null),q.current=null)};return window.addEventListener("resize",p),window.addEventListener("scroll",p,!0),()=>{window.removeEventListener("resize",p),window.removeEventListener("scroll",p,!0)}},[w,f]),v.useEffect(()=>{if(!z)return;const p=b=>{(b.type==="keydown"?b.key!=="Escape":ae.current?.contains(b.target)||Y.current?.contains(b.target))||(L(!1),F(null))};return document.addEventListener("pointerdown",p),document.addEventListener("keydown",p),()=>{document.removeEventListener("pointerdown",p),document.removeEventListener("keydown",p)}},[z]),v.useEffect(()=>{L(!1),F(null)},[y,j,P]),s.jsxs("div",{ref:Q,className:V("relative",!l&&"rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-900 p-5",f&&"flex h-full flex-col",i),children:[!l&&s.jsxs("div",{className:"mb-3 flex items-start justify-between gap-2",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:T("trend.monitor.label")}),o&&n&&s.jsx("p",{className:"text-xs text-oai-gray-400 dark:text-oai-gray-400 mt-0.5",children:n})]}),d&&s.jsx("button",{type:"button",onClick:()=>Z(!0),"aria-label":T("trend.zoom.open_aria"),title:T("trend.zoom.open_aria"),className:"shrink-0 p-1.5 rounded-md text-oai-gray-400 hover:text-oai-gray-700 dark:hover:text-oai-gray-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-colors",children:s.jsx(Tt,{size:14})})]}),s.jsxs("div",{className:V("space-y-3",f&&"flex flex-1 flex-col min-h-0 !space-y-0 gap-3"),children:[s.jsxs("div",{className:V("relative",f&&"flex-1 min-h-0"),children:[s.jsx("div",{className:"absolute inset-0 flex flex-col justify-between pointer-events-none",children:[0,25,50,75,100].map(p=>s.jsx("div",{className:"w-full border-t border-oai-gray-100 dark:border-oai-gray-800",style:{top:`${100-p}%`}},p))}),s.jsx("div",{className:V("flex items-end gap-0.5 relative z-0",c),onMouseLeave:g,children:m.length>0?m.map((p,b)=>{const A=y[b],O=A?.missing||A?.future?Math.min(h[b]??0,k.effectiveMax):k.clippedValues[b]??0;return s.jsx(nn,{value:p,displayValue:O,scale:k,index:b,row:A,totalBars:m.length,onMouseEnter:I,onMouseLeave:ie,onSelect:fe,label:Le(A,j,P)},b)}):s.jsx("div",{className:"flex-1 h-full flex items-center justify-center",children:s.jsx("p",{className:"text-sm text-oai-gray-400 dark:text-oai-gray-400",children:T("trend.monitor.empty")})})})]}),f&&m.length>0&&s.jsx("div",{className:"flex gap-0.5 select-none",children:y.map((p,b)=>{const A=m.length-1,G=Math.max(1,Math.ceil(m.length/8)),O=b%G===0||b===A,ee=b===0?"justify-start":b===A?"justify-end":"justify-center";return s.jsx("div",{className:V("flex-1 min-w-0 flex",ee),children:O&&s.jsx("span",{className:"text-[9px] text-oai-gray-400 dark:text-oai-gray-500 whitespace-nowrap font-mono",children:Ot(p,j,P)})},b)})}),u&&s.jsxs("div",{className:"flex items-center justify-end gap-1.5 text-[10px] font-medium text-oai-gray-400 dark:text-oai-gray-500","data-trend-prediction-legend":"true",children:[s.jsx("span",{"aria-hidden":"true",className:"h-2.5 w-3 rounded-[2px] bg-oai-gray-100 dark:bg-oai-gray-800 opacity-50"}),s.jsxs("span",{children:["~ ",T("trend.monitor.predicted")]})]}),R&&s.jsxs("div",{className:"flex justify-between text-xs text-oai-gray-500 dark:text-oai-gray-300 font-medium pt-2 border-t border-oai-gray-100 dark:border-oai-gray-800",children:[s.jsx("span",{children:R.start}),s.jsx("span",{children:R.end})]})]}),w&&s.jsxs("div",{"data-trend-tooltip":"true",ref:ae,"data-pinned":z,className:V("absolute z-[9999] w-0 h-0",z?"pointer-events-auto":"pointer-events-none"),style:{left:`${W.x}px`,top:`${W.y}px`},children:[s.jsxs("div",{ref:H,className:V("absolute left-0 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-[220px] flex flex-col gap-2 animate-in fade-in zoom-in-95 duration-100",W.flipDown?"top-[10px]":"bottom-[10px]",W.maxHeight!=null&&"overflow-y-auto"),style:{transform:`translateX(calc(-50% + ${W.shiftX}px))`,...W.maxHeight!=null&&{maxHeight:`${W.maxHeight}px`}},children:[!z&&s.jsx("p",{className:"text-[10px] text-oai-gray-400",children:T("trend.monitor.pin_hint")}),s.jsxs("div",{className:"flex items-center justify-between border-b border-oai-gray-100 dark:border-oai-gray-800/80 pb-1.5",children:[s.jsx("span",{className:"text-[11px] font-semibold text-oai-gray-500 dark:text-oai-gray-400",children:w.timeLabel}),w.kind==="predicted"&&s.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500",children:T("trend.monitor.predicted")}),w.kind==="unsynced"&&s.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500",children:T("trend.monitor.unsynced")})]}),s.jsxs("div",{className:"flex flex-col gap-2",children:[s.jsxs("div",{className:"flex items-baseline gap-1",children:[s.jsx("span",{title:D(w.kind==="predicted"||w.kind==="unsynced"?w.displayValue:w.value),className:"text-lg font-bold text-oai-gray-900 dark:text-white leading-none",children:w.kind==="predicted"||w.kind==="unsynced"?`~${M(Math.round(w.displayValue??0))}`:M(w.value)}),s.jsx("span",{className:"text-[10px] text-oai-gray-400 uppercase tracking-wider font-semibold",children:T("heatmap.unit.tokens")})]}),f&&(w.row?.total_cost_usd!=null||Number(w.row?.conversation_count)>0)&&s.jsxs("div",{className:"flex items-center gap-3 text-[11px] text-oai-gray-500 dark:text-oai-gray-400",children:[w.row?.total_cost_usd!=null&&s.jsxs("span",{children:[s.jsx("span",{className:"font-semibold text-oai-gray-700 dark:text-oai-gray-200",children:Je(w.row.total_cost_usd,{currency:_,rate:C})})," ",T("trend.zoom.tooltip.cost")]}),Number(w.row?.conversation_count)>0&&s.jsxs("span",{children:[s.jsx("span",{className:"font-semibold text-oai-gray-700 dark:text-oai-gray-200",children:Number(w.row.conversation_count).toLocaleString()})," ",T("trend.zoom.tooltip.conversations")]})]}),w.segments&&w.segments.length>0?s.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:[s.jsx("div",{className:"text-[10px] font-semibold text-oai-gray-400 dark:text-oai-gray-500 uppercase tracking-wider",children:w.segments[0].type==="model"?T("heatmap.tooltip.model_breakdown"):T("heatmap.tooltip.token_breakdown")}),s.jsx("div",{className:"flex flex-col gap-2 max-h-[150px] overflow-y-auto pr-1.5 oai-scrollbar",children:w.segments.map(({name:p,value:b,type:A})=>{const G=w.value||1,O=Math.round(b/G*100),ee=A==="token_type"?rt[p]:at(p);return s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsxs("div",{className:"flex items-center justify-between text-[11px] gap-3",children:[s.jsx("span",{className:"font-medium text-oai-gray-750 dark:text-oai-gray-200 truncate max-w-[130px]",title:p,children:p}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[s.jsx("span",{title:D(b),className:"font-mono text-oai-gray-900 dark:text-oai-gray-100 font-semibold",children:M(b)}),s.jsxs("span",{className:"text-[9px] text-oai-gray-450 dark:text-oai-gray-500 min-w-[28px] text-right font-medium",children:[O,"%"]})]})]}),s.jsx("div",{className:"w-full h-1 bg-oai-gray-100 dark:bg-oai-gray-800/85 rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full rounded-full transition-all duration-300",style:{width:`${O}%`,backgroundColor:ee,boxShadow:`0 0 4px ${ee}55`}})})]},p)})})]}):null]})]}),s.jsx("div",{className:V("absolute left-0 -translate-x-1/2 w-2.5 h-2.5 rotate-45 bg-white dark:bg-oai-gray-900 border-oai-gray-200/50 dark:border-oai-gray-800/50 shadow-sm",W.flipDown?"top-[6px] border-l border-t":"bottom-[6px] border-r border-b"),style:W.flipDown?{marginTop:"1px"}:{marginBottom:"1px"}})]}),re&&d&&s.jsx(qt,{zoomConfig:d,period:a,from:r,to:t,timeZoneLabel:n,onClose:()=>Z(!1),renderChart:p=>s.jsx(ln,{embedded:!0,isZoom:!0,chartHeightClass:"h-full",...p})})]})}export{ln as T,at as g,ze as t,St as u};
|