diff --git a/README.md b/README.md index f5cff575..226c5336 100644 --- a/README.md +++ b/README.md @@ -6,5 +6,5 @@ This branch contains the pre-built frontend assets for Claude Relay Service. These files are automatically generated by the CI/CD pipeline. -Version: 1.1.126 -Build Date: 2025-09-03 06:39:15 UTC +Version: 1.1.127 +Build Date: 2025-09-03 09:30:41 UTC diff --git a/assets/AccountsView-C6HIySEp.js b/assets/AccountsView-jNxq6qlC.js similarity index 99% rename from assets/AccountsView-C6HIySEp.js rename to assets/AccountsView-jNxq6qlC.js index 5f736237..583cd9de 100644 --- a/assets/AccountsView-C6HIySEp.js +++ b/assets/AccountsView-jNxq6qlC.js @@ -1,4 +1,4 @@ -import{a as lt}from"./element-plus-C5sO7D8l.js";import{r as $,aP as rt,o as q,V as ot,x as u,y as i,z as e,L as v,K as c,al as oe,aT as Me,aV as nt,aq as T,aY as it,C as M,O as C,c as he,P as k,q as Xe,I as $e,an as F,Q as pe,ac as me,a5 as Ze,R as de,u as te,J as Ke,Y as Fe,B as Be}from"./vue-vendor-Bsazo-x0.js";import{c as I,s as U,_ as ut}from"./index-Bs6H9Bpz.js";import{C as et}from"./ConfirmModal-B-klz2wY.js";import{C as He}from"./CustomDropdown-Bo2J7hEI.js";import"./vendor-C8JtMHuO.js";const qe=$(!1),Je=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),we=$(null);function tt(){return{showConfirmModal:qe,confirmOptions:Je,showConfirm:(J,A,D="继续",w="取消")=>new Promise(x=>{Je.value={title:J,message:A,confirmText:D,cancelText:w},we.value=x,qe.value=!0}),handleConfirm:()=>{qe.value=!1,we.value&&(we.value(!0),we.value=null)},handleCancel:()=>{qe.value=!1,we.value&&(we.value(!1),we.value=null)}}}const st=rt("accounts",()=>{const Y=$([]),X=$([]),g=$([]),J=$([]),A=$([]),D=$([]),w=$(!1),x=$(null),z=$(""),V=$("asc"),b=async()=>{w.value=!0,x.value=null;try{const m=await I.get("/admin/claude-accounts");if(m.success)Y.value=m.data||[];else throw new Error(m.message||"获取Claude账户失败")}catch(m){throw x.value=m.message,m}finally{w.value=!1}},R=async()=>{w.value=!0,x.value=null;try{const m=await I.get("/admin/claude-console-accounts");if(m.success)X.value=m.data||[];else throw new Error(m.message||"获取Claude Console账户失败")}catch(m){throw x.value=m.message,m}finally{w.value=!1}},j=async()=>{w.value=!0,x.value=null;try{const m=await I.get("/admin/bedrock-accounts");if(m.success)g.value=m.data||[];else throw new Error(m.message||"获取Bedrock账户失败")}catch(m){throw x.value=m.message,m}finally{w.value=!1}},L=async()=>{w.value=!0,x.value=null;try{const m=await I.get("/admin/gemini-accounts");if(m.success)J.value=m.data||[];else throw new Error(m.message||"获取Gemini账户失败")}catch(m){throw x.value=m.message,m}finally{w.value=!1}},W=async()=>{w.value=!0,x.value=null;try{const m=await I.get("/admin/openai-accounts");if(m.success)A.value=m.data||[];else throw new Error(m.message||"获取OpenAI账户失败")}catch(m){throw x.value=m.message,m}finally{w.value=!1}},B=async()=>{w.value=!0,x.value=null;try{const m=await I.get("/admin/azure-openai-accounts");if(m.success)D.value=m.data||[];else throw new Error(m.message||"获取Azure OpenAI账户失败")}catch(m){throw x.value=m.message,m}finally{w.value=!1}};return{claudeAccounts:Y,claudeConsoleAccounts:X,bedrockAccounts:g,geminiAccounts:J,openaiAccounts:A,azureOpenaiAccounts:D,loading:w,error:x,sortBy:z,sortOrder:V,fetchClaudeAccounts:b,fetchClaudeConsoleAccounts:R,fetchBedrockAccounts:j,fetchGeminiAccounts:L,fetchOpenAIAccounts:W,fetchAzureOpenAIAccounts:B,fetchAllAccounts:async()=>{w.value=!0,x.value=null;try{await Promise.all([b(),R(),j(),L(),W(),B()])}catch(m){throw x.value=m.message,m}finally{w.value=!1}},createClaudeAccount:async m=>{w.value=!0,x.value=null;try{const d=await I.post("/admin/claude-accounts",m);if(d.success)return await b(),d.data;throw new Error(d.message||"创建Claude账户失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},createClaudeConsoleAccount:async m=>{w.value=!0,x.value=null;try{const d=await I.post("/admin/claude-console-accounts",m);if(d.success)return await R(),d.data;throw new Error(d.message||"创建Claude Console账户失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},createBedrockAccount:async m=>{w.value=!0,x.value=null;try{const d=await I.post("/admin/bedrock-accounts",m);if(d.success)return await j(),d.data;throw new Error(d.message||"创建Bedrock账户失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},createGeminiAccount:async m=>{w.value=!0,x.value=null;try{const d=await I.post("/admin/gemini-accounts",m);if(d.success)return await L(),d.data;throw new Error(d.message||"创建Gemini账户失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},createOpenAIAccount:async m=>{w.value=!0,x.value=null;try{const d=await I.post("/admin/openai-accounts",m);if(d.success)return await W(),d.data;throw new Error(d.message||"创建OpenAI账户失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},createAzureOpenAIAccount:async m=>{w.value=!0,x.value=null;try{const d=await I.post("/admin/azure-openai-accounts",m);if(d.success)return await B(),d.data;throw new Error(d.message||"创建Azure OpenAI账户失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},updateClaudeAccount:async(m,d)=>{w.value=!0,x.value=null;try{const h=await I.put(`/admin/claude-accounts/${m}`,d);if(h.success)return await b(),h;throw new Error(h.message||"更新Claude账户失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},updateClaudeConsoleAccount:async(m,d)=>{w.value=!0,x.value=null;try{const h=await I.put(`/admin/claude-console-accounts/${m}`,d);if(h.success)return await R(),h;throw new Error(h.message||"更新Claude Console账户失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},updateBedrockAccount:async(m,d)=>{w.value=!0,x.value=null;try{const h=await I.put(`/admin/bedrock-accounts/${m}`,d);if(h.success)return await j(),h;throw new Error(h.message||"更新Bedrock账户失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},updateGeminiAccount:async(m,d)=>{w.value=!0,x.value=null;try{const h=await I.put(`/admin/gemini-accounts/${m}`,d);if(h.success)return await L(),h;throw new Error(h.message||"更新Gemini账户失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},updateOpenAIAccount:async(m,d)=>{w.value=!0,x.value=null;try{const h=await I.put(`/admin/openai-accounts/${m}`,d);if(h.success)return await W(),h;throw new Error(h.message||"更新OpenAI账户失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},updateAzureOpenAIAccount:async(m,d)=>{w.value=!0,x.value=null;try{const h=await I.put(`/admin/azure-openai-accounts/${m}`,d);if(h.success)return await B(),h;throw new Error(h.message||"更新Azure OpenAI账户失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},toggleAccount:async(m,d)=>{w.value=!0,x.value=null;try{let h;m==="claude"?h=`/admin/claude-accounts/${d}/toggle`:m==="claude-console"?h=`/admin/claude-console-accounts/${d}/toggle`:m==="bedrock"?h=`/admin/bedrock-accounts/${d}/toggle`:m==="gemini"?h=`/admin/gemini-accounts/${d}/toggle`:m==="openai"?h=`/admin/openai-accounts/${d}/toggle`:m==="azure_openai"?h=`/admin/azure-openai-accounts/${d}/toggle`:h=`/admin/openai-accounts/${d}/toggle`;const H=await I.put(h);if(H.success)return m==="claude"?await b():m==="claude-console"?await R():m==="bedrock"?await j():m==="gemini"?await L():m==="openai"?await W():m==="azure_openai"?await B():await W(),H;throw new Error(H.message||"切换状态失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},deleteAccount:async(m,d)=>{w.value=!0,x.value=null;try{let h;m==="claude"?h=`/admin/claude-accounts/${d}`:m==="claude-console"?h=`/admin/claude-console-accounts/${d}`:m==="bedrock"?h=`/admin/bedrock-accounts/${d}`:m==="gemini"?h=`/admin/gemini-accounts/${d}`:m==="openai"?h=`/admin/openai-accounts/${d}`:m==="azure_openai"?h=`/admin/azure-openai-accounts/${d}`:h=`/admin/openai-accounts/${d}`;const H=await I.delete(h);if(H.success)return m==="claude"?await b():m==="claude-console"?await R():m==="bedrock"?await j():m==="gemini"?await L():m==="openai"?await W():m==="azure_openai"?await B():await W(),H;throw new Error(H.message||"删除失败")}catch(h){throw x.value=h.message,h}finally{w.value=!1}},refreshClaudeToken:async m=>{w.value=!0,x.value=null;try{const d=await I.post(`/admin/claude-accounts/${m}/refresh`);if(d.success)return await b(),d;throw new Error(d.message||"Token刷新失败")}catch(d){throw x.value=d.message,d}finally{w.value=!1}},generateClaudeAuthUrl:async m=>{try{const d=await I.post("/admin/claude-accounts/generate-auth-url",m);if(d.success)return d.data;throw new Error(d.message||"生成授权URL失败")}catch(d){throw x.value=d.message,d}},exchangeClaudeCode:async m=>{try{const d=await I.post("/admin/claude-accounts/exchange-code",m);if(d.success)return d.data;throw new Error(d.message||"交换授权码失败")}catch(d){throw x.value=d.message,d}},generateClaudeSetupTokenUrl:async m=>{try{const d=await I.post("/admin/claude-accounts/generate-setup-token-url",m);if(d.success)return d.data;throw new Error(d.message||"生成Setup Token URL失败")}catch(d){throw x.value=d.message,d}},exchangeClaudeSetupTokenCode:async m=>{try{const d=await I.post("/admin/claude-accounts/exchange-setup-token-code",m);if(d.success)return d.data;throw new Error(d.message||"交换Setup Token授权码失败")}catch(d){throw x.value=d.message,d}},generateGeminiAuthUrl:async m=>{try{const d=await I.post("/admin/gemini-accounts/generate-auth-url",m);if(d.success)return d.data;throw new Error(d.message||"生成授权URL失败")}catch(d){throw x.value=d.message,d}},exchangeGeminiCode:async m=>{try{const d=await I.post("/admin/gemini-accounts/exchange-code",m);if(d.success)return d.data;throw new Error(d.message||"交换授权码失败")}catch(d){throw x.value=d.message,d}},generateOpenAIAuthUrl:async m=>{try{const d=await I.post("/admin/openai-accounts/generate-auth-url",m);if(d.success)return d.data;throw new Error(d.message||"生成授权URL失败")}catch(d){throw x.value=d.message,d}},exchangeOpenAICode:async m=>{try{const d=await I.post("/admin/openai-accounts/exchange-code",m);if(d.success)return d.data;throw new Error(d.message||"交换授权码失败")}catch(d){throw x.value=d.message,d}},sortAccounts:m=>{z.value===m?V.value=V.value==="asc"?"desc":"asc":(z.value=m,V.value="asc")},reset:()=>{Y.value=[],X.value=[],g.value=[],J.value=[],A.value=[],D.value=[],w.value=!1,x.value=null,z.value="",V.value="asc"}}}),dt={class:"space-y-4"},pt={class:"flex items-center justify-between"},mt={class:"flex cursor-pointer items-center"},gt={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},ct={class:"grid grid-cols-2 gap-4"},xt={class:"space-y-4"},yt={class:"flex items-center"},ft={key:0,class:"grid grid-cols-2 gap-4"},bt={class:"relative"},vt=["type"],Ye={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(Y,{emit:X}){const g=Y,J=X,A=$({...g.modelValue}),D=$(!!(A.value.username||A.value.password)),w=$(!1);q(()=>g.modelValue,V=>{JSON.stringify(V)!==JSON.stringify(A.value)&&(A.value={...V},D.value=!!(V.username||V.password))},{deep:!0}),q(()=>A.value.enabled,()=>{z()}),q(()=>A.value.type,()=>{z()}),q(()=>A.value.host,()=>{z()}),q(()=>A.value.port,()=>{z()}),q(()=>A.value.username,()=>{z()}),q(()=>A.value.password,()=>{z()}),q(D,V=>{V||(A.value.username="",A.value.password="",z())});let x=null;function z(){x&&clearTimeout(x),x=setTimeout(()=>{const V={...A.value};D.value||(V.username="",V.password=""),J("update:modelValue",V)},100)}return ot(()=>{x&&clearTimeout(x)}),(V,b)=>(i(),u("div",dt,[e("div",pt,[b[9]||(b[9]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",mt,[c(e("input",{"onUpdate:modelValue":b[0]||(b[0]=R=>A.value.enabled=R),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[oe,A.value.enabled]]),b[8]||(b[8]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),A.value.enabled?(i(),u("div",gt,[b[17]||(b[17]=Me('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
Claude Code 需要 Node.js 环境才能运行。
方法一:官网下载(推荐)
https://nodejs.org/.msi 文件 方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
安装完成后,打开 PowerShell 或 CMD,输入以下命令:
如果显示版本号,说明安装成功了!
打开 PowerShell 或 CMD,运行以下命令:
这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
查看已设置的环境变量:
💡 设置后需要重新打开 PowerShell 窗口才能生效。
',3))])])]),e("div",D,[t[14]||(t[14]=d('设置完环境变量后,可以通过以下命令验证是否设置成功:
在 PowerShell 中验证:
在 PowerShell 中验证:
现在你可以开始使用 Claude Code 了!
这通常是权限问题,尝试以下解决方法:
npm config set prefix %APPDATA%\\npm如果遇到执行策略限制,运行:
设置永久环境变量后需要:
echo $env:ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
方法二:官网下载
https://nodejs.org/.pkg 文件 sudo安装完成后,打开 Terminal,输入以下命令:
如果显示版本号,说明安装成功了!
打开 Terminal,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在 Terminal 中验证:
在 Terminal 中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-global如果系统阻止运行 Claude Code:
sudo spctl --master-disable检查以下几点:
echo $ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用官方仓库(推荐)
方法二:使用系统包管理器
虽然版本可能不是最新的,但对于基本使用已经足够:
sudo安装完成后,打开终端,输入以下命令:
如果显示版本号,说明安装成功了!
打开终端,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在终端中验证:
在终端中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-globalexport PATH=~/.npm-global/bin:$PATH某些 Linux 发行版需要安装额外依赖:
检查以下几点:
source ~/.bashrcecho $ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:官网下载(推荐)
https://nodejs.org/.msi 文件 方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
安装完成后,打开 PowerShell 或 CMD,输入以下命令:
如果显示版本号,说明安装成功了!
打开 PowerShell 或 CMD,运行以下命令:
这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
查看已设置的环境变量:
💡 设置后需要重新打开 PowerShell 窗口才能生效。
',3))])])]),e("div",D,[t[14]||(t[14]=d('设置完环境变量后,可以通过以下命令验证是否设置成功:
在 PowerShell 中验证:
在 PowerShell 中验证:
现在你可以开始使用 Claude Code 了!
这通常是权限问题,尝试以下解决方法:
npm config set prefix %APPDATA%\\npm如果遇到执行策略限制,运行:
设置永久环境变量后需要:
echo $env:ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
方法二:官网下载
https://nodejs.org/.pkg 文件 sudo安装完成后,打开 Terminal,输入以下命令:
如果显示版本号,说明安装成功了!
打开 Terminal,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在 Terminal 中验证:
在 Terminal 中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-global如果系统阻止运行 Claude Code:
sudo spctl --master-disable检查以下几点:
echo $ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用官方仓库(推荐)
方法二:使用系统包管理器
虽然版本可能不是最新的,但对于基本使用已经足够:
sudo安装完成后,打开终端,输入以下命令:
如果显示版本号,说明安装成功了!
打开终端,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在终端中验证:
在终端中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-globalexport PATH=~/.npm-global/bin:$PATH某些 Linux 发行版需要安装额外依赖:
检查以下几点:
source ~/.bashrcecho $ANTHROPIC_BASE_URLDaily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
Daily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
Sign in to your account to manage your API keys
Sign in to your account to manage your API keys
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
Claude Code 需要 Node.js 环境才能运行。
方法一:官网下载(推荐)
https://nodejs.org/.msi 文件 方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
安装完成后,打开 PowerShell 或 CMD,输入以下命令:
如果显示版本号,说明安装成功了!
打开 PowerShell 或 CMD,运行以下命令:
这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
查看已设置的环境变量:
💡 设置后需要重新打开 PowerShell 窗口才能生效。
',3))])])]),e("div",D,[t[14]||(t[14]=d('设置完环境变量后,可以通过以下命令验证是否设置成功:
在 PowerShell 中验证:
在 PowerShell 中验证:
现在你可以开始使用 Claude Code 了!
这通常是权限问题,尝试以下解决方法:
npm config set prefix %APPDATA%\\npm如果遇到执行策略限制,运行:
设置永久环境变量后需要:
echo $env:ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
方法二:官网下载
https://nodejs.org/.pkg 文件 sudo安装完成后,打开 Terminal,输入以下命令:
如果显示版本号,说明安装成功了!
打开 Terminal,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在 Terminal 中验证:
在 Terminal 中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-global如果系统阻止运行 Claude Code:
sudo spctl --master-disable检查以下几点:
echo $ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用官方仓库(推荐)
方法二:使用系统包管理器
虽然版本可能不是最新的,但对于基本使用已经足够:
sudo安装完成后,打开终端,输入以下命令:
如果显示版本号,说明安装成功了!
打开终端,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在终端中验证:
在终端中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-globalexport PATH=~/.npm-global/bin:$PATH某些 Linux 发行版需要安装额外依赖:
检查以下几点:
source ~/.bashrcecho $ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:官网下载(推荐)
https://nodejs.org/.msi 文件 方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
安装完成后,打开 PowerShell 或 CMD,输入以下命令:
如果显示版本号,说明安装成功了!
打开 PowerShell 或 CMD,运行以下命令:
这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
查看已设置的环境变量:
💡 设置后需要重新打开 PowerShell 窗口才能生效。
',3))])])]),e("div",D,[t[14]||(t[14]=d('设置完环境变量后,可以通过以下命令验证是否设置成功:
在 PowerShell 中验证:
在 PowerShell 中验证:
现在你可以开始使用 Claude Code 了!
这通常是权限问题,尝试以下解决方法:
npm config set prefix %APPDATA%\\npm如果遇到执行策略限制,运行:
设置永久环境变量后需要:
echo $env:ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
方法二:官网下载
https://nodejs.org/.pkg 文件 sudo安装完成后,打开 Terminal,输入以下命令:
如果显示版本号,说明安装成功了!
打开 Terminal,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在 Terminal 中验证:
在 Terminal 中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-global如果系统阻止运行 Claude Code:
sudo spctl --master-disable检查以下几点:
echo $ANTHROPIC_BASE_URLClaude Code 需要 Node.js 环境才能运行。
方法一:使用官方仓库(推荐)
方法二:使用系统包管理器
虽然版本可能不是最新的,但对于基本使用已经足够:
sudo安装完成后,打开终端,输入以下命令:
如果显示版本号,说明安装成功了!
打开终端,运行以下命令:
如果遇到权限问题,可以使用 sudo:
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
在终端中验证:
在终端中验证:
现在你可以开始使用 Claude Code 了!
尝试以下解决方法:
sudo npm install -g @anthropic-ai/claude-codenpm config set prefix ~/.npm-globalexport PATH=~/.npm-global/bin:$PATH某些 Linux 发行版需要安装额外依赖:
检查以下几点:
source ~/.bashrcecho $ANTHROPIC_BASE_URLDaily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
Daily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
Sign in to your account to manage your API keys
Sign in to your account to manage your API keys
=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,s=[];let n,o,a;for(n=0,o=e.length;n m&&(m=_),h=(d*h+y)/++d):(v(),i.lineTo(y,_),g=k,d=0,p=m=_),b=_}v()}function pi(i){const t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?cl:ll}function hl(i){return i.stepped?la:i.tension||i.cubicInterpolationMode==="monotone"?ca:At}function dl(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Wn(i,t.options),i.stroke(n)}function ul(i,t,e,s){const{segments:n,options:o}=t,a=pi(t);for(const r of n)Wn(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}const fl=typeof Path2D=="function";function gl(i,t,e,s){fl&&!t.options.segment?dl(i,t,e,s):ul(i,t,e,s)}class bt extends ot{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){const n=s.spanGaps?this._loop:this._fullLoop;ta(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=pa(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){const s=this.options,n=t[e],o=this.points,a=Pn(this,{property:e,start:n,end:n});if(!a.length)return;const r=[],l=hl(s);let c,h;for(c=0,h=a.length;cc.box.fullSize),!0),s=Xt(Ut(t,"left"),!0),n=Xt(Ut(t,"right")),o=Xt(Ut(t,"top"),!0),a=Xt(Ut(t,"bottom")),r=ds(t,"x"),l=ds(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ut(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function us(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function Ln(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function er(i,t,e,s){const{pos:n,box:o}=e,a=i.maxPadding;if(!T(n)){e.size&&(i[n]-=e.size);const d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&Ln(a,o.getPadding());const r=Math.max(0,t.outerWidth-us(a,i,"left","right")),l=Math.max(0,t.outerHeight-us(a,i,"top","bottom")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function ir(i){const t=i.maxPadding;function e(s){const n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function sr(i,t){const e=t.maxPadding;function s(n){const o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?["left","right"]:["top","bottom"])}function Jt(i,t,e,s){const n=[];let o,a,r,l,c,h;for(o=0,a=i.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});const h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);Ln(u,J(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Za(l.concat(c),d);Jt(r.fullSize,f,d,g),Jt(l,f,d,g),Jt(c,f,d,g)&&Jt(l,f,d,g),ir(f),fs(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,fs(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},I(r.chartArea,p=>{const m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class Rn{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}}class nr extends Rn{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Te="$chartjs",or={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},gs=i=>i===null||i==="";function ar(i,t){const e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[Te]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",gs(n)){const o=Ji(i,"width");o!==void 0&&(i.width=o)}if(gs(s))if(i.style.height==="")i.height=i.width/(t||2);else{const o=Ji(i,"height");o!==void 0&&(i.height=o)}return i}const In=ra?{passive:!0}:!1;function rr(i,t,e){i&&i.addEventListener(t,e,In)}function lr(i,t,e){i&&i.canvas&&i.canvas.removeEventListener(t,e,In)}function cr(i,t){const e=or[i.type]||i.type,{x:s,y:n}=Ct(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function We(i,t){for(const e of i)if(e===t||e.contains(t))return!0}function hr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.addedNodes,s),a=a&&!We(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function dr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.removedNodes,s),a=a&&!We(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}const he=new Map;let ps=0;function En(){const i=window.devicePixelRatio;i!==ps&&(ps=i,he.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function ur(i,t){he.size||window.addEventListener("resize",En),he.set(i,t)}function fr(i){he.delete(i),he.size||window.removeEventListener("resize",En)}function gr(i,t,e){const s=i.canvas,n=s&&Ii(s);if(!n)return;const o=hn((r,l)=>{const c=n.clientWidth;e(r,l),ci==="left"?"right":i==="right"?"left":i,ms=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e,bs=(i,t)=>Math.min(t||i,i);function xs(i,t){const e=[],s=i.length/t,n=i.length;let o=0;for(;o({width:a[P]||0,height:r[P]||0});return{first:w(0),last:w(e-1),widest:w(k),highest:w(S),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return fo(this._alignToPixels?wt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&te.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,s={meta:t,index:t.index,cancelable:!0},n=Dn(this,t);this.notifyPlugins("beforeDatasetDraw",s)!==!1&&(n&&$e(e,n),t.controller.draw(),n&&Ye(e),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(t){return gt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){const o=qa.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],s=this._metasets;let n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=vt(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){const s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){const n=s?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);re(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),ht.remove(this),t=0,e=this.data.datasets.length;ti.height-s/2?"bottom":"center"}function cc(i,t,e,s){const{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function hc(i,t,e,s){const{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i;let c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),cc(c,i,t,e)&&(c="center"),c}function Ns(i,t,e){const s=e.yAlign||t.yAlign||lc(i,e);return{xAlign:e.xAlign||t.xAlign||hc(i,t,e,s),yAlign:s}}function dc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function uc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Hs(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a);let g=dc(t,r);const p=uc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function Se(i,t,e){const s=J(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function js(i){return at([],dt(i))}function fc(i,t,e){return vt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function $s(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}const Gn={beforeTitle:ct,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndex"u"?Gn[t].call(e,s):n}class xi extends ot{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new Cn(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=fc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=Q(s,"beforeTitle",this,t),o=Q(s,"title",this,t),a=Q(s,"afterTitle",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}getBeforeBody(t,e){return js(Q(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:s}=e,n=[];return I(t,o=>{const a={before:[],lines:[],after:[]},r=$s(s,o);at(a.before,dt(Q(r,"beforeLabel",this,o))),at(a.lines,Q(r,"label",this,o)),at(a.after,dt(Q(r,"afterLabel",this,o))),n.push(a)}),n}getAfterBody(t,e){return js(Q(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,n=Q(s,"beforeFooter",this,t),o=Q(s,"footer",this,t),a=Q(s,"afterFooter",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],a=[];let r=[],l,c;for(l=0,c=e.length;ln?{start:t-e,end:t}:{start:t,end:t+e}}function kc(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;l{const n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?kc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+st(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t+p)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){const o=this.options,a=o.ticks.callback;if(a)return z(a,[t,e,s],this);const r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ft(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ft(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);const c=a-o;return c?r+(l-r)*(t-o)/c:r}class ki extends ue{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=we(e,this.min),this._tableRange=we(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let a,r,l,c,h;for(a=0,r=t.length;a{const[a,s]=[t[l],t[$r[l]]];return(s>0?a[s].offset:0)>=n?Ov(e,t,0,s,n,l):sN(e,t,rs(0,s),n,l)},Lv=({totalRow:e},{estimatedRowHeight:t,lastVisitedRowIndex:n,row:l})=>{let a=0;if(n>=e&&(n=e-1),n>=0){const i=l[n];a=i.offset+i.size}const r=(e-n-1)*t;return a+r},Bv=({totalColumn:e},{column:t,estimatedColumnWidth:n,lastVisitedColumnIndex:l})=>{let a=0;if(l>e&&(l=e-1),l>=0){const i=t[l];a=i.offset+i.size}const r=(e-l-1)*n;return a+r},rN={column:Bv,row:Lv},uc=(e,t,n,l,a,s,r)=>{const[i,u]=[s==="row"?e.height:e.width,rN[s]],c=sl(e,t,a,s),d=u(e,a),f=rs(0,Rv(d-i,c.offset)),m=rs(0,c.offset-i+r+c.size);switch(n===Ns&&(l>=m-i&&l<=f+i?n=xn:n=Jn),n){case ta:return f;case na:return m;case Jn:return Math.round(m+(f-m)/2);case xn:default:return l>=m&&l<=f?l:m>f||l0&&n.lazy&&n.defaultExpandAll&&!this.isLeafByUser&&this.expand(),ke(this.data)||gc(this,this.data),!this.data)return;const a=n.defaultExpandedKeys,s=n.key;s&&!qt(this.key)&&a&&a.includes(this.key)&&this.expand(null,n.autoExpandParent),s&&n.currentNodeKey!==void 0&&this.key===n.currentNodeKey&&(n.currentNode=this,n.currentNode.isCurrent=!0),n.lazy&&n._initDefaultCheckedNode(this),this.updateLeafState(),(this.level===1||((t=this.parent)==null?void 0:t.expanded)===!0)&&(this.canFocus=!0)}setData(t){ke(t)||gc(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&ke(this.data)?n=this.data:n=Ma(this,"children")||[];for(let l=0,a=n.length;l-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(l=>l===t||n&&l.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,l){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof Wl)){if(!l){const a=this.getChildren(!0);a!=null&&a.includes(t.data)||(vt(n)||n<0?a==null||a.push(t.data):a==null||a.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=kt(new Wl(t)),t instanceof Wl&&t.initialize()}t.level=this.level+1,vt(n)||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let l;n&&(l=this.childNodes.indexOf(n)),this.insertChild(t,l)}insertAfter(t,n){let l;n&&(l=this.childNodes.indexOf(n),l!==-1&&(l+=1)),this.insertChild(t,l)}removeChild(t){const n=this.getChildren()||[],l=n.indexOf(t.data);l>-1&&n.splice(l,1);const a=this.childNodes.indexOf(t);a>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(a,1)),this.updateLeafState()}removeChildByData(t){let n=null;for(let l=0;l-1)return new Date((E==="X"?1e3:1)*R);var k=h(E)(R),H=k.year,q=k.month,U=k.day,z=k.hours,fe=k.minutes,Q=k.seconds,ne=k.milliseconds,de=k.zone,G=k.week,K=new Date,be=U||(H||q?1:K.getDate()),ve=H||K.getFullYear(),ct=0;H&&!q||(ct=q>0?q-1:K.getMonth());var ut,lt=z||0,dt=fe||0,Dt=Q||0,Ct=ne||0;return de?new Date(Date.UTC(ve,ct,be,lt,dt,Dt,Ct+60*de.offset*1e3)):M?new Date(Date.UTC(ve,ct,be,lt,dt,Dt,Ct)):(ut=new Date(ve,ct,be,lt,dt,Dt,Ct),G&&(ut=C(ut).week(G).toDate()),ut)}catch{return new Date("")}}(A,L,_,w),this.init(),j&&j!==!0&&(this.$L=this.locale(j).$L),N&&A!=this.format(L)&&(this.$d=new Date("")),f={}}else if(L instanceof Array)for(var $=L.length,T=1;T<=$;T+=1){F[1]=L[T-1];var O=w.apply(this,F);if(O.isValid()){this.$d=O.$d,this.$L=O.$L,this.init();break}T===$&&(this.$d=new Date(""))}else S.call(this,x)}}})})(sa);var Up=sa.exports;const qy=He(Up);var aa={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Ie,function(){return function(n,r){var i=r.prototype,o=i.format;i.format=function(s){var a=this,f=this.$locale();if(!this.isValid())return o.bind(this)(s);var c=this.$utils(),u=(s||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(l){switch(l){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return f.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return f.ordinal(a.week(),"W");case"w":case"ww":return c.s(a.week(),l==="w"?1:2,"0");case"W":case"WW":return c.s(a.isoWeek(),l==="W"?1:2,"0");case"k":case"kk":return c.s(String(a.$H===0?24:a.$H),l==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return l}});return o.bind(this)(u)}}})})(aa);var Yp=aa.exports;const Uy=He(Yp);var fa={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Ie,function(){var n="week",r="year";return function(i,o,s){var a=o.prototype;a.week=function(f){if(f===void 0&&(f=null),f!==null)return this.add(7*(f-this.week()),"day");var c=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var u=s(this).startOf(r).add(1,r).date(c),l=s(this).endOf(n);if(u.isBefore(l))return 1}var g=s(this).startOf(r).date(c).startOf(n).subtract(1,"millisecond"),y=this.diff(g,n,!0);return y<0?s(this).startOf("week").week():Math.ceil(y)},a.weeks=function(f){return f===void 0&&(f=null),this.week(f)}}})})(fa);var Wp=fa.exports;const Yy=He(Wp);var ca={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Ie,function(){return function(n,r){r.prototype.weekYear=function(){var i=this.month(),o=this.week(),s=this.year();return o===1&&i===11?s+1:i===0&&o>=52?s-1:s}}})})(ca);var zp=ca.exports;const Wy=He(zp);var ua={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Ie,function(){return function(n,r,i){r.prototype.dayOfYear=function(o){var s=Math.round((i(this).startOf("day")-i(this).startOf("year"))/864e5)+1;return o==null?s:this.add(o-s,"day")}}})})(ua);var Vp=ua.exports;const zy=He(Vp);var la={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Ie,function(){return function(n,r){r.prototype.isSameOrAfter=function(i,o){return this.isSame(i,o)||this.isAfter(i,o)}}})})(la);var Gp=la.exports;const Vy=He(Gp);var da={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Ie,function(){return function(n,r){r.prototype.isSameOrBefore=function(i,o){return this.isSame(i,o)||this.isBefore(i,o)}}})})(da);var Xp=da.exports;const Gy=He(Xp);function Ke(){return Ke=Object.assign?Object.assign.bind():function(e){for(var t=1;t0)return;if(un){let t=un;for(un=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;cn;){let t=cn;for(cn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function ci(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ui(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),ur(s),sc(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function $s(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ai(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ai(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===vn)||(e.globalVersion=vn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!$s(e))))return;e.flags|=2;const t=e.dep,n=ce,s=Be;ce=e,Be=!0;try{ci(e);const r=e.fn(e._value);(t.version===0||wt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{ce=n,Be=s,ui(e),e.flags&=-3}}function ur(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let o=n.computed.deps;o;o=o.nextDep)ur(o,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function sc(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Be=!0;const fi=[];function ct(){fi.push(Be),Be=!1}function ut(){const e=fi.pop();Be=e===void 0?!0:e}function Nr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=ce;ce=void 0;try{t()}finally{ce=n}}}let vn=0;class rc{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ls{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ce||!Be||ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ce)n=this.activeLink=new rc(ce,this),ce.deps?(n.prevDep=ce.depsTail,ce.depsTail.nextDep=n,ce.depsTail=n):ce.deps=ce.depsTail=n,di(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ce.depsTail,n.nextDep=void 0,ce.depsTail.nextDep=n,ce.depsTail=n,ce.deps===n&&(ce.deps=s)}return n}trigger(t){this.version++,vn++,this.notify(t)}notify(t){lr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{cr()}}}function di(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)di(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Gn=new WeakMap,Mt=Symbol(""),Ds=Symbol(""),yn=Symbol("");function ve(e,t,n){if(Be&&ce){let s=Gn.get(e);s||Gn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new ls),r.map=s,r.key=n),r.track()}}function rt(e,t,n,s,r,o){const i=Gn.get(e);if(!i){vn++;return}const l=c=>{c&&c.trigger()};if(lr(),t==="clear")i.forEach(l);else{const c=j(e),a=c&&rr(n);if(c&&n==="length"){const u=Number(s);i.forEach((f,h)=>{(h==="length"||h===yn||!Ke(h)&&h>=u)&&l(f)})}else switch((n!==void 0||i.has(void 0))&&l(i.get(n)),a&&l(i.get(yn)),t){case"add":c?a&&l(i.get("length")):(l(i.get(Mt)),Wt(e)&&l(i.get(Ds)));break;case"delete":c||(l(i.get(Mt)),Wt(e)&&l(i.get(Ds)));break;case"set":Wt(e)&&l(i.get(Mt));break}}cr()}function oc(e,t){const n=Gn.get(e);return n&&n.get(t)}function Vt(e){const t=J(e);return t===e?t:(ve(t,"iterate",yn),$e(e)?t:t.map(pe))}function cs(e){return ve(e=J(e),"iterate",yn),e}const ic={__proto__:null,[Symbol.iterator](){return Es(this,Symbol.iterator,pe)},concat(...e){return Vt(this).concat(...e.map(t=>j(t)?Vt(t):t))},entries(){return Es(this,"entries",e=>(e[1]=pe(e[1]),e))},every(e,t){return tt(this,"every",e,t,void 0,arguments)},filter(e,t){return tt(this,"filter",e,t,n=>n.map(pe),arguments)},find(e,t){return tt(this,"find",e,t,pe,arguments)},findIndex(e,t){return tt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return tt(this,"findLast",e,t,pe,arguments)},findLastIndex(e,t){return tt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return tt(this,"forEach",e,t,void 0,arguments)},includes(...e){return xs(this,"includes",e)},indexOf(...e){return xs(this,"indexOf",e)},join(e){return Vt(this).join(e)},lastIndexOf(...e){return xs(this,"lastIndexOf",e)},map(e,t){return tt(this,"map",e,t,void 0,arguments)},pop(){return tn(this,"pop")},push(...e){return tn(this,"push",e)},reduce(e,...t){return Lr(this,"reduce",e,t)},reduceRight(e,...t){return Lr(this,"reduceRight",e,t)},shift(){return tn(this,"shift")},some(e,t){return tt(this,"some",e,t,void 0,arguments)},splice(...e){return tn(this,"splice",e)},toReversed(){return Vt(this).toReversed()},toSorted(e){return Vt(this).toSorted(e)},toSpliced(...e){return Vt(this).toSpliced(...e)},unshift(...e){return tn(this,"unshift",e)},values(){return Es(this,"values",pe)}};function Es(e,t,n){const s=cs(e),r=s[t]();return s!==e&&!$e(e)&&(r._next=r.next,r.next=()=>{const o=r._next();return o.value&&(o.value=n(o.value)),o}),r}const lc=Array.prototype;function tt(e,t,n,s,r,o){const i=cs(e),l=i!==e&&!$e(e),c=i[t];if(c!==lc[t]){const f=c.apply(e,o);return l?pe(f):f}let a=n;i!==e&&(l?a=function(f,h){return n.call(this,pe(f),h,e)}:n.length>2&&(a=function(f,h){return n.call(this,f,h,e)}));const u=c.call(i,a,s);return l&&r?r(u):u}function Lr(e,t,n,s){const r=cs(e);let o=n;return r!==e&&($e(e)?n.length>3&&(o=function(i,l,c){return n.call(this,i,l,c,e)}):o=function(i,l,c){return n.call(this,i,pe(l),c,e)}),r[t](o,...s)}function xs(e,t,n){const s=J(e);ve(s,"iterate",yn);const r=s[t](...n);return(r===-1||r===!1)&&dr(n[0])?(n[0]=J(n[0]),s[t](...n)):r}function tn(e,t,n=[]){ct(),lr();const s=J(e)[t].apply(e,n);return cr(),ut(),s}const cc=tr("__proto__,__v_isRef,__isVue"),hi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ke));function uc(e){Ke(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class pi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return o;if(n==="__v_raw")return s===(r?o?_c:yi:o?vi:mi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const i=j(t);if(!r){let c;if(i&&(c=ic[n]))return c;if(n==="hasOwnProperty")return uc}const l=Reflect.get(t,n,fe(t)?t:s);return(Ke(n)?hi.has(n):cc(n))||(r||ve(t,"get",n),o)?l:fe(l)?i&&rr(n)?l:l.value:se(l)?r?us(l):On(l):l}}class gi extends pi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let o=t[n];if(!this._isShallow){const c=St(o);if(!$e(s)&&!St(s)&&(o=J(o),s=J(s)),!j(t)&&fe(o)&&!fe(s))return c?!1:(o.value=s,!0)}const i=j(t)&&rr(n)?Number(n)