tokentracker-cli 0.93.7 → 0.94.0
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.de.md +1 -1
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dashboard/dist/assets/{AchievementBadge-DqvblIQY.js → AchievementBadge-DPqwk2zI.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-C-xm27pB.js → AchievementsPage-CELHoMQt.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-D8Oe2FGJ.js → AchievementsSection-DdAC0VCb.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-BJOcOnHo.js → BadgeDetailModal-Dd4I1SpM.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-6fB046ld.js → BotAnimated-DL2-4mnm.js} +1 -1
- package/dashboard/dist/assets/{Card-BKbWtBaL.js → Card-B_MpSRse.js} +1 -1
- package/dashboard/dist/assets/{ClawdAnimated-DbpeAldp.js → ClawdAnimated-BLZZ4rG6.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-Jte7TBon.js → CommandPalette-B-vfdIbH.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-DDm7tCXO.js → CommunityStatsModal-aAico565.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-CrIjcrpZ.js → ConfirmModal-DLnRwUXC.js} +1 -1
- package/dashboard/dist/assets/{Controls-BWJtMkIy.js → Controls-FZ8wEN5w.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-Bcq4EwG5.js → DashboardPage-BByRBsbt.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-C9NcPZGX.js → DevicePage-D2IzPc5o.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-CY-LguUG.js → DialogClose-BaqQaUUk.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-BUrh0Jod.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-BkAmJrQ_.js → DialogTitle-DrbKjtuS.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-U-bxcM-y.js → FadeIn-GddKDE8i.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-4HUCxVhg.js → HeaderGithubStar-DUu-Z5mE.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-BXcXOCs8.js → HoverTooltip-BmDkY35A.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-Cppkc-gE.js → IpCheckPage-CGJyqWk2.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-D3KXfYKE.js → LandingPage-Bd91ALUj.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardAvatar-CdsHg6L0.js → LeaderboardAvatar-BGGUwXFd.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-niat0TZW.js → LeaderboardPage-BMEqHwif.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-DgjhhEbB.js → LeaderboardProfileModal-BSweJqm2.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-CZej8gpc.js → LeaderboardProfilePage-CRrI3RFz.js} +1 -1
- package/dashboard/dist/assets/LimitsPage-XIRDv46K.js +5 -0
- package/dashboard/dist/assets/{LocalOnlyNotice-DQswDMSD.js → LocalOnlyNotice-CCD-lGWG.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-glPyVqYh.js → LoginCard-lDuqSv4f.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-slsdEXC7.js → LoginModal-DStt5VXN.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-DX5QT917.js → LoginPage-dmVPSL72.js} +1 -1
- package/dashboard/dist/assets/{PetPage-B8U3CJwt.js → PetPage-ybcZRctF.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-BVPcQAio.js → PopoverPopup-Dar_UjxF.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-CljIacVj.js → ProviderIcon-Ct9tILpz.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-DTBmQk2y.js → ResetPasswordPage-B4yLh5zx.js} +1 -1
- package/dashboard/dist/assets/{SegmentedControl-C6npelCT.js → SegmentedControl-BOE1CEzq.js} +1 -1
- package/dashboard/dist/assets/{Select-D1elkRBG.js → Select-D-bSh7Zz.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-3N-hvYuD.js → SelectItemText-DMYjXXq4.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-C5ZK9X2o.js → ServiceStatusPage-CaleS-6_.js} +1 -1
- package/dashboard/dist/assets/SessionsPage-DOaY6_E9.js +2 -0
- package/dashboard/dist/assets/SettingsPage-iJH0Yyah.js +2 -0
- package/dashboard/dist/assets/{SkillsPage-Cwkevv29.js → SkillsPage-BkzJOBLk.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-a1-E6_jp.js → TokenGalaxy-CuXKoMPg.js} +1 -1
- package/dashboard/dist/assets/{ToolbarRootContext-Cm5cQb9Z.js → ToolbarRootContext-Dx5GB7F5.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-DoNDyarF.js → TrendMonitor-BuKmsznP.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-QMTmKnRl.js → WidgetsPage-DUaIyGtu.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-C9rJcY2o.js → WrappedPage-BzqlcAUC.js} +1 -1
- package/dashboard/dist/assets/__vite-browser-external-BHz2N7Ih.css +1 -0
- package/dashboard/dist/assets/{__vite-browser-external-CsbVaBbw.js → __vite-browser-external-CVIGknXl.js} +3 -3
- package/dashboard/dist/assets/{agent-logos-B39DKy3X.js → agent-logos-BdWWxza6.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-Cw5mMBik.js → arrow-up-right-CANSzmm-.js} +1 -1
- package/dashboard/dist/assets/{check-DrQztnq1.js → check-BnJpzXRZ.js} +1 -1
- package/dashboard/dist/assets/{chevron-right-CEelysET.js → chevron-right-DJm0mbG0.js} +1 -1
- package/dashboard/dist/assets/{composite-MhgOkYfv.js → composite-Ccj6KQmh.js} +1 -1
- package/dashboard/dist/assets/{copy-Bouz-qQR.js → copy-C2Yc8Evu.js} +1 -1
- package/dashboard/dist/assets/{download-BugS2cl5.js → download-B52JTk6Y.js} +1 -1
- package/dashboard/dist/assets/{external-link-Ceqto-f4.js → external-link-DayTwZx-.js} +1 -1
- package/dashboard/dist/assets/{flame-B67y0kLz.js → flame-B8GEX2yT.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CR8njNJs.js → format-tokens-mhkbohkb.js} +1 -1
- package/dashboard/dist/assets/{icons-DFj5ctTx.js → icons-o8bPXqRP.js} +1 -1
- package/dashboard/dist/assets/{index-CrymIhtC.js → index-Bp0ZHDtz.js} +1 -1
- package/dashboard/dist/assets/{index-Bx6EP36K.js → index-CK_CduLm.js} +1 -1
- package/dashboard/dist/assets/{index-ZGfRrxuq.js → index-MBVWUKpA.js} +1 -1
- package/dashboard/dist/assets/{info-C6XoktLa.js → info-D94QM_vX.js} +1 -1
- package/dashboard/dist/assets/{limits-providers-B9L6hIZT.js → limits-providers-BLzMyCiy.js} +1 -1
- package/dashboard/dist/assets/{link-2-DKG2j43e.js → link-2-CqBmFaDI.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-DB2txq05.js → loader-circle-SaxUpDR6.js} +1 -1
- package/dashboard/dist/assets/{maximize-2-3-dz0brp.js → maximize-2-BoXqARks.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-D0KjKi1o.js → modifiers.esm-Conh_-BD.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-Ds8H_QW9.js → monitor-smartphone-D6qLR9qd.js} +1 -1
- package/dashboard/dist/assets/{plus-BDsmAe4Z.js → plus-D51mjIc2.js} +1 -1
- package/dashboard/dist/assets/{provider-display-DRz643iD.js → provider-display-DpHPjd_s.js} +1 -1
- package/dashboard/dist/assets/{react-D3Afmy9b.js → react-D_AcI466.js} +1 -1
- package/dashboard/dist/assets/{search-CO2Xf-Kg.js → search-CwLcNdvZ.js} +1 -1
- package/dashboard/dist/assets/{skills-api-C1BZuUIq.js → skills-api-Dqi7Mjgo.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-DutNEc4F.js → sortable.esm-BPDlUxPb.js} +1 -1
- package/dashboard/dist/assets/{store-a-oUpY-g.js → store-ikeRIRGd.js} +1 -1
- package/dashboard/dist/assets/{terminal-DAePk67T.js → terminal-BfeX3L5T.js} +1 -1
- package/dashboard/dist/assets/{trash-2-bnFmtRSG.js → trash-2-5_Qlp1k7.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-PJBeXyek.js → use-community-stats-D90Fy2_j.js} +1 -1
- package/dashboard/dist/assets/use-limits-display-prefs-D4BYFaa-.js +1 -0
- package/dashboard/dist/assets/{use-ordered-list-BaVvCzZ9.js → use-ordered-list-DJxLNdXY.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-yE3T3cat.js +1 -0
- package/dashboard/dist/assets/{use-session-efficiency-pref-COTG-zJs.js → use-session-efficiency-pref-CAX_GqXc.js} +1 -1
- package/dashboard/dist/assets/{use-transform-BQEPyChL.js → use-transform-CeW6Z5R0.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-LR2gHJJn.js → use-usage-limits-5HP8k9a3.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-CeqKrzFz.js → useCurrency-BarGeFyK.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-D0IMlZlO.js → useTokenFormat-DUJ9iT9H.js} +1 -1
- package/dashboard/dist/assets/{zap-BBn6G5_E.js → zap--m0IWoI3.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/share.html +2 -2
- package/package.json +1 -1
- package/src/commands/status.js +3 -1
- package/src/commands/sync.js +8 -3
- package/src/lib/codex-rollout-parser.js +35 -4
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +758 -195
- package/src/lib/session-analytics.js +205 -10
- package/src/lib/telemetry.js +2 -2
- package/src/lib/usage-limits.js +20 -10
- package/dashboard/dist/assets/DialogDescription-DPyhpdeR.js +0 -1
- package/dashboard/dist/assets/LimitsPage-BXzzX87I.js +0 -5
- package/dashboard/dist/assets/SessionsPage-CJ0JvE8-.js +0 -2
- package/dashboard/dist/assets/SettingsPage-C32uYzqG.js +0 -2
- package/dashboard/dist/assets/__vite-browser-external-D95WhsZe.css +0 -1
- package/dashboard/dist/assets/use-limits-display-prefs-Blvn-7CB.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-f51jgK_S.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-CsbVaBbw.js","assets/__vite-browser-external-D95WhsZe.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{m as O,j as t,e as A,c as n,a as ce,r as d,ao as ue,aT as de,au as ge,av as pe,a8 as W,aU as he,aV as me,u as be,d as R,a0 as fe,M as Z,n as M,aW as xe,aX as ye,U as Y,aY as ve,x as ke,aZ as je,a_ as Se,a$ as Ne,b0 as we,b1 as Ce,b2 as Ee,b3 as Ae,L as Le,R as Oe,b4 as Pe,b5 as _e,a5 as H,_ as Te,h as Ie,b6 as Ge,b7 as Re}from"./__vite-browser-external-CsbVaBbw.js";import{a as Ue,b as F,s as De,K as Me,P as He,D as Fe,c as $e,S as Be,v as Ve,u as Ke,C as ze}from"./sortable.esm-DutNEc4F.js";import{a as qe}from"./modifiers.esm-D0KjKi1o.js";import{u as We,L as $}from"./use-limits-display-prefs-Blvn-7CB.js";import{P as Ze}from"./ProviderIcon-CljIacVj.js";import{a as B,l as V}from"./limits-providers-B9L6hIZT.js";import{m as J}from"./react-D3Afmy9b.js";import{a as E,T as k,b,S as _,u as T}from"./Controls-BWJtMkIy.js";import{P as Ye,u as Je,a as Xe}from"./use-session-efficiency-pref-COTG-zJs.js";import{C as Qe}from"./check-DrQztnq1.js";import{C as et}from"./copy-Bouz-qQR.js";import{A as X}from"./index-CrymIhtC.js";import{u as tt}from"./useCurrency-CeqKrzFz.js";import{u as nt}from"./useTokenFormat-D0IMlZlO.js";import{S as U}from"./Select-D1elkRBG.js";import{I as at}from"./info-C6XoktLa.js";import{C as st}from"./ConfirmModal-CrIjcrpZ.js";import{A as it}from"./arrow-up-right-Cw5mMBik.js";import{D as ot}from"./download-BugS2cl5.js";import{i as rt}from"./host-mode-Bc_iTzHk.js";import"./Card-BKbWtBaL.js";import"./ToolbarRootContext-Cm5cQb9Z.js";import"./composite-MhgOkYfv.js";import"./SelectItemText-3N-hvYuD.js";import"./DialogTitle-BkAmJrQ_.js";import"./store-a-oUpY-g.js";import"./DialogDescription-DPyhpdeR.js";const lt=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]],ct=O("flask-conical",lt);const ut=[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]],dt=O("grip-vertical",ut);const gt=[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]],pt=O("languages",gt);const ht=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],mt=O("log-out",ht);const bt=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],ft=O("palette",bt);const xt=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],yt=O("user-round",xt),vt="shrink-0 text-oai-gray-900 dark:text-oai-gray-200";function kt({checked:e,onChange:a,ariaLabel:s}){return t.jsx("button",{type:"button",role:"switch","aria-checked":e,"aria-label":s,onClick:a,className:A("relative inline-flex h-5 w-9 shrink-0 items-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500",e?"bg-oai-brand-500":"bg-oai-gray-300 dark:bg-oai-gray-700"),children:t.jsx("span",{className:A("inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",e?"translate-x-[18px]":"translate-x-[3px]")})})}function jt({id:e,visible:a,onToggle:s}){const{attributes:i,listeners:o,setNodeRef:r,transform:l,transition:c,isDragging:u}=Ke({id:e}),m={transform:ze.Transform.toString(l)||void 0,transition:c,zIndex:u?20:void 0};return t.jsxs("div",{ref:r,style:m,className:A("flex items-center gap-3 py-2 rounded-md select-none touch-none","cursor-grab active:cursor-grabbing","hover:bg-oai-gray-100/60 dark:hover:bg-oai-gray-800/60","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500",u&&"relative bg-oai-gray-100 dark:bg-oai-gray-800"),...i,...o,children:[t.jsx(dt,{className:"h-4 w-4 shrink-0 text-oai-gray-400 dark:text-oai-gray-500",strokeWidth:1.75,"aria-hidden":!0}),B(e)?t.jsx(Ze,{provider:B(e),size:18,className:A("pointer-events-none",vt)}):null,t.jsx("span",{className:"flex-1 text-sm text-oai-gray-900 dark:text-oai-gray-200",children:V(e)}),t.jsx("div",{onPointerDown:p=>p.stopPropagation(),children:t.jsx(kt,{checked:a,onChange:s,ariaLabel:`${n("limits.settings.toggle_visible")}: ${V(e)}`})})]})}function St({prefs:e}){const{order:a,visibility:s,toggle:i,moveToward:o}=e,r=Ue(F(He,{activationConstraint:{distance:6}}),F(Me,{coordinateGetter:De})),l=({active:c,over:u})=>{u&&c.id!==u.id&&o(c.id,u.id)};return t.jsx(Fe,{sensors:r,collisionDetection:$e,modifiers:[qe],onDragEnd:l,children:t.jsx(Be,{items:a,strategy:Ve,children:t.jsx("div",{className:"flex flex-col",children:a.map(c=>t.jsx(jt,{id:c,visible:s[c]!==!1,onToggle:()=>i(c)},c))})})})}function Nt(e){if(!e||typeof e!="object")return"";const a=e.user_metadata&&typeof e.user_metadata=="object"?e.user_metadata:{},s=e.profile&&typeof e.profile=="object"?e.profile:{},i=a.full_name||a.name||s.name||a.user_name||a.preferred_username;return typeof i=="string"&&i.trim()?i.trim():typeof e.email=="string"&&e.email.includes("@")?e.email.split("@")[0].trim()||e.email.trim():typeof e.email=="string"?e.email.trim():""}function wt(e){return!e||typeof e!="object"?"":typeof e.email=="string"?e.email.trim():""}function Ct(e){const a=typeof e=="string"?e.trim():"";if(!a)return null;const s=a.match(/^@?([A-Za-z0-9][A-Za-z0-9-]{0,38})$/),i=a.match(/^https:\/\/github\.com\/([A-Za-z0-9][A-Za-z0-9-]{0,38})\/?$/i),o=s?.[1]||i?.[1];return o?`https://github.com/${o}`:null}function D(e,a){console.warn(`[tokentracker] settings ${e}:`,a)}function Et(e,a,s){const[i,o]=d.useState(()=>ue()),r=a&&s&&de(),l=d.useCallback(async()=>{const c=!i;if(ge(c),o(c),!!c)try{await pe(()=>e())}catch(u){D("cloud sync",u)}},[i,e]);return{cloudSyncOn:i,handleCloudSyncToggle:l,showLocalCloudSync:r}}function At(e){const[a,s]=d.useState(!1),[i,o]=d.useState(!1),[r,l]=d.useState(!1),[c,u]=d.useState(!1),[m,p]=d.useState(null),[g,f]=d.useState(!1),[v,j]=d.useState(""),[h,y]=d.useState(!1),[S,w]=d.useState(""),[L,P]=d.useState(""),[I,x]=d.useState(!1),[C,se]=d.useState(null),ie=d.useMemo(()=>Nt(e),[e]),oe=d.useMemo(()=>wt(e),[e]),re=d.useMemo(()=>typeof e?.id=="string"?e.id.trim():"",[e]),le=d.useMemo(()=>({setAnonymousOn:o,setCustomDisplayName:p,setGithubUrl:w,setProfileLoading:l,setPublicProfileOn:s,setShowGithubOn:y}),[]);return{anonymousOn:i,customDisplayName:m,displayName:ie,editingGithub:I,editingName:g,email:oe,githubError:C,githubInput:L,githubUrl:S,loadSetters:le,nameInput:v,profileLoading:r,profileSaving:c,publicProfileOn:a,setAnonymousOn:o,setCustomDisplayName:p,setEditingGithub:x,setEditingName:f,setGithubError:se,setGithubInput:P,setGithubUrl:w,setNameInput:j,setProfileLoading:l,setProfileSaving:u,setPublicProfileOn:s,setShowGithubOn:y,showGithubOn:h,userId:re}}function Lt(e,a,s){d.useEffect(()=>{if(!a)return;let i=!0;return s.setProfileLoading(!0),(async()=>{try{const o=await W({getAccessToken:e});if(!i||!o)return;const r=await he({accessToken:o});if(!i)return;s.setPublicProfileOn(!!r?.enabled),s.setAnonymousOn(!!r?.anonymous),r?.display_name&&s.setCustomDisplayName(r.display_name),s.setShowGithubOn(!!r?.show_github_url),s.setGithubUrl(r?.github_url||"")}catch(o){D("load public profile",o)}finally{i&&s.setProfileLoading(!1)}})(),()=>{i=!1}},[e,a,s])}function Ot(e,a){return d.useCallback(async(s,{label:i,onError:o,onSuccess:r}={})=>{if(a.profileSaving)return!1;a.setProfileSaving(!0);try{const l=await W({getAccessToken:e});if(!l)return!1;const c=await me({accessToken:l,...s});return r?.(c),!0}catch(l){return o?o(l):D(i||"mutate profile",l),!1}finally{a.setProfileSaving(!1)}},[e,a])}function Pt(e,a){return{anonymousOn:e.anonymousOn,customDisplayName:e.customDisplayName,displayName:e.displayName,editingName:e.editingName,handleAnonymousToggle:a.handleAnonymousToggle,handleSaveName:a.handleSaveName,nameInput:e.nameInput,profileLoading:e.profileLoading,profileSaving:e.profileSaving,setEditingName:e.setEditingName,setNameInput:e.setNameInput,startEditingName:a.startEditingName}}function _t(e,a){return{editingGithub:e.editingGithub,githubError:e.githubError,githubInput:e.githubInput,githubUrl:e.githubUrl,handleSaveGithub:a.handleSaveGithub,handleShowGithubToggle:a.handleShowGithubToggle,profileLoading:e.profileLoading,profileSaving:e.profileSaving,setEditingGithub:e.setEditingGithub,setGithubError:e.setGithubError,setGithubInput:e.setGithubInput,showGithubOn:e.showGithubOn,startEditingGithub:a.startEditingGithub}}function Tt(e,a){const s=d.useCallback(async()=>{const o=!e.publicProfileOn;await a({enabled:o},{label:"toggle public profile",onSuccess:()=>e.setPublicProfileOn(o)})},[a,e]);return{handleAnonymousToggle:d.useCallback(async()=>{const o=!e.anonymousOn;await a({anonymous:o},{label:"toggle anonymous",onSuccess:()=>e.setAnonymousOn(o)})},[a,e]),handlePublicProfileToggle:s}}function It(e,a,s){const i=d.useCallback(async()=>{const r=e.nameInput.trim().slice(0,50);r&&await a({display_name:r},{label:"save display name",onSuccess:()=>{e.setCustomDisplayName(r),e.setEditingName(!1),s?.()}})},[a,e,s]),o=d.useCallback(()=>{e.setNameInput(e.customDisplayName||e.displayName),e.setEditingName(!0)},[e]);return{handleSaveName:i,startEditingName:o}}function Gt(e,a){const s=d.useCallback(async()=>{if(!e.showGithubOn&&!e.githubUrl){e.setEditingGithub(!0),e.setGithubInput(""),e.setGithubError(null);return}const r=!e.showGithubOn;await a({show_github_url:r},{label:"toggle GitHub profile",onSuccess:()=>e.setShowGithubOn(r)})},[a,e]),i=d.useCallback(async()=>{const r=Ct(e.githubInput);if(e.githubInput.trim()&&!r){e.setGithubError(n("settings.account.githubUrlInvalid"));return}e.setGithubError(null),await a({github_url:r,show_github_url:!!r},{label:"save GitHub profile",onError:l=>e.setGithubError(l?.message||n("settings.account.githubUrlInvalid")),onSuccess:l=>{e.setGithubUrl(l?.github_url||r||""),e.setShowGithubOn(!!r),e.setEditingGithub(!1)}})},[a,e]),o=d.useCallback(()=>{e.setGithubInput(e.githubUrl),e.setGithubError(null),e.setEditingGithub(!0)},[e]);return{handleSaveGithub:i,handleShowGithubToggle:s,startEditingGithub:o}}function Rt(){const e=ce(),a=At(e.user),s=Et(e.getAccessToken,e.enabled,e.signedIn);Lt(e.getAccessToken,e.signedIn,a.loadSetters);const i=Ot(e.getAccessToken,a),o=Tt(a,i),r=It(a,i,e.refreshDisplayName),l=Gt(a,i);return{...e,...s,email:a.email,handlePublicProfileToggle:o.handlePublicProfileToggle,userId:a.userId,name:Pt(a,{...o,...r}),github:_t(a,l),profileLoading:a.profileLoading,profileSaving:a.profileSaving,publicProfileOn:a.publicProfileOn}}function Q({disabled:e,onCancel:a,onSave:s,saveLabel:i=n("settings.account.save")}){return t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",onClick:s,disabled:e,className:"rounded-md bg-oai-brand-500 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-oai-brand-600 disabled:opacity-50",children:i}),t.jsx("button",{type:"button",onClick:a,className:"rounded-md px-2 py-1.5 text-xs text-oai-gray-500 transition-colors hover:text-oai-gray-700 dark:hover:text-oai-gray-300",children:n("settings.account.cancel")})]})}function Ut({nameInput:e,setEditingName:a,setNameInput:s,profileSaving:i,handleSaveName:o}){return t.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[t.jsx("input",{type:"text",value:e,onChange:r=>s(r.target.value),onKeyDown:r=>{r.key==="Enter"&&o(),r.key==="Escape"&&a(!1)},maxLength:50,autoFocus:!0,className:"flex-1 rounded-md border border-oai-gray-300 bg-transparent px-2.5 py-1.5 text-sm text-oai-black outline-none focus:border-oai-brand-500 focus:ring-1 focus:ring-inset focus:ring-oai-brand-500 dark:border-oai-gray-700 dark:text-white",placeholder:n("settings.account.displayName")}),t.jsx(Q,{disabled:i||!e.trim(),onCancel:()=>a(!1),onSave:o,saveLabel:i?n("settings.account.saving"):void 0})]})}function Dt({githubError:e,githubInput:a,handleSaveGithub:s,profileSaving:i,setEditingGithub:o,setGithubError:r,setGithubInput:l}){return t.jsxs("div",{className:"mt-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("input",{type:"text",value:a,onChange:c=>{l(c.target.value),e&&r(null)},onKeyDown:c=>{c.key==="Enter"&&s(),c.key==="Escape"&&(o(!1),r(null))},maxLength:100,autoFocus:!0,className:"flex-1 rounded-md border border-oai-gray-300 bg-transparent px-2.5 py-1.5 text-sm text-oai-black outline-none focus:border-oai-brand-500 focus:ring-1 focus:ring-inset focus:ring-oai-brand-500 dark:border-oai-gray-700 dark:text-white",placeholder:n("settings.account.githubUrlPlaceholder")}),t.jsx(Q,{disabled:i,onCancel:()=>{o(!1),r(null)},onSave:s,saveLabel:i?n("settings.account.saving"):void 0})]}),e?t.jsx("div",{className:"mt-1.5 text-xs text-red-600 dark:text-red-400",children:e}):null]})}function ee({disabled:e=!1,label:a,onClick:s,title:i}){return t.jsxs("button",{type:"button",onClick:s,disabled:e,title:i,className:"inline-flex h-8 shrink-0 items-center gap-1.5 rounded-md border border-oai-gray-200 px-3 text-xs font-medium text-oai-gray-700 transition-colors hover:bg-oai-gray-100 disabled:cursor-not-allowed disabled:opacity-40 dark:border-oai-gray-800 dark:text-oai-gray-300 dark:hover:bg-oai-gray-800",children:[t.jsx(Ye,{className:"h-3.5 w-3.5","aria-hidden":!0}),a]})}function te({actions:e,editing:a,editor:s,hint:i,label:o}){return t.jsx("div",{className:"py-3",children:t.jsxs("div",{className:"flex items-start justify-between gap-4",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"text-sm text-oai-gray-900 dark:text-oai-gray-200",children:o}),a?s:t.jsx("div",{className:"mt-0.5 truncate text-xs text-oai-gray-500 dark:text-oai-gray-400",children:i})]}),a?null:e]})})}function Mt({name:e}){const a=e.anonymousOn?n("settings.account.displayNameDisabledWhileAnon"):void 0;return t.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[t.jsx(ee,{disabled:e.anonymousOn,label:n("settings.account.edit"),onClick:e.startEditingName,title:a}),t.jsx(k,{checked:!e.anonymousOn,onChange:e.handleAnonymousToggle,disabled:e.profileLoading||e.profileSaving,ariaLabel:n("settings.account.displayName")})]})}function Ht({name:e}){const{anonymousOn:a,customDisplayName:s,displayName:i,editingName:o,handleAnonymousToggle:r,handleSaveName:l,nameInput:c,profileLoading:u,profileSaving:m,setEditingName:p,setNameInput:g,startEditingName:f}=e,v=a?n("settings.account.displayNameAnonymousHint"):s||i;return t.jsx(te,{label:n("settings.account.displayName"),editing:o,hint:v,editor:t.jsx(Ut,{nameInput:c,setEditingName:p,setNameInput:g,profileSaving:m,handleSaveName:l}),actions:t.jsx(Mt,{name:e})})}function Ft({github:e}){const{editingGithub:a,githubError:s,githubInput:i,githubUrl:o,handleSaveGithub:r,handleShowGithubToggle:l,profileLoading:c,profileSaving:u,setEditingGithub:m,setGithubError:p,setGithubInput:g,showGithubOn:f,startEditingGithub:v}=e;return t.jsx(t.Fragment,{children:t.jsx(te,{label:n("settings.account.githubUrl"),editing:a,hint:o||n("settings.account.githubUrlHint"),editor:t.jsx(Dt,{githubError:s,githubInput:i,handleSaveGithub:r,profileSaving:u,setEditingGithub:m,setGithubError:p,setGithubInput:g}),actions:t.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[t.jsx(ee,{label:n("settings.account.edit"),onClick:v}),t.jsx(k,{checked:f,onChange:l,disabled:c||u,ariaLabel:n("settings.account.githubUrl")})]})})})}function $t(){const{openLoginModal:e}=be();return t.jsx(E,{title:n("settings.section.account"),children:t.jsxs("div",{className:"flex items-center justify-between gap-4 py-3",children:[t.jsx("p",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-400",children:n("settings.account.signedOutHint")}),t.jsx("button",{type:"button",onClick:e,className:"inline-flex h-8 shrink-0 items-center justify-center rounded-md bg-oai-gray-900 px-4 text-xs font-medium text-white transition-colors hover:bg-oai-gray-800 dark:bg-white dark:text-oai-gray-900 dark:hover:bg-oai-gray-100",children:n("settings.account.signIn")})]})})}function Bt({name:e,github:a}){return t.jsxs(t.Fragment,{children:[t.jsx(Ht,{name:e}),t.jsx(Ft,{github:a})]})}function Vt(){const e=Rt();return e.enabled?e.signedIn?t.jsxs(E,{title:n("settings.section.account"),subtitle:e.email||e.name.customDisplayName||e.name.displayName,action:t.jsx(zt,{onSignOut:e.signOut}),children:[t.jsx(Kt,{userId:e.userId}),t.jsx(qt,{settings:e}),t.jsx(Wt,{checked:e.publicProfileOn,disabled:e.profileLoading||e.profileSaving,onChange:e.handlePublicProfileToggle}),t.jsx(Zt,{visible:e.publicProfileOn,name:e.name,github:e.github})]}):t.jsx($t,{}):null}function Kt({userId:e}){const[a,s]=R.useState(!1);if(!e)return null;const i=async()=>{try{if(typeof navigator>"u"||!navigator.clipboard?.writeText)return;await navigator.clipboard.writeText(e),s(!0),globalThis.setTimeout(()=>s(!1),1200)}catch{s(!1)}};return t.jsxs("div",{className:"flex items-center justify-between gap-4 py-3",children:[t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"text-sm text-oai-gray-900 dark:text-oai-gray-200",children:n("settings.account.userId")}),t.jsx("div",{className:"mt-0.5 truncate font-mono text-xs text-oai-gray-500 dark:text-oai-gray-400",children:e})]}),t.jsxs("button",{type:"button",onClick:i,className:"inline-flex h-8 shrink-0 items-center gap-1.5 rounded-md border border-oai-gray-200 px-3 text-xs font-medium text-oai-gray-700 transition-colors hover:bg-oai-gray-100 dark:border-oai-gray-800 dark:text-oai-gray-300 dark:hover:bg-oai-gray-800","aria-label":n("settings.account.copyUserId"),children:[a?t.jsx(Qe,{className:"h-3.5 w-3.5","aria-hidden":!0}):t.jsx(et,{className:"h-3.5 w-3.5","aria-hidden":!0}),a?n("settings.account.copied"):n("settings.account.copy")]})]})}function zt({onSignOut:e}){return t.jsxs("button",{type:"button",onClick:()=>e(),className:"inline-flex h-7 items-center gap-1.5 text-xs font-medium text-oai-gray-500 transition-colors hover:text-oai-gray-700 dark:hover:text-oai-gray-300",children:[t.jsx(mt,{className:"h-3.5 w-3.5","aria-hidden":!0}),n("settings.account.signOut")]})}function qt({settings:e}){return e.showLocalCloudSync?t.jsx(b,{label:n("settings.account.cloudSync"),hint:n("settings.account.cloudSyncHint"),control:t.jsx(k,{checked:e.cloudSyncOn,onChange:e.handleCloudSyncToggle,ariaLabel:n("settings.account.cloudSync")})}):null}function Wt({checked:e,disabled:a,onChange:s}){return t.jsx(b,{label:n("settings.account.publicProfile"),hint:n("settings.account.publicProfileHint"),control:t.jsx(k,{checked:e,onChange:s,disabled:a,ariaLabel:n("settings.account.publicProfile")})})}function Zt({visible:e,name:a,github:s}){return t.jsx(X,{initial:!1,children:e?t.jsx(J.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{height:{duration:.28,ease:[.22,1,.36,1]},opacity:{duration:.2,ease:[.22,1,.36,1]}},style:{overflow:"hidden"},className:"divide-y divide-oai-gray-200/60 dark:divide-oai-gray-800/60",children:t.jsx(Bt,{name:a,github:s})},"public-profile-fields"):null})}function Yt(){return[{value:"light",label:n("settings.appearance.theme.light"),Icon:xe},{value:"dark",label:n("settings.appearance.theme.dark"),Icon:ye},{value:"system",label:n("settings.appearance.theme.system"),Icon:Y}]}function Jt(){return[{value:je,label:n("settings.appearance.language.system")},{value:Se,label:n("settings.appearance.language.english")},{value:Ne,label:n("settings.appearance.language.chinese")},{value:we,label:n("settings.appearance.language.traditional_chinese")},{value:Ce,label:n("settings.appearance.language.japanese")},{value:Ee,label:n("settings.appearance.language.korean")},{value:Ae,label:n("settings.appearance.language.german")}]}function Xt(e){if(!e)return null;try{const a=new Date(e);return Number.isNaN(a.getTime())?null:a.toLocaleString()}catch{return null}}function Qt(e,a){const s=n(`settings.appearance.currency.rate_source.${e}`),i=Xt(a),o=i?n("settings.appearance.currency.rate_updated",{when:i}):n("settings.appearance.currency.rate_never");return`${s} · ${o}`}function en({locale:e,setLocale:a}){const s=Jt();return t.jsx(U,{value:e,onValueChange:a,options:s,ariaLabel:n("settings.appearance.language.label"),className:"px-2.5 py-1.5 text-xs font-medium",leadingIcon:t.jsx(pt,{className:"h-3.5 w-3.5 text-oai-gray-500 dark:text-oai-gray-400","aria-hidden":!0})})}function tn({currency:e,setCurrency:a}){const s=ve().map(i=>({value:i.code,label:n(i.labelKey)}));return t.jsx(U,{value:e,onValueChange:a,options:s,ariaLabel:n("settings.appearance.currency.label"),className:"px-3 py-1.5 text-xs font-medium"})}function nn({currency:e,rate:a,rateSource:s,rateFetchedAt:i}){if(e===ke)return t.jsx(t.Fragment,{children:n("settings.appearance.currency.hint")});const o=Qt(s,i);return t.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[t.jsx("span",{children:`1 USD = ${a.toFixed(4)} ${e}`}),t.jsx("span",{role:"img","aria-label":o,title:o,className:"inline-flex h-4 w-4 cursor-help items-center justify-center text-oai-gray-400 hover:text-oai-gray-600 dark:text-oai-gray-500 dark:hover:text-oai-gray-300",children:t.jsx(at,{className:"h-3.5 w-3.5","aria-hidden":!0})})]})}function an(){const{theme:e,setTheme:a}=fe(),{locale:s,setLocale:i}=Z(),{currency:o,rate:r,rateSource:l,rateFetchedAt:c,setCurrency:u}=tt(),{mode:m,setMode:p}=nt();return t.jsxs(E,{title:n("settings.section.appearance"),children:[t.jsx(b,{label:n("settings.appearance.theme.label"),hint:n("settings.appearance.theme.hint"),control:t.jsx(_,{options:Yt(),value:e,onChange:a})}),t.jsx(b,{label:n("settings.appearance.language.label"),hint:n("settings.appearance.language.hint"),control:t.jsx(en,{locale:s,setLocale:i})}),t.jsx(b,{label:n("settings.appearance.currency.label"),hint:t.jsx(nn,{currency:o,rate:r,rateSource:l,rateFetchedAt:c}),control:t.jsx(tn,{currency:o,setCurrency:u})}),t.jsx(b,{label:n("settings.appearance.token_format.label"),hint:n("settings.appearance.token_format.hint"),control:t.jsx(_,{options:[{value:M.COMPACT,label:n("settings.appearance.token_format.compact")},{value:M.FULL,label:n("settings.appearance.token_format.full")}],value:m,onChange:p})})]})}function G({labelKey:e}){return t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx("span",{children:n(e)}),t.jsx("span",{className:"px-1.5 py-0.5 text-[8px] font-semibold tracking-wider text-oai-gray-500 bg-oai-gray-100 dark:text-oai-gray-400 dark:bg-oai-gray-800/80 rounded uppercase scale-90 origin-left",children:n("qpd.card.badge")})]})}function sn(){const{enabled:e,toggle:a}=Je(),{enabled:s,toggle:i}=Xe(),{available:o,settings:r,setSetting:l}=T(),c=o&&!!r?.dynamicIslandSupported,u=!!r?.dynamicIslandEnabled;return t.jsxs(E,{title:n("settings.section.labs"),children:[c&&t.jsxs(t.Fragment,{children:[t.jsx(b,{label:t.jsx(G,{labelKey:"settings.labs.island.label"}),hint:n("settings.labs.island.hint"),control:t.jsx(k,{checked:u,onChange:()=>l("dynamicIslandEnabled",!u),ariaLabel:n("settings.labs.island.aria")})}),u&&t.jsx(b,{label:n("settings.labs.island_hide_menubar.label"),hint:n("settings.labs.island_hide_menubar.hint"),control:t.jsx(k,{checked:!!r?.hideMenuBarIcon,onChange:()=>l("hideMenuBarIcon",!r?.hideMenuBarIcon),ariaLabel:n("settings.labs.island_hide_menubar.aria")})})]}),t.jsx(b,{label:t.jsx(G,{labelKey:"settings.labs.qpd.label"}),hint:n("settings.labs.qpd.hint"),control:t.jsx(k,{checked:e,onChange:a,ariaLabel:n("settings.labs.qpd.aria")})}),t.jsx(b,{label:t.jsx(G,{labelKey:"settings.labs.sessions.label"}),hint:n("settings.labs.sessions.hint"),control:t.jsx(k,{checked:s,onChange:i,ariaLabel:n("settings.labs.sessions.aria")})})]})}function on(){const{available:e,settings:a,setSetting:s,runAction:i}=T();if(!e)return null;const o=!!a?.launchAtLogin,r=a?.toastOnReset!==!1,l=a?.confettiOnReset!==!1,c=a?.launchAtLoginSupported!==!1,u=a?.autoUpdateEnabled!==!1,m=a?.updateStatus||null,p=!!a?.updateBusy,g=!!a?.isSyncing;return t.jsxs(E,{title:n("settings.section.menubar"),children:[t.jsx(b,{label:n("settings.menubar.appearance"),hint:n("settings.menubar.appearanceHint"),control:t.jsxs(Le,{to:"/widgets",className:"inline-flex h-8 items-center gap-1.5 rounded-md border border-oai-gray-200 px-3 text-xs font-medium text-oai-gray-700 no-underline transition-colors hover:bg-oai-gray-100 dark:border-oai-gray-800 dark:text-oai-gray-300 dark:hover:bg-oai-gray-800",children:[n("settings.menubar.appearanceLink"),t.jsx(it,{className:"h-3.5 w-3.5","aria-hidden":!0})]})}),t.jsx(b,{label:n("settings.menubar.toastOnReset"),hint:n("settings.menubar.toastOnResetHint"),control:t.jsx(k,{checked:r,onChange:()=>s("toastOnReset",!r),ariaLabel:n("settings.menubar.toastOnReset")})}),t.jsx(b,{label:n("settings.menubar.confettiOnReset"),hint:n("settings.menubar.confettiOnResetHint"),control:t.jsx(k,{checked:l,onChange:()=>s("confettiOnReset",!l),ariaLabel:n("settings.menubar.confettiOnReset")})}),c?t.jsx(b,{label:n("settings.menubar.launchAtLogin"),hint:n("settings.menubar.launchAtLoginHint"),control:t.jsx(k,{checked:o,onChange:()=>s("launchAtLogin",!o),ariaLabel:n("settings.menubar.launchAtLogin")})}):null,t.jsx(b,{label:n("settings.menubar.syncNow"),hint:n("settings.menubar.syncNowHint"),control:t.jsxs("button",{type:"button",onClick:()=>i("syncNow"),disabled:g,className:"inline-flex h-8 items-center gap-1.5 rounded-md border border-oai-gray-200 px-3 text-xs font-medium text-oai-gray-700 transition-colors hover:bg-oai-gray-100 disabled:cursor-not-allowed disabled:opacity-50 dark:border-oai-gray-800 dark:text-oai-gray-300 dark:hover:bg-oai-gray-800",children:[t.jsx(Oe,{className:A("h-3.5 w-3.5",g&&"animate-spin"),"aria-hidden":!0}),g?n("settings.menubar.syncing"):n("settings.menubar.syncNow")]})}),t.jsx(b,{label:n("settings.menubar.autoUpdate"),hint:n("settings.menubar.autoUpdateHint"),control:t.jsx(k,{checked:u,onChange:()=>s("autoUpdateEnabled",!u),ariaLabel:n("settings.menubar.autoUpdate")})}),t.jsx(b,{label:n("settings.menubar.updates"),hint:m||void 0,control:t.jsxs("button",{type:"button",onClick:()=>i("checkForUpdates"),disabled:p,className:"inline-flex h-8 items-center gap-1.5 rounded-md border border-oai-gray-200 px-3 text-xs font-medium text-oai-gray-700 transition-colors hover:bg-oai-gray-100 disabled:cursor-not-allowed disabled:opacity-50 dark:border-oai-gray-800 dark:text-oai-gray-300 dark:hover:bg-oai-gray-800",children:[t.jsx(ot,{className:"h-3.5 w-3.5","aria-hidden":!0}),n("settings.menubar.checkUpdates")]})})]})}function rn(e,a){function s(r){return r.replace(/^v/,"").split(".").map(Number)}const i=s(e),o=s(a);for(let r=0;r<Math.max(i.length,o.length);r++){const l=i[r]||0,c=o[r]||0;if(l<c)return!0;if(l>c)return!1}return!1}function ln(){const{available:e,settings:a,runAction:s}=T(),i=e&&a?.version,[o,r]=R.useState(!1),[l,c]=R.useState({open:!1,latestVersion:"",htmlUrl:""}),{resolvedLocale:u}=Z(),m="0.93.7",p=async()=>{r(!0);try{const h=await fetch("https://api.github.com/repos/xiufengsun/TokenTracker/releases/latest");if(!h.ok)throw new Error("Failed to fetch");const y=await h.json(),S=y.tag_name;rn(m,S)?c({open:!0,latestVersion:S,htmlUrl:y.html_url}):H({title:n("settings.menubar.updates.upToDate")})}catch(h){console.error("Check updates failed:",h),H({title:n("settings.menubar.updates.failed")})}finally{r(!1)}},g=n("settings.menubar.updates.modalTitle"),f=n("settings.menubar.updates.modalDescription",{version:l.latestVersion}),v=n("settings.menubar.updates.modalConfirm"),j=n("settings.menubar.updates.modalCancel");return t.jsxs("div",{className:"mt-6 flex flex-col items-center justify-center gap-4 text-xs text-oai-gray-500 dark:text-oai-gray-500",children:[t.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2",children:[i?t.jsxs(t.Fragment,{children:[t.jsx("span",{children:n("settings.menubar.updates.footerCombined",{barVersion:a.version,coreVersion:m})}),t.jsx("span",{"aria-hidden":!0,children:"·"}),t.jsx("button",{type:"button",onClick:()=>s("openAbout"),className:"underline-offset-2 transition-colors hover:text-oai-gray-700 hover:underline dark:hover:text-oai-gray-300",children:"GitHub"}),t.jsx("span",{"aria-hidden":!0,children:"·"})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{children:n("settings.menubar.updates.footerCore",{version:m})}),t.jsx("span",{"aria-hidden":!0,children:"·"}),t.jsx("button",{type:"button",onClick:p,disabled:o,className:"underline-offset-2 transition-colors hover:text-oai-gray-700 hover:underline dark:hover:text-oai-gray-300 disabled:opacity-50",children:o?n("settings.menubar.updates.checking"):n("settings.menubar.checkUpdates")}),t.jsx("span",{"aria-hidden":!0,children:"·"})]}),t.jsxs("a",{href:Pe,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 underline-offset-2 transition-colors hover:text-oai-gray-700 hover:underline dark:hover:text-oai-gray-300",children:[t.jsx(_e,{className:"h-3.5 w-3.5","aria-hidden":!0}),n("settings.footer.statusPage")]})]}),t.jsx(st,{open:l.open,title:g,description:f,confirmLabel:v,cancelLabel:j,onConfirm:()=>{window.open(l.htmlUrl,"_blank"),c(h=>({...h,open:!1}))},onCancel:()=>c(h=>({...h,open:!1}))})]})}const cn=()=>[{value:"system",label:n("settings.network.mode.system")},{value:"manual",label:n("settings.network.mode.manual")},{value:"off",label:n("settings.network.mode.off")}],un=()=>[{value:"http",label:n("settings.network.protocol.http")},{value:"https",label:n("settings.network.protocol.https")},{value:"socks5",label:n("settings.network.protocol.socks5")}],K="w-full rounded-md border border-oai-gray-300 bg-transparent px-2.5 py-1.5 text-sm text-oai-black outline-none focus:border-oai-brand-500 focus:ring-1 focus:ring-inset focus:ring-oai-brand-500 dark:border-oai-gray-700 dark:text-white";function z(e){const a={},s=String(e.host||"").trim();(!s||/:\/\//.test(s)||s.includes("/"))&&(a.host=n("settings.network.error.host"));const i=String(e.port??"").trim(),o=Number(i);return(!i||!/^\d+$/.test(i)||!Number.isInteger(o)||o<1||o>65535)&&(a.port=n("settings.network.error.port")),a}function dn({proxySettings:e}){const{config:a,save:s,testConnection:i}=e,[o,r]=d.useState(()=>({mode:a.mode,protocol:a.protocol||"http",host:a.host||"",port:a.port||""})),[l,c]=d.useState({}),[u,m]=d.useState(!1),[p,g]=d.useState(""),[f,v]=d.useState(null),[j,h]=d.useState(!1),[y,S]=d.useState(null);d.useEffect(()=>{r({mode:a.mode,protocol:a.protocol||"http",host:a.host||"",port:a.port||""})},[a.mode,a.protocol,a.host,a.port]);const w=d.useMemo(()=>a.effective==="manual"?n("settings.network.effective.manual"):a.effective==="env"?n("settings.network.effective.env"):a.effective==="system"?n("settings.network.effective.system"):a.effective==="blocked"?n("settings.network.effective.blocked"):n("settings.network.effective.none"),[a.effective]),L=x=>{r(C=>({...C,...x})),c({}),g(""),v(null),S(null)},P=async()=>{if(o.mode==="manual"){const x=z(o);if(Object.keys(x).length){c(x);return}}m(!0),g(""),v(null);try{await s(o),g("saved")}catch(x){g("error"),v(x)}finally{m(!1)}},I=async()=>{const x=z(o);if(Object.keys(x).length){c(x);return}h(!0),S(null);try{const C=await i(o);S(C)}catch(C){S({ok:!1,error:C?.message||String(C)})}finally{h(!1)}};return t.jsxs(E,{title:n("settings.section.network"),subtitle:w,children:[a.applyError?t.jsx("p",{role:"alert",className:"mb-3 text-xs text-red-600 dark:text-red-400",children:n("settings.network.apply_error",{error:a.applyError})}):null,t.jsx(b,{label:n("settings.network.mode.label"),hint:n("settings.network.mode.hint"),control:t.jsx(_,{options:cn(),value:o.mode,onChange:x=>L({mode:x})})}),t.jsx(X,{initial:!1,children:o.mode==="manual"?t.jsxs(J.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{height:{duration:.28,ease:[.22,1,.36,1]},opacity:{duration:.2,ease:[.22,1,.36,1]}},style:{overflow:"hidden"},className:"divide-y divide-oai-gray-200/60 dark:divide-oai-gray-800/60",children:[t.jsx(b,{label:n("settings.network.protocol.label"),control:t.jsx(U,{value:o.protocol,onValueChange:x=>L({protocol:x}),options:un(),ariaLabel:n("settings.network.protocol.label"),className:"px-2.5 py-1.5 text-xs font-medium"})}),t.jsx(b,{label:n("settings.network.host.label"),hint:l.host,control:t.jsx("input",{type:"text",value:o.host,onChange:x=>L({host:x.target.value}),placeholder:n("settings.network.host.placeholder"),autoComplete:"off",spellCheck:!1,"aria-invalid":l.host?!0:void 0,"aria-label":n("settings.network.host.label"),className:K})}),t.jsx(b,{label:n("settings.network.port.label"),hint:l.port,control:t.jsx("input",{type:"text",inputMode:"numeric",value:o.port,onChange:x=>L({port:x.target.value}),placeholder:n("settings.network.port.placeholder"),autoComplete:"off",spellCheck:!1,"aria-invalid":l.port?!0:void 0,"aria-label":n("settings.network.port.label"),className:K})}),t.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2 py-3",children:[t.jsx("button",{type:"button",onClick:I,disabled:j||u,className:"rounded-md border border-oai-gray-200 px-3 py-1.5 text-xs font-medium text-oai-gray-700 transition-colors hover:bg-oai-gray-100 disabled:opacity-50 dark:border-oai-gray-800 dark:text-oai-gray-300 dark:hover:bg-oai-gray-800",children:j?n("settings.network.test.testing"):n("settings.network.test")}),t.jsx("button",{type:"button",onClick:P,disabled:u||j,className:"rounded-md bg-oai-brand-500 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-oai-brand-600 disabled:opacity-50",children:u?n("settings.network.saving"):n("settings.network.save")})]}),y?t.jsx("p",{className:"py-2 text-xs text-oai-gray-500 dark:text-oai-gray-400",children:y.ok?n("settings.network.test.ok",{status:String(y.status??"")}):n("settings.network.test.fail",{error:y.error||""})}):null]},"manual-proxy-fields"):t.jsx("div",{className:"flex justify-end py-3",children:t.jsx("button",{type:"button",onClick:P,disabled:u,className:"rounded-md bg-oai-brand-500 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-oai-brand-600 disabled:opacity-50",children:u?n("settings.network.saving"):n("settings.network.save")})},"non-manual-save")}),p==="saved"?t.jsx("p",{className:"py-2 text-xs text-oai-gray-500 dark:text-oai-gray-400",children:n("settings.network.saved")}):null,p==="error"?t.jsx("p",{role:"alert",className:"py-2 text-xs text-red-600 dark:text-red-400",children:f?.unprotected?n("settings.network.save_error_unprotected",{error:f?.message||String(f||"")}):n("settings.network.save_error",{error:f?.message||String(f||"")})}):null]})}const ne="/functions/tokentracker-proxy-config",gn="/functions/tokentracker-proxy-test",pn={mode:"system",protocol:"http",host:"",port:"",effective:"none",applyError:null};function ae(e){return!e||typeof e.mode!="string"?null:{mode:e.mode,protocol:typeof e.protocol=="string"?e.protocol:"http",host:typeof e.host=="string"?e.host:"",port:e.port==null||e.port===0?"":String(e.port),effective:typeof e.effective=="string"?e.effective:"none",applyError:typeof e.applyError=="string"&&e.applyError.trim()?e.applyError:null}}async function hn(){const e=await fetch(ne,{method:"GET",headers:{Accept:"application/json"},cache:"no-store"});if(!e.ok)return null;const a=await e.json().catch(()=>null);return ae(a)}async function q(){const{getLocalApiAuthHeaders:e}=await Te(async()=>{const{getLocalApiAuthHeaders:a}=await import("./__vite-browser-external-CsbVaBbw.js").then(s=>s.d6);return{getLocalApiAuthHeaders:a}},__vite__mapDeps([0,1]));return e()}function mn(){const[e,a]=d.useState(!1),[s,i]=d.useState(!0),[o,r]=d.useState(pn);d.useEffect(()=>{if(!rt()){a(!1),i(!1);return}let u=!1;return(async()=>{try{const m=await hn();if(u)return;if(!m){a(!1),i(!1);return}r(m),a(!0),i(!1)}catch{u||(a(!1),i(!1))}})(),()=>{u=!0}},[]);const l=d.useCallback(async u=>{const m=await q(),p=await fetch(ne,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",...m},cache:"no-store",body:JSON.stringify({mode:u.mode,protocol:u.protocol,host:u.host,port:u.port===""?0:Number(u.port)})}),g=await p.json().catch(()=>null);if(!p.ok){const v=g&&typeof g.error=="string"?g.error:`HTTP ${p.status}`;throw new Error(v)}const f=ae(g);if(f&&r(f),g&&g.ok===!1){const v=g&&typeof g.applyError=="string"&&g.applyError||g&&typeof g.error=="string"&&g.error||`HTTP ${p.status}`,j=new Error(v);throw g.unprotected===!0&&(j.unprotected=!0),j}return f||g},[]),c=d.useCallback(async u=>{const m=await q(),p=await fetch(gn,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",...m},cache:"no-store",body:JSON.stringify({protocol:u.protocol,host:u.host,port:u.port===""?0:Number(u.port)})}),g=await p.json().catch(()=>null);if(!g||typeof g.ok!="boolean")throw new Error(g&&typeof g.error=="string"?g.error:`HTTP ${p.status}`);return g},[]);return{available:e,loading:s,config:o,save:l,testConnection:c}}const N={APPEARANCE:"appearance",NATIVE_APP:"native-app",NETWORK:"network",ACCOUNT:"account",LIMITS:"limits",LABS:"labs"};function bn({prefs:e}){return t.jsx(_,{options:[{value:$.USED,label:n("limits.settings.display_mode_used")},{value:$.REMAINING,label:n("limits.settings.display_mode_remaining")}],value:e.displayMode,onChange:e.setDisplayMode})}function Vn(){const e=We(),{available:a,settings:s,setSetting:i}=T(),o=mn(),{available:r}=o,l=s?.toastOnReset!==!1,c=s?.confettiOnReset!==!1,[u,m]=Ie(),p=u.get("section"),f=Object.values(N).includes(p)&&(p!==N.NATIVE_APP||a)&&(p!==N.NETWORK||r)?p:N.APPEARANCE,v=h=>{const y=new URLSearchParams(u);h===N.APPEARANCE?y.delete("section"):y.set("section",h),m(y,{replace:!0})},j=[{id:N.APPEARANCE,label:n("settings.section.appearance"),Icon:ft,content:t.jsx(an,{})},...a?[{id:N.NATIVE_APP,label:n("settings.section.menubar"),Icon:Y,content:t.jsx(on,{})}]:[],...r?[{id:N.NETWORK,label:n("settings.section.network"),Icon:Ge,content:t.jsx(dn,{proxySettings:o})}]:[],{id:N.ACCOUNT,label:n("settings.section.account"),Icon:yt,content:t.jsx(Vt,{})},{id:N.LIMITS,label:n("settings.section.limits"),Icon:Re,content:t.jsxs("div",{className:"space-y-4",children:[t.jsxs(E,{title:n("settings.section.limits"),children:[t.jsx(b,{label:n("limits.settings.display_mode_label"),control:t.jsx(bn,{prefs:e})}),t.jsx(b,{label:n("settings.menubar.toastOnReset"),hint:n("settings.menubar.toastOnResetHint"),control:t.jsx(k,{checked:l,disabled:!a,onChange:()=>i("toastOnReset",!l),ariaLabel:n("settings.menubar.toastOnReset")})}),t.jsx(b,{label:n("settings.menubar.confettiOnReset"),hint:n("settings.menubar.confettiOnResetHint"),control:t.jsx(k,{checked:c,disabled:!a,onChange:()=>i("confettiOnReset",!c),ariaLabel:n("settings.menubar.confettiOnReset")})})]}),t.jsx(E,{title:n("settings.limits.providers"),children:t.jsx(St,{prefs:e})})]})},{id:N.LABS,label:n("settings.section.labs"),Icon:ct,content:t.jsx(sn,{})}];return t.jsx("div",{className:"flex flex-1 flex-col font-oai text-oai-black antialiased dark:text-oai-white",children:t.jsx("main",{className:"flex-1 pb-12 pt-8 sm:pb-16 sm:pt-10",children:t.jsxs("div",{className:"mx-auto w-full max-w-5xl px-4 sm:px-6",children:[t.jsx("div",{className:"mb-7",children:t.jsx("h1",{className:"text-3xl font-semibold tracking-tight text-oai-black dark:text-white sm:text-4xl",children:n("settings.page.title")})}),t.jsxs("div",{className:"grid min-w-0 gap-6 md:grid-cols-[12rem_minmax(0,1fr)] md:gap-8 lg:grid-cols-[13.5rem_minmax(0,1fr)]",children:[t.jsx("aside",{className:"min-w-0 border-b border-oai-gray-200 pb-3 dark:border-oai-gray-800 md:border-b-0 md:border-r md:pb-0 md:pr-5",children:t.jsx("nav",{"aria-label":n("settings.page.title"),className:"flex gap-0 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden md:sticky md:top-6 md:flex-col md:gap-1 md:overflow-visible",children:j.map(({id:h,label:y,Icon:S})=>{const w=f===h;return t.jsxs("button",{id:`settings-nav-${h}`,type:"button","aria-current":w?"page":void 0,"aria-controls":`settings-panel-${h}`,onClick:()=>v(h),className:A("inline-flex min-h-10 min-w-max shrink-0 items-center gap-1.5 rounded-md px-2 py-2 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-oai-brand-500 md:w-full md:min-w-0 md:gap-2 md:px-3",w?"bg-oai-gray-100 text-oai-black dark:bg-oai-gray-800 dark:text-white":"text-oai-gray-500 hover:bg-oai-gray-50 hover:text-oai-gray-900 dark:text-oai-gray-400 dark:hover:bg-oai-gray-900 dark:hover:text-oai-gray-200"),children:[t.jsx(S,{className:A("h-4 w-4 shrink-0",w?"text-oai-black dark:text-white":"text-oai-gray-400 dark:text-oai-gray-500"),"aria-hidden":!0}),t.jsx("span",{className:"truncate",children:y})]},h)})})}),t.jsxs("div",{className:"min-w-0",children:[j.map(({id:h,label:y,content:S})=>t.jsx("section",{id:`settings-panel-${h}`,"aria-labelledby":`settings-nav-${h}`,"aria-label":y,"data-settings-panel":h,hidden:f!==h,children:S},h)),t.jsx(ln,{})]})]})]})})})}export{Vn as SettingsPage};
|