tokentracker-cli 1.1.7 → 1.1.8
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/dashboard/dist/assets/{AchievementBadge-BvHgbiVw.js → AchievementBadge-xbiBA5i9.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-Bfp4s86S.js → AchievementsPage-Bas-dACH.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-D_0d-wue.js → AchievementsSection-NIkQkv1K.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-CswBdrxR.js → BadgeDetailModal-D3UgBwf8.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-CiHx0-39.js → BotAnimated-BNyhe5RX.js} +1 -1
- package/dashboard/dist/assets/{Card-D_P_GpGV.js → Card-B4qMgo_P.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-DF8C0aFU.js → ClawdAnimated-B_6oXLru.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-AO3PXq3L.js → CommandPalette-DR50aykL.js} +1 -1
- package/dashboard/dist/assets/CommunityStatsModal-DbWZ2hX1.js +1 -0
- package/dashboard/dist/assets/{ConfirmModal-Dkes9XSh.js → ConfirmModal-CApD9tLe.js} +1 -1
- package/dashboard/dist/assets/{Controls-DanVQOJL.js → Controls-UQr6lc0S.js} +1 -1
- package/dashboard/dist/assets/DashboardPage-38JMPZYD.js +1 -0
- package/dashboard/dist/assets/{DevicePage-DqHfz-mA.js → DevicePage-B7n5TS6A.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-bTErbUan.js → DialogClose-BVYAi_Mb.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-CD1rCYqD.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-wJu8XVdR.js → DialogTitle-_gEgVrEF.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-BKwC8Giy.js → FadeIn-CqWPKBtn.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-Dc0pFvj1.js → HeaderGithubStar-nJV8kqj7.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-B9vlFH-p.js → HoverTooltip-CkPO2nyc.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-CsJ1PgvF.js → IpCheckPage-CBPPbv12.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-eF1J1hC5.js → LandingPage-B3kHRjIL.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-CFI7peYE.js → LeaderboardAvatar-C9UJap02.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-PP4US4yQ.js → LeaderboardPage-BaxbbkZ4.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-C5QWkQji.js → LeaderboardProfileModal-CSCpQGtj.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-BJURGX8H.js → LeaderboardProfilePage-Cr4oGPW3.js} +3 -3
- package/dashboard/dist/assets/{LimitsPage-DUngDTwb.js → LimitsPage-D80H3CN6.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-CYguu0fl.js → LocalOnlyNotice-B-IFH3nt.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-DXuCwYWd.js → LoginCard-D28bk46z.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-Dz0m0fxu.js → LoginModal-B3OIZlRl.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-jOLmSJtM.js → LoginPage-BUZcOhur.js} +1 -1
- package/dashboard/dist/assets/{PetPage-BrC2Vlkx.js → PetPage-B1ID7Hn_.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-D1ZuZ6qF.js → PopoverPopup-C4y60FZN.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-D6fA334Z.js → ProviderIcon-DINSm4-U.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-K8qjox3z.js → ResetPasswordPage-DuT61PlK.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-D0lZmjJp.js → SegmentedControl-CI97Hzlt.js} +1 -1
- package/dashboard/dist/assets/{Select-DnXhoIcT.js → Select-Br0lETb5.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-DaLHPEaI.js → SelectItemText-DkwRyFhO.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-B2Jwo3q0.js → ServiceStatusPage-CXmaHXok.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CqscAu03.js → SessionsPage-D4QNmkZK.js} +1 -1
- package/dashboard/dist/assets/SettingsPage-B2m9w6u2.js +2 -0
- package/dashboard/dist/assets/{SkillsPage-XbU2V_2F.js → SkillsPage-BgwQrJN5.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-yPB_tjQb.js → TokenGalaxy-Gu8Ow73w.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-CVe7ayLE.js → ToolbarRootContext-BQ1me9_q.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-CPGG-jEV.js → TrendMonitor-CvgRQWnP.js} +2 -2
- package/dashboard/dist/assets/{WidgetsPage-DWRry8La.js → WidgetsPage-CUqcWQRH.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-BQNXcJsy.js → WrappedPage-C3UN0ODa.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-CU61PE6P.js +45 -0
- package/dashboard/dist/assets/{agent-logos-ClPaafqy.js → agent-logos-CqHJCc4t.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-D9iXcTSi.js → arrow-up-right-DOj31845.js} +1 -1
- package/dashboard/dist/assets/{check-ClpRkox0.js → check-B3DcIhj-.js} +1 -1
- package/dashboard/dist/assets/{composite-BeLJ-eoZ.js → composite-84597ykh.js} +1 -1
- package/dashboard/dist/assets/{copy-SgX3AIm3.js → copy-DHKp6LiG.js} +1 -1
- package/dashboard/dist/assets/{download-nN_fUpW9.js → download-8BXZUZ5E.js} +1 -1
- package/dashboard/dist/assets/{external-link-C_KAZYfd.js → external-link-MMLkzpJo.js} +1 -1
- package/dashboard/dist/assets/{flame-Y4jft3cb.js → flame-CS31bpav.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-DgHV0o-Z.js → format-tokens-Db794xGj.js} +1 -1
- package/dashboard/dist/assets/{icons-OfFaXJDp.js → icons-DbJFxYam.js} +1 -1
- package/dashboard/dist/assets/{index-7QPrFzyL.js → index-C43slbyq.js} +1 -1
- package/dashboard/dist/assets/{index-BKJfXEXA.js → index-DxRNZBk8.js} +1 -1
- package/dashboard/dist/assets/{index-BWdBrNhr.js → index-zvktTnpL.js} +1 -1
- package/dashboard/dist/assets/{info-lrIngAOG.js → info-BBYVrlZQ.js} +1 -1
- package/dashboard/dist/assets/{link-2-CX_TTpam.js → link-2-BAkJwRS7.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-DAt8Rl6H.js → loader-circle-qmDffs-C.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-BhF9GJwe.js → maximize-2-DsglOasI.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-Ozg3867-.js → modifiers.esm-EKtyGFrY.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-AjSSS90b.js → monitor-smartphone-i1wfcnRb.js} +1 -1
- package/dashboard/dist/assets/{plus-BW8P8uiQ.js → plus-Cu09y-uC.js} +1 -1
- package/dashboard/dist/assets/provider-display-CqsH0Sl4.js +42 -0
- package/dashboard/dist/assets/{react-DwTWkLQf.js → react-BhNxIPTw.js} +1 -1
- package/dashboard/dist/assets/{search-DbwR9JhN.js → search-CnD0oNqF.js} +1 -1
- package/dashboard/dist/assets/skills-api-BZjW22xy.js +1 -0
- package/dashboard/dist/assets/{sortable.esm-DSWAIKHA.js → sortable.esm-DKZHcMD3.js} +1 -1
- package/dashboard/dist/assets/{store-BPfJGR9z.js → store-DtFmZUKU.js} +1 -1
- package/dashboard/dist/assets/{terminal-U-gMhjaN.js → terminal-Ci6VJSXB.js} +1 -1
- package/dashboard/dist/assets/{trash-Bu1AqpoX.js → trash-DFtauQXa.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-DfSn2jNt.js → use-community-stats-CtiK0rE3.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-7m4DXn4B.js → use-latest-request-guard-AUvY3uHN.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-mRd0OnhT.js → use-limits-display-prefs-BB8SjBZP.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-CBae4AuZ.js → use-ordered-list-CKNhZ510.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-BXh1HaOk.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-DCweltax.js → use-session-efficiency-pref-C0qtk6TK.js} +1 -1
- package/dashboard/dist/assets/{use-transform-BPegjDim.js → use-transform-DYicUvFj.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-DKO2kwUE.js → use-usage-limits-CWRjxEix.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-5h4sZ7c9.js → useCurrency-LH_2wEBf.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-BELg6Qla.js → useTokenFormat-DKsWnBvy.js} +1 -1
- package/dashboard/dist/assets/{zap-q4Z6ZRMI.js → zap-CAoJCLuz.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/commands/device-login.js +3 -2
- package/src/commands/sync.js +34 -12
- package/src/lib/cloud-account.js +93 -39
- package/src/lib/function-url.js +27 -0
- package/src/lib/local-api.js +141 -31
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/telemetry.js +3 -2
- package/src/lib/upload-throttle.js +6 -0
- package/dashboard/dist/assets/CommunityStatsModal-Dhx0AXIU.js +0 -1
- package/dashboard/dist/assets/DashboardPage-CtrTRoRf.js +0 -1
- package/dashboard/dist/assets/DialogDescription-HFssj1J8.js +0 -1
- package/dashboard/dist/assets/SettingsPage-CL2euJqr.js +0 -2
- package/dashboard/dist/assets/__vite-browser-external-CAVICAeZ.js +0 -45
- package/dashboard/dist/assets/provider-display-Dmqqa8F4.js +0 -42
- package/dashboard/dist/assets/skills-api-CdNR4QHm.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-uScStq9r.js +0 -1
package/src/lib/telemetry.js
CHANGED
|
@@ -18,6 +18,7 @@ const pkg = require("../../package.json");
|
|
|
18
18
|
const { readJson, writeJson } = require("./fs");
|
|
19
19
|
const { getOrCreateMachineId } = require("./machine-id");
|
|
20
20
|
const { resolveRuntimeConfig } = require("./runtime-config");
|
|
21
|
+
const { functionUrlFor, fetchFunctionResponse } = require("./function-url");
|
|
21
22
|
const {
|
|
22
23
|
decideAutoUpload,
|
|
23
24
|
recordUploadSuccess,
|
|
@@ -132,7 +133,7 @@ async function maybeSendHeartbeat({
|
|
|
132
133
|
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
133
134
|
let response;
|
|
134
135
|
try {
|
|
135
|
-
response = await
|
|
136
|
+
response = await fetchFunctionResponse(functionUrlFor(runtime.baseUrl, HEARTBEAT_FUNCTION_SLUG), {
|
|
136
137
|
method: "POST",
|
|
137
138
|
headers: {
|
|
138
139
|
"Content-Type": "application/json",
|
|
@@ -140,7 +141,7 @@ async function maybeSendHeartbeat({
|
|
|
140
141
|
},
|
|
141
142
|
body: JSON.stringify(payload),
|
|
142
143
|
signal: controller.signal,
|
|
143
|
-
});
|
|
144
|
+
}, fetchImpl);
|
|
144
145
|
} finally {
|
|
145
146
|
clearTimeout(timer);
|
|
146
147
|
}
|
|
@@ -19,6 +19,8 @@ function normalizeState(raw) {
|
|
|
19
19
|
backoffStep: toSafeInt(s.backoffStep),
|
|
20
20
|
lastErrorAt: typeof s.lastErrorAt === "string" ? s.lastErrorAt : null,
|
|
21
21
|
lastError: typeof s.lastError === "string" ? s.lastError : null,
|
|
22
|
+
lastErrorStatus: toSafeInt(s.lastErrorStatus),
|
|
23
|
+
lastErrorCode: typeof s.lastErrorCode === "string" ? s.lastErrorCode : null,
|
|
22
24
|
updatedAt: typeof s.updatedAt === "string" ? s.updatedAt : null,
|
|
23
25
|
};
|
|
24
26
|
}
|
|
@@ -74,6 +76,8 @@ function recordUploadSuccess({ nowMs, state, config, randInt }) {
|
|
|
74
76
|
backoffStep: 0,
|
|
75
77
|
lastErrorAt: null,
|
|
76
78
|
lastError: null,
|
|
79
|
+
lastErrorStatus: 0,
|
|
80
|
+
lastErrorCode: null,
|
|
77
81
|
updatedAt: new Date(nowMs).toISOString(),
|
|
78
82
|
};
|
|
79
83
|
}
|
|
@@ -103,6 +107,8 @@ function recordUploadFailure({ nowMs, state, error, config }) {
|
|
|
103
107
|
backoffStep: Math.min(20, (s.backoffStep || 0) + 1),
|
|
104
108
|
lastErrorAt: new Date(nowMs).toISOString(),
|
|
105
109
|
lastError: truncate(String(error?.message || "upload failed"), 200),
|
|
110
|
+
lastErrorStatus: status,
|
|
111
|
+
lastErrorCode: typeof error?.code === "string" ? error.code : null,
|
|
106
112
|
updatedAt: new Date(nowMs).toISOString(),
|
|
107
113
|
};
|
|
108
114
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{m as R,j as e,Z as P,n as z,r as D,c as n,X as S,l as K}from"./__vite-browser-external-CAVICAeZ.js";import{m as M}from"./react-DwTWkLQf.js";import{A as U,W as B}from"./icons-OfFaXJDp.js";import{u as F}from"./useTokenFormat-BELg6Qla.js";import{P as G}from"./ProviderIcon-D6fA334Z.js";import{T as W}from"./TrendMonitor-CPGG-jEV.js";import{T as V}from"./AchievementBadge-BvHgbiVw.js";import{T as X}from"./terminal-U-gMhjaN.js";import{D as Z,a as Y,b as H,c as q,d as J,e as Q}from"./DialogTitle-wJu8XVdR.js";import{D as ee}from"./DialogDescription-HFssj1J8.js";import{D as ae}from"./DialogClose-bTErbUan.js";import"./useCurrency-5h4sZ7c9.js";import"./use-latest-request-guard-7m4DXn4B.js";import"./PopoverPopup-D1ZuZ6qF.js";import"./store-BPfJGR9z.js";import"./composite-BeLJ-eoZ.js";import"./ToolbarRootContext-CVe7ayLE.js";import"./maximize-2-BhF9GJwe.js";import"./use-reduced-motion-uScStq9r.js";import"./zap-q4Z6ZRMI.js";import"./flame-Y4jft3cb.js";const C={name:"trending-down",size:24,node:[["path",{d:"M16 17h6v-6",key:"t6n2it"}],["path",{d:"m22 17-8.5-8.5-5 5L2 7",key:"x473p"}]]};C.node;const te=R(C),O=10,_={input:"var(--community-token-input)",cache_read:"var(--community-token-cache-read)",cache_write:"var(--community-token-cache-write)",output:"var(--community-token-output)",reasoning:"var(--community-token-reasoning)"},re={CLAUDE:"var(--community-claude)",CODEX:"var(--community-codex)",GEMINI:"var(--community-gemini)",CURSOR:"var(--community-cursor)",OPENCODE:"var(--community-opencode)",HERMES:"var(--community-hermes)",KIMI:"var(--community-kimi)",MIMO:"var(--community-mimo)",COPILOT:"var(--community-copilot)",KIRO:"var(--community-kiro)",GROK:"var(--community-grok)",DEEPSEEK:"var(--community-deepseek)",ZCODE:"var(--community-zcode)",WORKBUDDY:"var(--community-workbuddy)",MINIMAX:"var(--community-minimax)",DROID:"var(--community-droid)"};function ie(t){return re[String(t||"").toUpperCase()]||"var(--community-muted)"}const se=[[/claude|fable|opus|sonnet|haiku/,"CLAUDE"],[/gpt|codex|o3|o4/,"CODEX"],[/gemini/,"GEMINI"],[/composer|cursor/,"CURSOR"],[/kimi/,"KIMI"],[/mimo/,"MIMO"],[/copilot/,"COPILOT"],[/kiro/,"KIRO"],[/grok/,"GROK"],[/deepseek/,"DEEPSEEK"],[/glm/,"ZCODE"],[/hy3/,"WORKBUDDY"],[/minimax/,"MINIMAX"]],g=["overview","providers","community","models"];function oe(t){const s=String(t||"").toLowerCase(),a=se.find(([i])=>i.test(s));return a?a[1]:""}function u(t){const s=Number(t);return Number.isFinite(s)?`${s.toFixed(1)}%`:"—"}function p(t){return K(Number(t)||0)}function ne(t){return t?new Date(`${t}T00:00:00Z`).toLocaleDateString(void 0,{month:"short",day:"numeric",timeZone:"UTC"}):""}function k(){return e.jsx("div",{className:"flex h-full min-h-40 items-center justify-center text-xs text-oai-gray-400",children:n("leaderboard.community.modal.no_data")})}function b({children:t,detail:s}){return e.jsxs("div",{className:"mb-3 flex items-baseline justify-between gap-4",children:[e.jsx("h3",{className:"text-xs font-medium uppercase tracking-wide text-oai-gray-500 dark:text-oai-gray-400",children:t}),s?e.jsx("span",{className:"text-xs text-oai-gray-400",children:s}):null]})}function I({value:t,label:s}){const a=Number(t);if(!Number.isFinite(a))return null;const i=Math.sign(a)!==-1,r=i?V:te;return e.jsxs("span",{className:`inline-flex items-center gap-1 text-xs font-medium tabular-nums ${i?"text-emerald-600 dark:text-emerald-400":"text-rose-600 dark:text-rose-400"}`,title:s,children:[e.jsx(r,{className:"size-3","aria-hidden":"true"}),i?"+":"",a.toFixed(1),"%"]})}function j({label:t,value:s,title:a,delta:i,deltaLabel:r}){return e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-xs font-medium text-oai-gray-500 dark:text-oai-gray-400",children:t}),e.jsxs("div",{className:"mt-1 flex min-w-0 items-baseline gap-2",children:[e.jsx("span",{className:"truncate text-xl font-semibold leading-none tracking-tight text-oai-black tabular-nums dark:text-white",title:a,children:s}),e.jsx(I,{value:i,label:r})]})]})}function A({fillWidth:t,share:s,color:a="var(--oai-blue)",ariaLabel:i,dataAttrs:r,children:o}){return e.jsxs("div",{...r,className:"group relative grid min-h-11 grid-cols-[minmax(0,1fr)_auto] items-center gap-3 overflow-hidden px-2.5 transition-colors hover:bg-oai-gray-50 dark:hover:bg-oai-gray-900/60",children:[e.jsx("div",{className:"pointer-events-none absolute inset-y-0 left-0 opacity-[0.15] transition-opacity group-hover:opacity-[0.22] dark:opacity-[0.24] dark:group-hover:opacity-[0.32]",style:{width:`${t}%`,backgroundColor:a},role:"progressbar","aria-label":i,"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":Number(s)||0}),o]})}function T({rank:t,provider:s,name:a,fillWidth:i,share:r,tokens:o,tokensTitle:l,dataAttrs:c}){return e.jsxs(A,{fillWidth:i,share:r,color:ie(s),ariaLabel:`${a} ${u(r)}`,dataAttrs:c,children:[e.jsxs("div",{className:"relative flex min-w-0 items-center gap-2.5",children:[e.jsx("span",{className:`w-5 shrink-0 text-xs tabular-nums ${t<=3?"font-semibold text-oai-gray-700 dark:text-oai-gray-200":"text-oai-gray-400"}`,children:t}),e.jsx("span",{className:"grid size-6 shrink-0 place-items-center text-oai-gray-700 dark:text-oai-gray-200",children:e.jsx(G,{provider:s,size:15})}),e.jsx("span",{className:"truncate text-xs font-medium text-oai-gray-700 dark:text-oai-gray-200",title:a,children:a})]}),e.jsxs("div",{className:"relative min-w-[4.5rem] text-right",children:[e.jsx("div",{className:"text-xs font-semibold text-oai-black tabular-nums dark:text-white",title:l,children:o}),e.jsx("div",{className:"text-xs text-oai-gray-500 tabular-nums dark:text-oai-gray-400",children:u(r)})]})]})}function le({rows:t,formatTokensTooltip:s}){return t.length?e.jsxs("div",{className:"mt-7",children:[e.jsx(b,{children:n("leaderboard.community.modal.token_mix")}),e.jsx("div",{className:"flex h-1.5 overflow-hidden bg-oai-gray-100 dark:bg-oai-gray-800",children:t.map(a=>e.jsx("div",{style:{width:`${Math.max(Number(a.share)||0,0)}%`,backgroundColor:_[a.key]||"var(--community-muted)"},title:`${n(`leaderboard.community.modal.token_mix.${a.key}`)} · ${u(a.share)}`},a.key))}),e.jsx("div",{className:"mt-3 flex flex-wrap gap-x-5 gap-y-1.5",children:t.map(a=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs text-oai-gray-500 dark:text-oai-gray-400",title:s(a.tokens),children:[e.jsx("span",{className:"size-2",style:{backgroundColor:_[a.key]||"var(--community-muted)"}}),n(`leaderboard.community.modal.token_mix.${a.key}`),e.jsx("span",{className:"tabular-nums text-oai-gray-700 dark:text-oai-gray-200",children:u(a.share)})]},a.key))})]}):null}function f({label:t,value:s,title:a,delta:i,deltaLabel:r,className:o=""}){return e.jsxs("div",{className:`min-w-0 ${o}`,children:[e.jsx("div",{className:"truncate text-xs text-oai-gray-500 dark:text-oai-gray-400",children:t}),e.jsxs("div",{className:"mt-1 flex min-w-0 items-baseline gap-2",children:[e.jsx("span",{className:"truncate text-base font-semibold leading-none tracking-tight tabular-nums text-oai-black dark:text-white",title:a,children:s}),e.jsx(I,{value:i,label:r})]})]})}function de({trendRows:t,activeDevelopers30d:s,developerGrowthPct:a,formatTokens:i,formatTokensTooltip:r}){if(!t.length)return null;const o=t.reduce((m,h)=>m+h.value,0),l=t.reduce((m,h)=>m.value<h.value?h:m,t[0]),c=o/t.length;return e.jsxs("div",{className:"mt-5 grid grid-cols-3 divide-x divide-oai-gray-100 border-y border-oai-gray-100 py-3.5 dark:divide-oai-gray-800/80 dark:border-oai-gray-800/80",children:[e.jsx(f,{className:"pr-4",label:n("leaderboard.community.modal.daily_average"),value:i(c),title:r(c)}),e.jsx(f,{className:"px-4",label:`${n("leaderboard.community.modal.peak_day")} · ${l.day}`,value:i(l.value),title:r(l.value)}),e.jsx(f,{className:"pl-4",label:n("leaderboard.community.modal.active_30d"),value:p(s),title:Number(s).toLocaleString(),delta:a,deltaLabel:n("leaderboard.community.modal.vs_previous_week")})]})}function me({trendRows:t,mix:s,activeDevelopers30d:a,developerGrowthPct:i,formatTokens:r,formatTokensTooltip:o}){return!t.length&&!s.length?e.jsx(k,{}):e.jsxs("div",{children:[e.jsx(b,{detail:n("leaderboard.community.modal.utc_note"),children:n("leaderboard.community.modal.community_activity")}),e.jsx(W,{embedded:!0,rows:t,from:t[0]?.day,to:t.at(-1)?.day,chartHeightClass:"h-44"}),e.jsx(de,{trendRows:t,activeDevelopers30d:a,developerGrowthPct:i,formatTokens:r,formatTokensTooltip:o}),e.jsx(le,{rows:s,formatTokensTooltip:o})]})}function ce({rows:t,maxShare:s,formatTokens:a,formatTokensTooltip:i}){return t.length?e.jsx("div",{className:"space-y-0.5",children:t.map((r,o)=>e.jsx(T,{rank:o+1,dataAttrs:{"data-provider-rank":o+1,"data-provider-name":r.name},provider:String(r.name).toUpperCase(),name:r.name,fillWidth:Math.max((Number(r.share)||0)/s*100,2),share:r.share,tokens:a(r.tokens),tokensTitle:i(r.tokens)},r.name))}):e.jsx(k,{})}function xe({rows:t,maxShare:s,formatTokens:a,formatTokensTooltip:i}){return t.length?e.jsx("div",{className:"space-y-0.5",children:t.map((r,o)=>{const l=Number(r.share)||0;return e.jsx(T,{rank:o+1,dataAttrs:{"data-model-rank":o+1,"data-model-name":r.name},provider:oe(r.name),name:r.name,fillWidth:Math.max(l/s*100,2),share:l,tokens:a(r.tokens),tokensTitle:i(r.tokens)},r.name)})}):e.jsx(k,{})}function ue({name:t}){const s=String(t||"").toLowerCase();return s==="darwin"?e.jsx(U,{className:"size-3.5"}):s==="win32"?e.jsx(B,{className:"size-3.5"}):e.jsx(X,{className:"size-4","aria-hidden":"true"})}const he=.175,ye=.3;function ge({bands:t,formatTokensTooltip:s}){const a=t.reduce((r,o)=>Math.max(r,Number(o.developer_share)||0),0)||1,i=r=>`${n(`leaderboard.community.modal.band.${r.key}`)} · ${n("leaderboard.community.modal.developer_count",{count:p(r.developers)})} (${s(r.tokens)})`;return e.jsxs("div",{children:[e.jsx("div",{className:"flex gap-2 border-b border-oai-gray-200 dark:border-oai-gray-800",children:t.map((r,o)=>{const l=Number(r.developer_share)||0,c=Math.max(l/a*80,2);return e.jsxs("div",{className:"relative h-32 min-w-0 flex-1",title:i(r),children:[e.jsx("div",{role:"progressbar","aria-label":n("leaderboard.community.modal.developer_share_title",{share:u(l)}),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":l,className:"absolute inset-x-0 bottom-0",style:{height:`${c}%`,backgroundColor:"var(--oai-blue)",opacity:ye+o*he}}),e.jsx("div",{className:"absolute inset-x-0 text-center text-xs font-medium tabular-nums text-oai-gray-700 dark:text-oai-gray-200",style:{bottom:`calc(${c}% + 4px)`},children:u(l)})]},r.key)})}),e.jsx("div",{className:"mt-2 flex gap-2",children:t.map(r=>e.jsxs("div",{className:"min-w-0 flex-1 text-center",title:i(r),children:[e.jsx("div",{className:"truncate text-xs font-medium text-oai-gray-700 dark:text-oai-gray-200",children:n(`leaderboard.community.modal.band.${r.key}`)}),e.jsx("div",{className:"truncate text-xs tabular-nums text-oai-gray-500 dark:text-oai-gray-400",children:p(r.developers)})]},r.key))})]})}function pe({bands:t,platforms:s,formatTokensTooltip:a}){return!t.length&&!s.length?e.jsx(k,{}):e.jsxs("div",{className:"space-y-8",children:[t.length?e.jsxs("div",{children:[e.jsx(b,{children:n("leaderboard.community.modal.usage_distribution")}),e.jsx(ge,{bands:t,formatTokensTooltip:a})]}):null,s.length?e.jsxs("div",{children:[e.jsx(b,{children:n("leaderboard.community.modal.platforms")}),e.jsx("div",{className:"space-y-0.5",children:s.map(i=>e.jsxs(A,{fillWidth:Math.max(Number(i.share)||0,1),share:i.share,ariaLabel:`${n(`leaderboard.community.modal.platform.${i.name}`)} ${u(i.share)}`,children:[e.jsxs("div",{className:"relative flex min-w-0 items-center gap-2.5",children:[e.jsx("span",{className:"grid size-6 shrink-0 place-items-center text-oai-gray-700 dark:text-oai-gray-200",children:e.jsx(ue,{name:i.name})}),e.jsx("span",{className:"truncate text-xs font-medium text-oai-gray-700 dark:text-oai-gray-200",children:n(`leaderboard.community.modal.platform.${i.name}`)})]}),e.jsxs("div",{className:"relative min-w-[4.5rem] text-right",children:[e.jsx("div",{className:"text-xs font-semibold text-oai-black tabular-nums dark:text-white",children:u(i.share)}),e.jsx("div",{className:"text-xs text-oai-gray-500 tabular-nums dark:text-oai-gray-400",title:Number(i.machines||0).toLocaleString(),children:n("leaderboard.community.modal.machine_count",{count:p(i.machines)})})]})]},i.name))})]}):null]})}function ve({isOpen:t,onClose:s,communityStats:a}){const{formatTokens:i,formatTokensTooltip:r}=F(),[o,l]=D.useState("overview"),c=a?.status==="ready",m=D.useMemo(()=>{if(!c)return null;const d=(Array.isArray(a.providers)?a.providers:[]).slice(0,O),x=(Array.isArray(a.topModels)?a.topModels:[]).slice(0,O),y=v=>v.reduce(($,L)=>Math.max($,Number(L.share)||0),0)||1;return{providers:d,models:x,providersMaxShare:y(d),modelsMaxShare:y(x),trendRows:(Array.isArray(a.dailyGrowth)?a.dailyGrowth:[]).map(v=>({day:ne(v.day),value:Number(v.tokens)||0})),mix:Array.isArray(a.tokenMix)?a.tokenMix:[],bands:Array.isArray(a.userDistribution)?a.userDistribution:[],platforms:Array.isArray(a.platforms)?a.platforms:[]}},[c,a]);if(!m)return null;const h=Number(a.tokenFloor)||0,N=Number(a.activeDevelopersTotal)||Number(a.totalEntries)||0,w=Number(a.tokens30d)||0,E=d=>{if(d.key!=="ArrowRight"&&d.key!=="ArrowLeft")return;d.preventDefault();const x=d.key==="ArrowRight"?1:-1,y=g[(g.indexOf(o)+x+g.length)%g.length];l(y),d.currentTarget.querySelector(`[data-tab-id="${y}"]`)?.focus()};return e.jsx(Z,{open:t,onOpenChange:d=>!d&&s(),children:e.jsxs(Y,{children:[e.jsx(H,{className:"fixed inset-0 z-[100] bg-black/50 backdrop-blur-[3px] transition-opacity duration-200 ease-out data-[ending-style]:opacity-0 data-[starting-style]:opacity-0"}),e.jsx(q,{className:"fixed inset-0 z-[101] flex items-center justify-center p-2 sm:p-5",children:e.jsxs(J,{className:"relative flex h-[min(42rem,92vh)] w-full max-w-xl flex-col overflow-hidden rounded-2xl bg-white shadow-2xl ring-1 ring-black/10 transition-[opacity,transform] duration-[220ms] ease-[cubic-bezier(0.16,1,0.3,1)] data-[ending-style]:translate-y-3 data-[ending-style]:scale-[0.98] data-[ending-style]:opacity-0 data-[starting-style]:translate-y-3 data-[starting-style]:scale-[0.98] data-[starting-style]:opacity-0 dark:bg-oai-gray-950 dark:ring-white/10",children:[e.jsxs("header",{"data-testid":"community-metrics-header",className:"shrink-0 px-5 pt-5 sm:px-6",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx(Q,{className:"text-lg font-semibold tracking-[-0.02em] text-oai-black dark:text-white",children:n("leaderboard.community.modal.title")}),e.jsx(ee,{className:"sr-only",children:n("leaderboard.community.modal.description")})]}),e.jsx(ae,{className:"-mr-1 -mt-1 grid size-8 place-items-center rounded-full text-oai-gray-400 transition-colors hover:bg-black/5 hover:text-oai-black dark:hover:bg-white/10 dark:hover:text-white","aria-label":n("shared.dialog.close"),children:e.jsx(S,{className:"size-4"})})]}),e.jsxs("div",{className:"mt-4 grid grid-cols-3 gap-x-5",children:[e.jsx(j,{label:n("leaderboard.community.modal.total_tokens"),value:i(h),title:r(h)}),e.jsx(j,{label:n("leaderboard.community.modal.tokens_30d"),value:i(w),title:r(w),delta:a.tokenGrowthPct,deltaLabel:n("leaderboard.community.modal.vs_previous_week")}),e.jsx(j,{label:n("leaderboard.community.modal.contributors"),value:p(N),title:N.toLocaleString()})]}),e.jsx("div",{className:"mt-4 flex items-end overflow-x-auto border-b border-oai-gray-100 dark:border-oai-gray-900",role:"tablist","aria-label":n("leaderboard.community.modal.views"),onKeyDown:E,children:g.map(d=>{const x=o===d;return e.jsxs("button",{type:"button",role:"tab","data-tab-id":d,"aria-selected":x,tabIndex:x?0:-1,onClick:()=>l(d),className:`relative mr-5 h-10 shrink-0 text-sm font-medium transition-colors last:mr-0 ${x?"text-oai-black dark:text-white":"text-oai-gray-500 hover:text-oai-gray-700 dark:text-oai-gray-400 dark:hover:text-oai-gray-200"}`,children:[n(`leaderboard.community.modal.tab.${d}`),x?e.jsx(M.span,{layoutId:"community-metrics-tab-underline",className:"absolute inset-x-0 -bottom-px h-0.5 rounded-full bg-oai-black dark:bg-white",transition:{type:"spring",stiffness:420,damping:34}}):null]},d)})})]}),e.jsx("div",{"data-testid":"community-metrics-content",className:"min-h-0 flex-1 overflow-y-auto px-5 py-5 sm:px-6",children:e.jsxs(M.div,{initial:{opacity:0,y:4},animate:{opacity:1,y:0},transition:{duration:.18,ease:[.16,1,.3,1]},className:"h-full",children:[o==="overview"?e.jsx(me,{trendRows:m.trendRows,mix:m.mix,activeDevelopers30d:Number(a.activeDevelopers30d)||0,developerGrowthPct:a.developerGrowthPct,formatTokens:i,formatTokensTooltip:r}):null,o==="providers"?e.jsx(ce,{rows:m.providers,maxShare:m.providersMaxShare,formatTokens:i,formatTokensTooltip:r}):null,o==="community"?e.jsx(pe,{bands:m.bands,platforms:m.platforms,formatTokensTooltip:r}):null,o==="models"?e.jsx(xe,{rows:m.models,maxShare:m.modelsMaxShare,formatTokens:i,formatTokensTooltip:r}):null]},o)})]})})]})})}function Ke(t){return e.jsx(P,{mode:z.COMPACT,children:e.jsx(ve,{...t})})}export{Ke as CommunityStatsModal};
|